jaml-ui 1.0.0 → 1.0.2
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/dist/assets/{searchPoolWorker-DWobBIhl.js → searchPoolWorker-DHh9a5GD.js} +2 -2
- package/dist/assets/searchPoolWorker-DHh9a5GD.js.map +1 -0
- package/dist/chunks/{jamlSeeds-3ILzc_rj.js → jamlSeeds-CKHvpjhC.js} +1 -1
- package/dist/chunks/{jamlSeeds-3ILzc_rj.js.map → jamlSeeds-CKHvpjhC.js.map} +1 -1
- package/dist/chunks/{motelyItemFormats-CNrFzcCI.js → motelyItemFormats-Dyq1BINO.js} +275 -267
- package/dist/chunks/motelyItemFormats-Dyq1BINO.js.map +1 -0
- package/dist/chunks/{searchPoolWorker-tBaSbLZu.js → searchPoolWorker-DgRqVj_q.js} +2 -2
- package/dist/chunks/searchPoolWorker-DgRqVj_q.js.map +1 -0
- package/dist/chunks/{assets-Bb6wV80_.js → spriteMapper-C2mqQHLj.js} +2417 -2
- package/dist/chunks/spriteMapper-C2mqQHLj.js.map +1 -0
- package/dist/chunks/{ui-Dn8IIoV3.js → ui-LfKBGL5-.js} +675 -791
- package/dist/chunks/ui-LfKBGL5-.js.map +1 -0
- package/dist/core.js +7 -8
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1185 -1230
- package/dist/index.js.map +1 -1
- package/dist/lib/motely/runtime.d.ts +7 -0
- package/dist/motely.js +10 -11
- package/dist/motely.js.map +1 -1
- package/dist/ui/jimbo.css +1 -1
- package/dist/ui/jimboApp.d.ts +3 -6
- package/dist/ui/jimboBackground.d.ts +4 -8
- package/dist/ui/sprites.d.ts +2 -1
- package/dist/ui.d.ts +0 -2
- package/dist/ui.js +2 -3
- package/package.json +15 -39
- package/dist/assets/searchPoolWorker-DWobBIhl.js.map +0 -1
- package/dist/chunks/assets-Bb6wV80_.js.map +0 -1
- package/dist/chunks/motelyItemFormats-CNrFzcCI.js.map +0 -1
- package/dist/chunks/searchPoolWorker-tBaSbLZu.js.map +0 -1
- package/dist/chunks/spriteMapper-CajFGgUU.js +0 -2419
- package/dist/chunks/spriteMapper-CajFGgUU.js.map +0 -1
- package/dist/chunks/tokens-Qrhlekc4.js +0 -57
- package/dist/chunks/tokens-Qrhlekc4.js.map +0 -1
- package/dist/chunks/ui-Dn8IIoV3.js.map +0 -1
- package/dist/r3f/Card3D.d.ts +0 -25
- package/dist/r3f/JimboBillboard.d.ts +0 -10
- package/dist/r3f/JimboText3D.d.ts +0 -9
- package/dist/r3f.d.ts +0 -3
- package/dist/r3f.js +0 -235
- package/dist/r3f.js.map +0 -1
- package/dist/ui/JimboPanelSplitter.d.ts +0 -8
- package/dist/ui/showcase.d.ts +0 -38
package/dist/r3f/Card3D.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { MotelySpriteData } from '../decode/motelySprite.js';
|
|
2
|
-
export declare const CARD_DIMENSIONS: {
|
|
3
|
-
readonly WIDTH: 0.7;
|
|
4
|
-
readonly HEIGHT: 0.95;
|
|
5
|
-
readonly DEPTH: 0.02;
|
|
6
|
-
};
|
|
7
|
-
export declare const CARD_MAGNET: {
|
|
8
|
-
readonly MAX_TILT_X: 0.36;
|
|
9
|
-
readonly MAX_TILT_Y: 0.42;
|
|
10
|
-
readonly MAX_SHIFT: 0.038;
|
|
11
|
-
readonly TWIST_Z: 0.11;
|
|
12
|
-
readonly LERP_IN: 18;
|
|
13
|
-
readonly LERP_OUT: 10;
|
|
14
|
-
};
|
|
15
|
-
export interface Card3DProps {
|
|
16
|
-
sprite: MotelySpriteData;
|
|
17
|
-
position?: [number, number, number];
|
|
18
|
-
rotation?: [number, number, number];
|
|
19
|
-
selected?: boolean;
|
|
20
|
-
highlighted?: boolean;
|
|
21
|
-
onClick?: () => void;
|
|
22
|
-
onPointerEnter?: () => void;
|
|
23
|
-
onPointerLeave?: () => void;
|
|
24
|
-
}
|
|
25
|
-
export declare const Card3D: import('react').NamedExoticComponent<Card3DProps>;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { MotelySpriteData } from '../decode/motelySprite.js';
|
|
2
|
-
export interface JimboBillboardProps {
|
|
3
|
-
sprite: MotelySpriteData | null;
|
|
4
|
-
label?: string;
|
|
5
|
-
width?: number;
|
|
6
|
-
height?: number;
|
|
7
|
-
yLockOnly?: boolean;
|
|
8
|
-
position?: [number, number, number];
|
|
9
|
-
}
|
|
10
|
-
export declare function JimboBillboard(props: JimboBillboardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface JimboText3DProps {
|
|
2
|
-
children: string;
|
|
3
|
-
color?: string;
|
|
4
|
-
outlineColor?: string;
|
|
5
|
-
outlineWidth?: number;
|
|
6
|
-
position?: [number, number, number];
|
|
7
|
-
fontSize?: number;
|
|
8
|
-
}
|
|
9
|
-
export declare function JimboText3D({ children, color, outlineColor, outlineWidth, position, fontSize }: JimboText3DProps): import("react/jsx-runtime").JSX.Element;
|
package/dist/r3f.d.ts
DELETED
package/dist/r3f.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./chunks/tokens-Qrhlekc4.js";
|
|
2
|
-
import { n as t } from "./chunks/assets-Bb6wV80_.js";
|
|
3
|
-
import { memo as n, useMemo as r, useRef as i, useState as a } from "react";
|
|
4
|
-
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import { useFrame as c, useLoader as l } from "@react-three/fiber";
|
|
6
|
-
import { animated as u, useSpring as d } from "@react-spring/three";
|
|
7
|
-
import * as f from "three";
|
|
8
|
-
import { Billboard as p, Text as m } from "@react-three/drei";
|
|
9
|
-
//#region src/r3f/Card3D.tsx
|
|
10
|
-
var h = {
|
|
11
|
-
WIDTH: .7,
|
|
12
|
-
HEIGHT: .95,
|
|
13
|
-
DEPTH: .02
|
|
14
|
-
}, g = {
|
|
15
|
-
MAX_TILT_X: .36,
|
|
16
|
-
MAX_TILT_Y: .42,
|
|
17
|
-
MAX_SHIFT: .038,
|
|
18
|
-
TWIST_Z: .11,
|
|
19
|
-
LERP_IN: 18,
|
|
20
|
-
LERP_OUT: 10
|
|
21
|
-
};
|
|
22
|
-
function _(e) {
|
|
23
|
-
let t = l(f.TextureLoader, e.atlasPath);
|
|
24
|
-
return r(() => {
|
|
25
|
-
let n = t.clone();
|
|
26
|
-
return n.colorSpace = f.SRGBColorSpace, n.magFilter = f.NearestFilter, n.minFilter = f.NearestFilter, n.repeat.set(1 / e.gridCols, 1 / e.gridRows), n.offset.set(e.gridCol / e.gridCols, 1 - (e.gridRow + 1) / e.gridRows), n.needsUpdate = !0, n;
|
|
27
|
-
}, [
|
|
28
|
-
t,
|
|
29
|
-
e.gridCol,
|
|
30
|
-
e.gridRow,
|
|
31
|
-
e.gridCols,
|
|
32
|
-
e.gridRows
|
|
33
|
-
]);
|
|
34
|
-
}
|
|
35
|
-
var v = n(function({ sprite: e, position: t = [
|
|
36
|
-
0,
|
|
37
|
-
0,
|
|
38
|
-
0
|
|
39
|
-
], rotation: n = [
|
|
40
|
-
0,
|
|
41
|
-
0,
|
|
42
|
-
0
|
|
43
|
-
], selected: l = !1, highlighted: p = !1, onClick: m, onPointerEnter: v, onPointerLeave: y }) {
|
|
44
|
-
let b = i(null), x = i({
|
|
45
|
-
rx: 0,
|
|
46
|
-
ry: 0,
|
|
47
|
-
rz: 0,
|
|
48
|
-
ox: 0,
|
|
49
|
-
oy: 0
|
|
50
|
-
}), [S, C] = a(!1), w = _(e), { posY: T, scale: E } = d({
|
|
51
|
-
posY: l ? .3 : S ? .15 : 0,
|
|
52
|
-
scale: S ? 1.08 : l ? 1.05 : 1,
|
|
53
|
-
config: {
|
|
54
|
-
tension: 300,
|
|
55
|
-
friction: 20
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
c((e, t) => {
|
|
59
|
-
let n = b.current;
|
|
60
|
-
if (!n) return;
|
|
61
|
-
let r = x.current, i = S ? g.LERP_IN : g.LERP_OUT, a = 1 - Math.exp(-i * t);
|
|
62
|
-
n.rotation.x = f.MathUtils.lerp(n.rotation.x, r.rx, a), n.rotation.y = f.MathUtils.lerp(n.rotation.y, r.ry, a), n.rotation.z = f.MathUtils.lerp(n.rotation.z, r.rz, a), n.position.x = f.MathUtils.lerp(n.position.x, r.ox, a), n.position.y = f.MathUtils.lerp(n.position.y, r.oy, a);
|
|
63
|
-
});
|
|
64
|
-
let D = r(() => p ? "#e4b643" : "#ffffff", [p]), O = (e) => {
|
|
65
|
-
e.stopPropagation();
|
|
66
|
-
let t = e.uv;
|
|
67
|
-
if (!t) return;
|
|
68
|
-
let n = f.MathUtils.clamp((t.x - .5) * 2, -1, 1), r = f.MathUtils.clamp((t.y - .5) * 2, -1, 1);
|
|
69
|
-
x.current.ry = -n * g.MAX_TILT_Y, x.current.rx = r * g.MAX_TILT_X, x.current.rz = -n * r * g.TWIST_Z, x.current.ox = n * g.MAX_SHIFT, x.current.oy = -r * g.MAX_SHIFT * .65;
|
|
70
|
-
}, k = () => {
|
|
71
|
-
x.current = {
|
|
72
|
-
rx: 0,
|
|
73
|
-
ry: 0,
|
|
74
|
-
rz: 0,
|
|
75
|
-
ox: 0,
|
|
76
|
-
oy: 0
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
return w ? /* @__PURE__ */ s(u.group, {
|
|
80
|
-
"position-x": t[0],
|
|
81
|
-
"position-y": T.to((e) => t[1] + e),
|
|
82
|
-
"position-z": t[2],
|
|
83
|
-
"rotation-x": n[0],
|
|
84
|
-
"rotation-y": n[1],
|
|
85
|
-
"rotation-z": n[2],
|
|
86
|
-
scale: E,
|
|
87
|
-
children: [/* @__PURE__ */ s("mesh", {
|
|
88
|
-
visible: !1,
|
|
89
|
-
onClick: (e) => {
|
|
90
|
-
e.stopPropagation(), m?.();
|
|
91
|
-
},
|
|
92
|
-
onPointerMove: O,
|
|
93
|
-
onPointerEnter: (e) => {
|
|
94
|
-
e.stopPropagation(), C(!0), v?.(), document.body.style.cursor = "pointer";
|
|
95
|
-
},
|
|
96
|
-
onPointerLeave: (e) => {
|
|
97
|
-
e.stopPropagation(), C(!1), k(), y?.(), document.body.style.cursor = "auto";
|
|
98
|
-
},
|
|
99
|
-
children: [/* @__PURE__ */ o("boxGeometry", { args: [
|
|
100
|
-
h.WIDTH,
|
|
101
|
-
h.HEIGHT,
|
|
102
|
-
h.DEPTH * 2
|
|
103
|
-
] }), /* @__PURE__ */ o("meshBasicMaterial", {})]
|
|
104
|
-
}), /* @__PURE__ */ s("group", {
|
|
105
|
-
ref: b,
|
|
106
|
-
children: [
|
|
107
|
-
p && /* @__PURE__ */ o("pointLight", {
|
|
108
|
-
color: D,
|
|
109
|
-
intensity: 1.5,
|
|
110
|
-
distance: 1,
|
|
111
|
-
position: [
|
|
112
|
-
0,
|
|
113
|
-
0,
|
|
114
|
-
.1
|
|
115
|
-
]
|
|
116
|
-
}),
|
|
117
|
-
/* @__PURE__ */ s("mesh", {
|
|
118
|
-
castShadow: !0,
|
|
119
|
-
receiveShadow: !0,
|
|
120
|
-
children: [
|
|
121
|
-
/* @__PURE__ */ o("boxGeometry", { args: [
|
|
122
|
-
h.WIDTH,
|
|
123
|
-
h.HEIGHT,
|
|
124
|
-
h.DEPTH
|
|
125
|
-
] }),
|
|
126
|
-
/* @__PURE__ */ o("meshBasicMaterial", {
|
|
127
|
-
attach: "material-4",
|
|
128
|
-
map: w,
|
|
129
|
-
toneMapped: !1
|
|
130
|
-
}),
|
|
131
|
-
/* @__PURE__ */ o("meshStandardMaterial", {
|
|
132
|
-
attach: "material-5",
|
|
133
|
-
color: "#1a1a2e",
|
|
134
|
-
metalness: .2,
|
|
135
|
-
roughness: .8
|
|
136
|
-
}),
|
|
137
|
-
/* @__PURE__ */ o("meshStandardMaterial", {
|
|
138
|
-
attach: "material-0",
|
|
139
|
-
color: "#f5f5dc"
|
|
140
|
-
}),
|
|
141
|
-
/* @__PURE__ */ o("meshStandardMaterial", {
|
|
142
|
-
attach: "material-1",
|
|
143
|
-
color: "#f5f5dc"
|
|
144
|
-
}),
|
|
145
|
-
/* @__PURE__ */ o("meshStandardMaterial", {
|
|
146
|
-
attach: "material-2",
|
|
147
|
-
color: "#f5f5dc"
|
|
148
|
-
}),
|
|
149
|
-
/* @__PURE__ */ o("meshStandardMaterial", {
|
|
150
|
-
attach: "material-3",
|
|
151
|
-
color: "#f5f5dc"
|
|
152
|
-
})
|
|
153
|
-
]
|
|
154
|
-
}),
|
|
155
|
-
l && /* @__PURE__ */ s("mesh", {
|
|
156
|
-
position: [
|
|
157
|
-
0,
|
|
158
|
-
0,
|
|
159
|
-
-h.DEPTH
|
|
160
|
-
],
|
|
161
|
-
children: [/* @__PURE__ */ o("ringGeometry", { args: [
|
|
162
|
-
.45,
|
|
163
|
-
.5,
|
|
164
|
-
32
|
|
165
|
-
] }), /* @__PURE__ */ o("meshBasicMaterial", {
|
|
166
|
-
color: "#e4b643",
|
|
167
|
-
transparent: !0,
|
|
168
|
-
opacity: .8
|
|
169
|
-
})]
|
|
170
|
-
})
|
|
171
|
-
]
|
|
172
|
-
})]
|
|
173
|
-
}) : null;
|
|
174
|
-
});
|
|
175
|
-
//#endregion
|
|
176
|
-
//#region src/r3f/JimboBillboard.tsx
|
|
177
|
-
function y(e) {
|
|
178
|
-
return e.sprite ? /* @__PURE__ */ o(b, {
|
|
179
|
-
...e,
|
|
180
|
-
sprite: e.sprite
|
|
181
|
-
}) : null;
|
|
182
|
-
}
|
|
183
|
-
function b({ sprite: e, width: t = 3.4, height: n = 4.5, yLockOnly: i = !1, position: a = [
|
|
184
|
-
0,
|
|
185
|
-
0,
|
|
186
|
-
0
|
|
187
|
-
] }) {
|
|
188
|
-
let s = l(f.TextureLoader, e.atlasPath), c = r(() => {
|
|
189
|
-
let t = s.clone();
|
|
190
|
-
return t.magFilter = f.NearestFilter, t.minFilter = f.NearestFilter, t.repeat.set(1 / e.gridCols, 1 / e.gridRows), t.offset.set(e.gridCol / e.gridCols, 1 - (e.gridRow + 1) / e.gridRows), t.needsUpdate = !0, t;
|
|
191
|
-
}, [
|
|
192
|
-
s,
|
|
193
|
-
e.gridCol,
|
|
194
|
-
e.gridRow,
|
|
195
|
-
e.gridCols,
|
|
196
|
-
e.gridRows
|
|
197
|
-
]);
|
|
198
|
-
return /* @__PURE__ */ o(p, {
|
|
199
|
-
lockY: i,
|
|
200
|
-
lockX: !1,
|
|
201
|
-
lockZ: !1,
|
|
202
|
-
position: a,
|
|
203
|
-
children: /* @__PURE__ */ o("mesh", {
|
|
204
|
-
material: r(() => new f.MeshBasicMaterial({
|
|
205
|
-
map: c,
|
|
206
|
-
transparent: !0,
|
|
207
|
-
alphaTest: .5
|
|
208
|
-
}), [c]),
|
|
209
|
-
children: /* @__PURE__ */ o("planeGeometry", { args: [t, n] })
|
|
210
|
-
})
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
//#endregion
|
|
214
|
-
//#region src/r3f/JimboText3D.tsx
|
|
215
|
-
function x({ children: n, color: r = e.WHITE, outlineColor: i = e.BLACK, outlineWidth: a = .05, position: s = [
|
|
216
|
-
0,
|
|
217
|
-
0,
|
|
218
|
-
0
|
|
219
|
-
], fontSize: c = 1 }) {
|
|
220
|
-
return /* @__PURE__ */ o(m, {
|
|
221
|
-
position: s,
|
|
222
|
-
fontSize: c,
|
|
223
|
-
color: r,
|
|
224
|
-
outlineColor: i,
|
|
225
|
-
outlineWidth: a,
|
|
226
|
-
font: t("font"),
|
|
227
|
-
anchorX: "center",
|
|
228
|
-
anchorY: "middle",
|
|
229
|
-
children: n
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
//#endregion
|
|
233
|
-
export { h as CARD_DIMENSIONS, g as CARD_MAGNET, v as Card3D, y as JimboBillboard, x as JimboText3D };
|
|
234
|
-
|
|
235
|
-
//# sourceMappingURL=r3f.js.map
|
package/dist/r3f.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"r3f.js","names":[],"sources":["../src/r3f/Card3D.tsx","../src/r3f/JimboBillboard.tsx","../src/r3f/JimboText3D.tsx"],"sourcesContent":["'use client'\n\nimport { useRef, useMemo, useState, memo } from 'react'\nimport { useFrame, useLoader, type ThreeEvent } from '@react-three/fiber'\nimport { useSpring, animated } from '@react-spring/three'\nimport * as THREE from 'three'\nimport type { MotelySpriteData } from '../decode/motelySprite.js'\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CARD_DIMENSIONS = { WIDTH: 0.7, HEIGHT: 0.95, DEPTH: 0.02 } as const\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CARD_MAGNET = {\n MAX_TILT_X: 0.36,\n MAX_TILT_Y: 0.42,\n MAX_SHIFT: 0.038,\n TWIST_Z: 0.11,\n LERP_IN: 18,\n LERP_OUT: 10,\n} as const\n\nfunction useSpriteTexture(sprite: MotelySpriteData) {\n const texture = useLoader(THREE.TextureLoader, sprite.atlasPath);\n \n return useMemo(() => {\n const t = texture.clone();\n t.colorSpace = THREE.SRGBColorSpace;\n t.magFilter = THREE.NearestFilter;\n t.minFilter = THREE.NearestFilter;\n t.repeat.set(1 / sprite.gridCols, 1 / sprite.gridRows);\n t.offset.set(\n sprite.gridCol / sprite.gridCols,\n 1 - ((sprite.gridRow + 1) / sprite.gridRows)\n );\n t.needsUpdate = true;\n return t;\n }, [texture, sprite.gridCol, sprite.gridRow, sprite.gridCols, sprite.gridRows]);\n}\n\nexport interface Card3DProps {\n sprite: MotelySpriteData\n position?: [number, number, number]\n rotation?: [number, number, number]\n selected?: boolean\n highlighted?: boolean\n onClick?: () => void\n onPointerEnter?: () => void\n onPointerLeave?: () => void\n}\n\nexport const Card3D = memo(function Card3D({\n sprite,\n position = [0, 0, 0],\n rotation = [0, 0, 0],\n selected = false,\n highlighted = false,\n onClick,\n onPointerEnter,\n onPointerLeave,\n}: Card3DProps) {\n const tiltRef = useRef<THREE.Group>(null)\n const target = useRef({ rx: 0, ry: 0, rz: 0, ox: 0, oy: 0 })\n const [hovered, setHovered] = useState(false)\n\n const texture = useSpriteTexture(sprite)\n\n const { posY, scale } = useSpring({\n posY: selected ? 0.3 : hovered ? 0.15 : 0,\n scale: hovered ? 1.08 : selected ? 1.05 : 1,\n config: { tension: 300, friction: 20 },\n })\n\n useFrame((_state, dt) => {\n const g = tiltRef.current\n if (!g) return\n const t = target.current\n const rate = hovered ? CARD_MAGNET.LERP_IN : CARD_MAGNET.LERP_OUT\n const a = 1 - Math.exp(-rate * dt)\n g.rotation.x = THREE.MathUtils.lerp(g.rotation.x, t.rx, a)\n g.rotation.y = THREE.MathUtils.lerp(g.rotation.y, t.ry, a)\n g.rotation.z = THREE.MathUtils.lerp(g.rotation.z, t.rz, a)\n g.position.x = THREE.MathUtils.lerp(g.position.x, t.ox, a)\n g.position.y = THREE.MathUtils.lerp(g.position.y, t.oy, a)\n })\n\n const glowColor = useMemo(() => highlighted ? '#e4b643' : '#ffffff', [highlighted])\n\n const onMove = (e: ThreeEvent<PointerEvent>) => {\n e.stopPropagation()\n const uv = e.uv\n if (!uv) return\n const nx = THREE.MathUtils.clamp((uv.x - 0.5) * 2, -1, 1)\n const ny = THREE.MathUtils.clamp((uv.y - 0.5) * 2, -1, 1)\n target.current.ry = -nx * CARD_MAGNET.MAX_TILT_Y\n target.current.rx = ny * CARD_MAGNET.MAX_TILT_X\n target.current.rz = -nx * ny * CARD_MAGNET.TWIST_Z\n target.current.ox = nx * CARD_MAGNET.MAX_SHIFT\n target.current.oy = -ny * CARD_MAGNET.MAX_SHIFT * 0.65\n }\n\n const reset = () => { target.current = { rx: 0, ry: 0, rz: 0, ox: 0, oy: 0 } }\n\n if (!texture) return null\n\n return (\n <animated.group\n position-x={position[0]}\n position-y={posY.to((y) => position[1] + y)}\n position-z={position[2]}\n rotation-x={rotation[0]}\n rotation-y={rotation[1]}\n rotation-z={rotation[2]}\n scale={scale}\n >\n {/* Invisible hit mesh that does not shift or twist, preventing boop-cancel loops */}\n <mesh\n visible={false}\n onClick={(e) => { e.stopPropagation(); onClick?.() }}\n onPointerMove={onMove}\n onPointerEnter={(e) => { e.stopPropagation(); setHovered(true); onPointerEnter?.(); document.body.style.cursor = 'pointer' }}\n onPointerLeave={(e) => { e.stopPropagation(); setHovered(false); reset(); onPointerLeave?.(); document.body.style.cursor = 'auto' }}\n >\n <boxGeometry args={[CARD_DIMENSIONS.WIDTH, CARD_DIMENSIONS.HEIGHT, CARD_DIMENSIONS.DEPTH * 2]} />\n <meshBasicMaterial />\n </mesh>\n\n <group ref={tiltRef}>\n {highlighted && (\n <pointLight color={glowColor} intensity={1.5} distance={1} position={[0, 0, 0.1]} />\n )}\n <mesh castShadow receiveShadow>\n <boxGeometry args={[CARD_DIMENSIONS.WIDTH, CARD_DIMENSIONS.HEIGHT, CARD_DIMENSIONS.DEPTH]} />\n <meshBasicMaterial attach=\"material-4\" map={texture} toneMapped={false} />\n <meshStandardMaterial attach=\"material-5\" color=\"#1a1a2e\" metalness={0.2} roughness={0.8} />\n <meshStandardMaterial attach=\"material-0\" color=\"#f5f5dc\" />\n <meshStandardMaterial attach=\"material-1\" color=\"#f5f5dc\" />\n <meshStandardMaterial attach=\"material-2\" color=\"#f5f5dc\" />\n <meshStandardMaterial attach=\"material-3\" color=\"#f5f5dc\" />\n </mesh>\n {selected && (\n <mesh position={[0, 0, -CARD_DIMENSIONS.DEPTH]}>\n <ringGeometry args={[0.45, 0.5, 32]} />\n <meshBasicMaterial color=\"#e4b643\" transparent opacity={0.8} />\n </mesh>\n )}\n </group>\n </animated.group>\n )\n})\n","import React, { useMemo } from 'react'\nimport { Billboard } from '@react-three/drei'\nimport { useLoader } from '@react-three/fiber'\nimport * as THREE from 'three'\nimport type { MotelySpriteData } from '../decode/motelySprite.js'\n\nexport interface JimboBillboardProps {\n sprite: MotelySpriteData | null\n label?: string\n width?: number\n height?: number\n yLockOnly?: boolean\n position?: [number, number, number]\n}\n\nexport function JimboBillboard(props: JimboBillboardProps) {\n if (!props.sprite) return null;\n return <JimboBillboardInner {...props} sprite={props.sprite} />;\n}\n\nfunction JimboBillboardInner({\n sprite,\n width = 3.4,\n height = 4.5,\n yLockOnly = false,\n position = [0, 0, 0]\n}: Omit<JimboBillboardProps, 'sprite'> & { sprite: MotelySpriteData }) {\n // Memoize texture to avoid per-render allocation\n const texture = useLoader(THREE.TextureLoader, sprite.atlasPath);\n\n const clonedTexture = useMemo(() => {\n const tex = texture.clone();\n tex.magFilter = THREE.NearestFilter;\n tex.minFilter = THREE.NearestFilter;\n // Set up sprite cropping\n tex.repeat.set(1 / sprite.gridCols, 1 / sprite.gridRows);\n tex.offset.set(\n sprite.gridCol / sprite.gridCols,\n 1 - ((sprite.gridRow + 1) / sprite.gridRows)\n );\n tex.needsUpdate = true;\n return tex;\n }, [texture, sprite.gridCol, sprite.gridRow, sprite.gridCols, sprite.gridRows]);\n\n const material = useMemo(() => {\n return new THREE.MeshBasicMaterial({\n map: clonedTexture,\n transparent: true,\n alphaTest: 0.5\n });\n }, [clonedTexture]);\n\n return (\n <Billboard\n lockY={yLockOnly}\n lockX={false}\n lockZ={false}\n position={position}\n >\n <mesh material={material}>\n <planeGeometry args={[width, height]} />\n </mesh>\n </Billboard>\n )\n}\n","import React from 'react'\nimport { Text } from '@react-three/drei'\nimport { resolveJamlAssetUrl } from '../assets.js'\nimport { JimboColorOption } from '../ui/tokens.js'\n\nexport interface JimboText3DProps {\n children: string\n color?: string\n outlineColor?: string\n outlineWidth?: number\n position?: [number, number, number]\n fontSize?: number\n}\n\nexport function JimboText3D({\n children,\n color = JimboColorOption.WHITE,\n outlineColor = JimboColorOption.BLACK,\n outlineWidth = 0.05,\n position = [0, 0, 0],\n fontSize = 1\n}: JimboText3DProps) {\n // We use the m6x11plus font from assets if possible, or fallback\n return (\n <Text\n position={position}\n fontSize={fontSize}\n color={color}\n outlineColor={outlineColor}\n outlineWidth={outlineWidth}\n font={resolveJamlAssetUrl('font')}\n anchorX=\"center\"\n anchorY=\"middle\"\n >\n {children}\n </Text>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface JimboPanelSplitterProps {
|
|
2
|
-
"aria-label"?: string;
|
|
3
|
-
className?: string;
|
|
4
|
-
onDrag: (delta: number) => void;
|
|
5
|
-
onKeyAdjust?: (delta: number) => void;
|
|
6
|
-
orientation?: "vertical" | "horizontal";
|
|
7
|
-
}
|
|
8
|
-
export declare function JimboPanelSplitter({ orientation, onDrag, onKeyAdjust, className, "aria-label": ariaLabel, }: JimboPanelSplitterProps): import("react/jsx-runtime").JSX.Element;
|
package/dist/ui/showcase.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { JimboSectionTone } from './jimboSectionHeader.js';
|
|
2
|
-
export interface ShowcaseFilter {
|
|
3
|
-
name: string;
|
|
4
|
-
author: string;
|
|
5
|
-
hits: string;
|
|
6
|
-
tone: JimboSectionTone;
|
|
7
|
-
sample: string[];
|
|
8
|
-
}
|
|
9
|
-
export interface ShowcaseRecentFind {
|
|
10
|
-
seed: string;
|
|
11
|
-
filterName: string;
|
|
12
|
-
score: number;
|
|
13
|
-
}
|
|
14
|
-
export interface ShowcaseLiveStats {
|
|
15
|
-
searched: string;
|
|
16
|
-
matches: string;
|
|
17
|
-
speed: string;
|
|
18
|
-
}
|
|
19
|
-
export interface ShowcaseMcpInfo {
|
|
20
|
-
runtime: string;
|
|
21
|
-
engine: string;
|
|
22
|
-
features: string;
|
|
23
|
-
}
|
|
24
|
-
export interface ShowcaseProps {
|
|
25
|
-
title?: string;
|
|
26
|
-
subtitle?: string;
|
|
27
|
-
hotFilters?: ShowcaseFilter[];
|
|
28
|
-
recentFinds?: ShowcaseRecentFind[];
|
|
29
|
-
mcpInfo?: ShowcaseMcpInfo;
|
|
30
|
-
onNewSearch?: () => void;
|
|
31
|
-
onBrowseFilters?: () => void;
|
|
32
|
-
onFilterClick?: (filter: ShowcaseFilter, index: number) => void;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Landing/showcase screen — 320×568, NO SCROLL.
|
|
36
|
-
* Every pixel accounted for. No flex stretching. No gaps.
|
|
37
|
-
*/
|
|
38
|
-
export declare function Showcase({ title, subtitle, hotFilters, recentFinds, mcpInfo, onNewSearch, onBrowseFilters, onFilterClick, }: ShowcaseProps): import("react/jsx-runtime").JSX.Element;
|