@orangecheck/design 0.6.1 → 0.7.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.
@@ -14,6 +14,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
14
14
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
15
15
  import * as SelectPrimitive from '@radix-ui/react-select';
16
16
  import { ToasterProps } from 'sonner';
17
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
17
18
 
18
19
  declare const buttonVariants: (props?: ({
19
20
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
@@ -98,6 +99,9 @@ declare function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'p
98
99
  interface Props {
99
100
  children: React.ReactNode;
100
101
  fallback?: (error: Error, reset: () => void) => React.ReactNode;
102
+ title?: string;
103
+ message?: string;
104
+ onError?: (error: Error, info: React.ErrorInfo) => void;
101
105
  }
102
106
  interface State {
103
107
  error: Error | null;
@@ -259,13 +263,32 @@ interface BarProps {
259
263
  declare function Bar({ pct, accent, label, right, className }: BarProps): react_jsx_runtime.JSX.Element;
260
264
 
261
265
  type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';
266
+ type StatusPillVariant = 'plain' | 'bordered';
262
267
  interface StatusPillProps {
263
268
  label: string;
264
269
  tone?: StatusTone;
270
+ variant?: StatusPillVariant;
265
271
  icon?: ReactNode;
266
272
  className?: string;
267
273
  }
268
- declare function StatusPill({ label, tone, icon, className }: StatusPillProps): react_jsx_runtime.JSX.Element;
274
+ declare function StatusPill({ label, tone, variant, icon, className, }: StatusPillProps): react_jsx_runtime.JSX.Element;
275
+ interface StatusPillSpec {
276
+ tone: StatusTone;
277
+ label?: string;
278
+ icon?: ReactNode;
279
+ }
280
+ declare function makeStatusPill<S extends string>(map: Record<S, StatusPillSpec>, options?: {
281
+ variant?: StatusPillVariant;
282
+ fallbackTone?: StatusTone;
283
+ }): (props: {
284
+ status: S;
285
+ className?: string;
286
+ }) => ReactNode;
287
+
288
+ declare function Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): react_jsx_runtime.JSX.Element;
289
+ declare function TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>): react_jsx_runtime.JSX.Element;
290
+ declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
291
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): react_jsx_runtime.JSX.Element;
269
292
 
270
293
  interface SatsAmountProps {
271
294
  sats: number;
@@ -305,4 +328,4 @@ interface QrCodeProps {
305
328
  }
306
329
  declare function QrCode({ value, size, label, className }: QrCodeProps): react_jsx_runtime.JSX.Element;
307
330
 
308
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusTone, Switch, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, prompt };
331
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt };
@@ -14,6 +14,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
14
14
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
15
15
  import * as SelectPrimitive from '@radix-ui/react-select';
16
16
  import { ToasterProps } from 'sonner';
17
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
17
18
 
18
19
  declare const buttonVariants: (props?: ({
19
20
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
@@ -98,6 +99,9 @@ declare function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'p
98
99
  interface Props {
99
100
  children: React.ReactNode;
100
101
  fallback?: (error: Error, reset: () => void) => React.ReactNode;
102
+ title?: string;
103
+ message?: string;
104
+ onError?: (error: Error, info: React.ErrorInfo) => void;
101
105
  }
102
106
  interface State {
103
107
  error: Error | null;
@@ -259,13 +263,32 @@ interface BarProps {
259
263
  declare function Bar({ pct, accent, label, right, className }: BarProps): react_jsx_runtime.JSX.Element;
260
264
 
261
265
  type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';
266
+ type StatusPillVariant = 'plain' | 'bordered';
262
267
  interface StatusPillProps {
263
268
  label: string;
264
269
  tone?: StatusTone;
270
+ variant?: StatusPillVariant;
265
271
  icon?: ReactNode;
266
272
  className?: string;
267
273
  }
268
- declare function StatusPill({ label, tone, icon, className }: StatusPillProps): react_jsx_runtime.JSX.Element;
274
+ declare function StatusPill({ label, tone, variant, icon, className, }: StatusPillProps): react_jsx_runtime.JSX.Element;
275
+ interface StatusPillSpec {
276
+ tone: StatusTone;
277
+ label?: string;
278
+ icon?: ReactNode;
279
+ }
280
+ declare function makeStatusPill<S extends string>(map: Record<S, StatusPillSpec>, options?: {
281
+ variant?: StatusPillVariant;
282
+ fallbackTone?: StatusTone;
283
+ }): (props: {
284
+ status: S;
285
+ className?: string;
286
+ }) => ReactNode;
287
+
288
+ declare function Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): react_jsx_runtime.JSX.Element;
289
+ declare function TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>): react_jsx_runtime.JSX.Element;
290
+ declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
291
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): react_jsx_runtime.JSX.Element;
269
292
 
270
293
  interface SatsAmountProps {
271
294
  sats: number;
@@ -305,4 +328,4 @@ interface QrCodeProps {
305
328
  }
306
329
  declare function QrCode({ value, size, label, className }: QrCodeProps): react_jsx_runtime.JSX.Element;
307
330
 
308
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusTone, Switch, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, prompt };
331
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, type AlertWithActionProps, AlertWithCountdown, type AlertWithCountdownProps, Badge, Bar, type BarProps, BitcoinAddress, type BitcoinAddressProps, Button, Card, type CardProps, Checkbox, ConfirmHost, type ConfirmOptions, CopyButton, type CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, type ModalProps, Pagination, type PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, type PromptOptions, QrCode, type QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, type SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Sparkline, type SparklineProps, StatBlock, type StatBlockProps, StatusPill, type StatusPillProps, type StatusPillSpec, type StatusPillVariant, type StatusTone, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, type WorkingProps, badgeVariants, buttonVariants, confirm, makeStatusPill, prompt };
@@ -18,6 +18,7 @@ var PopoverPrimitive = require('@radix-ui/react-popover');
18
18
  var AccordionPrimitive = require('@radix-ui/react-accordion');
19
19
  var SelectPrimitive = require('@radix-ui/react-select');
20
20
  var sonner = require('sonner');
21
+ var TabsPrimitive = require('@radix-ui/react-tabs');
21
22
  var QRCode = require('qrcode');
22
23
 
23
24
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -50,6 +51,7 @@ var SheetPrimitive__namespace = /*#__PURE__*/_interopNamespace(SheetPrimitive);
50
51
  var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
51
52
  var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
52
53
  var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
54
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
53
55
  var QRCode__default = /*#__PURE__*/_interopDefault(QRCode);
54
56
 
55
57
  // src/primitives/button.tsx
@@ -486,6 +488,7 @@ var ErrorBoundary = class extends React2__namespace.Component {
486
488
  }
487
489
  componentDidCatch(error, info) {
488
490
  console.error("[ErrorBoundary]", error, info);
491
+ this.props.onError?.(error, info);
489
492
  }
490
493
  render() {
491
494
  if (this.state.error) {
@@ -493,7 +496,7 @@ var ErrorBoundary = class extends React2__namespace.Component {
493
496
  return this.props.fallback(this.state.error, this.reset);
494
497
  }
495
498
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container py-16", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "terminal", children: [
496
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "terminal-title", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive flex items-center gap-1.5", children: "! fatal" }) }),
499
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "terminal-title", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive flex items-center gap-1.5", children: this.props.title ?? "! fatal" }) }),
497
500
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 p-5 font-mono text-xs leading-relaxed", children: [
498
501
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
499
502
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-destructive", children: [
@@ -505,7 +508,7 @@ var ErrorBoundary = class extends React2__namespace.Component {
505
508
  ] }),
506
509
  /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground", children: [
507
510
  "> ",
508
- "this page crashed. reload to recover."
511
+ this.props.message ?? "this page crashed. reload to recover."
509
512
  ] }),
510
513
  /* @__PURE__ */ jsxRuntime.jsx(
511
514
  "button",
@@ -1442,7 +1445,37 @@ var TONE = {
1442
1445
  primary: "text-primary",
1443
1446
  info: "text-info"
1444
1447
  };
1445
- function StatusPill({ label, tone = "muted", icon, className }) {
1448
+ var BORDER_TONE = {
1449
+ success: "border-success/40 text-success",
1450
+ warning: "border-warning/40 text-warning",
1451
+ destructive: "border-destructive/40 text-destructive",
1452
+ muted: "border-muted-foreground/40 text-muted-foreground",
1453
+ primary: "border-primary/40 text-primary",
1454
+ info: "border-info/40 text-info"
1455
+ };
1456
+ function StatusPill({
1457
+ label,
1458
+ tone = "muted",
1459
+ variant = "plain",
1460
+ icon,
1461
+ className
1462
+ }) {
1463
+ if (variant === "bordered") {
1464
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1465
+ "span",
1466
+ {
1467
+ className: cn(
1468
+ "inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-mono text-[9px] tracking-widest uppercase",
1469
+ BORDER_TONE[tone],
1470
+ className
1471
+ ),
1472
+ children: [
1473
+ icon,
1474
+ label
1475
+ ]
1476
+ }
1477
+ );
1478
+ }
1446
1479
  return /* @__PURE__ */ jsxRuntime.jsxs(
1447
1480
  "span",
1448
1481
  {
@@ -1458,6 +1491,60 @@ function StatusPill({ label, tone = "muted", icon, className }) {
1458
1491
  }
1459
1492
  );
1460
1493
  }
1494
+ function makeStatusPill(map, options) {
1495
+ const variant = options?.variant ?? "plain";
1496
+ const fallbackTone = options?.fallbackTone ?? "muted";
1497
+ function DomainStatusPill({ status, className }) {
1498
+ const spec = map[status];
1499
+ return /* @__PURE__ */ jsxRuntime.jsx(
1500
+ StatusPill,
1501
+ {
1502
+ tone: spec?.tone ?? fallbackTone,
1503
+ label: spec?.label ?? status,
1504
+ icon: spec?.icon,
1505
+ variant,
1506
+ className
1507
+ }
1508
+ );
1509
+ }
1510
+ return DomainStatusPill;
1511
+ }
1512
+ function Tabs({ ...props }) {
1513
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { "data-slot": "tabs", ...props });
1514
+ }
1515
+ function TabsList({ className, ...props }) {
1516
+ return /* @__PURE__ */ jsxRuntime.jsx(
1517
+ TabsPrimitive__namespace.List,
1518
+ {
1519
+ "data-slot": "tabs-list",
1520
+ className: cn("border-border -mb-px flex items-center gap-6 border-b", className),
1521
+ ...props
1522
+ }
1523
+ );
1524
+ }
1525
+ function TabsTrigger({ className, ...props }) {
1526
+ return /* @__PURE__ */ jsxRuntime.jsx(
1527
+ TabsPrimitive__namespace.Trigger,
1528
+ {
1529
+ "data-slot": "tabs-trigger",
1530
+ className: cn(
1531
+ "text-muted-foreground hover:text-foreground data-[state=active]:text-primary data-[state=active]:border-primary -mb-px border-b-2 border-transparent py-2 font-mono text-[11px] tracking-widest uppercase transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
1532
+ className
1533
+ ),
1534
+ ...props
1535
+ }
1536
+ );
1537
+ }
1538
+ function TabsContent({ className, ...props }) {
1539
+ return /* @__PURE__ */ jsxRuntime.jsx(
1540
+ TabsPrimitive__namespace.Content,
1541
+ {
1542
+ "data-slot": "tabs-content",
1543
+ className: cn("mt-4 outline-none", className),
1544
+ ...props
1545
+ }
1546
+ );
1547
+ }
1461
1548
 
1462
1549
  // src/format/index.ts
1463
1550
  var REFERENCE_BTC_USD = 95e3;
@@ -1662,6 +1749,10 @@ exports.Sparkline = Sparkline;
1662
1749
  exports.StatBlock = StatBlock;
1663
1750
  exports.StatusPill = StatusPill;
1664
1751
  exports.Switch = Switch;
1752
+ exports.Tabs = Tabs;
1753
+ exports.TabsContent = TabsContent;
1754
+ exports.TabsList = TabsList;
1755
+ exports.TabsTrigger = TabsTrigger;
1665
1756
  exports.Textarea = Textarea;
1666
1757
  exports.ThemeToggle = ThemeToggle;
1667
1758
  exports.ThemeToggleLink = ThemeToggleLink;
@@ -1671,6 +1762,7 @@ exports.WorkingPanel = WorkingPanel;
1671
1762
  exports.badgeVariants = badgeVariants;
1672
1763
  exports.buttonVariants = buttonVariants;
1673
1764
  exports.confirm = confirm;
1765
+ exports.makeStatusPill = makeStatusPill;
1674
1766
  exports.prompt = prompt;
1675
1767
  //# sourceMappingURL=primitives.js.map
1676
1768
  //# sourceMappingURL=primitives.js.map