@nous-research/ui 0.16.0 → 0.17.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.
Files changed (86) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/hooks/use-below-breakpoint.d.ts +2 -0
  3. package/dist/hooks/use-below-breakpoint.js +17 -0
  4. package/dist/hooks/use-confirm-delete.d.ts +10 -0
  5. package/dist/hooks/use-confirm-delete.js +35 -0
  6. package/dist/hooks/use-toast.d.ts +7 -0
  7. package/dist/hooks/use-toast.js +21 -0
  8. package/dist/index.d.ts +11 -1
  9. package/dist/index.js +23 -2
  10. package/dist/ui/components/bottom-sheet.d.ts +15 -0
  11. package/dist/ui/components/bottom-sheet.js +192 -0
  12. package/dist/ui/components/card.d.ts +5 -0
  13. package/dist/ui/components/card.js +74 -0
  14. package/dist/ui/components/checkbox.d.ts +1 -1
  15. package/dist/ui/components/checkbox.js +2 -2
  16. package/dist/ui/components/confirm-dialog.d.ts +13 -0
  17. package/dist/ui/components/confirm-dialog.js +113 -0
  18. package/dist/ui/components/dialog.d.ts +15 -0
  19. package/dist/ui/components/dialog.js +171 -0
  20. package/dist/ui/components/input.d.ts +1 -0
  21. package/dist/ui/components/input.js +21 -0
  22. package/dist/ui/components/label.d.ts +1 -0
  23. package/dist/ui/components/label.js +18 -0
  24. package/dist/ui/components/separator.d.ts +5 -0
  25. package/dist/ui/components/separator.js +22 -0
  26. package/dist/ui/components/toast.d.ts +8 -0
  27. package/dist/ui/components/toast.js +39 -0
  28. package/dist/ui/globals.css +14 -2
  29. package/package.json +2 -2
  30. package/src/hooks/use-below-breakpoint.ts +21 -0
  31. package/src/hooks/use-confirm-delete.ts +43 -0
  32. package/src/hooks/use-toast.ts +29 -0
  33. package/src/index.ts +22 -1
  34. package/src/ui/components/animated-count.stories.tsx +1 -1
  35. package/src/ui/components/ascii.stories.tsx +1 -1
  36. package/src/ui/components/badge.stories.tsx +1 -1
  37. package/src/ui/components/blend-mode.stories.tsx +1 -1
  38. package/src/ui/components/blink.stories.tsx +1 -1
  39. package/src/ui/components/bottom-sheet.stories.tsx +43 -0
  40. package/src/ui/components/bottom-sheet.tsx +227 -0
  41. package/src/ui/components/button.stories.tsx +1 -1
  42. package/src/ui/components/card.stories.tsx +63 -0
  43. package/src/ui/components/card.tsx +85 -0
  44. package/src/ui/components/checkbox.stories.tsx +1 -1
  45. package/src/ui/components/checkbox.tsx +1 -1
  46. package/src/ui/components/command-block.stories.tsx +1 -1
  47. package/src/ui/components/confirm-dialog.stories.tsx +91 -0
  48. package/src/ui/components/confirm-dialog.tsx +130 -0
  49. package/src/ui/components/dialog.stories.tsx +169 -0
  50. package/src/ui/components/dialog.tsx +177 -0
  51. package/src/ui/components/dropdown-menu.stories.tsx +1 -1
  52. package/src/ui/components/fit-text/index.stories.tsx +1 -1
  53. package/src/ui/components/forms.stories.tsx +173 -0
  54. package/src/ui/components/graphs/index.stories.tsx +1 -1
  55. package/src/ui/components/hover-bg.stories.tsx +1 -1
  56. package/src/ui/components/image-distortion.stories.tsx +1 -1
  57. package/src/ui/components/input.stories.tsx +39 -0
  58. package/src/ui/components/input.tsx +20 -0
  59. package/src/ui/components/label.stories.tsx +26 -0
  60. package/src/ui/components/label.tsx +16 -0
  61. package/src/ui/components/list-item.stories.tsx +1 -1
  62. package/src/ui/components/poster.stories.tsx +1 -1
  63. package/src/ui/components/progress.stories.tsx +1 -1
  64. package/src/ui/components/scramble.stories.tsx +1 -1
  65. package/src/ui/components/segmented.stories.tsx +1 -1
  66. package/src/ui/components/select.stories.tsx +1 -1
  67. package/src/ui/components/separator.stories.tsx +33 -0
  68. package/src/ui/components/separator.tsx +24 -0
  69. package/src/ui/components/spinner.stories.tsx +1 -1
  70. package/src/ui/components/stats.stories.tsx +1 -1
  71. package/src/ui/components/switch.stories.tsx +1 -1
  72. package/src/ui/components/tabs.stories.tsx +1 -1
  73. package/src/ui/components/terminal-demo.stories.tsx +1 -1
  74. package/src/ui/components/theme-toggle.stories.tsx +1 -1
  75. package/src/ui/components/tier-card.stories.tsx +1 -1
  76. package/src/ui/components/toast.stories.tsx +55 -0
  77. package/src/ui/components/toast.tsx +49 -0
  78. package/src/ui/components/tv.stories.tsx +1 -1
  79. package/src/ui/components/watchlist.stories.tsx +1 -1
  80. package/src/ui/globals.css +14 -2
  81. package/dist/ui/components/modal/index.d.ts +0 -8
  82. package/dist/ui/components/modal/index.js +0 -35
  83. package/dist/ui/components/modal/modal.css +0 -36
  84. package/src/ui/components/modal/index.stories.tsx +0 -46
  85. package/src/ui/components/modal/index.tsx +0 -48
  86. package/src/ui/components/modal/modal.css +0 -36
@@ -1,2 +1,2 @@
1
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
1
+ import { Checkbox as CheckboxPrimitive } from 'radix-ui';
2
2
  export declare const Checkbox: import("react").ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
4
3
  import { forwardRef } from "react";
4
+ import { Checkbox as CheckboxPrimitive } from "radix-ui";
5
5
  import { cn } from "../../utils/index.js";
6
6
  import { CheckIcon } from "./icons/check.js";
7
7
  export const Checkbox = forwardRef(function Checkbox2({ className, ...props }, ref) {
@@ -24,4 +24,4 @@ export const Checkbox = forwardRef(function Checkbox2({ className, ...props }, r
24
24
  }
25
25
  );
26
26
  });
27
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IGZvcndhcmRSZWYsIHR5cGUgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmLCB0eXBlIEVsZW1lbnRSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnLi9pY29ucy9jaGVjaydcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94ID0gZm9yd2FyZFJlZjxcbiAgRWxlbWVudFJlZjx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4sXG4gIENoZWNrYm94UHJvcHNcbj4oZnVuY3Rpb24gQ2hlY2tib3goeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncGVlciBmbGV4IGgtNCB3LTQgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlciB0cmFuc2l0aW9uLWNvbG9ycyBvdXRsaW5lLW5vbmUnLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLTEgZm9jdXMtdmlzaWJsZTpyaW5nLW1pZGdyb3VuZC8zMCcsXG4gICAgICAgICdkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAgICdkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOmJvcmRlci1taWRncm91bmQvMjAgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTpiZy1iYWNrZ3JvdW5kJyxcbiAgICAgICAgJ2RhdGEtW3N0YXRlPXVuY2hlY2tlZF06aG92ZXI6Ym9yZGVyLW1pZGdyb3VuZC8zMCcsXG4gICAgICAgICdkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItbWlkZ3JvdW5kLzMwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLW1pZGdyb3VuZC8xNScsXG4gICAgICAgICdkYXRhLVtzdGF0ZT1pbmRldGVybWluYXRlXTpib3JkZXItbWlkZ3JvdW5kLzMwIGRhdGEtW3N0YXRlPWluZGV0ZXJtaW5hdGVdOmJnLW1pZGdyb3VuZC8xNScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHJlZj17cmVmfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3IgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50XCI+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwiaC0zIHctMyB0ZXh0LW1pZGdyb3VuZFwiIC8+XG4gICAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4gIClcbn0pXG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IENvbXBvbmVudFByb3BzV2l0aG91dFJlZjx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cbiJdLAogICJtYXBwaW5ncyI6ICI7QUE2QlE7QUEzQlIsWUFBWSx1QkFBdUI7QUFDbkMsU0FBUyxrQkFBa0U7QUFFM0UsU0FBUyxVQUFVO0FBRW5CLFNBQVMsaUJBQWlCO0FBRW5CLGFBQU0sV0FBVyxXQUd0QixTQUFTQSxVQUFTLEVBQUUsV0FBVyxHQUFHLE1BQU0sR0FBRyxLQUFLO0FBQ2hELFNBQ0U7QUFBQSxJQUFDLGtCQUFrQjtBQUFBLElBQWxCO0FBQUEsTUFDQyxXQUFXO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLE1BQ0MsR0FBRztBQUFBLE1BRUosOEJBQUMsa0JBQWtCLFdBQWxCLEVBQTRCLFdBQVUsaURBQ3JDLDhCQUFDLGFBQVUsV0FBVSwwQkFBeUIsR0FDaEQ7QUFBQTtBQUFBLEVBQ0Y7QUFFSixDQUFDOyIsCiAgIm5hbWVzIjogWyJDaGVja2JveCJdCn0K
27
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGZvcndhcmRSZWYsIHR5cGUgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmLCB0eXBlIEVsZW1lbnRSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENoZWNrYm94IGFzIENoZWNrYm94UHJpbWl0aXZlIH0gZnJvbSAncmFkaXgtdWknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5cbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJy4vaWNvbnMvY2hlY2snXG5cbmV4cG9ydCBjb25zdCBDaGVja2JveCA9IGZvcndhcmRSZWY8XG4gIEVsZW1lbnRSZWY8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+LFxuICBDaGVja2JveFByb3BzXG4+KGZ1bmN0aW9uIENoZWNrYm94KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgZmxleCBoLTQgdy00IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIgdHJhbnNpdGlvbi1jb2xvcnMgb3V0bGluZS1ub25lJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy0xIGZvY3VzLXZpc2libGU6cmluZy1taWRncm91bmQvMzAnLFxuICAgICAgICAnZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICAnZGF0YS1bc3RhdGU9dW5jaGVja2VkXTpib3JkZXItbWlkZ3JvdW5kLzIwIGRhdGEtW3N0YXRlPXVuY2hlY2tlZF06YmctYmFja2dyb3VuZCcsXG4gICAgICAgICdkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOmhvdmVyOmJvcmRlci1taWRncm91bmQvMzAnLFxuICAgICAgICAnZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLW1pZGdyb3VuZC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1taWRncm91bmQvMTUnLFxuICAgICAgICAnZGF0YS1bc3RhdGU9aW5kZXRlcm1pbmF0ZV06Ym9yZGVyLW1pZGdyb3VuZC8zMCBkYXRhLVtzdGF0ZT1pbmRldGVybWluYXRlXTpiZy1taWRncm91bmQvMTUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICByZWY9e3JlZn1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY3VycmVudFwiPlxuICAgICAgICA8Q2hlY2tJY29uIGNsYXNzTmFtZT1cImgtMyB3LTMgdGV4dC1taWRncm91bmRcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59KVxuXG50eXBlIENoZWNrYm94UHJvcHMgPSBDb21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBNkJRO0FBM0JSLFNBQVMsa0JBQWtFO0FBQzNFLFNBQVMsWUFBWSx5QkFBeUI7QUFFOUMsU0FBUyxVQUFVO0FBRW5CLFNBQVMsaUJBQWlCO0FBRW5CLGFBQU0sV0FBVyxXQUd0QixTQUFTQSxVQUFTLEVBQUUsV0FBVyxHQUFHLE1BQU0sR0FBRyxLQUFLO0FBQ2hELFNBQ0U7QUFBQSxJQUFDLGtCQUFrQjtBQUFBLElBQWxCO0FBQUEsTUFDQyxXQUFXO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLE1BQ0MsR0FBRztBQUFBLE1BRUosOEJBQUMsa0JBQWtCLFdBQWxCLEVBQTRCLFdBQVUsaURBQ3JDLDhCQUFDLGFBQVUsV0FBVSwwQkFBeUIsR0FDaEQ7QUFBQTtBQUFBLEVBQ0Y7QUFFSixDQUFDOyIsCiAgIm5hbWVzIjogWyJDaGVja2JveCJdCn0K
@@ -0,0 +1,13 @@
1
+ export declare function ConfirmDialog({ cancelLabel, confirmLabel, description, destructive, loading, onCancel, onConfirm, open, title }: ConfirmDialogProps): import("react").JSX.Element;
2
+ interface ConfirmDialogProps {
3
+ cancelLabel?: string;
4
+ confirmLabel?: string;
5
+ description?: string;
6
+ destructive?: boolean;
7
+ loading?: boolean;
8
+ onCancel: () => void;
9
+ onConfirm: () => void;
10
+ open: boolean;
11
+ title: string;
12
+ }
13
+ export {};
@@ -0,0 +1,113 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useRef } from "react";
4
+ import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
5
+ import { cn } from "../../utils/index.js";
6
+ import { Button } from "./button.js";
7
+ function WarningTriangle({ className }) {
8
+ return /* @__PURE__ */ jsxs(
9
+ "svg",
10
+ {
11
+ "aria-hidden": true,
12
+ className,
13
+ fill: "none",
14
+ stroke: "currentColor",
15
+ strokeLinecap: "round",
16
+ strokeLinejoin: "round",
17
+ strokeWidth: 2,
18
+ viewBox: "0 0 24 24",
19
+ children: [
20
+ /* @__PURE__ */ jsx("path", { d: "m10.29 3.86-8.16 14a2 2 0 0 0 1.73 3h16.28a2 2 0 0 0 1.73-3l-8.16-14a2 2 0 0 0-3.46 0z" }),
21
+ /* @__PURE__ */ jsx("line", { x1: "12", x2: "12", y1: "9", y2: "13" }),
22
+ /* @__PURE__ */ jsx("line", { x1: "12", x2: "12.01", y1: "17", y2: "17" })
23
+ ]
24
+ }
25
+ );
26
+ }
27
+ export function ConfirmDialog({
28
+ cancelLabel = "Cancel",
29
+ confirmLabel = "Confirm",
30
+ description,
31
+ destructive = false,
32
+ loading = false,
33
+ onCancel,
34
+ onConfirm,
35
+ open,
36
+ title
37
+ }) {
38
+ const confirmedRef = useRef(false);
39
+ return /* @__PURE__ */ jsx(
40
+ AlertDialogPrimitive.Root,
41
+ {
42
+ onOpenChange: (v) => {
43
+ if (!v && !confirmedRef.current) onCancel();
44
+ confirmedRef.current = false;
45
+ },
46
+ open,
47
+ children: /* @__PURE__ */ jsxs(AlertDialogPrimitive.Portal, { children: [
48
+ /* @__PURE__ */ jsx(
49
+ AlertDialogPrimitive.Overlay,
50
+ {
51
+ className: cn(
52
+ "fixed inset-0 z-50",
53
+ "bg-black/60 backdrop-blur-sm",
54
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
55
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0"
56
+ )
57
+ }
58
+ ),
59
+ /* @__PURE__ */ jsxs(
60
+ AlertDialogPrimitive.Content,
61
+ {
62
+ className: cn(
63
+ "fixed top-1/2 left-1/2 z-50 -translate-x-1/2 -translate-y-1/2",
64
+ "w-[calc(100%-2rem)] max-w-md",
65
+ "border border-midground/15 bg-background-base text-foreground-base shadow-lg outline-none",
66
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
67
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
68
+ "duration-150"
69
+ ),
70
+ children: [
71
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3 p-4 border-b border-midground/15", children: [
72
+ destructive && /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "mt-0.5 shrink-0 text-destructive", children: /* @__PURE__ */ jsx(WarningTriangle, { className: "h-4 w-4" }) }),
73
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 flex flex-col gap-1", children: [
74
+ /* @__PURE__ */ jsx(
75
+ AlertDialogPrimitive.Title,
76
+ {
77
+ className: "font-expanded text-sm font-bold tracking-[0.08em] uppercase",
78
+ children: title
79
+ }
80
+ ),
81
+ description && /* @__PURE__ */ jsx(
82
+ AlertDialogPrimitive.Description,
83
+ {
84
+ className: "font-mondwest text-xs text-midground/60 leading-relaxed",
85
+ children: description
86
+ }
87
+ )
88
+ ] })
89
+ ] }),
90
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2 p-3", children: [
91
+ /* @__PURE__ */ jsx(AlertDialogPrimitive.Cancel, { asChild: true, children: /* @__PURE__ */ jsx(Button, { disabled: loading, outlined: true, type: "button", children: cancelLabel }) }),
92
+ /* @__PURE__ */ jsx(AlertDialogPrimitive.Action, { asChild: true, children: /* @__PURE__ */ jsx(
93
+ Button,
94
+ {
95
+ destructive,
96
+ disabled: loading,
97
+ onClick: () => {
98
+ confirmedRef.current = true;
99
+ onConfirm();
100
+ },
101
+ type: "button",
102
+ children: loading ? "\u2026" : confirmLabel
103
+ }
104
+ ) })
105
+ ] })
106
+ ]
107
+ }
108
+ )
109
+ ] })
110
+ }
111
+ );
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxlcnREaWFsb2cgYXMgQWxlcnREaWFsb2dQcmltaXRpdmUgfSBmcm9tICdyYWRpeC11aSdcblxuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vYnV0dG9uJ1xuXG5mdW5jdGlvbiBXYXJuaW5nVHJpYW5nbGUoeyBjbGFzc05hbWUgfTogeyBjbGFzc05hbWU/OiBzdHJpbmcgfSkge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGFyaWEtaGlkZGVuXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgID5cbiAgICAgIDxwYXRoIGQ9XCJtMTAuMjkgMy44Ni04LjE2IDE0YTIgMiAwIDAgMCAxLjczIDNoMTYuMjhhMiAyIDAgMCAwIDEuNzMtM2wtOC4xNi0xNGEyIDIgMCAwIDAtMy40NiAwelwiIC8+XG4gICAgICA8bGluZSB4MT1cIjEyXCIgeDI9XCIxMlwiIHkxPVwiOVwiIHkyPVwiMTNcIiAvPlxuICAgICAgPGxpbmUgeDE9XCIxMlwiIHgyPVwiMTIuMDFcIiB5MT1cIjE3XCIgeTI9XCIxN1wiIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1EaWFsb2coe1xuICBjYW5jZWxMYWJlbCA9ICdDYW5jZWwnLFxuICBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsXG4gIGRlc2NyaXB0aW9uLFxuICBkZXN0cnVjdGl2ZSA9IGZhbHNlLFxuICBsb2FkaW5nID0gZmFsc2UsXG4gIG9uQ2FuY2VsLFxuICBvbkNvbmZpcm0sXG4gIG9wZW4sXG4gIHRpdGxlXG59OiBDb25maXJtRGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgY29uZmlybWVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHJldHVybiAoXG4gICAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlJvb3RcbiAgICAgIG9uT3BlbkNoYW5nZT17diA9PiB7XG4gICAgICAgIGlmICghdiAmJiAhY29uZmlybWVkUmVmLmN1cnJlbnQpIG9uQ2FuY2VsKClcbiAgICAgICAgY29uZmlybWVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfX1cbiAgICAgIG9wZW49e29wZW59XG4gICAgPlxuICAgICAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgICAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZpeGVkIGluc2V0LTAgei01MCcsXG4gICAgICAgICAgICAnYmctYmxhY2svNjAgYmFja2Ryb3AtYmx1ci1zbScsXG4gICAgICAgICAgICAnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAnLFxuICAgICAgICAgICAgJ2RhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wJ1xuICAgICAgICAgICl9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPEFsZXJ0RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZpeGVkIHRvcC0xLzIgbGVmdC0xLzIgei01MCAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzInLFxuICAgICAgICAgICAgJ3ctW2NhbGMoMTAwJS0ycmVtKV0gbWF4LXctbWQnLFxuICAgICAgICAgICAgJ2JvcmRlciBib3JkZXItbWlkZ3JvdW5kLzE1IGJnLWJhY2tncm91bmQtYmFzZSB0ZXh0LWZvcmVncm91bmQtYmFzZSBzaGFkb3ctbGcgb3V0bGluZS1ub25lJyxcbiAgICAgICAgICAgICdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1JyxcbiAgICAgICAgICAgICdkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1JyxcbiAgICAgICAgICAgICdkdXJhdGlvbi0xNTAnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBnYXAtMyBwLTQgYm9yZGVyLWIgYm9yZGVyLW1pZGdyb3VuZC8xNVwiPlxuICAgICAgICAgICAge2Rlc3RydWN0aXZlICYmIChcbiAgICAgICAgICAgICAgPGRpdiBhcmlhLWhpZGRlbiBjbGFzc05hbWU9XCJtdC0wLjUgc2hyaW5rLTAgdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxXYXJuaW5nVHJpYW5nbGUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMCBmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgIDxBbGVydERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtZXhwYW5kZWQgdGV4dC1zbSBmb250LWJvbGQgdHJhY2tpbmctWzAuMDhlbV0gdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgPC9BbGVydERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT5cblxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgICAgIDxBbGVydERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1tb25kd2VzdCB0ZXh0LXhzIHRleHQtbWlkZ3JvdW5kLzYwIGxlYWRpbmctcmVsYXhlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgIDwvQWxlcnREaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgcC0zXCI+XG4gICAgICAgICAgICA8QWxlcnREaWFsb2dQcmltaXRpdmUuQ2FuY2VsIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgIDxCdXR0b24gZGlzYWJsZWQ9e2xvYWRpbmd9IG91dGxpbmVkIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICB7Y2FuY2VsTGFiZWx9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9BbGVydERpYWxvZ1ByaW1pdGl2ZS5DYW5jZWw+XG5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ1ByaW1pdGl2ZS5BY3Rpb24gYXNDaGlsZD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGRlc3RydWN0aXZlPXtkZXN0cnVjdGl2ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25maXJtZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIG9uQ29uZmlybSgpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsb2FkaW5nID8gJ1x1MjAyNicgOiBjb25maXJtTGFiZWx9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9BbGVydERpYWxvZ1ByaW1pdGl2ZS5BY3Rpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvQWxlcnREaWFsb2dQcmltaXRpdmUuQ29udGVudD5cbiAgICAgIDwvQWxlcnREaWFsb2dQcmltaXRpdmUuUG9ydGFsPlxuICAgIDwvQWxlcnREaWFsb2dQcmltaXRpdmUuUm9vdD5cbiAgKVxufVxuXG5pbnRlcmZhY2UgQ29uZmlybURpYWxvZ1Byb3BzIHtcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmdcbiAgY29uZmlybUxhYmVsPzogc3RyaW5nXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIGRlc3RydWN0aXZlPzogYm9vbGVhblxuICBsb2FkaW5nPzogYm9vbGVhblxuICBvbkNhbmNlbDogKCkgPT4gdm9pZFxuICBvbkNvbmZpcm06ICgpID0+IHZvaWRcbiAgb3BlbjogYm9vbGVhblxuICB0aXRsZTogc3RyaW5nXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBVUksU0FVRSxLQVZGO0FBUkosU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsZUFBZSw0QkFBNEI7QUFFcEQsU0FBUyxVQUFVO0FBQ25CLFNBQVMsY0FBYztBQUV2QixTQUFTLGdCQUFnQixFQUFFLFVBQVUsR0FBMkI7QUFDOUQsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsZUFBVztBQUFBLE1BQ1g7QUFBQSxNQUNBLE1BQUs7QUFBQSxNQUNMLFFBQU87QUFBQSxNQUNQLGVBQWM7QUFBQSxNQUNkLGdCQUFlO0FBQUEsTUFDZixh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
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { Dialog as DialogPrimitive } from 'radix-ui';
3
+ declare function Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
4
+ declare function DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>): React.JSX.Element;
5
+ declare function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>): React.JSX.Element;
6
+ declare function DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>): React.JSX.Element;
7
+ declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.JSX.Element;
8
+ declare function DialogContent({ className, children, showCloseButton, ...props }: React.ComponentProps<typeof DialogPrimitive.Content> & {
9
+ showCloseButton?: boolean;
10
+ }): React.JSX.Element;
11
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
12
+ declare function DialogFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
13
+ declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.JSX.Element;
14
+ declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.JSX.Element;
15
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
@@ -0,0 +1,171 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Dialog as DialogPrimitive } from "radix-ui";
4
+ import { cn } from "../../utils/index.js";
5
+ function Dialog({ ...props }) {
6
+ return /* @__PURE__ */ jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
7
+ }
8
+ function DialogTrigger({ ...props }) {
9
+ return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
10
+ }
11
+ function DialogPortal({ ...props }) {
12
+ return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
13
+ }
14
+ function DialogClose({ ...props }) {
15
+ return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
16
+ }
17
+ function DialogOverlay({
18
+ className,
19
+ ...props
20
+ }) {
21
+ return /* @__PURE__ */ jsx(
22
+ DialogPrimitive.Overlay,
23
+ {
24
+ className: cn(
25
+ "fixed inset-0 z-50",
26
+ "bg-black/60 backdrop-blur-sm",
27
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
28
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
29
+ className
30
+ ),
31
+ "data-slot": "dialog-overlay",
32
+ ...props
33
+ }
34
+ );
35
+ }
36
+ function DialogContent({
37
+ className,
38
+ children,
39
+ showCloseButton = true,
40
+ ...props
41
+ }) {
42
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [
43
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
44
+ /* @__PURE__ */ jsxs(
45
+ DialogPrimitive.Content,
46
+ {
47
+ className: cn(
48
+ "fixed top-1/2 left-1/2 z-50 -translate-x-1/2 -translate-y-1/2",
49
+ "grid w-full max-w-md gap-0",
50
+ "border border-midground/15 bg-background-base text-foreground-base shadow-lg outline-none",
51
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
52
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
53
+ "duration-150",
54
+ className
55
+ ),
56
+ "data-slot": "dialog-content",
57
+ ...props,
58
+ children: [
59
+ children,
60
+ showCloseButton && /* @__PURE__ */ jsxs(
61
+ DialogPrimitive.Close,
62
+ {
63
+ className: cn(
64
+ "absolute top-3 right-3",
65
+ "flex h-6 w-6 items-center justify-center",
66
+ "text-midground/50 transition-colors hover:text-midground",
67
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-midground/30",
68
+ "disabled:pointer-events-none"
69
+ ),
70
+ "data-slot": "dialog-close",
71
+ children: [
72
+ /* @__PURE__ */ jsx(XIcon, { className: "h-3.5 w-3.5" }),
73
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
74
+ ]
75
+ }
76
+ )
77
+ ]
78
+ }
79
+ )
80
+ ] });
81
+ }
82
+ function DialogHeader({ className, ...props }) {
83
+ return /* @__PURE__ */ jsx(
84
+ "div",
85
+ {
86
+ className: cn(
87
+ "flex flex-col gap-1 p-4 border-b border-midground/15",
88
+ className
89
+ ),
90
+ "data-slot": "dialog-header",
91
+ ...props
92
+ }
93
+ );
94
+ }
95
+ function DialogFooter({ className, ...props }) {
96
+ return /* @__PURE__ */ jsx(
97
+ "div",
98
+ {
99
+ className: cn(
100
+ "flex items-center justify-end gap-2 p-3",
101
+ className
102
+ ),
103
+ "data-slot": "dialog-footer",
104
+ ...props
105
+ }
106
+ );
107
+ }
108
+ function DialogTitle({
109
+ className,
110
+ ...props
111
+ }) {
112
+ return /* @__PURE__ */ jsx(
113
+ DialogPrimitive.Title,
114
+ {
115
+ className: cn(
116
+ "font-expanded text-sm font-bold tracking-[0.08em] uppercase",
117
+ className
118
+ ),
119
+ "data-slot": "dialog-title",
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ function DialogDescription({
125
+ className,
126
+ ...props
127
+ }) {
128
+ return /* @__PURE__ */ jsx(
129
+ DialogPrimitive.Description,
130
+ {
131
+ className: cn(
132
+ "font-mondwest text-xs text-midground/60 leading-relaxed",
133
+ className
134
+ ),
135
+ "data-slot": "dialog-description",
136
+ ...props
137
+ }
138
+ );
139
+ }
140
+ function XIcon({ className }) {
141
+ return /* @__PURE__ */ jsxs(
142
+ "svg",
143
+ {
144
+ "aria-hidden": true,
145
+ className,
146
+ fill: "none",
147
+ stroke: "currentColor",
148
+ strokeLinecap: "round",
149
+ strokeLinejoin: "round",
150
+ strokeWidth: 2,
151
+ viewBox: "0 0 24 24",
152
+ children: [
153
+ /* @__PURE__ */ jsx("line", { x1: "18", x2: "6", y1: "6", y2: "18" }),
154
+ /* @__PURE__ */ jsx("line", { x1: "6", x2: "18", y1: "6", y2: "18" })
155
+ ]
156
+ }
157
+ );
158
+ }
159
+ export {
160
+ Dialog,
161
+ DialogClose,
162
+ DialogContent,
163
+ DialogDescription,
164
+ DialogFooter,
165
+ DialogHeader,
166
+ DialogOverlay,
167
+ DialogPortal,
168
+ DialogTitle,
169
+ DialogTrigger
170
+ };
171
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRGlhbG9nIGFzIERpYWxvZ1ByaW1pdGl2ZSB9IGZyb20gJ3JhZGl4LXVpJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coeyAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHsgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoeyAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHsgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpeGVkIGluc2V0LTAgei01MCcsXG4gICAgICAgICdiZy1ibGFjay82MCBiYWNrZHJvcC1ibHVyLXNtJyxcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wJyxcbiAgICAgICAgJ2RhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHNob3dDbG9zZUJ1dHRvbiA9IHRydWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+ICYge1xuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuXG59KSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1BvcnRhbD5cbiAgICAgIDxEaWFsb2dPdmVybGF5IC8+XG5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmaXhlZCB0b3AtMS8yIGxlZnQtMS8yIHotNTAgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yJyxcbiAgICAgICAgICAnZ3JpZCB3LWZ1bGwgbWF4LXctbWQgZ2FwLTAnLFxuICAgICAgICAgICdib3JkZXIgYm9yZGVyLW1pZGdyb3VuZC8xNSBiZy1iYWNrZ3JvdW5kLWJhc2UgdGV4dC1mb3JlZ3JvdW5kLWJhc2Ugc2hhZG93LWxnIG91dGxpbmUtbm9uZScsXG4gICAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUnLFxuICAgICAgICAgICdkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1JyxcbiAgICAgICAgICAnZHVyYXRpb24tMTUwJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cblxuICAgICAgICB7c2hvd0Nsb3NlQnV0dG9uICYmIChcbiAgICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnYWJzb2x1dGUgdG9wLTMgcmlnaHQtMycsXG4gICAgICAgICAgICAgICdmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgICAgICAgICAgJ3RleHQtbWlkZ3JvdW5kLzUwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOnRleHQtbWlkZ3JvdW5kJyxcbiAgICAgICAgICAgICAgJ2ZvY3VzOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMSBmb2N1cy12aXNpYmxlOnJpbmctbWlkZ3JvdW5kLzMwJyxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8WEljb24gY2xhc3NOYW1lPVwiaC0zLjUgdy0zLjVcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuICAgICAgICApfVxuICAgICAgPC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L0RpYWxvZ1BvcnRhbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGZsZXgtY29sIGdhcC0xIHAtNCBib3JkZXItYiBib3JkZXItbWlkZ3JvdW5kLzE1JyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMiBwLTMnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZm9udC1leHBhbmRlZCB0ZXh0LXNtIGZvbnQtYm9sZCB0cmFja2luZy1bMC4wOGVtXSB1cHBlcmNhc2UnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmb250LW1vbmR3ZXN0IHRleHQteHMgdGV4dC1taWRncm91bmQvNjAgbGVhZGluZy1yZWxheGVkJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFhJY29uKHsgY2xhc3NOYW1lIH06IHsgY2xhc3NOYW1lPzogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICBhcmlhLWhpZGRlblxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICA+XG4gICAgICA8bGluZSB4MT1cIjE4XCIgeDI9XCI2XCIgeTE9XCI2XCIgeTI9XCIxOFwiIC8+XG4gICAgICA8bGluZSB4MT1cIjZcIiB4Mj1cIjE4XCIgeTE9XCI2XCIgeTI9XCIxOFwiIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBUVMsY0E4REMsWUE5REQ7QUFMVCxTQUFTLFVBQVUsdUJBQXVCO0FBRTFDLFNBQVMsVUFBVTtBQUVuQixTQUFTLE9BQU8sRUFBRSxHQUFHLE1BQU0sR0FBc0Q7QUFDL0UsU0FBTyxvQkFBQyxnQkFBZ0IsTUFBaEIsRUFBcUIsYUFBVSxVQUFVLEdBQUcsT0FBTztBQUM3RDtBQUVBLFNBQVMsY0FBYyxFQUFFLEdBQUcsTUFBTSxHQUF5RDtBQUN6RixTQUFPLG9CQUFDLGdCQUFnQixTQUFoQixFQUF3QixhQUFVLGtCQUFrQixHQUFHLE9BQU87QUFDeEU7QUFFQSxTQUFTLGFBQWEsRUFBRSxHQUFHLE1BQU0sR0FBd0Q7QUFDdkYsU0FBTyxvQkFBQyxnQkFBZ0IsUUFBaEIsRUFBdUIsYUFBVSxpQkFBaUIsR0FBRyxPQUFPO0FBQ3RFO0FBRUEsU0FBUyxZQUFZLEVBQUUsR0FBRyxNQUFNLEdBQXVEO0FBQ3JGLFNBQU8sb0JBQUMsZ0JBQWdCLE9BQWhCLEVBQXNCLGFBQVUsZ0JBQWdCLEdBQUcsT0FBTztBQUNwRTtBQUVBLFNBQVMsY0FBYztBQUFBLEVBQ3JCO0FBQUEsRUFDQSxHQUFHO0FBQ0wsR0FBeUQ7QUFDdkQsU0FDRTtBQUFBLElBQUMsZ0JBQWdCO0FBQUEsSUFBaEI7QUFBQSxNQUNDLFdB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
@@ -0,0 +1 @@
1
+ export declare function Input({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/index.js";
3
+ export function Input({
4
+ className,
5
+ ...props
6
+ }) {
7
+ return /* @__PURE__ */ jsx(
8
+ "input",
9
+ {
10
+ className: cn(
11
+ "flex h-9 w-full border border-midground/15 bg-background/40 px-3 py-1 font-courier text-sm transition-colors",
12
+ "placeholder:text-midground/50",
13
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-midground/30 focus-visible:border-midground/25",
14
+ "disabled:cursor-not-allowed disabled:opacity-50",
15
+ className
16
+ ),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSW5wdXRIVE1MQXR0cmlidXRlczxIVE1MSW5wdXRFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaC05IHctZnVsbCBib3JkZXIgYm9yZGVyLW1pZGdyb3VuZC8xNSBiZy1iYWNrZ3JvdW5kLzQwIHB4LTMgcHktMSBmb250LWNvdXJpZXIgdGV4dC1zbSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICdwbGFjZWhvbGRlcjp0ZXh0LW1pZGdyb3VuZC81MCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMSBmb2N1cy12aXNpYmxlOnJpbmctbWlkZ3JvdW5kLzMwIGZvY3VzLXZpc2libGU6Ym9yZGVyLW1pZGdyb3VuZC8yNScsXG4gICAgICAgICdkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbiJdLAogICJtYXBwaW5ncyI6ICJBQU9JO0FBUEosU0FBUyxVQUFVO0FBRVosZ0JBQVMsTUFBTTtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxHQUFHO0FBQ0wsR0FBZ0Q7QUFDOUMsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLE1BQ0MsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1 @@
1
+ export declare function Label({ className, ...props }: React.LabelHTMLAttributes<HTMLLabelElement>): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/index.js";
3
+ export function Label({
4
+ className,
5
+ ...props
6
+ }) {
7
+ return /* @__PURE__ */ jsx(
8
+ "label",
9
+ {
10
+ className: cn(
11
+ "font-mondwest text-xs tracking-[0.1em] uppercase leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
12
+ className
13
+ ),
14
+ ...props
15
+ }
16
+ );
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuTGFiZWxIVE1MQXR0cmlidXRlczxIVE1MTGFiZWxFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZvbnQtbW9uZHdlc3QgdGV4dC14cyB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSBsZWFkaW5nLW5vbmUgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTcwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU9JO0FBUEosU0FBUyxVQUFVO0FBRVosZ0JBQVMsTUFBTTtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxHQUFHO0FBQ0wsR0FBZ0Q7QUFDOUMsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLE1BQ0MsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,5 @@
1
+ export declare function Separator({ className, orientation, ...props }: SeparatorProps): import("react").JSX.Element;
2
+ interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ orientation?: 'horizontal' | 'vertical';
4
+ }
5
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/index.js";
3
+ export function Separator({
4
+ className,
5
+ orientation = "horizontal",
6
+ ...props
7
+ }) {
8
+ return /* @__PURE__ */ jsx(
9
+ "div",
10
+ {
11
+ "aria-orientation": orientation,
12
+ role: "separator",
13
+ className: cn(
14
+ "shrink-0 bg-midground/15",
15
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIFNlcGFyYXRvcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG4gIC4uLnByb3BzXG59OiBTZXBhcmF0b3JQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGFyaWEtb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnc2hyaW5rLTAgYmctbWlkZ3JvdW5kLzE1JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdoLXB4IHctZnVsbCcgOiAnaC1mdWxsIHctcHgnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5pbnRlcmZhY2UgU2VwYXJhdG9yUHJvcHMgZXh0ZW5kcyBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4ge1xuICBvcmllbnRhdGlvbj86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQVFJO0FBUkosU0FBUyxVQUFVO0FBRVosZ0JBQVMsVUFBVTtBQUFBLEVBQ3hCO0FBQUEsRUFDQSxjQUFjO0FBQUEsRUFDZCxHQUFHO0FBQ0wsR0FBbUI7QUFDakIsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0Msb0JBQWtCO0FBQUEsTUFDbEIsTUFBSztBQUFBLE1BQ0wsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBLGdCQUFnQixlQUFlLGdCQUFnQjtBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUFBLE1BQ0MsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,8 @@
1
+ export declare function Toast({ toast }: ToastProps): import("react").ReactPortal | null;
2
+ interface ToastProps {
3
+ toast: {
4
+ message: string;
5
+ type: 'error' | 'success';
6
+ } | null;
7
+ }
8
+ export {};
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useEffect, useState } from "react";
4
+ import { createPortal } from "react-dom";
5
+ import { cn } from "../../utils/index.js";
6
+ export function Toast({ toast }) {
7
+ const [visible, setVisible] = useState(false);
8
+ const [current, setCurrent] = useState(toast);
9
+ useEffect(() => {
10
+ if (toast) {
11
+ setCurrent(toast);
12
+ setVisible(true);
13
+ } else {
14
+ setVisible(false);
15
+ const timer = setTimeout(() => setCurrent(null), 200);
16
+ return () => clearTimeout(timer);
17
+ }
18
+ }, [toast]);
19
+ if (!current || typeof document === "undefined") return null;
20
+ return createPortal(
21
+ /* @__PURE__ */ jsx(
22
+ "div",
23
+ {
24
+ "aria-live": "polite",
25
+ className: cn(
26
+ "fixed top-16 right-4 z-50 border px-4 py-2.5 font-courier text-xs tracking-wider uppercase backdrop-blur-sm",
27
+ current.type === "success" ? "bg-success/15 text-success border-success/30" : "bg-destructive/15 text-destructive border-destructive/30"
28
+ ),
29
+ role: "status",
30
+ style: {
31
+ animation: visible ? "toast-in 200ms ease-out forwards" : "toast-out 200ms ease-in forwards"
32
+ },
33
+ children: current.message
34
+ }
35
+ ),
36
+ document.body
37
+ );
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcblxuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIFRvYXN0KHsgdG9hc3QgfTogVG9hc3RQcm9wcykge1xuICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2N1cnJlbnQsIHNldEN1cnJlbnRdID0gdXNlU3RhdGUodG9hc3QpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodG9hc3QpIHtcbiAgICAgIHNldEN1cnJlbnQodG9hc3QpXG4gICAgICBzZXRWaXNpYmxlKHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gc2V0Q3VycmVudChudWxsKSwgMjAwKVxuICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcilcbiAgICB9XG4gIH0sIFt0b2FzdF0pXG5cbiAgaWYgKCFjdXJyZW50IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8ZGl2XG4gICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpeGVkIHRvcC0xNiByaWdodC00IHotNTAgYm9yZGVyIHB4LTQgcHktMi41IGZvbnQtY291cmllciB0ZXh0LXhzIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSBiYWNrZHJvcC1ibHVyLXNtJyxcbiAgICAgICAgY3VycmVudC50eXBlID09PSAnc3VjY2VzcydcbiAgICAgICAgICA/ICdiZy1zdWNjZXNzLzE1IHRleHQtc3VjY2VzcyBib3JkZXItc3VjY2Vzcy8zMCdcbiAgICAgICAgICA6ICdiZy1kZXN0cnVjdGl2ZS8xNSB0ZXh0LWRlc3RydWN0aXZlIGJvcmRlci1kZXN0cnVjdGl2ZS8zMCdcbiAgICAgICl9XG4gICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGFuaW1hdGlvbjogdmlzaWJsZVxuICAgICAgICAgID8gJ3RvYXN0LWluIDIwMG1zIGVhc2Utb3V0IGZvcndhcmRzJ1xuICAgICAgICAgIDogJ3RvYXN0LW91dCAyMDBtcyBlYXNlLWluIGZvcndhcmRzJ1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y3VycmVudC5tZXNzYWdlfVxuICAgIDwvZGl2PixcbiAgICBkb2N1bWVudC5ib2R5XG4gIClcbn1cblxuaW50ZXJmYWNlIFRvYXN0UHJvcHMge1xuICB0b2FzdDogeyBtZXNzYWdlOiBzdHJpbmc7IHR5cGU6ICdlcnJvcicgfCAnc3VjY2VzcycgfSB8IG51bGxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUF5Qkk7QUF2QkosU0FBUyxXQUFXLGdCQUFnQjtBQUNwQyxTQUFTLG9CQUFvQjtBQUU3QixTQUFTLFVBQVU7QUFFWixnQkFBUyxNQUFNLEVBQUUsTUFBTSxHQUFlO0FBQzNDLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSSxTQUFTLEtBQUs7QUFDNUMsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJLFNBQVMsS0FBSztBQUU1QyxZQUFVLE1BQU07QUFDZCxRQUFJLE9BQU87QUFDVCxpQkFBVyxLQUFLO0FBQ2hCLGlCQUFXLElBQUk7QUFBQSxJQUNqQixPQUFPO0FBQ0wsaUJBQVcsS0FBSztBQUNoQixZQUFNLFFBQVEsV0FBVyxNQUFNLFdBQVcsSUFBSSxHQUFHLEdBQUc7QUFDcEQsYUFBTyxNQUFNLGFBQWEsS0FBSztBQUFBLElBQ2pDO0FBQUEsRUFDRixHQUFHLENBQUMsS0FBSyxDQUFDO0FBRVYsTUFBSSxDQUFDLFdBQVcsT0FBTyxhQUFhLFlBQWEsUUFBTztBQUV4RCxTQUFPO0FBQUEsSUFDTDtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsYUFBVTtBQUFBLFFBQ1YsV0FBVztBQUFBLFVBQ1Q7QUFBQSxVQUNBLFFBQVEsU0FBUyxZQUNiLGlEQUNBO0FBQUEsUUFDTjtBQUFBLFFBQ0EsTUFBSztBQUFBLFFBQ0wsT0FBTztBQUFBLFVBQ0wsV0FBVyxVQUNQLHFDQUNBO0FBQUEsUUFDTjtBQUFBLFFBRUMsa0JBQVE7QUFBQTtBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxFQUNYO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,8 +1,6 @@
1
1
  @source ".";
2
2
  @import './components/fit-text/fit-text.css' layer(components);
3
3
  @import './components/grid/grid.css' layer(components);
4
- @import './components/modal/modal.css' layer(components);
5
-
6
4
  @view-transition {
7
5
  navigation: auto;
8
6
  }
@@ -253,6 +251,20 @@
253
251
  text-underline-position: from-font;
254
252
  }
255
253
 
254
+ @keyframes toast-in {
255
+ from {
256
+ opacity: 0;
257
+ transform: translateX(1rem);
258
+ }
259
+ }
260
+
261
+ @keyframes toast-out {
262
+ to {
263
+ opacity: 0;
264
+ transform: translateX(1rem);
265
+ }
266
+ }
267
+
256
268
  @keyframes gradient-stroke {
257
269
  0% {
258
270
  background-position: 15% 15%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nous-research/ui",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "sideEffects": [
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@nanostores/react": "^1.1.0",
55
- "@radix-ui/react-checkbox": "^1.3.3",
55
+ "radix-ui": "^1.4.0",
56
56
  "class-variance-authority": "^0.7.1",
57
57
  "clsx": "^2.1.1",
58
58
  "nanostores": "^1.3.0",
@@ -0,0 +1,21 @@
1
+ 'use client'
2
+
3
+ import { useEffect, useState } from 'react'
4
+
5
+ /** True when viewport width is strictly below `px`. */
6
+ export function useBelowBreakpoint(px: number) {
7
+ const query = `(max-width: ${px - 1}px)`
8
+ const [matches, setMatches] = useState(() =>
9
+ typeof window !== 'undefined' ? window.matchMedia(query).matches : false
10
+ )
11
+
12
+ useEffect(() => {
13
+ const mql = window.matchMedia(query)
14
+ const sync = () => setMatches(mql.matches)
15
+ sync()
16
+ mql.addEventListener('change', sync)
17
+ return () => mql.removeEventListener('change', sync)
18
+ }, [query])
19
+
20
+ return matches
21
+ }
@@ -0,0 +1,43 @@
1
+ 'use client'
2
+
3
+ import { useCallback, useState } from 'react'
4
+
5
+ export function useConfirmDelete<TId>({
6
+ onDelete
7
+ }: {
8
+ onDelete: (id: TId) => Promise<void>
9
+ }) {
10
+ const [pendingId, setPendingId] = useState<TId | null>(null)
11
+ const [isDeleting, setIsDeleting] = useState(false)
12
+
13
+ const requestDelete = useCallback((id: TId) => {
14
+ setPendingId(id)
15
+ }, [])
16
+
17
+ const cancel = useCallback(() => {
18
+ if (!isDeleting) setPendingId(null)
19
+ }, [isDeleting])
20
+
21
+ const confirm = useCallback(async () => {
22
+ if (pendingId === null) return
23
+ const id = pendingId
24
+ setIsDeleting(true)
25
+ try {
26
+ await onDelete(id)
27
+ setPendingId(null)
28
+ } catch {
29
+ // Dialog stays open; caller can surface errors in onDelete
30
+ } finally {
31
+ setIsDeleting(false)
32
+ }
33
+ }, [pendingId, onDelete])
34
+
35
+ return {
36
+ cancel,
37
+ confirm,
38
+ isDeleting,
39
+ isOpen: pendingId !== null,
40
+ pendingId,
41
+ requestDelete
42
+ } as const
43
+ }