@diplodoc/tabs-extension 3.10.8-transform5.2 → 3.10.8-transform5.3
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 +51 -0
- package/build/plugin/directive.d.ts +18 -0
- package/build/plugin/find.d.ts +41 -1
- package/build/plugin/index-node.d.ts +8 -2
- package/build/plugin/index-node.js +1122 -29
- package/build/plugin/index-node.js.map +4 -4
- package/build/plugin/index.d.ts +4 -1
- package/build/plugin/index.js +1110 -28
- package/build/plugin/index.js.map +4 -4
- package/build/plugin/transform.d.ts +13 -6
- package/build/runtime/index.js +1 -1
- package/package.json +9 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/@diplodoc/utils/build/cjs/common/index.js", "../../node_modules/github-slugger/regex.js", "../../node_modules/github-slugger/index.js", "../../node_modules/slugify/slugify.js", "../../src/plugin/index-node.ts", "../../src/plugin/transform.ts", "../../src/common.ts", "../../src/plugin/utils/strings.ts", "../../src/plugin/utils/tabs.ts", "../../src/tab-key.ts", "../../src/plugin/utils/index.ts", "../../src/plugin/variants/regular.ts", "../../src/plugin/variants/radio.ts", "../../src/plugin/variants/dropdown.ts", "../../src/plugin/variants/accordion.ts", "../../src/plugin/variants/index.ts", "../../src/plugin/generate.ts", "../../src/plugin/find.ts"],
|
|
4
|
-
"sourcesContent": ["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/lib/common/index.ts\nvar index_exports = {};\n__export(index_exports, {\n AttrsParser: () => AttrsParser,\n createIDGenerator: () => createIDGenerator,\n createIDGeneratorByStrategy: () => createIDGeneratorByStrategy,\n createLoadQueue: () => createLoadQueue,\n formatHref: () => formatHref,\n getQueueStore: () => getQueueStore,\n getScriptStore: () => getScriptStore,\n isBrowser: () => isBrowser,\n parseHref: () => parseHref,\n parseMdAttrs: () => parseMdAttrs\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/lib/common/attrs.ts\nvar AttrsParser = class {\n constructor(value) {\n this.DELIMITER = \"=\";\n this.SEPARATOR = \" \";\n this.QUOTATION = '\"';\n /* allowed in keys / values chars */\n this.ALLOWED_CHARS = /[a-zA-Z0-9_\\- {}.|/]/;\n /* allowed in all query chars */\n this.VALIDATION_CHARS = /[a-zA-Z0-9_\\- {}.#=\"|/]/;\n this.state = {};\n this.#key = \"\";\n this.#pending = \"\";\n this.#isInsideQuotation = false;\n this.#didQuotationClosed = false;\n this.#selectors = {\n id: /#/,\n class: /\\./,\n attr: /[a-zA-Z-_]/\n };\n this.#handlers = Object.entries(this.#selectors);\n if (value) {\n this.parse(value);\n }\n }\n #key;\n #pending;\n #isInsideQuotation;\n #didQuotationClosed;\n #currentKeyType;\n #selectors;\n #handlers;\n parse(target) {\n const content = this.extract(target.trim());\n if (!content) {\n return {};\n }\n this.clear();\n this.state = {};\n for (const char of content) {\n this.next(char);\n }\n this.next(this.SEPARATOR);\n this.clear();\n return this.state;\n }\n apply(target) {\n const { attr: singleKeyAttrs = [], ...fullAttrs } = this.state;\n for (const [property, values] of Object.entries(fullAttrs)) {\n target.attrJoin(property, values.join(\" \"));\n }\n for (const attr of singleKeyAttrs) {\n target.attrJoin(attr, \"true\");\n }\n }\n extract(target) {\n if (!target.startsWith(\"{\")) {\n return false;\n }\n let balance = 1;\n for (let i = 1; i < target.length; i++) {\n const char = target[i];\n if (char === \"}\") {\n balance--;\n }\n if (char === \"{\") {\n balance++;\n }\n if (balance === 0) {\n const contentInside = target.slice(1, i).trim();\n return contentInside;\n }\n if (balance < 0) {\n return false;\n }\n if (!this.VALIDATION_CHARS.test(char)) {\n return false;\n }\n }\n return false;\n }\n next(value) {\n if (!this.#currentKeyType) {\n this.#currentKeyType = this.type(value);\n if (this.#currentKeyType === \"attr\") {\n this.#pending = value;\n }\n return;\n }\n if (this.isSeparator(value)) {\n if (!this.#pending) {\n if (!this.#isInsideQuotation) {\n this.append(this.#key, \" \");\n this.clear();\n return;\n }\n }\n if (!this.#key && this.#pending) {\n this.append();\n this.clear();\n return;\n }\n if (this.#isInsideQuotation && !this.#didQuotationClosed) {\n this.#pending += value;\n return;\n }\n if (this.#isInsideQuotation && this.#didQuotationClosed) {\n this.append(this.#key, this.#pending);\n }\n if (!this.#isInsideQuotation && !this.#didQuotationClosed) {\n this.append(this.#key, this.#pending);\n }\n this.clear();\n return;\n }\n if (this.isAllowedChar(value)) {\n this.#pending += value;\n return;\n }\n if (this.isQuotation(value)) {\n if (this.#isInsideQuotation) {\n this.#didQuotationClosed = true;\n } else {\n this.#isInsideQuotation = true;\n }\n }\n if (this.isDelimiter(value)) {\n if (this.#key) {\n this.#pending += value;\n return;\n }\n this.#key = this.#pending;\n this.#pending = \"\";\n }\n }\n type(of) {\n return this.#handlers.find(([_, regex]) => regex.test(of))?.[0];\n }\n append(key = this.#currentKeyType, value = this.#pending) {\n if (!key) {\n return;\n }\n if (!this.state[key]) {\n this.state[key] = [];\n }\n this.state[key].push(value);\n }\n clear() {\n this.#key = \"\";\n this.#pending = \"\";\n this.#isInsideQuotation = false;\n this.#didQuotationClosed = false;\n this.#currentKeyType = void 0;\n }\n isDelimiter(target) {\n return target === this.DELIMITER;\n }\n isSeparator(target) {\n return target === this.SEPARATOR;\n }\n isQuotation(target) {\n return target === this.QUOTATION;\n }\n isAllowedChar(target) {\n return this.ALLOWED_CHARS.test(target);\n }\n};\n\n// src/lib/common/parse-md-attrs.ts\nfunction parseMdAttrs(md, src, pos, max) {\n if (pos >= max) {\n return null;\n }\n if (src.charCodeAt(pos) !== 123) {\n return null;\n }\n const attrs = {};\n ++pos;\n pos = skipBlanks(src, pos, max);\n for (; pos < max; pos = skipBlanks(src, pos, max)) {\n if (src.charCodeAt(pos) === 125) {\n ++pos;\n return { pos, attrs };\n }\n const c = src.charCodeAt(pos);\n if (c === 35) {\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n pos = rst.pos;\n const key = \"id\", value = rst.name;\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n } else if (c === 46) {\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n pos = rst.pos;\n const key = \"class\", value = rst.name;\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n } else {\n let rst = parseAttrName(src, pos, max);\n if (rst === null) {\n return null;\n }\n const key = rst.name;\n pos = rst.pos;\n pos = skipBlanks(src, pos, max);\n if (pos >= max) {\n return null;\n }\n let value;\n if (src.charCodeAt(pos) === 61) {\n ++pos;\n pos = skipBlanks(src, pos, max);\n if (pos >= max) {\n return null;\n }\n const c2 = src.charCodeAt(pos);\n if (c2 === 34 || c2 === 39) {\n const rst2 = md.helpers.parseLinkTitle(src, pos, max);\n if (!rst2.ok) {\n return null;\n }\n value = rst2.str;\n pos = rst2.pos;\n } else {\n rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n value = rst.name;\n pos = rst.pos;\n }\n } else {\n if (isBlank(src.charCodeAt(pos - 1))) {\n --pos;\n }\n value = \"\";\n }\n if (typeof value !== \"undefined\") {\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n }\n }\n if (pos >= max) {\n return null;\n }\n const charBetween = src.charCodeAt(pos);\n if (!isBlank(charBetween) && charBetween !== 125) {\n return null;\n }\n }\n return null;\n function isBlank(code) {\n return md.utils.isSpace(code) || code === 10;\n }\n function skipBlanks(src2, pos2, max2) {\n for (; pos2 < max2; pos2++) {\n const code = src2.charCodeAt(pos2);\n if (!isBlank(code)) {\n break;\n }\n }\n return pos2;\n }\n}\nvar ATTR_NAME_RE = /^[a-z][a-z0-9\\-_]*/;\nfunction parseAttrName(src, pos, max) {\n const oldPos = pos;\n const rst = src.slice(pos, max).match(ATTR_NAME_RE);\n if (rst === null) {\n return null;\n }\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\nvar UNSURROUNDED_STRING_RE = /^[a-z0-9\\-_]+/i;\nfunction parseUnsurroundedName(src, pos, max) {\n const oldPos = pos;\n const rst = src.slice(pos, max).match(UNSURROUNDED_STRING_RE);\n if (rst === null) {\n return null;\n }\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\n\n// src/lib/common/browser.ts\nvar isBrowser = () => {\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n};\n\n// src/lib/common/extension-load-queue.ts\nvar QUEUES_SYMBOL = /* @__PURE__ */ Symbol.for(\"extension-load-queues\");\nvar SINGLE_QUEUE_SYMBOL = /* @__PURE__ */ Symbol.for(\"single-queue\");\nvar getScriptStore = (storeKey) => {\n if (isBrowser()) {\n if (!window[storeKey]) {\n window[storeKey] = [];\n } else if (!Array.isArray(window[storeKey])) {\n throw new Error(`Expected window[${String(storeKey)}] to be an array`);\n }\n return window[storeKey];\n } else {\n throw new Error(\"Cannot initialize QueueStore in a non-browser environment.\");\n }\n};\nvar ensureQueuesSymbolInitialized = () => {\n if (isBrowser()) {\n if (typeof window[QUEUES_SYMBOL] !== \"object\" || window[QUEUES_SYMBOL] === null) {\n window[QUEUES_SYMBOL] = {};\n }\n } else {\n throw new Error(\"Cannot initialize QueueStore in a non-browser environment.\");\n }\n};\nvar getQueueStore = (queueKey) => {\n ensureQueuesSymbolInitialized();\n return window[QUEUES_SYMBOL]?.[queueKey] || false;\n};\nvar createHandleQueueCreated = (queueKey) => {\n ensureQueuesSymbolInitialized();\n return (created) => {\n window[QUEUES_SYMBOL][queueKey] = created;\n };\n};\nvar createLoadQueue = ({\n store,\n createController,\n queueKey = SINGLE_QUEUE_SYMBOL,\n isQueueCreated = getQueueStore(queueKey),\n onQueueCreated = createHandleQueueCreated(queueKey)\n}) => {\n if (!store || isQueueCreated) {\n return;\n }\n onQueueCreated(true);\n const controller = createController();\n const queue = store.splice(0, store.length);\n store.push = function(...args) {\n args.forEach((callback) => {\n queue.push(callback);\n unqueue();\n });\n return queue.length;\n };\n let processing = false;\n function unqueue() {\n if (!processing) {\n next();\n }\n }\n async function next() {\n processing = true;\n const callback = queue.shift();\n if (callback) {\n await callback(controller);\n return next();\n }\n processing = false;\n }\n unqueue();\n};\n\n// src/lib/common/id-generator.ts\nfunction createIDGenerator() {\n const counters = /* @__PURE__ */ new Map();\n return function generateID(prefix) {\n if (!prefix) {\n return Math.random().toString(36).substr(2, 8);\n }\n counters.set(prefix, (counters.get(prefix) || 0) + 1);\n return `${prefix}-${counters.get(prefix)}`;\n };\n}\nfunction createIDGeneratorByStrategy(strategy = \"random\") {\n switch (strategy) {\n case \"deterministic\":\n return createIDGenerator();\n case \"constant\":\n return () => \"1\";\n case \"random\":\n default:\n return (prefix) => {\n if (!prefix) {\n return Math.random().toString(36).substr(2, 8);\n }\n return `${prefix}-${Math.random().toString(36).substr(2, 8)}`;\n };\n }\n}\n\n// src/lib/common/url.ts\nfunction parseHref(href) {\n const [beforeHash, ...hashParts] = href.split(\"#\");\n const hash = hashParts.length ? \"#\" + hashParts.join(\"#\") : null;\n const queryIndex = beforeHash.indexOf(\"?\");\n const path = queryIndex === -1 ? beforeHash : beforeHash.slice(0, queryIndex);\n const search = queryIndex === -1 ? null : beforeHash.slice(queryIndex);\n return {\n pathname: path === \"\" ? null : path,\n search,\n hash\n };\n}\nfunction formatHref({ pathname, search, hash }) {\n return (pathname || \"\") + (search || \"\") + (hash || \"\");\n}\n", "// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nmodule.exports = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g\n", "const regex = require('./regex.js')\n\nmodule.exports = BananaSlug\n\nconst own = Object.hasOwnProperty\n\nfunction BananaSlug () {\n const self = this\n\n if (!(self instanceof BananaSlug)) return new BananaSlug()\n\n self.reset()\n}\n\n/**\n * Generate a unique slug.\n * @param {string} value String of text to slugify\n * @param {boolean} [false] Keep the current case, otherwise make all lowercase\n * @return {string} A unique slug string\n */\nBananaSlug.prototype.slug = function (value, maintainCase) {\n const self = this\n let slug = slugger(value, maintainCase === true)\n const originalSlug = slug\n\n while (own.call(self.occurrences, slug)) {\n self.occurrences[originalSlug]++\n slug = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[slug] = 0\n\n return slug\n}\n\n/**\n * Reset - Forget all previous slugs\n * @return void\n */\nBananaSlug.prototype.reset = function () {\n this.occurrences = Object.create(null)\n}\n\nfunction slugger (string, maintainCase) {\n if (typeof string !== 'string') return ''\n if (!maintainCase) string = string.toLowerCase()\n return string.replace(regex, '').replace(/ /g, '-')\n}\n\nBananaSlug.slug = slugger\n", "\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"\u00A2\":\"cent\",\"\u00A3\":\"pound\",\"\u00A4\":\"currency\",\"\u00A5\":\"yen\",\"\u00A9\":\"(c)\",\"\u00AA\":\"a\",\"\u00AE\":\"(r)\",\"\u00BA\":\"o\",\"\u00C0\":\"A\",\"\u00C1\":\"A\",\"\u00C2\":\"A\",\"\u00C3\":\"A\",\"\u00C4\":\"A\",\"\u00C5\":\"A\",\"\u00C6\":\"AE\",\"\u00C7\":\"C\",\"\u00C8\":\"E\",\"\u00C9\":\"E\",\"\u00CA\":\"E\",\"\u00CB\":\"E\",\"\u00CC\":\"I\",\"\u00CD\":\"I\",\"\u00CE\":\"I\",\"\u00CF\":\"I\",\"\u00D0\":\"D\",\"\u00D1\":\"N\",\"\u00D2\":\"O\",\"\u00D3\":\"O\",\"\u00D4\":\"O\",\"\u00D5\":\"O\",\"\u00D6\":\"O\",\"\u00D8\":\"O\",\"\u00D9\":\"U\",\"\u00DA\":\"U\",\"\u00DB\":\"U\",\"\u00DC\":\"U\",\"\u00DD\":\"Y\",\"\u00DE\":\"TH\",\"\u00DF\":\"ss\",\"\u00E0\":\"a\",\"\u00E1\":\"a\",\"\u00E2\":\"a\",\"\u00E3\":\"a\",\"\u00E4\":\"a\",\"\u00E5\":\"a\",\"\u00E6\":\"ae\",\"\u00E7\":\"c\",\"\u00E8\":\"e\",\"\u00E9\":\"e\",\"\u00EA\":\"e\",\"\u00EB\":\"e\",\"\u00EC\":\"i\",\"\u00ED\":\"i\",\"\u00EE\":\"i\",\"\u00EF\":\"i\",\"\u00F0\":\"d\",\"\u00F1\":\"n\",\"\u00F2\":\"o\",\"\u00F3\":\"o\",\"\u00F4\":\"o\",\"\u00F5\":\"o\",\"\u00F6\":\"o\",\"\u00F8\":\"o\",\"\u00F9\":\"u\",\"\u00FA\":\"u\",\"\u00FB\":\"u\",\"\u00FC\":\"u\",\"\u00FD\":\"y\",\"\u00FE\":\"th\",\"\u00FF\":\"y\",\"\u0100\":\"A\",\"\u0101\":\"a\",\"\u0102\":\"A\",\"\u0103\":\"a\",\"\u0104\":\"A\",\"\u0105\":\"a\",\"\u0106\":\"C\",\"\u0107\":\"c\",\"\u010C\":\"C\",\"\u010D\":\"c\",\"\u010E\":\"D\",\"\u010F\":\"d\",\"\u0110\":\"DJ\",\"\u0111\":\"dj\",\"\u0112\":\"E\",\"\u0113\":\"e\",\"\u0116\":\"E\",\"\u0117\":\"e\",\"\u0118\":\"e\",\"\u0119\":\"e\",\"\u011A\":\"E\",\"\u011B\":\"e\",\"\u011E\":\"G\",\"\u011F\":\"g\",\"\u0122\":\"G\",\"\u0123\":\"g\",\"\u0128\":\"I\",\"\u0129\":\"i\",\"\u012A\":\"i\",\"\u012B\":\"i\",\"\u012E\":\"I\",\"\u012F\":\"i\",\"\u0130\":\"I\",\"\u0131\":\"i\",\"\u0136\":\"k\",\"\u0137\":\"k\",\"\u013B\":\"L\",\"\u013C\":\"l\",\"\u013D\":\"L\",\"\u013E\":\"l\",\"\u0141\":\"L\",\"\u0142\":\"l\",\"\u0143\":\"N\",\"\u0144\":\"n\",\"\u0145\":\"N\",\"\u0146\":\"n\",\"\u0147\":\"N\",\"\u0148\":\"n\",\"\u014C\":\"O\",\"\u014D\":\"o\",\"\u0150\":\"O\",\"\u0151\":\"o\",\"\u0152\":\"OE\",\"\u0153\":\"oe\",\"\u0154\":\"R\",\"\u0155\":\"r\",\"\u0158\":\"R\",\"\u0159\":\"r\",\"\u015A\":\"S\",\"\u015B\":\"s\",\"\u015E\":\"S\",\"\u015F\":\"s\",\"\u0160\":\"S\",\"\u0161\":\"s\",\"\u0162\":\"T\",\"\u0163\":\"t\",\"\u0164\":\"T\",\"\u0165\":\"t\",\"\u0168\":\"U\",\"\u0169\":\"u\",\"\u016A\":\"u\",\"\u016B\":\"u\",\"\u016E\":\"U\",\"\u016F\":\"u\",\"\u0170\":\"U\",\"\u0171\":\"u\",\"\u0172\":\"U\",\"\u0173\":\"u\",\"\u0174\":\"W\",\"\u0175\":\"w\",\"\u0176\":\"Y\",\"\u0177\":\"y\",\"\u0178\":\"Y\",\"\u0179\":\"Z\",\"\u017A\":\"z\",\"\u017B\":\"Z\",\"\u017C\":\"z\",\"\u017D\":\"Z\",\"\u017E\":\"z\",\"\u018F\":\"E\",\"\u0192\":\"f\",\"\u01A0\":\"O\",\"\u01A1\":\"o\",\"\u01AF\":\"U\",\"\u01B0\":\"u\",\"\u01C8\":\"LJ\",\"\u01C9\":\"lj\",\"\u01CB\":\"NJ\",\"\u01CC\":\"nj\",\"\u0218\":\"S\",\"\u0219\":\"s\",\"\u021A\":\"T\",\"\u021B\":\"t\",\"\u0259\":\"e\",\"\u02DA\":\"o\",\"\u0386\":\"A\",\"\u0388\":\"E\",\"\u0389\":\"H\",\"\u038A\":\"I\",\"\u038C\":\"O\",\"\u038E\":\"Y\",\"\u038F\":\"W\",\"\u0390\":\"i\",\"\u0391\":\"A\",\"\u0392\":\"B\",\"\u0393\":\"G\",\"\u0394\":\"D\",\"\u0395\":\"E\",\"\u0396\":\"Z\",\"\u0397\":\"H\",\"\u0398\":\"8\",\"\u0399\":\"I\",\"\u039A\":\"K\",\"\u039B\":\"L\",\"\u039C\":\"M\",\"\u039D\":\"N\",\"\u039E\":\"3\",\"\u039F\":\"O\",\"\u03A0\":\"P\",\"\u03A1\":\"R\",\"\u03A3\":\"S\",\"\u03A4\":\"T\",\"\u03A5\":\"Y\",\"\u03A6\":\"F\",\"\u03A7\":\"X\",\"\u03A8\":\"PS\",\"\u03A9\":\"W\",\"\u03AA\":\"I\",\"\u03AB\":\"Y\",\"\u03AC\":\"a\",\"\u03AD\":\"e\",\"\u03AE\":\"h\",\"\u03AF\":\"i\",\"\u03B0\":\"y\",\"\u03B1\":\"a\",\"\u03B2\":\"b\",\"\u03B3\":\"g\",\"\u03B4\":\"d\",\"\u03B5\":\"e\",\"\u03B6\":\"z\",\"\u03B7\":\"h\",\"\u03B8\":\"8\",\"\u03B9\":\"i\",\"\u03BA\":\"k\",\"\u03BB\":\"l\",\"\u03BC\":\"m\",\"\u03BD\":\"n\",\"\u03BE\":\"3\",\"\u03BF\":\"o\",\"\u03C0\":\"p\",\"\u03C1\":\"r\",\"\u03C2\":\"s\",\"\u03C3\":\"s\",\"\u03C4\":\"t\",\"\u03C5\":\"y\",\"\u03C6\":\"f\",\"\u03C7\":\"x\",\"\u03C8\":\"ps\",\"\u03C9\":\"w\",\"\u03CA\":\"i\",\"\u03CB\":\"y\",\"\u03CC\":\"o\",\"\u03CD\":\"y\",\"\u03CE\":\"w\",\"\u0401\":\"Yo\",\"\u0402\":\"DJ\",\"\u0404\":\"Ye\",\"\u0406\":\"I\",\"\u0407\":\"Yi\",\"\u0408\":\"J\",\"\u0409\":\"LJ\",\"\u040A\":\"NJ\",\"\u040B\":\"C\",\"\u040F\":\"DZ\",\"\u0410\":\"A\",\"\u0411\":\"B\",\"\u0412\":\"V\",\"\u0413\":\"G\",\"\u0414\":\"D\",\"\u0415\":\"E\",\"\u0416\":\"Zh\",\"\u0417\":\"Z\",\"\u0418\":\"I\",\"\u0419\":\"J\",\"\u041A\":\"K\",\"\u041B\":\"L\",\"\u041C\":\"M\",\"\u041D\":\"N\",\"\u041E\":\"O\",\"\u041F\":\"P\",\"\u0420\":\"R\",\"\u0421\":\"S\",\"\u0422\":\"T\",\"\u0423\":\"U\",\"\u0424\":\"F\",\"\u0425\":\"H\",\"\u0426\":\"C\",\"\u0427\":\"Ch\",\"\u0428\":\"Sh\",\"\u0429\":\"Sh\",\"\u042A\":\"U\",\"\u042B\":\"Y\",\"\u042C\":\"\",\"\u042D\":\"E\",\"\u042E\":\"Yu\",\"\u042F\":\"Ya\",\"\u0430\":\"a\",\"\u0431\":\"b\",\"\u0432\":\"v\",\"\u0433\":\"g\",\"\u0434\":\"d\",\"\u0435\":\"e\",\"\u0436\":\"zh\",\"\u0437\":\"z\",\"\u0438\":\"i\",\"\u0439\":\"j\",\"\u043A\":\"k\",\"\u043B\":\"l\",\"\u043C\":\"m\",\"\u043D\":\"n\",\"\u043E\":\"o\",\"\u043F\":\"p\",\"\u0440\":\"r\",\"\u0441\":\"s\",\"\u0442\":\"t\",\"\u0443\":\"u\",\"\u0444\":\"f\",\"\u0445\":\"h\",\"\u0446\":\"c\",\"\u0447\":\"ch\",\"\u0448\":\"sh\",\"\u0449\":\"sh\",\"\u044A\":\"u\",\"\u044B\":\"y\",\"\u044C\":\"\",\"\u044D\":\"e\",\"\u044E\":\"yu\",\"\u044F\":\"ya\",\"\u0451\":\"yo\",\"\u0452\":\"dj\",\"\u0454\":\"ye\",\"\u0456\":\"i\",\"\u0457\":\"yi\",\"\u0458\":\"j\",\"\u0459\":\"lj\",\"\u045A\":\"nj\",\"\u045B\":\"c\",\"\u045D\":\"u\",\"\u045F\":\"dz\",\"\u0490\":\"G\",\"\u0491\":\"g\",\"\u0492\":\"GH\",\"\u0493\":\"gh\",\"\u049A\":\"KH\",\"\u049B\":\"kh\",\"\u04A2\":\"NG\",\"\u04A3\":\"ng\",\"\u04AE\":\"UE\",\"\u04AF\":\"ue\",\"\u04B0\":\"U\",\"\u04B1\":\"u\",\"\u04BA\":\"H\",\"\u04BB\":\"h\",\"\u04D8\":\"AE\",\"\u04D9\":\"ae\",\"\u04E8\":\"OE\",\"\u04E9\":\"oe\",\"\u0531\":\"A\",\"\u0532\":\"B\",\"\u0533\":\"G\",\"\u0534\":\"D\",\"\u0535\":\"E\",\"\u0536\":\"Z\",\"\u0537\":\"E\\'\",\"\u0538\":\"Y\\'\",\"\u0539\":\"T\\'\",\"\u053A\":\"JH\",\"\u053B\":\"I\",\"\u053C\":\"L\",\"\u053D\":\"X\",\"\u053E\":\"C\\'\",\"\u053F\":\"K\",\"\u0540\":\"H\",\"\u0541\":\"D\\'\",\"\u0542\":\"GH\",\"\u0543\":\"TW\",\"\u0544\":\"M\",\"\u0545\":\"Y\",\"\u0546\":\"N\",\"\u0547\":\"SH\",\"\u0549\":\"CH\",\"\u054A\":\"P\",\"\u054B\":\"J\",\"\u054C\":\"R\\'\",\"\u054D\":\"S\",\"\u054E\":\"V\",\"\u054F\":\"T\",\"\u0550\":\"R\",\"\u0551\":\"C\",\"\u0553\":\"P\\'\",\"\u0554\":\"Q\\'\",\"\u0555\":\"O\\'\\'\",\"\u0556\":\"F\",\"\u0587\":\"EV\",\"\u0621\":\"a\",\"\u0622\":\"aa\",\"\u0623\":\"a\",\"\u0624\":\"u\",\"\u0625\":\"i\",\"\u0626\":\"e\",\"\u0627\":\"a\",\"\u0628\":\"b\",\"\u0629\":\"h\",\"\u062A\":\"t\",\"\u062B\":\"th\",\"\u062C\":\"j\",\"\u062D\":\"h\",\"\u062E\":\"kh\",\"\u062F\":\"d\",\"\u0630\":\"th\",\"\u0631\":\"r\",\"\u0632\":\"z\",\"\u0633\":\"s\",\"\u0634\":\"sh\",\"\u0635\":\"s\",\"\u0636\":\"dh\",\"\u0637\":\"t\",\"\u0638\":\"z\",\"\u0639\":\"a\",\"\u063A\":\"gh\",\"\u0641\":\"f\",\"\u0642\":\"q\",\"\u0643\":\"k\",\"\u0644\":\"l\",\"\u0645\":\"m\",\"\u0646\":\"n\",\"\u0647\":\"h\",\"\u0648\":\"w\",\"\u0649\":\"a\",\"\u064A\":\"y\",\"\u064B\":\"an\",\"\u064C\":\"on\",\"\u064D\":\"en\",\"\u064E\":\"a\",\"\u064F\":\"u\",\"\u0650\":\"e\",\"\u0652\":\"\",\"\u0660\":\"0\",\"\u0661\":\"1\",\"\u0662\":\"2\",\"\u0663\":\"3\",\"\u0664\":\"4\",\"\u0665\":\"5\",\"\u0666\":\"6\",\"\u0667\":\"7\",\"\u0668\":\"8\",\"\u0669\":\"9\",\"\u067E\":\"p\",\"\u0686\":\"ch\",\"\u0698\":\"zh\",\"\u06A9\":\"k\",\"\u06AF\":\"g\",\"\u06CC\":\"y\",\"\u06F0\":\"0\",\"\u06F1\":\"1\",\"\u06F2\":\"2\",\"\u06F3\":\"3\",\"\u06F4\":\"4\",\"\u06F5\":\"5\",\"\u06F6\":\"6\",\"\u06F7\":\"7\",\"\u06F8\":\"8\",\"\u06F9\":\"9\",\"\u0E3F\":\"baht\",\"\u10D0\":\"a\",\"\u10D1\":\"b\",\"\u10D2\":\"g\",\"\u10D3\":\"d\",\"\u10D4\":\"e\",\"\u10D5\":\"v\",\"\u10D6\":\"z\",\"\u10D7\":\"t\",\"\u10D8\":\"i\",\"\u10D9\":\"k\",\"\u10DA\":\"l\",\"\u10DB\":\"m\",\"\u10DC\":\"n\",\"\u10DD\":\"o\",\"\u10DE\":\"p\",\"\u10DF\":\"zh\",\"\u10E0\":\"r\",\"\u10E1\":\"s\",\"\u10E2\":\"t\",\"\u10E3\":\"u\",\"\u10E4\":\"f\",\"\u10E5\":\"k\",\"\u10E6\":\"gh\",\"\u10E7\":\"q\",\"\u10E8\":\"sh\",\"\u10E9\":\"ch\",\"\u10EA\":\"ts\",\"\u10EB\":\"dz\",\"\u10EC\":\"ts\",\"\u10ED\":\"ch\",\"\u10EE\":\"kh\",\"\u10EF\":\"j\",\"\u10F0\":\"h\",\"\u1E62\":\"S\",\"\u1E63\":\"s\",\"\u1E80\":\"W\",\"\u1E81\":\"w\",\"\u1E82\":\"W\",\"\u1E83\":\"w\",\"\u1E84\":\"W\",\"\u1E85\":\"w\",\"\u1E9E\":\"SS\",\"\u1EA0\":\"A\",\"\u1EA1\":\"a\",\"\u1EA2\":\"A\",\"\u1EA3\":\"a\",\"\u1EA4\":\"A\",\"\u1EA5\":\"a\",\"\u1EA6\":\"A\",\"\u1EA7\":\"a\",\"\u1EA8\":\"A\",\"\u1EA9\":\"a\",\"\u1EAA\":\"A\",\"\u1EAB\":\"a\",\"\u1EAC\":\"A\",\"\u1EAD\":\"a\",\"\u1EAE\":\"A\",\"\u1EAF\":\"a\",\"\u1EB0\":\"A\",\"\u1EB1\":\"a\",\"\u1EB2\":\"A\",\"\u1EB3\":\"a\",\"\u1EB4\":\"A\",\"\u1EB5\":\"a\",\"\u1EB6\":\"A\",\"\u1EB7\":\"a\",\"\u1EB8\":\"E\",\"\u1EB9\":\"e\",\"\u1EBA\":\"E\",\"\u1EBB\":\"e\",\"\u1EBC\":\"E\",\"\u1EBD\":\"e\",\"\u1EBE\":\"E\",\"\u1EBF\":\"e\",\"\u1EC0\":\"E\",\"\u1EC1\":\"e\",\"\u1EC2\":\"E\",\"\u1EC3\":\"e\",\"\u1EC4\":\"E\",\"\u1EC5\":\"e\",\"\u1EC6\":\"E\",\"\u1EC7\":\"e\",\"\u1EC8\":\"I\",\"\u1EC9\":\"i\",\"\u1ECA\":\"I\",\"\u1ECB\":\"i\",\"\u1ECC\":\"O\",\"\u1ECD\":\"o\",\"\u1ECE\":\"O\",\"\u1ECF\":\"o\",\"\u1ED0\":\"O\",\"\u1ED1\":\"o\",\"\u1ED2\":\"O\",\"\u1ED3\":\"o\",\"\u1ED4\":\"O\",\"\u1ED5\":\"o\",\"\u1ED6\":\"O\",\"\u1ED7\":\"o\",\"\u1ED8\":\"O\",\"\u1ED9\":\"o\",\"\u1EDA\":\"O\",\"\u1EDB\":\"o\",\"\u1EDC\":\"O\",\"\u1EDD\":\"o\",\"\u1EDE\":\"O\",\"\u1EDF\":\"o\",\"\u1EE0\":\"O\",\"\u1EE1\":\"o\",\"\u1EE2\":\"O\",\"\u1EE3\":\"o\",\"\u1EE4\":\"U\",\"\u1EE5\":\"u\",\"\u1EE6\":\"U\",\"\u1EE7\":\"u\",\"\u1EE8\":\"U\",\"\u1EE9\":\"u\",\"\u1EEA\":\"U\",\"\u1EEB\":\"u\",\"\u1EEC\":\"U\",\"\u1EED\":\"u\",\"\u1EEE\":\"U\",\"\u1EEF\":\"u\",\"\u1EF0\":\"U\",\"\u1EF1\":\"u\",\"\u1EF2\":\"Y\",\"\u1EF3\":\"y\",\"\u1EF4\":\"Y\",\"\u1EF5\":\"y\",\"\u1EF6\":\"Y\",\"\u1EF7\":\"y\",\"\u1EF8\":\"Y\",\"\u1EF9\":\"y\",\"\u2013\":\"-\",\"\u2018\":\"\\'\",\"\u2019\":\"\\'\",\"\u201C\":\"\\\\\\\"\",\"\u201D\":\"\\\\\\\"\",\"\u201E\":\"\\\\\\\"\",\"\u2020\":\"+\",\"\u2022\":\"*\",\"\u2026\":\"...\",\"\u20A0\":\"ecu\",\"\u20A2\":\"cruzeiro\",\"\u20A3\":\"french franc\",\"\u20A4\":\"lira\",\"\u20A5\":\"mill\",\"\u20A6\":\"naira\",\"\u20A7\":\"peseta\",\"\u20A8\":\"rupee\",\"\u20A9\":\"won\",\"\u20AA\":\"new shequel\",\"\u20AB\":\"dong\",\"\u20AC\":\"euro\",\"\u20AD\":\"kip\",\"\u20AE\":\"tugrik\",\"\u20AF\":\"drachma\",\"\u20B0\":\"penny\",\"\u20B1\":\"peso\",\"\u20B2\":\"guarani\",\"\u20B3\":\"austral\",\"\u20B4\":\"hryvnia\",\"\u20B5\":\"cedi\",\"\u20B8\":\"kazakhstani tenge\",\"\u20B9\":\"indian rupee\",\"\u20BA\":\"turkish lira\",\"\u20BD\":\"russian ruble\",\"\u20BF\":\"bitcoin\",\"\u2120\":\"sm\",\"\u2122\":\"tm\",\"\u2202\":\"d\",\"\u2206\":\"delta\",\"\u2211\":\"sum\",\"\u221E\":\"infinity\",\"\u2665\":\"love\",\"\u5143\":\"yuan\",\"\u5186\":\"yen\",\"\uFDFC\":\"rial\",\"\uFEF5\":\"laa\",\"\uFEF7\":\"laa\",\"\uFEF9\":\"lai\",\"\uFEFB\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"\u0419\":\"Y\",\"\u0426\":\"Ts\",\"\u0429\":\"Sht\",\"\u042A\":\"A\",\"\u042C\":\"Y\",\"\u0439\":\"y\",\"\u0446\":\"ts\",\"\u0449\":\"sht\",\"\u044A\":\"a\",\"\u044C\":\"y\"},\"de\":{\"\u00C4\":\"AE\",\"\u00E4\":\"ae\",\"\u00D6\":\"OE\",\"\u00F6\":\"oe\",\"\u00DC\":\"UE\",\"\u00FC\":\"ue\",\"\u00DF\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"\u2211\":\"summe\",\"\u221E\":\"unendlich\",\"\u2665\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"\u00A2\":\"centavos\",\"\u00A3\":\"libras\",\"\u00A4\":\"moneda\",\"\u20A3\":\"francos\",\"\u2211\":\"suma\",\"\u221E\":\"infinito\",\"\u2665\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"\u00A2\":\"centime\",\"\u00A3\":\"livre\",\"\u00A4\":\"devise\",\"\u20A3\":\"franc\",\"\u2211\":\"somme\",\"\u221E\":\"infini\",\"\u2665\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"\u00A2\":\"centavo\",\"\u2211\":\"soma\",\"\u00A3\":\"libra\",\"\u221E\":\"infinito\",\"\u2665\":\"amor\"},\"uk\":{\"\u0418\":\"Y\",\"\u0438\":\"y\",\"\u0419\":\"Y\",\"\u0439\":\"y\",\"\u0426\":\"Ts\",\"\u0446\":\"ts\",\"\u0425\":\"Kh\",\"\u0445\":\"kh\",\"\u0429\":\"Shch\",\"\u0449\":\"shch\",\"\u0413\":\"H\",\"\u0433\":\"h\"},\"vi\":{\"\u0110\":\"D\",\"\u0111\":\"d\"},\"da\":{\"\u00D8\":\"OE\",\"\u00F8\":\"oe\",\"\u00C5\":\"AA\",\"\u00E5\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"st\u00F8rre end\"},\"nb\":{\"&\":\"og\",\"\u00C5\":\"AA\",\"\u00C6\":\"AE\",\"\u00D8\":\"OE\",\"\u00E5\":\"aa\",\"\u00E6\":\"ae\",\"\u00F8\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"\u00C5\":\"AA\",\"\u00C4\":\"AE\",\"\u00D6\":\"OE\",\"\u00E5\":\"aa\",\"\u00E4\":\"ae\",\"\u00F6\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch];\n if (appendChar === undefined) appendChar = charMap[ch];\n if (appendChar === undefined) appendChar = ch;\n if (appendChar === replacement) appendChar = ' ';\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n", "import {type PluginOptions, type TabsPlugin, transform as baseTransform} from './transform';\n\nexport * from './index';\n\nconst onBundle: NonNullable<PluginOptions['onBundle']> = (args, cache) => {\n copyRuntimeFiles(args, cache);\n};\n\nexport function transform(options: Partial<PluginOptions> = {}): TabsPlugin {\n return baseTransform({onBundle, ...options});\n}\n\nconst PATH_TO_RUNTIME = '../runtime';\n\nfunction copyRuntimeFiles(\n {\n runtimeJsPath,\n runtimeCssPath,\n output,\n }: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n) {\n const {join, resolve} = require('node:path');\n const runtimeFiles = {\n 'index.js': runtimeJsPath,\n 'index.css': runtimeCssPath,\n };\n for (const [originFile, outputFile] of Object.entries(runtimeFiles)) {\n const file = join(PATH_TO_RUNTIME, originFile);\n if (!cache.has(file)) {\n cache.add(file);\n copyFile(resolve(__dirname, file), join(output, outputFile));\n }\n }\n}\n\nfunction copyFile(from: string, to: string) {\n const {mkdirSync, copyFileSync} = require('node:fs');\n const {dirname} = require('node:path');\n mkdirSync(dirname(to), {recursive: true});\n copyFileSync(from, to);\n}\n", "import type {MarkdownIt, StateCore} from './markdown-it';\n/**\n * MarkdownIt plugin: finds `{% list tabs %}` blocks, parses tab items, and replaces them\n * with HTML tokens for the chosen variant. Registers runtime script/style in env.meta.\n */\nimport type {IDGenerator} from '@diplodoc/utils';\nimport type {EnabledVariants} from '../common';\n\nimport {createIDGeneratorByStrategy} from '@diplodoc/utils';\n\nimport {TabsVariants} from '../common';\n\nimport {addHiddenProperty} from './utils';\nimport {generateTabsTokens} from './generate';\nimport {findTabs, props, tryToFindTabs} from './find';\n\n/** Options for the tabs plugin (paths, container classes, enabled variants). */\nexport type PluginOptions = {\n runtimeJsPath: string;\n runtimeCssPath: string;\n containerClasses: string;\n bundle: boolean;\n features: {\n enabledVariants: EnabledVariants;\n };\n /** @internal */\n onBundle?: (\n args: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n ) => void;\n};\n\nconst defaultFeatures: PluginOptions['features'] = {\n enabledVariants: {\n regular: true,\n radio: true,\n },\n};\n\nlet runsCounter = 0;\n\nexport type TransformOptions = {\n output?: string;\n /** Optional external ID generator provided by the host (e.g. via MarkdownItPluginOpts). */\n generateID?: IDGenerator;\n};\n\n/** The plugin callback returned by transform. */\nexport type TabsPlugin = (md: MarkdownIt, options?: TransformOptions) => void;\n\nfunction appendRuntimeMeta(\n env: Record<string | symbol, unknown>,\n runtimeJsPath: string,\n runtimeCssPath: string,\n) {\n const meta = (env.meta ||= {});\n if (typeof meta !== 'object' || meta === null) {\n throw new TypeError('Expected env.meta to be an object.');\n }\n if (!('script' in meta) || !meta.script) Object.assign(meta, {script: []});\n if (!('style' in meta) || !meta.style) Object.assign(meta, {style: []});\n if (\n !('script' in meta) ||\n !Array.isArray(meta.script) ||\n !('style' in meta) ||\n !Array.isArray(meta.style)\n ) {\n throw new TypeError('Expected runtime script and style arrays.');\n }\n meta.script.push(runtimeJsPath);\n meta.style.push(runtimeCssPath);\n}\n\n/**\n * Returns a MarkdownIt plugin that transforms `{% list tabs %}` blocks into tab markup.\n * @param options - Paths for runtime JS/CSS, container classes, and enabled variants\n * @returns Plugin function that receives (md, options) and registers the core ruler\n */\nexport function transform(options: Partial<PluginOptions> = {}): TabsPlugin {\n const {\n runtimeJsPath = '_assets/tabs-extension.js',\n runtimeCssPath = '_assets/tabs-extension.css',\n containerClasses = '',\n bundle = true,\n features = defaultFeatures,\n onBundle,\n } = options;\n\n return function tabs(md: MarkdownIt, options?: TransformOptions) {\n const {output = '.', generateID: externalGenerateID} = options || {};\n\n // Use the external ID generator if provided (e.g. from MarkdownItPluginOpts.generateID),\n // otherwise create a random fallback for standalone usage.\n // The fallback is created once per md.use() call, so it's shared across all parse() calls\n // on the same md instance (including recursive calls from includes plugins).\n const generateID: IDGenerator =\n externalGenerateID ?? (createIDGeneratorByStrategy('random') as IDGenerator);\n\n const plugin = (state: StateCore) => {\n const {tokens} = state;\n const env = addHiddenProperty(state.env, 'bundled', new Set<string>());\n const runId = String(++runsCounter);\n\n let i = 0;\n let tabsAreInserted = false;\n\n while (i < tokens.length) {\n const result = tryToFindTabs(tokens, i);\n\n if ('step' in result) {\n i += result.step;\n\n continue;\n }\n\n const {content, closeTokenIndex, extraTokensAfterClose} = result;\n\n const parsedProps = props(content, generateID);\n\n if (!features.enabledVariants[parsedProps.variant]) {\n parsedProps.variant = TabsVariants.Regular;\n }\n\n const tabs = findTabs(state.tokens, i + 3, closeTokenIndex, state.Token);\n\n if (tabs.length > 0) {\n const tabsTokens = generateTabsTokens(tabs, state, {\n containerClasses,\n tabsGroup: parsedProps.group,\n variant: parsedProps.variant,\n runId,\n generateID,\n });\n\n // Remove tokens including any list closing tokens after endlist\n state.tokens.splice(\n i,\n closeTokenIndex - i + 3 + extraTokensAfterClose,\n ...tabsTokens,\n );\n\n i++;\n tabsAreInserted = true;\n } else {\n state.tokens.splice(i, closeTokenIndex - i + 3 + extraTokensAfterClose);\n }\n }\n\n if (tabsAreInserted) {\n appendRuntimeMeta(env, runtimeJsPath, runtimeCssPath);\n\n if (bundle && onBundle) {\n onBundle({runtimeJsPath, runtimeCssPath, output}, env.bundled);\n }\n }\n };\n\n try {\n md.core.ruler.before('curly_attributes', 'tabs', plugin);\n } catch {\n md.core.ruler.push('tabs', plugin);\n }\n };\n}\n", "/**\n * Shared constants, types and globals for the tabs extension.\n * Used by both the MarkdownIt plugin (compile-time) and the runtime controller (DOM).\n */\nimport {type TabsController} from './runtime/TabsController';\n\n/** Regex to match the opening `{% list tabs ... %}` tag (optionally backtick-escaped). */\nexport const TAB_RE = /`?{% list tabs .*?%}`?/;\n\n/** CSS class names for tab structure. */\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';\n\n/** Data attributes used by the runtime to identify groups, keys, variants and active state. */\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\n/** Dropdown variant: container, menu and select element class names. */\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\n/** Accordion variant. */\nexport const TABS_ACCORDION_CLASSNAME = 'yfm-tabs-accordion';\nexport const TABS_ACCORDION_CLIENT_HEIGHT = 'data-yfm-tabs-accordion-client-heights';\n\n/** Radio (vertical) variant. */\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\n/** Available tab block variants (regular horizontal, radio, dropdown, accordion). */\nexport enum TabsVariants {\n Regular = 'regular',\n Radio = 'radio',\n Dropdown = 'dropdown',\n Accordion = 'accordion',\n}\n\n/** Which variants are enabled in the plugin (others fall back to Regular). */\nexport type EnabledVariants = Partial<Record<TabsVariants, boolean>>;\n\n/** Identifies a tab: group id, tab key (from content), and variant. */\nexport interface Tab {\n group?: string;\n key: string;\n variant: TabsVariants;\n}\n\n/** Payload passed to onSelectTab handlers when a tab is switched. */\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\n/** Symbol under which the global TabsController instance is stored on `window`. */\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n", "export function trim(target: string) {\n return target.trim();\n}\n\nexport function unquote(target: string) {\n return target.match(/^([\"']).*\\1$/) ? target.slice(1, -1) : target;\n}\n", "import type {Token} from '../markdown-it';\n/**\n * Helpers for tab content: slug ids, keys, selected marker, and source map ranges.\n */\nimport type {RuntimeTab} from '../types';\n\nimport GithubSlugger from 'github-slugger';\n\nimport {ACTIVE_TAB_TEXT} from '../../common';\nimport {createTabKey} from '../../tab-key';\n\nconst CUSTOM_ID_REGEXP = /\\[?{ ?#(\\S+) ?}]?/;\n\nconst sluggersStorage = new Map<string, GithubSlugger>();\n\nfunction parseName(name: string): {name: string; customAnchor: string | null} {\n const parts = name.match(CUSTOM_ID_REGEXP);\n let customAnchor: string | null = null;\n let pure = name;\n\n if (parts) {\n pure = name.replace(parts[0], '');\n customAnchor = parts[1];\n } else {\n pure = name;\n customAnchor = null;\n }\n\n if (pure.includes(ACTIVE_TAB_TEXT)) {\n pure = pure.replace(ACTIVE_TAB_TEXT, '');\n }\n\n return {\n name: pure.trim(),\n customAnchor,\n };\n}\n\n/**\n * Generate a stable slug id for a tab (used in data-diplodoc-id and anchors).\n * @param tab - Runtime tab\n * @param runId - Plugin run id for slugger\n * @returns Slug string\n */\nexport function getTabId(tab: RuntimeTab, {runId}: {runId: string}): string {\n let slugger = sluggersStorage.get(runId);\n if (!slugger) {\n slugger = new GithubSlugger();\n sluggersStorage.set(runId, slugger);\n }\n\n return slugger.slug(getRawId(tab));\n}\n\n/**\n * True if the tab title contains the {selected} marker.\n * @param tab - Runtime tab\n * @returns Whether tab is selected by default\n */\nexport function isTabSelected(tab: RuntimeTab): boolean {\n const {name} = tab;\n\n return name.includes(ACTIVE_TAB_TEXT);\n}\n\n/**\n * Canonical slug key used in state (localStorage, query).\n * @param tab - Runtime tab\n * @returns Canonical slug key\n */\nexport function getTabKey(tab: RuntimeTab): string {\n return createTabKey(getRawId(tab));\n}\n\n/**\n * Tab title text without custom anchor and without {selected}.\n * @param tab - Runtime tab\n * @returns Display name\n */\nexport function getName(tab: RuntimeTab): string {\n return parseName(tab.name).name;\n}\n\nfunction getRawId(tab: RuntimeTab): string {\n const {customAnchor, name} = parseName(tab.name);\n\n return customAnchor || name;\n}\n\n/**\n * Source map range [startLine, endLine] for the tab content tokens, or null.\n * @param tokens - Content tokens\n * @returns [start, end] or null\n */\nexport function getContentMap(tokens: Token[]): [number, number] | null {\n let firstMap: [number, number] | null = null;\n let lastMap: [number, number] | null = null;\n\n tokens.forEach(({map}) => {\n if (map) {\n firstMap = firstMap ?? map;\n lastMap = map;\n }\n });\n\n return firstMap && lastMap ? [firstMap[0], lastMap[1]] : null;\n}\n", "import slugify from 'slugify';\n\nconst SLUG_OPTIONS = {\n lower: true,\n strict: true,\n} as const;\n\nconst PUNCTUATION_OR_SPACE_REGEXP = /^[\\p{P}\\s]$/u;\nconst PRESERVED_PUNCTUATION = new Set(['#']);\n\n/**\n * Convert characters unsupported by slugify to stable Unicode code point tokens.\n * Punctuation and whitespace keep slugify's default separator/removal behaviour, except for\n * characters such as # that distinguish common tab names (for example C# and C++).\n * @param value - Raw tab key\n * @returns Text safe to pass to slugify\n */\nexport function encodeUnsupportedCodePoints(value: string): string {\n return Array.from(value)\n .map((character) => {\n if (slugify(character, SLUG_OPTIONS)) {\n return character;\n }\n\n if (\n PUNCTUATION_OR_SPACE_REGEXP.test(character) &&\n !PRESERVED_PUNCTUATION.has(character)\n ) {\n return character;\n }\n\n const codePoint = character.codePointAt(0);\n return typeof codePoint === 'number' ? ` u${codePoint.toString(16)} ` : character;\n })\n .join('');\n}\n\n/**\n * Create the canonical key stored in tab markup and new URLs.\n * @param value - Raw tab name or custom id\n * @returns Lowercase ASCII slug, with unsupported characters represented as u<hex>\n */\nexport function createTabKey(value: string): string {\n const normalized = value.normalize('NFC').trim();\n const slug = slugify(encodeUnsupportedCodePoints(normalized), SLUG_OPTIONS);\n\n if (slug) {\n return slug;\n }\n\n return Array.from(normalized)\n .map((character) => `u${character.codePointAt(0)?.toString(16)}`)\n .join('-');\n}\n\n/**\n * Convert a key read from an old URL to the current canonical form.\n * URLSearchParams has already decoded the outer query layer, so legacy keys need one additional\n * decodeURIComponent call before slug generation.\n * @param value - Key parsed from the tabs query parameter\n * @returns Canonical tab key\n */\nexport function normalizeTabKeyFromUrl(value: string): string {\n try {\n return createTabKey(decodeURIComponent(value));\n } catch {\n return createTabKey(value);\n }\n}\n", "/**\n * Attach a non-enumerable property to an object (e.g. env.bundled for plugin state).\n * @param box - Object to extend\n * @param field - Property key\n * @param value - Property value\n * @returns Same object with typed field\n */\nexport function addHiddenProperty<\n B extends Record<string | symbol, unknown>,\n F extends string | symbol,\n V,\n>(box: B, field: F, value: V): B & {[P in F]: V} {\n if (!(field in box)) {\n Object.defineProperty(box, field, {\n enumerable: false,\n value: value,\n });\n }\n\n return box as B & {[P in F]: V};\n}\n\nexport * from './strings';\nexport * from './tabs';\n", "import type {TabsTokensGenerator} from './types';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_DATA_VERTICAL_TAB,\n TAB_FORCED_OPEN,\n TAB_PANEL_CLASSNAME,\n VERTICAL_TAB_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\n\nexport const regular: TabsTokensGenerator = (\n tabs,\n state,\n {containerClasses, tabsGroup, runId, variant: orientation, generateID},\n) => {\n const tabsTokens = [];\n const tabListTokens = [];\n const tabPanelsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n const tabListOpen = new state.Token('tab-list_open', 'div', 1);\n const tabListClose = new state.Token('tab-list_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n\n tabListOpen.map = [start, end];\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n tabListOpen.block = true;\n tabListClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n const hasDefaultOpenTab = activeTabsCount !== 0;\n\n tabsOpen.attrSet('class', [TABS_CLASSNAME, containerClasses].filter(Boolean).join(' '));\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, 'regular');\n\n tabListOpen.attrSet('class', TABS_LIST_CLASSNAME);\n tabListOpen.attrSet('role', 'tablist');\n\n if (orientation === 'radio') {\n tabsTokens.push(tabsOpen);\n }\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const verticalTabInput = new state.Token('tab-input', 'input', 0);\n const verticalTabLabelOpen = new state.Token('tab-label_open', 'label', 1);\n const verticalTabLabelClose = new state.Token('tab-label_close', 'label', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n /* if user did not provide default open tab we fallback to first tab (in default tabs only) */\n const isTabActive = hasDefaultOpenTab ? didTabHasActiveAttr : i === 0;\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('regular');\n\n verticalTabInput.block = true;\n\n verticalTabInput.attrJoin('class', 'radio');\n verticalTabInput.attrSet('type', 'radio');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet('class', TAB_CLASSNAME);\n tabOpen.attrJoin('class', 'yfm-tab-group');\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (orientation === 'radio') {\n tabOpen.attrSet(TAB_DATA_VERTICAL_TAB, 'true');\n tabOpen.attrJoin('class', VERTICAL_TAB_CLASSNAME);\n }\n\n if (isTabActive) {\n if (orientation === 'radio') {\n tabOpen.attrSet(TAB_FORCED_OPEN, 'true');\n verticalTabInput.attrSet('checked', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n } else {\n tabOpen.attrSet(TAB_ACTIVE_KEY, i === 0 ? 'true' : 'false');\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n tabOpen.attrSet('aria-selected', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n }\n\n if (orientation === 'radio') {\n tabsTokens.push(\n tabOpen,\n verticalTabInput,\n verticalTabLabelOpen,\n tabInline,\n verticalTabLabelClose,\n tabClose,\n );\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n } else {\n tabListTokens.push(tabOpen, tabInline, tabClose);\n tabPanelsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n }\n\n tabsTokens.push(tabsOpen);\n tabsTokens.push(tabListOpen);\n tabsTokens.push(...tabListTokens);\n tabsTokens.push(tabListClose);\n tabsTokens.push(...tabPanelsTokens);\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_RADIO_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_DATA_VERTICAL_TAB,\n TAB_FORCED_OPEN,\n TAB_GROUP_CLASSNAME,\n TAB_PANEL_CLASSNAME,\n VERTICAL_TAB_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const radio: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const tabsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n tabsOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_RADIO_CLASSNAME].filter(Boolean).join(' '),\n );\n\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, 'radio');\n tabsTokens.push(tabsOpen);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const verticalTabInput = new state.Token('tab-input', 'input', 0);\n const verticalTabLabelOpen = new state.Token('tab-label_open', 'label', 1);\n const verticalTabLabelClose = new state.Token('tab-label_close', 'label', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('radio');\n\n verticalTabInput.block = true;\n\n verticalTabInput.attrJoin('class', 'radio');\n verticalTabInput.attrSet('type', 'radio');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet(\n 'class',\n [TAB_CLASSNAME, TAB_GROUP_CLASSNAME, VERTICAL_TAB_CLASSNAME].join(' '),\n );\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n tabOpen.attrSet(TAB_DATA_VERTICAL_TAB, 'true');\n\n if (didTabHasActiveAttr) {\n tabOpen.attrSet(TAB_FORCED_OPEN, 'true');\n verticalTabInput.attrSet('checked', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabsTokens.push(\n tabOpen,\n verticalTabInput,\n verticalTabLabelOpen,\n tabInline,\n verticalTabLabelClose,\n tabClose,\n );\n\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_DROPDOWN_CLASSNAME,\n TABS_DROPDOWN_MENU_CLASSNAME,\n TABS_DROPDOWN_SELECT,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_PANEL_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const dropdown: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const dropdownTokens = [];\n const dropdownOpen = new state.Token('dropdown_open', 'div', 1);\n const dropdownClose = new state.Token('dropdown_close', 'div', -1);\n const dropdownSelectOpen = new state.Token('dropdown-select_open', 'div', 1);\n const dropdownSelectInline = new state.Token('inline', '', 0);\n const dropdownSelectText = new state.Token('text', '', 0);\n const dropdownSelectClose = new state.Token('dropdown-select_open', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n dropdownOpen.block = true;\n dropdownClose.block = true;\n dropdownSelectOpen.block = true;\n dropdownSelectClose.block = true;\n\n const [activeTab, ...restActiveTabs] = tabs.filter(isTabSelected);\n\n if (restActiveTabs.length) {\n throw new Error('Unable to dropdown tabs with more than 1 active element');\n }\n\n dropdownOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_DROPDOWN_CLASSNAME].filter(Boolean).join(' '),\n );\n\n dropdownOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n dropdownOpen.attrSet(TAB_DATA_VARIANT, 'dropdown');\n\n dropdownSelectOpen.attrSet('role', 'tablist');\n dropdownSelectOpen.attrSet('class', TABS_DROPDOWN_SELECT);\n\n if (activeTab) {\n dropdownSelectOpen.attrJoin('class', 'filled');\n }\n\n dropdownSelectText.content = activeTab ? activeTab.name : '-';\n dropdownSelectInline.children = [dropdownSelectText];\n\n dropdownTokens.push(\n dropdownOpen,\n dropdownSelectOpen,\n dropdownSelectInline,\n dropdownSelectClose,\n );\n\n const dropdownMenuOpen = new state.Token('dropdown-menu_open', 'ul', 1);\n const dropdownMenuClose = new state.Token('dropdown-menu_close', 'ul', -1);\n\n dropdownMenuOpen.attrSet('class', TABS_DROPDOWN_MENU_CLASSNAME);\n\n const tabIds = tabs.map((tab) => getTabId(tab, {runId}));\n\n const menuTokens = tabs.flatMap((tab, i) => {\n const menuListItemOpen = new state.Token('dropdown-menu-item_open', 'li', 1);\n const menuListItemClose = new state.Token('dropdown-menu-item_close', 'li', -1);\n const menuListItemText = new state.Token('text', '', 0);\n const menuListItemInline = new state.Token('inline', '', 0);\n\n const tabId = tabIds[i];\n const tabKey = getTabKey(tab);\n const isActive = tab === activeTab;\n\n menuListItemOpen.attrSet(\n 'class',\n [TAB_CLASSNAME, isActive && ACTIVE_CLASSNAME].filter(Boolean).join(' '),\n );\n menuListItemOpen.attrSet(TAB_DATA_ID, tabId);\n menuListItemOpen.attrSet(TAB_DATA_KEY, tabKey);\n menuListItemOpen.attrSet('aria-selected', String(isActive));\n\n menuListItemText.content = tab.name;\n menuListItemInline.children = [menuListItemText];\n\n return [menuListItemOpen, menuListItemInline, menuListItemClose];\n });\n\n dropdownTokens.push(dropdownMenuOpen, ...menuTokens, dropdownMenuClose);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const tab = tabs[i];\n const tabId = tabIds[i];\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('dropdown');\n\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (didTabHasActiveAttr) {\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n dropdownTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n dropdownTokens.push(dropdownClose);\n\n return dropdownTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_ACCORDION_CLASSNAME,\n TABS_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_FORCED_OPEN,\n TAB_GROUP_CLASSNAME,\n TAB_PANEL_CLASSNAME,\n TabsVariants,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const accordion: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const tabsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n tabsOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_ACCORDION_CLASSNAME].filter(Boolean).join(' '),\n );\n\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, TabsVariants.Accordion);\n tabsTokens.push(tabsOpen);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('accordion');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet('class', [TAB_CLASSNAME, TAB_GROUP_CLASSNAME].join(' '));\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (didTabHasActiveAttr) {\n tabPanelOpen.attrSet(TAB_FORCED_OPEN, 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabsTokens.push(tabOpen, tabInline, tabClose);\n\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "/**\n * Variant registry: maps TabsVariants to the function that generates HTML tokens for that variant.\n */\nimport type {TabsVariants} from '../../common';\nimport type {TabsTokensGenerator} from './types';\n\nimport {regular} from './regular';\nimport {radio} from './radio';\nimport {dropdown} from './dropdown';\nimport {accordion} from './accordion';\n\nconst generateByType: Record<TabsVariants, TabsTokensGenerator> = {\n regular,\n radio,\n dropdown,\n accordion,\n};\n\n/**\n * Returns the token generator for the given variant.\n * @param type - Variant name\n * @returns Generator function for that variant\n */\nexport const generateTokensByType = (type: TabsVariants): TabsTokensGenerator => {\n return generateByType[type];\n};\n", "import type {StateCore, Token} from './markdown-it';\nimport type {RuntimeTab} from './types';\nimport type {TabsGenerationProps} from './variants/types';\n\nimport {generateTokensByType} from './variants';\n\n/**\n * Generate markdown-it tokens for a tabs block based on the chosen variant.\n * Delegates to the variant-specific generator (regular, radio, dropdown, accordion).\n * @param tabs - Parsed tab items\n * @param state - MarkdownIt state\n * @param props - Generation options (containerClasses, tabsGroup, runId, variant)\n * @returns Token array for the block\n */\nexport function generateTabsTokens(\n tabs: RuntimeTab[],\n state: StateCore,\n props: TabsGenerationProps,\n): Token[] {\n const tokens = generateTokensByType(props.variant)(tabs, state, props);\n\n return tokens;\n}\n", "import type {StateCore, Token} from './markdown-it';\n/**\n * Parsing of `{% list tabs %}` blocks: locate open/close tags, parse props, and extract tab items\n * from the list tokens between them.\n */\nimport type {RuntimeTab, TabsProps} from './types';\nimport type {IDGenerator} from '@diplodoc/utils';\n\nimport {DEFAULT_TABS_GROUP_PREFIX, TAB_RE, TabsVariants} from '../common';\n\nimport {trim, unquote} from './utils';\n\n/**\n * Find the token index of the matching `{% endlist %}` for a list starting at idx.\n * @param tokens - Full token list\n * @param idx - Start index\n * @returns Index of close token or null\n */\nfunction findCloseTokenIndex(tokens: Token[], idx: number): number | null {\n let level = 0;\n let i = idx;\n while (i < tokens.length) {\n if (matchOpenToken(tokens, i)) {\n level++;\n } else if (matchCloseToken(tokens, i)) {\n if (level === 0) {\n return i;\n }\n level--;\n }\n\n i++;\n }\n\n return null;\n}\n\nfunction matchCloseToken(tokens: Token[], i: number): boolean {\n return (\n tokens[i].type === 'paragraph_open' &&\n tokens[i + 1].type === 'inline' &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n );\n}\n\nfunction matchOpenToken(tokens: Token[], i: number): RegExpMatchArray | null {\n if (tokens[i].type !== 'paragraph_open' || tokens[i + 1].type !== 'inline') {\n return null;\n }\n return tokens[i + 1].content.match(TAB_RE);\n}\n\n/**\n * Parse `{% list tabs group=... %}` content into variant and group id.\n * @param content - Raw tag content after \"list tabs\"\n * @param generateID - per-file isolated ID generator used for default group id\n * @returns Parsed props (variant, group)\n */\nexport function props(content: string, generateID: IDGenerator): TabsProps {\n const clean = trim(content.replace('list tabs', ''));\n\n const props = clean.split(' ');\n const result: TabsProps = {\n content: clean,\n variant: TabsVariants.Regular,\n // DEFAULT_TABS_GROUP_PREFIX ends with '-', so strip it before passing to generateID\n // which appends '-N' itself. Result: 'defaultTabsGroup-1', 'defaultTabsGroup-2', \u2026\n // TabsController checks group.startsWith(DEFAULT_TABS_GROUP_PREFIX) which still matches.\n group: generateID(DEFAULT_TABS_GROUP_PREFIX.replace(/-$/, '')),\n };\n\n for (const prop of props) {\n const [key, value] = prop.split('=').map(trim);\n\n switch (key) {\n case 'horizontal':\n case 'radio':\n case 'dropdown':\n case 'accordion':\n result.variant = key as TabsVariants;\n break;\n case 'group':\n result.group = unquote(value);\n break;\n default:\n // TODO: lint unknown tabs props\n }\n }\n\n return result;\n}\n\ntype Result =\n | {step: number}\n | {\n content: string;\n closeTokenIndex: number;\n extraTokensAfterClose: number;\n };\n\n/**\n * Check if tokens at index start a valid `{% list tabs %}` block.\n * @param tokens - Full token list\n * @param index - Start index\n * @returns Either a step to advance, or the block content and close index for replacement\n */\nexport function tryToFindTabs(tokens: Token[], index: number): Result {\n const match = matchOpenToken(tokens, index);\n const openTag = match && match[0];\n const isNotEscaped = openTag && !(openTag.startsWith('`') && openTag.endsWith('`'));\n\n if (!match || !isNotEscaped) {\n return {\n step: 1,\n };\n }\n\n const closeTokenIndex = findCloseTokenIndex(tokens, index + 3);\n\n if (!closeTokenIndex) {\n tokens[index].attrSet('YFM005', 'true');\n\n return {\n step: 3,\n };\n }\n\n let extraTokensAfterClose = 0;\n const afterEndlistIdx = closeTokenIndex + 3; // After paragraph_open, inline, paragraph_close\n\n const openTokenLevel = tokens[index].level;\n const closeTokenLevel = tokens[closeTokenIndex].level;\n\n // dont handle tabs if closeToken has \"negative\" indent, e.g. closeToken.level < openToken.level\n if (closeTokenLevel < openTokenLevel) {\n tokens[index].attrSet('YFM005', 'true');\n return {\n step: 3,\n };\n }\n\n if (closeTokenLevel > openTokenLevel) {\n const tokenAfter = tokens[afterEndlistIdx];\n\n // do not handle tabs unless {% endlist %} is at the end of the tab content\n if (tokenAfter && tokenAfter.nesting >= 0) {\n tokens[index].attrSet('YFM005', 'true');\n return {\n step: 3,\n };\n }\n\n // remove list close tokens if `{% endlist %}` is inside the content of a tab\n if (\n tokenAfter?.type === 'list_item_close' &&\n tokens[afterEndlistIdx + 1]?.type === 'bullet_list_close'\n ) {\n extraTokensAfterClose = 2;\n }\n }\n\n return {\n content: openTag,\n closeTokenIndex,\n extraTokensAfterClose,\n };\n}\n\n/**\n * Extract tab items (name + tokens) from list tokens between list open and close/endlist.\n * @param tokens - Full token list\n * @param idx - Index after list open\n * @param closeTokenIdx - Index of {% endlist %} paragraph\n * @param TokenConstructor - Token constructor from the current MarkdownIt state\n * @returns Array of RuntimeTab\n */\nexport function findTabs(\n tokens: Token[],\n idx: number,\n closeTokenIdx: number,\n TokenConstructor: StateCore['Token'],\n): RuntimeTab[] {\n const tabs: RuntimeTab[] = [];\n let i = idx;\n let nestedLevel = -1;\n let pending: RuntimeTab = {\n name: '',\n tokens: [],\n listItem: new TokenConstructor('list_item_open', '', 0),\n };\n\n while (i < tokens.length) {\n const token = tokens[i];\n\n switch (token.type) {\n case 'ordered_list_open':\n case 'bullet_list_open':\n if (nestedLevel > -1) {\n pending.tokens.push(token);\n }\n\n nestedLevel++;\n\n break;\n case 'list_item_open':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n pending = {name: '', tokens: [], listItem: token};\n }\n\n break;\n case 'list_item_close':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n tabs.push(pending);\n }\n\n break;\n case 'ordered_list_close':\n case 'bullet_list_close':\n // The tab list may be interrupted by a dedented block (e.g. a heading)\n // and continue as a new list before {% endlist %}. Keep collecting until\n // {% endlist %}, otherwise transform() would drop everything in between.\n if (nestedLevel) {\n pending.tokens.push(token);\n }\n\n nestedLevel--;\n\n break;\n case 'paragraph_open':\n if (\n i === closeTokenIdx &&\n tokens[i + 1].content &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n ) {\n if (pending && !nestedLevel) {\n tabs.push(pending);\n }\n\n return tabs;\n }\n\n if (!pending.name && tokens[i + 1].type === 'inline') {\n pending.name = tokens[i + 1].content;\n\n i += 2;\n } else {\n pending.tokens.push(token);\n }\n break;\n default:\n pending.tokens.push(token);\n }\n i++;\n }\n\n return tabs;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "__toCommonJS", "createIDGeneratorByStrategy", "_a", "exports", "module", "exports", "module", "exports", "module", "trim", "transform", "import_utils", "slugify", "GithubSlugger", "props", "props", "onBundle", "options", "
|
|
3
|
+
"sources": ["../../node_modules/@diplodoc/utils/build/cjs/common/index.js", "../../node_modules/github-slugger/regex.js", "../../node_modules/github-slugger/index.js", "../../node_modules/slugify/slugify.js", "../../node_modules/@diplodoc/directive/node_modules/markdown-it-directive/index.js", "../../node_modules/@diplodoc/directive/src/index.ts", "../../node_modules/@diplodoc/directive/src/runtime.ts", "../../node_modules/@diplodoc/directive/src/block-boundary.ts", "../../node_modules/@diplodoc/directive/src/const.ts", "../../node_modules/@diplodoc/directive/src/helpers/index.ts", "../../node_modules/@diplodoc/directive/src/utils.ts", "../../node_modules/@diplodoc/directive/src/helpers/tokenizers.ts", "../../node_modules/@diplodoc/directive/src/helpers/registrars.ts", "../../src/plugin/index-node.ts", "../../src/plugin/transform.ts", "../../src/common.ts", "../../src/plugin/utils/strings.ts", "../../src/plugin/utils/tabs.ts", "../../src/tab-key.ts", "../../src/plugin/utils/index.ts", "../../src/plugin/variants/regular.ts", "../../src/plugin/variants/radio.ts", "../../src/plugin/variants/dropdown.ts", "../../src/plugin/variants/accordion.ts", "../../src/plugin/variants/index.ts", "../../src/plugin/generate.ts", "../../src/plugin/find.ts", "../../src/plugin/directive.ts"],
|
|
4
|
+
"sourcesContent": ["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/lib/common/index.ts\nvar index_exports = {};\n__export(index_exports, {\n AttrsParser: () => AttrsParser,\n createIDGenerator: () => createIDGenerator,\n createIDGeneratorByStrategy: () => createIDGeneratorByStrategy,\n createLoadQueue: () => createLoadQueue,\n formatHref: () => formatHref,\n getQueueStore: () => getQueueStore,\n getScriptStore: () => getScriptStore,\n isBrowser: () => isBrowser,\n parseHref: () => parseHref,\n parseMdAttrs: () => parseMdAttrs\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/lib/common/attrs.ts\nvar AttrsParser = class {\n constructor(value) {\n this.DELIMITER = \"=\";\n this.SEPARATOR = \" \";\n this.QUOTATION = '\"';\n /* allowed in keys / values chars */\n this.ALLOWED_CHARS = /[a-zA-Z0-9_\\- {}.|/]/;\n /* allowed in all query chars */\n this.VALIDATION_CHARS = /[a-zA-Z0-9_\\- {}.#=\"|/]/;\n this.state = {};\n this.#key = \"\";\n this.#pending = \"\";\n this.#isInsideQuotation = false;\n this.#didQuotationClosed = false;\n this.#selectors = {\n id: /#/,\n class: /\\./,\n attr: /[a-zA-Z-_]/\n };\n this.#handlers = Object.entries(this.#selectors);\n if (value) {\n this.parse(value);\n }\n }\n #key;\n #pending;\n #isInsideQuotation;\n #didQuotationClosed;\n #currentKeyType;\n #selectors;\n #handlers;\n parse(target) {\n const content = this.extract(target.trim());\n if (!content) {\n return {};\n }\n this.clear();\n this.state = {};\n for (const char of content) {\n this.next(char);\n }\n this.next(this.SEPARATOR);\n this.clear();\n return this.state;\n }\n apply(target) {\n const { attr: singleKeyAttrs = [], ...fullAttrs } = this.state;\n for (const [property, values] of Object.entries(fullAttrs)) {\n target.attrJoin(property, values.join(\" \"));\n }\n for (const attr of singleKeyAttrs) {\n target.attrJoin(attr, \"true\");\n }\n }\n extract(target) {\n if (!target.startsWith(\"{\")) {\n return false;\n }\n let balance = 1;\n for (let i = 1; i < target.length; i++) {\n const char = target[i];\n if (char === \"}\") {\n balance--;\n }\n if (char === \"{\") {\n balance++;\n }\n if (balance === 0) {\n const contentInside = target.slice(1, i).trim();\n return contentInside;\n }\n if (balance < 0) {\n return false;\n }\n if (!this.VALIDATION_CHARS.test(char)) {\n return false;\n }\n }\n return false;\n }\n next(value) {\n if (!this.#currentKeyType) {\n this.#currentKeyType = this.type(value);\n if (this.#currentKeyType === \"attr\") {\n this.#pending = value;\n }\n return;\n }\n if (this.isSeparator(value)) {\n if (!this.#pending) {\n if (!this.#isInsideQuotation) {\n this.append(this.#key, \" \");\n this.clear();\n return;\n }\n }\n if (!this.#key && this.#pending) {\n this.append();\n this.clear();\n return;\n }\n if (this.#isInsideQuotation && !this.#didQuotationClosed) {\n this.#pending += value;\n return;\n }\n if (this.#isInsideQuotation && this.#didQuotationClosed) {\n this.append(this.#key, this.#pending);\n }\n if (!this.#isInsideQuotation && !this.#didQuotationClosed) {\n this.append(this.#key, this.#pending);\n }\n this.clear();\n return;\n }\n if (this.isAllowedChar(value)) {\n this.#pending += value;\n return;\n }\n if (this.isQuotation(value)) {\n if (this.#isInsideQuotation) {\n this.#didQuotationClosed = true;\n } else {\n this.#isInsideQuotation = true;\n }\n }\n if (this.isDelimiter(value)) {\n if (this.#key) {\n this.#pending += value;\n return;\n }\n this.#key = this.#pending;\n this.#pending = \"\";\n }\n }\n type(of) {\n return this.#handlers.find(([_, regex]) => regex.test(of))?.[0];\n }\n append(key = this.#currentKeyType, value = this.#pending) {\n if (!key) {\n return;\n }\n if (!this.state[key]) {\n this.state[key] = [];\n }\n this.state[key].push(value);\n }\n clear() {\n this.#key = \"\";\n this.#pending = \"\";\n this.#isInsideQuotation = false;\n this.#didQuotationClosed = false;\n this.#currentKeyType = void 0;\n }\n isDelimiter(target) {\n return target === this.DELIMITER;\n }\n isSeparator(target) {\n return target === this.SEPARATOR;\n }\n isQuotation(target) {\n return target === this.QUOTATION;\n }\n isAllowedChar(target) {\n return this.ALLOWED_CHARS.test(target);\n }\n};\n\n// src/lib/common/parse-md-attrs.ts\nfunction parseMdAttrs(md, src, pos, max) {\n if (pos >= max) {\n return null;\n }\n if (src.charCodeAt(pos) !== 123) {\n return null;\n }\n const attrs = {};\n ++pos;\n pos = skipBlanks(src, pos, max);\n for (; pos < max; pos = skipBlanks(src, pos, max)) {\n if (src.charCodeAt(pos) === 125) {\n ++pos;\n return { pos, attrs };\n }\n const c = src.charCodeAt(pos);\n if (c === 35) {\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n pos = rst.pos;\n const key = \"id\", value = rst.name;\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n } else if (c === 46) {\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n pos = rst.pos;\n const key = \"class\", value = rst.name;\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n } else {\n let rst = parseAttrName(src, pos, max);\n if (rst === null) {\n return null;\n }\n const key = rst.name;\n pos = rst.pos;\n pos = skipBlanks(src, pos, max);\n if (pos >= max) {\n return null;\n }\n let value;\n if (src.charCodeAt(pos) === 61) {\n ++pos;\n pos = skipBlanks(src, pos, max);\n if (pos >= max) {\n return null;\n }\n const c2 = src.charCodeAt(pos);\n if (c2 === 34 || c2 === 39) {\n const rst2 = md.helpers.parseLinkTitle(src, pos, max);\n if (!rst2.ok) {\n return null;\n }\n value = rst2.str;\n pos = rst2.pos;\n } else {\n rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) {\n return null;\n }\n value = rst.name;\n pos = rst.pos;\n }\n } else {\n if (isBlank(src.charCodeAt(pos - 1))) {\n --pos;\n }\n value = \"\";\n }\n if (typeof value !== \"undefined\") {\n if (typeof attrs[key] === \"undefined\") {\n attrs[key] = [value];\n } else {\n attrs[key].push(value);\n }\n }\n }\n if (pos >= max) {\n return null;\n }\n const charBetween = src.charCodeAt(pos);\n if (!isBlank(charBetween) && charBetween !== 125) {\n return null;\n }\n }\n return null;\n function isBlank(code) {\n return md.utils.isSpace(code) || code === 10;\n }\n function skipBlanks(src2, pos2, max2) {\n for (; pos2 < max2; pos2++) {\n const code = src2.charCodeAt(pos2);\n if (!isBlank(code)) {\n break;\n }\n }\n return pos2;\n }\n}\nvar ATTR_NAME_RE = /^[a-z][a-z0-9\\-_]*/;\nfunction parseAttrName(src, pos, max) {\n const oldPos = pos;\n const rst = src.slice(pos, max).match(ATTR_NAME_RE);\n if (rst === null) {\n return null;\n }\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\nvar UNSURROUNDED_STRING_RE = /^[a-z0-9\\-_]+/i;\nfunction parseUnsurroundedName(src, pos, max) {\n const oldPos = pos;\n const rst = src.slice(pos, max).match(UNSURROUNDED_STRING_RE);\n if (rst === null) {\n return null;\n }\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\n\n// src/lib/common/browser.ts\nvar isBrowser = () => {\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n};\n\n// src/lib/common/extension-load-queue.ts\nvar QUEUES_SYMBOL = /* @__PURE__ */ Symbol.for(\"extension-load-queues\");\nvar SINGLE_QUEUE_SYMBOL = /* @__PURE__ */ Symbol.for(\"single-queue\");\nvar getScriptStore = (storeKey) => {\n if (isBrowser()) {\n if (!window[storeKey]) {\n window[storeKey] = [];\n } else if (!Array.isArray(window[storeKey])) {\n throw new Error(`Expected window[${String(storeKey)}] to be an array`);\n }\n return window[storeKey];\n } else {\n throw new Error(\"Cannot initialize QueueStore in a non-browser environment.\");\n }\n};\nvar ensureQueuesSymbolInitialized = () => {\n if (isBrowser()) {\n if (typeof window[QUEUES_SYMBOL] !== \"object\" || window[QUEUES_SYMBOL] === null) {\n window[QUEUES_SYMBOL] = {};\n }\n } else {\n throw new Error(\"Cannot initialize QueueStore in a non-browser environment.\");\n }\n};\nvar getQueueStore = (queueKey) => {\n ensureQueuesSymbolInitialized();\n return window[QUEUES_SYMBOL]?.[queueKey] || false;\n};\nvar createHandleQueueCreated = (queueKey) => {\n ensureQueuesSymbolInitialized();\n return (created) => {\n window[QUEUES_SYMBOL][queueKey] = created;\n };\n};\nvar createLoadQueue = ({\n store,\n createController,\n queueKey = SINGLE_QUEUE_SYMBOL,\n isQueueCreated = getQueueStore(queueKey),\n onQueueCreated = createHandleQueueCreated(queueKey)\n}) => {\n if (!store || isQueueCreated) {\n return;\n }\n onQueueCreated(true);\n const controller = createController();\n const queue = store.splice(0, store.length);\n store.push = function(...args) {\n args.forEach((callback) => {\n queue.push(callback);\n unqueue();\n });\n return queue.length;\n };\n let processing = false;\n function unqueue() {\n if (!processing) {\n next();\n }\n }\n async function next() {\n processing = true;\n const callback = queue.shift();\n if (callback) {\n await callback(controller);\n return next();\n }\n processing = false;\n }\n unqueue();\n};\n\n// src/lib/common/id-generator.ts\nfunction createIDGenerator() {\n const counters = /* @__PURE__ */ new Map();\n return function generateID(prefix) {\n if (!prefix) {\n return Math.random().toString(36).substr(2, 8);\n }\n counters.set(prefix, (counters.get(prefix) || 0) + 1);\n return `${prefix}-${counters.get(prefix)}`;\n };\n}\nfunction createIDGeneratorByStrategy(strategy = \"random\") {\n switch (strategy) {\n case \"deterministic\":\n return createIDGenerator();\n case \"constant\":\n return () => \"1\";\n case \"random\":\n default:\n return (prefix) => {\n if (!prefix) {\n return Math.random().toString(36).substr(2, 8);\n }\n return `${prefix}-${Math.random().toString(36).substr(2, 8)}`;\n };\n }\n}\n\n// src/lib/common/url.ts\nfunction parseHref(href) {\n const [beforeHash, ...hashParts] = href.split(\"#\");\n const hash = hashParts.length ? \"#\" + hashParts.join(\"#\") : null;\n const queryIndex = beforeHash.indexOf(\"?\");\n const path = queryIndex === -1 ? beforeHash : beforeHash.slice(0, queryIndex);\n const search = queryIndex === -1 ? null : beforeHash.slice(queryIndex);\n return {\n pathname: path === \"\" ? null : path,\n search,\n hash\n };\n}\nfunction formatHref({ pathname, search, hash }) {\n return (pathname || \"\") + (search || \"\") + (hash || \"\");\n}\n", "// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nmodule.exports = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g\n", "const regex = require('./regex.js')\n\nmodule.exports = BananaSlug\n\nconst own = Object.hasOwnProperty\n\nfunction BananaSlug () {\n const self = this\n\n if (!(self instanceof BananaSlug)) return new BananaSlug()\n\n self.reset()\n}\n\n/**\n * Generate a unique slug.\n * @param {string} value String of text to slugify\n * @param {boolean} [false] Keep the current case, otherwise make all lowercase\n * @return {string} A unique slug string\n */\nBananaSlug.prototype.slug = function (value, maintainCase) {\n const self = this\n let slug = slugger(value, maintainCase === true)\n const originalSlug = slug\n\n while (own.call(self.occurrences, slug)) {\n self.occurrences[originalSlug]++\n slug = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[slug] = 0\n\n return slug\n}\n\n/**\n * Reset - Forget all previous slugs\n * @return void\n */\nBananaSlug.prototype.reset = function () {\n this.occurrences = Object.create(null)\n}\n\nfunction slugger (string, maintainCase) {\n if (typeof string !== 'string') return ''\n if (!maintainCase) string = string.toLowerCase()\n return string.replace(regex, '').replace(/ /g, '-')\n}\n\nBananaSlug.slug = slugger\n", "\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"\u00A2\":\"cent\",\"\u00A3\":\"pound\",\"\u00A4\":\"currency\",\"\u00A5\":\"yen\",\"\u00A9\":\"(c)\",\"\u00AA\":\"a\",\"\u00AE\":\"(r)\",\"\u00BA\":\"o\",\"\u00C0\":\"A\",\"\u00C1\":\"A\",\"\u00C2\":\"A\",\"\u00C3\":\"A\",\"\u00C4\":\"A\",\"\u00C5\":\"A\",\"\u00C6\":\"AE\",\"\u00C7\":\"C\",\"\u00C8\":\"E\",\"\u00C9\":\"E\",\"\u00CA\":\"E\",\"\u00CB\":\"E\",\"\u00CC\":\"I\",\"\u00CD\":\"I\",\"\u00CE\":\"I\",\"\u00CF\":\"I\",\"\u00D0\":\"D\",\"\u00D1\":\"N\",\"\u00D2\":\"O\",\"\u00D3\":\"O\",\"\u00D4\":\"O\",\"\u00D5\":\"O\",\"\u00D6\":\"O\",\"\u00D8\":\"O\",\"\u00D9\":\"U\",\"\u00DA\":\"U\",\"\u00DB\":\"U\",\"\u00DC\":\"U\",\"\u00DD\":\"Y\",\"\u00DE\":\"TH\",\"\u00DF\":\"ss\",\"\u00E0\":\"a\",\"\u00E1\":\"a\",\"\u00E2\":\"a\",\"\u00E3\":\"a\",\"\u00E4\":\"a\",\"\u00E5\":\"a\",\"\u00E6\":\"ae\",\"\u00E7\":\"c\",\"\u00E8\":\"e\",\"\u00E9\":\"e\",\"\u00EA\":\"e\",\"\u00EB\":\"e\",\"\u00EC\":\"i\",\"\u00ED\":\"i\",\"\u00EE\":\"i\",\"\u00EF\":\"i\",\"\u00F0\":\"d\",\"\u00F1\":\"n\",\"\u00F2\":\"o\",\"\u00F3\":\"o\",\"\u00F4\":\"o\",\"\u00F5\":\"o\",\"\u00F6\":\"o\",\"\u00F8\":\"o\",\"\u00F9\":\"u\",\"\u00FA\":\"u\",\"\u00FB\":\"u\",\"\u00FC\":\"u\",\"\u00FD\":\"y\",\"\u00FE\":\"th\",\"\u00FF\":\"y\",\"\u0100\":\"A\",\"\u0101\":\"a\",\"\u0102\":\"A\",\"\u0103\":\"a\",\"\u0104\":\"A\",\"\u0105\":\"a\",\"\u0106\":\"C\",\"\u0107\":\"c\",\"\u010C\":\"C\",\"\u010D\":\"c\",\"\u010E\":\"D\",\"\u010F\":\"d\",\"\u0110\":\"DJ\",\"\u0111\":\"dj\",\"\u0112\":\"E\",\"\u0113\":\"e\",\"\u0116\":\"E\",\"\u0117\":\"e\",\"\u0118\":\"e\",\"\u0119\":\"e\",\"\u011A\":\"E\",\"\u011B\":\"e\",\"\u011E\":\"G\",\"\u011F\":\"g\",\"\u0122\":\"G\",\"\u0123\":\"g\",\"\u0128\":\"I\",\"\u0129\":\"i\",\"\u012A\":\"i\",\"\u012B\":\"i\",\"\u012E\":\"I\",\"\u012F\":\"i\",\"\u0130\":\"I\",\"\u0131\":\"i\",\"\u0136\":\"k\",\"\u0137\":\"k\",\"\u013B\":\"L\",\"\u013C\":\"l\",\"\u013D\":\"L\",\"\u013E\":\"l\",\"\u0141\":\"L\",\"\u0142\":\"l\",\"\u0143\":\"N\",\"\u0144\":\"n\",\"\u0145\":\"N\",\"\u0146\":\"n\",\"\u0147\":\"N\",\"\u0148\":\"n\",\"\u014C\":\"O\",\"\u014D\":\"o\",\"\u0150\":\"O\",\"\u0151\":\"o\",\"\u0152\":\"OE\",\"\u0153\":\"oe\",\"\u0154\":\"R\",\"\u0155\":\"r\",\"\u0158\":\"R\",\"\u0159\":\"r\",\"\u015A\":\"S\",\"\u015B\":\"s\",\"\u015E\":\"S\",\"\u015F\":\"s\",\"\u0160\":\"S\",\"\u0161\":\"s\",\"\u0162\":\"T\",\"\u0163\":\"t\",\"\u0164\":\"T\",\"\u0165\":\"t\",\"\u0168\":\"U\",\"\u0169\":\"u\",\"\u016A\":\"u\",\"\u016B\":\"u\",\"\u016E\":\"U\",\"\u016F\":\"u\",\"\u0170\":\"U\",\"\u0171\":\"u\",\"\u0172\":\"U\",\"\u0173\":\"u\",\"\u0174\":\"W\",\"\u0175\":\"w\",\"\u0176\":\"Y\",\"\u0177\":\"y\",\"\u0178\":\"Y\",\"\u0179\":\"Z\",\"\u017A\":\"z\",\"\u017B\":\"Z\",\"\u017C\":\"z\",\"\u017D\":\"Z\",\"\u017E\":\"z\",\"\u018F\":\"E\",\"\u0192\":\"f\",\"\u01A0\":\"O\",\"\u01A1\":\"o\",\"\u01AF\":\"U\",\"\u01B0\":\"u\",\"\u01C8\":\"LJ\",\"\u01C9\":\"lj\",\"\u01CB\":\"NJ\",\"\u01CC\":\"nj\",\"\u0218\":\"S\",\"\u0219\":\"s\",\"\u021A\":\"T\",\"\u021B\":\"t\",\"\u0259\":\"e\",\"\u02DA\":\"o\",\"\u0386\":\"A\",\"\u0388\":\"E\",\"\u0389\":\"H\",\"\u038A\":\"I\",\"\u038C\":\"O\",\"\u038E\":\"Y\",\"\u038F\":\"W\",\"\u0390\":\"i\",\"\u0391\":\"A\",\"\u0392\":\"B\",\"\u0393\":\"G\",\"\u0394\":\"D\",\"\u0395\":\"E\",\"\u0396\":\"Z\",\"\u0397\":\"H\",\"\u0398\":\"8\",\"\u0399\":\"I\",\"\u039A\":\"K\",\"\u039B\":\"L\",\"\u039C\":\"M\",\"\u039D\":\"N\",\"\u039E\":\"3\",\"\u039F\":\"O\",\"\u03A0\":\"P\",\"\u03A1\":\"R\",\"\u03A3\":\"S\",\"\u03A4\":\"T\",\"\u03A5\":\"Y\",\"\u03A6\":\"F\",\"\u03A7\":\"X\",\"\u03A8\":\"PS\",\"\u03A9\":\"W\",\"\u03AA\":\"I\",\"\u03AB\":\"Y\",\"\u03AC\":\"a\",\"\u03AD\":\"e\",\"\u03AE\":\"h\",\"\u03AF\":\"i\",\"\u03B0\":\"y\",\"\u03B1\":\"a\",\"\u03B2\":\"b\",\"\u03B3\":\"g\",\"\u03B4\":\"d\",\"\u03B5\":\"e\",\"\u03B6\":\"z\",\"\u03B7\":\"h\",\"\u03B8\":\"8\",\"\u03B9\":\"i\",\"\u03BA\":\"k\",\"\u03BB\":\"l\",\"\u03BC\":\"m\",\"\u03BD\":\"n\",\"\u03BE\":\"3\",\"\u03BF\":\"o\",\"\u03C0\":\"p\",\"\u03C1\":\"r\",\"\u03C2\":\"s\",\"\u03C3\":\"s\",\"\u03C4\":\"t\",\"\u03C5\":\"y\",\"\u03C6\":\"f\",\"\u03C7\":\"x\",\"\u03C8\":\"ps\",\"\u03C9\":\"w\",\"\u03CA\":\"i\",\"\u03CB\":\"y\",\"\u03CC\":\"o\",\"\u03CD\":\"y\",\"\u03CE\":\"w\",\"\u0401\":\"Yo\",\"\u0402\":\"DJ\",\"\u0404\":\"Ye\",\"\u0406\":\"I\",\"\u0407\":\"Yi\",\"\u0408\":\"J\",\"\u0409\":\"LJ\",\"\u040A\":\"NJ\",\"\u040B\":\"C\",\"\u040F\":\"DZ\",\"\u0410\":\"A\",\"\u0411\":\"B\",\"\u0412\":\"V\",\"\u0413\":\"G\",\"\u0414\":\"D\",\"\u0415\":\"E\",\"\u0416\":\"Zh\",\"\u0417\":\"Z\",\"\u0418\":\"I\",\"\u0419\":\"J\",\"\u041A\":\"K\",\"\u041B\":\"L\",\"\u041C\":\"M\",\"\u041D\":\"N\",\"\u041E\":\"O\",\"\u041F\":\"P\",\"\u0420\":\"R\",\"\u0421\":\"S\",\"\u0422\":\"T\",\"\u0423\":\"U\",\"\u0424\":\"F\",\"\u0425\":\"H\",\"\u0426\":\"C\",\"\u0427\":\"Ch\",\"\u0428\":\"Sh\",\"\u0429\":\"Sh\",\"\u042A\":\"U\",\"\u042B\":\"Y\",\"\u042C\":\"\",\"\u042D\":\"E\",\"\u042E\":\"Yu\",\"\u042F\":\"Ya\",\"\u0430\":\"a\",\"\u0431\":\"b\",\"\u0432\":\"v\",\"\u0433\":\"g\",\"\u0434\":\"d\",\"\u0435\":\"e\",\"\u0436\":\"zh\",\"\u0437\":\"z\",\"\u0438\":\"i\",\"\u0439\":\"j\",\"\u043A\":\"k\",\"\u043B\":\"l\",\"\u043C\":\"m\",\"\u043D\":\"n\",\"\u043E\":\"o\",\"\u043F\":\"p\",\"\u0440\":\"r\",\"\u0441\":\"s\",\"\u0442\":\"t\",\"\u0443\":\"u\",\"\u0444\":\"f\",\"\u0445\":\"h\",\"\u0446\":\"c\",\"\u0447\":\"ch\",\"\u0448\":\"sh\",\"\u0449\":\"sh\",\"\u044A\":\"u\",\"\u044B\":\"y\",\"\u044C\":\"\",\"\u044D\":\"e\",\"\u044E\":\"yu\",\"\u044F\":\"ya\",\"\u0451\":\"yo\",\"\u0452\":\"dj\",\"\u0454\":\"ye\",\"\u0456\":\"i\",\"\u0457\":\"yi\",\"\u0458\":\"j\",\"\u0459\":\"lj\",\"\u045A\":\"nj\",\"\u045B\":\"c\",\"\u045D\":\"u\",\"\u045F\":\"dz\",\"\u0490\":\"G\",\"\u0491\":\"g\",\"\u0492\":\"GH\",\"\u0493\":\"gh\",\"\u049A\":\"KH\",\"\u049B\":\"kh\",\"\u04A2\":\"NG\",\"\u04A3\":\"ng\",\"\u04AE\":\"UE\",\"\u04AF\":\"ue\",\"\u04B0\":\"U\",\"\u04B1\":\"u\",\"\u04BA\":\"H\",\"\u04BB\":\"h\",\"\u04D8\":\"AE\",\"\u04D9\":\"ae\",\"\u04E8\":\"OE\",\"\u04E9\":\"oe\",\"\u0531\":\"A\",\"\u0532\":\"B\",\"\u0533\":\"G\",\"\u0534\":\"D\",\"\u0535\":\"E\",\"\u0536\":\"Z\",\"\u0537\":\"E\\'\",\"\u0538\":\"Y\\'\",\"\u0539\":\"T\\'\",\"\u053A\":\"JH\",\"\u053B\":\"I\",\"\u053C\":\"L\",\"\u053D\":\"X\",\"\u053E\":\"C\\'\",\"\u053F\":\"K\",\"\u0540\":\"H\",\"\u0541\":\"D\\'\",\"\u0542\":\"GH\",\"\u0543\":\"TW\",\"\u0544\":\"M\",\"\u0545\":\"Y\",\"\u0546\":\"N\",\"\u0547\":\"SH\",\"\u0549\":\"CH\",\"\u054A\":\"P\",\"\u054B\":\"J\",\"\u054C\":\"R\\'\",\"\u054D\":\"S\",\"\u054E\":\"V\",\"\u054F\":\"T\",\"\u0550\":\"R\",\"\u0551\":\"C\",\"\u0553\":\"P\\'\",\"\u0554\":\"Q\\'\",\"\u0555\":\"O\\'\\'\",\"\u0556\":\"F\",\"\u0587\":\"EV\",\"\u0621\":\"a\",\"\u0622\":\"aa\",\"\u0623\":\"a\",\"\u0624\":\"u\",\"\u0625\":\"i\",\"\u0626\":\"e\",\"\u0627\":\"a\",\"\u0628\":\"b\",\"\u0629\":\"h\",\"\u062A\":\"t\",\"\u062B\":\"th\",\"\u062C\":\"j\",\"\u062D\":\"h\",\"\u062E\":\"kh\",\"\u062F\":\"d\",\"\u0630\":\"th\",\"\u0631\":\"r\",\"\u0632\":\"z\",\"\u0633\":\"s\",\"\u0634\":\"sh\",\"\u0635\":\"s\",\"\u0636\":\"dh\",\"\u0637\":\"t\",\"\u0638\":\"z\",\"\u0639\":\"a\",\"\u063A\":\"gh\",\"\u0641\":\"f\",\"\u0642\":\"q\",\"\u0643\":\"k\",\"\u0644\":\"l\",\"\u0645\":\"m\",\"\u0646\":\"n\",\"\u0647\":\"h\",\"\u0648\":\"w\",\"\u0649\":\"a\",\"\u064A\":\"y\",\"\u064B\":\"an\",\"\u064C\":\"on\",\"\u064D\":\"en\",\"\u064E\":\"a\",\"\u064F\":\"u\",\"\u0650\":\"e\",\"\u0652\":\"\",\"\u0660\":\"0\",\"\u0661\":\"1\",\"\u0662\":\"2\",\"\u0663\":\"3\",\"\u0664\":\"4\",\"\u0665\":\"5\",\"\u0666\":\"6\",\"\u0667\":\"7\",\"\u0668\":\"8\",\"\u0669\":\"9\",\"\u067E\":\"p\",\"\u0686\":\"ch\",\"\u0698\":\"zh\",\"\u06A9\":\"k\",\"\u06AF\":\"g\",\"\u06CC\":\"y\",\"\u06F0\":\"0\",\"\u06F1\":\"1\",\"\u06F2\":\"2\",\"\u06F3\":\"3\",\"\u06F4\":\"4\",\"\u06F5\":\"5\",\"\u06F6\":\"6\",\"\u06F7\":\"7\",\"\u06F8\":\"8\",\"\u06F9\":\"9\",\"\u0E3F\":\"baht\",\"\u10D0\":\"a\",\"\u10D1\":\"b\",\"\u10D2\":\"g\",\"\u10D3\":\"d\",\"\u10D4\":\"e\",\"\u10D5\":\"v\",\"\u10D6\":\"z\",\"\u10D7\":\"t\",\"\u10D8\":\"i\",\"\u10D9\":\"k\",\"\u10DA\":\"l\",\"\u10DB\":\"m\",\"\u10DC\":\"n\",\"\u10DD\":\"o\",\"\u10DE\":\"p\",\"\u10DF\":\"zh\",\"\u10E0\":\"r\",\"\u10E1\":\"s\",\"\u10E2\":\"t\",\"\u10E3\":\"u\",\"\u10E4\":\"f\",\"\u10E5\":\"k\",\"\u10E6\":\"gh\",\"\u10E7\":\"q\",\"\u10E8\":\"sh\",\"\u10E9\":\"ch\",\"\u10EA\":\"ts\",\"\u10EB\":\"dz\",\"\u10EC\":\"ts\",\"\u10ED\":\"ch\",\"\u10EE\":\"kh\",\"\u10EF\":\"j\",\"\u10F0\":\"h\",\"\u1E62\":\"S\",\"\u1E63\":\"s\",\"\u1E80\":\"W\",\"\u1E81\":\"w\",\"\u1E82\":\"W\",\"\u1E83\":\"w\",\"\u1E84\":\"W\",\"\u1E85\":\"w\",\"\u1E9E\":\"SS\",\"\u1EA0\":\"A\",\"\u1EA1\":\"a\",\"\u1EA2\":\"A\",\"\u1EA3\":\"a\",\"\u1EA4\":\"A\",\"\u1EA5\":\"a\",\"\u1EA6\":\"A\",\"\u1EA7\":\"a\",\"\u1EA8\":\"A\",\"\u1EA9\":\"a\",\"\u1EAA\":\"A\",\"\u1EAB\":\"a\",\"\u1EAC\":\"A\",\"\u1EAD\":\"a\",\"\u1EAE\":\"A\",\"\u1EAF\":\"a\",\"\u1EB0\":\"A\",\"\u1EB1\":\"a\",\"\u1EB2\":\"A\",\"\u1EB3\":\"a\",\"\u1EB4\":\"A\",\"\u1EB5\":\"a\",\"\u1EB6\":\"A\",\"\u1EB7\":\"a\",\"\u1EB8\":\"E\",\"\u1EB9\":\"e\",\"\u1EBA\":\"E\",\"\u1EBB\":\"e\",\"\u1EBC\":\"E\",\"\u1EBD\":\"e\",\"\u1EBE\":\"E\",\"\u1EBF\":\"e\",\"\u1EC0\":\"E\",\"\u1EC1\":\"e\",\"\u1EC2\":\"E\",\"\u1EC3\":\"e\",\"\u1EC4\":\"E\",\"\u1EC5\":\"e\",\"\u1EC6\":\"E\",\"\u1EC7\":\"e\",\"\u1EC8\":\"I\",\"\u1EC9\":\"i\",\"\u1ECA\":\"I\",\"\u1ECB\":\"i\",\"\u1ECC\":\"O\",\"\u1ECD\":\"o\",\"\u1ECE\":\"O\",\"\u1ECF\":\"o\",\"\u1ED0\":\"O\",\"\u1ED1\":\"o\",\"\u1ED2\":\"O\",\"\u1ED3\":\"o\",\"\u1ED4\":\"O\",\"\u1ED5\":\"o\",\"\u1ED6\":\"O\",\"\u1ED7\":\"o\",\"\u1ED8\":\"O\",\"\u1ED9\":\"o\",\"\u1EDA\":\"O\",\"\u1EDB\":\"o\",\"\u1EDC\":\"O\",\"\u1EDD\":\"o\",\"\u1EDE\":\"O\",\"\u1EDF\":\"o\",\"\u1EE0\":\"O\",\"\u1EE1\":\"o\",\"\u1EE2\":\"O\",\"\u1EE3\":\"o\",\"\u1EE4\":\"U\",\"\u1EE5\":\"u\",\"\u1EE6\":\"U\",\"\u1EE7\":\"u\",\"\u1EE8\":\"U\",\"\u1EE9\":\"u\",\"\u1EEA\":\"U\",\"\u1EEB\":\"u\",\"\u1EEC\":\"U\",\"\u1EED\":\"u\",\"\u1EEE\":\"U\",\"\u1EEF\":\"u\",\"\u1EF0\":\"U\",\"\u1EF1\":\"u\",\"\u1EF2\":\"Y\",\"\u1EF3\":\"y\",\"\u1EF4\":\"Y\",\"\u1EF5\":\"y\",\"\u1EF6\":\"Y\",\"\u1EF7\":\"y\",\"\u1EF8\":\"Y\",\"\u1EF9\":\"y\",\"\u2013\":\"-\",\"\u2018\":\"\\'\",\"\u2019\":\"\\'\",\"\u201C\":\"\\\\\\\"\",\"\u201D\":\"\\\\\\\"\",\"\u201E\":\"\\\\\\\"\",\"\u2020\":\"+\",\"\u2022\":\"*\",\"\u2026\":\"...\",\"\u20A0\":\"ecu\",\"\u20A2\":\"cruzeiro\",\"\u20A3\":\"french franc\",\"\u20A4\":\"lira\",\"\u20A5\":\"mill\",\"\u20A6\":\"naira\",\"\u20A7\":\"peseta\",\"\u20A8\":\"rupee\",\"\u20A9\":\"won\",\"\u20AA\":\"new shequel\",\"\u20AB\":\"dong\",\"\u20AC\":\"euro\",\"\u20AD\":\"kip\",\"\u20AE\":\"tugrik\",\"\u20AF\":\"drachma\",\"\u20B0\":\"penny\",\"\u20B1\":\"peso\",\"\u20B2\":\"guarani\",\"\u20B3\":\"austral\",\"\u20B4\":\"hryvnia\",\"\u20B5\":\"cedi\",\"\u20B8\":\"kazakhstani tenge\",\"\u20B9\":\"indian rupee\",\"\u20BA\":\"turkish lira\",\"\u20BD\":\"russian ruble\",\"\u20BF\":\"bitcoin\",\"\u2120\":\"sm\",\"\u2122\":\"tm\",\"\u2202\":\"d\",\"\u2206\":\"delta\",\"\u2211\":\"sum\",\"\u221E\":\"infinity\",\"\u2665\":\"love\",\"\u5143\":\"yuan\",\"\u5186\":\"yen\",\"\uFDFC\":\"rial\",\"\uFEF5\":\"laa\",\"\uFEF7\":\"laa\",\"\uFEF9\":\"lai\",\"\uFEFB\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"\u0419\":\"Y\",\"\u0426\":\"Ts\",\"\u0429\":\"Sht\",\"\u042A\":\"A\",\"\u042C\":\"Y\",\"\u0439\":\"y\",\"\u0446\":\"ts\",\"\u0449\":\"sht\",\"\u044A\":\"a\",\"\u044C\":\"y\"},\"de\":{\"\u00C4\":\"AE\",\"\u00E4\":\"ae\",\"\u00D6\":\"OE\",\"\u00F6\":\"oe\",\"\u00DC\":\"UE\",\"\u00FC\":\"ue\",\"\u00DF\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"\u2211\":\"summe\",\"\u221E\":\"unendlich\",\"\u2665\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"\u00A2\":\"centavos\",\"\u00A3\":\"libras\",\"\u00A4\":\"moneda\",\"\u20A3\":\"francos\",\"\u2211\":\"suma\",\"\u221E\":\"infinito\",\"\u2665\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"\u00A2\":\"centime\",\"\u00A3\":\"livre\",\"\u00A4\":\"devise\",\"\u20A3\":\"franc\",\"\u2211\":\"somme\",\"\u221E\":\"infini\",\"\u2665\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"\u00A2\":\"centavo\",\"\u2211\":\"soma\",\"\u00A3\":\"libra\",\"\u221E\":\"infinito\",\"\u2665\":\"amor\"},\"uk\":{\"\u0418\":\"Y\",\"\u0438\":\"y\",\"\u0419\":\"Y\",\"\u0439\":\"y\",\"\u0426\":\"Ts\",\"\u0446\":\"ts\",\"\u0425\":\"Kh\",\"\u0445\":\"kh\",\"\u0429\":\"Shch\",\"\u0449\":\"shch\",\"\u0413\":\"H\",\"\u0433\":\"h\"},\"vi\":{\"\u0110\":\"D\",\"\u0111\":\"d\"},\"da\":{\"\u00D8\":\"OE\",\"\u00F8\":\"oe\",\"\u00C5\":\"AA\",\"\u00E5\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"st\u00F8rre end\"},\"nb\":{\"&\":\"og\",\"\u00C5\":\"AA\",\"\u00C6\":\"AE\",\"\u00D8\":\"OE\",\"\u00E5\":\"aa\",\"\u00E6\":\"ae\",\"\u00F8\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"\u00C5\":\"AA\",\"\u00C4\":\"AE\",\"\u00D6\":\"OE\",\"\u00E5\":\"aa\",\"\u00E4\":\"ae\",\"\u00F6\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch];\n if (appendChar === undefined) appendChar = charMap[ch];\n if (appendChar === undefined) appendChar = ch;\n if (appendChar === replacement) appendChar = ' ';\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n", "'use strict';\n\nfunction isBlank(code) {\n switch (code) {\n case 0x09/* TAB */:\n case 0x20/* SPACE */:\n case 0x0A/* LF */:\n return true;\n }\n return false;\n}\n\n// return pos:\n// aaaa bbb\n// ^\nfunction skipBlanks(src, pos, max) {\n for (; pos < max && isBlank(src.charCodeAt(pos)); ++pos) ;\n return pos;\n}\n\nfunction skipBlanksBack(src, pos, min) {\n for (; min < pos && isBlank(src.charCodeAt(pos - 1)); --pos) ;\n return pos;\n}\n\n// follow spec from\n// <https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name> (xml attr name)\n// i'm lazy of adapting non-ASCII characters (zero width space and so on are toooooo much annoying)\nconst DIRECTIVE_NAME_RE = /^[a-z][a-z0-9\\-_]*/i;\nconst normalizeDirectiveName = s => s.toLowerCase().replace('_', '-');\n\n// :video[description](https://www.youtube.com/watch?v=0123456789A){.dark #video}\nfunction parseDirectiveName(src, pos, max) {\n // will return null when pos >= max\n const oldPos = pos;\n const rst = src.slice(pos, max).match(DIRECTIVE_NAME_RE);\n if (rst === null) return null;\n pos += rst[0].length;\n return { pos, name: normalizeDirectiveName(src.slice(oldPos, pos)) };\n}\n\nfunction parseLinkDestinationLabel(md, src, pos, max) {\n if (pos >= max) return null;\n if (src.charCodeAt(pos) !== 0x28/* ( */) return null;\n\n const dests = [];\n ++pos, pos = skipBlanks(src, pos, max);\n for (; pos < max; pos = skipBlanks(src, pos, max)) {\n if (src.charCodeAt(pos) === 0x29/* ) */) {\n ++pos;\n return { pos, dests };\n }\n\n const c = src.charCodeAt(pos);\n if (c === 0x22/* \" */ || c === 0x27/* ' */ || c === 0x28/* ( */) {\n // String\n const rst = md.helpers.parseLinkTitle(src, pos, max);\n if (!rst.ok) return null;\n pos = rst.pos;\n dests.push([ 'string', rst.str ]);\n } else {\n // Link\n const rst = md.helpers.parseLinkDestination(src, pos, max);\n if (!rst.ok) return null;\n pos = rst.pos;\n dests.push([ 'link', rst.str ]);\n }\n\n // there must be a blank between strings and links\n if (pos >= max) return null;\n const charBetween = src.charCodeAt(pos);\n if (!isBlank(charBetween) && charBetween !== 0x29/* ) */) return null;\n }\n\n return null;\n}\n\n// follow spec from\n// <https://www.w3.org/TR/xml/#sec-common-syn> (xml attr name)\n// reason of not adapting non-ASCII characters are same as DIRECTIVE_NAME_RE's\nconst ATTR_NAME_RE = /^[a-z][a-z0-9\\-_]*/;\n\nfunction parseAttrName(src, pos, max) {\n // will return null when pos >= max\n const oldPos = pos;\n const rst = src.slice(pos, max).match(ATTR_NAME_RE);\n if (rst === null) return null;\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\n\n// base64 as minimum allowed chars\nconst UNSURROUNDED_STRING_RE = /^[a-z0-9\\-_]+/i;\n\nfunction parseUnsurroundedName(src, pos, max) {\n // will return null when pos >= max\n const oldPos = pos;\n const rst = src.slice(pos, max).match(UNSURROUNDED_STRING_RE);\n if (rst === null) return null;\n pos += rst[0].length;\n return { pos, name: src.slice(oldPos, pos) };\n}\n\nfunction parseAttrLabel(md, src, pos, max) {\n if (pos >= max) return null;\n if (src.charCodeAt(pos) !== 0x7B/* { */) return null;\n\n const attrs = Object.create(null);\n ++pos, pos = skipBlanks(src, pos, max);\n for (; pos < max; pos = skipBlanks(src, pos, max)) {\n if (src.charCodeAt(pos) === 0x7D/* } */) {\n ++pos;\n\n for (const key in attrs) {\n if (attrs[key].length === 1) attrs[key] = attrs[key][0];\n }\n\n return { pos, attrs: { ...attrs } };\n }\n\n const c = src.charCodeAt(pos);\n if (c === 0x23/* # */) {\n // id\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) return null;\n pos = rst.pos;\n const key = 'id', value = rst.name;\n if (typeof attrs[key] === 'undefined') {\n attrs[key] = [ value ];\n } else {\n attrs[key].push(value);\n }\n } else if (c === 0x2E/* . */) {\n // class\n ++pos;\n const rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) return null;\n pos = rst.pos;\n // store\n const key = 'class', value = rst.name;\n if (typeof attrs[key] === 'undefined') {\n attrs[key] = [ value ];\n } else {\n attrs[key].push(value);\n }\n } else {\n // normal attrs\n // key\n let rst = parseAttrName(src, pos, max);\n if (rst === null) return null;\n const key = rst.name;\n pos = rst.pos, pos = skipBlanks(src, pos, max);\n // =\n if (pos >= max) return null;\n if (src.charCodeAt(pos) !== 0x3D/* = */) return null;\n ++pos, pos = skipBlanks(src, pos, max);\n // value\n if (pos >= max) return null;\n let value;\n const c = src.charCodeAt(pos);\n if (c === 0x22/* \" */ || c === 0x27/* ' */) {\n rst = md.helpers.parseLinkTitle(src, pos, max);\n if (!rst.ok) return null;\n value = rst.str;\n pos = rst.pos;\n } else {\n rst = parseUnsurroundedName(src, pos, max);\n if (rst === null) return null;\n value = rst.name;\n pos = rst.pos;\n }\n // store\n if (typeof attrs[key] === 'undefined') {\n attrs[key] = [ value ];\n } else {\n attrs[key].push(value);\n }\n }\n\n // there must be a blank between attrs\n if (pos >= max) return null;\n const charBetween = src.charCodeAt(pos);\n if (!isBlank(charBetween) && charBetween !== 0x7D/* } */) return null;\n }\n\n return null;\n}\n\nfunction parseDirective(state, src, pos, max, allowSpaceBetween) {\n const md = state.md;\n\n // Directive name (required)\n const nameResult = parseDirectiveName(src, pos, max);\n // parser failed to find directive name, so it's not a valid directive\n if (nameResult === null) return null;\n const name = nameResult.name;\n pos = nameResult.pos;\n if (allowSpaceBetween) pos = skipBlanks(src, pos, max);\n\n // Link text (optional)\n const labelStart = pos,\n labelEnd = md.helpers.parseLinkLabel(state, labelStart);\n let content;\n let contentStart, contentEnd;\n if (labelEnd >= 0) {\n content = src.slice(pos + 1, labelEnd);\n pos = labelEnd + 1;\n contentStart = labelStart + 1;\n contentEnd = labelEnd;\n }\n if (allowSpaceBetween) pos = skipBlanks(src, pos, max);\n\n // Link destinations (optional)\n const destsStart = pos;\n const destsResult = parseLinkDestinationLabel(md, src, destsStart, max);\n let dests;\n if (destsResult !== null) {\n dests = destsResult.dests;\n pos = destsResult.pos;\n } else if (typeof state.env.references !== 'undefined') {\n // Reference mode\n const destsEnd = md.helpers.parseLinkLabel(state, destsStart);\n if (destsEnd >= 0) {\n const refText = src.slice(destsStart + 1, destsEnd);\n const ref = state.env.references[md.utils.normalizeReference(refText)];\n if (ref) {\n dests = [ [ 'link', ref.href ], [ 'string', ref.title ] ];\n pos = destsEnd + 1;\n }\n } else if (content !== undefined) {\n const ref = state.env.references[md.utils.normalizeReference(content)];\n if (ref) {\n dests = [ [ 'link', ref.href ], [ 'string', ref.title ] ];\n }\n }\n }\n if (allowSpaceBetween) pos = skipBlanks(src, pos, max);\n\n // Parse attributes (optional)\n const attrsResult = parseAttrLabel(md, src, pos, max);\n let attrs;\n if (attrsResult !== null) {\n attrs = attrsResult.attrs;\n pos = attrsResult.pos;\n }\n if (allowSpaceBetween) pos = skipBlanks(src, pos, max);\n\n return { directiveName: name, content, dests, attrs, contentStart, contentEnd, pos }\n}\n\nfunction inlineDirectiveRule(state, silent) {\n const md = state.md, src = state.src;\n\n const max = state.posMax;\n let pos = state.pos;\n if (src.charCodeAt(pos) !== 0x3A/* : */) return false;\n ++pos;\n\n const rst = parseDirective(state, src, pos, max, false);\n if (rst === null) return false;\n const { directiveName, content, dests, attrs, contentStart, contentEnd } = rst;\n const handler = md.inlineDirectives[directiveName];\n // parser failed to find correspond directive name, so it's not a valid directive\n if (typeof handler === 'undefined') return false;\n pos = rst.pos;\n\n // Tokenlize\n if (!silent) {\n // markdown-it uses escape rule to unescape content in `[text]`,\n // and use unescapeAll function to unescape content in `\"title\"`.\n //\n // Directive handler needs to use unescapeAll manually\n // since different plugins have different demands\n // (some treat the content as markdown and continue to parse it,\n // others treat the content as text so they need to unescape it).\n //\n // Markdown's design that paired `[]` doesn't need to be escaped\n // avoids \"escape melaleuca\" like `[\\[\\\\[\\\\]\\]]`. Clever design.\n const isValidContent = handler({\n state,\n content,\n dests,\n attrs,\n contentStart,\n contentEnd,\n directiveStart: state.pos,\n directiveEnd: pos\n });\n if (isValidContent === false) return false;\n }\n\n state.pos = pos;\n return true;\n}\n\nfunction findNextLine(src, startLine, endLine, state) {\n let line = startLine + 1;\n let level = 1;\n for (; line < endLine && level !== 0; ++line) {\n const max = state.eMarks[line];\n let pos = state.bMarks[line] + state.tShift[line];\n let pos2 = state.skipChars(pos, 0x3A);\n let colonsCount = pos2 - pos;\n\n if (colonsCount >= 3) {\n pos2 = skipBlanks(src, pos2, max);\n if (pos2 === max) {\n --level; // close mark\n continue;\n }\n }\n\n // if it's an opening marker, increase nesting level\n if (colonsCount >= 3 && pos2 < max) {\n ++level;\n }\n }\n if (level !== 0) return -1; // cannot find matched close mark (:::)\n return line;\n}\n\nfunction blockDirectiveRule(state, startLine, endLine, silent) {\n const md = state.md, src = state.src;\n\n const max = state.eMarks[startLine];\n let pos = state.bMarks[startLine] + state.tShift[startLine];\n if (pos + 3 > max // eMark point to the char after LF and no possible of a two char line (::\\n which is not valid)\n || src.charCodeAt(pos) !== 0x3A/* : */\n || src.charCodeAt(pos + 1) !== 0x3A/* : */\n ) {\n return false\n }\n pos += 2;\n\n // detect if one line mode and skip to directive name\n let oneLine = false;\n if (src.charCodeAt(pos) !== 0x3A/* : */) {\n oneLine = true;\n } else {\n pos = state.skipChars(pos, 0x3A/* : */);\n }\n pos = skipBlanks(src, pos, max);\n\n // parseLinkLabel need a StateInline state instead of StateBlock state\n // which don't have a skipToken method\n const inlineState = new md.inline.State(src, md, state.env, []);\n const rst = parseDirective(inlineState, src, pos, max, true);\n if (rst === null) return false;\n const { directiveName, content: inlineContent, dests, attrs, contentStart: inlineContentStart, contentEnd: inlineContentEnd } = rst;\n const handler = md.blockDirectives[directiveName];\n // parser failed to find correspond directive name, so it's not a valid directive\n if (typeof handler === 'undefined') return false;\n pos = rst.pos;\n\n // :::: hello [] () {} comment ::::\n // ~~~~~~~\n const contentTitleStart = pos;\n let posEnd = skipBlanksBack(src, max, pos);\n let tmp = state.skipCharsBack(posEnd, 0x3A/* : */, pos);\n // :: name [](){} next thing:\n // ~~~~~~~~~~~\n if (posEnd - tmp > 1) posEnd = tmp;\n const contentTitleEnd = skipBlanksBack(src, posEnd, pos);\n const contentTitle = src.slice(contentTitleStart, contentTitleEnd);\n\n if (oneLine) {\n // Tokenlize\n if (!silent) {\n const isValidContent = handler({\n state,\n contentTitle,\n inlineContent,\n dests,\n attrs,\n contentTitleStart,\n contentTitleEnd,\n inlineContentStart,\n inlineContentEnd,\n directiveStartLine: startLine,\n directiveEndLine: startLine + 1\n });\n if (isValidContent === false) return false;\n }\n\n state.line = startLine + 1;\n return true;\n }\n\n const nextLine = findNextLine(src, startLine, endLine, state);\n if (nextLine === -1) return false; // cannot find matched close mark (:::)\n const content = state.getLines(startLine + 1, nextLine - 1, state.sCount[startLine], true);\n if (!silent) {\n const isValidContent = handler({\n state,\n content,\n contentTitle,\n inlineContent,\n dests,\n attrs,\n contentStartLine: startLine + 1,\n contentEndLine: nextLine - 1,\n contentTitleStart,\n contentTitleEnd,\n inlineContentStart,\n inlineContentEnd,\n directiveStartLine: startLine,\n directiveEndLine: nextLine\n });\n if (isValidContent === false) return false;\n }\n\n state.line = nextLine;\n return true;\n}\n\nfunction load(md) {\n if (md.inlineDirectives) return;\n\n // init\n md.inlineDirectives = {}\n md.blockDirectives = {}\n\n md.inline.ruler.push('inline_directive', inlineDirectiveRule);\n md.block.ruler.before('heading', 'block_directive', blockDirectiveRule);\n}\n\nmodule.exports = load;\n", "import type {DirectiveHost} from './markdown-it';\nimport type {BoundaryState} from './runtime';\n\nimport directivePlugin from 'markdown-it-directive';\n\nimport {withBlockBoundary} from './block-boundary';\nimport {runtimeRules} from './runtime';\n\nconst BLOCK_LABELS_CONSTRAINED = Symbol('block-labels-constrained');\n\nexport type DirectiveInlineState = {src: string; pos: number; posMax: number; env: unknown};\nexport type DirectiveBlockState = BoundaryState & {\n env: unknown;\n skipCharsBack(pos: number, code: number, min: number): number;\n getLines(begin: number, end: number, indent: number, keepLastLF: boolean): string;\n};\ntype LinkResult = {ok: boolean; pos: number; str: string};\nexport type DirectiveParserHost<B, I> = DirectiveHost<B, I> & {\n helpers: {\n parseLinkLabel(state: I, start: number, disableNested?: boolean): number;\n parseLinkTitle(src: string, pos: number, max: number): LinkResult;\n parseLinkDestination(src: string, pos: number, max: number): LinkResult;\n };\n utils: {normalizeReference(value: string): string};\n};\n\nfunction lineEnd(src: string, start: number, fallback: number): number {\n const lf = src.indexOf('\\n', start);\n const cr = src.indexOf('\\r', start);\n const ends = [lf, cr].filter((position) => position >= 0);\n\n return ends.length ? Math.min(...ends) : fallback;\n}\n\nfunction constrainBlockDirectiveLabels<\n B extends DirectiveBlockState,\n I extends DirectiveInlineState,\n>(md: DirectiveParserHost<B, I>): void {\n if (Reflect.get(md, BLOCK_LABELS_CONSTRAINED)) {\n return;\n }\n\n const rule = runtimeRules<B>(md.block.ruler).find(({name}) => name === 'block_directive');\n\n if (!rule) {\n return;\n }\n\n const blockDirectiveRule = withBlockBoundary(rule.fn);\n if (!Reflect.set(md, BLOCK_LABELS_CONSTRAINED, true)) {\n throw new TypeError('Cannot mark directive block labels as constrained');\n }\n rule.fn = (state, startLine, endLine, silent) => {\n const parseLinkLabel = md.helpers.parseLinkLabel;\n\n md.helpers.parseLinkLabel = (inlineState: I, start: number, disableNested?: boolean) => {\n if (inlineState.src.charCodeAt(start) !== 0x5b /* [ */) {\n return -1;\n }\n\n const posMax = inlineState.posMax;\n inlineState.posMax = Math.min(posMax, lineEnd(inlineState.src, start, posMax));\n\n try {\n return parseLinkLabel(inlineState, start, disableNested);\n } finally {\n inlineState.posMax = posMax;\n }\n };\n\n try {\n return blockDirectiveRule(state, startLine, endLine, silent);\n } finally {\n md.helpers.parseLinkLabel = parseLinkLabel;\n }\n };\n}\n\nexport {\n enableBlockDirectives,\n enableInlineDirectives,\n disableBlockDirectives,\n disableInlineDirectives,\n} from './helpers';\nexport {\n registerContainerDirective,\n registerLeafBlockDirective,\n registerInlineDirective,\n} from './helpers/registrars';\nexport {\n tokenizeBlockContent,\n tokenizeInlineContent,\n createBlockInlineToken,\n} from './helpers/tokenizers';\n\nexport type {\n BlockContentState,\n InlineContentState,\n DirectiveToken,\n BlockHost,\n InlineHost,\n} from './markdown-it';\n\nexport type {\n DirectiveAttrs,\n DirectiveDests,\n LeafBlockDirectiveConfig,\n LeafBlockDirectiveParams,\n LeafBlockDirectiveHandler,\n CodeContainerDirectiveConfig,\n ContainerDirectiveConfig,\n ContainerDirectiveParams,\n ContainerDirectiveHandler,\n InlineDirectiveParams,\n InlineDirectiveHandler,\n} from './types';\n\nexport const directiveParser = () => {\n return <B extends DirectiveBlockState, I extends DirectiveInlineState>(\n md: DirectiveParserHost<B, I>,\n ) => {\n // The pinned upstream JS installer only installs its two rules and tables.\n // Keep its full native dev declaration out of our public host contract.\n Reflect.apply(directivePlugin, undefined, [md]);\n constrainBlockDirectiveLabels(md);\n };\n};\n", "/*\n * Audited JavaScript boundaries for markdown-it-directive 2.0.6 and native\n * markdown-it 12\u201315. Runtime-only tables are never public host requirements.\n */\nexport function isRecord(value: unknown): value is Record<PropertyKey, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function registry(host: object, key: PropertyKey, create = false): Record<string, unknown> {\n let value: unknown = Reflect.get(host, key);\n if (value === undefined && create) {\n value = {};\n if (!Reflect.set(host, key, value)) {\n throw new TypeError('Cannot create directive handler registry');\n }\n }\n if (!isRecord(value)) {\n throw new TypeError('Directive parser must be installed before registering directives');\n }\n return value;\n}\n\nexport function lookupHandler(host: object, key: PropertyKey, name: string): unknown {\n const table: unknown = Reflect.get(host, key);\n if (table === undefined) return undefined;\n return registry(host, key)[name];\n}\n\nexport function assertHostState<S>(\n state: unknown,\n Constructor: abstract new (...args: never[]) => S,\n): asserts state is S {\n if (!(state instanceof Constructor)) {\n throw new TypeError('Directive handler received a state from a different host');\n }\n}\n\nexport function invokeHandler(handler: unknown, state: unknown, params: unknown): boolean | void {\n if (typeof handler !== 'function') {\n throw new TypeError('Invalid directive handler');\n }\n const result: unknown = Reflect.apply(handler, undefined, [state, params]);\n if (result !== undefined && typeof result !== 'boolean') {\n throw new TypeError('Invalid directive handler result');\n }\n return result;\n}\n\nexport type BoundaryState = {\n src: string;\n bMarks: number[];\n eMarks: number[];\n tShift: number[];\n sCount: number[];\n bsCount: number[];\n line: number;\n lineMax: number;\n blkIndent: number;\n listIndent: number;\n ddIndent?: number;\n parentType: string;\n level: number;\n tight: boolean;\n skipChars(pos: number, code: number): number;\n md: {options: unknown; block: {ruler: object}};\n};\n\nexport type BoundaryRule<S> = (state: S, start: number, end: number, silent: boolean) => boolean;\n\ntype Rule<S> = {name: string; enabled: boolean; fn: BoundaryRule<S>};\n\n/**\n * Access the existing runtime rule list without exposing its private shape.\n * @param ruler - Native block ruler.\n * @returns Checked rule accessors.\n */\nexport function runtimeRules<S>(ruler: object): Rule<S>[] {\n const rules: unknown = Reflect.get(ruler, '__rules__');\n if (!Array.isArray(rules)) {\n throw new TypeError('Missing native block rules');\n }\n return rules.map((rule: unknown) => {\n if (\n !isRecord(rule) ||\n typeof rule.name !== 'string' ||\n typeof rule.enabled !== 'boolean' ||\n typeof rule.fn !== 'function'\n ) {\n throw new TypeError('Invalid native block rule');\n }\n return {\n name: rule.name,\n enabled: rule.enabled,\n get fn(): BoundaryRule<S> {\n const fn = rule.fn;\n if (typeof fn !== 'function') throw new TypeError('Invalid native block rule');\n return (state, start, end, silent) => {\n const result: unknown = Reflect.apply(fn, undefined, [\n state,\n start,\n end,\n silent,\n ]);\n if (typeof result !== 'boolean')\n throw new TypeError('Invalid block rule result');\n return result;\n };\n },\n set fn(fn: BoundaryRule<S>) {\n rule.fn = fn;\n },\n };\n });\n}\n\ntype Scanner = {\n block: {\n State: new (...args: never[]) => unknown;\n tokenize(state: BoundaryState, start: number, end: number): void;\n ruler: {\n enableOnly(names: string[]): unknown;\n before(\n before: string,\n name: string,\n rule: BoundaryRule<BoundaryState>,\n options: {alt: string[]},\n ): void;\n push(name: string, rule: BoundaryRule<BoundaryState>): void;\n };\n };\n};\n\n/**\n * Check the finite call surface of a freshly constructed native scanner.\n * @param value - Constructed native host.\n * @returns Nothing.\n */\nexport function assertScanner(value: unknown): asserts value is Scanner {\n if (\n !isRecord(value) ||\n !isRecord(value.block) ||\n typeof value.block.State !== 'function' ||\n typeof value.block.tokenize !== 'function' ||\n !isRecord(value.block.ruler)\n ) {\n throw new TypeError('Invalid native block scanner');\n }\n const ruler = value.block.ruler;\n if (!['enableOnly', 'before', 'push'].every((key) => typeof ruler[key] === 'function')) {\n throw new TypeError('Invalid native block scanner ruler');\n }\n}\n\n/**\n * Check the fields consumed by the scanner, not an arbitrary caller state subtype.\n * @param value - Constructed native state.\n * @returns Nothing.\n */\nexport function assertBoundaryState(value: unknown): asserts value is BoundaryState {\n if (\n !isRecord(value) ||\n typeof value.src !== 'string' ||\n typeof value.parentType !== 'string' ||\n typeof value.tight !== 'boolean' ||\n typeof value.skipChars !== 'function' ||\n !isRecord(value.md) ||\n typeof value.md.constructor !== 'function' ||\n !isRecord(value.md.block) ||\n !isRecord(value.md.block.ruler)\n ) {\n throw new TypeError('Invalid native block scanner state');\n }\n for (const key of ['bMarks', 'eMarks', 'tShift', 'sCount', 'bsCount']) {\n const field = value[key];\n if (!Array.isArray(field) || !field.every((item: unknown) => typeof item === 'number')) {\n throw new TypeError(`Invalid native block scanner state: ${key}`);\n }\n }\n if (value.ddIndent !== undefined && typeof value.ddIndent !== 'number') {\n throw new TypeError('Invalid native block scanner state: ddIndent');\n }\n for (const key of ['line', 'lineMax', 'blkIndent', 'listIndent', 'level']) {\n if (typeof value[key] !== 'number')\n throw new TypeError(`Invalid native block scanner state: ${key}`);\n }\n}\n", "import type {BoundaryRule, BoundaryState} from './runtime';\n\nimport {assertBoundaryState, assertScanner, registry, runtimeRules} from './runtime';\n\ntype Scope = {depth: number; root: boolean};\n\n/**\n * Find container delimiters with the host parser's native Markdown block rules.\n * @param state - Current parser state.\n * @param startLine - Container opener line.\n * @param endLine - Exclusive end of the current Markdown scope.\n * @returns Matching closer line, or -1 if the current scope has no closer.\n */\nfunction findClosingLine(state: BoundaryState, startLine: number, endLine: number): number {\n const md: unknown = Reflect.construct(state.md.constructor, ['commonmark', state.md.options]);\n assertScanner(md);\n const hostRules = runtimeRules<BoundaryState>(state.md.block.ruler);\n const enabled = new Set(hostRules.filter((rule) => rule.enabled).map((rule) => rule.name));\n const nativeRules = runtimeRules<BoundaryState>(md.block.ruler);\n md.block.ruler.enableOnly(\n nativeRules.filter((rule) => enabled.has(rule.name)).map(({name}) => name),\n );\n\n let closingLine = -1;\n const scopes: Scope[] = [];\n const marker: BoundaryRule<BoundaryState> = (scanState, line, end, silent) => {\n const pos = scanState.bMarks[line] + scanState.tShift[line];\n const max = scanState.eMarks[line];\n const after = scanState.skipChars(pos, 0x3a);\n if (after - pos < 3) {\n return false;\n }\n if (silent) {\n // Let an outdented delimiter terminate a lazy list/quote paragraph;\n // its enclosing scope must process that delimiter after unwinding.\n return true;\n }\n if (scanState.sCount[line] < scanState.blkIndent) {\n return false;\n }\n\n const scope = scopes[scopes.length - 1];\n if (/^[ \\t]*$/.test(scanState.src.slice(after, max))) {\n if (scope.depth > 0 && --scope.depth === 0 && scope.root) {\n closingLine = line;\n scanState.line = end;\n return true;\n }\n } else {\n scope.depth++;\n }\n scanState.line = line + 1;\n return true;\n };\n\n const paragraph = nativeRules.find(({name}) => name === 'paragraph');\n if (paragraph) {\n const paragraphRule = paragraph.fn;\n paragraph.fn = (scanState, begin, end, silent) => {\n const matched = paragraphRule(scanState, begin, end, silent);\n if (matched && !silent) {\n const next = scanState.line;\n // Indented paragraph continuations are not indented code. The\n // native paragraph rule skips terminators on those lines.\n for (let line = begin + 1; line < next; line++) {\n marker(scanState, line, end, false);\n if (closingLine >= 0) {\n return matched;\n }\n }\n scanState.line = next;\n }\n return matched;\n };\n }\n const tokenize = md.block.tokenize;\n md.block.tokenize = (scanState, begin, end) => {\n scopes.push({depth: scopes.length ? 0 : 1, root: scopes.length === 0});\n try {\n tokenize.call(md.block, scanState, begin, end);\n } finally {\n scopes.pop();\n }\n };\n md.block.ruler.before('heading', 'directive_boundary', marker, {\n alt: ['paragraph', 'reference', 'blockquote', 'list'],\n });\n // A registered container may consume its body literally even when the host\n // disables paragraph parsing or supplies its own block rules for that text.\n md.block.ruler.push('directive_boundary_fallback', (scanState, line, _end, silent) => {\n if (silent) {\n return false;\n }\n scanState.line = line + 1;\n return true;\n });\n\n // Preserve the current list/quote offsets, but isolate every mutable parser field.\n const scanState: unknown = Reflect.construct(md.block.State, [state.src, md, {}, []]);\n assertBoundaryState(scanState);\n Object.assign(scanState, {\n bMarks: state.bMarks.slice(),\n eMarks: state.eMarks.slice(),\n tShift: state.tShift.slice(),\n sCount: state.sCount.slice(),\n bsCount: state.bsCount.slice(),\n line: startLine + 1,\n lineMax: endLine,\n blkIndent: state.blkIndent,\n listIndent: state.listIndent,\n ddIndent: state.ddIndent,\n parentType: state.parentType,\n level: state.level,\n tight: state.tight,\n });\n md.block.tokenize(scanState, startLine + 1, endLine);\n return closingLine;\n}\n\n/**\n * Retain upstream parameter parsing while replacing only its raw delimiter lookup.\n * @param rule - Original upstream block directive rule.\n * @returns Rule using Markdown-aware container boundaries.\n */\nexport function withBlockBoundary<B extends BoundaryState>(rule: BoundaryRule<B>): BoundaryRule<B> {\n return (state, startLine, endLine, silent) => {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n if (state.src.slice(start, start + 3) !== ':::') {\n return rule(state, startLine, endLine, silent);\n }\n const name = state.src\n .slice(start, state.eMarks[startLine])\n .match(/^:{3,}[ \\t]*([a-z][a-z0-9_-]*)/i)?.[1];\n const normalizedName = name?.toLowerCase().replace('_', '-');\n if (!normalizedName || !registry(state.md, 'blockDirectives')[normalizedName]) {\n return rule(state, startLine, endLine, silent);\n }\n\n const close = findClosingLine(state, startLine, endLine);\n if (close < 0) {\n return false;\n }\n\n const skipChars = state.skipChars;\n const descriptor = Object.getOwnPropertyDescriptor(state, 'skipChars');\n const restore = () => {\n if (descriptor) {\n Object.defineProperty(state, 'skipChars', descriptor);\n } else {\n Reflect.deleteProperty(state, 'skipChars');\n }\n };\n const hidden = new Set<number>();\n for (let line = startLine + 1; line < close; line++) {\n hidden.add(state.bMarks[line] + state.tShift[line]);\n }\n const closingPos = state.bMarks[close] + state.tShift[close];\n state.skipChars = (pos, code) => {\n if (code === 0x3a) {\n if (pos === closingPos) {\n // Restore before upstream gets content or calls a real handler.\n restore();\n } else if (hidden.has(pos)) {\n return pos;\n }\n }\n return skipChars.call(state, pos, code);\n };\n try {\n return rule(state, startLine, endLine, silent);\n } finally {\n restore();\n }\n };\n}\n", "export const RULE = {\n Inline: 'inline_directive',\n Block: 'block_directive',\n} as const;\n\nexport const CONTAINER_KEY = Symbol();\nexport const LEAF_BLOCK_KEY = Symbol();\n", "/* eslint-disable valid-jsdoc */\n\nimport {RULE} from '../const';\n\n/** Enable parsing of inline directives */\nexport function enableInlineDirectives(md: {\n inline: {\n ruler: {\n enable(name: string, ignoreInvalid: boolean): unknown;\n disable(name: string, ignoreInvalid: boolean): unknown;\n };\n };\n}): void {\n md.inline.ruler.enable(RULE.Inline, true);\n}\n\n/** Disable parsing of inline directives */\nexport function disableInlineDirectives(md: {\n inline: {\n ruler: {\n enable(name: string, ignoreInvalid: boolean): unknown;\n disable(name: string, ignoreInvalid: boolean): unknown;\n };\n };\n}): void {\n md.inline.ruler.disable(RULE.Inline, true);\n}\n\n/** Enable parsing of leaf block and container directives */\nexport function enableBlockDirectives(md: {\n block: {\n ruler: {\n enable(name: string, ignoreInvalid: boolean): unknown;\n disable(name: string, ignoreInvalid: boolean): unknown;\n };\n };\n}): void {\n md.block.ruler.enable(RULE.Block, true);\n}\n\n/** Disable parsing of leaf block and container directives */\nexport function disableBlockDirectives(md: {\n block: {\n ruler: {\n enable(name: string, ignoreInvalid: boolean): unknown;\n disable(name: string, ignoreInvalid: boolean): unknown;\n };\n };\n}): void {\n md.block.ruler.disable(RULE.Block, true);\n}\n", "export function isFunction(arg: unknown): arg is Function {\n return typeof arg === 'function';\n}\n\nexport function isString(arg: unknown): arg is string {\n return typeof arg === 'string';\n}\n", "import type {BlockContentState, DirectiveToken, InlineContentState} from '../markdown-it';\nimport type {\n ContainerDirectiveParams,\n InlineDirectiveParams,\n LeafBlockDirectiveParams,\n} from '../types';\n\nexport function tokenizeInlineContent<I extends InlineContentState<I>>(\n state: I,\n content: NonNullable<InlineDirectiveParams['content']>,\n): void {\n const oldPos = state.pos;\n const oldPosMax = state.posMax;\n\n state.pos = content.startPos;\n state.posMax = content.endPos;\n\n state.md.inline.tokenize(state);\n\n state.pos = oldPos;\n state.posMax = oldPosMax;\n}\n\nexport function tokenizeBlockContent<B extends BlockContentState<B>>(\n state: B,\n content: NonNullable<ContainerDirectiveParams['content']>,\n parentType?: string,\n): void {\n const oldParent = state.parentType;\n const oldLineMax = state.lineMax;\n\n state.parentType = parentType ?? 'directive';\n state.line = content.startLine;\n state.lineMax = content.endLine;\n\n state.md.block.tokenize(state, content.startLine, content.endLine);\n\n state.lineMax = oldLineMax;\n state.parentType = oldParent;\n}\n\nexport function createBlockInlineToken<T extends DirectiveToken>(\n state: {push(type: string, tag: string, nesting: -1 | 0 | 1): T},\n {inlineContent, startLine}: LeafBlockDirectiveParams,\n): T {\n const token = state.push('inline', '', 0);\n token.children = [];\n token.content = inlineContent?.raw || '';\n token.map = [startLine, startLine + 1];\n return token;\n}\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport type {BlockContentState, BlockHost, DirectiveToken, InlineHost} from '../markdown-it';\nimport type {DirectiveBlockHandlerArgs, DirectiveInlineHandlerArgs} from '../upstream';\nimport type {\n CodeContainerDirectiveConfig,\n ContainerDirectiveConfig,\n ContainerDirectiveHandler,\n ContainerDirectiveParams,\n DirectiveDests,\n DirectiveDestsOrig,\n Env,\n InlineDirectiveHandler,\n InlineDirectiveParams,\n LeafBlockDirectiveConfig,\n LeafBlockDirectiveHandler,\n LeafBlockDirectiveParams,\n TokensDesc,\n} from '../types';\n\nimport {isFunction, isString} from '../utils';\nimport {CONTAINER_KEY, LEAF_BLOCK_KEY} from '../const';\nimport {assertHostState, invokeHandler, lookupHandler, registry} from '../runtime';\n\nimport {createBlockInlineToken, tokenizeBlockContent} from './tokenizers';\n\nexport function registerInlineDirective<I>(\n md: InlineHost<I>,\n name: string,\n handler: InlineDirectiveHandler<NoInfer<I>>,\n): void {\n registry(md, 'inlineDirectives')[name] = (args: DirectiveInlineHandlerArgs<unknown>) => {\n assertHostState(args.state, md.inline.State);\n const params: InlineDirectiveParams = buildInlineParams(args);\n return handler(args.state, params);\n };\n}\n\nexport function registerLeafBlockDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n config: LeafBlockDirectiveConfig<NoInfer<B>>,\n): void;\nexport function registerLeafBlockDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n name: string,\n handler: LeafBlockDirectiveHandler<NoInfer<B>>,\n): void;\nexport function registerLeafBlockDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n nameOrConfig: string | LeafBlockDirectiveConfig<B>,\n maybeHandler?: LeafBlockDirectiveHandler<B>,\n): void {\n const [name, handler]: [string, LeafBlockDirectiveHandler<B>] = isString(nameOrConfig)\n ? [nameOrConfig, maybeHandler!]\n : [nameOrConfig.name, buildLeafBlockHandler(nameOrConfig)];\n\n registry(md, LEAF_BLOCK_KEY, true);\n registry(md, LEAF_BLOCK_KEY)[name] = handler;\n\n registry(md, 'blockDirectives')[name] = getBlockDefaultHandler(md, name);\n}\n\nexport function registerContainerDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n config: ContainerDirectiveConfig<NoInfer<B>> | CodeContainerDirectiveConfig<NoInfer<B>>,\n): void;\nexport function registerContainerDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n name: string,\n handler: ContainerDirectiveHandler<NoInfer<B>>,\n options?: {onConflict?: 'replace' | 'error'},\n): void;\nexport function registerContainerDirective<B extends BlockContentState<B>>(\n md: BlockHost<B>,\n nameOrConfig: string | ContainerDirectiveConfig<B> | CodeContainerDirectiveConfig<B>,\n maybeHandler?: ContainerDirectiveHandler<B>,\n options?: {onConflict?: 'replace' | 'error'},\n): void {\n const [name, handler]: [string, ContainerDirectiveHandler<B>] = isString(nameOrConfig)\n ? [nameOrConfig, maybeHandler!]\n : [\n nameOrConfig.name,\n nameOrConfig.type === 'code_block'\n ? buildCodeContainerHandler(nameOrConfig)\n : buildContainerHandler(nameOrConfig),\n ];\n\n const onConflict = isString(nameOrConfig) ? options?.onConflict : nameOrConfig.onConflict;\n const directives = registry(md, 'blockDirectives');\n if (onConflict === 'error' && Object.prototype.hasOwnProperty.call(directives, name)) {\n throw new Error(`Block directive already registered: ${name}`);\n }\n\n registry(md, CONTAINER_KEY, true);\n registry(md, CONTAINER_KEY)[name] = handler;\n\n registry(md, 'blockDirectives')[name] = getBlockDefaultHandler(md, name);\n}\n\nfunction getBlockDefaultHandler<B>(md: BlockHost<B>, name: string) {\n return (args: DirectiveBlockHandlerArgs<unknown>) => {\n assertHostState(args.state, md.block.State);\n const containerHandler = lookupHandler(md, CONTAINER_KEY, name);\n const leafBlockHandler = lookupHandler(md, LEAF_BLOCK_KEY, name);\n\n if (isString(args.content)) {\n if (containerHandler) {\n return invokeHandler(containerHandler, args.state, buildContainerParams(args));\n }\n } else if (leafBlockHandler) {\n return invokeHandler(leafBlockHandler, args.state, buildLeafBlockParams(args));\n }\n\n return false;\n };\n}\n\nfunction buildLeafBlockHandler<B extends BlockContentState<B>>(\n config: LeafBlockDirectiveConfig<B>,\n): LeafBlockDirectiveHandler<B> {\n return (state, params) => {\n if (!config.match(params, state)) {\n return false;\n }\n\n const {container} = config;\n\n const token = state.push(container.token, container.tag, 0);\n token.map = [params.startLine, params.endLine];\n token.markup = '::' + config.name;\n applyTokenFields(token, container, params, state.env);\n\n return true;\n };\n}\n\nfunction buildContainerHandler<B extends BlockContentState<B>>(\n config: ContainerDirectiveConfig<B>,\n): ContainerDirectiveHandler<B> {\n return (state, params) => {\n if (!params.content) {\n return false;\n }\n if (\n config.inlineContent &&\n !params.inlineContent &&\n config.inlineContent.required !== false\n ) {\n return false;\n }\n if (!config.match(params, state)) {\n return false;\n }\n\n const {container, inlineContent, content, contentTokenizer} = config;\n\n let token = state.push(container.token + '_open', container.tag, 1);\n token.map = [params.startLine, params.endLine];\n token.markup = ':::' + config.name;\n applyTokenFields(token, container, params, state.env);\n\n if (inlineContent) {\n token = state.push(inlineContent.token + '_open', inlineContent.tag, 1);\n applyTokenFields(token, inlineContent, params, state.env);\n\n token = createBlockInlineToken(state, params);\n\n token = state.push(inlineContent.token + '_close', inlineContent.tag, -1);\n }\n\n if (content) {\n token = state.push(content.token + '_open', content.tag, 1);\n token.map = [params.startLine + 1, params.endLine - 1];\n applyTokenFields(token, content, params, state.env);\n }\n\n if (contentTokenizer) {\n contentTokenizer(state, params.content, params);\n } else {\n tokenizeBlockContent(state, params.content, config.name + '-directive');\n }\n\n if (content) {\n token = state.push(content.token + '_close', content.tag, -1);\n }\n\n token = state.push(container.token + '_close', container.tag, -1);\n\n return true;\n };\n}\n\nfunction buildCodeContainerHandler<B extends BlockContentState<B>>(\n config: CodeContainerDirectiveConfig<B>,\n): ContainerDirectiveHandler<B> {\n return (state, params) => {\n if (!params.content) {\n return false;\n }\n if (!config.match(params, state)) {\n return false;\n }\n\n const {name, container} = config;\n\n const token = state.push(container.token, container.tag, 0);\n // set fields like for fence token\n token.map = [params.startLine, params.endLine];\n token.content = params.content.raw;\n token.markup = ':::';\n token.info = name;\n applyTokenFields(token, container, params, state.env);\n\n return true;\n };\n}\n\nfunction buildInlineParams(args: DirectiveInlineHandlerArgs<unknown>): InlineDirectiveParams {\n const params: InlineDirectiveParams = {\n startPos: args.directiveStart,\n endPos: args.directiveEnd,\n };\n if (args.attrs !== undefined) {\n params.attrs = args.attrs;\n }\n if (args.dests !== undefined) {\n params.dests = buildDests(args.dests);\n }\n if (args.content !== undefined) {\n params.content = {\n raw: args.content,\n startPos: args.contentStart!,\n endPos: args.contentEnd!,\n };\n }\n return params;\n}\n\nfunction buildLeafBlockParams(args: DirectiveBlockHandlerArgs<unknown>): LeafBlockDirectiveParams {\n const params: LeafBlockDirectiveParams = {\n startLine: args.directiveStartLine,\n endLine: args.directiveEndLine,\n };\n if (args.attrs !== undefined) {\n params.attrs = args.attrs;\n }\n if (args.dests !== undefined) {\n params.dests = buildDests(args.dests);\n }\n if (args.inlineContent !== undefined) {\n params.inlineContent = {\n raw: args.inlineContent,\n startPos: args.inlineContentStart!,\n endPos: args.inlineContentEnd!,\n };\n }\n if (args.contentTitle) {\n params.contentTitle = {\n raw: args.contentTitle,\n startPos: args.contentTitleStart!,\n endPos: args.contentTitleEnd!,\n };\n }\n return params;\n}\n\nfunction buildContainerParams(args: DirectiveBlockHandlerArgs<unknown>): ContainerDirectiveParams {\n const params = buildLeafBlockParams(args);\n return {\n ...params,\n content: {\n raw: args.content!,\n startLine: args.contentStartLine!,\n endLine: args.contentEndLine!,\n },\n };\n}\n\nfunction buildDests(orig: DirectiveDestsOrig): DirectiveDests {\n const dests: DirectiveDests = {_original_dests: orig};\n\n const link = orig.find((item) => item[0] === 'link')?.[1];\n const string = orig.find((item) => item[0] === 'string')?.[1];\n\n if (link !== undefined) {\n dests.link = link;\n }\n if (string !== undefined) {\n dests.string = string;\n }\n\n return dests;\n}\n\nfunction applyTokenFields<P>(\n token: DirectiveToken,\n {attrs, meta}: TokensDesc<P>,\n params: P,\n env: Env,\n): void {\n if (attrs !== undefined) {\n const value: Record<string, string> = isFunction(attrs) ? attrs(params, env) : attrs;\n token.attrs = Object.entries(value);\n }\n if (meta !== undefined) {\n const value: object = isFunction(meta) ? meta(params, env) : meta;\n token.meta = value;\n }\n}\n", "import type {PluginOptions, TabsDirectivePlugin, TabsPlugin} from './transform';\n\nimport {transform as baseTransform} from './transform';\n\nexport * from './index';\n\nconst onBundle: NonNullable<PluginOptions['onBundle']> = (args, cache) => {\n copyRuntimeFiles(args, cache);\n};\n\nexport function transform(\n options?: Partial<PluginOptions> & {directiveSyntax?: 'disabled'},\n): TabsPlugin;\nexport function transform(\n options: Partial<PluginOptions> & {directiveSyntax: 'enabled' | 'only'},\n): TabsDirectivePlugin;\nexport function transform(options: Partial<PluginOptions>): TabsDirectivePlugin;\nexport function transform(options: Partial<PluginOptions> = {}): TabsPlugin | TabsDirectivePlugin {\n if (!options.directiveSyntax || options.directiveSyntax === 'disabled') {\n return baseTransform({\n onBundle,\n ...options,\n directiveSyntax: 'disabled',\n });\n }\n return baseTransform({\n onBundle,\n ...options,\n directiveSyntax: options.directiveSyntax,\n });\n}\n\nconst PATH_TO_RUNTIME = '../runtime';\n\nfunction copyRuntimeFiles(\n {\n runtimeJsPath,\n runtimeCssPath,\n output,\n }: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n) {\n const {join, resolve} = require('node:path');\n const runtimeFiles = {\n 'index.js': runtimeJsPath,\n 'index.css': runtimeCssPath,\n };\n for (const [originFile, outputFile] of Object.entries(runtimeFiles)) {\n const file = join(PATH_TO_RUNTIME, originFile);\n if (!cache.has(file)) {\n cache.add(file);\n copyFile(resolve(__dirname, file), join(output, outputFile));\n }\n }\n}\n\nfunction copyFile(from: string, to: string) {\n const {mkdirSync, copyFileSync} = require('node:fs');\n const {dirname} = require('node:path');\n mkdirSync(dirname(to), {recursive: true});\n copyFileSync(from, to);\n}\n", "import type {\n BlockContentState,\n DirectiveBlockState,\n DirectiveInlineState,\n DirectiveParserHost,\n} from '@diplodoc/directive';\nimport type {IDGenerator} from '@diplodoc/utils';\nimport type {EnabledVariants} from '../common';\nimport type {TabsDirectiveDiagnostic, TabsMarker} from './directive';\nimport type {MarkdownIt, StateCore, Token} from './markdown-it';\n\nimport {createIDGeneratorByStrategy} from '@diplodoc/utils';\n\nimport {TabsVariants} from '../common';\n\nimport {addHiddenProperty} from './utils';\nimport {generateTabsTokens} from './generate';\nimport {defaultTabsGroup, findTabs, props, tryToFindTabs} from './find';\nimport {installTabsDirective, validateTabsMarkers} from './directive';\n\n/** Options for the tabs plugin (paths, container classes, enabled variants). */\nexport type PluginOptions = {\n runtimeJsPath: string;\n runtimeCssPath: string;\n containerClasses: string;\n bundle: boolean;\n directiveSyntax?: 'disabled' | 'enabled' | 'only';\n onDiagnostic?: (diagnostic: TabsDirectiveDiagnostic) => void;\n features: {\n enabledVariants: EnabledVariants;\n };\n /** @internal */\n onBundle?: (\n args: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n ) => void;\n};\n\nconst defaultFeatures: PluginOptions['features'] = {\n enabledVariants: {\n regular: true,\n radio: true,\n },\n};\n\nlet runsCounter = 0;\n\nexport type TransformOptions = {\n output?: string;\n /** Optional external ID generator provided by the host (e.g. via MarkdownItPluginOpts). */\n generateID?: IDGenerator;\n};\n\n/** The plugin callback returned by transform. */\nexport type TabsPlugin = (md: MarkdownIt, options?: TransformOptions) => void;\nexport type TabsDirectivePlugin = <\n B extends DirectiveBlockState & BlockContentState<B>,\n I extends DirectiveInlineState,\n>(\n md: MarkdownIt & DirectiveParserHost<B, I>,\n options?: TransformOptions,\n) => void;\n\nfunction appendRuntimeMeta(\n env: Record<string | symbol, unknown>,\n runtimeJsPath: string,\n runtimeCssPath: string,\n) {\n const meta = (env.meta ||= {});\n if (typeof meta !== 'object' || meta === null) {\n throw new TypeError('Expected env.meta to be an object.');\n }\n if (!('script' in meta) || !meta.script) Object.assign(meta, {script: []});\n if (!('style' in meta) || !meta.style) Object.assign(meta, {style: []});\n if (\n !('script' in meta) ||\n !Array.isArray(meta.script) ||\n !('style' in meta) ||\n !Array.isArray(meta.style)\n ) {\n throw new TypeError('Expected runtime script and style arrays.');\n }\n meta.script.push(runtimeJsPath);\n meta.style.push(runtimeCssPath);\n}\n\ntype TabsMatch =\n | {step: number}\n | {\n close: number;\n bodyStart: number;\n removeCount: number;\n end: number;\n variant: TabsVariants;\n group: string;\n };\n\nfunction matchTabs(\n tokens: Token[],\n start: number,\n markers: WeakMap<object, TabsMarker>,\n legacy: boolean,\n generateID: IDGenerator,\n): TabsMatch {\n const marker = markers.get(tokens[start]);\n if (marker?.kind === 'close') throw new Error('Unexpected tabs directive closing marker');\n if (marker) {\n const close = tokens.findIndex((token, index) => index > start && token === marker.end);\n if (close < 0) throw new Error('Tabs directive closing marker is missing');\n const defaultGroup = defaultTabsGroup(generateID);\n return {\n close,\n bodyStart: start + 1,\n removeCount: close - start + 1,\n end: close,\n variant: marker.variant,\n group: marker.group ?? defaultGroup,\n };\n }\n if (!legacy) return {step: 1};\n const result = tryToFindTabs(tokens, start);\n if ('step' in result) return result;\n const parsed = props(result.content, generateID);\n return {\n close: result.closeTokenIndex,\n bodyStart: start + 3,\n removeCount: result.closeTokenIndex - start + 3 + result.extraTokensAfterClose,\n end: tokens.length,\n variant: parsed.variant,\n group: parsed.group,\n };\n}\n\n/**\n * Returns a MarkdownIt plugin that transforms `{% list tabs %}` blocks into tab markup.\n * @param options - Paths for runtime JS/CSS, container classes, and enabled variants\n * @returns Plugin function that receives (md, options) and registers the core ruler\n */\nexport function transform(\n options?: Partial<PluginOptions> & {directiveSyntax?: 'disabled'},\n): TabsPlugin;\nexport function transform(\n options: Partial<PluginOptions> & {directiveSyntax: 'enabled' | 'only'},\n): TabsDirectivePlugin;\nexport function transform(options: Partial<PluginOptions>): TabsDirectivePlugin;\nexport function transform(options: Partial<PluginOptions> = {}): TabsPlugin | TabsDirectivePlugin {\n const {\n runtimeJsPath = '_assets/tabs-extension.js',\n runtimeCssPath = '_assets/tabs-extension.css',\n containerClasses = '',\n bundle = true,\n features = defaultFeatures,\n onBundle,\n directiveSyntax = 'disabled',\n onDiagnostic,\n } = options;\n\n function installCore(\n md: MarkdownIt,\n options: TransformOptions | undefined,\n markers: WeakMap<object, TabsMarker>,\n legacy: boolean,\n ) {\n const {output = '.', generateID: externalGenerateID} = options || {};\n\n // Use the external ID generator if provided (e.g. from MarkdownItPluginOpts.generateID),\n // otherwise create a random fallback for standalone usage.\n // The fallback is created once per md.use() call, so it's shared across all parse() calls\n // on the same md instance (including recursive calls from includes plugins).\n const generateID: IDGenerator =\n externalGenerateID ?? (createIDGeneratorByStrategy('random') as IDGenerator);\n\n const plugin = (state: StateCore) => {\n const {tokens} = state;\n validateTabsMarkers(tokens, markers);\n const env = addHiddenProperty(state.env, 'bundled', new Set<string>());\n const runId = String(++runsCounter);\n\n let i = 0;\n let tabsAreInserted = false;\n\n while (i < tokens.length) {\n const match = matchTabs(tokens, i, markers, legacy, generateID);\n if ('step' in match) {\n i += match.step;\n continue;\n }\n const variant = features.enabledVariants[match.variant]\n ? match.variant\n : TabsVariants.Regular;\n const tabs = findTabs(\n state.tokens,\n match.bodyStart,\n match.close,\n state.Token,\n match.end,\n );\n\n if (tabs.length > 0) {\n const tabsTokens = generateTabsTokens(tabs, state, {\n containerClasses,\n tabsGroup: match.group,\n variant,\n runId,\n generateID,\n });\n\n // Remove tokens including any list closing tokens after endlist\n state.tokens.splice(i, match.removeCount, ...tabsTokens);\n\n i++;\n tabsAreInserted = true;\n } else {\n state.tokens.splice(i, match.removeCount);\n }\n }\n\n if (tabsAreInserted) {\n appendRuntimeMeta(env, runtimeJsPath, runtimeCssPath);\n\n if (bundle && onBundle) {\n onBundle({runtimeJsPath, runtimeCssPath, output}, env.bundled);\n }\n }\n };\n\n try {\n md.core.ruler.before('curly_attributes', 'tabs', plugin);\n } catch {\n md.core.ruler.push('tabs', plugin);\n }\n }\n function legacyPlugin(md: MarkdownIt, settings?: TransformOptions): void {\n installCore(md, settings, new WeakMap(), true);\n }\n function directivePlugin<\n B extends DirectiveBlockState & BlockContentState<B>,\n I extends DirectiveInlineState,\n >(md: MarkdownIt & DirectiveParserHost<B, I>, settings?: TransformOptions): void {\n const markers = new WeakMap<object, TabsMarker>();\n installTabsDirective(md, markers, onDiagnostic);\n installCore(md, settings, markers, directiveSyntax === 'enabled');\n }\n return directiveSyntax === 'disabled' ? legacyPlugin : directivePlugin;\n}\n", "/**\n * Shared constants, types and globals for the tabs extension.\n * Used by both the MarkdownIt plugin (compile-time) and the runtime controller (DOM).\n */\nimport {type TabsController} from './runtime/TabsController';\n\n/** Regex to match the opening `{% list tabs ... %}` tag (optionally backtick-escaped). */\nexport const TAB_RE = /`?{% list tabs .*?%}`?/;\n\n/** CSS class names for tab structure. */\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';\n\n/** Data attributes used by the runtime to identify groups, keys, variants and active state. */\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\n/** Dropdown variant: container, menu and select element class names. */\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\n/** Accordion variant. */\nexport const TABS_ACCORDION_CLASSNAME = 'yfm-tabs-accordion';\nexport const TABS_ACCORDION_CLIENT_HEIGHT = 'data-yfm-tabs-accordion-client-heights';\n\n/** Radio (vertical) variant. */\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\n/** Available tab block variants (regular horizontal, radio, dropdown, accordion). */\nexport enum TabsVariants {\n Regular = 'regular',\n Radio = 'radio',\n Dropdown = 'dropdown',\n Accordion = 'accordion',\n}\n\n/** Which variants are enabled in the plugin (others fall back to Regular). */\nexport type EnabledVariants = Partial<Record<TabsVariants, boolean>>;\n\n/** Identifies a tab: group id, tab key (from content), and variant. */\nexport interface Tab {\n group?: string;\n key: string;\n variant: TabsVariants;\n}\n\n/** Payload passed to onSelectTab handlers when a tab is switched. */\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\n/** Symbol under which the global TabsController instance is stored on `window`. */\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n", "export function trim(target: string) {\n return target.trim();\n}\n\nexport function unquote(target: string) {\n return target.match(/^([\"']).*\\1$/) ? target.slice(1, -1) : target;\n}\n", "import type {Token} from '../markdown-it';\n/**\n * Helpers for tab content: slug ids, keys, selected marker, and source map ranges.\n */\nimport type {RuntimeTab} from '../types';\n\nimport GithubSlugger from 'github-slugger';\n\nimport {ACTIVE_TAB_TEXT} from '../../common';\nimport {createTabKey} from '../../tab-key';\n\nconst CUSTOM_ID_REGEXP = /\\[?{ ?#(\\S+) ?}]?/;\n\nconst sluggersStorage = new Map<string, GithubSlugger>();\n\nfunction parseName(name: string): {name: string; customAnchor: string | null} {\n const parts = name.match(CUSTOM_ID_REGEXP);\n let customAnchor: string | null = null;\n let pure = name;\n\n if (parts) {\n pure = name.replace(parts[0], '');\n customAnchor = parts[1];\n } else {\n pure = name;\n customAnchor = null;\n }\n\n if (pure.includes(ACTIVE_TAB_TEXT)) {\n pure = pure.replace(ACTIVE_TAB_TEXT, '');\n }\n\n return {\n name: pure.trim(),\n customAnchor,\n };\n}\n\n/**\n * Generate a stable slug id for a tab (used in data-diplodoc-id and anchors).\n * @param tab - Runtime tab\n * @param runId - Plugin run id for slugger\n * @returns Slug string\n */\nexport function getTabId(tab: RuntimeTab, {runId}: {runId: string}): string {\n let slugger = sluggersStorage.get(runId);\n if (!slugger) {\n slugger = new GithubSlugger();\n sluggersStorage.set(runId, slugger);\n }\n\n return slugger.slug(getRawId(tab));\n}\n\n/**\n * True if the tab title contains the {selected} marker.\n * @param tab - Runtime tab\n * @returns Whether tab is selected by default\n */\nexport function isTabSelected(tab: RuntimeTab): boolean {\n const {name} = tab;\n\n return name.includes(ACTIVE_TAB_TEXT);\n}\n\n/**\n * Canonical slug key used in state (localStorage, query).\n * @param tab - Runtime tab\n * @returns Canonical slug key\n */\nexport function getTabKey(tab: RuntimeTab): string {\n return createTabKey(getRawId(tab));\n}\n\n/**\n * Tab title text without custom anchor and without {selected}.\n * @param tab - Runtime tab\n * @returns Display name\n */\nexport function getName(tab: RuntimeTab): string {\n return parseName(tab.name).name;\n}\n\nfunction getRawId(tab: RuntimeTab): string {\n const {customAnchor, name} = parseName(tab.name);\n\n return customAnchor || name;\n}\n\n/**\n * Source map range [startLine, endLine] for the tab content tokens, or null.\n * @param tokens - Content tokens\n * @returns [start, end] or null\n */\nexport function getContentMap(tokens: Token[]): [number, number] | null {\n let firstMap: [number, number] | null = null;\n let lastMap: [number, number] | null = null;\n\n tokens.forEach(({map}) => {\n if (map) {\n firstMap = firstMap ?? map;\n lastMap = map;\n }\n });\n\n return firstMap && lastMap ? [firstMap[0], lastMap[1]] : null;\n}\n", "import slugify from 'slugify';\n\nconst SLUG_OPTIONS = {\n lower: true,\n strict: true,\n} as const;\n\nconst PUNCTUATION_OR_SPACE_REGEXP = /^[\\p{P}\\s]$/u;\nconst PRESERVED_PUNCTUATION = new Set(['#']);\n\n/**\n * Convert characters unsupported by slugify to stable Unicode code point tokens.\n * Punctuation and whitespace keep slugify's default separator/removal behaviour, except for\n * characters such as # that distinguish common tab names (for example C# and C++).\n * @param value - Raw tab key\n * @returns Text safe to pass to slugify\n */\nexport function encodeUnsupportedCodePoints(value: string): string {\n return Array.from(value)\n .map((character) => {\n if (slugify(character, SLUG_OPTIONS)) {\n return character;\n }\n\n if (\n PUNCTUATION_OR_SPACE_REGEXP.test(character) &&\n !PRESERVED_PUNCTUATION.has(character)\n ) {\n return character;\n }\n\n const codePoint = character.codePointAt(0);\n return typeof codePoint === 'number' ? ` u${codePoint.toString(16)} ` : character;\n })\n .join('');\n}\n\n/**\n * Create the canonical key stored in tab markup and new URLs.\n * @param value - Raw tab name or custom id\n * @returns Lowercase ASCII slug, with unsupported characters represented as u<hex>\n */\nexport function createTabKey(value: string): string {\n const normalized = value.normalize('NFC').trim();\n const slug = slugify(encodeUnsupportedCodePoints(normalized), SLUG_OPTIONS);\n\n if (slug) {\n return slug;\n }\n\n return Array.from(normalized)\n .map((character) => `u${character.codePointAt(0)?.toString(16)}`)\n .join('-');\n}\n\n/**\n * Convert a key read from an old URL to the current canonical form.\n * URLSearchParams has already decoded the outer query layer, so legacy keys need one additional\n * decodeURIComponent call before slug generation.\n * @param value - Key parsed from the tabs query parameter\n * @returns Canonical tab key\n */\nexport function normalizeTabKeyFromUrl(value: string): string {\n try {\n return createTabKey(decodeURIComponent(value));\n } catch {\n return createTabKey(value);\n }\n}\n", "/**\n * Attach a non-enumerable property to an object (e.g. env.bundled for plugin state).\n * @param box - Object to extend\n * @param field - Property key\n * @param value - Property value\n * @returns Same object with typed field\n */\nexport function addHiddenProperty<\n B extends Record<string | symbol, unknown>,\n F extends string | symbol,\n V,\n>(box: B, field: F, value: V): B & {[P in F]: V} {\n if (!(field in box)) {\n Object.defineProperty(box, field, {\n enumerable: false,\n value: value,\n });\n }\n\n return box as B & {[P in F]: V};\n}\n\nexport * from './strings';\nexport * from './tabs';\n", "import type {TabsTokensGenerator} from './types';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_DATA_VERTICAL_TAB,\n TAB_FORCED_OPEN,\n TAB_PANEL_CLASSNAME,\n VERTICAL_TAB_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\n\nexport const regular: TabsTokensGenerator = (\n tabs,\n state,\n {containerClasses, tabsGroup, runId, variant: orientation, generateID},\n) => {\n const tabsTokens = [];\n const tabListTokens = [];\n const tabPanelsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n const tabListOpen = new state.Token('tab-list_open', 'div', 1);\n const tabListClose = new state.Token('tab-list_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n\n tabListOpen.map = [start, end];\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n tabListOpen.block = true;\n tabListClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n const hasDefaultOpenTab = activeTabsCount !== 0;\n\n tabsOpen.attrSet('class', [TABS_CLASSNAME, containerClasses].filter(Boolean).join(' '));\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, 'regular');\n\n tabListOpen.attrSet('class', TABS_LIST_CLASSNAME);\n tabListOpen.attrSet('role', 'tablist');\n\n if (orientation === 'radio') {\n tabsTokens.push(tabsOpen);\n }\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const verticalTabInput = new state.Token('tab-input', 'input', 0);\n const verticalTabLabelOpen = new state.Token('tab-label_open', 'label', 1);\n const verticalTabLabelClose = new state.Token('tab-label_close', 'label', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n /* if user did not provide default open tab we fallback to first tab (in default tabs only) */\n const isTabActive = hasDefaultOpenTab ? didTabHasActiveAttr : i === 0;\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('regular');\n\n verticalTabInput.block = true;\n\n verticalTabInput.attrJoin('class', 'radio');\n verticalTabInput.attrSet('type', 'radio');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet('class', TAB_CLASSNAME);\n tabOpen.attrJoin('class', 'yfm-tab-group');\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (orientation === 'radio') {\n tabOpen.attrSet(TAB_DATA_VERTICAL_TAB, 'true');\n tabOpen.attrJoin('class', VERTICAL_TAB_CLASSNAME);\n }\n\n if (isTabActive) {\n if (orientation === 'radio') {\n tabOpen.attrSet(TAB_FORCED_OPEN, 'true');\n verticalTabInput.attrSet('checked', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n } else {\n tabOpen.attrSet(TAB_ACTIVE_KEY, i === 0 ? 'true' : 'false');\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n tabOpen.attrSet('aria-selected', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n }\n\n if (orientation === 'radio') {\n tabsTokens.push(\n tabOpen,\n verticalTabInput,\n verticalTabLabelOpen,\n tabInline,\n verticalTabLabelClose,\n tabClose,\n );\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n } else {\n tabListTokens.push(tabOpen, tabInline, tabClose);\n tabPanelsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n }\n\n tabsTokens.push(tabsOpen);\n tabsTokens.push(tabListOpen);\n tabsTokens.push(...tabListTokens);\n tabsTokens.push(tabListClose);\n tabsTokens.push(...tabPanelsTokens);\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_RADIO_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_DATA_VERTICAL_TAB,\n TAB_FORCED_OPEN,\n TAB_GROUP_CLASSNAME,\n TAB_PANEL_CLASSNAME,\n VERTICAL_TAB_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const radio: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const tabsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n tabsOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_RADIO_CLASSNAME].filter(Boolean).join(' '),\n );\n\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, 'radio');\n tabsTokens.push(tabsOpen);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const verticalTabInput = new state.Token('tab-input', 'input', 0);\n const verticalTabLabelOpen = new state.Token('tab-label_open', 'label', 1);\n const verticalTabLabelClose = new state.Token('tab-label_close', 'label', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('radio');\n\n verticalTabInput.block = true;\n\n verticalTabInput.attrJoin('class', 'radio');\n verticalTabInput.attrSet('type', 'radio');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet(\n 'class',\n [TAB_CLASSNAME, TAB_GROUP_CLASSNAME, VERTICAL_TAB_CLASSNAME].join(' '),\n );\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n tabOpen.attrSet(TAB_DATA_VERTICAL_TAB, 'true');\n\n if (didTabHasActiveAttr) {\n tabOpen.attrSet(TAB_FORCED_OPEN, 'true');\n verticalTabInput.attrSet('checked', 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabsTokens.push(\n tabOpen,\n verticalTabInput,\n verticalTabLabelOpen,\n tabInline,\n verticalTabLabelClose,\n tabClose,\n );\n\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_CLASSNAME,\n TABS_DROPDOWN_CLASSNAME,\n TABS_DROPDOWN_MENU_CLASSNAME,\n TABS_DROPDOWN_SELECT,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_PANEL_CLASSNAME,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const dropdown: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const dropdownTokens = [];\n const dropdownOpen = new state.Token('dropdown_open', 'div', 1);\n const dropdownClose = new state.Token('dropdown_close', 'div', -1);\n const dropdownSelectOpen = new state.Token('dropdown-select_open', 'div', 1);\n const dropdownSelectInline = new state.Token('inline', '', 0);\n const dropdownSelectText = new state.Token('text', '', 0);\n const dropdownSelectClose = new state.Token('dropdown-select_open', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n dropdownOpen.block = true;\n dropdownClose.block = true;\n dropdownSelectOpen.block = true;\n dropdownSelectClose.block = true;\n\n const [activeTab, ...restActiveTabs] = tabs.filter(isTabSelected);\n\n if (restActiveTabs.length) {\n throw new Error('Unable to dropdown tabs with more than 1 active element');\n }\n\n dropdownOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_DROPDOWN_CLASSNAME].filter(Boolean).join(' '),\n );\n\n dropdownOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n dropdownOpen.attrSet(TAB_DATA_VARIANT, 'dropdown');\n\n dropdownSelectOpen.attrSet('role', 'tablist');\n dropdownSelectOpen.attrSet('class', TABS_DROPDOWN_SELECT);\n\n if (activeTab) {\n dropdownSelectOpen.attrJoin('class', 'filled');\n }\n\n dropdownSelectText.content = activeTab ? activeTab.name : '-';\n dropdownSelectInline.children = [dropdownSelectText];\n\n dropdownTokens.push(\n dropdownOpen,\n dropdownSelectOpen,\n dropdownSelectInline,\n dropdownSelectClose,\n );\n\n const dropdownMenuOpen = new state.Token('dropdown-menu_open', 'ul', 1);\n const dropdownMenuClose = new state.Token('dropdown-menu_close', 'ul', -1);\n\n dropdownMenuOpen.attrSet('class', TABS_DROPDOWN_MENU_CLASSNAME);\n\n const tabIds = tabs.map((tab) => getTabId(tab, {runId}));\n\n const menuTokens = tabs.flatMap((tab, i) => {\n const menuListItemOpen = new state.Token('dropdown-menu-item_open', 'li', 1);\n const menuListItemClose = new state.Token('dropdown-menu-item_close', 'li', -1);\n const menuListItemText = new state.Token('text', '', 0);\n const menuListItemInline = new state.Token('inline', '', 0);\n\n const tabId = tabIds[i];\n const tabKey = getTabKey(tab);\n const isActive = tab === activeTab;\n\n menuListItemOpen.attrSet(\n 'class',\n [TAB_CLASSNAME, isActive && ACTIVE_CLASSNAME].filter(Boolean).join(' '),\n );\n menuListItemOpen.attrSet(TAB_DATA_ID, tabId);\n menuListItemOpen.attrSet(TAB_DATA_KEY, tabKey);\n menuListItemOpen.attrSet('aria-selected', String(isActive));\n\n menuListItemText.content = tab.name;\n menuListItemInline.children = [menuListItemText];\n\n return [menuListItemOpen, menuListItemInline, menuListItemClose];\n });\n\n dropdownTokens.push(dropdownMenuOpen, ...menuTokens, dropdownMenuClose);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n const tab = tabs[i];\n const tabId = tabIds[i];\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('dropdown');\n\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (didTabHasActiveAttr) {\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n dropdownTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n dropdownTokens.push(dropdownClose);\n\n return dropdownTokens;\n};\n", "import type {StateCore} from '../markdown-it';\n\nimport {\n ACTIVE_CLASSNAME,\n GROUP_DATA_KEY,\n TABS_ACCORDION_CLASSNAME,\n TABS_CLASSNAME,\n TAB_ACTIVE_KEY,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_FORCED_OPEN,\n TAB_GROUP_CLASSNAME,\n TAB_PANEL_CLASSNAME,\n TabsVariants,\n} from '../../common';\nimport {getContentMap, getName, getTabId, getTabKey, isTabSelected} from '../utils';\nimport {type RuntimeTab} from '../types';\n\nimport {type TabsTokensGenerator} from './types';\n\nexport const accordion: TabsTokensGenerator = (\n tabs: RuntimeTab[],\n state: StateCore,\n {containerClasses, tabsGroup, runId, generateID},\n) => {\n const tabsTokens = [];\n const tabsOpen = new state.Token('tabs_open', 'div', 1);\n const tabsClose = new state.Token('tabs_close', 'div', -1);\n\n if (tabs.length) {\n const [start] = tabs[0].listItem.map ?? [null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (start == null) {\n throw new Error('failed to parse line mapping');\n }\n\n const [_, end] = tabs[tabs.length - 1].listItem.map ?? [null, null];\n // eslint-disable-next-line no-eq-null, eqeqeq\n if (end == null) {\n throw new Error('failed to parse line mapping');\n }\n }\n\n tabsOpen.block = true;\n tabsClose.block = true;\n\n const activeTabsCount = tabs.filter(isTabSelected).length;\n\n if (activeTabsCount > 1) {\n throw new Error('Unable to render tabs with more than 1 active element');\n }\n\n tabsOpen.attrSet(\n 'class',\n [TABS_CLASSNAME, containerClasses, TABS_ACCORDION_CLASSNAME].filter(Boolean).join(' '),\n );\n\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabsOpen.attrSet(TAB_DATA_VARIANT, TabsVariants.Accordion);\n tabsTokens.push(tabsOpen);\n\n for (let i = 0; i < tabs.length; i++) {\n const tabOpen = new state.Token('tab_open', 'div', 1);\n const tabInline = new state.Token('inline', '', 0);\n const tabText = new state.Token('text', '', 0);\n const tabClose = new state.Token('tab_close', 'div', -1);\n const tabPanelOpen = new state.Token('tab-panel_open', 'div', 1);\n const tabPanelClose = new state.Token('tab-panel_close', 'div', -1);\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n\n const tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n const didTabHasActiveAttr = isTabSelected(tab);\n\n tab.name = getName(tab);\n\n const tabPanelId = generateID('accordion');\n\n tabOpen.map = tabs[i].listItem.map;\n tabOpen.markup = tabs[i].listItem.markup;\n tabPanelOpen.map = getContentMap(tabs[i].tokens);\n tabText.content = tabs[i].name;\n tabInline.children = [tabText];\n tabOpen.block = true;\n tabClose.block = true;\n tabPanelOpen.block = true;\n tabPanelClose.block = true;\n tabOpen.attrSet(TAB_DATA_ID, tabId);\n tabOpen.attrSet(TAB_DATA_KEY, tabKey);\n tabOpen.attrSet('class', [TAB_CLASSNAME, TAB_GROUP_CLASSNAME].join(' '));\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', i === 0 ? '0' : '-1');\n tabOpen.attrSet(TAB_ACTIVE_KEY, 'false');\n tabPanelOpen.attrSet('id', tabPanelId);\n tabPanelOpen.attrSet('class', TAB_PANEL_CLASSNAME);\n tabPanelOpen.attrSet('role', 'tabpanel');\n tabPanelOpen.attrSet('aria-labelledby', tabId);\n tabPanelOpen.attrSet('data-title', tab.name);\n\n if (didTabHasActiveAttr) {\n tabPanelOpen.attrSet(TAB_FORCED_OPEN, 'true');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabsTokens.push(tabOpen, tabInline, tabClose);\n\n tabsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\n }\n\n tabsTokens.push(tabsClose);\n\n return tabsTokens;\n};\n", "/**\n * Variant registry: maps TabsVariants to the function that generates HTML tokens for that variant.\n */\nimport type {TabsVariants} from '../../common';\nimport type {TabsTokensGenerator} from './types';\n\nimport {regular} from './regular';\nimport {radio} from './radio';\nimport {dropdown} from './dropdown';\nimport {accordion} from './accordion';\n\nconst generateByType: Record<TabsVariants, TabsTokensGenerator> = {\n regular,\n radio,\n dropdown,\n accordion,\n};\n\n/**\n * Returns the token generator for the given variant.\n * @param type - Variant name\n * @returns Generator function for that variant\n */\nexport const generateTokensByType = (type: TabsVariants): TabsTokensGenerator => {\n return generateByType[type];\n};\n", "import type {StateCore, Token} from './markdown-it';\nimport type {RuntimeTab} from './types';\nimport type {TabsGenerationProps} from './variants/types';\n\nimport {generateTokensByType} from './variants';\n\n/**\n * Generate markdown-it tokens for a tabs block based on the chosen variant.\n * Delegates to the variant-specific generator (regular, radio, dropdown, accordion).\n * @param tabs - Parsed tab items\n * @param state - MarkdownIt state\n * @param props - Generation options (containerClasses, tabsGroup, runId, variant)\n * @returns Token array for the block\n */\nexport function generateTabsTokens(\n tabs: RuntimeTab[],\n state: StateCore,\n props: TabsGenerationProps,\n): Token[] {\n const tokens = generateTokensByType(props.variant)(tabs, state, props);\n\n return tokens;\n}\n", "import type {StateCore, Token} from './markdown-it';\n/**\n * Parsing of `{% list tabs %}` blocks: locate open/close tags, parse props, and extract tab items\n * from the list tokens between them.\n */\nimport type {RuntimeTab, TabsProps} from './types';\nimport type {IDGenerator} from '@diplodoc/utils';\n\nimport {DEFAULT_TABS_GROUP_PREFIX, TAB_RE, TabsVariants} from '../common';\n\nimport {trim, unquote} from './utils';\n\nexport type TabsBoundaryToken = {\n readonly type: string;\n readonly content: string;\n readonly map: readonly [number, number] | null;\n};\n\n/**\n * Find the token index of the matching `{% endlist %}` for a list starting at idx.\n * @param tokens - Full token list\n * @param idx - Start index\n * @returns Index of close token or null\n */\nfunction findCloseTokenIndex(tokens: Token[], idx: number): number | null {\n let level = 0;\n let i = idx;\n while (i < tokens.length) {\n if (matchOpenToken(tokens, i)) {\n level++;\n } else if (matchCloseToken(tokens, i)) {\n if (level === 0) {\n return i;\n }\n level--;\n }\n\n i++;\n }\n\n return null;\n}\n\nfunction matchCloseToken(tokens: readonly TabsBoundaryToken[], i: number): boolean {\n return (\n tokens[i].type === 'paragraph_open' &&\n tokens[i + 1].type === 'inline' &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n );\n}\n\nfunction matchOpenToken(tokens: readonly TabsBoundaryToken[], i: number): RegExpMatchArray | null {\n if (tokens[i].type !== 'paragraph_open' || tokens[i + 1].type !== 'inline') {\n return null;\n }\n return tokens[i + 1].content.match(TAB_RE);\n}\n\n/**\n * Allocate a default group even when a source provides an explicit group.\n * @param generateID - Per-file ID generator\n * @returns Generated default group\n */\nexport function defaultTabsGroup(generateID: IDGenerator): string {\n return generateID(DEFAULT_TABS_GROUP_PREFIX.replace(/-$/, ''));\n}\n\n/**\n * Parse `{% list tabs group=... %}` content into variant and group id.\n * @param content - Raw tag content after \"list tabs\"\n * @param generateID - per-file isolated ID generator used for default group id\n * @returns Parsed props (variant, group)\n */\nexport function props(content: string, generateID: IDGenerator): TabsProps {\n const clean = trim(content.replace('list tabs', ''));\n\n const props = clean.split(' ');\n const result: TabsProps = {\n content: clean,\n variant: TabsVariants.Regular,\n // DEFAULT_TABS_GROUP_PREFIX ends with '-', so strip it before passing to generateID\n // which appends '-N' itself. Result: 'defaultTabsGroup-1', 'defaultTabsGroup-2', \u2026\n // TabsController checks group.startsWith(DEFAULT_TABS_GROUP_PREFIX) which still matches.\n group: defaultTabsGroup(generateID),\n };\n\n visitProps(props, (key, value) => {\n switch (key) {\n case 'horizontal':\n case 'radio':\n case 'dropdown':\n case 'accordion':\n result.variant = key as TabsVariants;\n break;\n case 'group':\n result.group = unquote(value);\n break;\n default:\n // TODO: lint unknown tabs props\n }\n });\n\n return result;\n}\n\nfunction visitProps(\n parts: readonly string[],\n visit: (key: string, value: string, pieces: string[]) => void,\n): void {\n for (const prop of parts) {\n const pieces = prop.split('=').map(trim);\n visit(pieces[0], pieces[1], pieces);\n }\n}\n\nexport type TabsBoundary = {\n readonly map: readonly [number, number] | null;\n readonly raw: string;\n} & (\n | {\n readonly kind: 'open';\n readonly variant:\n | {readonly present: false}\n | {readonly present: true; readonly raw: string};\n readonly group:\n | {readonly present: false}\n | {readonly present: true; readonly raw: string; readonly value: string};\n }\n | {readonly kind: 'close' | 'unsupported'}\n);\n\n/**\n * Classify one original block edge without pairing it or validating the body.\n * @param tokens - Original pre-semantic block tokens.\n * @param i - Candidate paragraph index.\n * @returns A copied boundary observation when recognized.\n */\nexport function recognizeTabsBoundary(\n tokens: readonly TabsBoundaryToken[],\n i: number,\n): TabsBoundary | undefined {\n if (!tokens[i] || !tokens[i + 1]) return undefined;\n const match = matchOpenToken(tokens, i);\n const close = !match && matchCloseToken(tokens, i);\n if (!match && !close) return undefined;\n const map = tokens[i].map;\n const common = {map: map ? ([map[0], map[1]] as const) : null, raw: tokens[i + 1].content};\n if (close) return {kind: 'close', ...common};\n if (!match || (match[0].startsWith('`') && match[0].endsWith('`'))) return undefined;\n if (tokens[i + 1].content.trim() !== match[0]) return {kind: 'unsupported', ...common};\n let variant: {present: false} | {present: true; raw: string} = {present: false};\n let group: {present: false} | {present: true; raw: string; value: string} = {present: false};\n let unsupported = false;\n const parts = trim(match[0].replace('list tabs', '')).split(' ');\n visitProps(parts, (key, value, pieces) => {\n if ((!key || key === '{%' || key === '%}') && pieces.length === 1) return;\n if (\n ['horizontal', 'radio', 'dropdown', 'accordion'].includes(key) &&\n pieces.length === 1 &&\n !variant.present\n ) {\n variant = {present: true, raw: key};\n } else if (key === 'group' && pieces.length === 2 && value && !group.present) {\n group = {present: true, raw: value, value: unquote(value)};\n } else {\n unsupported = true;\n }\n });\n return unsupported\n ? {kind: 'unsupported', ...common}\n : {kind: 'open', ...common, variant, group};\n}\n\ntype Result =\n | {step: number}\n | {\n content: string;\n closeTokenIndex: number;\n extraTokensAfterClose: number;\n };\n\n/**\n * Check if tokens at index start a valid `{% list tabs %}` block.\n * @param tokens - Full token list\n * @param index - Start index\n * @returns Either a step to advance, or the block content and close index for replacement\n */\nexport function tryToFindTabs(tokens: Token[], index: number): Result {\n const match = matchOpenToken(tokens, index);\n const openTag = match && match[0];\n const isNotEscaped = openTag && !(openTag.startsWith('`') && openTag.endsWith('`'));\n\n if (!match || !isNotEscaped) {\n return {\n step: 1,\n };\n }\n\n const closeTokenIndex = findCloseTokenIndex(tokens, index + 3);\n\n if (!closeTokenIndex) {\n tokens[index].attrSet('YFM005', 'true');\n\n return {\n step: 3,\n };\n }\n\n let extraTokensAfterClose = 0;\n const afterEndlistIdx = closeTokenIndex + 3; // After paragraph_open, inline, paragraph_close\n\n const openTokenLevel = tokens[index].level;\n const closeTokenLevel = tokens[closeTokenIndex].level;\n\n // dont handle tabs if closeToken has \"negative\" indent, e.g. closeToken.level < openToken.level\n if (closeTokenLevel < openTokenLevel) {\n tokens[index].attrSet('YFM005', 'true');\n return {\n step: 3,\n };\n }\n\n if (closeTokenLevel > openTokenLevel) {\n const tokenAfter = tokens[afterEndlistIdx];\n\n // do not handle tabs unless {% endlist %} is at the end of the tab content\n if (tokenAfter && tokenAfter.nesting >= 0) {\n tokens[index].attrSet('YFM005', 'true');\n return {\n step: 3,\n };\n }\n\n // remove list close tokens if `{% endlist %}` is inside the content of a tab\n if (\n tokenAfter?.type === 'list_item_close' &&\n tokens[afterEndlistIdx + 1]?.type === 'bullet_list_close'\n ) {\n extraTokensAfterClose = 2;\n }\n }\n\n return {\n content: openTag,\n closeTokenIndex,\n extraTokensAfterClose,\n };\n}\n\n/**\n * Extract tab items (name + tokens) from list tokens between list open and close/endlist.\n * @param tokens - Full token list\n * @param idx - Index after list open\n * @param closeTokenIdx - Index of {% endlist %} paragraph\n * @param TokenConstructor - Token constructor from the current MarkdownIt state\n * @param end - Exclusive scan bound\n * @returns Array of RuntimeTab\n */\nexport function findTabs(\n tokens: Token[],\n idx: number,\n closeTokenIdx: number,\n TokenConstructor: StateCore['Token'],\n end: number,\n): RuntimeTab[] {\n const tabs: RuntimeTab[] = [];\n let i = idx;\n let nestedLevel = -1;\n let pending: RuntimeTab = {\n name: '',\n tokens: [],\n listItem: new TokenConstructor('list_item_open', '', 0),\n };\n\n while (i < end) {\n const token = tokens[i];\n\n switch (token.type) {\n case 'ordered_list_open':\n case 'bullet_list_open':\n if (nestedLevel > -1) {\n pending.tokens.push(token);\n }\n\n nestedLevel++;\n\n break;\n case 'list_item_open':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n pending = {name: '', tokens: [], listItem: token};\n }\n\n break;\n case 'list_item_close':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n tabs.push(pending);\n }\n\n break;\n case 'ordered_list_close':\n case 'bullet_list_close':\n // The tab list may be interrupted by a dedented block (e.g. a heading)\n // and continue as a new list before {% endlist %}. Keep collecting until\n // {% endlist %}, otherwise transform() would drop everything in between.\n if (nestedLevel) {\n pending.tokens.push(token);\n }\n\n nestedLevel--;\n\n break;\n case 'paragraph_open':\n if (\n i === closeTokenIdx &&\n tokens[i + 1].content &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n ) {\n if (pending && !nestedLevel) {\n tabs.push(pending);\n }\n\n return tabs;\n }\n\n if (!pending.name && tokens[i + 1].type === 'inline') {\n pending.name = tokens[i + 1].content;\n\n i += 2;\n } else {\n pending.tokens.push(token);\n }\n break;\n default:\n pending.tokens.push(token);\n }\n i++;\n }\n\n return tabs;\n}\n", "import type {\n BlockContentState,\n ContainerDirectiveParams,\n DirectiveBlockState,\n DirectiveInlineState,\n DirectiveParserHost,\n} from '@diplodoc/directive';\n\nimport {\n directiveParser,\n registerContainerDirective,\n tokenizeBlockContent,\n} from '@diplodoc/directive';\n\nimport {TabsVariants} from '../common';\n\nexport type TabsDirectiveDiagnostic = {line: number; reason: string};\nexport type TabsMarker =\n | {kind: 'open'; end: object; variant: TabsVariants; group?: string}\n | {kind: 'close'};\n\nconst OPEN = 'yfm_tabs_directive_open';\nconst CLOSE = 'yfm_tabs_directive_close';\n\nfunction parseParams(\n params: ContainerDirectiveParams,\n): {variant: TabsVariants; group?: string} | {reason: string} {\n if (params.inlineContent || params.contentTitle || params.dests) {\n return {reason: 'Tabs directives do not support a title or destination'};\n }\n const attrs = params.attrs ?? {};\n for (const name of Object.keys(attrs)) {\n if (name !== 'variant' && name !== 'group')\n return {reason: `Unknown tabs attribute: ${name}`};\n if (Array.isArray(attrs[name])) return {reason: `Repeated tabs attribute: ${name}`};\n }\n const rawVariant = attrs.variant ?? TabsVariants.Regular;\n const variant = Object.values(TabsVariants).find((candidate) => candidate === rawVariant);\n if (!variant) {\n return {reason: 'Invalid tabs variant'};\n }\n const group = attrs.group;\n if (group !== undefined && (typeof group !== 'string' || !group.trim())) {\n return {reason: 'Tabs group must be nonempty'};\n }\n return {variant, group};\n}\n\nexport function installTabsDirective<\n B extends DirectiveBlockState & BlockContentState<B>,\n I extends DirectiveInlineState,\n>(\n md: DirectiveParserHost<B, I>,\n markers: WeakMap<object, TabsMarker>,\n onDiagnostic?: (diagnostic: TabsDirectiveDiagnostic) => void,\n): void {\n directiveParser()(md);\n registerContainerDirective(\n md,\n 'tabs',\n (state, params) => {\n const parsed = parseParams(params);\n if ('reason' in parsed) {\n onDiagnostic?.({line: params.startLine + 1, reason: parsed.reason});\n return false;\n }\n const open = state.push(OPEN, '', 0);\n open.map = [params.startLine, params.endLine];\n tokenizeBlockContent(state, params.content, 'tabs-directive');\n const close = state.push(CLOSE, '', 0);\n close.map = [params.endLine - 1, params.endLine];\n markers.set(open, {kind: 'open', end: close, ...parsed});\n markers.set(close, {kind: 'close'});\n return true;\n },\n {onConflict: 'error'},\n );\n}\n\nexport function validateTabsMarkers(\n tokens: readonly {type: string}[],\n markers: WeakMap<object, TabsMarker>,\n): void {\n const expected: object[] = [];\n for (const token of tokens) {\n const marker = markers.get(token);\n if (!marker && (token.type === OPEN || token.type === CLOSE)) {\n throw new Error('Unowned tabs directive marker');\n }\n if (marker?.kind === 'open') expected.push(marker.end);\n else if (marker?.kind === 'close' && expected.pop() !== token) {\n throw new Error('Tabs directive opening marker is missing or crossed');\n }\n }\n if (expected.length) throw new Error('Tabs directive closing marker is missing');\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "__toCommonJS", "createIDGeneratorByStrategy", "_a", "exports", "module", "exports", "module", "exports", "module", "trim", "__commonJS", "exports", "module", "c", "__export", "directiveParser", "registerContainerDirective", "tokenizeBlockContent", "__toCommonJS", "__toESM", "scanState", "directivePlugin", "transform", "import_utils", "TabsVariants", "slugify", "GithubSlugger", "props", "props", "onBundle", "options", "transform"]
|
|
7
7
|
}
|