@trading-game/design-intelligence-layer 0.9.0 → 0.9.2
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/AGENTS.md +4 -4
- package/README.md +5 -5
- package/dist/index.cjs +198 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +196 -50
- package/dist/index.js.map +1 -1
- package/guides/brand-voice/trading-game-brand-voice.md +325 -0
- package/guides/design-system-guide/trading-game-ds-guide.md +8 -7
- package/guides/rules/design-system-consuming-project.mdc +1 -1
- package/package.json +1 -1
- package/src/styles.css +2 -2
- package/guides/tone-of-voice/trading-game-tone-of-voice-and-campaign-brief.md +0 -290
package/AGENTS.md
CHANGED
|
@@ -23,14 +23,14 @@ node_modules/@trading-game/design-intelligence-layer/guides/accessibility-standa
|
|
|
23
23
|
node_modules/@trading-game/design-intelligence-layer/guides/personas/trading-game-player-field-guide.md
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
**
|
|
26
|
+
**Brand voice** — channel-specific voice application, banned phrases, vocabulary reference, and formatting rules for all player-facing copy:
|
|
27
27
|
```
|
|
28
|
-
node_modules/@trading-game/design-intelligence-layer/guides/
|
|
28
|
+
node_modules/@trading-game/design-intelligence-layer/guides/brand-voice/trading-game-brand-voice.md
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
All four files apply to all projects built with this package — landing pages, product screens, and games.
|
|
32
32
|
|
|
33
|
-
Run the checklists at the end of the design principles and accessibility standards files before considering any screen complete. Use the personas and
|
|
33
|
+
Run the checklists at the end of the design principles and accessibility standards files before considering any screen complete. Use the personas and brand voice to guide all player-facing copy.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -67,5 +67,5 @@ cp node_modules/@trading-game/design-intelligence-layer/guides/rules/design-syst
|
|
|
67
67
|
- Design principles: `node_modules/@trading-game/design-intelligence-layer/guides/design-principles/trading-game-design-principles.md`
|
|
68
68
|
- Accessibility standards: `node_modules/@trading-game/design-intelligence-layer/guides/accessibility-standards/trading-game-accessibility-standards.md`
|
|
69
69
|
- Personas: `node_modules/@trading-game/design-intelligence-layer/guides/personas/trading-game-player-field-guide.md`
|
|
70
|
-
-
|
|
70
|
+
- Brand voice: `node_modules/@trading-game/design-intelligence-layer/guides/brand-voice/trading-game-brand-voice.md`
|
|
71
71
|
- Full agent rules: `node_modules/@trading-game/design-intelligence-layer/guides/rules/design-system-consuming-project.mdc`
|
package/README.md
CHANGED
|
@@ -273,7 +273,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
|
|
|
273
273
|
| `text-on-prominent` | `#000000` | Primary text on light backgrounds |
|
|
274
274
|
| `text-on-prominent-static-inverse` | `#FFFFFF` | Always white — for text on dark/primary backgrounds |
|
|
275
275
|
| `text-on-subtle` | mid grey | Secondary / supporting text |
|
|
276
|
-
|
|
276
|
+
|
|
277
277
|
| `text-primary` | `#2323FF` | Brand blue inline text |
|
|
278
278
|
| `text-semantic-win` | green | Profit / positive text |
|
|
279
279
|
| `text-semantic-loss` | red | Loss / negative text |
|
|
@@ -429,12 +429,12 @@ node_modules/@trading-game/design-intelligence-layer/guides/accessibility-standa
|
|
|
429
429
|
node_modules/@trading-game/design-intelligence-layer/guides/personas/trading-game-player-field-guide.md
|
|
430
430
|
```
|
|
431
431
|
|
|
432
|
-
**
|
|
432
|
+
**Brand voice** (bundled in the package):
|
|
433
433
|
```
|
|
434
|
-
node_modules/@trading-game/design-intelligence-layer/guides/
|
|
434
|
+
node_modules/@trading-game/design-intelligence-layer/guides/brand-voice/trading-game-brand-voice.md
|
|
435
435
|
```
|
|
436
436
|
|
|
437
|
-
All four files apply to all projects built with this package — landing pages, product screens, and games. Every AI agent must read all of them before starting any build. Run the design principles and accessibility checklists before completing any screen. Use the personas and
|
|
437
|
+
All four files apply to all projects built with this package — landing pages, product screens, and games. Every AI agent must read all of them before starting any build. Run the design principles and accessibility checklists before completing any screen. Use the personas and brand voice to guide all player-facing copy.
|
|
438
438
|
|
|
439
439
|
### Cursor
|
|
440
440
|
|
|
@@ -458,7 +458,7 @@ This project uses @trading-game/design-intelligence-layer. Before writing any UI
|
|
|
458
458
|
1. Read node_modules/@trading-game/design-intelligence-layer/guides/design-principles/trading-game-design-principles.md — apply the 8 principles and run the 7-point checklist on every screen
|
|
459
459
|
2. Read node_modules/@trading-game/design-intelligence-layer/guides/accessibility-standards/trading-game-accessibility-standards.md — apply WCAG 2.1 AA standards and run the 9-point accessibility checklist on every screen
|
|
460
460
|
3. Read node_modules/@trading-game/design-intelligence-layer/guides/personas/trading-game-player-field-guide.md — understand the 3 player modes (Edge Seeker, System Runner, Public Predictor) that shape all copy and UX
|
|
461
|
-
4. Read node_modules/@trading-game/design-intelligence-layer/guides/
|
|
461
|
+
4. Read node_modules/@trading-game/design-intelligence-layer/guides/brand-voice/trading-game-brand-voice.md — apply the brand voice: channel-specific voice, banned phrases, vocabulary, and formatting rules for all player-facing copy
|
|
462
462
|
5. Check if the component exists in the package — import it, don't re-implement
|
|
463
463
|
6. Use only design token classes (bg-prominent, text-on-prominent, border-border-subtle, etc.) — no hardcoded hex or raw Tailwind palette colors
|
|
464
464
|
7. Do not install lucide-react, tailwindcss, or other bundled dependencies separately
|
package/dist/index.cjs
CHANGED
|
@@ -339,6 +339,7 @@ __export(index_exports, {
|
|
|
339
339
|
Skeleton: () => Skeleton,
|
|
340
340
|
Slider: () => Slider,
|
|
341
341
|
Spinner: () => Spinner,
|
|
342
|
+
Stepper: () => Stepper,
|
|
342
343
|
Switch: () => Switch,
|
|
343
344
|
Table: () => Table,
|
|
344
345
|
TableBody: () => TableBody,
|
|
@@ -524,7 +525,7 @@ var import_class_variance_authority2 = require("class-variance-authority");
|
|
|
524
525
|
var import_radix_ui2 = require("radix-ui");
|
|
525
526
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
526
527
|
var buttonVariants = (0, import_class_variance_authority2.cva)(
|
|
527
|
-
"inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-
|
|
528
|
+
"inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-24 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 font-display font-bold",
|
|
528
529
|
{
|
|
529
530
|
variants: {
|
|
530
531
|
variant: {
|
|
@@ -573,7 +574,7 @@ function Button(_a) {
|
|
|
573
574
|
"data-variant": variant,
|
|
574
575
|
"data-size": size,
|
|
575
576
|
"data-loading": loading || void 0,
|
|
576
|
-
className: cn(buttonVariants({ variant, size, className }), loading && "pointer-events-none opacity-
|
|
577
|
+
className: cn(buttonVariants({ variant, size, className }), loading && "pointer-events-none opacity-24"),
|
|
577
578
|
"aria-busy": loading || void 0
|
|
578
579
|
}, props)
|
|
579
580
|
);
|
|
@@ -1820,7 +1821,7 @@ function Input(_a) {
|
|
|
1820
1821
|
type,
|
|
1821
1822
|
"data-slot": "input",
|
|
1822
1823
|
className: cn(
|
|
1823
|
-
"h-9 w-full min-w-0 rounded-sm border border-border-subtle bg-white/5 px-3 py-1 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-on-prominent-static-inverse file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-on-prominent placeholder:text-on-
|
|
1824
|
+
"h-9 w-full min-w-0 rounded-sm border border-border-subtle bg-white/5 px-3 py-1 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-on-prominent-static-inverse file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-on-prominent placeholder:text-on-subtle disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
1824
1825
|
"focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/[0.08]",
|
|
1825
1826
|
className
|
|
1826
1827
|
)
|
|
@@ -1837,7 +1838,7 @@ function Textarea(_a) {
|
|
|
1837
1838
|
__spreadValues({
|
|
1838
1839
|
"data-slot": "textarea",
|
|
1839
1840
|
className: cn(
|
|
1840
|
-
"flex field-sizing-content min-h-16 w-full rounded-sm border border-border-subtle bg-white/5 px-3 py-2 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none placeholder:text-on-
|
|
1841
|
+
"flex field-sizing-content min-h-16 w-full rounded-sm border border-border-subtle bg-white/5 px-3 py-2 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none placeholder:text-on-subtle focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/[0.08] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm",
|
|
1841
1842
|
className
|
|
1842
1843
|
)
|
|
1843
1844
|
}, props)
|
|
@@ -5999,12 +6000,157 @@ var Toaster = (_a) => {
|
|
|
5999
6000
|
);
|
|
6000
6001
|
};
|
|
6001
6002
|
|
|
6002
|
-
// components/ui/
|
|
6003
|
+
// components/ui/stepper.tsx
|
|
6004
|
+
var React10 = __toESM(require("react"), 1);
|
|
6005
|
+
var import_lucide_react22 = require("lucide-react");
|
|
6003
6006
|
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
6007
|
+
function clamp(value, min, max) {
|
|
6008
|
+
return Math.min(Math.max(value, min), max);
|
|
6009
|
+
}
|
|
6010
|
+
function getDecimalPlaces(n) {
|
|
6011
|
+
const s = String(n);
|
|
6012
|
+
const i = s.indexOf(".");
|
|
6013
|
+
return i === -1 ? 0 : s.length - i - 1;
|
|
6014
|
+
}
|
|
6015
|
+
function formatValue(value, decimalPlaces) {
|
|
6016
|
+
return decimalPlaces > 0 ? value.toFixed(decimalPlaces) : String(value);
|
|
6017
|
+
}
|
|
6018
|
+
function Stepper({
|
|
6019
|
+
value: controlledValue,
|
|
6020
|
+
defaultValue = 0,
|
|
6021
|
+
onValueChange,
|
|
6022
|
+
min = -Infinity,
|
|
6023
|
+
max = Infinity,
|
|
6024
|
+
step = 1,
|
|
6025
|
+
disabled,
|
|
6026
|
+
placeholder,
|
|
6027
|
+
className,
|
|
6028
|
+
id,
|
|
6029
|
+
name,
|
|
6030
|
+
"aria-label": ariaLabel
|
|
6031
|
+
}) {
|
|
6032
|
+
const isControlled = controlledValue !== void 0;
|
|
6033
|
+
const [internalValue, setInternalValue] = React10.useState(
|
|
6034
|
+
clamp(defaultValue, min, max)
|
|
6035
|
+
);
|
|
6036
|
+
const currentValue = isControlled ? controlledValue : internalValue;
|
|
6037
|
+
const decimalPlaces = getDecimalPlaces(step);
|
|
6038
|
+
const [displayString, setDisplayString] = React10.useState(
|
|
6039
|
+
formatValue(currentValue, decimalPlaces)
|
|
6040
|
+
);
|
|
6041
|
+
const [isFocused, setIsFocused] = React10.useState(false);
|
|
6042
|
+
React10.useEffect(() => {
|
|
6043
|
+
if (!isFocused) {
|
|
6044
|
+
setDisplayString(formatValue(currentValue, decimalPlaces));
|
|
6045
|
+
}
|
|
6046
|
+
}, [currentValue, decimalPlaces, isFocused]);
|
|
6047
|
+
function commit(next) {
|
|
6048
|
+
const clamped = clamp(next, min, max);
|
|
6049
|
+
const rounded = decimalPlaces > 0 ? parseFloat(clamped.toFixed(decimalPlaces)) : Math.round(clamped);
|
|
6050
|
+
if (!isControlled) setInternalValue(rounded);
|
|
6051
|
+
setDisplayString(formatValue(rounded, decimalPlaces));
|
|
6052
|
+
onValueChange == null ? void 0 : onValueChange(rounded);
|
|
6053
|
+
}
|
|
6054
|
+
function handleDecrement() {
|
|
6055
|
+
commit(currentValue - step);
|
|
6056
|
+
}
|
|
6057
|
+
function handleIncrement() {
|
|
6058
|
+
commit(currentValue + step);
|
|
6059
|
+
}
|
|
6060
|
+
function handleInputChange(e) {
|
|
6061
|
+
setDisplayString(e.target.value);
|
|
6062
|
+
}
|
|
6063
|
+
function handleBlur() {
|
|
6064
|
+
setIsFocused(false);
|
|
6065
|
+
const parsed = parseFloat(displayString);
|
|
6066
|
+
if (Number.isNaN(parsed)) {
|
|
6067
|
+
setDisplayString(formatValue(currentValue, decimalPlaces));
|
|
6068
|
+
} else {
|
|
6069
|
+
commit(parsed);
|
|
6070
|
+
}
|
|
6071
|
+
}
|
|
6072
|
+
function handleFocus() {
|
|
6073
|
+
setIsFocused(true);
|
|
6074
|
+
}
|
|
6075
|
+
function handleKeyDown(e) {
|
|
6076
|
+
if (e.key === "ArrowUp") {
|
|
6077
|
+
e.preventDefault();
|
|
6078
|
+
handleIncrement();
|
|
6079
|
+
} else if (e.key === "ArrowDown") {
|
|
6080
|
+
e.preventDefault();
|
|
6081
|
+
handleDecrement();
|
|
6082
|
+
} else if (e.key === "Enter") {
|
|
6083
|
+
e.preventDefault();
|
|
6084
|
+
const parsed = parseFloat(displayString);
|
|
6085
|
+
if (Number.isNaN(parsed)) {
|
|
6086
|
+
setDisplayString(formatValue(currentValue, decimalPlaces));
|
|
6087
|
+
} else {
|
|
6088
|
+
commit(parsed);
|
|
6089
|
+
}
|
|
6090
|
+
}
|
|
6091
|
+
}
|
|
6092
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
6093
|
+
InputGroup,
|
|
6094
|
+
{
|
|
6095
|
+
"data-slot": "stepper",
|
|
6096
|
+
"data-disabled": disabled || void 0,
|
|
6097
|
+
className: cn("w-32", className),
|
|
6098
|
+
children: [
|
|
6099
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(InputGroupAddon, { align: "inline-start", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
6100
|
+
InputGroupButton,
|
|
6101
|
+
{
|
|
6102
|
+
size: "icon-xs",
|
|
6103
|
+
variant: "secondary",
|
|
6104
|
+
onClick: handleDecrement,
|
|
6105
|
+
disabled: disabled || currentValue <= min,
|
|
6106
|
+
"aria-label": "Decrease value",
|
|
6107
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.Minus, { className: "size-3.5" })
|
|
6108
|
+
}
|
|
6109
|
+
) }),
|
|
6110
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
6111
|
+
InputGroupInput,
|
|
6112
|
+
{
|
|
6113
|
+
type: "text",
|
|
6114
|
+
inputMode: "numeric",
|
|
6115
|
+
role: "spinbutton",
|
|
6116
|
+
"aria-valuemin": min === -Infinity ? void 0 : min,
|
|
6117
|
+
"aria-valuemax": max === Infinity ? void 0 : max,
|
|
6118
|
+
"aria-valuenow": currentValue,
|
|
6119
|
+
"aria-label": ariaLabel,
|
|
6120
|
+
value: displayString,
|
|
6121
|
+
onChange: handleInputChange,
|
|
6122
|
+
onBlur: handleBlur,
|
|
6123
|
+
onFocus: handleFocus,
|
|
6124
|
+
onKeyDown: handleKeyDown,
|
|
6125
|
+
disabled,
|
|
6126
|
+
placeholder,
|
|
6127
|
+
id,
|
|
6128
|
+
name,
|
|
6129
|
+
className: "text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
|
6130
|
+
}
|
|
6131
|
+
),
|
|
6132
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
6133
|
+
InputGroupButton,
|
|
6134
|
+
{
|
|
6135
|
+
size: "icon-xs",
|
|
6136
|
+
variant: "secondary",
|
|
6137
|
+
onClick: handleIncrement,
|
|
6138
|
+
disabled: disabled || currentValue >= max,
|
|
6139
|
+
"aria-label": "Increase value",
|
|
6140
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.Plus, { className: "size-3.5" })
|
|
6141
|
+
}
|
|
6142
|
+
) })
|
|
6143
|
+
]
|
|
6144
|
+
}
|
|
6145
|
+
);
|
|
6146
|
+
}
|
|
6147
|
+
|
|
6148
|
+
// components/ui/spinner.tsx
|
|
6149
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
6004
6150
|
var PILL_COUNT = 8;
|
|
6005
6151
|
function Spinner(_a) {
|
|
6006
6152
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6007
|
-
return /* @__PURE__ */ (0,
|
|
6153
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
6008
6154
|
"div",
|
|
6009
6155
|
__spreadProps(__spreadValues({
|
|
6010
6156
|
role: "status",
|
|
@@ -6012,13 +6158,13 @@ function Spinner(_a) {
|
|
|
6012
6158
|
className: cn("relative inline-block size-4 text-current", className)
|
|
6013
6159
|
}, props), {
|
|
6014
6160
|
children: [
|
|
6015
|
-
/* @__PURE__ */ (0,
|
|
6161
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("style", { children: `
|
|
6016
6162
|
@keyframes spinner-fade {
|
|
6017
6163
|
0% { opacity: 1; }
|
|
6018
6164
|
100% { opacity: 0.15; }
|
|
6019
6165
|
}
|
|
6020
6166
|
` }),
|
|
6021
|
-
Array.from({ length: PILL_COUNT }, (_, i) => /* @__PURE__ */ (0,
|
|
6167
|
+
Array.from({ length: PILL_COUNT }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
6022
6168
|
"span",
|
|
6023
6169
|
{
|
|
6024
6170
|
style: {
|
|
@@ -6043,7 +6189,7 @@ function Spinner(_a) {
|
|
|
6043
6189
|
|
|
6044
6190
|
// components/ui/switch.tsx
|
|
6045
6191
|
var import_radix_ui31 = require("radix-ui");
|
|
6046
|
-
var
|
|
6192
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
6047
6193
|
function Switch(_a) {
|
|
6048
6194
|
var _b = _a, {
|
|
6049
6195
|
className,
|
|
@@ -6052,7 +6198,7 @@ function Switch(_a) {
|
|
|
6052
6198
|
"className",
|
|
6053
6199
|
"size"
|
|
6054
6200
|
]);
|
|
6055
|
-
return /* @__PURE__ */ (0,
|
|
6201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6056
6202
|
import_radix_ui31.Switch.Root,
|
|
6057
6203
|
__spreadProps(__spreadValues({
|
|
6058
6204
|
"data-slot": "switch",
|
|
@@ -6062,7 +6208,7 @@ function Switch(_a) {
|
|
|
6062
6208
|
className
|
|
6063
6209
|
)
|
|
6064
6210
|
}, props), {
|
|
6065
|
-
children: /* @__PURE__ */ (0,
|
|
6211
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6066
6212
|
import_radix_ui31.Switch.Thumb,
|
|
6067
6213
|
{
|
|
6068
6214
|
"data-slot": "switch-thumb",
|
|
@@ -6076,15 +6222,15 @@ function Switch(_a) {
|
|
|
6076
6222
|
}
|
|
6077
6223
|
|
|
6078
6224
|
// components/ui/table.tsx
|
|
6079
|
-
var
|
|
6225
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
6080
6226
|
function Table(_a) {
|
|
6081
6227
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6082
|
-
return /* @__PURE__ */ (0,
|
|
6228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6083
6229
|
"div",
|
|
6084
6230
|
{
|
|
6085
6231
|
"data-slot": "table-container",
|
|
6086
6232
|
className: "relative w-full overflow-x-auto",
|
|
6087
|
-
children: /* @__PURE__ */ (0,
|
|
6233
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6088
6234
|
"table",
|
|
6089
6235
|
__spreadValues({
|
|
6090
6236
|
"data-slot": "table",
|
|
@@ -6096,7 +6242,7 @@ function Table(_a) {
|
|
|
6096
6242
|
}
|
|
6097
6243
|
function TableHeader(_a) {
|
|
6098
6244
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6099
|
-
return /* @__PURE__ */ (0,
|
|
6245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6100
6246
|
"thead",
|
|
6101
6247
|
__spreadValues({
|
|
6102
6248
|
"data-slot": "table-header",
|
|
@@ -6106,7 +6252,7 @@ function TableHeader(_a) {
|
|
|
6106
6252
|
}
|
|
6107
6253
|
function TableBody(_a) {
|
|
6108
6254
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6109
|
-
return /* @__PURE__ */ (0,
|
|
6255
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6110
6256
|
"tbody",
|
|
6111
6257
|
__spreadValues({
|
|
6112
6258
|
"data-slot": "table-body",
|
|
@@ -6116,7 +6262,7 @@ function TableBody(_a) {
|
|
|
6116
6262
|
}
|
|
6117
6263
|
function TableFooter(_a) {
|
|
6118
6264
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6119
|
-
return /* @__PURE__ */ (0,
|
|
6265
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6120
6266
|
"tfoot",
|
|
6121
6267
|
__spreadValues({
|
|
6122
6268
|
"data-slot": "table-footer",
|
|
@@ -6129,7 +6275,7 @@ function TableFooter(_a) {
|
|
|
6129
6275
|
}
|
|
6130
6276
|
function TableRow(_a) {
|
|
6131
6277
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6132
|
-
return /* @__PURE__ */ (0,
|
|
6278
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6133
6279
|
"tr",
|
|
6134
6280
|
__spreadValues({
|
|
6135
6281
|
"data-slot": "table-row",
|
|
@@ -6142,7 +6288,7 @@ function TableRow(_a) {
|
|
|
6142
6288
|
}
|
|
6143
6289
|
function TableHead(_a) {
|
|
6144
6290
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6145
|
-
return /* @__PURE__ */ (0,
|
|
6291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6146
6292
|
"th",
|
|
6147
6293
|
__spreadValues({
|
|
6148
6294
|
"data-slot": "table-head",
|
|
@@ -6155,7 +6301,7 @@ function TableHead(_a) {
|
|
|
6155
6301
|
}
|
|
6156
6302
|
function TableCell(_a) {
|
|
6157
6303
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6158
|
-
return /* @__PURE__ */ (0,
|
|
6304
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6159
6305
|
"td",
|
|
6160
6306
|
__spreadValues({
|
|
6161
6307
|
"data-slot": "table-cell",
|
|
@@ -6172,7 +6318,7 @@ function TableCaption(_a) {
|
|
|
6172
6318
|
} = _b, props = __objRest(_b, [
|
|
6173
6319
|
"className"
|
|
6174
6320
|
]);
|
|
6175
|
-
return /* @__PURE__ */ (0,
|
|
6321
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6176
6322
|
"caption",
|
|
6177
6323
|
__spreadValues({
|
|
6178
6324
|
"data-slot": "table-caption",
|
|
@@ -6184,7 +6330,7 @@ function TableCaption(_a) {
|
|
|
6184
6330
|
// components/ui/tabs.tsx
|
|
6185
6331
|
var import_class_variance_authority11 = require("class-variance-authority");
|
|
6186
6332
|
var import_radix_ui32 = require("radix-ui");
|
|
6187
|
-
var
|
|
6333
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
6188
6334
|
function Tabs(_a) {
|
|
6189
6335
|
var _b = _a, {
|
|
6190
6336
|
className,
|
|
@@ -6193,7 +6339,7 @@ function Tabs(_a) {
|
|
|
6193
6339
|
"className",
|
|
6194
6340
|
"orientation"
|
|
6195
6341
|
]);
|
|
6196
|
-
return /* @__PURE__ */ (0,
|
|
6342
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6197
6343
|
import_radix_ui32.Tabs.Root,
|
|
6198
6344
|
__spreadValues({
|
|
6199
6345
|
"data-slot": "tabs",
|
|
@@ -6236,7 +6382,7 @@ function TabsList(_a) {
|
|
|
6236
6382
|
"variant",
|
|
6237
6383
|
"size"
|
|
6238
6384
|
]);
|
|
6239
|
-
return /* @__PURE__ */ (0,
|
|
6385
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6240
6386
|
import_radix_ui32.Tabs.List,
|
|
6241
6387
|
__spreadValues({
|
|
6242
6388
|
"data-slot": "tabs-list",
|
|
@@ -6254,7 +6400,7 @@ function TabsTrigger(_a) {
|
|
|
6254
6400
|
"className",
|
|
6255
6401
|
"iconPosition"
|
|
6256
6402
|
]);
|
|
6257
|
-
return /* @__PURE__ */ (0,
|
|
6403
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6258
6404
|
import_radix_ui32.Tabs.Trigger,
|
|
6259
6405
|
__spreadValues({
|
|
6260
6406
|
"data-slot": "tabs-trigger",
|
|
@@ -6280,7 +6426,7 @@ function TabsContent(_a) {
|
|
|
6280
6426
|
} = _b, props = __objRest(_b, [
|
|
6281
6427
|
"className"
|
|
6282
6428
|
]);
|
|
6283
|
-
return /* @__PURE__ */ (0,
|
|
6429
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6284
6430
|
import_radix_ui32.Tabs.Content,
|
|
6285
6431
|
__spreadValues({
|
|
6286
6432
|
"data-slot": "tabs-content",
|
|
@@ -6290,8 +6436,8 @@ function TabsContent(_a) {
|
|
|
6290
6436
|
}
|
|
6291
6437
|
|
|
6292
6438
|
// components/ui/ticket-card.tsx
|
|
6293
|
-
var
|
|
6294
|
-
var
|
|
6439
|
+
var import_lucide_react23 = require("lucide-react");
|
|
6440
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
6295
6441
|
function TicketCard({
|
|
6296
6442
|
icon,
|
|
6297
6443
|
label,
|
|
@@ -6302,7 +6448,7 @@ function TicketCard({
|
|
|
6302
6448
|
stubDisabled = false,
|
|
6303
6449
|
className
|
|
6304
6450
|
}) {
|
|
6305
|
-
return /* @__PURE__ */ (0,
|
|
6451
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
|
|
6306
6452
|
"div",
|
|
6307
6453
|
{
|
|
6308
6454
|
"data-slot": "ticket-card",
|
|
@@ -6312,27 +6458,27 @@ function TicketCard({
|
|
|
6312
6458
|
className
|
|
6313
6459
|
),
|
|
6314
6460
|
children: [
|
|
6315
|
-
/* @__PURE__ */ (0,
|
|
6316
|
-
icon && /* @__PURE__ */ (0,
|
|
6317
|
-
/* @__PURE__ */ (0,
|
|
6318
|
-
label && /* @__PURE__ */ (0,
|
|
6319
|
-
value && /* @__PURE__ */ (0,
|
|
6461
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.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: [
|
|
6462
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime56.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 }),
|
|
6463
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5 overflow-hidden", children: [
|
|
6464
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-on-subtle uppercase tracking-widest text-xs font-semibold", children: label }),
|
|
6465
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "truncate text-lg font-bold text-on-prominent sm:text-xl", children: value })
|
|
6320
6466
|
] }),
|
|
6321
|
-
/* @__PURE__ */ (0,
|
|
6467
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6322
6468
|
"div",
|
|
6323
6469
|
{
|
|
6324
6470
|
"aria-hidden": true,
|
|
6325
6471
|
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"
|
|
6326
6472
|
}
|
|
6327
6473
|
),
|
|
6328
|
-
/* @__PURE__ */ (0,
|
|
6474
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6329
6475
|
"div",
|
|
6330
6476
|
{
|
|
6331
6477
|
"aria-hidden": true,
|
|
6332
6478
|
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"
|
|
6333
6479
|
}
|
|
6334
6480
|
),
|
|
6335
|
-
/* @__PURE__ */ (0,
|
|
6481
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6336
6482
|
"div",
|
|
6337
6483
|
{
|
|
6338
6484
|
"aria-hidden": true,
|
|
@@ -6340,13 +6486,13 @@ function TicketCard({
|
|
|
6340
6486
|
}
|
|
6341
6487
|
)
|
|
6342
6488
|
] }),
|
|
6343
|
-
/* @__PURE__ */ (0,
|
|
6489
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6344
6490
|
"div",
|
|
6345
6491
|
{
|
|
6346
6492
|
className: cn(
|
|
6347
6493
|
"relative z-[1] inline-flex max-w-[72%] shrink-0 self-stretch sm:max-w-[44%]"
|
|
6348
6494
|
),
|
|
6349
|
-
children: /* @__PURE__ */ (0,
|
|
6495
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
|
|
6350
6496
|
"button",
|
|
6351
6497
|
{
|
|
6352
6498
|
type: "button",
|
|
@@ -6358,7 +6504,7 @@ function TicketCard({
|
|
|
6358
6504
|
stubDisabled ? "bg-primary/30 cursor-not-allowed opacity-50 pointer-events-none" : "bg-primary cursor-pointer hover:bg-primary-hover"
|
|
6359
6505
|
),
|
|
6360
6506
|
children: [
|
|
6361
|
-
!stubDisabled && /* @__PURE__ */ (0,
|
|
6507
|
+
!stubDisabled && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6362
6508
|
"span",
|
|
6363
6509
|
{
|
|
6364
6510
|
"aria-hidden": true,
|
|
@@ -6368,8 +6514,8 @@ function TicketCard({
|
|
|
6368
6514
|
}
|
|
6369
6515
|
}
|
|
6370
6516
|
),
|
|
6371
|
-
stubIcon != null ? stubIcon : /* @__PURE__ */ (0,
|
|
6372
|
-
stubLabel && /* @__PURE__ */ (0,
|
|
6517
|
+
stubIcon != null ? stubIcon : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react23.ArrowRight, { className: "relative size-5 shrink-0 text-on-prominent-static-inverse" }),
|
|
6518
|
+
stubLabel && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "max-w-full text-balance text-center text-xs font-bold uppercase leading-tight tracking-wide text-on-prominent-static-inverse sm:tracking-widest", children: stubLabel })
|
|
6373
6519
|
]
|
|
6374
6520
|
}
|
|
6375
6521
|
)
|
|
@@ -6383,7 +6529,7 @@ function TicketCard({
|
|
|
6383
6529
|
// components/ui/toggle.tsx
|
|
6384
6530
|
var import_class_variance_authority12 = require("class-variance-authority");
|
|
6385
6531
|
var import_radix_ui33 = require("radix-ui");
|
|
6386
|
-
var
|
|
6532
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
6387
6533
|
var toggleVariants = (0, import_class_variance_authority12.cva)(
|
|
6388
6534
|
"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-secondary-hover hover:text-on-prominent focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-secondary-hover data-[state=on]:border-transparent data-[state=on]:text-primary [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
6389
6535
|
{
|
|
@@ -6414,7 +6560,7 @@ function Toggle(_a) {
|
|
|
6414
6560
|
"variant",
|
|
6415
6561
|
"size"
|
|
6416
6562
|
]);
|
|
6417
|
-
return /* @__PURE__ */ (0,
|
|
6563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6418
6564
|
import_radix_ui33.Toggle.Root,
|
|
6419
6565
|
__spreadValues({
|
|
6420
6566
|
"data-slot": "toggle",
|
|
@@ -6424,10 +6570,10 @@ function Toggle(_a) {
|
|
|
6424
6570
|
}
|
|
6425
6571
|
|
|
6426
6572
|
// components/ui/toggle-group.tsx
|
|
6427
|
-
var
|
|
6573
|
+
var React11 = __toESM(require("react"), 1);
|
|
6428
6574
|
var import_radix_ui34 = require("radix-ui");
|
|
6429
|
-
var
|
|
6430
|
-
var ToggleGroupContext =
|
|
6575
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
6576
|
+
var ToggleGroupContext = React11.createContext({
|
|
6431
6577
|
size: "default",
|
|
6432
6578
|
variant: "default",
|
|
6433
6579
|
spacing: 0
|
|
@@ -6446,7 +6592,7 @@ function ToggleGroup(_a) {
|
|
|
6446
6592
|
"spacing",
|
|
6447
6593
|
"children"
|
|
6448
6594
|
]);
|
|
6449
|
-
return /* @__PURE__ */ (0,
|
|
6595
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
6450
6596
|
import_radix_ui34.ToggleGroup.Root,
|
|
6451
6597
|
__spreadProps(__spreadValues({
|
|
6452
6598
|
"data-slot": "toggle-group",
|
|
@@ -6459,7 +6605,7 @@ function ToggleGroup(_a) {
|
|
|
6459
6605
|
className
|
|
6460
6606
|
)
|
|
6461
6607
|
}, props), {
|
|
6462
|
-
children: /* @__PURE__ */ (0,
|
|
6608
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
|
|
6463
6609
|
})
|
|
6464
6610
|
);
|
|
6465
6611
|
}
|
|
@@ -6475,8 +6621,8 @@ function ToggleGroupItem(_a) {
|
|
|
6475
6621
|
"variant",
|
|
6476
6622
|
"size"
|
|
6477
6623
|
]);
|
|
6478
|
-
const context =
|
|
6479
|
-
return /* @__PURE__ */ (0,
|
|
6624
|
+
const context = React11.useContext(ToggleGroupContext);
|
|
6625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
6480
6626
|
import_radix_ui34.ToggleGroup.Item,
|
|
6481
6627
|
__spreadProps(__spreadValues({
|
|
6482
6628
|
"data-slot": "toggle-group-item",
|
|
@@ -6778,6 +6924,7 @@ function ToggleGroupItem(_a) {
|
|
|
6778
6924
|
Skeleton,
|
|
6779
6925
|
Slider,
|
|
6780
6926
|
Spinner,
|
|
6927
|
+
Stepper,
|
|
6781
6928
|
Switch,
|
|
6782
6929
|
Table,
|
|
6783
6930
|
TableBody,
|