@nextlyhq/ui 0.0.2-alpha.42 → 0.0.2-alpha.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +82 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -15
- package/dist/index.d.ts +26 -15
- package/dist/index.mjs +82 -46
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.scoped.css +1 -1
- package/dist/theme.css +137 -33
- package/docs/plugin-ui-authoring.md +55 -5
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -16,7 +16,7 @@ function cn(...inputs) {
|
|
|
16
16
|
// src/components/button.tsx
|
|
17
17
|
import { jsx } from "react/jsx-runtime";
|
|
18
18
|
var buttonVariants = cva(
|
|
19
|
-
"inline-flex items-center justify-center whitespace-nowrap rounded-
|
|
19
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98] [&_svg]:text-current",
|
|
20
20
|
{
|
|
21
21
|
variants: {
|
|
22
22
|
variant: {
|
|
@@ -27,8 +27,12 @@ var buttonVariants = cva(
|
|
|
27
27
|
// Hover darkens to a deeper shade instead of opacity-90, which would
|
|
28
28
|
// composite the fill toward the page and drop white text under 4.5:1.
|
|
29
29
|
destructive: "bg-destructive-solid text-destructive-foreground border border-transparent hover:bg-destructive-700",
|
|
30
|
-
// border-border
|
|
31
|
-
//
|
|
30
|
+
// border-border is the decorative separator token, and it is the right
|
|
31
|
+
// one here: a button is identified by its label and fill, so its edge
|
|
32
|
+
// carries no meaning on its own and is not held to the 3:1 minimum that
|
|
33
|
+
// border-input meets for controls identified by their boundary. It is
|
|
34
|
+
// still used in preference to a faint primary alpha, which reads as a
|
|
35
|
+
// tint of the brand colour rather than as an edge.
|
|
32
36
|
outline: "border border-border text-foreground hover-unified bg-background",
|
|
33
37
|
secondary: "bg-background border border-border text-foreground hover:bg-primary/5",
|
|
34
38
|
ghost: "text-foreground border border-transparent hover-unified",
|
|
@@ -36,7 +40,7 @@ var buttonVariants = cva(
|
|
|
36
40
|
},
|
|
37
41
|
size: {
|
|
38
42
|
default: "h-[var(--nx-control-height)] px-6 py-2",
|
|
39
|
-
sm: "h-[var(--nx-control-height-md)] px-4 text-
|
|
43
|
+
sm: "h-[var(--nx-control-height-md)] px-4 text-sm",
|
|
40
44
|
md: "h-[var(--nx-control-height)] px-6 text-sm",
|
|
41
45
|
lg: "h-[var(--nx-control-height-lg)] px-8 text-base",
|
|
42
46
|
icon: "h-[var(--nx-control-height)] w-[var(--nx-control-height)] p-0",
|
|
@@ -83,7 +87,7 @@ import { cva as cva2 } from "class-variance-authority";
|
|
|
83
87
|
import { forwardRef as forwardRef2 } from "react";
|
|
84
88
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
85
89
|
var inputVariants = cva2(
|
|
86
|
-
"file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-
|
|
90
|
+
"file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-md border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:border-primary! focus-visible:border-primary! aria-invalid:border-destructive aria-invalid:focus:border-destructive! data-[invalid=true]:border-destructive data-[invalid=true]:focus:border-destructive!",
|
|
87
91
|
{
|
|
88
92
|
variants: {
|
|
89
93
|
size: {
|
|
@@ -124,7 +128,7 @@ var Textarea = forwardRef3(({ className, ...props }, ref) => {
|
|
|
124
128
|
className: cn(
|
|
125
129
|
// hover:border-primary (full strength) keeps the hover boundary more
|
|
126
130
|
// visible than the resting border-input, not a fainter alpha of it.
|
|
127
|
-
"flex min-h-[80px] w-full rounded-
|
|
131
|
+
"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
|
|
128
132
|
"aria-invalid:border-destructive aria-invalid:focus:border-destructive!",
|
|
129
133
|
className
|
|
130
134
|
),
|
|
@@ -199,7 +203,7 @@ var TooltipContent = forwardRef4(({ className, sideOffset = 4, ...props }, ref)
|
|
|
199
203
|
sideOffset,
|
|
200
204
|
"data-slot": "tooltip-content",
|
|
201
205
|
className: cn(
|
|
202
|
-
"z-50 overflow-hidden rounded-
|
|
206
|
+
"z-50 overflow-hidden rounded-lg px-3 py-1.5 text-xs shadow-lg border border-border bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
203
207
|
className
|
|
204
208
|
),
|
|
205
209
|
...props
|
|
@@ -244,7 +248,7 @@ var FormLabelWithTooltip = React2.forwardRef(
|
|
|
244
248
|
{
|
|
245
249
|
side: "right",
|
|
246
250
|
className: cn(
|
|
247
|
-
"max-w-[250px] text-
|
|
251
|
+
"max-w-[250px] text-xs break-words relative z-[100] shadow-md border border-border bg-primary text-primary-foreground px-3 py-2 rounded-lg",
|
|
248
252
|
tooltipClassName
|
|
249
253
|
),
|
|
250
254
|
children: description
|
|
@@ -260,7 +264,7 @@ FormLabelWithTooltip.displayName = "FormLabelWithTooltip";
|
|
|
260
264
|
import { cva as cva3 } from "class-variance-authority";
|
|
261
265
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
262
266
|
var badgeVariants = cva3(
|
|
263
|
-
"inline-flex items-center rounded-
|
|
267
|
+
"inline-flex items-center rounded-sm px-2.5 py-0.5 h-[22px] text-xs font-medium transition-colors",
|
|
264
268
|
{
|
|
265
269
|
variants: {
|
|
266
270
|
variant: {
|
|
@@ -295,7 +299,7 @@ import { cva as cva4 } from "class-variance-authority";
|
|
|
295
299
|
import { forwardRef as forwardRef6 } from "react";
|
|
296
300
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
297
301
|
var cardVariants = cva4(
|
|
298
|
-
"bg-card text-foreground rounded-
|
|
302
|
+
"bg-card text-foreground rounded-lg border border-border transition-all duration-200",
|
|
299
303
|
{
|
|
300
304
|
variants: {
|
|
301
305
|
variant: {
|
|
@@ -331,7 +335,14 @@ var CardHeader = forwardRef6(
|
|
|
331
335
|
ref,
|
|
332
336
|
"data-slot": "card-header",
|
|
333
337
|
className: cn(
|
|
334
|
-
|
|
338
|
+
// Mirrors CardFooter: a header that carries its own tint runs the full
|
|
339
|
+
// width of the card, so at a nonzero --radius it would paint square
|
|
340
|
+
// across the card's curved top corners. `inherit` takes the parent's
|
|
341
|
+
// computed radius rather than restating a step. It only helps when the
|
|
342
|
+
// header is a direct child of the card; a header nested inside another
|
|
343
|
+
// wrapper inherits that wrapper's radius instead, and such a card needs
|
|
344
|
+
// `overflow-hidden` to clip the fill.
|
|
345
|
+
"flex flex-col rounded-t-[inherit] p-4",
|
|
335
346
|
!noBorder && "border-b border-border",
|
|
336
347
|
className
|
|
337
348
|
),
|
|
@@ -405,7 +416,13 @@ var CardFooter = forwardRef6(
|
|
|
405
416
|
ref,
|
|
406
417
|
"data-slot": "card-footer",
|
|
407
418
|
className: cn(
|
|
408
|
-
|
|
419
|
+
// The footer's tint runs the full width of the card, so at a nonzero
|
|
420
|
+
// --radius it would paint square across the card's curved bottom
|
|
421
|
+
// corners. `inherit` takes the card's own computed radius rather than
|
|
422
|
+
// restating a step, so a card whose radius is overridden stays
|
|
423
|
+
// matched, and it can never disagree with the card at any --radius,
|
|
424
|
+
// including the shipped 0 where `rounded-lg` is 0.
|
|
425
|
+
"flex items-center px-6 py-4 border-t border-border bg-primary/5 rounded-b-[inherit]",
|
|
409
426
|
className
|
|
410
427
|
),
|
|
411
428
|
...props
|
|
@@ -474,7 +491,7 @@ import { cva as cva5 } from "class-variance-authority";
|
|
|
474
491
|
import { forwardRef as forwardRef8 } from "react";
|
|
475
492
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
476
493
|
var alertVariants = cva5(
|
|
477
|
-
"relative flex items-start gap-3 rounded-
|
|
494
|
+
"relative flex items-start gap-3 rounded-md border border-border p-4 text-sm transition-colors duration-150",
|
|
478
495
|
{
|
|
479
496
|
variants: {
|
|
480
497
|
variant: {
|
|
@@ -578,7 +595,7 @@ var Skeleton = React3.forwardRef(
|
|
|
578
595
|
"data-slot": "skeleton",
|
|
579
596
|
"aria-hidden": "true",
|
|
580
597
|
className: cn(
|
|
581
|
-
"bg-primary/5 animate-pulse rounded-
|
|
598
|
+
"bg-primary/5 animate-pulse rounded-md motion-reduce:animate-none",
|
|
582
599
|
className
|
|
583
600
|
),
|
|
584
601
|
...props
|
|
@@ -625,7 +642,7 @@ var Progress = React4.forwardRef(
|
|
|
625
642
|
"aria-valuemax": max,
|
|
626
643
|
"aria-label": ariaLabel || `Progress: ${Math.round(percentage)}%`,
|
|
627
644
|
className: cn(
|
|
628
|
-
"relative h-2 w-full overflow-hidden rounded-
|
|
645
|
+
"relative h-2 w-full overflow-hidden rounded-full bg-accent",
|
|
629
646
|
className
|
|
630
647
|
),
|
|
631
648
|
...props,
|
|
@@ -658,7 +675,7 @@ var Checkbox = forwardRef11(({ className, indeterminate, ...props }, ref) => /*
|
|
|
658
675
|
className: cn(
|
|
659
676
|
// Resting border uses border-input (a visible 3:1 boundary); the checked
|
|
660
677
|
// state switches to border-primary below, keeping the two states distinct.
|
|
661
|
-
"peer relative h-4 w-4 shrink-0 rounded-
|
|
678
|
+
"peer relative h-4 w-4 shrink-0 rounded-sm border border-input ring-offset-background before:absolute before:left-1/2 before:top-1/2 before:h-6 before:w-6 before:-translate-x-1/2 before:-translate-y-1/2 before:content-[''] focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary transition-all duration-200",
|
|
662
679
|
className
|
|
663
680
|
),
|
|
664
681
|
...props,
|
|
@@ -700,11 +717,15 @@ var RadioGroupItem = forwardRef12(({ className, ...props }, ref) => {
|
|
|
700
717
|
// (~5% opacity, effectively invisible); hover strengthens above the resting state.
|
|
701
718
|
// Resting border uses border-input (a visible 3:1 boundary); the checked
|
|
702
719
|
// state switches to border-primary below, keeping the two states distinct.
|
|
703
|
-
|
|
720
|
+
// rounded-full is fixed rather than derived from --radius: the circle is
|
|
721
|
+
// what tells the user only one option can be chosen. The thick checked
|
|
722
|
+
// border leaves a background-coloured core, and because the border's
|
|
723
|
+
// inner edge is curved too that core reads as a round dot.
|
|
724
|
+
"peer h-4 w-4 shrink-0 rounded-full border border-input bg-background cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/70 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
|
|
704
725
|
className
|
|
705
726
|
),
|
|
706
727
|
...props,
|
|
707
|
-
children: /* @__PURE__ */ jsx16(RadioGroupPrimitive.Indicator, {})
|
|
728
|
+
children: /* @__PURE__ */ jsx16(RadioGroupPrimitive.Indicator, { className: "block size-full rounded-full" })
|
|
708
729
|
}
|
|
709
730
|
);
|
|
710
731
|
});
|
|
@@ -722,7 +743,7 @@ function Switch({ className, ...props }) {
|
|
|
722
743
|
{
|
|
723
744
|
"data-slot": "switch",
|
|
724
745
|
className: cn(
|
|
725
|
-
"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-
|
|
746
|
+
"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-border transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50",
|
|
726
747
|
"data-[state=checked]:bg-primary data-[state=checked]:border-primary!",
|
|
727
748
|
"data-[state=unchecked]:bg-input data-[state=unchecked]:border-border dark:data-[state=unchecked]:bg-input/80",
|
|
728
749
|
className
|
|
@@ -733,7 +754,7 @@ function Switch({ className, ...props }) {
|
|
|
733
754
|
{
|
|
734
755
|
"data-slot": "switch-thumb",
|
|
735
756
|
className: cn(
|
|
736
|
-
"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-
|
|
757
|
+
"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
|
|
737
758
|
)
|
|
738
759
|
}
|
|
739
760
|
)
|
|
@@ -808,7 +829,7 @@ import { cva as cva7 } from "class-variance-authority";
|
|
|
808
829
|
import { createContext as createContext2, forwardRef as forwardRef14, useContext as useContext2 } from "react";
|
|
809
830
|
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
810
831
|
var avatarVariants = cva7(
|
|
811
|
-
"relative inline-flex shrink-0 overflow-hidden rounded-
|
|
832
|
+
"relative inline-flex shrink-0 overflow-hidden rounded-full items-center justify-center bg-primary/5 text-muted-foreground",
|
|
812
833
|
{
|
|
813
834
|
variants: {
|
|
814
835
|
size: {
|
|
@@ -875,7 +896,7 @@ var AvatarFallback = forwardRef14(
|
|
|
875
896
|
ref,
|
|
876
897
|
"data-slot": "avatar-fallback",
|
|
877
898
|
className: cn(
|
|
878
|
-
"bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-
|
|
899
|
+
"bg-primary/5 text-muted-foreground flex size-full items-center justify-center rounded-full font-medium",
|
|
879
900
|
textSize,
|
|
880
901
|
className
|
|
881
902
|
),
|
|
@@ -899,6 +920,7 @@ var TabsList = forwardRef15(
|
|
|
899
920
|
ref,
|
|
900
921
|
"data-slot": "tabs-list",
|
|
901
922
|
className: cn(
|
|
923
|
+
// Square corners: underline tabs, so the list never draws a rounded surface.
|
|
902
924
|
"inline-flex h-10 items-center justify-center gap-1 rounded-none p-0 text-muted-foreground",
|
|
903
925
|
className
|
|
904
926
|
),
|
|
@@ -914,6 +936,8 @@ var TabsTrigger = forwardRef15(
|
|
|
914
936
|
ref,
|
|
915
937
|
"data-slot": "tabs-trigger",
|
|
916
938
|
className: cn(
|
|
939
|
+
// Square corners: the active state is a 2px bottom border that has to
|
|
940
|
+
// run the full width of the trigger.
|
|
917
941
|
"inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:border-b-primary! data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
918
942
|
className
|
|
919
943
|
),
|
|
@@ -955,7 +979,7 @@ var PopoverContent = React5.forwardRef(({ className, align = "center", sideOffse
|
|
|
955
979
|
sideOffset,
|
|
956
980
|
"data-slot": "popover-content",
|
|
957
981
|
className: cn(
|
|
958
|
-
"z-[100] w-72 rounded-
|
|
982
|
+
"z-[100] w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
|
|
959
983
|
className
|
|
960
984
|
),
|
|
961
985
|
...props
|
|
@@ -980,6 +1004,9 @@ var DialogOverlay = forwardRef17(({ className, ...props }, ref) => /* @__PURE__
|
|
|
980
1004
|
ref,
|
|
981
1005
|
"data-slot": "dialog-overlay",
|
|
982
1006
|
className: cn(
|
|
1007
|
+
// A modal scrim: a black wash is the point, so it stays a literal
|
|
1008
|
+
// rather than a surface token. Painting it from `background` would
|
|
1009
|
+
// make it a white veil in light mode and near-invisible in dark.
|
|
983
1010
|
"fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
984
1011
|
className
|
|
985
1012
|
),
|
|
@@ -1011,7 +1038,7 @@ var DialogContent = forwardRef17(({ className, children, size, ...props }, ref)
|
|
|
1011
1038
|
ref,
|
|
1012
1039
|
"data-slot": "dialog-content",
|
|
1013
1040
|
className: cn(
|
|
1014
|
-
"fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-
|
|
1041
|
+
"fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-lg duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
1015
1042
|
dialogContentVariants({ size }),
|
|
1016
1043
|
className
|
|
1017
1044
|
),
|
|
@@ -1022,7 +1049,7 @@ var DialogContent = forwardRef17(({ className, children, size, ...props }, ref)
|
|
|
1022
1049
|
DialogPrimitive.Close,
|
|
1023
1050
|
{
|
|
1024
1051
|
"data-slot": "dialog-close",
|
|
1025
|
-
className: "absolute right-4 top-4 rounded-
|
|
1052
|
+
className: "absolute right-4 top-4 rounded-md p-1 text-muted-foreground cursor-pointer transition-colors duration-150 hover-unified focus:outline-none focus:ring-2 focus:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
1026
1053
|
children: [
|
|
1027
1054
|
/* @__PURE__ */ jsx22(X, { className: "h-4 w-4" }),
|
|
1028
1055
|
/* @__PURE__ */ jsx22("span", { className: "sr-only", children: "Close" })
|
|
@@ -1099,6 +1126,9 @@ var AlertDialogOverlay = forwardRef18(({ className, ...props }, ref) => /* @__PU
|
|
|
1099
1126
|
{
|
|
1100
1127
|
ref,
|
|
1101
1128
|
className: cn(
|
|
1129
|
+
// A modal scrim: a black wash is the point, so it stays a literal
|
|
1130
|
+
// rather than a surface token. Painting it from `background` would
|
|
1131
|
+
// make it a white veil in light mode and near-invisible in dark.
|
|
1102
1132
|
"fixed inset-0 z-50 bg-black/80 backdrop-blur-sm transition-opacity duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
1103
1133
|
className
|
|
1104
1134
|
),
|
|
@@ -1115,7 +1145,7 @@ var AlertDialogContent = forwardRef18(({ className, ...props }, ref) => {
|
|
|
1115
1145
|
{
|
|
1116
1146
|
ref,
|
|
1117
1147
|
className: cn(
|
|
1118
|
-
"fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-
|
|
1148
|
+
"fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-lg duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
1119
1149
|
className
|
|
1120
1150
|
),
|
|
1121
1151
|
...props
|
|
@@ -1215,7 +1245,7 @@ var DropdownMenuSubTrigger = React6.forwardRef(({ className, inset, children, ..
|
|
|
1215
1245
|
{
|
|
1216
1246
|
ref,
|
|
1217
1247
|
className: cn(
|
|
1218
|
-
"flex select-none items-center gap-2 rounded-
|
|
1248
|
+
"flex select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-muted data-[state=open]:text-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
1219
1249
|
menuItemBase,
|
|
1220
1250
|
inset && "pl-8",
|
|
1221
1251
|
className
|
|
@@ -1233,7 +1263,7 @@ var DropdownMenuSubContent = React6.forwardRef(({ className, ...props }, ref) =>
|
|
|
1233
1263
|
{
|
|
1234
1264
|
ref,
|
|
1235
1265
|
className: cn(
|
|
1236
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-
|
|
1266
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
1237
1267
|
className
|
|
1238
1268
|
),
|
|
1239
1269
|
...props
|
|
@@ -1248,7 +1278,7 @@ var DropdownMenuContent = React6.forwardRef(({ className, sideOffset = 4, ...pro
|
|
|
1248
1278
|
ref,
|
|
1249
1279
|
sideOffset,
|
|
1250
1280
|
className: cn(
|
|
1251
|
-
"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-
|
|
1281
|
+
"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
|
|
1252
1282
|
className
|
|
1253
1283
|
),
|
|
1254
1284
|
...props
|
|
@@ -1261,7 +1291,7 @@ var DropdownMenuItem = React6.forwardRef(({ className, inset, ...props }, ref) =
|
|
|
1261
1291
|
{
|
|
1262
1292
|
ref,
|
|
1263
1293
|
className: cn(
|
|
1264
|
-
"relative flex select-none items-center gap-2 rounded-
|
|
1294
|
+
"relative flex select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
1265
1295
|
menuItemBase,
|
|
1266
1296
|
inset && "pl-8",
|
|
1267
1297
|
className
|
|
@@ -1275,7 +1305,7 @@ var DropdownMenuCheckboxItem = React6.forwardRef(({ className, children, checked
|
|
|
1275
1305
|
{
|
|
1276
1306
|
ref,
|
|
1277
1307
|
className: cn(
|
|
1278
|
-
"relative flex select-none items-center rounded-
|
|
1308
|
+
"relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none",
|
|
1279
1309
|
menuItemBase,
|
|
1280
1310
|
className
|
|
1281
1311
|
),
|
|
@@ -1293,7 +1323,7 @@ var DropdownMenuRadioItem = React6.forwardRef(({ className, children, ...props }
|
|
|
1293
1323
|
{
|
|
1294
1324
|
ref,
|
|
1295
1325
|
className: cn(
|
|
1296
|
-
"relative flex select-none items-center rounded-
|
|
1326
|
+
"relative flex select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none",
|
|
1297
1327
|
menuItemBase,
|
|
1298
1328
|
className
|
|
1299
1329
|
),
|
|
@@ -1361,7 +1391,7 @@ function SelectValue({
|
|
|
1361
1391
|
var selectTriggerVariants = cva9(
|
|
1362
1392
|
// hover:border-primary (full strength) keeps the hover boundary more visible
|
|
1363
1393
|
// than the resting border-input, not a fainter alpha of it.
|
|
1364
|
-
"flex w-full items-center justify-between gap-2 rounded-
|
|
1394
|
+
"flex w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:border-destructive! [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
|
|
1365
1395
|
{
|
|
1366
1396
|
variants: {
|
|
1367
1397
|
size: {
|
|
@@ -1403,7 +1433,7 @@ function SelectContent({
|
|
|
1403
1433
|
{
|
|
1404
1434
|
"data-slot": "select-content",
|
|
1405
1435
|
className: cn(
|
|
1406
|
-
"bg-popover text-popover-foreground border border-border shadow-none rounded-
|
|
1436
|
+
"bg-popover text-popover-foreground border border-border shadow-none rounded-lg z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
|
|
1407
1437
|
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
1408
1438
|
className
|
|
1409
1439
|
),
|
|
@@ -1449,7 +1479,7 @@ function SelectItem({
|
|
|
1449
1479
|
{
|
|
1450
1480
|
"data-slot": "select-item",
|
|
1451
1481
|
className: cn(
|
|
1452
|
-
"relative flex w-full cursor-pointer items-center gap-2 rounded-
|
|
1482
|
+
"relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-2 pr-8 pl-2 text-sm text-foreground outline-none select-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
|
|
1453
1483
|
className
|
|
1454
1484
|
),
|
|
1455
1485
|
...props,
|
|
@@ -1521,6 +1551,9 @@ var SheetOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
1521
1551
|
DialogPrimitive2.Overlay,
|
|
1522
1552
|
{
|
|
1523
1553
|
className: cn(
|
|
1554
|
+
// A modal scrim: a black wash is the point, so it stays a literal
|
|
1555
|
+
// rather than a surface token. Painting it from `background` would
|
|
1556
|
+
// make it a white veil in light mode and near-invisible in dark.
|
|
1524
1557
|
"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",
|
|
1525
1558
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1526
1559
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
@@ -1623,7 +1656,7 @@ var Command = forwardRef22(
|
|
|
1623
1656
|
{
|
|
1624
1657
|
ref,
|
|
1625
1658
|
className: cn(
|
|
1626
|
-
"flex h-full w-full flex-col overflow-hidden rounded-
|
|
1659
|
+
"flex h-full w-full flex-col overflow-hidden rounded-lg bg-background text-foreground",
|
|
1627
1660
|
className
|
|
1628
1661
|
),
|
|
1629
1662
|
...props
|
|
@@ -1636,6 +1669,9 @@ var CommandDialogOverlay = forwardRef22(({ className, ...props }, ref) => /* @__
|
|
|
1636
1669
|
{
|
|
1637
1670
|
ref,
|
|
1638
1671
|
className: cn(
|
|
1672
|
+
// A modal scrim: a black wash is the point, so it stays a literal
|
|
1673
|
+
// rather than a surface token. Painting it from `background` would
|
|
1674
|
+
// make it a white veil in light mode and near-invisible in dark.
|
|
1639
1675
|
"fixed inset-0 z-[99] bg-black/80 backdrop-blur-sm",
|
|
1640
1676
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
1641
1677
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
@@ -1670,7 +1706,7 @@ var CommandDialog = ({ children, ...props }) => {
|
|
|
1670
1706
|
"m-4 sm:m-0",
|
|
1671
1707
|
// 16px margin on mobile, no margin on desktop
|
|
1672
1708
|
// Visual
|
|
1673
|
-
"overflow-hidden rounded-
|
|
1709
|
+
"overflow-hidden rounded-lg border border-border bg-background shadow-xl",
|
|
1674
1710
|
// Animation
|
|
1675
1711
|
"duration-200",
|
|
1676
1712
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
@@ -1776,7 +1812,7 @@ var CommandItem = forwardRef22(({ className, ...props }, ref) => /* @__PURE__ */
|
|
|
1776
1812
|
// Spacing
|
|
1777
1813
|
"px-3 py-2.5",
|
|
1778
1814
|
// Visual
|
|
1779
|
-
"rounded-
|
|
1815
|
+
"rounded-sm text-base sm:text-sm outline-none",
|
|
1780
1816
|
// Transitions
|
|
1781
1817
|
"transition-all duration-200 ease-(--ease-premium)",
|
|
1782
1818
|
// Hover state - shared dashboard hover treatment
|
|
@@ -1805,7 +1841,7 @@ var CommandShortcut = forwardRef22(
|
|
|
1805
1841
|
"text-xs font-mono",
|
|
1806
1842
|
// Visual
|
|
1807
1843
|
"text-muted-foreground bg-primary/5",
|
|
1808
|
-
"border border-border rounded-
|
|
1844
|
+
"border border-border rounded-md",
|
|
1809
1845
|
// Spacing
|
|
1810
1846
|
"px-1.5 py-0.5",
|
|
1811
1847
|
className
|
|
@@ -2000,7 +2036,7 @@ function TableSearch({
|
|
|
2000
2036
|
value,
|
|
2001
2037
|
onChange: (e) => onChange(e.target.value),
|
|
2002
2038
|
"aria-busy": isLoading,
|
|
2003
|
-
className: "h-10 w-full rounded-
|
|
2039
|
+
className: "h-10 w-full rounded-md border border-input bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
|
|
2004
2040
|
}
|
|
2005
2041
|
),
|
|
2006
2042
|
(value || isLoading) && /* @__PURE__ */ jsxs10("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2", children: [
|
|
@@ -2010,7 +2046,7 @@ function TableSearch({
|
|
|
2010
2046
|
{
|
|
2011
2047
|
type: "button",
|
|
2012
2048
|
onClick: onClear,
|
|
2013
|
-
className: "text-muted-foreground hover:text-foreground transition-colors p-0.5 rounded-
|
|
2049
|
+
className: "text-muted-foreground hover:text-foreground transition-colors p-0.5 rounded-md hover:bg-primary/5",
|
|
2014
2050
|
"aria-label": "Clear search",
|
|
2015
2051
|
children: /* @__PURE__ */ jsx31(X2, { className: "w-3.5 h-3.5" })
|
|
2016
2052
|
}
|
|
@@ -2038,7 +2074,7 @@ function TableLoading() {
|
|
|
2038
2074
|
}
|
|
2039
2075
|
function TableEmpty({ message = "No records found" }) {
|
|
2040
2076
|
return /* @__PURE__ */ jsxs11("div", { className: "flex flex-col items-center justify-center gap-4 p-16 text-center text-muted-foreground", children: [
|
|
2041
|
-
/* @__PURE__ */ jsx32("div", { className: "flex h-12 w-12 items-center justify-center rounded-
|
|
2077
|
+
/* @__PURE__ */ jsx32("div", { className: "flex h-12 w-12 items-center justify-center rounded-md bg-primary/5", children: /* @__PURE__ */ jsx32(FileQuestion, { className: "h-6 w-6" }) }),
|
|
2042
2078
|
/* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: message })
|
|
2043
2079
|
] });
|
|
2044
2080
|
}
|
|
@@ -2054,9 +2090,9 @@ var TableSkeleton = ({
|
|
|
2054
2090
|
}) => {
|
|
2055
2091
|
const content = /* @__PURE__ */ jsxs12(Fragment, { children: [
|
|
2056
2092
|
/* @__PURE__ */ jsx33("div", { className: "border-0 rounded-none shadow-none", children: /* @__PURE__ */ jsxs12(Table, { children: [
|
|
2057
|
-
/* @__PURE__ */ jsx33(TableHeader, { children: /* @__PURE__ */ jsx33(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ jsx33(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx33("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx33(Skeleton, { className: "h-4 w-4 rounded-
|
|
2058
|
-
/* @__PURE__ */ jsx33(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsx33(TableRow, { className: "border-b border-border", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsx33(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx33("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx33(Skeleton, { className: "h-8 w-8 rounded-
|
|
2059
|
-
/* @__PURE__ */ jsx33(Skeleton, { className: "w-9 rounded-
|
|
2093
|
+
/* @__PURE__ */ jsx33(TableHeader, { children: /* @__PURE__ */ jsx33(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ jsx33(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx33("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx33(Skeleton, { className: "h-4 w-4 rounded-sm" }) }) : colIdx === 1 ? /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-[70%] max-w-[180px]" }) : /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, `skeleton-header-${colIdx}`)) }) }),
|
|
2094
|
+
/* @__PURE__ */ jsx33(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsx33(TableRow, { className: "border-b border-border", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsx33(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx33(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx33("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx33(Skeleton, { className: "h-8 w-8 rounded-md" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-3", children: [
|
|
2095
|
+
/* @__PURE__ */ jsx33(Skeleton, { className: "w-9 rounded-md shrink-0" }),
|
|
2060
2096
|
/* @__PURE__ */ jsxs12("div", { className: "space-y-1.5 flex-1", children: [
|
|
2061
2097
|
/* @__PURE__ */ jsx33(Skeleton, { className: "h-4 w-[120px]" }),
|
|
2062
2098
|
/* @__PURE__ */ jsx33(Skeleton, { className: "h-3 w-[80px]" })
|
|
@@ -2084,7 +2120,7 @@ var TableSkeleton = ({
|
|
|
2084
2120
|
if (hideWrapper) {
|
|
2085
2121
|
return content;
|
|
2086
2122
|
}
|
|
2087
|
-
return /* @__PURE__ */ jsx33("div", { className: "table-wrapper rounded-
|
|
2123
|
+
return /* @__PURE__ */ jsx33("div", { className: "table-wrapper rounded-md border border-border bg-card overflow-hidden", children: content });
|
|
2088
2124
|
};
|
|
2089
2125
|
TableSkeleton.displayName = "TableSkeleton";
|
|
2090
2126
|
export {
|