@trading-game/design-intelligence-layer 0.14.0 → 0.15.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.
package/dist/index.js CHANGED
@@ -604,7 +604,7 @@ var badgeVariants = cva3(
604
604
  "fill-success": "bg-semantic-win/10 border-transparent text-semantic-win",
605
605
  "fill-fail": "bg-semantic-loss/10 border-transparent text-semantic-loss",
606
606
  "fill-warning": "bg-semantic-warning/10 border-transparent text-semantic-warning",
607
- "fill-boost": "bg-semantic-boost/16 border-transparent text-on-semantic-boost !text-xs !font-semibold",
607
+ "fill-credit": "bg-semantic-boost/16 border-transparent text-on-semantic-boost !text-xs !font-semibold",
608
608
  // Ghost (transparent)
609
609
  ghost: "bg-transparent border-transparent text-primary [a&]:hover:bg-secondary-hover [a&]:hover:text-primary",
610
610
  "ghost-success": "bg-transparent border-transparent text-semantic-win [a&]:hover:bg-semantic-win/10 [a&]:hover:text-semantic-win",
@@ -6319,7 +6319,7 @@ function TabsContent(_a) {
6319
6319
  }
6320
6320
 
6321
6321
  // components/ui/ticket-card.tsx
6322
- import { ArrowRight as ArrowRight2, Info, Rocket } from "lucide-react";
6322
+ import { ArrowRight as ArrowRight2, Info } from "lucide-react";
6323
6323
  import { Fragment as Fragment3, jsx as jsx57, jsxs as jsxs27 } from "react/jsx-runtime";
6324
6324
  function formatBalanceValue(raw) {
6325
6325
  const match = raw.match(/^(\D*)([\d,]+(?:\.\d+)?)(\D*)$/);
@@ -6402,7 +6402,7 @@ function TicketCard({
6402
6402
  )
6403
6403
  ] }) });
6404
6404
  }
6405
- function BoostTicketCard({
6405
+ function CreditTicketCard({
6406
6406
  className,
6407
6407
  icon,
6408
6408
  label,
@@ -6411,34 +6411,37 @@ function BoostTicketCard({
6411
6411
  stubLabel,
6412
6412
  onStubClick,
6413
6413
  stubDisabled = false,
6414
- boostAmount = "0.00",
6415
- boostCurrency = "USDT",
6416
- boostInfo,
6417
- boostInfoSide = "top",
6418
- boostInfoAlign = "center",
6419
- boostInfoTitle,
6420
- boostInfoCloseLabel,
6414
+ badgeIcon,
6415
+ badgeLabel = "Label",
6416
+ badgeValue = "0.00",
6417
+ badgeCurrency = "USDT",
6418
+ badgeInfo,
6419
+ badgeInfoSide = "top",
6420
+ badgeInfoAlign = "center",
6421
+ badgeInfoTitle,
6422
+ badgeInfoCloseLabel,
6421
6423
  compact = false
6422
6424
  }) {
6423
6425
  return /* @__PURE__ */ jsx57("div", { className: cn("flex w-full flex-col gap-2", className), children: /* @__PURE__ */ jsxs27("div", { className: "relative flex w-full items-stretch justify-between rounded-sm bg-subtle", children: [
6424
6426
  (() => {
6425
- const boostBadge = /* @__PURE__ */ jsxs27(Badge, { variant: "fill-boost", size: "sm", className: "!gap-1 !font-medium !tracking-normal", children: [
6426
- /* @__PURE__ */ jsx57(Rocket, { className: "!size-3.5", strokeWidth: 2 }),
6427
- "Boost: ",
6428
- boostAmount,
6427
+ const creditBadge = /* @__PURE__ */ jsxs27(Badge, { variant: "fill-credit", size: "sm", className: "!gap-1 !font-medium !tracking-normal", children: [
6428
+ badgeIcon,
6429
+ badgeLabel,
6430
+ ": ",
6431
+ badgeValue,
6429
6432
  " ",
6430
- boostCurrency,
6431
- boostInfo && /* @__PURE__ */ jsx57(TooltipProvider, { children: /* @__PURE__ */ jsxs27(Tooltip2, { children: [
6433
+ badgeCurrency,
6434
+ badgeInfo && /* @__PURE__ */ jsx57(TooltipProvider, { children: /* @__PURE__ */ jsxs27(Tooltip2, { children: [
6432
6435
  /* @__PURE__ */ jsx57(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx57(
6433
6436
  "button",
6434
6437
  {
6435
6438
  type: "button",
6436
- "aria-label": "More info about boost",
6439
+ "aria-label": `More info about ${badgeLabel.toLowerCase()}`,
6437
6440
  className: "inline-flex shrink-0 items-center justify-center rounded-full text-on-semantic-boost outline-none transition-opacity hover:opacity-70 focus-visible:opacity-70 focus-visible:ring-2 focus-visible:ring-on-semantic-boost/40 cursor-pointer",
6438
6441
  children: /* @__PURE__ */ jsx57(Info, { className: "!size-3.5", strokeWidth: 2 })
6439
6442
  }
6440
6443
  ) }),
6441
- /* @__PURE__ */ jsx57(TooltipContent, { side: boostInfoSide, align: boostInfoAlign, title: boostInfoTitle, closeLabel: boostInfoCloseLabel, variant: "inverse", className: "max-w-xs whitespace-normal", children: boostInfo })
6444
+ /* @__PURE__ */ jsx57(TooltipContent, { side: badgeInfoSide, align: badgeInfoAlign, title: badgeInfoTitle, closeLabel: badgeInfoCloseLabel, variant: "inverse", className: "max-w-xs whitespace-normal", children: badgeInfo })
6442
6445
  ] }) })
6443
6446
  ] });
6444
6447
  const labelValue = /* @__PURE__ */ jsxs27(Fragment3, { children: [
@@ -6457,7 +6460,7 @@ function BoostTicketCard({
6457
6460
  /* Mobile / compact: badge stacked under the value */
6458
6461
  /* @__PURE__ */ jsxs27("div", { className: "flex flex-col gap-2 whitespace-nowrap", children: [
6459
6462
  /* @__PURE__ */ jsx57("div", { className: "flex flex-col gap-1", children: labelValue }),
6460
- boostBadge
6463
+ creditBadge
6461
6464
  ] })
6462
6465
  ) : (
6463
6466
  /* Desktop: badge inline next to the value (16px gap = gap-4) */
@@ -6471,7 +6474,7 @@ function BoostTicketCard({
6471
6474
  /* @__PURE__ */ jsx57("span", { className: "text-sm text-on-subtle", children: currency })
6472
6475
  ] })
6473
6476
  ] }),
6474
- boostBadge
6477
+ creditBadge
6475
6478
  ] })
6476
6479
  ] })
6477
6480
  )
@@ -6640,6 +6643,496 @@ function ToggleGroupItem(_a) {
6640
6643
  })
6641
6644
  );
6642
6645
  }
6646
+
6647
+ // components/blocks/result-block.tsx
6648
+ import { Fragment as Fragment4, jsx as jsx60, jsxs as jsxs28 } from "react/jsx-runtime";
6649
+ var THUMBS_UP_DATA_URL = "data:image/webp;base64,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";
6650
+ var THUMBS_DOWN_DATA_URL = "data:image/webp;base64,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";
6651
+ function ResultBlock({
6652
+ status,
6653
+ amount,
6654
+ currency,
6655
+ contractLabel,
6656
+ pickedDigit,
6657
+ duration,
6658
+ ctaMode
6659
+ }) {
6660
+ const isWin = status === "win";
6661
+ const titleText = isWin ? "You won!" : "You lost!";
6662
+ const signedAmount = isWin ? `+${amount}` : `\u2212${amount}`;
6663
+ const amountColorClass = isWin ? "text-semantic-win" : "text-semantic-loss";
6664
+ const haloBgClass = isWin ? "bg-semantic-win" : "bg-semantic-loss";
6665
+ return /* @__PURE__ */ jsxs28(Card, { className: "w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-5 items-center gap-3", children: [
6666
+ /* @__PURE__ */ jsxs28("div", { className: "relative flex items-center justify-center py-2", children: [
6667
+ /* @__PURE__ */ jsx60(
6668
+ "span",
6669
+ {
6670
+ "aria-hidden": true,
6671
+ "data-results-motion": "halo",
6672
+ className: `absolute size-24 rounded-full blur-2xl opacity-20 ${haloBgClass}`
6673
+ }
6674
+ ),
6675
+ /* @__PURE__ */ jsx60(
6676
+ "img",
6677
+ {
6678
+ "data-results-motion": isWin ? "icon-win" : "icon-loss",
6679
+ src: isWin ? THUMBS_UP_DATA_URL : THUMBS_DOWN_DATA_URL,
6680
+ alt: isWin ? "Win" : "Loss",
6681
+ className: "relative size-20"
6682
+ }
6683
+ )
6684
+ ] }),
6685
+ /* @__PURE__ */ jsx60("p", { className: "text-lg font-semibold text-on-prominent", children: titleText }),
6686
+ /* @__PURE__ */ jsxs28("p", { className: `flex items-baseline gap-1.5 ${amountColorClass}`, children: [
6687
+ /* @__PURE__ */ jsx60("span", { className: "font-display text-4xl font-bold tabular-nums tracking-tight", children: signedAmount }),
6688
+ /* @__PURE__ */ jsx60("span", { className: "text-lg font-semibold", children: currency })
6689
+ ] }),
6690
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
6691
+ /* @__PURE__ */ jsxs28(Badge, { variant: "standard", size: "sm", children: [
6692
+ contractLabel,
6693
+ pickedDigit !== void 0 && /* @__PURE__ */ jsxs28(Fragment4, { children: [
6694
+ /* @__PURE__ */ jsx60("span", { "aria-hidden": true, className: "h-3 w-px bg-border-prominent/40 mx-1" }),
6695
+ /* @__PURE__ */ jsx60("span", { className: "tabular-nums", children: pickedDigit })
6696
+ ] })
6697
+ ] }),
6698
+ /* @__PURE__ */ jsx60(Badge, { variant: "standard", size: "sm", children: duration })
6699
+ ] }),
6700
+ /* @__PURE__ */ jsxs28("div", { className: "w-full pt-2", children: [
6701
+ ctaMode === "next-round" && /* @__PURE__ */ jsx60(Button, { className: "w-full", children: "Next round" }),
6702
+ ctaMode === "go-again" && /* @__PURE__ */ jsx60(Button, { className: "w-full", children: "Go again" }),
6703
+ ctaMode === "conversion" && /* @__PURE__ */ jsxs28("div", { className: "w-full flex flex-col gap-3", children: [
6704
+ /* @__PURE__ */ jsx60("p", { className: "text-center text-base font-semibold text-on-prominent", children: "Ready to play for real?" }),
6705
+ /* @__PURE__ */ jsx60(Button, { className: "w-full", children: "Deposit now" }),
6706
+ /* @__PURE__ */ jsx60(Button, { variant: "secondary", className: "w-full", children: "Stay in demo" })
6707
+ ] })
6708
+ ] })
6709
+ ] });
6710
+ }
6711
+ function ResultDialog({
6712
+ title,
6713
+ body,
6714
+ primaryLabel,
6715
+ secondaryLabel
6716
+ }) {
6717
+ return /* @__PURE__ */ jsxs28(Card, { className: "w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-6 items-center gap-4", children: [
6718
+ /* @__PURE__ */ jsxs28("div", { className: "flex flex-col items-center gap-2 text-center", children: [
6719
+ /* @__PURE__ */ jsx60("p", { className: "text-lg font-semibold text-on-prominent", children: title }),
6720
+ /* @__PURE__ */ jsx60("p", { className: "text-sm text-on-subtle", children: body })
6721
+ ] }),
6722
+ /* @__PURE__ */ jsxs28("div", { className: "w-full flex flex-col gap-2", children: [
6723
+ /* @__PURE__ */ jsx60(Button, { className: "w-full", children: primaryLabel }),
6724
+ /* @__PURE__ */ jsx60(Button, { variant: "secondary", className: "w-full", children: secondaryLabel })
6725
+ ] })
6726
+ ] });
6727
+ }
6728
+
6729
+ // components/blocks/header-navigation-block.tsx
6730
+ import { ArrowLeft as ArrowLeft2, History } from "lucide-react";
6731
+ import { jsx as jsx61, jsxs as jsxs29 } from "react/jsx-runtime";
6732
+ function HeaderNavigationBlock({
6733
+ onBack,
6734
+ badge,
6735
+ balance,
6736
+ history,
6737
+ actions
6738
+ }) {
6739
+ var _a;
6740
+ return /* @__PURE__ */ jsx61("div", { className: "w-full min-w-80 max-w-layout-diagram-small border border-border-subtle rounded-md overflow-hidden bg-prominent", children: /* @__PURE__ */ jsxs29("header", { className: "flex items-center gap-2 border-b border-border-subtle bg-prominent px-layout-margin-inline py-3", children: [
6741
+ onBack && /* @__PURE__ */ jsx61(NavigationButton, { type: "button", size: "md", "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ jsx61(ArrowLeft2, { className: "size-5" }) }),
6742
+ /* @__PURE__ */ jsxs29("div", { className: "flex min-w-0 flex-1 items-center justify-center gap-2", children: [
6743
+ badge && /* @__PURE__ */ jsx61(Badge, { variant: (_a = badge.variant) != null ? _a : "fill-warning", size: "sm", children: badge.label }),
6744
+ /* @__PURE__ */ jsx61("span", { className: "font-display font-semibold tabular-nums text-on-prominent", children: balance.amount }),
6745
+ /* @__PURE__ */ jsx61("span", { className: "text-sm text-on-subtle", children: balance.currency })
6746
+ ] }),
6747
+ /* @__PURE__ */ jsxs29("div", { className: "flex shrink-0 items-center gap-1", children: [
6748
+ history && /* @__PURE__ */ jsx61(HistoryButton, __spreadValues({}, history)),
6749
+ actions
6750
+ ] })
6751
+ ] }) });
6752
+ }
6753
+ function HistoryButton({
6754
+ count,
6755
+ onClick,
6756
+ "aria-label": ariaLabelOverride
6757
+ }) {
6758
+ const show = typeof count === "number" && count > 0;
6759
+ const label = show ? count > 99 ? "99+" : String(count) : null;
6760
+ const ariaLabel = ariaLabelOverride != null ? ariaLabelOverride : show ? `Open history, ${count} new` : "Open history";
6761
+ return /* @__PURE__ */ jsxs29("div", { className: "relative inline-flex", children: [
6762
+ /* @__PURE__ */ jsx61(NavigationButton, { type: "button", size: "md", "aria-label": ariaLabel, onClick, children: /* @__PURE__ */ jsx61(History, { className: "size-5" }) }),
6763
+ show && /* @__PURE__ */ jsx61(
6764
+ "span",
6765
+ {
6766
+ "aria-hidden": true,
6767
+ className: "pointer-events-none absolute -top-0.5 -right-0.5 min-w-[1.125rem] h-[1.125rem] px-1 rounded-full bg-primary text-on-primary text-[10px] leading-none font-semibold tabular-nums inline-flex items-center justify-center ring-2 ring-prominent",
6768
+ children: label
6769
+ }
6770
+ )
6771
+ ] });
6772
+ }
6773
+
6774
+ // components/blocks/faq-block.tsx
6775
+ import { jsx as jsx62, jsxs as jsxs30 } from "react/jsx-runtime";
6776
+ function FAQBlock({
6777
+ eyebrow = "FAQ Section",
6778
+ title = "Frequently asked questions",
6779
+ intro,
6780
+ items,
6781
+ defaultValue,
6782
+ helpCard,
6783
+ layout = "desktop"
6784
+ }) {
6785
+ var _a;
6786
+ const headingClass = layout === "desktop" ? "text-5xl font-bold font-display text-on-prominent text-center tracking-tight" : "text-4xl font-bold font-display text-on-prominent text-center tracking-tight";
6787
+ const helpTitleClass = layout === "desktop" ? "text-2xl font-semibold font-display text-on-prominent" : "text-xl font-semibold font-display text-on-prominent";
6788
+ const helpCardPaddingClass = layout === "desktop" ? "p-8" : "p-6";
6789
+ const gapClass = layout === "desktop" ? "gap-12" : "gap-10";
6790
+ const headerGapClass = layout === "desktop" ? "gap-5" : "gap-4";
6791
+ return /* @__PURE__ */ jsxs30("div", { className: `w-full flex flex-col ${gapClass}`, children: [
6792
+ /* @__PURE__ */ jsxs30("div", { className: `flex flex-col ${headerGapClass} items-center w-full`, children: [
6793
+ /* @__PURE__ */ jsx62("span", { className: "text-sm text-on-subtle font-body", children: eyebrow }),
6794
+ /* @__PURE__ */ jsx62("h2", { className: headingClass, children: title }),
6795
+ intro && /* @__PURE__ */ jsx62("p", { className: "text-lg text-on-subtle font-body text-center", children: intro })
6796
+ ] }),
6797
+ /* @__PURE__ */ jsx62(
6798
+ Accordion,
6799
+ {
6800
+ type: "single",
6801
+ collapsible: true,
6802
+ defaultValue: defaultValue != null ? defaultValue : (_a = items[0]) == null ? void 0 : _a.value,
6803
+ className: "w-full",
6804
+ children: items.map(({ value, question, answer }) => /* @__PURE__ */ jsxs30(AccordionItem, { value, children: [
6805
+ /* @__PURE__ */ jsx62(AccordionTrigger, { className: "text-base font-medium font-body text-on-prominent hover:no-underline", children: question }),
6806
+ /* @__PURE__ */ jsx62(AccordionContent, { children: /* @__PURE__ */ jsx62("p", { className: "text-sm text-on-subtle font-body pb-4", children: answer }) })
6807
+ ] }, value))
6808
+ }
6809
+ ),
6810
+ helpCard && /* @__PURE__ */ jsxs30("div", { className: `flex flex-col gap-6 items-center w-full bg-subtle rounded-xl ${helpCardPaddingClass}`, children: [
6811
+ /* @__PURE__ */ jsxs30("div", { className: "flex flex-col gap-2 w-full", children: [
6812
+ /* @__PURE__ */ jsx62("h3", { className: helpTitleClass, children: helpCard.title }),
6813
+ /* @__PURE__ */ jsx62("p", { className: "text-base text-on-subtle font-body", children: helpCard.body })
6814
+ ] }),
6815
+ /* @__PURE__ */ jsx62(Button, { size: "sm", onClick: helpCard.onCtaClick, children: helpCard.ctaLabel })
6816
+ ] })
6817
+ ] });
6818
+ }
6819
+
6820
+ // components/blocks/hero-block.tsx
6821
+ import { ArrowRight as ArrowRight3, ArrowUpRight } from "lucide-react";
6822
+ import { jsx as jsx63, jsxs as jsxs31 } from "react/jsx-runtime";
6823
+ function HeroBlock({
6824
+ layout = "centered",
6825
+ tagline,
6826
+ heading,
6827
+ body,
6828
+ primaryCta,
6829
+ secondaryCta,
6830
+ image
6831
+ }) {
6832
+ if (layout === "centered") {
6833
+ return /* @__PURE__ */ jsx63("div", { className: "w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent", children: /* @__PURE__ */ jsxs31("div", { className: "flex flex-col items-center justify-center gap-8 px-layout-margin-inline py-24 max-w-2xl mx-auto text-center", children: [
6834
+ /* @__PURE__ */ jsxs31("div", { className: "flex flex-col items-center gap-6 w-full", children: [
6835
+ tagline && /* @__PURE__ */ jsx63(TaglinePill, __spreadValues({}, tagline)),
6836
+ /* @__PURE__ */ jsx63("h1", { className: "text-5xl font-semibold font-display tracking-tight text-on-prominent text-center", children: heading }),
6837
+ /* @__PURE__ */ jsx63("p", { className: "text-lg font-body text-on-subtle text-center", children: body })
6838
+ ] }),
6839
+ /* @__PURE__ */ jsxs31(Button, { size: "sm", onClick: primaryCta.onClick, children: [
6840
+ primaryCta.label,
6841
+ primaryCta.trailingArrow !== false && /* @__PURE__ */ jsx63(ArrowRight3, { className: "size-4" })
6842
+ ] })
6843
+ ] }) });
6844
+ }
6845
+ return /* @__PURE__ */ jsx63("div", { className: "w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent", children: /* @__PURE__ */ jsxs31("div", { className: "flex flex-col min-[600px]:flex-row items-center gap-layout-gutter px-layout-margin-inline py-16 min-[600px]:py-24 max-w-5xl mx-auto", children: [
6846
+ /* @__PURE__ */ jsxs31("div", { className: "flex flex-col gap-6 min-[600px]:gap-8 flex-1 min-w-0 items-center min-[600px]:items-start text-center min-[600px]:text-left w-full", children: [
6847
+ /* @__PURE__ */ jsxs31("div", { className: "flex flex-col gap-5 min-[600px]:gap-6 items-center min-[600px]:items-start w-full", children: [
6848
+ tagline && /* @__PURE__ */ jsx63(TaglinePill, __spreadProps(__spreadValues({}, tagline), { responsive: true })),
6849
+ /* @__PURE__ */ jsx63("h1", { className: "text-4xl min-[600px]:text-5xl font-semibold font-display tracking-tight text-on-prominent", children: heading }),
6850
+ /* @__PURE__ */ jsx63("p", { className: "text-lg font-body text-on-subtle", children: body })
6851
+ ] }),
6852
+ /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-center min-[600px]:justify-start gap-2", children: [
6853
+ /* @__PURE__ */ jsx63(Button, { size: "sm", onClick: primaryCta.onClick, children: primaryCta.label }),
6854
+ secondaryCta && /* @__PURE__ */ jsx63(Button, { variant: "secondary", size: "sm", onClick: secondaryCta.onClick, children: secondaryCta.label })
6855
+ ] })
6856
+ ] }),
6857
+ /* @__PURE__ */ jsx63("div", { className: "w-full min-[600px]:flex-1 min-[600px]:min-w-0 aspect-square rounded-xl bg-subtle shrink-0", "aria-hidden": "true", children: image })
6858
+ ] }) });
6859
+ }
6860
+ function TaglinePill({
6861
+ label,
6862
+ suffix,
6863
+ responsive
6864
+ }) {
6865
+ return /* @__PURE__ */ jsxs31("div", { className: "inline-flex items-center gap-1.5 h-7 px-3 rounded-full border border-border-subtle bg-prominent shadow-sm shrink-0", children: [
6866
+ /* @__PURE__ */ jsx63("span", { className: "size-1.5 rounded-full bg-semantic-win shrink-0", "aria-hidden": "true" }),
6867
+ responsive && suffix ? /* @__PURE__ */ jsxs31("span", { className: "text-sm font-body text-on-prominent whitespace-nowrap", children: [
6868
+ /* @__PURE__ */ jsxs31("span", { className: "hidden min-[600px]:inline", children: [
6869
+ label,
6870
+ /* @__PURE__ */ jsx63("span", { className: "text-on-subtle", children: " \xB7 " })
6871
+ ] }),
6872
+ /* @__PURE__ */ jsx63("span", { className: "text-on-subtle min-[600px]:text-on-prominent", children: suffix })
6873
+ ] }) : /* @__PURE__ */ jsxs31("span", { className: "text-sm font-body text-on-prominent whitespace-nowrap", children: [
6874
+ label,
6875
+ suffix && /* @__PURE__ */ jsx63("span", { className: "text-on-subtle", children: ` \xB7 ${suffix}` })
6876
+ ] }),
6877
+ /* @__PURE__ */ jsx63(ArrowUpRight, { className: "size-4 text-on-subtle shrink-0", "aria-hidden": "true" })
6878
+ ] });
6879
+ }
6880
+
6881
+ // components/blocks/auth-block.tsx
6882
+ import * as React14 from "react";
6883
+ import { jsx as jsx64, jsxs as jsxs32 } from "react/jsx-runtime";
6884
+ function AuthBlock({
6885
+ mode,
6886
+ logoSrc,
6887
+ wordmark = "trading.game",
6888
+ providers = ["google", "telegram", "x"],
6889
+ onSubmit,
6890
+ crossLinkHref = "#",
6891
+ idPrefix = "auth"
6892
+ }) {
6893
+ const headingText = mode === "sign-in" ? "Sign in" : "Sign up";
6894
+ const termsText = mode === "sign-in" ? "By signing in" : "By signing up";
6895
+ const ctaText = mode === "sign-in" ? "Sign in" : "Sign up";
6896
+ const footerPrompt = mode === "sign-in" ? "Don't have an account?" : "Already have an account?";
6897
+ const footerLinkLabel = mode === "sign-in" ? "Sign up" : "Log in";
6898
+ const [email, setEmail] = React14.useState("");
6899
+ return /* @__PURE__ */ jsxs32("div", { className: "flex flex-col items-center gap-6 w-full", children: [
6900
+ /* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-2", children: [
6901
+ /* @__PURE__ */ jsx64("img", { src: logoSrc, alt: wordmark, className: "size-8 object-contain" }),
6902
+ /* @__PURE__ */ jsx64("span", { className: "font-display font-semibold text-base text-on-prominent tracking-tight", children: wordmark })
6903
+ ] }),
6904
+ /* @__PURE__ */ jsx64("h2", { className: "text-3xl font-bold font-display text-on-prominent text-center", children: headingText }),
6905
+ /* @__PURE__ */ jsx64("div", { className: "flex flex-col gap-3 w-full", children: providers.map((p) => /* @__PURE__ */ jsx64(ProviderButton, { provider: p }, p)) }),
6906
+ /* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-3 w-full", children: [
6907
+ /* @__PURE__ */ jsx64("div", { className: "flex-1 h-px bg-border-subtle" }),
6908
+ /* @__PURE__ */ jsx64("span", { className: "text-sm text-on-subtle font-body", children: "or" }),
6909
+ /* @__PURE__ */ jsx64("div", { className: "flex-1 h-px bg-border-subtle" })
6910
+ ] }),
6911
+ /* @__PURE__ */ jsx64("div", { className: "flex items-center gap-2 w-full", children: /* @__PURE__ */ jsx64(
6912
+ Input,
6913
+ {
6914
+ id: `${idPrefix}-email`,
6915
+ type: "text",
6916
+ placeholder: "Email or phone number",
6917
+ className: "flex-1",
6918
+ value: email,
6919
+ onChange: (e) => setEmail(e.target.value)
6920
+ }
6921
+ ) }),
6922
+ /* @__PURE__ */ jsxs32("p", { className: "text-sm text-on-subtle font-body text-left w-full", children: [
6923
+ termsText,
6924
+ ", you agree to our",
6925
+ " ",
6926
+ /* @__PURE__ */ jsx64(Link, { size: "sm", href: "#", children: "Terms & Conditions" })
6927
+ ] }),
6928
+ /* @__PURE__ */ jsx64(Button, { size: "md", className: "w-full", onClick: () => onSubmit == null ? void 0 : onSubmit({ email }), children: ctaText }),
6929
+ /* @__PURE__ */ jsxs32("p", { className: "text-sm text-on-subtle font-body text-center", children: [
6930
+ footerPrompt,
6931
+ " ",
6932
+ /* @__PURE__ */ jsx64(Link, { size: "sm", href: crossLinkHref, children: footerLinkLabel })
6933
+ ] })
6934
+ ] });
6935
+ }
6936
+ function ProviderButton({ provider }) {
6937
+ switch (provider) {
6938
+ case "google":
6939
+ return /* @__PURE__ */ jsxs32(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
6940
+ /* @__PURE__ */ jsxs32("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "none", className: "shrink-0", children: [
6941
+ /* @__PURE__ */ jsx64("path", { d: "M17.64 9.205c0-.639-.057-1.252-.164-1.841H9v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615Z", fill: "#4285F4" }),
6942
+ /* @__PURE__ */ jsx64("path", { d: "M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18Z", fill: "#34A853" }),
6943
+ /* @__PURE__ */ jsx64("path", { d: "M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332Z", fill: "#FBBC05" }),
6944
+ /* @__PURE__ */ jsx64("path", { d: "M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58Z", fill: "#EA4335" })
6945
+ ] }),
6946
+ "Continue with Google"
6947
+ ] });
6948
+ case "telegram":
6949
+ return /* @__PURE__ */ jsxs32(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
6950
+ /* @__PURE__ */ jsxs32("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "none", className: "shrink-0", children: [
6951
+ /* @__PURE__ */ jsx64("circle", { cx: "9", cy: "9", r: "9", fill: "#29B6F6" }),
6952
+ /* @__PURE__ */ jsx64("path", { d: "M13.5 5.25 11.25 13.5l-2.25-3-3 1.5 1.5-5.25 6-1.5Z", fill: "white", opacity: "0.3" }),
6953
+ /* @__PURE__ */ jsx64("path", { d: "m4.5 8.625 7.5-3-1.125 7.125-2.625-2.25-1.5 1.5.375-3.375Z", fill: "white" })
6954
+ ] }),
6955
+ "Continue with Telegram"
6956
+ ] });
6957
+ case "x":
6958
+ return /* @__PURE__ */ jsxs32(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
6959
+ /* @__PURE__ */ jsx64("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "currentColor", className: "shrink-0", children: /* @__PURE__ */ jsx64("path", { d: "M13.955 2.25h2.423L10.977 8.28 17.25 15.75h-4.812l-3.913-5.116-4.477 5.116H1.645l5.703-6.52L1.125 2.25h4.934l3.538 4.678 4.358-4.678Zm-.85 12.105h1.343L5.025 3.627H3.579l9.526 10.728Z" }) }),
6960
+ "Continue with X (Twitter)"
6961
+ ] });
6962
+ }
6963
+ }
6964
+
6965
+ // components/blocks/navbar-block.tsx
6966
+ import * as React15 from "react";
6967
+ import { Menu, X } from "lucide-react";
6968
+ import { jsx as jsx65, jsxs as jsxs33 } from "react/jsx-runtime";
6969
+ function NavBarBlock({ brand, links, signIn, signUp }) {
6970
+ var _a, _b, _c, _d;
6971
+ const [mobileMenuOpen, setMobileMenuOpen] = React15.useState(false);
6972
+ return /* @__PURE__ */ jsx65("div", { className: "w-full border border-border-subtle rounded-md overflow-hidden", children: /* @__PURE__ */ jsxs33("nav", { className: "bg-prominent", children: [
6973
+ /* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-between px-layout-margin-inline py-3", children: [
6974
+ /* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-6", children: [
6975
+ /* @__PURE__ */ jsx65(
6976
+ "img",
6977
+ {
6978
+ src: brand.fullLogoSrc,
6979
+ alt: brand.alt,
6980
+ className: "hidden min-[600px]:block h-7 w-auto shrink-0 object-contain object-left"
6981
+ }
6982
+ ),
6983
+ /* @__PURE__ */ jsx65(
6984
+ "img",
6985
+ {
6986
+ src: brand.iconLogoSrc,
6987
+ alt: brand.alt,
6988
+ className: "min-[600px]:hidden size-7 shrink-0 object-contain"
6989
+ }
6990
+ ),
6991
+ /* @__PURE__ */ jsx65("div", { className: "hidden min-[600px]:flex items-center gap-1", children: links.map((l) => /* @__PURE__ */ jsx65(Button, { variant: "tertiary", size: "sm", onClick: l.onClick, children: l.label }, l.label)) })
6992
+ ] }),
6993
+ /* @__PURE__ */ jsxs33("div", { className: "hidden min-[600px]:flex items-center gap-2", children: [
6994
+ signIn && /* @__PURE__ */ jsx65(Button, { variant: "tertiary", size: "sm", onClick: signIn.onClick, children: (_a = signIn.label) != null ? _a : "Sign in" }),
6995
+ signUp && /* @__PURE__ */ jsx65(Button, { size: "sm", onClick: signUp.onClick, children: (_b = signUp.label) != null ? _b : "Sign up" })
6996
+ ] }),
6997
+ /* @__PURE__ */ jsx65(
6998
+ Button,
6999
+ {
7000
+ variant: "tertiary",
7001
+ size: "icon-sm",
7002
+ "aria-label": mobileMenuOpen ? "Close navigation menu" : "Open navigation menu",
7003
+ "aria-expanded": mobileMenuOpen,
7004
+ className: "min-[600px]:hidden",
7005
+ onClick: () => setMobileMenuOpen((prev) => !prev),
7006
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx65(X, { className: "size-4" }) : /* @__PURE__ */ jsx65(Menu, { className: "size-4" })
7007
+ }
7008
+ )
7009
+ ] }),
7010
+ mobileMenuOpen && /* @__PURE__ */ jsxs33("div", { className: "min-[600px]:hidden flex flex-col border-t border-border-subtle px-layout-margin-inline py-3 gap-1", children: [
7011
+ links.map((l) => /* @__PURE__ */ jsx65(
7012
+ Button,
7013
+ {
7014
+ variant: "tertiary",
7015
+ size: "sm",
7016
+ className: "justify-start w-full",
7017
+ onClick: l.onClick,
7018
+ children: l.label
7019
+ },
7020
+ l.label
7021
+ )),
7022
+ (signIn || signUp) && /* @__PURE__ */ jsxs33("div", { className: "flex flex-col gap-2 pt-3 mt-2 border-t border-border-subtle", children: [
7023
+ signIn && /* @__PURE__ */ jsx65(Button, { variant: "secondary", size: "sm", className: "w-full", onClick: signIn.onClick, children: (_c = signIn.label) != null ? _c : "Sign in" }),
7024
+ signUp && /* @__PURE__ */ jsx65(Button, { size: "sm", className: "w-full", onClick: signUp.onClick, children: (_d = signUp.label) != null ? _d : "Sign up" })
7025
+ ] })
7026
+ ] })
7027
+ ] }) });
7028
+ }
7029
+
7030
+ // components/blocks/open-positions-block.tsx
7031
+ import * as React16 from "react";
7032
+ import { History as History2, X as X2 } from "lucide-react";
7033
+ import { jsx as jsx66, jsxs as jsxs34 } from "react/jsx-runtime";
7034
+ function OpenPositionsBlock({
7035
+ trigger,
7036
+ sheetTitle = "Positions",
7037
+ positions,
7038
+ onViewHistory,
7039
+ emptyState
7040
+ }) {
7041
+ const isMobile = useIsMobile();
7042
+ const body = positions.length === 0 ? emptyState != null ? emptyState : /* @__PURE__ */ jsx66(DefaultEmptyState, { onViewHistory }) : /* @__PURE__ */ jsx66(PositionsList, { positions, onViewHistory });
7043
+ if (isMobile) {
7044
+ return /* @__PURE__ */ jsxs34(Drawer, { children: [
7045
+ /* @__PURE__ */ jsx66(DrawerTrigger, { asChild: true, children: trigger }),
7046
+ /* @__PURE__ */ jsxs34(DrawerContent, { className: "p-0 flex flex-col", children: [
7047
+ /* @__PURE__ */ jsxs34(DrawerHeader, { className: "flex-row items-center justify-between px-4 py-3 shrink-0 text-left", children: [
7048
+ /* @__PURE__ */ jsx66(DrawerTitle, { className: "text-base font-semibold font-display text-on-prominent", children: sheetTitle }),
7049
+ /* @__PURE__ */ jsx66(DrawerClose, { asChild: true, children: /* @__PURE__ */ jsx66(NavigationButton, { size: "sm", "aria-label": "Close", children: /* @__PURE__ */ jsx66(X2, {}) }) })
7050
+ ] }),
7051
+ /* @__PURE__ */ jsx66(Separator, {}),
7052
+ body
7053
+ ] })
7054
+ ] });
7055
+ }
7056
+ return /* @__PURE__ */ jsxs34(Sheet, { children: [
7057
+ /* @__PURE__ */ jsx66(SheetTrigger, { asChild: true, children: trigger }),
7058
+ /* @__PURE__ */ jsxs34(SheetContent, { side: "right", showCloseButton: false, className: "p-0 flex flex-col w-80 sm:max-w-xs", children: [
7059
+ /* @__PURE__ */ jsxs34(SheetHeader, { className: "flex-row items-center justify-between px-4 py-3 shrink-0", children: [
7060
+ /* @__PURE__ */ jsx66(SheetTitle, { className: "text-base font-semibold font-display text-on-prominent", children: sheetTitle }),
7061
+ /* @__PURE__ */ jsx66(SheetClose, { asChild: true, children: /* @__PURE__ */ jsx66(NavigationButton, { size: "sm", "aria-label": "Close", children: /* @__PURE__ */ jsx66(X2, {}) }) })
7062
+ ] }),
7063
+ /* @__PURE__ */ jsx66(Separator, {}),
7064
+ body
7065
+ ] })
7066
+ ] });
7067
+ }
7068
+ function PositionsList({
7069
+ positions,
7070
+ onViewHistory
7071
+ }) {
7072
+ return /* @__PURE__ */ jsxs34("div", { className: "flex flex-col flex-1 min-h-0", children: [
7073
+ /* @__PURE__ */ jsx66(ItemGroup, { className: "min-h-0 overflow-y-auto", children: positions.map((pos, i) => /* @__PURE__ */ jsxs34(React16.Fragment, { children: [
7074
+ /* @__PURE__ */ jsx66(PositionRow, { position: pos }),
7075
+ i < positions.length - 1 && /* @__PURE__ */ jsx66("div", { className: "h-px mx-4 bg-border-subtle" })
7076
+ ] }, i)) }),
7077
+ /* @__PURE__ */ jsx66(Separator, {}),
7078
+ /* @__PURE__ */ jsx66("div", { className: "shrink-0 flex justify-center py-4", children: /* @__PURE__ */ jsx66(Button, { variant: "tertiary", size: "md", onClick: onViewHistory, children: "View transaction history" }) })
7079
+ ] });
7080
+ }
7081
+ function PositionRow({ position }) {
7082
+ const { label, suffix } = positionTitleParts(position);
7083
+ return /* @__PURE__ */ jsxs34(Item, { size: "sm", children: [
7084
+ /* @__PURE__ */ jsxs34(ItemContent, { children: [
7085
+ /* @__PURE__ */ jsxs34(ItemTitle, { children: [
7086
+ /* @__PURE__ */ jsx66("span", { className: "text-on-prominent", children: label }),
7087
+ suffix && /* @__PURE__ */ jsx66("span", { className: "text-on-subtle", children: ` ${suffix}` })
7088
+ ] }),
7089
+ /* @__PURE__ */ jsx66(MetaNote, { market: position.market, duration: position.duration })
7090
+ ] }),
7091
+ /* @__PURE__ */ jsx66(ItemActions, { children: /* @__PURE__ */ jsx66(PnlMeta, { pnl: position.pnl, win: position.win, stake: position.stake }) })
7092
+ ] });
7093
+ }
7094
+ var DIGITS_TYPE_LABEL = {
7095
+ matches: "Matches",
7096
+ differs: "Differs",
7097
+ odd: "Odd",
7098
+ even: "Even",
7099
+ over: "Over",
7100
+ under: "Under"
7101
+ };
7102
+ function positionTitleParts(p) {
7103
+ switch (p.kind) {
7104
+ case "rise-fall":
7105
+ return { label: p.direction };
7106
+ case "swipe":
7107
+ return { label: `Swipe-${p.direction.toLowerCase()}` };
7108
+ case "box-o":
7109
+ return { label: "Box-O", suffix: p.multiplier };
7110
+ // Digits with a picked value (matches/differs/over/under) show it as a
7111
+ // subtle suffix; odd/even have no digit so just the label.
7112
+ case "digits":
7113
+ return { label: DIGITS_TYPE_LABEL[p.type], suffix: p.digit };
7114
+ }
7115
+ }
7116
+ function MetaNote({ market, duration }) {
7117
+ return /* @__PURE__ */ jsxs34("span", { className: "text-xs text-on-subtle whitespace-nowrap", children: [
7118
+ market,
7119
+ " \xB7 ",
7120
+ duration
7121
+ ] });
7122
+ }
7123
+ function PnlMeta({ pnl, win, stake }) {
7124
+ return /* @__PURE__ */ jsxs34("div", { className: "flex flex-col items-end gap-0.5", children: [
7125
+ /* @__PURE__ */ jsx66("span", { className: `font-display font-bold tabular-nums text-base ${win ? "text-semantic-win" : "text-semantic-loss"}`, children: pnl }),
7126
+ /* @__PURE__ */ jsx66("span", { className: "tabular-nums text-xs text-on-subtle", children: stake })
7127
+ ] });
7128
+ }
7129
+ function DefaultEmptyState({ onViewHistory }) {
7130
+ return /* @__PURE__ */ jsx66(Empty, { className: "flex min-h-0 flex-1 flex-col justify-center border-none rounded-none p-6 text-center", children: /* @__PURE__ */ jsxs34(EmptyHeader, { className: "gap-4", children: [
7131
+ /* @__PURE__ */ jsx66(EmptyMedia, { children: /* @__PURE__ */ jsx66(History2, { className: "size-8 text-on-subtle" }) }),
7132
+ /* @__PURE__ */ jsx66(EmptyTitle, { className: "text-base leading-6 font-semibold tracking-normal body-md text-on-subtle", children: "No trades yet." }),
7133
+ /* @__PURE__ */ jsx66(Button, { variant: "tertiary", size: "md", onClick: onViewHistory, children: "View transaction history" })
7134
+ ] }) });
7135
+ }
6643
7136
  export {
6644
7137
  Accordion,
6645
7138
  AccordionContent,
@@ -6661,6 +7154,7 @@ export {
6661
7154
  AlertDialogTrigger,
6662
7155
  AlertTitle,
6663
7156
  AspectRatio,
7157
+ AuthBlock,
6664
7158
  Avatar,
6665
7159
  AvatarBadge,
6666
7160
  AvatarFallback,
@@ -6668,7 +7162,6 @@ export {
6668
7162
  AvatarGroupCount,
6669
7163
  AvatarImage,
6670
7164
  Badge,
6671
- BoostTicketCard,
6672
7165
  Breadcrumb,
6673
7166
  BreadcrumbEllipsis,
6674
7167
  BreadcrumbItem,
@@ -6740,6 +7233,7 @@ export {
6740
7233
  ContextMenuSubContent,
6741
7234
  ContextMenuSubTrigger,
6742
7235
  ContextMenuTrigger,
7236
+ CreditTicketCard,
6743
7237
  Dialog,
6744
7238
  DialogClose,
6745
7239
  DialogContent,
@@ -6782,6 +7276,7 @@ export {
6782
7276
  EmptyHeader,
6783
7277
  EmptyMedia,
6784
7278
  EmptyTitle,
7279
+ FAQBlock,
6785
7280
  Field,
6786
7281
  FieldContent,
6787
7282
  FieldDescription,
@@ -6799,6 +7294,8 @@ export {
6799
7294
  FormItem,
6800
7295
  FormLabel,
6801
7296
  FormMessage,
7297
+ HeaderNavigationBlock,
7298
+ HeroBlock,
6802
7299
  HoverCard,
6803
7300
  HoverCardContent,
6804
7301
  HoverCardTrigger,
@@ -6846,6 +7343,7 @@ export {
6846
7343
  NativeSelect,
6847
7344
  NativeSelectOptGroup,
6848
7345
  NativeSelectOption,
7346
+ NavBarBlock,
6849
7347
  NavigationButton,
6850
7348
  NavigationMenu,
6851
7349
  NavigationMenuContent,
@@ -6855,6 +7353,7 @@ export {
6855
7353
  NavigationMenuList,
6856
7354
  NavigationMenuTrigger,
6857
7355
  NavigationMenuViewport,
7356
+ OpenPositionsBlock,
6858
7357
  Pagination,
6859
7358
  PaginationContent,
6860
7359
  PaginationEllipsis,
@@ -6875,6 +7374,8 @@ export {
6875
7374
  ResizableHandle,
6876
7375
  ResizablePanel,
6877
7376
  ResizablePanelGroup,
7377
+ ResultBlock,
7378
+ ResultDialog,
6878
7379
  ScrollArea,
6879
7380
  ScrollBar,
6880
7381
  Select,