jaml-ui 4.3.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/assets/jammy-seed-mascot.png +0 -0
  2. package/dist/assets/8BitDeck-B09C1jGy.png +0 -0
  3. package/dist/assets/BlindChips-Bnvhn76w.png +0 -0
  4. package/dist/assets/Boosters-Bqv_YhIn.png +0 -0
  5. package/dist/assets/Editions-B3YPqPOl.png +0 -0
  6. package/dist/assets/Enhancers-DhIlUuTX.png +0 -0
  7. package/dist/assets/Jokers-1egXSFFQ.png +0 -0
  8. package/dist/assets/Tarots-DkrFk7iW.png +0 -0
  9. package/dist/assets/Vouchers-Cdp8BeSE.png +0 -0
  10. package/dist/assets/balatro-stake-chips-BdO-bw7c.png +0 -0
  11. package/dist/assets/jammy-seed-mascot-BdoW3O33.png +0 -0
  12. package/dist/assets/m6x11plus-C8RqtTtG.ttf +0 -0
  13. package/dist/assets/stickers-B6y5vEyc.png +0 -0
  14. package/dist/assets/tags-BdxcVWR4.png +0 -0
  15. package/dist/chunks/JimboSwipeDeck-DbzWak3V.js +2051 -0
  16. package/dist/chunks/JimboSwipeDeck-DbzWak3V.js.map +1 -0
  17. package/dist/chunks/spriteMapper-gImEz0wa.js +501 -0
  18. package/dist/chunks/spriteMapper-gImEz0wa.js.map +1 -0
  19. package/dist/components/DailyRitualView.d.ts +17 -0
  20. package/dist/components/DeckStakePicker.d.ts +12 -0
  21. package/dist/components/JamlIde.d.ts +9 -0
  22. package/dist/components/JamlIdeToolbar.d.ts +2 -5
  23. package/dist/components/JamlIdeVisual.d.ts +30 -0
  24. package/dist/components/JamlMapPreview.d.ts +12 -0
  25. package/dist/components/Jamlyzer.d.ts +14 -2
  26. package/dist/components/JamlyzerBulk.d.ts +5 -4
  27. package/dist/components/JamlyzerView.d.ts +1 -12
  28. package/dist/components/SeedLab.d.ts +12 -0
  29. package/dist/components/jamlSeedUtils.d.ts +1 -0
  30. package/dist/components/jamlyzer/JamlyzerAnteDetails.d.ts +4 -0
  31. package/dist/components/jamlyzer/JamlyzerErraticDeck.d.ts +2 -2
  32. package/dist/components/jamlyzer/JamlyzerPackSection.d.ts +1 -5
  33. package/dist/components/jamlyzer/JamlyzerPulls.d.ts +2 -2
  34. package/dist/components/jamlyzer/JamlyzerSeedCard.d.ts +21 -0
  35. package/dist/components/jamlyzer/JamlyzerTape.d.ts +10 -0
  36. package/dist/components/jamlyzer/highlight.d.ts +3 -3
  37. package/dist/core.js +2 -2
  38. package/dist/decode/motelyItemDecoder.d.ts +1 -0
  39. package/dist/decode/motelySprite.d.ts +10 -13
  40. package/dist/decode/motelySpriteLut.generated.d.ts +2 -0
  41. package/dist/index.d.ts +13 -1
  42. package/dist/index.js +20903 -17732
  43. package/dist/index.js.map +1 -1
  44. package/dist/json-render/JimboJsonRenderer.d.ts +21 -0
  45. package/dist/json-render/catalog.d.ts +304 -180
  46. package/dist/json-render/index.d.ts +5 -30
  47. package/dist/json-render/registry.d.ts +2 -12
  48. package/dist/lib/daily/ritual.d.ts +43 -0
  49. package/dist/lib/jaml/{parseClauses.d.ts → jaml.d.ts} +17 -13
  50. package/dist/lib/jaml/rarity.d.ts +53 -0
  51. package/dist/lib/jaml/rarityData.generated.d.ts +727 -0
  52. package/dist/ui/JimboApp.d.ts +8 -6
  53. package/dist/ui/JimboBackground.d.ts +5 -13
  54. package/dist/ui/JimboBox.d.ts +16 -0
  55. package/dist/ui/JimboButton.d.ts +1 -1
  56. package/dist/ui/JimboCanvas.d.ts +12 -0
  57. package/dist/ui/JimboDock.d.ts +21 -0
  58. package/dist/ui/JimboInline.d.ts +11 -0
  59. package/dist/ui/JimboLink.d.ts +11 -0
  60. package/dist/ui/JimboMascot.d.ts +51 -5
  61. package/dist/ui/JimboOrbitalMenu.d.ts +81 -9
  62. package/dist/ui/JimboPanelSpinner.d.ts +14 -0
  63. package/dist/ui/JimboPicker.d.ts +1 -1
  64. package/dist/ui/JimboSeedCopyChip.d.ts +1 -2
  65. package/dist/ui/JimboShopBelt.d.ts +9 -0
  66. package/dist/ui/dockTree.d.ts +31 -0
  67. package/dist/ui/hooks.d.ts +1 -1
  68. package/dist/ui/jammySeedMascotImage.d.ts +1 -1
  69. package/dist/ui/jimbo.css +1 -1
  70. package/dist/ui/orbitalLayout.d.ts +149 -0
  71. package/dist/ui/orbitalMenuStore.d.ts +70 -0
  72. package/dist/ui/tokens.d.ts +9 -36
  73. package/dist/ui/useMotionPreference.d.ts +19 -0
  74. package/dist/ui.d.ts +20 -2
  75. package/dist/ui.js +77 -30
  76. package/dist/vocab.d.ts +26 -0
  77. package/package.json +36 -40
  78. package/README.md +0 -78
  79. package/assets/fonts/README.md +0 -14
  80. package/dist/chunks/JimboSwipeDeck-D2AVuZep.js +0 -967
  81. package/dist/chunks/JimboSwipeDeck-D2AVuZep.js.map +0 -1
  82. package/dist/chunks/motelyItemDecoder-Cb-RjvQ0.js +0 -692
  83. package/dist/chunks/motelyItemDecoder-Cb-RjvQ0.js.map +0 -1
  84. package/dist/chunks/spriteMapper-Dfr2_j0_.js +0 -501
  85. package/dist/chunks/spriteMapper-Dfr2_j0_.js.map +0 -1
  86. package/dist/components/jamlyzer/JamlyzerRail.d.ts +0 -14
  87. package/dist/json-render/builders/analyzer.d.ts +0 -23
  88. package/dist/json-render/builders/encyclopedia.d.ts +0 -14
  89. package/dist/json-render/builders/search.d.ts +0 -24
  90. package/dist/json-render/components/domain.d.ts +0 -59
  91. package/dist/json-render/components/game.d.ts +0 -18
  92. package/dist/json-render/components/layout.d.ts +0 -47
  93. package/dist/json-render/components/mascot.d.ts +0 -23
  94. package/dist/json-render/components/reference.d.ts +0 -39
  95. package/dist/json-render/engine.d.ts +0 -38
  96. package/dist/json-render/knowledge/bosses.d.ts +0 -18
  97. package/dist/json-render/knowledge/decks.d.ts +0 -22
  98. package/dist/json-render/knowledge/jokers.d.ts +0 -23
  99. package/dist/json-render/knowledge/synergies.d.ts +0 -21
  100. package/dist/lib/motely/jamlParse.d.ts +0 -4
  101. package/dist/lib/motely/runtime.d.ts +0 -1
  102. package/dist/motely.d.ts +0 -4
  103. package/dist/motely.js +0 -84
  104. package/dist/motely.js.map +0 -1
@@ -1,15 +1,17 @@
1
1
  import { HTMLAttributes, ReactNode } from 'react';
2
- export type JimboAppVariant = "embed" | "page";
2
+ export type JimboAppVariant = "embed" | "phone" | "page";
3
3
  export interface JimboAppProps extends HTMLAttributes<HTMLDivElement> {
4
- /** embed = fixed 320×540 MCP shell; page = fluid full-viewport web shell */
4
+ /** embed = MCP-on-desktop 375×375 square. phone = locked portrait. page = full website. */
5
5
  variant?: JimboAppVariant;
6
- /** Main column. For embed, scrolls inside the fixed frame when scroll is true. */
6
+ /** Main column. For embed/phone, scrolls inside the frame when true. */
7
7
  scroll?: boolean;
8
8
  footer?: ReactNode;
9
9
  }
10
10
  /**
11
- * App chrome. Embed = Balatro-toy / MCP rectangle. Page = fan-site / seedfinder shell.
12
- * Both set the Jimbo font stack and color; neither paints a second background
13
- * (use JimboBackground behind).
11
+ * App chrome.
12
+ * embed = MCP host iframe (square, funny on purpose).
13
+ * phone = mobile portrait, 375×667 (iPhone SE) / 100dvh — not the MCP square.
14
+ * page = desktop website, full viewport.
15
+ * None paints a second background (use JimboBackground behind).
14
16
  */
15
17
  export declare function JimboApp({ variant, scroll, footer, className, children, ...rest }: JimboAppProps): import("react").JSX.Element;
@@ -1,15 +1,7 @@
1
- import { default as React } from 'react';
1
+ import { JimboBackgroundConfig } from './hooks.js';
2
+ export type { JimboBackgroundConfig, JimboBackgroundColor } from './hooks.js';
2
3
  /**
3
- * Fullscreen WebGL CRT/spin background — the authentic Balatro hypnotic
4
- * swirl, pixelated and animated. Ported from weejoker.app's
5
- * BackgroundShader.tsx; no config required.
6
- *
7
- * Renders a fixed-position canvas at z-index: -10 that fills the viewport
8
- * and ignores pointer events. Drop it once at the root of your page:
9
- *
10
- * <JimboBackground />
11
- * <YourAppContent />
12
- *
13
- * Resizes automatically. Disposes the animation frame + shader on unmount.
4
+ * Fullscreen WebGL CRT/spin background. Shader knobs are uniforms
5
+ * (`useBalatroBackground`) so Storybook can drive swirl / pixel / RGB.
14
6
  */
15
- export declare function JimboBackground(): React.JSX.Element;
7
+ export declare function JimboBackground(config?: JimboBackgroundConfig): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ export interface JimboBoxProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Render as a different element (default: div) */
4
+ as?: "div" | "section" | "article" | "aside" | "main" | "nav" | "header" | "footer";
5
+ children?: React.ReactNode;
6
+ }
7
+ /**
8
+ * Thin wrapper around `<div>` (or another block element).
9
+ *
10
+ * All consumer code outside `src/ui/` must use `JimboBox` instead of raw
11
+ * `<div>` — the ESLint `no-raw-html` rule forbids intrinsic HTML elements.
12
+ * This component exists so that layouts can still use a plain container
13
+ * without reaching for a higher-level primitive that adds semantics they
14
+ * don't need (e.g. `JimboPanel` implies a visible card).
15
+ */
16
+ export declare const JimboBox: React.ForwardRefExoticComponent<JimboBoxProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,7 +1,7 @@
1
1
  import { ButtonHTMLAttributes } from 'react';
2
2
  export interface JimboButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
3
  size?: "xs" | "sm" | "md" | "lg";
4
- tone?: "orange" | "red" | "blue" | "green";
4
+ tone?: "orange" | "red" | "blue" | "green" | "purple" | "grey";
5
5
  fullWidth?: boolean;
6
6
  label?: string;
7
7
  }
@@ -0,0 +1,12 @@
1
+ import { default as React } from 'react';
2
+ export interface JimboCanvasProps extends React.CanvasHTMLAttributes<HTMLCanvasElement> {
3
+ children?: React.ReactNode;
4
+ }
5
+ /**
6
+ * Thin wrapper around `<canvas>`.
7
+ *
8
+ * Used by `CanvasRenderer` and any other component that needs a raw
9
+ * drawing surface. The ESLint `no-raw-html` rule forbids `<canvas>`
10
+ * outside `src/ui/`, so consumers use this primitive instead.
11
+ */
12
+ export declare const JimboCanvas: React.ForwardRefExoticComponent<JimboCanvasProps & React.RefAttributes<HTMLCanvasElement>>;
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from 'react';
2
+ import { JimboOuterTabTone } from './JimboOuterTab.js';
3
+ export { defaultPyramidDock, dockActivate, type DockNode, } from './dockTree.js';
4
+ export interface JimboDockPane {
5
+ label: string;
6
+ tone: JimboOuterTabTone;
7
+ content: ReactNode;
8
+ }
9
+ export interface JimboDockProps {
10
+ panes: Record<string, JimboDockPane>;
11
+ /** Filter / search / results / jamlyze keys for the pyramid default. */
12
+ pyramid?: {
13
+ filter: string;
14
+ search: string;
15
+ results: string;
16
+ jamlyze: string;
17
+ };
18
+ storageKey?: string;
19
+ className?: string;
20
+ }
21
+ export declare function JimboDock({ panes, pyramid, storageKey, className, }: JimboDockProps): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ export interface JimboInlineProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ children?: React.ReactNode;
4
+ }
5
+ /**
6
+ * Thin wrapper around `<span>`.
7
+ *
8
+ * Use when you need an inline container that is not a `JimboText` (which
9
+ * applies typography tokens). For styled text, prefer `JimboText`.
10
+ */
11
+ export declare function JimboInline({ children, ...rest }: JimboInlineProps): React.JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ export interface JimboLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ children?: React.ReactNode;
4
+ }
5
+ /**
6
+ * Thin wrapper around `<a>`.
7
+ *
8
+ * Use when you need a plain hyperlink. The ESLint `no-raw-html` rule
9
+ * forbids `<a>` outside `src/ui/`, so consumers use this primitive.
10
+ */
11
+ export declare function JimboLink({ children, ...rest }: JimboLinkProps): React.JSX.Element;
@@ -1,12 +1,58 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
2
  import { JimboOrbitalMenuItem } from './JimboOrbitalMenu.js';
3
+ import { JimboOrbitalStore } from './orbitalMenuStore.js';
3
4
  export interface JimboMascotProps extends HTMLAttributes<HTMLDivElement> {
4
5
  mood?: "idle" | "happy" | "surprised";
5
6
  /** Box size in px. Default 96. */
6
7
  size?: number;
7
- /** When present, tapping the mascot toggles a radial action menu. */
8
+ /** A flat ring, no submenus. Ignored when `getMenuItems` is given. */
8
9
  menuItems?: JimboOrbitalMenuItem[];
9
- onMenuAction?: (action: string) => void;
10
+ /**
11
+ * Resolve the items for a menu path — `[]`, `["main"]`, `["main","Tools"]`.
12
+ *
13
+ * This is the seam that makes submenus, paging and the south exit the
14
+ * mascot's job rather than every consumer's. An item with a `submenu` pushes
15
+ * onto the path; one with an `action` fires `onMenuAction`.
16
+ */
17
+ getMenuItems?: (menuStack: string[]) => JimboOrbitalMenuItem[];
18
+ onMenuAction?: (action: string, item: JimboOrbitalMenuItem) => void;
19
+ /**
20
+ * Largest orbit radius the ring may use, px. Pass
21
+ * `maxOrbitRadiusForBox(w, h)` for the box the mascot is sectioned into and
22
+ * the ring can never overflow it, however many items a menu holds.
23
+ */
24
+ maxOrbitRadius?: number;
25
+ /**
26
+ * Height of the box the mascot is sectioned into, px. Pins the south button
27
+ * to the box's bottom edge at full width — Balatro's exit law — instead of
28
+ * letting it ride the orbit radius.
29
+ */
30
+ orbitBoxHeight?: number;
31
+ /**
32
+ * Width of that same box, px.
33
+ *
34
+ * Load-bearing whenever `orbitBoxHeight` is set: the ring measures the
35
+ * element it is drawn into, and left to itself that element is the mascot's
36
+ * own box — a couple of hundred pixels narrower than the territory the ring
37
+ * owns. Pills then have nowhere to fly out to and stack on the character.
38
+ * Give the ring the real square and it fills it.
39
+ *
40
+ * The ring is centered on the mascot, so place the mascot where the ring's
41
+ * center belongs — usually the middle of that square.
42
+ */
43
+ orbitBoxWidth?: number;
44
+ /** Orbit radius before item-count growth. Default 90. */
45
+ baseOrbitRadius?: number;
46
+ /** Keep the ring shut (an overlay owns the screen). */
47
+ menuHidden?: boolean;
48
+ /** South-button label at the root of the menu. Deeper in it always says Back. */
49
+ closeLabel?: string;
50
+ /** Use a private menu store instead of the shared one. */
51
+ orbitalStore?: JimboOrbitalStore;
52
+ /** Draw something else as the character — the artwork seam. */
53
+ renderImage?: (info: {
54
+ size: number;
55
+ }) => ReactNode;
10
56
  }
11
- /** Jammy, the seed mascot — bounces, shakes, and hosts a radial menu. */
12
- export declare function JimboMascot({ mood, size, menuItems, onMenuAction, className, ...rest }: JimboMascotProps): import("react").JSX.Element;
57
+ /** Jammy, the seed mascot — bounces, shakes, and hosts the orbital menu. */
58
+ export declare function JimboMascot({ mood, size, menuItems, getMenuItems, onMenuAction, maxOrbitRadius, orbitBoxHeight, orbitBoxWidth, baseOrbitRadius, menuHidden, closeLabel, orbitalStore, renderImage, className, ...rest }: JimboMascotProps): import("react").JSX.Element;
@@ -1,15 +1,87 @@
1
- import { HTMLAttributes } from 'react';
2
- import { JimboBadgeTone } from './JimboBadge.js';
1
+ import { ReactNode } from 'react';
2
+ import { JimboStatus } from './JimboStatusPill.js';
3
+ export type JimboOrbitalTone = "red" | "blue" | "orange" | "green" | "purple";
4
+ /**
5
+ * Strict color semantics, carried over from the harvest because they are how
6
+ * the ring stays readable at a glance:
7
+ *
8
+ * RED submenu or plain action ORANGE toggle, and the way out
9
+ * BLUE talks to the assistant GREEN start (welcome screen only)
10
+ * PURPLE a counted / tallied thing
11
+ */
3
12
  export interface JimboOrbitalMenuItem {
4
13
  label: string;
5
- action: string;
6
- tone?: JimboBadgeTone;
14
+ /** Emitted through `onAction`. Omit when `submenu` is set. */
15
+ action?: string;
16
+ /** Pushes a submenu of this name instead of firing an action. */
17
+ submenu?: string;
18
+ tone?: JimboOrbitalTone;
19
+ /** Present (even as `false`) makes this a toggle and draws the state dot. */
20
+ active?: boolean;
21
+ disabled?: boolean;
22
+ /** Draws a tally on the pill's right edge. */
23
+ count?: number;
24
+ /** Drawn in place of a count. */
25
+ icon?: ReactNode;
26
+ tooltip?: string;
27
+ /** Renders a non-interactive status pill instead of a button. */
28
+ badge?: {
29
+ label: string;
30
+ status: JimboStatus;
31
+ };
32
+ /**
33
+ * Pin to the south slot. That slot is the way out — Balatro's exit law is a
34
+ * full-width button along the very bottom at any modal size — so at most one
35
+ * item should carry it.
36
+ */
37
+ south?: boolean;
38
+ /** Render at lower opacity (unavailable, but worth showing). */
39
+ dim?: boolean;
7
40
  }
8
- export interface JimboOrbitalMenuProps extends HTMLAttributes<HTMLDivElement> {
41
+ export interface JimboOrbitalMenuProps {
9
42
  items: JimboOrbitalMenuItem[];
10
- onAction?: (action: string) => void;
11
- /** Orbit radius in px. Default 90. */
43
+ onAction?: (action: string, item: JimboOrbitalMenuItem) => void;
44
+ /** Fired when a `submenu` item is clicked. */
45
+ onNavigate?: (submenu: string) => void;
46
+ /** Fired when the south item is clicked. */
47
+ onBack?: () => void;
48
+ /** Current menu name — keys the pills so a submenu push re-animates them. */
49
+ currentMenu?: string;
50
+ /** Collapse the pills to center (the close/push animation). */
51
+ closing?: boolean;
52
+ /** Mascot diameter (px). Pills are pushed out to clear it. */
53
+ mascotSize?: number;
54
+ /** Horizontal orbit radius (px). */
12
55
  radius?: number;
56
+ /** Vertical orbit radius (px). Defaults to `radius`. */
57
+ radiusY?: number;
58
+ /**
59
+ * Height of the box the ring is sectioned into (px).
60
+ *
61
+ * When given, geometry switches to THE ORBIT LAW (see ./orbitalLayout): pills
62
+ * stack by height and fly out to the walls, and the south button pins to the
63
+ * container's bottom edge at full width instead of riding the orbit. That is
64
+ * what makes the ring fit a short, wide box without shrinking the mascot.
65
+ */
66
+ boxHeight?: number;
67
+ /** Vertical shift (px) — hosts use it to dodge an on-screen keyboard. */
68
+ translateY?: number;
69
+ /** Rendered above the south button. */
70
+ breadcrumb?: ReactNode;
71
+ showPageControls?: boolean;
72
+ onPagePrev?: () => void;
73
+ onPageNext?: () => void;
74
+ /** Drawn at the ring's center, beneath the pills — usually a JimboMascot. */
75
+ center?: ReactNode;
76
+ className?: string;
77
+ "aria-label"?: string;
13
78
  }
14
- /** Badges arranged on a circle around a center point (mascot radial menu). */
15
- export declare function JimboOrbitalMenu({ items, onAction, radius, className, ...rest }: JimboOrbitalMenuProps): import("react").JSX.Element | null;
79
+ /**
80
+ * Orbital radial menu.
81
+ *
82
+ * The south item stays pinned under the mascot; everyone else sits at equal
83
+ * angle steps with a single outward push when a pill would overlap the center.
84
+ * See ./orbitalLayout for why there is no iterative solver — the evenness is
85
+ * the whole effect.
86
+ */
87
+ export declare function JimboOrbitalMenu({ items, onAction, onNavigate, onBack, currentMenu, closing, mascotSize, radius, radiusY, boxHeight, translateY, breadcrumb, showPageControls, onPagePrev, onPageNext, center, className, "aria-label": ariaLabel, }: JimboOrbitalMenuProps): import("react").JSX.Element | null;
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ export interface JimboPanelSpinnerProps {
3
+ label?: string;
4
+ title: string;
5
+ description?: string;
6
+ media?: ReactNode;
7
+ onPrev?: () => void;
8
+ onNext?: () => void;
9
+ canPrev?: boolean;
10
+ canNext?: boolean;
11
+ className?: string;
12
+ }
13
+ /** Fat Balatro option cycler: 140px arrows flanking a fixed-height face. */
14
+ export declare function JimboPanelSpinner({ label, title, description, media, onPrev, onNext, canPrev, canNext, className, }: JimboPanelSpinnerProps): import("react").JSX.Element;
@@ -7,7 +7,7 @@ export interface JimboPickerGridProps extends HTMLAttributes<HTMLDivElement> {
7
7
  legendary?: boolean;
8
8
  scroll?: boolean;
9
9
  }
10
- export declare function JimboPickerGrid({ legendary, scroll: _scroll, className, children, ...rest }: JimboPickerGridProps): import("react").JSX.Element;
10
+ export declare function JimboPickerGrid({ legendary, className, children, ...rest }: JimboPickerGridProps): import("react").JSX.Element;
11
11
  export interface JimboPickerItemProps extends HTMLAttributes<HTMLButtonElement> {
12
12
  muted?: boolean;
13
13
  title?: string;
@@ -10,7 +10,6 @@ export interface JimboSeedCopyChipProps {
10
10
  style?: React.CSSProperties;
11
11
  }
12
12
  /**
13
- * Harvested from WeeJoker SeedCard — tap-to-copy seed row with icon + value.
14
- * Idle: copy icon + seed. Copied: green check + brief confirmation label.
13
+ * Tap-to-copy seed row. Idle: copy icon + seed. Copied: green check + label.
15
14
  */
16
15
  export declare function JimboSeedCopyChip({ value, placeholder, disabled, copiedLabel, copiedDurationMs, onCopy, className, style, }: JimboSeedCopyChipProps): React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ export interface JimboShopBeltProps {
3
+ children?: ReactNode;
4
+ className?: string;
5
+ onNearEnd?: () => void;
6
+ snap?: boolean;
7
+ }
8
+ /** Horizontal pixel-card tape. Drag follows the finger; wheel maps to x. */
9
+ export declare function JimboShopBelt({ children, className, onNearEnd, snap }: JimboShopBeltProps): import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ /** Dock tree — layout is user data. Harvested from seedfinder.app SeedLab dock.js. */
2
+ export type DockDir = "row" | "column";
3
+ export type DockEdge = "left" | "right" | "top" | "bottom" | "center";
4
+ export interface DockGroup {
5
+ type: "group";
6
+ id: string;
7
+ panes: string[];
8
+ active: string | null;
9
+ }
10
+ export interface DockSplit {
11
+ type: "split";
12
+ id: string;
13
+ dir: DockDir;
14
+ ratio: number;
15
+ children: [DockNode, DockNode];
16
+ }
17
+ export type DockNode = DockGroup | DockSplit;
18
+ export declare function defaultPyramidDock(keys: {
19
+ filter: string;
20
+ search: string;
21
+ results: string;
22
+ jamlyze: string;
23
+ }): DockNode;
24
+ export declare function dockRemove(node: DockNode, key: string): DockNode;
25
+ export declare function dockMapGroup(node: DockNode, id: string, fn: (g: DockGroup) => DockGroup): DockNode;
26
+ export declare function dockSplitAt(node: DockNode, id: string, key: string, side: DockEdge): DockNode;
27
+ export declare function dockGroups(node: DockNode, acc?: DockGroup[]): DockGroup[];
28
+ export declare function dockActivate(node: DockNode, key: string): DockNode;
29
+ export declare function dockIsValid(node: DockNode, paneKeys: string[]): boolean;
30
+ export declare function loadDock(storageKey: string, fallback: DockNode, paneKeys: string[]): DockNode;
31
+ export declare function saveDock(storageKey: string, tree: DockNode): void;
@@ -115,7 +115,7 @@ export declare function useJamlIdeDrag(filter: JamlVisualFilter, onChange: (filt
115
115
  * Provides a magnetic 3D tilt effect for DOM elements, replicating the hover-follow
116
116
  * of Balatro cards. Continuous (tracks the cursor). Pure CSS transform — no 3D deps.
117
117
  */
118
- export declare function useDOMMagneticTilt(enabled?: boolean): {
118
+ export declare function useDOMMagneticTilt(enabledProp?: boolean): {
119
119
  handlers: {
120
120
  onPointerEnter: ((event: React.PointerEvent) => void) | undefined;
121
121
  onPointerLeave: (() => void) | undefined;