@k2b/ui 0.30.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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +2 -0
  3. package/dist/browser/actions/Toolbar.js +2 -0
  4. package/dist/browser/actions/Toolbar.js.map +1 -1
  5. package/dist/browser/actions/ViewTabs.js +8 -0
  6. package/dist/browser/actions/ViewTabs.js.map +1 -1
  7. package/dist/browser/chat/ChatDecision.js +28 -2
  8. package/dist/browser/chat/ChatDecision.js.map +1 -1
  9. package/dist/browser/content/Chart.js +104 -55
  10. package/dist/browser/content/Chart.js.map +1 -1
  11. package/dist/browser/content/ChartExplorer.js +5 -3
  12. package/dist/browser/content/ChartExplorer.js.map +1 -1
  13. package/dist/browser/content/MapAttribution.js +27 -0
  14. package/dist/browser/content/MapAttribution.js.map +1 -0
  15. package/dist/browser/content/MapView.js +553 -0
  16. package/dist/browser/content/MapView.js.map +1 -0
  17. package/dist/browser/content/MapViewFrame.js +395 -0
  18. package/dist/browser/content/MapViewFrame.js.map +1 -0
  19. package/dist/browser/content/chart-inspection-core.js +4 -1
  20. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  21. package/dist/browser/content/code-highlight.js +66 -0
  22. package/dist/browser/content/code-highlight.js.map +1 -1
  23. package/dist/browser/content/index.js +6 -0
  24. package/dist/browser/content/index.js.map +1 -1
  25. package/dist/browser/content/map-palette.js +39 -0
  26. package/dist/browser/content/map-palette.js.map +1 -0
  27. package/dist/browser/content/map-style.js +276 -0
  28. package/dist/browser/content/map-style.js.map +1 -0
  29. package/dist/browser/content/map-view-geometry.js +269 -0
  30. package/dist/browser/content/map-view-geometry.js.map +1 -0
  31. package/dist/browser/content/map-view-live.js +65 -0
  32. package/dist/browser/content/map-view-live.js.map +1 -0
  33. package/dist/browser/content/map-view-messages.js +53 -0
  34. package/dist/browser/content/map-view-messages.js.map +1 -0
  35. package/dist/browser/content/map-view-types.js +2 -0
  36. package/dist/browser/content/map-view-types.js.map +1 -0
  37. package/dist/browser/content/map-view-worker.js +10 -0
  38. package/dist/browser/feedback/dialog-core.js +19 -0
  39. package/dist/browser/feedback/dialog-core.js.map +1 -1
  40. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  41. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  42. package/dist/browser/inputs/RichSelect.js +1474 -0
  43. package/dist/browser/inputs/RichSelect.js.map +1 -0
  44. package/dist/browser/inputs/TextInput.js +95 -60
  45. package/dist/browser/inputs/TextInput.js.map +1 -1
  46. package/dist/browser/inputs/choice.js +19 -8
  47. package/dist/browser/inputs/choice.js.map +1 -1
  48. package/dist/browser/inputs/index.js +1 -0
  49. package/dist/browser/inputs/index.js.map +1 -1
  50. package/dist/browser/inputs/rich-select-messages.js +46 -0
  51. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  52. package/dist/browser/layout/AppWorkspace.js +194 -144
  53. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  54. package/dist/browser/layout/DetailPanel.js +10 -1
  55. package/dist/browser/layout/DetailPanel.js.map +1 -1
  56. package/dist/browser/layout/Navigation.js +14 -5
  57. package/dist/browser/layout/Navigation.js.map +1 -1
  58. package/dist/browser/layout/PageTitle.js +9 -3
  59. package/dist/browser/layout/PageTitle.js.map +1 -1
  60. package/dist/browser/layout/ResizeSeparator.js +8 -2
  61. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  62. package/dist/browser/layout/app-workspace-controller.js +301 -34
  63. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  64. package/dist/browser/layout/app-workspace-width.js +26 -0
  65. package/dist/browser/layout/app-workspace-width.js.map +1 -0
  66. package/dist/browser/layout/index.js +1 -1
  67. package/dist/browser/layout/index.js.map +1 -1
  68. package/dist/browser/layout/navigation-model.js.map +1 -1
  69. package/dist/browser/layout/resize-separator.js +25 -1
  70. package/dist/browser/layout/resize-separator.js.map +1 -1
  71. package/dist/browser/surfaces/Skeleton.js +14 -0
  72. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  73. package/dist/browser/surfaces/index.js +1 -0
  74. package/dist/browser/surfaces/index.js.map +1 -1
  75. package/dist/licenses/maplibre-gl.txt +116 -0
  76. package/dist/ssr/actions/Toolbar.js +2 -0
  77. package/dist/ssr/actions/Toolbar.js.map +1 -1
  78. package/dist/ssr/actions/ViewTabs.js +8 -0
  79. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  80. package/dist/ssr/chat/ChatDecision.js +11 -0
  81. package/dist/ssr/chat/ChatDecision.js.map +1 -1
  82. package/dist/ssr/content/Chart.js +27 -7
  83. package/dist/ssr/content/Chart.js.map +1 -1
  84. package/dist/ssr/content/ChartExplorer.js +5 -3
  85. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  86. package/dist/ssr/content/MapAttribution.js +19 -0
  87. package/dist/ssr/content/MapAttribution.js.map +1 -0
  88. package/dist/ssr/content/MapView.js +474 -0
  89. package/dist/ssr/content/MapView.js.map +1 -0
  90. package/dist/ssr/content/MapViewFrame.js +193 -0
  91. package/dist/ssr/content/MapViewFrame.js.map +1 -0
  92. package/dist/ssr/content/chart-inspection-core.js +4 -1
  93. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  94. package/dist/ssr/content/code-highlight.js +66 -0
  95. package/dist/ssr/content/code-highlight.js.map +1 -1
  96. package/dist/ssr/content/index.js +6 -0
  97. package/dist/ssr/content/index.js.map +1 -1
  98. package/dist/ssr/content/map-palette.js +39 -0
  99. package/dist/ssr/content/map-palette.js.map +1 -0
  100. package/dist/ssr/content/map-style.js +276 -0
  101. package/dist/ssr/content/map-style.js.map +1 -0
  102. package/dist/ssr/content/map-view-geometry.js +269 -0
  103. package/dist/ssr/content/map-view-geometry.js.map +1 -0
  104. package/dist/ssr/content/map-view-live.js +1 -0
  105. package/dist/ssr/content/map-view-messages.js +53 -0
  106. package/dist/ssr/content/map-view-messages.js.map +1 -0
  107. package/dist/ssr/content/map-view-types.js +2 -0
  108. package/dist/ssr/content/map-view-types.js.map +1 -0
  109. package/dist/ssr/feedback/dialog-core.js +19 -0
  110. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  111. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  112. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  113. package/dist/ssr/inputs/RichSelect.js +950 -0
  114. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  115. package/dist/ssr/inputs/TextInput.js +40 -16
  116. package/dist/ssr/inputs/TextInput.js.map +1 -1
  117. package/dist/ssr/inputs/choice.js +19 -8
  118. package/dist/ssr/inputs/choice.js.map +1 -1
  119. package/dist/ssr/inputs/index.js +1 -0
  120. package/dist/ssr/inputs/index.js.map +1 -1
  121. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  122. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  123. package/dist/ssr/layout/AppWorkspace.js +53 -16
  124. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  125. package/dist/ssr/layout/DetailPanel.js +1 -1
  126. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  127. package/dist/ssr/layout/Navigation.js +1 -1
  128. package/dist/ssr/layout/Navigation.js.map +1 -1
  129. package/dist/ssr/layout/PageTitle.js +9 -3
  130. package/dist/ssr/layout/PageTitle.js.map +1 -1
  131. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  132. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  133. package/dist/ssr/layout/app-workspace-controller.js +301 -34
  134. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  135. package/dist/ssr/layout/app-workspace-width.js +26 -0
  136. package/dist/ssr/layout/app-workspace-width.js.map +1 -0
  137. package/dist/ssr/layout/index.js +1 -1
  138. package/dist/ssr/layout/index.js.map +1 -1
  139. package/dist/ssr/layout/navigation-model.js.map +1 -1
  140. package/dist/ssr/layout/resize-separator.js +25 -1
  141. package/dist/ssr/layout/resize-separator.js.map +1 -1
  142. package/dist/ssr/surfaces/Skeleton.js +8 -0
  143. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  144. package/dist/ssr/surfaces/index.js +1 -0
  145. package/dist/ssr/surfaces/index.js.map +1 -1
  146. package/dist/styles.css +1 -1
  147. package/dist/types/content/Chart.d.ts +4 -2
  148. package/dist/types/content/ChartExplorer.d.ts +0 -1
  149. package/dist/types/content/MapAttribution.d.ts +6 -0
  150. package/dist/types/content/MapView.d.ts +5 -0
  151. package/dist/types/content/MapViewFrame.d.ts +31 -0
  152. package/dist/types/content/code-highlight.d.ts +3 -1
  153. package/dist/types/content/index.d.ts +7 -0
  154. package/dist/types/content/map-palette.d.ts +58 -0
  155. package/dist/types/content/map-style.d.ts +29 -0
  156. package/dist/types/content/map-view-geometry.d.ts +55 -0
  157. package/dist/types/content/map-view-live.d.ts +2 -0
  158. package/dist/types/content/map-view-messages.d.ts +21 -0
  159. package/dist/types/content/map-view-types.d.ts +63 -0
  160. package/dist/types/feedback/dialog-core.d.ts +1 -0
  161. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  162. package/dist/types/inputs/RichSelect.d.ts +93 -0
  163. package/dist/types/inputs/TextInput.d.ts +5 -2
  164. package/dist/types/inputs/choice.d.ts +24 -4
  165. package/dist/types/inputs/index.d.ts +2 -0
  166. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  167. package/dist/types/layout/AppWorkspace.d.ts +14 -3
  168. package/dist/types/layout/DetailPanel.d.ts +2 -0
  169. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  170. package/dist/types/layout/app-workspace-width.d.ts +13 -0
  171. package/dist/types/layout/index.d.ts +2 -2
  172. package/dist/types/layout/navigation-model.d.ts +2 -0
  173. package/dist/types/layout/resize-separator.d.ts +1 -0
  174. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  175. package/dist/types/surfaces/index.d.ts +1 -0
  176. package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
  177. package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
  178. package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
  179. package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
  180. package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
  181. package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
  182. package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
  183. package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
  184. package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
  185. package/map-glyphs/OFL.txt +93 -0
  186. package/package.json +11 -6
@@ -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":"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","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";
@@ -20,8 +21,13 @@ export { Kbd } from "./Kbd";
20
21
  export { LabelChip } from "./LabelChip";
21
22
  export { default as Lightbox } from "./Lightbox";
22
23
  export { default as LogEntriesTable } from "./LogEntriesTable";
24
+ export { MapAttribution } from "./MapAttribution";
25
+ export { MapView } from "./MapView";
26
+ export { MapViewFrame } from "./MapViewFrame";
23
27
  export { default as MarkdownView, renderSafeMarkdown } from "./MarkdownView";
24
28
  export { MessageRow, MessageSystemRow, startsMessageGroup } from "./MessageRow";
29
+ export { mapPalette } from "./map-palette";
30
+ export { mapAttribution, mapStyle } from "./map-style";
25
31
  export { MARKDOWN_CALLOUT_CLASSES, MARKDOWN_CALLOUT_ICON_ATTRIBUTES, markdownInfoBlocks, renderMarkdownInfoBlock, scanMarkdownInfoBlock } from "./markdown-info-blocks";
26
32
  export { markdownLinkReference, markdownReferenceIcon, markdownReferenceType, markdownReferenceTypeLabel, markStandaloneLinks, renderMarkdownLink } from "./markdown-links";
27
33
  export { Pagination } from "./Pagination";
@@ -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 { 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 {\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,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,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":[]}
@@ -0,0 +1,39 @@
1
+ /** The map image colours. Each key is also the CSS token `--k2b-map-<kebab-key>` on `.k2b-map-view`. */
2
+
3
+ /**
4
+ * Plain data so a server can build the style JSON without CSS. The accent stays with the host's
5
+ * pins and lines; the map image only uses calm land, water, green, and road tones.
6
+ */
7
+ export const mapPalette = {
8
+ light: {
9
+ land: "#f1efe9",
10
+ green: "#e3ecd9",
11
+ water: "#cfe3f3",
12
+ building: "#e8e5dd",
13
+ road: "#ffffff",
14
+ roadCasing: "#dcd8ce",
15
+ motorway: "#f6c76b",
16
+ motorwayCasing: "#d9a443",
17
+ rail: "#c4bfb4",
18
+ boundary: "#aea89c",
19
+ label: "#52525b",
20
+ labelStrong: "#27272a",
21
+ waterLabel: "#3a6383"
22
+ },
23
+ dark: {
24
+ land: "#1a1f26",
25
+ green: "#1c2a22",
26
+ water: "#14283a",
27
+ building: "#20262e",
28
+ road: "#2c333d",
29
+ roadCasing: "#222830",
30
+ motorway: "#5d6470",
31
+ motorwayCasing: "#444a54",
32
+ rail: "#39404a",
33
+ boundary: "#4f5763",
34
+ label: "#a1a1aa",
35
+ labelStrong: "#e4e4e7",
36
+ waterLabel: "#8fb5d3"
37
+ }
38
+ };
39
+ //# sourceMappingURL=map-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/map-palette.ts"],"sourcesContent":["/** The map image colours. Each key is also the CSS token `--k2b-map-<kebab-key>` on `.k2b-map-view`. */\nexport type MapPaletteColors = {\n /** Background land, also behind the server frame before the map image arrives. */\n land: string;\n /** Woods, grass, and city green; large protected areas stay plain land. */\n green: string;\n water: string;\n building: string;\n road: string;\n roadCasing: string;\n motorway: string;\n motorwayCasing: string;\n /** Rail lines and footpaths. */\n rail: string;\n boundary: string;\n /** Streets, suburbs, villages, and states. */\n label: string;\n /** Cities, towns, and countries. */\n labelStrong: string;\n waterLabel: string;\n};\nexport type MapTheme = \"light\" | \"dark\";\n\n/**\n * Plain data so a server can build the style JSON without CSS. The accent stays with the host's\n * pins and lines; the map image only uses calm land, water, green, and road tones.\n */\nexport const mapPalette = {\n light: {\n land: \"#f1efe9\",\n green: \"#e3ecd9\",\n water: \"#cfe3f3\",\n building: \"#e8e5dd\",\n road: \"#ffffff\",\n roadCasing: \"#dcd8ce\",\n motorway: \"#f6c76b\",\n motorwayCasing: \"#d9a443\",\n rail: \"#c4bfb4\",\n boundary: \"#aea89c\",\n label: \"#52525b\",\n labelStrong: \"#27272a\",\n waterLabel: \"#3a6383\",\n },\n dark: {\n land: \"#1a1f26\",\n green: \"#1c2a22\",\n water: \"#14283a\",\n building: \"#20262e\",\n road: \"#2c333d\",\n roadCasing: \"#222830\",\n motorway: \"#5d6470\",\n motorwayCasing: \"#444a54\",\n rail: \"#39404a\",\n boundary: \"#4f5763\",\n label: \"#a1a1aa\",\n labelStrong: \"#e4e4e7\",\n waterLabel: \"#8fb5d3\",\n },\n} as const satisfies Record<MapTheme, MapPaletteColors>;\n"],"mappings":"AAAA;;AAuBA;AACA;AACA;AACA;AACA,OAAO,MAAM,UAAU,GAAG;EACxB,KAAK,EAAE;IACL,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,SAAS;IACzB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE;EACd,CAAC;EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,SAAS;IACzB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE;EACd;AACF,CAAuD","ignoreList":[]}
@@ -0,0 +1,276 @@
1
+ import { mapPalette } from "./map-palette";
2
+ /** Attribution for OpenMapTiles-schema maps with OpenStreetMap data from Geoapify, in display order. */
3
+ export const mapAttribution = [{
4
+ label: "© OpenStreetMap",
5
+ href: "https://www.openstreetmap.org/copyright"
6
+ }, {
7
+ label: "© OpenMapTiles",
8
+ href: "https://openmaptiles.org/"
9
+ }, {
10
+ label: "Geoapify",
11
+ href: "https://www.geoapify.com/"
12
+ }];
13
+ const source = "openmaptiles";
14
+ /** One weight keeps the glyph assets small; size and ink carry the label hierarchy. */
15
+ const font = ["IBM Plex Sans Medium"];
16
+ const zoomed = (stops, base = 1.5) => ["interpolate", ["exponential", base], ["zoom"], ...stops.flat()];
17
+ const linear = stops => ["interpolate", ["linear"], ["zoom"], ...stops.flat()];
18
+ /** A casing is the fill plus a fixed edge at every stop, because zoom must stay the outer expression. */
19
+ const widened = (stops, edge) => stops.map(([zoom, width]) => [zoom, width + edge]);
20
+ const classIn = (...classes) => ["in", ["get", "class"], ["literal", classes]];
21
+ const notTunnel = ["!=", ["get", "brunnel"], "tunnel"];
22
+ const tunnelOpacity = ["match", ["get", "brunnel"], "tunnel", 0.5, 1];
23
+ const motorwayWidth = [[5, 0.5], [10, 1.5], [14, 4], [18, 16]];
24
+ const majorWidth = [[8, 0.5], [12, 1.5], [14, 3.5], [18, 14]];
25
+ const secondaryWidth = [[10, 0.5], [13, 1.5], [14, 2.5], [18, 12]];
26
+ const minorWidth = [[13, 0.75], [15, 2.5], [18, 9]];
27
+ // OpenMapTiles files pedestrian streets as paths; they read as streets, so they get the minor road look.
28
+ // Pedestrian squares arrive as polygons and stay plain land.
29
+ const minorFilter = ["any", classIn("minor", "service"), ["all", ["==", ["get", "class"], "path"], ["==", ["get", "subclass"], "pedestrian"], ["==", ["geometry-type"], "LineString"]]];
30
+
31
+ /** `name:<language>`, then the Latin form, then the local name, so a bounded set of glyph ranges covers every label. */
32
+ const labelText = locale => {
33
+ const language = locale.trim().toLowerCase().split(/[-_]/)[0] ?? "";
34
+ const names = [["get", "name:latin"], ["get", "name"]];
35
+ if (/^[a-z]{2,3}$/.test(language)) names.unshift(["get", `name:${language}`]);
36
+ return ["coalesce", ...names];
37
+ };
38
+ const roads = (theme, colors) => {
39
+ const casing = (id, filter, stops, minzoom, color) => ({
40
+ id: `${id}-casing`,
41
+ type: "line",
42
+ source,
43
+ "source-layer": "transportation",
44
+ minzoom,
45
+ filter,
46
+ layout: {
47
+ "line-cap": "round",
48
+ "line-join": "round"
49
+ },
50
+ paint: {
51
+ "line-color": color,
52
+ "line-width": zoomed(widened(stops, 1.5)),
53
+ "line-opacity": tunnelOpacity
54
+ }
55
+ });
56
+ const fill = (id, filter, stops, minzoom, color) => ({
57
+ id,
58
+ type: "line",
59
+ source,
60
+ "source-layer": "transportation",
61
+ minzoom,
62
+ filter,
63
+ layout: {
64
+ "line-cap": "round",
65
+ "line-join": "round"
66
+ },
67
+ paint: {
68
+ "line-color": color,
69
+ "line-width": zoomed(stops),
70
+ "line-opacity": tunnelOpacity
71
+ }
72
+ });
73
+ // Far out, roads take whichever tone stands out more from land: on light land a white road disappears, so it
74
+ // starts in the casing tone; on dark land the casing tone is the weaker one. Edges appear as roads widen.
75
+ const far = theme === "light" ? colors.roadCasing : colors.road;
76
+ const road = ["interpolate", ["linear"], ["zoom"], 11, far, 12.5, colors.road];
77
+ return [{
78
+ id: "path",
79
+ type: "line",
80
+ source,
81
+ "source-layer": "transportation",
82
+ minzoom: 15,
83
+ filter: ["all", classIn("path", "track"), ["!=", ["get", "subclass"], "pedestrian"], notTunnel],
84
+ paint: {
85
+ "line-color": colors.rail,
86
+ "line-width": zoomed([[15, 0.75], [18, 1.5]]),
87
+ "line-dasharray": [2, 1.5]
88
+ }
89
+ }, {
90
+ id: "rail",
91
+ type: "line",
92
+ source,
93
+ "source-layer": "transportation",
94
+ minzoom: 11,
95
+ filter: ["all", classIn("rail", "transit"), notTunnel],
96
+ paint: {
97
+ "line-color": colors.rail,
98
+ "line-width": zoomed([[11, 0.75], [18, 2]])
99
+ }
100
+ }, casing("road-minor", minorFilter, minorWidth, 14, colors.roadCasing), casing("road-secondary", classIn("secondary", "tertiary"), secondaryWidth, 12, colors.roadCasing), casing("road-major", classIn("trunk", "primary"), majorWidth, 12, colors.roadCasing), casing("road-motorway", classIn("motorway"), motorwayWidth, 9, colors.motorwayCasing), fill("road-minor", minorFilter, minorWidth, 13, road), fill("road-secondary", classIn("secondary", "tertiary"), secondaryWidth, 10, road), fill("road-major", classIn("trunk", "primary"), majorWidth, 8, road), fill("road-motorway", classIn("motorway"), motorwayWidth, 5, colors.motorway)];
101
+ };
102
+ const labels = (colors, text) => {
103
+ const paint = (color, halo = colors.land) => ({
104
+ "text-color": color,
105
+ "text-halo-color": halo,
106
+ "text-halo-width": 1.5
107
+ });
108
+ const place = (id, classes, minzoom, maxzoom, size, color) => ({
109
+ id: `place-${id}`,
110
+ type: "symbol",
111
+ source,
112
+ "source-layer": "place",
113
+ minzoom,
114
+ maxzoom,
115
+ filter: classIn(...classes),
116
+ layout: {
117
+ "text-field": text,
118
+ "text-font": font,
119
+ "text-size": linear(size),
120
+ "text-max-width": 8,
121
+ "symbol-sort-key": ["coalesce", ["get", "rank"], 99]
122
+ },
123
+ paint: paint(color)
124
+ });
125
+ return [{
126
+ id: "waterway-label",
127
+ type: "symbol",
128
+ source,
129
+ "source-layer": "waterway",
130
+ minzoom: 13,
131
+ filter: classIn("river", "canal"),
132
+ layout: {
133
+ "text-field": text,
134
+ "text-font": font,
135
+ "text-size": 11,
136
+ "symbol-placement": "line",
137
+ "text-letter-spacing": 0.05
138
+ },
139
+ paint: paint(colors.waterLabel, colors.water)
140
+ }, {
141
+ id: "water-name",
142
+ type: "symbol",
143
+ source,
144
+ "source-layer": "water_name",
145
+ filter: ["==", ["geometry-type"], "Point"],
146
+ layout: {
147
+ "text-field": text,
148
+ "text-font": font,
149
+ "text-size": linear([[4, 11], [12, 13]]),
150
+ "text-max-width": 7
151
+ },
152
+ paint: paint(colors.waterLabel, colors.water)
153
+ }, {
154
+ id: "street-label",
155
+ type: "symbol",
156
+ source,
157
+ "source-layer": "transportation_name",
158
+ minzoom: 13,
159
+ filter: classIn("motorway", "trunk", "primary", "secondary", "tertiary", "minor", "service"),
160
+ layout: {
161
+ "text-field": text,
162
+ "text-font": font,
163
+ "text-size": linear([[13, 11], [18, 13]]),
164
+ "symbol-placement": "line",
165
+ "text-max-angle": 30
166
+ },
167
+ paint: paint(colors.label, colors.road)
168
+ }, place("minor", ["suburb", "quarter", "neighbourhood", "hamlet", "locality", "isolated_dwelling"], 12, 18, [[12, 11], [16, 12.5]], colors.label), place("village", ["village"], 10, 17, [[10, 11.5], [14, 13]], colors.label), place("town", ["town"], 7, 16, [[7, 11.5], [10, 13], [14, 15]], colors.labelStrong), place("city", ["city"], 4, 15, [[4, 12], [8, 15], [12, 18]], colors.labelStrong), place("state", ["state", "province"], 4, 8, [[4, 11], [7, 12]], colors.label), place("country", ["country"], 1, 7, [[1, 11], [6, 15]], colors.labelStrong)];
169
+ };
170
+
171
+ /**
172
+ * A flat Cloud map style for OpenMapTiles-schema vector tiles. The host passes the tile and glyph
173
+ * templates; there are no network defaults, sprites, extrusions, or relief.
174
+ */
175
+ export function mapStyle(options) {
176
+ const {
177
+ theme,
178
+ locale,
179
+ tiles,
180
+ glyphs,
181
+ maxzoom = 14
182
+ } = options;
183
+ if (!["{z}", "{x}", "{y}"].every(token => tiles.includes(token))) throw new TypeError("mapStyle: tiles needs {z}, {x}, and {y}");
184
+ if (!["{fontstack}", "{range}"].every(token => glyphs.includes(token))) throw new TypeError("mapStyle: glyphs needs {fontstack} and {range}");
185
+ if (!Number.isInteger(maxzoom) || maxzoom < 0 || maxzoom > 24) throw new RangeError("mapStyle: maxzoom must be an integer from 0 to 24");
186
+ const colors = mapPalette[theme];
187
+ const text = labelText(locale);
188
+ // Protected areas (the park layer) cover whole regions, so only woods, grass, and city green are tinted.
189
+ const green = (id, sourceLayer, filter) => ({
190
+ id,
191
+ type: "fill",
192
+ source,
193
+ "source-layer": sourceLayer,
194
+ filter,
195
+ paint: {
196
+ "fill-color": colors.green
197
+ }
198
+ });
199
+ return {
200
+ version: 8,
201
+ name: `Cloud ${theme}`,
202
+ glyphs,
203
+ sources: {
204
+ [source]: {
205
+ type: "vector",
206
+ tiles: [tiles],
207
+ minzoom: 0,
208
+ maxzoom
209
+ }
210
+ },
211
+ layers: [{
212
+ id: "land",
213
+ type: "background",
214
+ paint: {
215
+ "background-color": colors.land
216
+ }
217
+ }, green("landcover-green", "landcover", classIn("wood", "grass")), green("landuse-green", "landuse", classIn("cemetery", "pitch", "playground")), {
218
+ id: "water",
219
+ type: "fill",
220
+ source,
221
+ "source-layer": "water",
222
+ filter: notTunnel,
223
+ paint: {
224
+ "fill-color": colors.water
225
+ }
226
+ }, {
227
+ id: "waterway",
228
+ type: "line",
229
+ source,
230
+ "source-layer": "waterway",
231
+ minzoom: 8,
232
+ filter: ["all", notTunnel, ["!=", ["get", "intermittent"], 1]],
233
+ layout: {
234
+ "line-cap": "round",
235
+ "line-join": "round"
236
+ },
237
+ paint: {
238
+ "line-color": colors.water,
239
+ "line-width": ["interpolate", ["exponential", 1.4], ["zoom"], 8, ["match", ["get", "class"], "river", 0.75, 0], 13, ["match", ["get", "class"], "river", 2.5, "canal", 1.5, 0.75], 18, ["match", ["get", "class"], "river", 8, "canal", 5, 2.5]]
240
+ }
241
+ }, {
242
+ id: "building",
243
+ type: "fill",
244
+ source,
245
+ "source-layer": "building",
246
+ minzoom: 13,
247
+ paint: {
248
+ "fill-color": colors.building,
249
+ "fill-opacity": linear([[13, 0], [14, 1]])
250
+ }
251
+ }, {
252
+ id: "boundary-state",
253
+ type: "line",
254
+ source,
255
+ "source-layer": "boundary",
256
+ minzoom: 4,
257
+ filter: ["all", ["==", ["get", "admin_level"], 4], ["!=", ["get", "maritime"], 1]],
258
+ paint: {
259
+ "line-color": colors.boundary,
260
+ "line-width": 0.75,
261
+ "line-dasharray": [3, 2]
262
+ }
263
+ }, {
264
+ id: "boundary-country",
265
+ type: "line",
266
+ source,
267
+ "source-layer": "boundary",
268
+ filter: ["all", ["==", ["get", "admin_level"], 2], ["!=", ["get", "maritime"], 1]],
269
+ paint: {
270
+ "line-color": colors.boundary,
271
+ "line-width": zoomed([[2, 0.75], [10, 1.5]])
272
+ }
273
+ }, ...roads(theme, colors), ...labels(colors, text)]
274
+ };
275
+ }
276
+ //# sourceMappingURL=map-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/map-style.ts"],"sourcesContent":["import type {\n DataDrivenPropertyValueSpecification,\n ExpressionSpecification,\n FilterSpecification,\n LayerSpecification,\n StyleSpecification,\n} from \"maplibre-gl\";\nimport { type MapPaletteColors, type MapTheme, mapPalette } from \"./map-palette\";\n\nexport type MapStyleOptions = {\n theme: MapTheme;\n /** Request locale such as `de` or `de-DE`; labels prefer `name:<language>`. */\n locale: string;\n /** Vector tile template with `{z}`, `{x}`, and `{y}`, for example `/_geo/tiles/{z}/{x}/{y}.pbf`. */\n tiles: string;\n /** Glyph template with `{fontstack}` and `{range}`, served from `@k2b/ui/map-glyphs/*`. */\n glyphs: string;\n /** Highest zoom the tiles carry; the map scales the last level up beyond it. Defaults to 14. */\n maxzoom?: number;\n};\n\n/** Attribution for OpenMapTiles-schema maps with OpenStreetMap data from Geoapify, in display order. */\nexport const mapAttribution = [\n { label: \"© OpenStreetMap\", href: \"https://www.openstreetmap.org/copyright\" },\n { label: \"© OpenMapTiles\", href: \"https://openmaptiles.org/\" },\n { label: \"Geoapify\", href: \"https://www.geoapify.com/\" },\n] as const;\n\nconst source = \"openmaptiles\";\n/** One weight keeps the glyph assets small; size and ink carry the label hierarchy. */\nconst font = [\"IBM Plex Sans Medium\"];\ntype Stops = readonly (readonly [zoom: number, value: number])[];\n\nconst zoomed = (stops: Stops, base = 1.5): ExpressionSpecification =>\n [\"interpolate\", [\"exponential\", base], [\"zoom\"], ...stops.flat()] as ExpressionSpecification;\nconst linear = (stops: Stops): ExpressionSpecification => [\"interpolate\", [\"linear\"], [\"zoom\"], ...stops.flat()] as ExpressionSpecification;\n/** A casing is the fill plus a fixed edge at every stop, because zoom must stay the outer expression. */\nconst widened = (stops: Stops, edge: number): Stops => stops.map(([zoom, width]) => [zoom, width + edge] as const);\nconst classIn = (...classes: string[]): ExpressionSpecification => [\"in\", [\"get\", \"class\"], [\"literal\", classes]];\nconst notTunnel: ExpressionSpecification = [\"!=\", [\"get\", \"brunnel\"], \"tunnel\"];\nconst tunnelOpacity: DataDrivenPropertyValueSpecification<number> = [\"match\", [\"get\", \"brunnel\"], \"tunnel\", 0.5, 1];\n\nconst motorwayWidth: Stops = [\n [5, 0.5],\n [10, 1.5],\n [14, 4],\n [18, 16],\n];\nconst majorWidth: Stops = [\n [8, 0.5],\n [12, 1.5],\n [14, 3.5],\n [18, 14],\n];\nconst secondaryWidth: Stops = [\n [10, 0.5],\n [13, 1.5],\n [14, 2.5],\n [18, 12],\n];\nconst minorWidth: Stops = [\n [13, 0.75],\n [15, 2.5],\n [18, 9],\n];\n// OpenMapTiles files pedestrian streets as paths; they read as streets, so they get the minor road look.\n// Pedestrian squares arrive as polygons and stay plain land.\nconst minorFilter: FilterSpecification = [\n \"any\",\n classIn(\"minor\", \"service\"),\n [\"all\", [\"==\", [\"get\", \"class\"], \"path\"], [\"==\", [\"get\", \"subclass\"], \"pedestrian\"], [\"==\", [\"geometry-type\"], \"LineString\"]],\n];\n\n/** `name:<language>`, then the Latin form, then the local name, so a bounded set of glyph ranges covers every label. */\nconst labelText = (locale: string): ExpressionSpecification => {\n const language = locale.trim().toLowerCase().split(/[-_]/)[0] ?? \"\";\n const names: ExpressionSpecification[] = [\n [\"get\", \"name:latin\"],\n [\"get\", \"name\"],\n ];\n if (/^[a-z]{2,3}$/.test(language)) names.unshift([\"get\", `name:${language}`]);\n return [\"coalesce\", ...names];\n};\n\nconst roads = (theme: MapTheme, colors: MapPaletteColors): LayerSpecification[] => {\n const casing = (id: string, filter: FilterSpecification, stops: Stops, minzoom: number, color: string): LayerSpecification => ({\n id: `${id}-casing`,\n type: \"line\",\n source,\n \"source-layer\": \"transportation\",\n minzoom,\n filter,\n layout: { \"line-cap\": \"round\", \"line-join\": \"round\" },\n paint: { \"line-color\": color, \"line-width\": zoomed(widened(stops, 1.5)), \"line-opacity\": tunnelOpacity },\n });\n const fill = (\n id: string,\n filter: FilterSpecification,\n stops: Stops,\n minzoom: number,\n color: string | ExpressionSpecification,\n ): LayerSpecification => ({\n id,\n type: \"line\",\n source,\n \"source-layer\": \"transportation\",\n minzoom,\n filter,\n layout: { \"line-cap\": \"round\", \"line-join\": \"round\" },\n paint: { \"line-color\": color, \"line-width\": zoomed(stops), \"line-opacity\": tunnelOpacity },\n });\n // Far out, roads take whichever tone stands out more from land: on light land a white road disappears, so it\n // starts in the casing tone; on dark land the casing tone is the weaker one. Edges appear as roads widen.\n const far = theme === \"light\" ? colors.roadCasing : colors.road;\n const road: ExpressionSpecification = [\"interpolate\", [\"linear\"], [\"zoom\"], 11, far, 12.5, colors.road];\n return [\n {\n id: \"path\",\n type: \"line\",\n source,\n \"source-layer\": \"transportation\",\n minzoom: 15,\n filter: [\"all\", classIn(\"path\", \"track\"), [\"!=\", [\"get\", \"subclass\"], \"pedestrian\"], notTunnel],\n paint: {\n \"line-color\": colors.rail,\n \"line-width\": zoomed([\n [15, 0.75],\n [18, 1.5],\n ]),\n \"line-dasharray\": [2, 1.5],\n },\n },\n {\n id: \"rail\",\n type: \"line\",\n source,\n \"source-layer\": \"transportation\",\n minzoom: 11,\n filter: [\"all\", classIn(\"rail\", \"transit\"), notTunnel],\n paint: {\n \"line-color\": colors.rail,\n \"line-width\": zoomed([\n [11, 0.75],\n [18, 2],\n ]),\n },\n },\n casing(\"road-minor\", minorFilter, minorWidth, 14, colors.roadCasing),\n casing(\"road-secondary\", classIn(\"secondary\", \"tertiary\"), secondaryWidth, 12, colors.roadCasing),\n casing(\"road-major\", classIn(\"trunk\", \"primary\"), majorWidth, 12, colors.roadCasing),\n casing(\"road-motorway\", classIn(\"motorway\"), motorwayWidth, 9, colors.motorwayCasing),\n fill(\"road-minor\", minorFilter, minorWidth, 13, road),\n fill(\"road-secondary\", classIn(\"secondary\", \"tertiary\"), secondaryWidth, 10, road),\n fill(\"road-major\", classIn(\"trunk\", \"primary\"), majorWidth, 8, road),\n fill(\"road-motorway\", classIn(\"motorway\"), motorwayWidth, 5, colors.motorway),\n ];\n};\n\nconst labels = (colors: MapPaletteColors, text: ExpressionSpecification): LayerSpecification[] => {\n const paint = (color: string, halo = colors.land) => ({\n \"text-color\": color,\n \"text-halo-color\": halo,\n \"text-halo-width\": 1.5,\n });\n const place = (id: string, classes: string[], minzoom: number, maxzoom: number, size: Stops, color: string): LayerSpecification => ({\n id: `place-${id}`,\n type: \"symbol\",\n source,\n \"source-layer\": \"place\",\n minzoom,\n maxzoom,\n filter: classIn(...classes),\n layout: {\n \"text-field\": text,\n \"text-font\": font,\n \"text-size\": linear(size),\n \"text-max-width\": 8,\n \"symbol-sort-key\": [\"coalesce\", [\"get\", \"rank\"], 99],\n },\n paint: paint(color),\n });\n return [\n {\n id: \"waterway-label\",\n type: \"symbol\",\n source,\n \"source-layer\": \"waterway\",\n minzoom: 13,\n filter: classIn(\"river\", \"canal\"),\n layout: {\n \"text-field\": text,\n \"text-font\": font,\n \"text-size\": 11,\n \"symbol-placement\": \"line\",\n \"text-letter-spacing\": 0.05,\n },\n paint: paint(colors.waterLabel, colors.water),\n },\n {\n id: \"water-name\",\n type: \"symbol\",\n source,\n \"source-layer\": \"water_name\",\n filter: [\"==\", [\"geometry-type\"], \"Point\"],\n layout: {\n \"text-field\": text,\n \"text-font\": font,\n \"text-size\": linear([\n [4, 11],\n [12, 13],\n ]),\n \"text-max-width\": 7,\n },\n paint: paint(colors.waterLabel, colors.water),\n },\n {\n id: \"street-label\",\n type: \"symbol\",\n source,\n \"source-layer\": \"transportation_name\",\n minzoom: 13,\n filter: classIn(\"motorway\", \"trunk\", \"primary\", \"secondary\", \"tertiary\", \"minor\", \"service\"),\n layout: {\n \"text-field\": text,\n \"text-font\": font,\n \"text-size\": linear([\n [13, 11],\n [18, 13],\n ]),\n \"symbol-placement\": \"line\",\n \"text-max-angle\": 30,\n },\n paint: paint(colors.label, colors.road),\n },\n place(\n \"minor\",\n [\"suburb\", \"quarter\", \"neighbourhood\", \"hamlet\", \"locality\", \"isolated_dwelling\"],\n 12,\n 18,\n [\n [12, 11],\n [16, 12.5],\n ],\n colors.label,\n ),\n place(\n \"village\",\n [\"village\"],\n 10,\n 17,\n [\n [10, 11.5],\n [14, 13],\n ],\n colors.label,\n ),\n place(\n \"town\",\n [\"town\"],\n 7,\n 16,\n [\n [7, 11.5],\n [10, 13],\n [14, 15],\n ],\n colors.labelStrong,\n ),\n place(\n \"city\",\n [\"city\"],\n 4,\n 15,\n [\n [4, 12],\n [8, 15],\n [12, 18],\n ],\n colors.labelStrong,\n ),\n place(\n \"state\",\n [\"state\", \"province\"],\n 4,\n 8,\n [\n [4, 11],\n [7, 12],\n ],\n colors.label,\n ),\n place(\n \"country\",\n [\"country\"],\n 1,\n 7,\n [\n [1, 11],\n [6, 15],\n ],\n colors.labelStrong,\n ),\n ];\n};\n\n/**\n * A flat Cloud map style for OpenMapTiles-schema vector tiles. The host passes the tile and glyph\n * templates; there are no network defaults, sprites, extrusions, or relief.\n */\nexport function mapStyle(options: MapStyleOptions): StyleSpecification {\n const { theme, locale, tiles, glyphs, maxzoom = 14 } = options;\n if (![\"{z}\", \"{x}\", \"{y}\"].every((token) => tiles.includes(token))) throw new TypeError(\"mapStyle: tiles needs {z}, {x}, and {y}\");\n if (![\"{fontstack}\", \"{range}\"].every((token) => glyphs.includes(token)))\n throw new TypeError(\"mapStyle: glyphs needs {fontstack} and {range}\");\n if (!Number.isInteger(maxzoom) || maxzoom < 0 || maxzoom > 24) throw new RangeError(\"mapStyle: maxzoom must be an integer from 0 to 24\");\n const colors = mapPalette[theme];\n const text = labelText(locale);\n // Protected areas (the park layer) cover whole regions, so only woods, grass, and city green are tinted.\n const green = (id: string, sourceLayer: string, filter: FilterSpecification): LayerSpecification => ({\n id,\n type: \"fill\",\n source,\n \"source-layer\": sourceLayer,\n filter,\n paint: { \"fill-color\": colors.green },\n });\n return {\n version: 8,\n name: `Cloud ${theme}`,\n glyphs,\n sources: { [source]: { type: \"vector\", tiles: [tiles], minzoom: 0, maxzoom } },\n layers: [\n { id: \"land\", type: \"background\", paint: { \"background-color\": colors.land } },\n green(\"landcover-green\", \"landcover\", classIn(\"wood\", \"grass\")),\n green(\"landuse-green\", \"landuse\", classIn(\"cemetery\", \"pitch\", \"playground\")),\n {\n id: \"water\",\n type: \"fill\",\n source,\n \"source-layer\": \"water\",\n filter: notTunnel,\n paint: { \"fill-color\": colors.water },\n },\n {\n id: \"waterway\",\n type: \"line\",\n source,\n \"source-layer\": \"waterway\",\n minzoom: 8,\n filter: [\"all\", notTunnel, [\"!=\", [\"get\", \"intermittent\"], 1]],\n layout: { \"line-cap\": \"round\", \"line-join\": \"round\" },\n paint: {\n \"line-color\": colors.water,\n \"line-width\": [\n \"interpolate\",\n [\"exponential\", 1.4],\n [\"zoom\"],\n 8,\n [\"match\", [\"get\", \"class\"], \"river\", 0.75, 0],\n 13,\n [\"match\", [\"get\", \"class\"], \"river\", 2.5, \"canal\", 1.5, 0.75],\n 18,\n [\"match\", [\"get\", \"class\"], \"river\", 8, \"canal\", 5, 2.5],\n ],\n },\n },\n {\n id: \"building\",\n type: \"fill\",\n source,\n \"source-layer\": \"building\",\n minzoom: 13,\n paint: {\n \"fill-color\": colors.building,\n \"fill-opacity\": linear([\n [13, 0],\n [14, 1],\n ]),\n },\n },\n {\n id: \"boundary-state\",\n type: \"line\",\n source,\n \"source-layer\": \"boundary\",\n minzoom: 4,\n filter: [\"all\", [\"==\", [\"get\", \"admin_level\"], 4], [\"!=\", [\"get\", \"maritime\"], 1]],\n paint: { \"line-color\": colors.boundary, \"line-width\": 0.75, \"line-dasharray\": [3, 2] },\n },\n {\n id: \"boundary-country\",\n type: \"line\",\n source,\n \"source-layer\": \"boundary\",\n filter: [\"all\", [\"==\", [\"get\", \"admin_level\"], 2], [\"!=\", [\"get\", \"maritime\"], 1]],\n paint: {\n \"line-color\": colors.boundary,\n \"line-width\": zoomed([\n [2, 0.75],\n [10, 1.5],\n ]),\n },\n },\n ...roads(theme, colors),\n ...labels(colors, text),\n ],\n };\n}\n"],"mappings":"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","ignoreList":[]}