@vanduo-oss/vd3-cbun 1.3.2 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +24 -9
  3. package/SKILL.md +42 -15
  4. package/dist/charts/core.d.ts +4 -0
  5. package/dist/charts/index.cjs +197 -10
  6. package/dist/charts/index.cjs.map +3 -3
  7. package/dist/charts/index.js +197 -10
  8. package/dist/charts/index.js.map +3 -3
  9. package/dist/charts/vd3-charts.css +82 -0
  10. package/dist/charts/vue.d.ts +4 -0
  11. package/dist/code-editor/core.d.ts +19 -2
  12. package/dist/code-editor/highlight.cjs +1242 -0
  13. package/dist/code-editor/highlight.cjs.map +7 -0
  14. package/dist/code-editor/highlight.d.ts +6 -0
  15. package/dist/code-editor/highlight.js +1219 -0
  16. package/dist/code-editor/highlight.js.map +7 -0
  17. package/dist/code-editor/index.cjs +694 -70
  18. package/dist/code-editor/index.cjs.map +4 -4
  19. package/dist/code-editor/index.d.ts +2 -0
  20. package/dist/code-editor/index.js +694 -70
  21. package/dist/code-editor/index.js.map +4 -4
  22. package/dist/code-editor/vd3-code-editor.css +5 -0
  23. package/dist/draw/core.d.ts +7 -1
  24. package/dist/draw/index.cjs +470 -52
  25. package/dist/draw/index.cjs.map +2 -2
  26. package/dist/draw/index.js +470 -52
  27. package/dist/draw/index.js.map +2 -2
  28. package/dist/draw/vd3-draw.css +45 -0
  29. package/dist/draw/vue.d.ts +4 -0
  30. package/dist/hex-grid/core.d.ts +41 -0
  31. package/dist/hex-grid/index.cjs +308 -13
  32. package/dist/hex-grid/index.cjs.map +3 -3
  33. package/dist/hex-grid/index.d.ts +1 -0
  34. package/dist/hex-grid/index.js +308 -13
  35. package/dist/hex-grid/index.js.map +3 -3
  36. package/dist/hex-grid/vue.d.ts +4 -0
  37. package/dist/index.js +2 -2
  38. package/dist/index.js.map +2 -2
  39. package/dist/meta.json +177 -66
  40. package/package.json +15 -10
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/code-editor/highlight.js", "../../src/code-editor/tokenizer/scanner.js", "../../src/code-editor/tokenizer/javascript.js", "../../src/code-editor/tokenizer/css.js", "../../src/code-editor/tokenizer/html.js", "../../src/code-editor/tokenizer/json.js", "../../src/code-editor/tokenizer/markdown.js", "../../src/code-editor/tokenizer/shell.js", "../../src/code-editor/tokenizer/python.js", "../../src/code-editor/tokenizer/index.js"],
4
+ "sourcesContent": ["// Highlight rendering. Two paths, both escaping-safe:\n// - renderTokensToHtml / highlight \u2192 an escaped HTML STRING (node tests, SSR,\n// docs snippets). `highlight()` does NOT append an extra newline by default\n// (snippet-safe inside `<pre>`). Pass `{ trailingNewline: true }` for the\n// textarea-overlay line-count fix.\n// - renderTokensToDom \u2192 a DOM DocumentFragment built with createElement /\n// createTextNode. This is the RUNTIME editor path; untrusted source text\n// only ever reaches `textContent`, so `innerHTML` is never assigned.\n//\n// This module is also the `./code-editor/highlight` entry: it re-exports\n// `tokenize` / `LANGUAGES` and MUST NOT import `core.js` or `vue.js`.\n\nimport { tokenize, LANGUAGES } from './tokenizer/index.js';\n\nexport { tokenize, LANGUAGES };\n\nconst ESCAPE_RE = /[&<>\"']/g;\nconst ESCAPE_MAP = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n};\n\n/** Escape the five HTML metacharacters. */\nexport function escapeHtml(str) {\n return String(str).replace(ESCAPE_RE, (ch) => ESCAPE_MAP[ch]);\n}\n\n/** Render tokens to an escaped HTML string of `<span class=\"vd-tk-*\">` wrappers. */\nexport function renderTokensToHtml(tokens) {\n let html = '';\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n if (t.type === 'plain') {\n html += escapeHtml(t.value);\n } else {\n html += '<span class=\"vd-tk-' + t.type + '\">' + escapeHtml(t.value) + '</span>';\n }\n }\n return html;\n}\n\n/**\n * Tokenize + render to an escaped HTML string.\n *\n * @param {string} source\n * @param {string} language\n * @param {{ trailingNewline?: boolean }} [options]\n * When `trailingNewline` is true, append an extra `\\n` if `source` is empty\n * or already ends with `\\n` (textarea line-count). Default false \u2014 snippet-safe.\n */\nexport function highlight(source, language, options) {\n const html = renderTokensToHtml(tokenize(source, language));\n if (options && options.trailingNewline && (source.endsWith('\\n') || source === '')) {\n return html + '\\n';\n }\n return html;\n}\n\n/**\n * Build a DocumentFragment of token nodes using `doc` (an injected `document`,\n * for jsdom/SSR testability). Plain tokens become text nodes; typed tokens\n * become `<span class=\"vd-tk-*\">` with the text set via `textContent`.\n */\nexport function renderTokensToDom(tokens, doc) {\n const frag = doc.createDocumentFragment();\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n if (t.type === 'plain') {\n frag.appendChild(doc.createTextNode(t.value));\n } else {\n const span = doc.createElement('span');\n span.className = 'vd-tk-' + t.type;\n span.textContent = t.value;\n frag.appendChild(span);\n }\n }\n return frag;\n}\n", "// The shared, ReDoS-safe tokenizer engine.\n//\n// Every language tokenizer is an ordered list of rules `{ type, re }` (or\n// `{ expand, re }`), where each `re` is a STICKY (`y`) regex. `scan()` tries the\n// rules at the current index; the first whose regex matches (consuming >=1 char)\n// wins. Any run of characters no rule matches becomes a single `plain` token.\n//\n// Optional `when(source, i)` skips a rule; optional `consume(source, i)` returns\n// `{ value }` without a sticky regex (still must advance \u22651 character).\n//\n// Because every rule is anchored at `lastIndex` (or consume) and consumes at\n// least one character, scanning is linear in the input length \u2014 there is no\n// cross-position backtracking. Rule regexes must themselves avoid nested\n// unbounded quantifiers (no `(a+)+`) so a single rule can never backtrack\n// catastrophically either.\n\n/**\n * Try the ordered `rules` at index `i`. Returns `{ tokens, length, value }`\n * or `null` when nothing matches.\n */\nexport function matchRule(source, i, rules) {\n for (let r = 0; r < rules.length; r++) {\n const rule = rules[r];\n if (rule.when && !rule.when(source, i)) continue;\n let value;\n if (rule.consume) {\n const got = rule.consume(source, i);\n if (!got || !got.value || got.value.length === 0) continue;\n value = got.value;\n } else {\n rule.re.lastIndex = i;\n const m = rule.re.exec(source);\n if (!m || m[0].length === 0) continue;\n value = m[0];\n }\n const tokens = rule.expand ? rule.expand(value) : [{ type: rule.type, value }];\n return { tokens, length: value.length, value };\n }\n return null;\n}\n\n/**\n * Tokenize `source` with the ordered `rules`. Returns `{ type, value }[]`.\n * Guarantee: `tokens.map((t) => t.value).join('') === source` (lossless).\n */\nexport function scan(source, rules) {\n const tokens = [];\n const n = source.length;\n let i = 0;\n let plainStart = -1;\n\n const flushPlain = (end) => {\n if (plainStart !== -1 && end > plainStart) {\n tokens.push({ type: 'plain', value: source.slice(plainStart, end) });\n }\n plainStart = -1;\n };\n\n while (i < n) {\n const hit = matchRule(source, i, rules);\n if (hit) {\n flushPlain(i);\n for (let k = 0; k < hit.tokens.length; k++) tokens.push(hit.tokens[k]);\n i += hit.length;\n } else {\n if (plainStart === -1) plainStart = i;\n i++;\n }\n }\n flushPlain(n);\n return coalesce(tokens);\n}\n\n/**\n * Merge adjacent tokens of the same type into one, cutting the DOM node count.\n * Lossless \u2014 values are concatenated in order.\n */\nexport function coalesce(tokens) {\n if (tokens.length < 2) return tokens;\n const out = [{ type: tokens[0].type, value: tokens[0].value }];\n for (let i = 1; i < tokens.length; i++) {\n const cur = tokens[i];\n const prev = out[out.length - 1];\n if (cur.type === prev.type) prev.value += cur.value;\n else out.push({ type: cur.type, value: cur.value });\n }\n return out;\n}\n\n/**\n * Build a sticky, word-boundaried alternation from a list of identifier words\n * (all `[A-Za-z0-9_]`, so no escaping needed). Longer words first so the\n * alternation is order-independent even without relying on `\\b`.\n */\nexport function wordRegex(words, flags) {\n const sorted = [...words].sort((a, b) => b.length - a.length);\n return new RegExp('(?:' + sorted.join('|') + ')\\\\b', (flags || '') + 'y');\n}\n", "// JavaScript / TypeScript tokenizer. One rule set, parameterized by keyword\n// list: TypeScript is JavaScript plus a superset of type-level keywords.\n// Template literals expand `${}` interpolations; `/pattern/flags` in regex\n// position emits `regex` (division `/` stays an operator after an identifier).\n\nimport { scan, wordRegex } from './scanner.js';\n\nconst JS_KEYWORDS = [\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'export',\n 'extends',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'import',\n 'in',\n 'instanceof',\n 'new',\n 'return',\n 'super',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n 'yield',\n 'async',\n 'await',\n 'let',\n 'static',\n 'get',\n 'set',\n 'of',\n 'as',\n 'from',\n];\n\nconst TS_KEYWORDS = [\n ...JS_KEYWORDS,\n 'interface',\n 'type',\n 'enum',\n 'implements',\n 'declare',\n 'namespace',\n 'readonly',\n 'satisfies',\n 'abstract',\n 'public',\n 'private',\n 'protected',\n 'keyof',\n 'infer',\n 'is',\n 'asserts',\n 'override',\n 'module',\n 'string',\n 'number',\n 'boolean',\n 'object',\n 'symbol',\n 'bigint',\n 'any',\n 'unknown',\n 'never',\n];\n\nconst BUILTINS = [\n 'console',\n 'window',\n 'document',\n 'globalThis',\n 'Math',\n 'JSON',\n 'Object',\n 'Array',\n 'String',\n 'Number',\n 'Boolean',\n 'Symbol',\n 'Promise',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'Date',\n 'RegExp',\n 'Error',\n 'Function',\n 'parseInt',\n 'parseFloat',\n 'isNaN',\n 'isFinite',\n 'require',\n 'module',\n 'exports',\n 'process',\n 'NaN',\n 'Infinity',\n];\n\nconst REGEX_AFTER_KEYWORD = new Set([\n 'return',\n 'throw',\n 'case',\n 'in',\n 'of',\n 'typeof',\n 'void',\n 'delete',\n 'new',\n 'else',\n 'do',\n 'yield',\n 'await',\n 'extends',\n]);\n\nfunction isWs(c) {\n return c === 32 || c === 9 || c === 10 || c === 13;\n}\n\nfunction isWord(c) {\n return (\n (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 36 || c === 95\n );\n}\n\n/** `/` starts a regex unless the preceding token is an identifier, number, `)`, `]`, `++`, or `--`. */\nexport function canStartRegex(source, i) {\n let j = i - 1;\n while (j >= 0 && isWs(source.charCodeAt(j))) j--;\n if (j < 0) return true;\n const c = source.charCodeAt(j);\n if (c === 41 || c === 93) return false; // ) ]\n if ((c === 43 || c === 45) && j > 0 && source.charCodeAt(j - 1) === c) return false;\n if (isWord(c)) {\n let start = j;\n while (start > 0 && isWord(source.charCodeAt(start - 1))) start--;\n return REGEX_AFTER_KEYWORD.has(source.slice(start, j + 1));\n }\n return true;\n}\n\nfunction isRegexFlag(c) {\n return (\n c === 100 ||\n c === 103 ||\n c === 105 ||\n c === 109 ||\n c === 115 ||\n c === 117 ||\n c === 118 ||\n c === 121\n );\n}\n\n/** Linear `/pattern/flags` consumer. Returns null when unterminated (so `/` can be division). */\nexport function consumeRegex(source, i) {\n const n = source.length;\n let j = i + 1;\n let inClass = false;\n while (j < n) {\n const c = source.charCodeAt(j);\n if (c === 10) return null;\n if (c === 92) {\n j += 2;\n continue;\n }\n if (inClass) {\n if (c === 93) inClass = false;\n j++;\n continue;\n }\n if (c === 91) {\n inClass = true;\n j++;\n continue;\n }\n if (c === 47) {\n j++;\n while (j < n && isRegexFlag(source.charCodeAt(j))) j++;\n return { value: source.slice(i, j) };\n }\n j++;\n }\n return null;\n}\n\nfunction skipQuoted(s, i) {\n const q = s.charCodeAt(i);\n let j = i + 1;\n const n = s.length;\n while (j < n) {\n const c = s.charCodeAt(j);\n if (c === 92) {\n j += 2;\n continue;\n }\n if (c === q) return j + 1;\n if (c === 10) return j;\n j++;\n }\n return n;\n}\n\nfunction findTemplateInterpEnd(s, start) {\n let depth = 1;\n let i = start;\n const n = s.length;\n while (i < n && depth > 0) {\n const c = s.charCodeAt(i);\n if (c === 47 && s.charCodeAt(i + 1) === 47) {\n const nl = s.indexOf('\\n', i + 2);\n if (nl < 0) return n;\n i = nl;\n continue;\n }\n if (c === 47 && s.charCodeAt(i + 1) === 42) {\n const end = s.indexOf('*/', i + 2);\n i = end < 0 ? n : end + 2;\n continue;\n }\n if (c === 34 || c === 39) {\n i = skipQuoted(s, i);\n continue;\n }\n if (c === 96) {\n i = skipTemplate(s, i);\n continue;\n }\n if (c === 123) depth++;\n else if (c === 125) {\n depth--;\n if (depth === 0) return i;\n }\n i++;\n }\n return n;\n}\n\nfunction skipTemplate(s, i) {\n let j = i + 1;\n const n = s.length;\n while (j < n) {\n const c = s.charCodeAt(j);\n if (c === 92) {\n j += 2;\n continue;\n }\n if (c === 96) return j + 1;\n if (c === 36 && s.charCodeAt(j + 1) === 123) {\n const end = findTemplateInterpEnd(s, j + 2);\n j = end < n && s.charCodeAt(end) === 125 ? end + 1 : end;\n continue;\n }\n j++;\n }\n return n;\n}\n\nfunction expandTemplateLiteral(value, rules) {\n const out = [];\n const n = value.length;\n let i = 1;\n let strStart = 0;\n\n const flushString = (end) => {\n if (end > strStart) out.push({ type: 'string', value: value.slice(strStart, end) });\n };\n\n while (i < n) {\n const c = value.charCodeAt(i);\n if (c === 92) {\n i += i + 1 < n ? 2 : 1;\n continue;\n }\n if (c === 96) {\n flushString(i + 1);\n return out;\n }\n if (c === 36 && i + 1 < n && value.charCodeAt(i + 1) === 123) {\n flushString(i);\n out.push({ type: 'operator', value: '${' });\n const innerStart = i + 2;\n const innerEnd = findTemplateInterpEnd(value, innerStart);\n const inner = value.slice(innerStart, innerEnd);\n if (inner) {\n const parts = scan(inner, rules);\n for (let k = 0; k < parts.length; k++) out.push(parts[k]);\n }\n if (innerEnd < n && value.charCodeAt(innerEnd) === 125) {\n out.push({ type: 'punctuation', value: '}' });\n i = innerEnd + 1;\n } else {\n i = innerEnd;\n }\n strStart = i;\n continue;\n }\n i++;\n }\n flushString(n);\n return out;\n}\n\nfunction makeRules(keywords) {\n const rules = [\n { type: 'comment', re: /\\/\\/[^\\n]*/y },\n { type: 'comment', re: /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y }, // unterminated -> comment to EOF\n { type: 'string', re: /\"(?:[^\"\\\\\\n]|\\\\.)*\"?/y },\n { type: 'string', re: /'(?:[^'\\\\\\n]|\\\\.)*'?/y },\n { expand: (value) => expandTemplateLiteral(value, rules), re: /`(?:[^`\\\\]|\\\\.)*`?/y },\n {\n type: 'number',\n re: /0[xX][\\da-fA-F_]+n?|0[bB][01_]+n?|0[oO][0-7_]+n?|(?:\\d[\\d_]*\\.?[\\d_]*|\\.\\d[\\d_]*)(?:[eE][+-]?\\d+)?n?/y,\n },\n { type: 'keyword', re: wordRegex(keywords) },\n { type: 'boolean', re: /(?:true|false)\\b/y },\n { type: 'null', re: /(?:null|undefined)\\b/y },\n { type: 'builtin', re: wordRegex(BUILTINS) },\n { type: 'function', re: /[A-Za-z_$][\\w$]*(?=\\s*\\()/y },\n { type: 'plain', re: /[A-Za-z_$][\\w$]*/y },\n {\n type: 'regex',\n when: (source, i) => source.charCodeAt(i) === 47 && canStartRegex(source, i),\n consume: consumeRegex,\n },\n { type: 'operator', re: /\\.{3}|=>|[+\\-*/%=<>!&|^~?]+/y },\n { type: 'punctuation', re: /[{}()[\\];,.:]/y },\n ];\n return rules;\n}\n\nconst JS_RULES = makeRules(JS_KEYWORDS);\nconst TS_RULES = makeRules(TS_KEYWORDS);\n\nexport function tokenizeJavaScript(source) {\n return scan(source, JS_RULES);\n}\n\nexport function tokenizeTypeScript(source) {\n return scan(source, TS_RULES);\n}\n", "// CSS tokenizer. A flat, stateless scan: comments, strings, at-rules, hex\n// colors, numbers+units, `!important`, custom properties, known property names\n// (only when followed by `:` \u2014 so `.a:hover` does not mark `a` as `property`),\n// class/id selectors, pseudos, function names, punctuation, and combinators.\n\nimport { scan } from './scanner.js';\n\nconst PROPERTIES = [\n 'align-content',\n 'align-items',\n 'align-self',\n 'all',\n 'animation',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-end',\n 'border-block-start',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-inline',\n 'border-inline-end',\n 'border-inline-start',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-decoration-break',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'color',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'container',\n 'content',\n 'counter-increment',\n 'counter-reset',\n 'cursor',\n 'direction',\n 'display',\n 'empty-cells',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'font',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphens',\n 'image-rendering',\n 'inline-size',\n 'inset',\n 'inset-block',\n 'inset-inline',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'left',\n 'letter-spacing',\n 'line-break',\n 'line-clamp',\n 'line-height',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'mask',\n 'mask-image',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'object-fit',\n 'object-position',\n 'offset',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overscroll-behavior',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'perspective',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'quotes',\n 'resize',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-padding',\n 'scroll-snap-align',\n 'scroll-snap-type',\n 'shape-outside',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-last',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-indent',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-transform',\n 'text-underline-offset',\n 'text-wrap',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-origin',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'user-select',\n 'vertical-align',\n 'visibility',\n 'white-space',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'z-index',\n];\n\nfunction cssPropRegex(names) {\n const sorted = [...names].sort((a, b) => b.length - a.length);\n return new RegExp('(?:' + sorted.join('|') + ')(?=\\\\s*:)', 'y');\n}\n\nconst RULES = [\n { type: 'comment', re: /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y }, // unterminated -> comment to EOF\n { type: 'string', re: /\"(?:[^\"\\\\\\n]|\\\\.)*\"?|'(?:[^'\\\\\\n]|\\\\.)*'?/y },\n { type: 'meta', re: /@[a-zA-Z-]+/y },\n { type: 'keyword', re: /!important\\b/y },\n { type: 'number', re: /#[0-9a-fA-F]{3,8}\\b/y },\n { type: 'number', re: /-?(?:\\d*\\.\\d+|\\d+)(?:%|[a-zA-Z]{1,4})?/y },\n { type: 'property', re: /--[\\w-]+/y },\n { type: 'property', re: cssPropRegex(PROPERTIES) },\n { type: 'attribute', re: /[.#][a-zA-Z_-][\\w-]*/y },\n { type: 'meta', re: /::?[a-zA-Z_-][\\w-]*/y },\n { type: 'function', re: /[-a-zA-Z][\\w-]*(?=\\()/y },\n { type: 'punctuation', re: /[{}()[\\];:,]/y },\n { type: 'operator', re: /[>+~*]/y },\n // Catch-all: consume an identifier/dash run (or whitespace) in one match so\n // the greedy property/function look-ahead rules run once per run, not once\n // per character (keeps scanning linear).\n { type: 'plain', re: /[-\\w$]+|\\s+/y },\n];\n\nexport function tokenizeCss(source) {\n return scan(source, RULES);\n}\n", "// HTML / XML / Vue SFC tokenizer. Tags are matched as one unit, then expanded\n// into tag-name / attribute / value sub-tokens. Complete `<script>` / `<style>`\n// open tags switch into JS/TS/CSS until the matching close tag (linear search).\n// Vue adds `{{ }}` mustache fences and classifies `v-*` / `@event` / `:bind`\n// as `meta`.\n\nimport { coalesce, matchRule } from './scanner.js';\nimport { tokenizeJavaScript, tokenizeTypeScript } from './javascript.js';\nimport { tokenizeCss } from './css.js';\n\nfunction expandTag(value, vue) {\n const out = [];\n const open = /^<\\/?/.exec(value)[0];\n out.push({ type: 'punctuation', value: open });\n let rest = value.slice(open.length);\n\n const name = /^[a-zA-Z][\\w:-]*/.exec(rest);\n if (name) {\n out.push({ type: 'tag', value: name[0] });\n rest = rest.slice(name[0].length);\n }\n\n if (rest) {\n const attrRules = vue\n ? [\n { type: 'string', re: /\"[^\"]*\"?|'[^']*'?/y },\n { type: 'operator', re: /=/y },\n { type: 'punctuation', re: /\\/?>/y },\n { type: 'meta', re: /(?:v-[\\w:.@-]+|[@:][\\w:.@-]*)/y },\n { type: 'attribute', re: /[a-zA-Z_][\\w:.-]*/y },\n ]\n : [\n { type: 'string', re: /\"[^\"]*\"?|'[^']*'?/y },\n { type: 'operator', re: /=/y },\n { type: 'punctuation', re: /\\/?>/y },\n { type: 'attribute', re: /[a-zA-Z_:@][\\w:.-]*/y },\n ];\n const inner = scanSlice(rest, attrRules);\n for (let i = 0; i < inner.length; i++) out.push(inner[i]);\n }\n return out;\n}\n\nfunction scanSlice(source, rules) {\n const tokens = [];\n const n = source.length;\n let i = 0;\n let plainStart = -1;\n const flushPlain = (end) => {\n if (plainStart !== -1 && end > plainStart) {\n tokens.push({ type: 'plain', value: source.slice(plainStart, end) });\n }\n plainStart = -1;\n };\n while (i < n) {\n const hit = matchRule(source, i, rules);\n if (hit) {\n flushPlain(i);\n for (let k = 0; k < hit.tokens.length; k++) tokens.push(hit.tokens[k]);\n i += hit.length;\n } else {\n if (plainStart === -1) plainStart = i;\n i++;\n }\n }\n flushPlain(n);\n return tokens;\n}\n\nfunction ieqChar(a, b) {\n if (a === b) return true;\n if (a >= 65 && a <= 90) return a + 32 === b;\n if (b >= 65 && b <= 90) return b + 32 === a;\n return false;\n}\n\n/** Linear, case-insensitive search for `</tagName>` starting at `start`. */\nfunction findCloseTag(source, start, tagName) {\n const n = source.length;\n const tlen = tagName.length;\n for (let i = start; i < n; i++) {\n if (source.charCodeAt(i) !== 60) continue;\n if (source.charCodeAt(i + 1) !== 47) continue;\n let ok = true;\n for (let k = 0; k < tlen; k++) {\n if (!ieqChar(source.charCodeAt(i + 2 + k), tagName.charCodeAt(k))) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n let j = i + 2 + tlen;\n while (j < n) {\n const c = source.charCodeAt(j);\n if (c === 32 || c === 9 || c === 10 || c === 13) j++;\n else break;\n }\n if (j < n && source.charCodeAt(j) === 62) return { start: i, end: j + 1 };\n }\n return null;\n}\n\nfunction embedInfo(tagValue) {\n const open = /^<(script|style)\\b/i.exec(tagValue);\n if (!open) return null;\n if (!tagValue.endsWith('>') || tagValue.endsWith('/>')) return null;\n const tag = open[1].toLowerCase();\n if (tag === 'style') return { tag: 'style', lang: 'css' };\n const lang = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(tagValue);\n const id = ((lang && (lang[1] || lang[2] || lang[3])) || '').toLowerCase();\n if (id === 'ts' || id === 'tsx' || id === 'typescript')\n return { tag: 'script', lang: 'typescript' };\n return { tag: 'script', lang: 'javascript' };\n}\n\nfunction tokenizeEmbed(source, lang) {\n if (lang === 'typescript') return tokenizeTypeScript(source);\n if (lang === 'css') return tokenizeCss(source);\n return tokenizeJavaScript(source);\n}\n\nfunction expandMustache(value) {\n const out = [{ type: 'meta', value: '{{' }];\n let inner = value.slice(2);\n let close = '';\n if (value.length >= 4 && inner.endsWith('}}')) {\n close = '}}';\n inner = inner.slice(0, -2);\n }\n if (inner) {\n const parts = tokenizeJavaScript(inner);\n for (let i = 0; i < parts.length; i++) out.push(parts[i]);\n }\n if (close) out.push({ type: 'meta', value: close });\n return out;\n}\n\nfunction makeMarkupRules(vue) {\n const expand = (value) => expandTag(value, vue);\n const rules = [\n { type: 'comment', re: /<!--[\\s\\S]*?-->/y },\n { type: 'meta', re: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/y },\n { type: 'meta', re: /<!DOCTYPE[^>]*>/iy },\n {\n expand,\n re: /<\\/?[a-zA-Z][\\w:-]*(?:\\s+[^\\s/>\"'=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?)*\\s*\\/?>/y,\n },\n { expand, re: /<\\/?[a-zA-Z][\\w:-]*/y },\n { type: 'meta', re: /&[a-zA-Z][a-zA-Z0-9]*;|&#\\d+;|&#x[0-9a-fA-F]+;/y },\n ];\n if (vue) {\n rules.splice(1, 0, { expand: expandMustache, re: /\\{\\{[\\s\\S]*?(?:\\}\\}|$)/y });\n }\n return rules;\n}\n\nconst HTML_RULES = makeMarkupRules(false);\nconst VUE_RULES = makeMarkupRules(true);\n\n/**\n * Tokenize HTML or a Vue SFC. `vue: true` enables mustache + directive `meta`.\n */\nexport function tokenizeMarkup(source, options) {\n const vue = !!(options && options.vue);\n const rules = vue ? VUE_RULES : HTML_RULES;\n const tokens = [];\n const n = source.length;\n let i = 0;\n let plainStart = -1;\n\n const flushPlain = (end) => {\n if (plainStart !== -1 && end > plainStart) {\n tokens.push({ type: 'plain', value: source.slice(plainStart, end) });\n }\n plainStart = -1;\n };\n\n while (i < n) {\n const hit = matchRule(source, i, rules);\n if (hit) {\n flushPlain(i);\n const embed = embedInfo(hit.value);\n if (embed) {\n for (let k = 0; k < hit.tokens.length; k++) tokens.push(hit.tokens[k]);\n i += hit.length;\n const close = findCloseTag(source, i, embed.tag);\n const bodyEnd = close ? close.start : n;\n const body = source.slice(i, bodyEnd);\n if (body) {\n const inner = tokenizeEmbed(body, embed.lang);\n for (let k = 0; k < inner.length; k++) tokens.push(inner[k]);\n }\n if (close) {\n const closeTokens = expandTag(source.slice(close.start, close.end), vue);\n for (let k = 0; k < closeTokens.length; k++) tokens.push(closeTokens[k]);\n i = close.end;\n } else {\n i = n;\n }\n continue;\n }\n for (let k = 0; k < hit.tokens.length; k++) tokens.push(hit.tokens[k]);\n i += hit.length;\n } else {\n if (plainStart === -1) plainStart = i;\n i++;\n }\n }\n flushPlain(n);\n return coalesce(tokens);\n}\n\nexport function tokenizeHtml(source) {\n return tokenizeMarkup(source, { vue: false });\n}\n\nexport function tokenizeVue(source) {\n return tokenizeMarkup(source, { vue: true });\n}\n", "// JSON tokenizer. Object keys (a string immediately before a colon) color as\n// `property`; all other strings as `string`.\n\nimport { scan } from './scanner.js';\n\nconst RULES = [\n { type: 'property', re: /\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/y },\n { type: 'string', re: /\"(?:[^\"\\\\]|\\\\.)*\"?/y },\n { type: 'number', re: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y },\n { type: 'boolean', re: /\\b(?:true|false)\\b/y },\n { type: 'null', re: /\\bnull\\b/y },\n { type: 'punctuation', re: /[{}[\\]:,]/y },\n];\n\nexport function tokenizeJson(source) {\n return scan(source, RULES);\n}\n", "// Markdown tokenizer. Line-oriented constructs use the `m` (multiline) + `y`\n// (sticky) flags together, so an anchored `^` rule only fires at a line start.\n\nimport { scan } from './scanner.js';\n\nconst RULES = [\n { type: 'string', re: /```[\\s\\S]*?```|~~~[\\s\\S]*?~~~|`[^`\\n]*`/y },\n { type: 'keyword', re: /^ {0,3}#{1,6} [^\\n]*/my },\n { type: 'comment', re: /^ {0,3}>[^\\n]*/my },\n { type: 'punctuation', re: /^ {0,3}(?:[-*+]|\\d+\\.)\\s/my },\n { type: 'meta', re: /^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/my },\n { type: 'function', re: /!?\\[[^\\][\\n]*\\]\\([^()\\n]*\\)/y },\n { type: 'operator', re: /\\*\\*[^\\n]*?\\*\\*|__[^\\n]*?__/y },\n { type: 'meta', re: /\\*[^*\\n]+?\\*|_[^_\\n]+?_/y },\n];\n\nexport function tokenizeMarkdown(source) {\n return scan(source, RULES);\n}\n", "// Shell / Bash tokenizer. Variables (`$VAR`, `${...}`) are matched before the\n// `#` comment rule can fire, so `${#arr}` stays a variable.\n\nimport { scan, wordRegex } from './scanner.js';\n\nconst KEYWORDS = [\n 'if',\n 'then',\n 'elif',\n 'else',\n 'fi',\n 'for',\n 'while',\n 'until',\n 'do',\n 'done',\n 'case',\n 'esac',\n 'function',\n 'in',\n 'select',\n 'return',\n 'break',\n 'continue',\n 'local',\n 'export',\n 'readonly',\n 'declare',\n 'typeset',\n 'set',\n 'unset',\n 'shift',\n 'exit',\n 'source',\n 'alias',\n];\n\nconst BUILTINS = [\n 'echo',\n 'printf',\n 'read',\n 'cd',\n 'pwd',\n 'ls',\n 'cat',\n 'grep',\n 'sed',\n 'awk',\n 'cut',\n 'sort',\n 'uniq',\n 'head',\n 'tail',\n 'find',\n 'xargs',\n 'curl',\n 'wget',\n 'git',\n 'npm',\n 'pnpm',\n 'yarn',\n 'node',\n 'python',\n 'pip',\n 'docker',\n 'kubectl',\n 'make',\n 'chmod',\n 'chown',\n 'mkdir',\n 'rmdir',\n 'rm',\n 'cp',\n 'mv',\n 'touch',\n 'test',\n 'sudo',\n 'env',\n 'which',\n 'kill',\n 'ps',\n 'tar',\n 'ssh',\n];\n\nconst RULES = [\n { type: 'comment', re: /#[^\\n]*/y },\n { type: 'string', re: /\"(?:[^\"\\\\]|\\\\.)*\"?/y },\n { type: 'string', re: /'[^']*'?/y },\n { type: 'variable', re: /\\$\\{[^}\\n]*\\}?|\\$[A-Za-z_]\\w*|\\$[@*#?$!0-9-]/y },\n { type: 'keyword', re: wordRegex(KEYWORDS) },\n { type: 'builtin', re: wordRegex(BUILTINS) },\n { type: 'attribute', re: /(?:^|\\s)-{1,2}[A-Za-z][\\w-]*/y },\n { type: 'number', re: /\\b\\d+\\b/y },\n { type: 'operator', re: /\\|\\||&&|[|&;<>]+/y },\n { type: 'punctuation', re: /[(){}[\\]]/y },\n];\n\nexport function tokenizeShell(source) {\n return scan(source, RULES);\n}\n", "// Python tokenizer. Triple-quoted and prefixed (r/b/f/u) strings are matched as\n// whole strings; f-string interpolation is not sub-highlighted in v1.\n\nimport { scan, wordRegex } from './scanner.js';\n\nconst KEYWORDS = [\n 'def',\n 'class',\n 'return',\n 'if',\n 'elif',\n 'else',\n 'for',\n 'while',\n 'break',\n 'continue',\n 'pass',\n 'import',\n 'from',\n 'as',\n 'with',\n 'try',\n 'except',\n 'finally',\n 'raise',\n 'yield',\n 'lambda',\n 'global',\n 'nonlocal',\n 'del',\n 'assert',\n 'async',\n 'await',\n 'in',\n 'is',\n 'not',\n 'and',\n 'or',\n 'match',\n 'case',\n];\n\nconst BUILTINS = [\n 'print',\n 'len',\n 'range',\n 'int',\n 'float',\n 'str',\n 'list',\n 'dict',\n 'set',\n 'tuple',\n 'bool',\n 'bytes',\n 'type',\n 'isinstance',\n 'issubclass',\n 'super',\n 'open',\n 'enumerate',\n 'zip',\n 'map',\n 'filter',\n 'sorted',\n 'reversed',\n 'sum',\n 'min',\n 'max',\n 'abs',\n 'round',\n 'input',\n 'repr',\n 'format',\n 'object',\n 'self',\n 'cls',\n 'Exception',\n 'ValueError',\n 'TypeError',\n 'KeyError',\n 'IndexError',\n 'AttributeError',\n 'RuntimeError',\n];\n\nconst RULES = [\n { type: 'comment', re: /#[^\\n]*/y },\n {\n type: 'string',\n re: /[rRbBfFuU]{0,2}(?:\"\"\"[\\s\\S]*?\"\"\"|'''[\\s\\S]*?'''|\"(?:[^\"\\\\\\n]|\\\\.)*\"?|'(?:[^'\\\\\\n]|\\\\.)*'?)/y,\n },\n { type: 'meta', re: /@[A-Za-z_]\\w*/y },\n { type: 'keyword', re: wordRegex(KEYWORDS) },\n { type: 'boolean', re: /\\b(?:True|False)\\b/y },\n { type: 'null', re: /\\bNone\\b/y },\n { type: 'builtin', re: wordRegex(BUILTINS) },\n { type: 'function', re: /[A-Za-z_]\\w*(?=\\s*\\()/y },\n {\n type: 'number',\n re: /\\b0[xXoObB][0-9a-fA-F_]+\\b|\\b\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?[jJ]?\\b/y,\n },\n { type: 'operator', re: /:=|[+\\-*/%=<>!&|^~@]+/y },\n { type: 'punctuation', re: /[()[\\]{}:;,.]/y },\n // Catch-all: consume an identifier run (or whitespace) in one match so the\n // greedy function look-ahead rule runs once per run, not once per character.\n { type: 'plain', re: /\\w+|\\s+/y },\n];\n\nexport function tokenizePython(source) {\n return scan(source, RULES);\n}\n", "// Tokenizer registry + the public `tokenize()` entry point.\n//\n// Each language module is a pure `(source) => Token[]` function built on the\n// shared linear scanner. `tokenize()` resolves aliases, dispatches to the right\n// tokenizer, and falls back to a single `plain` token for unknown languages \u2014\n// it never throws.\n\nimport { tokenizeJavaScript, tokenizeTypeScript } from './javascript.js';\nimport { tokenizeHtml, tokenizeVue } from './html.js';\nimport { tokenizeCss } from './css.js';\nimport { tokenizeJson } from './json.js';\nimport { tokenizeMarkdown } from './markdown.js';\nimport { tokenizeShell } from './shell.js';\nimport { tokenizePython } from './python.js';\n\nconst TOKENIZERS = {\n javascript: tokenizeJavaScript,\n typescript: tokenizeTypeScript,\n html: tokenizeHtml,\n vue: tokenizeVue,\n css: tokenizeCss,\n json: tokenizeJson,\n markdown: tokenizeMarkdown,\n shell: tokenizeShell,\n python: tokenizePython,\n};\n\n/** Canonical language ids the editor understands (`plaintext` = no highlight). */\nexport const LANGUAGES = Object.freeze([\n 'plaintext',\n 'javascript',\n 'typescript',\n 'html',\n 'vue',\n 'css',\n 'json',\n 'markdown',\n 'shell',\n 'python',\n]);\n\n/** Common aliases mapped to canonical ids.\n * `jsx` / `tsx` / `jsonc` are JS / TS / JSON fallbacks \u2014 not real grammars. */\nexport const ALIASES = Object.freeze({\n js: 'javascript',\n jsx: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n htm: 'html',\n xml: 'html',\n svg: 'html',\n sh: 'shell',\n bash: 'shell',\n zsh: 'shell',\n shellscript: 'shell',\n py: 'python',\n python3: 'python',\n md: 'markdown',\n mkd: 'markdown',\n json5: 'json',\n jsonc: 'json',\n text: 'plaintext',\n txt: 'plaintext',\n plain: 'plaintext',\n});\n\n/** Resolve a language id or alias to its canonical id. */\nexport function resolveLanguage(language) {\n const id = String(language || 'plaintext').toLowerCase();\n return ALIASES[id] || id;\n}\n\n/** The tokenizer function for a language, or `null` when none is registered. */\nexport function getTokenizer(language) {\n return TOKENIZERS[resolveLanguage(language)] || null;\n}\n\n/**\n * Tokenize `source` for `language`. Returns `{ type, value }[]`; the token\n * values always concatenate back to `source` exactly (lossless).\n */\nexport function tokenize(source, language) {\n if (!source) return [];\n const tokenizer = getTokenizer(language);\n if (!tokenizer) return [{ type: 'plain', value: source }];\n return tokenizer(source);\n}\n"],
5
+ "mappings": "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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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",
6
+ "names": ["RULES", "RULES", "BUILTINS", "RULES", "KEYWORDS", "BUILTINS", "RULES"]
7
+ }
@@ -0,0 +1,6 @@
1
+ // Hand-written declarations for the tokenizer-only
2
+ // `@vanduo-oss/vd3-cbun/code-editor/highlight` entry. Types are shared with
3
+ // the editor core; this file MUST NOT pull in Vue wrapper types.
4
+
5
+ export { tokenize, highlight, renderTokensToHtml, LANGUAGES } from './core';
6
+ export type { CodeEditorLanguage, TokenType, Token, HighlightOptions } from './core';