jaml-ui 0.16.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/DESIGN.md +9 -11
  2. package/dist/assets.d.ts +6 -0
  3. package/dist/assets.js +9 -0
  4. package/dist/components/AnalyzerExplorer.d.ts +4 -1
  5. package/dist/components/AnalyzerExplorer.js +14 -48
  6. package/dist/components/GameCard.js +8 -7
  7. package/dist/components/JamlAestheticSelector.d.ts +4 -0
  8. package/dist/components/JamlAestheticSelector.js +6 -19
  9. package/dist/components/JamlAnalyzerFullscreen.d.ts +7 -1
  10. package/dist/components/JamlAnalyzerFullscreen.js +18 -47
  11. package/dist/components/JamlIde.js +12 -24
  12. package/dist/components/JamlIdeVisual.js +3 -56
  13. package/dist/components/JamlMapPreview.d.ts +6 -1
  14. package/dist/components/JamlMapPreview.js +99 -21
  15. package/dist/components/JamlSeedInput.d.ts +5 -0
  16. package/dist/components/JamlSeedInput.js +11 -14
  17. package/dist/components/JamlSpeedometer.d.ts +8 -8
  18. package/dist/components/JamlSpeedometer.js +24 -46
  19. package/dist/components/MotelyVersionBadge.d.ts +1 -3
  20. package/dist/components/MotelyVersionBadge.js +4 -16
  21. package/dist/components/jamlMap/JamlMapEditorDemo.d.ts +8 -0
  22. package/dist/components/jamlMap/JamlMapEditorDemo.js +170 -0
  23. package/dist/components/jamlMap/JokerPicker.d.ts +7 -0
  24. package/dist/components/jamlMap/JokerPicker.js +258 -0
  25. package/dist/components/jamlMap/MysterySlot.d.ts +32 -0
  26. package/dist/components/jamlMap/MysterySlot.js +109 -0
  27. package/dist/components/jamlMap/index.d.ts +3 -0
  28. package/dist/components/jamlMap/index.js +3 -0
  29. package/dist/core.d.ts +0 -2
  30. package/dist/core.js +0 -2
  31. package/dist/decode/motelyItemDecoder.d.ts +10 -23
  32. package/dist/decode/motelyItemDecoder.js +103 -272
  33. package/dist/decode/motelySprite.d.ts +4 -0
  34. package/dist/decode/motelySprite.js +57 -0
  35. package/dist/hooks/analyzerStreamRegistry.js +30 -82
  36. package/dist/hooks/useAnalyzer.d.ts +10 -3
  37. package/dist/hooks/useAnalyzer.js +11 -6
  38. package/dist/hooks/useIntersectionObserver.d.ts +14 -0
  39. package/dist/hooks/useIntersectionObserver.js +50 -0
  40. package/dist/index.d.ts +5 -8
  41. package/dist/index.js +4 -7
  42. package/dist/motely.d.ts +2 -2
  43. package/dist/motely.js +2 -2
  44. package/dist/motelyDisplay.d.ts +4 -623
  45. package/dist/motelyDisplay.js +26 -165
  46. package/dist/r3f/Card3D.d.ts +2 -2
  47. package/dist/r3f/Card3D.js +13 -48
  48. package/dist/r3f/JimboText3D.js +3 -2
  49. package/dist/render/CanvasRenderer.js +7 -171
  50. package/dist/sprites/spriteMapper.d.ts +71 -0
  51. package/dist/sprites/spriteMapper.js +40 -0
  52. package/dist/ui/JimboBadge.d.ts +8 -2
  53. package/dist/ui/JimboBadge.js +6 -22
  54. package/dist/ui/JimboToggleList.js +2 -7
  55. package/dist/ui/codeBlock.js +2 -3
  56. package/dist/ui/footer.d.ts +4 -0
  57. package/dist/ui/footer.js +6 -4
  58. package/dist/ui/hooks.d.ts +89 -0
  59. package/dist/ui/hooks.js +551 -0
  60. package/dist/ui/jimboBackground.js +2 -131
  61. package/dist/ui/jimboCopyRow.d.ts +4 -0
  62. package/dist/ui/jimboCopyRow.js +5 -22
  63. package/dist/ui/jimboFilterBar.d.ts +1 -4
  64. package/dist/ui/jimboFilterBar.js +2 -61
  65. package/dist/ui/jimboFlankNav.d.ts +1 -2
  66. package/dist/ui/jimboFlankNav.js +5 -30
  67. package/dist/ui/jimboTabs.d.ts +1 -5
  68. package/dist/ui/jimboTabs.js +6 -41
  69. package/dist/ui/jimboText.d.ts +1 -1
  70. package/dist/ui/jimboText.js +15 -32
  71. package/dist/ui/jimboTooltip.d.ts +1 -12
  72. package/dist/ui/jimboTooltip.js +6 -82
  73. package/dist/ui/panel.d.ts +2 -1
  74. package/dist/ui/panel.js +11 -47
  75. package/dist/ui/showcase.d.ts +4 -0
  76. package/dist/ui/showcase.js +9 -36
  77. package/dist/ui/sprites.js +3 -2
  78. package/dist/ui.d.ts +1 -0
  79. package/dist/ui.js +2 -0
  80. package/package.json +7 -6
  81. package/dist/decode/packedBalatroItem.d.ts +0 -13
  82. package/dist/decode/packedBalatroItem.js +0 -26
  83. package/dist/hooks/loadMotelyWasm.d.ts +0 -7
  84. package/dist/hooks/loadMotelyWasm.js +0 -16
  85. package/dist/utils/itemUtils.d.ts +0 -11
  86. package/dist/utils/itemUtils.js +0 -71
@@ -1,5 +1,4 @@
1
1
  "use client";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  import { motelyItemDisplayNameFromValue } from "../motelyDisplay.js";
4
3
  export const ANALYZER_STREAM_META = {
5
4
  shop: { key: "shop", label: "Shop", tone: "default", defaultEnabled: true },
@@ -28,120 +27,69 @@ export function buildStreamHandle(live, ante, key) {
28
27
  const ctx = live.ctx;
29
28
  const Motely = live.Motely;
30
29
  const runState = live.runStates[ante];
31
- let stream = null;
32
30
  let cursor = 0;
33
31
  const idBase = `${ante}-${key}`;
34
32
  function nameFromValue(value) {
35
33
  return motelyItemDisplayNameFromValue(value);
36
34
  }
37
- function joker(streamFactoryName, nextName) {
35
+ function streamHandle(createStream, getNextValue) {
36
+ let stream = null;
38
37
  return {
39
38
  initStream: () => {
40
- stream = ctx[streamFactoryName](ante, Motely.MotelyJokerStreamFlags.Default);
39
+ stream = createStream();
41
40
  cursor = 0;
42
41
  },
43
42
  nextItem: () => {
44
- const r = ctx[nextName](stream);
45
- const value = r.joker?.value ?? r.item?.value ?? 0;
43
+ if (stream === null)
44
+ throw new Error(`Analyzer stream ${key} was read before initialization.`);
45
+ const value = getNextValue(stream);
46
46
  const id = `${idBase}-${cursor++}`;
47
47
  return { id, name: nameFromValue(value), value };
48
48
  },
49
49
  };
50
50
  }
51
- function fixedRarityJoker(streamFactoryName, nextName) {
52
- return {
53
- initStream: () => {
54
- stream = ctx[streamFactoryName](ante, Motely.MotelyJokerFixedRarityStreamFlags.Default);
55
- cursor = 0;
56
- },
57
- nextItem: () => {
58
- const r = ctx[nextName](stream);
59
- const value = r.joker?.value ?? 0;
60
- const id = `${idBase}-${cursor++}`;
61
- return { id, name: nameFromValue(value), value };
62
- },
63
- };
51
+ function joker(createStream, getNext) {
52
+ return streamHandle(createStream, (stream) => getNext(stream).item.value);
64
53
  }
65
- function tarot(streamFactoryName, nextName) {
66
- return {
67
- initStream: () => {
68
- stream = ctx[streamFactoryName](ante);
69
- cursor = 0;
70
- },
71
- nextItem: () => {
72
- const r = ctx[nextName](stream);
73
- const value = r.tarot?.value ?? r.item?.value ?? 0;
74
- const id = `${idBase}-${cursor++}`;
75
- return { id, name: nameFromValue(value), value };
76
- },
77
- };
54
+ function fixedRarityJoker(createStream, getNext) {
55
+ return streamHandle(createStream, (stream) => getNext(stream).item.value);
78
56
  }
79
- function planet(streamFactoryName, nextName) {
80
- return {
81
- initStream: () => {
82
- stream = ctx[streamFactoryName](ante);
83
- cursor = 0;
84
- },
85
- nextItem: () => {
86
- const r = ctx[nextName](stream);
87
- const value = r.planet?.value ?? 0;
88
- const id = `${idBase}-${cursor++}`;
89
- return { id, name: nameFromValue(value), value };
90
- },
91
- };
57
+ function tarot(createStream, getNext) {
58
+ return streamHandle(createStream, (stream) => getNext(stream).item.value);
92
59
  }
93
- function spectral(streamFactoryName, nextName) {
94
- return {
95
- initStream: () => {
96
- stream = ctx[streamFactoryName](ante);
97
- cursor = 0;
98
- },
99
- nextItem: () => {
100
- const r = ctx[nextName](stream);
101
- const value = r.spectral?.value ?? 0;
102
- const id = `${idBase}-${cursor++}`;
103
- return { id, name: nameFromValue(value), value };
104
- },
105
- };
60
+ function planet(createStream, getNext) {
61
+ return streamHandle(createStream, (stream) => getNext(stream).item.value);
62
+ }
63
+ function spectral(createStream, getNext) {
64
+ return streamHandle(createStream, (stream) => getNext(stream).item.value);
106
65
  }
107
66
  switch (key) {
108
67
  case "shop":
109
- return {
110
- initStream: () => {
111
- stream = ctx.createShopItemStream(ante, runState, Motely.MotelyShopStreamFlags.Default, Motely.MotelyJokerStreamFlags.Default);
112
- cursor = 0;
113
- },
114
- nextItem: () => {
115
- const r = ctx.getNextShopItem(stream);
116
- const value = r.item.value;
117
- const id = `${idBase}-${cursor++}`;
118
- return { id, name: nameFromValue(value), value };
119
- },
120
- };
68
+ return streamHandle(() => ctx.createShopItemStream(ante, runState, Motely.MotelyShopStreamFlags.Default, Motely.MotelyJokerStreamFlags.Default), (stream) => ctx.getNextShopItem(stream).item.value);
121
69
  case "shopJoker":
122
- return joker("createShopJokerStream", "getNextShopJoker");
70
+ return joker(() => ctx.createShopJokerStream(ante, Motely.MotelyJokerStreamFlags.Default), (stream) => ctx.getNextShopJoker(stream));
123
71
  case "soulJoker":
124
- return fixedRarityJoker("createSoulJokerStream", "getNextSoulJoker");
72
+ return fixedRarityJoker(() => ctx.createSoulJokerStream(ante, Motely.MotelyJokerFixedRarityStreamFlags.Default), (stream) => ctx.getNextSoulJoker(stream));
125
73
  case "rareTagJoker":
126
- return fixedRarityJoker("createRareTagJokerStream", "getNextRareTagJoker");
74
+ return fixedRarityJoker(() => ctx.createRareTagJokerStream(ante, Motely.MotelyJokerFixedRarityStreamFlags.Default), (stream) => ctx.getNextRareTagJoker(stream));
127
75
  case "uncommonTagJoker":
128
- return fixedRarityJoker("createUncommonTagJokerStream", "getNextUncommonTagJoker");
76
+ return fixedRarityJoker(() => ctx.createUncommonTagJokerStream(ante, Motely.MotelyJokerFixedRarityStreamFlags.Default), (stream) => ctx.getNextUncommonTagJoker(stream));
129
77
  case "riffRaffJoker":
130
- return fixedRarityJoker("createRiffRaffJokerStream", "getNextRiffRaffJoker");
78
+ return fixedRarityJoker(() => ctx.createRiffRaffJokerStream(ante, Motely.MotelyJokerFixedRarityStreamFlags.Default), (stream) => ctx.getNextRiffRaffJoker(stream));
131
79
  case "buffoonJoker":
132
- return joker("createBuffoonPackJokerStream", "getNextBuffoonPackJoker");
80
+ return joker(() => ctx.createBuffoonPackJokerStream(ante, Motely.MotelyJokerStreamFlags.Default), (stream) => ctx.getNextBuffoonPackJoker(stream));
133
81
  case "judgementJoker":
134
- return joker("createJudgementJokerStream", "getNextJudgementJoker");
82
+ return joker(() => ctx.createJudgementJokerStream(ante, Motely.MotelyJokerStreamFlags.Default), (stream) => ctx.getNextJudgementJoker(stream));
135
83
  case "wraithJoker":
136
- return joker("createWraithJokerStream", "getNextWraithJoker");
84
+ return joker(() => ctx.createWraithJokerStream(ante, Motely.MotelyJokerStreamFlags.Default), (stream) => ctx.getNextWraithJoker(stream));
137
85
  case "shopTarot":
138
- return tarot("createShopTarotStream", "getNextShopTarot");
86
+ return tarot(() => ctx.createShopTarotStream(ante), (stream) => ctx.getNextShopTarot(stream));
139
87
  case "shopPlanet":
140
- return planet("createShopPlanetStream", "getNextShopPlanet");
88
+ return planet(() => ctx.createShopPlanetStream(ante), (stream) => ctx.getNextShopPlanet(stream));
141
89
  case "shopSpectral":
142
- return spectral("createShopSpectralStream", "getNextShopSpectral");
90
+ return spectral(() => ctx.createShopSpectralStream(ante), (stream) => ctx.getNextShopSpectral(stream));
143
91
  case "purpleSealTarot":
144
- return tarot("createPurpleSealTarotStream", "getNextPurpleSealTarot");
92
+ return tarot(() => ctx.createPurpleSealTarotStream(ante), (stream) => ctx.getNextPurpleSealTarot(stream));
145
93
  default:
146
94
  return null;
147
95
  }
@@ -1,4 +1,9 @@
1
+ import type { Motely as MotelyT, MotelyWasm as MotelyWasmT } from "motely-wasm";
1
2
  import type { AnalyzerAnteView } from "../components/AnalyzerExplorer.js";
3
+ export interface MotelyRuntime {
4
+ MotelyWasm: typeof MotelyWasmT;
5
+ Motely: typeof MotelyT;
6
+ }
2
7
  export type AnalyzerStatus = "idle" | "running" | "done" | "error";
3
8
  export type MotelyJsRunState = {
4
9
  voucherBitfield: number;
@@ -13,19 +18,21 @@ export type MotelyJsRunState = {
13
18
  * `createShopItemStream(ante, runState, ...)`.
14
19
  */
15
20
  export interface AnalyzerLive {
16
- ctx: any;
17
- Motely: any;
21
+ ctx: ReturnType<typeof MotelyWasmT.createSearchContext>;
22
+ Motely: typeof MotelyT;
18
23
  runStates: Record<number, MotelyJsRunState>;
19
24
  desiredNames: ReadonlySet<string>;
20
25
  seed: string;
21
26
  deck: string;
22
27
  stake: string;
23
28
  }
24
- export declare function useAnalyzer(motelyWasmUrl: string): {
29
+ export declare function useAnalyzer(motelyRuntime: MotelyRuntime): {
25
30
  antes: AnalyzerAnteView[];
26
31
  status: AnalyzerStatus;
27
32
  error: string | null;
28
33
  analyze: (seed: string, deck: string, stake: string, jaml?: string) => Promise<void>;
29
34
  clearError: () => void;
30
35
  live: AnalyzerLive | null;
36
+ tallyColumns: number[][];
37
+ tallyLabels: string[];
31
38
  };
@@ -1,20 +1,23 @@
1
1
  "use client";
2
2
  import { useState, useCallback } from "react";
3
- import { loadMotelyWasm } from "./loadMotelyWasm.js";
4
3
  import { extractVisualJamlItems } from "../utils/jamlMapPreview.js";
5
4
  import { motelyItemDisplayNameFromValue } from "../motelyDisplay.js";
6
- export function useAnalyzer(motelyWasmUrl) {
5
+ export function useAnalyzer(motelyRuntime) {
7
6
  const [antes, setAntes] = useState([]);
8
7
  const [status, setStatus] = useState("idle");
9
8
  const [error, setError] = useState(null);
10
9
  const [live, setLive] = useState(null);
10
+ const [tallyColumns, setTallyColumns] = useState([]);
11
+ const [tallyLabels, setTallyLabels] = useState([]);
11
12
  const analyze = useCallback(async (seed, deck, stake, jaml) => {
12
13
  setAntes([]);
13
14
  setLive(null);
15
+ setTallyColumns([]);
16
+ setTallyLabels([]);
14
17
  setStatus("running");
15
18
  setError(null);
16
19
  try {
17
- const { MotelyWasm, Motely } = await loadMotelyWasm(motelyWasmUrl);
20
+ const { MotelyWasm, Motely } = motelyRuntime;
18
21
  const deckEnum = Motely.MotelyDeck[deck] ?? Motely.MotelyDeck.Red;
19
22
  const stakeEnum = Motely.MotelyStake[stake] ?? Motely.MotelyStake.White;
20
23
  const desiredNames = new Set();
@@ -23,13 +26,15 @@ export function useAnalyzer(motelyWasmUrl) {
23
26
  for (const item of [...groups.must, ...groups.should]) {
24
27
  desiredNames.add(item.value.toLowerCase());
25
28
  }
29
+ const labels = MotelyWasm.getTallyLabels(jaml);
30
+ setTallyLabels(labels);
26
31
  }
27
32
  const ctx = MotelyWasm.createSearchContext(seed, deckEnum, stakeEnum);
28
33
  const bossStream = ctx.createBossStream();
29
34
  let runState = { voucherBitfield: 0, bossBitfield: 0 };
30
35
  const results = [];
31
36
  const runStates = {};
32
- for (let ante = 1; ante <= 8; ante++) {
37
+ for (let ante = 1; ante <= 39; ante++) {
33
38
  const bossResult = ctx.getNextBossForAnte(bossStream, ante, runState);
34
39
  const bossName = Motely.MotelyBossBlind[bossResult.boss] ?? `Unknown(${bossResult.boss})`;
35
40
  runState = bossResult.runState;
@@ -72,10 +77,10 @@ export function useAnalyzer(motelyWasmUrl) {
72
77
  setError(e instanceof Error ? e.message : String(e));
73
78
  setStatus("error");
74
79
  }
75
- }, [motelyWasmUrl]);
80
+ }, [motelyRuntime]);
76
81
  const clearError = useCallback(() => {
77
82
  setError(null);
78
83
  setStatus((s) => (s === "error" ? "idle" : s));
79
84
  }, []);
80
- return { antes, status, error, analyze, clearError, live };
85
+ return { antes, status, error, analyze, clearError, live, tallyColumns, tallyLabels };
81
86
  }
@@ -0,0 +1,14 @@
1
+ export interface UseIntersectionObserverOptions extends IntersectionObserverInit {
2
+ freezeOnceVisible?: boolean;
3
+ }
4
+ /**
5
+ * Encapsulates IntersectionObserver logic.
6
+ */
7
+ export declare function useIntersectionObserver(options?: UseIntersectionObserverOptions): {
8
+ ref: (node: Element | null) => void;
9
+ entry: IntersectionObserverEntry | null;
10
+ };
11
+ /**
12
+ * Specialization for infinite scroll / sentinel patterns.
13
+ */
14
+ export declare function useInfiniteScroll(onVisible: () => void, options?: IntersectionObserverInit, active?: boolean): (node: Element | null) => void;
@@ -0,0 +1,50 @@
1
+ import { useEffect, useRef, useState, useCallback } from "react";
2
+ /**
3
+ * Encapsulates IntersectionObserver logic.
4
+ */
5
+ export function useIntersectionObserver(options = {}) {
6
+ const [entry, setEntry] = useState(null);
7
+ const [node, setNode] = useState(null);
8
+ const observer = useRef(null);
9
+ const ref = useCallback((node) => {
10
+ setNode(node);
11
+ }, []);
12
+ useEffect(() => {
13
+ if (!node)
14
+ return;
15
+ if (observer.current)
16
+ observer.current.disconnect();
17
+ const { freezeOnceVisible, ...init } = options;
18
+ observer.current = new IntersectionObserver(([entry]) => {
19
+ setEntry(entry);
20
+ if (freezeOnceVisible && entry.isIntersecting && observer.current) {
21
+ observer.current.disconnect();
22
+ }
23
+ }, init);
24
+ observer.current.observe(node);
25
+ return () => {
26
+ if (observer.current)
27
+ observer.current.disconnect();
28
+ };
29
+ }, [node, options.root, options.rootMargin, options.threshold, options.freezeOnceVisible]);
30
+ return { ref, entry };
31
+ }
32
+ /**
33
+ * Specialization for infinite scroll / sentinel patterns.
34
+ */
35
+ export function useInfiniteScroll(onVisible, options = {}, active = true) {
36
+ const onVisibleRef = useRef(onVisible);
37
+ onVisibleRef.current = onVisible;
38
+ const { ref, entry } = useIntersectionObserver({
39
+ ...options,
40
+ threshold: options.threshold ?? 0.1,
41
+ });
42
+ useEffect(() => {
43
+ if (!active || !entry)
44
+ return;
45
+ if (entry.isIntersecting) {
46
+ onVisibleRef.current();
47
+ }
48
+ }, [entry, active]);
49
+ return ref;
50
+ }
package/dist/index.d.ts CHANGED
@@ -9,22 +9,19 @@ export { JamlMapPreview, type JamlMapPreviewProps } from "./components/JamlMapPr
9
9
  export { JamlIde, type JamlIdeProps, type JamlIdeSearchResult, type JamlVisualFilter, type JamlVisualClause, type JamlZone, } from "./components/JamlIde.js";
10
10
  export { JamlIdeVisual, type JamlIdeVisualProps, } from "./components/JamlIdeVisual.js";
11
11
  export { JamlCodeEditor, type JamlCodeEditorProps, } from "./components/JamlCodeEditor.js";
12
- export { JimboText, type JimboTextProps, type JimboTextTone, type JimboTextSize, } from "./ui/jimboText.js";
13
- export { JimboTabs, JimboVerticalTabs, type JimboTabItem, type JimboTabsProps, } from "./ui/jimboTabs.js";
14
- export { JimboFlankNav, type JimboFlankNavProps, } from "./ui/jimboFlankNav.js";
15
- export { JimboFilterBar, type JimboFilterBarProps, type JimboFilterSortOption, } from "./ui/jimboFilterBar.js";
16
- export { JimboBackground } from "./ui/jimboBackground.js";
17
- export { JimboTooltip, type JimboTooltipProps, type JimboTooltipMode, type JimboTooltipPlacement, } from "./ui/jimboTooltip.js";
12
+ export * from "./ui.js";
18
13
  export { JamlIdeToolbar, type JamlIdeMode, type JamlIdeToolbarProps, } from "./components/JamlIdeToolbar.js";
19
14
  export { CardList, type CardListProps } from "./components/CardList.js";
20
15
  export { CardFan, type CardFanProps } from "./components/CardFan.js";
21
16
  export { RealStandardcard, type CardSuit, type CardRank, type CardEnhancement, type CardSeal, type CardEdition, } from "./components/Standardcard.js";
22
17
  export { DeckSprite, DECK_SPRITE_POS, STAKE_SPRITE_POS, type DeckSpriteProps, } from "./components/DeckSprite.js";
23
18
  export { MotelyVersionBadge, type MotelyVersionBadgeProps, type MotelyCapabilities, } from "./components/MotelyVersionBadge.js";
19
+ export { JamlSpeedometer, type JamlSpeedometerProps, type JamlSpeedometerStatus, } from "./components/JamlSpeedometer.js";
20
+ export { Showcase, type ShowcaseFilter, type ShowcaseLiveStats, type ShowcaseProps, type ShowcaseRecentFind, } from "./ui/showcase.js";
24
21
  export { extractVisualJamlItems, type JamlPreviewGroups, type JamlPreviewItem, type JamlPreviewSection, type JamlPreviewVisualType, } from "./utils/jamlMapPreview.js";
25
22
  export { useMotelyStream, type StreamItem, type StreamState } from "./hooks/useShopStream.js";
26
23
  export { useSearch, type SearchResult, type SearchStatus, type UseSearchState, } from "./hooks/useSearch.js";
27
- export { useAnalyzer, type AnalyzerStatus, type AnalyzerLive, type MotelyJsRunState, } from "./hooks/useAnalyzer.js";
28
- export { JamlSpeedometer, type JamlSpeedometerProps, } from "./components/JamlSpeedometer.js";
24
+ export { useAnalyzer, type AnalyzerStatus, type AnalyzerLive, type MotelyRuntime, type MotelyJsRunState, } from "./hooks/useAnalyzer.js";
29
25
  export { JamlAestheticSelector, type JamlAestheticSelectorProps, type JamlAestheticOption, } from "./components/JamlAestheticSelector.js";
30
26
  export { JamlSeedInput, type JamlSeedInputProps, } from "./components/JamlSeedInput.js";
27
+ export { JamlMapEditorDemo, JokerPicker, MysterySlot, type JamlMapEditorDemoProps, type JokerPickerProps, type JokerRarity, type MysterySlotProps, type SlotCategory, type SlotSelection, } from "./components/jamlMap/index.js";
package/dist/index.js CHANGED
@@ -10,22 +10,19 @@ export { JamlMapPreview } from "./components/JamlMapPreview.js";
10
10
  export { JamlIde, } from "./components/JamlIde.js";
11
11
  export { JamlIdeVisual, } from "./components/JamlIdeVisual.js";
12
12
  export { JamlCodeEditor, } from "./components/JamlCodeEditor.js";
13
- export { JimboText, } from "./ui/jimboText.js";
14
- export { JimboTabs, JimboVerticalTabs, } from "./ui/jimboTabs.js";
15
- export { JimboFlankNav, } from "./ui/jimboFlankNav.js";
16
- export { JimboFilterBar, } from "./ui/jimboFilterBar.js";
17
- export { JimboBackground } from "./ui/jimboBackground.js";
18
- export { JimboTooltip, } from "./ui/jimboTooltip.js";
13
+ export * from "./ui.js";
19
14
  export { JamlIdeToolbar, } from "./components/JamlIdeToolbar.js";
20
15
  export { CardList } from "./components/CardList.js";
21
16
  export { CardFan } from "./components/CardFan.js";
22
17
  export { RealStandardcard, } from "./components/Standardcard.js";
23
18
  export { DeckSprite, DECK_SPRITE_POS, STAKE_SPRITE_POS, } from "./components/DeckSprite.js";
24
19
  export { MotelyVersionBadge, } from "./components/MotelyVersionBadge.js";
20
+ export { JamlSpeedometer, } from "./components/JamlSpeedometer.js";
21
+ export { Showcase, } from "./ui/showcase.js";
25
22
  export { extractVisualJamlItems, } from "./utils/jamlMapPreview.js";
26
23
  export { useMotelyStream } from "./hooks/useShopStream.js";
27
24
  export { useSearch, } from "./hooks/useSearch.js";
28
25
  export { useAnalyzer, } from "./hooks/useAnalyzer.js";
29
- export { JamlSpeedometer, } from "./components/JamlSpeedometer.js";
30
26
  export { JamlAestheticSelector, } from "./components/JamlAestheticSelector.js";
31
27
  export { JamlSeedInput, } from "./components/JamlSeedInput.js";
28
+ export { JamlMapEditorDemo, JokerPicker, MysterySlot, } from "./components/jamlMap/index.js";
package/dist/motely.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { decodeMotelyItem, decodeMotelyItemToJamlCard, motelyItemTypeName, motelyItemCategory, motelyItemDisplayName, motelyItemRenderCategory, motelyItemEditionName, motelyItemSealName, motelyItemEnhancementName, motelyStandardcardRankName, motelyStandardcardSuitName, decodeMotelyItemName, resolveMotelyItemType, warmMotelyItemCache, motelyItemCacheSize, type DecodedMotelyItem, type MotelyItemInput, type MotelyJamlCard, type MotelyRenderableCategory, type MotelyRuntimeItem, } from "./decode/motelyItemDecoder.js";
2
- export { motelyItemToSprite, type MotelySpriteData, } from "./decode/motelySprite.js";
3
- export { MOTELY_DISPLAY_SCHEMA, motelyBossDisplayName, motelyBossDisplayNameFromKey, motelyBossKeyFromDisplayName, motelyBoosterPackDisplayName, motelyBoosterPackDisplayNameFromKey, motelyBoosterPackKeyFromDisplayName, motelyItemDisplayNameFromKey, motelyItemDisplayNameFromValue, motelyTagDisplayName, motelyTagDisplayNameFromKey, motelyTagKeyFromDisplayName, motelyVoucherDisplayName, motelyVoucherDisplayNameFromKey, motelyVoucherKeyFromDisplayName, type MotelyBoosterPackKey, type MotelyBossKey, type MotelyDisplaySchema, type MotelyTagKey, type MotelyVoucherKey, } from "./motelyDisplay.js";
2
+ export { motelyItemToSprite, getMotelySpriteByName, type MotelySpriteData, } from "./decode/motelySprite.js";
3
+ export { motelyBossDisplayName, motelyBossDisplayNameFromKey, motelyBoosterPackDisplayName, motelyBoosterPackDisplayNameFromKey, motelyItemDisplayNameFromKey, motelyItemDisplayNameFromValue, motelyTagDisplayName, motelyTagDisplayNameFromKey, motelyVoucherDisplayName, motelyVoucherDisplayNameFromKey, } from "./motelyDisplay.js";
package/dist/motely.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
2
  export { decodeMotelyItem, decodeMotelyItemToJamlCard, motelyItemTypeName, motelyItemCategory, motelyItemDisplayName, motelyItemRenderCategory, motelyItemEditionName, motelyItemSealName, motelyItemEnhancementName, motelyStandardcardRankName, motelyStandardcardSuitName, decodeMotelyItemName, resolveMotelyItemType, warmMotelyItemCache, motelyItemCacheSize, } from "./decode/motelyItemDecoder.js";
3
- export { motelyItemToSprite, } from "./decode/motelySprite.js";
4
- export { MOTELY_DISPLAY_SCHEMA, motelyBossDisplayName, motelyBossDisplayNameFromKey, motelyBossKeyFromDisplayName, motelyBoosterPackDisplayName, motelyBoosterPackDisplayNameFromKey, motelyBoosterPackKeyFromDisplayName, motelyItemDisplayNameFromKey, motelyItemDisplayNameFromValue, motelyTagDisplayName, motelyTagDisplayNameFromKey, motelyTagKeyFromDisplayName, motelyVoucherDisplayName, motelyVoucherDisplayNameFromKey, motelyVoucherKeyFromDisplayName, } from "./motelyDisplay.js";
3
+ export { motelyItemToSprite, getMotelySpriteByName, } from "./decode/motelySprite.js";
4
+ export { motelyBossDisplayName, motelyBossDisplayNameFromKey, motelyBoosterPackDisplayName, motelyBoosterPackDisplayNameFromKey, motelyItemDisplayNameFromKey, motelyItemDisplayNameFromValue, motelyTagDisplayName, motelyTagDisplayNameFromKey, motelyVoucherDisplayName, motelyVoucherDisplayNameFromKey, } from "./motelyDisplay.js";