@k2b/ui 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/ViewTabs.js +8 -0
  3. package/dist/browser/actions/ViewTabs.js.map +1 -1
  4. package/dist/browser/content/Chart.js +104 -55
  5. package/dist/browser/content/Chart.js.map +1 -1
  6. package/dist/browser/content/ChartExplorer.js +5 -3
  7. package/dist/browser/content/ChartExplorer.js.map +1 -1
  8. package/dist/browser/content/MapView.js +4 -4
  9. package/dist/browser/content/MapView.js.map +1 -1
  10. package/dist/browser/content/chart-inspection-core.js +4 -1
  11. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  12. package/dist/browser/content/code-highlight.js +66 -0
  13. package/dist/browser/content/code-highlight.js.map +1 -1
  14. package/dist/browser/content/index.js +1 -0
  15. package/dist/browser/content/index.js.map +1 -1
  16. package/dist/browser/content/map-view-live.js +47 -10
  17. package/dist/browser/content/map-view-live.js.map +1 -1
  18. package/dist/browser/content/map-view-types.js.map +1 -1
  19. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  20. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  21. package/dist/browser/inputs/RichSelect.js +1474 -0
  22. package/dist/browser/inputs/RichSelect.js.map +1 -0
  23. package/dist/browser/inputs/TextInput.js +95 -60
  24. package/dist/browser/inputs/TextInput.js.map +1 -1
  25. package/dist/browser/inputs/choice.js +19 -8
  26. package/dist/browser/inputs/choice.js.map +1 -1
  27. package/dist/browser/inputs/index.js +1 -0
  28. package/dist/browser/inputs/index.js.map +1 -1
  29. package/dist/browser/inputs/rich-select-messages.js +46 -0
  30. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  31. package/dist/browser/layout/AppWorkspace.js +177 -135
  32. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  33. package/dist/browser/layout/DetailPanel.js +10 -1
  34. package/dist/browser/layout/DetailPanel.js.map +1 -1
  35. package/dist/browser/layout/Navigation.js +14 -5
  36. package/dist/browser/layout/Navigation.js.map +1 -1
  37. package/dist/browser/layout/PageTitle.js +9 -3
  38. package/dist/browser/layout/PageTitle.js.map +1 -1
  39. package/dist/browser/layout/ResizeSeparator.js +8 -2
  40. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  41. package/dist/browser/layout/app-workspace-controller.js +192 -31
  42. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  43. package/dist/browser/layout/navigation-model.js.map +1 -1
  44. package/dist/browser/layout/resize-separator.js +25 -1
  45. package/dist/browser/layout/resize-separator.js.map +1 -1
  46. package/dist/browser/surfaces/Skeleton.js +14 -0
  47. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  48. package/dist/browser/surfaces/index.js +1 -0
  49. package/dist/browser/surfaces/index.js.map +1 -1
  50. package/dist/ssr/actions/ViewTabs.js +8 -0
  51. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  52. package/dist/ssr/content/Chart.js +27 -7
  53. package/dist/ssr/content/Chart.js.map +1 -1
  54. package/dist/ssr/content/ChartExplorer.js +5 -3
  55. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  56. package/dist/ssr/content/MapView.js +4 -4
  57. package/dist/ssr/content/MapView.js.map +1 -1
  58. package/dist/ssr/content/chart-inspection-core.js +4 -1
  59. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  60. package/dist/ssr/content/code-highlight.js +66 -0
  61. package/dist/ssr/content/code-highlight.js.map +1 -1
  62. package/dist/ssr/content/index.js +1 -0
  63. package/dist/ssr/content/index.js.map +1 -1
  64. package/dist/ssr/content/map-view-types.js.map +1 -1
  65. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  66. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  67. package/dist/ssr/inputs/RichSelect.js +950 -0
  68. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  69. package/dist/ssr/inputs/TextInput.js +40 -16
  70. package/dist/ssr/inputs/TextInput.js.map +1 -1
  71. package/dist/ssr/inputs/choice.js +19 -8
  72. package/dist/ssr/inputs/choice.js.map +1 -1
  73. package/dist/ssr/inputs/index.js +1 -0
  74. package/dist/ssr/inputs/index.js.map +1 -1
  75. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  76. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  77. package/dist/ssr/layout/AppWorkspace.js +36 -7
  78. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  79. package/dist/ssr/layout/DetailPanel.js +1 -1
  80. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  81. package/dist/ssr/layout/Navigation.js +1 -1
  82. package/dist/ssr/layout/Navigation.js.map +1 -1
  83. package/dist/ssr/layout/PageTitle.js +9 -3
  84. package/dist/ssr/layout/PageTitle.js.map +1 -1
  85. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  86. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  87. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  88. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  89. package/dist/ssr/layout/navigation-model.js.map +1 -1
  90. package/dist/ssr/layout/resize-separator.js +25 -1
  91. package/dist/ssr/layout/resize-separator.js.map +1 -1
  92. package/dist/ssr/surfaces/Skeleton.js +8 -0
  93. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  94. package/dist/ssr/surfaces/index.js +1 -0
  95. package/dist/ssr/surfaces/index.js.map +1 -1
  96. package/dist/styles.css +1 -1
  97. package/dist/types/content/Chart.d.ts +4 -2
  98. package/dist/types/content/ChartExplorer.d.ts +0 -1
  99. package/dist/types/content/code-highlight.d.ts +3 -1
  100. package/dist/types/content/index.d.ts +1 -0
  101. package/dist/types/content/map-view-live.d.ts +1 -1
  102. package/dist/types/content/map-view-types.d.ts +2 -0
  103. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  104. package/dist/types/inputs/RichSelect.d.ts +93 -0
  105. package/dist/types/inputs/TextInput.d.ts +5 -2
  106. package/dist/types/inputs/choice.d.ts +24 -4
  107. package/dist/types/inputs/index.d.ts +2 -0
  108. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  109. package/dist/types/layout/AppWorkspace.d.ts +7 -0
  110. package/dist/types/layout/DetailPanel.d.ts +2 -0
  111. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  112. package/dist/types/layout/navigation-model.d.ts +2 -0
  113. package/dist/types/layout/resize-separator.d.ts +1 -0
  114. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  115. package/dist/types/surfaces/index.d.ts +1 -0
  116. package/package.json +4 -4
@@ -114,6 +114,7 @@ const highlightMarkdownInline = escaped => escaped.replace(/(`)([^`\n]+?)(`)/g,
114
114
  export const highlightMarkdownDisplay = code => code.split("\n").map(highlightMarkdownLine).join("\n");
115
115
  export const highlightCodeDisplayLines = (code, language = "text") => {
116
116
  const lines = code.split("\n");
117
+ if (language === "sql") return highlightSql(code).split("\n");
117
118
  if (language === "text") return lines.map(line => escapeCodeHtml(line || " "));
118
119
  if (language === "markdown" || language === "md") {
119
120
  let fencedLanguage;
@@ -136,9 +137,74 @@ export const highlightCodeDisplayLines = (code, language = "text") => {
136
137
  return lines.map(line => highlightCode(line || " "));
137
138
  };
138
139
  export const highlightCodeDisplay = (code, language = "text") => {
140
+ if (language === "sql") return highlightSql(code);
139
141
  if (code.includes("\n")) return highlightCodeDisplayLines(code, language).join("\n");
140
142
  if (language === "markdown" || language === "md") return highlightMarkdownDisplay(code);
141
143
  if (language === "text") return escapeCodeHtml(code);
142
144
  return highlightCode(code);
143
145
  };
146
+ const SQL_KEYWORDS = new Set("SELECT WITH FROM WHERE AS AND OR NOT NULL IS IN BETWEEN LIKE ILIKE JOIN LEFT RIGHT INNER OUTER CROSS ON USING UNION ALL DISTINCT GROUP BY HAVING ORDER ASC DESC LIMIT OFFSET CASE WHEN THEN ELSE END OVER PARTITION ROWS RANGE INTERVAL TRUE FALSE SETTINGS FORMAT".split(" "));
147
+
148
+ /** Display-only, tolerant of incomplete SQL while typing. Source is always escaped. */
149
+ export const highlightSql = code => {
150
+ // CodeDisplay puts each returned line into its own <code> element.
151
+ const token = (kind, raw) => raw.split("\n").map(line => wrap(kind, line)).join("\n");
152
+ let out = "",
153
+ i = 0;
154
+ while (i < code.length) {
155
+ const start = i,
156
+ c = code[i];
157
+ if (code.startsWith("--", i)) {
158
+ const end = code.indexOf("\n", i);
159
+ i = end < 0 ? code.length : end;
160
+ out += token("cd-c", code.slice(start, i));
161
+ } else if (code.startsWith("/*", i)) {
162
+ i += 2;
163
+ let depth = 1;
164
+ while (i < code.length && depth) {
165
+ if (code.startsWith("/*", i)) {
166
+ depth++;
167
+ i += 2;
168
+ } else if (code.startsWith("*/", i)) {
169
+ depth--;
170
+ i += 2;
171
+ } else i++;
172
+ }
173
+ out += token("cd-c", code.slice(start, i));
174
+ } else if (c === "'" || c === '"' || c === "`") {
175
+ i++;
176
+ while (i < code.length) {
177
+ if (code[i] === "\\") {
178
+ i = Math.min(code.length, i + 2);
179
+ continue;
180
+ }
181
+ if (code[i++] === c) {
182
+ if (code[i] === c) {
183
+ i++;
184
+ continue;
185
+ }
186
+ break;
187
+ }
188
+ }
189
+ out += token(c === "'" ? "cd-s" : "cd-p", code.slice(start, i));
190
+ } else if (c === ":" && code[i - 1] !== ":" && !/[A-Za-z0-9_]/.test(code[i - 1] ?? "") && /[A-Za-z_]/.test(code[i + 1] ?? "")) {
191
+ i += 2;
192
+ while (/[A-Za-z0-9_]/.test(code[i] ?? "")) i++;
193
+ out += token("cd-a cd-param", code.slice(start, i));
194
+ } else if (/[A-Za-z_]/.test(c)) {
195
+ i++;
196
+ while (/[A-Za-z0-9_]/.test(code[i] ?? "")) i++;
197
+ const word = code.slice(start, i);
198
+ out += SQL_KEYWORDS.has(word.toUpperCase()) ? token("cd-k", word) : escapeCodeHtml(word);
199
+ } else if (isDigit(c)) {
200
+ i++;
201
+ while (/[0-9.]/.test(code[i] ?? "")) i++;
202
+ out += token("cd-n", code.slice(start, i));
203
+ } else {
204
+ out += escapeCodeHtml(c);
205
+ i++;
206
+ }
207
+ }
208
+ return out;
209
+ };
144
210
  //# sourceMappingURL=code-highlight.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/code-highlight.ts"],"sourcesContent":["/**\n * Small safe highlighters for CodeDisplay.\n *\n * These are display-only highlighters: no AST, no runtime parser, no\n * dependency. Every input character is HTML-escaped before being wrapped\n * in token spans, so the returned strings are safe to inject with\n * `innerHTML`.\n */\n\nconst KEYWORDS = new Set([\n \"const\",\n \"let\",\n \"var\",\n \"function\",\n \"return\",\n \"if\",\n \"else\",\n \"for\",\n \"while\",\n \"import\",\n \"from\",\n \"export\",\n \"default\",\n \"async\",\n \"await\",\n \"new\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"as\",\n \"type\",\n \"interface\",\n \"void\",\n \"this\",\n \"typeof\",\n \"in\",\n \"of\",\n]);\n\nexport type CodeDisplayLanguage = \"ts\" | \"tsx\" | \"js\" | \"jsx\" | \"script\" | \"markdown\" | \"md\" | \"text\";\n\nexport const escapeCodeHtml = (s: string): string => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst isIdStart = (c: string): boolean => /[A-Za-z_$]/.test(c);\nconst isIdCont = (c: string): boolean => /[\\w$]/.test(c);\nconst isDigit = (c: string): boolean => /[0-9]/.test(c);\nconst wrap = (cls: string, raw: string): string => `<span class=\"${cls}\">${escapeCodeHtml(raw)}</span>`;\nconst isCodeLanguage = (language: string | undefined): boolean =>\n language === \"script\" || language === \"js\" || language === \"jsx\" || language === \"ts\" || language === \"tsx\";\n\nexport const highlightCode = (code: string): string => {\n let out = \"\";\n let i = 0;\n const n = code.length;\n\n while (i < n) {\n const c = code[i]!;\n\n if (c === \"/\" && code[i + 1] === \"/\") {\n const nl = code.indexOf(\"\\n\", i);\n const end = nl === -1 ? n : nl;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === \"/\" && code[i + 1] === \"*\") {\n const close = code.indexOf(\"*/\", i + 2);\n const end = close === -1 ? n : close + 2;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n const quote = c;\n let j = i + 1;\n while (j < n) {\n if (code[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (code[j] === quote) {\n j++;\n break;\n }\n j++;\n }\n out += wrap(\"cd-s\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isDigit(c)) {\n let j = i;\n while (j < n && (isDigit(code[j]!) || code[j] === \".\")) j++;\n out += wrap(\"cd-n\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isIdStart(c)) {\n let j = i;\n while (j < n && isIdCont(code[j]!)) j++;\n const word = code.slice(i, j);\n let cls = \"\";\n if (KEYWORDS.has(word)) cls = \"cd-k\";\n else if (/^[A-Z]/.test(word)) cls = \"cd-p\";\n else {\n let k = j;\n while (k < n && code[k] === \" \") k++;\n const next = code[k];\n const prev = i > 0 ? code[i - 1] : \"\";\n const assignment = next === \"=\" && code[k + 1] !== \"=\" && code[k + 1] !== \">\";\n const objectKey = next === \":\";\n const functionCall = next === \"(\";\n const property = prev === \".\";\n if (assignment || objectKey) cls = \"cd-a\";\n else if (functionCall || property) cls = \"cd-f\";\n }\n out += cls ? wrap(cls, word) : escapeCodeHtml(word);\n i = j;\n continue;\n }\n\n out += escapeCodeHtml(c);\n i++;\n }\n\n return out;\n};\n\nconst highlightMarkdownLine = (line: string): string => {\n const escaped = escapeCodeHtml(line);\n\n const heading = /^(#{1,6})(\\s.*)$/.exec(escaped);\n if (heading) return `<span class=\"cd-md-syntax\">${heading[1]}</span>${highlightMarkdownInline(heading[2] ?? \"\")}`;\n\n const ref = /^(@[A-Za-z][\\w-]*)$/.exec(escaped);\n if (ref) return `<span class=\"cd-md-ref\">${ref[1]}</span>`;\n\n const directive = /^(\\s*:::)([A-Za-z][\\w-]*)?(.*)$/.exec(escaped);\n if (directive) {\n const name = directive[2] ? `<span class=\"cd-md-directive\">${directive[2]}</span>` : \"\";\n return `${directive[1] ? `<span class=\"cd-md-syntax\">${directive[1]}</span>` : \"\"}${name}${highlightMarkdownInline(directive[3] ?? \"\")}`;\n }\n\n const fence = /^(```)(.*)$/.exec(escaped);\n if (fence) {\n const language = fence[2] ? `<span class=\"cd-md-ref\">${fence[2]}</span>` : \"\";\n return `<span class=\"cd-md-syntax\">${fence[1]}</span>${language}`;\n }\n\n const table = /^(\\s*\\|)(.*)(\\|\\s*)$/.exec(escaped);\n if (table) return `<span class=\"cd-md-syntax\">${table[1]}</span>${table[2]}<span class=\"cd-md-syntax\">${table[3]}</span>`;\n\n const task = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(\\[[ xX]\\])(\\s+.*)$/.exec(escaped);\n if (task) {\n return `<span class=\"cd-md-syntax\">${task[1]}</span><span class=\"cd-md-checkbox\">${task[2]}</span>${highlightMarkdownInline(task[3] ?? \"\")}`;\n }\n\n const list = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(.*)$/.exec(escaped);\n if (list) return `<span class=\"cd-md-syntax\">${list[1]}</span>${highlightMarkdownInline(list[2] ?? \"\")}`;\n\n return highlightMarkdownInline(escaped);\n};\n\nconst highlightMarkdownInline = (escaped: string): string =>\n escaped\n .replace(\n /(`)([^`\\n]+?)(`)/g,\n '<span class=\"cd-md-syntax\">$1</span><span class=\"cd-md-code\">$2</span><span class=\"cd-md-syntax\">$3</span>',\n )\n .replace(/(\\*\\*)([^*\\n]+?)(\\*\\*)/g, '<span class=\"cd-md-syntax\">$1</span>$2<span class=\"cd-md-syntax\">$3</span>')\n .replace(/(\\[[^\\]\\n]+?\\])(\\([^)]+\\))/g, '<span class=\"cd-md-link\">$1</span><span class=\"cd-md-syntax\">$2</span>')\n .replace(/(^|\\s)(@[A-Za-z][\\w-]*)/g, '$1<span class=\"cd-md-ref\">$2</span>')\n .replace(/(#[A-Za-z][\\w/-]*)/g, '<span class=\"cd-md-tag\">$1</span>')\n .replace(/(=[A-Z][A-Z0-9_]*\\([^)\\n]*\\))/g, '<span class=\"cd-md-formula\">$1</span>');\n\nexport const highlightMarkdownDisplay = (code: string): string => code.split(\"\\n\").map(highlightMarkdownLine).join(\"\\n\");\n\nexport const highlightCodeDisplayLines = (code: string, language: CodeDisplayLanguage = \"text\"): string[] => {\n const lines = code.split(\"\\n\");\n\n if (language === \"text\") return lines.map((line) => escapeCodeHtml(line || \" \"));\n\n if (language === \"markdown\" || language === \"md\") {\n let fencedLanguage: string | undefined;\n return lines.map((line) => {\n const fence = /^(```)(\\w+)?(.*)$/.exec(line);\n if (fence) {\n const highlightedFence = highlightMarkdownLine(line);\n fencedLanguage = fencedLanguage ? undefined : fence[2];\n return highlightedFence;\n }\n return isCodeLanguage(fencedLanguage) ? highlightCode(line || \" \") : highlightMarkdownLine(line || \" \");\n });\n }\n\n if (lines.length >= 2 && /^```\\w+/.test(lines[0] ?? \"\") && /^```\\s*$/.test(lines[lines.length - 1] ?? \"\")) {\n return lines.map((line, index) => {\n if (index === 0 || index === lines.length - 1) return highlightMarkdownLine(line || \" \");\n return highlightCode(line || \" \");\n });\n }\n\n return lines.map((line) => highlightCode(line || \" \"));\n};\n\nexport const highlightCodeDisplay = (code: string, language: CodeDisplayLanguage = \"text\"): string => {\n if (code.includes(\"\\n\")) return highlightCodeDisplayLines(code, language).join(\"\\n\");\n if (language === \"markdown\" || language === \"md\") return highlightMarkdownDisplay(code);\n if (language === \"text\") return escapeCodeHtml(code);\n return highlightCode(code);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/code-highlight.ts"],"sourcesContent":["/**\n * Small safe highlighters for CodeDisplay.\n *\n * These are display-only highlighters: no AST, no runtime parser, no\n * dependency. Every input character is HTML-escaped before being wrapped\n * in token spans, so the returned strings are safe to inject with\n * `innerHTML`.\n */\n\nconst KEYWORDS = new Set([\n \"const\",\n \"let\",\n \"var\",\n \"function\",\n \"return\",\n \"if\",\n \"else\",\n \"for\",\n \"while\",\n \"import\",\n \"from\",\n \"export\",\n \"default\",\n \"async\",\n \"await\",\n \"new\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"as\",\n \"type\",\n \"interface\",\n \"void\",\n \"this\",\n \"typeof\",\n \"in\",\n \"of\",\n]);\n\nexport type CodeDisplayLanguage = \"ts\" | \"tsx\" | \"js\" | \"jsx\" | \"script\" | \"markdown\" | \"md\" | \"text\" | \"sql\";\n\nexport const escapeCodeHtml = (s: string): string => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst isIdStart = (c: string): boolean => /[A-Za-z_$]/.test(c);\nconst isIdCont = (c: string): boolean => /[\\w$]/.test(c);\nconst isDigit = (c: string): boolean => /[0-9]/.test(c);\nconst wrap = (cls: string, raw: string): string => `<span class=\"${cls}\">${escapeCodeHtml(raw)}</span>`;\nconst isCodeLanguage = (language: string | undefined): boolean =>\n language === \"script\" || language === \"js\" || language === \"jsx\" || language === \"ts\" || language === \"tsx\";\n\nexport const highlightCode = (code: string): string => {\n let out = \"\";\n let i = 0;\n const n = code.length;\n\n while (i < n) {\n const c = code[i]!;\n\n if (c === \"/\" && code[i + 1] === \"/\") {\n const nl = code.indexOf(\"\\n\", i);\n const end = nl === -1 ? n : nl;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === \"/\" && code[i + 1] === \"*\") {\n const close = code.indexOf(\"*/\", i + 2);\n const end = close === -1 ? n : close + 2;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n const quote = c;\n let j = i + 1;\n while (j < n) {\n if (code[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (code[j] === quote) {\n j++;\n break;\n }\n j++;\n }\n out += wrap(\"cd-s\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isDigit(c)) {\n let j = i;\n while (j < n && (isDigit(code[j]!) || code[j] === \".\")) j++;\n out += wrap(\"cd-n\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isIdStart(c)) {\n let j = i;\n while (j < n && isIdCont(code[j]!)) j++;\n const word = code.slice(i, j);\n let cls = \"\";\n if (KEYWORDS.has(word)) cls = \"cd-k\";\n else if (/^[A-Z]/.test(word)) cls = \"cd-p\";\n else {\n let k = j;\n while (k < n && code[k] === \" \") k++;\n const next = code[k];\n const prev = i > 0 ? code[i - 1] : \"\";\n const assignment = next === \"=\" && code[k + 1] !== \"=\" && code[k + 1] !== \">\";\n const objectKey = next === \":\";\n const functionCall = next === \"(\";\n const property = prev === \".\";\n if (assignment || objectKey) cls = \"cd-a\";\n else if (functionCall || property) cls = \"cd-f\";\n }\n out += cls ? wrap(cls, word) : escapeCodeHtml(word);\n i = j;\n continue;\n }\n\n out += escapeCodeHtml(c);\n i++;\n }\n\n return out;\n};\n\nconst highlightMarkdownLine = (line: string): string => {\n const escaped = escapeCodeHtml(line);\n\n const heading = /^(#{1,6})(\\s.*)$/.exec(escaped);\n if (heading) return `<span class=\"cd-md-syntax\">${heading[1]}</span>${highlightMarkdownInline(heading[2] ?? \"\")}`;\n\n const ref = /^(@[A-Za-z][\\w-]*)$/.exec(escaped);\n if (ref) return `<span class=\"cd-md-ref\">${ref[1]}</span>`;\n\n const directive = /^(\\s*:::)([A-Za-z][\\w-]*)?(.*)$/.exec(escaped);\n if (directive) {\n const name = directive[2] ? `<span class=\"cd-md-directive\">${directive[2]}</span>` : \"\";\n return `${directive[1] ? `<span class=\"cd-md-syntax\">${directive[1]}</span>` : \"\"}${name}${highlightMarkdownInline(directive[3] ?? \"\")}`;\n }\n\n const fence = /^(```)(.*)$/.exec(escaped);\n if (fence) {\n const language = fence[2] ? `<span class=\"cd-md-ref\">${fence[2]}</span>` : \"\";\n return `<span class=\"cd-md-syntax\">${fence[1]}</span>${language}`;\n }\n\n const table = /^(\\s*\\|)(.*)(\\|\\s*)$/.exec(escaped);\n if (table) return `<span class=\"cd-md-syntax\">${table[1]}</span>${table[2]}<span class=\"cd-md-syntax\">${table[3]}</span>`;\n\n const task = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(\\[[ xX]\\])(\\s+.*)$/.exec(escaped);\n if (task) {\n return `<span class=\"cd-md-syntax\">${task[1]}</span><span class=\"cd-md-checkbox\">${task[2]}</span>${highlightMarkdownInline(task[3] ?? \"\")}`;\n }\n\n const list = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(.*)$/.exec(escaped);\n if (list) return `<span class=\"cd-md-syntax\">${list[1]}</span>${highlightMarkdownInline(list[2] ?? \"\")}`;\n\n return highlightMarkdownInline(escaped);\n};\n\nconst highlightMarkdownInline = (escaped: string): string =>\n escaped\n .replace(\n /(`)([^`\\n]+?)(`)/g,\n '<span class=\"cd-md-syntax\">$1</span><span class=\"cd-md-code\">$2</span><span class=\"cd-md-syntax\">$3</span>',\n )\n .replace(/(\\*\\*)([^*\\n]+?)(\\*\\*)/g, '<span class=\"cd-md-syntax\">$1</span>$2<span class=\"cd-md-syntax\">$3</span>')\n .replace(/(\\[[^\\]\\n]+?\\])(\\([^)]+\\))/g, '<span class=\"cd-md-link\">$1</span><span class=\"cd-md-syntax\">$2</span>')\n .replace(/(^|\\s)(@[A-Za-z][\\w-]*)/g, '$1<span class=\"cd-md-ref\">$2</span>')\n .replace(/(#[A-Za-z][\\w/-]*)/g, '<span class=\"cd-md-tag\">$1</span>')\n .replace(/(=[A-Z][A-Z0-9_]*\\([^)\\n]*\\))/g, '<span class=\"cd-md-formula\">$1</span>');\n\nexport const highlightMarkdownDisplay = (code: string): string => code.split(\"\\n\").map(highlightMarkdownLine).join(\"\\n\");\n\nexport const highlightCodeDisplayLines = (code: string, language: CodeDisplayLanguage = \"text\"): string[] => {\n const lines = code.split(\"\\n\");\n if (language === \"sql\") return highlightSql(code).split(\"\\n\");\n\n if (language === \"text\") return lines.map((line) => escapeCodeHtml(line || \" \"));\n\n if (language === \"markdown\" || language === \"md\") {\n let fencedLanguage: string | undefined;\n return lines.map((line) => {\n const fence = /^(```)(\\w+)?(.*)$/.exec(line);\n if (fence) {\n const highlightedFence = highlightMarkdownLine(line);\n fencedLanguage = fencedLanguage ? undefined : fence[2];\n return highlightedFence;\n }\n return isCodeLanguage(fencedLanguage) ? highlightCode(line || \" \") : highlightMarkdownLine(line || \" \");\n });\n }\n\n if (lines.length >= 2 && /^```\\w+/.test(lines[0] ?? \"\") && /^```\\s*$/.test(lines[lines.length - 1] ?? \"\")) {\n return lines.map((line, index) => {\n if (index === 0 || index === lines.length - 1) return highlightMarkdownLine(line || \" \");\n return highlightCode(line || \" \");\n });\n }\n\n return lines.map((line) => highlightCode(line || \" \"));\n};\n\nexport const highlightCodeDisplay = (code: string, language: CodeDisplayLanguage = \"text\"): string => {\n if (language === \"sql\") return highlightSql(code);\n if (code.includes(\"\\n\")) return highlightCodeDisplayLines(code, language).join(\"\\n\");\n if (language === \"markdown\" || language === \"md\") return highlightMarkdownDisplay(code);\n if (language === \"text\") return escapeCodeHtml(code);\n return highlightCode(code);\n};\n\nconst SQL_KEYWORDS = new Set(\n \"SELECT WITH FROM WHERE AS AND OR NOT NULL IS IN BETWEEN LIKE ILIKE JOIN LEFT RIGHT INNER OUTER CROSS ON USING UNION ALL DISTINCT GROUP BY HAVING ORDER ASC DESC LIMIT OFFSET CASE WHEN THEN ELSE END OVER PARTITION ROWS RANGE INTERVAL TRUE FALSE SETTINGS FORMAT\".split(\n \" \",\n ),\n);\n\n/** Display-only, tolerant of incomplete SQL while typing. Source is always escaped. */\nexport const highlightSql = (code: string): string => {\n // CodeDisplay puts each returned line into its own <code> element.\n const token = (kind: string, raw: string) =>\n raw\n .split(\"\\n\")\n .map((line) => wrap(kind, line))\n .join(\"\\n\");\n let out = \"\",\n i = 0;\n while (i < code.length) {\n const start = i,\n c = code[i]!;\n if (code.startsWith(\"--\", i)) {\n const end = code.indexOf(\"\\n\", i);\n i = end < 0 ? code.length : end;\n out += token(\"cd-c\", code.slice(start, i));\n } else if (code.startsWith(\"/*\", i)) {\n i += 2;\n let depth = 1;\n while (i < code.length && depth) {\n if (code.startsWith(\"/*\", i)) {\n depth++;\n i += 2;\n } else if (code.startsWith(\"*/\", i)) {\n depth--;\n i += 2;\n } else i++;\n }\n out += token(\"cd-c\", code.slice(start, i));\n } else if (c === \"'\" || c === '\"' || c === \"`\") {\n i++;\n while (i < code.length) {\n if (code[i] === \"\\\\\") {\n i = Math.min(code.length, i + 2);\n continue;\n }\n if (code[i++] === c) {\n if (code[i] === c) {\n i++;\n continue;\n }\n break;\n }\n }\n out += token(c === \"'\" ? \"cd-s\" : \"cd-p\", code.slice(start, i));\n } else if (c === \":\" && code[i - 1] !== \":\" && !/[A-Za-z0-9_]/.test(code[i - 1] ?? \"\") && /[A-Za-z_]/.test(code[i + 1] ?? \"\")) {\n i += 2;\n while (/[A-Za-z0-9_]/.test(code[i] ?? \"\")) i++;\n out += token(\"cd-a cd-param\", code.slice(start, i));\n } else if (/[A-Za-z_]/.test(c)) {\n i++;\n while (/[A-Za-z0-9_]/.test(code[i] ?? \"\")) i++;\n const word = code.slice(start, i);\n out += SQL_KEYWORDS.has(word.toUpperCase()) ? token(\"cd-k\", word) : escapeCodeHtml(word);\n } else if (isDigit(c)) {\n i++;\n while (/[0-9.]/.test(code[i] ?? \"\")) i++;\n out += token(\"cd-n\", code.slice(start, i));\n } else {\n out += escapeCodeHtml(c);\n i++;\n }\n }\n return out;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CACvB,OAAO,EACP,KAAK,EACL,KAAK,EACL,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,WAAW,EACX,IAAI,EACJ,MAAM,EACN,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,IAAI,CACL,CAAC;AAIF,OAAO,MAAM,cAAc,GAAI,CAAS,IAAa,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAEzH,MAAM,SAAS,GAAI,CAAS,IAAc,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,MAAM,QAAQ,GAAI,CAAS,IAAc,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,MAAM,OAAO,GAAI,CAAS,IAAc,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,KAAa,gBAAgB,GAAG,KAAK,cAAc,CAAC,GAAG,CAAC,SAAS;AACvG,MAAM,cAAc,GAAI,QAA4B,IAClD,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK;AAE7G,OAAO,MAAM,aAAa,GAAI,IAAY,IAAa;EACrD,IAAI,GAAG,GAAG,EAAE;EACZ,IAAI,CAAC,GAAG,CAAC;EACT,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;EAErB,OAAO,CAAC,GAAG,CAAC,EAAE;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE;IAElB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACpC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;MAChC,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;MAC9B,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;MACvC,CAAC,GAAG,GAAG;MACP;IACF;IAEA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;MACvC,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;MACxC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;MACvC,CAAC,GAAG,GAAG;MACP;IACF;IAEA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;MACvC,MAAM,KAAK,GAAG,CAAC;MACf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;MACb,OAAO,CAAC,GAAG,CAAC,EAAE;QACZ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;UACpB,CAAC,IAAI,CAAC;UACN;QACF;QACA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;UACrB,CAAC,EAAE;UACH;QACF;QACA,CAAC,EAAE;MACL;MACA,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MACrC,CAAC,GAAG,CAAC;MACL;IACF;IAEA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;MACd,IAAI,CAAC,GAAG,CAAC;MACT,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;MAC3D,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MACrC,CAAC,GAAG,CAAC;MACL;IACF;IAEA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;MAChB,IAAI,CAAC,GAAG,CAAC;MACT,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE;MACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MAC7B,IAAI,GAAG,GAAG,EAAE;MACZ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KACtC;QACH,IAAI,CAAC,GAAG,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;QACrC,MAAM,UAAU,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;QAC7E,MAAM,SAAS,GAAG,IAAI,KAAK,GAAG;QAC9B,MAAM,YAAY,GAAG,IAAI,KAAK,GAAG;QACjC,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG;QAC7B,IAAI,UAAU,IAAI,SAAS,EAAE,GAAG,GAAG,MAAM,CAAC,KACrC,IAAI,YAAY,IAAI,QAAQ,EAAE,GAAG,GAAG,MAAM;MACjD;MACA,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC;MACnD,CAAC,GAAG,CAAC;MACL;IACF;IAEA,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC;IACxB,CAAC,EAAE;EACL;EAEA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,qBAAqB,GAAI,IAAY,IAAa;EACtD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC;EAEpC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;EAChD,IAAI,OAAO,EAAE,OAAO,8BAA8B,OAAO,CAAC,CAAC,CAAC,UAAU,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;EAEjH,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;EAC/C,IAAI,GAAG,EAAE,OAAO,2BAA2B,GAAG,CAAC,CAAC,CAAC,SAAS;EAE1D,MAAM,SAAS,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC;EACjE,IAAI,SAAS,EAAE;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,iCAAiC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE;IACvF,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,8BAA8B,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;EAC1I;EAEA,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;EACzC,IAAI,KAAK,EAAE;IACT,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,2BAA2B,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE;IAC7E,OAAO,8BAA8B,KAAK,CAAC,CAAC,CAAC,UAAU,QAAQ,EAAE;EACnE;EAEA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;EAClD,IAAI,KAAK,EAAE,OAAO,8BAA8B,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,8BAA8B,KAAK,CAAC,CAAC,CAAC,SAAS;EAEzH,MAAM,IAAI,GAAG,6CAA6C,CAAC,IAAI,CAAC,OAAO,CAAC;EACxE,IAAI,IAAI,EAAE;IACR,OAAO,8BAA8B,IAAI,CAAC,CAAC,CAAC,uCAAuC,IAAI,CAAC,CAAC,CAAC,UAAU,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;EAC9I;EAEA,MAAM,IAAI,GAAG,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC;EAC1D,IAAI,IAAI,EAAE,OAAO,8BAA8B,IAAI,CAAC,CAAC,CAAC,UAAU,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;EAExG,OAAO,uBAAuB,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,uBAAuB,GAAI,OAAe,IAC9C,OAAO,CACJ,OAAO,CACN,mBAAmB,EACnB,4GACF,CAAC,CACA,OAAO,CAAC,yBAAyB,EAAE,4EAA4E,CAAC,CAChH,OAAO,CAAC,6BAA6B,EAAE,wEAAwE,CAAC,CAChH,OAAO,CAAC,0BAA0B,EAAE,qCAAqC,CAAC,CAC1E,OAAO,CAAC,qBAAqB,EAAE,mCAAmC,CAAC,CACnE,OAAO,CAAC,gCAAgC,EAAE,uCAAuC,CAAC;AAEvF,OAAO,MAAM,wBAAwB,GAAI,IAAY,IAAa,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAExH,OAAO,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAE,QAA6B,GAAG,MAAM,KAAe;EAC3G,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;EAC9B,IAAI,QAAQ,KAAK,KAAK,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;EAE7D,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,cAAc,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;EAEhF,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,IAAI,EAAE;IAChD,IAAI,cAAkC;IACtC,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK;MACzB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;MAC5C,IAAI,KAAK,EAAE;QACT,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,CAAC;QACpD,cAAc,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;QACtD,OAAO,gBAAgB;MACzB;MACA,OAAO,cAAc,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,qBAAqB,CAAC,IAAI,IAAI,GAAG,CAAC;IACzG,CAAC,CAAC;EACJ;EAEA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;IACzG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;MAChC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,qBAAqB,CAAC,IAAI,IAAI,GAAG,CAAC;MACxF,OAAO,aAAa,CAAC,IAAI,IAAI,GAAG,CAAC;IACnC,CAAC,CAAC;EACJ;EAEA,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,aAAa,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,OAAO,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,QAA6B,GAAG,MAAM,KAAa;EACpG,IAAI,QAAQ,KAAK,KAAK,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;EACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EACpF,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,wBAAwB,CAAC,IAAI,CAAC;EACvF,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;EACpD,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,oQAAoQ,CAAC,KAAK,CACxQ,GACF,CACF,CAAC;;AAED;AACA,OAAO,MAAM,YAAY,GAAI,IAAY,IAAa;EACpD;EACA,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,GAAW,KACtC,GAAG,CACA,KAAK,CAAC,IAAI,CAAC,CACX,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC/B,IAAI,CAAC,IAAI,CAAC;EACf,IAAI,GAAG,GAAG,EAAE;IACV,CAAC,GAAG,CAAC;EACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;IACtB,MAAM,KAAK,GAAG,CAAC;MACb,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE;IACd,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;MAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;MACjC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;MAC/B,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;MACnC,CAAC,IAAI,CAAC;MACN,IAAI,KAAK,GAAG,CAAC;MACb,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;UAC5B,KAAK,EAAE;UACP,CAAC,IAAI,CAAC;QACR,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;UACnC,KAAK,EAAE;UACP,CAAC,IAAI,CAAC;QACR,CAAC,MAAM,CAAC,EAAE;MACZ;MACA,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;MAC9C,CAAC,EAAE;MACH,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QACtB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;UACpB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;UAChC;QACF;QACA,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;UACnB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YACjB,CAAC,EAAE;YACH;UACF;UACA;QACF;MACF;MACA,GAAG,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;MAC7H,CAAC,IAAI,CAAC;MACN,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;MAC9C,GAAG,IAAI,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MAC9B,CAAC,EAAE;MACH,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;MAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;MACjC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC;IAC1F,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;MACrB,CAAC,EAAE;MACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE;MACxC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,MAAM;MACL,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC;MACxB,CAAC,EAAE;IACL;EACF;EACA,OAAO,GAAG;AACZ,CAAC","ignoreList":[]}
@@ -8,6 +8,7 @@ export { default as CodeDisplay } from "./CodeDisplay";
8
8
  export { createChartCursor } from "./chart-cursor";
9
9
  export { createChartExplorer } from "./chart-explorer";
10
10
  export { prepareChartSnapshot } from "./chart-snapshot";
11
+ export { highlightSql } from "./code-highlight";
11
12
  export { createCollectionSelection } from "./collection-selection";
12
13
  export { default as DataTable } from "./DataTable";
13
14
  export { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from "./Docs";
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from \"./FileTypeIcon\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { MapAttribution } from \"./MapAttribution\";\nexport { MapView } from \"./MapView\";\nexport { MapViewFrame } from \"./MapViewFrame\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport { type MapPaletteColors, type MapTheme, mapPalette } from \"./map-palette\";\nexport { type MapStyleOptions, mapAttribution, mapStyle } from \"./map-style\";\nexport type {\n MapViewArea,\n MapViewFit,\n MapViewFrameProps,\n MapViewLine,\n MapViewLineTone,\n MapViewMarker,\n MapViewOwnLocation,\n MapViewPoint,\n MapViewProps,\n MapViewStyle,\n MapViewStyleSource,\n MapViewTone,\n} from \"./map-view-types\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type {\n ReferenceChipObjectProps,\n ReferenceChipPersonProps,\n ReferenceChipProps,\n ReferenceChipTimeProps,\n} from \"./ReferenceChip\";\nexport { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from \"./ReferenceChip\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SAAwB,YAAY,EAA0B,UAAU,QAAQ,gBAAgB;AAChG,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,cAAc,QAAQ,kBAAkB;AACjD,SAAS,OAAO,QAAQ,WAAW;AACnC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAA+C,UAAU,QAAQ,eAAe;AAChF,SAA+B,cAAc,EAAE,QAAQ,QAAQ,aAAa;AAe5E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;AAOxF,SAAS,6BAA6B,EAAE,aAAa,EAAE,cAAc,QAAQ,iBAAiB;AAE9F,SAAS,KAAK,QAAQ,SAAS;AAE/B,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { highlightSql } from \"./code-highlight\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from \"./FileTypeIcon\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { MapAttribution } from \"./MapAttribution\";\nexport { MapView } from \"./MapView\";\nexport { MapViewFrame } from \"./MapViewFrame\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport { type MapPaletteColors, type MapTheme, mapPalette } from \"./map-palette\";\nexport { type MapStyleOptions, mapAttribution, mapStyle } from \"./map-style\";\nexport type {\n MapViewArea,\n MapViewFit,\n MapViewFrameProps,\n MapViewLine,\n MapViewLineTone,\n MapViewMarker,\n MapViewOwnLocation,\n MapViewPoint,\n MapViewProps,\n MapViewStyle,\n MapViewStyleSource,\n MapViewTone,\n} from \"./map-view-types\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type {\n ReferenceChipObjectProps,\n ReferenceChipPersonProps,\n ReferenceChipProps,\n ReferenceChipTimeProps,\n} from \"./ReferenceChip\";\nexport { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from \"./ReferenceChip\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAS,YAAY,QAAQ,kBAAkB;AAC/C,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SAAwB,YAAY,EAA0B,UAAU,QAAQ,gBAAgB;AAChG,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,cAAc,QAAQ,kBAAkB;AACjD,SAAS,OAAO,QAAQ,WAAW;AACnC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAA+C,UAAU,QAAQ,eAAe;AAChF,SAA+B,cAAc,EAAE,QAAQ,QAAQ,aAAa;AAe5E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;AAOxF,SAAS,6BAA6B,EAAE,aAAa,EAAE,cAAc,QAAQ,iBAAiB;AAE9F,SAAS,KAAK,QAAQ,SAAS;AAE/B,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -1,18 +1,55 @@
1
1
  /// <reference path="./maplibre-worker.d.ts" />
2
- import { LngLat, Map, setWorkerUrl } from "maplibre-gl";
2
+ import { addProtocol, LngLat, Map, removeProtocol, setWorkerUrl } from "maplibre-gl";
3
3
  // The build points this at a copy named map-view-worker.js, because @k2b/ssr serves only .js files.
4
4
  import workerUrl from "./map-view-worker.js" with { type: "file" };
5
- export function createMap(options) {
5
+ export function createMap(options, onResourceError) {
6
6
  setWorkerUrl(new URL(workerUrl, import.meta.url).href);
7
- const map = new Map({
8
- ...options,
9
- // MapLibre would move a wide or polar fit to keep the poles out of view; the server frame cannot know that rule,
10
- // so the camera stays where fitCamera puts it and only latitude and zoom keep their ordinary limits.
11
- transformConstrain: (center, zoom) => ({
12
- center: new LngLat(center.lng, Math.max(-85.051129, Math.min(85.051129, center.lat))),
13
- zoom: Math.max(options.minZoom ?? -2, Math.min(options.maxZoom ?? 22, zoom))
14
- })
7
+ // MapLibre catches glyph fetch failures and silently renders a fallback font. Use its
8
+ // public protocol hook so the host can retain geometry and offer a visible retry.
9
+ const protocol = `k2b-glyph-${crypto.randomUUID()}`;
10
+ addProtocol(protocol, async (params, controller) => {
11
+ try {
12
+ const url = new URL(params.url).searchParams.get("url");
13
+ if (!url) throw new Error("Map glyph unavailable");
14
+ const response = await fetch(url, {
15
+ headers: params.headers,
16
+ credentials: params.credentials ?? "same-origin",
17
+ signal: controller.signal
18
+ });
19
+ if (!response.ok) throw new Error("Map glyph unavailable");
20
+ return {
21
+ data: await response.arrayBuffer()
22
+ };
23
+ } catch {
24
+ if (!controller.signal.aborted) onResourceError();
25
+ throw new Error("Map glyph unavailable");
26
+ }
15
27
  });
28
+ let map;
29
+ try {
30
+ map = new Map({
31
+ ...options,
32
+ async transformRequest(url, type) {
33
+ const request = (await options.transformRequest?.(url, type)) ?? {
34
+ url
35
+ };
36
+ return type === "Glyphs" ? {
37
+ ...request,
38
+ url: `${protocol}://glyph?url=${encodeURIComponent(new URL(request.url, document.baseURI).href)}`
39
+ } : request;
40
+ },
41
+ // MapLibre would move a wide or polar fit to keep the poles out of view; the server frame cannot know that rule,
42
+ // so the camera stays where fitCamera puts it and only latitude and zoom keep their ordinary limits.
43
+ transformConstrain: (center, zoom) => ({
44
+ center: new LngLat(center.lng, Math.max(-85.051129, Math.min(85.051129, center.lat))),
45
+ zoom: Math.max(options.minZoom ?? -2, Math.min(options.maxZoom ?? 22, zoom))
46
+ })
47
+ });
48
+ } catch (cause) {
49
+ removeProtocol(protocol);
50
+ throw cause;
51
+ }
52
+ map.on("remove", () => removeProtocol(protocol));
16
53
  map.touchZoomRotate.disableRotation();
17
54
  map.keyboard.disableRotation();
18
55
  // The shared overlay projects a flat, north-up Mercator plane even if a style requests a globe.
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/map-view-live.ts"],"sourcesContent":["/// <reference path=\"./maplibre-worker.d.ts\" />\nimport { LngLat, Map, type MapOptions, setWorkerUrl } from \"maplibre-gl\";\n// The build points this at a copy named map-view-worker.js, because @k2b/ssr serves only .js files.\nimport workerUrl from \"maplibre-gl/dist/maplibre-gl-worker.mjs\" with { type: \"file\" };\n\nexport function createMap(options: MapOptions): Map {\n setWorkerUrl(new URL(workerUrl, import.meta.url).href);\n const map = new Map({\n ...options,\n // MapLibre would move a wide or polar fit to keep the poles out of view; the server frame cannot know that rule,\n // so the camera stays where fitCamera puts it and only latitude and zoom keep their ordinary limits.\n transformConstrain: (center, zoom) => ({\n center: new LngLat(center.lng, Math.max(-85.051129, Math.min(85.051129, center.lat))),\n zoom: Math.max(options.minZoom ?? -2, Math.min(options.maxZoom ?? 22, zoom)),\n }),\n });\n map.touchZoomRotate.disableRotation();\n map.keyboard.disableRotation();\n // The shared overlay projects a flat, north-up Mercator plane even if a style requests a globe.\n // Terrain would lift features off that plane, so a style's terrain is switched off as well.\n map.on(\"style.load\", () => {\n map.setProjection({ type: \"mercator\" });\n if (map.getTerrain()) map.setTerrain(null);\n });\n return map;\n}\n"],"mappings":"AAAA;AACA,SAAS,MAAM,EAAE,GAAG,EAAmB,YAAY,QAAQ,aAAa;AACxE;AACA,OAAO,SAAS,MAAM,yCAAyC,QAAQ,IAAI,EAAE,MAAM;AAEnF,OAAO,SAAS,SAAS,CAAC,OAAmB,EAAO;EAClD,YAAY,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;EACtD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAClB,GAAG,OAAO;IACV;IACA;IACA,kBAAkB,EAAE,CAAC,MAAM,EAAE,IAAI,MAAM;MACrC,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;MACrF,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC;IAC7E,CAAC;EACH,CAAC,CAAC;EACF,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;EACrC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;EAC9B;EACA;EACA,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM;IACzB,GAAG,CAAC,aAAa,CAAC;MAAE,IAAI,EAAE;IAAW,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;EAC5C,CAAC,CAAC;EACF,OAAO,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/map-view-live.ts"],"sourcesContent":["/// <reference path=\"./maplibre-worker.d.ts\" />\nimport { addProtocol, LngLat, Map, type MapOptions, removeProtocol, setWorkerUrl } from \"maplibre-gl\";\n// The build points this at a copy named map-view-worker.js, because @k2b/ssr serves only .js files.\nimport workerUrl from \"maplibre-gl/dist/maplibre-gl-worker.mjs\" with { type: \"file\" };\n\nexport function createMap(options: MapOptions, onResourceError: () => void): Map {\n setWorkerUrl(new URL(workerUrl, import.meta.url).href);\n // MapLibre catches glyph fetch failures and silently renders a fallback font. Use its\n // public protocol hook so the host can retain geometry and offer a visible retry.\n const protocol = `k2b-glyph-${crypto.randomUUID()}`;\n addProtocol(protocol, async (params, controller) => {\n try {\n const url = new URL(params.url).searchParams.get(\"url\");\n if (!url) throw new Error(\"Map glyph unavailable\");\n const response = await fetch(url, {\n headers: params.headers,\n credentials: params.credentials ?? \"same-origin\",\n signal: controller.signal,\n });\n if (!response.ok) throw new Error(\"Map glyph unavailable\");\n return { data: await response.arrayBuffer() };\n } catch {\n if (!controller.signal.aborted) onResourceError();\n throw new Error(\"Map glyph unavailable\");\n }\n });\n let map: Map;\n try {\n map = new Map({\n ...options,\n async transformRequest(url, type) {\n const request = (await options.transformRequest?.(url, type)) ?? { url };\n return type === \"Glyphs\"\n ? { ...request, url: `${protocol}://glyph?url=${encodeURIComponent(new URL(request.url, document.baseURI).href)}` }\n : request;\n },\n // MapLibre would move a wide or polar fit to keep the poles out of view; the server frame cannot know that rule,\n // so the camera stays where fitCamera puts it and only latitude and zoom keep their ordinary limits.\n transformConstrain: (center, zoom) => ({\n center: new LngLat(center.lng, Math.max(-85.051129, Math.min(85.051129, center.lat))),\n zoom: Math.max(options.minZoom ?? -2, Math.min(options.maxZoom ?? 22, zoom)),\n }),\n });\n } catch (cause) {\n removeProtocol(protocol);\n throw cause;\n }\n map.on(\"remove\", () => removeProtocol(protocol));\n map.touchZoomRotate.disableRotation();\n map.keyboard.disableRotation();\n // The shared overlay projects a flat, north-up Mercator plane even if a style requests a globe.\n // Terrain would lift features off that plane, so a style's terrain is switched off as well.\n map.on(\"style.load\", () => {\n map.setProjection({ type: \"mercator\" });\n if (map.getTerrain()) map.setTerrain(null);\n });\n return map;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/map-view-types.ts"],"sourcesContent":["import type { StyleSpecification } from \"maplibre-gl\";\nimport type { JSX } from \"solid-js\";\n\nexport type MapViewPoint = { lat: number; lon: number };\nexport type MapViewTone = \"accent\" | \"second\" | \"neutral\" | \"warning\";\nexport type MapViewMarker = {\n id: string;\n point: MapViewPoint;\n /** A number, a single letter, or \"+\". Omit for a drop pin. */\n mark?: number | string;\n label: string;\n tone?: MapViewTone;\n selected?: boolean;\n};\nexport type MapViewLineTone = \"accent\" | \"muted\" | \"preview\" | \"previous\";\nexport type MapViewLine = { id: string; tone?: MapViewLineTone } & ({ polyline6: string } | { points: MapViewPoint[] });\nexport type MapViewArea = { id: string; polygon: MapViewPoint[]; tone?: MapViewTone };\nexport type MapViewOwnLocation = { point: MapViewPoint; accuracyMeters?: number };\nexport type MapViewStyle = string | StyleSpecification;\nexport type MapViewStyleSource = MapViewStyle | { light: MapViewStyle; dark: MapViewStyle };\nexport type MapViewFit = \"all\" | \"markers\";\nexport type MapViewFrameProps = {\n markers?: MapViewMarker[];\n lines?: MapViewLine[];\n areas?: MapViewArea[];\n ownLocation?: MapViewOwnLocation;\n height: number;\n padding?: number;\n fit?: MapViewFit;\n selectedId?: string;\n attribution?: JSX.Element;\n class?: string;\n};\nexport type MapViewProps = Omit<MapViewFrameProps, \"attribution\"> & {\n style: MapViewStyleSource;\n attribution: JSX.Element;\n onSelect?: (id: string) => void;\n infoTile?: (marker: MapViewMarker) => JSX.Element;\n notice?: JSX.Element;\n empty?: JSX.Element;\n onLocate?: () => void;\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/map-view-types.ts"],"sourcesContent":["import type { StyleSpecification } from \"maplibre-gl\";\nimport type { JSX } from \"solid-js\";\n\nexport type MapViewPoint = { lat: number; lon: number };\nexport type MapViewTone = \"accent\" | \"second\" | \"neutral\" | \"warning\";\nexport type MapViewMarker = {\n id: string;\n point: MapViewPoint;\n /** A number, a single letter, or \"+\". Omit for a drop pin. */\n mark?: number | string;\n label: string;\n tone?: MapViewTone;\n selected?: boolean;\n};\nexport type MapViewLineTone = \"accent\" | \"muted\" | \"preview\" | \"previous\";\nexport type MapViewLine = { id: string; tone?: MapViewLineTone } & ({ polyline6: string } | { points: MapViewPoint[] });\nexport type MapViewArea = { id: string; polygon: MapViewPoint[]; tone?: MapViewTone };\nexport type MapViewOwnLocation = { point: MapViewPoint; accuracyMeters?: number };\nexport type MapViewStyle = string | StyleSpecification;\nexport type MapViewStyleSource = MapViewStyle | { light: MapViewStyle; dark: MapViewStyle };\nexport type MapViewFit = \"all\" | \"markers\";\nexport type MapViewFrameProps = {\n markers?: MapViewMarker[];\n lines?: MapViewLine[];\n areas?: MapViewArea[];\n ownLocation?: MapViewOwnLocation;\n height: number;\n padding?: number;\n fit?: MapViewFit;\n selectedId?: string;\n attribution?: JSX.Element;\n class?: string;\n};\nexport type MapViewProps = Omit<MapViewFrameProps, \"attribution\"> & {\n style: MapViewStyleSource;\n attribution: JSX.Element;\n onSelect?: (id: string) => void;\n infoTile?: (marker: MapViewMarker) => JSX.Element;\n notice?: JSX.Element;\n empty?: JSX.Element;\n onLocate?: () => void;\n /** Observe rendering and resource failures without receiving provider responses or URLs. */\n onStateChange?: (state: \"static\" | \"loading\" | \"ready\" | \"error\" | \"no-webgl\" | \"empty\") => void;\n};\n"],"mappings":"","ignoreList":[]}