@diplodoc/tabs-extension 2.0.3 → 2.0.5

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 CHANGED
@@ -97,8 +97,8 @@ The keys for the tabs are generated automatically. They are based on the tab's n
97
97
  You can set your own keys for tabs with this statement:
98
98
  ```
99
99
  {% list tabs group=group_1 %}
100
- - Tab 1 #{my-tab-1}
101
- - Tab 2 #{my-tab-2}
100
+ - Tab 1 {#my-tab-1}
101
+ - Tab 2 {#my-tab-2}
102
102
  {% endlist %}
103
103
  ```
104
104
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/tabs-extension",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "TBD",
5
5
  "main": "plugin/index.js",
6
6
  "types": "plugin/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "precommit": "npm run lint && npm run test",
27
27
  "prepack": "npm run lint && npm run test && npm run build",
28
28
  "test": "jest",
29
- "prepare": "husky install"
29
+ "prepare": "husky install && npm run build"
30
30
  },
31
31
  "author": "",
32
32
  "license": "ISC",
@@ -49,7 +49,6 @@
49
49
  "@types/jest": "^29.5.2",
50
50
  "@types/markdown-it": "^12.2.3",
51
51
  "@types/react": "^18.2.14",
52
- "@types/uuid": "^9.0.2",
53
52
  "@yandex-cloud/eslint-config": "^1.1.0",
54
53
  "@yandex-cloud/prettier-config": "^1.0.0",
55
54
  "esbuild": "^0.17.12",
@@ -62,7 +61,6 @@
62
61
  "prettier": "^2.8.8",
63
62
  "sass": "^1.64.1",
64
63
  "ts-jest": "^29.1.0",
65
- "typescript": "^5.0.2",
66
- "uuid": "^9.0.0"
64
+ "typescript": "^5.0.2"
67
65
  }
68
66
  }
@@ -3,3 +3,4 @@ export declare function getTabId(tab: Tab, { runId }: {
3
3
  runId: string;
4
4
  }): string;
5
5
  export declare function getTabKey(tab: Tab): string;
6
+ export declare function getName(tab: Tab): string;
package/plugin/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
 
30
20
  // src/plugin/index.ts
@@ -34,56 +24,10 @@ __export(plugin_exports, {
34
24
  });
35
25
  module.exports = __toCommonJS(plugin_exports);
36
26
 
37
- // node_modules/uuid/dist/esm-node/rng.js
38
- var import_crypto = __toESM(require("crypto"));
39
- var rnds8Pool = new Uint8Array(256);
40
- var poolPtr = rnds8Pool.length;
41
- function rng() {
42
- if (poolPtr > rnds8Pool.length - 16) {
43
- import_crypto.default.randomFillSync(rnds8Pool);
44
- poolPtr = 0;
45
- }
46
- return rnds8Pool.slice(poolPtr, poolPtr += 16);
47
- }
48
-
49
- // node_modules/uuid/dist/esm-node/stringify.js
50
- var byteToHex = [];
51
- for (let i = 0; i < 256; ++i) {
52
- byteToHex.push((i + 256).toString(16).slice(1));
53
- }
54
- function unsafeStringify(arr, offset = 0) {
55
- return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
56
- }
57
-
58
- // node_modules/uuid/dist/esm-node/native.js
59
- var import_crypto2 = __toESM(require("crypto"));
60
- var native_default = {
61
- randomUUID: import_crypto2.default.randomUUID
62
- };
63
-
64
- // node_modules/uuid/dist/esm-node/v4.js
65
- function v4(options, buf, offset) {
66
- if (native_default.randomUUID && !buf && !options) {
67
- return native_default.randomUUID();
68
- }
69
- options = options || {};
70
- const rnds = options.random || (options.rng || rng)();
71
- rnds[6] = rnds[6] & 15 | 64;
72
- rnds[8] = rnds[8] & 63 | 128;
73
- if (buf) {
74
- offset = offset || 0;
75
- for (let i = 0; i < 16; ++i) {
76
- buf[offset + i] = rnds[i];
77
- }
78
- return buf;
79
- }
80
- return unsafeStringify(rnds);
81
- }
82
- var v4_default = v4;
83
-
84
27
  // src/plugin/utils.ts
85
28
  function generateID() {
86
- return v4_default().substring(0, 8);
29
+ const id = Math.random().toString(36).substr(2, 8);
30
+ return id.substring(id.length - 8);
87
31
  }
88
32
  function addHiddenProperty(box, field, value) {
89
33
  if (!(field in box)) {
@@ -96,29 +40,33 @@ function addHiddenProperty(box, field, value) {
96
40
  }
97
41
 
98
42
  // src/plugin/copyRuntimeFiles.ts
99
- var import_node_path = require("node:path");
100
- var import_node_fs = require("node:fs");
101
43
  var PATH_TO_RUNTIME = "../runtime";
102
44
  function copyRuntimeFiles({
103
45
  runtimeJsPath,
104
46
  runtimeCssPath,
105
47
  output
106
48
  }, cache) {
49
+ const { join, resolve } = dynrequire("node:path");
107
50
  const runtimeFiles = {
108
51
  "index.js": runtimeJsPath,
109
52
  "styles.css": runtimeCssPath
110
53
  };
111
54
  for (const [originFile, outputFile] of Object.entries(runtimeFiles)) {
112
- const file = (0, import_node_path.join)(PATH_TO_RUNTIME, originFile);
55
+ const file = join(PATH_TO_RUNTIME, originFile);
113
56
  if (!cache.has(file)) {
114
57
  cache.add(file);
115
- copyFile((0, import_node_path.resolve)(__dirname, file), (0, import_node_path.join)(output, outputFile));
58
+ copyFile(resolve(__dirname, file), join(output, outputFile));
116
59
  }
117
60
  }
118
61
  }
119
62
  function copyFile(from, to) {
120
- (0, import_node_fs.mkdirSync)((0, import_node_path.dirname)(to), { recursive: true });
121
- (0, import_node_fs.copyFileSync)(from, to);
63
+ const { mkdirSync, copyFileSync } = dynrequire("node:fs");
64
+ const { dirname } = dynrequire("node:path");
65
+ mkdirSync(dirname(to), { recursive: true });
66
+ copyFileSync(from, to);
67
+ }
68
+ function dynrequire(module) {
69
+ return eval(`require('${module}')`);
122
70
  }
123
71
 
124
72
  // node_modules/github-slugger/regex.js
@@ -179,10 +127,19 @@ function slug(value, maintainCase) {
179
127
  // src/plugin/getTabId.ts
180
128
  var CUSTOM_ID_REGEXP = /\[?{ ?#(\S+) ?}]?/;
181
129
  var sluggersStorage = /* @__PURE__ */ new Map();
182
- var getCustomId = (name) => {
183
- const result = name.match(CUSTOM_ID_REGEXP);
184
- return (result == null ? void 0 : result[1]) || null;
185
- };
130
+ function parseName(name) {
131
+ const parts = name.match(CUSTOM_ID_REGEXP);
132
+ if (!parts) {
133
+ return {
134
+ name,
135
+ customAnchor: null
136
+ };
137
+ }
138
+ return {
139
+ name: name.replace(parts[0], "").trim(),
140
+ customAnchor: parts[1]
141
+ };
142
+ }
186
143
  function getTabId(tab, { runId }) {
187
144
  let slugger = sluggersStorage.get(runId);
188
145
  if (!slugger) {
@@ -194,8 +151,11 @@ function getTabId(tab, { runId }) {
194
151
  function getTabKey(tab) {
195
152
  return encodeURIComponent(getRawId(tab)).toLocaleLowerCase();
196
153
  }
154
+ function getName(tab) {
155
+ return parseName(tab.name).name;
156
+ }
197
157
  function getRawId(tab) {
198
- return getCustomId(tab.name) || tab.name;
158
+ return parseName(tab.name).customAnchor || tab.name;
199
159
  }
200
160
 
201
161
  // src/common.ts
@@ -213,6 +173,7 @@ var GLOBAL_SYMBOL = Symbol.for("diplodocTabs");
213
173
 
214
174
  // src/plugin/transform.ts
215
175
  var TAB_RE = /`?{% list tabs( group=([^ ]*))? %}`?/;
176
+ var runsCounter = 0;
216
177
  function findTabs(tokens, idx) {
217
178
  const tabs = [];
218
179
  let i = idx, nestedLevel = -1, pending = { name: "", tokens: [] };
@@ -305,7 +266,7 @@ function insertTabs(tabs, state, { start, end }, {
305
266
  const tab = tabs[i];
306
267
  const tabId = getTabId(tab, { runId });
307
268
  const tabKey = getTabKey(tab);
308
- tab.name = tab.name.replace(tabId, "");
269
+ tab.name = getName(tab);
309
270
  const tabPanelId = generateID();
310
271
  tabText.content = tabs[i].name;
311
272
  tabInline.children = [tabText];
@@ -375,7 +336,7 @@ function transform({
375
336
  const tabs = function(md, { output = "." }) {
376
337
  const plugin = (state) => {
377
338
  const { env, tokens } = state;
378
- const runId = v4_default();
339
+ const runId = String(++runsCounter);
379
340
  addHiddenProperty(env, "bundled", /* @__PURE__ */ new Set());
380
341
  let i = 0;
381
342
  let tabsAreInserted = false;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/plugin/index.ts", "../node_modules/uuid/dist/esm-node/rng.js", "../node_modules/uuid/dist/esm-node/stringify.js", "../node_modules/uuid/dist/esm-node/native.js", "../node_modules/uuid/dist/esm-node/v4.js", "../src/plugin/utils.ts", "../src/plugin/copyRuntimeFiles.ts", "../node_modules/github-slugger/regex.js", "../node_modules/github-slugger/index.js", "../src/plugin/getTabId.ts", "../src/common.ts", "../src/plugin/transform.ts"],
4
- "sourcesContent": ["export {transform} from './transform';\n", "import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;", "import crypto from 'crypto';\nexport default {\n randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;", "import {v4 as uuidv4} from 'uuid';\n\nexport function generateID() {\n return uuidv4().substring(0, 8);\n}\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) {\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", "import {dirname, join, resolve} from 'node:path';\nimport {mkdirSync, copyFileSync} from 'node:fs';\n\nconst PATH_TO_RUNTIME = '../runtime';\n\nexport function copyRuntimeFiles(\n {\n runtimeJsPath,\n runtimeCssPath,\n output,\n }: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n) {\n const runtimeFiles = {\n 'index.js': runtimeJsPath,\n 'styles.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 mkdirSync(dirname(to), {recursive: true});\n copyFileSync(from, to);\n}\n", "// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nexport const regex = /[\\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", "import { regex } from './regex.js'\n\nconst own = Object.hasOwnProperty\n\n/**\n * Slugger.\n */\nexport default class BananaSlug {\n /**\n * Create a new slug class.\n */\n constructor () {\n /** @type {Record<string, number>} */\n // eslint-disable-next-line no-unused-expressions\n this.occurrences\n\n this.reset()\n }\n\n /**\n * Generate a unique slug.\n *\n * Tracks previously generated slugs: repeated calls with the same value\n * will result in different slugs.\n * Use the `slug` function to get same slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\n slug (value, maintainCase) {\n const self = this\n let result = slug(value, maintainCase === true)\n const originalSlug = result\n\n while (own.call(self.occurrences, result)) {\n self.occurrences[originalSlug]++\n result = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[result] = 0\n\n return result\n }\n\n /**\n * Reset - Forget all previous slugs\n *\n * @return void\n */\n reset () {\n this.occurrences = Object.create(null)\n }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\nexport function slug (value, maintainCase) {\n if (typeof value !== 'string') return ''\n if (!maintainCase) value = value.toLowerCase()\n return value.replace(regex, '').replace(/ /g, '-')\n}\n", "import GithubSlugger from 'github-slugger';\n\nimport {Tab} from './transform';\n\nconst CUSTOM_ID_REGEXP = /\\[?{ ?#(\\S+) ?}]?/;\n\nconst sluggersStorage = new Map<string, GithubSlugger>();\n\nconst getCustomId = (name: string) => {\n const result = name.match(CUSTOM_ID_REGEXP);\n return result?.[1] || null;\n};\n\nexport function getTabId(tab: Tab, {runId}: {runId: 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\nexport function getTabKey(tab: Tab) {\n return encodeURIComponent(getRawId(tab)).toLocaleLowerCase();\n}\n\nfunction getRawId(tab: Tab): string {\n return getCustomId(tab.name) || tab.name;\n}\n", "import {TabsController} from './runtime/TabsController';\n\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const ACTIVE_CLASSNAME = 'active';\n\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const TAB_ACTIVA_KEY = 'data-diplodoc-is-active';\n\nexport const SELECT_TAB_EVENT_NAME = 'selecttab';\n\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\n\nexport interface Tab {\n group?: string;\n key: string;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n", "import MarkdownIt from 'markdown-it';\nimport StateCore from 'markdown-it/lib/rules_core/state_core';\nimport Token from 'markdown-it/lib/token';\nimport type {MarkdownItPluginCb} from '@doc-tools/transform/lib/plugins/typings';\nimport {v4 as uuidv4} from 'uuid';\n\nimport {addHiddenProperty, generateID} from './utils';\nimport {copyRuntimeFiles} from './copyRuntimeFiles';\nimport {getTabId, getTabKey} from './getTabId';\nimport {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n TAB_ACTIVA_KEY,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_PANEL_CLASSNAME,\n} from '../common';\n\nexport type PluginOptions = {\n runtimeJsPath: string;\n runtimeCssPath: string;\n containerClasses: string;\n bundle: boolean;\n};\n\nconst TAB_RE = /`?{% list tabs( group=([^ ]*))? %}`?/;\n\nexport type Tab = {\n name: string;\n tokens: Token[];\n};\n\nfunction findTabs(tokens: Token[], idx: number) {\n const tabs = [];\n let i = idx,\n nestedLevel = -1,\n pending: Tab = {name: '', tokens: []};\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 nestedLevel++;\n break;\n case 'list_item_open':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n pending = {name: '', tokens: []};\n }\n break;\n case 'list_item_close':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n tabs.push(pending);\n }\n break;\n case 'ordered_list_close':\n case 'bullet_list_close':\n if (!nestedLevel) {\n return {\n tabs,\n index: i,\n };\n }\n\n nestedLevel--;\n\n pending.tokens.push(token);\n\n break;\n case 'paragraph_open':\n if (\n !pending &&\n tokens[i + 1].content &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n ) {\n return {\n tabs,\n index: i + 2,\n };\n }\n\n if (!pending.name && tokens[i + 1].type === 'inline') {\n pending.name = tokens[i + 1].content;\n i += 2;\n } else {\n pending.tokens.push(token);\n }\n break;\n default:\n pending.tokens.push(token);\n }\n\n i++;\n }\n\n return {\n tabs,\n index: i,\n };\n}\n\nfunction insertTabs(\n tabs: Tab[],\n state: StateCore,\n {start, end}: {start: number; end: number},\n {\n containerClasses,\n tabsGroup,\n runId,\n }: {containerClasses: string; tabsGroup: string; runId: string},\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 tabsOpen.block = true;\n tabsClose.block = true;\n tabListOpen.block = true;\n tabListClose.block = true;\n\n tabsOpen.attrSet('class', [TABS_CLASSNAME, containerClasses].filter(Boolean).join(' '));\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabListOpen.attrSet('class', TABS_LIST_CLASSNAME);\n tabListOpen.attrSet('role', 'tablist');\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 tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n tab.name = tab.name.replace(tabId, '');\n\n const tabPanelId = generateID();\n\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(TAB_ACTIVA_KEY, i === 0 ? 'true' : 'false');\n tabOpen.attrSet('class', TAB_CLASSNAME);\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', '-1');\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 (i === 0) {\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n tabOpen.attrSet('aria-selected', 'true');\n tabOpen.attrSet('tabindex', '0');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabListTokens.push(tabOpen, tabInline, tabClose);\n tabPanelsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\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 state.tokens.splice(start, end - start + 1, ...tabsTokens);\n\n return tabsTokens.length;\n}\n\nfunction findCloseTokenIdx(tokens: Token[], idx: number) {\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) {\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) {\n return (\n tokens[i].type === 'paragraph_open' &&\n tokens[i + 1].type === 'inline' &&\n tokens[i + 1].content.match(TAB_RE)\n );\n}\n\nexport function transform({\n runtimeJsPath = '_assets/tabs-extension.js',\n runtimeCssPath = '_assets/tabs-extension.css',\n containerClasses = '',\n bundle = true,\n}: Partial<PluginOptions> = {}) {\n const tabs: MarkdownItPluginCb<{output: string}> = function (md: MarkdownIt, {output = '.'}) {\n const plugin = (state: StateCore) => {\n const {env, tokens} = state;\n const runId = uuidv4();\n\n addHiddenProperty(env, 'bundled', new Set<string>());\n\n let i = 0;\n let tabsAreInserted = false;\n\n while (i < tokens.length) {\n const match = matchOpenToken(tokens, i);\n const openTag = match && match[0];\n const isNotEscaped = openTag && !(openTag.startsWith('`') && openTag.endsWith('`'));\n\n if (!match || !isNotEscaped) {\n i++;\n continue;\n }\n\n const closeTokenIdx = findCloseTokenIdx(tokens, i + 3);\n\n if (!closeTokenIdx) {\n tokens[i].attrSet('YFM005', 'true');\n i += 3;\n continue;\n }\n\n const tabsGroup = match[2] || `${DEFAULT_TABS_GROUP_PREFIX}${generateID()}`;\n\n const {tabs, index} = findTabs(state.tokens, i + 3);\n\n if (tabs.length > 0) {\n i += insertTabs(\n tabs,\n state,\n {start: i, end: index + 3},\n {\n containerClasses,\n tabsGroup,\n runId,\n },\n );\n tabsAreInserted = true;\n } else {\n state.tokens.splice(i, index - i);\n }\n }\n\n if (tabsAreInserted) {\n env.meta = env.meta || {};\n env.meta.script = env.meta.script || [];\n env.meta.style = env.meta.style || [];\n env.meta.script.push(runtimeJsPath);\n env.meta.style.push(runtimeCssPath);\n\n if (bundle) {\n copyRuntimeFiles({runtimeJsPath, runtimeCssPath, output}, env.bundled);\n }\n }\n };\n\n try {\n md.core.ruler.before('curly_attributes', 'tabs', plugin);\n } catch (e) {\n md.core.ruler.push('tabs', plugin);\n }\n };\n\n return tabs;\n}\n"],
5
- "mappings": "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",
6
- "names": ["crypto", "import_crypto", "crypto", "tabs"]
3
+ "sources": ["../src/plugin/index.ts", "../src/plugin/utils.ts", "../src/plugin/copyRuntimeFiles.ts", "../node_modules/github-slugger/regex.js", "../node_modules/github-slugger/index.js", "../src/plugin/getTabId.ts", "../src/common.ts", "../src/plugin/transform.ts"],
4
+ "sourcesContent": ["export {transform} from './transform';\n", "export function generateID() {\n const id = Math.random().toString(36).substr(2, 8);\n return id.substring(id.length - 8);\n}\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) {\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", "const PATH_TO_RUNTIME = '../runtime';\n\nexport function copyRuntimeFiles(\n {\n runtimeJsPath,\n runtimeCssPath,\n output,\n }: {runtimeJsPath: string; runtimeCssPath: string; output: string},\n cache: Set<string>,\n) {\n const {join, resolve} = dynrequire('node:path');\n const runtimeFiles = {\n 'index.js': runtimeJsPath,\n 'styles.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} = dynrequire('node:fs');\n const {dirname} = dynrequire('node:path');\n mkdirSync(dirname(to), {recursive: true});\n copyFileSync(from, to);\n}\n\n/*\n * Runtime require hidden for builders.\n * Used for nodejs api\n */\nfunction dynrequire(module: string) {\n // eslint-disable-next-line no-eval\n return eval(`require('${module}')`);\n}\n", "// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nexport const regex = /[\\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", "import { regex } from './regex.js'\n\nconst own = Object.hasOwnProperty\n\n/**\n * Slugger.\n */\nexport default class BananaSlug {\n /**\n * Create a new slug class.\n */\n constructor () {\n /** @type {Record<string, number>} */\n // eslint-disable-next-line no-unused-expressions\n this.occurrences\n\n this.reset()\n }\n\n /**\n * Generate a unique slug.\n *\n * Tracks previously generated slugs: repeated calls with the same value\n * will result in different slugs.\n * Use the `slug` function to get same slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\n slug (value, maintainCase) {\n const self = this\n let result = slug(value, maintainCase === true)\n const originalSlug = result\n\n while (own.call(self.occurrences, result)) {\n self.occurrences[originalSlug]++\n result = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[result] = 0\n\n return result\n }\n\n /**\n * Reset - Forget all previous slugs\n *\n * @return void\n */\n reset () {\n this.occurrences = Object.create(null)\n }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\nexport function slug (value, maintainCase) {\n if (typeof value !== 'string') return ''\n if (!maintainCase) value = value.toLowerCase()\n return value.replace(regex, '').replace(/ /g, '-')\n}\n", "import GithubSlugger from 'github-slugger';\n\nimport {Tab} from './transform';\n\nconst CUSTOM_ID_REGEXP = /\\[?{ ?#(\\S+) ?}]?/;\n\nconst sluggersStorage = new Map<string, GithubSlugger>();\n\nfunction parseName(name: string) {\n const parts = name.match(CUSTOM_ID_REGEXP);\n if (!parts) {\n return {\n name,\n customAnchor: null,\n };\n }\n\n return {\n name: name.replace(parts[0], '').trim(),\n customAnchor: parts[1],\n };\n}\n\nexport function getTabId(tab: Tab, {runId}: {runId: 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\nexport function getTabKey(tab: Tab) {\n return encodeURIComponent(getRawId(tab)).toLocaleLowerCase();\n}\n\nexport function getName(tab: Tab) {\n return parseName(tab.name).name;\n}\n\nfunction getRawId(tab: Tab): string {\n return parseName(tab.name).customAnchor || tab.name;\n}\n", "import {TabsController} from './runtime/TabsController';\n\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const ACTIVE_CLASSNAME = 'active';\n\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const TAB_ACTIVA_KEY = 'data-diplodoc-is-active';\n\nexport const SELECT_TAB_EVENT_NAME = 'selecttab';\n\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\n\nexport interface Tab {\n group?: string;\n key: string;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\n}\n", "import MarkdownIt from 'markdown-it';\nimport StateCore from 'markdown-it/lib/rules_core/state_core';\nimport Token from 'markdown-it/lib/token';\nimport type {MarkdownItPluginCb} from '@doc-tools/transform/lib/plugins/typings';\n\nimport {addHiddenProperty, generateID} from './utils';\nimport {copyRuntimeFiles} from './copyRuntimeFiles';\nimport {getName, getTabId, getTabKey} from './getTabId';\nimport {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n TAB_ACTIVA_KEY,\n TABS_CLASSNAME,\n TABS_LIST_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_PANEL_CLASSNAME,\n} from '../common';\n\nexport type PluginOptions = {\n runtimeJsPath: string;\n runtimeCssPath: string;\n containerClasses: string;\n bundle: boolean;\n};\n\nconst TAB_RE = /`?{% list tabs( group=([^ ]*))? %}`?/;\n\nlet runsCounter = 0;\n\nexport type Tab = {\n name: string;\n tokens: Token[];\n};\n\nfunction findTabs(tokens: Token[], idx: number) {\n const tabs = [];\n let i = idx,\n nestedLevel = -1,\n pending: Tab = {name: '', tokens: []};\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 nestedLevel++;\n break;\n case 'list_item_open':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n pending = {name: '', tokens: []};\n }\n break;\n case 'list_item_close':\n if (nestedLevel) {\n pending.tokens.push(token);\n } else {\n tabs.push(pending);\n }\n break;\n case 'ordered_list_close':\n case 'bullet_list_close':\n if (!nestedLevel) {\n return {\n tabs,\n index: i,\n };\n }\n\n nestedLevel--;\n\n pending.tokens.push(token);\n\n break;\n case 'paragraph_open':\n if (\n !pending &&\n tokens[i + 1].content &&\n tokens[i + 1].content.trim() === '{% endlist %}'\n ) {\n return {\n tabs,\n index: i + 2,\n };\n }\n\n if (!pending.name && tokens[i + 1].type === 'inline') {\n pending.name = tokens[i + 1].content;\n i += 2;\n } else {\n pending.tokens.push(token);\n }\n break;\n default:\n pending.tokens.push(token);\n }\n\n i++;\n }\n\n return {\n tabs,\n index: i,\n };\n}\n\nfunction insertTabs(\n tabs: Tab[],\n state: StateCore,\n {start, end}: {start: number; end: number},\n {\n containerClasses,\n tabsGroup,\n runId,\n }: {containerClasses: string; tabsGroup: string; runId: string},\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 tabsOpen.block = true;\n tabsClose.block = true;\n tabListOpen.block = true;\n tabListClose.block = true;\n\n tabsOpen.attrSet('class', [TABS_CLASSNAME, containerClasses].filter(Boolean).join(' '));\n tabsOpen.attrSet(GROUP_DATA_KEY, tabsGroup);\n tabListOpen.attrSet('class', TABS_LIST_CLASSNAME);\n tabListOpen.attrSet('role', 'tablist');\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 tab = tabs[i];\n const tabId = getTabId(tab, {runId});\n const tabKey = getTabKey(tab);\n tab.name = getName(tab);\n\n const tabPanelId = generateID();\n\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(TAB_ACTIVA_KEY, i === 0 ? 'true' : 'false');\n tabOpen.attrSet('class', TAB_CLASSNAME);\n tabOpen.attrSet('role', 'tab');\n tabOpen.attrSet('aria-controls', tabPanelId);\n tabOpen.attrSet('aria-selected', 'false');\n tabOpen.attrSet('tabindex', '-1');\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 (i === 0) {\n tabOpen.attrJoin('class', ACTIVE_CLASSNAME);\n tabOpen.attrSet('aria-selected', 'true');\n tabOpen.attrSet('tabindex', '0');\n tabPanelOpen.attrJoin('class', ACTIVE_CLASSNAME);\n }\n\n tabListTokens.push(tabOpen, tabInline, tabClose);\n tabPanelsTokens.push(tabPanelOpen, ...tabs[i].tokens, tabPanelClose);\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 state.tokens.splice(start, end - start + 1, ...tabsTokens);\n\n return tabsTokens.length;\n}\n\nfunction findCloseTokenIdx(tokens: Token[], idx: number) {\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) {\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) {\n return (\n tokens[i].type === 'paragraph_open' &&\n tokens[i + 1].type === 'inline' &&\n tokens[i + 1].content.match(TAB_RE)\n );\n}\n\nexport function transform({\n runtimeJsPath = '_assets/tabs-extension.js',\n runtimeCssPath = '_assets/tabs-extension.css',\n containerClasses = '',\n bundle = true,\n}: Partial<PluginOptions> = {}) {\n const tabs: MarkdownItPluginCb<{output: string}> = function (md: MarkdownIt, {output = '.'}) {\n const plugin = (state: StateCore) => {\n const {env, tokens} = state;\n const runId = String(++runsCounter);\n\n addHiddenProperty(env, 'bundled', new Set<string>());\n\n let i = 0;\n let tabsAreInserted = false;\n\n while (i < tokens.length) {\n const match = matchOpenToken(tokens, i);\n const openTag = match && match[0];\n const isNotEscaped = openTag && !(openTag.startsWith('`') && openTag.endsWith('`'));\n\n if (!match || !isNotEscaped) {\n i++;\n continue;\n }\n\n const closeTokenIdx = findCloseTokenIdx(tokens, i + 3);\n\n if (!closeTokenIdx) {\n tokens[i].attrSet('YFM005', 'true');\n i += 3;\n continue;\n }\n\n const tabsGroup = match[2] || `${DEFAULT_TABS_GROUP_PREFIX}${generateID()}`;\n\n const {tabs, index} = findTabs(state.tokens, i + 3);\n\n if (tabs.length > 0) {\n i += insertTabs(\n tabs,\n state,\n {start: i, end: index + 3},\n {\n containerClasses,\n tabsGroup,\n runId,\n },\n );\n tabsAreInserted = true;\n } else {\n state.tokens.splice(i, index - i);\n }\n }\n\n if (tabsAreInserted) {\n env.meta = env.meta || {};\n env.meta.script = env.meta.script || [];\n env.meta.style = env.meta.style || [];\n env.meta.script.push(runtimeJsPath);\n env.meta.style.push(runtimeCssPath);\n\n if (bundle) {\n copyRuntimeFiles({runtimeJsPath, runtimeCssPath, output}, env.bundled);\n }\n }\n };\n\n try {\n md.core.ruler.before('curly_attributes', 'tabs', plugin);\n } catch (e) {\n md.core.ruler.push('tabs', plugin);\n }\n };\n\n return tabs;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["tabs"]
7
7
  }