@sofya-ds/react 1.3.6 → 1.3.8

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.js CHANGED
@@ -612,7 +612,7 @@ var accordionItemClasses = {
612
612
  card: "group/accordion-item bg-transparent text-foreground"
613
613
  };
614
614
  var accordionTriggerClasses = {
615
- default: "sofya-accordion-trigger flex flex-1 items-center justify-between gap-4 py-4 text-left [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-foreground transition-colors duration-sofya ease-sofya focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",
615
+ default: "sofya-accordion-trigger flex flex-1 items-center justify-between gap-4 py-4 text-left [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] font-medium leading-[var(--sofya-text-tiny-line-height)] tracking-[var(--sofya-text-tiny-letter-spacing)] text-foreground transition-colors duration-sofya ease-sofya focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",
616
616
  card: "sofya-accordion-trigger flex w-full items-center justify-between gap-4 rounded-[16px] border border-secondary bg-[color:var(--sofya-background)] px-6 py-4 text-left text-foreground transition-[background-color,border-color,box-shadow,color] duration-sofya ease-sofya hover:border-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--sofya-focus-ring-soft)] focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50"
617
617
  };
618
618
  var accordionContentClasses = {
@@ -690,7 +690,7 @@ var AccordionTrigger = React4.forwardRef(
690
690
  renderTextContent(children, {
691
691
  as: "span",
692
692
  className: "block min-w-0 text-foreground",
693
- size: appearance === "card" ? "h5" : "body",
693
+ size: appearance === "card" ? "body" : "tiny",
694
694
  style: appearance === "card" ? void 0 : {
695
695
  color: "inherit",
696
696
  fontFamily: "inherit",
@@ -703,7 +703,7 @@ var AccordionTrigger = React4.forwardRef(
703
703
  hasDescription ? renderTextContent(description, {
704
704
  as: "span",
705
705
  className: "block min-w-0 text-muted-foreground",
706
- size: "body"
706
+ size: "tiny"
707
707
  }) : null
708
708
  ]
709
709
  }
@@ -746,7 +746,8 @@ var AccordionContent = React4.forwardRef(({ className, children, contentClassNam
746
746
  contentClassName
747
747
  ),
748
748
  children: renderTextContent(children, {
749
- className: appearance === "card" ? "text-foreground" : "text-muted-foreground"
749
+ className: appearance === "card" ? "text-foreground" : "text-muted-foreground",
750
+ size: "tiny"
750
751
  })
751
752
  }
752
753
  )
@@ -862,7 +863,7 @@ var AlertDescription = React5.forwardRef(function AlertDescription2({ children,
862
863
  children: renderTextContent(children, {
863
864
  as: "span",
864
865
  className: "block text-current/80",
865
- size: "body"
866
+ size: "tiny"
866
867
  })
867
868
  }
868
869
  );
@@ -886,7 +887,7 @@ var badgeVariantOptions = [
886
887
  var badgeAlertOptions = ["default", "medium", "high"];
887
888
  var badgePillToneOptions = ["neutral", "danger"];
888
889
  var badgeVariants = cva3(
889
- "inline-flex min-h-[34px] items-center justify-center whitespace-nowrap rounded-[5px] px-4 py-2 text-[14px] font-semibold uppercase leading-none tracking-[0.08em] transition-colors duration-sofya ease-sofya",
890
+ "inline-flex min-h-[34px] items-center justify-center whitespace-nowrap rounded-[5px] px-4 py-2 [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] font-semibold uppercase leading-none tracking-[0.08em] transition-colors duration-sofya ease-sofya",
890
891
  {
891
892
  variants: {
892
893
  variant: {
@@ -905,7 +906,7 @@ var badgeVariants = cva3(
905
906
  }
906
907
  );
907
908
  var badgeAlertVariants = cva3(
908
- "inline-flex min-h-[34px] items-center justify-center whitespace-nowrap rounded-[5px] px-4 py-2 text-[14px] font-semibold uppercase leading-none tracking-[0.08em] transition-colors duration-sofya ease-sofya",
909
+ "inline-flex min-h-[34px] items-center justify-center whitespace-nowrap rounded-[5px] px-4 py-2 [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] font-semibold uppercase leading-none tracking-[0.08em] transition-colors duration-sofya ease-sofya",
909
910
  {
910
911
  variants: {
911
912
  alert: {
@@ -920,7 +921,7 @@ var badgeAlertVariants = cva3(
920
921
  }
921
922
  );
922
923
  var badgePillVariants = cva3(
923
- "inline-flex h-[30px] items-center justify-center whitespace-nowrap rounded-full border px-4 py-2 text-[12px] font-semibold leading-none tracking-normal transition-colors duration-sofya ease-sofya",
924
+ "inline-flex h-[30px] items-center justify-center whitespace-nowrap rounded-full border px-4 py-2 [font-family:var(--sofya-text-extra-tiny-font-family)] text-[length:var(--sofya-text-extra-tiny-font-size)] font-semibold leading-none tracking-normal transition-colors duration-sofya ease-sofya",
924
925
  {
925
926
  variants: {
926
927
  tone: {
@@ -1734,7 +1735,7 @@ var Checkbox = React10.forwardRef(
1734
1735
  children: renderTextContent(label, {
1735
1736
  as: "span",
1736
1737
  className: "text-[color:var(--sofya-text-default)]",
1737
- size: "body"
1738
+ size: "tiny"
1738
1739
  })
1739
1740
  }
1740
1741
  ) : null,
@@ -1749,7 +1750,7 @@ var Checkbox = React10.forwardRef(
1749
1750
  children: renderTextContent(description, {
1750
1751
  as: "span",
1751
1752
  className: "text-muted-foreground",
1752
- size: "body"
1753
+ size: "tiny"
1753
1754
  })
1754
1755
  }
1755
1756
  ) : null
@@ -1792,7 +1793,8 @@ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
1792
1793
  var dropdownVariantOptions = [
1793
1794
  "card",
1794
1795
  "language",
1795
- "selected"
1796
+ "selected",
1797
+ "action"
1796
1798
  ];
1797
1799
  var dropdownAppearanceOptions = ["card"];
1798
1800
  var dropdownTriggerSizeOptions = ["default", "sm", "lg"];
@@ -1804,7 +1806,8 @@ var dropdownLanguageItems = [
1804
1806
  var dropdownTriggerToneClasses = {
1805
1807
  card: "text-primary",
1806
1808
  language: "",
1807
- 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)]"
1809
+ selected: "w-full border-[color:var(--sofya-border-strong)] [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[var(--sofya-text-tiny-line-height)] tracking-[var(--sofya-text-tiny-letter-spacing)]",
1810
+ action: ""
1808
1811
  };
1809
1812
  var dropdownTriggerSizeClasses = {
1810
1813
  regular: {
@@ -1821,6 +1824,11 @@ var dropdownTriggerSizeClasses = {
1821
1824
  default: "h-5 w-5 p-0",
1822
1825
  sm: "h-[18px] w-[18px] p-0",
1823
1826
  lg: "h-6 w-6 p-0"
1827
+ },
1828
+ action: {
1829
+ default: "h-10 w-10 p-0",
1830
+ sm: "h-8 w-8 p-0",
1831
+ lg: "h-12 w-12 p-0"
1824
1832
  }
1825
1833
  };
1826
1834
  var dropdownAppearanceClasses = {
@@ -1832,12 +1840,14 @@ var dropdownAppearanceClasses = {
1832
1840
  var dropdownContentBaseClasses = {
1833
1841
  card: "border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]",
1834
1842
  language: "w-[224px] min-w-[224px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]",
1835
- 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)]"
1843
+ 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)]",
1844
+ action: "w-[224px] min-w-[224px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]"
1836
1845
  };
1837
1846
  var dropdownItemClasses = {
1838
1847
  card: "text-foreground",
1839
1848
  language: "text-foreground",
1840
- selected: "text-foreground"
1849
+ selected: "text-foreground",
1850
+ action: "text-foreground"
1841
1851
  };
1842
1852
  function isButtonLanguageLocale(value) {
1843
1853
  return buttonLanguageLocaleOptions.includes(value);
@@ -1863,6 +1873,9 @@ function resolveDropdownTriggerSizeFamily(variant) {
1863
1873
  if (variant === "selected") {
1864
1874
  return "selected";
1865
1875
  }
1876
+ if (variant === "action") {
1877
+ return "action";
1878
+ }
1866
1879
  return "regular";
1867
1880
  }
1868
1881
  function DefaultDropdownTriggerIcon({ variant }) {
@@ -1901,6 +1914,7 @@ function Dropdown({
1901
1914
  defaultOpen,
1902
1915
  defaultValue,
1903
1916
  disabled = false,
1917
+ iconTrigger,
1904
1918
  items,
1905
1919
  itemClassName,
1906
1920
  modal,
@@ -1917,9 +1931,10 @@ function Dropdown({
1917
1931
  }) {
1918
1932
  const isLanguageVariant = variant === "language";
1919
1933
  const isSelectedVariant = variant === "selected";
1934
+ const isActionVariant = variant === "action";
1920
1935
  const resolvedAppearance = resolveDropdownAppearance({ appearance, variant });
1921
1936
  const triggerSizeFamily = resolveDropdownTriggerSizeFamily(variant);
1922
- const usesDefaultListStyle = !isLanguageVariant;
1937
+ const usesDefaultListStyle = !isLanguageVariant && !isActionVariant;
1923
1938
  const resolvedItems = React12.useMemo(
1924
1939
  () => isLanguageVariant ? items && items.length > 0 ? items : dropdownLanguageItems : items ?? [],
1925
1940
  [isLanguageVariant, items]
@@ -1930,6 +1945,7 @@ function Dropdown({
1930
1945
  onChange: onValueChange,
1931
1946
  value
1932
1947
  });
1948
+ const [subValues, setSubValues] = React12.useState({});
1933
1949
  const radioValue = selectedValue ?? "";
1934
1950
  const selectedItem = resolvedItems.find(
1935
1951
  (item) => item.value === selectedValue
@@ -1951,7 +1967,7 @@ function Dropdown({
1951
1967
  setUncontrolledSelectedValue,
1952
1968
  value
1953
1969
  ]);
1954
- const resolvedTriggerIcon = isLanguageVariant ? void 0 : triggerIcon === void 0 ? /* @__PURE__ */ jsx12(DefaultDropdownTriggerIcon, { variant }) : triggerIcon;
1970
+ const resolvedTriggerIcon = isLanguageVariant || isActionVariant ? void 0 : triggerIcon === void 0 ? /* @__PURE__ */ jsx12(DefaultDropdownTriggerIcon, { variant }) : triggerIcon;
1955
1971
  const triggerLabel = selectedItem?.triggerLabel ?? selectedItem?.label ?? placeholder;
1956
1972
  const selectedTriggerToneClassName = isSelectedVariant ? hasSelectedItem ? "text-foreground" : "text-[color:var(--sofya-text-soft)]" : void 0;
1957
1973
  return /* @__PURE__ */ jsxs5(
@@ -1966,7 +1982,7 @@ function Dropdown({
1966
1982
  Button,
1967
1983
  {
1968
1984
  type: "button",
1969
- variant: isLanguageVariant ? "language" : "dropdown",
1985
+ variant: isLanguageVariant ? "language" : isActionVariant ? "ghost" : "dropdown",
1970
1986
  languageLocale: selectedLanguageLocale,
1971
1987
  "data-appearance": resolvedAppearance,
1972
1988
  "data-trigger-size": triggerSize,
@@ -1978,11 +1994,12 @@ function Dropdown({
1978
1994
  selectedTriggerToneClassName,
1979
1995
  triggerClassName
1980
1996
  ),
1997
+ leftIcon: isActionVariant ? iconTrigger : void 0,
1981
1998
  rightIcon: resolvedTriggerIcon,
1982
- children: isLanguageVariant ? null : /* @__PURE__ */ jsx12("span", { className: "min-w-0 truncate", children: renderTextContent(triggerLabel, {
1999
+ children: isLanguageVariant || isActionVariant ? null : /* @__PURE__ */ jsx12("span", { className: "min-w-0 truncate", children: renderTextContent(triggerLabel, {
1983
2000
  as: "span",
1984
2001
  className: "block min-w-0 truncate text-inherit",
1985
- size: "body"
2002
+ size: "tiny"
1986
2003
  }) })
1987
2004
  }
1988
2005
  ) }),
@@ -2009,43 +2026,121 @@ function Dropdown({
2009
2026
  const itemLanguageLocale = resolveItemLanguageLocale(item);
2010
2027
  const indicator = item.indicator ?? /* @__PURE__ */ jsx12(DefaultDropdownItemIndicator, {});
2011
2028
  const itemIcon = item.icon ?? (variant === "language" && itemLanguageLocale ? /* @__PURE__ */ jsx12(LanguageFlagIcon, { locale: itemLanguageLocale }) : null);
2029
+ if (isActionVariant && item.subItems && item.subItems.length > 0) {
2030
+ const currentSubValue = subValues[item.value];
2031
+ return /* @__PURE__ */ jsxs5(DropdownMenuPrimitive.Sub, { children: [
2032
+ /* @__PURE__ */ jsxs5(
2033
+ DropdownMenuPrimitive.SubTrigger,
2034
+ {
2035
+ disabled: item.disabled,
2036
+ className: cn(
2037
+ "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",
2038
+ "data-[highlighted]:bg-muted data-[state=open]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2039
+ dropdownItemClasses[variant],
2040
+ itemClassName
2041
+ ),
2042
+ children: [
2043
+ itemIcon && /* @__PURE__ */ jsx12("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2044
+ /* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(item.label, {
2045
+ as: "span",
2046
+ className: "block truncate text-inherit",
2047
+ size: "tiny"
2048
+ }) }),
2049
+ /* @__PURE__ */ jsx12("span", { className: "flex shrink-0 items-center justify-center text-[color:var(--sofya-text-subtle)]", children: /* @__PURE__ */ jsx12(Icon, { name: "caret-right", size: 12 }) })
2050
+ ]
2051
+ }
2052
+ ),
2053
+ /* @__PURE__ */ jsx12(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx12(
2054
+ DropdownMenuPrimitive.SubContent,
2055
+ {
2056
+ sideOffset: 4,
2057
+ className: cn(
2058
+ "sofya-dropdown-content z-50 w-[224px] min-w-[224px] overflow-hidden border bg-card p-2 outline-none",
2059
+ "rounded-[20px] border-[color:var(--sofya-border-strong)] text-foreground shadow-[var(--sofya-shadow-soft)]"
2060
+ ),
2061
+ children: /* @__PURE__ */ jsx12(
2062
+ DropdownMenuPrimitive.RadioGroup,
2063
+ {
2064
+ value: currentSubValue ?? "",
2065
+ onValueChange: (subValue) => {
2066
+ setSubValues((prev) => ({
2067
+ ...prev,
2068
+ [item.value]: subValue
2069
+ }));
2070
+ setSelectedValue(subValue);
2071
+ },
2072
+ className: "grid gap-1",
2073
+ children: item.subItems.map((subItem) => {
2074
+ const isSubSelected = subItem.value === currentSubValue;
2075
+ return /* @__PURE__ */ jsxs5(
2076
+ DropdownMenuPrimitive.RadioItem,
2077
+ {
2078
+ value: subItem.value,
2079
+ disabled: subItem.disabled,
2080
+ className: cn(
2081
+ "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",
2082
+ "data-[highlighted]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40"
2083
+ ),
2084
+ children: [
2085
+ subItem.icon && /* @__PURE__ */ jsx12("span", { className: "flex shrink-0 items-center justify-center", children: subItem.icon }),
2086
+ /* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(subItem.label, {
2087
+ as: "span",
2088
+ className: "block truncate text-inherit",
2089
+ size: "tiny"
2090
+ }) }),
2091
+ /* @__PURE__ */ jsx12(
2092
+ "span",
2093
+ {
2094
+ "aria-hidden": "true",
2095
+ className: cn(
2096
+ "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2097
+ isSubSelected ? "opacity-100" : "opacity-0"
2098
+ ),
2099
+ children: /* @__PURE__ */ jsx12(DefaultDropdownItemIndicator, {})
2100
+ }
2101
+ )
2102
+ ]
2103
+ },
2104
+ subItem.value
2105
+ );
2106
+ })
2107
+ }
2108
+ )
2109
+ }
2110
+ ) })
2111
+ ] }, item.value);
2112
+ }
2012
2113
  if (!usesDefaultListStyle) {
2013
- return /* @__PURE__ */ jsx12(
2114
+ return /* @__PURE__ */ jsxs5(
2014
2115
  DropdownMenuPrimitive.RadioItem,
2015
2116
  {
2016
2117
  value: item.value,
2017
2118
  disabled: item.disabled,
2018
- asChild: true,
2019
- children: /* @__PURE__ */ jsx12(
2020
- Button,
2021
- {
2022
- variant: "ghost",
2023
- className: cn(
2024
- "h-auto w-full px-1.5 py-1 font-normal data-[highlighted]:bg-muted [&>span.relative]:w-full",
2025
- dropdownItemClasses[variant],
2026
- itemClassName
2027
- ),
2028
- children: /* @__PURE__ */ jsxs5("span", { className: "flex w-full items-center gap-2.5", children: [
2029
- itemIcon && /* @__PURE__ */ jsx12("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2030
- /* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate text-left", children: renderTextContent(item.label, {
2031
- as: "span",
2032
- className: "block truncate text-inherit",
2033
- size: "tiny"
2034
- }) }),
2035
- /* @__PURE__ */ jsx12(
2036
- "span",
2037
- {
2038
- "aria-hidden": "true",
2039
- className: cn(
2040
- "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2041
- isSelected ? "opacity-100" : "opacity-0"
2042
- ),
2043
- children: indicator
2044
- }
2045
- )
2046
- ] })
2047
- }
2048
- )
2119
+ className: cn(
2120
+ "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",
2121
+ "data-[highlighted]:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2122
+ dropdownItemClasses[variant],
2123
+ itemClassName
2124
+ ),
2125
+ children: [
2126
+ itemIcon && /* @__PURE__ */ jsx12("span", { className: "flex shrink-0 items-center justify-center", children: itemIcon }),
2127
+ /* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate", children: renderTextContent(item.label, {
2128
+ as: "span",
2129
+ className: "block truncate text-inherit",
2130
+ size: "tiny"
2131
+ }) }),
2132
+ /* @__PURE__ */ jsx12(
2133
+ "span",
2134
+ {
2135
+ "aria-hidden": "true",
2136
+ className: cn(
2137
+ "flex h-4 w-4 shrink-0 items-center justify-center text-primary transition-opacity duration-sofya ease-sofya",
2138
+ isSelected ? "opacity-100" : "opacity-0"
2139
+ ),
2140
+ children: indicator
2141
+ }
2142
+ )
2143
+ ]
2049
2144
  },
2050
2145
  item.value
2051
2146
  );
@@ -2056,7 +2151,7 @@ function Dropdown({
2056
2151
  value: item.value,
2057
2152
  disabled: item.disabled,
2058
2153
  className: cn(
2059
- "flex w-full cursor-pointer items-center rounded-[4px] [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-[22px] tracking-[var(--sofya-text-body-letter-spacing)] outline-none transition-colors duration-sofya ease-sofya data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2154
+ "flex w-full cursor-pointer items-center rounded-[4px] [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[22px] tracking-[var(--sofya-text-tiny-letter-spacing)] outline-none transition-colors duration-sofya ease-sofya data-[disabled]:pointer-events-none data-[disabled]:opacity-40",
2060
2155
  "px-0 py-0 data-[highlighted]:bg-transparent [&[data-highlighted]_span[data-dropdown-item-body]]:bg-[color:var(--sofya-surface-selected)]",
2061
2156
  dropdownItemClasses[variant],
2062
2157
  itemClassName
@@ -2100,262 +2195,21 @@ function Dropdown({
2100
2195
  );
2101
2196
  }
2102
2197
 
2103
- // src/components/dialog.tsx
2104
- import * as React13 from "react";
2105
- import * as DialogPrimitive from "@radix-ui/react-dialog";
2106
- import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
2107
- var Dialog = DialogPrimitive.Root;
2108
- var DialogTrigger = DialogPrimitive.Trigger;
2109
- var DialogPortal = DialogPrimitive.Portal;
2110
- var DialogClose = DialogPrimitive.Close;
2111
- var DialogInternalContext = React13.createContext({
2112
- showCloseButton: true
2113
- });
2114
- var DialogOverlay = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
2115
- DialogPrimitive.Overlay,
2116
- {
2117
- ref,
2118
- className: cn(
2119
- "sofya-dialog-overlay fixed inset-0 z-50 bg-foreground/24 backdrop-blur-[6px]",
2120
- className
2121
- ),
2122
- ...props
2123
- }
2124
- ));
2125
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2126
- var DialogContent = React13.forwardRef(
2127
- ({
2128
- className,
2129
- children,
2130
- cardClassName,
2131
- overlayClassName,
2132
- showCloseButton = true,
2133
- variant = "card",
2134
- ...props
2135
- }, ref) => {
2136
- const dialogCardStyle = {
2137
- "--sofya-surface-shadow-override": "var(--sofya-shadow-lg)"
2138
- };
2139
- return /* @__PURE__ */ jsx13(DialogInternalContext.Provider, { value: { showCloseButton }, children: /* @__PURE__ */ jsxs6(DialogPortal, { children: [
2140
- /* @__PURE__ */ jsx13(DialogOverlay, { className: overlayClassName }),
2141
- /* @__PURE__ */ jsx13("div", { className: "sofya-dialog-positioner fixed inset-0 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ jsx13(
2142
- DialogPrimitive.Content,
2143
- {
2144
- ref,
2145
- className: cn(
2146
- "sofya-dialog-content relative flex w-full max-w-[680px] max-h-[calc(100vh-2rem)] outline-none",
2147
- className
2148
- ),
2149
- ...props,
2150
- children: /* @__PURE__ */ jsx13(
2151
- Card,
2152
- {
2153
- variant,
2154
- className: cn(
2155
- "flex max-h-[inherit] min-h-0 w-full flex-col gap-6 overflow-y-auto overflow-x-hidden p-6",
2156
- cardClassName
2157
- ),
2158
- style: dialogCardStyle,
2159
- children
2160
- }
2161
- )
2162
- }
2163
- ) })
2164
- ] }) });
2165
- }
2166
- );
2167
- DialogContent.displayName = DialogPrimitive.Content.displayName;
2168
- function DialogHeader({ className, children, ...props }) {
2169
- const { showCloseButton } = React13.useContext(DialogInternalContext);
2170
- return /* @__PURE__ */ jsxs6(
2171
- "div",
2172
- {
2173
- className: cn("flex w-full items-start justify-between gap-4", className),
2174
- ...props,
2175
- children: [
2176
- /* @__PURE__ */ jsx13("div", { className: "flex min-w-0 flex-1 flex-col gap-2 text-left", children }),
2177
- showCloseButton ? /* @__PURE__ */ jsx13(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx13(
2178
- Button,
2179
- {
2180
- type: "button",
2181
- variant: "ghost",
2182
- size: "icon",
2183
- "aria-label": "Close",
2184
- leftIcon: /* @__PURE__ */ jsx13(Icon, { name: "x", size: 18 }),
2185
- className: "shrink-0 text-muted-foreground hover:text-foreground"
2186
- }
2187
- ) }) : null
2188
- ]
2189
- }
2190
- );
2191
- }
2192
- function DialogBody({ className, ...props }) {
2193
- return /* @__PURE__ */ jsx13(
2194
- "div",
2195
- {
2196
- className: cn("flex flex-col gap-4", className),
2197
- ...props
2198
- }
2199
- );
2200
- }
2201
- function DialogFooter({ className, ...props }) {
2202
- return /* @__PURE__ */ jsx13(
2203
- "div",
2204
- {
2205
- className: cn("flex items-center justify-end gap-2", className),
2206
- ...props
2207
- }
2208
- );
2209
- }
2210
- var DialogCancel = React13.forwardRef(
2211
- ({ type = "button", variant = "ghost", ...props }, ref) => /* @__PURE__ */ jsx13(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx13(Button, { ref, type, variant, ...props }) })
2212
- );
2213
- DialogCancel.displayName = "DialogCancel";
2214
- var DialogTitle = React13.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ jsx13(
2215
- DialogPrimitive.Title,
2216
- {
2217
- ref,
2218
- className: cn("text-card-foreground", className),
2219
- ...props,
2220
- children: renderTextContent(children, {
2221
- as: "span",
2222
- className: "block text-card-foreground",
2223
- size: "h3"
2224
- })
2225
- }
2226
- ));
2227
- DialogTitle.displayName = DialogPrimitive.Title.displayName;
2228
- var DialogDescription = React13.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ jsx13(
2229
- DialogPrimitive.Description,
2230
- {
2231
- ref,
2232
- className: cn("text-muted-foreground", className),
2233
- ...props,
2234
- children: renderTextContent(children, {
2235
- as: "span",
2236
- className: "block text-muted-foreground",
2237
- size: "body"
2238
- })
2239
- }
2240
- ));
2241
- DialogDescription.displayName = DialogPrimitive.Description.displayName;
2242
-
2243
- // src/components/empty.tsx
2244
- import * as React14 from "react";
2245
- import { cva as cva5 } from "class-variance-authority";
2246
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
2247
- var emptyMediaVariantOptions = ["default", "icon"];
2248
- var emptyMediaVariants = cva5(
2249
- "inline-flex shrink-0 items-center justify-center transition-[background-color,border-color,color,box-shadow] duration-sofya ease-sofya",
2250
- {
2251
- variants: {
2252
- variant: {
2253
- default: "[&_img]:max-w-full [&_svg]:shrink-0 [&_svg]:text-primary",
2254
- 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"
2255
- }
2256
- },
2257
- defaultVariants: {
2258
- variant: "default"
2259
- }
2260
- }
2261
- );
2262
- var EmptyMedia = React14.forwardRef(function EmptyMedia2({ className, variant, ...props }, ref) {
2263
- return /* @__PURE__ */ jsx14("div", { ref, className: cn(emptyMediaVariants({ variant }), className), ...props });
2264
- });
2265
- function EmptyHeader({ className, ...props }) {
2266
- return /* @__PURE__ */ jsx14(
2267
- "div",
2268
- {
2269
- className: cn("flex max-w-[34rem] flex-col items-center gap-4 text-center", className),
2270
- ...props
2271
- }
2272
- );
2273
- }
2274
- function EmptyTitle({ children, className, ...props }) {
2275
- return /* @__PURE__ */ jsx14(
2276
- "h2",
2277
- {
2278
- className: cn("text-foreground", className),
2279
- ...props,
2280
- children: renderTextContent(children, {
2281
- as: "span",
2282
- className: "block text-foreground",
2283
- size: "h4"
2284
- })
2285
- }
2286
- );
2287
- }
2288
- function EmptyDescription({
2289
- children,
2290
- className,
2291
- ...props
2292
- }) {
2293
- return /* @__PURE__ */ jsx14(
2294
- "p",
2295
- {
2296
- className: cn("max-w-full text-muted-foreground whitespace-nowrap", className),
2297
- ...props,
2298
- children: renderTextContent(children, {
2299
- as: "span",
2300
- className: "inline-block whitespace-nowrap text-muted-foreground",
2301
- size: "body"
2302
- })
2303
- }
2304
- );
2305
- }
2306
- function EmptyContent({ children, className, ...props }) {
2307
- return /* @__PURE__ */ jsx14(
2308
- "div",
2309
- {
2310
- className: cn("flex flex-wrap items-center justify-center gap-4 text-center", className),
2311
- ...props,
2312
- children: renderTextContent(children, {
2313
- as: "span"
2314
- })
2315
- }
2316
- );
2317
- }
2318
- var Empty = React14.forwardRef(function Empty2({ children, className, content, description, media, title, ...props }, ref) {
2319
- const hasCustomChildren = React14.Children.count(children) > 0;
2320
- return /* @__PURE__ */ jsx14(
2321
- "div",
2322
- {
2323
- ref,
2324
- className: cn(
2325
- "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",
2326
- className
2327
- ),
2328
- ...props,
2329
- children: hasCustomChildren ? children : /* @__PURE__ */ jsxs7(Fragment2, { children: [
2330
- /* @__PURE__ */ jsxs7(EmptyHeader, { children: [
2331
- media ?? /* @__PURE__ */ jsx14(EmptyMedia, { variant: "icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx14(Icon, { name: "folders", size: 28 }) }),
2332
- /* @__PURE__ */ jsx14(EmptyTitle, { children: title ?? "Nada por aqui" }),
2333
- /* @__PURE__ */ jsx14(EmptyDescription, { children: description ?? "Quando houver conte\xFAdo dispon\xEDvel, ele aparecer\xE1 aqui." })
2334
- ] }),
2335
- content !== void 0 && content !== null ? /* @__PURE__ */ jsx14(EmptyContent, { children: content }) : null
2336
- ] })
2337
- }
2338
- );
2339
- });
2340
- Empty.displayName = "Empty";
2341
- EmptyMedia.displayName = "EmptyMedia";
2342
- EmptyHeader.displayName = "EmptyHeader";
2343
- EmptyTitle.displayName = "EmptyTitle";
2344
- EmptyDescription.displayName = "EmptyDescription";
2345
- EmptyContent.displayName = "EmptyContent";
2198
+ // src/components/dropdown-search.tsx
2199
+ import * as React18 from "react";
2346
2200
 
2347
2201
  // src/components/input.tsx
2348
- import * as React17 from "react";
2202
+ import * as React15 from "react";
2349
2203
  import { REGEXP_ONLY_DIGITS as REGEXP_ONLY_DIGITS2 } from "input-otp";
2350
2204
 
2351
2205
  // src/lib/field-shell.tsx
2352
- import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
2206
+ import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
2353
2207
  function FieldLabel({
2354
2208
  children,
2355
2209
  className,
2356
2210
  htmlFor,
2357
2211
  textClassName = "block text-[color:var(--sofya-text-default)]",
2358
- textSize = "body",
2212
+ textSize = "tiny",
2359
2213
  textStyle = {
2360
2214
  fontWeight: 500
2361
2215
  }
@@ -2364,7 +2218,7 @@ function FieldLabel({
2364
2218
  return null;
2365
2219
  }
2366
2220
  const Component = htmlFor ? "label" : "div";
2367
- return /* @__PURE__ */ jsx15(
2221
+ return /* @__PURE__ */ jsx13(
2368
2222
  Component,
2369
2223
  {
2370
2224
  className: cn("text-[color:var(--sofya-text-default)]", className),
@@ -2391,8 +2245,8 @@ function FieldShell({
2391
2245
  if (!label && !containerClassName) {
2392
2246
  return control;
2393
2247
  }
2394
- return /* @__PURE__ */ jsxs8("div", { className: cn("grid w-full gap-2", containerClassName), children: [
2395
- label ? /* @__PURE__ */ jsx15(
2248
+ return /* @__PURE__ */ jsxs6("div", { className: cn("grid w-full gap-2", containerClassName), children: [
2249
+ label ? /* @__PURE__ */ jsx13(
2396
2250
  FieldLabel,
2397
2251
  {
2398
2252
  className: labelClassName,
@@ -2408,7 +2262,7 @@ function FieldShell({
2408
2262
  }
2409
2263
 
2410
2264
  // src/components/input-upload.tsx
2411
- import * as React15 from "react";
2265
+ import * as React13 from "react";
2412
2266
  import {
2413
2267
  IconFileText,
2414
2268
  IconPhoto,
@@ -2416,7 +2270,7 @@ import {
2416
2270
  IconVideo
2417
2271
  } from "@tabler/icons-react";
2418
2272
  import { AnimatePresence, motion as motion2, useReducedMotion as useReducedMotion2 } from "motion/react";
2419
- import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
2273
+ import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
2420
2274
  var uploadKindOptions = ["document", "image", "video"];
2421
2275
  var uploadAcceptByKind = {
2422
2276
  document: ".pdf,.doc,.docx,.txt,.rtf,.odt,.jpg,.jpeg,.png,.webp,.gif",
@@ -2510,7 +2364,7 @@ function resolveUploadFileVisualKind(file, fallbackKind) {
2510
2364
  return "document";
2511
2365
  }
2512
2366
  function UploadGlyph({ className }) {
2513
- return /* @__PURE__ */ jsx16(
2367
+ return /* @__PURE__ */ jsx14(
2514
2368
  IconUpload,
2515
2369
  {
2516
2370
  "aria-hidden": "true",
@@ -2523,7 +2377,7 @@ function UploadFileTypeGlyph({
2523
2377
  kind
2524
2378
  }) {
2525
2379
  if (kind === "image") {
2526
- return /* @__PURE__ */ jsx16(
2380
+ return /* @__PURE__ */ jsx14(
2527
2381
  IconPhoto,
2528
2382
  {
2529
2383
  "aria-hidden": "true",
@@ -2532,7 +2386,7 @@ function UploadFileTypeGlyph({
2532
2386
  );
2533
2387
  }
2534
2388
  if (kind === "video") {
2535
- return /* @__PURE__ */ jsx16(
2389
+ return /* @__PURE__ */ jsx14(
2536
2390
  IconVideo,
2537
2391
  {
2538
2392
  "aria-hidden": "true",
@@ -2540,7 +2394,7 @@ function UploadFileTypeGlyph({
2540
2394
  }
2541
2395
  );
2542
2396
  }
2543
- return /* @__PURE__ */ jsx16(
2397
+ return /* @__PURE__ */ jsx14(
2544
2398
  IconFileText,
2545
2399
  {
2546
2400
  "aria-hidden": "true",
@@ -2548,7 +2402,7 @@ function UploadFileTypeGlyph({
2548
2402
  }
2549
2403
  );
2550
2404
  }
2551
- var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2405
+ var UploadInputControl = React13.forwardRef(function UploadInputControl2({
2552
2406
  accept,
2553
2407
  "aria-label": ariaLabel,
2554
2408
  className,
@@ -2562,17 +2416,17 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2562
2416
  resolvedId,
2563
2417
  ...uploadProps
2564
2418
  }, ref) {
2565
- const inputRef = React15.useRef(null);
2566
- const [isDragActive, setIsDragActive] = React15.useState(false);
2567
- const [selectedFiles, setSelectedFiles] = React15.useState([]);
2419
+ const inputRef = React13.useRef(null);
2420
+ const [isDragActive, setIsDragActive] = React13.useState(false);
2421
+ const [selectedFiles, setSelectedFiles] = React13.useState([]);
2568
2422
  const resolvedMultiple = multiple ?? true;
2569
2423
  const prefersReducedMotion = useReducedMotion2();
2570
- React15.useImperativeHandle(ref, () => inputRef.current);
2424
+ React13.useImperativeHandle(ref, () => inputRef.current);
2571
2425
  const resolvedAccept = accept ?? uploadAcceptByKind[uploadKind];
2572
2426
  const resolvedAriaLabel = ariaLabel ?? uploadAriaLabelByKind[uploadKind];
2573
2427
  const resolvedTitle = uploadTitle ?? "Arraste arquivos aqui ou clique para selecionar";
2574
2428
  const resolvedDescription = uploadDescription ?? uploadDescriptionByKind[uploadKind];
2575
- const syncSelectedFiles = React15.useCallback(
2429
+ const syncSelectedFiles = React13.useCallback(
2576
2430
  (files) => {
2577
2431
  const normalizedFiles = resolvedMultiple ? files : files.slice(0, 1);
2578
2432
  setSelectedFiles(normalizedFiles);
@@ -2580,7 +2434,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2580
2434
  },
2581
2435
  [onFilesChange, resolvedMultiple]
2582
2436
  );
2583
- const applyFilesToInput = React15.useCallback((files) => {
2437
+ const applyFilesToInput = React13.useCallback((files) => {
2584
2438
  const inputElement = inputRef.current;
2585
2439
  if (!inputElement || typeof DataTransfer === "undefined") {
2586
2440
  return false;
@@ -2599,7 +2453,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2599
2453
  return false;
2600
2454
  }
2601
2455
  }, []);
2602
- const handleInputChange = React15.useCallback(
2456
+ const handleInputChange = React13.useCallback(
2603
2457
  (event) => {
2604
2458
  const nextFiles = mergeUploadFiles(
2605
2459
  selectedFiles,
@@ -2618,12 +2472,12 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2618
2472
  syncSelectedFiles
2619
2473
  ]
2620
2474
  );
2621
- const openPicker = React15.useCallback(() => {
2475
+ const openPicker = React13.useCallback(() => {
2622
2476
  if (!disabled) {
2623
2477
  inputRef.current?.click();
2624
2478
  }
2625
2479
  }, [disabled]);
2626
- const handleKeyDown = React15.useCallback(
2480
+ const handleKeyDown = React13.useCallback(
2627
2481
  (event) => {
2628
2482
  if (disabled) {
2629
2483
  return;
@@ -2635,7 +2489,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2635
2489
  },
2636
2490
  [disabled, openPicker]
2637
2491
  );
2638
- const handleDragEnter = React15.useCallback(
2492
+ const handleDragEnter = React13.useCallback(
2639
2493
  (event) => {
2640
2494
  event.preventDefault();
2641
2495
  if (!disabled) {
@@ -2644,7 +2498,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2644
2498
  },
2645
2499
  [disabled]
2646
2500
  );
2647
- const handleDragLeave = React15.useCallback(
2501
+ const handleDragLeave = React13.useCallback(
2648
2502
  (event) => {
2649
2503
  if (disabled) {
2650
2504
  return;
@@ -2657,7 +2511,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2657
2511
  },
2658
2512
  [disabled]
2659
2513
  );
2660
- const handleDragOver = React15.useCallback(
2514
+ const handleDragOver = React13.useCallback(
2661
2515
  (event) => {
2662
2516
  event.preventDefault();
2663
2517
  if (disabled) {
@@ -2668,7 +2522,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2668
2522
  },
2669
2523
  [disabled]
2670
2524
  );
2671
- const handleDrop = React15.useCallback(
2525
+ const handleDrop = React13.useCallback(
2672
2526
  (event) => {
2673
2527
  event.preventDefault();
2674
2528
  if (disabled) {
@@ -2701,7 +2555,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2701
2555
  syncSelectedFiles
2702
2556
  ]
2703
2557
  );
2704
- const handleRemoveFile = React15.useCallback(
2558
+ const handleRemoveFile = React13.useCallback(
2705
2559
  (fileIndex) => {
2706
2560
  if (disabled) {
2707
2561
  return;
@@ -2712,8 +2566,8 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2712
2566
  },
2713
2567
  [applyFilesToInput, disabled, selectedFiles, syncSelectedFiles]
2714
2568
  );
2715
- return /* @__PURE__ */ jsxs9("div", { className: "grid w-full gap-4", children: [
2716
- /* @__PURE__ */ jsx16(
2569
+ return /* @__PURE__ */ jsxs7("div", { className: "grid w-full gap-4", children: [
2570
+ /* @__PURE__ */ jsx14(
2717
2571
  "input",
2718
2572
  {
2719
2573
  ...uploadProps,
@@ -2728,7 +2582,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2728
2582
  onChange: handleInputChange
2729
2583
  }
2730
2584
  ),
2731
- /* @__PURE__ */ jsxs9(
2585
+ /* @__PURE__ */ jsxs7(
2732
2586
  "label",
2733
2587
  {
2734
2588
  "aria-disabled": disabled || void 0,
@@ -2748,16 +2602,16 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2748
2602
  onDrop: handleDrop,
2749
2603
  onKeyDown: handleKeyDown,
2750
2604
  children: [
2751
- /* @__PURE__ */ jsx16("span", { className: "flex size-10 items-center justify-center rounded-[6px] p-2 text-[color:var(--sofya-text-default)]", children: /* @__PURE__ */ jsx16(UploadGlyph, { className: "size-[18px]" }) }),
2752
- /* @__PURE__ */ jsx16("span", { className: "text-[color:var(--sofya-text-default)]", children: renderTextContent(resolvedTitle, {
2605
+ /* @__PURE__ */ jsx14("span", { className: "flex size-10 items-center justify-center rounded-[6px] p-2 text-[color:var(--sofya-text-default)]", children: /* @__PURE__ */ jsx14(UploadGlyph, { className: "size-[18px]" }) }),
2606
+ /* @__PURE__ */ jsx14("span", { className: "text-[color:var(--sofya-text-default)]", children: renderTextContent(resolvedTitle, {
2753
2607
  as: "span",
2754
2608
  className: "block text-[color:var(--sofya-text-default)]",
2755
- size: "body",
2609
+ size: "tiny",
2756
2610
  style: {
2757
2611
  fontWeight: 500
2758
2612
  }
2759
2613
  }) }),
2760
- resolvedDescription ? /* @__PURE__ */ jsx16("span", { className: "text-[color:var(--sofya-text-subtle)]", children: renderTextContent(resolvedDescription, {
2614
+ resolvedDescription ? /* @__PURE__ */ jsx14("span", { className: "text-[color:var(--sofya-text-subtle)]", children: renderTextContent(resolvedDescription, {
2761
2615
  as: "span",
2762
2616
  className: "block text-[color:var(--sofya-text-subtle)]",
2763
2617
  size: "extra-tiny"
@@ -2765,9 +2619,9 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2765
2619
  ]
2766
2620
  }
2767
2621
  ),
2768
- /* @__PURE__ */ jsx16("div", { role: "list", className: "grid gap-4 overflow-hidden", children: /* @__PURE__ */ jsx16(AnimatePresence, { initial: false, children: selectedFiles.map((file, index) => {
2622
+ /* @__PURE__ */ jsx14("div", { role: "list", className: "grid gap-4 overflow-hidden", children: /* @__PURE__ */ jsx14(AnimatePresence, { initial: false, children: selectedFiles.map((file, index) => {
2769
2623
  const fileKey = resolveUploadFileSignature(file);
2770
- return /* @__PURE__ */ jsx16(
2624
+ return /* @__PURE__ */ jsx14(
2771
2625
  motion2.div,
2772
2626
  {
2773
2627
  role: "listitem",
@@ -2776,24 +2630,24 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2776
2630
  animate: prefersReducedMotion ? { opacity: 1 } : { opacity: 1, y: 0 },
2777
2631
  exit: prefersReducedMotion ? { opacity: 0 } : { opacity: 0, y: -6 },
2778
2632
  transition: uploadListItemTransition,
2779
- children: /* @__PURE__ */ jsxs9(Card, { variant: "card", className: "flex items-center gap-4 p-4", children: [
2780
- /* @__PURE__ */ jsx16("span", { className: "flex size-11 shrink-0 items-center justify-center rounded-full bg-[color:var(--sofya-surface-hover)] text-primary", children: /* @__PURE__ */ jsx16(
2633
+ children: /* @__PURE__ */ jsxs7(Card, { variant: "card", className: "flex items-center gap-4 p-4", children: [
2634
+ /* @__PURE__ */ jsx14("span", { className: "flex size-11 shrink-0 items-center justify-center rounded-full bg-[color:var(--sofya-surface-hover)] text-primary", children: /* @__PURE__ */ jsx14(
2781
2635
  UploadFileTypeGlyph,
2782
2636
  {
2783
2637
  className: "size-[18px]",
2784
2638
  kind: resolveUploadFileVisualKind(file, uploadKind)
2785
2639
  }
2786
2640
  ) }),
2787
- /* @__PURE__ */ jsxs9("div", { className: "min-w-0 flex-1", children: [
2788
- /* @__PURE__ */ jsx16("p", { className: "truncate text-[color:var(--sofya-text-default)]", children: renderTextContent(file.name, {
2641
+ /* @__PURE__ */ jsxs7("div", { className: "min-w-0 flex-1", children: [
2642
+ /* @__PURE__ */ jsx14("p", { className: "truncate text-[color:var(--sofya-text-default)]", children: renderTextContent(file.name, {
2789
2643
  as: "span",
2790
2644
  className: "block truncate text-[color:var(--sofya-text-default)]",
2791
- size: "body",
2645
+ size: "tiny",
2792
2646
  style: {
2793
2647
  fontWeight: 500
2794
2648
  }
2795
2649
  }) }),
2796
- /* @__PURE__ */ jsx16("p", { className: "mt-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(
2650
+ /* @__PURE__ */ jsx14("p", { className: "mt-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(
2797
2651
  `${resolveUploadFileBadge(
2798
2652
  file
2799
2653
  )} \xB7 ${formatUploadFileSize(file.size)}`,
@@ -2804,7 +2658,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2804
2658
  }
2805
2659
  ) })
2806
2660
  ] }),
2807
- /* @__PURE__ */ jsx16(
2661
+ /* @__PURE__ */ jsx14(
2808
2662
  "button",
2809
2663
  {
2810
2664
  "aria-label": `Remover ${file.name}`,
@@ -2816,7 +2670,7 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2816
2670
  event.stopPropagation();
2817
2671
  handleRemoveFile(index);
2818
2672
  },
2819
- children: /* @__PURE__ */ jsx16(
2673
+ children: /* @__PURE__ */ jsx14(
2820
2674
  Icon,
2821
2675
  {
2822
2676
  "aria-hidden": "true",
@@ -2837,15 +2691,15 @@ var UploadInputControl = React15.forwardRef(function UploadInputControl2({
2837
2691
  UploadInputControl.displayName = "UploadInputControl";
2838
2692
 
2839
2693
  // src/components/input-otp.tsx
2840
- import * as React16 from "react";
2694
+ import * as React14 from "react";
2841
2695
  import {
2842
2696
  OTPInput,
2843
2697
  OTPInputContext,
2844
2698
  REGEXP_ONLY_DIGITS
2845
2699
  } from "input-otp";
2846
- import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
2847
- var InputOTP = React16.forwardRef(({ className, containerClassName, ...props }, ref) => {
2848
- return /* @__PURE__ */ jsx17(
2700
+ import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
2701
+ var InputOTP = React14.forwardRef(({ className, containerClassName, ...props }, ref) => {
2702
+ return /* @__PURE__ */ jsx15(
2849
2703
  OTPInput,
2850
2704
  {
2851
2705
  ref,
@@ -2859,8 +2713,8 @@ var InputOTP = React16.forwardRef(({ className, containerClassName, ...props },
2859
2713
  );
2860
2714
  });
2861
2715
  InputOTP.displayName = "InputOTP";
2862
- var InputOTPGroup = React16.forwardRef(({ className, ...props }, ref) => {
2863
- return /* @__PURE__ */ jsx17(
2716
+ var InputOTPGroup = React14.forwardRef(({ className, ...props }, ref) => {
2717
+ return /* @__PURE__ */ jsx15(
2864
2718
  "div",
2865
2719
  {
2866
2720
  ref,
@@ -2873,12 +2727,12 @@ var InputOTPGroup = React16.forwardRef(({ className, ...props }, ref) => {
2873
2727
  );
2874
2728
  });
2875
2729
  InputOTPGroup.displayName = "InputOTPGroup";
2876
- var InputOTPSlot = React16.forwardRef(
2730
+ var InputOTPSlot = React14.forwardRef(
2877
2731
  ({ className, index, ...props }, ref) => {
2878
- const otpContext = React16.useContext(OTPInputContext);
2732
+ const otpContext = React14.useContext(OTPInputContext);
2879
2733
  const slot = otpContext.slots[index];
2880
2734
  if (!slot) {
2881
- return /* @__PURE__ */ jsx17(
2735
+ return /* @__PURE__ */ jsx15(
2882
2736
  "div",
2883
2737
  {
2884
2738
  ref,
@@ -2890,7 +2744,7 @@ var InputOTPSlot = React16.forwardRef(
2890
2744
  }
2891
2745
  );
2892
2746
  }
2893
- return /* @__PURE__ */ jsxs10(
2747
+ return /* @__PURE__ */ jsxs8(
2894
2748
  "div",
2895
2749
  {
2896
2750
  ref,
@@ -2902,15 +2756,15 @@ var InputOTPSlot = React16.forwardRef(
2902
2756
  ...props,
2903
2757
  children: [
2904
2758
  slot.char ?? null,
2905
- slot.hasFakeCaret ? /* @__PURE__ */ jsx17("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx17("div", { className: "h-10 w-[2px] animate-pulse rounded-full bg-primary shadow-[var(--sofya-shadow-caret-glow)]" }) }) : null
2759
+ slot.hasFakeCaret ? /* @__PURE__ */ jsx15("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx15("div", { className: "h-10 w-[2px] animate-pulse rounded-full bg-primary shadow-[var(--sofya-shadow-caret-glow)]" }) }) : null
2906
2760
  ]
2907
2761
  }
2908
2762
  );
2909
2763
  }
2910
2764
  );
2911
2765
  InputOTPSlot.displayName = "InputOTPSlot";
2912
- var InputOTPSeparator = React16.forwardRef(({ className, ...props }, ref) => {
2913
- return /* @__PURE__ */ jsx17(
2766
+ var InputOTPSeparator = React14.forwardRef(({ className, ...props }, ref) => {
2767
+ return /* @__PURE__ */ jsx15(
2914
2768
  "div",
2915
2769
  {
2916
2770
  ref,
@@ -2920,22 +2774,22 @@ var InputOTPSeparator = React16.forwardRef(({ className, ...props }, ref) => {
2920
2774
  className
2921
2775
  ),
2922
2776
  ...props,
2923
- children: /* @__PURE__ */ jsx17("span", { "aria-hidden": "true", children: "." })
2777
+ children: /* @__PURE__ */ jsx15("span", { "aria-hidden": "true", children: "." })
2924
2778
  }
2925
2779
  );
2926
2780
  });
2927
2781
  InputOTPSeparator.displayName = "InputOTPSeparator";
2928
2782
 
2929
2783
  // src/components/input.tsx
2930
- import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
2784
+ import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
2931
2785
  var inputVariantOptions = [
2932
2786
  "default",
2933
2787
  "search",
2934
2788
  "otp",
2935
2789
  "upload"
2936
2790
  ];
2937
- var Input = React17.forwardRef((props, ref) => {
2938
- const generatedId = React17.useId();
2791
+ var Input = React15.forwardRef((props, ref) => {
2792
+ const generatedId = React15.useId();
2939
2793
  const resolvedId = props.id ?? generatedId;
2940
2794
  const variant = props.variant ?? "default";
2941
2795
  if (variant === "otp") {
@@ -2963,7 +2817,7 @@ var Input = React17.forwardRef((props, ref) => {
2963
2817
  );
2964
2818
  const hasTrailingGroup = resolvedSplitIndex < resolvedLength;
2965
2819
  const otpAriaLabel = otpProps["aria-label"] ?? "Verification code";
2966
- const otpControl = /* @__PURE__ */ jsxs11(
2820
+ const otpControl = /* @__PURE__ */ jsxs9(
2967
2821
  InputOTP,
2968
2822
  {
2969
2823
  ref,
@@ -2976,7 +2830,7 @@ var Input = React17.forwardRef((props, ref) => {
2976
2830
  containerClassName: className2,
2977
2831
  ...otpProps,
2978
2832
  children: [
2979
- /* @__PURE__ */ jsx18(InputOTPGroup, { className: otpGroupClassName, children: Array.from({ length: resolvedSplitIndex }, (_, index) => /* @__PURE__ */ jsx18(
2833
+ /* @__PURE__ */ jsx16(InputOTPGroup, { className: otpGroupClassName, children: Array.from({ length: resolvedSplitIndex }, (_, index) => /* @__PURE__ */ jsx16(
2980
2834
  InputOTPSlot,
2981
2835
  {
2982
2836
  className: otpSlotClassName,
@@ -2984,10 +2838,10 @@ var Input = React17.forwardRef((props, ref) => {
2984
2838
  },
2985
2839
  `otp-leading-${index}`
2986
2840
  )) }),
2987
- hasTrailingGroup ? otpSeparator ?? /* @__PURE__ */ jsx18(InputOTPSeparator, { className: otpSeparatorClassName }) : null,
2988
- hasTrailingGroup ? /* @__PURE__ */ jsx18(InputOTPGroup, { className: otpGroupClassName, children: Array.from(
2841
+ hasTrailingGroup ? otpSeparator ?? /* @__PURE__ */ jsx16(InputOTPSeparator, { className: otpSeparatorClassName }) : null,
2842
+ hasTrailingGroup ? /* @__PURE__ */ jsx16(InputOTPGroup, { className: otpGroupClassName, children: Array.from(
2989
2843
  { length: resolvedLength - resolvedSplitIndex },
2990
- (_, index) => /* @__PURE__ */ jsx18(
2844
+ (_, index) => /* @__PURE__ */ jsx16(
2991
2845
  InputOTPSlot,
2992
2846
  {
2993
2847
  className: otpSlotClassName,
@@ -2999,7 +2853,7 @@ var Input = React17.forwardRef((props, ref) => {
2999
2853
  ]
3000
2854
  }
3001
2855
  );
3002
- return /* @__PURE__ */ jsx18(
2856
+ return /* @__PURE__ */ jsx16(
3003
2857
  FieldShell,
3004
2858
  {
3005
2859
  containerClassName: containerClassName2,
@@ -3018,7 +2872,7 @@ var Input = React17.forwardRef((props, ref) => {
3018
2872
  variant: _variant2,
3019
2873
  ...uploadProps
3020
2874
  } = props;
3021
- const uploadControl = /* @__PURE__ */ jsx18(
2875
+ const uploadControl = /* @__PURE__ */ jsx16(
3022
2876
  UploadInputControl,
3023
2877
  {
3024
2878
  ...uploadProps,
@@ -3026,22 +2880,22 @@ var Input = React17.forwardRef((props, ref) => {
3026
2880
  resolvedId
3027
2881
  }
3028
2882
  );
3029
- const uploadLabel = label2 || uploadOptionalLabel ? /* @__PURE__ */ jsxs11(Fragment3, { children: [
2883
+ const uploadLabel = label2 || uploadOptionalLabel ? /* @__PURE__ */ jsxs9(Fragment2, { children: [
3030
2884
  renderTextContent(label2, {
3031
2885
  as: "span",
3032
2886
  className: "text-[color:var(--sofya-text-default)]",
3033
- size: "body",
2887
+ size: "tiny",
3034
2888
  style: {
3035
2889
  fontWeight: 700
3036
2890
  }
3037
2891
  }),
3038
- uploadOptionalLabel ? /* @__PURE__ */ jsx18("span", { className: "ml-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(uploadOptionalLabel, {
2892
+ uploadOptionalLabel ? /* @__PURE__ */ jsx16("span", { className: "ml-2 text-[color:var(--sofya-text-subtle)]", children: renderTextContent(uploadOptionalLabel, {
3039
2893
  as: "span",
3040
2894
  className: "text-[color:var(--sofya-text-subtle)]",
3041
2895
  size: "tiny"
3042
2896
  }) }) : null
3043
2897
  ] }) : void 0;
3044
- return /* @__PURE__ */ jsx18(
2898
+ return /* @__PURE__ */ jsx16(
3045
2899
  FieldShell,
3046
2900
  {
3047
2901
  containerClassName: containerClassName2,
@@ -3064,8 +2918,8 @@ var Input = React17.forwardRef((props, ref) => {
3064
2918
  const isSearch = variant === "search";
3065
2919
  const resolvedType = type ?? (isSearch ? "search" : void 0);
3066
2920
  const ariaLabel = nativeProps["aria-label"] ?? (typeof label === "string" ? label : isSearch ? "Search" : void 0);
3067
- const nativeControl = isSearch ? /* @__PURE__ */ jsxs11("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: [
3068
- /* @__PURE__ */ jsx18(
2921
+ const nativeControl = isSearch ? /* @__PURE__ */ jsxs9("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: [
2922
+ /* @__PURE__ */ jsx16(
3069
2923
  Icon,
3070
2924
  {
3071
2925
  "aria-hidden": "true",
@@ -3074,7 +2928,7 @@ var Input = React17.forwardRef((props, ref) => {
3074
2928
  size: 32
3075
2929
  }
3076
2930
  ),
3077
- /* @__PURE__ */ jsx18(
2931
+ /* @__PURE__ */ jsx16(
3078
2932
  "input",
3079
2933
  {
3080
2934
  id: resolvedId,
@@ -3090,39 +2944,587 @@ var Input = React17.forwardRef((props, ref) => {
3090
2944
  placeholder: nativeProps.placeholder ?? "Search"
3091
2945
  }
3092
2946
  )
3093
- ] }) : /* @__PURE__ */ jsx18(
2947
+ ] }) : /* @__PURE__ */ jsx16(
3094
2948
  "input",
3095
2949
  {
3096
- id: resolvedId,
2950
+ id: resolvedId,
2951
+ ref,
2952
+ type: resolvedType,
2953
+ className: cn(
2954
+ "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-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[var(--sofya-text-tiny-line-height)] tracking-[var(--sofya-text-tiny-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",
2955
+ className
2956
+ ),
2957
+ ...nativeProps,
2958
+ "aria-label": ariaLabel
2959
+ }
2960
+ );
2961
+ return /* @__PURE__ */ jsx16(
2962
+ FieldShell,
2963
+ {
2964
+ containerClassName,
2965
+ control: nativeControl,
2966
+ label: isSearch ? void 0 : label,
2967
+ labelClassName: isSearch ? void 0 : labelClassName,
2968
+ labelHtmlFor: isSearch ? void 0 : resolvedId
2969
+ }
2970
+ );
2971
+ });
2972
+ Input.displayName = "Input";
2973
+
2974
+ // src/components/popover.tsx
2975
+ import * as React16 from "react";
2976
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
2977
+ import { jsx as jsx17 } from "react/jsx-runtime";
2978
+ var Popover = PopoverPrimitive.Root;
2979
+ var PopoverTrigger = PopoverPrimitive.Trigger;
2980
+ var PopoverAnchor = PopoverPrimitive.Anchor;
2981
+ var PopoverPortal = PopoverPrimitive.Portal;
2982
+ var PopoverClose = PopoverPrimitive.Close;
2983
+ var PopoverContent = React16.forwardRef(function PopoverContent2({
2984
+ align = "center",
2985
+ className,
2986
+ collisionPadding = 8,
2987
+ sideOffset = 8,
2988
+ ...props
2989
+ }, ref) {
2990
+ return /* @__PURE__ */ jsx17(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx17(
2991
+ PopoverPrimitive.Content,
2992
+ {
2993
+ ref,
2994
+ align,
2995
+ collisionPadding,
2996
+ sideOffset,
2997
+ "data-slot": "popover-content",
2998
+ className: cn(
2999
+ "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",
3000
+ className
3001
+ ),
3002
+ ...props
3003
+ }
3004
+ ) });
3005
+ });
3006
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
3007
+ var PopoverTitle = React16.forwardRef(function PopoverTitle2({ children, className, ...props }, ref) {
3008
+ return /* @__PURE__ */ jsx17(
3009
+ "h4",
3010
+ {
3011
+ ref,
3012
+ "data-slot": "popover-title",
3013
+ className: cn("text-[hsl(var(--sofya-popover-foreground))]", className),
3014
+ ...props,
3015
+ children: renderTextContent(children, {
3016
+ as: "span",
3017
+ className: "block text-[hsl(var(--sofya-popover-foreground))]",
3018
+ size: "h4"
3019
+ })
3020
+ }
3021
+ );
3022
+ });
3023
+ PopoverTitle.displayName = "PopoverTitle";
3024
+ var PopoverDescription = React16.forwardRef(function PopoverDescription2({ children, className, ...props }, ref) {
3025
+ return /* @__PURE__ */ jsx17(
3026
+ "p",
3027
+ {
3028
+ ref,
3029
+ "data-slot": "popover-description",
3030
+ className: cn("text-muted-foreground", className),
3031
+ ...props,
3032
+ children: renderTextContent(children, {
3033
+ as: "span",
3034
+ className: "block text-muted-foreground",
3035
+ size: "body"
3036
+ })
3037
+ }
3038
+ );
3039
+ });
3040
+ PopoverDescription.displayName = "PopoverDescription";
3041
+
3042
+ // src/components/spinner.tsx
3043
+ import * as React17 from "react";
3044
+ import { IconLoader2 as IconLoader22 } from "@tabler/icons-react";
3045
+ import { jsx as jsx18 } from "react/jsx-runtime";
3046
+ var spinnerSizeOptions = ["sm", "default", "lg"];
3047
+ var Spinner = React17.forwardRef(function Spinner2({
3048
+ "aria-label": ariaLabelProp,
3049
+ "aria-labelledby": ariaLabelledby,
3050
+ className,
3051
+ role = "status",
3052
+ size = "default",
3053
+ ...props
3054
+ }, ref) {
3055
+ const ariaLabel = ariaLabelProp ?? (ariaLabelledby ? void 0 : "Loading");
3056
+ return /* @__PURE__ */ jsx18(
3057
+ IconLoader22,
3058
+ {
3059
+ ref,
3060
+ "data-size": size,
3061
+ "data-slot": "spinner",
3062
+ role,
3063
+ "aria-label": ariaLabel,
3064
+ "aria-labelledby": ariaLabelledby,
3065
+ className: cn(
3066
+ "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",
3067
+ className
3068
+ ),
3069
+ ...props
3070
+ }
3071
+ );
3072
+ });
3073
+ Spinner.displayName = "Spinner";
3074
+
3075
+ // src/components/dropdown-search.tsx
3076
+ import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
3077
+ var DropdownSearch = React18.forwardRef(
3078
+ function DropdownSearch2({
3079
+ className,
3080
+ containerClassName,
3081
+ defaultQuery = "",
3082
+ defaultValue,
3083
+ disabled,
3084
+ emptyMessage = "No results found",
3085
+ label,
3086
+ labelClassName,
3087
+ loading,
3088
+ onChange,
3089
+ onQueryChange,
3090
+ options = [],
3091
+ placeholder = "Search...",
3092
+ query: queryProp,
3093
+ value: valueProp
3094
+ }, ref) {
3095
+ const listboxId = React18.useId();
3096
+ const [open, setOpen] = React18.useState(false);
3097
+ const [query, setQuery] = useControllableState({
3098
+ defaultValue: defaultQuery,
3099
+ onChange: onQueryChange,
3100
+ value: queryProp
3101
+ });
3102
+ const [value, setValue] = useControllableState({
3103
+ defaultValue,
3104
+ onChange,
3105
+ value: valueProp
3106
+ });
3107
+ const inputRef = React18.useRef(null);
3108
+ const listRef = React18.useRef(null);
3109
+ const setInputRef = React18.useCallback(
3110
+ (node) => {
3111
+ inputRef.current = node;
3112
+ if (typeof ref === "function") {
3113
+ ref(node);
3114
+ } else if (ref) {
3115
+ ref.current = node;
3116
+ }
3117
+ },
3118
+ [ref]
3119
+ );
3120
+ function handleInputChange(e) {
3121
+ setQuery(e.target.value);
3122
+ setOpen(true);
3123
+ }
3124
+ function handleInputFocus() {
3125
+ setOpen(true);
3126
+ }
3127
+ function handleInputKeyDown(e) {
3128
+ if (e.key === "ArrowDown") {
3129
+ e.preventDefault();
3130
+ listRef.current?.querySelector(
3131
+ "[data-dropdown-search-item]:not([disabled])"
3132
+ )?.focus();
3133
+ }
3134
+ if (e.key === "Escape") {
3135
+ setOpen(false);
3136
+ }
3137
+ }
3138
+ function handleItemKeyDown(e, option) {
3139
+ if (e.key === "Enter" || e.key === " ") {
3140
+ e.preventDefault();
3141
+ handleSelect(option);
3142
+ return;
3143
+ }
3144
+ if (e.key === "ArrowDown") {
3145
+ e.preventDefault();
3146
+ e.currentTarget.closest("li")?.nextElementSibling?.querySelector("[data-dropdown-search-item]")?.focus();
3147
+ return;
3148
+ }
3149
+ if (e.key === "ArrowUp") {
3150
+ e.preventDefault();
3151
+ const prevLi = e.currentTarget.closest("li")?.previousElementSibling;
3152
+ if (prevLi) {
3153
+ prevLi.querySelector("[data-dropdown-search-item]")?.focus();
3154
+ } else {
3155
+ inputRef.current?.focus();
3156
+ }
3157
+ return;
3158
+ }
3159
+ if (e.key === "Escape") {
3160
+ setOpen(false);
3161
+ inputRef.current?.focus();
3162
+ }
3163
+ }
3164
+ function handleSelect(option) {
3165
+ if (option.disabled) return;
3166
+ setValue(option.value);
3167
+ setQuery(option.label);
3168
+ setOpen(false);
3169
+ }
3170
+ return /* @__PURE__ */ jsxs10(Popover, { open, onOpenChange: setOpen, children: [
3171
+ /* @__PURE__ */ jsx19(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsx19("div", { className: cn("w-full", containerClassName), children: /* @__PURE__ */ jsx19(
3172
+ Input,
3173
+ {
3174
+ ref: setInputRef,
3175
+ "aria-autocomplete": "list",
3176
+ "aria-controls": open ? listboxId : void 0,
3177
+ "aria-expanded": open,
3178
+ "aria-haspopup": "listbox",
3179
+ autoComplete: "off",
3180
+ className,
3181
+ disabled,
3182
+ label,
3183
+ labelClassName,
3184
+ placeholder,
3185
+ role: "combobox",
3186
+ value: query ?? "",
3187
+ onChange: handleInputChange,
3188
+ onFocus: handleInputFocus,
3189
+ onKeyDown: handleInputKeyDown
3190
+ }
3191
+ ) }) }),
3192
+ /* @__PURE__ */ jsx19(
3193
+ PopoverContent,
3194
+ {
3195
+ align: "start",
3196
+ className: "w-[var(--radix-popover-trigger-width)] p-1",
3197
+ onOpenAutoFocus: (e) => e.preventDefault(),
3198
+ onInteractOutside: (e) => {
3199
+ if (inputRef.current?.closest("div")?.contains(e.target)) {
3200
+ e.preventDefault();
3201
+ }
3202
+ },
3203
+ children: loading ? /* @__PURE__ */ jsx19("div", { className: "flex items-center justify-center py-4", children: /* @__PURE__ */ jsx19(Spinner, { size: "sm" }) }) : options.length === 0 ? /* @__PURE__ */ jsx19("div", { className: "px-3 py-4 text-center", children: /* @__PURE__ */ jsx19(
3204
+ Text,
3205
+ {
3206
+ as: "span",
3207
+ size: "tiny",
3208
+ className: "text-[color:var(--sofya-text-subtle)]",
3209
+ children: emptyMessage
3210
+ }
3211
+ ) }) : /* @__PURE__ */ jsx19(
3212
+ "ul",
3213
+ {
3214
+ ref: listRef,
3215
+ id: listboxId,
3216
+ role: "listbox",
3217
+ "aria-label": typeof label === "string" ? label : "Options",
3218
+ className: "flex flex-col gap-0.5",
3219
+ children: options.map((option) => /* @__PURE__ */ jsx19(
3220
+ "li",
3221
+ {
3222
+ role: "option",
3223
+ "aria-selected": value === option.value,
3224
+ "aria-disabled": option.disabled,
3225
+ children: /* @__PURE__ */ jsxs10(
3226
+ "button",
3227
+ {
3228
+ "data-dropdown-search-item": true,
3229
+ type: "button",
3230
+ disabled: option.disabled,
3231
+ className: cn(
3232
+ "flex w-full items-center gap-3 rounded-[8px] px-3 py-2 text-left",
3233
+ "[font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[var(--sofya-text-tiny-line-height)]",
3234
+ "transition-colors duration-sofya ease-sofya",
3235
+ "text-[color:var(--sofya-text-default)] hover:bg-muted focus-visible:bg-muted focus-visible:outline-none",
3236
+ "disabled:cursor-not-allowed disabled:opacity-40",
3237
+ value === option.value && "bg-muted"
3238
+ ),
3239
+ onClick: () => handleSelect(option),
3240
+ onKeyDown: (e) => handleItemKeyDown(e, option),
3241
+ children: [
3242
+ /* @__PURE__ */ jsxs10("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
3243
+ /* @__PURE__ */ jsx19(Text, { as: "span", size: "tiny", className: "truncate", children: option.label }),
3244
+ option.description ? /* @__PURE__ */ jsx19(
3245
+ Text,
3246
+ {
3247
+ as: "span",
3248
+ size: "tiny",
3249
+ className: "truncate text-[color:var(--sofya-text-subtle)]",
3250
+ children: option.description
3251
+ }
3252
+ ) : null
3253
+ ] }),
3254
+ value === option.value ? /* @__PURE__ */ jsx19(
3255
+ Icon,
3256
+ {
3257
+ "aria-hidden": "true",
3258
+ className: "shrink-0 text-primary",
3259
+ name: "check",
3260
+ size: 16
3261
+ }
3262
+ ) : null
3263
+ ]
3264
+ }
3265
+ )
3266
+ },
3267
+ option.value
3268
+ ))
3269
+ }
3270
+ )
3271
+ }
3272
+ )
3273
+ ] });
3274
+ }
3275
+ );
3276
+ DropdownSearch.displayName = "DropdownSearch";
3277
+
3278
+ // src/components/dialog.tsx
3279
+ import * as React19 from "react";
3280
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
3281
+ import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
3282
+ var Dialog = DialogPrimitive.Root;
3283
+ var DialogTrigger = DialogPrimitive.Trigger;
3284
+ var DialogPortal = DialogPrimitive.Portal;
3285
+ var DialogClose = DialogPrimitive.Close;
3286
+ var DialogInternalContext = React19.createContext({
3287
+ showCloseButton: true
3288
+ });
3289
+ var DialogOverlay = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx20(
3290
+ DialogPrimitive.Overlay,
3291
+ {
3292
+ ref,
3293
+ className: cn(
3294
+ "sofya-dialog-overlay fixed inset-0 z-50 bg-foreground/24 backdrop-blur-[6px]",
3295
+ className
3296
+ ),
3297
+ ...props
3298
+ }
3299
+ ));
3300
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
3301
+ var DialogContent = React19.forwardRef(
3302
+ ({
3303
+ className,
3304
+ children,
3305
+ cardClassName,
3306
+ overlayClassName,
3307
+ showCloseButton = true,
3308
+ variant = "card",
3309
+ ...props
3310
+ }, ref) => {
3311
+ const dialogCardStyle = {
3312
+ "--sofya-surface-shadow-override": "var(--sofya-shadow-lg)"
3313
+ };
3314
+ return /* @__PURE__ */ jsx20(DialogInternalContext.Provider, { value: { showCloseButton }, children: /* @__PURE__ */ jsxs11(DialogPortal, { children: [
3315
+ /* @__PURE__ */ jsx20(DialogOverlay, { className: overlayClassName }),
3316
+ /* @__PURE__ */ jsx20("div", { className: "sofya-dialog-positioner fixed inset-0 z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ jsx20(
3317
+ DialogPrimitive.Content,
3318
+ {
3319
+ ref,
3320
+ className: cn(
3321
+ "sofya-dialog-content relative flex w-full max-w-[680px] max-h-[calc(100vh-2rem)] outline-none",
3322
+ className
3323
+ ),
3324
+ ...props,
3325
+ children: /* @__PURE__ */ jsx20(
3326
+ Card,
3327
+ {
3328
+ variant,
3329
+ className: cn(
3330
+ "flex max-h-[inherit] min-h-0 w-full flex-col gap-6 overflow-y-auto overflow-x-hidden p-6",
3331
+ cardClassName
3332
+ ),
3333
+ style: dialogCardStyle,
3334
+ children
3335
+ }
3336
+ )
3337
+ }
3338
+ ) })
3339
+ ] }) });
3340
+ }
3341
+ );
3342
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
3343
+ function DialogHeader({ className, children, ...props }) {
3344
+ const { showCloseButton } = React19.useContext(DialogInternalContext);
3345
+ return /* @__PURE__ */ jsxs11(
3346
+ "div",
3347
+ {
3348
+ className: cn("flex w-full items-start justify-between gap-4", className),
3349
+ ...props,
3350
+ children: [
3351
+ /* @__PURE__ */ jsx20("div", { className: "flex min-w-0 flex-1 flex-col gap-2 text-left", children }),
3352
+ showCloseButton ? /* @__PURE__ */ jsx20(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx20(
3353
+ Button,
3354
+ {
3355
+ type: "button",
3356
+ variant: "ghost",
3357
+ size: "icon",
3358
+ "aria-label": "Close",
3359
+ leftIcon: /* @__PURE__ */ jsx20(Icon, { name: "x", size: 18 }),
3360
+ className: "shrink-0 text-muted-foreground hover:text-foreground"
3361
+ }
3362
+ ) }) : null
3363
+ ]
3364
+ }
3365
+ );
3366
+ }
3367
+ function DialogBody({ className, ...props }) {
3368
+ return /* @__PURE__ */ jsx20(
3369
+ "div",
3370
+ {
3371
+ className: cn("flex flex-col gap-4", className),
3372
+ ...props
3373
+ }
3374
+ );
3375
+ }
3376
+ function DialogFooter({ className, ...props }) {
3377
+ return /* @__PURE__ */ jsx20(
3378
+ "div",
3379
+ {
3380
+ className: cn("flex items-center justify-end gap-2", className),
3381
+ ...props
3382
+ }
3383
+ );
3384
+ }
3385
+ var DialogCancel = React19.forwardRef(
3386
+ ({ type = "button", variant = "ghost", ...props }, ref) => /* @__PURE__ */ jsx20(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx20(Button, { ref, type, variant, ...props }) })
3387
+ );
3388
+ DialogCancel.displayName = "DialogCancel";
3389
+ var DialogTitle = React19.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ jsx20(
3390
+ DialogPrimitive.Title,
3391
+ {
3392
+ ref,
3393
+ className: cn("text-card-foreground", className),
3394
+ ...props,
3395
+ children: renderTextContent(children, {
3396
+ as: "span",
3397
+ className: "block text-card-foreground",
3398
+ size: "h3"
3399
+ })
3400
+ }
3401
+ ));
3402
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
3403
+ var DialogDescription = React19.forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ jsx20(
3404
+ DialogPrimitive.Description,
3405
+ {
3406
+ ref,
3407
+ className: cn("text-muted-foreground", className),
3408
+ ...props,
3409
+ children: renderTextContent(children, {
3410
+ as: "span",
3411
+ className: "block text-muted-foreground",
3412
+ size: "body"
3413
+ })
3414
+ }
3415
+ ));
3416
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
3417
+
3418
+ // src/components/empty.tsx
3419
+ import * as React20 from "react";
3420
+ import { cva as cva5 } from "class-variance-authority";
3421
+ import { Fragment as Fragment3, jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
3422
+ var emptyMediaVariantOptions = ["default", "icon"];
3423
+ var emptyMediaVariants = cva5(
3424
+ "inline-flex shrink-0 items-center justify-center transition-[background-color,border-color,color,box-shadow] duration-sofya ease-sofya",
3425
+ {
3426
+ variants: {
3427
+ variant: {
3428
+ default: "[&_img]:max-w-full [&_svg]:shrink-0 [&_svg]:text-primary",
3429
+ 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"
3430
+ }
3431
+ },
3432
+ defaultVariants: {
3433
+ variant: "default"
3434
+ }
3435
+ }
3436
+ );
3437
+ var EmptyMedia = React20.forwardRef(function EmptyMedia2({ className, variant, ...props }, ref) {
3438
+ return /* @__PURE__ */ jsx21("div", { ref, className: cn(emptyMediaVariants({ variant }), className), ...props });
3439
+ });
3440
+ function EmptyHeader({ className, ...props }) {
3441
+ return /* @__PURE__ */ jsx21(
3442
+ "div",
3443
+ {
3444
+ className: cn("flex max-w-[34rem] flex-col items-center gap-4 text-center", className),
3445
+ ...props
3446
+ }
3447
+ );
3448
+ }
3449
+ function EmptyTitle({ children, className, ...props }) {
3450
+ return /* @__PURE__ */ jsx21(
3451
+ "h2",
3452
+ {
3453
+ className: cn("text-foreground", className),
3454
+ ...props,
3455
+ children: renderTextContent(children, {
3456
+ as: "span",
3457
+ className: "block text-foreground",
3458
+ size: "h4"
3459
+ })
3460
+ }
3461
+ );
3462
+ }
3463
+ function EmptyDescription({
3464
+ children,
3465
+ className,
3466
+ ...props
3467
+ }) {
3468
+ return /* @__PURE__ */ jsx21(
3469
+ "p",
3470
+ {
3471
+ className: cn("max-w-full text-muted-foreground whitespace-nowrap", className),
3472
+ ...props,
3473
+ children: renderTextContent(children, {
3474
+ as: "span",
3475
+ className: "inline-block whitespace-nowrap text-muted-foreground",
3476
+ size: "body"
3477
+ })
3478
+ }
3479
+ );
3480
+ }
3481
+ function EmptyContent({ children, className, ...props }) {
3482
+ return /* @__PURE__ */ jsx21(
3483
+ "div",
3484
+ {
3485
+ className: cn("flex flex-wrap items-center justify-center gap-4 text-center", className),
3486
+ ...props,
3487
+ children: renderTextContent(children, {
3488
+ as: "span"
3489
+ })
3490
+ }
3491
+ );
3492
+ }
3493
+ var Empty = React20.forwardRef(function Empty2({ children, className, content, description, media, title, ...props }, ref) {
3494
+ const hasCustomChildren = React20.Children.count(children) > 0;
3495
+ return /* @__PURE__ */ jsx21(
3496
+ "div",
3497
+ {
3097
3498
  ref,
3098
- type: resolvedType,
3099
3499
  className: cn(
3100
- "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",
3500
+ "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",
3101
3501
  className
3102
3502
  ),
3103
- ...nativeProps,
3104
- "aria-label": ariaLabel
3105
- }
3106
- );
3107
- return /* @__PURE__ */ jsx18(
3108
- FieldShell,
3109
- {
3110
- containerClassName,
3111
- control: nativeControl,
3112
- label: isSearch ? void 0 : label,
3113
- labelClassName: isSearch ? void 0 : labelClassName,
3114
- labelHtmlFor: isSearch ? void 0 : resolvedId
3503
+ ...props,
3504
+ children: hasCustomChildren ? children : /* @__PURE__ */ jsxs12(Fragment3, { children: [
3505
+ /* @__PURE__ */ jsxs12(EmptyHeader, { children: [
3506
+ media ?? /* @__PURE__ */ jsx21(EmptyMedia, { variant: "icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx21(Icon, { name: "folders", size: 28 }) }),
3507
+ /* @__PURE__ */ jsx21(EmptyTitle, { children: title ?? "Nada por aqui" }),
3508
+ /* @__PURE__ */ jsx21(EmptyDescription, { children: description ?? "Quando houver conte\xFAdo dispon\xEDvel, ele aparecer\xE1 aqui." })
3509
+ ] }),
3510
+ content !== void 0 && content !== null ? /* @__PURE__ */ jsx21(EmptyContent, { children: content }) : null
3511
+ ] })
3115
3512
  }
3116
3513
  );
3117
3514
  });
3118
- Input.displayName = "Input";
3515
+ Empty.displayName = "Empty";
3516
+ EmptyMedia.displayName = "EmptyMedia";
3517
+ EmptyHeader.displayName = "EmptyHeader";
3518
+ EmptyTitle.displayName = "EmptyTitle";
3519
+ EmptyDescription.displayName = "EmptyDescription";
3520
+ EmptyContent.displayName = "EmptyContent";
3119
3521
 
3120
3522
  // src/components/label.tsx
3121
- import * as React18 from "react";
3122
- import { jsx as jsx19 } from "react/jsx-runtime";
3123
- var Label = React18.forwardRef(
3523
+ import * as React21 from "react";
3524
+ import { jsx as jsx22 } from "react/jsx-runtime";
3525
+ var Label = React21.forwardRef(
3124
3526
  ({ children, className, ...props }, ref) => {
3125
- return /* @__PURE__ */ jsx19(
3527
+ return /* @__PURE__ */ jsx22(
3126
3528
  "label",
3127
3529
  {
3128
3530
  ref,
@@ -3134,7 +3536,7 @@ var Label = React18.forwardRef(
3134
3536
  children: renderTextContent(children, {
3135
3537
  as: "span",
3136
3538
  className: "block text-foreground",
3137
- size: "body",
3539
+ size: "tiny",
3138
3540
  style: {
3139
3541
  fontWeight: 500
3140
3542
  }
@@ -3146,10 +3548,10 @@ var Label = React18.forwardRef(
3146
3548
  Label.displayName = "Label";
3147
3549
 
3148
3550
  // src/components/link.tsx
3149
- import * as React19 from "react";
3551
+ import * as React22 from "react";
3150
3552
  import { Slot as Slot3 } from "@radix-ui/react-slot";
3151
3553
  import { cva as cva6 } from "class-variance-authority";
3152
- import { jsx as jsx20 } from "react/jsx-runtime";
3554
+ import { jsx as jsx23 } from "react/jsx-runtime";
3153
3555
  var linkVariants = cva6(
3154
3556
  "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",
3155
3557
  {
@@ -3164,9 +3566,9 @@ var linkVariants = cva6(
3164
3566
  }
3165
3567
  }
3166
3568
  );
3167
- var Link = React19.forwardRef(function Link2({ asChild = false, children, className, variant = "default", ...props }, ref) {
3569
+ var Link = React22.forwardRef(function Link2({ asChild = false, children, className, variant = "default", ...props }, ref) {
3168
3570
  const Component = asChild ? Slot3 : "a";
3169
- return /* @__PURE__ */ jsx20(
3571
+ return /* @__PURE__ */ jsx23(
3170
3572
  Component,
3171
3573
  {
3172
3574
  ref,
@@ -3176,7 +3578,7 @@ var Link = React19.forwardRef(function Link2({ asChild = false, children, classN
3176
3578
  children: renderTextContent(children, {
3177
3579
  as: "span",
3178
3580
  className: "text-current",
3179
- size: "body"
3581
+ size: "tiny"
3180
3582
  })
3181
3583
  }
3182
3584
  );
@@ -3184,7 +3586,7 @@ var Link = React19.forwardRef(function Link2({ asChild = false, children, classN
3184
3586
  Link.displayName = "Link";
3185
3587
 
3186
3588
  // src/components/logo.tsx
3187
- import * as React20 from "react";
3589
+ import * as React23 from "react";
3188
3590
 
3189
3591
  // src/components/logo-data.ts
3190
3592
  var logoAssets = {
@@ -3281,7 +3683,7 @@ var logoAssets = {
3281
3683
  };
3282
3684
 
3283
3685
  // src/components/logo.tsx
3284
- import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
3686
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
3285
3687
  var logoVariants = ["mono", "default", "text", "full"];
3286
3688
  var logoSizeOptions = ["sm", "md", "lg", "xl", "2xl"];
3287
3689
  var logoSizeScale = {
@@ -3317,7 +3719,7 @@ function resolveLogoDimensions(variant, size, width, height) {
3317
3719
  height: resolvedHeight
3318
3720
  };
3319
3721
  }
3320
- var Logo = React20.forwardRef(function Logo2({
3722
+ var Logo = React23.forwardRef(function Logo2({
3321
3723
  variant = "full",
3322
3724
  size = "lg",
3323
3725
  width,
@@ -3328,10 +3730,10 @@ var Logo = React20.forwardRef(function Logo2({
3328
3730
  ...props
3329
3731
  }, ref) {
3330
3732
  const asset = logoAssets[variant];
3331
- const titleId = React20.useId();
3733
+ const titleId = React23.useId();
3332
3734
  const dimensions = resolveLogoDimensions(variant, size, width, height);
3333
3735
  const monoFill = variant === "mono" ? monoColor ?? "currentColor" : void 0;
3334
- return /* @__PURE__ */ jsxs12(
3736
+ return /* @__PURE__ */ jsxs13(
3335
3737
  "svg",
3336
3738
  {
3337
3739
  ref,
@@ -3346,8 +3748,8 @@ var Logo = React20.forwardRef(function Logo2({
3346
3748
  focusable: "false",
3347
3749
  ...props,
3348
3750
  children: [
3349
- title ? /* @__PURE__ */ jsx21("title", { id: titleId, children: title }) : null,
3350
- asset.paths.map((path, index) => /* @__PURE__ */ jsx21(
3751
+ title ? /* @__PURE__ */ jsx24("title", { id: titleId, children: title }) : null,
3752
+ asset.paths.map((path, index) => /* @__PURE__ */ jsx24(
3351
3753
  "path",
3352
3754
  {
3353
3755
  d: path.d,
@@ -3379,7 +3781,7 @@ var inheritedTypographyStyle = {
3379
3781
  };
3380
3782
 
3381
3783
  // src/components/pagination.tsx
3382
- import { jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
3784
+ import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
3383
3785
  var paginationLinkVariants = cva7(
3384
3786
  "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",
3385
3787
  {
@@ -3400,7 +3802,7 @@ var paginationLinkVariants = cva7(
3400
3802
  }
3401
3803
  );
3402
3804
  function Pagination({ className, ...props }) {
3403
- return /* @__PURE__ */ jsx22(
3805
+ return /* @__PURE__ */ jsx25(
3404
3806
  "nav",
3405
3807
  {
3406
3808
  "aria-label": "Pagination",
@@ -3413,7 +3815,7 @@ function PaginationContent({
3413
3815
  className,
3414
3816
  ...props
3415
3817
  }) {
3416
- return /* @__PURE__ */ jsx22(
3818
+ return /* @__PURE__ */ jsx25(
3417
3819
  "ul",
3418
3820
  {
3419
3821
  className: cn(
@@ -3425,7 +3827,7 @@ function PaginationContent({
3425
3827
  );
3426
3828
  }
3427
3829
  function PaginationItem({ className, ...props }) {
3428
- return /* @__PURE__ */ jsx22("li", { className: cn("list-none", className), ...props });
3830
+ return /* @__PURE__ */ jsx25("li", { className: cn("list-none", className), ...props });
3429
3831
  }
3430
3832
  function PaginationLink({
3431
3833
  asChild = false,
@@ -3435,7 +3837,7 @@ function PaginationLink({
3435
3837
  ...props
3436
3838
  }) {
3437
3839
  const Component = asChild ? Slot4 : "a";
3438
- return /* @__PURE__ */ jsx22(
3840
+ return /* @__PURE__ */ jsx25(
3439
3841
  Component,
3440
3842
  {
3441
3843
  "aria-current": isActive ? "page" : void 0,
@@ -3445,25 +3847,25 @@ function PaginationLink({
3445
3847
  );
3446
3848
  }
3447
3849
  function PaginationChevronLeft() {
3448
- return /* @__PURE__ */ jsx22(IconChevronLeft2, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3850
+ return /* @__PURE__ */ jsx25(IconChevronLeft2, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3449
3851
  }
3450
3852
  function PaginationChevronRight() {
3451
- return /* @__PURE__ */ jsx22(IconChevronRight2, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3853
+ return /* @__PURE__ */ jsx25(IconChevronRight2, { "aria-hidden": "true", className: "h-4 w-4", stroke: 1.75 });
3452
3854
  }
3453
3855
  function PaginationPrevious({
3454
3856
  className,
3455
3857
  text = "Previous",
3456
3858
  ...props
3457
3859
  }) {
3458
- return /* @__PURE__ */ jsxs13(
3860
+ return /* @__PURE__ */ jsxs14(
3459
3861
  PaginationLink,
3460
3862
  {
3461
3863
  "aria-label": "Go to previous page",
3462
3864
  className: cn("gap-2 px-4", className),
3463
3865
  ...props,
3464
3866
  children: [
3465
- /* @__PURE__ */ jsx22(PaginationChevronLeft, {}),
3466
- /* @__PURE__ */ jsx22("span", { className: "hidden sm:block", children: renderTextContent(text, {
3867
+ /* @__PURE__ */ jsx25(PaginationChevronLeft, {}),
3868
+ /* @__PURE__ */ jsx25("span", { className: "hidden sm:block", children: renderTextContent(text, {
3467
3869
  as: "span",
3468
3870
  className: "block text-inherit",
3469
3871
  size: "body",
@@ -3478,20 +3880,20 @@ function PaginationNext({
3478
3880
  text = "Next",
3479
3881
  ...props
3480
3882
  }) {
3481
- return /* @__PURE__ */ jsxs13(
3883
+ return /* @__PURE__ */ jsxs14(
3482
3884
  PaginationLink,
3483
3885
  {
3484
3886
  "aria-label": "Go to next page",
3485
3887
  className: cn("gap-2 px-4", className),
3486
3888
  ...props,
3487
3889
  children: [
3488
- /* @__PURE__ */ jsx22("span", { className: "hidden sm:block", children: renderTextContent(text, {
3890
+ /* @__PURE__ */ jsx25("span", { className: "hidden sm:block", children: renderTextContent(text, {
3489
3891
  as: "span",
3490
3892
  className: "block text-inherit",
3491
3893
  size: "body",
3492
3894
  style: inheritedTypographyStyle
3493
3895
  }) }),
3494
- /* @__PURE__ */ jsx22(PaginationChevronRight, {})
3896
+ /* @__PURE__ */ jsx25(PaginationChevronRight, {})
3495
3897
  ]
3496
3898
  }
3497
3899
  );
@@ -3500,7 +3902,7 @@ function PaginationEllipsis({
3500
3902
  className,
3501
3903
  ...props
3502
3904
  }) {
3503
- return /* @__PURE__ */ jsxs13(
3905
+ return /* @__PURE__ */ jsxs14(
3504
3906
  "span",
3505
3907
  {
3506
3908
  "aria-hidden": "true",
@@ -3510,90 +3912,22 @@ function PaginationEllipsis({
3510
3912
  ),
3511
3913
  ...props,
3512
3914
  children: [
3513
- /* @__PURE__ */ jsx22("span", { children: renderTextContent("...", {
3915
+ /* @__PURE__ */ jsx25("span", { children: renderTextContent("...", {
3514
3916
  as: "span",
3515
3917
  className: "block text-inherit",
3516
3918
  size: "h5",
3517
3919
  style: inheritedTypographyStyle
3518
3920
  }) }),
3519
- /* @__PURE__ */ jsx22("span", { className: "sr-only", children: "More pages" })
3921
+ /* @__PURE__ */ jsx25("span", { className: "sr-only", children: "More pages" })
3520
3922
  ]
3521
3923
  }
3522
3924
  );
3523
3925
  }
3524
3926
 
3525
- // src/components/popover.tsx
3526
- import * as React21 from "react";
3527
- import * as PopoverPrimitive from "@radix-ui/react-popover";
3528
- import { jsx as jsx23 } from "react/jsx-runtime";
3529
- var Popover = PopoverPrimitive.Root;
3530
- var PopoverTrigger = PopoverPrimitive.Trigger;
3531
- var PopoverAnchor = PopoverPrimitive.Anchor;
3532
- var PopoverPortal = PopoverPrimitive.Portal;
3533
- var PopoverClose = PopoverPrimitive.Close;
3534
- var PopoverContent = React21.forwardRef(function PopoverContent2({
3535
- align = "center",
3536
- className,
3537
- collisionPadding = 8,
3538
- sideOffset = 8,
3539
- ...props
3540
- }, ref) {
3541
- return /* @__PURE__ */ jsx23(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx23(
3542
- PopoverPrimitive.Content,
3543
- {
3544
- ref,
3545
- align,
3546
- collisionPadding,
3547
- sideOffset,
3548
- "data-slot": "popover-content",
3549
- className: cn(
3550
- "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",
3551
- className
3552
- ),
3553
- ...props
3554
- }
3555
- ) });
3556
- });
3557
- PopoverContent.displayName = PopoverPrimitive.Content.displayName;
3558
- var PopoverTitle = React21.forwardRef(function PopoverTitle2({ children, className, ...props }, ref) {
3559
- return /* @__PURE__ */ jsx23(
3560
- "h4",
3561
- {
3562
- ref,
3563
- "data-slot": "popover-title",
3564
- className: cn("text-[hsl(var(--sofya-popover-foreground))]", className),
3565
- ...props,
3566
- children: renderTextContent(children, {
3567
- as: "span",
3568
- className: "block text-[hsl(var(--sofya-popover-foreground))]",
3569
- size: "h4"
3570
- })
3571
- }
3572
- );
3573
- });
3574
- PopoverTitle.displayName = "PopoverTitle";
3575
- var PopoverDescription = React21.forwardRef(function PopoverDescription2({ children, className, ...props }, ref) {
3576
- return /* @__PURE__ */ jsx23(
3577
- "p",
3578
- {
3579
- ref,
3580
- "data-slot": "popover-description",
3581
- className: cn("text-muted-foreground", className),
3582
- ...props,
3583
- children: renderTextContent(children, {
3584
- as: "span",
3585
- className: "block text-muted-foreground",
3586
- size: "body"
3587
- })
3588
- }
3589
- );
3590
- });
3591
- PopoverDescription.displayName = "PopoverDescription";
3592
-
3593
3927
  // src/components/progress.tsx
3594
- import * as React22 from "react";
3928
+ import * as React24 from "react";
3595
3929
  import * as ProgressPrimitive from "@radix-ui/react-progress";
3596
- import { jsx as jsx24 } from "react/jsx-runtime";
3930
+ import { jsx as jsx26 } from "react/jsx-runtime";
3597
3931
  var progressSizeOptions = ["sm", "default", "lg"];
3598
3932
  function clampProgressValue(value, max) {
3599
3933
  if (Number.isNaN(value)) {
@@ -3601,7 +3935,7 @@ function clampProgressValue(value, max) {
3601
3935
  }
3602
3936
  return Math.min(Math.max(value, 0), max);
3603
3937
  }
3604
- var Progress = React22.forwardRef(function Progress2({
3938
+ var Progress = React24.forwardRef(function Progress2({
3605
3939
  className,
3606
3940
  indicatorClassName,
3607
3941
  max = 100,
@@ -3612,7 +3946,7 @@ var Progress = React22.forwardRef(function Progress2({
3612
3946
  const safeMax = max > 0 ? max : 100;
3613
3947
  const resolvedValue = typeof value === "number" ? clampProgressValue(value, safeMax) : null;
3614
3948
  const progressScale = resolvedValue === null ? void 0 : Number((resolvedValue / safeMax).toFixed(4));
3615
- return /* @__PURE__ */ jsx24(
3949
+ return /* @__PURE__ */ jsx26(
3616
3950
  ProgressPrimitive.Root,
3617
3951
  {
3618
3952
  ref,
@@ -3625,7 +3959,7 @@ var Progress = React22.forwardRef(function Progress2({
3625
3959
  className
3626
3960
  ),
3627
3961
  ...props,
3628
- children: /* @__PURE__ */ jsx24(
3962
+ children: /* @__PURE__ */ jsx26(
3629
3963
  ProgressPrimitive.Indicator,
3630
3964
  {
3631
3965
  "data-slot": "progress-indicator",
@@ -3642,12 +3976,12 @@ var Progress = React22.forwardRef(function Progress2({
3642
3976
  Progress.displayName = ProgressPrimitive.Root.displayName;
3643
3977
 
3644
3978
  // src/components/radio-group.tsx
3645
- import * as React23 from "react";
3979
+ import * as React25 from "react";
3646
3980
  import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
3647
- import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
3981
+ import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
3648
3982
  var radioGroupOrientationOptions = ["horizontal", "vertical"];
3649
- var RadioGroup2 = React23.forwardRef(function RadioGroup3({ className, ...props }, ref) {
3650
- return /* @__PURE__ */ jsx25(
3983
+ var RadioGroup2 = React25.forwardRef(function RadioGroup3({ className, ...props }, ref) {
3984
+ return /* @__PURE__ */ jsx27(
3651
3985
  RadioGroupPrimitive.Root,
3652
3986
  {
3653
3987
  ref,
@@ -3661,7 +3995,7 @@ var RadioGroup2 = React23.forwardRef(function RadioGroup3({ className, ...props
3661
3995
  );
3662
3996
  });
3663
3997
  RadioGroup2.displayName = RadioGroupPrimitive.Root.displayName;
3664
- var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3998
+ var RadioGroupItem = React25.forwardRef(function RadioGroupItem2({
3665
3999
  className,
3666
4000
  controlClassName,
3667
4001
  description,
@@ -3673,12 +4007,12 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3673
4007
  labelClassName,
3674
4008
  ...props
3675
4009
  }, ref) {
3676
- const generatedId = React23.useId();
4010
+ const generatedId = React25.useId();
3677
4011
  const resolvedId = id ?? generatedId;
3678
4012
  const labelId = label ? `${resolvedId}-label` : void 0;
3679
4013
  const descriptionId = description ? `${resolvedId}-description` : void 0;
3680
4014
  const alignClassName = description ? "items-start" : "items-center";
3681
- return /* @__PURE__ */ jsxs14(
4015
+ return /* @__PURE__ */ jsxs15(
3682
4016
  "label",
3683
4017
  {
3684
4018
  className: selectionControlContainerClasses({
@@ -3687,7 +4021,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3687
4021
  disabled
3688
4022
  }),
3689
4023
  children: [
3690
- /* @__PURE__ */ jsx25(
4024
+ /* @__PURE__ */ jsx27(
3691
4025
  RadioGroupPrimitive.Item,
3692
4026
  {
3693
4027
  ref,
@@ -3703,7 +4037,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3703
4037
  controlClassName
3704
4038
  ),
3705
4039
  ...props,
3706
- children: /* @__PURE__ */ jsx25(RadioGroupPrimitive.Indicator, { asChild: true, children: /* @__PURE__ */ jsx25(
4040
+ children: /* @__PURE__ */ jsx27(RadioGroupPrimitive.Indicator, { asChild: true, children: /* @__PURE__ */ jsx27(
3707
4041
  "span",
3708
4042
  {
3709
4043
  "data-slot": "radio-group-indicator",
@@ -3715,8 +4049,8 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3715
4049
  ) })
3716
4050
  }
3717
4051
  ),
3718
- label || description ? /* @__PURE__ */ jsxs14("span", { className: selectionControlContentBaseClasses, children: [
3719
- label ? /* @__PURE__ */ jsx25(
4052
+ label || description ? /* @__PURE__ */ jsxs15("span", { className: selectionControlContentBaseClasses, children: [
4053
+ label ? /* @__PURE__ */ jsx27(
3720
4054
  "span",
3721
4055
  {
3722
4056
  id: labelId,
@@ -3727,11 +4061,11 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3727
4061
  children: renderTextContent(label, {
3728
4062
  as: "span",
3729
4063
  className: "text-[color:var(--sofya-text-default)]",
3730
- size: "body"
4064
+ size: "tiny"
3731
4065
  })
3732
4066
  }
3733
4067
  ) : null,
3734
- description ? /* @__PURE__ */ jsx25(
4068
+ description ? /* @__PURE__ */ jsx27(
3735
4069
  "span",
3736
4070
  {
3737
4071
  id: descriptionId,
@@ -3742,7 +4076,7 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3742
4076
  children: renderTextContent(description, {
3743
4077
  as: "span",
3744
4078
  className: "text-muted-foreground",
3745
- size: "body"
4079
+ size: "tiny"
3746
4080
  })
3747
4081
  }
3748
4082
  ) : null
@@ -3754,12 +4088,12 @@ var RadioGroupItem = React23.forwardRef(function RadioGroupItem2({
3754
4088
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
3755
4089
 
3756
4090
  // src/components/scroll-area.tsx
3757
- import * as React24 from "react";
4091
+ import * as React26 from "react";
3758
4092
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
3759
- import { jsx as jsx26 } from "react/jsx-runtime";
4093
+ import { jsx as jsx28 } from "react/jsx-runtime";
3760
4094
  var scrollAreaOrientationOptions = ["horizontal", "vertical"];
3761
- var ScrollArea = React24.forwardRef(function ScrollArea2({ className, ...props }, ref) {
3762
- return /* @__PURE__ */ jsx26(
4095
+ var ScrollArea = React26.forwardRef(function ScrollArea2({ className, ...props }, ref) {
4096
+ return /* @__PURE__ */ jsx28(
3763
4097
  ScrollAreaPrimitive.Root,
3764
4098
  {
3765
4099
  ref,
@@ -3770,8 +4104,8 @@ var ScrollArea = React24.forwardRef(function ScrollArea2({ className, ...props }
3770
4104
  );
3771
4105
  });
3772
4106
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
3773
- var ScrollAreaViewport = React24.forwardRef(function ScrollAreaViewport2({ className, ...props }, ref) {
3774
- return /* @__PURE__ */ jsx26(
4107
+ var ScrollAreaViewport = React26.forwardRef(function ScrollAreaViewport2({ className, ...props }, ref) {
4108
+ return /* @__PURE__ */ jsx28(
3775
4109
  ScrollAreaPrimitive.Viewport,
3776
4110
  {
3777
4111
  ref,
@@ -3785,8 +4119,8 @@ var ScrollAreaViewport = React24.forwardRef(function ScrollAreaViewport2({ class
3785
4119
  );
3786
4120
  });
3787
4121
  ScrollAreaViewport.displayName = ScrollAreaPrimitive.Viewport.displayName;
3788
- var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ className, orientation = "vertical", thumbClassName, ...props }, ref) {
3789
- return /* @__PURE__ */ jsx26(
4122
+ var ScrollAreaScrollbar = React26.forwardRef(function ScrollAreaScrollbar2({ className, orientation = "vertical", thumbClassName, ...props }, ref) {
4123
+ return /* @__PURE__ */ jsx28(
3790
4124
  ScrollAreaPrimitive.Scrollbar,
3791
4125
  {
3792
4126
  ref,
@@ -3797,7 +4131,7 @@ var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ cla
3797
4131
  className
3798
4132
  ),
3799
4133
  ...props,
3800
- children: /* @__PURE__ */ jsx26(
4134
+ children: /* @__PURE__ */ jsx28(
3801
4135
  ScrollAreaPrimitive.Thumb,
3802
4136
  {
3803
4137
  "data-slot": "scroll-area-thumb",
@@ -3811,8 +4145,8 @@ var ScrollAreaScrollbar = React24.forwardRef(function ScrollAreaScrollbar2({ cla
3811
4145
  );
3812
4146
  });
3813
4147
  ScrollAreaScrollbar.displayName = ScrollAreaPrimitive.Scrollbar.displayName;
3814
- var ScrollAreaCorner = React24.forwardRef(function ScrollAreaCorner2({ className, ...props }, ref) {
3815
- return /* @__PURE__ */ jsx26(
4148
+ var ScrollAreaCorner = React26.forwardRef(function ScrollAreaCorner2({ className, ...props }, ref) {
4149
+ return /* @__PURE__ */ jsx28(
3816
4150
  ScrollAreaPrimitive.Corner,
3817
4151
  {
3818
4152
  ref,
@@ -3825,34 +4159,34 @@ var ScrollAreaCorner = React24.forwardRef(function ScrollAreaCorner2({ className
3825
4159
  ScrollAreaCorner.displayName = ScrollAreaPrimitive.Corner.displayName;
3826
4160
 
3827
4161
  // src/components/select.tsx
3828
- import * as React25 from "react";
4162
+ import * as React27 from "react";
3829
4163
  import * as SelectPrimitive from "@radix-ui/react-select";
3830
4164
 
3831
4165
  // src/lib/form-control-classes.ts
3832
4166
  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)]";
3833
4167
 
3834
4168
  // src/components/select.tsx
3835
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
4169
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
3836
4170
  var selectSizeOptions = ["default", "sm"];
3837
4171
  var Select = SelectPrimitive.Root;
3838
4172
  var SelectGroup = SelectPrimitive.Group;
3839
- var SelectValue = React25.forwardRef(function SelectValue2({ className, ...props }, ref) {
3840
- return /* @__PURE__ */ jsx27(
4173
+ var SelectValue = React27.forwardRef(function SelectValue2({ className, ...props }, ref) {
4174
+ return /* @__PURE__ */ jsx29(
3841
4175
  Text,
3842
4176
  {
3843
4177
  ref,
3844
4178
  as: "span",
3845
4179
  "data-slot": "select-value",
3846
4180
  className: cn("block truncate text-inherit", className),
3847
- size: "body",
4181
+ size: "tiny",
3848
4182
  style: inheritedTypographyStyle,
3849
- children: /* @__PURE__ */ jsx27(SelectPrimitive.Value, { className: "block truncate", ...props })
4183
+ children: /* @__PURE__ */ jsx29(SelectPrimitive.Value, { className: "block truncate", ...props })
3850
4184
  }
3851
4185
  );
3852
4186
  });
3853
4187
  SelectValue.displayName = SelectPrimitive.Value.displayName;
3854
- var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, children, size = "default", ...props }, ref) {
3855
- return /* @__PURE__ */ jsxs15(
4188
+ var SelectTrigger = React27.forwardRef(function SelectTrigger2({ className, children, size = "default", ...props }, ref) {
4189
+ return /* @__PURE__ */ jsxs16(
3856
4190
  SelectPrimitive.Trigger,
3857
4191
  {
3858
4192
  ref,
@@ -3866,7 +4200,7 @@ var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, chil
3866
4200
  ...props,
3867
4201
  children: [
3868
4202
  children,
3869
- /* @__PURE__ */ jsx27(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx27(
4203
+ /* @__PURE__ */ jsx29(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx29(
3870
4204
  Icon,
3871
4205
  {
3872
4206
  name: "caret-down",
@@ -3879,8 +4213,8 @@ var SelectTrigger = React25.forwardRef(function SelectTrigger2({ className, chil
3879
4213
  );
3880
4214
  });
3881
4215
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
3882
- var SelectScrollUpButton = React25.forwardRef(function SelectScrollUpButton2({ className, ...props }, ref) {
3883
- return /* @__PURE__ */ jsx27(
4216
+ var SelectScrollUpButton = React27.forwardRef(function SelectScrollUpButton2({ className, ...props }, ref) {
4217
+ return /* @__PURE__ */ jsx29(
3884
4218
  SelectPrimitive.ScrollUpButton,
3885
4219
  {
3886
4220
  ref,
@@ -3890,13 +4224,13 @@ var SelectScrollUpButton = React25.forwardRef(function SelectScrollUpButton2({ c
3890
4224
  className
3891
4225
  ),
3892
4226
  ...props,
3893
- children: /* @__PURE__ */ jsx27(Icon, { name: "caret-up", size: 12 })
4227
+ children: /* @__PURE__ */ jsx29(Icon, { name: "caret-up", size: 12 })
3894
4228
  }
3895
4229
  );
3896
4230
  });
3897
4231
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
3898
- var SelectScrollDownButton = React25.forwardRef(function SelectScrollDownButton2({ className, ...props }, ref) {
3899
- return /* @__PURE__ */ jsx27(
4232
+ var SelectScrollDownButton = React27.forwardRef(function SelectScrollDownButton2({ className, ...props }, ref) {
4233
+ return /* @__PURE__ */ jsx29(
3900
4234
  SelectPrimitive.ScrollDownButton,
3901
4235
  {
3902
4236
  ref,
@@ -3906,13 +4240,13 @@ var SelectScrollDownButton = React25.forwardRef(function SelectScrollDownButton2
3906
4240
  className
3907
4241
  ),
3908
4242
  ...props,
3909
- children: /* @__PURE__ */ jsx27(Icon, { name: "caret-down", size: 12 })
4243
+ children: /* @__PURE__ */ jsx29(Icon, { name: "caret-down", size: 12 })
3910
4244
  }
3911
4245
  );
3912
4246
  });
3913
4247
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
3914
- var SelectContent = React25.forwardRef(function SelectContent2({ className, children, position = "popper", ...props }, ref) {
3915
- return /* @__PURE__ */ jsx27(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs15(
4248
+ var SelectContent = React27.forwardRef(function SelectContent2({ className, children, position = "popper", ...props }, ref) {
4249
+ return /* @__PURE__ */ jsx29(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs16(
3916
4250
  SelectPrimitive.Content,
3917
4251
  {
3918
4252
  ref,
@@ -3925,8 +4259,8 @@ var SelectContent = React25.forwardRef(function SelectContent2({ className, chil
3925
4259
  ),
3926
4260
  ...props,
3927
4261
  children: [
3928
- /* @__PURE__ */ jsx27(SelectScrollUpButton, {}),
3929
- /* @__PURE__ */ jsx27(
4262
+ /* @__PURE__ */ jsx29(SelectScrollUpButton, {}),
4263
+ /* @__PURE__ */ jsx29(
3930
4264
  SelectPrimitive.Viewport,
3931
4265
  {
3932
4266
  "data-slot": "select-viewport",
@@ -3934,14 +4268,14 @@ var SelectContent = React25.forwardRef(function SelectContent2({ className, chil
3934
4268
  children
3935
4269
  }
3936
4270
  ),
3937
- /* @__PURE__ */ jsx27(SelectScrollDownButton, {})
4271
+ /* @__PURE__ */ jsx29(SelectScrollDownButton, {})
3938
4272
  ]
3939
4273
  }
3940
4274
  ) });
3941
4275
  });
3942
4276
  SelectContent.displayName = SelectPrimitive.Content.displayName;
3943
- var SelectLabel = React25.forwardRef(function SelectLabel2({ className, ...props }, ref) {
3944
- return /* @__PURE__ */ jsx27(
4277
+ var SelectLabel = React27.forwardRef(function SelectLabel2({ className, ...props }, ref) {
4278
+ return /* @__PURE__ */ jsx29(
3945
4279
  SelectPrimitive.Label,
3946
4280
  {
3947
4281
  ref,
@@ -3963,32 +4297,32 @@ var SelectLabel = React25.forwardRef(function SelectLabel2({ className, ...props
3963
4297
  );
3964
4298
  });
3965
4299
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
3966
- var SelectItem = React25.forwardRef(function SelectItem2({ className, children, ...props }, ref) {
3967
- return /* @__PURE__ */ jsxs15(
4300
+ var SelectItem = React27.forwardRef(function SelectItem2({ className, children, ...props }, ref) {
4301
+ return /* @__PURE__ */ jsxs16(
3968
4302
  SelectPrimitive.Item,
3969
4303
  {
3970
4304
  ref,
3971
4305
  "data-slot": "select-item",
3972
4306
  className: cn(
3973
- "relative flex min-w-0 cursor-pointer select-none items-center self-stretch rounded-[8px] px-4 py-2 pr-8 [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)] outline-none transition-colors duration-sofya ease-sofya data-[disabled]:pointer-events-none data-[disabled]:opacity-40 data-[highlighted]:bg-[color:var(--sofya-surface-hover)] data-[highlighted]:text-[color:var(--sofya-text-default)] data-[state=checked]:bg-[color:var(--sofya-surface-selected)]",
4307
+ "relative flex min-w-0 cursor-pointer select-none items-center self-stretch rounded-[8px] px-4 py-2 pr-8 [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[var(--sofya-text-tiny-line-height)] tracking-[var(--sofya-text-tiny-letter-spacing)] text-[color:var(--sofya-text-default)] outline-none transition-colors duration-sofya ease-sofya data-[disabled]:pointer-events-none data-[disabled]:opacity-40 data-[highlighted]:bg-[color:var(--sofya-surface-hover)] data-[highlighted]:text-[color:var(--sofya-text-default)] data-[state=checked]:bg-[color:var(--sofya-surface-selected)]",
3974
4308
  className
3975
4309
  ),
3976
4310
  ...props,
3977
4311
  children: [
3978
- /* @__PURE__ */ jsx27(SelectPrimitive.ItemText, { className: "truncate", children: renderTextContent(children, {
4312
+ /* @__PURE__ */ jsx29(SelectPrimitive.ItemText, { className: "truncate", children: renderTextContent(children, {
3979
4313
  as: "span",
3980
4314
  className: "block truncate text-[color:var(--sofya-text-default)]",
3981
- size: "body",
4315
+ size: "tiny",
3982
4316
  style: inheritedTypographyStyle
3983
4317
  }) }),
3984
- /* @__PURE__ */ jsx27(SelectPrimitive.ItemIndicator, { asChild: true, children: /* @__PURE__ */ jsx27("span", { className: "absolute right-4 inline-flex h-4 w-4 items-center justify-center text-primary", children: /* @__PURE__ */ jsx27(Icon, { name: "check", size: 14 }) }) })
4318
+ /* @__PURE__ */ jsx29(SelectPrimitive.ItemIndicator, { asChild: true, children: /* @__PURE__ */ jsx29("span", { className: "absolute right-4 inline-flex h-4 w-4 items-center justify-center text-primary", children: /* @__PURE__ */ jsx29(Icon, { name: "check", size: 14 }) }) })
3985
4319
  ]
3986
4320
  }
3987
4321
  );
3988
4322
  });
3989
4323
  SelectItem.displayName = SelectPrimitive.Item.displayName;
3990
- var SelectSeparator = React25.forwardRef(function SelectSeparator2({ className, ...props }, ref) {
3991
- return /* @__PURE__ */ jsx27(
4324
+ var SelectSeparator = React27.forwardRef(function SelectSeparator2({ className, ...props }, ref) {
4325
+ return /* @__PURE__ */ jsx29(
3992
4326
  SelectPrimitive.Separator,
3993
4327
  {
3994
4328
  ref,
@@ -4001,11 +4335,11 @@ var SelectSeparator = React25.forwardRef(function SelectSeparator2({ className,
4001
4335
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
4002
4336
 
4003
4337
  // src/components/separator.tsx
4004
- import * as React26 from "react";
4338
+ import * as React28 from "react";
4005
4339
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
4006
- import { jsx as jsx28 } from "react/jsx-runtime";
4007
- var Separator2 = React26.forwardRef(function Separator3({ className, decorative = true, orientation = "horizontal", ...props }, ref) {
4008
- return /* @__PURE__ */ jsx28(
4340
+ import { jsx as jsx30 } from "react/jsx-runtime";
4341
+ var Separator2 = React28.forwardRef(function Separator3({ className, decorative = true, orientation = "horizontal", ...props }, ref) {
4342
+ return /* @__PURE__ */ jsx30(
4009
4343
  SeparatorPrimitive.Root,
4010
4344
  {
4011
4345
  ref,
@@ -4024,8 +4358,8 @@ var Separator2 = React26.forwardRef(function Separator3({ className, decorative
4024
4358
  Separator2.displayName = SeparatorPrimitive.Root.displayName;
4025
4359
 
4026
4360
  // src/components/slider.tsx
4027
- import * as React27 from "react";
4028
- import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
4361
+ import * as React29 from "react";
4362
+ import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
4029
4363
  function clampSliderValue(value, min, max) {
4030
4364
  if (Number.isNaN(value)) {
4031
4365
  return min;
@@ -4050,7 +4384,7 @@ function resolveSliderMeasurement(value, fallback) {
4050
4384
  function isTextValue(value) {
4051
4385
  return typeof value === "string" || typeof value === "number";
4052
4386
  }
4053
- var Slider = React27.forwardRef(function Slider2({
4387
+ var Slider = React29.forwardRef(function Slider2({
4054
4388
  className,
4055
4389
  defaultValue,
4056
4390
  formatValue,
@@ -4073,7 +4407,7 @@ var Slider = React27.forwardRef(function Slider2({
4073
4407
  valueClassName,
4074
4408
  ...props
4075
4409
  }, ref) {
4076
- const resolvedId = React27.useId();
4410
+ const resolvedId = React29.useId();
4077
4411
  const inputId = id ?? resolvedId;
4078
4412
  const safeMin = min;
4079
4413
  const safeMax = resolveSliderMax(safeMin, max);
@@ -4082,7 +4416,7 @@ var Slider = React27.forwardRef(function Slider2({
4082
4416
  onChange: onValueChange,
4083
4417
  value
4084
4418
  });
4085
- React27.useEffect(() => {
4419
+ React29.useEffect(() => {
4086
4420
  if (value !== void 0) {
4087
4421
  return;
4088
4422
  }
@@ -4129,14 +4463,14 @@ var Slider = React27.forwardRef(function Slider2({
4129
4463
  setControllableValue(nextValue);
4130
4464
  onChange?.(event);
4131
4465
  };
4132
- return /* @__PURE__ */ jsxs16(
4466
+ return /* @__PURE__ */ jsxs17(
4133
4467
  "div",
4134
4468
  {
4135
4469
  "data-slot": "slider",
4136
4470
  className: cn("grid w-full gap-2", className),
4137
4471
  children: [
4138
- label || showValue ? /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between gap-4", children: [
4139
- label ? /* @__PURE__ */ jsx29(
4472
+ label || showValue ? /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between gap-4", children: [
4473
+ label ? /* @__PURE__ */ jsx31(
4140
4474
  FieldLabel,
4141
4475
  {
4142
4476
  htmlFor: inputId,
@@ -4147,8 +4481,8 @@ var Slider = React27.forwardRef(function Slider2({
4147
4481
  textClassName: "block min-w-0 text-[color:var(--sofya-text-default)]",
4148
4482
  children: label
4149
4483
  }
4150
- ) : /* @__PURE__ */ jsx29("span", {}),
4151
- showValue ? /* @__PURE__ */ jsx29(
4484
+ ) : /* @__PURE__ */ jsx31("span", {}),
4485
+ showValue ? /* @__PURE__ */ jsx31(
4152
4486
  "div",
4153
4487
  {
4154
4488
  className: cn(
@@ -4166,7 +4500,7 @@ var Slider = React27.forwardRef(function Slider2({
4166
4500
  }
4167
4501
  ) : null
4168
4502
  ] }) : null,
4169
- /* @__PURE__ */ jsxs16(
4503
+ /* @__PURE__ */ jsxs17(
4170
4504
  "div",
4171
4505
  {
4172
4506
  "data-slot": "slider-control",
@@ -4176,7 +4510,7 @@ var Slider = React27.forwardRef(function Slider2({
4176
4510
  ),
4177
4511
  style: controlStyle,
4178
4512
  children: [
4179
- /* @__PURE__ */ jsx29(
4513
+ /* @__PURE__ */ jsx31(
4180
4514
  "input",
4181
4515
  {
4182
4516
  ...props,
@@ -4193,7 +4527,7 @@ var Slider = React27.forwardRef(function Slider2({
4193
4527
  style: inputBoundsStyle
4194
4528
  }
4195
4529
  ),
4196
- /* @__PURE__ */ jsx29(
4530
+ /* @__PURE__ */ jsx31(
4197
4531
  "div",
4198
4532
  {
4199
4533
  "data-slot": "slider-track",
@@ -4204,7 +4538,7 @@ var Slider = React27.forwardRef(function Slider2({
4204
4538
  style: trackBoundsStyle
4205
4539
  }
4206
4540
  ),
4207
- /* @__PURE__ */ jsx29(
4541
+ /* @__PURE__ */ jsx31(
4208
4542
  "div",
4209
4543
  {
4210
4544
  "data-slot": "slider-range",
@@ -4215,7 +4549,7 @@ var Slider = React27.forwardRef(function Slider2({
4215
4549
  style: rangeStyle
4216
4550
  }
4217
4551
  ),
4218
- /* @__PURE__ */ jsx29(
4552
+ /* @__PURE__ */ jsx31(
4219
4553
  "div",
4220
4554
  {
4221
4555
  "data-slot": "slider-thumb",
@@ -4236,10 +4570,10 @@ var Slider = React27.forwardRef(function Slider2({
4236
4570
  Slider.displayName = "Slider";
4237
4571
 
4238
4572
  // src/components/skeleton.tsx
4239
- import * as React28 from "react";
4240
- import { jsx as jsx30 } from "react/jsx-runtime";
4241
- var Skeleton = React28.forwardRef(function Skeleton2({ className, ...props }, ref) {
4242
- return /* @__PURE__ */ jsx30(
4573
+ import * as React30 from "react";
4574
+ import { jsx as jsx32 } from "react/jsx-runtime";
4575
+ var Skeleton = React30.forwardRef(function Skeleton2({ className, ...props }, ref) {
4576
+ return /* @__PURE__ */ jsx32(
4243
4577
  "div",
4244
4578
  {
4245
4579
  ref,
@@ -4254,18 +4588,18 @@ var Skeleton = React28.forwardRef(function Skeleton2({ className, ...props }, re
4254
4588
  Skeleton.displayName = "Skeleton";
4255
4589
 
4256
4590
  // src/components/sonner.tsx
4257
- import * as React29 from "react";
4591
+ import * as React31 from "react";
4258
4592
  import {
4259
4593
  Toaster as SonnerToaster,
4260
4594
  toast
4261
4595
  } from "sonner";
4262
- import { jsx as jsx31 } from "react/jsx-runtime";
4596
+ import { jsx as jsx33 } from "react/jsx-runtime";
4263
4597
  var notificationVariantOptions = ["default", "success", "error", "warning"];
4264
4598
  function ToastStatusIcon({
4265
4599
  iconName,
4266
4600
  className
4267
4601
  }) {
4268
- return /* @__PURE__ */ jsx31(
4602
+ return /* @__PURE__ */ jsx33(
4269
4603
  "span",
4270
4604
  {
4271
4605
  "aria-hidden": "true",
@@ -4273,7 +4607,7 @@ function ToastStatusIcon({
4273
4607
  "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full border shadow-sofya-sm",
4274
4608
  className
4275
4609
  ),
4276
- children: /* @__PURE__ */ jsx31(Icon, { name: iconName, size: 16 })
4610
+ children: /* @__PURE__ */ jsx33(Icon, { name: iconName, size: 16 })
4277
4611
  }
4278
4612
  );
4279
4613
  }
@@ -4294,35 +4628,35 @@ var defaultToastClassNames = {
4294
4628
  loading: "border-border bg-card text-foreground"
4295
4629
  };
4296
4630
  var defaultToastIcons = {
4297
- success: /* @__PURE__ */ jsx31(
4631
+ success: /* @__PURE__ */ jsx33(
4298
4632
  ToastStatusIcon,
4299
4633
  {
4300
4634
  iconName: "check",
4301
4635
  className: "border-success/15 bg-success/12 text-success"
4302
4636
  }
4303
4637
  ),
4304
- error: /* @__PURE__ */ jsx31(
4638
+ error: /* @__PURE__ */ jsx33(
4305
4639
  ToastStatusIcon,
4306
4640
  {
4307
4641
  iconName: "x",
4308
4642
  className: "border-destructive/15 bg-destructive/12 text-destructive"
4309
4643
  }
4310
4644
  ),
4311
- warning: /* @__PURE__ */ jsx31(
4645
+ warning: /* @__PURE__ */ jsx33(
4312
4646
  ToastStatusIcon,
4313
4647
  {
4314
4648
  iconName: "question",
4315
4649
  className: "border-warning/20 bg-warning/15 text-foreground"
4316
4650
  }
4317
4651
  ),
4318
- info: /* @__PURE__ */ jsx31(
4652
+ info: /* @__PURE__ */ jsx33(
4319
4653
  ToastStatusIcon,
4320
4654
  {
4321
4655
  iconName: "question",
4322
4656
  className: "border-primary/15 bg-primary/10 text-primary"
4323
4657
  }
4324
4658
  ),
4325
- close: /* @__PURE__ */ jsx31(Icon, { name: "x", size: 12 })
4659
+ close: /* @__PURE__ */ jsx33(Icon, { name: "x", size: 12 })
4326
4660
  };
4327
4661
  function mergeToastClassNames(overrides) {
4328
4662
  return {
@@ -4330,7 +4664,7 @@ function mergeToastClassNames(overrides) {
4330
4664
  ...overrides
4331
4665
  };
4332
4666
  }
4333
- var Toaster = React29.forwardRef(
4667
+ var Toaster = React31.forwardRef(
4334
4668
  function Toaster2({
4335
4669
  className,
4336
4670
  closeButton = true,
@@ -4342,7 +4676,7 @@ var Toaster = React29.forwardRef(
4342
4676
  visibleToasts = 5,
4343
4677
  ...props
4344
4678
  }, ref) {
4345
- return /* @__PURE__ */ jsx31(
4679
+ return /* @__PURE__ */ jsx33(
4346
4680
  SonnerToaster,
4347
4681
  {
4348
4682
  ref,
@@ -4371,43 +4705,10 @@ var Toaster = React29.forwardRef(
4371
4705
  );
4372
4706
  Toaster.displayName = "Toaster";
4373
4707
 
4374
- // src/components/spinner.tsx
4375
- import * as React30 from "react";
4376
- import { IconLoader2 as IconLoader22 } from "@tabler/icons-react";
4377
- import { jsx as jsx32 } from "react/jsx-runtime";
4378
- var spinnerSizeOptions = ["sm", "default", "lg"];
4379
- var Spinner = React30.forwardRef(function Spinner2({
4380
- "aria-label": ariaLabelProp,
4381
- "aria-labelledby": ariaLabelledby,
4382
- className,
4383
- role = "status",
4384
- size = "default",
4385
- ...props
4386
- }, ref) {
4387
- const ariaLabel = ariaLabelProp ?? (ariaLabelledby ? void 0 : "Loading");
4388
- return /* @__PURE__ */ jsx32(
4389
- IconLoader22,
4390
- {
4391
- ref,
4392
- "data-size": size,
4393
- "data-slot": "spinner",
4394
- role,
4395
- "aria-label": ariaLabel,
4396
- "aria-labelledby": ariaLabelledby,
4397
- className: cn(
4398
- "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",
4399
- className
4400
- ),
4401
- ...props
4402
- }
4403
- );
4404
- });
4405
- Spinner.displayName = "Spinner";
4406
-
4407
4708
  // src/components/switch.tsx
4408
- import * as React31 from "react";
4709
+ import * as React32 from "react";
4409
4710
  import * as SwitchPrimitives from "@radix-ui/react-switch";
4410
- import { jsx as jsx33, jsxs as jsxs17 } from "react/jsx-runtime";
4711
+ import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
4411
4712
  var switchSizeOptions = ["default", "sm"];
4412
4713
  var switchRootSizeClasses = {
4413
4714
  default: "h-6 w-11",
@@ -4417,7 +4718,7 @@ var switchThumbSizeClasses = {
4417
4718
  default: "h-5 w-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
4418
4719
  sm: "h-4 w-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
4419
4720
  };
4420
- var Switch = React31.forwardRef(
4721
+ var Switch = React32.forwardRef(
4421
4722
  ({
4422
4723
  "aria-describedby": ariaDescribedBy,
4423
4724
  "aria-labelledby": ariaLabelledBy,
@@ -4432,7 +4733,7 @@ var Switch = React31.forwardRef(
4432
4733
  size,
4433
4734
  ...props
4434
4735
  }, ref) => {
4435
- const generatedId = React31.useId();
4736
+ const generatedId = React32.useId();
4436
4737
  const resolvedId = id ?? generatedId;
4437
4738
  const labelId = label ? `${resolvedId}-label` : void 0;
4438
4739
  const descriptionId = description ? `${resolvedId}-description` : void 0;
@@ -4441,7 +4742,7 @@ var Switch = React31.forwardRef(
4441
4742
  const alignClassName = description ? "items-start" : "items-center";
4442
4743
  const resolvedAriaDescribedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" ") || void 0;
4443
4744
  const resolvedAriaLabelledBy = ariaLabelledBy ?? labelId;
4444
- const switchControl = /* @__PURE__ */ jsx33(
4745
+ const switchControl = /* @__PURE__ */ jsx34(
4445
4746
  SwitchPrimitives.Root,
4446
4747
  {
4447
4748
  id: resolvedId,
@@ -4456,7 +4757,7 @@ var Switch = React31.forwardRef(
4456
4757
  "data-size": resolvedSize,
4457
4758
  ...props,
4458
4759
  ref,
4459
- children: /* @__PURE__ */ jsx33(
4760
+ children: /* @__PURE__ */ jsx34(
4460
4761
  SwitchPrimitives.Thumb,
4461
4762
  {
4462
4763
  className: cn(
@@ -4470,7 +4771,7 @@ var Switch = React31.forwardRef(
4470
4771
  if (!hasTextContent) {
4471
4772
  return switchControl;
4472
4773
  }
4473
- return /* @__PURE__ */ jsxs17(
4774
+ return /* @__PURE__ */ jsxs18(
4474
4775
  "div",
4475
4776
  {
4476
4777
  "data-slot": "switch-container",
@@ -4481,8 +4782,8 @@ var Switch = React31.forwardRef(
4481
4782
  }),
4482
4783
  children: [
4483
4784
  switchControl,
4484
- /* @__PURE__ */ jsxs17("span", { className: selectionControlContentBaseClasses, children: [
4485
- label ? /* @__PURE__ */ jsx33("label", { htmlFor: resolvedId, className: selectionControlLabelTextBaseClasses, children: /* @__PURE__ */ jsx33(
4785
+ /* @__PURE__ */ jsxs18("span", { className: selectionControlContentBaseClasses, children: [
4786
+ label ? /* @__PURE__ */ jsx34("label", { htmlFor: resolvedId, className: selectionControlLabelTextBaseClasses, children: /* @__PURE__ */ jsx34(
4486
4787
  "span",
4487
4788
  {
4488
4789
  id: labelId,
@@ -4493,11 +4794,11 @@ var Switch = React31.forwardRef(
4493
4794
  children: renderTextContent(label, {
4494
4795
  as: "span",
4495
4796
  className: "text-[color:var(--sofya-text-default)]",
4496
- size: "body"
4797
+ size: "tiny"
4497
4798
  })
4498
4799
  }
4499
4800
  ) }) : null,
4500
- description ? /* @__PURE__ */ jsx33(
4801
+ description ? /* @__PURE__ */ jsx34(
4501
4802
  "span",
4502
4803
  {
4503
4804
  id: descriptionId,
@@ -4508,7 +4809,7 @@ var Switch = React31.forwardRef(
4508
4809
  children: renderTextContent(description, {
4509
4810
  as: "span",
4510
4811
  className: "text-muted-foreground",
4511
- size: "body"
4812
+ size: "tiny"
4512
4813
  })
4513
4814
  }
4514
4815
  ) : null
@@ -4522,8 +4823,8 @@ Switch.displayName = SwitchPrimitives.Root.displayName;
4522
4823
 
4523
4824
  // src/components/table.tsx
4524
4825
  import { cva as cva8 } from "class-variance-authority";
4525
- import * as React32 from "react";
4526
- import { jsx as jsx34 } from "react/jsx-runtime";
4826
+ import * as React33 from "react";
4827
+ import { jsx as jsx35 } from "react/jsx-runtime";
4527
4828
  var tableCellVariantOptions = ["default", "primary", "muted"];
4528
4829
  var tableStatusToneOptions = [
4529
4830
  "active",
@@ -4573,13 +4874,13 @@ var tableActionButtonVariants = cva8(
4573
4874
  }
4574
4875
  }
4575
4876
  );
4576
- var Table = React32.forwardRef(function Table2({ className, ...props }, ref) {
4577
- return /* @__PURE__ */ jsx34(
4877
+ var Table = React33.forwardRef(function Table2({ className, ...props }, ref) {
4878
+ return /* @__PURE__ */ jsx35(
4578
4879
  "div",
4579
4880
  {
4580
4881
  "data-slot": "table-container",
4581
4882
  className: "relative w-full overflow-x-auto",
4582
- children: /* @__PURE__ */ jsx34(
4883
+ children: /* @__PURE__ */ jsx35(
4583
4884
  "table",
4584
4885
  {
4585
4886
  "data-slot": "table",
@@ -4594,8 +4895,8 @@ var Table = React32.forwardRef(function Table2({ className, ...props }, ref) {
4594
4895
  }
4595
4896
  );
4596
4897
  });
4597
- var TableHeader = React32.forwardRef(function TableHeader2({ className, ...props }, ref) {
4598
- return /* @__PURE__ */ jsx34(
4898
+ var TableHeader = React33.forwardRef(function TableHeader2({ className, ...props }, ref) {
4899
+ return /* @__PURE__ */ jsx35(
4599
4900
  "thead",
4600
4901
  {
4601
4902
  "data-slot": "table-header",
@@ -4608,8 +4909,8 @@ var TableHeader = React32.forwardRef(function TableHeader2({ className, ...props
4608
4909
  }
4609
4910
  );
4610
4911
  });
4611
- var TableBody = React32.forwardRef(function TableBody2({ className, ...props }, ref) {
4612
- return /* @__PURE__ */ jsx34(
4912
+ var TableBody = React33.forwardRef(function TableBody2({ className, ...props }, ref) {
4913
+ return /* @__PURE__ */ jsx35(
4613
4914
  "tbody",
4614
4915
  {
4615
4916
  "data-slot": "table-body",
@@ -4619,8 +4920,8 @@ var TableBody = React32.forwardRef(function TableBody2({ className, ...props },
4619
4920
  }
4620
4921
  );
4621
4922
  });
4622
- var TableFooter = React32.forwardRef(function TableFooter2({ className, ...props }, ref) {
4623
- return /* @__PURE__ */ jsx34(
4923
+ var TableFooter = React33.forwardRef(function TableFooter2({ className, ...props }, ref) {
4924
+ return /* @__PURE__ */ jsx35(
4624
4925
  "tfoot",
4625
4926
  {
4626
4927
  "data-slot": "table-footer",
@@ -4633,8 +4934,8 @@ var TableFooter = React32.forwardRef(function TableFooter2({ className, ...props
4633
4934
  }
4634
4935
  );
4635
4936
  });
4636
- var TableRow = React32.forwardRef(function TableRow2({ className, ...props }, ref) {
4637
- return /* @__PURE__ */ jsx34(
4937
+ var TableRow = React33.forwardRef(function TableRow2({ className, ...props }, ref) {
4938
+ return /* @__PURE__ */ jsx35(
4638
4939
  "tr",
4639
4940
  {
4640
4941
  "data-slot": "table-row",
@@ -4647,8 +4948,8 @@ var TableRow = React32.forwardRef(function TableRow2({ className, ...props }, re
4647
4948
  }
4648
4949
  );
4649
4950
  });
4650
- var TableHead = React32.forwardRef(function TableHead2({ className, children, ...props }, ref) {
4651
- return /* @__PURE__ */ jsx34(
4951
+ var TableHead = React33.forwardRef(function TableHead2({ className, children, ...props }, ref) {
4952
+ return /* @__PURE__ */ jsx35(
4652
4953
  "th",
4653
4954
  {
4654
4955
  "data-slot": "table-head",
@@ -4667,9 +4968,9 @@ var TableHead = React32.forwardRef(function TableHead2({ className, children, ..
4667
4968
  }
4668
4969
  );
4669
4970
  });
4670
- var TableCell = React32.forwardRef(
4971
+ var TableCell = React33.forwardRef(
4671
4972
  function TableCell2({ className, variant, children, ...props }, ref) {
4672
- return /* @__PURE__ */ jsx34(
4973
+ return /* @__PURE__ */ jsx35(
4673
4974
  "td",
4674
4975
  {
4675
4976
  "data-slot": "table-cell",
@@ -4686,8 +4987,8 @@ var TableCell = React32.forwardRef(
4686
4987
  );
4687
4988
  }
4688
4989
  );
4689
- var TableCaption = React32.forwardRef(function TableCaption2({ className, children, ...props }, ref) {
4690
- return /* @__PURE__ */ jsx34(
4990
+ var TableCaption = React33.forwardRef(function TableCaption2({ className, children, ...props }, ref) {
4991
+ return /* @__PURE__ */ jsx35(
4691
4992
  "caption",
4692
4993
  {
4693
4994
  "data-slot": "table-caption",
@@ -4712,7 +5013,7 @@ function TableStatusBadge({
4712
5013
  children,
4713
5014
  ...props
4714
5015
  }) {
4715
- return /* @__PURE__ */ jsx34(
5016
+ return /* @__PURE__ */ jsx35(
4716
5017
  Badge,
4717
5018
  {
4718
5019
  variant: "pill",
@@ -4727,8 +5028,8 @@ function TableStatusBadge({
4727
5028
  }
4728
5029
  );
4729
5030
  }
4730
- var TableActionButton = React32.forwardRef(function TableActionButton2({ className, tone, type = "button", children, ...props }, ref) {
4731
- return /* @__PURE__ */ jsx34(
5031
+ var TableActionButton = React33.forwardRef(function TableActionButton2({ className, tone, type = "button", children, ...props }, ref) {
5032
+ return /* @__PURE__ */ jsx35(
4732
5033
  Button,
4733
5034
  {
4734
5035
  ref,
@@ -4746,8 +5047,8 @@ var TableActionButton = React32.forwardRef(function TableActionButton2({ classNa
4746
5047
  }
4747
5048
  );
4748
5049
  });
4749
- var TableActions = React32.forwardRef(function TableActions2({ className, ...props }, ref) {
4750
- return /* @__PURE__ */ jsx34(
5050
+ var TableActions = React33.forwardRef(function TableActions2({ className, ...props }, ref) {
5051
+ return /* @__PURE__ */ jsx35(
4751
5052
  "div",
4752
5053
  {
4753
5054
  ref,
@@ -4768,10 +5069,10 @@ TableActionButton.displayName = "TableActionButton";
4768
5069
  TableActions.displayName = "TableActions";
4769
5070
 
4770
5071
  // src/components/tabs.tsx
4771
- import * as React33 from "react";
5072
+ import * as React34 from "react";
4772
5073
  import * as TabsPrimitive from "@radix-ui/react-tabs";
4773
5074
  import { motion as motion3 } from "motion/react";
4774
- import { jsx as jsx35, jsxs as jsxs18 } from "react/jsx-runtime";
5075
+ import { jsx as jsx36, jsxs as jsxs19 } from "react/jsx-runtime";
4775
5076
  function resolveDefaultValue(items, defaultValue) {
4776
5077
  if (defaultValue) {
4777
5078
  return defaultValue;
@@ -4795,13 +5096,13 @@ function Tabs({
4795
5096
  onChange: onValueChange,
4796
5097
  value
4797
5098
  });
4798
- const indicatorLayoutId = React33.useId();
4799
- React33.useEffect(() => {
5099
+ const indicatorLayoutId = React34.useId();
5100
+ React34.useEffect(() => {
4800
5101
  if (value === void 0) {
4801
5102
  setUncontrolledCurrentValue(resolvedDefaultValue);
4802
5103
  }
4803
5104
  }, [resolvedDefaultValue, setUncontrolledCurrentValue, value]);
4804
- return /* @__PURE__ */ jsxs18(
5105
+ return /* @__PURE__ */ jsxs19(
4805
5106
  TabsPrimitive.Root,
4806
5107
  {
4807
5108
  className: cn("w-full", className),
@@ -4809,7 +5110,7 @@ function Tabs({
4809
5110
  value: currentValue,
4810
5111
  ...props,
4811
5112
  children: [
4812
- /* @__PURE__ */ jsx35(
5113
+ /* @__PURE__ */ jsx36(
4813
5114
  TabsPrimitive.List,
4814
5115
  {
4815
5116
  "aria-label": "Subtelas navegaveis",
@@ -4820,19 +5121,19 @@ function Tabs({
4820
5121
  children: items.map((item) => {
4821
5122
  const isUnavailable = item.disabled || item.loading;
4822
5123
  const isActive = item.value === currentValue;
4823
- return /* @__PURE__ */ jsxs18(
5124
+ return /* @__PURE__ */ jsxs19(
4824
5125
  TabsPrimitive.Trigger,
4825
5126
  {
4826
5127
  value: item.value,
4827
5128
  disabled: isUnavailable,
4828
5129
  className: cn(
4829
- "relative inline-flex min-h-[76px] shrink-0 items-center justify-center px-8 pb-4 pt-6 [font-family:var(--sofya-text-h5-font-family)] text-[length:var(--sofya-text-h5-font-size)] [font-weight:var(--sofya-text-h5-font-weight)] leading-[var(--sofya-text-h5-line-height)] tracking-[var(--sofya-text-h5-letter-spacing)] text-[color:var(--sofya-text-subtle)] transition-[color,opacity] duration-sofya ease-sofya focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--sofya-focus-ring-soft)] focus-visible:ring-offset-0 disabled:pointer-events-none disabled:text-[color:var(--sofya-text-placeholder)] data-[state=active]:text-primary",
5130
+ "relative inline-flex min-h-[76px] shrink-0 items-center justify-center px-8 pb-4 pt-6 [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-subtle)] transition-[color,opacity] duration-sofya ease-sofya focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--sofya-focus-ring-soft)] focus-visible:ring-offset-0 disabled:pointer-events-none disabled:text-[color:var(--sofya-text-placeholder)] data-[state=active]:text-primary",
4830
5131
  item.loading && "disabled:text-[color:var(--sofya-text-soft)]",
4831
5132
  triggerClassName,
4832
5133
  item.triggerClassName
4833
5134
  ),
4834
5135
  children: [
4835
- isActive ? /* @__PURE__ */ jsx35(
5136
+ isActive ? /* @__PURE__ */ jsx36(
4836
5137
  motion3.span,
4837
5138
  {
4838
5139
  "aria-hidden": "true",
@@ -4842,18 +5143,18 @@ function Tabs({
4842
5143
  transition: { duration: 0.25, ease: "easeInOut" }
4843
5144
  }
4844
5145
  ) : null,
4845
- /* @__PURE__ */ jsxs18("span", { className: "relative z-10 inline-flex items-center gap-2", children: [
4846
- item.loading ? /* @__PURE__ */ jsx35(
5146
+ /* @__PURE__ */ jsxs19("span", { className: "relative z-10 inline-flex items-center gap-2", children: [
5147
+ item.loading ? /* @__PURE__ */ jsx36(
4847
5148
  "span",
4848
5149
  {
4849
5150
  "aria-hidden": "true",
4850
5151
  className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-r-transparent"
4851
5152
  }
4852
5153
  ) : null,
4853
- /* @__PURE__ */ jsx35("span", { children: renderTextContent(item.label, {
5154
+ /* @__PURE__ */ jsx36("span", { children: renderTextContent(item.label, {
4854
5155
  as: "span",
4855
5156
  className: "block text-inherit",
4856
- size: "h5"
5157
+ size: "body"
4857
5158
  }) })
4858
5159
  ] })
4859
5160
  ]
@@ -4864,7 +5165,7 @@ function Tabs({
4864
5165
  }
4865
5166
  ),
4866
5167
  items.map(
4867
- (item) => item.content !== void 0 ? /* @__PURE__ */ jsx35(
5168
+ (item) => item.content !== void 0 ? /* @__PURE__ */ jsx36(
4868
5169
  TabsPrimitive.Content,
4869
5170
  {
4870
5171
  value: item.value,
@@ -4887,9 +5188,9 @@ function Tabs({
4887
5188
  Tabs.displayName = "Tabs";
4888
5189
 
4889
5190
  // src/components/textarea.tsx
4890
- import * as React34 from "react";
4891
- import { jsx as jsx36 } from "react/jsx-runtime";
4892
- var Textarea = React34.forwardRef(
5191
+ import * as React35 from "react";
5192
+ import { jsx as jsx37 } from "react/jsx-runtime";
5193
+ var Textarea = React35.forwardRef(
4893
5194
  ({
4894
5195
  className,
4895
5196
  containerClassName,
@@ -4899,14 +5200,14 @@ var Textarea = React34.forwardRef(
4899
5200
  rows = 5,
4900
5201
  ...props
4901
5202
  }, ref) => {
4902
- const generatedId = React34.useId();
5203
+ const generatedId = React35.useId();
4903
5204
  const resolvedId = id ?? generatedId;
4904
5205
  const ariaLabel = props["aria-label"] ?? (typeof label === "string" ? label : void 0);
4905
- const control = /* @__PURE__ */ jsx36(
5206
+ const control = /* @__PURE__ */ jsx37(
4906
5207
  "textarea",
4907
5208
  {
4908
5209
  className: cn(
4909
- "flex min-h-[120px] w-full resize-y 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-[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-[color:var(--sofya-border-hover)] disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50",
5210
+ "flex min-h-[120px] w-full resize-y rounded-[10px] border border-[color:var(--sofya-border-strong)] bg-card px-4 py-2 [font-family:var(--sofya-text-tiny-font-family)] text-[length:var(--sofya-text-tiny-font-size)] [font-weight:var(--sofya-text-tiny-font-weight)] leading-[var(--sofya-text-tiny-line-height)] tracking-[var(--sofya-text-tiny-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-[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-[color:var(--sofya-border-hover)] disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50",
4910
5211
  className
4911
5212
  ),
4912
5213
  id: resolvedId,
@@ -4916,7 +5217,7 @@ var Textarea = React34.forwardRef(
4916
5217
  "aria-label": ariaLabel
4917
5218
  }
4918
5219
  );
4919
- return /* @__PURE__ */ jsx36(
5220
+ return /* @__PURE__ */ jsx37(
4920
5221
  FieldShell,
4921
5222
  {
4922
5223
  control,
@@ -4931,14 +5232,14 @@ var Textarea = React34.forwardRef(
4931
5232
  Textarea.displayName = "Textarea";
4932
5233
 
4933
5234
  // src/components/tooltip.tsx
4934
- import * as React35 from "react";
5235
+ import * as React36 from "react";
4935
5236
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
4936
- import { jsx as jsx37 } from "react/jsx-runtime";
5237
+ import { jsx as jsx38 } from "react/jsx-runtime";
4937
5238
  var TooltipProvider = TooltipPrimitive.Provider;
4938
5239
  var Tooltip = TooltipPrimitive.Root;
4939
5240
  var TooltipTrigger = TooltipPrimitive.Trigger;
4940
- var TooltipContent = React35.forwardRef(function TooltipContent2({ className, sideOffset = 8, ...props }, ref) {
4941
- return /* @__PURE__ */ jsx37(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx37(
5241
+ var TooltipContent = React36.forwardRef(function TooltipContent2({ className, sideOffset = 8, ...props }, ref) {
5242
+ return /* @__PURE__ */ jsx38(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx38(
4942
5243
  TooltipPrimitive.Content,
4943
5244
  {
4944
5245
  ref,
@@ -4962,13 +5263,13 @@ var TooltipContent = React35.forwardRef(function TooltipContent2({ className, si
4962
5263
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
4963
5264
 
4964
5265
  // src/theme/provider.tsx
4965
- import * as React36 from "react";
5266
+ import * as React37 from "react";
4966
5267
  import {
4967
5268
  createWhitelabelTheme,
4968
5269
  defaultTheme,
4969
5270
  themeToCssVariables
4970
5271
  } from "@sofya-ds/tokens";
4971
- import { jsx as jsx38 } from "react/jsx-runtime";
5272
+ import { jsx as jsx39 } from "react/jsx-runtime";
4972
5273
  var SOFYA_FONT_LINKS = [
4973
5274
  {
4974
5275
  id: "preconnect-googleapis",
@@ -4988,7 +5289,7 @@ var SOFYA_FONT_LINKS = [
4988
5289
  }
4989
5290
  ];
4990
5291
  function useSofyaFontLinks() {
4991
- React36.useEffect(() => {
5292
+ React37.useEffect(() => {
4992
5293
  if (typeof document === "undefined") {
4993
5294
  return;
4994
5295
  }
@@ -5021,7 +5322,7 @@ function SofyaProvider({
5021
5322
  useSofyaFontLinks();
5022
5323
  const theme = createWhitelabelTheme(overrides ?? {}, preset);
5023
5324
  const cssVariables = themeToCssVariables(theme);
5024
- return /* @__PURE__ */ jsx38(
5325
+ return /* @__PURE__ */ jsx39(
5025
5326
  "div",
5026
5327
  {
5027
5328
  "data-sofya-theme": theme.name,
@@ -5084,6 +5385,7 @@ export {
5084
5385
  DialogTitle,
5085
5386
  DialogTrigger,
5086
5387
  Dropdown,
5388
+ DropdownSearch,
5087
5389
  Empty,
5088
5390
  EmptyContent,
5089
5391
  EmptyDescription,