@trading-game/design-intelligence-layer 0.11.0 → 0.12.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.
package/README.md CHANGED
@@ -149,7 +149,7 @@ npm install react react-dom tailwindcss
149
149
  | Table | `Table, TableHeader, TableBody, TableRow, TableHead, TableCell` |
150
150
  | Tabs | `Tabs, TabsList, TabsTrigger, TabsContent` |
151
151
  | Textarea | `Textarea` |
152
- | Ticket Card | `TicketCard` |
152
+ | Ticket Card | `TicketCard`, `CreditTicketCard` |
153
153
  | Toast | `Toaster` |
154
154
  | Toggle | `Toggle, toggleVariants` |
155
155
  | Toggle Group | `ToggleGroup, ToggleGroupItem` |
@@ -215,6 +215,8 @@ States: hover (`bg-secondary-hover`), focus (3px `ring-ring/50`), active (`opaci
215
215
  <Badge variant="fill" /> // Blue tint
216
216
  <Badge variant="fill-success" /> // Green tint
217
217
  <Badge variant="fill-fail" /> // Red tint
218
+ <Badge variant="fill-warning" /> // Orange tint
219
+ <Badge variant="fill-credit" /> // Amber-orange tint — credit/bonus labels (pair with TicketPlus icon)
218
220
 
219
221
  // Outline (black border, secondary-hover on hover)
220
222
  <Badge variant="outline" />
@@ -293,6 +295,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
293
295
  | `bg-secondary-hover` | `--secondary-hover` | `#EEEEEE` | Outline/secondary hover (light grey) |
294
296
  | `bg-semantic-win` | `--semantic-win` | green | Profit / positive state |
295
297
  | `bg-semantic-loss` | `--semantic-loss` | red | Loss / negative state |
298
+ | `bg-semantic-credit` | `--semantic-credit` | `#F9840F` amber-orange | Credit / bonus badge background |
296
299
 
297
300
  ### Text tokens
298
301
 
@@ -306,6 +309,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
306
309
  | `text-primary` | `#2323FF` | Brand blue inline text |
307
310
  | `text-semantic-win` | green | Profit / positive text |
308
311
  | `text-semantic-loss` | red | Loss / negative text |
312
+ | `text-semantic-credit-text` | `#713813` dark amber | Credit / bonus badge foreground |
309
313
 
310
314
  ### Border & focus tokens
311
315
 
@@ -577,6 +581,14 @@ Design tokens are managed in Figma and exported as CSS variables. To update:
577
581
 
578
582
  ## Changelog
579
583
 
584
+ ### v0.12.0
585
+ - **New semantic tokens — credit:** `--semantic-credit` (`#F9840F` amber-orange) and `--semantic-credit-text` (`#713813` dark amber) added to both `src/styles.css` and `app/globals.css`. Tailwind utilities: `bg-semantic-credit`, `text-semantic-credit-text`.
586
+ - **Badge — `fill-credit` variant:** New `fill-credit` variant for credit/bonus labels — `bg-semantic-credit/16` background with `text-semantic-credit-text` foreground. Pair with a `TicketPlus` icon. Badge base class no longer applies `tracking-wide`; letter spacing is default on all badge variants.
587
+ - **New `CreditTicketCard` component:** Exported alongside `TicketCard`. Renders the same ticket shell (notches, tear-line, shimmer stub) but with a variable-height card body and an inline `<Badge variant="fill-credit">` below the value for credit/bonus display. Props: `icon`, `label`, `value`, `currency`, `stubLabel`, `onStubClick`, `stubDisabled`, `creditAmount` (default `"0.00"`), `creditCurrency` (default `"USDT"`), `compact`.
588
+ - **`TicketCard` — `compact` prop:** New boolean prop (default `false`). When `true`, reduces left-content padding from `px-4 gap-4` to `px-2 gap-2` for mobile layouts.
589
+ - **`TicketCard` — welcome-credit props removed:** `welcomeCredit`, `freeCredit` (deprecated alias), `creditUsed`, `creditTotal`, `creditCurrency`, `creditLabel`, `creditFullWidth`, and the `Progress`-based credit bar have been removed. Use `CreditTicketCard` for the credit use case.
590
+ - **`tracking-wide` / `tracking-widest` removed from several components:** Badge base class, `Link` base class, `PaginationLink`, `CommandShortcut`, `ContextMenuShortcut`, `DropdownMenuShortcut`, and `MenubarShortcut` no longer apply letter-spacing overrides. All render with default tracking.
591
+
580
592
  ### v0.10.1
581
593
  - **TicketCard — Wallet icon:** Default icon in the circular badge is now a `Wallet` icon (replaces `CircleDollarSign`).
582
594
  - **TicketCard — sentence case labels:** The label above the value (e.g. "Total balance") and the stub label (e.g. "Deposit") no longer apply `uppercase` or `tracking-widest`. Both render in sentence case with default letter spacing.
package/dist/index.cjs CHANGED
@@ -158,6 +158,7 @@ __export(index_exports, {
158
158
  ContextMenuSubContent: () => ContextMenuSubContent,
159
159
  ContextMenuSubTrigger: () => ContextMenuSubTrigger,
160
160
  ContextMenuTrigger: () => ContextMenuTrigger,
161
+ CreditTicketCard: () => CreditTicketCard,
161
162
  Dialog: () => Dialog,
162
163
  DialogClose: () => DialogClose,
163
164
  DialogContent: () => DialogContent,
@@ -356,6 +357,7 @@ __export(index_exports, {
356
357
  TabsTrigger: () => TabsTrigger,
357
358
  Textarea: () => Textarea,
358
359
  TicketCard: () => TicketCard,
360
+ TicketCardDesktop: () => TicketCardDesktop,
359
361
  Toaster: () => Toaster,
360
362
  Toggle: () => Toggle,
361
363
  ToggleGroup: () => ToggleGroup,
@@ -934,7 +936,7 @@ var import_class_variance_authority3 = require("class-variance-authority");
934
936
  var import_radix_ui6 = require("radix-ui");
935
937
  var import_jsx_runtime8 = require("react/jsx-runtime");
936
938
  var badgeVariants = (0, import_class_variance_authority3.cva)(
937
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent text-xs font-display font-semibold tracking-wide whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:size-3",
939
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent text-xs font-display font-semibold whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:size-3",
938
940
  {
939
941
  variants: {
940
942
  variant: {
@@ -948,6 +950,7 @@ var badgeVariants = (0, import_class_variance_authority3.cva)(
948
950
  "fill-success": "bg-semantic-win/10 border-transparent text-semantic-win",
949
951
  "fill-fail": "bg-semantic-loss/10 border-transparent text-semantic-loss",
950
952
  "fill-warning": "bg-semantic-warning/10 border-transparent text-semantic-warning",
953
+ "fill-credit": "bg-semantic-credit/16 border-transparent text-semantic-credit-text !text-xs !font-semibold",
951
954
  // Ghost (transparent)
952
955
  ghost: "bg-transparent border-transparent text-primary [a&]:hover:bg-secondary-hover [a&]:hover:text-primary",
953
956
  "ghost-success": "bg-transparent border-transparent text-semantic-win [a&]:hover:bg-semantic-win/10 [a&]:hover:text-semantic-win",
@@ -2743,7 +2746,7 @@ function CommandShortcut(_a) {
2743
2746
  __spreadValues({
2744
2747
  "data-slot": "command-shortcut",
2745
2748
  className: cn(
2746
- "ml-auto text-xs tracking-widest text-on-subtle",
2749
+ "ml-auto text-xs text-on-subtle",
2747
2750
  className
2748
2751
  )
2749
2752
  }, props)
@@ -2963,7 +2966,7 @@ function ContextMenuShortcut(_a) {
2963
2966
  __spreadValues({
2964
2967
  "data-slot": "context-menu-shortcut",
2965
2968
  className: cn(
2966
- "ml-auto text-xs tracking-widest text-on-subtle",
2969
+ "ml-auto text-xs text-on-subtle",
2967
2970
  className
2968
2971
  )
2969
2972
  }, props)
@@ -3274,7 +3277,7 @@ function DropdownMenuShortcut(_a) {
3274
3277
  __spreadValues({
3275
3278
  "data-slot": "dropdown-menu-shortcut",
3276
3279
  className: cn(
3277
- "ml-auto text-xs tracking-widest text-on-subtle",
3280
+ "ml-auto text-xs text-on-subtle",
3278
3281
  className
3279
3282
  )
3280
3283
  }, props)
@@ -4130,7 +4133,7 @@ var import_class_variance_authority9 = require("class-variance-authority");
4130
4133
  var import_radix_ui19 = require("radix-ui");
4131
4134
  var import_jsx_runtime35 = require("react/jsx-runtime");
4132
4135
  var linkVariants = (0, import_class_variance_authority9.cva)(
4133
- "inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:inline font-display font-bold normal-case tracking-wide text-primary hover:underline decoration-2 underline-offset-4",
4136
+ "inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:inline font-display font-bold normal-case text-primary hover:underline decoration-2 underline-offset-4",
4134
4137
  {
4135
4138
  variants: {
4136
4139
  size: {
@@ -4364,7 +4367,7 @@ function MenubarShortcut(_a) {
4364
4367
  __spreadValues({
4365
4368
  "data-slot": "menubar-shortcut",
4366
4369
  className: cn(
4367
- "ml-auto text-xs tracking-widest text-on-subtle",
4370
+ "ml-auto text-xs text-on-subtle",
4368
4371
  className
4369
4372
  )
4370
4373
  }, props)
@@ -4748,7 +4751,7 @@ function PaginationLink(_a) {
4748
4751
  "data-slot": "pagination-link",
4749
4752
  "data-active": isActive,
4750
4753
  className: cn(
4751
- "inline-flex shrink-0 items-center justify-center size-10 rounded-xs text-sm font-display font-bold uppercase tracking-wide whitespace-nowrap transition-[color,background-color,border-color] outline-none border",
4754
+ "inline-flex shrink-0 items-center justify-center size-10 rounded-xs text-sm font-display font-bold uppercase whitespace-nowrap transition-[color,background-color,border-color] outline-none border",
4752
4755
  isActive ? "bg-primary/10 border-primary text-primary" : "bg-transparent border-transparent text-on-prominent hover:bg-secondary-hover",
4753
4756
  className
4754
4757
  )
@@ -6606,92 +6609,155 @@ function TabsContent(_a) {
6606
6609
  var import_lucide_react23 = require("lucide-react");
6607
6610
  var import_jsx_runtime57 = require("react/jsx-runtime");
6608
6611
  function TicketCard({
6612
+ className,
6609
6613
  icon,
6610
6614
  label,
6611
6615
  value,
6612
- stubIcon,
6616
+ currency,
6613
6617
  stubLabel,
6614
6618
  onStubClick,
6615
6619
  stubDisabled = false,
6616
- className
6620
+ compact = false
6617
6621
  }) {
6618
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
6619
- "div",
6620
- {
6621
- "data-slot": "ticket-card",
6622
- className: cn(
6623
- "relative flex w-full items-stretch rounded-sm",
6624
- "bg-subtle",
6625
- className
6626
- ),
6627
- children: [
6628
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "relative flex min-w-0 flex-1 items-center gap-3 px-4 py-4 sm:gap-4 sm:px-5", children: [
6629
- icon && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex shrink-0 size-11 rounded-full border-2 border-primary items-center justify-center text-primary sm:size-12", children: icon }),
6630
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5 overflow-hidden", children: [
6631
- label && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-on-subtle text-xs font-semibold", children: label }),
6632
- value && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "truncate text-lg font-bold text-on-prominent sm:text-xl", children: value })
6633
- ] }),
6634
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6635
- "div",
6622
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cn("flex w-full flex-col gap-2", className), children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "relative flex h-20 w-full items-stretch justify-between rounded-sm bg-subtle", children: [
6623
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex flex-1 items-center overflow-hidden", compact ? "gap-2 px-2" : "gap-4 px-4"), children: [
6624
+ icon && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-full border-2 border-primary text-primary", children: icon }),
6625
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex h-11 flex-col justify-center gap-1 whitespace-nowrap", children: [
6626
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-xs text-on-subtle", children: label }),
6627
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "leading-none", children: [
6628
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-[20px] font-bold text-on-prominent", children: value }),
6629
+ currency && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
6630
+ " ",
6631
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm text-on-subtle", children: currency })
6632
+ ] })
6633
+ ] })
6634
+ ] })
6635
+ ] }),
6636
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { "aria-hidden": true, className: "pointer-events-none absolute right-[88px] top-[-12px] z-10 size-6 rounded-full bg-prominent" }),
6637
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { "aria-hidden": true, className: "pointer-events-none absolute right-[88px] top-[68px] z-10 size-6 rounded-full bg-prominent" }),
6638
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6639
+ "div",
6640
+ {
6641
+ "aria-hidden": true,
6642
+ className: "pointer-events-none absolute bottom-[12px] top-[12px] z-10 w-1 -translate-x-1/2",
6643
+ style: {
6644
+ right: 96,
6645
+ backgroundImage: "repeating-linear-gradient(to bottom, color-mix(in oklch, var(--border-subtle) 80%, black) 0px, color-mix(in oklch, var(--border-subtle) 80%, black) 3px, transparent 3px, transparent 6px)"
6646
+ }
6647
+ }
6648
+ ),
6649
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
6650
+ "button",
6651
+ {
6652
+ type: "button",
6653
+ onClick: onStubClick,
6654
+ disabled: stubDisabled,
6655
+ "aria-label": stubLabel,
6656
+ className: cn(
6657
+ "relative flex h-20 w-[100px] shrink-0 flex-col items-center justify-center gap-1 overflow-hidden rounded-r-sm bg-primary",
6658
+ "transition-colors duration-fast ease-standard",
6659
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
6660
+ stubDisabled ? "cursor-not-allowed opacity-50" : "hover:bg-primary-hover"
6661
+ ),
6662
+ children: [
6663
+ !stubDisabled && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6664
+ "span",
6636
6665
  {
6637
6666
  "aria-hidden": true,
6638
- className: "pointer-events-none absolute right-0 top-0 z-10 size-5 -translate-y-1/2 translate-x-1/2 rounded-full bg-prominent"
6667
+ className: "pointer-events-none absolute inset-0 [animation:stub-shimmer_1.5s_linear_infinite]",
6668
+ style: {
6669
+ background: "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.30) 50%, transparent 100%)"
6670
+ }
6639
6671
  }
6640
6672
  ),
6641
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6642
- "div",
6673
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.ArrowRight, { className: "size-4 text-on-prominent-static-inverse" }),
6674
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm font-semibold text-on-prominent-static-inverse", children: stubLabel })
6675
+ ]
6676
+ }
6677
+ )
6678
+ ] }) });
6679
+ }
6680
+ function CreditTicketCard({
6681
+ className,
6682
+ icon,
6683
+ label,
6684
+ value,
6685
+ currency,
6686
+ stubLabel,
6687
+ onStubClick,
6688
+ stubDisabled = false,
6689
+ creditAmount = "0.00",
6690
+ creditCurrency = "USDT",
6691
+ compact = false
6692
+ }) {
6693
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cn("flex w-full flex-col gap-2", className), children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "relative flex w-full items-stretch justify-between rounded-sm bg-subtle", children: [
6694
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex flex-1 items-center overflow-hidden py-4", compact ? "gap-2 px-2" : "gap-4 px-4"), children: [
6695
+ icon && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-full border-2 border-primary text-primary", children: icon }),
6696
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex flex-col gap-2 whitespace-nowrap", children: [
6697
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex flex-col gap-1", children: [
6698
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-xs text-on-subtle", children: label }),
6699
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "leading-none", children: [
6700
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-[20px] font-bold text-on-prominent", children: value }),
6701
+ currency && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
6702
+ " ",
6703
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm text-on-subtle", children: currency })
6704
+ ] })
6705
+ ] })
6706
+ ] }),
6707
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Badge, { variant: "fill-credit", size: "sm", className: "!gap-1 !font-bold !tracking-normal", children: [
6708
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.TicketPlus, { className: "!size-3.5" }),
6709
+ "Credit: ",
6710
+ creditAmount,
6711
+ " ",
6712
+ creditCurrency
6713
+ ] })
6714
+ ] })
6715
+ ] }),
6716
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { "aria-hidden": true, className: "pointer-events-none absolute right-[88px] top-[-12px] z-10 size-6 rounded-full bg-prominent" }),
6717
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { "aria-hidden": true, className: "pointer-events-none absolute right-[88px] bottom-[-12px] z-10 size-6 rounded-full bg-prominent" }),
6718
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6719
+ "div",
6720
+ {
6721
+ "aria-hidden": true,
6722
+ className: "pointer-events-none absolute bottom-[12px] top-[12px] z-10 w-1 -translate-x-1/2",
6723
+ style: {
6724
+ right: 96,
6725
+ backgroundImage: "repeating-linear-gradient(to bottom, color-mix(in oklch, var(--border-subtle) 80%, black) 0px, color-mix(in oklch, var(--border-subtle) 80%, black) 3px, transparent 3px, transparent 6px)"
6726
+ }
6727
+ }
6728
+ ),
6729
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
6730
+ "button",
6731
+ {
6732
+ type: "button",
6733
+ onClick: onStubClick,
6734
+ disabled: stubDisabled,
6735
+ "aria-label": stubLabel,
6736
+ className: cn(
6737
+ "relative flex w-[100px] shrink-0 self-stretch flex-col items-center justify-center gap-1 overflow-hidden rounded-r-sm bg-primary",
6738
+ "transition-colors duration-fast ease-standard",
6739
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
6740
+ stubDisabled ? "cursor-not-allowed opacity-50" : "hover:bg-primary-hover"
6741
+ ),
6742
+ children: [
6743
+ !stubDisabled && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6744
+ "span",
6643
6745
  {
6644
6746
  "aria-hidden": true,
6645
- className: "pointer-events-none absolute bottom-0 right-0 z-10 size-5 translate-x-1/2 translate-y-1/2 rounded-full bg-prominent"
6747
+ className: "pointer-events-none absolute inset-0 [animation:stub-shimmer_1.5s_linear_infinite]",
6748
+ style: {
6749
+ background: "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.30) 50%, transparent 100%)"
6750
+ }
6646
6751
  }
6647
6752
  ),
6648
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6649
- "div",
6650
- {
6651
- "aria-hidden": true,
6652
- className: "pointer-events-none absolute bottom-4 right-0 top-4 -translate-x-1/2 border-l-2 border-dashed border-primary/30"
6653
- }
6654
- )
6655
- ] }),
6656
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6657
- "div",
6658
- {
6659
- className: cn(
6660
- "relative z-[1] inline-flex max-w-[72%] shrink-0 self-stretch sm:max-w-[44%]"
6661
- ),
6662
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
6663
- "button",
6664
- {
6665
- type: "button",
6666
- onClick: stubDisabled ? void 0 : onStubClick,
6667
- disabled: stubDisabled,
6668
- className: cn(
6669
- "relative box-border inline-flex h-full min-h-[3.25rem] min-w-[5.75rem] flex-col items-center justify-center gap-1.5 rounded-r-sm px-4 py-3 transition-colors sm:min-h-0 sm:gap-1.5 sm:px-5",
6670
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
6671
- stubDisabled ? "bg-primary/30 cursor-not-allowed opacity-50 pointer-events-none" : "bg-primary cursor-pointer hover:bg-primary-hover"
6672
- ),
6673
- children: [
6674
- !stubDisabled && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6675
- "span",
6676
- {
6677
- "aria-hidden": true,
6678
- className: "absolute inset-0 pointer-events-none [animation:stub-shimmer_1.5s_linear_infinite]",
6679
- style: {
6680
- background: "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.30) 50%, transparent 100%)"
6681
- }
6682
- }
6683
- ),
6684
- stubIcon != null ? stubIcon : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.ArrowRight, { className: "relative size-5 shrink-0 text-on-prominent-static-inverse" }),
6685
- stubLabel && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "max-w-full text-balance text-center text-xs font-bold leading-tight tracking-wide text-on-prominent-static-inverse sm:tracking-widest", children: stubLabel })
6686
- ]
6687
- }
6688
- )
6689
- }
6690
- )
6691
- ]
6692
- }
6693
- );
6753
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.ArrowRight, { className: "size-4 text-on-prominent-static-inverse" }),
6754
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm font-semibold text-on-prominent-static-inverse", children: stubLabel })
6755
+ ]
6756
+ }
6757
+ )
6758
+ ] }) });
6694
6759
  }
6760
+ var TicketCardDesktop = TicketCard;
6695
6761
 
6696
6762
  // components/ui/toggle.tsx
6697
6763
  var import_class_variance_authority14 = require("class-variance-authority");
@@ -6910,6 +6976,7 @@ function ToggleGroupItem(_a) {
6910
6976
  ContextMenuSubContent,
6911
6977
  ContextMenuSubTrigger,
6912
6978
  ContextMenuTrigger,
6979
+ CreditTicketCard,
6913
6980
  Dialog,
6914
6981
  DialogClose,
6915
6982
  DialogContent,
@@ -7108,6 +7175,7 @@ function ToggleGroupItem(_a) {
7108
7175
  TabsTrigger,
7109
7176
  Textarea,
7110
7177
  TicketCard,
7178
+ TicketCardDesktop,
7111
7179
  Toaster,
7112
7180
  Toggle,
7113
7181
  ToggleGroup,