@trading-game/design-intelligence-layer 0.11.1 → 0.12.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/README.md +15 -1
- package/dist/index.cjs +136 -89
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -16
- package/dist/index.d.ts +28 -16
- package/dist/index.js +135 -89
- package/dist/index.js.map +1 -1
- package/guides/design-system-guide/trading-game-ds-guide.md +45 -8
- package/package.json +1 -1
- package/src/styles.css +8 -0
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` |
|
|
@@ -165,6 +165,8 @@ Blocks are pre-composed UI patterns built from design system primitives. They ar
|
|
|
165
165
|
|---|---|---|
|
|
166
166
|
| NavBar | Desktop, Mobile (closed), Mobile (open) | Landing page top navigation bar. Logo + ghost nav links (Products, Use Cases, Docs, Blog, FAQ) + Sign in / Sign up CTAs. |
|
|
167
167
|
| Hero | Type 1 (Desktop + Mobile), Type 2 | Landing page hero sections. Type 1: tagline pill + heading + body + CTAs left, image right (responsive). Type 2: centred single-column, tagline pill + heading + body + primary CTA with arrow icon, no image. |
|
|
168
|
+
| Sheet Open Positions | Active, Empty | Right-side sheet (desktop) / bottom drawer (mobile) listing open trading positions. Active state shows a scrollable position list with win/loss colouring and a history footer link. Empty state shows an empty state illustration. |
|
|
169
|
+
| Header navigation | — | Product app top header bar. Back navigation button left, account balance + Demo badge centre, history and sound action buttons right. |
|
|
168
170
|
|
|
169
171
|
---
|
|
170
172
|
|
|
@@ -215,6 +217,8 @@ States: hover (`bg-secondary-hover`), focus (3px `ring-ring/50`), active (`opaci
|
|
|
215
217
|
<Badge variant="fill" /> // Blue tint
|
|
216
218
|
<Badge variant="fill-success" /> // Green tint
|
|
217
219
|
<Badge variant="fill-fail" /> // Red tint
|
|
220
|
+
<Badge variant="fill-warning" /> // Orange tint
|
|
221
|
+
<Badge variant="fill-credit" /> // Amber-orange tint — credit/bonus labels (pair with TicketPlus icon)
|
|
218
222
|
|
|
219
223
|
// Outline (black border, secondary-hover on hover)
|
|
220
224
|
<Badge variant="outline" />
|
|
@@ -293,6 +297,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
|
|
|
293
297
|
| `bg-secondary-hover` | `--secondary-hover` | `#EEEEEE` | Outline/secondary hover (light grey) |
|
|
294
298
|
| `bg-semantic-win` | `--semantic-win` | green | Profit / positive state |
|
|
295
299
|
| `bg-semantic-loss` | `--semantic-loss` | red | Loss / negative state |
|
|
300
|
+
| `bg-semantic-credit` | `--semantic-credit` | `#F9840F` amber-orange | Credit / bonus badge background |
|
|
296
301
|
|
|
297
302
|
### Text tokens
|
|
298
303
|
|
|
@@ -306,6 +311,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
|
|
|
306
311
|
| `text-primary` | `#2323FF` | Brand blue inline text |
|
|
307
312
|
| `text-semantic-win` | green | Profit / positive text |
|
|
308
313
|
| `text-semantic-loss` | red | Loss / negative text |
|
|
314
|
+
| `text-semantic-credit-text` | `#713813` dark amber | Credit / bonus badge foreground |
|
|
309
315
|
|
|
310
316
|
### Border & focus tokens
|
|
311
317
|
|
|
@@ -577,6 +583,14 @@ Design tokens are managed in Figma and exported as CSS variables. To update:
|
|
|
577
583
|
|
|
578
584
|
## Changelog
|
|
579
585
|
|
|
586
|
+
### v0.12.0
|
|
587
|
+
- **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`.
|
|
588
|
+
- **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.
|
|
589
|
+
- **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`.
|
|
590
|
+
- **`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.
|
|
591
|
+
- **`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.
|
|
592
|
+
- **`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.
|
|
593
|
+
|
|
580
594
|
### v0.10.1
|
|
581
595
|
- **TicketCard — Wallet icon:** Default icon in the circular badge is now a `Wallet` icon (replaces `CircleDollarSign`).
|
|
582
596
|
- **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,
|
|
@@ -935,7 +936,7 @@ var import_class_variance_authority3 = require("class-variance-authority");
|
|
|
935
936
|
var import_radix_ui6 = require("radix-ui");
|
|
936
937
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
937
938
|
var badgeVariants = (0, import_class_variance_authority3.cva)(
|
|
938
|
-
"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
|
|
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",
|
|
939
940
|
{
|
|
940
941
|
variants: {
|
|
941
942
|
variant: {
|
|
@@ -949,6 +950,7 @@ var badgeVariants = (0, import_class_variance_authority3.cva)(
|
|
|
949
950
|
"fill-success": "bg-semantic-win/10 border-transparent text-semantic-win",
|
|
950
951
|
"fill-fail": "bg-semantic-loss/10 border-transparent text-semantic-loss",
|
|
951
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",
|
|
952
954
|
// Ghost (transparent)
|
|
953
955
|
ghost: "bg-transparent border-transparent text-primary [a&]:hover:bg-secondary-hover [a&]:hover:text-primary",
|
|
954
956
|
"ghost-success": "bg-transparent border-transparent text-semantic-win [a&]:hover:bg-semantic-win/10 [a&]:hover:text-semantic-win",
|
|
@@ -2744,7 +2746,7 @@ function CommandShortcut(_a) {
|
|
|
2744
2746
|
__spreadValues({
|
|
2745
2747
|
"data-slot": "command-shortcut",
|
|
2746
2748
|
className: cn(
|
|
2747
|
-
"ml-auto text-xs
|
|
2749
|
+
"ml-auto text-xs text-on-subtle",
|
|
2748
2750
|
className
|
|
2749
2751
|
)
|
|
2750
2752
|
}, props)
|
|
@@ -2964,7 +2966,7 @@ function ContextMenuShortcut(_a) {
|
|
|
2964
2966
|
__spreadValues({
|
|
2965
2967
|
"data-slot": "context-menu-shortcut",
|
|
2966
2968
|
className: cn(
|
|
2967
|
-
"ml-auto text-xs
|
|
2969
|
+
"ml-auto text-xs text-on-subtle",
|
|
2968
2970
|
className
|
|
2969
2971
|
)
|
|
2970
2972
|
}, props)
|
|
@@ -3275,7 +3277,7 @@ function DropdownMenuShortcut(_a) {
|
|
|
3275
3277
|
__spreadValues({
|
|
3276
3278
|
"data-slot": "dropdown-menu-shortcut",
|
|
3277
3279
|
className: cn(
|
|
3278
|
-
"ml-auto text-xs
|
|
3280
|
+
"ml-auto text-xs text-on-subtle",
|
|
3279
3281
|
className
|
|
3280
3282
|
)
|
|
3281
3283
|
}, props)
|
|
@@ -4131,7 +4133,7 @@ var import_class_variance_authority9 = require("class-variance-authority");
|
|
|
4131
4133
|
var import_radix_ui19 = require("radix-ui");
|
|
4132
4134
|
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
4133
4135
|
var linkVariants = (0, import_class_variance_authority9.cva)(
|
|
4134
|
-
"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
|
|
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",
|
|
4135
4137
|
{
|
|
4136
4138
|
variants: {
|
|
4137
4139
|
size: {
|
|
@@ -4365,7 +4367,7 @@ function MenubarShortcut(_a) {
|
|
|
4365
4367
|
__spreadValues({
|
|
4366
4368
|
"data-slot": "menubar-shortcut",
|
|
4367
4369
|
className: cn(
|
|
4368
|
-
"ml-auto text-xs
|
|
4370
|
+
"ml-auto text-xs text-on-subtle",
|
|
4369
4371
|
className
|
|
4370
4372
|
)
|
|
4371
4373
|
}, props)
|
|
@@ -4749,7 +4751,7 @@ function PaginationLink(_a) {
|
|
|
4749
4751
|
"data-slot": "pagination-link",
|
|
4750
4752
|
"data-active": isActive,
|
|
4751
4753
|
className: cn(
|
|
4752
|
-
"inline-flex shrink-0 items-center justify-center size-10 rounded-xs text-sm font-display font-bold uppercase
|
|
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",
|
|
4753
4755
|
isActive ? "bg-primary/10 border-primary text-primary" : "bg-transparent border-transparent text-on-prominent hover:bg-secondary-hover",
|
|
4754
4756
|
className
|
|
4755
4757
|
)
|
|
@@ -6615,25 +6617,84 @@ function TicketCard({
|
|
|
6615
6617
|
stubLabel,
|
|
6616
6618
|
onStubClick,
|
|
6617
6619
|
stubDisabled = false,
|
|
6618
|
-
|
|
6619
|
-
|
|
6620
|
-
|
|
6621
|
-
|
|
6620
|
+
compact = false
|
|
6621
|
+
}) {
|
|
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",
|
|
6665
|
+
{
|
|
6666
|
+
"aria-hidden": true,
|
|
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
|
+
}
|
|
6671
|
+
}
|
|
6672
|
+
),
|
|
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",
|
|
6622
6690
|
creditCurrency = "USDT",
|
|
6623
|
-
|
|
6624
|
-
creditFullWidth = false
|
|
6691
|
+
compact = false
|
|
6625
6692
|
}) {
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
|
|
6629
|
-
|
|
6630
|
-
|
|
6631
|
-
);
|
|
6632
|
-
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex w-full flex-col gap-2", className), children: [
|
|
6633
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "relative flex h-20 w-full items-stretch justify-between rounded-sm bg-subtle", children: [
|
|
6634
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex flex-1 items-center gap-4 overflow-hidden px-4", children: [
|
|
6635
|
-
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 }),
|
|
6636
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex h-11 flex-col justify-center gap-1 whitespace-nowrap", children: [
|
|
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: [
|
|
6637
6698
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-xs text-on-subtle", children: label }),
|
|
6638
6699
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "leading-none", children: [
|
|
6639
6700
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-[20px] font-bold text-on-prominent", children: value }),
|
|
@@ -6642,74 +6703,59 @@ function TicketCard({
|
|
|
6642
6703
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm text-on-subtle", children: currency })
|
|
6643
6704
|
] })
|
|
6644
6705
|
] })
|
|
6706
|
+
] }),
|
|
6707
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Badge, { variant: "fill-credit", size: "sm", className: "!gap-1 !font-medium !tracking-normal", children: [
|
|
6708
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.TicketPlus, { className: "!size-3.5", strokeWidth: 2 }),
|
|
6709
|
+
"Credit: ",
|
|
6710
|
+
creditAmount,
|
|
6711
|
+
" ",
|
|
6712
|
+
creditCurrency
|
|
6645
6713
|
] })
|
|
6646
|
-
] })
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
6650
|
-
|
|
6651
|
-
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
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)"
|
|
6658
6726
|
}
|
|
6659
|
-
|
|
6660
|
-
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6678
|
-
|
|
6679
|
-
|
|
6680
|
-
|
|
6681
|
-
|
|
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",
|
|
6745
|
+
{
|
|
6746
|
+
"aria-hidden": true,
|
|
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%)"
|
|
6682
6750
|
}
|
|
6683
|
-
|
|
6684
|
-
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
6688
|
-
|
|
6689
|
-
|
|
6690
|
-
|
|
6691
|
-
"flex items-center gap-2 rounded-sm bg-subtle p-2",
|
|
6692
|
-
creditFullWidth ? "w-full" : "w-[calc(100%-112px)]"
|
|
6693
|
-
), children: [
|
|
6694
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react23.TicketPlus, { className: "size-6 shrink-0", style: { color: "#713813" } }),
|
|
6695
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
6696
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between whitespace-nowrap text-[10px] font-semibold", style: { color: "#713813" }, children: [
|
|
6697
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: creditLabel }),
|
|
6698
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { children: [
|
|
6699
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-on-prominent", children: creditUsed }),
|
|
6700
|
-
` / ${creditTotal} ${creditCurrency}`
|
|
6701
|
-
] })
|
|
6702
|
-
] }),
|
|
6703
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6704
|
-
Progress,
|
|
6705
|
-
{
|
|
6706
|
-
value: creditPct,
|
|
6707
|
-
className: "h-1 bg-black/8 [&>[data-slot=progress-indicator]]:bg-[#ef9f00]"
|
|
6708
|
-
}
|
|
6709
|
-
)
|
|
6710
|
-
] })
|
|
6711
|
-
] })
|
|
6712
|
-
] });
|
|
6751
|
+
}
|
|
6752
|
+
),
|
|
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
|
+
] }) });
|
|
6713
6759
|
}
|
|
6714
6760
|
var TicketCardDesktop = TicketCard;
|
|
6715
6761
|
|
|
@@ -6930,6 +6976,7 @@ function ToggleGroupItem(_a) {
|
|
|
6930
6976
|
ContextMenuSubContent,
|
|
6931
6977
|
ContextMenuSubTrigger,
|
|
6932
6978
|
ContextMenuTrigger,
|
|
6979
|
+
CreditTicketCard,
|
|
6933
6980
|
Dialog,
|
|
6934
6981
|
DialogClose,
|
|
6935
6982
|
DialogContent,
|