@orangecheck/app-design 0.0.0-stage → 0.1.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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -2
  3. package/dist/brand.d.mts +46 -0
  4. package/dist/brand.d.ts +46 -0
  5. package/dist/brand.js +144 -0
  6. package/dist/brand.js.map +1 -0
  7. package/dist/brand.mjs +136 -0
  8. package/dist/brand.mjs.map +1 -0
  9. package/dist/chrome.d.mts +64 -0
  10. package/dist/chrome.d.ts +64 -0
  11. package/dist/chrome.js +479 -0
  12. package/dist/chrome.js.map +1 -0
  13. package/dist/chrome.mjs +447 -0
  14. package/dist/chrome.mjs.map +1 -0
  15. package/dist/components.d.mts +474 -0
  16. package/dist/components.d.ts +474 -0
  17. package/dist/components.js +619 -0
  18. package/dist/components.js.map +1 -0
  19. package/dist/components.mjs +588 -0
  20. package/dist/components.mjs.map +1 -0
  21. package/dist/index.d.mts +21 -0
  22. package/dist/index.d.ts +21 -0
  23. package/dist/index.js +1597 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/index.mjs +1448 -0
  26. package/dist/index.mjs.map +1 -0
  27. package/dist/primitives.d.mts +140 -0
  28. package/dist/primitives.d.ts +140 -0
  29. package/dist/primitives.js +706 -0
  30. package/dist/primitives.js.map +1 -0
  31. package/dist/primitives.mjs +606 -0
  32. package/dist/primitives.mjs.map +1 -0
  33. package/dist/styles/fonts/inter-latin-ext.woff2 +0 -0
  34. package/dist/styles/fonts/inter-latin.woff2 +0 -0
  35. package/dist/styles/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
  36. package/dist/styles/fonts/jetbrains-mono-latin.woff2 +0 -0
  37. package/dist/styles/fonts.css +74 -0
  38. package/dist/styles/motion.css +80 -0
  39. package/dist/styles/theme.css +227 -0
  40. package/dist/styles/tokens.css +152 -0
  41. package/dist/styles.css +14 -0
  42. package/dist/tokens.d.mts +42 -0
  43. package/dist/tokens.d.ts +42 -0
  44. package/dist/tokens.js +50 -0
  45. package/dist/tokens.js.map +1 -0
  46. package/dist/tokens.mjs +45 -0
  47. package/dist/tokens.mjs.map +1 -0
  48. package/package.json +114 -4
@@ -0,0 +1,706 @@
1
+ 'use strict';
2
+
3
+ var reactSlot = require('@radix-ui/react-slot');
4
+ var classVarianceAuthority = require('class-variance-authority');
5
+ var react = require('react');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var SeparatorPrimitive = require('@radix-ui/react-separator');
9
+ var sonner = require('sonner');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+ var CheckboxPrimitive = require('@radix-ui/react-checkbox');
12
+ var LabelPrimitive = require('@radix-ui/react-label');
13
+ var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
14
+ var SelectPrimitive = require('@radix-ui/react-select');
15
+ var SwitchPrimitive = require('@radix-ui/react-switch');
16
+ var lucideReact = require('lucide-react');
17
+ var DialogPrimitive = require('@radix-ui/react-dialog');
18
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
19
+ var PopoverPrimitive = require('@radix-ui/react-popover');
20
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
21
+ var TabsPrimitive = require('@radix-ui/react-tabs');
22
+
23
+ function _interopNamespace(e) {
24
+ if (e && e.__esModule) return e;
25
+ var n = Object.create(null);
26
+ if (e) {
27
+ Object.keys(e).forEach(function (k) {
28
+ if (k !== 'default') {
29
+ var d = Object.getOwnPropertyDescriptor(e, k);
30
+ Object.defineProperty(n, k, d.get ? d : {
31
+ enumerable: true,
32
+ get: function () { return e[k]; }
33
+ });
34
+ }
35
+ });
36
+ }
37
+ n.default = e;
38
+ return Object.freeze(n);
39
+ }
40
+
41
+ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
42
+ var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
43
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
44
+ var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
45
+ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
46
+ var SwitchPrimitive__namespace = /*#__PURE__*/_interopNamespace(SwitchPrimitive);
47
+ var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
48
+ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
49
+ var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
50
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
51
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
52
+
53
+ var merge = tailwindMerge.extendTailwindMerge({
54
+ extend: {
55
+ classGroups: {
56
+ "oca-type": [
57
+ "oca-display-1",
58
+ "oca-display-2",
59
+ "oca-display-3",
60
+ "oca-title",
61
+ "oca-title-sm",
62
+ "oca-eyebrow",
63
+ "oca-lead",
64
+ "oca-body",
65
+ "oca-numeral"
66
+ ]
67
+ }
68
+ }
69
+ });
70
+ function cn(...inputs) {
71
+ return merge(clsx.clsx(inputs));
72
+ }
73
+ function Spinner({ className, label }) {
74
+ return /* @__PURE__ */ jsxRuntime.jsxs(
75
+ "svg",
76
+ {
77
+ viewBox: "0 0 24 24",
78
+ fill: "none",
79
+ role: label ? "status" : void 0,
80
+ "aria-label": label,
81
+ "aria-hidden": label ? void 0 : true,
82
+ className: cn("size-4 animate-spin", className),
83
+ children: [
84
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9", stroke: "currentColor", strokeOpacity: "0.2", strokeWidth: "2.5" }),
85
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 0 0-9-9", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" })
86
+ ]
87
+ }
88
+ );
89
+ }
90
+ function Skeleton({ className, ...props }) {
91
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-ui": "skeleton", className: cn("animate-pulse rounded-lg bg-muted", className), ...props });
92
+ }
93
+ var Separator = react.forwardRef(function Separator2({ className, orientation = "horizontal", decorative = true, ...props }, ref) {
94
+ return /* @__PURE__ */ jsxRuntime.jsx(
95
+ SeparatorPrimitive__namespace.Root,
96
+ {
97
+ ref,
98
+ decorative,
99
+ orientation,
100
+ className: cn(
101
+ "shrink-0 bg-border",
102
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
103
+ className
104
+ ),
105
+ ...props
106
+ }
107
+ );
108
+ });
109
+ function Kbd({ className, ...props }) {
110
+ return /* @__PURE__ */ jsxRuntime.jsx(
111
+ "kbd",
112
+ {
113
+ className: cn(
114
+ "inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground",
115
+ className
116
+ ),
117
+ ...props
118
+ }
119
+ );
120
+ }
121
+ function StatusDot({
122
+ tone = "neutral",
123
+ pulse = false,
124
+ className
125
+ }) {
126
+ const color = {
127
+ neutral: "bg-oca-subtle",
128
+ success: "bg-success",
129
+ warning: "bg-warning",
130
+ danger: "bg-destructive",
131
+ brand: "bg-brand"
132
+ }[tone];
133
+ return /* @__PURE__ */ jsxRuntime.jsx(
134
+ "span",
135
+ {
136
+ "aria-hidden": true,
137
+ className: cn("inline-block size-2 shrink-0 rounded-full", color, pulse && "oca-animate-pulse-dot", className)
138
+ }
139
+ );
140
+ }
141
+ function Toaster(props) {
142
+ return /* @__PURE__ */ jsxRuntime.jsx(
143
+ sonner.Toaster,
144
+ {
145
+ position: "bottom-right",
146
+ toastOptions: {
147
+ classNames: {
148
+ toast: "oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans",
149
+ title: "text-[0.9375rem] font-medium",
150
+ description: "text-sm text-muted-foreground",
151
+ actionButton: "rounded-full bg-primary text-primary-foreground",
152
+ cancelButton: "rounded-full bg-muted text-foreground"
153
+ }
154
+ },
155
+ ...props
156
+ }
157
+ );
158
+ }
159
+ var buttonVariants = classVarianceAuthority.cva(
160
+ [
161
+ "inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium",
162
+ "transition-[background-color,border-color,color,box-shadow,transform] duration-150",
163
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
164
+ "active:translate-y-px disabled:pointer-events-none disabled:opacity-45",
165
+ "[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0"
166
+ ],
167
+ {
168
+ variants: {
169
+ variant: {
170
+ primary: "bg-primary text-primary-foreground hover:bg-primary/85",
171
+ secondary: "border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent",
172
+ brand: "bg-brand text-brand-foreground hover:bg-oca-orange-deep",
173
+ ghost: "text-foreground hover:bg-accent",
174
+ danger: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
175
+ link: "h-auto rounded-none px-0 text-foreground underline decoration-border underline-offset-4 hover:decoration-foreground",
176
+ onInk: "bg-white text-oca-ink hover:bg-white/90",
177
+ onInkOutline: "border border-white/20 text-white hover:bg-white/10"
178
+ },
179
+ size: {
180
+ sm: "h-9 px-4 text-sm",
181
+ md: "h-11 px-5 text-[0.9375rem]",
182
+ lg: "h-14 px-7 text-[1.0625rem]",
183
+ icon: "size-10",
184
+ "icon-sm": "size-8"
185
+ }
186
+ },
187
+ compoundVariants: [{ variant: "link", className: "h-auto px-0" }],
188
+ defaultVariants: { variant: "primary", size: "md" }
189
+ }
190
+ );
191
+ var Button = react.forwardRef(function Button2({ className, variant, size, asChild = false, loading = false, disabled, children, type, ...props }, ref) {
192
+ const Comp = asChild ? reactSlot.Slot : "button";
193
+ return /* @__PURE__ */ jsxRuntime.jsx(
194
+ Comp,
195
+ {
196
+ ref,
197
+ "data-ui": "button",
198
+ className: cn(buttonVariants({ variant, size }), className),
199
+ disabled: asChild ? void 0 : disabled || loading,
200
+ "aria-busy": loading || void 0,
201
+ type: asChild ? void 0 : type ?? "button",
202
+ ...props,
203
+ children: asChild ? children : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
204
+ loading ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, { className: "size-[1.1em]" }) : null,
205
+ children
206
+ ] })
207
+ }
208
+ );
209
+ });
210
+ var badgeVariants = classVarianceAuthority.cva(
211
+ "inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none",
212
+ {
213
+ variants: {
214
+ tone: {
215
+ neutral: "border-border bg-card text-foreground",
216
+ muted: "border-transparent bg-muted text-muted-foreground",
217
+ brand: "border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink",
218
+ success: "border-transparent bg-[color-mix(in_oklab,var(--success)_12%,var(--card))] text-success",
219
+ warning: "border-transparent bg-[color-mix(in_oklab,var(--warning)_14%,var(--card))] text-warning",
220
+ danger: "border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive",
221
+ info: "border-transparent bg-[color-mix(in_oklab,var(--info)_12%,var(--card))] text-info",
222
+ ink: "border-transparent bg-oca-ink text-oca-ink-foreground",
223
+ onInk: "border-white/15 bg-white/5 text-white/90"
224
+ }
225
+ },
226
+ defaultVariants: { tone: "neutral" }
227
+ }
228
+ );
229
+ function Badge({ className, tone, ...props }) {
230
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-ui": "badge", className: cn(badgeVariants({ tone }), className), ...props });
231
+ }
232
+ var cardVariants = classVarianceAuthority.cva("relative rounded-[1.25rem] border", {
233
+ variants: {
234
+ tone: {
235
+ default: "border-border bg-card text-card-foreground",
236
+ sunken: "border-transparent bg-muted text-foreground",
237
+ ink: "border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground",
238
+ outline: "border-border bg-transparent text-foreground"
239
+ },
240
+ padding: {
241
+ none: "",
242
+ sm: "p-5",
243
+ md: "p-6 md:p-8",
244
+ lg: "p-8 md:p-10"
245
+ },
246
+ interactive: {
247
+ true: "transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong",
248
+ false: ""
249
+ }
250
+ },
251
+ defaultVariants: { tone: "default", padding: "md", interactive: false }
252
+ });
253
+ var Card = react.forwardRef(function Card2({ className, tone, padding, interactive, ...props }, ref) {
254
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-ui": "card", className: cn(cardVariants({ tone, padding, interactive }), className), ...props });
255
+ });
256
+ function CardHeader({ className, ...props }) {
257
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col gap-2", className), ...props });
258
+ }
259
+ function CardNumeral({ className, ...props }) {
260
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("oca-numeral block", className), ...props });
261
+ }
262
+ function CardTitle({ className, ...props }) {
263
+ return /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("oca-title flex flex-wrap items-center gap-2.5", className), ...props });
264
+ }
265
+ function CardDescription({ className, ...props }) {
266
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("oca-body", className), ...props });
267
+ }
268
+ function CardContent({ className, ...props }) {
269
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-5", className), ...props });
270
+ }
271
+ function CardFooter({ className, ...props }) {
272
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-6 flex flex-wrap items-center gap-3", className), ...props });
273
+ }
274
+ var fieldBase = [
275
+ "w-full rounded-xl border border-input bg-card text-foreground placeholder:text-oca-subtle",
276
+ "text-base md:text-[0.9375rem] outline-none transition-[border-color,box-shadow]",
277
+ "focus:border-foreground/35 focus:ring-4 focus:ring-[color-mix(in_oklab,var(--oca-orange)_16%,transparent)]",
278
+ "disabled:cursor-not-allowed disabled:opacity-55",
279
+ "aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-[color-mix(in_oklab,var(--destructive)_14%,transparent)]"
280
+ ];
281
+ var Input = react.forwardRef(function Input2({ className, type = "text", ...props }, ref) {
282
+ return /* @__PURE__ */ jsxRuntime.jsx("input", { ref, type, "data-ui": "input", className: cn(fieldBase, "h-11 px-3.5", className), ...props });
283
+ });
284
+ var Textarea = react.forwardRef(
285
+ function Textarea2({ className, ...props }, ref) {
286
+ return /* @__PURE__ */ jsxRuntime.jsx(
287
+ "textarea",
288
+ {
289
+ ref,
290
+ "data-ui": "textarea",
291
+ className: cn(fieldBase, "min-h-28 px-3.5 py-3 leading-relaxed", className),
292
+ ...props
293
+ }
294
+ );
295
+ }
296
+ );
297
+ var Label = react.forwardRef(function Label2({ className, ...props }, ref) {
298
+ return /* @__PURE__ */ jsxRuntime.jsx(
299
+ LabelPrimitive__namespace.Root,
300
+ {
301
+ ref,
302
+ className: cn("text-sm font-medium leading-none text-foreground", className),
303
+ ...props
304
+ }
305
+ );
306
+ });
307
+ function Field({ label, hint, error, children, className, hideLabel }) {
308
+ const id = react.useId();
309
+ const hintId = hint ? `${id}-hint` : void 0;
310
+ const errorId = error ? `${id}-error` : void 0;
311
+ const describedBy = [hintId, errorId].filter(Boolean).join(" ") || void 0;
312
+ const control = react.isValidElement(children) ? react.cloneElement(children, {
313
+ id,
314
+ "aria-describedby": describedBy,
315
+ "aria-invalid": error ? true : void 0
316
+ }) : children;
317
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
318
+ /* @__PURE__ */ jsxRuntime.jsx(Label, { htmlFor: id, className: hideLabel ? "sr-only" : void 0, children: label }),
319
+ hint ? /* @__PURE__ */ jsxRuntime.jsx("p", { id: hintId, className: "text-[0.8125rem] leading-snug text-muted-foreground", children: hint }) : null,
320
+ control,
321
+ error ? /* @__PURE__ */ jsxRuntime.jsx("p", { id: errorId, role: "alert", className: "text-[0.8125rem] leading-snug text-destructive", children: error }) : null
322
+ ] });
323
+ }
324
+ var Select = SelectPrimitive__namespace.Root;
325
+ var SelectGroup = SelectPrimitive__namespace.Group;
326
+ var SelectValue = SelectPrimitive__namespace.Value;
327
+ var SelectTrigger = react.forwardRef(function SelectTrigger2({ className, children, ...props }, ref) {
328
+ return /* @__PURE__ */ jsxRuntime.jsxs(
329
+ SelectPrimitive__namespace.Trigger,
330
+ {
331
+ ref,
332
+ className: cn(fieldBase, "flex h-11 items-center justify-between gap-2 px-3.5 text-left", className),
333
+ ...props,
334
+ children: [
335
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children }),
336
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4 shrink-0 text-muted-foreground" }) })
337
+ ]
338
+ }
339
+ );
340
+ });
341
+ var SelectContent = react.forwardRef(function SelectContent2({ className, children, position = "popper", ...props }, ref) {
342
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
343
+ SelectPrimitive__namespace.Content,
344
+ {
345
+ ref,
346
+ position,
347
+ sideOffset: 6,
348
+ className: cn(
349
+ "oca-animate-fade z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-lg",
350
+ className
351
+ ),
352
+ ...props,
353
+ children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Viewport, { children })
354
+ }
355
+ ) });
356
+ });
357
+ var SelectItem = react.forwardRef(function SelectItem2({ className, children, ...props }, ref) {
358
+ return /* @__PURE__ */ jsxRuntime.jsxs(
359
+ SelectPrimitive__namespace.Item,
360
+ {
361
+ ref,
362
+ className: cn(
363
+ "relative flex h-10 cursor-default select-none items-center rounded-lg pl-3 pr-9 text-[0.9375rem] outline-none",
364
+ "data-[highlighted]:bg-accent data-[disabled]:opacity-50",
365
+ className
366
+ ),
367
+ ...props,
368
+ children: [
369
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children }),
370
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { className: "absolute right-3", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4" }) })
371
+ ]
372
+ }
373
+ );
374
+ });
375
+ var Checkbox = react.forwardRef(function Checkbox2({ className, ...props }, ref) {
376
+ return /* @__PURE__ */ jsxRuntime.jsx(
377
+ CheckboxPrimitive__namespace.Root,
378
+ {
379
+ ref,
380
+ className: cn(
381
+ "peer inline-flex size-5 shrink-0 items-center justify-center rounded-[6px] border border-input bg-card",
382
+ "outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
383
+ "data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
384
+ "disabled:cursor-not-allowed disabled:opacity-50",
385
+ className
386
+ ),
387
+ ...props,
388
+ children: /* @__PURE__ */ jsxRuntime.jsx(CheckboxPrimitive__namespace.Indicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3.5", strokeWidth: 3 }) })
389
+ }
390
+ );
391
+ });
392
+ var Switch = react.forwardRef(function Switch2({ className, ...props }, ref) {
393
+ return /* @__PURE__ */ jsxRuntime.jsx(
394
+ SwitchPrimitive__namespace.Root,
395
+ {
396
+ ref,
397
+ className: cn(
398
+ "peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border border-transparent bg-input p-0.5",
399
+ "outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
400
+ "data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-50",
401
+ className
402
+ ),
403
+ ...props,
404
+ children: /* @__PURE__ */ jsxRuntime.jsx(SwitchPrimitive__namespace.Thumb, { className: "pointer-events-none block size-5 rounded-full bg-white shadow-sm transition-transform data-[state=checked]:translate-x-5" })
405
+ }
406
+ );
407
+ });
408
+ var RadioGroup = react.forwardRef(function RadioGroup2({ className, ...props }, ref) {
409
+ return /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Root, { ref, className: cn("grid gap-3", className), ...props });
410
+ });
411
+ var RadioGroupItem = react.forwardRef(function RadioGroupItem2({ className, ...props }, ref) {
412
+ return /* @__PURE__ */ jsxRuntime.jsx(
413
+ RadioGroupPrimitive__namespace.Item,
414
+ {
415
+ ref,
416
+ className: cn(
417
+ "inline-flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-card",
418
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
419
+ "data-[state=checked]:border-primary disabled:cursor-not-allowed disabled:opacity-50",
420
+ className
421
+ ),
422
+ ...props,
423
+ children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroupPrimitive__namespace.Indicator, { className: "block size-2.5 rounded-full bg-primary" })
424
+ }
425
+ );
426
+ });
427
+ var Dialog = DialogPrimitive__namespace.Root;
428
+ var DialogTrigger = DialogPrimitive__namespace.Trigger;
429
+ var DialogClose = DialogPrimitive__namespace.Close;
430
+ var overlayClass = "oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0";
431
+ var DialogContent = react.forwardRef(function DialogContent2({ className, children, hideClose, ...props }, ref) {
432
+ return /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { children: [
433
+ /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Overlay, { className: overlayClass }),
434
+ /* @__PURE__ */ jsxRuntime.jsxs(
435
+ DialogPrimitive__namespace.Content,
436
+ {
437
+ ref,
438
+ className: cn(
439
+ "oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2",
440
+ "max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8",
441
+ "outline-none",
442
+ className
443
+ ),
444
+ ...props,
445
+ children: [
446
+ children,
447
+ hideClose ? null : /* @__PURE__ */ jsxRuntime.jsx(
448
+ DialogPrimitive__namespace.Close,
449
+ {
450
+ className: "absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
451
+ "aria-label": "Close",
452
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4" })
453
+ }
454
+ )
455
+ ]
456
+ }
457
+ )
458
+ ] });
459
+ });
460
+ function DialogHeader({ className, ...props }) {
461
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-5 flex flex-col gap-2 pr-8", className), ...props });
462
+ }
463
+ function DialogFooter({ className, ...props }) {
464
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end", className), ...props });
465
+ }
466
+ var DialogTitle = react.forwardRef(function DialogTitle2({ className, ...props }, ref) {
467
+ return /* @__PURE__ */ jsxRuntime.jsx(
468
+ DialogPrimitive__namespace.Title,
469
+ {
470
+ ref,
471
+ className: cn("text-[1.5rem] font-normal leading-tight tracking-[-0.02em]", className),
472
+ ...props
473
+ }
474
+ );
475
+ });
476
+ var DialogDescription = react.forwardRef(function DialogDescription2({ className, ...props }, ref) {
477
+ return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Description, { ref, className: cn("oca-body", className), ...props });
478
+ });
479
+ var Sheet = DialogPrimitive__namespace.Root;
480
+ var SheetTrigger = DialogPrimitive__namespace.Trigger;
481
+ var SheetClose = DialogPrimitive__namespace.Close;
482
+ var SheetTitle = DialogTitle;
483
+ var SheetDescription = DialogDescription;
484
+ var sheetSide = {
485
+ right: "inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l",
486
+ left: "inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r",
487
+ bottom: "inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t"
488
+ };
489
+ var SheetContent = react.forwardRef(function SheetContent2({ className, children, side = "right", ...props }, ref) {
490
+ return /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { children: [
491
+ /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Overlay, { className: overlayClass }),
492
+ /* @__PURE__ */ jsxRuntime.jsxs(
493
+ DialogPrimitive__namespace.Content,
494
+ {
495
+ ref,
496
+ className: cn(
497
+ "oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none",
498
+ sheetSide[side],
499
+ className
500
+ ),
501
+ ...props,
502
+ children: [
503
+ children,
504
+ /* @__PURE__ */ jsxRuntime.jsx(
505
+ DialogPrimitive__namespace.Close,
506
+ {
507
+ className: "absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground",
508
+ "aria-label": "Close",
509
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4" })
510
+ }
511
+ )
512
+ ]
513
+ }
514
+ )
515
+ ] });
516
+ });
517
+ var Popover = PopoverPrimitive__namespace.Root;
518
+ var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
519
+ var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
520
+ var PopoverContent = react.forwardRef(function PopoverContent2({ className, align = "center", sideOffset = 8, ...props }, ref) {
521
+ return /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
522
+ PopoverPrimitive__namespace.Content,
523
+ {
524
+ ref,
525
+ align,
526
+ sideOffset,
527
+ className: cn(
528
+ "oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none",
529
+ className
530
+ ),
531
+ ...props
532
+ }
533
+ ) });
534
+ });
535
+ var TooltipProvider = TooltipPrimitive__namespace.Provider;
536
+ var Tooltip = TooltipPrimitive__namespace.Root;
537
+ var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
538
+ var TooltipContent = react.forwardRef(function TooltipContent2({ className, sideOffset = 6, ...props }, ref) {
539
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
540
+ TooltipPrimitive__namespace.Content,
541
+ {
542
+ ref,
543
+ sideOffset,
544
+ className: cn(
545
+ "oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground",
546
+ className
547
+ ),
548
+ ...props
549
+ }
550
+ ) });
551
+ });
552
+ var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
553
+ var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
554
+ var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
555
+ var DropdownMenuContent = react.forwardRef(function DropdownMenuContent2({ className, sideOffset = 8, ...props }, ref) {
556
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
557
+ DropdownMenuPrimitive__namespace.Content,
558
+ {
559
+ ref,
560
+ sideOffset,
561
+ className: cn(
562
+ "oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg",
563
+ className
564
+ ),
565
+ ...props
566
+ }
567
+ ) });
568
+ });
569
+ var DropdownMenuItem = react.forwardRef(function DropdownMenuItem2({ className, destructive, ...props }, ref) {
570
+ return /* @__PURE__ */ jsxRuntime.jsx(
571
+ DropdownMenuPrimitive__namespace.Item,
572
+ {
573
+ ref,
574
+ className: cn(
575
+ "flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none",
576
+ "data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground",
577
+ destructive && "text-destructive [&_svg]:text-destructive",
578
+ className
579
+ ),
580
+ ...props
581
+ }
582
+ );
583
+ });
584
+ var DropdownMenuLabel = react.forwardRef(function DropdownMenuLabel2({ className, ...props }, ref) {
585
+ return /* @__PURE__ */ jsxRuntime.jsx(
586
+ DropdownMenuPrimitive__namespace.Label,
587
+ {
588
+ ref,
589
+ className: cn("px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground", className),
590
+ ...props
591
+ }
592
+ );
593
+ });
594
+ var DropdownMenuSeparator = react.forwardRef(function DropdownMenuSeparator2({ className, ...props }, ref) {
595
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Separator, { ref, className: cn("my-1.5 h-px bg-border", className), ...props });
596
+ });
597
+ var LookContext = react.createContext("pill");
598
+ var Tabs = react.forwardRef(function Tabs2({ look = "pill", ...props }, ref) {
599
+ return /* @__PURE__ */ jsxRuntime.jsx(LookContext.Provider, { value: look, children: /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { ref, ...props }) });
600
+ });
601
+ var TabsList = react.forwardRef(function TabsList2({ className, ...props }, ref) {
602
+ const look = react.useContext(LookContext);
603
+ return /* @__PURE__ */ jsxRuntime.jsx(
604
+ TabsPrimitive__namespace.List,
605
+ {
606
+ ref,
607
+ className: cn(
608
+ look === "pill" ? "inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full bg-muted p-1" : "flex max-w-full items-center gap-6 overflow-x-auto border-b border-border",
609
+ className
610
+ ),
611
+ ...props
612
+ }
613
+ );
614
+ });
615
+ var TabsTrigger = react.forwardRef(function TabsTrigger2({ className, ...props }, ref) {
616
+ const look = react.useContext(LookContext);
617
+ return /* @__PURE__ */ jsxRuntime.jsx(
618
+ TabsPrimitive__namespace.Trigger,
619
+ {
620
+ ref,
621
+ className: cn(
622
+ "inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap text-[0.9375rem] outline-none transition-colors",
623
+ "focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
624
+ look === "pill" ? "h-9 rounded-full px-4 text-muted-foreground hover:text-foreground data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm" : "-mb-px h-11 border-b-2 border-transparent text-muted-foreground hover:text-foreground data-[state=active]:border-foreground data-[state=active]:text-foreground",
625
+ className
626
+ ),
627
+ ...props
628
+ }
629
+ );
630
+ });
631
+ var TabsContent = react.forwardRef(function TabsContent2({ className, ...props }, ref) {
632
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Content, { ref, className: cn("mt-6 outline-none", className), ...props });
633
+ });
634
+
635
+ Object.defineProperty(exports, "toast", {
636
+ enumerable: true,
637
+ get: function () { return sonner.toast; }
638
+ });
639
+ exports.Badge = Badge;
640
+ exports.Button = Button;
641
+ exports.Card = Card;
642
+ exports.CardContent = CardContent;
643
+ exports.CardDescription = CardDescription;
644
+ exports.CardFooter = CardFooter;
645
+ exports.CardHeader = CardHeader;
646
+ exports.CardNumeral = CardNumeral;
647
+ exports.CardTitle = CardTitle;
648
+ exports.Checkbox = Checkbox;
649
+ exports.Dialog = Dialog;
650
+ exports.DialogClose = DialogClose;
651
+ exports.DialogContent = DialogContent;
652
+ exports.DialogDescription = DialogDescription;
653
+ exports.DialogFooter = DialogFooter;
654
+ exports.DialogHeader = DialogHeader;
655
+ exports.DialogTitle = DialogTitle;
656
+ exports.DialogTrigger = DialogTrigger;
657
+ exports.DropdownMenu = DropdownMenu;
658
+ exports.DropdownMenuContent = DropdownMenuContent;
659
+ exports.DropdownMenuGroup = DropdownMenuGroup;
660
+ exports.DropdownMenuItem = DropdownMenuItem;
661
+ exports.DropdownMenuLabel = DropdownMenuLabel;
662
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
663
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
664
+ exports.Field = Field;
665
+ exports.Input = Input;
666
+ exports.Kbd = Kbd;
667
+ exports.Label = Label;
668
+ exports.Popover = Popover;
669
+ exports.PopoverAnchor = PopoverAnchor;
670
+ exports.PopoverContent = PopoverContent;
671
+ exports.PopoverTrigger = PopoverTrigger;
672
+ exports.RadioGroup = RadioGroup;
673
+ exports.RadioGroupItem = RadioGroupItem;
674
+ exports.Select = Select;
675
+ exports.SelectContent = SelectContent;
676
+ exports.SelectGroup = SelectGroup;
677
+ exports.SelectItem = SelectItem;
678
+ exports.SelectTrigger = SelectTrigger;
679
+ exports.SelectValue = SelectValue;
680
+ exports.Separator = Separator;
681
+ exports.Sheet = Sheet;
682
+ exports.SheetClose = SheetClose;
683
+ exports.SheetContent = SheetContent;
684
+ exports.SheetDescription = SheetDescription;
685
+ exports.SheetTitle = SheetTitle;
686
+ exports.SheetTrigger = SheetTrigger;
687
+ exports.Skeleton = Skeleton;
688
+ exports.Spinner = Spinner;
689
+ exports.StatusDot = StatusDot;
690
+ exports.Switch = Switch;
691
+ exports.Tabs = Tabs;
692
+ exports.TabsContent = TabsContent;
693
+ exports.TabsList = TabsList;
694
+ exports.TabsTrigger = TabsTrigger;
695
+ exports.Textarea = Textarea;
696
+ exports.Toaster = Toaster;
697
+ exports.Tooltip = Tooltip;
698
+ exports.TooltipContent = TooltipContent;
699
+ exports.TooltipProvider = TooltipProvider;
700
+ exports.TooltipTrigger = TooltipTrigger;
701
+ exports.badgeVariants = badgeVariants;
702
+ exports.buttonVariants = buttonVariants;
703
+ exports.cardVariants = cardVariants;
704
+ exports.cn = cn;
705
+ //# sourceMappingURL=primitives.js.map
706
+ //# sourceMappingURL=primitives.js.map