@walkthru-earth/objex 0.1.0 → 1.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.
- package/README.md +9 -2
- package/dist/components/browser/FileBrowser.svelte +53 -41
- package/dist/components/browser/FileRow.svelte +8 -3
- package/dist/components/browser/FileTreeSidebar.svelte +2 -4
- package/dist/components/layout/AboutSheet.svelte +126 -0
- package/dist/components/layout/AboutSheet.svelte.d.ts +6 -0
- package/dist/components/layout/ConnectionDialog.svelte +186 -138
- package/dist/components/layout/ConnectionDialog.svelte.d.ts +1 -0
- package/dist/components/layout/Sidebar.svelte +19 -3
- package/dist/components/layout/TabBar.svelte +4 -7
- package/dist/components/viewers/CodeViewer.svelte +17 -9
- package/dist/components/viewers/ImageViewer.svelte +6 -16
- package/dist/components/viewers/MarkdownViewer.svelte +8 -16
- package/dist/components/viewers/MediaViewer.svelte +6 -17
- package/dist/components/viewers/ModelViewer.svelte +4 -2
- package/dist/components/viewers/NotebookViewer.svelte +90 -40
- package/dist/components/viewers/PdfViewer.svelte +5 -3
- package/dist/components/viewers/RawViewer.svelte +4 -2
- package/dist/components/viewers/TableGrid.svelte +3 -2
- package/dist/components/viewers/ZarrMapViewer.svelte +334 -40
- package/dist/components/viewers/ZarrMapViewer.svelte.d.ts +3 -8
- package/dist/components/viewers/ZarrViewer.svelte +459 -178
- package/dist/components/viewers/map/AttributeTable.svelte +1 -6
- package/dist/components/viewers/pmtiles/PmtilesArchiveView.svelte +2 -6
- package/dist/components/viewers/pmtiles/PmtilesTileInspector.svelte +96 -22
- package/dist/constants.d.ts +28 -0
- package/dist/constants.js +34 -0
- package/dist/file-icons/index.js +6 -0
- package/dist/i18n/ar.js +34 -0
- package/dist/i18n/en.js +34 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.js +16 -1
- package/dist/query/wasm.js +5 -4
- package/dist/storage/browser-cloud.d.ts +7 -0
- package/dist/storage/browser-cloud.js +74 -7
- package/dist/storage/providers.d.ts +53 -0
- package/dist/storage/providers.js +318 -0
- package/dist/stores/connections.svelte.js +8 -34
- package/dist/stores/files.svelte.d.ts +1 -6
- package/dist/stores/files.svelte.js +4 -36
- package/dist/stores/query-history.svelte.js +5 -28
- package/dist/stores/settings.svelte.d.ts +1 -0
- package/dist/stores/settings.svelte.js +11 -31
- package/dist/types.d.ts +2 -2
- package/dist/utils/clipboard.d.ts +13 -0
- package/dist/utils/clipboard.js +38 -0
- package/dist/utils/cloud-url.d.ts +27 -0
- package/dist/utils/cloud-url.js +61 -0
- package/dist/utils/error.d.ts +8 -0
- package/dist/utils/error.js +12 -0
- package/dist/utils/export.d.ts +22 -2
- package/dist/utils/export.js +35 -10
- package/dist/utils/file-sort.d.ts +20 -0
- package/dist/utils/file-sort.js +41 -0
- package/dist/utils/format.d.ts +10 -0
- package/dist/utils/format.js +22 -0
- package/dist/utils/host-detection.js +78 -18
- package/dist/utils/local-storage.d.ts +16 -0
- package/dist/utils/local-storage.js +37 -0
- package/dist/utils/notebook.d.ts +59 -0
- package/dist/utils/notebook.js +211 -0
- package/dist/utils/parquet-metadata.js +1 -1
- package/dist/utils/pmtiles-tile.js +2 -1
- package/dist/utils/pmtiles.js +2 -1
- package/dist/utils/storage-url.d.ts +1 -1
- package/dist/utils/storage-url.js +82 -24
- package/dist/utils/url-state.js +2 -7
- package/dist/utils/url.d.ts +0 -2
- package/dist/utils/url.js +3 -29
- package/dist/utils/zarr.d.ts +60 -20
- package/dist/utils/zarr.js +450 -103
- package/package.json +66 -54
- package/dist/assets/favicon.svg +0 -17
- package/dist/components/CLAUDE.md +0 -44
- package/dist/components/viewers/CLAUDE.md +0 -60
- package/dist/file-icons/CLAUDE.md +0 -21
- package/dist/i18n/CLAUDE.md +0 -19
- package/dist/query/CLAUDE.md +0 -22
- package/dist/storage/CLAUDE.md +0 -23
- package/dist/stores/CLAUDE.md +0 -29
- package/dist/types/notebookjs.d.ts +0 -14
- package/dist/utils/CLAUDE.md +0 -54
- package/dist/utils/analytics.d.ts +0 -10
- package/dist/utils/analytics.js +0 -38
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkthru-earth/objex",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Svelte 5 components and utilities for exploring geospatial object storage — S3, GCS, Azure, R2",
|
|
5
5
|
"author": "Youssef Harby <yharby@walkthru.earth>",
|
|
6
6
|
"license": "CC-BY-4.0",
|
|
@@ -14,56 +14,70 @@
|
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
|
-
"svelte": "./dist/index.js"
|
|
17
|
+
"svelte": "./dist/index.js",
|
|
18
|
+
"import": "./dist/index.js"
|
|
18
19
|
},
|
|
19
20
|
"./storage": {
|
|
20
21
|
"types": "./dist/storage/index.d.ts",
|
|
21
|
-
"svelte": "./dist/storage/index.js"
|
|
22
|
+
"svelte": "./dist/storage/index.js",
|
|
23
|
+
"import": "./dist/storage/index.js"
|
|
22
24
|
},
|
|
23
25
|
"./query": {
|
|
24
26
|
"types": "./dist/query/engine.d.ts",
|
|
25
|
-
"svelte": "./dist/query/engine.js"
|
|
27
|
+
"svelte": "./dist/query/engine.js",
|
|
28
|
+
"import": "./dist/query/engine.js"
|
|
26
29
|
},
|
|
27
30
|
"./utils/wkb": {
|
|
28
31
|
"types": "./dist/utils/wkb.d.ts",
|
|
29
|
-
"svelte": "./dist/utils/wkb.js"
|
|
32
|
+
"svelte": "./dist/utils/wkb.js",
|
|
33
|
+
"import": "./dist/utils/wkb.js"
|
|
30
34
|
},
|
|
31
35
|
"./utils/geoarrow": {
|
|
32
36
|
"types": "./dist/utils/geoarrow.d.ts",
|
|
33
|
-
"svelte": "./dist/utils/geoarrow.js"
|
|
37
|
+
"svelte": "./dist/utils/geoarrow.js",
|
|
38
|
+
"import": "./dist/utils/geoarrow.js"
|
|
34
39
|
},
|
|
35
40
|
"./utils/storage-url": {
|
|
36
41
|
"types": "./dist/utils/storage-url.d.ts",
|
|
37
|
-
"svelte": "./dist/utils/storage-url.js"
|
|
42
|
+
"svelte": "./dist/utils/storage-url.js",
|
|
43
|
+
"import": "./dist/utils/storage-url.js"
|
|
38
44
|
},
|
|
39
45
|
"./utils/parquet-metadata": {
|
|
40
46
|
"types": "./dist/utils/parquet-metadata.d.ts",
|
|
41
|
-
"svelte": "./dist/utils/parquet-metadata.js"
|
|
47
|
+
"svelte": "./dist/utils/parquet-metadata.js",
|
|
48
|
+
"import": "./dist/utils/parquet-metadata.js"
|
|
42
49
|
},
|
|
43
50
|
"./utils/format": {
|
|
44
51
|
"types": "./dist/utils/format.d.ts",
|
|
45
|
-
"svelte": "./dist/utils/format.js"
|
|
52
|
+
"svelte": "./dist/utils/format.js",
|
|
53
|
+
"import": "./dist/utils/format.js"
|
|
46
54
|
},
|
|
47
55
|
"./utils/hex": {
|
|
48
56
|
"types": "./dist/utils/hex.d.ts",
|
|
49
|
-
"svelte": "./dist/utils/hex.js"
|
|
57
|
+
"svelte": "./dist/utils/hex.js",
|
|
58
|
+
"import": "./dist/utils/hex.js"
|
|
50
59
|
},
|
|
51
60
|
"./utils/column-types": {
|
|
52
61
|
"types": "./dist/utils/column-types.d.ts",
|
|
53
|
-
"svelte": "./dist/utils/column-types.js"
|
|
62
|
+
"svelte": "./dist/utils/column-types.js",
|
|
63
|
+
"import": "./dist/utils/column-types.js"
|
|
54
64
|
},
|
|
55
65
|
"./file-icons": {
|
|
56
66
|
"types": "./dist/file-icons/index.d.ts",
|
|
57
|
-
"svelte": "./dist/file-icons/index.js"
|
|
67
|
+
"svelte": "./dist/file-icons/index.js",
|
|
68
|
+
"import": "./dist/file-icons/index.js"
|
|
58
69
|
},
|
|
59
70
|
"./types": {
|
|
60
71
|
"types": "./dist/types.d.ts",
|
|
61
|
-
"svelte": "./dist/types.js"
|
|
72
|
+
"svelte": "./dist/types.js",
|
|
73
|
+
"import": "./dist/types.js"
|
|
62
74
|
}
|
|
63
75
|
},
|
|
64
76
|
"files": [
|
|
65
77
|
"dist",
|
|
66
|
-
"!dist/**/*.test.*"
|
|
78
|
+
"!dist/**/*.test.*",
|
|
79
|
+
"!dist/**/CLAUDE.md",
|
|
80
|
+
"!dist/assets"
|
|
67
81
|
],
|
|
68
82
|
"sideEffects": [
|
|
69
83
|
"**/*.css"
|
|
@@ -109,81 +123,79 @@
|
|
|
109
123
|
}
|
|
110
124
|
},
|
|
111
125
|
"devDependencies": {
|
|
112
|
-
"@biomejs/biome": "^2.4.
|
|
126
|
+
"@biomejs/biome": "^2.4.7",
|
|
113
127
|
"@changesets/changelog-github": "^0.5.2",
|
|
114
|
-
"@changesets/cli": "^2.
|
|
115
|
-
"@
|
|
128
|
+
"@changesets/cli": "^2.30.0",
|
|
129
|
+
"@fontsource/cairo": "^5.2.7",
|
|
130
|
+
"@internationalized/date": "^3.12.0",
|
|
116
131
|
"@lucide/svelte": "^0.561.0",
|
|
117
132
|
"@sveltejs/adapter-static": "^3.0.10",
|
|
118
|
-
"@sveltejs/kit": "^2.
|
|
133
|
+
"@sveltejs/kit": "^2.55.0",
|
|
119
134
|
"@sveltejs/package": "^2.5.7",
|
|
120
135
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
121
136
|
"@tailwindcss/forms": "^0.5.11",
|
|
122
137
|
"@tailwindcss/typography": "^0.5.19",
|
|
123
|
-
"@tailwindcss/vite": "^4.2.
|
|
124
|
-
"bits-ui": "^2.16.
|
|
138
|
+
"@tailwindcss/vite": "^4.2.1",
|
|
139
|
+
"bits-ui": "^2.16.3",
|
|
125
140
|
"clsx": "^2.1.1",
|
|
126
|
-
"lefthook": "^2.1.
|
|
141
|
+
"lefthook": "^2.1.4",
|
|
127
142
|
"paneforge": "^1.0.2",
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"svelte
|
|
143
|
+
"posthog-js": "^1.360.2",
|
|
144
|
+
"publint": "^0.3.18",
|
|
145
|
+
"svelte": "^5.53.12",
|
|
146
|
+
"svelte-check": "^4.4.5",
|
|
131
147
|
"tailwind-merge": "^3.5.0",
|
|
132
148
|
"tailwind-variants": "^3.2.2",
|
|
133
|
-
"tailwindcss": "^4.2.
|
|
149
|
+
"tailwindcss": "^4.2.1",
|
|
134
150
|
"tw-animate-css": "^1.4.0",
|
|
135
151
|
"typescript": "^5.9.3",
|
|
136
152
|
"vite": "^7.3.1"
|
|
137
153
|
},
|
|
138
154
|
"dependencies": {
|
|
139
|
-
"@babylonjs/core": "^8.
|
|
140
|
-
"@babylonjs/loaders": "^8.
|
|
155
|
+
"@babylonjs/core": "^8.55.3",
|
|
156
|
+
"@babylonjs/loaders": "^8.55.3",
|
|
141
157
|
"@carbonplan/zarr-layer": "^0.3.1",
|
|
142
|
-
"@codemirror/autocomplete": "^6.20.
|
|
143
|
-
"@codemirror/commands": "^6.10.
|
|
158
|
+
"@codemirror/autocomplete": "^6.20.1",
|
|
159
|
+
"@codemirror/commands": "^6.10.3",
|
|
144
160
|
"@codemirror/lang-sql": "^6.10.0",
|
|
145
|
-
"@codemirror/language": "^6.12.
|
|
146
|
-
"@codemirror/state": "^6.
|
|
161
|
+
"@codemirror/language": "^6.12.2",
|
|
162
|
+
"@codemirror/state": "^6.6.0",
|
|
147
163
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
148
|
-
"@codemirror/view": "^6.
|
|
149
|
-
"@deck.gl/core": "^9.2.
|
|
150
|
-
"@deck.gl/geo-layers": "^9.2.
|
|
151
|
-
"@deck.gl/layers": "^9.2.
|
|
152
|
-
"@deck.gl/mapbox": "^9.2.
|
|
153
|
-
"@deck.gl/mesh-layers": "^9.2.
|
|
164
|
+
"@codemirror/view": "^6.40.0",
|
|
165
|
+
"@deck.gl/core": "^9.2.11",
|
|
166
|
+
"@deck.gl/geo-layers": "^9.2.11",
|
|
167
|
+
"@deck.gl/layers": "^9.2.11",
|
|
168
|
+
"@deck.gl/mapbox": "^9.2.11",
|
|
169
|
+
"@deck.gl/mesh-layers": "^9.2.11",
|
|
154
170
|
"@developmentseed/deck.gl-geotiff": "^0.2.0",
|
|
155
|
-
"@duckdb/duckdb-wasm": "1.33.1-
|
|
156
|
-
"@fontsource/cairo": "^5.2.7",
|
|
171
|
+
"@duckdb/duckdb-wasm": "1.33.1-dev34.0",
|
|
157
172
|
"@geoarrow/deck.gl-layers": "^0.3.1",
|
|
158
173
|
"@luma.gl/core": "^9.2.6",
|
|
159
174
|
"@mapbox/vector-tile": "^2.0.4",
|
|
160
|
-
"@milkdown/kit": "^7.
|
|
161
|
-
"@milkdown/theme-nord": "^7.
|
|
175
|
+
"@milkdown/kit": "^7.19.0",
|
|
176
|
+
"@milkdown/theme-nord": "^7.19.0",
|
|
162
177
|
"@repeaterjs/repeater": "^3.0.6",
|
|
163
|
-
"@zip.js/zip.js": "^2.8.
|
|
178
|
+
"@zip.js/zip.js": "^2.8.23",
|
|
164
179
|
"ansi_up": "^6.0.6",
|
|
165
180
|
"apache-arrow": "^21.1.0",
|
|
166
181
|
"aws4fetch": "^1.0.20",
|
|
167
182
|
"chart.js": "^4.5.1",
|
|
168
|
-
"deck.gl": "^9.2.
|
|
183
|
+
"deck.gl": "^9.2.11",
|
|
169
184
|
"flatgeobuf": "^4.4.0",
|
|
170
|
-
"geotiff": "^3.0.
|
|
185
|
+
"geotiff": "^3.0.5",
|
|
171
186
|
"geotiff-geokeys-to-proj4": "^2024.4.13",
|
|
172
|
-
"hyparquet": "^1.25.
|
|
187
|
+
"hyparquet": "^1.25.1",
|
|
173
188
|
"hyparquet-compressors": "^1.1.1",
|
|
174
189
|
"lz-string": "^1.5.0",
|
|
175
|
-
"maplibre-gl": "^5.
|
|
176
|
-
"marked": "^17.0.
|
|
177
|
-
"mermaid": "^11.
|
|
178
|
-
"notebookjs": "^0.8.3",
|
|
190
|
+
"maplibre-gl": "^5.20.1",
|
|
191
|
+
"marked": "^17.0.4",
|
|
192
|
+
"mermaid": "^11.13.0",
|
|
179
193
|
"pbf": "^4.0.1",
|
|
180
|
-
"pdfjs-dist": "^5.
|
|
194
|
+
"pdfjs-dist": "^5.5.207",
|
|
181
195
|
"pmtiles": "^4.4.0",
|
|
182
|
-
"
|
|
183
|
-
"
|
|
184
|
-
"shiki": "^3.22.0",
|
|
196
|
+
"proj4": "^2.20.4",
|
|
197
|
+
"shiki": "^3.23.0",
|
|
185
198
|
"sql-formatter": "^15.7.2",
|
|
186
|
-
"svelte-chartjs": "^3.1.5",
|
|
187
199
|
"yaml": "^2.8.2",
|
|
188
200
|
"zarrita": "^0.6.1"
|
|
189
201
|
},
|
package/dist/assets/favicon.svg
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
|
|
2
|
-
<!-- Background: rounded square -->
|
|
3
|
-
<rect width="128" height="128" rx="24" fill="#0f172a"/>
|
|
4
|
-
<!-- Cube/box shape — "object explorer" -->
|
|
5
|
-
<path d="M64 20 L108 44 L108 88 L64 112 L20 88 L20 44 Z" fill="none" stroke="#3b82f6" stroke-width="4" stroke-linejoin="round"/>
|
|
6
|
-
<!-- Inner edges -->
|
|
7
|
-
<path d="M64 112 L64 66" stroke="#3b82f6" stroke-width="4"/>
|
|
8
|
-
<path d="M20 44 L64 66" stroke="#3b82f6" stroke-width="4"/>
|
|
9
|
-
<path d="M108 44 L64 66" stroke="#3b82f6" stroke-width="4"/>
|
|
10
|
-
<!-- Top face fill -->
|
|
11
|
-
<path d="M64 20 L108 44 L64 66 L20 44 Z" fill="#3b82f6" opacity="0.25"/>
|
|
12
|
-
<!-- Right face fill -->
|
|
13
|
-
<path d="M108 44 L108 88 L64 112 L64 66 Z" fill="#3b82f6" opacity="0.15"/>
|
|
14
|
-
<!-- Magnifier lens on top-right -->
|
|
15
|
-
<circle cx="92" cy="32" r="14" fill="none" stroke="#60a5fa" stroke-width="3.5"/>
|
|
16
|
-
<line x1="102" y1="42" x2="112" y2="52" stroke="#60a5fa" stroke-width="3.5" stroke-linecap="round"/>
|
|
17
|
-
</svg>
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# components/
|
|
2
|
-
|
|
3
|
-
All Svelte 5 components. Organized by function.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph TD
|
|
7
|
-
subgraph layout
|
|
8
|
-
SB[Sidebar] --> FTS[FileTreeSidebar]
|
|
9
|
-
TB[TabBar]
|
|
10
|
-
CD[ConnectionDialog]
|
|
11
|
-
STB[StatusBar]
|
|
12
|
-
end
|
|
13
|
-
subgraph browser
|
|
14
|
-
FTS --> FB[FileBrowser]
|
|
15
|
-
FB --> FR[FileRow]
|
|
16
|
-
FB --> BC[Breadcrumb]
|
|
17
|
-
FB --> SBar[SearchBar]
|
|
18
|
-
FB --> DZ[DropZone]
|
|
19
|
-
end
|
|
20
|
-
subgraph viewers["viewers/ (18+)"]
|
|
21
|
-
VR[ViewerRouter] -->|by ext| TV[TableViewer]
|
|
22
|
-
VR --> CV[CogViewer]
|
|
23
|
-
VR --> PV[PmtilesViewer]
|
|
24
|
-
VR --> MORE[...]
|
|
25
|
-
end
|
|
26
|
-
subgraph editor
|
|
27
|
-
SQL[SqlEditor] --> CM[CodeMirrorEditor]
|
|
28
|
-
end
|
|
29
|
-
subgraph ui["ui/ (shadcn-svelte)"]
|
|
30
|
-
BTN[button] & INP[input] & TT[tooltip] & CTX[context-menu] & DD[dropdown-menu]
|
|
31
|
-
end
|
|
32
|
-
TB --> VR
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
| Directory | Files | Role | Used by |
|
|
36
|
-
|-----------|-------|------|---------|
|
|
37
|
-
| `viewers/` | 34 | Per-format viewers | ViewerRouter → +page.svelte |
|
|
38
|
-
| `browser/` | 10 | File tree, search, upload, dialogs | FileTreeSidebar → Sidebar → +page.svelte |
|
|
39
|
-
| `layout/` | 7 | Sidebar, tabs, status bar, toggles | +page.svelte, +layout.svelte |
|
|
40
|
-
| `editor/` | 4 | SQL editor, markdown editor, SQL results | TableViewer, MarkdownViewer |
|
|
41
|
-
| `map/` | 2 | MapContainer, AttributeTable | GeoParquetMapViewer, PmtilesMapView, MapViewer |
|
|
42
|
-
| `ui/` | 61 | shadcn-svelte primitives (bits-ui) | Used across all components |
|
|
43
|
-
|
|
44
|
-
See `viewers/CLAUDE.md` for viewer-specific details.
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# viewers/
|
|
2
|
-
|
|
3
|
-
Per-format viewer components. Routed by `ViewerRouter` based on file extension.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph TD
|
|
7
|
-
VR[ViewerRouter] -->|parquet,csv,jsonl| TV[TableViewer]
|
|
8
|
-
VR -->|geoparquet map| GPM[GeoParquetMapViewer]
|
|
9
|
-
VR -->|cog,tif| COG[CogViewer]
|
|
10
|
-
VR -->|pmtiles| PMT[PmtilesViewer]
|
|
11
|
-
VR -->|fgb| FGB[FlatGeobufViewer]
|
|
12
|
-
VR -->|zarr| ZV[ZarrViewer]
|
|
13
|
-
VR -->|ipynb| NB[NotebookViewer]
|
|
14
|
-
VR -->|code,json,py| CODE[CodeViewer]
|
|
15
|
-
VR -->|md| MD[MarkdownViewer]
|
|
16
|
-
VR -->|pdf| PDF[PdfViewer]
|
|
17
|
-
VR -->|img| IMG[ImageViewer]
|
|
18
|
-
VR -->|video,audio| MEDIA[MediaViewer]
|
|
19
|
-
VR -->|glb,obj,stl| MODEL[ModelViewer]
|
|
20
|
-
VR -->|zip,tar| ARC[ArchiveViewer]
|
|
21
|
-
VR -->|copc,laz| COPC[CopcViewer]
|
|
22
|
-
VR -->|duckdb,sqlite| DB[DatabaseViewer]
|
|
23
|
-
VR -->|stac| STAC[StacMapViewer]
|
|
24
|
-
VR -->|fallback| RAW[RawViewer]
|
|
25
|
-
|
|
26
|
-
TV --> TG[TableGrid]
|
|
27
|
-
TV --> TTB[TableToolbar]
|
|
28
|
-
TV --> TSB[TableStatusBar]
|
|
29
|
-
TV --> QHP[QueryHistoryPanel]
|
|
30
|
-
GPM --> MC[map/MapContainer]
|
|
31
|
-
GPM --> AT[map/AttributeTable]
|
|
32
|
-
PMT --> PMV[pmtiles/PmtilesMapView]
|
|
33
|
-
PMT --> PMA[pmtiles/PmtilesArchiveView]
|
|
34
|
-
PMT --> PMI[pmtiles/PmtilesTileInspector]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
| Viewer | Powered by | Key deps used |
|
|
38
|
-
|--------|-----------|---------------|
|
|
39
|
-
| TableViewer | DuckDB-WASM, Arrow | query/index, utils/wkb, utils/geoarrow, utils/parquet-metadata, utils/url, utils/url-state, file-icons |
|
|
40
|
-
| GeoParquetMapViewer | deck.gl, @geoarrow/deck.gl-layers | query/engine, utils/wkb, utils/geoarrow, utils/deck, map/MapContainer |
|
|
41
|
-
| CogViewer | @developmentseed/deck.gl-geotiff, geotiff v3 | utils/url |
|
|
42
|
-
| PmtilesViewer | pmtiles, MapLibre | utils/pmtiles, utils/url-state, pmtiles/* sub-components |
|
|
43
|
-
| FlatGeobufViewer | flatgeobuf, deck.gl | utils/deck, utils/url |
|
|
44
|
-
| ZarrViewer | zarrita, @carbonplan/zarr-layer | utils/zarr, utils/url-state |
|
|
45
|
-
| CodeViewer | Shiki | utils/shiki, utils/url-state |
|
|
46
|
-
| NotebookViewer | notebookjs, Marked, Shiki | utils/shiki |
|
|
47
|
-
| PdfViewer | pdf.js | utils/pdf |
|
|
48
|
-
| ModelViewer | Babylon.js | utils/model3d |
|
|
49
|
-
| ArchiveViewer | zip.js | utils/archive, utils/url, utils/format |
|
|
50
|
-
| DatabaseViewer | DuckDB-WASM | query/index |
|
|
51
|
-
| MarkdownViewer | Marked, Milkdown | utils/markdown, utils/markdown-sql, editor/MilkdownEditor |
|
|
52
|
-
| RawViewer | custom hex dump | utils/hex, utils/format |
|
|
53
|
-
| ImageViewer | native `<img>` | utils/url |
|
|
54
|
-
| MediaViewer | native `<video>`/`<audio>` | utils/url |
|
|
55
|
-
| StacMapViewer | stac-map iframe | utils/url |
|
|
56
|
-
| CopcViewer | viewer.copc.io iframe | utils/url |
|
|
57
|
-
|
|
58
|
-
All viewers use: `stores/tab-resources` (LRU cleanup), `i18n/t()`, `stores/settings` (theme).
|
|
59
|
-
|
|
60
|
-
Every viewer must follow the pattern in root `CLAUDE.md` (cleanup, tabResources, AbortController, $state.raw).
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# file-icons/
|
|
2
|
-
|
|
3
|
-
Extension → file type registry. Maps 200+ extensions to viewer, icon, category, DuckDB read function.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph LR
|
|
7
|
-
EXT[".parquet"] --> FT[getFileTypeInfo]
|
|
8
|
-
FT --> VK[getViewerKind → 'table']
|
|
9
|
-
FT --> DR[getDuckDbReadFn → 'read_parquet']
|
|
10
|
-
FT --> CN[isCloudNativeFormat → true]
|
|
11
|
-
FT --> QR[isQueryable → true]
|
|
12
|
-
FT --> IC[FileTypeIcon.svelte]
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
| File | Exports | Used by |
|
|
16
|
-
|------|---------|---------|
|
|
17
|
-
| `index.ts` | `getFileTypeInfo()`, `getDuckDbReadFn()`, `buildDuckDbSource()`, `isCloudNativeFormat()`, `getViewerKind()`, `isQueryable()`, `getMimeType()` | StatusBar, FileRow, ViewerRouter, TableViewer, query/wasm, +page.svelte, lib/index.ts |
|
|
18
|
-
| `FileTypeIcon.svelte` | Icon component (Lucide icons by category) | FileRow, TabBar |
|
|
19
|
-
|
|
20
|
-
Types: `FileCategory`, `ViewerKind`, `DuckDbReadFn`, `FileTypeInfo` (interface).
|
|
21
|
-
Published to npm. No Svelte dependency in `index.ts`.
|
package/dist/i18n/CLAUDE.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# i18n/
|
|
2
|
-
|
|
3
|
-
Simple key-based translation with `{param}` interpolation. Supports RTL.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph LR
|
|
7
|
-
T["t('files.size', {size: '1.2 MB'})"] --> IDX[index.svelte.ts]
|
|
8
|
-
IDX --> EN[en.ts]
|
|
9
|
-
IDX --> AR[ar.ts]
|
|
10
|
-
IDX --> DIR["getDir() → 'ltr' | 'rtl'"]
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
| File | Exports | Used by |
|
|
14
|
-
|------|---------|---------|
|
|
15
|
-
| `index.svelte.ts` | `t()`, `getLocale()`, `setLocale()`, `getDir()`, `Locale` | Nearly all components (45+ files): all viewers, all browser components, all layout components, MilkdownEditor, +page.svelte, +layout.svelte, stores/settings |
|
|
16
|
-
| `en.ts` | English translations dict | index.svelte.ts |
|
|
17
|
-
| `ar.ts` | Arabic translations dict | index.svelte.ts |
|
|
18
|
-
|
|
19
|
-
Use `t('key')` for all user-facing strings. Add new keys to both `en.ts` and `ar.ts`.
|
package/dist/query/CLAUDE.md
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# query/
|
|
2
|
-
|
|
3
|
-
DuckDB-WASM query engine. Single worker, cancellable queries.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph TD
|
|
7
|
-
A[index.ts<br/>getQueryEngine] -->|lazy init| B[wasm.ts<br/>WasmQueryEngine]
|
|
8
|
-
B -->|conn.send| C[DuckDB Worker]
|
|
9
|
-
B -->|conn.cancelSent| C
|
|
10
|
-
B -->|db.terminate| C
|
|
11
|
-
D[engine.ts] -->|types| A
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
| File | Exports | Used by |
|
|
15
|
-
|------|---------|---------|
|
|
16
|
-
| `engine.ts` | `QueryEngine`, `QueryResult`, `MapQueryResult`, `SchemaField`, `QueryHandle`, `MapQueryHandle`, `QueryCancelledError` | TableViewer, GeoParquetMapViewer, FileInfo, evidence-context, lib/index.ts |
|
|
17
|
-
| `wasm.ts` | `WasmQueryEngine` | index.ts (lazy import) |
|
|
18
|
-
| `index.ts` | `getQueryEngine()`, re-exports all types | TableViewer, DatabaseViewer, SqlEditor, evidence-context |
|
|
19
|
-
|
|
20
|
-
- `conn.send()` for data queries (non-blocking, cancellable)
|
|
21
|
-
- `conn.query()` only for fast metadata queries
|
|
22
|
-
- `enable_geoparquet_conversion = false` set at DB init
|
package/dist/storage/CLAUDE.md
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# storage/
|
|
2
|
-
|
|
3
|
-
Cloud storage adapters. All implement `StorageAdapter` interface.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph LR
|
|
7
|
-
A[StorageAdapter] --> B[BrowserCloudAdapter<br/>S3/GCS/R2/MinIO/Storj]
|
|
8
|
-
A --> C[BrowserAzureAdapter<br/>Azure Blob + SAS]
|
|
9
|
-
A --> D[UrlAdapter<br/>direct HTTPS, read-only]
|
|
10
|
-
E[index.ts<br/>getAdapter / clearAdapterCache] --> B & C & D
|
|
11
|
-
B & C --> F[stores/connections]
|
|
12
|
-
B & C --> G[stores/credentials]
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
| File | Exports | Used by |
|
|
16
|
-
|------|---------|---------|
|
|
17
|
-
| `adapter.ts` | `StorageAdapter` (interface), `ListPage` | lib/index.ts (npm export) |
|
|
18
|
-
| `browser-cloud.ts` | `BrowserCloudAdapter` | index.ts (factory) |
|
|
19
|
-
| `browser-azure.ts` | `BrowserAzureAdapter` | index.ts (factory) |
|
|
20
|
-
| `url-adapter.ts` | `UrlAdapter` | lib/index.ts (npm export) |
|
|
21
|
-
| `index.ts` | `getAdapter()`, `clearAdapterCache()` | stores/browser, FileTreeSidebar, ArchiveViewer, ModelViewer, DatabaseViewer, MediaViewer, PdfViewer, RawViewer, MarkdownViewer, NotebookViewer, MapViewer, CodeViewer, ImageViewer |
|
|
22
|
-
|
|
23
|
-
`adapter.ts` and `url-adapter.ts` use relative imports (not `$lib`) — they're published to npm.
|
package/dist/stores/CLAUDE.md
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# stores/
|
|
2
|
-
|
|
3
|
-
Svelte 5 rune-based stores. All use `$state` / `$state.raw` / `$derived`.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph LR
|
|
7
|
-
CONN[connections.svelte.ts] --> CRED[credentials.svelte.ts]
|
|
8
|
-
TABS[tabs.svelte.ts] --> TR[tab-resources.svelte.ts]
|
|
9
|
-
FILES[files.svelte.ts] --> CONN
|
|
10
|
-
BR[browser.svelte.ts] --> FILES
|
|
11
|
-
SET[settings.svelte.ts]
|
|
12
|
-
QH[query-history.svelte.ts]
|
|
13
|
-
SL[safelock.svelte.ts]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
| File | Export | Used by |
|
|
17
|
-
|------|--------|--------|
|
|
18
|
-
| `connections.svelte.ts` | `connectionStore` | url.ts, browser-azure, browser-cloud, storage/index, ConnectionDialog, Sidebar, TableToolbar, +page.svelte |
|
|
19
|
-
| `credentials.svelte.ts` | `credentialStore` | url.ts, browser-azure, browser-cloud, Sidebar, query/wasm |
|
|
20
|
-
| `tabs.svelte.ts` | `tabStore` | StatusBar, TabBar, Sidebar, FileRow, FileTreeSidebar, +page.svelte |
|
|
21
|
-
| `tab-resources.svelte.ts` | `tabResources` | CogViewer, TableViewer, FlatGeobufViewer, ArchiveViewer, ModelViewer, GeoParquetMapViewer, DatabaseViewer, MediaViewer, PdfViewer, RawViewer, MarkdownViewer, ZarrMapViewer, NotebookViewer, MapViewer, CodeViewer, ImageViewer, PmtilesViewer |
|
|
22
|
-
| `files.svelte.ts` | `fileStore` | StatusBar |
|
|
23
|
-
| `browser.svelte.ts` | `browser` | StatusBar, Sidebar, FileBrowser, DropZone, UploadButton, FileRow, DeleteConfirmDialog, FileTreeSidebar, RenameDialog, CreateFolderDialog, +page.svelte |
|
|
24
|
-
| `settings.svelte.ts` | `settings` | LocaleToggle, ThemeToggle, scroll-area, TableViewer, FlatGeobufViewer, GeoParquetMapViewer, MapContainer, CodeMirrorEditor, +layout.svelte |
|
|
25
|
-
| `query-history.svelte.ts` | `queryHistory` | TableViewer, QueryHistoryPanel, SqlEditor |
|
|
26
|
-
| `safelock.svelte.ts` | `safeLock` | SafeLockToggle, FileBrowser, DropZone, FileRow |
|
|
27
|
-
|
|
28
|
-
All stores are module-level singletons (SPA, no SSR).
|
|
29
|
-
Use `$state.raw` for arrays >100 items. Credentials never touch localStorage.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
declare module 'notebookjs' {
|
|
2
|
-
interface Notebook {
|
|
3
|
-
render(): HTMLElement;
|
|
4
|
-
}
|
|
5
|
-
const nb: {
|
|
6
|
-
prefix: string;
|
|
7
|
-
markdown: (md: string) => string;
|
|
8
|
-
ansi: (text: string) => string;
|
|
9
|
-
highlighter: (code: string, lang: string) => string;
|
|
10
|
-
sanitizer: (html: string) => string;
|
|
11
|
-
parse(json: unknown): Notebook;
|
|
12
|
-
};
|
|
13
|
-
export default nb;
|
|
14
|
-
}
|
package/dist/utils/CLAUDE.md
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# utils/
|
|
2
|
-
|
|
3
|
-
Pure utility modules. No Svelte dependency except `url-state.ts` and `analytics.ts`.
|
|
4
|
-
|
|
5
|
-
```mermaid
|
|
6
|
-
graph TD
|
|
7
|
-
subgraph "Published (npm)"
|
|
8
|
-
WKB[wkb.ts<br/>parseWKB, findGeoColumn]
|
|
9
|
-
GA[geoarrow.ts<br/>buildGeoArrowTables]
|
|
10
|
-
SU[storage-url.ts<br/>parseStorageUrl]
|
|
11
|
-
PM[parquet-metadata.ts<br/>readParquetMetadata]
|
|
12
|
-
FMT[format.ts<br/>formatFileSize, formatDate]
|
|
13
|
-
HEX[hex.ts<br/>generateHexDump]
|
|
14
|
-
CT[column-types.ts<br/>classifyType]
|
|
15
|
-
end
|
|
16
|
-
subgraph "Internal only"
|
|
17
|
-
DECK[deck.ts<br/>createDeckOverlay, createGeoArrowOverlay]
|
|
18
|
-
URL[url.ts<br/>buildHttpsUrl, buildDuckDbUrl]
|
|
19
|
-
US[url-state.ts<br/>syncUrlParam — uses $app]
|
|
20
|
-
ARC[archive.ts<br/>streamZip/Tar]
|
|
21
|
-
PMT[pmtiles.ts<br/>loadPmtiles]
|
|
22
|
-
SHIKI[shiki.ts<br/>highlightCode]
|
|
23
|
-
ZARR[zarr.ts<br/>fetchConsolidated]
|
|
24
|
-
end
|
|
25
|
-
WKB --> GA
|
|
26
|
-
PM --> GA
|
|
27
|
-
GA --> DECK
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
| File | Key Exports | Used by |
|
|
31
|
-
|------|-------------|---------|
|
|
32
|
-
| `wkb.ts` | `parseWKB()`, `toBinary()`, `findGeoColumn()`, `findGeoColumnFromRows()` | TableViewer, GeoParquetMapViewer, lib/index.ts |
|
|
33
|
-
| `geoarrow.ts` | `buildGeoArrowTables()`, `normalizeGeomType()` | TableViewer, GeoParquetMapViewer, lib/index.ts |
|
|
34
|
-
| `storage-url.ts` | `parseStorageUrl()`, `looksLikeUrl()`, `Defaults` | ConnectionDialog, Sidebar, lib/index.ts |
|
|
35
|
-
| `parquet-metadata.ts` | `readParquetMetadata()`, `extractEpsgFromGeoMeta()`, `extractBounds()` | TableViewer, lib/index.ts |
|
|
36
|
-
| `format.ts` | `formatFileSize()`, `formatDate()`, `getFileExtension()` | StatusBar, FileRow, ArchiveViewer, RawViewer, lib/index.ts |
|
|
37
|
-
| `hex.ts` | `generateHexDump()` | RawViewer, lib/index.ts |
|
|
38
|
-
| `column-types.ts` | `classifyType()`, `typeColor()`, `typeLabel()` | TableGrid, lib/index.ts |
|
|
39
|
-
| `deck.ts` | `createDeckOverlay()`, `createGeoArrowOverlay()`, `createGeoArrowLayers()` | FlatGeobufViewer, GeoParquetMapViewer |
|
|
40
|
-
| `url.ts` | `buildHttpsUrl()`, `buildDuckDbUrl()`, `canStreamDirectly()` | TabBar, FileTreeSidebar, CogViewer, TableViewer, FlatGeobufViewer, ArchiveViewer, MediaViewer, CopcViewer, PdfViewer, ZarrMapViewer, StacMapViewer, ZarrViewer, CodeViewer, ImageViewer, PmtilesViewer, TableToolbar |
|
|
41
|
-
| `archive.ts` | `streamZipEntriesFromUrl()`, `streamTarEntriesFromUrl()`, `listContents()` | ArchiveViewer |
|
|
42
|
-
| `pmtiles.ts` | `loadPmtiles()`, `buildPmtilesLayers()` | PmtilesMapView, PmtilesArchiveView, PmtilesViewer |
|
|
43
|
-
| `shiki.ts` | `highlightCode()`, `extensionToShikiLang()` | PmtilesArchiveView, NotebookViewer, CodeViewer |
|
|
44
|
-
| `zarr.ts` | `fetchConsolidated()`, `probeWithZarrita()` | ZarrViewer |
|
|
45
|
-
| `url-state.ts` | `syncUrlParam()`, `updateUrlView()` | Sidebar, FileTreeSidebar, TableViewer, ZarrViewer, CodeViewer, PmtilesViewer, +page.svelte |
|
|
46
|
-
| `analytics.ts` | `initAnalytics()`, `capturePageview()` | +layout.svelte |
|
|
47
|
-
| `export.ts` | `exportToCsv()`, `exportToJson()` | TableStatusBar |
|
|
48
|
-
| `pdf.ts` | `loadPdfDocument()` | PdfViewer |
|
|
49
|
-
| `model3d.ts` | `createModelScene()`, `loadModel()` | ModelViewer |
|
|
50
|
-
| `markdown.ts` | `renderMarkdown()`, `detectRTL()` | MarkdownViewer |
|
|
51
|
-
| `map-selection.ts` | `setupSelectionLayer()`, `updateSelection()` | PmtilesMapView, MapViewer |
|
|
52
|
-
| `host-detection.ts` | `detectHostBucket()` | stores/connections, Sidebar |
|
|
53
|
-
| `markdown-sql.ts` | `parseMarkdownDocument()`, `interpolateTemplates()` | MarkdownViewer |
|
|
54
|
-
| `evidence-context.ts` | `EvidenceContext` | MarkdownViewer |
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PostHog analytics — cookieless by default (memory persistence).
|
|
3
|
-
*
|
|
4
|
-
* Env vars (PUBLIC_ prefix = available client-side in SvelteKit):
|
|
5
|
-
* PUBLIC_POSTHOG_KEY — project API key
|
|
6
|
-
* PUBLIC_POSTHOG_HOST — ingestion endpoint (default: EU cloud)
|
|
7
|
-
*/
|
|
8
|
-
export declare function initAnalytics(): void;
|
|
9
|
-
export declare function capturePageview(url: string): void;
|
|
10
|
-
export declare function capturePageleave(): void;
|
package/dist/utils/analytics.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PostHog analytics — cookieless by default (memory persistence).
|
|
3
|
-
*
|
|
4
|
-
* Env vars (PUBLIC_ prefix = available client-side in SvelteKit):
|
|
5
|
-
* PUBLIC_POSTHOG_KEY — project API key
|
|
6
|
-
* PUBLIC_POSTHOG_HOST — ingestion endpoint (default: EU cloud)
|
|
7
|
-
*/
|
|
8
|
-
import posthog from 'posthog-js';
|
|
9
|
-
import { browser } from '$app/environment';
|
|
10
|
-
import { env } from '$env/dynamic/public';
|
|
11
|
-
let initialized = false;
|
|
12
|
-
export function initAnalytics() {
|
|
13
|
-
if (!browser || initialized)
|
|
14
|
-
return;
|
|
15
|
-
const key = env.PUBLIC_POSTHOG_KEY;
|
|
16
|
-
if (!key)
|
|
17
|
-
return; // silently skip if no key configured
|
|
18
|
-
const host = env.PUBLIC_POSTHOG_HOST || 'https://eu.i.posthog.com';
|
|
19
|
-
posthog.init(key, {
|
|
20
|
-
api_host: host,
|
|
21
|
-
person_profiles: 'identified_only',
|
|
22
|
-
capture_pageview: false, // we track manually via afterNavigate
|
|
23
|
-
capture_pageleave: true,
|
|
24
|
-
persistence: 'memory', // cookieless — no consent banner needed
|
|
25
|
-
autocapture: true
|
|
26
|
-
});
|
|
27
|
-
initialized = true;
|
|
28
|
-
}
|
|
29
|
-
export function capturePageview(url) {
|
|
30
|
-
if (!initialized)
|
|
31
|
-
return;
|
|
32
|
-
posthog.capture('$pageview', { $current_url: url });
|
|
33
|
-
}
|
|
34
|
-
export function capturePageleave() {
|
|
35
|
-
if (!initialized)
|
|
36
|
-
return;
|
|
37
|
-
posthog.capture('$pageleave');
|
|
38
|
-
}
|