@sofya-ds/react 1.3.5 → 1.3.7

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 CHANGED
@@ -60,6 +60,7 @@ __export(index_exports, {
60
60
  DialogTitle: () => DialogTitle,
61
61
  DialogTrigger: () => DialogTrigger,
62
62
  Dropdown: () => Dropdown,
63
+ DropdownSearch: () => DropdownSearch,
63
64
  Empty: () => Empty,
64
65
  EmptyContent: () => EmptyContent,
65
66
  EmptyDescription: () => EmptyDescription,
@@ -1953,7 +1954,8 @@ var import_jsx_runtime12 = require("react/jsx-runtime");
1953
1954
  var dropdownVariantOptions = [
1954
1955
  "card",
1955
1956
  "language",
1956
- "selected"
1957
+ "selected",
1958
+ "action"
1957
1959
  ];
1958
1960
  var dropdownAppearanceOptions = ["card"];
1959
1961
  var dropdownTriggerSizeOptions = ["default", "sm", "lg"];
@@ -1965,7 +1967,8 @@ var dropdownLanguageItems = [
1965
1967
  var dropdownTriggerToneClasses = {
1966
1968
  card: "text-primary",
1967
1969
  language: "",
1968
- selected: "w-full border-[color:var(--sofya-border-strong)] [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)]"
1970
+ selected: "w-full border-[color:var(--sofya-border-strong)] [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)]",
1971
+ action: ""
1969
1972
  };
1970
1973
  var dropdownTriggerSizeClasses = {
1971
1974
  regular: {
@@ -1982,6 +1985,11 @@ var dropdownTriggerSizeClasses = {
1982
1985
  default: "h-5 w-5 p-0",
1983
1986
  sm: "h-[18px] w-[18px] p-0",
1984
1987
  lg: "h-6 w-6 p-0"
1988
+ },
1989
+ action: {
1990
+ default: "h-10 w-10 p-0",
1991
+ sm: "h-8 w-8 p-0",
1992
+ lg: "h-12 w-12 p-0"
1985
1993
  }
1986
1994
  };
1987
1995
  var dropdownAppearanceClasses = {
@@ -1993,12 +2001,14 @@ var dropdownAppearanceClasses = {
1993
2001
  var dropdownContentBaseClasses = {
1994
2002
  card: "border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]",
1995
2003
  language: "w-[224px] min-w-[224px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]",
1996
- selected: "w-[var(--radix-dropdown-menu-trigger-width)] min-w-[var(--radix-dropdown-menu-trigger-width)] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]"
2004
+ selected: "w-[var(--radix-dropdown-menu-trigger-width)] min-w-[var(--radix-dropdown-menu-trigger-width)] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]",
2005
+ action: "w-[224px] min-w-[224px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]"
1997
2006
  };
1998
2007
  var dropdownItemClasses = {
1999
2008
  card: "text-foreground",
2000
2009
  language: "text-foreground",
2001
- selected: "text-foreground"
2010
+ selected: "text-foreground",
2011
+ action: "text-foreground"
2002
2012
  };
2003
2013
  function isButtonLanguageLocale(value) {
2004
2014
  return buttonLanguageLocaleOptions.includes(value);
@@ -2024,6 +2034,9 @@ function resolveDropdownTriggerSizeFamily(variant) {
2024
2034
  if (variant === "selected") {
2025
2035
  return "selected";
2026
2036
  }
2037
+ if (variant === "action") {
2038
+ return "action";
2039
+ }
2027
2040
  return "regular";
2028
2041
  }
2029
2042
  function DefaultDropdownTriggerIcon({ variant }) {
@@ -2062,6 +2075,7 @@ function Dropdown({
2062
2075
  defaultOpen,
2063
2076
  defaultValue,
2064
2077
  disabled = false,
2078
+ iconTrigger,
2065
2079
  items,
2066
2080
  itemClassName,
2067
2081
  modal,
@@ -2078,9 +2092,10 @@ function Dropdown({
2078
2092
  }) {
2079
2093
  const isLanguageVariant = variant === "language";
2080
2094
  const isSelectedVariant = variant === "selected";
2095
+ const isActionVariant = variant === "action";
2081
2096
  const resolvedAppearance = resolveDropdownAppearance({ appearance, variant });
2082
2097
  const triggerSizeFamily = resolveDropdownTriggerSizeFamily(variant);
2083
- const usesDefaultListStyle = !isLanguageVariant;
2098
+ const usesDefaultListStyle = !isLanguageVariant && !isActionVariant;
2084
2099
  const resolvedItems = React12.useMemo(
2085
2100
  () => isLanguageVariant ? items && items.length > 0 ? items : dropdownLanguageItems : items ?? [],
2086
2101
  [isLanguageVariant, items]
@@ -2091,6 +2106,7 @@ function Dropdown({
2091
2106
  onChange: onValueChange,
2092
2107
  value
2093
2108
  });
2109
+ const [subValues, setSubValues] = React12.useState({});
2094
2110
  const radioValue = selectedValue ?? "";
2095
2111
  const selectedItem = resolvedItems.find(
2096
2112
  (item) => item.value === selectedValue
@@ -2112,7 +2128,7 @@ function Dropdown({
2112
2128
  setUncontrolledSelectedValue,
2113
2129
  value
2114
2130
  ]);
2115
- const resolvedTriggerIcon = isLanguageVariant ? void 0 : triggerIcon === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultDropdownTriggerIcon, { variant }) : triggerIcon;
2131
+ const resolvedTriggerIcon = isLanguageVariant || isActionVariant ? void 0 : triggerIcon === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultDropdownTriggerIcon, { variant }) : triggerIcon;
2116
2132
  const triggerLabel = selectedItem?.triggerLabel ?? selectedItem?.label ?? placeholder;
2117
2133
  const selectedTriggerToneClassName = isSelectedVariant ? hasSelectedItem ? "text-foreground" : "text-[color:var(--sofya-text-soft)]" : void 0;
2118
2134
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
@@ -2127,7 +2143,7 @@ function Dropdown({
2127
2143
  Button,
2128
2144
  {
2129
2145
  type: "button",
2130
- variant: isLanguageVariant ? "language" : "dropdown",
2146
+ variant: isLanguageVariant ? "language" : isActionVariant ? "ghost" : "dropdown",
2131
2147
  languageLocale: selectedLanguageLocale,
2132
2148
  "data-appearance": resolvedAppearance,
2133
2149
  "data-trigger-size": triggerSize,
@@ -2139,8 +2155,9 @@ function Dropdown({
2139
2155
  selectedTriggerToneClassName,
2140
2156
  triggerClassName
2141
2157
  ),
2158
+ leftIcon: isActionVariant ? iconTrigger : void 0,
2142
2159
  rightIcon: resolvedTriggerIcon,
2143
- children: isLanguageVariant ? null : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 truncate", children: renderTextContent(triggerLabel, {
2160
+ children: isLanguageVariant || isActionVariant ? null : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 truncate", children: renderTextContent(triggerLabel, {
2144
2161
  as: "span",
2145
2162
  className: "block min-w-0 truncate text-inherit",
2146
2163
  size: "body"
@@ -2164,49 +2181,127 @@ function Dropdown({
2164
2181
  {
2165
2182
  value: radioValue,
2166
2183
  onValueChange: setSelectedValue,
2167
- className: "grid gap-2",
2184
+ className: "grid gap-1",
2168
2185
  children: resolvedItems.map((item) => {
2169
2186
  const isSelected = item.value === selectedValue;
2170
2187
  const itemLanguageLocale = resolveItemLanguageLocale(item);
2171
2188
  const indicator = item.indicator ?? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultDropdownItemIndicator, {});
2172
2189
  const itemIcon = item.icon ?? (variant === "language" && itemLanguageLocale ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(LanguageFlagIcon, { locale: itemLanguageLocale }) : null);
2190
+ if (isActionVariant && item.subItems && item.subItems.length > 0) {
2191
+ const currentSubValue = subValues[item.value];
2192
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(DropdownMenuPrimitive.Sub, { children: [
2193
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
2194
+ DropdownMenuPrimitive.SubTrigger,
2195
+ {
2196
+ disabled: item.disabled,
2197
+ className: cn(
2198
+ "flex w-full min-w-0 overflow-hidden cursor-pointer items-center gap-2.5 rounded-full px-1.5 py-1 outline-none transition-colors duration-sofya ease-sofya",
2199
+ "data-[highlighted]:bg-muted data-[state=open]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2200
+ dropdownItemClasses[variant],
2201
+ itemClassName
2202
+ ),
2203
+ children: [
2204
+ itemIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2205
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(item.label, {
2206
+ as: "span",
2207
+ className: "block truncate text-inherit",
2208
+ size: "tiny"
2209
+ }) }),
2210
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center justify-center text-[color:var(--sofya-text-subtle)]", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { name: "caret-right", size: 12 }) })
2211
+ ]
2212
+ }
2213
+ ),
2214
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2215
+ DropdownMenuPrimitive.SubContent,
2216
+ {
2217
+ sideOffset: 4,
2218
+ className: cn(
2219
+ "sofya-dropdown-content z-50 w-[224px] min-w-[224px] overflow-hidden border bg-card p-2 outline-none",
2220
+ "rounded-[20px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]"
2221
+ ),
2222
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2223
+ DropdownMenuPrimitive.RadioGroup,
2224
+ {
2225
+ value: currentSubValue ?? "",
2226
+ onValueChange: (subValue) => {
2227
+ setSubValues((prev) => ({
2228
+ ...prev,
2229
+ [item.value]: subValue
2230
+ }));
2231
+ setSelectedValue(subValue);
2232
+ },
2233
+ className: "grid gap-1",
2234
+ children: item.subItems.map((subItem) => {
2235
+ const isSubSelected = subItem.value === currentSubValue;
2236
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
2237
+ DropdownMenuPrimitive.RadioItem,
2238
+ {
2239
+ value: subItem.value,
2240
+ disabled: subItem.disabled,
2241
+ className: cn(
2242
+ "flex w-full min-w-0 overflow-hidden cursor-pointer items-center gap-2.5 rounded-full px-1.5 py-1 text-foreground outline-none transition-colors duration-sofya ease-sofya",
2243
+ "data-[highlighted]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40"
2244
+ ),
2245
+ children: [
2246
+ subItem.icon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center justify-center", children: subItem.icon }),
2247
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(subItem.label, {
2248
+ as: "span",
2249
+ className: "block truncate text-inherit",
2250
+ size: "tiny"
2251
+ }) }),
2252
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2253
+ "span",
2254
+ {
2255
+ "aria-hidden": "true",
2256
+ className: cn(
2257
+ "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2258
+ isSubSelected ? "opacity-100" : "opacity-0"
2259
+ ),
2260
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultDropdownItemIndicator, {})
2261
+ }
2262
+ )
2263
+ ]
2264
+ },
2265
+ subItem.value
2266
+ );
2267
+ })
2268
+ }
2269
+ )
2270
+ }
2271
+ ) })
2272
+ ] }, item.value);
2273
+ }
2173
2274
  if (!usesDefaultListStyle) {
2174
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2275
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
2175
2276
  DropdownMenuPrimitive.RadioItem,
2176
2277
  {
2177
2278
  value: item.value,
2178
2279
  disabled: item.disabled,
2179
- asChild: true,
2180
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2181
- Button,
2182
- {
2183
- variant: "ghost",
2184
- className: cn(
2185
- "h-auto w-full px-2 py-0 font-normal data-[highlighted]:bg-muted [&>span.relative]:w-full",
2186
- dropdownItemClasses[variant],
2187
- itemClassName
2188
- ),
2189
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "flex w-full items-center gap-2", children: [
2190
- itemIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2191
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 flex-1 truncate text-left", children: renderTextContent(item.label, {
2192
- as: "span",
2193
- className: "block truncate text-inherit",
2194
- size: "tiny"
2195
- }) }),
2196
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2197
- "span",
2198
- {
2199
- "aria-hidden": "true",
2200
- className: cn(
2201
- "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2202
- isSelected ? "opacity-100" : "opacity-0"
2203
- ),
2204
- children: indicator
2205
- }
2206
- )
2207
- ] })
2208
- }
2209
- )
2280
+ className: cn(
2281
+ "flex w-full min-w-0 overflow-hidden cursor-pointer items-center gap-2.5 rounded-full px-1.5 py-1 outline-none transition-colors duration-sofya ease-sofya",
2282
+ "data-[highlighted]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2283
+ dropdownItemClasses[variant],
2284
+ itemClassName
2285
+ ),
2286
+ children: [
2287
+ itemIcon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2288
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(item.label, {
2289
+ as: "span",
2290
+ className: "block truncate text-inherit",
2291
+ size: "tiny"
2292
+ }) }),
2293
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2294
+ "span",
2295
+ {
2296
+ "aria-hidden": "true",
2297
+ className: cn(
2298
+ "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2299
+ isSelected ? "opacity-100" : "opacity-0"
2300
+ ),
2301
+ children: indicator
2302
+ }
2303
+ )
2304
+ ]
2210
2305
  },
2211
2306
  item.value
2212
2307
  );
@@ -2261,256 +2356,15 @@ function Dropdown({
2261
2356
  );
2262
2357
  }
2263
2358
 
2264
- // src/components/dialog.tsx
2265
- var React13 = __toESM(require("react"), 1);
2266
- var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
2267
- var import_jsx_runtime13 = require("react/jsx-runtime");
2268
- var Dialog = DialogPrimitive.Root;
2269
- var DialogTrigger = DialogPrimitive.Trigger;
2270
- var DialogPortal = DialogPrimitive.Portal;
2271
- var DialogClose = DialogPrimitive.Close;
2272
- var DialogInternalContext = React13.createContext({
2273
- showCloseButton: true
2274
- });
2275
- var DialogOverlay = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2276
- DialogPrimitive.Overlay,
2277
- {
2278
- ref,
2279
- className: cn(
2280
- "sofya-dialog-overlay fixed inset-0 z-50 bg-foreground/24 backdrop-blur-[6px]",
2281
- className
2282
- ),
2283
- ...props
2284
- }
2285
- ));
2286
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2287
- var DialogContent = React13.forwardRef(
2288
- ({
2289
- className,
2290
- children,
2291
- cardClassName,
2292
- overlayClassName,
2293
- showCloseButton = true,
2294
- variant = "card",
2295
- ...props
2296
- }, ref) => {
2297
- const dialogCardStyle = {
2298
- "--sofya-surface-shadow-override": "var(--sofya-shadow-lg)"
2299
- };
2300
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogInternalContext.Provider, { value: { showCloseButton }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DialogPortal, { children: [
2301
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogOverlay, { className: overlayClassName }),
2302
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "sofya-dialog-positioner fixed inset-0 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2303
- DialogPrimitive.Content,
2304
- {
2305
- ref,
2306
- className: cn(
2307
- "sofya-dialog-content relative flex w-full max-w-[680px] max-h-[calc(100vh-2rem)] outline-none",
2308
- className
2309
- ),
2310
- ...props,
2311
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2312
- Card,
2313
- {
2314
- variant,
2315
- className: cn(
2316
- "flex max-h-[inherit] min-h-0 w-full flex-col gap-6 overflow-y-auto overflow-x-hidden p-6",
2317
- cardClassName
2318
- ),
2319
- style: dialogCardStyle,
2320
- children
2321
- }
2322
- )
2323
- }
2324
- ) })
2325
- ] }) });
2326
- }
2327
- );
2328
- DialogContent.displayName = DialogPrimitive.Content.displayName;
2329
- function DialogHeader({ className, children, ...props }) {
2330
- const { showCloseButton } = React13.useContext(DialogInternalContext);
2331
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
2332
- "div",
2333
- {
2334
- className: cn("flex w-full items-start justify-between gap-4", className),
2335
- ...props,
2336
- children: [
2337
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex min-w-0 flex-1 flex-col gap-2 text-left", children }),
2338
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2339
- Button,
2340
- {
2341
- type: "button",
2342
- variant: "ghost",
2343
- size: "icon",
2344
- "aria-label": "Close",
2345
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: "x", size: 18 }),
2346
- className: "shrink-0 text-muted-foreground hover:text-foreground"
2347
- }
2348
- ) }) : null
2349
- ]
2350
- }
2351
- );
2352
- }
2353
- function DialogBody({ className, ...props }) {
2354
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2355
- "div",
2356
- {
2357
- className: cn("flex flex-col gap-4", className),
2358
- ...props
2359
- }
2360
- );
2361
- }
2362
- function DialogFooter({ className, ...props }) {
2363
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2364
- "div",
2365
- {
2366
- className: cn("flex items-center justify-end gap-2", className),
2367
- ...props
2368
- }
2369
- );
2370
- }
2371
- var DialogCancel = React13.forwardRef(
2372
- ({ type = "button", variant = "ghost", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { ref, type, variant, ...props }) })
2373
- );
2374
- DialogCancel.displayName = "DialogCancel";
2375
- var DialogTitle = React13.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2376
- DialogPrimitive.Title,
2377
- {
2378
- ref,
2379
- className: cn("text-card-foreground", className),
2380
- ...props,
2381
- children: renderTextContent(children, {
2382
- as: "span",
2383
- className: "block text-card-foreground",
2384
- size: "h3"
2385
- })
2386
- }
2387
- ));
2388
- DialogTitle.displayName = DialogPrimitive.Title.displayName;
2389
- var DialogDescription = React13.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2390
- DialogPrimitive.Description,
2391
- {
2392
- ref,
2393
- className: cn("text-muted-foreground", className),
2394
- ...props,
2395
- children: renderTextContent(children, {
2396
- as: "span",
2397
- className: "block text-muted-foreground",
2398
- size: "body"
2399
- })
2400
- }
2401
- ));
2402
- DialogDescription.displayName = DialogPrimitive.Description.displayName;
2403
-
2404
- // src/components/empty.tsx
2405
- var React14 = __toESM(require("react"), 1);
2406
- var import_class_variance_authority5 = require("class-variance-authority");
2407
- var import_jsx_runtime14 = require("react/jsx-runtime");
2408
- var emptyMediaVariantOptions = ["default", "icon"];
2409
- var emptyMediaVariants = (0, import_class_variance_authority5.cva)(
2410
- "inline-flex shrink-0 items-center justify-center transition-[background-color,border-color,color,box-shadow] duration-sofya ease-sofya",
2411
- {
2412
- variants: {
2413
- variant: {
2414
- default: "[&_img]:max-w-full [&_svg]:shrink-0 [&_svg]:text-primary",
2415
- icon: "h-16 w-16 rounded-full border border-primary/10 bg-primary/10 text-primary [&_svg]:h-7 [&_svg]:w-7 [&_svg]:shrink-0"
2416
- }
2417
- },
2418
- defaultVariants: {
2419
- variant: "default"
2420
- }
2421
- }
2422
- );
2423
- var EmptyMedia = React14.forwardRef(function EmptyMedia2({ className, variant, ...props }, ref) {
2424
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { ref, className: cn(emptyMediaVariants({ variant }), className), ...props });
2425
- });
2426
- function EmptyHeader({ className, ...props }) {
2427
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2428
- "div",
2429
- {
2430
- className: cn("flex max-w-[34rem] flex-col items-center gap-4 text-center", className),
2431
- ...props
2432
- }
2433
- );
2434
- }
2435
- function EmptyTitle({ children, className, ...props }) {
2436
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2437
- "h2",
2438
- {
2439
- className: cn("text-foreground", className),
2440
- ...props,
2441
- children: renderTextContent(children, {
2442
- as: "span",
2443
- className: "block text-foreground",
2444
- size: "h4"
2445
- })
2446
- }
2447
- );
2448
- }
2449
- function EmptyDescription({
2450
- children,
2451
- className,
2452
- ...props
2453
- }) {
2454
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2455
- "p",
2456
- {
2457
- className: cn("max-w-full text-muted-foreground whitespace-nowrap", className),
2458
- ...props,
2459
- children: renderTextContent(children, {
2460
- as: "span",
2461
- className: "inline-block whitespace-nowrap text-muted-foreground",
2462
- size: "body"
2463
- })
2464
- }
2465
- );
2466
- }
2467
- function EmptyContent({ children, className, ...props }) {
2468
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2469
- "div",
2470
- {
2471
- className: cn("flex flex-wrap items-center justify-center gap-4 text-center", className),
2472
- ...props,
2473
- children: renderTextContent(children, {
2474
- as: "span"
2475
- })
2476
- }
2477
- );
2478
- }
2479
- var Empty = React14.forwardRef(function Empty2({ children, className, content, description, media, title, ...props }, ref) {
2480
- const hasCustomChildren = React14.Children.count(children) > 0;
2481
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2482
- "div",
2483
- {
2484
- ref,
2485
- className: cn(
2486
- "flex min-h-[280px] w-full flex-col items-center justify-center gap-6 rounded-[28px] bg-gradient-to-b from-card via-card to-muted/45 px-6 py-10 text-center",
2487
- className
2488
- ),
2489
- ...props,
2490
- children: hasCustomChildren ? children : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
2491
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(EmptyHeader, { children: [
2492
- media ?? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmptyMedia, { variant: "icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { name: "folders", size: 28 }) }),
2493
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmptyTitle, { children: title ?? "Nada por aqui" }),
2494
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmptyDescription, { children: description ?? "Quando houver conte\xFAdo dispon\xEDvel, ele aparecer\xE1 aqui." })
2495
- ] }),
2496
- content !== void 0 && content !== null ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmptyContent, { children: content }) : null
2497
- ] })
2498
- }
2499
- );
2500
- });
2501
- Empty.displayName = "Empty";
2502
- EmptyMedia.displayName = "EmptyMedia";
2503
- EmptyHeader.displayName = "EmptyHeader";
2504
- EmptyTitle.displayName = "EmptyTitle";
2505
- EmptyDescription.displayName = "EmptyDescription";
2506
- EmptyContent.displayName = "EmptyContent";
2359
+ // src/components/dropdown-search.tsx
2360
+ var React18 = __toESM(require("react"), 1);
2507
2361
 
2508
2362
  // src/components/input.tsx
2509
- var React17 = __toESM(require("react"), 1);
2363
+ var React15 = __toESM(require("react"), 1);
2510
2364
  var import_input_otp2 = require("input-otp");
2511
2365
 
2512
2366
  // src/lib/field-shell.tsx
2513
- var import_jsx_runtime15 = require("react/jsx-runtime");
2367
+ var import_jsx_runtime13 = require("react/jsx-runtime");
2514
2368
  function FieldLabel({
2515
2369
  children,
2516
2370
  className,
@@ -2525,7 +2379,7 @@ function FieldLabel({
2525
2379
  return null;
2526
2380
  }
2527
2381
  const Component = htmlFor ? "label" : "div";
2528
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2382
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2529
2383
  Component,
2530
2384
  {
2531
2385
  className: cn("text-[color:var(--sofya-text-default)]", className),
@@ -2552,8 +2406,8 @@ function FieldShell({
2552
2406
  if (!label && !containerClassName) {
2553
2407
  return control;
2554
2408
  }
2555
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: cn("grid w-full gap-2", containerClassName), children: [
2556
- label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2409
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: cn("grid w-full gap-2", containerClassName), children: [
2410
+ label ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2557
2411
  FieldLabel,
2558
2412
  {
2559
2413
  className: labelClassName,
@@ -2569,10 +2423,10 @@ function FieldShell({
2569
2423
  }
2570
2424
 
2571
2425
  // src/components/input-upload.tsx
2572
- var React15 = __toESM(require("react"), 1);
2426
+ var React13 = __toESM(require("react"), 1);
2573
2427
  var import_icons_react4 = require("@tabler/icons-react");
2574
2428
  var import_react2 = require("motion/react");
2575
- var import_jsx_runtime16 = require("react/jsx-runtime");
2429
+ var import_jsx_runtime14 = require("react/jsx-runtime");
2576
2430
  var uploadKindOptions = ["document", "image", "video"];
2577
2431
  var uploadAcceptByKind = {
2578
2432
  document: ".pdf,.doc,.docx,.txt,.rtf,.odt,.jpg,.jpeg,.png,.webp,.gif",
@@ -2666,7 +2520,7 @@ function resolveUploadFileVisualKind(file, fallbackKind) {
2666
2520
  return "document";
2667
2521
  }
2668
2522
  function UploadGlyph({ className }) {
2669
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2523
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2670
2524
  import_icons_react4.IconUpload,
2671
2525
  {
2672
2526
  "aria-hidden": "true",
@@ -2679,7 +2533,7 @@ function UploadFileTypeGlyph({
2679
2533
  kind
2680
2534
  }) {
2681
2535
  if (kind === "image") {
2682
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2536
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2683
2537
  import_icons_react4.IconPhoto,
2684
2538
  {
2685
2539
  "aria-hidden": "true",
@@ -2688,7 +2542,7 @@ function UploadFileTypeGlyph({
2688
2542
  );
2689
2543
  }
2690
2544
  if (kind === "video") {
2691
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2545
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2692
2546
  import_icons_react4.IconVideo,
2693
2547
  {
2694
2548
  "aria-hidden": "true",
@@ -2696,7 +2550,7 @@ function UploadFileTypeGlyph({
2696
2550
  }
2697
2551
  );
2698
2552
  }
2699
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2553
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2700
2554
  import_icons_react4.IconFileText,
2701
2555
  {
2702
2556
  "aria-hidden": "true",
@@ -2704,7 +2558,7 @@ function UploadFileTypeGlyph({
2704
2558
  }
2705
2559
  );
2706
2560
  }
2707
- var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2561
+ var UploadInputControl = React13.forwardRef(function UploadInputControl2({
2708
2562
  accept,
2709
2563
  "aria-label": ariaLabel,
2710
2564
  className,
@@ -2718,17 +2572,17 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2718
2572
  resolvedId,
2719
2573
  ...uploadProps
2720
2574
  }, ref) {
2721
- const inputRef = React15.useRef(null);
2722
- const [isDragActive, setIsDragActive] = React15.useState(false);
2723
- const [selectedFiles, setSelectedFiles] = React15.useState([]);
2575
+ const inputRef = React13.useRef(null);
2576
+ const [isDragActive, setIsDragActive] = React13.useState(false);
2577
+ const [selectedFiles, setSelectedFiles] = React13.useState([]);
2724
2578
  const resolvedMultiple = multiple ?? true;
2725
2579
  const prefersReducedMotion = (0, import_react2.useReducedMotion)();
2726
- React15.useImperativeHandle(ref, () => inputRef.current);
2580
+ React13.useImperativeHandle(ref, () => inputRef.current);
2727
2581
  const resolvedAccept = accept ?? uploadAcceptByKind[uploadKind];
2728
2582
  const resolvedAriaLabel = ariaLabel ?? uploadAriaLabelByKind[uploadKind];
2729
2583
  const resolvedTitle = uploadTitle ?? "Arraste arquivos aqui ou clique para selecionar";
2730
2584
  const resolvedDescription = uploadDescription ?? uploadDescriptionByKind[uploadKind];
2731
- const syncSelectedFiles = React15.useCallback(
2585
+ const syncSelectedFiles = React13.useCallback(
2732
2586
  (files) => {
2733
2587
  const normalizedFiles = resolvedMultiple ? files : files.slice(0, 1);
2734
2588
  setSelectedFiles(normalizedFiles);
@@ -2736,7 +2590,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2736
2590
  },
2737
2591
  [onFilesChange, resolvedMultiple]
2738
2592
  );
2739
- const applyFilesToInput = React15.useCallback((files) => {
2593
+ const applyFilesToInput = React13.useCallback((files) => {
2740
2594
  const inputElement = inputRef.current;
2741
2595
  if (!inputElement || typeof DataTransfer === "undefined") {
2742
2596
  return false;
@@ -2755,7 +2609,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2755
2609
  return false;
2756
2610
  }
2757
2611
  }, []);
2758
- const handleInputChange = React15.useCallback(
2612
+ const handleInputChange = React13.useCallback(
2759
2613
  (event) => {
2760
2614
  const nextFiles = mergeUploadFiles(
2761
2615
  selectedFiles,
@@ -2774,12 +2628,12 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2774
2628
  syncSelectedFiles
2775
2629
  ]
2776
2630
  );
2777
- const openPicker = React15.useCallback(() => {
2631
+ const openPicker = React13.useCallback(() => {
2778
2632
  if (!disabled) {
2779
2633
  inputRef.current?.click();
2780
2634
  }
2781
2635
  }, [disabled]);
2782
- const handleKeyDown = React15.useCallback(
2636
+ const handleKeyDown = React13.useCallback(
2783
2637
  (event) => {
2784
2638
  if (disabled) {
2785
2639
  return;
@@ -2791,7 +2645,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2791
2645
  },
2792
2646
  [disabled, openPicker]
2793
2647
  );
2794
- const handleDragEnter = React15.useCallback(
2648
+ const handleDragEnter = React13.useCallback(
2795
2649
  (event) => {
2796
2650
  event.preventDefault();
2797
2651
  if (!disabled) {
@@ -2800,7 +2654,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2800
2654
  },
2801
2655
  [disabled]
2802
2656
  );
2803
- const handleDragLeave = React15.useCallback(
2657
+ const handleDragLeave = React13.useCallback(
2804
2658
  (event) => {
2805
2659
  if (disabled) {
2806
2660
  return;
@@ -2813,7 +2667,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2813
2667
  },
2814
2668
  [disabled]
2815
2669
  );
2816
- const handleDragOver = React15.useCallback(
2670
+ const handleDragOver = React13.useCallback(
2817
2671
  (event) => {
2818
2672
  event.preventDefault();
2819
2673
  if (disabled) {
@@ -2824,7 +2678,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2824
2678
  },
2825
2679
  [disabled]
2826
2680
  );
2827
- const handleDrop = React15.useCallback(
2681
+ const handleDrop = React13.useCallback(
2828
2682
  (event) => {
2829
2683
  event.preventDefault();
2830
2684
  if (disabled) {
@@ -2857,7 +2711,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2857
2711
  syncSelectedFiles
2858
2712
  ]
2859
2713
  );
2860
- const handleRemoveFile = React15.useCallback(
2714
+ const handleRemoveFile = React13.useCallback(
2861
2715
  (fileIndex) => {
2862
2716
  if (disabled) {
2863
2717
  return;
@@ -2868,8 +2722,8 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2868
2722
  },
2869
2723
  [applyFilesToInput, disabled, selectedFiles, syncSelectedFiles]
2870
2724
  );
2871
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "grid w-full gap-4", children: [
2872
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2725
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "grid w-full gap-4", children: [
2726
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2873
2727
  "input",
2874
2728
  {
2875
2729
  ...uploadProps,
@@ -2884,7 +2738,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2884
2738
  onChange: handleInputChange
2885
2739
  }
2886
2740
  ),
2887
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
2741
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2888
2742
  "label",
2889
2743
  {
2890
2744
  "aria-disabled": disabled || void 0,
@@ -2904,8 +2758,8 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2904
2758
  onDrop: handleDrop,
2905
2759
  onKeyDown: handleKeyDown,
2906
2760
  children: [
2907
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "flex size-10 items-center justify-center rounded-[6px] p-2 text-[color:var(--sofya-text-default)]", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(UploadGlyph, { className: "size-[18px]" }) }),
2908
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-[color:var(--sofya-text-default)]", children: renderTextContent(resolvedTitle, {
2761
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "flex size-10 items-center justify-center rounded-[6px] p-2 text-[color:var(--sofya-text-default)]", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(UploadGlyph, { className: "size-[18px]" }) }),
2762
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-[color:var(--sofya-text-default)]", children: renderTextContent(resolvedTitle, {
2909
2763
  as: "span",
2910
2764
  className: "block text-[color:var(--sofya-text-default)]",
2911
2765
  size: "body",
@@ -2913,7 +2767,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2913
2767
  fontWeight: 500
2914
2768
  }
2915
2769
  }) }),
2916
- resolvedDescription ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-[color:var(--sofya-text-subtle)]", children: renderTextContent(resolvedDescription, {
2770
+ resolvedDescription ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-[color:var(--sofya-text-subtle)]", children: renderTextContent(resolvedDescription, {
2917
2771
  as: "span",
2918
2772
  className: "block text-[color:var(--sofya-text-subtle)]",
2919
2773
  size: "extra-tiny"
@@ -2921,9 +2775,9 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2921
2775
  ]
2922
2776
  }
2923
2777
  ),
2924
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { role: "list", className: "grid gap-4 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react2.AnimatePresence, { initial: false, children: selectedFiles.map((file, index) => {
2778
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { role: "list", className: "grid gap-4 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react2.AnimatePresence, { initial: false, children: selectedFiles.map((file, index) => {
2925
2779
  const fileKey = resolveUploadFileSignature(file);
2926
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2780
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2927
2781
  import_react2.motion.div,
2928
2782
  {
2929
2783
  role: "listitem",
@@ -2932,16 +2786,16 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2932
2786
  animate: prefersReducedMotion ? { opacity: 1 } : { opacity: 1, y: 0 },
2933
2787
  exit: prefersReducedMotion ? { opacity: 0 } : { opacity: 0, y: -6 },
2934
2788
  transition: uploadListItemTransition,
2935
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Card, { variant: "card", className: "flex items-center gap-4 p-4", children: [
2936
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "flex size-11 shrink-0 items-center justify-center rounded-full bg-[color:var(--sofya-surface-hover)] text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2789
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Card, { variant: "card", className: "flex items-center gap-4 p-4", children: [
2790
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "flex size-11 shrink-0 items-center justify-center rounded-full bg-[color:var(--sofya-surface-hover)] text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2937
2791
  UploadFileTypeGlyph,
2938
2792
  {
2939
2793
  className: "size-[18px]",
2940
2794
  kind: resolveUploadFileVisualKind(file, uploadKind)
2941
2795
  }
2942
2796
  ) }),
2943
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "min-w-0 flex-1", children: [
2944
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "truncate text-[color:var(--sofya-text-default)]", children: renderTextContent(file.name, {
2797
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
2798
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate text-[color:var(--sofya-text-default)]", children: renderTextContent(file.name, {
2945
2799
  as: "span",
2946
2800
  className: "block truncate text-[color:var(--sofya-text-default)]",
2947
2801
  size: "body",
@@ -2949,7 +2803,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2949
2803
  fontWeight: 500
2950
2804
  }
2951
2805
  }) }),
2952
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mt-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(
2806
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "mt-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(
2953
2807
  `${resolveUploadFileBadge(
2954
2808
  file
2955
2809
  )} \xB7 ${formatUploadFileSize(file.size)}`,
@@ -2960,7 +2814,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2960
2814
  }
2961
2815
  ) })
2962
2816
  ] }),
2963
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2817
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2964
2818
  "button",
2965
2819
  {
2966
2820
  "aria-label": `Remover ${file.name}`,
@@ -2972,7 +2826,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2972
2826
  event.stopPropagation();
2973
2827
  handleRemoveFile(index);
2974
2828
  },
2975
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2829
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2976
2830
  Icon,
2977
2831
  {
2978
2832
  "aria-hidden": "true",
@@ -2993,11 +2847,11 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2993
2847
  UploadInputControl.displayName = "UploadInputControl";
2994
2848
 
2995
2849
  // src/components/input-otp.tsx
2996
- var React16 = __toESM(require("react"), 1);
2850
+ var React14 = __toESM(require("react"), 1);
2997
2851
  var import_input_otp = require("input-otp");
2998
- var import_jsx_runtime17 = require("react/jsx-runtime");
2999
- var InputOTP = React16.forwardRef(({ className, containerClassName, ...props }, ref) => {
3000
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2852
+ var import_jsx_runtime15 = require("react/jsx-runtime");
2853
+ var InputOTP = React14.forwardRef(({ className, containerClassName, ...props }, ref) => {
2854
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3001
2855
  import_input_otp.OTPInput,
3002
2856
  {
3003
2857
  ref,
@@ -3011,8 +2865,8 @@ var InputOTP = React16.forwardRef(({ className, containerClassName, ...props },
3011
2865
  );
3012
2866
  });
3013
2867
  InputOTP.displayName = "InputOTP";
3014
- var InputOTPGroup = React16.forwardRef(({ className, ...props }, ref) => {
3015
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2868
+ var InputOTPGroup = React14.forwardRef(({ className, ...props }, ref) => {
2869
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3016
2870
  "div",
3017
2871
  {
3018
2872
  ref,
@@ -3025,12 +2879,12 @@ var InputOTPGroup = React16.forwardRef(({ className, ...props }, ref) => {
3025
2879
  );
3026
2880
  });
3027
2881
  InputOTPGroup.displayName = "InputOTPGroup";
3028
- var InputOTPSlot = React16.forwardRef(
2882
+ var InputOTPSlot = React14.forwardRef(
3029
2883
  ({ className, index, ...props }, ref) => {
3030
- const otpContext = React16.useContext(import_input_otp.OTPInputContext);
2884
+ const otpContext = React14.useContext(import_input_otp.OTPInputContext);
3031
2885
  const slot = otpContext.slots[index];
3032
2886
  if (!slot) {
3033
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2887
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3034
2888
  "div",
3035
2889
  {
3036
2890
  ref,
@@ -3042,7 +2896,7 @@ var InputOTPSlot = React16.forwardRef(
3042
2896
  }
3043
2897
  );
3044
2898
  }
3045
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2899
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
3046
2900
  "div",
3047
2901
  {
3048
2902
  ref,
@@ -3054,15 +2908,15 @@ var InputOTPSlot = React16.forwardRef(
3054
2908
  ...props,
3055
2909
  children: [
3056
2910
  slot.char ?? null,
3057
- slot.hasFakeCaret ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-10 w-[2px] animate-pulse rounded-full bg-primary shadow-[var(--sofya-shadow-caret-glow)]" }) }) : null
2911
+ slot.hasFakeCaret ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "h-10 w-[2px] animate-pulse rounded-full bg-primary shadow-[var(--sofya-shadow-caret-glow)]" }) }) : null
3058
2912
  ]
3059
2913
  }
3060
2914
  );
3061
2915
  }
3062
2916
  );
3063
2917
  InputOTPSlot.displayName = "InputOTPSlot";
3064
- var InputOTPSeparator = React16.forwardRef(({ className, ...props }, ref) => {
3065
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2918
+ var InputOTPSeparator = React14.forwardRef(({ className, ...props }, ref) => {
2919
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3066
2920
  "div",
3067
2921
  {
3068
2922
  ref,
@@ -3072,22 +2926,22 @@ var InputOTPSeparator = React16.forwardRef(({ className, ...props }, ref) => {
3072
2926
  className
3073
2927
  ),
3074
2928
  ...props,
3075
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { "aria-hidden": "true", children: "." })
2929
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "aria-hidden": "true", children: "." })
3076
2930
  }
3077
2931
  );
3078
2932
  });
3079
2933
  InputOTPSeparator.displayName = "InputOTPSeparator";
3080
2934
 
3081
2935
  // src/components/input.tsx
3082
- var import_jsx_runtime18 = require("react/jsx-runtime");
2936
+ var import_jsx_runtime16 = require("react/jsx-runtime");
3083
2937
  var inputVariantOptions = [
3084
2938
  "default",
3085
2939
  "search",
3086
2940
  "otp",
3087
2941
  "upload"
3088
2942
  ];
3089
- var Input = React17.forwardRef((props, ref) => {
3090
- const generatedId = React17.useId();
2943
+ var Input = React15.forwardRef((props, ref) => {
2944
+ const generatedId = React15.useId();
3091
2945
  const resolvedId = props.id ?? generatedId;
3092
2946
  const variant = props.variant ?? "default";
3093
2947
  if (variant === "otp") {
@@ -3115,7 +2969,7 @@ var Input = React17.forwardRef((props, ref) => {
3115
2969
  );
3116
2970
  const hasTrailingGroup = resolvedSplitIndex < resolvedLength;
3117
2971
  const otpAriaLabel = otpProps["aria-label"] ?? "Verification code";
3118
- const otpControl = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2972
+ const otpControl = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
3119
2973
  InputOTP,
3120
2974
  {
3121
2975
  ref,
@@ -3128,7 +2982,7 @@ var Input = React17.forwardRef((props, ref) => {
3128
2982
  containerClassName: className2,
3129
2983
  ...otpProps,
3130
2984
  children: [
3131
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(InputOTPGroup, { className: otpGroupClassName, children: Array.from({ length: resolvedSplitIndex }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2985
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(InputOTPGroup, { className: otpGroupClassName, children: Array.from({ length: resolvedSplitIndex }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3132
2986
  InputOTPSlot,
3133
2987
  {
3134
2988
  className: otpSlotClassName,
@@ -3136,10 +2990,10 @@ var Input = React17.forwardRef((props, ref) => {
3136
2990
  },
3137
2991
  `otp-leading-${index}`
3138
2992
  )) }),
3139
- hasTrailingGroup ? otpSeparator ?? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(InputOTPSeparator, { className: otpSeparatorClassName }) : null,
3140
- hasTrailingGroup ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(InputOTPGroup, { className: otpGroupClassName, children: Array.from(
2993
+ hasTrailingGroup ? otpSeparator ?? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(InputOTPSeparator, { className: otpSeparatorClassName }) : null,
2994
+ hasTrailingGroup ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(InputOTPGroup, { className: otpGroupClassName, children: Array.from(
3141
2995
  { length: resolvedLength - resolvedSplitIndex },
3142
- (_, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2996
+ (_, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3143
2997
  InputOTPSlot,
3144
2998
  {
3145
2999
  className: otpSlotClassName,
@@ -3151,7 +3005,7 @@ var Input = React17.forwardRef((props, ref) => {
3151
3005
  ]
3152
3006
  }
3153
3007
  );
3154
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3008
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3155
3009
  FieldShell,
3156
3010
  {
3157
3011
  containerClassName: containerClassName2,
@@ -3170,7 +3024,7 @@ var Input = React17.forwardRef((props, ref) => {
3170
3024
  variant: _variant2,
3171
3025
  ...uploadProps
3172
3026
  } = props;
3173
- const uploadControl = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3027
+ const uploadControl = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3174
3028
  UploadInputControl,
3175
3029
  {
3176
3030
  ...uploadProps,
@@ -3178,7 +3032,7 @@ var Input = React17.forwardRef((props, ref) => {
3178
3032
  resolvedId
3179
3033
  }
3180
3034
  );
3181
- const uploadLabel = label2 || uploadOptionalLabel ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
3035
+ const uploadLabel = label2 || uploadOptionalLabel ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
3182
3036
  renderTextContent(label2, {
3183
3037
  as: "span",
3184
3038
  className: "text-[color:var(--sofya-text-default)]",
@@ -3187,13 +3041,13 @@ var Input = React17.forwardRef((props, ref) => {
3187
3041
  fontWeight: 700
3188
3042
  }
3189
3043
  }),
3190
- uploadOptionalLabel ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "ml-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(uploadOptionalLabel, {
3044
+ uploadOptionalLabel ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "ml-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(uploadOptionalLabel, {
3191
3045
  as: "span",
3192
3046
  className: "text-[color:var(--sofya-text-subtle)]",
3193
3047
  size: "tiny"
3194
3048
  }) }) : null
3195
3049
  ] }) : void 0;
3196
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3050
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3197
3051
  FieldShell,
3198
3052
  {
3199
3053
  containerClassName: containerClassName2,
@@ -3216,8 +3070,8 @@ var Input = React17.forwardRef((props, ref) => {
3216
3070
  const isSearch = variant === "search";
3217
3071
  const resolvedType = type ?? (isSearch ? "search" : void 0);
3218
3072
  const ariaLabel = nativeProps["aria-label"] ?? (typeof label === "string" ? label : isSearch ? "Search" : void 0);
3219
- const nativeControl = isSearch ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex h-[88px] w-full items-center gap-6 rounded-full border border-[color:var(--sofya-border-strong)] bg-card px-8 shadow-none transition-[border-color,box-shadow,background-color] duration-sofya ease-sofya hover:border-[color:var(--sofya-border-hover)] hover:ring-2 hover:ring-[color:var(--sofya-focus-ring-soft)] focus-within:border-transparent focus-within:ring-2 focus-within:ring-[color:var(--sofya-focus-ring-soft)] has-[:active]:border-transparent has-[:active]:ring-2 has-[:active]:ring-[color:var(--sofya-focus-ring-soft)]", children: [
3220
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3073
+ const nativeControl = isSearch ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex h-[88px] w-full items-center gap-6 rounded-full border border-[color:var(--sofya-border-strong)] bg-card px-8 shadow-none transition-[border-color,box-shadow,background-color] duration-sofya ease-sofya hover:border-[color:var(--sofya-border-hover)] hover:ring-2 hover:ring-[color:var(--sofya-focus-ring-soft)] focus-within:border-transparent focus-within:ring-2 focus-within:ring-[color:var(--sofya-focus-ring-soft)] has-[:active]:border-transparent has-[:active]:ring-2 has-[:active]:ring-[color:var(--sofya-focus-ring-soft)]", children: [
3074
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3221
3075
  Icon,
3222
3076
  {
3223
3077
  "aria-hidden": "true",
@@ -3226,7 +3080,7 @@ var Input = React17.forwardRef((props, ref) => {
3226
3080
  size: 32
3227
3081
  }
3228
3082
  ),
3229
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3083
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3230
3084
  "input",
3231
3085
  {
3232
3086
  id: resolvedId,
@@ -3242,39 +3096,587 @@ var Input = React17.forwardRef((props, ref) => {
3242
3096
  placeholder: nativeProps.placeholder ?? "Search"
3243
3097
  }
3244
3098
  )
3245
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3099
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3246
3100
  "input",
3247
3101
  {
3248
- id: resolvedId,
3102
+ id: resolvedId,
3103
+ ref,
3104
+ type: resolvedType,
3105
+ className: cn(
3106
+ "flex h-10 w-full rounded-[10px] border border-[color:var(--sofya-border-strong)] bg-card px-4 py-2 [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)] text-[color:var(--sofya-text-default)] shadow-none transition-[border-color,box-shadow,background-color,color] duration-sofya ease-sofya placeholder:text-[color:var(--sofya-text-placeholder)] hover:border-[color:var(--sofya-border-hover)] focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[color:var(--sofya-focus-ring-soft)] focus:ring-offset-0 active:border-transparent active:ring-2 active:ring-[color:var(--sofya-focus-ring-soft)] disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50",
3107
+ className
3108
+ ),
3109
+ ...nativeProps,
3110
+ "aria-label": ariaLabel
3111
+ }
3112
+ );
3113
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3114
+ FieldShell,
3115
+ {
3116
+ containerClassName,
3117
+ control: nativeControl,
3118
+ label: isSearch ? void 0 : label,
3119
+ labelClassName: isSearch ? void 0 : labelClassName,
3120
+ labelHtmlFor: isSearch ? void 0 : resolvedId
3121
+ }
3122
+ );
3123
+ });
3124
+ Input.displayName = "Input";
3125
+
3126
+ // src/components/popover.tsx
3127
+ var React16 = __toESM(require("react"), 1);
3128
+ var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"), 1);
3129
+ var import_jsx_runtime17 = require("react/jsx-runtime");
3130
+ var Popover = PopoverPrimitive.Root;
3131
+ var PopoverTrigger = PopoverPrimitive.Trigger;
3132
+ var PopoverAnchor = PopoverPrimitive.Anchor;
3133
+ var PopoverPortal = PopoverPrimitive.Portal;
3134
+ var PopoverClose = PopoverPrimitive.Close;
3135
+ var PopoverContent = React16.forwardRef(function PopoverContent2({
3136
+ align = "center",
3137
+ className,
3138
+ collisionPadding = 8,
3139
+ sideOffset = 8,
3140
+ ...props
3141
+ }, ref) {
3142
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3143
+ PopoverPrimitive.Content,
3144
+ {
3145
+ ref,
3146
+ align,
3147
+ collisionPadding,
3148
+ sideOffset,
3149
+ "data-slot": "popover-content",
3150
+ className: cn(
3151
+ "sofya-dropdown-content z-50 w-72 max-w-[min(24rem,calc(100vw-1rem))] rounded-[14px] border border-[color:var(--sofya-border-strong)] bg-[hsl(var(--sofya-popover))] p-4 text-[hsl(var(--sofya-popover-foreground))] shadow-[var(--sofya-shadow-soft)] outline-none",
3152
+ className
3153
+ ),
3154
+ ...props
3155
+ }
3156
+ ) });
3157
+ });
3158
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
3159
+ var PopoverTitle = React16.forwardRef(function PopoverTitle2({ children, className, ...props }, ref) {
3160
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3161
+ "h4",
3162
+ {
3163
+ ref,
3164
+ "data-slot": "popover-title",
3165
+ className: cn("text-[hsl(var(--sofya-popover-foreground))]", className),
3166
+ ...props,
3167
+ children: renderTextContent(children, {
3168
+ as: "span",
3169
+ className: "block text-[hsl(var(--sofya-popover-foreground))]",
3170
+ size: "h4"
3171
+ })
3172
+ }
3173
+ );
3174
+ });
3175
+ PopoverTitle.displayName = "PopoverTitle";
3176
+ var PopoverDescription = React16.forwardRef(function PopoverDescription2({ children, className, ...props }, ref) {
3177
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3178
+ "p",
3179
+ {
3180
+ ref,
3181
+ "data-slot": "popover-description",
3182
+ className: cn("text-muted-foreground", className),
3183
+ ...props,
3184
+ children: renderTextContent(children, {
3185
+ as: "span",
3186
+ className: "block text-muted-foreground",
3187
+ size: "body"
3188
+ })
3189
+ }
3190
+ );
3191
+ });
3192
+ PopoverDescription.displayName = "PopoverDescription";
3193
+
3194
+ // src/components/spinner.tsx
3195
+ var React17 = __toESM(require("react"), 1);
3196
+ var import_icons_react5 = require("@tabler/icons-react");
3197
+ var import_jsx_runtime18 = require("react/jsx-runtime");
3198
+ var spinnerSizeOptions = ["sm", "default", "lg"];
3199
+ var Spinner = React17.forwardRef(function Spinner2({
3200
+ "aria-label": ariaLabelProp,
3201
+ "aria-labelledby": ariaLabelledby,
3202
+ className,
3203
+ role = "status",
3204
+ size = "default",
3205
+ ...props
3206
+ }, ref) {
3207
+ const ariaLabel = ariaLabelProp ?? (ariaLabelledby ? void 0 : "Loading");
3208
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3209
+ import_icons_react5.IconLoader2,
3210
+ {
3211
+ ref,
3212
+ "data-size": size,
3213
+ "data-slot": "spinner",
3214
+ role,
3215
+ "aria-label": ariaLabel,
3216
+ "aria-labelledby": ariaLabelledby,
3217
+ className: cn(
3218
+ "shrink-0 animate-spin text-primary data-[size=sm]:h-3.5 data-[size=sm]:w-3.5 data-[size=default]:h-4 data-[size=default]:w-4 data-[size=lg]:h-6 data-[size=lg]:w-6",
3219
+ className
3220
+ ),
3221
+ ...props
3222
+ }
3223
+ );
3224
+ });
3225
+ Spinner.displayName = "Spinner";
3226
+
3227
+ // src/components/dropdown-search.tsx
3228
+ var import_jsx_runtime19 = require("react/jsx-runtime");
3229
+ var DropdownSearch = React18.forwardRef(
3230
+ function DropdownSearch2({
3231
+ className,
3232
+ containerClassName,
3233
+ defaultQuery = "",
3234
+ defaultValue,
3235
+ disabled,
3236
+ emptyMessage = "No results found",
3237
+ label,
3238
+ labelClassName,
3239
+ loading,
3240
+ onChange,
3241
+ onQueryChange,
3242
+ options = [],
3243
+ placeholder = "Search...",
3244
+ query: queryProp,
3245
+ value: valueProp
3246
+ }, ref) {
3247
+ const listboxId = React18.useId();
3248
+ const [open, setOpen] = React18.useState(false);
3249
+ const [query, setQuery] = useControllableState({
3250
+ defaultValue: defaultQuery,
3251
+ onChange: onQueryChange,
3252
+ value: queryProp
3253
+ });
3254
+ const [value, setValue] = useControllableState({
3255
+ defaultValue,
3256
+ onChange,
3257
+ value: valueProp
3258
+ });
3259
+ const inputRef = React18.useRef(null);
3260
+ const listRef = React18.useRef(null);
3261
+ const setInputRef = React18.useCallback(
3262
+ (node) => {
3263
+ inputRef.current = node;
3264
+ if (typeof ref === "function") {
3265
+ ref(node);
3266
+ } else if (ref) {
3267
+ ref.current = node;
3268
+ }
3269
+ },
3270
+ [ref]
3271
+ );
3272
+ function handleInputChange(e) {
3273
+ setQuery(e.target.value);
3274
+ setOpen(true);
3275
+ }
3276
+ function handleInputFocus() {
3277
+ setOpen(true);
3278
+ }
3279
+ function handleInputKeyDown(e) {
3280
+ if (e.key === "ArrowDown") {
3281
+ e.preventDefault();
3282
+ listRef.current?.querySelector(
3283
+ "[data-dropdown-search-item]:not([disabled])"
3284
+ )?.focus();
3285
+ }
3286
+ if (e.key === "Escape") {
3287
+ setOpen(false);
3288
+ }
3289
+ }
3290
+ function handleItemKeyDown(e, option) {
3291
+ if (e.key === "Enter" || e.key === " ") {
3292
+ e.preventDefault();
3293
+ handleSelect(option);
3294
+ return;
3295
+ }
3296
+ if (e.key === "ArrowDown") {
3297
+ e.preventDefault();
3298
+ e.currentTarget.closest("li")?.nextElementSibling?.querySelector("[data-dropdown-search-item]")?.focus();
3299
+ return;
3300
+ }
3301
+ if (e.key === "ArrowUp") {
3302
+ e.preventDefault();
3303
+ const prevLi = e.currentTarget.closest("li")?.previousElementSibling;
3304
+ if (prevLi) {
3305
+ prevLi.querySelector("[data-dropdown-search-item]")?.focus();
3306
+ } else {
3307
+ inputRef.current?.focus();
3308
+ }
3309
+ return;
3310
+ }
3311
+ if (e.key === "Escape") {
3312
+ setOpen(false);
3313
+ inputRef.current?.focus();
3314
+ }
3315
+ }
3316
+ function handleSelect(option) {
3317
+ if (option.disabled) return;
3318
+ setValue(option.value);
3319
+ setQuery(option.label);
3320
+ setOpen(false);
3321
+ }
3322
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
3323
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn("w-full", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3324
+ Input,
3325
+ {
3326
+ ref: setInputRef,
3327
+ "aria-autocomplete": "list",
3328
+ "aria-controls": open ? listboxId : void 0,
3329
+ "aria-expanded": open,
3330
+ "aria-haspopup": "listbox",
3331
+ autoComplete: "off",
3332
+ className,
3333
+ disabled,
3334
+ label,
3335
+ labelClassName,
3336
+ placeholder,
3337
+ role: "combobox",
3338
+ value: query ?? "",
3339
+ onChange: handleInputChange,
3340
+ onFocus: handleInputFocus,
3341
+ onKeyDown: handleInputKeyDown
3342
+ }
3343
+ ) }) }),
3344
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3345
+ PopoverContent,
3346
+ {
3347
+ align: "start",
3348
+ className: "w-[var(--radix-popover-trigger-width)] p-1",
3349
+ onOpenAutoFocus: (e) => e.preventDefault(),
3350
+ onInteractOutside: (e) => {
3351
+ if (inputRef.current?.closest("div")?.contains(e.target)) {
3352
+ e.preventDefault();
3353
+ }
3354
+ },
3355
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex items-center justify-center py-4", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Spinner, { size: "sm" }) }) : options.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "px-3 py-4 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3356
+ Text,
3357
+ {
3358
+ as: "span",
3359
+ size: "body",
3360
+ className: "text-[color:var(--sofya-text-subtle)]",
3361
+ children: emptyMessage
3362
+ }
3363
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3364
+ "ul",
3365
+ {
3366
+ ref: listRef,
3367
+ id: listboxId,
3368
+ role: "listbox",
3369
+ "aria-label": typeof label === "string" ? label : "Options",
3370
+ className: "flex flex-col gap-0.5",
3371
+ children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3372
+ "li",
3373
+ {
3374
+ role: "option",
3375
+ "aria-selected": value === option.value,
3376
+ "aria-disabled": option.disabled,
3377
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3378
+ "button",
3379
+ {
3380
+ "data-dropdown-search-item": true,
3381
+ type: "button",
3382
+ disabled: option.disabled,
3383
+ className: cn(
3384
+ "flex w-full items-center gap-3 rounded-[8px] px-3 py-2 text-left",
3385
+ "[font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)]",
3386
+ "transition-colors duration-sofya ease-sofya",
3387
+ "text-[color:var(--sofya-text-default)] hover:bg-muted focus-visible:bg-muted focus-visible:outline-none",
3388
+ "disabled:cursor-not-allowed disabled:opacity-40",
3389
+ value === option.value && "bg-muted"
3390
+ ),
3391
+ onClick: () => handleSelect(option),
3392
+ onKeyDown: (e) => handleItemKeyDown(e, option),
3393
+ children: [
3394
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3395
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Text, { as: "span", size: "body", className: "truncate", children: option.label }),
3396
+ option.description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3397
+ Text,
3398
+ {
3399
+ as: "span",
3400
+ size: "tiny",
3401
+ className: "truncate text-[color:var(--sofya-text-subtle)]",
3402
+ children: option.description
3403
+ }
3404
+ ) : null
3405
+ ] }),
3406
+ value === option.value ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3407
+ Icon,
3408
+ {
3409
+ "aria-hidden": "true",
3410
+ className: "shrink-0 text-primary",
3411
+ name: "check",
3412
+ size: 16
3413
+ }
3414
+ ) : null
3415
+ ]
3416
+ }
3417
+ )
3418
+ },
3419
+ option.value
3420
+ ))
3421
+ }
3422
+ )
3423
+ }
3424
+ )
3425
+ ] });
3426
+ }
3427
+ );
3428
+ DropdownSearch.displayName = "DropdownSearch";
3429
+
3430
+ // src/components/dialog.tsx
3431
+ var React19 = __toESM(require("react"), 1);
3432
+ var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
3433
+ var import_jsx_runtime20 = require("react/jsx-runtime");
3434
+ var Dialog = DialogPrimitive.Root;
3435
+ var DialogTrigger = DialogPrimitive.Trigger;
3436
+ var DialogPortal = DialogPrimitive.Portal;
3437
+ var DialogClose = DialogPrimitive.Close;
3438
+ var DialogInternalContext = React19.createContext({
3439
+ showCloseButton: true
3440
+ });
3441
+ var DialogOverlay = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3442
+ DialogPrimitive.Overlay,
3443
+ {
3444
+ ref,
3445
+ className: cn(
3446
+ "sofya-dialog-overlay fixed inset-0 z-50 bg-foreground/24 backdrop-blur-[6px]",
3447
+ className
3448
+ ),
3449
+ ...props
3450
+ }
3451
+ ));
3452
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
3453
+ var DialogContent = React19.forwardRef(
3454
+ ({
3455
+ className,
3456
+ children,
3457
+ cardClassName,
3458
+ overlayClassName,
3459
+ showCloseButton = true,
3460
+ variant = "card",
3461
+ ...props
3462
+ }, ref) => {
3463
+ const dialogCardStyle = {
3464
+ "--sofya-surface-shadow-override": "var(--sofya-shadow-lg)"
3465
+ };
3466
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogInternalContext.Provider, { value: { showCloseButton }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DialogPortal, { children: [
3467
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogOverlay, { className: overlayClassName }),
3468
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "sofya-dialog-positioner fixed inset-0 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3469
+ DialogPrimitive.Content,
3470
+ {
3471
+ ref,
3472
+ className: cn(
3473
+ "sofya-dialog-content relative flex w-full max-w-[680px] max-h-[calc(100vh-2rem)] outline-none",
3474
+ className
3475
+ ),
3476
+ ...props,
3477
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3478
+ Card,
3479
+ {
3480
+ variant,
3481
+ className: cn(
3482
+ "flex max-h-[inherit] min-h-0 w-full flex-col gap-6 overflow-y-auto overflow-x-hidden p-6",
3483
+ cardClassName
3484
+ ),
3485
+ style: dialogCardStyle,
3486
+ children
3487
+ }
3488
+ )
3489
+ }
3490
+ ) })
3491
+ ] }) });
3492
+ }
3493
+ );
3494
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
3495
+ function DialogHeader({ className, children, ...props }) {
3496
+ const { showCloseButton } = React19.useContext(DialogInternalContext);
3497
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3498
+ "div",
3499
+ {
3500
+ className: cn("flex w-full items-start justify-between gap-4", className),
3501
+ ...props,
3502
+ children: [
3503
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex min-w-0 flex-1 flex-col gap-2 text-left", children }),
3504
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3505
+ Button,
3506
+ {
3507
+ type: "button",
3508
+ variant: "ghost",
3509
+ size: "icon",
3510
+ "aria-label": "Close",
3511
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "x", size: 18 }),
3512
+ className: "shrink-0 text-muted-foreground hover:text-foreground"
3513
+ }
3514
+ ) }) : null
3515
+ ]
3516
+ }
3517
+ );
3518
+ }
3519
+ function DialogBody({ className, ...props }) {
3520
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3521
+ "div",
3522
+ {
3523
+ className: cn("flex flex-col gap-4", className),
3524
+ ...props
3525
+ }
3526
+ );
3527
+ }
3528
+ function DialogFooter({ className, ...props }) {
3529
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3530
+ "div",
3531
+ {
3532
+ className: cn("flex items-center justify-end gap-2", className),
3533
+ ...props
3534
+ }
3535
+ );
3536
+ }
3537
+ var DialogCancel = React19.forwardRef(
3538
+ ({ type = "button", variant = "ghost", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { ref, type, variant, ...props }) })
3539
+ );
3540
+ DialogCancel.displayName = "DialogCancel";
3541
+ var DialogTitle = React19.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3542
+ DialogPrimitive.Title,
3543
+ {
3544
+ ref,
3545
+ className: cn("text-card-foreground", className),
3546
+ ...props,
3547
+ children: renderTextContent(children, {
3548
+ as: "span",
3549
+ className: "block text-card-foreground",
3550
+ size: "h3"
3551
+ })
3552
+ }
3553
+ ));
3554
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
3555
+ var DialogDescription = React19.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3556
+ DialogPrimitive.Description,
3557
+ {
3558
+ ref,
3559
+ className: cn("text-muted-foreground", className),
3560
+ ...props,
3561
+ children: renderTextContent(children, {
3562
+ as: "span",
3563
+ className: "block text-muted-foreground",
3564
+ size: "body"
3565
+ })
3566
+ }
3567
+ ));
3568
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
3569
+
3570
+ // src/components/empty.tsx
3571
+ var React20 = __toESM(require("react"), 1);
3572
+ var import_class_variance_authority5 = require("class-variance-authority");
3573
+ var import_jsx_runtime21 = require("react/jsx-runtime");
3574
+ var emptyMediaVariantOptions = ["default", "icon"];
3575
+ var emptyMediaVariants = (0, import_class_variance_authority5.cva)(
3576
+ "inline-flex shrink-0 items-center justify-center transition-[background-color,border-color,color,box-shadow] duration-sofya ease-sofya",
3577
+ {
3578
+ variants: {
3579
+ variant: {
3580
+ default: "[&_img]:max-w-full [&_svg]:shrink-0 [&_svg]:text-primary",
3581
+ icon: "h-16 w-16 rounded-full border border-primary/10 bg-primary/10 text-primary [&_svg]:h-7 [&_svg]:w-7 [&_svg]:shrink-0"
3582
+ }
3583
+ },
3584
+ defaultVariants: {
3585
+ variant: "default"
3586
+ }
3587
+ }
3588
+ );
3589
+ var EmptyMedia = React20.forwardRef(function EmptyMedia2({ className, variant, ...props }, ref) {
3590
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cn(emptyMediaVariants({ variant }), className), ...props });
3591
+ });
3592
+ function EmptyHeader({ className, ...props }) {
3593
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3594
+ "div",
3595
+ {
3596
+ className: cn("flex max-w-[34rem] flex-col items-center gap-4 text-center", className),
3597
+ ...props
3598
+ }
3599
+ );
3600
+ }
3601
+ function EmptyTitle({ children, className, ...props }) {
3602
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3603
+ "h2",
3604
+ {
3605
+ className: cn("text-foreground", className),
3606
+ ...props,
3607
+ children: renderTextContent(children, {
3608
+ as: "span",
3609
+ className: "block text-foreground",
3610
+ size: "h4"
3611
+ })
3612
+ }
3613
+ );
3614
+ }
3615
+ function EmptyDescription({
3616
+ children,
3617
+ className,
3618
+ ...props
3619
+ }) {
3620
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3621
+ "p",
3622
+ {
3623
+ className: cn("max-w-full text-muted-foreground whitespace-nowrap", className),
3624
+ ...props,
3625
+ children: renderTextContent(children, {
3626
+ as: "span",
3627
+ className: "inline-block whitespace-nowrap text-muted-foreground",
3628
+ size: "body"
3629
+ })
3630
+ }
3631
+ );
3632
+ }
3633
+ function EmptyContent({ children, className, ...props }) {
3634
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3635
+ "div",
3636
+ {
3637
+ className: cn("flex flex-wrap items-center justify-center gap-4 text-center", className),
3638
+ ...props,
3639
+ children: renderTextContent(children, {
3640
+ as: "span"
3641
+ })
3642
+ }
3643
+ );
3644
+ }
3645
+ var Empty = React20.forwardRef(function Empty2({ children, className, content, description, media, title, ...props }, ref) {
3646
+ const hasCustomChildren = React20.Children.count(children) > 0;
3647
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3648
+ "div",
3649
+ {
3249
3650
  ref,
3250
- type: resolvedType,
3251
3651
  className: cn(
3252
- "flex h-10 w-full rounded-[10px] border border-[color:var(--sofya-border-strong)] bg-card px-4 py-2 [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)] text-[color:var(--sofya-text-default)] shadow-none transition-[border-color,box-shadow,background-color,color] duration-sofya ease-sofya placeholder:text-[color:var(--sofya-text-placeholder)] hover:border-[color:var(--sofya-border-hover)] focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[color:var(--sofya-focus-ring-soft)] focus:ring-offset-0 active:border-transparent active:ring-2 active:ring-[color:var(--sofya-focus-ring-soft)] disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50",
3652
+ "flex min-h-[280px] w-full flex-col items-center justify-center gap-6 rounded-[28px] bg-gradient-to-b from-card via-card to-muted/45 px-6 py-10 text-center",
3253
3653
  className
3254
3654
  ),
3255
- ...nativeProps,
3256
- "aria-label": ariaLabel
3257
- }
3258
- );
3259
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3260
- FieldShell,
3261
- {
3262
- containerClassName,
3263
- control: nativeControl,
3264
- label: isSearch ? void 0 : label,
3265
- labelClassName: isSearch ? void 0 : labelClassName,
3266
- labelHtmlFor: isSearch ? void 0 : resolvedId
3655
+ ...props,
3656
+ children: hasCustomChildren ? children : /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
3657
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(EmptyHeader, { children: [
3658
+ media ?? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(EmptyMedia, { variant: "icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon, { name: "folders", size: 28 }) }),
3659
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(EmptyTitle, { children: title ?? "Nada por aqui" }),
3660
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(EmptyDescription, { children: description ?? "Quando houver conte\xFAdo dispon\xEDvel, ele aparecer\xE1 aqui." })
3661
+ ] }),
3662
+ content !== void 0 && content !== null ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(EmptyContent, { children: content }) : null
3663
+ ] })
3267
3664
  }
3268
3665
  );
3269
3666
  });
3270
- Input.displayName = "Input";
3667
+ Empty.displayName = "Empty";
3668
+ EmptyMedia.displayName = "EmptyMedia";
3669
+ EmptyHeader.displayName = "EmptyHeader";
3670
+ EmptyTitle.displayName = "EmptyTitle";
3671
+ EmptyDescription.displayName = "EmptyDescription";
3672
+ EmptyContent.displayName = "EmptyContent";
3271
3673
 
3272
3674
  // src/components/label.tsx
3273
- var React18 = __toESM(require("react"), 1);
3274
- var import_jsx_runtime19 = require("react/jsx-runtime");
3275
- var Label = React18.forwardRef(
3675
+ var React21 = __toESM(require("react"), 1);
3676
+ var import_jsx_runtime22 = require("react/jsx-runtime");
3677
+ var Label = React21.forwardRef(
3276
3678
  ({ children, className, ...props }, ref) => {
3277
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3679
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3278
3680
  "label",
3279
3681
  {
3280
3682
  ref,
@@ -3298,10 +3700,10 @@ var Label = React18.forwardRef(
3298
3700
  Label.displayName = "Label";
3299
3701
 
3300
3702
  // src/components/link.tsx
3301
- var React19 = __toESM(require("react"), 1);
3703
+ var React22 = __toESM(require("react"), 1);
3302
3704
  var import_react_slot3 = require("@radix-ui/react-slot");
3303
3705
  var import_class_variance_authority6 = require("class-variance-authority");
3304
- var import_jsx_runtime20 = require("react/jsx-runtime");
3706
+ var import_jsx_runtime23 = require("react/jsx-runtime");
3305
3707
  var linkVariants = (0, import_class_variance_authority6.cva)(
3306
3708
  "inline bg-[linear-gradient(currentColor,currentColor)] bg-[position:0_100%] bg-no-repeat pb-0 text-primary no-underline transition-[color,background-size,box-shadow] duration-sofya ease-sofya hover:text-[color:var(--sofya-link-hover)] focus-visible:rounded-[4px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--sofya-focus-ring-soft)] focus-visible:ring-offset-0",
3307
3709
  {
@@ -3316,9 +3718,9 @@ var linkVariants = (0, import_class_variance_authority6.cva)(
3316
3718
  }
3317
3719
  }
3318
3720
  );
3319
- var Link = React19.forwardRef(function Link2({ asChild = false, children, className, variant = "default", ...props }, ref) {
3721
+ var Link = React22.forwardRef(function Link2({ asChild = false, children, className, variant = "default", ...props }, ref) {
3320
3722
  const Component = asChild ? import_react_slot3.Slot : "a";
3321
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3723
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3322
3724
  Component,
3323
3725
  {
3324
3726
  ref,
@@ -3336,7 +3738,7 @@ var Link = React19.forwardRef(function Link2({ asChild = false, children, classN
3336
3738
  Link.displayName = "Link";
3337
3739
 
3338
3740
  // src/components/logo.tsx
3339
- var React20 = __toESM(require("react"), 1);
3741
+ var React23 = __toESM(require("react"), 1);
3340
3742
 
3341
3743
  // src/components/logo-data.ts
3342
3744
  var logoAssets = {
@@ -3433,7 +3835,7 @@ var logoAssets = {
3433
3835
  };
3434
3836
 
3435
3837
  // src/components/logo.tsx
3436
- var import_jsx_runtime21 = require("react/jsx-runtime");
3838
+ var import_jsx_runtime24 = require("react/jsx-runtime");
3437
3839
  var logoVariants = ["mono", "default", "text", "full"];
3438
3840
  var logoSizeOptions = ["sm", "md", "lg", "xl", "2xl"];
3439
3841
  var logoSizeScale = {
@@ -3469,7 +3871,7 @@ function resolveLogoDimensions(variant, size, width, height) {
3469
3871
  height: resolvedHeight
3470
3872
  };
3471
3873
  }
3472
- var Logo = React20.forwardRef(function Logo2({
3874
+ var Logo = React23.forwardRef(function Logo2({
3473
3875
  variant = "full",
3474
3876
  size = "lg",
3475
3877
  width,
@@ -3480,10 +3882,10 @@ var Logo = React20.forwardRef(function Logo2({
3480
3882
  ...props
3481
3883
  }, ref) {
3482
3884
  const asset = logoAssets[variant];
3483
- const titleId = React20.useId();
3885
+ const titleId = React23.useId();
3484
3886
  const dimensions = resolveLogoDimensions(variant, size, width, height);
3485
3887
  const monoFill = variant === "mono" ? monoColor ?? "currentColor" : void 0;
3486
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3888
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
3487
3889
  "svg",
3488
3890
  {
3489
3891
  ref,
@@ -3498,8 +3900,8 @@ var Logo = React20.forwardRef(function Logo2({
3498
3900
  focusable: "false",
3499
3901
  ...props,
3500
3902
  children: [
3501
- title ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("title", { id: titleId, children: title }) : null,
3502
- asset.paths.map((path, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3903
+ title ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("title", { id: titleId, children: title }) : null,
3904
+ asset.paths.map((path, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3503
3905
  "path",
3504
3906
  {
3505
3907
  d: path.d,
@@ -3516,7 +3918,7 @@ var Logo = React20.forwardRef(function Logo2({
3516
3918
  Logo.displayName = "Logo";
3517
3919
 
3518
3920
  // src/components/pagination.tsx
3519
- var import_icons_react5 = require("@tabler/icons-react");
3921
+ var import_icons_react6 = require("@tabler/icons-react");
3520
3922
  var import_react_slot4 = require("@radix-ui/react-slot");
3521
3923
  var import_class_variance_authority7 = require("class-variance-authority");
3522
3924
 
@@ -3531,7 +3933,7 @@ var inheritedTypographyStyle = {
3531
3933
  };
3532
3934
 
3533
3935
  // src/components/pagination.tsx
3534
- var import_jsx_runtime22 = require("react/jsx-runtime");
3936
+ var import_jsx_runtime25 = require("react/jsx-runtime");
3535
3937
  var paginationLinkVariants = (0, import_class_variance_authority7.cva)(
3536
3938
  "inline-flex h-10 min-w-10 items-center justify-center rounded-full border border-transparent px-4 [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] font-medium leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)] text-[color:var(--sofya-text-soft)] no-underline transition-[transform,background-color,border-color,color,box-shadow] duration-sofya ease-sofya motion-safe:active:scale-[0.985] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--sofya-focus-ring-soft)] focus-visible:ring-offset-0",
3537
3939
  {
@@ -3552,7 +3954,7 @@ var paginationLinkVariants = (0, import_class_variance_authority7.cva)(
3552
3954
  }
3553
3955
  );
3554
3956
  function Pagination({ className, ...props }) {
3555
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3957
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3556
3958
  "nav",
3557
3959
  {
3558
3960
  "aria-label": "Pagination",
@@ -3565,7 +3967,7 @@ function PaginationContent({
3565
3967
  className,
3566
3968
  ...props
3567
3969
  }) {
3568
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3970
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3569
3971
  "ul",
3570
3972
  {
3571
3973
  className: cn(
@@ -3577,7 +3979,7 @@ function PaginationContent({
3577
3979
  );
3578
3980
  }
3579
3981
  function PaginationItem({ className, ...props }) {
3580
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("li", { className: cn("list-none", className), ...props });
3982
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { className: cn("list-none", className), ...props });
3581
3983
  }
3582
3984
  function PaginationLink({
3583
3985
  asChild = false,
@@ -3587,7 +3989,7 @@ function PaginationLink({
3587
3989
  ...props
3588
3990
  }) {
3589
3991
  const Component = asChild ? import_react_slot4.Slot : "a";
3590
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3992
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3591
3993
  Component,
3592
3994
  {
3593
3995
  "aria-current": isActive ? "page" : void 0,
@@ -3597,25 +3999,25 @@ function PaginationLink({
3597
3999
  );
3598
4000
  }
3599
4001
  function PaginationChevronLeft() {
3600
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons_react5.IconChevronLeft, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
4002
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_icons_react6.IconChevronLeft, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3601
4003
  }
3602
4004
  function PaginationChevronRight() {
3603
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons_react5.IconChevronRight, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
4005
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_icons_react6.IconChevronRight, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3604
4006
  }
3605
4007
  function PaginationPrevious({
3606
4008
  className,
3607
4009
  text = "Previous",
3608
4010
  ...props
3609
4011
  }) {
3610
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
4012
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3611
4013
  PaginationLink,
3612
4014
  {
3613
4015
  "aria-label": "Go to previous page",
3614
4016
  className: cn("gap-2 px-4", className),
3615
4017
  ...props,
3616
4018
  children: [
3617
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PaginationChevronLeft, {}),
3618
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "hidden sm:block", children: renderTextContent(text, {
4019
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(PaginationChevronLeft, {}),
4020
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "hidden sm:block", children: renderTextContent(text, {
3619
4021
  as: "span",
3620
4022
  className: "block text-inherit",
3621
4023
  size: "body",
@@ -3630,20 +4032,20 @@ function PaginationNext({
3630
4032
  text = "Next",
3631
4033
  ...props
3632
4034
  }) {
3633
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
4035
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3634
4036
  PaginationLink,
3635
4037
  {
3636
4038
  "aria-label": "Go to next page",
3637
4039
  className: cn("gap-2 px-4", className),
3638
4040
  ...props,
3639
4041
  children: [
3640
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "hidden sm:block", children: renderTextContent(text, {
4042
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "hidden sm:block", children: renderTextContent(text, {
3641
4043
  as: "span",
3642
4044
  className: "block text-inherit",
3643
4045
  size: "body",
3644
4046
  style: inheritedTypographyStyle
3645
4047
  }) }),
3646
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PaginationChevronRight, {})
4048
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(PaginationChevronRight, {})
3647
4049
  ]
3648
4050
  }
3649
4051
  );
@@ -3652,7 +4054,7 @@ function PaginationEllipsis({
3652
4054
  className,
3653
4055
  ...props
3654
4056
  }) {
3655
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
4057
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3656
4058
  "span",
3657
4059
  {
3658
4060
  "aria-hidden": "true",
@@ -3662,90 +4064,22 @@ function PaginationEllipsis({
3662
4064
  ),
3663
4065
  ...props,
3664
4066
  children: [
3665
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: renderTextContent("...", {
4067
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: renderTextContent("...", {
3666
4068
  as: "span",
3667
4069
  className: "block text-inherit",
3668
4070
  size: "h5",
3669
4071
  style: inheritedTypographyStyle
3670
4072
  }) }),
3671
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: "More pages" })
4073
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "sr-only", children: "More pages" })
3672
4074
  ]
3673
4075
  }
3674
4076
  );
3675
4077
  }
3676
4078
 
3677
- // src/components/popover.tsx
3678
- var React21 = __toESM(require("react"), 1);
3679
- var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"), 1);
3680
- var import_jsx_runtime23 = require("react/jsx-runtime");
3681
- var Popover = PopoverPrimitive.Root;
3682
- var PopoverTrigger = PopoverPrimitive.Trigger;
3683
- var PopoverAnchor = PopoverPrimitive.Anchor;
3684
- var PopoverPortal = PopoverPrimitive.Portal;
3685
- var PopoverClose = PopoverPrimitive.Close;
3686
- var PopoverContent = React21.forwardRef(function PopoverContent2({
3687
- align = "center",
3688
- className,
3689
- collisionPadding = 8,
3690
- sideOffset = 8,
3691
- ...props
3692
- }, ref) {
3693
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3694
- PopoverPrimitive.Content,
3695
- {
3696
- ref,
3697
- align,
3698
- collisionPadding,
3699
- sideOffset,
3700
- "data-slot": "popover-content",
3701
- className: cn(
3702
- "sofya-dropdown-content z-50 w-72 max-w-[min(24rem,calc(100vw-1rem))] rounded-[14px] border border-[color:var(--sofya-border-strong)] bg-[hsl(var(--sofya-popover))] p-4 text-[hsl(var(--sofya-popover-foreground))] shadow-[var(--sofya-shadow-soft)] outline-none",
3703
- className
3704
- ),
3705
- ...props
3706
- }
3707
- ) });
3708
- });
3709
- PopoverContent.displayName = PopoverPrimitive.Content.displayName;
3710
- var PopoverTitle = React21.forwardRef(function PopoverTitle2({ children, className, ...props }, ref) {
3711
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3712
- "h4",
3713
- {
3714
- ref,
3715
- "data-slot": "popover-title",
3716
- className: cn("text-[hsl(var(--sofya-popover-foreground))]", className),
3717
- ...props,
3718
- children: renderTextContent(children, {
3719
- as: "span",
3720
- className: "block text-[hsl(var(--sofya-popover-foreground))]",
3721
- size: "h4"
3722
- })
3723
- }
3724
- );
3725
- });
3726
- PopoverTitle.displayName = "PopoverTitle";
3727
- var PopoverDescription = React21.forwardRef(function PopoverDescription2({ children, className, ...props }, ref) {
3728
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3729
- "p",
3730
- {
3731
- ref,
3732
- "data-slot": "popover-description",
3733
- className: cn("text-muted-foreground", className),
3734
- ...props,
3735
- children: renderTextContent(children, {
3736
- as: "span",
3737
- className: "block text-muted-foreground",
3738
- size: "body"
3739
- })
3740
- }
3741
- );
3742
- });
3743
- PopoverDescription.displayName = "PopoverDescription";
3744
-
3745
4079
  // src/components/progress.tsx
3746
- var React22 = __toESM(require("react"), 1);
4080
+ var React24 = __toESM(require("react"), 1);
3747
4081
  var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"), 1);
3748
- var import_jsx_runtime24 = require("react/jsx-runtime");
4082
+ var import_jsx_runtime26 = require("react/jsx-runtime");
3749
4083
  var progressSizeOptions = ["sm", "default", "lg"];
3750
4084
  function clampProgressValue(value, max) {
3751
4085
  if (Number.isNaN(value)) {
@@ -3753,7 +4087,7 @@ function clampProgressValue(value, max) {
3753
4087
  }
3754
4088
  return Math.min(Math.max(value, 0), max);
3755
4089
  }
3756
- var Progress = React22.forwardRef(function Progress2({
4090
+ var Progress = React24.forwardRef(function Progress2({
3757
4091
  className,
3758
4092
  indicatorClassName,
3759
4093
  max = 100,
@@ -3764,7 +4098,7 @@ var Progress = React22.forwardRef(function Progress2({
3764
4098
  const safeMax = max > 0 ? max : 100;
3765
4099
  const resolvedValue = typeof value === "number" ? clampProgressValue(value, safeMax) : null;
3766
4100
  const progressScale = resolvedValue === null ? void 0 : Number((resolvedValue / safeMax).toFixed(4));
3767
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4101
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3768
4102
  ProgressPrimitive.Root,
3769
4103
  {
3770
4104
  ref,
@@ -3777,7 +4111,7 @@ var Progress = React22.forwardRef(function Progress2({
3777
4111
  className
3778
4112
  ),
3779
4113
  ...props,
3780
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4114
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3781
4115
  ProgressPrimitive.Indicator,
3782
4116
  {
3783
4117
  "data-slot": "progress-indicator",
@@ -3794,12 +4128,12 @@ var Progress = React22.forwardRef(function Progress2({
3794
4128
  Progress.displayName = ProgressPrimitive.Root.displayName;
3795
4129
 
3796
4130
  // src/components/radio-group.tsx
3797
- var React23 = __toESM(require("react"), 1);
4131
+ var React25 = __toESM(require("react"), 1);
3798
4132
  var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
3799
- var import_jsx_runtime25 = require("react/jsx-runtime");
4133
+ var import_jsx_runtime27 = require("react/jsx-runtime");
3800
4134
  var radioGroupOrientationOptions = ["horizontal", "vertical"];
3801
- var RadioGroup2 = React23.forwardRef(function RadioGroup3({ className, ...props }, ref) {
3802
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4135
+ var RadioGroup2 = React25.forwardRef(function RadioGroup3({ className, ...props }, ref) {
4136
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3803
4137
  RadioGroupPrimitive.Root,
3804
4138
  {
3805
4139
  ref,
@@ -3813,7 +4147,7 @@ var RadioGroup2 = React23.forwardRef(function RadioGroup3({ className, ...props
3813
4147
  );
3814
4148
  });
3815
4149
  RadioGroup2.displayName = RadioGroupPrimitive.Root.displayName;
3816
- var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
4150
+ var RadioGroupItem = React25.forwardRef(function RadioGroupItem2({
3817
4151
  className,
3818
4152
  controlClassName,
3819
4153
  description,
@@ -3825,12 +4159,12 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3825
4159
  labelClassName,
3826
4160
  ...props
3827
4161
  }, ref) {
3828
- const generatedId = React23.useId();
4162
+ const generatedId = React25.useId();
3829
4163
  const resolvedId = id ?? generatedId;
3830
4164
  const labelId = label ? `${resolvedId}-label` : void 0;
3831
4165
  const descriptionId = description ? `${resolvedId}-description` : void 0;
3832
4166
  const alignClassName = description ? "items-start" : "items-center";
3833
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
4167
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3834
4168
  "label",
3835
4169
  {
3836
4170
  className: selectionControlContainerClasses({
@@ -3839,7 +4173,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3839
4173
  disabled
3840
4174
  }),
3841
4175
  children: [
3842
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4176
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3843
4177
  RadioGroupPrimitive.Item,
3844
4178
  {
3845
4179
  ref,
@@ -3855,7 +4189,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3855
4189
  controlClassName
3856
4190
  ),
3857
4191
  ...props,
3858
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(RadioGroupPrimitive.Indicator, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4192
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadioGroupPrimitive.Indicator, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3859
4193
  "span",
3860
4194
  {
3861
4195
  "data-slot": "radio-group-indicator",
@@ -3867,8 +4201,8 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3867
4201
  ) })
3868
4202
  }
3869
4203
  ),
3870
- label || description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: selectionControlContentBaseClasses, children: [
3871
- label ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4204
+ label || description ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: selectionControlContentBaseClasses, children: [
4205
+ label ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3872
4206
  "span",
3873
4207
  {
3874
4208
  id: labelId,
@@ -3883,7 +4217,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3883
4217
  })
3884
4218
  }
3885
4219
  ) : null,
3886
- description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4220
+ description ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3887
4221
  "span",
3888
4222
  {
3889
4223
  id: descriptionId,
@@ -3906,12 +4240,12 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3906
4240
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
3907
4241
 
3908
4242
  // src/components/scroll-area.tsx
3909
- var React24 = __toESM(require("react"), 1);
4243
+ var React26 = __toESM(require("react"), 1);
3910
4244
  var ScrollAreaPrimitive = __toESM(require("@radix-ui/react-scroll-area"), 1);
3911
- var import_jsx_runtime26 = require("react/jsx-runtime");
4245
+ var import_jsx_runtime28 = require("react/jsx-runtime");
3912
4246
  var scrollAreaOrientationOptions = ["horizontal", "vertical"];
3913
- var ScrollArea = React24.forwardRef(function ScrollArea2({ className, ...props }, ref) {
3914
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4247
+ var ScrollArea = React26.forwardRef(function ScrollArea2({ className, ...props }, ref) {
4248
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3915
4249
  ScrollAreaPrimitive.Root,
3916
4250
  {
3917
4251
  ref,
@@ -3922,8 +4256,8 @@ var ScrollArea = React24.forwardRef(function ScrollArea2({ className, ...props }
3922
4256
  );
3923
4257
  });
3924
4258
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
3925
- var ScrollAreaViewport = React24.forwardRef(function ScrollAreaViewport2({ className, ...props }, ref) {
3926
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4259
+ var ScrollAreaViewport = React26.forwardRef(function ScrollAreaViewport2({ className, ...props }, ref) {
4260
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3927
4261
  ScrollAreaPrimitive.Viewport,
3928
4262
  {
3929
4263
  ref,
@@ -3937,8 +4271,8 @@ var ScrollAreaViewport = React24.forwardRef(function ScrollAreaViewport2({ class
3937
4271
  );
3938
4272
  });
3939
4273
  ScrollAreaViewport.displayName = ScrollAreaPrimitive.Viewport.displayName;
3940
- var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ className, orientation = "vertical", thumbClassName, ...props }, ref) {
3941
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4274
+ var ScrollAreaScrollbar = React26.forwardRef(function ScrollAreaScrollbar2({ className, orientation = "vertical", thumbClassName, ...props }, ref) {
4275
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3942
4276
  ScrollAreaPrimitive.Scrollbar,
3943
4277
  {
3944
4278
  ref,
@@ -3949,7 +4283,7 @@ var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ cla
3949
4283
  className
3950
4284
  ),
3951
4285
  ...props,
3952
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4286
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3953
4287
  ScrollAreaPrimitive.Thumb,
3954
4288
  {
3955
4289
  "data-slot": "scroll-area-thumb",
@@ -3963,8 +4297,8 @@ var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ cla
3963
4297
  );
3964
4298
  });
3965
4299
  ScrollAreaScrollbar.displayName = ScrollAreaPrimitive.Scrollbar.displayName;
3966
- var ScrollAreaCorner = React24.forwardRef(function ScrollAreaCorner2({ className, ...props }, ref) {
3967
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4300
+ var ScrollAreaCorner = React26.forwardRef(function ScrollAreaCorner2({ className, ...props }, ref) {
4301
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3968
4302
  ScrollAreaPrimitive.Corner,
3969
4303
  {
3970
4304
  ref,
@@ -3977,19 +4311,19 @@ var ScrollAreaCorner = React24.forwardRef(function ScrollAreaCorner2({ className
3977
4311
  ScrollAreaCorner.displayName = ScrollAreaPrimitive.Corner.displayName;
3978
4312
 
3979
4313
  // src/components/select.tsx
3980
- var React25 = __toESM(require("react"), 1);
4314
+ var React27 = __toESM(require("react"), 1);
3981
4315
  var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
3982
4316
 
3983
4317
  // src/lib/form-control-classes.ts
3984
4318
  var formControlBaseClasses = "flex w-full items-center justify-between gap-4 rounded-[10px] border border-[color:var(--sofya-border-strong)] bg-card px-4 text-left [font-family:var(--sofya-text-body-font-family)] text-[length:var(--sofya-text-body-font-size)] [font-weight:var(--sofya-text-body-font-weight)] leading-[var(--sofya-text-body-line-height)] tracking-[var(--sofya-text-body-letter-spacing)] text-[color:var(--sofya-text-default)] shadow-none transition-[border-color,box-shadow,background-color,color] duration-sofya ease-sofya hover:border-[color:var(--sofya-border-hover)] focus:outline-none focus:ring-2 focus:ring-[color:var(--sofya-focus-ring-soft)] focus:ring-offset-0 active:border-transparent active:ring-2 active:ring-[color:var(--sofya-focus-ring-soft)] disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus:ring-destructive/20 data-[placeholder]:text-[color:var(--sofya-text-placeholder)]";
3985
4319
 
3986
4320
  // src/components/select.tsx
3987
- var import_jsx_runtime27 = require("react/jsx-runtime");
4321
+ var import_jsx_runtime29 = require("react/jsx-runtime");
3988
4322
  var selectSizeOptions = ["default", "sm"];
3989
4323
  var Select = SelectPrimitive.Root;
3990
4324
  var SelectGroup = SelectPrimitive.Group;
3991
- var SelectValue = React25.forwardRef(function SelectValue2({ className, ...props }, ref) {
3992
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4325
+ var SelectValue = React27.forwardRef(function SelectValue2({ className, ...props }, ref) {
4326
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3993
4327
  Text,
3994
4328
  {
3995
4329
  ref,
@@ -3998,13 +4332,13 @@ var SelectValue = React25.forwardRef(function SelectValue2({ className, ...props
3998
4332
  className: cn("block truncate text-inherit", className),
3999
4333
  size: "body",
4000
4334
  style: inheritedTypographyStyle,
4001
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectPrimitive.Value, { className: "block truncate", ...props })
4335
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectPrimitive.Value, { className: "block truncate", ...props })
4002
4336
  }
4003
4337
  );
4004
4338
  });
4005
4339
  SelectValue.displayName = SelectPrimitive.Value.displayName;
4006
- var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, children, size = "default", ...props }, ref) {
4007
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
4340
+ var SelectTrigger = React27.forwardRef(function SelectTrigger2({ className, children, size = "default", ...props }, ref) {
4341
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4008
4342
  SelectPrimitive.Trigger,
4009
4343
  {
4010
4344
  ref,
@@ -4018,7 +4352,7 @@ var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, chil
4018
4352
  ...props,
4019
4353
  children: [
4020
4354
  children,
4021
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4355
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4022
4356
  Icon,
4023
4357
  {
4024
4358
  name: "caret-down",
@@ -4031,8 +4365,8 @@ var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, chil
4031
4365
  );
4032
4366
  });
4033
4367
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4034
- var SelectScrollUpButton = React25.forwardRef(function SelectScrollUpButton2({ className, ...props }, ref) {
4035
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4368
+ var SelectScrollUpButton = React27.forwardRef(function SelectScrollUpButton2({ className, ...props }, ref) {
4369
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4036
4370
  SelectPrimitive.ScrollUpButton,
4037
4371
  {
4038
4372
  ref,
@@ -4042,13 +4376,13 @@ var SelectScrollUpButton = React25.forwardRef(function SelectScrollUpButton2({ c
4042
4376
  className
4043
4377
  ),
4044
4378
  ...props,
4045
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "caret-up", size: 12 })
4379
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { name: "caret-up", size: 12 })
4046
4380
  }
4047
4381
  );
4048
4382
  });
4049
4383
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4050
- var SelectScrollDownButton = React25.forwardRef(function SelectScrollDownButton2({ className, ...props }, ref) {
4051
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4384
+ var SelectScrollDownButton = React27.forwardRef(function SelectScrollDownButton2({ className, ...props }, ref) {
4385
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4052
4386
  SelectPrimitive.ScrollDownButton,
4053
4387
  {
4054
4388
  ref,
@@ -4058,13 +4392,13 @@ var SelectScrollDownButton = React25.forwardRef(function SelectScrollDownButton2
4058
4392
  className
4059
4393
  ),
4060
4394
  ...props,
4061
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "caret-down", size: 12 })
4395
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { name: "caret-down", size: 12 })
4062
4396
  }
4063
4397
  );
4064
4398
  });
4065
4399
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
4066
- var SelectContent = React25.forwardRef(function SelectContent2({ className, children, position = "popper", ...props }, ref) {
4067
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
4400
+ var SelectContent = React27.forwardRef(function SelectContent2({ className, children, position = "popper", ...props }, ref) {
4401
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4068
4402
  SelectPrimitive.Content,
4069
4403
  {
4070
4404
  ref,
@@ -4077,8 +4411,8 @@ var SelectContent = React25.forwardRef(function SelectContent2({ className, chil
4077
4411
  ),
4078
4412
  ...props,
4079
4413
  children: [
4080
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectScrollUpButton, {}),
4081
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4414
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectScrollUpButton, {}),
4415
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4082
4416
  SelectPrimitive.Viewport,
4083
4417
  {
4084
4418
  "data-slot": "select-viewport",
@@ -4086,14 +4420,14 @@ var SelectContent = React25.forwardRef(function SelectContent2({ className, chil
4086
4420
  children
4087
4421
  }
4088
4422
  ),
4089
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectScrollDownButton, {})
4423
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectScrollDownButton, {})
4090
4424
  ]
4091
4425
  }
4092
4426
  ) });
4093
4427
  });
4094
4428
  SelectContent.displayName = SelectPrimitive.Content.displayName;
4095
- var SelectLabel = React25.forwardRef(function SelectLabel2({ className, ...props }, ref) {
4096
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4429
+ var SelectLabel = React27.forwardRef(function SelectLabel2({ className, ...props }, ref) {
4430
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4097
4431
  SelectPrimitive.Label,
4098
4432
  {
4099
4433
  ref,
@@ -4115,8 +4449,8 @@ var SelectLabel = React25.forwardRef(function SelectLabel2({ className, ...props
4115
4449
  );
4116
4450
  });
4117
4451
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
4118
- var SelectItem = React25.forwardRef(function SelectItem2({ className, children, ...props }, ref) {
4119
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
4452
+ var SelectItem = React27.forwardRef(function SelectItem2({ className, children, ...props }, ref) {
4453
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4120
4454
  SelectPrimitive.Item,
4121
4455
  {
4122
4456
  ref,
@@ -4127,20 +4461,20 @@ var SelectItem = React25.forwardRef(function SelectItem2({ className, children,
4127
4461
  ),
4128
4462
  ...props,
4129
4463
  children: [
4130
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectPrimitive.ItemText, { className: "truncate", children: renderTextContent(children, {
4464
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectPrimitive.ItemText, { className: "truncate", children: renderTextContent(children, {
4131
4465
  as: "span",
4132
4466
  className: "block truncate text-[color:var(--sofya-text-default)]",
4133
4467
  size: "body",
4134
4468
  style: inheritedTypographyStyle
4135
4469
  }) }),
4136
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectPrimitive.ItemIndicator, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "absolute right-4 inline-flex h-4 w-4 items-center justify-center text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "check", size: 14 }) }) })
4470
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectPrimitive.ItemIndicator, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "absolute right-4 inline-flex h-4 w-4 items-center justify-center text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { name: "check", size: 14 }) }) })
4137
4471
  ]
4138
4472
  }
4139
4473
  );
4140
4474
  });
4141
4475
  SelectItem.displayName = SelectPrimitive.Item.displayName;
4142
- var SelectSeparator = React25.forwardRef(function SelectSeparator2({ className, ...props }, ref) {
4143
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4476
+ var SelectSeparator = React27.forwardRef(function SelectSeparator2({ className, ...props }, ref) {
4477
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4144
4478
  SelectPrimitive.Separator,
4145
4479
  {
4146
4480
  ref,
@@ -4153,11 +4487,11 @@ var SelectSeparator = React25.forwardRef(function SelectSeparator2({ className,
4153
4487
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
4154
4488
 
4155
4489
  // src/components/separator.tsx
4156
- var React26 = __toESM(require("react"), 1);
4490
+ var React28 = __toESM(require("react"), 1);
4157
4491
  var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"), 1);
4158
- var import_jsx_runtime28 = require("react/jsx-runtime");
4159
- var Separator2 = React26.forwardRef(function Separator3({ className, decorative = true, orientation = "horizontal", ...props }, ref) {
4160
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4492
+ var import_jsx_runtime30 = require("react/jsx-runtime");
4493
+ var Separator2 = React28.forwardRef(function Separator3({ className, decorative = true, orientation = "horizontal", ...props }, ref) {
4494
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4161
4495
  SeparatorPrimitive.Root,
4162
4496
  {
4163
4497
  ref,
@@ -4176,8 +4510,8 @@ var Separator2 = React26.forwardRef(function Separator3({ className, decorative
4176
4510
  Separator2.displayName = SeparatorPrimitive.Root.displayName;
4177
4511
 
4178
4512
  // src/components/slider.tsx
4179
- var React27 = __toESM(require("react"), 1);
4180
- var import_jsx_runtime29 = require("react/jsx-runtime");
4513
+ var React29 = __toESM(require("react"), 1);
4514
+ var import_jsx_runtime31 = require("react/jsx-runtime");
4181
4515
  function clampSliderValue(value, min, max) {
4182
4516
  if (Number.isNaN(value)) {
4183
4517
  return min;
@@ -4202,7 +4536,7 @@ function resolveSliderMeasurement(value, fallback) {
4202
4536
  function isTextValue(value) {
4203
4537
  return typeof value === "string" || typeof value === "number";
4204
4538
  }
4205
- var Slider = React27.forwardRef(function Slider2({
4539
+ var Slider = React29.forwardRef(function Slider2({
4206
4540
  className,
4207
4541
  defaultValue,
4208
4542
  formatValue,
@@ -4225,7 +4559,7 @@ var Slider = React27.forwardRef(function Slider2({
4225
4559
  valueClassName,
4226
4560
  ...props
4227
4561
  }, ref) {
4228
- const resolvedId = React27.useId();
4562
+ const resolvedId = React29.useId();
4229
4563
  const inputId = id ?? resolvedId;
4230
4564
  const safeMin = min;
4231
4565
  const safeMax = resolveSliderMax(safeMin, max);
@@ -4234,7 +4568,7 @@ var Slider = React27.forwardRef(function Slider2({
4234
4568
  onChange: onValueChange,
4235
4569
  value
4236
4570
  });
4237
- React27.useEffect(() => {
4571
+ React29.useEffect(() => {
4238
4572
  if (value !== void 0) {
4239
4573
  return;
4240
4574
  }
@@ -4281,14 +4615,14 @@ var Slider = React27.forwardRef(function Slider2({
4281
4615
  setControllableValue(nextValue);
4282
4616
  onChange?.(event);
4283
4617
  };
4284
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4618
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4285
4619
  "div",
4286
4620
  {
4287
4621
  "data-slot": "slider",
4288
4622
  className: cn("grid w-full gap-2", className),
4289
4623
  children: [
4290
- label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center justify-between gap-4", children: [
4291
- label ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4624
+ label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center justify-between gap-4", children: [
4625
+ label ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4292
4626
  FieldLabel,
4293
4627
  {
4294
4628
  htmlFor: inputId,
@@ -4299,8 +4633,8 @@ var Slider = React27.forwardRef(function Slider2({
4299
4633
  textClassName: "block min-w-0 text-[color:var(--sofya-text-default)]",
4300
4634
  children: label
4301
4635
  }
4302
- ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", {}),
4303
- showValue ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4636
+ ) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", {}),
4637
+ showValue ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4304
4638
  "div",
4305
4639
  {
4306
4640
  className: cn(
@@ -4318,7 +4652,7 @@ var Slider = React27.forwardRef(function Slider2({
4318
4652
  }
4319
4653
  ) : null
4320
4654
  ] }) : null,
4321
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4655
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4322
4656
  "div",
4323
4657
  {
4324
4658
  "data-slot": "slider-control",
@@ -4328,7 +4662,7 @@ var Slider = React27.forwardRef(function Slider2({
4328
4662
  ),
4329
4663
  style: controlStyle,
4330
4664
  children: [
4331
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4665
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4332
4666
  "input",
4333
4667
  {
4334
4668
  ...props,
@@ -4345,7 +4679,7 @@ var Slider = React27.forwardRef(function Slider2({
4345
4679
  style: inputBoundsStyle
4346
4680
  }
4347
4681
  ),
4348
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4682
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4349
4683
  "div",
4350
4684
  {
4351
4685
  "data-slot": "slider-track",
@@ -4356,7 +4690,7 @@ var Slider = React27.forwardRef(function Slider2({
4356
4690
  style: trackBoundsStyle
4357
4691
  }
4358
4692
  ),
4359
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4693
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4360
4694
  "div",
4361
4695
  {
4362
4696
  "data-slot": "slider-range",
@@ -4367,7 +4701,7 @@ var Slider = React27.forwardRef(function Slider2({
4367
4701
  style: rangeStyle
4368
4702
  }
4369
4703
  ),
4370
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4704
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4371
4705
  "div",
4372
4706
  {
4373
4707
  "data-slot": "slider-thumb",
@@ -4388,10 +4722,10 @@ var Slider = React27.forwardRef(function Slider2({
4388
4722
  Slider.displayName = "Slider";
4389
4723
 
4390
4724
  // src/components/skeleton.tsx
4391
- var React28 = __toESM(require("react"), 1);
4392
- var import_jsx_runtime30 = require("react/jsx-runtime");
4393
- var Skeleton = React28.forwardRef(function Skeleton2({ className, ...props }, ref) {
4394
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4725
+ var React30 = __toESM(require("react"), 1);
4726
+ var import_jsx_runtime32 = require("react/jsx-runtime");
4727
+ var Skeleton = React30.forwardRef(function Skeleton2({ className, ...props }, ref) {
4728
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4395
4729
  "div",
4396
4730
  {
4397
4731
  ref,
@@ -4406,15 +4740,15 @@ var Skeleton = React28.forwardRef(function Skeleton2({ className, ...props }, re
4406
4740
  Skeleton.displayName = "Skeleton";
4407
4741
 
4408
4742
  // src/components/sonner.tsx
4409
- var React29 = __toESM(require("react"), 1);
4743
+ var React31 = __toESM(require("react"), 1);
4410
4744
  var import_sonner = require("sonner");
4411
- var import_jsx_runtime31 = require("react/jsx-runtime");
4745
+ var import_jsx_runtime33 = require("react/jsx-runtime");
4412
4746
  var notificationVariantOptions = ["default", "success", "error", "warning"];
4413
4747
  function ToastStatusIcon({
4414
4748
  iconName,
4415
4749
  className
4416
4750
  }) {
4417
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4751
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4418
4752
  "span",
4419
4753
  {
4420
4754
  "aria-hidden": "true",
@@ -4422,7 +4756,7 @@ function ToastStatusIcon({
4422
4756
  "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full border shadow-sofya-sm",
4423
4757
  className
4424
4758
  ),
4425
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { name: iconName, size: 16 })
4759
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { name: iconName, size: 16 })
4426
4760
  }
4427
4761
  );
4428
4762
  }
@@ -4443,35 +4777,35 @@ var defaultToastClassNames = {
4443
4777
  loading: "border-border bg-card text-foreground"
4444
4778
  };
4445
4779
  var defaultToastIcons = {
4446
- success: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4780
+ success: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4447
4781
  ToastStatusIcon,
4448
4782
  {
4449
4783
  iconName: "check",
4450
4784
  className: "border-success/15 bg-success/12 text-success"
4451
4785
  }
4452
4786
  ),
4453
- error: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4787
+ error: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4454
4788
  ToastStatusIcon,
4455
4789
  {
4456
4790
  iconName: "x",
4457
4791
  className: "border-destructive/15 bg-destructive/12 text-destructive"
4458
4792
  }
4459
4793
  ),
4460
- warning: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4794
+ warning: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4461
4795
  ToastStatusIcon,
4462
4796
  {
4463
4797
  iconName: "question",
4464
4798
  className: "border-warning/20 bg-warning/15 text-foreground"
4465
4799
  }
4466
4800
  ),
4467
- info: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4801
+ info: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4468
4802
  ToastStatusIcon,
4469
4803
  {
4470
4804
  iconName: "question",
4471
4805
  className: "border-primary/15 bg-primary/10 text-primary"
4472
4806
  }
4473
4807
  ),
4474
- close: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { name: "x", size: 12 })
4808
+ close: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { name: "x", size: 12 })
4475
4809
  };
4476
4810
  function mergeToastClassNames(overrides) {
4477
4811
  return {
@@ -4479,7 +4813,7 @@ function mergeToastClassNames(overrides) {
4479
4813
  ...overrides
4480
4814
  };
4481
4815
  }
4482
- var Toaster = React29.forwardRef(
4816
+ var Toaster = React31.forwardRef(
4483
4817
  function Toaster2({
4484
4818
  className,
4485
4819
  closeButton = true,
@@ -4491,7 +4825,7 @@ var Toaster = React29.forwardRef(
4491
4825
  visibleToasts = 5,
4492
4826
  ...props
4493
4827
  }, ref) {
4494
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4828
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4495
4829
  import_sonner.Toaster,
4496
4830
  {
4497
4831
  ref,
@@ -4520,43 +4854,10 @@ var Toaster = React29.forwardRef(
4520
4854
  );
4521
4855
  Toaster.displayName = "Toaster";
4522
4856
 
4523
- // src/components/spinner.tsx
4524
- var React30 = __toESM(require("react"), 1);
4525
- var import_icons_react6 = require("@tabler/icons-react");
4526
- var import_jsx_runtime32 = require("react/jsx-runtime");
4527
- var spinnerSizeOptions = ["sm", "default", "lg"];
4528
- var Spinner = React30.forwardRef(function Spinner2({
4529
- "aria-label": ariaLabelProp,
4530
- "aria-labelledby": ariaLabelledby,
4531
- className,
4532
- role = "status",
4533
- size = "default",
4534
- ...props
4535
- }, ref) {
4536
- const ariaLabel = ariaLabelProp ?? (ariaLabelledby ? void 0 : "Loading");
4537
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4538
- import_icons_react6.IconLoader2,
4539
- {
4540
- ref,
4541
- "data-size": size,
4542
- "data-slot": "spinner",
4543
- role,
4544
- "aria-label": ariaLabel,
4545
- "aria-labelledby": ariaLabelledby,
4546
- className: cn(
4547
- "shrink-0 animate-spin text-primary data-[size=sm]:h-3.5 data-[size=sm]:w-3.5 data-[size=default]:h-4 data-[size=default]:w-4 data-[size=lg]:h-6 data-[size=lg]:w-6",
4548
- className
4549
- ),
4550
- ...props
4551
- }
4552
- );
4553
- });
4554
- Spinner.displayName = "Spinner";
4555
-
4556
4857
  // src/components/switch.tsx
4557
- var React31 = __toESM(require("react"), 1);
4858
+ var React32 = __toESM(require("react"), 1);
4558
4859
  var SwitchPrimitives = __toESM(require("@radix-ui/react-switch"), 1);
4559
- var import_jsx_runtime33 = require("react/jsx-runtime");
4860
+ var import_jsx_runtime34 = require("react/jsx-runtime");
4560
4861
  var switchSizeOptions = ["default", "sm"];
4561
4862
  var switchRootSizeClasses = {
4562
4863
  default: "h-6 w-11",
@@ -4566,7 +4867,7 @@ var switchThumbSizeClasses = {
4566
4867
  default: "h-5 w-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
4567
4868
  sm: "h-4 w-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
4568
4869
  };
4569
- var Switch = React31.forwardRef(
4870
+ var Switch = React32.forwardRef(
4570
4871
  ({
4571
4872
  "aria-describedby": ariaDescribedBy,
4572
4873
  "aria-labelledby": ariaLabelledBy,
@@ -4581,7 +4882,7 @@ var Switch = React31.forwardRef(
4581
4882
  size,
4582
4883
  ...props
4583
4884
  }, ref) => {
4584
- const generatedId = React31.useId();
4885
+ const generatedId = React32.useId();
4585
4886
  const resolvedId = id ?? generatedId;
4586
4887
  const labelId = label ? `${resolvedId}-label` : void 0;
4587
4888
  const descriptionId = description ? `${resolvedId}-description` : void 0;
@@ -4590,7 +4891,7 @@ var Switch = React31.forwardRef(
4590
4891
  const alignClassName = description ? "items-start" : "items-center";
4591
4892
  const resolvedAriaDescribedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" ") || void 0;
4592
4893
  const resolvedAriaLabelledBy = ariaLabelledBy ?? labelId;
4593
- const switchControl = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4894
+ const switchControl = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4594
4895
  SwitchPrimitives.Root,
4595
4896
  {
4596
4897
  id: resolvedId,
@@ -4605,7 +4906,7 @@ var Switch = React31.forwardRef(
4605
4906
  "data-size": resolvedSize,
4606
4907
  ...props,
4607
4908
  ref,
4608
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4909
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4609
4910
  SwitchPrimitives.Thumb,
4610
4911
  {
4611
4912
  className: cn(
@@ -4619,7 +4920,7 @@ var Switch = React31.forwardRef(
4619
4920
  if (!hasTextContent) {
4620
4921
  return switchControl;
4621
4922
  }
4622
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
4923
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
4623
4924
  "div",
4624
4925
  {
4625
4926
  "data-slot": "switch-container",
@@ -4630,8 +4931,8 @@ var Switch = React31.forwardRef(
4630
4931
  }),
4631
4932
  children: [
4632
4933
  switchControl,
4633
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: selectionControlContentBaseClasses, children: [
4634
- label ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: resolvedId, className: selectionControlLabelTextBaseClasses, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4934
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: selectionControlContentBaseClasses, children: [
4935
+ label ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: resolvedId, className: selectionControlLabelTextBaseClasses, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4635
4936
  "span",
4636
4937
  {
4637
4938
  id: labelId,
@@ -4646,7 +4947,7 @@ var Switch = React31.forwardRef(
4646
4947
  })
4647
4948
  }
4648
4949
  ) }) : null,
4649
- description ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4950
+ description ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4650
4951
  "span",
4651
4952
  {
4652
4953
  id: descriptionId,
@@ -4671,8 +4972,8 @@ Switch.displayName = SwitchPrimitives.Root.displayName;
4671
4972
 
4672
4973
  // src/components/table.tsx
4673
4974
  var import_class_variance_authority8 = require("class-variance-authority");
4674
- var React32 = __toESM(require("react"), 1);
4675
- var import_jsx_runtime34 = require("react/jsx-runtime");
4975
+ var React33 = __toESM(require("react"), 1);
4976
+ var import_jsx_runtime35 = require("react/jsx-runtime");
4676
4977
  var tableCellVariantOptions = ["default", "primary", "muted"];
4677
4978
  var tableStatusToneOptions = [
4678
4979
  "active",
@@ -4722,13 +5023,13 @@ var tableActionButtonVariants = (0, import_class_variance_authority8.cva)(
4722
5023
  }
4723
5024
  }
4724
5025
  );
4725
- var Table = React32.forwardRef(function Table2({ className, ...props }, ref) {
4726
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5026
+ var Table = React33.forwardRef(function Table2({ className, ...props }, ref) {
5027
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4727
5028
  "div",
4728
5029
  {
4729
5030
  "data-slot": "table-container",
4730
5031
  className: "relative w-full overflow-x-auto",
4731
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5032
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4732
5033
  "table",
4733
5034
  {
4734
5035
  "data-slot": "table",
@@ -4743,8 +5044,8 @@ var Table = React32.forwardRef(function Table2({ className, ...props }, ref) {
4743
5044
  }
4744
5045
  );
4745
5046
  });
4746
- var TableHeader = React32.forwardRef(function TableHeader2({ className, ...props }, ref) {
4747
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5047
+ var TableHeader = React33.forwardRef(function TableHeader2({ className, ...props }, ref) {
5048
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4748
5049
  "thead",
4749
5050
  {
4750
5051
  "data-slot": "table-header",
@@ -4757,8 +5058,8 @@ var TableHeader = React32.forwardRef(function TableHeader2({ className, ...props
4757
5058
  }
4758
5059
  );
4759
5060
  });
4760
- var TableBody = React32.forwardRef(function TableBody2({ className, ...props }, ref) {
4761
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5061
+ var TableBody = React33.forwardRef(function TableBody2({ className, ...props }, ref) {
5062
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4762
5063
  "tbody",
4763
5064
  {
4764
5065
  "data-slot": "table-body",
@@ -4768,8 +5069,8 @@ var TableBody = React32.forwardRef(function TableBody2({ className, ...props },
4768
5069
  }
4769
5070
  );
4770
5071
  });
4771
- var TableFooter = React32.forwardRef(function TableFooter2({ className, ...props }, ref) {
4772
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5072
+ var TableFooter = React33.forwardRef(function TableFooter2({ className, ...props }, ref) {
5073
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4773
5074
  "tfoot",
4774
5075
  {
4775
5076
  "data-slot": "table-footer",
@@ -4782,8 +5083,8 @@ var TableFooter = React32.forwardRef(function TableFooter2({ className, ...props
4782
5083
  }
4783
5084
  );
4784
5085
  });
4785
- var TableRow = React32.forwardRef(function TableRow2({ className, ...props }, ref) {
4786
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5086
+ var TableRow = React33.forwardRef(function TableRow2({ className, ...props }, ref) {
5087
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4787
5088
  "tr",
4788
5089
  {
4789
5090
  "data-slot": "table-row",
@@ -4796,8 +5097,8 @@ var TableRow = React32.forwardRef(function TableRow2({ className, ...props }, re
4796
5097
  }
4797
5098
  );
4798
5099
  });
4799
- var TableHead = React32.forwardRef(function TableHead2({ className, children, ...props }, ref) {
4800
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5100
+ var TableHead = React33.forwardRef(function TableHead2({ className, children, ...props }, ref) {
5101
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4801
5102
  "th",
4802
5103
  {
4803
5104
  "data-slot": "table-head",
@@ -4816,9 +5117,9 @@ var TableHead = React32.forwardRef(function TableHead2({ className, children, ..
4816
5117
  }
4817
5118
  );
4818
5119
  });
4819
- var TableCell = React32.forwardRef(
5120
+ var TableCell = React33.forwardRef(
4820
5121
  function TableCell2({ className, variant, children, ...props }, ref) {
4821
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5122
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4822
5123
  "td",
4823
5124
  {
4824
5125
  "data-slot": "table-cell",
@@ -4835,8 +5136,8 @@ var TableCell = React32.forwardRef(
4835
5136
  );
4836
5137
  }
4837
5138
  );
4838
- var TableCaption = React32.forwardRef(function TableCaption2({ className, children, ...props }, ref) {
4839
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5139
+ var TableCaption = React33.forwardRef(function TableCaption2({ className, children, ...props }, ref) {
5140
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4840
5141
  "caption",
4841
5142
  {
4842
5143
  "data-slot": "table-caption",
@@ -4861,7 +5162,7 @@ function TableStatusBadge({
4861
5162
  children,
4862
5163
  ...props
4863
5164
  }) {
4864
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5165
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4865
5166
  Badge,
4866
5167
  {
4867
5168
  variant: "pill",
@@ -4876,8 +5177,8 @@ function TableStatusBadge({
4876
5177
  }
4877
5178
  );
4878
5179
  }
4879
- var TableActionButton = React32.forwardRef(function TableActionButton2({ className, tone, type = "button", children, ...props }, ref) {
4880
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5180
+ var TableActionButton = React33.forwardRef(function TableActionButton2({ className, tone, type = "button", children, ...props }, ref) {
5181
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4881
5182
  Button,
4882
5183
  {
4883
5184
  ref,
@@ -4895,8 +5196,8 @@ var TableActionButton = React32.forwardRef(function TableActionButton2({ classNa
4895
5196
  }
4896
5197
  );
4897
5198
  });
4898
- var TableActions = React32.forwardRef(function TableActions2({ className, ...props }, ref) {
4899
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5199
+ var TableActions = React33.forwardRef(function TableActions2({ className, ...props }, ref) {
5200
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4900
5201
  "div",
4901
5202
  {
4902
5203
  ref,
@@ -4917,10 +5218,10 @@ TableActionButton.displayName = "TableActionButton";
4917
5218
  TableActions.displayName = "TableActions";
4918
5219
 
4919
5220
  // src/components/tabs.tsx
4920
- var React33 = __toESM(require("react"), 1);
5221
+ var React34 = __toESM(require("react"), 1);
4921
5222
  var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"), 1);
4922
5223
  var import_react3 = require("motion/react");
4923
- var import_jsx_runtime35 = require("react/jsx-runtime");
5224
+ var import_jsx_runtime36 = require("react/jsx-runtime");
4924
5225
  function resolveDefaultValue(items, defaultValue) {
4925
5226
  if (defaultValue) {
4926
5227
  return defaultValue;
@@ -4944,13 +5245,13 @@ function Tabs({
4944
5245
  onChange: onValueChange,
4945
5246
  value
4946
5247
  });
4947
- const indicatorLayoutId = React33.useId();
4948
- React33.useEffect(() => {
5248
+ const indicatorLayoutId = React34.useId();
5249
+ React34.useEffect(() => {
4949
5250
  if (value === void 0) {
4950
5251
  setUncontrolledCurrentValue(resolvedDefaultValue);
4951
5252
  }
4952
5253
  }, [resolvedDefaultValue, setUncontrolledCurrentValue, value]);
4953
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
5254
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
4954
5255
  TabsPrimitive.Root,
4955
5256
  {
4956
5257
  className: cn("w-full", className),
@@ -4958,7 +5259,7 @@ function Tabs({
4958
5259
  value: currentValue,
4959
5260
  ...props,
4960
5261
  children: [
4961
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5262
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4962
5263
  TabsPrimitive.List,
4963
5264
  {
4964
5265
  "aria-label": "Subtelas navegaveis",
@@ -4969,7 +5270,7 @@ function Tabs({
4969
5270
  children: items.map((item) => {
4970
5271
  const isUnavailable = item.disabled || item.loading;
4971
5272
  const isActive = item.value === currentValue;
4972
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
5273
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
4973
5274
  TabsPrimitive.Trigger,
4974
5275
  {
4975
5276
  value: item.value,
@@ -4981,7 +5282,7 @@ function Tabs({
4981
5282
  item.triggerClassName
4982
5283
  ),
4983
5284
  children: [
4984
- isActive ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5285
+ isActive ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4985
5286
  import_react3.motion.span,
4986
5287
  {
4987
5288
  "aria-hidden": "true",
@@ -4991,15 +5292,15 @@ function Tabs({
4991
5292
  transition: { duration: 0.25, ease: "easeInOut" }
4992
5293
  }
4993
5294
  ) : null,
4994
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "relative z-10 inline-flex items-center gap-2", children: [
4995
- item.loading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5295
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "relative z-10 inline-flex items-center gap-2", children: [
5296
+ item.loading ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4996
5297
  "span",
4997
5298
  {
4998
5299
  "aria-hidden": "true",
4999
5300
  className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-r-transparent"
5000
5301
  }
5001
5302
  ) : null,
5002
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: renderTextContent(item.label, {
5303
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: renderTextContent(item.label, {
5003
5304
  as: "span",
5004
5305
  className: "block text-inherit",
5005
5306
  size: "h5"
@@ -5013,7 +5314,7 @@ function Tabs({
5013
5314
  }
5014
5315
  ),
5015
5316
  items.map(
5016
- (item) => item.content !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5317
+ (item) => item.content !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5017
5318
  TabsPrimitive.Content,
5018
5319
  {
5019
5320
  value: item.value,
@@ -5036,9 +5337,9 @@ function Tabs({
5036
5337
  Tabs.displayName = "Tabs";
5037
5338
 
5038
5339
  // src/components/textarea.tsx
5039
- var React34 = __toESM(require("react"), 1);
5040
- var import_jsx_runtime36 = require("react/jsx-runtime");
5041
- var Textarea = React34.forwardRef(
5340
+ var React35 = __toESM(require("react"), 1);
5341
+ var import_jsx_runtime37 = require("react/jsx-runtime");
5342
+ var Textarea = React35.forwardRef(
5042
5343
  ({
5043
5344
  className,
5044
5345
  containerClassName,
@@ -5048,10 +5349,10 @@ var Textarea = React34.forwardRef(
5048
5349
  rows = 5,
5049
5350
  ...props
5050
5351
  }, ref) => {
5051
- const generatedId = React34.useId();
5352
+ const generatedId = React35.useId();
5052
5353
  const resolvedId = id ?? generatedId;
5053
5354
  const ariaLabel = props["aria-label"] ?? (typeof label === "string" ? label : void 0);
5054
- const control = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5355
+ const control = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5055
5356
  "textarea",
5056
5357
  {
5057
5358
  className: cn(
@@ -5065,7 +5366,7 @@ var Textarea = React34.forwardRef(
5065
5366
  "aria-label": ariaLabel
5066
5367
  }
5067
5368
  );
5068
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5369
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5069
5370
  FieldShell,
5070
5371
  {
5071
5372
  control,
@@ -5080,14 +5381,14 @@ var Textarea = React34.forwardRef(
5080
5381
  Textarea.displayName = "Textarea";
5081
5382
 
5082
5383
  // src/components/tooltip.tsx
5083
- var React35 = __toESM(require("react"), 1);
5384
+ var React36 = __toESM(require("react"), 1);
5084
5385
  var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"), 1);
5085
- var import_jsx_runtime37 = require("react/jsx-runtime");
5386
+ var import_jsx_runtime38 = require("react/jsx-runtime");
5086
5387
  var TooltipProvider = TooltipPrimitive.Provider;
5087
5388
  var Tooltip = TooltipPrimitive.Root;
5088
5389
  var TooltipTrigger = TooltipPrimitive.Trigger;
5089
- var TooltipContent = React35.forwardRef(function TooltipContent2({ className, sideOffset = 8, ...props }, ref) {
5090
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5390
+ var TooltipContent = React36.forwardRef(function TooltipContent2({ className, sideOffset = 8, ...props }, ref) {
5391
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5091
5392
  TooltipPrimitive.Content,
5092
5393
  {
5093
5394
  ref,
@@ -5111,9 +5412,9 @@ var TooltipContent = React35.forwardRef(function TooltipContent2({ className, si
5111
5412
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
5112
5413
 
5113
5414
  // src/theme/provider.tsx
5114
- var React36 = __toESM(require("react"), 1);
5415
+ var React37 = __toESM(require("react"), 1);
5115
5416
  var import_tokens = require("@sofya-ds/tokens");
5116
- var import_jsx_runtime38 = require("react/jsx-runtime");
5417
+ var import_jsx_runtime39 = require("react/jsx-runtime");
5117
5418
  var SOFYA_FONT_LINKS = [
5118
5419
  {
5119
5420
  id: "preconnect-googleapis",
@@ -5133,7 +5434,7 @@ var SOFYA_FONT_LINKS = [
5133
5434
  }
5134
5435
  ];
5135
5436
  function useSofyaFontLinks() {
5136
- React36.useEffect(() => {
5437
+ React37.useEffect(() => {
5137
5438
  if (typeof document === "undefined") {
5138
5439
  return;
5139
5440
  }
@@ -5166,7 +5467,7 @@ function SofyaProvider({
5166
5467
  useSofyaFontLinks();
5167
5468
  const theme = (0, import_tokens.createWhitelabelTheme)(overrides ?? {}, preset);
5168
5469
  const cssVariables = (0, import_tokens.themeToCssVariables)(theme);
5169
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5470
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5170
5471
  "div",
5171
5472
  {
5172
5473
  "data-sofya-theme": theme.name,
@@ -5212,6 +5513,7 @@ var import_tokens2 = require("@sofya-ds/tokens");
5212
5513
  DialogTitle,
5213
5514
  DialogTrigger,
5214
5515
  Dropdown,
5516
+ DropdownSearch,
5215
5517
  Empty,
5216
5518
  EmptyContent,
5217
5519
  EmptyDescription,