@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,8 @@
1
+ import type { BundledLanguage, BundledTheme } from 'shiki';
2
+ export declare function extensionToShikiLang(ext: string): BundledLanguage | undefined;
3
+ export declare function getTheme(): BundledTheme;
4
+ /** Reversed theme for code blocks inside documents (dark on light, light on dark). */
5
+ export declare function getReversedTheme(): BundledTheme;
6
+ export declare function highlightCode(code: string, lang?: BundledLanguage): Promise<string>;
7
+ /** Highlight with reversed theme (for code blocks inside documents). */
8
+ export declare function highlightCodeReversed(code: string, lang?: BundledLanguage): Promise<string>;
@@ -0,0 +1,98 @@
1
+ let highlighterPromise = null;
2
+ const extToLang = {
3
+ '.js': 'javascript',
4
+ '.mjs': 'javascript',
5
+ '.cjs': 'javascript',
6
+ '.jsx': 'jsx',
7
+ '.ts': 'typescript',
8
+ '.tsx': 'tsx',
9
+ '.py': 'python',
10
+ '.rs': 'rust',
11
+ '.go': 'go',
12
+ '.java': 'java',
13
+ '.c': 'c',
14
+ '.cpp': 'cpp',
15
+ '.h': 'c',
16
+ '.hpp': 'cpp',
17
+ '.rb': 'ruby',
18
+ '.php': 'php',
19
+ '.swift': 'swift',
20
+ '.kt': 'kotlin',
21
+ '.scala': 'scala',
22
+ '.r': 'r',
23
+ '.lua': 'lua',
24
+ '.sql': 'sql',
25
+ '.html': 'html',
26
+ '.css': 'css',
27
+ '.scss': 'scss',
28
+ '.less': 'less',
29
+ '.xml': 'xml',
30
+ '.yaml': 'yaml',
31
+ '.yml': 'yaml',
32
+ '.toml': 'toml',
33
+ '.json': 'json',
34
+ '.jsonl': 'json',
35
+ '.ndjson': 'json',
36
+ '.sh': 'bash',
37
+ '.bash': 'bash',
38
+ '.zsh': 'bash',
39
+ '.fish': 'fish',
40
+ '.ps1': 'powershell',
41
+ '.vim': 'viml',
42
+ '.dockerfile': 'dockerfile',
43
+ '.makefile': 'makefile',
44
+ '.md': 'markdown',
45
+ '.markdown': 'markdown',
46
+ '.ini': 'ini',
47
+ '.cfg': 'ini',
48
+ '.conf': 'ini',
49
+ '.env': 'dotenv',
50
+ '.svelte': 'svelte',
51
+ '.vue': 'vue',
52
+ '.tf': 'hcl',
53
+ '.graphql': 'graphql',
54
+ '.gql': 'graphql',
55
+ '.prisma': 'prisma',
56
+ '.proto': 'proto'
57
+ };
58
+ export function extensionToShikiLang(ext) {
59
+ return extToLang[ext.toLowerCase()];
60
+ }
61
+ function isDarkMode() {
62
+ if (typeof document === 'undefined')
63
+ return false;
64
+ return document.documentElement.classList.contains('dark');
65
+ }
66
+ export function getTheme() {
67
+ return isDarkMode() ? 'github-dark' : 'github-light';
68
+ }
69
+ /** Reversed theme for code blocks inside documents (dark on light, light on dark). */
70
+ export function getReversedTheme() {
71
+ return isDarkMode() ? 'github-light' : 'github-dark';
72
+ }
73
+ async function getHighlighter() {
74
+ if (!highlighterPromise) {
75
+ highlighterPromise = import('shiki').then((mod) => mod.createHighlighter({
76
+ themes: ['github-dark', 'github-light'],
77
+ langs: Object.values(extToLang).filter((v, i, a) => a.indexOf(v) === i)
78
+ }));
79
+ }
80
+ return highlighterPromise;
81
+ }
82
+ export async function highlightCode(code, lang) {
83
+ const highlighter = await getHighlighter();
84
+ const theme = getTheme();
85
+ return highlighter.codeToHtml(code, {
86
+ lang: lang ?? 'text',
87
+ theme
88
+ });
89
+ }
90
+ /** Highlight with reversed theme (for code blocks inside documents). */
91
+ export async function highlightCodeReversed(code, lang) {
92
+ const highlighter = await getHighlighter();
93
+ const theme = getReversedTheme();
94
+ return highlighter.codeToHtml(code, {
95
+ lang: lang ?? 'text',
96
+ theme
97
+ });
98
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Universal cloud storage URL / bucket parser.
3
+ *
4
+ * Accepts the many URI/URL formats that users commonly paste and extracts
5
+ * the correct bucket, region, endpoint, and provider.
6
+ *
7
+ * Supported URI schemes:
8
+ * s3:// s3a:// s3n:// aws:// — Amazon S3 / S3-compatible
9
+ * r2:// — Cloudflare R2
10
+ * gs:// gcs:// — Google Cloud Storage
11
+ * azure:// az:// — Azure Blob Storage
12
+ * abfs:// abfss:// — Azure Data Lake (ADLS Gen2)
13
+ * wasbs:// — Azure Blob (Hadoop WASB driver)
14
+ * swift:// — OpenStack Swift
15
+ * file:// filesystem:// — Local filesystem
16
+ *
17
+ * Supported HTTPS URL patterns:
18
+ * https://<bucket>.s3.<region>.amazonaws.com[/prefix] — AWS virtual-hosted
19
+ * https://s3.<region>.amazonaws.com/<bucket>[/prefix] — AWS path-style
20
+ * https://s3.amazonaws.com/<bucket> — AWS global
21
+ * https://<account>.r2.cloudflarestorage.com/<bucket> — Cloudflare R2
22
+ * https://storage.googleapis.com/<bucket> — Google Cloud Storage
23
+ * https://<bucket>.storage.googleapis.com[/prefix] — GCS virtual-hosted
24
+ * https://<bucket>.<region>.digitaloceanspaces.com — DigitalOcean Spaces
25
+ * https://<region>.digitaloceanspaces.com/<bucket> — DO Spaces path-style
26
+ * https://s3.<region>.wasabisys.com/<bucket> — Wasabi
27
+ * https://f<id>.backblazeb2.com/file/<bucket> — Backblaze B2
28
+ * https://<bucket>.s3.<region>.backblazeb2.com — B2 S3-compatible
29
+ * https://<bucket>.oss-<region>.aliyuncs.com — Alibaba Cloud OSS
30
+ * https://<bucket>.cos.<region>.myqcloud.com — Tencent COS
31
+ * https://storage.yandexcloud.net/<bucket> — Yandex Cloud
32
+ * https://gateway.storjshare.io/<bucket> — Storj S3 gateway
33
+ * https://link.storjshare.io/raw/<access>/<bucket> — Storj linksharing
34
+ * https://<custom-endpoint>/<bucket> — Generic S3-compatible
35
+ *
36
+ * Also handles plain bucket names (no protocol).
37
+ */
38
+ export type StorageProvider = 's3' | 'gcs' | 'r2' | 'minio' | 'azure' | 'storj' | 'unknown';
39
+ export interface ParsedStorageUrl {
40
+ bucket: string;
41
+ region: string;
42
+ endpoint: string;
43
+ provider: StorageProvider;
44
+ /** Original prefix/path after bucket, if any */
45
+ prefix: string;
46
+ }
47
+ export interface Defaults {
48
+ region?: string;
49
+ endpoint?: string;
50
+ provider?: StorageProvider;
51
+ }
52
+ /**
53
+ * Parse a user-provided bucket/URL string into structured storage connection parts.
54
+ */
55
+ export declare function parseStorageUrl(input: string, defaults?: Defaults): ParsedStorageUrl;
56
+ /**
57
+ * Returns true if the input looks like a URL/URI rather than a plain bucket name.
58
+ * Covers all recognized cloud storage URI schemes.
59
+ */
60
+ export declare function looksLikeUrl(input: string): boolean;
61
+ /**
62
+ * Given a parsed URL result, build a human-readable summary of what was detected.
63
+ */
64
+ export declare function describeParseResult(parsed: ParsedStorageUrl): string;
@@ -0,0 +1,374 @@
1
+ /**
2
+ * Universal cloud storage URL / bucket parser.
3
+ *
4
+ * Accepts the many URI/URL formats that users commonly paste and extracts
5
+ * the correct bucket, region, endpoint, and provider.
6
+ *
7
+ * Supported URI schemes:
8
+ * s3:// s3a:// s3n:// aws:// — Amazon S3 / S3-compatible
9
+ * r2:// — Cloudflare R2
10
+ * gs:// gcs:// — Google Cloud Storage
11
+ * azure:// az:// — Azure Blob Storage
12
+ * abfs:// abfss:// — Azure Data Lake (ADLS Gen2)
13
+ * wasbs:// — Azure Blob (Hadoop WASB driver)
14
+ * swift:// — OpenStack Swift
15
+ * file:// filesystem:// — Local filesystem
16
+ *
17
+ * Supported HTTPS URL patterns:
18
+ * https://<bucket>.s3.<region>.amazonaws.com[/prefix] — AWS virtual-hosted
19
+ * https://s3.<region>.amazonaws.com/<bucket>[/prefix] — AWS path-style
20
+ * https://s3.amazonaws.com/<bucket> — AWS global
21
+ * https://<account>.r2.cloudflarestorage.com/<bucket> — Cloudflare R2
22
+ * https://storage.googleapis.com/<bucket> — Google Cloud Storage
23
+ * https://<bucket>.storage.googleapis.com[/prefix] — GCS virtual-hosted
24
+ * https://<bucket>.<region>.digitaloceanspaces.com — DigitalOcean Spaces
25
+ * https://<region>.digitaloceanspaces.com/<bucket> — DO Spaces path-style
26
+ * https://s3.<region>.wasabisys.com/<bucket> — Wasabi
27
+ * https://f<id>.backblazeb2.com/file/<bucket> — Backblaze B2
28
+ * https://<bucket>.s3.<region>.backblazeb2.com — B2 S3-compatible
29
+ * https://<bucket>.oss-<region>.aliyuncs.com — Alibaba Cloud OSS
30
+ * https://<bucket>.cos.<region>.myqcloud.com — Tencent COS
31
+ * https://storage.yandexcloud.net/<bucket> — Yandex Cloud
32
+ * https://gateway.storjshare.io/<bucket> — Storj S3 gateway
33
+ * https://link.storjshare.io/raw/<access>/<bucket> — Storj linksharing
34
+ * https://<custom-endpoint>/<bucket> — Generic S3-compatible
35
+ *
36
+ * Also handles plain bucket names (no protocol).
37
+ */
38
+ /** All recognized URI scheme prefixes (lowercase) */
39
+ const SCHEME_MAP = {
40
+ 's3://': { provider: 's3', strip: 5 },
41
+ 's3a://': { provider: 's3', strip: 6 },
42
+ 's3n://': { provider: 's3', strip: 6 },
43
+ 'aws://': { provider: 's3', strip: 6 },
44
+ 'r2://': { provider: 'r2', strip: 5 },
45
+ 'gs://': { provider: 'gcs', strip: 5 },
46
+ 'gcs://': { provider: 'gcs', strip: 6 },
47
+ 'azure://': { provider: 'azure', strip: 8 },
48
+ 'az://': { provider: 'azure', strip: 5 },
49
+ 'abfs://': { provider: 'azure', strip: 7 },
50
+ 'abfss://': { provider: 'azure', strip: 8 },
51
+ 'wasbs://': { provider: 'azure', strip: 8 },
52
+ 'adl://': { provider: 'azure', strip: 6 },
53
+ 'storj://': { provider: 'storj', strip: 8 },
54
+ 'sj://': { provider: 'storj', strip: 5 },
55
+ 'swift://': { provider: 'unknown', strip: 8 }
56
+ };
57
+ function defaultResult(defaults) {
58
+ return {
59
+ bucket: '',
60
+ region: defaults.region || 'us-east-1',
61
+ endpoint: defaults.endpoint || '',
62
+ provider: defaults.provider || 's3',
63
+ prefix: ''
64
+ };
65
+ }
66
+ function splitBucketPrefix(rest) {
67
+ const slashIdx = rest.indexOf('/');
68
+ if (slashIdx >= 0) {
69
+ return {
70
+ bucket: rest.slice(0, slashIdx),
71
+ prefix: rest.slice(slashIdx + 1).replace(/\/+$/, '')
72
+ };
73
+ }
74
+ return { bucket: rest, prefix: '' };
75
+ }
76
+ /**
77
+ * Parse a user-provided bucket/URL string into structured storage connection parts.
78
+ */
79
+ export function parseStorageUrl(input, defaults = {}) {
80
+ const trimmed = input.trim();
81
+ // ── Custom URI schemes (s3://, gs://, r2://, az://, etc.) ──────────
82
+ const lower = trimmed.toLowerCase();
83
+ for (const [scheme, { provider, strip }] of Object.entries(SCHEME_MAP)) {
84
+ if (lower.startsWith(scheme)) {
85
+ const rest = trimmed.slice(strip);
86
+ const { bucket, prefix } = splitBucketPrefix(rest);
87
+ return {
88
+ bucket,
89
+ region: defaults.region || 'us-east-1',
90
+ endpoint: defaults.endpoint || '',
91
+ provider,
92
+ prefix
93
+ };
94
+ }
95
+ }
96
+ // ── HTTP(S) URL ─────────────────────────────────────────────────
97
+ if (lower.startsWith('http://') || lower.startsWith('https://')) {
98
+ try {
99
+ const url = new URL(trimmed);
100
+ const host = url.hostname;
101
+ const pathParts = url.pathname.replace(/^\//, '').split('/').filter(Boolean);
102
+ // --- AWS S3 ---
103
+ // Virtual-hosted: <bucket>.s3.<region>.amazonaws.com
104
+ const awsVhost = host.match(/^(.+)\.s3[.-]([a-z0-9-]+)\.amazonaws\.com$/);
105
+ if (awsVhost) {
106
+ return {
107
+ bucket: awsVhost[1],
108
+ region: awsVhost[2],
109
+ endpoint: '',
110
+ provider: 's3',
111
+ prefix: pathParts.join('/')
112
+ };
113
+ }
114
+ // Path-style: s3.<region>.amazonaws.com/<bucket>
115
+ const awsPath = host.match(/^s3[.-]([a-z0-9-]+)\.amazonaws\.com$/);
116
+ if (awsPath && pathParts.length > 0) {
117
+ return {
118
+ bucket: pathParts[0],
119
+ region: awsPath[1],
120
+ endpoint: '',
121
+ provider: 's3',
122
+ prefix: pathParts.slice(1).join('/')
123
+ };
124
+ }
125
+ // Global: s3.amazonaws.com/<bucket>
126
+ if (host === 's3.amazonaws.com' && pathParts.length > 0) {
127
+ return {
128
+ bucket: pathParts[0],
129
+ region: defaults.region || 'us-east-1',
130
+ endpoint: '',
131
+ provider: 's3',
132
+ prefix: pathParts.slice(1).join('/')
133
+ };
134
+ }
135
+ // --- Cloudflare R2 ---
136
+ // <account>.r2.cloudflarestorage.com/<bucket>
137
+ const r2Match = host.match(/^([a-z0-9]+)\.r2\.cloudflarestorage\.com$/);
138
+ if (r2Match && pathParts.length > 0) {
139
+ return {
140
+ bucket: pathParts[0],
141
+ region: 'auto',
142
+ endpoint: `${url.protocol}//${url.host}`,
143
+ provider: 'r2',
144
+ prefix: pathParts.slice(1).join('/')
145
+ };
146
+ }
147
+ // --- Google Cloud Storage ---
148
+ // storage.googleapis.com/<bucket>
149
+ if (host === 'storage.googleapis.com' && pathParts.length > 0) {
150
+ return {
151
+ bucket: pathParts[0],
152
+ region: defaults.region || 'us',
153
+ endpoint: '',
154
+ provider: 'gcs',
155
+ prefix: pathParts.slice(1).join('/')
156
+ };
157
+ }
158
+ // <bucket>.storage.googleapis.com
159
+ const gcsVhost = host.match(/^(.+)\.storage\.googleapis\.com$/);
160
+ if (gcsVhost) {
161
+ return {
162
+ bucket: gcsVhost[1],
163
+ region: defaults.region || 'us',
164
+ endpoint: '',
165
+ provider: 'gcs',
166
+ prefix: pathParts.join('/')
167
+ };
168
+ }
169
+ // --- DigitalOcean Spaces ---
170
+ // <bucket>.<region>.digitaloceanspaces.com
171
+ const doVhost = host.match(/^(.+)\.([a-z0-9-]+)\.digitaloceanspaces\.com$/);
172
+ if (doVhost) {
173
+ return {
174
+ bucket: doVhost[1],
175
+ region: doVhost[2],
176
+ endpoint: `${url.protocol}//${doVhost[2]}.digitaloceanspaces.com`,
177
+ provider: 's3',
178
+ prefix: pathParts.join('/')
179
+ };
180
+ }
181
+ // <region>.digitaloceanspaces.com/<bucket>
182
+ const doPath = host.match(/^([a-z0-9-]+)\.digitaloceanspaces\.com$/);
183
+ if (doPath && pathParts.length > 0) {
184
+ return {
185
+ bucket: pathParts[0],
186
+ region: doPath[1],
187
+ endpoint: `${url.protocol}//${url.host}`,
188
+ provider: 's3',
189
+ prefix: pathParts.slice(1).join('/')
190
+ };
191
+ }
192
+ // --- Wasabi ---
193
+ // s3.<region>.wasabisys.com/<bucket>
194
+ const wasabiMatch = host.match(/^s3\.([a-z0-9-]+)\.wasabisys\.com$/);
195
+ if (wasabiMatch && pathParts.length > 0) {
196
+ return {
197
+ bucket: pathParts[0],
198
+ region: wasabiMatch[1],
199
+ endpoint: `${url.protocol}//${url.host}`,
200
+ provider: 's3',
201
+ prefix: pathParts.slice(1).join('/')
202
+ };
203
+ }
204
+ // --- Backblaze B2 ---
205
+ // <bucket>.s3.<region>.backblazeb2.com (S3-compatible)
206
+ const b2S3 = host.match(/^(.+)\.s3\.([a-z0-9-]+)\.backblazeb2\.com$/);
207
+ if (b2S3) {
208
+ return {
209
+ bucket: b2S3[1],
210
+ region: b2S3[2],
211
+ endpoint: `${url.protocol}//s3.${b2S3[2]}.backblazeb2.com`,
212
+ provider: 's3',
213
+ prefix: pathParts.join('/')
214
+ };
215
+ }
216
+ // f<id>.backblazeb2.com/file/<bucket>
217
+ const b2Native = host.match(/^f[a-z0-9]+\.backblazeb2\.com$/);
218
+ if (b2Native && pathParts[0] === 'file' && pathParts.length > 1) {
219
+ return {
220
+ bucket: pathParts[1],
221
+ region: defaults.region || 'us-west-000',
222
+ endpoint: `${url.protocol}//${url.host}`,
223
+ provider: 's3',
224
+ prefix: pathParts.slice(2).join('/')
225
+ };
226
+ }
227
+ // --- Alibaba Cloud OSS ---
228
+ // <bucket>.oss-<region>.aliyuncs.com
229
+ const ossMatch = host.match(/^(.+)\.(oss-[a-z0-9-]+)\.aliyuncs\.com$/);
230
+ if (ossMatch) {
231
+ return {
232
+ bucket: ossMatch[1],
233
+ region: ossMatch[2],
234
+ endpoint: `${url.protocol}//${ossMatch[2]}.aliyuncs.com`,
235
+ provider: 's3',
236
+ prefix: pathParts.join('/')
237
+ };
238
+ }
239
+ // --- Tencent Cloud COS ---
240
+ // <bucket>.cos.<region>.myqcloud.com
241
+ const cosMatch = host.match(/^(.+)\.cos\.([a-z0-9-]+)\.myqcloud\.com$/);
242
+ if (cosMatch) {
243
+ return {
244
+ bucket: cosMatch[1],
245
+ region: cosMatch[2],
246
+ endpoint: `${url.protocol}//cos.${cosMatch[2]}.myqcloud.com`,
247
+ provider: 's3',
248
+ prefix: pathParts.join('/')
249
+ };
250
+ }
251
+ // --- Yandex Cloud ---
252
+ // storage.yandexcloud.net/<bucket>
253
+ if (host === 'storage.yandexcloud.net' && pathParts.length > 0) {
254
+ return {
255
+ bucket: pathParts[0],
256
+ region: defaults.region || 'ru-central1',
257
+ endpoint: `${url.protocol}//${url.host}`,
258
+ provider: 's3',
259
+ prefix: pathParts.slice(1).join('/')
260
+ };
261
+ }
262
+ // --- MinIO ---
263
+ // Common patterns: minio.<domain>, localhost with port
264
+ const isMinioLike = host.includes('minio') ||
265
+ host === 'localhost' ||
266
+ host === '127.0.0.1' ||
267
+ host.startsWith('192.168.') ||
268
+ host.startsWith('10.');
269
+ if (isMinioLike && pathParts.length > 0) {
270
+ return {
271
+ bucket: pathParts[0],
272
+ region: defaults.region || 'us-east-1',
273
+ endpoint: `${url.protocol}//${url.host}`,
274
+ provider: 'minio',
275
+ prefix: pathParts.slice(1).join('/')
276
+ };
277
+ }
278
+ // --- Azure Blob Storage ---
279
+ // <account>.blob.core.windows.net/<container>
280
+ const azureBlob = host.match(/^([a-z0-9]+)\.blob\.core\.windows\.net$/);
281
+ if (azureBlob && pathParts.length > 0) {
282
+ return {
283
+ bucket: pathParts[0],
284
+ region: defaults.region || '',
285
+ endpoint: `${url.protocol}//${url.host}`,
286
+ provider: 'azure',
287
+ prefix: pathParts.slice(1).join('/')
288
+ };
289
+ }
290
+ // --- Storj ---
291
+ // S3 gateway: gateway.storjshare.io/<bucket> (or gateway.<region>.storjshare.io)
292
+ const storjGateway = host.match(/^gateway\.(?:([a-z0-9]+)\.)?storjshare\.io$/);
293
+ if (storjGateway && pathParts.length > 0) {
294
+ return {
295
+ bucket: pathParts[0],
296
+ region: storjGateway[1] || defaults.region || 'us1',
297
+ endpoint: `${url.protocol}//${url.host}`,
298
+ provider: 'storj',
299
+ prefix: pathParts.slice(1).join('/')
300
+ };
301
+ }
302
+ // Linksharing: link.storjshare.io/raw/<access>/<bucket>/... or /s/<access>/<bucket>/...
303
+ const storjLink = host.match(/^link\.(?:([a-z0-9]+)\.)?storjshare\.io$/);
304
+ if (storjLink && pathParts.length >= 3 && (pathParts[0] === 'raw' || pathParts[0] === 's')) {
305
+ return {
306
+ bucket: pathParts[2],
307
+ region: storjLink[1] || defaults.region || 'us1',
308
+ endpoint: `${url.protocol}//${url.host}/${pathParts[0]}/${pathParts[1]}`,
309
+ provider: 'storj',
310
+ prefix: pathParts.slice(3).join('/')
311
+ };
312
+ }
313
+ // --- Generic custom endpoint with bucket in path ---
314
+ if (pathParts.length > 0) {
315
+ const endpoint = `${url.protocol}//${url.host}`;
316
+ return {
317
+ bucket: pathParts[0],
318
+ region: defaults.region || 'us-east-1',
319
+ endpoint,
320
+ provider: defaults.provider || 's3',
321
+ prefix: pathParts.slice(1).join('/')
322
+ };
323
+ }
324
+ // Just a host, no path — treat as endpoint with no bucket
325
+ return {
326
+ ...defaultResult(defaults),
327
+ endpoint: `${url.protocol}//${url.host}`
328
+ };
329
+ }
330
+ catch {
331
+ // Not a valid URL, fall through to plain bucket name
332
+ }
333
+ }
334
+ // ── Plain bucket name (no protocol) ─────────────────────────────
335
+ const cleaned = trimmed.replace(/^\/+|\/+$/g, '');
336
+ return {
337
+ bucket: cleaned,
338
+ region: defaults.region || 'us-east-1',
339
+ endpoint: defaults.endpoint || '',
340
+ provider: defaults.provider || 's3',
341
+ prefix: ''
342
+ };
343
+ }
344
+ /**
345
+ * Returns true if the input looks like a URL/URI rather than a plain bucket name.
346
+ * Covers all recognized cloud storage URI schemes.
347
+ */
348
+ export function looksLikeUrl(input) {
349
+ const lower = input.trim().toLowerCase();
350
+ if (lower.startsWith('http://') || lower.startsWith('https://'))
351
+ return true;
352
+ for (const scheme of Object.keys(SCHEME_MAP)) {
353
+ if (lower.startsWith(scheme))
354
+ return true;
355
+ }
356
+ return false;
357
+ }
358
+ /**
359
+ * Given a parsed URL result, build a human-readable summary of what was detected.
360
+ */
361
+ export function describeParseResult(parsed) {
362
+ const parts = [];
363
+ if (parsed.bucket)
364
+ parts.push(`bucket="${parsed.bucket}"`);
365
+ if (parsed.endpoint)
366
+ parts.push(`endpoint="${parsed.endpoint}"`);
367
+ if (parsed.region && parsed.region !== 'us-east-1')
368
+ parts.push(`region="${parsed.region}"`);
369
+ if (parsed.provider !== 's3')
370
+ parts.push(`provider=${parsed.provider}`);
371
+ if (parsed.prefix)
372
+ parts.push(`prefix="${parsed.prefix}"`);
373
+ return parts.length > 0 ? `Detected: ${parts.join(', ')}` : '';
374
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * URL state management for shareable links.
3
+ *
4
+ * URL format: ?url=<storage-url>[#table|map|query|inspect]
5
+ *
6
+ * - ?url= : full storage URL (endpoint + bucket + object path)
7
+ * e.g. https://s3.us-east-1.amazonaws.com/my-bucket/path/file.parquet
8
+ * - #hash : viewer mode (table, map, query, inspect)
9
+ *
10
+ * Uses SvelteKit's replaceState to avoid conflicts with the router.
11
+ */
12
+ import type { Connection } from '../types.js';
13
+ /**
14
+ * Build a full storage URL from a Connection + optional object prefix.
15
+ */
16
+ export declare function buildUrlParam(conn: Connection, prefix?: string): string;
17
+ /**
18
+ * Set the ?url= param to a raw URL string (for direct URL tabs).
19
+ */
20
+ export declare function setRawUrlParam(rawUrl: string): void;
21
+ /**
22
+ * Sync the ?url= param in the browser URL.
23
+ */
24
+ export declare function syncUrlParam(conn: Connection, prefix?: string): void;
25
+ /**
26
+ * Update the #hash in the URL to reflect the current view mode.
27
+ */
28
+ export declare function updateUrlView(view: string): void;
29
+ /**
30
+ * Read the current #hash view mode from the URL.
31
+ */
32
+ export declare function getUrlView(): string;
33
+ /**
34
+ * Read the prefix (file/folder path) from the ?url= param.
35
+ */
36
+ export declare function getUrlPrefix(): string;
37
+ /**
38
+ * Clear all URL state params.
39
+ */
40
+ export declare function clearUrlState(): void;