@walkthru-earth/objex 0.1.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 (367) hide show
  1. package/LICENSE +396 -0
  2. package/README.md +114 -0
  3. package/dist/assets/favicon.svg +17 -0
  4. package/dist/components/CLAUDE.md +44 -0
  5. package/dist/components/browser/Breadcrumb.svelte +50 -0
  6. package/dist/components/browser/Breadcrumb.svelte.d.ts +7 -0
  7. package/dist/components/browser/CreateFolderDialog.svelte +98 -0
  8. package/dist/components/browser/CreateFolderDialog.svelte.d.ts +6 -0
  9. package/dist/components/browser/DeleteConfirmDialog.svelte +90 -0
  10. package/dist/components/browser/DeleteConfirmDialog.svelte.d.ts +8 -0
  11. package/dist/components/browser/DropZone.svelte +83 -0
  12. package/dist/components/browser/DropZone.svelte.d.ts +7 -0
  13. package/dist/components/browser/FileBrowser.svelte +229 -0
  14. package/dist/components/browser/FileBrowser.svelte.d.ts +3 -0
  15. package/dist/components/browser/FileRow.svelte +112 -0
  16. package/dist/components/browser/FileRow.svelte.d.ts +9 -0
  17. package/dist/components/browser/FileTreeSidebar.svelte +559 -0
  18. package/dist/components/browser/FileTreeSidebar.svelte.d.ts +8 -0
  19. package/dist/components/browser/RenameDialog.svelte +101 -0
  20. package/dist/components/browser/RenameDialog.svelte.d.ts +8 -0
  21. package/dist/components/browser/SearchBar.svelte +40 -0
  22. package/dist/components/browser/SearchBar.svelte.d.ts +6 -0
  23. package/dist/components/browser/UploadButton.svelte +65 -0
  24. package/dist/components/browser/UploadButton.svelte.d.ts +3 -0
  25. package/dist/components/editor/CodeMirrorEditor.svelte +404 -0
  26. package/dist/components/editor/CodeMirrorEditor.svelte.d.ts +12 -0
  27. package/dist/components/editor/MilkdownEditor.svelte +98 -0
  28. package/dist/components/editor/MilkdownEditor.svelte.d.ts +9 -0
  29. package/dist/components/editor/SqlEditor.svelte +173 -0
  30. package/dist/components/editor/SqlEditor.svelte.d.ts +7 -0
  31. package/dist/components/editor/SqlResultBlock.svelte +199 -0
  32. package/dist/components/editor/SqlResultBlock.svelte.d.ts +9 -0
  33. package/dist/components/layout/ConnectionDialog.svelte +439 -0
  34. package/dist/components/layout/ConnectionDialog.svelte.d.ts +9 -0
  35. package/dist/components/layout/LocaleToggle.svelte +32 -0
  36. package/dist/components/layout/LocaleToggle.svelte.d.ts +3 -0
  37. package/dist/components/layout/SafeLockToggle.svelte +37 -0
  38. package/dist/components/layout/SafeLockToggle.svelte.d.ts +18 -0
  39. package/dist/components/layout/Sidebar.svelte +314 -0
  40. package/dist/components/layout/Sidebar.svelte.d.ts +3 -0
  41. package/dist/components/layout/StatusBar.svelte +73 -0
  42. package/dist/components/layout/StatusBar.svelte.d.ts +3 -0
  43. package/dist/components/layout/TabBar.svelte +102 -0
  44. package/dist/components/layout/TabBar.svelte.d.ts +7 -0
  45. package/dist/components/layout/ThemeToggle.svelte +52 -0
  46. package/dist/components/layout/ThemeToggle.svelte.d.ts +3 -0
  47. package/dist/components/ui/badge/badge.svelte +49 -0
  48. package/dist/components/ui/badge/badge.svelte.d.ts +32 -0
  49. package/dist/components/ui/badge/index.d.ts +1 -0
  50. package/dist/components/ui/badge/index.js +1 -0
  51. package/dist/components/ui/button/button.svelte +82 -0
  52. package/dist/components/ui/button/button.svelte.d.ts +64 -0
  53. package/dist/components/ui/button/index.d.ts +2 -0
  54. package/dist/components/ui/button/index.js +4 -0
  55. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +40 -0
  56. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +9 -0
  57. package/dist/components/ui/context-menu/context-menu-content.svelte +28 -0
  58. package/dist/components/ui/context-menu/context-menu-content.svelte.d.ts +10 -0
  59. package/dist/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
  60. package/dist/components/ui/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
  61. package/dist/components/ui/context-menu/context-menu-group.svelte +7 -0
  62. package/dist/components/ui/context-menu/context-menu-group.svelte.d.ts +4 -0
  63. package/dist/components/ui/context-menu/context-menu-item.svelte +27 -0
  64. package/dist/components/ui/context-menu/context-menu-item.svelte.d.ts +8 -0
  65. package/dist/components/ui/context-menu/context-menu-label.svelte +24 -0
  66. package/dist/components/ui/context-menu/context-menu-label.svelte.d.ts +8 -0
  67. package/dist/components/ui/context-menu/context-menu-portal.svelte +7 -0
  68. package/dist/components/ui/context-menu/context-menu-portal.svelte.d.ts +3 -0
  69. package/dist/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
  70. package/dist/components/ui/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
  71. package/dist/components/ui/context-menu/context-menu-radio-item.svelte +33 -0
  72. package/dist/components/ui/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
  73. package/dist/components/ui/context-menu/context-menu-separator.svelte +17 -0
  74. package/dist/components/ui/context-menu/context-menu-separator.svelte.d.ts +4 -0
  75. package/dist/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
  76. package/dist/components/ui/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
  77. package/dist/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
  78. package/dist/components/ui/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
  79. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
  80. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
  81. package/dist/components/ui/context-menu/context-menu-sub.svelte +7 -0
  82. package/dist/components/ui/context-menu/context-menu-sub.svelte.d.ts +3 -0
  83. package/dist/components/ui/context-menu/context-menu-trigger.svelte +7 -0
  84. package/dist/components/ui/context-menu/context-menu-trigger.svelte.d.ts +4 -0
  85. package/dist/components/ui/context-menu/context-menu.svelte +7 -0
  86. package/dist/components/ui/context-menu/context-menu.svelte.d.ts +3 -0
  87. package/dist/components/ui/context-menu/index.d.ts +17 -0
  88. package/dist/components/ui/context-menu/index.js +19 -0
  89. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  90. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  91. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
  92. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  93. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +29 -0
  94. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  95. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  96. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  97. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
  98. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  99. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  100. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  101. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
  102. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  103. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  104. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  105. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  106. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  107. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +33 -0
  108. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  109. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  110. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  111. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  112. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  113. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
  114. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
  115. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  116. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  117. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  118. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  119. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  120. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  121. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
  122. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  123. package/dist/components/ui/dropdown-menu/index.d.ts +18 -0
  124. package/dist/components/ui/dropdown-menu/index.js +18 -0
  125. package/dist/components/ui/input/index.d.ts +2 -0
  126. package/dist/components/ui/input/index.js +4 -0
  127. package/dist/components/ui/input/input.svelte +52 -0
  128. package/dist/components/ui/input/input.svelte.d.ts +13 -0
  129. package/dist/components/ui/resizable/index.d.ts +4 -0
  130. package/dist/components/ui/resizable/index.js +6 -0
  131. package/dist/components/ui/resizable/resizable-handle.svelte +30 -0
  132. package/dist/components/ui/resizable/resizable-handle.svelte.d.ts +8 -0
  133. package/dist/components/ui/resizable/resizable-pane-group.svelte +20 -0
  134. package/dist/components/ui/resizable/resizable-pane-group.svelte.d.ts +7 -0
  135. package/dist/components/ui/scroll-area/index.d.ts +3 -0
  136. package/dist/components/ui/scroll-area/index.js +5 -0
  137. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
  138. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
  139. package/dist/components/ui/scroll-area/scroll-area.svelte +47 -0
  140. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +11 -0
  141. package/dist/components/ui/separator/index.d.ts +2 -0
  142. package/dist/components/ui/separator/index.js +4 -0
  143. package/dist/components/ui/separator/separator.svelte +21 -0
  144. package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
  145. package/dist/components/ui/sheet/index.d.ts +11 -0
  146. package/dist/components/ui/sheet/index.js +13 -0
  147. package/dist/components/ui/sheet/sheet-close.svelte +7 -0
  148. package/dist/components/ui/sheet/sheet-close.svelte.d.ts +4 -0
  149. package/dist/components/ui/sheet/sheet-content.svelte +62 -0
  150. package/dist/components/ui/sheet/sheet-content.svelte.d.ts +37 -0
  151. package/dist/components/ui/sheet/sheet-description.svelte +17 -0
  152. package/dist/components/ui/sheet/sheet-description.svelte.d.ts +4 -0
  153. package/dist/components/ui/sheet/sheet-footer.svelte +20 -0
  154. package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +5 -0
  155. package/dist/components/ui/sheet/sheet-header.svelte +20 -0
  156. package/dist/components/ui/sheet/sheet-header.svelte.d.ts +5 -0
  157. package/dist/components/ui/sheet/sheet-overlay.svelte +20 -0
  158. package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +4 -0
  159. package/dist/components/ui/sheet/sheet-portal.svelte +7 -0
  160. package/dist/components/ui/sheet/sheet-portal.svelte.d.ts +3 -0
  161. package/dist/components/ui/sheet/sheet-title.svelte +13 -0
  162. package/dist/components/ui/sheet/sheet-title.svelte.d.ts +4 -0
  163. package/dist/components/ui/sheet/sheet-trigger.svelte +7 -0
  164. package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +4 -0
  165. package/dist/components/ui/sheet/sheet.svelte +7 -0
  166. package/dist/components/ui/sheet/sheet.svelte.d.ts +3 -0
  167. package/dist/components/ui/switch/index.d.ts +2 -0
  168. package/dist/components/ui/switch/index.js +4 -0
  169. package/dist/components/ui/switch/switch.svelte +28 -0
  170. package/dist/components/ui/switch/switch.svelte.d.ts +8 -0
  171. package/dist/components/ui/tabs/index.d.ts +5 -0
  172. package/dist/components/ui/tabs/index.js +7 -0
  173. package/dist/components/ui/tabs/tabs-content.svelte +17 -0
  174. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
  175. package/dist/components/ui/tabs/tabs-list.svelte +16 -0
  176. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
  177. package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
  178. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
  179. package/dist/components/ui/tabs/tabs.svelte +19 -0
  180. package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
  181. package/dist/components/ui/tooltip/index.d.ts +6 -0
  182. package/dist/components/ui/tooltip/index.js +8 -0
  183. package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
  184. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
  185. package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
  186. package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
  187. package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
  188. package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
  189. package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  190. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  191. package/dist/components/ui/tooltip/tooltip.svelte +7 -0
  192. package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
  193. package/dist/components/viewers/ArchiveViewer.svelte +586 -0
  194. package/dist/components/viewers/ArchiveViewer.svelte.d.ts +7 -0
  195. package/dist/components/viewers/CLAUDE.md +60 -0
  196. package/dist/components/viewers/CodeViewer.svelte +553 -0
  197. package/dist/components/viewers/CodeViewer.svelte.d.ts +7 -0
  198. package/dist/components/viewers/CogViewer.svelte +1345 -0
  199. package/dist/components/viewers/CogViewer.svelte.d.ts +7 -0
  200. package/dist/components/viewers/CopcViewer.svelte +25 -0
  201. package/dist/components/viewers/CopcViewer.svelte.d.ts +7 -0
  202. package/dist/components/viewers/DatabaseViewer.svelte +169 -0
  203. package/dist/components/viewers/DatabaseViewer.svelte.d.ts +7 -0
  204. package/dist/components/viewers/FileInfo.svelte +174 -0
  205. package/dist/components/viewers/FileInfo.svelte.d.ts +10 -0
  206. package/dist/components/viewers/FlatGeobufViewer.svelte +755 -0
  207. package/dist/components/viewers/FlatGeobufViewer.svelte.d.ts +7 -0
  208. package/dist/components/viewers/GeoParquetMapViewer.svelte +278 -0
  209. package/dist/components/viewers/GeoParquetMapViewer.svelte.d.ts +17 -0
  210. package/dist/components/viewers/ImageViewer.svelte +233 -0
  211. package/dist/components/viewers/ImageViewer.svelte.d.ts +7 -0
  212. package/dist/components/viewers/LoadProgress.svelte +93 -0
  213. package/dist/components/viewers/LoadProgress.svelte.d.ts +15 -0
  214. package/dist/components/viewers/MapViewer.svelte +234 -0
  215. package/dist/components/viewers/MapViewer.svelte.d.ts +7 -0
  216. package/dist/components/viewers/MarkdownViewer.svelte +478 -0
  217. package/dist/components/viewers/MarkdownViewer.svelte.d.ts +7 -0
  218. package/dist/components/viewers/MediaViewer.svelte +121 -0
  219. package/dist/components/viewers/MediaViewer.svelte.d.ts +7 -0
  220. package/dist/components/viewers/ModelViewer.svelte +164 -0
  221. package/dist/components/viewers/ModelViewer.svelte.d.ts +7 -0
  222. package/dist/components/viewers/NotebookViewer.svelte +389 -0
  223. package/dist/components/viewers/NotebookViewer.svelte.d.ts +7 -0
  224. package/dist/components/viewers/PdfViewer.svelte +278 -0
  225. package/dist/components/viewers/PdfViewer.svelte.d.ts +7 -0
  226. package/dist/components/viewers/PmtilesViewer.svelte +191 -0
  227. package/dist/components/viewers/PmtilesViewer.svelte.d.ts +7 -0
  228. package/dist/components/viewers/QueryHistoryPanel.svelte +159 -0
  229. package/dist/components/viewers/QueryHistoryPanel.svelte.d.ts +8 -0
  230. package/dist/components/viewers/RawViewer.svelte +117 -0
  231. package/dist/components/viewers/RawViewer.svelte.d.ts +7 -0
  232. package/dist/components/viewers/StacMapViewer.svelte +20 -0
  233. package/dist/components/viewers/StacMapViewer.svelte.d.ts +7 -0
  234. package/dist/components/viewers/StyleEditorOverlay.svelte +27 -0
  235. package/dist/components/viewers/StyleEditorOverlay.svelte.d.ts +7 -0
  236. package/dist/components/viewers/TableGrid.svelte +355 -0
  237. package/dist/components/viewers/TableGrid.svelte.d.ts +12 -0
  238. package/dist/components/viewers/TableStatusBar.svelte +92 -0
  239. package/dist/components/viewers/TableStatusBar.svelte.d.ts +11 -0
  240. package/dist/components/viewers/TableToolbar.svelte +382 -0
  241. package/dist/components/viewers/TableToolbar.svelte.d.ts +25 -0
  242. package/dist/components/viewers/TableViewer.svelte +923 -0
  243. package/dist/components/viewers/TableViewer.svelte.d.ts +7 -0
  244. package/dist/components/viewers/ViewerRouter.svelte +70 -0
  245. package/dist/components/viewers/ViewerRouter.svelte.d.ts +7 -0
  246. package/dist/components/viewers/ZarrMapViewer.svelte +288 -0
  247. package/dist/components/viewers/ZarrMapViewer.svelte.d.ts +17 -0
  248. package/dist/components/viewers/ZarrViewer.svelte +256 -0
  249. package/dist/components/viewers/ZarrViewer.svelte.d.ts +7 -0
  250. package/dist/components/viewers/map/AttributeTable.svelte +52 -0
  251. package/dist/components/viewers/map/AttributeTable.svelte.d.ts +8 -0
  252. package/dist/components/viewers/map/MapContainer.svelte +158 -0
  253. package/dist/components/viewers/map/MapContainer.svelte.d.ts +12 -0
  254. package/dist/components/viewers/pmtiles/PmtilesArchiveView.svelte +389 -0
  255. package/dist/components/viewers/pmtiles/PmtilesArchiveView.svelte.d.ts +10 -0
  256. package/dist/components/viewers/pmtiles/PmtilesMapView.svelte +332 -0
  257. package/dist/components/viewers/pmtiles/PmtilesMapView.svelte.d.ts +11 -0
  258. package/dist/components/viewers/pmtiles/PmtilesTileInspector.svelte +373 -0
  259. package/dist/components/viewers/pmtiles/PmtilesTileInspector.svelte.d.ts +12 -0
  260. package/dist/components/viewers/pmtiles/SvgTileRenderer.svelte +112 -0
  261. package/dist/components/viewers/pmtiles/SvgTileRenderer.svelte.d.ts +10 -0
  262. package/dist/file-icons/CLAUDE.md +21 -0
  263. package/dist/file-icons/FileTypeIcon.svelte +74 -0
  264. package/dist/file-icons/FileTypeIcon.svelte.d.ts +9 -0
  265. package/dist/file-icons/index.d.ts +56 -0
  266. package/dist/file-icons/index.js +1070 -0
  267. package/dist/i18n/CLAUDE.md +19 -0
  268. package/dist/i18n/ar.d.ts +1 -0
  269. package/dist/i18n/ar.js +404 -0
  270. package/dist/i18n/en.d.ts +1 -0
  271. package/dist/i18n/en.js +404 -0
  272. package/dist/i18n/index.svelte.d.ts +9 -0
  273. package/dist/i18n/index.svelte.js +27 -0
  274. package/dist/index.d.ts +20 -0
  275. package/dist/index.js +13 -0
  276. package/dist/query/CLAUDE.md +22 -0
  277. package/dist/query/engine.d.ts +56 -0
  278. package/dist/query/engine.js +6 -0
  279. package/dist/query/index.d.ts +4 -0
  280. package/dist/query/index.js +19 -0
  281. package/dist/query/wasm.d.ts +20 -0
  282. package/dist/query/wasm.js +890 -0
  283. package/dist/storage/CLAUDE.md +23 -0
  284. package/dist/storage/adapter.d.ts +21 -0
  285. package/dist/storage/adapter.js +1 -0
  286. package/dist/storage/browser-azure.d.ts +25 -0
  287. package/dist/storage/browser-azure.js +271 -0
  288. package/dist/storage/browser-cloud.d.ts +32 -0
  289. package/dist/storage/browser-cloud.js +293 -0
  290. package/dist/storage/index.d.ts +11 -0
  291. package/dist/storage/index.js +37 -0
  292. package/dist/storage/url-adapter.d.ts +19 -0
  293. package/dist/storage/url-adapter.js +51 -0
  294. package/dist/stores/CLAUDE.md +29 -0
  295. package/dist/stores/browser.svelte.d.ts +28 -0
  296. package/dist/stores/browser.svelte.js +160 -0
  297. package/dist/stores/connections.svelte.d.ts +56 -0
  298. package/dist/stores/connections.svelte.js +272 -0
  299. package/dist/stores/credentials.svelte.d.ts +56 -0
  300. package/dist/stores/credentials.svelte.js +79 -0
  301. package/dist/stores/files.svelte.d.ts +20 -0
  302. package/dist/stores/files.svelte.js +76 -0
  303. package/dist/stores/query-history.svelte.d.ts +16 -0
  304. package/dist/stores/query-history.svelte.js +57 -0
  305. package/dist/stores/safelock.svelte.d.ts +8 -0
  306. package/dist/stores/safelock.svelte.js +52 -0
  307. package/dist/stores/settings.svelte.d.ts +11 -0
  308. package/dist/stores/settings.svelte.js +101 -0
  309. package/dist/stores/tab-resources.svelte.d.ts +25 -0
  310. package/dist/stores/tab-resources.svelte.js +61 -0
  311. package/dist/stores/tabs.svelte.d.ts +17 -0
  312. package/dist/stores/tabs.svelte.js +110 -0
  313. package/dist/types/notebookjs.d.ts +14 -0
  314. package/dist/types.d.ts +47 -0
  315. package/dist/types.js +1 -0
  316. package/dist/utils/CLAUDE.md +54 -0
  317. package/dist/utils/analytics.d.ts +10 -0
  318. package/dist/utils/analytics.js +38 -0
  319. package/dist/utils/archive.d.ts +70 -0
  320. package/dist/utils/archive.js +333 -0
  321. package/dist/utils/column-types.d.ts +5 -0
  322. package/dist/utils/column-types.js +137 -0
  323. package/dist/utils/deck.d.ts +98 -0
  324. package/dist/utils/deck.js +208 -0
  325. package/dist/utils/evidence-context.d.ts +22 -0
  326. package/dist/utils/evidence-context.js +56 -0
  327. package/dist/utils/export.d.ts +2 -0
  328. package/dist/utils/export.js +51 -0
  329. package/dist/utils/format.d.ts +14 -0
  330. package/dist/utils/format.js +56 -0
  331. package/dist/utils/geoarrow.d.ts +32 -0
  332. package/dist/utils/geoarrow.js +672 -0
  333. package/dist/utils/hex.d.ts +10 -0
  334. package/dist/utils/hex.js +27 -0
  335. package/dist/utils/host-detection.d.ts +23 -0
  336. package/dist/utils/host-detection.js +289 -0
  337. package/dist/utils/map-selection.d.ts +12 -0
  338. package/dist/utils/map-selection.js +45 -0
  339. package/dist/utils/markdown-sql.d.ts +30 -0
  340. package/dist/utils/markdown-sql.js +73 -0
  341. package/dist/utils/markdown.d.ts +18 -0
  342. package/dist/utils/markdown.js +146 -0
  343. package/dist/utils/model3d.d.ts +13 -0
  344. package/dist/utils/model3d.js +62 -0
  345. package/dist/utils/parquet-metadata.d.ts +58 -0
  346. package/dist/utils/parquet-metadata.js +228 -0
  347. package/dist/utils/pdf.d.ts +8 -0
  348. package/dist/utils/pdf.js +28 -0
  349. package/dist/utils/pmtiles-tile.d.ts +38 -0
  350. package/dist/utils/pmtiles-tile.js +64 -0
  351. package/dist/utils/pmtiles.d.ts +46 -0
  352. package/dist/utils/pmtiles.js +135 -0
  353. package/dist/utils/shiki.d.ts +8 -0
  354. package/dist/utils/shiki.js +98 -0
  355. package/dist/utils/storage-url.d.ts +64 -0
  356. package/dist/utils/storage-url.js +374 -0
  357. package/dist/utils/url-state.d.ts +40 -0
  358. package/dist/utils/url-state.js +113 -0
  359. package/dist/utils/url.d.ts +27 -0
  360. package/dist/utils/url.js +115 -0
  361. package/dist/utils/wkb.d.ts +43 -0
  362. package/dist/utils/wkb.js +345 -0
  363. package/dist/utils/zarr.d.ts +39 -0
  364. package/dist/utils/zarr.js +204 -0
  365. package/dist/utils.d.ts +12 -0
  366. package/dist/utils.js +5 -0
  367. package/package.json +203 -0
@@ -0,0 +1,1070 @@
1
+ /**
2
+ * Centralized file type detection module.
3
+ *
4
+ * Single source of truth for extension → icon, color, label, category,
5
+ * viewer, DuckDB read function, MIME type, and queryability.
6
+ *
7
+ * Used by: FileRow, FileTreeSidebar, ViewerRouter, TableViewer, WasmQueryEngine, etc.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Defaults
11
+ // ---------------------------------------------------------------------------
12
+ const DEFAULT_INFO = {
13
+ icon: 'File',
14
+ color: 'text-zinc-400 dark:text-zinc-500',
15
+ label: 'File',
16
+ category: 'other',
17
+ viewer: 'raw',
18
+ queryable: false,
19
+ duckdbReadFn: null,
20
+ mimeType: 'application/octet-stream'
21
+ };
22
+ const FOLDER_INFO = {
23
+ icon: 'Folder',
24
+ color: 'text-blue-500 dark:text-blue-400',
25
+ label: 'Folder',
26
+ category: 'other',
27
+ viewer: 'raw',
28
+ queryable: false,
29
+ duckdbReadFn: null,
30
+ mimeType: 'inode/directory'
31
+ };
32
+ // ---------------------------------------------------------------------------
33
+ // Extension registry
34
+ // ---------------------------------------------------------------------------
35
+ const EXTENSIONS = {
36
+ // ── Data / Tabular ──────────────────────────────────────────────────
37
+ '.parquet': {
38
+ icon: 'Columns3',
39
+ color: 'text-purple-600 dark:text-purple-400',
40
+ label: 'Apache Parquet',
41
+ category: 'data',
42
+ viewer: 'table',
43
+ queryable: true,
44
+ duckdbReadFn: 'read_parquet',
45
+ mimeType: 'application/vnd.apache.parquet'
46
+ },
47
+ '.geoparquet': {
48
+ icon: 'Globe',
49
+ color: 'text-purple-500 dark:text-purple-400',
50
+ label: 'GeoParquet',
51
+ category: 'geo',
52
+ viewer: 'table',
53
+ queryable: true,
54
+ duckdbReadFn: 'read_parquet',
55
+ mimeType: 'application/vnd.apache.parquet'
56
+ },
57
+ '.gpq': {
58
+ icon: 'Globe',
59
+ color: 'text-purple-500 dark:text-purple-400',
60
+ label: 'GeoParquet',
61
+ category: 'geo',
62
+ viewer: 'table',
63
+ queryable: true,
64
+ duckdbReadFn: 'read_parquet',
65
+ mimeType: 'application/vnd.apache.parquet'
66
+ },
67
+ '.gparquet': {
68
+ icon: 'Globe',
69
+ color: 'text-purple-500 dark:text-purple-400',
70
+ label: 'GeoParquet',
71
+ category: 'geo',
72
+ viewer: 'table',
73
+ queryable: true,
74
+ duckdbReadFn: 'read_parquet',
75
+ mimeType: 'application/vnd.apache.parquet'
76
+ },
77
+ '.csv': {
78
+ icon: 'Table',
79
+ color: 'text-green-600 dark:text-green-400',
80
+ label: 'CSV',
81
+ category: 'data',
82
+ viewer: 'table',
83
+ queryable: true,
84
+ duckdbReadFn: 'read_csv',
85
+ mimeType: 'text/csv'
86
+ },
87
+ '.tsv': {
88
+ icon: 'Table',
89
+ color: 'text-green-600 dark:text-green-400',
90
+ label: 'TSV',
91
+ category: 'data',
92
+ viewer: 'table',
93
+ queryable: true,
94
+ duckdbReadFn: 'read_csv',
95
+ mimeType: 'text/tab-separated-values'
96
+ },
97
+ '.json': {
98
+ icon: 'Braces',
99
+ color: 'text-yellow-600 dark:text-yellow-400',
100
+ label: 'JSON',
101
+ category: 'config',
102
+ viewer: 'code',
103
+ queryable: false,
104
+ duckdbReadFn: null,
105
+ mimeType: 'application/json'
106
+ },
107
+ '.jsonl': {
108
+ icon: 'Braces',
109
+ color: 'text-yellow-500 dark:text-yellow-400',
110
+ label: 'JSON Lines',
111
+ category: 'data',
112
+ viewer: 'table',
113
+ queryable: true,
114
+ duckdbReadFn: 'read_json',
115
+ mimeType: 'application/x-jsonlines'
116
+ },
117
+ '.ndjson': {
118
+ icon: 'Braces',
119
+ color: 'text-yellow-500 dark:text-yellow-400',
120
+ label: 'NDJSON',
121
+ category: 'data',
122
+ viewer: 'table',
123
+ queryable: true,
124
+ duckdbReadFn: 'read_json',
125
+ mimeType: 'application/x-ndjson'
126
+ },
127
+ '.geojson': {
128
+ icon: 'Globe',
129
+ color: 'text-emerald-600 dark:text-emerald-400',
130
+ label: 'GeoJSON',
131
+ category: 'geo',
132
+ viewer: 'table',
133
+ queryable: true,
134
+ duckdbReadFn: 'read_json',
135
+ mimeType: 'application/geo+json'
136
+ },
137
+ '.arrow': {
138
+ icon: 'Zap',
139
+ color: 'text-orange-500 dark:text-orange-400',
140
+ label: 'Apache Arrow',
141
+ category: 'data',
142
+ viewer: 'raw',
143
+ queryable: false,
144
+ duckdbReadFn: null,
145
+ mimeType: 'application/vnd.apache.arrow.file'
146
+ },
147
+ '.feather': {
148
+ icon: 'Zap',
149
+ color: 'text-orange-500 dark:text-orange-400',
150
+ label: 'Feather',
151
+ category: 'data',
152
+ viewer: 'raw',
153
+ queryable: false,
154
+ duckdbReadFn: null,
155
+ mimeType: 'application/vnd.apache.arrow.file'
156
+ },
157
+ '.ipc': {
158
+ icon: 'Zap',
159
+ color: 'text-orange-500 dark:text-orange-400',
160
+ label: 'Arrow IPC',
161
+ category: 'data',
162
+ viewer: 'raw',
163
+ queryable: false,
164
+ duckdbReadFn: null,
165
+ mimeType: 'application/vnd.apache.arrow.stream'
166
+ },
167
+ // ── Images ──────────────────────────────────────────────────────────
168
+ '.png': {
169
+ icon: 'Image',
170
+ color: 'text-pink-500 dark:text-pink-400',
171
+ label: 'PNG Image',
172
+ category: 'image',
173
+ viewer: 'image',
174
+ queryable: false,
175
+ duckdbReadFn: null,
176
+ mimeType: 'image/png'
177
+ },
178
+ '.jpg': {
179
+ icon: 'Image',
180
+ color: 'text-pink-500 dark:text-pink-400',
181
+ label: 'JPEG Image',
182
+ category: 'image',
183
+ viewer: 'image',
184
+ queryable: false,
185
+ duckdbReadFn: null,
186
+ mimeType: 'image/jpeg'
187
+ },
188
+ '.jpeg': {
189
+ icon: 'Image',
190
+ color: 'text-pink-500 dark:text-pink-400',
191
+ label: 'JPEG Image',
192
+ category: 'image',
193
+ viewer: 'image',
194
+ queryable: false,
195
+ duckdbReadFn: null,
196
+ mimeType: 'image/jpeg'
197
+ },
198
+ '.gif': {
199
+ icon: 'Image',
200
+ color: 'text-pink-500 dark:text-pink-400',
201
+ label: 'GIF Image',
202
+ category: 'image',
203
+ viewer: 'image',
204
+ queryable: false,
205
+ duckdbReadFn: null,
206
+ mimeType: 'image/gif'
207
+ },
208
+ '.webp': {
209
+ icon: 'Image',
210
+ color: 'text-pink-500 dark:text-pink-400',
211
+ label: 'WebP Image',
212
+ category: 'image',
213
+ viewer: 'image',
214
+ queryable: false,
215
+ duckdbReadFn: null,
216
+ mimeType: 'image/webp'
217
+ },
218
+ '.avif': {
219
+ icon: 'Image',
220
+ color: 'text-pink-500 dark:text-pink-400',
221
+ label: 'AVIF Image',
222
+ category: 'image',
223
+ viewer: 'image',
224
+ queryable: false,
225
+ duckdbReadFn: null,
226
+ mimeType: 'image/avif'
227
+ },
228
+ '.svg': {
229
+ icon: 'Palette',
230
+ color: 'text-pink-600 dark:text-pink-400',
231
+ label: 'SVG',
232
+ category: 'image',
233
+ viewer: 'image',
234
+ queryable: false,
235
+ duckdbReadFn: null,
236
+ mimeType: 'image/svg+xml'
237
+ },
238
+ '.bmp': {
239
+ icon: 'Image',
240
+ color: 'text-pink-500 dark:text-pink-400',
241
+ label: 'BMP Image',
242
+ category: 'image',
243
+ viewer: 'image',
244
+ queryable: false,
245
+ duckdbReadFn: null,
246
+ mimeType: 'image/bmp'
247
+ },
248
+ '.ico': {
249
+ icon: 'Image',
250
+ color: 'text-pink-500 dark:text-pink-400',
251
+ label: 'Icon',
252
+ category: 'image',
253
+ viewer: 'image',
254
+ queryable: false,
255
+ duckdbReadFn: null,
256
+ mimeType: 'image/x-icon'
257
+ },
258
+ // ── Video ───────────────────────────────────────────────────────────
259
+ '.mp4': {
260
+ icon: 'Film',
261
+ color: 'text-violet-500 dark:text-violet-400',
262
+ label: 'MP4 Video',
263
+ category: 'video',
264
+ viewer: 'video',
265
+ queryable: false,
266
+ duckdbReadFn: null,
267
+ mimeType: 'video/mp4'
268
+ },
269
+ '.webm': {
270
+ icon: 'Film',
271
+ color: 'text-violet-500 dark:text-violet-400',
272
+ label: 'WebM Video',
273
+ category: 'video',
274
+ viewer: 'video',
275
+ queryable: false,
276
+ duckdbReadFn: null,
277
+ mimeType: 'video/webm'
278
+ },
279
+ '.mov': {
280
+ icon: 'Film',
281
+ color: 'text-violet-500 dark:text-violet-400',
282
+ label: 'MOV Video',
283
+ category: 'video',
284
+ viewer: 'video',
285
+ queryable: false,
286
+ duckdbReadFn: null,
287
+ mimeType: 'video/quicktime'
288
+ },
289
+ '.avi': {
290
+ icon: 'Film',
291
+ color: 'text-violet-500 dark:text-violet-400',
292
+ label: 'AVI Video',
293
+ category: 'video',
294
+ viewer: 'video',
295
+ queryable: false,
296
+ duckdbReadFn: null,
297
+ mimeType: 'video/x-msvideo'
298
+ },
299
+ '.mkv': {
300
+ icon: 'Film',
301
+ color: 'text-violet-500 dark:text-violet-400',
302
+ label: 'MKV Video',
303
+ category: 'video',
304
+ viewer: 'video',
305
+ queryable: false,
306
+ duckdbReadFn: null,
307
+ mimeType: 'video/x-matroska'
308
+ },
309
+ // ── Audio ───────────────────────────────────────────────────────────
310
+ '.mp3': {
311
+ icon: 'Music',
312
+ color: 'text-rose-500 dark:text-rose-400',
313
+ label: 'MP3 Audio',
314
+ category: 'audio',
315
+ viewer: 'audio',
316
+ queryable: false,
317
+ duckdbReadFn: null,
318
+ mimeType: 'audio/mpeg'
319
+ },
320
+ '.wav': {
321
+ icon: 'Music',
322
+ color: 'text-rose-500 dark:text-rose-400',
323
+ label: 'WAV Audio',
324
+ category: 'audio',
325
+ viewer: 'audio',
326
+ queryable: false,
327
+ duckdbReadFn: null,
328
+ mimeType: 'audio/wav'
329
+ },
330
+ '.ogg': {
331
+ icon: 'Music',
332
+ color: 'text-rose-500 dark:text-rose-400',
333
+ label: 'OGG Audio',
334
+ category: 'audio',
335
+ viewer: 'audio',
336
+ queryable: false,
337
+ duckdbReadFn: null,
338
+ mimeType: 'audio/ogg'
339
+ },
340
+ '.flac': {
341
+ icon: 'Music',
342
+ color: 'text-rose-500 dark:text-rose-400',
343
+ label: 'FLAC Audio',
344
+ category: 'audio',
345
+ viewer: 'audio',
346
+ queryable: false,
347
+ duckdbReadFn: null,
348
+ mimeType: 'audio/flac'
349
+ },
350
+ '.aac': {
351
+ icon: 'Music',
352
+ color: 'text-rose-500 dark:text-rose-400',
353
+ label: 'AAC Audio',
354
+ category: 'audio',
355
+ viewer: 'audio',
356
+ queryable: false,
357
+ duckdbReadFn: null,
358
+ mimeType: 'audio/aac'
359
+ },
360
+ // ── Code ────────────────────────────────────────────────────────────
361
+ '.py': {
362
+ icon: 'FileCode',
363
+ color: 'text-sky-600 dark:text-sky-400',
364
+ label: 'Python',
365
+ category: 'code',
366
+ viewer: 'code',
367
+ queryable: false,
368
+ duckdbReadFn: null,
369
+ mimeType: 'text/x-python'
370
+ },
371
+ '.ts': {
372
+ icon: 'FileCode',
373
+ color: 'text-blue-600 dark:text-blue-400',
374
+ label: 'TypeScript',
375
+ category: 'code',
376
+ viewer: 'code',
377
+ queryable: false,
378
+ duckdbReadFn: null,
379
+ mimeType: 'text/typescript'
380
+ },
381
+ '.js': {
382
+ icon: 'FileCode',
383
+ color: 'text-yellow-500 dark:text-yellow-400',
384
+ label: 'JavaScript',
385
+ category: 'code',
386
+ viewer: 'code',
387
+ queryable: false,
388
+ duckdbReadFn: null,
389
+ mimeType: 'text/javascript'
390
+ },
391
+ '.rs': {
392
+ icon: 'FileCode',
393
+ color: 'text-orange-700 dark:text-orange-400',
394
+ label: 'Rust',
395
+ category: 'code',
396
+ viewer: 'code',
397
+ queryable: false,
398
+ duckdbReadFn: null,
399
+ mimeType: 'text/x-rust'
400
+ },
401
+ '.go': {
402
+ icon: 'FileCode',
403
+ color: 'text-cyan-600 dark:text-cyan-400',
404
+ label: 'Go',
405
+ category: 'code',
406
+ viewer: 'code',
407
+ queryable: false,
408
+ duckdbReadFn: null,
409
+ mimeType: 'text/x-go'
410
+ },
411
+ '.java': {
412
+ icon: 'FileCode',
413
+ color: 'text-red-600 dark:text-red-400',
414
+ label: 'Java',
415
+ category: 'code',
416
+ viewer: 'code',
417
+ queryable: false,
418
+ duckdbReadFn: null,
419
+ mimeType: 'text/x-java'
420
+ },
421
+ '.c': {
422
+ icon: 'FileCode',
423
+ color: 'text-blue-500 dark:text-blue-400',
424
+ label: 'C',
425
+ category: 'code',
426
+ viewer: 'code',
427
+ queryable: false,
428
+ duckdbReadFn: null,
429
+ mimeType: 'text/x-c'
430
+ },
431
+ '.cpp': {
432
+ icon: 'FileCode',
433
+ color: 'text-blue-500 dark:text-blue-400',
434
+ label: 'C++',
435
+ category: 'code',
436
+ viewer: 'code',
437
+ queryable: false,
438
+ duckdbReadFn: null,
439
+ mimeType: 'text/x-c++'
440
+ },
441
+ '.h': {
442
+ icon: 'FileCode',
443
+ color: 'text-blue-500 dark:text-blue-400',
444
+ label: 'C Header',
445
+ category: 'code',
446
+ viewer: 'code',
447
+ queryable: false,
448
+ duckdbReadFn: null,
449
+ mimeType: 'text/x-c'
450
+ },
451
+ '.hpp': {
452
+ icon: 'FileCode',
453
+ color: 'text-blue-500 dark:text-blue-400',
454
+ label: 'C++ Header',
455
+ category: 'code',
456
+ viewer: 'code',
457
+ queryable: false,
458
+ duckdbReadFn: null,
459
+ mimeType: 'text/x-c++'
460
+ },
461
+ '.rb': {
462
+ icon: 'FileCode',
463
+ color: 'text-red-500 dark:text-red-400',
464
+ label: 'Ruby',
465
+ category: 'code',
466
+ viewer: 'code',
467
+ queryable: false,
468
+ duckdbReadFn: null,
469
+ mimeType: 'text/x-ruby'
470
+ },
471
+ '.php': {
472
+ icon: 'FileCode',
473
+ color: 'text-indigo-500 dark:text-indigo-400',
474
+ label: 'PHP',
475
+ category: 'code',
476
+ viewer: 'code',
477
+ queryable: false,
478
+ duckdbReadFn: null,
479
+ mimeType: 'text/x-php'
480
+ },
481
+ '.swift': {
482
+ icon: 'FileCode',
483
+ color: 'text-orange-500 dark:text-orange-400',
484
+ label: 'Swift',
485
+ category: 'code',
486
+ viewer: 'code',
487
+ queryable: false,
488
+ duckdbReadFn: null,
489
+ mimeType: 'text/x-swift'
490
+ },
491
+ '.kt': {
492
+ icon: 'FileCode',
493
+ color: 'text-violet-600 dark:text-violet-400',
494
+ label: 'Kotlin',
495
+ category: 'code',
496
+ viewer: 'code',
497
+ queryable: false,
498
+ duckdbReadFn: null,
499
+ mimeType: 'text/x-kotlin'
500
+ },
501
+ '.scala': {
502
+ icon: 'FileCode',
503
+ color: 'text-red-600 dark:text-red-400',
504
+ label: 'Scala',
505
+ category: 'code',
506
+ viewer: 'code',
507
+ queryable: false,
508
+ duckdbReadFn: null,
509
+ mimeType: 'text/x-scala'
510
+ },
511
+ '.r': {
512
+ icon: 'FileCode',
513
+ color: 'text-blue-600 dark:text-blue-400',
514
+ label: 'R',
515
+ category: 'code',
516
+ viewer: 'code',
517
+ queryable: false,
518
+ duckdbReadFn: null,
519
+ mimeType: 'text/x-r'
520
+ },
521
+ '.lua': {
522
+ icon: 'FileCode',
523
+ color: 'text-blue-800 dark:text-blue-400',
524
+ label: 'Lua',
525
+ category: 'code',
526
+ viewer: 'code',
527
+ queryable: false,
528
+ duckdbReadFn: null,
529
+ mimeType: 'text/x-lua'
530
+ },
531
+ '.html': {
532
+ icon: 'Globe',
533
+ color: 'text-orange-600 dark:text-orange-400',
534
+ label: 'HTML',
535
+ category: 'code',
536
+ viewer: 'code',
537
+ queryable: false,
538
+ duckdbReadFn: null,
539
+ mimeType: 'text/html'
540
+ },
541
+ '.css': {
542
+ icon: 'Paintbrush',
543
+ color: 'text-blue-500 dark:text-blue-400',
544
+ label: 'CSS',
545
+ category: 'code',
546
+ viewer: 'code',
547
+ queryable: false,
548
+ duckdbReadFn: null,
549
+ mimeType: 'text/css'
550
+ },
551
+ '.sql': {
552
+ icon: 'DatabaseZap',
553
+ color: 'text-blue-500 dark:text-blue-400',
554
+ label: 'SQL',
555
+ category: 'code',
556
+ viewer: 'code',
557
+ queryable: false,
558
+ duckdbReadFn: null,
559
+ mimeType: 'text/x-sql'
560
+ },
561
+ '.sh': {
562
+ icon: 'Terminal',
563
+ color: 'text-green-600 dark:text-green-400',
564
+ label: 'Shell Script',
565
+ category: 'code',
566
+ viewer: 'code',
567
+ queryable: false,
568
+ duckdbReadFn: null,
569
+ mimeType: 'text/x-shellscript'
570
+ },
571
+ '.bash': {
572
+ icon: 'Terminal',
573
+ color: 'text-green-600 dark:text-green-400',
574
+ label: 'Bash Script',
575
+ category: 'code',
576
+ viewer: 'code',
577
+ queryable: false,
578
+ duckdbReadFn: null,
579
+ mimeType: 'text/x-shellscript'
580
+ },
581
+ '.vim': {
582
+ icon: 'FileCode',
583
+ color: 'text-green-700 dark:text-green-400',
584
+ label: 'Vim Script',
585
+ category: 'code',
586
+ viewer: 'code',
587
+ queryable: false,
588
+ duckdbReadFn: null,
589
+ mimeType: 'text/plain'
590
+ },
591
+ '.dockerfile': {
592
+ icon: 'FileCode',
593
+ color: 'text-blue-600 dark:text-blue-400',
594
+ label: 'Dockerfile',
595
+ category: 'code',
596
+ viewer: 'code',
597
+ queryable: false,
598
+ duckdbReadFn: null,
599
+ mimeType: 'text/plain'
600
+ },
601
+ '.makefile': {
602
+ icon: 'FileCode',
603
+ color: 'text-orange-600 dark:text-orange-400',
604
+ label: 'Makefile',
605
+ category: 'code',
606
+ viewer: 'code',
607
+ queryable: false,
608
+ duckdbReadFn: null,
609
+ mimeType: 'text/plain'
610
+ },
611
+ // ── Documents ───────────────────────────────────────────────────────
612
+ '.md': {
613
+ icon: 'BookText',
614
+ color: 'text-blue-500 dark:text-blue-400',
615
+ label: 'Markdown',
616
+ category: 'document',
617
+ viewer: 'markdown',
618
+ queryable: false,
619
+ duckdbReadFn: null,
620
+ mimeType: 'text/markdown'
621
+ },
622
+ '.markdown': {
623
+ icon: 'BookText',
624
+ color: 'text-blue-500 dark:text-blue-400',
625
+ label: 'Markdown',
626
+ category: 'document',
627
+ viewer: 'markdown',
628
+ queryable: false,
629
+ duckdbReadFn: null,
630
+ mimeType: 'text/markdown'
631
+ },
632
+ '.pdf': {
633
+ icon: 'FileText',
634
+ color: 'text-red-600 dark:text-red-400',
635
+ label: 'PDF',
636
+ category: 'document',
637
+ viewer: 'pdf',
638
+ queryable: false,
639
+ duckdbReadFn: null,
640
+ mimeType: 'application/pdf'
641
+ },
642
+ '.txt': {
643
+ icon: 'FileText',
644
+ color: 'text-zinc-500 dark:text-zinc-400',
645
+ label: 'Text',
646
+ category: 'document',
647
+ viewer: 'code',
648
+ queryable: false,
649
+ duckdbReadFn: null,
650
+ mimeType: 'text/plain'
651
+ },
652
+ '.log': {
653
+ icon: 'FileText',
654
+ color: 'text-zinc-500 dark:text-zinc-400',
655
+ label: 'Log File',
656
+ category: 'document',
657
+ viewer: 'code',
658
+ queryable: false,
659
+ duckdbReadFn: null,
660
+ mimeType: 'text/plain'
661
+ },
662
+ // ── Config ──────────────────────────────────────────────────────────
663
+ '.xml': {
664
+ icon: 'FileCode',
665
+ color: 'text-orange-500 dark:text-orange-400',
666
+ label: 'XML',
667
+ category: 'config',
668
+ viewer: 'code',
669
+ queryable: false,
670
+ duckdbReadFn: null,
671
+ mimeType: 'application/xml'
672
+ },
673
+ '.yaml': {
674
+ icon: 'Settings',
675
+ color: 'text-zinc-500 dark:text-zinc-400',
676
+ label: 'YAML',
677
+ category: 'config',
678
+ viewer: 'code',
679
+ queryable: false,
680
+ duckdbReadFn: null,
681
+ mimeType: 'text/yaml'
682
+ },
683
+ '.yml': {
684
+ icon: 'Settings',
685
+ color: 'text-zinc-500 dark:text-zinc-400',
686
+ label: 'YAML',
687
+ category: 'config',
688
+ viewer: 'code',
689
+ queryable: false,
690
+ duckdbReadFn: null,
691
+ mimeType: 'text/yaml'
692
+ },
693
+ '.toml': {
694
+ icon: 'Settings',
695
+ color: 'text-zinc-500 dark:text-zinc-400',
696
+ label: 'TOML',
697
+ category: 'config',
698
+ viewer: 'code',
699
+ queryable: false,
700
+ duckdbReadFn: null,
701
+ mimeType: 'text/plain'
702
+ },
703
+ '.ini': {
704
+ icon: 'Settings',
705
+ color: 'text-zinc-500 dark:text-zinc-400',
706
+ label: 'INI',
707
+ category: 'config',
708
+ viewer: 'code',
709
+ queryable: false,
710
+ duckdbReadFn: null,
711
+ mimeType: 'text/plain'
712
+ },
713
+ '.cfg': {
714
+ icon: 'Settings',
715
+ color: 'text-zinc-500 dark:text-zinc-400',
716
+ label: 'Config',
717
+ category: 'config',
718
+ viewer: 'code',
719
+ queryable: false,
720
+ duckdbReadFn: null,
721
+ mimeType: 'text/plain'
722
+ },
723
+ '.conf': {
724
+ icon: 'Settings',
725
+ color: 'text-zinc-500 dark:text-zinc-400',
726
+ label: 'Config',
727
+ category: 'config',
728
+ viewer: 'code',
729
+ queryable: false,
730
+ duckdbReadFn: null,
731
+ mimeType: 'text/plain'
732
+ },
733
+ '.env': {
734
+ icon: 'Settings',
735
+ color: 'text-zinc-500 dark:text-zinc-400',
736
+ label: 'Environment',
737
+ category: 'config',
738
+ viewer: 'code',
739
+ queryable: false,
740
+ duckdbReadFn: null,
741
+ mimeType: 'text/plain'
742
+ },
743
+ // ── Archives ────────────────────────────────────────────────────────
744
+ '.zip': {
745
+ icon: 'Archive',
746
+ color: 'text-amber-600 dark:text-amber-400',
747
+ label: 'ZIP Archive',
748
+ category: 'archive',
749
+ viewer: 'archive',
750
+ queryable: false,
751
+ duckdbReadFn: null,
752
+ mimeType: 'application/zip'
753
+ },
754
+ '.tar': {
755
+ icon: 'Archive',
756
+ color: 'text-amber-600 dark:text-amber-400',
757
+ label: 'TAR Archive',
758
+ category: 'archive',
759
+ viewer: 'archive',
760
+ queryable: false,
761
+ duckdbReadFn: null,
762
+ mimeType: 'application/x-tar'
763
+ },
764
+ '.gz': {
765
+ icon: 'Archive',
766
+ color: 'text-amber-600 dark:text-amber-400',
767
+ label: 'GZIP',
768
+ category: 'archive',
769
+ viewer: 'archive',
770
+ queryable: false,
771
+ duckdbReadFn: null,
772
+ mimeType: 'application/gzip'
773
+ },
774
+ '.tgz': {
775
+ icon: 'Archive',
776
+ color: 'text-amber-600 dark:text-amber-400',
777
+ label: 'TGZ Archive',
778
+ category: 'archive',
779
+ viewer: 'archive',
780
+ queryable: false,
781
+ duckdbReadFn: null,
782
+ mimeType: 'application/gzip'
783
+ },
784
+ '.7z': {
785
+ icon: 'Archive',
786
+ color: 'text-amber-600 dark:text-amber-400',
787
+ label: '7-Zip',
788
+ category: 'archive',
789
+ viewer: 'archive',
790
+ queryable: false,
791
+ duckdbReadFn: null,
792
+ mimeType: 'application/x-7z-compressed'
793
+ },
794
+ '.rar': {
795
+ icon: 'Archive',
796
+ color: 'text-amber-600 dark:text-amber-400',
797
+ label: 'RAR',
798
+ category: 'archive',
799
+ viewer: 'archive',
800
+ queryable: false,
801
+ duckdbReadFn: null,
802
+ mimeType: 'application/vnd.rar'
803
+ },
804
+ '.bz2': {
805
+ icon: 'Archive',
806
+ color: 'text-amber-600 dark:text-amber-400',
807
+ label: 'BZIP2',
808
+ category: 'archive',
809
+ viewer: 'archive',
810
+ queryable: false,
811
+ duckdbReadFn: null,
812
+ mimeType: 'application/x-bzip2'
813
+ },
814
+ // ── Geo / Map ───────────────────────────────────────────────────────
815
+ '.tif': {
816
+ icon: 'Map',
817
+ color: 'text-green-600 dark:text-green-400',
818
+ label: 'GeoTIFF',
819
+ category: 'geo',
820
+ viewer: 'cog',
821
+ queryable: false,
822
+ duckdbReadFn: null,
823
+ mimeType: 'image/tiff'
824
+ },
825
+ '.tiff': {
826
+ icon: 'Map',
827
+ color: 'text-green-600 dark:text-green-400',
828
+ label: 'GeoTIFF',
829
+ category: 'geo',
830
+ viewer: 'cog',
831
+ queryable: false,
832
+ duckdbReadFn: null,
833
+ mimeType: 'image/tiff'
834
+ },
835
+ '.pmtiles': {
836
+ icon: 'Layers',
837
+ color: 'text-teal-600 dark:text-teal-400',
838
+ label: 'PMTiles',
839
+ category: 'geo',
840
+ viewer: 'pmtiles',
841
+ queryable: false,
842
+ duckdbReadFn: null,
843
+ mimeType: 'application/octet-stream'
844
+ },
845
+ '.fgb': {
846
+ icon: 'Globe',
847
+ color: 'text-teal-500 dark:text-teal-400',
848
+ label: 'FlatGeobuf',
849
+ category: 'geo',
850
+ viewer: 'flatgeobuf',
851
+ queryable: false,
852
+ duckdbReadFn: null,
853
+ mimeType: 'application/octet-stream'
854
+ },
855
+ '.shp': {
856
+ icon: 'Globe',
857
+ color: 'text-green-600 dark:text-green-400',
858
+ label: 'Shapefile',
859
+ category: 'geo',
860
+ viewer: 'table',
861
+ queryable: true,
862
+ duckdbReadFn: 'ST_Read',
863
+ mimeType: 'application/x-esri-shape'
864
+ },
865
+ '.gpkg': {
866
+ icon: 'Database',
867
+ color: 'text-green-600 dark:text-green-400',
868
+ label: 'GeoPackage',
869
+ category: 'geo',
870
+ viewer: 'table',
871
+ queryable: true,
872
+ duckdbReadFn: 'ST_Read',
873
+ mimeType: 'application/geopackage+sqlite3'
874
+ },
875
+ // ── Database ────────────────────────────────────────────────────────
876
+ '.duckdb': {
877
+ icon: 'Database',
878
+ color: 'text-yellow-600 dark:text-yellow-400',
879
+ label: 'DuckDB',
880
+ category: 'database',
881
+ viewer: 'database',
882
+ queryable: true,
883
+ duckdbReadFn: null,
884
+ mimeType: 'application/octet-stream'
885
+ },
886
+ '.sqlite': {
887
+ icon: 'Database',
888
+ color: 'text-sky-600 dark:text-sky-400',
889
+ label: 'SQLite',
890
+ category: 'database',
891
+ viewer: 'database',
892
+ queryable: false,
893
+ duckdbReadFn: null,
894
+ mimeType: 'application/x-sqlite3'
895
+ },
896
+ '.db': {
897
+ icon: 'Database',
898
+ color: 'text-amber-500 dark:text-amber-400',
899
+ label: 'Database',
900
+ category: 'database',
901
+ viewer: 'database',
902
+ queryable: false,
903
+ duckdbReadFn: null,
904
+ mimeType: 'application/octet-stream'
905
+ },
906
+ // ── 3D Models ───────────────────────────────────────────────────────
907
+ '.glb': {
908
+ icon: 'Box',
909
+ color: 'text-violet-600 dark:text-violet-400',
910
+ label: 'GLB Model',
911
+ category: '3d',
912
+ viewer: '3d',
913
+ queryable: false,
914
+ duckdbReadFn: null,
915
+ mimeType: 'model/gltf-binary'
916
+ },
917
+ '.gltf': {
918
+ icon: 'Box',
919
+ color: 'text-violet-600 dark:text-violet-400',
920
+ label: 'glTF Model',
921
+ category: '3d',
922
+ viewer: '3d',
923
+ queryable: false,
924
+ duckdbReadFn: null,
925
+ mimeType: 'model/gltf+json'
926
+ },
927
+ '.obj': {
928
+ icon: 'Box',
929
+ color: 'text-violet-600 dark:text-violet-400',
930
+ label: 'OBJ Model',
931
+ category: '3d',
932
+ viewer: '3d',
933
+ queryable: false,
934
+ duckdbReadFn: null,
935
+ mimeType: 'text/plain'
936
+ },
937
+ '.stl': {
938
+ icon: 'Box',
939
+ color: 'text-violet-600 dark:text-violet-400',
940
+ label: 'STL Model',
941
+ category: '3d',
942
+ viewer: '3d',
943
+ queryable: false,
944
+ duckdbReadFn: null,
945
+ mimeType: 'model/stl'
946
+ },
947
+ '.fbx': {
948
+ icon: 'Box',
949
+ color: 'text-violet-600 dark:text-violet-400',
950
+ label: 'FBX Model',
951
+ category: '3d',
952
+ viewer: '3d',
953
+ queryable: false,
954
+ duckdbReadFn: null,
955
+ mimeType: 'application/octet-stream'
956
+ },
957
+ // ── Notebooks ───────────────────────────────────────────────────────
958
+ '.ipynb': {
959
+ icon: 'BookOpen',
960
+ color: 'text-orange-600 dark:text-orange-400',
961
+ label: 'Jupyter Notebook',
962
+ category: 'code',
963
+ viewer: 'notebook',
964
+ queryable: false,
965
+ duckdbReadFn: null,
966
+ mimeType: 'application/x-ipynb+json'
967
+ },
968
+ // ── Special ─────────────────────────────────────────────────────────
969
+ '.zarr': {
970
+ icon: 'Layers',
971
+ color: 'text-purple-500 dark:text-purple-400',
972
+ label: 'Zarr',
973
+ category: 'data',
974
+ viewer: 'zarr',
975
+ queryable: false,
976
+ duckdbReadFn: null,
977
+ mimeType: 'application/octet-stream'
978
+ },
979
+ '.zr3': {
980
+ icon: 'Layers',
981
+ color: 'text-purple-500 dark:text-purple-400',
982
+ label: 'Zarr',
983
+ category: 'data',
984
+ viewer: 'zarr',
985
+ queryable: false,
986
+ duckdbReadFn: null,
987
+ mimeType: 'application/octet-stream'
988
+ },
989
+ // ── Point Cloud ─────────────────────────────────────────────────────
990
+ '.laz': {
991
+ icon: 'Orbit',
992
+ color: 'text-cyan-600 dark:text-cyan-400',
993
+ label: 'COPC / LAZ',
994
+ category: 'geo',
995
+ viewer: 'copc',
996
+ queryable: false,
997
+ duckdbReadFn: null,
998
+ mimeType: 'application/octet-stream'
999
+ },
1000
+ '.las': {
1001
+ icon: 'Orbit',
1002
+ color: 'text-cyan-600 dark:text-cyan-400',
1003
+ label: 'LAS Point Cloud',
1004
+ category: 'geo',
1005
+ viewer: 'copc',
1006
+ queryable: false,
1007
+ duckdbReadFn: null,
1008
+ mimeType: 'application/octet-stream'
1009
+ }
1010
+ };
1011
+ // ---------------------------------------------------------------------------
1012
+ // Public API
1013
+ // ---------------------------------------------------------------------------
1014
+ /**
1015
+ * Returns full file type information for a given extension.
1016
+ * Extension may be with or without leading dot: ".parquet" or "parquet".
1017
+ */
1018
+ export function getFileTypeInfo(extension, isDir = false) {
1019
+ if (isDir)
1020
+ return FOLDER_INFO;
1021
+ const ext = extension.startsWith('.') ? extension.toLowerCase() : `.${extension.toLowerCase()}`;
1022
+ return EXTENSIONS[ext] ?? DEFAULT_INFO;
1023
+ }
1024
+ /** Returns the DuckDB read function name for a file path. Falls back to read_parquet. */
1025
+ export function getDuckDbReadFn(pathOrExt) {
1026
+ const ext = pathOrExt.includes('.') ? `.${pathOrExt.split('.').pop().toLowerCase()}` : '';
1027
+ return EXTENSIONS[ext]?.duckdbReadFn ?? 'read_parquet';
1028
+ }
1029
+ /**
1030
+ * Returns a DuckDB FROM-clause expression for a file.
1031
+ *
1032
+ * For GeoJSON files the raw `read_json_auto` returns a single row with the
1033
+ * FeatureCollection structure (`type`, `features`, `bbox`). This helper
1034
+ * unnests the features array so each feature becomes its own row with
1035
+ * property columns + a geometry column.
1036
+ */
1037
+ export function buildDuckDbSource(pathOrExt, url) {
1038
+ const ext = pathOrExt.includes('.') ? `.${pathOrExt.split('.').pop().toLowerCase()}` : '';
1039
+ if (ext === '.geojson') {
1040
+ return `(SELECT unnest(feature.properties), to_json(feature.geometry)::VARCHAR AS geometry FROM (SELECT unnest(features) AS feature FROM read_json_auto('${url}', maximum_object_size=1073741824, ignore_errors=true)))`;
1041
+ }
1042
+ const readFn = EXTENSIONS[ext]?.duckdbReadFn ?? 'read_parquet';
1043
+ return `${readFn}('${url}')`;
1044
+ }
1045
+ /**
1046
+ * Cloud-native formats that DuckDB can query via range requests — metadata
1047
+ * reads (schema, row count) are cheap and don't download the full file.
1048
+ *
1049
+ * Other cloud-native formats (.fgb, .pmtiles, .zarr) also support range
1050
+ * requests but have dedicated viewers and don't go through DuckDB/TableViewer.
1051
+ */
1052
+ const CLOUD_NATIVE_EXTS = new Set(['.parquet', '.geoparquet', '.gpq', '.gparquet']);
1053
+ export function isCloudNativeFormat(pathOrExt) {
1054
+ const ext = pathOrExt.includes('.') ? `.${pathOrExt.split('.').pop().toLowerCase()}` : '';
1055
+ return CLOUD_NATIVE_EXTS.has(ext);
1056
+ }
1057
+ /** Returns the viewer kind for a given extension. */
1058
+ export function getViewerKind(extension) {
1059
+ return getFileTypeInfo(extension).viewer;
1060
+ }
1061
+ /** Returns whether a file can be queried with DuckDB. */
1062
+ export function isQueryable(extension) {
1063
+ return getFileTypeInfo(extension).queryable;
1064
+ }
1065
+ /** Returns the MIME type for a file extension. */
1066
+ export function getMimeType(extension) {
1067
+ return getFileTypeInfo(extension).mimeType;
1068
+ }
1069
+ /** Re-export folder info for components that need it directly. */
1070
+ export { FOLDER_INFO, DEFAULT_INFO };