ocearo-ui 0.1.18 → 0.1.21
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/404.html +1 -1
- package/README.fr.md +11 -13
- package/README.md +11 -13
- package/__next.__PAGE__.txt +4 -4
- package/__next._full.txt +12 -12
- package/__next._head.txt +4 -4
- package/__next._index.txt +4 -4
- package/__next._tree.txt +2 -2
- package/_next/static/chunks/009rlietvsaq2.js +1 -0
- package/_next/static/chunks/070stlm97b9a2.js +1 -0
- package/_next/static/chunks/08gn5_gd6amkq.js +1 -0
- package/_next/static/chunks/{1a24eba0d892e1dc.js → 0jzbiie0nzar2.js} +1 -1
- package/_next/static/chunks/0ri_um14-5x7u.js +1 -0
- package/_next/static/chunks/0utifqhyv2cuc.js +1 -0
- package/_next/static/chunks/0uvr7xkt_5uno.js +1 -0
- package/_next/static/chunks/0wzr1__so6xme.js +1 -0
- package/_next/static/chunks/0zjxnzbxh76mt.js +1 -0
- package/_next/static/chunks/11ln9lzzbo35q.js +1 -0
- package/_next/static/chunks/1bz0tcmhjmjgh.js +1 -0
- package/_next/static/chunks/1gizigk3w6q7j.js +31 -0
- package/_next/static/chunks/1porlo35ga4zu.js +1 -0
- package/_next/static/chunks/1ptwltjb3h6jf.js +4 -0
- package/_next/static/chunks/{c2ca71308a46ad5c.js → 1sq_733weprvs.js} +1 -1
- package/_next/static/chunks/1w1ua0-p5lk1e.js +38 -0
- package/_next/static/chunks/1wv5e5qomv-7g.css +3 -0
- package/_next/static/chunks/27hn45pv56pv7.js +393 -0
- package/_next/static/chunks/28y-j215vt42m.js +1 -0
- package/_next/static/chunks/29-ag86gvlc40.js +9 -0
- package/_next/static/chunks/2a0yjir_3mk1m.js +1 -0
- package/_next/static/chunks/2atijj_pkc4uc.js +2 -0
- package/_next/static/chunks/2baz6j1q913qw.js +1 -0
- package/_next/static/chunks/2ccpehidlaq88.js +1 -0
- package/_next/static/chunks/2lez3uww9j4t0.js +135 -0
- package/_next/static/chunks/2lvvt2f1l5sfu.js +1 -0
- package/_next/static/chunks/2nd5amcst4lhp.js +1 -0
- package/_next/static/chunks/2nxsyowmuwpjy.js +1 -0
- package/_next/static/chunks/2pwmb4pkqygy_.js +1 -0
- package/_next/static/chunks/2uao1hfsz-oy8.js +1 -0
- package/_next/static/chunks/2yghvponatk1x.js +135 -0
- package/_next/static/chunks/31i14-jemhnic.js +863 -0
- package/_next/static/chunks/{ef44382534be9f84.js → 32cbrrsp-x35l.js} +1 -1
- package/_next/static/chunks/36ra6xjie0dsv.js +9 -0
- package/_next/static/chunks/3dt63tw_9r0jt.js +38 -0
- package/_next/static/chunks/3jh1u-s3k0bkk.js +1 -0
- package/_next/static/chunks/3jupxlga7r_do.js +1 -0
- package/_next/static/chunks/{607b77f84fd065f0.js → 3m57lnggu30tr.js} +2 -2
- package/_next/static/chunks/3rhgquok36e79.js +1 -0
- package/_next/static/chunks/3sgrkzk20mxs6.js +54 -0
- package/_next/static/chunks/{149eaabf92bb073c.js → 42dfiu6iby3fq.js} +1 -1
- package/_next/static/chunks/43ps2cu5ahf8n.js +3 -0
- package/_next/static/chunks/turbopack-0pirmko-w-775.js +1 -0
- package/_next/static/hlKDicTyNGfd7dmHqo5m5/_clientMiddlewareManifest.js +1 -0
- package/_not-found/__next._full.txt +13 -11
- package/_not-found/__next._head.txt +4 -4
- package/_not-found/__next._index.txt +4 -4
- package/_not-found/__next._not-found.__PAGE__.txt +2 -2
- package/_not-found/__next._not-found.txt +4 -3
- package/_not-found/__next._tree.txt +2 -2
- package/_not-found.html +1 -1
- package/_not-found.txt +13 -11
- package/ais-preview/index.html +263 -0
- package/ais-preview/meshy/README.md +23 -0
- package/ais-preview/vessels.js +316 -0
- package/ais-preview/web/ATTRIBUTION.md +25 -0
- package/ais-preview/web/ais-30.glb +0 -0
- package/ais-preview/web/ais-31.glb +0 -0
- package/ais-preview/web/ais-35.glb +0 -0
- package/ais-preview/web/ais-36.glb +0 -0
- package/ais-preview/web/ais-37.glb +0 -0
- package/ais-preview/web/ais-40.glb +0 -0
- package/ais-preview/web/ais-50.glb +0 -0
- package/ais-preview/web/ais-60.glb +0 -0
- package/ais-preview/web/ais-70.glb +0 -0
- package/ais-preview/web/ais-80.glb +0 -0
- package/boats/ais/ais-30.glb +0 -0
- package/boats/ais/ais-31.glb +0 -0
- package/boats/ais/ais-35.glb +0 -0
- package/boats/ais/ais-36.glb +0 -0
- package/boats/ais/ais-37.glb +0 -0
- package/boats/ais/ais-40.glb +0 -0
- package/boats/ais/ais-50.glb +0 -0
- package/boats/ais/ais-60.glb +0 -0
- package/boats/ais/ais-70.glb +0 -0
- package/boats/ais/ais-80.glb +0 -0
- package/index.html +1 -1
- package/index.txt +12 -12
- package/package.json +18 -19
- package/settings/__next._full.txt +15 -13
- package/settings/__next._head.txt +4 -4
- package/settings/__next._index.txt +4 -4
- package/settings/__next._tree.txt +2 -2
- package/settings/__next.settings.__PAGE__.txt +4 -4
- package/settings/__next.settings.txt +4 -3
- package/settings.html +1 -1
- package/settings.txt +15 -13
- package/_next/static/chunks/045c83caa4d15373.js +0 -1
- package/_next/static/chunks/04cc0e5e9b2549b5.js +0 -2
- package/_next/static/chunks/05498d2aba8ad072.js +0 -1
- package/_next/static/chunks/056bb58d7d0223f4.js +0 -1
- package/_next/static/chunks/06e0cd4a5af05adb.js +0 -1
- package/_next/static/chunks/0df9a48159a5de95.js +0 -135
- package/_next/static/chunks/19d7af5c164315cb.js +0 -1
- package/_next/static/chunks/2296899bc46a0855.js +0 -1
- package/_next/static/chunks/2474c03b842c10ab.js +0 -38
- package/_next/static/chunks/290728133a3e7513.js +0 -9
- package/_next/static/chunks/33a3c72f455c2711.js +0 -1
- package/_next/static/chunks/3abe6b32c7676e49.js +0 -1
- package/_next/static/chunks/3b9428693f2cc0d6.js +0 -1
- package/_next/static/chunks/4573d1a032e56240.js +0 -1
- package/_next/static/chunks/46da3d80b0234973.js +0 -1
- package/_next/static/chunks/4974092397cafa41.js +0 -1
- package/_next/static/chunks/4a440e0aa6a0e7f7.js +0 -135
- package/_next/static/chunks/55be29098903fc19.js +0 -1
- package/_next/static/chunks/611f819ef2b8cd4e.js +0 -38
- package/_next/static/chunks/727710e55f003daf.js +0 -36
- package/_next/static/chunks/72c822cfe5b6f4f2.js +0 -4
- package/_next/static/chunks/72d89c358c0d5483.js +0 -1
- package/_next/static/chunks/7c60d9d425c20d52.js +0 -1
- package/_next/static/chunks/7d74814a0cc0f1a8.js +0 -1
- package/_next/static/chunks/8610c545018747f6.css +0 -3
- package/_next/static/chunks/8bf2a6eefe03fbc9.js +0 -1
- package/_next/static/chunks/a2dfb6fc5208ab9b.js +0 -1
- package/_next/static/chunks/a5243176ef1c1147.js +0 -3
- package/_next/static/chunks/a59b67714973a59e.js +0 -1
- package/_next/static/chunks/a6dad97d9634a72d.js.map +0 -1
- package/_next/static/chunks/b08b2ebeb951051c.js +0 -1
- package/_next/static/chunks/b9d9a7e1cf2f6019.js +0 -1
- package/_next/static/chunks/b9fde64db49c8fdf.js +0 -1
- package/_next/static/chunks/ba6e6b346e330c1c.js +0 -1
- package/_next/static/chunks/c4793aebac6a4506.js +0 -54
- package/_next/static/chunks/c5ca29b672fb8724.js +0 -1
- package/_next/static/chunks/ca5d1b461892da4b.js +0 -1
- package/_next/static/chunks/dc7a868e9a2740f1.js +0 -9
- package/_next/static/chunks/e63b192414a38d4f.js +0 -783
- package/_next/static/chunks/eae6a84b628658b8.js +0 -362
- package/_next/static/chunks/ed1a1adcf94d3203.js +0 -1
- package/_next/static/chunks/f0df051aa5b9aee8.js +0 -1
- package/_next/static/chunks/fe9ff98ffedd5a18.js +0 -1
- package/_next/static/chunks/ff5e78db2e2b69dd.js +0 -1
- package/_next/static/chunks/turbopack-eb3e32db84948efc.js +0 -4
- package/_next/static/fEaz-HJDfJbXQ22pI4nGl/_clientMiddlewareManifest.json +0 -1
- /package/_next/static/chunks/{c8017b80fde2edc8.js → 0abo2oxxw3hpi.js} +0 -0
- /package/_next/static/chunks/{a6dad97d9634a72d.js → 0cz1d0mv5g_q7.js} +0 -0
- /package/_next/static/chunks/{4701c1fd00af0aba.js → 0l9s4rhr00adq.js} +0 -0
- /package/_next/static/chunks/{ff1a16fafef87110.js → 1d4h-sglyo8ft.js} +0 -0
- /package/_next/static/chunks/{026b02dd01b65e37.js → 2rsdqsatgq9ta.js} +0 -0
- /package/_next/static/chunks/{9395de7f841f8cc6.js → 2urimbxg5bqv3.js} +0 -0
- /package/_next/static/chunks/{fba1dfce801bc8b9.js → 3iuz3f0429awx.js} +0 -0
- /package/_next/static/{fEaz-HJDfJbXQ22pI4nGl → hlKDicTyNGfd7dmHqo5m5}/_buildManifest.js +0 -0
- /package/_next/static/{fEaz-HJDfJbXQ22pI4nGl → hlKDicTyNGfd7dmHqo5m5}/_ssgManifest.js +0 -0
- /package/_next/static/media/{GeistMonoVF-s.2cee7d16.woff → GeistMonoVF-s.1lv5tp2fpjxdz.woff} +0 -0
- /package/_next/static/media/{GeistVF-s.4c3c0b96.woff → GeistVF-s.0e569l9b0bre8.woff} +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
// Procedural low-poly AIS vessel models (three.js).
|
|
2
|
+
// One builder per AIS ship-type category. Built at ~real scale (length ~8-12 units,
|
|
3
|
+
// bow toward +Z, up +Y, beam along X). The preview page normalizes scale/centering.
|
|
4
|
+
//
|
|
5
|
+
// This module is intentionally framework-agnostic (plain three.js) so it can later
|
|
6
|
+
// be reused inside the app to replace the per-vessel GLTF models.
|
|
7
|
+
|
|
8
|
+
import * as THREE from 'three';
|
|
9
|
+
|
|
10
|
+
// ── The 11 AIS categories we model ───────────────────────────────────────────
|
|
11
|
+
// `current` = the model the app renders today for this type (via determineBoatType),
|
|
12
|
+
// `meshy` = expected filename under ./meshy/<id>.glb
|
|
13
|
+
export const AIS_TYPES = [
|
|
14
|
+
{ key: 'wig', code: 20, range: '20–29', labelFr: 'WIG (effet de sol)', current: 'ship' },
|
|
15
|
+
{ key: 'fishing', code: 30, range: '30', labelFr: 'Pêche', current: 'optimist' },
|
|
16
|
+
{ key: 'tug', code: 31, range: '31–32', labelFr: 'Remorqueur', current: 'ship' },
|
|
17
|
+
{ key: 'military', code: 35, range: '35', labelFr: 'Militaire', current: 'ship' },
|
|
18
|
+
{ key: 'sailing', code: 36, range: '36', labelFr: 'Voilier', current: 'sailboat' },
|
|
19
|
+
{ key: 'pleasure', code: 37, range: '37', labelFr: 'Plaisance', current: 'ship' },
|
|
20
|
+
{ key: 'hsc', code: 40, range: '40–49', labelFr: 'Navire rapide (HSC)', current: 'ship' },
|
|
21
|
+
{ key: 'pilot', code: 50, range: '50–59', labelFr: 'Pilote / spécial', current: 'ship' },
|
|
22
|
+
{ key: 'passenger', code: 60, range: '60–69', labelFr: 'Passagers', current: 'ship' },
|
|
23
|
+
{ key: 'cargo', code: 70, range: '70–79', labelFr: 'Cargo', current: 'ship' },
|
|
24
|
+
{ key: 'tanker', code: 80, range: '80–89', labelFr: 'Pétrolier (tanker)', current: 'ship' },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
// ── Materials (low-poly: flat shading) ───────────────────────────────────────
|
|
28
|
+
const M = {
|
|
29
|
+
hull: () => new THREE.MeshStandardMaterial({ color: 0xeef2f5, flatShading: true, roughness: 0.85, metalness: 0.05 }),
|
|
30
|
+
hullRed:() => new THREE.MeshStandardMaterial({ color: 0x8a1f1f, flatShading: true, roughness: 0.85 }),
|
|
31
|
+
hullDk: () => new THREE.MeshStandardMaterial({ color: 0x2b3138, flatShading: true, roughness: 0.9 }),
|
|
32
|
+
hullGrey:()=> new THREE.MeshStandardMaterial({ color: 0x8d99a4, flatShading: true, roughness: 0.8 }),
|
|
33
|
+
deck: () => new THREE.MeshStandardMaterial({ color: 0x9fb0bd, flatShading: true, roughness: 0.95 }),
|
|
34
|
+
cabin: () => new THREE.MeshStandardMaterial({ color: 0xe2e9ee, flatShading: true, roughness: 0.7 }),
|
|
35
|
+
glass: () => new THREE.MeshStandardMaterial({ color: 0x0a2a33, emissive: 0x09bfff, emissiveIntensity: 0.4, flatShading: true, roughness: 0.4 }),
|
|
36
|
+
dark: () => new THREE.MeshStandardMaterial({ color: 0x394049, flatShading: true, roughness: 0.85 }),
|
|
37
|
+
red: () => new THREE.MeshStandardMaterial({ color: 0xcc1414, flatShading: true, roughness: 0.7 }),
|
|
38
|
+
orange: () => new THREE.MeshStandardMaterial({ color: 0xff7a18, flatShading: true, roughness: 0.7 }),
|
|
39
|
+
sail: () => new THREE.MeshStandardMaterial({ color: 0xf4f6f8, flatShading: true, roughness: 1, side: THREE.DoubleSide }),
|
|
40
|
+
steel: () => new THREE.MeshStandardMaterial({ color: 0xb9c2cb, flatShading: true, roughness: 0.6, metalness: 0.3 }),
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// ── Primitive helpers ────────────────────────────────────────────────────────
|
|
44
|
+
function box(w, h, d, mat, x = 0, y = 0, z = 0) {
|
|
45
|
+
const m = new THREE.Mesh(new THREE.BoxGeometry(w, h, d), mat);
|
|
46
|
+
m.position.set(x, y, z);
|
|
47
|
+
return m;
|
|
48
|
+
}
|
|
49
|
+
function cyl(rt, rb, h, seg, mat, x = 0, y = 0, z = 0) {
|
|
50
|
+
const m = new THREE.Mesh(new THREE.CylinderGeometry(rt, rb, h, seg), mat);
|
|
51
|
+
m.position.set(x, y, z);
|
|
52
|
+
return m;
|
|
53
|
+
}
|
|
54
|
+
function sphere(r, mat, x = 0, y = 0, z = 0) {
|
|
55
|
+
const m = new THREE.Mesh(new THREE.SphereGeometry(r, 8, 6), mat);
|
|
56
|
+
m.position.set(x, y, z);
|
|
57
|
+
return m;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Low-poly hull: rectangular body + faceted (4-sided) cone bow. Returns a group
|
|
61
|
+
// whose deck top sits at y = depth/2.
|
|
62
|
+
function hull(len, beam, depth, mat) {
|
|
63
|
+
const g = new THREE.Group();
|
|
64
|
+
const bodyLen = len * 0.70;
|
|
65
|
+
g.add(box(beam, depth, bodyLen, mat, 0, 0, -len * 0.05));
|
|
66
|
+
|
|
67
|
+
const bow = new THREE.Mesh(new THREE.ConeGeometry(beam * 0.54, len * 0.34, 4), mat);
|
|
68
|
+
bow.rotation.set(Math.PI / 2, 0, Math.PI / 4); // apex toward +Z, flat bottom
|
|
69
|
+
bow.scale.y = depth / (beam * 1.08); // flatten vertically to hull depth
|
|
70
|
+
bow.position.set(0, 0, len * 0.5 - len * 0.17);
|
|
71
|
+
g.add(bow);
|
|
72
|
+
|
|
73
|
+
// Slight keel/bottom wedge for a less boxy underside
|
|
74
|
+
const keel = box(beam * 0.5, depth * 0.5, bodyLen * 0.9, mat, 0, -depth * 0.55, -len * 0.05);
|
|
75
|
+
g.add(keel);
|
|
76
|
+
return g;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ── Per-type builders ────────────────────────────────────────────────────────
|
|
80
|
+
function buildCargo() {
|
|
81
|
+
const g = new THREE.Group();
|
|
82
|
+
const L = 11, B = 3, D = 1.5;
|
|
83
|
+
g.add(hull(L, B, D, M.hull()));
|
|
84
|
+
const deck = D / 2;
|
|
85
|
+
// aft bridge block near stern
|
|
86
|
+
g.add(box(B * 0.8, 1.3, 1.6, M.cabin(), 0, deck + 0.65, -L * 0.36));
|
|
87
|
+
g.add(box(B * 0.55, 0.5, 1.0, M.glass(), 0, deck + 1.0, -L * 0.36));
|
|
88
|
+
// funnel
|
|
89
|
+
g.add(cyl(0.22, 0.26, 0.9, 8, M.dark(), 0, deck + 1.6, -L * 0.40));
|
|
90
|
+
// cargo hatches
|
|
91
|
+
for (let i = 0; i < 3; i++) {
|
|
92
|
+
g.add(box(B * 0.7, 0.35, 1.5, M.dark(), 0, deck + 0.18, L * 0.18 - i * 1.9));
|
|
93
|
+
}
|
|
94
|
+
// two masts/cranes
|
|
95
|
+
g.add(cyl(0.07, 0.07, 1.6, 6, M.steel(), B * 0.2, deck + 0.8, L * 0.05));
|
|
96
|
+
g.add(box(1.2, 0.08, 0.08, M.steel(), B * 0.2 + 0.4, deck + 1.4, L * 0.05));
|
|
97
|
+
return g;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function buildTanker() {
|
|
101
|
+
const g = new THREE.Group();
|
|
102
|
+
const L = 12, B = 3.2, D = 1.5;
|
|
103
|
+
g.add(hull(L, B, D, M.hull()));
|
|
104
|
+
const deck = D / 2;
|
|
105
|
+
// stern superstructure
|
|
106
|
+
g.add(box(B * 0.85, 1.5, 1.4, M.cabin(), 0, deck + 0.75, -L * 0.38));
|
|
107
|
+
g.add(box(B * 0.6, 0.45, 0.9, M.glass(), 0, deck + 1.15, -L * 0.38));
|
|
108
|
+
g.add(cyl(0.22, 0.26, 0.9, 8, M.red(), 0, deck + 1.7, -L * 0.42));
|
|
109
|
+
// cylindrical deck tanks / domes
|
|
110
|
+
for (let i = 0; i < 4; i++) {
|
|
111
|
+
g.add(cyl(0.5, 0.5, 0.55, 10, M.steel(), 0, deck + 0.28, L * 0.22 - i * 1.5));
|
|
112
|
+
}
|
|
113
|
+
// central pipeline
|
|
114
|
+
g.add(cyl(0.09, 0.09, L * 0.62, 6, M.dark(), 0, deck + 0.55, L * 0.02).rotateX(Math.PI / 2));
|
|
115
|
+
return g;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function buildPassenger() {
|
|
119
|
+
const g = new THREE.Group();
|
|
120
|
+
const L = 11, B = 3, D = 1.4;
|
|
121
|
+
g.add(hull(L, B, D, M.hull()));
|
|
122
|
+
const deck = D / 2;
|
|
123
|
+
// stacked decks (decreasing)
|
|
124
|
+
g.add(box(B * 0.92, 0.7, L * 0.72, M.cabin(), 0, deck + 0.35, 0));
|
|
125
|
+
g.add(box(B * 0.78, 0.6, L * 0.6, M.cabin(), 0, deck + 0.95, -0.2));
|
|
126
|
+
g.add(box(B * 0.6, 0.5, L * 0.45, M.cabin(), 0, deck + 1.45, -0.3));
|
|
127
|
+
// bridge
|
|
128
|
+
g.add(box(B * 0.5, 0.35, 0.7, M.glass(), 0, deck + 1.85, L * 0.12));
|
|
129
|
+
// window rows (glow)
|
|
130
|
+
for (let d = 0; d < 2; d++) {
|
|
131
|
+
g.add(box(B * 0.93, 0.12, L * 0.7, M.glass(), 0, deck + 0.4 + d * 0.6, 0));
|
|
132
|
+
}
|
|
133
|
+
// funnel + lifeboats
|
|
134
|
+
g.add(cyl(0.25, 0.3, 0.8, 10, M.red(), 0, deck + 2.1, -L * 0.18));
|
|
135
|
+
for (const s of [-1, 1]) {
|
|
136
|
+
g.add(box(0.6, 0.22, 0.3, M.orange(), s * B * 0.5, deck + 0.55, L * 0.1));
|
|
137
|
+
g.add(box(0.6, 0.22, 0.3, M.orange(), s * B * 0.5, deck + 0.55, -L * 0.1));
|
|
138
|
+
}
|
|
139
|
+
return g;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function buildFishing() {
|
|
143
|
+
const g = new THREE.Group();
|
|
144
|
+
const L = 8, B = 2.5, D = 1.4;
|
|
145
|
+
g.add(hull(L, B, D, M.hull()));
|
|
146
|
+
const deck = D / 2;
|
|
147
|
+
// forward cabin
|
|
148
|
+
g.add(box(B * 0.75, 1.0, 1.6, M.cabin(), 0, deck + 0.5, L * 0.22));
|
|
149
|
+
g.add(box(B * 0.6, 0.4, 0.5, M.glass(), 0, deck + 0.85, L * 0.30));
|
|
150
|
+
// mast + boom (net crane)
|
|
151
|
+
g.add(cyl(0.06, 0.06, 2.2, 6, M.steel(), 0, deck + 1.1, L * 0.1));
|
|
152
|
+
g.add(box(0.06, 0.06, 2.4, M.steel(), 0, deck + 1.9, -L * 0.05).rotateX(0.5));
|
|
153
|
+
// net reel (horizontal cylinder) aft
|
|
154
|
+
g.add(cyl(0.35, 0.35, B * 0.7, 10, M.dark(), 0, deck + 0.35, -L * 0.32).rotateZ(Math.PI / 2));
|
|
155
|
+
return g;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function buildSailing() {
|
|
159
|
+
const g = new THREE.Group();
|
|
160
|
+
const L = 9, B = 2.1, D = 1.3;
|
|
161
|
+
g.add(hull(L, B, D, M.hull()));
|
|
162
|
+
const deck = D / 2;
|
|
163
|
+
// low cabin
|
|
164
|
+
g.add(box(B * 0.6, 0.45, 2.2, M.cabin(), 0, deck + 0.22, L * 0.02));
|
|
165
|
+
g.add(box(B * 0.5, 0.18, 1.2, M.glass(), 0, deck + 0.4, L * 0.05));
|
|
166
|
+
// mast
|
|
167
|
+
const mastH = 7;
|
|
168
|
+
g.add(cyl(0.07, 0.09, mastH, 6, M.steel(), 0, deck + mastH / 2, L * 0.05));
|
|
169
|
+
// boom
|
|
170
|
+
g.add(box(0.06, 0.06, 3.4, M.steel(), 0, deck + 0.8, -L * 0.1));
|
|
171
|
+
// triangular mainsail (between mast and boom)
|
|
172
|
+
const sailShape = new THREE.Shape();
|
|
173
|
+
sailShape.moveTo(0, 0); sailShape.lineTo(0, mastH * 0.82); sailShape.lineTo(-3.2, 0); sailShape.closePath();
|
|
174
|
+
const sail = new THREE.Mesh(new THREE.ShapeGeometry(sailShape), M.sail());
|
|
175
|
+
sail.position.set(0, deck + 0.2, L * 0.05);
|
|
176
|
+
sail.rotation.y = Math.PI / 2;
|
|
177
|
+
g.add(sail);
|
|
178
|
+
// jib (small foresail)
|
|
179
|
+
const jib = new THREE.Shape();
|
|
180
|
+
jib.moveTo(0, 0); jib.lineTo(0, mastH * 0.6); jib.lineTo(2.4, 0); jib.closePath();
|
|
181
|
+
const jibM = new THREE.Mesh(new THREE.ShapeGeometry(jib), M.sail());
|
|
182
|
+
jibM.position.set(0, deck + 0.2, L * 0.05);
|
|
183
|
+
jibM.rotation.y = Math.PI / 2;
|
|
184
|
+
g.add(jibM);
|
|
185
|
+
// keel
|
|
186
|
+
g.add(box(0.18, 1.4, 1.6, M.dark(), 0, -1.0, -L * 0.02));
|
|
187
|
+
return g;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function buildPleasure() {
|
|
191
|
+
const g = new THREE.Group();
|
|
192
|
+
const L = 9, B = 2.6, D = 1.3;
|
|
193
|
+
g.add(hull(L, B, D, M.hull()));
|
|
194
|
+
const deck = D / 2;
|
|
195
|
+
// streamlined raised cabin
|
|
196
|
+
g.add(box(B * 0.8, 0.6, 3.2, M.cabin(), 0, deck + 0.3, L * 0.05));
|
|
197
|
+
g.add(box(B * 0.7, 0.4, 2.4, M.glass(), 0, deck + 0.55, L * 0.1));
|
|
198
|
+
// flybridge
|
|
199
|
+
g.add(box(B * 0.5, 0.35, 1.2, M.cabin(), 0, deck + 0.9, L * 0.0));
|
|
200
|
+
g.add(cyl(0.04, 0.04, 0.9, 6, M.steel(), 0, deck + 1.5, L * 0.0)); // antenna
|
|
201
|
+
// swim platform aft
|
|
202
|
+
g.add(box(B * 0.85, 0.12, 0.8, M.deck(), 0, deck - 0.1, -L * 0.46));
|
|
203
|
+
return g;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function buildHSC() {
|
|
207
|
+
const g = new THREE.Group();
|
|
208
|
+
const L = 10, B = 3.2, D = 1.0;
|
|
209
|
+
// catamaran-style twin hulls
|
|
210
|
+
for (const s of [-1, 1]) {
|
|
211
|
+
const h = hull(L, B * 0.34, D, M.hull());
|
|
212
|
+
h.position.x = s * B * 0.3;
|
|
213
|
+
g.add(h);
|
|
214
|
+
}
|
|
215
|
+
const deck = D / 2;
|
|
216
|
+
// connecting deck
|
|
217
|
+
g.add(box(B * 0.95, 0.25, L * 0.7, M.deck(), 0, deck, 0));
|
|
218
|
+
// sleek superstructure
|
|
219
|
+
g.add(box(B * 0.8, 0.6, L * 0.55, M.cabin(), 0, deck + 0.45, -L * 0.02));
|
|
220
|
+
g.add(box(B * 0.7, 0.35, L * 0.4, M.glass(), 0, deck + 0.6, L * 0.05));
|
|
221
|
+
// raked mast
|
|
222
|
+
g.add(box(0.08, 0.08, 1.6, M.steel(), 0, deck + 1.1, -L * 0.05).rotateX(-0.4));
|
|
223
|
+
return g;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function buildTug() {
|
|
227
|
+
const g = new THREE.Group();
|
|
228
|
+
const L = 7, B = 3, D = 1.6;
|
|
229
|
+
g.add(hull(L, B, D, M.hullDk()));
|
|
230
|
+
const deck = D / 2;
|
|
231
|
+
// tall wheelhouse forward-center
|
|
232
|
+
g.add(box(B * 0.7, 1.4, 1.8, M.red(), 0, deck + 0.7, L * 0.12));
|
|
233
|
+
g.add(box(B * 0.55, 0.5, 0.9, M.glass(), 0, deck + 1.2, L * 0.18));
|
|
234
|
+
// funnel
|
|
235
|
+
g.add(cyl(0.22, 0.26, 0.7, 8, M.dark(), 0, deck + 1.7, -L * 0.05));
|
|
236
|
+
// fenders along the bow
|
|
237
|
+
for (let i = 0; i < 4; i++) {
|
|
238
|
+
g.add(sphere(0.22, M.dark(), 0, deck - 0.1, L * 0.45 - i * 0.5));
|
|
239
|
+
}
|
|
240
|
+
// towing winch aft
|
|
241
|
+
g.add(cyl(0.3, 0.3, B * 0.5, 8, M.steel(), 0, deck + 0.25, -L * 0.32).rotateZ(Math.PI / 2));
|
|
242
|
+
return g;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function buildMilitary() {
|
|
246
|
+
const g = new THREE.Group();
|
|
247
|
+
const L = 11, B = 2.6, D = 1.4;
|
|
248
|
+
g.add(hull(L, B, D, M.hullGrey()));
|
|
249
|
+
const deck = D / 2;
|
|
250
|
+
// angular stealth superstructure (tapered stack)
|
|
251
|
+
g.add(box(B * 0.7, 0.7, 3.0, M.hullGrey(), 0, deck + 0.35, L * 0.0));
|
|
252
|
+
const tower = box(B * 0.45, 1.0, 1.2, M.hullGrey(), 0, deck + 1.0, L * 0.05);
|
|
253
|
+
tower.rotation.x = 0.06;
|
|
254
|
+
g.add(tower);
|
|
255
|
+
// pyramidal mast
|
|
256
|
+
g.add(cyl(0.02, 0.18, 1.4, 4, M.dark(), 0, deck + 1.9, L * 0.05));
|
|
257
|
+
// forward gun
|
|
258
|
+
g.add(box(0.5, 0.35, 0.6, M.hullGrey(), 0, deck + 0.25, L * 0.34));
|
|
259
|
+
g.add(cyl(0.05, 0.05, 1.2, 6, M.dark(), 0, deck + 0.35, L * 0.42).rotateX(Math.PI / 2));
|
|
260
|
+
return g;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function buildPilot() {
|
|
264
|
+
const g = new THREE.Group();
|
|
265
|
+
const L = 8, B = 2.6, D = 1.4;
|
|
266
|
+
g.add(hull(L, B, D, M.hull()));
|
|
267
|
+
const deck = D / 2;
|
|
268
|
+
// bright pilot hull band
|
|
269
|
+
g.add(box(B + 0.02, 0.3, L * 0.7, M.orange(), 0, deck - 0.05, -L * 0.05));
|
|
270
|
+
// central cabin with windows all round
|
|
271
|
+
g.add(box(B * 0.7, 1.0, 2.4, M.cabin(), 0, deck + 0.5, 0));
|
|
272
|
+
g.add(box(B * 0.72, 0.4, 1.8, M.glass(), 0, deck + 0.7, 0));
|
|
273
|
+
// radar dome on roof + mast
|
|
274
|
+
g.add(sphere(0.3, M.cabin(), 0, deck + 1.25, -0.2));
|
|
275
|
+
g.add(cyl(0.05, 0.05, 1.0, 6, M.steel(), 0, deck + 1.4, 0.4));
|
|
276
|
+
return g;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function buildWig() {
|
|
280
|
+
const g = new THREE.Group();
|
|
281
|
+
const L = 10, B = 1.6;
|
|
282
|
+
// aircraft-like fuselage (capsule)
|
|
283
|
+
const fus = cyl(0.6, 0.6, L * 0.7, 10, M.hull());
|
|
284
|
+
fus.rotation.x = Math.PI / 2;
|
|
285
|
+
g.add(fus);
|
|
286
|
+
// nose cone
|
|
287
|
+
const nose = new THREE.Mesh(new THREE.ConeGeometry(0.6, L * 0.22, 10), M.hull());
|
|
288
|
+
nose.rotation.x = Math.PI / 2;
|
|
289
|
+
nose.position.z = L * 0.45;
|
|
290
|
+
g.add(nose);
|
|
291
|
+
// cockpit glass
|
|
292
|
+
g.add(box(0.7, 0.4, 1.6, M.glass(), 0, 0.45, L * 0.22));
|
|
293
|
+
// short wings
|
|
294
|
+
for (const s of [-1, 1]) {
|
|
295
|
+
g.add(box(L * 0.42, 0.12, 1.6, M.steel(), s * (L * 0.28), -0.1, -L * 0.05));
|
|
296
|
+
g.add(cyl(0.18, 0.18, 0.5, 8, M.dark(), s * (L * 0.34), 0.0, -L * 0.05)); // engine pod
|
|
297
|
+
}
|
|
298
|
+
// tail fin + stabilizers
|
|
299
|
+
g.add(box(0.1, 1.4, 1.2, M.steel(), 0, 0.7, -L * 0.4));
|
|
300
|
+
g.add(box(2.4, 0.1, 0.8, M.steel(), 0, 0.9, -L * 0.44));
|
|
301
|
+
return g;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const BUILDERS = {
|
|
305
|
+
wig: buildWig, fishing: buildFishing, tug: buildTug, military: buildMilitary,
|
|
306
|
+
sailing: buildSailing, pleasure: buildPleasure, hsc: buildHSC, pilot: buildPilot,
|
|
307
|
+
passenger: buildPassenger, cargo: buildCargo, tanker: buildTanker,
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
export function createVessel(key) {
|
|
311
|
+
const build = BUILDERS[key];
|
|
312
|
+
if (!build) return new THREE.Group();
|
|
313
|
+
const g = build();
|
|
314
|
+
g.traverse((o) => { if (o.isMesh) { o.castShadow = false; o.receiveShadow = false; } });
|
|
315
|
+
return g;
|
|
316
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Attribution — flotte blanche AIS (public/ais-preview/web/)
|
|
2
|
+
|
|
3
|
+
Tous les modèles sont rendus avec un matériau blanc uniforme (style du `ship` de l'app).
|
|
4
|
+
Les `.glb` issus de modèles texturés ont été convertis **géométrie seule** (textures retirées).
|
|
5
|
+
|
|
6
|
+
- **CC0** : domaine public, aucune attribution requise.
|
|
7
|
+
- **CC-BY** : redistribuable **avec** attribution (conserver les crédits ci-dessous).
|
|
8
|
+
- **perso** : modèle déjà présent dans `models/` (fourni par toi, source d'origine inconnue — à vérifier avant redistribution publique).
|
|
9
|
+
|
|
10
|
+
| Type AIS | Fichier | Modèle / source | Auteur | Licence |
|
|
11
|
+
|---|---|---|---|---|
|
|
12
|
+
| ais-30 (pêche) | ais-30.glb | `models/ship` (perso) | — (à vérifier) | perso |
|
|
13
|
+
| ais-31 (remorqueur) | ais-31.glb | Poly Pizza « TugBoat » | Some Random Person | CC-BY |
|
|
14
|
+
| ais-35 (militaire) | ais-35.glb | Poly Pizza (m/aYAmfkUYZjg) | — (à vérifier) | CC-BY |
|
|
15
|
+
| ais-36 (voilier) | ais-36.glb | `models/sailboat` (perso) | — (à vérifier) | perso |
|
|
16
|
+
| ais-37 (plaisance) | ais-37.glb | Poly Pizza « Yacht » | Alex Safayan | CC-BY |
|
|
17
|
+
| ais-40 (HSC) | ais-40.glb | Poly Pizza « Military Boat » (réutilisé en vedette) | Zsky | CC-BY |
|
|
18
|
+
| ais-50 (pilote) | ais-50.glb | Poly Pizza « Boat » (m/84-DYhLzxNq) | Poly by Google | CC-BY |
|
|
19
|
+
| ais-60 (passagers) | ais-60.glb | Poly Pizza « Cruise ship » | Poly by Google | CC-BY |
|
|
20
|
+
| ais-70 (cargo) | ais-70.glb | Poly Pizza « Container Ship » | Alex Safayan | CC-BY |
|
|
21
|
+
| ais-80 (tanker) | ais-80.glb | `models/cargo` « Low Poly Cargo Ship » (Sketchfab) | Javier_Fernandez | CC-BY |
|
|
22
|
+
|
|
23
|
+
## Crédits CC-BY-4.0 à conserver
|
|
24
|
+
- « Low Poly Cargo Ship » par Javier_Fernandez — https://sketchfab.com/3d-models/low-poly-cargo-ship-4c22cbaf01c1427f8ab60b3a07b1b32c
|
|
25
|
+
- « TugBoat », « Military Boat », « Yacht », « Cruise ship », « Container Ship » — via https://poly.pizza (voir la page de chaque modèle pour le crédit complet).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--fEaz_HJDfJbXQ22pI4nGl--><html lang="en"><head><meta charSet="utf-8"/><link rel="preconnect" href="/" crossorigin=""/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/chunks/8610c545018747f6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/ed1a1adcf94d3203.js"/><script src="/ocearo-ui/_next/static/chunks/72c822cfe5b6f4f2.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/04cc0e5e9b2549b5.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/045c83caa4d15373.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-eb3e32db84948efc.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/b9fde64db49c8fdf.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/8bf2a6eefe03fbc9.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/f0df051aa5b9aee8.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/727710e55f003daf.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/a59b67714973a59e.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js" async=""></script><meta name="next-size-adjust" content=""/><meta name="theme-color" media="(prefers-color-scheme: light)" content="#4bbcd8"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0a2e3d"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><script src="/ocearo-ui/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="h-[100dvh] bg-hud-bg flex items-center justify-center"><div class="animate-pulse text-hud-main">Loading...</div></div><!--$--><!--/$--><script src="/ocearo-ui/_next/static/chunks/ed1a1adcf94d3203.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n4:I[47257,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"ClientPageRoot\"]\n5:I[81694,[\"/ocearo-ui/_next/static/chunks/b9fde64db49c8fdf.js\",\"/ocearo-ui/_next/static/chunks/8bf2a6eefe03fbc9.js\",\"/ocearo-ui/_next/static/chunks/f0df051aa5b9aee8.js\",\"/ocearo-ui/_next/static/chunks/727710e55f003daf.js\",\"/ocearo-ui/_next/static/chunks/a59b67714973a59e.js\",\"/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js\"],\"default\"]\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n:HL[\"/ocearo-ui/_next/static/chunks/8610c545018747f6.css\",\"style\"]\n:HC[\"/\",\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"fEaz-HJDfJbXQ22pI4nGl\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/8610c545018747f6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{}],[\"$\",\"body\",null,{\"className\":\"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/b9fde64db49c8fdf.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/8bf2a6eefe03fbc9.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/ocearo-ui/_next/static/chunks/f0df051aa5b9aee8.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/ocearo-ui/_next/static/chunks/727710e55f003daf.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/ocearo-ui/_next/static/chunks/a59b67714973a59e.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#4bbcd8\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#0a2e3d\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"IconMark\"]\na:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"4\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"6\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"$L10\",\"12\",{}]]\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preconnect" href="/" crossorigin=""/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/1gizigk3w6q7j.js"/><script src="/ocearo-ui/_next/static/chunks/2lvvt2f1l5sfu.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jh1u-s3k0bkk.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/2atijj_pkc4uc.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1ptwltjb3h6jf.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-0pirmko-w-775.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/2baz6j1q913qw.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/009rlietvsaq2.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/08gn5_gd6amkq.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/0wzr1__so6xme.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1bz0tcmhjmjgh.js" async=""></script><meta name="next-size-adjust" content=""/><meta name="description" content="Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."/><meta name="theme-color" content="#4bbcd8" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0a2e3d" media="(prefers-color-scheme: dark)"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><script src="/ocearo-ui/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="h-[100dvh] bg-hud-bg flex items-center justify-center"><div class="animate-pulse text-hud-main">Loading...</div></div><!--$--><!--/$--><script src="/ocearo-ui/_next/static/chunks/1gizigk3w6q7j.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n4:I[47257,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"ClientPageRoot\"]\n5:I[81694,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\",\"/ocearo-ui/_next/static/chunks/2baz6j1q913qw.js\",\"/ocearo-ui/_next/static/chunks/009rlietvsaq2.js\",\"/ocearo-ui/_next/static/chunks/08gn5_gd6amkq.js\",\"/ocearo-ui/_next/static/chunks/0wzr1__so6xme.js\",\"/ocearo-ui/_next/static/chunks/1bz0tcmhjmjgh.js\"],\"default\"]\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\",1]\n:HL[\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"style\"]\n:HC[\"/\",\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"meta\",null,{\"name\":\"description\",\"content\":\"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation.\"}]}],[\"$\",\"body\",null,{\"className\":\"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/2baz6j1q913qw.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/009rlietvsaq2.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/ocearo-ui/_next/static/chunks/08gn5_gd6amkq.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/ocearo-ui/_next/static/chunks/0wzr1__so6xme.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/ocearo-ui/_next/static/chunks/1bz0tcmhjmjgh.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"hlKDicTyNGfd7dmHqo5m5\"}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#4bbcd8\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0a2e3d\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"IconMark\"]\na:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"4\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"6\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"$L10\",\"12\",{}]]\n"])</script></body></html>
|
package/index.txt
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[39756,["/ocearo-ui/_next/static/chunks/
|
|
3
|
-
3:I[37457,["/ocearo-ui/_next/static/chunks/
|
|
4
|
-
4:I[47257,["/ocearo-ui/_next/static/chunks/
|
|
5
|
-
5:I[81694,["/ocearo-ui/_next/static/chunks/
|
|
6
|
-
8:I[97367,["/ocearo-ui/_next/static/chunks/
|
|
2
|
+
2:I[39756,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"default"]
|
|
3
|
+
3:I[37457,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"default"]
|
|
4
|
+
4:I[47257,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"ClientPageRoot"]
|
|
5
|
+
5:I[81694,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js","/ocearo-ui/_next/static/chunks/2baz6j1q913qw.js","/ocearo-ui/_next/static/chunks/009rlietvsaq2.js","/ocearo-ui/_next/static/chunks/08gn5_gd6amkq.js","/ocearo-ui/_next/static/chunks/0wzr1__so6xme.js","/ocearo-ui/_next/static/chunks/1bz0tcmhjmjgh.js"],"default"]
|
|
6
|
+
8:I[97367,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"OutletBoundary"]
|
|
7
7
|
9:"$Sreact.suspense"
|
|
8
|
-
b:I[97367,["/ocearo-ui/_next/static/chunks/
|
|
9
|
-
d:I[97367,["/ocearo-ui/_next/static/chunks/
|
|
10
|
-
f:I[68027,["/ocearo-ui/_next/static/chunks/
|
|
11
|
-
:HL["/ocearo-ui/_next/static/chunks/
|
|
8
|
+
b:I[97367,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"ViewportBoundary"]
|
|
9
|
+
d:I[97367,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"MetadataBoundary"]
|
|
10
|
+
f:I[68027,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"default",1]
|
|
11
|
+
:HL["/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css","style"]
|
|
12
12
|
:HC["/",""]
|
|
13
|
-
0:{"P":null,"
|
|
13
|
+
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":["$","meta",null,{"name":"description","content":"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."}]}],["$","body",null,{"className":"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/ocearo-ui/_next/static/chunks/2baz6j1q913qw.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/ocearo-ui/_next/static/chunks/009rlietvsaq2.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/ocearo-ui/_next/static/chunks/08gn5_gd6amkq.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/ocearo-ui/_next/static/chunks/0wzr1__so6xme.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/ocearo-ui/_next/static/chunks/1bz0tcmhjmjgh.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"hlKDicTyNGfd7dmHqo5m5"}
|
|
14
14
|
6:{}
|
|
15
15
|
7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
16
|
-
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","media":"(prefers-color-scheme: light)"
|
|
17
|
-
10:I[27201,["/ocearo-ui/_next/static/chunks/
|
|
16
|
+
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","content":"#4bbcd8","media":"(prefers-color-scheme: light)"}],["$","meta","3",{"name":"theme-color","content":"#0a2e3d","media":"(prefers-color-scheme: dark)"}]]
|
|
17
|
+
10:I[27201,["/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js","/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js"],"IconMark"]
|
|
18
18
|
a:null
|
|
19
19
|
e:[["$","title","0",{"children":"Ocearo"}],["$","meta","1",{"name":"description","content":"Sailing made smarter"}],["$","link","2",{"rel":"manifest","href":"./manifest.json","crossOrigin":"$undefined"}],["$","meta","3",{"name":"format-detection","content":"telephone=no"}],["$","meta","4",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","5",{"name":"apple-mobile-web-app-title","content":"Ocearo"}],["$","meta","6",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","7",{"rel":"shortcut icon","href":"./favicon.ico"}],["$","link","8",{"rel":"icon","href":"./favicon.ico","type":"image/x-icon"}],["$","link","9",{"rel":"icon","href":"./favicon.svg","type":"image/svg+xml","sizes":"any"}],["$","link","10",{"rel":"icon","href":"./favicon-96x96.png","type":"image/png","sizes":"96x96"}],["$","link","11",{"rel":"apple-touch-icon","href":"./apple-touch-icon.png"}],["$","$L10","12",{}]]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ocearo-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Ocean Robot UI: 3D visualization dashboard for signalk",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -17,35 +17,34 @@
|
|
|
17
17
|
"dev": "next dev",
|
|
18
18
|
"build": "next build",
|
|
19
19
|
"start": "next start",
|
|
20
|
-
"lint": "
|
|
20
|
+
"lint": "eslint .",
|
|
21
21
|
"link": "ln -s $PWD/out $HOME/.signalk/node_modules/ocearo-ui"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@fortawesome/free-solid-svg-icons": "^7.
|
|
25
|
-
"@fortawesome/react-fontawesome": "^3.
|
|
24
|
+
"@fortawesome/free-solid-svg-icons": "^7.3.0",
|
|
25
|
+
"@fortawesome/react-fontawesome": "^3.3.1",
|
|
26
26
|
"@react-three/drei": "^10.7.7",
|
|
27
|
-
"@react-three/fiber": "^9.
|
|
27
|
+
"@react-three/fiber": "^9.6.1",
|
|
28
28
|
"@signalk/client": "^2.4.0",
|
|
29
|
-
"@tailwindcss/postcss": "^4.1
|
|
29
|
+
"@tailwindcss/postcss": "^4.3.1",
|
|
30
30
|
"@use-gesture/react": "^10.3.1",
|
|
31
|
-
"framer-motion": "^12.
|
|
32
|
-
"i18next": "^
|
|
31
|
+
"framer-motion": "^12.42.0",
|
|
32
|
+
"i18next": "^26.3.3",
|
|
33
33
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
34
|
-
"next": "^16.
|
|
35
|
-
"postcss": "^8.5.
|
|
36
|
-
"react": "^19",
|
|
37
|
-
"react-dom": "^19",
|
|
38
|
-
"react-i18next": "^
|
|
39
|
-
"recharts": "^3.
|
|
40
|
-
"three": "^0.
|
|
34
|
+
"next": "^16.2.9",
|
|
35
|
+
"postcss": "^8.5.16",
|
|
36
|
+
"react": "^19.2.7",
|
|
37
|
+
"react-dom": "^19.2.7",
|
|
38
|
+
"react-i18next": "^17.0.8",
|
|
39
|
+
"recharts": "^3.9.0",
|
|
40
|
+
"three": "^0.185.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"eslint": "^9.
|
|
44
|
-
"eslint-config-next": "16.
|
|
45
|
-
"tailwindcss": "^4.1
|
|
43
|
+
"eslint": "^9.39.4",
|
|
44
|
+
"eslint-config-next": "^16.2.9",
|
|
45
|
+
"tailwindcss": "^4.3.1"
|
|
46
46
|
},
|
|
47
47
|
"overrides": {
|
|
48
|
-
"ajv": "^8.18.0",
|
|
49
48
|
"minimatch": "^10.2.1",
|
|
50
49
|
"glob": "^11.0.0",
|
|
51
50
|
"rimraf": "^6.0.0",
|