@tutti-os/ui-system 0.0.2 → 0.0.4

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.
@@ -15,7 +15,7 @@ import {
15
15
  SuccessFilledIcon,
16
16
  WarningFilledIcon,
17
17
  WarningLinedIcon
18
- } from "./chunk-UTUVPSKL.js";
18
+ } from "./chunk-FVHI3UMS.js";
19
19
  import {
20
20
  cn
21
21
  } from "./chunk-DGPY4WP3.js";
@@ -108,7 +108,7 @@ import { cva as cva3 } from "class-variance-authority";
108
108
  import { Slot as Slot3 } from "radix-ui";
109
109
  import { jsx as jsx3 } from "react/jsx-runtime";
110
110
  var buttonVariants = cva3(
111
- "group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-normal whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/35 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
111
+ "group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent bg-clip-padding text-[13px] font-normal whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/35 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
112
112
  {
113
113
  variants: {
114
114
  variant: {
@@ -121,13 +121,13 @@ var buttonVariants = cva3(
121
121
  link: "text-primary underline-offset-4 hover:underline"
122
122
  },
123
123
  size: {
124
- default: "h-8 gap-[6px] px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
125
- dialog: "h-8 gap-[6px] rounded-md px-3 text-sm font-normal leading-5 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
126
- xs: "h-6 gap-1 rounded-sm px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
127
- sm: "h-7 gap-1 rounded-sm px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
128
- lg: "h-9 gap-2 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
124
+ default: "h-8 gap-[6px] px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-3.5 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-3.5",
125
+ dialog: "h-8 gap-[6px] rounded-md px-3 text-[13px] font-normal leading-5 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-3.5 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-3.5",
126
+ xs: "h-6 gap-1 rounded-sm px-2 text-[11px] in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-2.5 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-2.5",
127
+ sm: "h-7 gap-1 rounded-sm px-2.5 text-[13px] in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-3 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-3",
128
+ lg: "h-9 gap-2 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-3.5 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-3.5",
129
129
  icon: "size-8",
130
- "icon-xs": "size-6 rounded-sm in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
130
+ "icon-xs": "size-6 rounded-sm in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3 [&_svg[data-icon=inline-start]:not([class*='size-'])]:size-2.5 [&_[data-icon=inline-start]_svg:not([class*='size-'])]:size-2.5",
131
131
  "icon-sm": "size-7 rounded-sm in-data-[slot=button-group]:rounded-md",
132
132
  "icon-lg": "size-9"
133
133
  }
@@ -178,7 +178,7 @@ function Card({
178
178
  "data-slot": "card",
179
179
  "data-size": size,
180
180
  className: cn(
181
- "group/card flex flex-col gap-4 overflow-hidden rounded-lg border border-border/70 bg-card py-4 text-sm text-card-foreground shadow-none has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",
181
+ "group/card flex flex-col gap-4 overflow-hidden rounded-lg border border-border/70 bg-card py-4 text-[13px] text-card-foreground shadow-none has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",
182
182
  className
183
183
  ),
184
184
  ...props
@@ -204,7 +204,7 @@ function CardTitle({ className, ...props }) {
204
204
  {
205
205
  "data-slot": "card-title",
206
206
  className: cn(
207
- "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
207
+ "text-[15px] leading-snug font-medium group-data-[size=sm]/card:text-[13px]",
208
208
  className
209
209
  ),
210
210
  ...props
@@ -216,7 +216,10 @@ function CardDescription({ className, ...props }) {
216
216
  "div",
217
217
  {
218
218
  "data-slot": "card-description",
219
- className: cn("text-sm leading-[1.3] text-muted-foreground", className),
219
+ className: cn(
220
+ "text-[13px] leading-[1.3] text-muted-foreground",
221
+ className
222
+ ),
220
223
  ...props
221
224
  }
222
225
  );
@@ -391,7 +394,7 @@ function DialogContent({
391
394
  forceMount: true,
392
395
  className: cn(
393
396
  portaled ? "fixed" : "absolute",
394
- "pointer-events-none top-1/2 left-1/2 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 origin-center gap-3 rounded-[16px] border border-border-1 bg-[var(--background-panel)] p-[18px] text-sm text-foreground shadow-panel outline-none ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[transform,opacity] sm:max-w-[360px] data-[state=closed]:!pointer-events-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-[0.96] data-[state=closed]:duration-[150ms] data-[state=open]:pointer-events-auto data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-[0.96] data-[state=open]:duration-[250ms] motion-reduce:animate-none",
397
+ "pointer-events-none top-1/2 left-1/2 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 origin-center gap-3 rounded-[16px] border border-border-1 bg-[var(--background-panel)] p-[18px] text-[13px] text-foreground shadow-panel outline-none ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[transform,opacity] sm:max-w-[360px] data-[state=closed]:!pointer-events-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-[0.96] data-[state=closed]:duration-[150ms] data-[state=open]:pointer-events-auto data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-[0.96] data-[state=open]:duration-[250ms] motion-reduce:animate-none",
395
398
  className
396
399
  ),
397
400
  style: { zIndex: "var(--z-dialog)", ...style },
@@ -460,7 +463,7 @@ function DialogTitle({
460
463
  {
461
464
  "data-slot": "dialog-title",
462
465
  className: cn(
463
- "text-base leading-[1.35] font-semibold tracking-normal text-foreground",
466
+ "text-[15px] leading-[1.35] font-semibold tracking-normal text-foreground",
464
467
  className
465
468
  ),
466
469
  ...props
@@ -476,7 +479,7 @@ function DialogDescription({
476
479
  {
477
480
  "data-slot": "dialog-description",
478
481
  className: cn(
479
- "text-sm font-[400] leading-[1.3] text-text-secondary *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
482
+ "text-[13px] font-[400] leading-[1.3] text-text-secondary *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
480
483
  className
481
484
  ),
482
485
  ...props
@@ -538,7 +541,7 @@ function ConfirmationDialog({
538
541
  /* @__PURE__ */ jsx7(DialogTitle, { children: title }),
539
542
  description ? /* @__PURE__ */ jsx7(DialogDescription, { children: description }) : null
540
543
  ] }),
541
- children ? /* @__PURE__ */ jsx7("div", { className: "text-sm leading-[1.3] text-text-secondary", children }) : null,
544
+ children ? /* @__PURE__ */ jsx7("div", { className: "text-[13px] leading-[1.3] text-text-secondary", children }) : null,
542
545
  footer ?? /* @__PURE__ */ jsxs2(DialogFooter, { children: [
543
546
  /* @__PURE__ */ jsx7(
544
547
  Button,
@@ -796,7 +799,7 @@ var DatePicker = React2.forwardRef(
796
799
  disabled,
797
800
  type: "button",
798
801
  className: cn(
799
- "inline-flex h-8 min-h-8 w-full items-center justify-start rounded-md border border-transparent bg-[var(--workbench-field-bg)] px-3 text-left text-sm text-foreground transition-[background-color,border-color,box-shadow,color] outline-none hover:bg-muted/60 focus-visible:border-border focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground disabled:opacity-100",
802
+ "inline-flex h-8 min-h-8 w-full items-center justify-start rounded-md border border-transparent bg-[var(--workbench-field-bg)] px-3 text-left text-[13px] text-foreground transition-[background-color,border-color,box-shadow,color] outline-none hover:bg-muted/60 focus-visible:border-border focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:bg-muted disabled:text-muted-foreground disabled:opacity-100",
800
803
  !selectedDate && "text-muted-foreground",
801
804
  className
802
805
  ),
@@ -830,7 +833,7 @@ var DatePicker = React2.forwardRef(
830
833
  },
831
834
  children: [
832
835
  /* @__PURE__ */ jsxs3("div", { className: "mb-3 flex items-center justify-between gap-2", children: [
833
- /* @__PURE__ */ jsx8("div", { className: "text-sm font-semibold text-foreground", children: formatMonthLabel(visibleMonth) }),
836
+ /* @__PURE__ */ jsx8("div", { className: "text-[13px] font-semibold text-foreground", children: formatMonthLabel(visibleMonth) }),
834
837
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-1", children: [
835
838
  /* @__PURE__ */ jsx8(
836
839
  "button",
@@ -866,7 +869,7 @@ var DatePicker = React2.forwardRef(
866
869
  )
867
870
  ] })
868
871
  ] }),
869
- /* @__PURE__ */ jsx8("div", { className: "grid grid-cols-7 gap-1 text-center text-xs font-semibold text-muted-foreground", children: resolvedLabels.weekdayLabels.map((day) => /* @__PURE__ */ jsx8("div", { className: "py-1", children: day }, day)) }),
872
+ /* @__PURE__ */ jsx8("div", { className: "grid grid-cols-7 gap-1 text-center text-[11px] font-semibold text-muted-foreground", children: resolvedLabels.weekdayLabels.map((day) => /* @__PURE__ */ jsx8("div", { className: "py-1", children: day }, day)) }),
870
873
  /* @__PURE__ */ jsx8(
871
874
  "div",
872
875
  {
@@ -881,7 +884,7 @@ var DatePicker = React2.forwardRef(
881
884
  {
882
885
  "aria-pressed": isSelected,
883
886
  className: cn(
884
- "inline-flex h-8 w-8 items-center justify-center rounded-sm text-sm transition-[background-color,color,box-shadow] hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30",
887
+ "inline-flex h-8 w-8 items-center justify-center rounded-sm text-[13px] transition-[background-color,color,box-shadow] hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30",
885
888
  inCurrentMonth ? "text-foreground" : "text-muted-foreground",
886
889
  isToday && "bg-primary/10 text-primary shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--color-primary)_20%,transparent)]",
887
890
  isSelected && "bg-primary text-primary-foreground hover:bg-primary"
@@ -900,7 +903,7 @@ var DatePicker = React2.forwardRef(
900
903
  /* @__PURE__ */ jsx8(
901
904
  "button",
902
905
  {
903
- className: "inline-flex min-h-8 items-center justify-center rounded-sm px-3 text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
906
+ className: "inline-flex min-h-8 items-center justify-center rounded-sm px-3 text-[13px] font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
904
907
  type: "button",
905
908
  onClick: () => {
906
909
  onValueChange?.("");
@@ -913,7 +916,7 @@ var DatePicker = React2.forwardRef(
913
916
  /* @__PURE__ */ jsx8(
914
917
  "button",
915
918
  {
916
- className: "inline-flex min-h-8 items-center justify-center rounded-sm bg-primary px-3 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90",
919
+ className: "inline-flex min-h-8 items-center justify-center rounded-sm bg-primary px-3 text-[13px] font-medium text-primary-foreground transition-opacity hover:opacity-90",
917
920
  type: "button",
918
921
  onClick: () => selectDate(today),
919
922
  children: resolvedLabels.today
@@ -986,7 +989,7 @@ function DrawerContent({
986
989
  {
987
990
  "data-slot": "drawer-content",
988
991
  className: cn(
989
- "group/drawer-content fixed flex h-auto flex-col border-[var(--border-1)] bg-background-fronted text-sm text-foreground shadow-panel outline-none",
992
+ "group/drawer-content fixed flex h-auto flex-col border-[var(--border-1)] bg-background-fronted text-[13px] text-foreground shadow-panel outline-none",
990
993
  "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t",
991
994
  "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
992
995
  "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
@@ -1035,7 +1038,7 @@ function DrawerTitle({
1035
1038
  {
1036
1039
  "data-slot": "drawer-title",
1037
1040
  className: cn(
1038
- "text-base font-medium leading-[1.35] text-foreground",
1041
+ "text-[15px] font-medium leading-[1.35] text-foreground",
1039
1042
  className
1040
1043
  ),
1041
1044
  ...props
@@ -1050,7 +1053,7 @@ function DrawerDescription({
1050
1053
  DrawerPrimitive.Description,
1051
1054
  {
1052
1055
  "data-slot": "drawer-description",
1053
- className: cn("text-sm text-muted-foreground", className),
1056
+ className: cn("text-[13px] text-muted-foreground", className),
1054
1057
  ...props
1055
1058
  }
1056
1059
  );
@@ -1063,10 +1066,10 @@ import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
1063
1066
  import * as React3 from "react";
1064
1067
  import { Slot as Slot4 } from "radix-ui";
1065
1068
  import { jsx as jsx10 } from "react/jsx-runtime";
1066
- var menuSurfaceClassName = "t-dropdown flex flex-col gap-0.5 rounded-[8px] border border-[var(--border-1)] bg-[var(--background-fronted)] p-1 text-sm text-[var(--text-primary)] shadow-panel outline-none";
1067
- var menuItemClassName = "relative flex cursor-pointer items-center gap-1.5 rounded-sm px-2 py-1 text-sm text-[var(--text-primary)] outline-hidden transition-colors duration-200 select-none hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)] focus:bg-[var(--transparency-hover)] focus:text-[var(--text-primary)] data-[highlighted]:bg-[var(--transparency-hover)] data-[highlighted]:text-[var(--text-primary)] data-disabled:pointer-events-none data-disabled:text-[var(--text-disabled)] [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2";
1069
+ var menuSurfaceClassName = "t-dropdown flex flex-col gap-0.5 rounded-[8px] border border-[var(--border-1)] bg-[var(--background-fronted)] p-1 text-[13px] text-[var(--text-primary)] shadow-panel outline-none";
1070
+ var menuItemClassName = "relative flex cursor-pointer items-center gap-1.5 rounded-sm px-2 py-1 text-[13px] text-[var(--text-primary)] outline-hidden transition-colors duration-200 select-none hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)] focus:bg-[var(--transparency-hover)] focus:text-[var(--text-primary)] data-[highlighted]:bg-[var(--transparency-hover)] data-[highlighted]:text-[var(--text-primary)] data-disabled:pointer-events-none data-disabled:text-[var(--text-disabled)] [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2";
1068
1071
  var menuItemWithIndicatorClassName = `${menuItemClassName} pr-8`;
1069
- var menuItemIndicatorClassName = "pointer-events-none absolute right-2 flex size-4 items-center justify-center text-[var(--accent)]";
1072
+ var menuItemIndicatorClassName = "pointer-events-none absolute right-2 flex size-4 items-center justify-center text-[var(--tutti-purple)]";
1070
1073
  var MenuSurface = React3.forwardRef(
1071
1074
  ({
1072
1075
  asChild = false,
@@ -1203,7 +1206,7 @@ function DropdownMenuCheckboxItem({
1203
1206
  {
1204
1207
  className: menuItemIndicatorClassName,
1205
1208
  "data-slot": "dropdown-menu-checkbox-item-indicator",
1206
- children: /* @__PURE__ */ jsx11(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx11(CheckIcon, {}) })
1209
+ children: /* @__PURE__ */ jsx11(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx11(CheckIcon, { className: "text-[var(--tutti-purple)]" }) })
1207
1210
  }
1208
1211
  ),
1209
1212
  children
@@ -1247,7 +1250,7 @@ function DropdownMenuRadioItem({
1247
1250
  {
1248
1251
  className: menuItemIndicatorClassName,
1249
1252
  "data-slot": "dropdown-menu-radio-item-indicator",
1250
- children: /* @__PURE__ */ jsx11(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx11(CheckIcon, {}) })
1253
+ children: /* @__PURE__ */ jsx11(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx11(CheckIcon, { className: "text-[var(--tutti-purple)]" }) })
1251
1254
  }
1252
1255
  ),
1253
1256
  children
@@ -1266,7 +1269,7 @@ function DropdownMenuLabel({
1266
1269
  "data-inset": inset,
1267
1270
  "data-slot": "dropdown-menu-label",
1268
1271
  className: cn(
1269
- "px-1.5 py-1 text-xs font-medium text-[var(--text-secondary)] data-inset:pl-7",
1272
+ "px-1.5 py-1 text-[11px] font-medium text-[var(--text-secondary)] data-inset:pl-7",
1270
1273
  className
1271
1274
  ),
1272
1275
  ...props
@@ -1295,7 +1298,7 @@ function DropdownMenuShortcut({
1295
1298
  {
1296
1299
  "data-slot": "dropdown-menu-shortcut",
1297
1300
  className: cn(
1298
- "ml-auto text-xs tracking-widest text-[var(--text-secondary)] group-focus/dropdown-menu-item:text-[var(--text-primary)]",
1301
+ "ml-auto text-[11px] tracking-widest text-[var(--text-secondary)] group-focus/dropdown-menu-item:text-[var(--text-primary)]",
1299
1302
  className
1300
1303
  ),
1301
1304
  ...props
@@ -1362,10 +1365,10 @@ function DropdownMenuSubContent({
1362
1365
  // src/components/input/input.tsx
1363
1366
  import { jsx as jsx12 } from "react/jsx-runtime";
1364
1367
  var inputVariantClassNames = {
1365
- default: "h-8 rounded-[6px] px-3 py-0 text-sm leading-[1.3]",
1366
- lg: "h-12 rounded-[8px] px-4 py-3 text-base leading-[1.3]",
1367
- md: "h-8 rounded-[6px] px-3 py-0 text-sm leading-[1.3]",
1368
- sm: "h-8 rounded-[6px] px-3 py-0 text-sm leading-[1.3]",
1368
+ default: "h-8 rounded-[6px] px-3 py-0 text-[13px] leading-[1.3]",
1369
+ lg: "h-12 rounded-[8px] px-4 py-3 text-[15px] leading-[1.3]",
1370
+ md: "h-8 rounded-[6px] px-3 py-0 text-[13px] leading-[1.3]",
1371
+ sm: "h-8 rounded-[6px] px-3 py-0 text-[13px] leading-[1.3]",
1369
1372
  otp: "h-12 w-12 rounded-[4px] px-0 text-center text-xl font-medium sm:h-14 sm:w-14 sm:text-2xl"
1370
1373
  };
1371
1374
  function Input({
@@ -1384,9 +1387,9 @@ function Input({
1384
1387
  "data-size": size,
1385
1388
  "data-variant": resolvedVariant,
1386
1389
  className: cn(
1387
- "w-full min-w-0 border border-transparent bg-[var(--transparency-block)] font-normal text-[var(--text-primary)] shadow-none transition-colors duration-200 outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--text-primary)] placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none",
1390
+ "w-full min-w-0 border border-transparent bg-[var(--transparency-block)] font-normal text-[var(--text-primary)] shadow-none transition-colors duration-200 outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-[13px] file:font-medium file:text-[var(--text-primary)] placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none",
1388
1391
  inputVariantClassNames[resolvedVariant],
1389
- !variant && size === "sm" && "h-7 rounded-[4px] px-2 text-xs",
1392
+ !variant && size === "sm" && "h-7 rounded-[4px] px-2 text-[11px]",
1390
1393
  className
1391
1394
  ),
1392
1395
  ...props
@@ -1431,7 +1434,7 @@ function MentionPill({
1431
1434
  "span",
1432
1435
  {
1433
1436
  className: cn(
1434
- "group relative top-[3px] inline-flex max-w-full cursor-default items-center overflow-hidden rounded-[4px] border border-transparent bg-transparent py-0.5 align-baseline text-sm font-medium leading-5 no-underline transition-colors hover:border-transparent hover:bg-[color-mix(in_srgb,currentColor_12%,transparent)]",
1437
+ "group relative top-[3px] inline-flex max-w-full cursor-default items-center overflow-hidden rounded-[4px] border border-transparent bg-transparent py-0.5 align-baseline text-[13px] font-medium leading-5 no-underline transition-colors hover:border-transparent hover:bg-[color-mix(in_srgb,currentColor_12%,transparent)]",
1435
1438
  isFile ? "gap-1.5 px-1.5" : "gap-1 px-1",
1436
1439
  className
1437
1440
  ),
@@ -1540,7 +1543,7 @@ function PopoverContent({
1540
1543
  align,
1541
1544
  sideOffset,
1542
1545
  className: cn(
1543
- "t-dropdown z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg border border-[var(--border-1)] bg-[var(--background-fronted)] p-3 text-sm text-popover-foreground shadow-soft outline-hidden",
1546
+ "t-dropdown z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg border border-[var(--border-1)] bg-[var(--background-fronted)] p-3 text-[13px] text-popover-foreground shadow-soft outline-hidden",
1544
1547
  className
1545
1548
  ),
1546
1549
  style: { zIndex: "var(--z-popover)" },
@@ -1600,11 +1603,94 @@ function ResizableHandle({
1600
1603
 
1601
1604
  // src/components/scroll-area/scroll-area.tsx
1602
1605
  import * as React4 from "react";
1603
- import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
1604
1606
  import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1607
+ var MIN_THUMB_SIZE_PX = 24;
1605
1608
  function ScrollArea({
1606
1609
  className,
1607
1610
  children,
1611
+ onBlur,
1612
+ onFocus,
1613
+ onMouseEnter,
1614
+ onMouseLeave,
1615
+ scrollbarMode = "custom",
1616
+ scrollHideDelay: _scrollHideDelay,
1617
+ type,
1618
+ viewportClassName,
1619
+ viewportContentStyle,
1620
+ viewportProps,
1621
+ viewportRef,
1622
+ viewportTestId,
1623
+ ...props
1624
+ }) {
1625
+ const implementationProps = {
1626
+ className,
1627
+ onBlur,
1628
+ onFocus,
1629
+ onMouseEnter,
1630
+ onMouseLeave,
1631
+ scrollbarMode,
1632
+ type,
1633
+ viewportClassName,
1634
+ viewportContentStyle,
1635
+ viewportProps,
1636
+ viewportRef,
1637
+ viewportTestId,
1638
+ ...props
1639
+ };
1640
+ if (scrollbarMode === "native") {
1641
+ return /* @__PURE__ */ jsx16(NativeScrollArea, { ...implementationProps, children });
1642
+ }
1643
+ return /* @__PURE__ */ jsx16(CustomScrollArea, { ...implementationProps, children });
1644
+ }
1645
+ function NativeScrollArea({
1646
+ className,
1647
+ children,
1648
+ onBlur,
1649
+ onFocus,
1650
+ onMouseEnter,
1651
+ onMouseLeave,
1652
+ scrollbarMode,
1653
+ type,
1654
+ viewportClassName,
1655
+ viewportContentStyle,
1656
+ viewportProps,
1657
+ viewportRef,
1658
+ viewportTestId,
1659
+ ...props
1660
+ }) {
1661
+ const alwaysVisible = type === "always" || type === "scroll" || hasAlwaysVisibleScrollbarSelector(className);
1662
+ return /* @__PURE__ */ jsx16(
1663
+ ScrollAreaFrame,
1664
+ {
1665
+ ...props,
1666
+ className,
1667
+ "data-scrollbar-mode": scrollbarMode,
1668
+ onBlur,
1669
+ onFocus,
1670
+ onMouseEnter,
1671
+ onMouseLeave,
1672
+ alwaysVisible: false,
1673
+ viewportClassName: cn(
1674
+ nativeScrollbarClassName(alwaysVisible),
1675
+ viewportClassName
1676
+ ),
1677
+ viewportContentStyle,
1678
+ viewportProps,
1679
+ viewportRef,
1680
+ viewportTestId,
1681
+ children
1682
+ }
1683
+ );
1684
+ }
1685
+ function CustomScrollArea({
1686
+ className,
1687
+ children,
1688
+ onBlur,
1689
+ onFocus,
1690
+ onMouseEnter,
1691
+ onMouseLeave,
1692
+ scrollbarMode,
1693
+ type,
1608
1694
  viewportClassName,
1609
1695
  viewportContentStyle,
1610
1696
  viewportProps,
@@ -1612,103 +1698,470 @@ function ScrollArea({
1612
1698
  viewportTestId,
1613
1699
  ...props
1614
1700
  }) {
1701
+ const localViewportRef = React4.useRef(null);
1702
+ const contentRef = React4.useRef(null);
1703
+ const [active, setActive] = React4.useState(false);
1704
+ const alwaysVisible = type === "always" || type === "scroll" || hasAlwaysVisibleScrollbarSelector(className);
1615
1705
  return /* @__PURE__ */ jsxs7(
1616
- ScrollAreaPrimitive.Root,
1706
+ ScrollAreaFrame,
1617
1707
  {
1618
- "data-slot": "scroll-area",
1619
- className: cn("group/scroll-area relative", className),
1620
1708
  ...props,
1709
+ className,
1710
+ contentRef,
1711
+ "data-scrollbar-mode": scrollbarMode,
1712
+ onBlur: (event) => {
1713
+ onBlur?.(event);
1714
+ if (!event.currentTarget.contains(event.relatedTarget)) {
1715
+ setActive(false);
1716
+ }
1717
+ },
1718
+ onFocus: (event) => {
1719
+ onFocus?.(event);
1720
+ setActive(true);
1721
+ },
1722
+ onMouseEnter: (event) => {
1723
+ onMouseEnter?.(event);
1724
+ setActive(true);
1725
+ },
1726
+ onMouseLeave: (event) => {
1727
+ onMouseLeave?.(event);
1728
+ setActive(false);
1729
+ },
1730
+ alwaysVisible,
1731
+ viewportClassName: cn(
1732
+ "[scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
1733
+ viewportClassName
1734
+ ),
1735
+ viewportContentStyle,
1736
+ viewportProps,
1737
+ viewportRef: setRefs(localViewportRef, viewportRef),
1738
+ viewportTestId,
1621
1739
  children: [
1622
- /* @__PURE__ */ jsxs7(
1623
- ScrollAreaPrimitive.Viewport,
1740
+ children,
1741
+ /* @__PURE__ */ jsx16(
1742
+ ScrollAreaScrollbar,
1624
1743
  {
1625
- ...viewportProps,
1626
- "data-slot": "scroll-area-viewport",
1627
- "data-testid": viewportTestId,
1628
- ref: viewportRef,
1629
- className: cn(
1630
- "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
1631
- viewportClassName
1632
- ),
1633
- children: [
1634
- viewportContentStyle ? /* @__PURE__ */ jsx16(ScrollAreaViewportContentStyleBridge, { style: viewportContentStyle }) : null,
1635
- children
1636
- ]
1744
+ active: active || alwaysVisible,
1745
+ contentRef,
1746
+ orientation: "vertical",
1747
+ viewportRef: localViewportRef
1637
1748
  }
1638
- ),
1639
- /* @__PURE__ */ jsx16(ScrollBar, {}),
1640
- /* @__PURE__ */ jsx16(ScrollAreaPrimitive.Corner, {})
1749
+ )
1641
1750
  ]
1642
1751
  }
1643
1752
  );
1644
1753
  }
1645
- function ScrollAreaViewportContentStyleBridge({
1646
- style
1754
+ function ScrollAreaFrame({
1755
+ alwaysVisible,
1756
+ children,
1757
+ className,
1758
+ contentRef,
1759
+ viewportClassName,
1760
+ viewportContentStyle,
1761
+ viewportProps,
1762
+ viewportRef,
1763
+ viewportTestId,
1764
+ ...props
1647
1765
  }) {
1648
- const markerRef = React4.useRef(null);
1649
- React4.useLayoutEffect(() => {
1650
- const contentElement = markerRef.current?.parentElement;
1651
- if (!contentElement) {
1766
+ return /* @__PURE__ */ jsx16(
1767
+ "div",
1768
+ {
1769
+ "data-slot": "scroll-area",
1770
+ className: cn(
1771
+ "group/scroll-area relative",
1772
+ alwaysVisible ? "[&_[data-slot=scroll-area-scrollbar]]:opacity-100" : null,
1773
+ className
1774
+ ),
1775
+ ...props,
1776
+ children: /* @__PURE__ */ jsx16(
1777
+ "div",
1778
+ {
1779
+ ...viewportProps,
1780
+ "data-slot": "scroll-area-viewport",
1781
+ "data-testid": viewportTestId,
1782
+ ref: viewportRef,
1783
+ className: cn(
1784
+ "size-full overflow-auto rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
1785
+ viewportClassName
1786
+ ),
1787
+ children: /* @__PURE__ */ jsx16(
1788
+ "div",
1789
+ {
1790
+ ref: contentRef,
1791
+ "data-slot": "scroll-area-content",
1792
+ style: {
1793
+ minWidth: "100%",
1794
+ display: "table",
1795
+ ...viewportContentStyle
1796
+ },
1797
+ children
1798
+ }
1799
+ )
1800
+ }
1801
+ )
1802
+ }
1803
+ );
1804
+ }
1805
+ function ScrollAreaScrollbar({
1806
+ active,
1807
+ contentRef,
1808
+ orientation,
1809
+ viewportRef
1810
+ }) {
1811
+ const trackRef = React4.useRef(null);
1812
+ const thumbRef = React4.useRef(null);
1813
+ const dragStateRef = React4.useRef(null);
1814
+ const frameRef = React4.useRef(null);
1815
+ const scrollableRef = React4.useRef(false);
1816
+ const [dragging, setDragging] = React4.useState(false);
1817
+ const [scrollable, setScrollable] = React4.useState(false);
1818
+ const [trackActive, setTrackActive] = React4.useState(false);
1819
+ const syncScrollbarState = React4.useCallback(() => {
1820
+ const viewport = viewportRef.current;
1821
+ const track = trackRef.current;
1822
+ const thumb = thumbRef.current;
1823
+ if (!viewport || !track || !thumb) {
1824
+ updateScrollable(false, scrollableRef, setScrollable);
1652
1825
  return;
1653
1826
  }
1654
- const previousValues = /* @__PURE__ */ new Map();
1655
- for (const [property, value] of Object.entries(style)) {
1656
- const cssProperty = toCssPropertyName(property);
1657
- previousValues.set(cssProperty, {
1658
- value: contentElement.style.getPropertyValue(cssProperty),
1659
- priority: contentElement.style.getPropertyPriority(cssProperty)
1660
- });
1661
- if (value === void 0 || value === null) {
1662
- contentElement.style.removeProperty(cssProperty);
1827
+ const viewportSize = orientation === "vertical" ? viewport.clientHeight : viewport.clientWidth;
1828
+ const scrollSize = orientation === "vertical" ? viewport.scrollHeight : viewport.scrollWidth;
1829
+ const scrollOffset = orientation === "vertical" ? viewport.scrollTop : viewport.scrollLeft;
1830
+ const trackSize = orientation === "vertical" ? track.clientHeight : track.clientWidth;
1831
+ const maxScrollOffset = Math.max(0, scrollSize - viewportSize);
1832
+ if (viewportSize <= 0 || trackSize <= 0 || maxScrollOffset <= 0) {
1833
+ updateScrollable(false, scrollableRef, setScrollable);
1834
+ return;
1835
+ }
1836
+ const thumbSize = Math.min(
1837
+ trackSize,
1838
+ Math.max(
1839
+ MIN_THUMB_SIZE_PX,
1840
+ Math.round(viewportSize / scrollSize * trackSize)
1841
+ )
1842
+ );
1843
+ const maxThumbOffset = Math.max(0, trackSize - thumbSize);
1844
+ const thumbOffset = Math.round(
1845
+ scrollOffset / maxScrollOffset * maxThumbOffset
1846
+ );
1847
+ if (orientation === "vertical") {
1848
+ thumb.style.height = `${thumbSize}px`;
1849
+ thumb.style.width = "";
1850
+ thumb.style.transform = `translateY(${thumbOffset}px)`;
1851
+ } else {
1852
+ thumb.style.width = `${thumbSize}px`;
1853
+ thumb.style.height = "";
1854
+ thumb.style.transform = `translateX(${thumbOffset}px)`;
1855
+ }
1856
+ updateScrollable(true, scrollableRef, setScrollable);
1857
+ }, [orientation, viewportRef]);
1858
+ const scheduleSync = React4.useCallback(() => {
1859
+ if (frameRef.current !== null) {
1860
+ return;
1861
+ }
1862
+ frameRef.current = requestAnimationFrameSafely(() => {
1863
+ frameRef.current = null;
1864
+ syncScrollbarState();
1865
+ });
1866
+ }, [syncScrollbarState]);
1867
+ const scrollViewportToThumbOffset = React4.useCallback(
1868
+ (thumbOffset) => {
1869
+ const viewport = viewportRef.current;
1870
+ const track = trackRef.current;
1871
+ const thumb = thumbRef.current;
1872
+ if (!viewport || !track || !thumb) {
1873
+ return;
1874
+ }
1875
+ const viewportSize = orientation === "vertical" ? viewport.clientHeight : viewport.clientWidth;
1876
+ const scrollSize = orientation === "vertical" ? viewport.scrollHeight : viewport.scrollWidth;
1877
+ const trackSize = orientation === "vertical" ? track.clientHeight : track.clientWidth;
1878
+ const thumbSize = orientation === "vertical" ? thumb.offsetHeight : thumb.offsetWidth;
1879
+ const maxScrollOffset = Math.max(0, scrollSize - viewportSize);
1880
+ const maxThumbOffset = Math.max(0, trackSize - thumbSize);
1881
+ if (maxScrollOffset <= 0 || maxThumbOffset <= 0) {
1882
+ return;
1883
+ }
1884
+ const nextScrollOffset = clamp(thumbOffset, 0, maxThumbOffset) / maxThumbOffset * maxScrollOffset;
1885
+ if (orientation === "vertical") {
1886
+ viewport.scrollTop = nextScrollOffset;
1887
+ } else {
1888
+ viewport.scrollLeft = nextScrollOffset;
1889
+ }
1890
+ syncScrollbarState();
1891
+ },
1892
+ [orientation, syncScrollbarState, viewportRef]
1893
+ );
1894
+ const handleTrackPointerDown = React4.useCallback(
1895
+ (event) => {
1896
+ if (event.button !== 0 || !scrollableRef.current) {
1897
+ return;
1898
+ }
1899
+ const track = trackRef.current;
1900
+ const thumb = thumbRef.current;
1901
+ if (!track || !thumb || event.target === thumb) {
1902
+ return;
1903
+ }
1904
+ event.preventDefault();
1905
+ event.stopPropagation();
1906
+ const trackRect = track.getBoundingClientRect();
1907
+ const clientOffset = orientation === "vertical" ? event.clientY : event.clientX;
1908
+ const trackStart = orientation === "vertical" ? trackRect.top : trackRect.left;
1909
+ const thumbSize = orientation === "vertical" ? thumb.offsetHeight : thumb.offsetWidth;
1910
+ scrollViewportToThumbOffset(clientOffset - trackStart - thumbSize / 2);
1911
+ },
1912
+ [orientation, scrollViewportToThumbOffset]
1913
+ );
1914
+ const handleThumbPointerDown = React4.useCallback(
1915
+ (event) => {
1916
+ if (event.button !== 0 || !scrollableRef.current) {
1917
+ return;
1918
+ }
1919
+ const viewport = viewportRef.current;
1920
+ const track = trackRef.current;
1921
+ const thumb = thumbRef.current;
1922
+ if (!viewport || !track || !thumb) {
1923
+ return;
1924
+ }
1925
+ const viewportSize = orientation === "vertical" ? viewport.clientHeight : viewport.clientWidth;
1926
+ const scrollSize = orientation === "vertical" ? viewport.scrollHeight : viewport.scrollWidth;
1927
+ const trackSize = orientation === "vertical" ? track.clientHeight : track.clientWidth;
1928
+ const thumbSize = orientation === "vertical" ? thumb.offsetHeight : thumb.offsetWidth;
1929
+ const maxScrollOffset = Math.max(0, scrollSize - viewportSize);
1930
+ const maxThumbOffset = Math.max(0, trackSize - thumbSize);
1931
+ if (maxScrollOffset <= 0 || maxThumbOffset <= 0) {
1932
+ return;
1933
+ }
1934
+ event.preventDefault();
1935
+ event.stopPropagation();
1936
+ dragStateRef.current = {
1937
+ maxScrollOffset,
1938
+ maxThumbOffset,
1939
+ startClientOffset: orientation === "vertical" ? event.clientY : event.clientX,
1940
+ startScrollOffset: orientation === "vertical" ? viewport.scrollTop : viewport.scrollLeft
1941
+ };
1942
+ setDragging(true);
1943
+ },
1944
+ [orientation, viewportRef]
1945
+ );
1946
+ React4.useEffect(() => {
1947
+ if (!dragging) {
1948
+ return;
1949
+ }
1950
+ const handlePointerMove = (event) => {
1951
+ const dragState = dragStateRef.current;
1952
+ const viewport = viewportRef.current;
1953
+ if (!dragState || !viewport) {
1954
+ return;
1955
+ }
1956
+ const clientOffset = orientation === "vertical" ? event.clientY : event.clientX;
1957
+ const nextThumbOffset = dragState.startScrollOffset / dragState.maxScrollOffset * dragState.maxThumbOffset + (clientOffset - dragState.startClientOffset);
1958
+ const nextScrollOffset = clamp(nextThumbOffset, 0, dragState.maxThumbOffset) / dragState.maxThumbOffset * dragState.maxScrollOffset;
1959
+ if (orientation === "vertical") {
1960
+ viewport.scrollTop = nextScrollOffset;
1663
1961
  } else {
1664
- contentElement.style.setProperty(cssProperty, String(value));
1962
+ viewport.scrollLeft = nextScrollOffset;
1665
1963
  }
1964
+ syncScrollbarState();
1965
+ };
1966
+ const handlePointerUp = () => {
1967
+ dragStateRef.current = null;
1968
+ setDragging(false);
1969
+ };
1970
+ window.addEventListener("pointermove", handlePointerMove);
1971
+ window.addEventListener("pointerup", handlePointerUp);
1972
+ return () => {
1973
+ window.removeEventListener("pointermove", handlePointerMove);
1974
+ window.removeEventListener("pointerup", handlePointerUp);
1975
+ };
1976
+ }, [dragging, orientation, syncScrollbarState, viewportRef]);
1977
+ React4.useEffect(() => {
1978
+ const viewport = viewportRef.current;
1979
+ if (!viewport) {
1980
+ updateScrollable(false, scrollableRef, setScrollable);
1981
+ return;
1982
+ }
1983
+ syncScrollbarState();
1984
+ viewport.addEventListener("scroll", scheduleSync, { passive: true });
1985
+ const resizeObserver = typeof ResizeObserver !== "undefined" ? new ResizeObserver(scheduleSync) : null;
1986
+ resizeObserver?.observe(viewport);
1987
+ if (contentRef.current) {
1988
+ resizeObserver?.observe(contentRef.current);
1666
1989
  }
1667
1990
  return () => {
1668
- for (const [cssProperty, previous] of previousValues) {
1669
- if (previous.value) {
1670
- contentElement.style.setProperty(
1671
- cssProperty,
1672
- previous.value,
1673
- previous.priority
1674
- );
1675
- } else {
1676
- contentElement.style.removeProperty(cssProperty);
1677
- }
1991
+ if (frameRef.current !== null) {
1992
+ cancelAnimationFrameSafely(frameRef.current);
1993
+ frameRef.current = null;
1678
1994
  }
1995
+ viewport.removeEventListener("scroll", scheduleSync);
1996
+ resizeObserver?.disconnect();
1679
1997
  };
1680
- }, [style]);
1681
- return /* @__PURE__ */ jsx16("span", { ref: markerRef, "data-slot": "scroll-area-content-style-bridge", hidden: true });
1682
- }
1683
- function toCssPropertyName(property) {
1684
- return property.startsWith("--") ? property : property.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
1998
+ }, [contentRef, scheduleSync, syncScrollbarState, viewportRef]);
1999
+ React4.useEffect(() => {
2000
+ scheduleSync();
2001
+ });
2002
+ return /* @__PURE__ */ jsx16(
2003
+ "div",
2004
+ {
2005
+ ref: trackRef,
2006
+ "data-dragging": dragging ? "true" : "false",
2007
+ "data-orientation": orientation,
2008
+ "data-scrollable": scrollable ? "true" : "false",
2009
+ "data-slot": "scroll-area-scrollbar",
2010
+ "aria-hidden": "true",
2011
+ className: scrollbarClassName(orientation),
2012
+ style: scrollbarStyle({
2013
+ active: active || dragging,
2014
+ orientation,
2015
+ scrollable
2016
+ }),
2017
+ onPointerEnter: () => setTrackActive(true),
2018
+ onPointerLeave: () => setTrackActive(false),
2019
+ onPointerDown: handleTrackPointerDown,
2020
+ children: /* @__PURE__ */ jsx16(
2021
+ "div",
2022
+ {
2023
+ ref: thumbRef,
2024
+ "data-slot": "scroll-area-thumb",
2025
+ className: thumbClassName(orientation),
2026
+ style: thumbStyle({ active: trackActive || dragging, orientation }),
2027
+ onPointerDown: handleThumbPointerDown
2028
+ }
2029
+ )
2030
+ }
2031
+ );
1685
2032
  }
1686
2033
  function ScrollBar({
1687
2034
  className,
2035
+ forceMount: _forceMount,
1688
2036
  orientation = "vertical",
1689
2037
  ...props
1690
2038
  }) {
1691
2039
  return /* @__PURE__ */ jsx16(
1692
- ScrollAreaPrimitive.ScrollAreaScrollbar,
2040
+ "div",
1693
2041
  {
1694
2042
  "data-slot": "scroll-area-scrollbar",
1695
2043
  "data-orientation": orientation,
1696
- orientation,
1697
- className: cn(
1698
- "group/scrollbar absolute z-10 flex touch-none p-[2px] opacity-0 transition-opacity duration-150 select-none group-hover/scroll-area:opacity-100 group-focus-within/scroll-area:opacity-100 data-[orientation=horizontal]:right-0 data-[orientation=horizontal]:bottom-0 data-[orientation=horizontal]:left-0 data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:flex-col data-[orientation=vertical]:top-0 data-[orientation=vertical]:right-0 data-[orientation=vertical]:bottom-0 data-[orientation=vertical]:w-2",
1699
- className
1700
- ),
2044
+ className: cn(scrollbarClassName(orientation), className),
2045
+ style: scrollbarStyle({ active: false, orientation, scrollable: true }),
1701
2046
  ...props,
1702
2047
  children: /* @__PURE__ */ jsx16(
1703
- ScrollAreaPrimitive.ScrollAreaThumb,
2048
+ "div",
1704
2049
  {
1705
2050
  "data-slot": "scroll-area-thumb",
1706
- className: "relative flex-1 rounded-full bg-[var(--transparency-block)] transition-colors duration-150 group-hover/scrollbar:bg-[var(--transparency-hover)]"
2051
+ className: thumbClassName(orientation),
2052
+ style: thumbStyle({ active: false, orientation })
1707
2053
  }
1708
2054
  )
1709
2055
  }
1710
2056
  );
1711
2057
  }
2058
+ function scrollbarClassName(orientation) {
2059
+ return cn(
2060
+ orientation === "horizontal" ? "data-[orientation=horizontal]:h-2" : "data-[orientation=vertical]:w-2"
2061
+ );
2062
+ }
2063
+ function thumbClassName(orientation) {
2064
+ return cn(
2065
+ "rounded-full",
2066
+ orientation === "horizontal" ? "top-[2px] bottom-[2px]" : "right-[2px] left-[2px]"
2067
+ );
2068
+ }
2069
+ function nativeScrollbarClassName(alwaysVisible) {
2070
+ return cn(
2071
+ "[scrollbar-width:thin] [scrollbar-color:transparent_transparent]",
2072
+ "[&::-webkit-scrollbar]:block [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2",
2073
+ "[&::-webkit-scrollbar-corner]:bg-transparent [&::-webkit-scrollbar-track]:bg-transparent",
2074
+ "[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:border-2 [&::-webkit-scrollbar-thumb]:border-solid [&::-webkit-scrollbar-thumb]:border-transparent [&::-webkit-scrollbar-thumb]:bg-clip-content",
2075
+ alwaysVisible ? "[scrollbar-color:var(--transparency-block)_transparent] [&::-webkit-scrollbar-thumb]:bg-[var(--transparency-block)] hover:[&::-webkit-scrollbar-thumb]:bg-[var(--transparency-hover)]" : "hover:[scrollbar-color:var(--transparency-block)_transparent] focus-within:[scrollbar-color:var(--transparency-block)_transparent] hover:[&::-webkit-scrollbar-thumb]:bg-[var(--transparency-block)] focus-within:[&::-webkit-scrollbar-thumb]:bg-[var(--transparency-block)]"
2076
+ );
2077
+ }
2078
+ function scrollbarStyle({
2079
+ active,
2080
+ orientation,
2081
+ scrollable
2082
+ }) {
2083
+ return {
2084
+ position: "absolute",
2085
+ zIndex: 10,
2086
+ display: "flex",
2087
+ touchAction: "none",
2088
+ padding: 2,
2089
+ opacity: active && scrollable ? 1 : 0,
2090
+ pointerEvents: scrollable ? "auto" : "none",
2091
+ userSelect: "none",
2092
+ transition: "opacity 150ms ease-in-out",
2093
+ cursor: "pointer",
2094
+ ...orientation === "horizontal" ? {
2095
+ right: 0,
2096
+ bottom: 0,
2097
+ left: 0,
2098
+ height: 8,
2099
+ flexDirection: "column"
2100
+ } : {
2101
+ top: 0,
2102
+ right: 0,
2103
+ bottom: 0,
2104
+ width: 8
2105
+ }
2106
+ };
2107
+ }
2108
+ function thumbStyle({
2109
+ active,
2110
+ orientation
2111
+ }) {
2112
+ return {
2113
+ position: "absolute",
2114
+ minHeight: orientation === "vertical" ? MIN_THUMB_SIZE_PX : void 0,
2115
+ minWidth: orientation === "horizontal" ? MIN_THUMB_SIZE_PX : void 0,
2116
+ borderRadius: 999,
2117
+ background: active ? "var(--transparency-hover)" : "var(--transparency-block)",
2118
+ cursor: active ? "grabbing" : "grab",
2119
+ transition: "background-color 150ms ease-in-out",
2120
+ ...orientation === "horizontal" ? {
2121
+ top: 2,
2122
+ bottom: 2
2123
+ } : {
2124
+ right: 2,
2125
+ left: 2
2126
+ }
2127
+ };
2128
+ }
2129
+ function hasAlwaysVisibleScrollbarSelector(className) {
2130
+ return typeof className === "string" && className.includes("scroll-area-scrollbar") && className.includes("opacity-100");
2131
+ }
2132
+ function setRefs(localRef, forwardedRef) {
2133
+ return (node) => {
2134
+ localRef.current = node;
2135
+ if (typeof forwardedRef === "function") {
2136
+ forwardedRef(node);
2137
+ } else if (forwardedRef) {
2138
+ forwardedRef.current = node;
2139
+ }
2140
+ };
2141
+ }
2142
+ function updateScrollable(nextScrollable, scrollableRef, setScrollable) {
2143
+ if (scrollableRef.current === nextScrollable) {
2144
+ return;
2145
+ }
2146
+ scrollableRef.current = nextScrollable;
2147
+ setScrollable(nextScrollable);
2148
+ }
2149
+ function requestAnimationFrameSafely(callback) {
2150
+ if (typeof window.requestAnimationFrame === "function") {
2151
+ return window.requestAnimationFrame(callback);
2152
+ }
2153
+ return window.setTimeout(() => callback(performance.now()), 16);
2154
+ }
2155
+ function cancelAnimationFrameSafely(frameId) {
2156
+ if (typeof window.cancelAnimationFrame === "function") {
2157
+ window.cancelAnimationFrame(frameId);
2158
+ return;
2159
+ }
2160
+ window.clearTimeout(frameId);
2161
+ }
2162
+ function clamp(value, min, max) {
2163
+ return Math.min(max, Math.max(min, value));
2164
+ }
1712
2165
 
1713
2166
  // src/components/select/select.tsx
1714
2167
  import { Select as SelectPrimitive } from "radix-ui";
@@ -1750,7 +2203,7 @@ function SelectTrigger({
1750
2203
  "data-size": size,
1751
2204
  "data-variant": variant,
1752
2205
  className: cn(
1753
- variant === "button" ? buttonVariants({ variant: "default", size }) : "flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-transparent bg-[var(--transparency-block)] py-2 pr-2 pl-2.5 text-sm text-[var(--text-primary)] whitespace-nowrap transition-colors outline-none select-none hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none data-placeholder:text-[var(--text-placeholder)] data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2206
+ variant === "button" ? buttonVariants({ variant: "default", size }) : "flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-transparent bg-[var(--transparency-block)] py-2 pr-2 pl-2.5 text-[13px] text-[var(--text-primary)] whitespace-nowrap transition-colors outline-none select-none hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none data-placeholder:text-[var(--text-placeholder)] data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1754
2207
  "[&[data-state=open]>svg]:rotate-180 [&>svg]:transition-transform [&>svg]:duration-200",
1755
2208
  className
1756
2209
  ),
@@ -1822,7 +2275,7 @@ function SelectLabel({
1822
2275
  {
1823
2276
  "data-slot": "select-label",
1824
2277
  className: cn(
1825
- "px-1.5 py-1 text-xs font-normal text-[var(--text-secondary)]",
2278
+ "px-1.5 py-1 text-[11px] font-normal text-[var(--text-secondary)]",
1826
2279
  className
1827
2280
  ),
1828
2281
  ...props
@@ -1867,7 +2320,7 @@ function SelectSplitColumnLabel({
1867
2320
  {
1868
2321
  "data-slot": "select-split-column-label",
1869
2322
  className: cn(
1870
- "shrink-0 px-2 pt-1 pb-2 text-xs font-normal leading-[18px] text-[var(--text-secondary)]",
2323
+ "shrink-0 px-2 pt-1 pb-2 text-[11px] font-normal leading-[18px] text-[var(--text-secondary)]",
1871
2324
  className
1872
2325
  ),
1873
2326
  ...props
@@ -1923,10 +2376,10 @@ function SelectItem({
1923
2376
  /* @__PURE__ */ jsx17("span", { className: menuItemIndicatorClassName, children: forceSelectedIndicator ? /* @__PURE__ */ jsx17(
1924
2377
  CheckIcon,
1925
2378
  {
1926
- className: "pointer-events-none",
2379
+ className: "pointer-events-none text-[var(--tutti-purple)]",
1927
2380
  "data-slot": "select-item-forced-indicator"
1928
2381
  }
1929
- ) : /* @__PURE__ */ jsx17(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx17(CheckIcon, { className: "pointer-events-none" }) }) }),
2382
+ ) : /* @__PURE__ */ jsx17(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx17(CheckIcon, { className: "pointer-events-none text-[var(--tutti-purple)]" }) }) }),
1930
2383
  /* @__PURE__ */ jsx17(SelectPrimitive.ItemText, { children })
1931
2384
  ]
1932
2385
  }
@@ -2103,10 +2556,10 @@ function Toaster({ toastOptions, style, ...props }) {
2103
2556
  ...toastOptions,
2104
2557
  classNames: {
2105
2558
  toast: "group pointer-events-auto min-h-14 rounded-[8px] border border-[var(--line-2)] bg-[var(--background-fronted)] px-3.5 py-3 text-[var(--text-primary)] shadow-[0_14px_40px_var(--shadow-elevated)]",
2106
- title: "text-sm font-semibold leading-5 text-[var(--text-primary)]",
2107
- description: "mt-0.5 text-xs leading-5 text-[var(--text-secondary)]",
2108
- actionButton: "h-7 rounded-[6px] bg-[var(--text-primary)] px-2.5 text-xs font-normal text-[var(--text-inverted)] transition-colors hover:bg-[var(--text-primary-hover)]",
2109
- cancelButton: "h-7 rounded-[6px] bg-[var(--transparency-block)] px-2.5 text-xs font-normal text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)]",
2559
+ title: "text-[13px] font-semibold leading-5 text-[var(--text-primary)]",
2560
+ description: "mt-0.5 text-[11px] leading-5 text-[var(--text-secondary)]",
2561
+ actionButton: "h-7 rounded-[6px] bg-[var(--text-primary)] px-2.5 text-[11px] font-normal text-[var(--text-inverted)] transition-colors hover:bg-[var(--text-primary-hover)]",
2562
+ cancelButton: "h-7 rounded-[6px] bg-[var(--transparency-block)] px-2.5 text-[11px] font-normal text-[var(--text-primary)] transition-colors hover:bg-[var(--transparency-hover)]",
2110
2563
  closeButton: "border-[var(--line-2)] bg-[var(--background-fronted)] text-[var(--text-secondary)] hover:bg-[var(--transparency-hover)] hover:text-[var(--text-primary)]",
2111
2564
  icon: "text-[var(--accent)]",
2112
2565
  ...toastOptions?.classNames
@@ -2211,7 +2664,7 @@ function Switch({
2211
2664
  "data-slot": "switch",
2212
2665
  "data-size": size,
2213
2666
  className: cn(
2214
- "peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-[background-color,border-color,box-shadow] outline-none focus-visible:border-[var(--border-focus)] focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--border-focus)_30%,transparent)] aria-invalid:border-[var(--state-danger)] aria-invalid:ring-2 aria-invalid:ring-[color-mix(in_srgb,var(--state-danger)_20%,transparent)] data-[size=default]:h-[18px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[state=checked]:bg-[var(--accent)] data-[state=unchecked]:bg-[var(--text-disabled)] data-disabled:cursor-not-allowed data-disabled:opacity-100",
2667
+ "peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-[background-color,border-color,box-shadow] outline-none focus-visible:border-[var(--border-focus)] focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--border-focus)_30%,transparent)] aria-invalid:border-[var(--state-danger)] aria-invalid:ring-2 aria-invalid:ring-[color-mix(in_srgb,var(--state-danger)_20%,transparent)] data-[size=default]:h-[18px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[state=checked]:bg-[var(--tutti-purple)] data-[state=unchecked]:bg-[var(--text-disabled)] data-disabled:cursor-not-allowed data-disabled:opacity-100",
2215
2668
  className
2216
2669
  ),
2217
2670
  ...props,
@@ -2234,7 +2687,7 @@ function Textarea({ className, ...props }) {
2234
2687
  {
2235
2688
  "data-slot": "textarea",
2236
2689
  className: cn(
2237
- "flex field-sizing-content min-h-20 w-full rounded-[6px] border border-transparent bg-[var(--transparency-block)] px-3 py-3 text-sm font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none",
2690
+ "flex field-sizing-content min-h-20 w-full rounded-[6px] border border-transparent bg-[var(--transparency-block)] px-3 py-3 text-[13px] font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none",
2238
2691
  className
2239
2692
  ),
2240
2693
  ...props
@@ -2285,7 +2738,7 @@ function formatToastText(children) {
2285
2738
  return children;
2286
2739
  }
2287
2740
  var toastVariants = cva5(
2288
- "group pointer-events-auto relative flex min-h-8 min-w-0 max-w-[min(92vw,420px)] items-center justify-center rounded-[8px] px-3 py-1.5 text-center text-sm font-normal leading-normal shadow-none transition-all data-closed:fade-out-80 data-closed:slide-out-to-top-full data-open:slide-in-from-top-full data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none",
2741
+ "group pointer-events-auto relative flex min-h-8 min-w-0 max-w-[min(92vw,420px)] items-center justify-center rounded-[8px] px-3 py-1.5 text-center text-[13px] font-normal leading-normal shadow-none transition-all data-closed:fade-out-80 data-closed:slide-out-to-top-full data-open:slide-in-from-top-full data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none",
2289
2742
  {
2290
2743
  variants: {
2291
2744
  variant: {
@@ -2343,7 +2796,7 @@ function ToastTitle({
2343
2796
  {
2344
2797
  "data-slot": "toast-title",
2345
2798
  className: cn(
2346
- "inline-flex max-w-full items-center justify-center gap-[6px] text-center text-sm font-normal leading-normal",
2799
+ "inline-flex max-w-full items-center justify-center gap-[6px] text-center text-[13px] font-normal leading-normal",
2347
2800
  className
2348
2801
  ),
2349
2802
  ...props,
@@ -2371,7 +2824,7 @@ function ToastDescription({
2371
2824
  {
2372
2825
  "data-slot": "toast-description",
2373
2826
  className: cn(
2374
- "box-border w-full px-2 text-xs font-normal leading-[1.3] text-current opacity-75 [overflow-wrap:anywhere]",
2827
+ "box-border w-full px-2 text-[11px] font-normal leading-[1.3] text-current opacity-75 [overflow-wrap:anywhere]",
2375
2828
  className
2376
2829
  ),
2377
2830
  ...props
@@ -2458,7 +2911,7 @@ function TooltipContent({
2458
2911
  "data-slot": "tooltip-content",
2459
2912
  sideOffset,
2460
2913
  className: cn(
2461
- "inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-2 rounded-md border border-[var(--border-1)] bg-[var(--background-fronted)] px-2 py-1 text-sm leading-[1.3] text-popover-foreground shadow-soft outline-none 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 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2914
+ "inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-2 rounded-md border border-[var(--border-1)] bg-[var(--background-fronted)] px-2 py-1 text-[13px] leading-[1.3] text-popover-foreground shadow-soft outline-none 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 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2462
2915
  className
2463
2916
  ),
2464
2917
  style: { zIndex: "var(--z-tooltip, 100700)", ...style },
@@ -2469,7 +2922,7 @@ function TooltipContent({
2469
2922
  }
2470
2923
 
2471
2924
  // src/components/underline-tabs/underline-tabs.tsx
2472
- import { useEffect as useEffect3, useLayoutEffect as useLayoutEffect3, useRef as useRef3, useState as useState3 } from "react";
2925
+ import { useEffect as useEffect4, useLayoutEffect as useLayoutEffect2, useRef as useRef3, useState as useState4 } from "react";
2473
2926
  import { jsx as jsx28, jsxs as jsxs11 } from "react/jsx-runtime";
2474
2927
  function UnderlineTabs({
2475
2928
  tabs,
@@ -2488,12 +2941,12 @@ function UnderlineTabs({
2488
2941
  const viewportRef = useRef3(null);
2489
2942
  const rowRef = useRef3(null);
2490
2943
  const buttonRefs = useRef3({});
2491
- const [indicatorStyle, setIndicatorStyle] = useState3({ left: 0, width: 0 });
2492
- const [overflow, setOverflow] = useState3({
2944
+ const [indicatorStyle, setIndicatorStyle] = useState4({ left: 0, width: 0 });
2945
+ const [overflow, setOverflow] = useState4({
2493
2946
  canScrollLeft: false,
2494
2947
  canScrollRight: false
2495
2948
  });
2496
- useLayoutEffect3(() => {
2949
+ useLayoutEffect2(() => {
2497
2950
  const row = rowRef.current;
2498
2951
  const button = buttonRefs.current[value];
2499
2952
  if (!row || !button) {
@@ -2510,7 +2963,7 @@ function UnderlineTabs({
2510
2963
  (current) => current.left === nextStyle.left && current.width === nextStyle.width ? current : nextStyle
2511
2964
  );
2512
2965
  }, [tabs, value]);
2513
- useEffect3(() => {
2966
+ useEffect4(() => {
2514
2967
  const viewport = viewportRef.current;
2515
2968
  if (!viewport) {
2516
2969
  return;
@@ -2600,7 +3053,7 @@ function UnderlineTabs({
2600
3053
  "aria-selected": isActive,
2601
3054
  className: cn(
2602
3055
  "relative inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap border-0 bg-transparent p-0 text-[13px] font-semibold leading-6 text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)] focus-visible:outline-none",
2603
- isActive && "text-[var(--accent)]"
3056
+ isActive && "text-[var(--tutti-purple)]"
2604
3057
  ),
2605
3058
  "data-active": isActive ? "true" : "false",
2606
3059
  "data-slot": "underline-tabs-tab",
@@ -2611,7 +3064,7 @@ function UnderlineTabs({
2611
3064
  onMouseDown: preventMouseDownDefault ? (event) => event.preventDefault() : void 0,
2612
3065
  children: [
2613
3066
  /* @__PURE__ */ jsx28("span", { children: tab.label }),
2614
- tab.count !== void 0 ? /* @__PURE__ */ jsx28("span", { className: "text-xs font-semibold leading-6 text-[inherit]", children: tab.count }) : null
3067
+ tab.count !== void 0 ? /* @__PURE__ */ jsx28("span", { className: "text-[11px] font-semibold leading-6 text-[inherit]", children: tab.count }) : null
2615
3068
  ]
2616
3069
  },
2617
3070
  tab.value
@@ -2621,7 +3074,7 @@ function UnderlineTabs({
2621
3074
  "div",
2622
3075
  {
2623
3076
  "aria-hidden": true,
2624
- className: "absolute bottom-0 left-0 z-[1] h-0.5 rounded-[1px] bg-[var(--accent)] transition-[transform,width] duration-[220ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
3077
+ className: "absolute bottom-0 left-0 z-[1] h-0.5 rounded-[1px] bg-[var(--tutti-purple)] transition-[transform,width] duration-[220ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
2625
3078
  "data-slot": "underline-tabs-indicator",
2626
3079
  style: {
2627
3080
  transform: `translateX(${indicatorStyle.left}px)`,
@@ -2800,7 +3253,7 @@ var ViewportMenuSurface = React6.forwardRef(function ViewportMenuSurface2({
2800
3253
  }, forwardedRef) {
2801
3254
  const surfaceRef = React6.useRef(null);
2802
3255
  const [measuredSize, setMeasuredSize] = React6.useState(null);
2803
- const setRefs = React6.useCallback(
3256
+ const setRefs2 = React6.useCallback(
2804
3257
  (node) => {
2805
3258
  surfaceRef.current = node;
2806
3259
  assignRef(forwardedRef, node);
@@ -2937,7 +3390,7 @@ var ViewportMenuSurface = React6.forwardRef(function ViewportMenuSurface2({
2937
3390
  MenuSurface,
2938
3391
  {
2939
3392
  ...rest,
2940
- ref: setRefs,
3393
+ ref: setRefs2,
2941
3394
  className,
2942
3395
  "data-slot": "viewport-menu-surface",
2943
3396
  style: {
@@ -3075,4 +3528,4 @@ export {
3075
3528
  UnderlineTabs,
3076
3529
  ViewportMenuSurface
3077
3530
  };
3078
- //# sourceMappingURL=chunk-2AUYRRDG.js.map
3531
+ //# sourceMappingURL=chunk-HJ43LQHW.js.map