@ecohouse/ui 0.1.6 → 0.1.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.
Files changed (34) hide show
  1. package/README.md +13 -12
  2. package/dist/index.cjs +699 -102
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +137 -3
  5. package/dist/index.d.ts +137 -3
  6. package/dist/index.js +690 -103
  7. package/dist/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/components/CommentCard/CommentCard.stories.tsx +31 -0
  10. package/src/components/CommentCard/CommentCard.tsx +209 -0
  11. package/src/components/CommentCard/index.ts +2 -0
  12. package/src/components/LanguageSwitcher/LanguageSwitcher.stories.tsx +52 -0
  13. package/src/components/LanguageSwitcher/LanguageSwitcher.tsx +287 -0
  14. package/src/components/LanguageSwitcher/index.ts +2 -0
  15. package/src/components/RatingInput/RatingInput.stories.tsx +41 -0
  16. package/src/components/RatingInput/RatingInput.tsx +168 -0
  17. package/src/components/RatingInput/index.ts +2 -0
  18. package/src/components/index.ts +9 -0
  19. package/src/icons/Globe/GlobeIcon.tsx +20 -0
  20. package/src/icons/Globe/GlobeIcon.web.tsx +26 -0
  21. package/src/icons/Globe/globePath.ts +3 -0
  22. package/src/icons/Globe/index.ts +2 -0
  23. package/src/icons/Star/StarIcon.tsx +35 -0
  24. package/src/icons/Star/StarIcon.web.tsx +41 -0
  25. package/src/icons/Star/index.ts +2 -0
  26. package/src/icons/Star/starPath.ts +3 -0
  27. package/src/icons/StarFilled/StarFilledIcon.tsx +28 -0
  28. package/src/icons/StarFilled/StarFilledIcon.web.tsx +34 -0
  29. package/src/icons/StarFilled/index.ts +1 -0
  30. package/src/icons/index.ts +4 -0
  31. package/src/icons/registry.ts +9 -1
  32. package/src/index.ts +22 -1
  33. package/src/theme/index.ts +3 -0
  34. package/src/theme/typography.ts +50 -0
package/dist/index.cjs CHANGED
@@ -107,6 +107,13 @@ var segmentedToggleTypography = {
107
107
  lineHeight: 14,
108
108
  letterSpacing: 0
109
109
  };
110
+ var languageSwitcherTypography = {
111
+ fontFamily: fonts.sans,
112
+ fontSize: 14,
113
+ fontWeight: "600",
114
+ lineHeight: 19,
115
+ letterSpacing: 0
116
+ };
110
117
  var counterTypography = {
111
118
  fontFamily: fonts.sans,
112
119
  fontSize: 14,
@@ -114,6 +121,43 @@ var counterTypography = {
114
121
  lineHeight: 14,
115
122
  letterSpacing: 0
116
123
  };
124
+ var ratingTypography = {
125
+ fontFamily: fonts.sans,
126
+ fontSize: 32,
127
+ fontWeight: "700",
128
+ lineHeight: 35.84,
129
+ letterSpacing: 0
130
+ };
131
+ var commentCardTypography = {
132
+ name: {
133
+ fontFamily: fonts.sans,
134
+ fontSize: 16,
135
+ fontWeight: "600",
136
+ lineHeight: 18,
137
+ letterSpacing: 0
138
+ },
139
+ date: {
140
+ fontFamily: fonts.sans,
141
+ fontSize: 14,
142
+ fontWeight: "400",
143
+ lineHeight: 16,
144
+ letterSpacing: 0
145
+ },
146
+ comment: {
147
+ fontFamily: fonts.sans,
148
+ fontSize: 14,
149
+ fontWeight: "400",
150
+ lineHeight: 19,
151
+ letterSpacing: 0
152
+ },
153
+ action: {
154
+ fontFamily: fonts.sans,
155
+ fontSize: 12,
156
+ fontWeight: "700",
157
+ lineHeight: 12,
158
+ letterSpacing: 0
159
+ }
160
+ };
117
161
  var inputTypography = {
118
162
  label: {
119
163
  fontFamily: fonts.sans,
@@ -451,6 +495,21 @@ function HeartIcon({ size = 20, color = colors.primary, strokeWidth = 1.5 }) {
451
495
  ) });
452
496
  }
453
497
 
498
+ // src/icons/Globe/globePath.ts
499
+ var GLOBE_PATH = "M18.3333 10C18.3333 14.6024 14.6024 18.3333 10 18.3333M18.3333 10C18.3333 5.39763 14.6024 1.66667 10 1.66667M18.3333 10H1.66667M10 18.3333C5.39763 18.3333 1.66667 14.6024 1.66667 10M10 18.3333C12.0833 16.0511 13.2675 13.0836 13.3333 10C13.2675 6.91643 12.0833 3.94892 10 1.66667M10 18.3333C7.91667 16.0511 6.73248 13.0836 6.66667 10C6.73248 6.91643 7.91667 3.94892 10 1.66667M1.66667 10C1.66667 5.39763 5.39763 1.66667 10 1.66667";
500
+ function GlobeIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
501
+ return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
502
+ Svg.Path,
503
+ {
504
+ d: GLOBE_PATH,
505
+ stroke: color,
506
+ strokeWidth,
507
+ strokeLinecap: "round",
508
+ strokeLinejoin: "round"
509
+ }
510
+ ) });
511
+ }
512
+
454
513
  // src/icons/HelpCircle/helpCirclePath.ts
455
514
  var HELP_CIRCLE_PATH = "M6.99971 6.00149C7.11717 5.66757 7.34902 5.386 7.6542 5.20665C7.95937 5.0273 8.31817 4.96174 8.66705 5.02158C9.01593 5.08142 9.33238 5.2628 9.56034 5.5336C9.7883 5.8044 9.91306 6.14714 9.91254 6.50112C9.91254 7.50037 8.41365 8 8.41365 8M8.43298 10H8.43964M8.33304 13.3333C11.4627 13.3333 13.9997 10.7963 13.9997 7.66667C13.9997 4.53705 11.4627 2 8.33304 2C5.20343 2 2.66638 4.53705 2.66638 7.66667C2.66638 8.3 2.77027 8.90906 2.96196 9.47774C3.03409 9.69175 3.07016 9.79875 3.07666 9.88095C3.08309 9.96213 3.07823 10.019 3.05814 10.098C3.03781 10.1779 2.99291 10.261 2.9031 10.4272L1.81267 12.4456C1.65713 12.7335 1.57936 12.8774 1.59676 12.9885C1.61192 13.0853 1.66887 13.1705 1.75249 13.2215C1.84849 13.2801 2.01124 13.2632 2.33674 13.2296L5.75075 12.8767C5.85414 12.866 5.90583 12.8606 5.95295 12.8624C5.99929 12.8642 6.03201 12.8686 6.0772 12.879C6.12315 12.8896 6.18092 12.9118 6.29648 12.9564C6.92851 13.1999 7.61519 13.3333 8.33304 13.3333Z";
456
515
  function HelpCircleIcon({
@@ -711,6 +770,47 @@ function SidebarIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
711
770
  ) });
712
771
  }
713
772
 
773
+ // src/icons/Star/starPath.ts
774
+ var STAR_PATH = "M12.6112 2.09824C12.9186 1.47565 13.0722 1.16436 13.2808 1.0649C13.4623 0.978367 13.6732 0.978367 13.8546 1.0649C14.0632 1.16436 14.2169 1.47565 14.5242 2.09824L17.4398 8.00486C17.5305 8.18866 17.5759 8.28056 17.6422 8.35192C17.7009 8.41509 17.7713 8.46628 17.8495 8.50264C17.9378 8.54371 18.0392 8.55854 18.242 8.58818L24.7637 9.54142C25.4505 9.6418 25.7938 9.69199 25.9528 9.85973C26.091 10.0057 26.156 10.2062 26.1297 10.4055C26.0995 10.6346 25.8509 10.8767 25.3537 11.361L20.6363 15.9557C20.4893 16.0989 20.4157 16.1706 20.3683 16.2558C20.3263 16.3312 20.2993 16.4141 20.2889 16.4998C20.2772 16.5966 20.2945 16.6978 20.3292 16.9001L21.4423 23.39C21.5597 24.0745 21.6184 24.4167 21.5081 24.6198C21.4121 24.7965 21.2415 24.9205 21.0438 24.9571C20.8165 24.9992 20.5092 24.8376 19.8945 24.5144L14.0642 21.4483C13.8826 21.3527 13.7917 21.305 13.696 21.2862C13.6113 21.2696 13.5242 21.2696 13.4394 21.2862C13.3437 21.305 13.2529 21.3527 13.0713 21.4483L7.24094 24.5144C6.62626 24.8376 6.31892 24.9992 6.09167 24.9571C5.89395 24.9205 5.72334 24.7965 5.62736 24.6198C5.51704 24.4167 5.57574 24.0745 5.69314 23.39L6.80622 16.9001C6.84092 16.6978 6.85828 16.5966 6.84653 16.4998C6.83614 16.4141 6.80919 16.3312 6.76718 16.2558C6.71974 16.1706 6.64621 16.0989 6.49916 15.9557L1.78179 11.361C1.28459 10.8767 1.03599 10.6346 1.00574 10.4055C0.979423 10.2062 1.04445 10.0057 1.18271 9.85973C1.34162 9.69199 1.685 9.6418 2.37177 9.54142L8.89346 8.58818C9.09627 8.55854 9.19768 8.54371 9.286 8.50264C9.36419 8.46628 9.43459 8.41509 9.49329 8.35192C9.55958 8.28056 9.60495 8.18866 9.69567 8.00486L12.6112 2.09824Z";
775
+ function StarIcon({
776
+ active = false,
777
+ size = 28,
778
+ height,
779
+ color,
780
+ strokeWidth = 2
781
+ }) {
782
+ const resolvedColor = color ?? (active ? "#E38E5E" : colors.grey150);
783
+ return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: height ?? size * 26 / 28, viewBox: "0 0 28 26", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
784
+ Svg.Path,
785
+ {
786
+ d: STAR_PATH,
787
+ fill: active ? resolvedColor : "none",
788
+ stroke: resolvedColor,
789
+ strokeWidth,
790
+ strokeLinecap: "round",
791
+ strokeLinejoin: "round"
792
+ }
793
+ ) });
794
+ }
795
+ function StarFilledIcon({
796
+ size = 28,
797
+ height,
798
+ color = "#E38E5E",
799
+ strokeWidth = 2
800
+ }) {
801
+ return /* @__PURE__ */ jsxRuntime.jsx(Svg__default.default, { width: size, height: height ?? size * 26 / 28, viewBox: "0 0 28 26", fill: color, children: /* @__PURE__ */ jsxRuntime.jsx(
802
+ Svg.Path,
803
+ {
804
+ d: STAR_PATH,
805
+ fill: color,
806
+ stroke: color,
807
+ strokeWidth,
808
+ strokeLinecap: "round",
809
+ strokeLinejoin: "round"
810
+ }
811
+ ) });
812
+ }
813
+
714
814
  // src/icons/User/userPath.ts
715
815
  var USER_PATH = "M15.8334 17.5C15.8334 14.2783 13.2217 11.6667 10 11.6667C6.77836 11.6667 4.16669 14.2783 4.16669 17.5M10 9.16667C8.15907 9.16667 6.66669 7.67428 6.66669 5.83333C6.66669 3.99238 8.15907 2.5 10 2.5C11.841 2.5 13.3334 3.99238 13.3334 5.83333C13.3334 7.67428 11.841 9.16667 10 9.16667Z";
716
816
  function UserIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
@@ -767,6 +867,7 @@ var icons = {
767
867
  clock: ClockIcon,
768
868
  facebook: FacebookIcon,
769
869
  heart: HeartIcon,
870
+ globe: GlobeIcon,
770
871
  helpCircle: HelpCircleIcon,
771
872
  home: HomeIcon,
772
873
  instagram: InstagramIcon,
@@ -783,6 +884,8 @@ var icons = {
783
884
  settings: SettingsIcon,
784
885
  show: ShowIcon,
785
886
  sidebar: SidebarIcon,
887
+ star: StarIcon,
888
+ starFilled: StarFilledIcon,
786
889
  user: UserIcon,
787
890
  usersAlt: UsersAltIcon,
788
891
  video: VideoIcon
@@ -801,13 +904,15 @@ var iconGroups = {
801
904
  "calendar",
802
905
  "calendarOutline",
803
906
  "heart",
907
+ "star",
908
+ "starFilled",
804
909
  "minus",
805
910
  "plus"
806
911
  ],
807
912
  objects: ["bag", "building", "clock", "user", "usersAlt", "video"],
808
913
  communication: ["mail", "phone"],
809
914
  social: ["facebook", "instagram", "linkedin"],
810
- interface: ["layoutGrid", "sidebar", "settings", "helpCircle", "logOut"]
915
+ interface: ["globe", "layoutGrid", "sidebar", "settings", "helpCircle", "logOut"]
811
916
  };
812
917
  var iconGroupNames = Object.keys(iconGroups);
813
918
  function getIconsByGroup(group) {
@@ -1536,7 +1641,223 @@ var styles5 = reactNative.StyleSheet.create({
1536
1641
  flexShrink: 1
1537
1642
  }
1538
1643
  });
1539
- var ICON_SIZE4 = 28;
1644
+ var defaultLanguageOptions = [
1645
+ { value: "hy", label: "\u0540\u0561\u0575" },
1646
+ { value: "en", label: "Eng" },
1647
+ { value: "ru", label: "\u0420\u0443\u0441" }
1648
+ ];
1649
+ var CONTROL_WIDTH = 90;
1650
+ var CONTROL_HEIGHT = 35;
1651
+ var ICON_SIZE4 = 16;
1652
+ var LanguageSwitcher = react.forwardRef(
1653
+ function LanguageSwitcher2({
1654
+ options = defaultLanguageOptions,
1655
+ value,
1656
+ defaultValue,
1657
+ onValueChange,
1658
+ open: openProp,
1659
+ defaultOpen = false,
1660
+ onOpenChange,
1661
+ disabled = false,
1662
+ accessibilityLabel = "Language",
1663
+ style,
1664
+ className,
1665
+ hitSlop = 8,
1666
+ ...rest
1667
+ }, forwardedRef) {
1668
+ const wrapperRef = react.useRef(null);
1669
+ const triggerRef = react.useRef(null);
1670
+ const setWrapperRef = react.useMemo(() => mergeRefs(wrapperRef, forwardedRef), [forwardedRef]);
1671
+ const firstValue = options[0]?.value ?? "";
1672
+ const isValueControlled = value !== void 0;
1673
+ const isOpenControlled = openProp !== void 0;
1674
+ const [uncontrolledValue, setUncontrolledValue] = react.useState(defaultValue ?? firstValue);
1675
+ const [uncontrolledOpen, setUncontrolledOpen] = react.useState(defaultOpen);
1676
+ const [triggerHovered, setTriggerHovered] = react.useState(false);
1677
+ const [hoveredValue, setHoveredValue] = react.useState(null);
1678
+ const selectedValue = isValueControlled ? value : uncontrolledValue;
1679
+ const isOpen = isOpenControlled ? openProp : uncontrolledOpen;
1680
+ const selectedOption = options.find((option) => option.value === selectedValue) ?? options[0] ?? null;
1681
+ useApplyWebClassName(wrapperRef, className?.trim() || void 0);
1682
+ const setOpen = react.useCallback(
1683
+ (next) => {
1684
+ if (disabled || next === isOpen) return;
1685
+ if (!isOpenControlled) setUncontrolledOpen(next);
1686
+ onOpenChange?.(next);
1687
+ },
1688
+ [disabled, isOpen, isOpenControlled, onOpenChange]
1689
+ );
1690
+ const closeAndFocusTrigger = react.useCallback(() => {
1691
+ setOpen(false);
1692
+ const node = triggerRef.current;
1693
+ node?.focus?.();
1694
+ }, [setOpen]);
1695
+ react.useEffect(() => {
1696
+ if (reactNative.Platform.OS !== "web" || !isOpen) return;
1697
+ const handlePointerDown = (event) => {
1698
+ const wrapper = wrapperRef.current;
1699
+ const target = event.target;
1700
+ if (wrapper?.contains && target instanceof Node && !wrapper.contains(target)) {
1701
+ setOpen(false);
1702
+ }
1703
+ };
1704
+ const handleKeyDown = (event) => {
1705
+ if (event.key === "Escape") {
1706
+ event.preventDefault();
1707
+ closeAndFocusTrigger();
1708
+ }
1709
+ };
1710
+ document.addEventListener("mousedown", handlePointerDown);
1711
+ document.addEventListener("touchstart", handlePointerDown);
1712
+ document.addEventListener("keydown", handleKeyDown);
1713
+ return () => {
1714
+ document.removeEventListener("mousedown", handlePointerDown);
1715
+ document.removeEventListener("touchstart", handlePointerDown);
1716
+ document.removeEventListener("keydown", handleKeyDown);
1717
+ };
1718
+ }, [closeAndFocusTrigger, isOpen, setOpen]);
1719
+ const selectLanguage = (nextValue) => {
1720
+ if (nextValue !== selectedValue) {
1721
+ if (!isValueControlled) setUncontrolledValue(nextValue);
1722
+ onValueChange?.(nextValue);
1723
+ }
1724
+ closeAndFocusTrigger();
1725
+ };
1726
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1727
+ reactNative.View,
1728
+ {
1729
+ ...rest,
1730
+ ref: setWrapperRef,
1731
+ style: [styles6.wrapper, isOpen && styles6.wrapperOpen, disabled && styles6.disabled, style],
1732
+ children: [
1733
+ /* @__PURE__ */ jsxRuntime.jsxs(
1734
+ reactNative.Pressable,
1735
+ {
1736
+ ref: triggerRef,
1737
+ onPress: () => setOpen(!isOpen),
1738
+ disabled: disabled || options.length === 0,
1739
+ hitSlop,
1740
+ accessibilityRole: "button",
1741
+ accessibilityLabel,
1742
+ accessibilityState: { disabled, expanded: isOpen },
1743
+ onHoverIn: () => setTriggerHovered(true),
1744
+ onHoverOut: () => setTriggerHovered(false),
1745
+ style: ({ pressed }) => [
1746
+ styles6.trigger,
1747
+ (triggerHovered || pressed || isOpen) && styles6.triggerActive
1748
+ ],
1749
+ children: [
1750
+ /* @__PURE__ */ jsxRuntime.jsx(GlobeIcon, { size: ICON_SIZE4, color: colors.white, strokeWidth: 2 }),
1751
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles6.triggerLabel, numberOfLines: 1, children: selectedOption?.label ?? "" }),
1752
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles6.chevron, isOpen && styles6.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE4, color: colors.white, strokeWidth: 2 }) })
1753
+ ]
1754
+ }
1755
+ ),
1756
+ isOpen && options.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles6.menu, accessibilityRole: "menu", children: options.map((option) => {
1757
+ const selected = option.value === selectedValue;
1758
+ return /* @__PURE__ */ jsxRuntime.jsx(
1759
+ reactNative.Pressable,
1760
+ {
1761
+ onPress: () => selectLanguage(option.value),
1762
+ accessibilityRole: "menuitem",
1763
+ accessibilityLabel: option.label,
1764
+ accessibilityState: { selected },
1765
+ onHoverIn: () => setHoveredValue(option.value),
1766
+ onHoverOut: () => setHoveredValue(null),
1767
+ style: ({ pressed }) => [
1768
+ styles6.item,
1769
+ selected ? styles6.itemSelected : (hoveredValue === option.value || pressed) && styles6.itemHovered
1770
+ ],
1771
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles6.itemLabel, selected && styles6.itemLabelSelected], children: option.label })
1772
+ },
1773
+ option.value
1774
+ );
1775
+ }) }) : null
1776
+ ]
1777
+ }
1778
+ );
1779
+ }
1780
+ );
1781
+ var styles6 = reactNative.StyleSheet.create({
1782
+ wrapper: {
1783
+ position: "relative",
1784
+ width: CONTROL_WIDTH,
1785
+ alignSelf: "flex-start"
1786
+ },
1787
+ wrapperOpen: {
1788
+ zIndex: 20
1789
+ },
1790
+ disabled: {
1791
+ opacity: 0.6
1792
+ },
1793
+ trigger: {
1794
+ width: CONTROL_WIDTH,
1795
+ height: CONTROL_HEIGHT,
1796
+ flexDirection: "row",
1797
+ alignItems: "center",
1798
+ gap: 8,
1799
+ padding: 8,
1800
+ borderRadius: 12,
1801
+ backgroundColor: "transparent"
1802
+ },
1803
+ triggerActive: {
1804
+ backgroundColor: colors.grey700
1805
+ },
1806
+ triggerLabel: {
1807
+ ...languageSwitcherTypography,
1808
+ ...reactNative.Platform.select({ web: { fontFamily: `${fonts.sans}, sans-serif` } }),
1809
+ minWidth: 0,
1810
+ flex: 1,
1811
+ color: colors.white
1812
+ },
1813
+ chevron: {
1814
+ width: ICON_SIZE4,
1815
+ height: ICON_SIZE4,
1816
+ flexShrink: 0,
1817
+ alignItems: "center",
1818
+ justifyContent: "center"
1819
+ },
1820
+ chevronOpen: {
1821
+ transform: [{ rotate: "180deg" }]
1822
+ },
1823
+ menu: {
1824
+ position: "absolute",
1825
+ top: CONTROL_HEIGHT + 8,
1826
+ left: 0,
1827
+ width: CONTROL_WIDTH,
1828
+ padding: 8,
1829
+ gap: 8,
1830
+ borderRadius: 12,
1831
+ backgroundColor: colors.grey700,
1832
+ ...reactNative.Platform.select({
1833
+ web: { boxShadow: `0 8px 24px ${colors.black}73` },
1834
+ default: { elevation: 8 }
1835
+ })
1836
+ },
1837
+ item: {
1838
+ height: CONTROL_HEIGHT,
1839
+ alignItems: "center",
1840
+ justifyContent: "center",
1841
+ paddingVertical: 8,
1842
+ paddingHorizontal: 12,
1843
+ borderRadius: 8
1844
+ },
1845
+ itemHovered: {
1846
+ backgroundColor: colors.whiteAlpha5
1847
+ },
1848
+ itemSelected: {
1849
+ backgroundColor: colors.primaryMuted
1850
+ },
1851
+ itemLabel: {
1852
+ ...languageSwitcherTypography,
1853
+ ...reactNative.Platform.select({ web: { fontFamily: `${fonts.sans}, sans-serif` } }),
1854
+ color: colors.white
1855
+ },
1856
+ itemLabelSelected: {
1857
+ color: colors.primary
1858
+ }
1859
+ });
1860
+ var ICON_SIZE5 = 28;
1540
1861
  var StatCard = react.forwardRef(function StatCard2({ label, icon: Icon2, style, className, accessibilityLabel, ...rest }, forwardedRef) {
1541
1862
  const containerRef = react.useRef(null);
1542
1863
  const resolvedClassName = className?.trim() || void 0;
@@ -1547,17 +1868,17 @@ var StatCard = react.forwardRef(function StatCard2({ label, icon: Icon2, style,
1547
1868
  {
1548
1869
  ...rest,
1549
1870
  ref: setContainerRef,
1550
- style: [styles6.base, style],
1871
+ style: [styles7.base, style],
1551
1872
  accessibilityRole: "text",
1552
1873
  accessibilityLabel: accessibilityLabel ?? label,
1553
1874
  children: [
1554
- /* @__PURE__ */ jsxRuntime.jsx(Icon2, { size: ICON_SIZE4, color: colors.white }),
1555
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles6.label, children: label })
1875
+ /* @__PURE__ */ jsxRuntime.jsx(Icon2, { size: ICON_SIZE5, color: colors.white }),
1876
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles7.label, children: label })
1556
1877
  ]
1557
1878
  }
1558
1879
  );
1559
1880
  });
1560
- var styles6 = reactNative.StyleSheet.create({
1881
+ var styles7 = reactNative.StyleSheet.create({
1561
1882
  base: {
1562
1883
  width: 204.5,
1563
1884
  minHeight: 114,
@@ -1643,7 +1964,7 @@ var Button = react.forwardRef(
1643
1964
  useApplyWebClassName(textRef, textClassName);
1644
1965
  const iconNode = customIcon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRightIcon, { size: metrics.iconSize, color: preset.iconColor });
1645
1966
  const containerStyle = [
1646
- styles7.base,
1967
+ styles8.base,
1647
1968
  {
1648
1969
  minHeight: metrics.minHeight,
1649
1970
  borderRadius: metrics.borderRadius,
@@ -1654,15 +1975,15 @@ var Button = react.forwardRef(
1654
1975
  paddingRight: hasIcon ? metrics.paddingRightWithIcon : metrics.paddingRight,
1655
1976
  gap: hasIcon ? metrics.gap : 0
1656
1977
  },
1657
- disabled && styles7.disabled,
1978
+ disabled && styles8.disabled,
1658
1979
  style
1659
1980
  ];
1660
1981
  const labelStyle = [
1661
- styles7.label,
1982
+ styles8.label,
1662
1983
  metrics.text,
1663
1984
  { color: preset.textColor },
1664
- reactNative.Platform.OS === "android" ? styles7.labelAndroid : null,
1665
- !hasIcon && styles7.labelCentered,
1985
+ reactNative.Platform.OS === "android" ? styles8.labelAndroid : null,
1986
+ !hasIcon && styles8.labelCentered,
1666
1987
  textStyle
1667
1988
  ];
1668
1989
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1683,7 +2004,7 @@ var Button = react.forwardRef(
1683
2004
  reactNative.View,
1684
2005
  {
1685
2006
  style: [
1686
- styles7.iconContainer,
2007
+ styles8.iconContainer,
1687
2008
  {
1688
2009
  width: metrics.iconContainerSize,
1689
2010
  height: metrics.iconContainerSize,
@@ -1699,7 +2020,7 @@ var Button = react.forwardRef(
1699
2020
  );
1700
2021
  }
1701
2022
  );
1702
- var styles7 = reactNative.StyleSheet.create({
2023
+ var styles8 = reactNative.StyleSheet.create({
1703
2024
  base: {
1704
2025
  flexDirection: "row",
1705
2026
  alignItems: "center",
@@ -1777,13 +2098,13 @@ var Checkbox = react.forwardRef(function Checkbox2({
1777
2098
  accessibilityRole: "checkbox",
1778
2099
  accessibilityLabel: resolvedAccessibilityLabel,
1779
2100
  accessibilityState: { checked: isActive, disabled },
1780
- style: [styles8.root, disabled && styles8.disabled, style],
2101
+ style: [styles9.root, disabled && styles9.disabled, style],
1781
2102
  children: [
1782
2103
  /* @__PURE__ */ jsxRuntime.jsx(
1783
2104
  reactNative.View,
1784
2105
  {
1785
2106
  style: [
1786
- styles8.box,
2107
+ styles9.box,
1787
2108
  {
1788
2109
  backgroundColor: chrome.backgroundColor,
1789
2110
  borderColor: chrome.borderColor
@@ -1792,12 +2113,12 @@ var Checkbox = react.forwardRef(function Checkbox2({
1792
2113
  children: isActive ? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { size: CHECK_SIZE, color: colors.primary, strokeWidth: CHECK_STROKE }) : null
1793
2114
  }
1794
2115
  ),
1795
- labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles8.label, labelStyle], children: labelContent }) : labelContent : null
2116
+ labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles9.label, labelStyle], children: labelContent }) : labelContent : null
1796
2117
  ]
1797
2118
  }
1798
2119
  );
1799
2120
  });
1800
- var styles8 = reactNative.StyleSheet.create({
2121
+ var styles9 = reactNative.StyleSheet.create({
1801
2122
  root: {
1802
2123
  flexDirection: "row",
1803
2124
  alignItems: "center",
@@ -1895,7 +2216,7 @@ var DEFAULT_WIDTH = 380;
1895
2216
  var TRIGGER_HEIGHT = 44;
1896
2217
  var TRIGGER_RADIUS = 60;
1897
2218
  var MENU_RADIUS2 = 20;
1898
- var ICON_SIZE5 = 20;
2219
+ var ICON_SIZE6 = 20;
1899
2220
  var NAV_ICON_SIZE = 20;
1900
2221
  var DAY_CELL_HEIGHT = 44;
1901
2222
  var DAY_CIRCLE_SIZE = 44;
@@ -2047,9 +2368,9 @@ var DatePicker = react.forwardRef(
2047
2368
  {
2048
2369
  ...rest,
2049
2370
  ref: setRootRef,
2050
- style: [styles9.root, isOpen && styles9.rootOpen, disabled && styles9.disabled, style],
2371
+ style: [styles10.root, isOpen && styles10.rootOpen, disabled && styles10.disabled, style],
2051
2372
  accessibilityState: { disabled, expanded: isOpen },
2052
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles9.triggerWrap, isOpen && styles9.triggerWrapOpen], children: [
2373
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles10.triggerWrap, isOpen && styles10.triggerWrapOpen], children: [
2053
2374
  /* @__PURE__ */ jsxRuntime.jsxs(
2054
2375
  reactNative.Pressable,
2055
2376
  {
@@ -2060,17 +2381,17 @@ var DatePicker = react.forwardRef(
2060
2381
  accessibilityLabel: resolvedAccessibilityLabel,
2061
2382
  accessibilityState: { disabled, expanded: isOpen },
2062
2383
  style: [
2063
- styles9.trigger,
2384
+ styles10.trigger,
2064
2385
  { borderColor: triggerBorderColor, backgroundColor: colors.grey700 }
2065
2386
  ],
2066
2387
  children: [
2067
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles9.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: triggerLabel }),
2068
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles9.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(CalendarOutlineIcon, { size: ICON_SIZE5, color: colors.grey100 }) })
2388
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles10.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: triggerLabel }),
2389
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles10.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(CalendarOutlineIcon, { size: ICON_SIZE6, color: colors.grey100 }) })
2069
2390
  ]
2070
2391
  }
2071
2392
  ),
2072
- isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles9.menu, children: [
2073
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles9.calendarHeader, children: [
2393
+ isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles10.menu, children: [
2394
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles10.calendarHeader, children: [
2074
2395
  /* @__PURE__ */ jsxRuntime.jsx(
2075
2396
  reactNative.Pressable,
2076
2397
  {
@@ -2078,11 +2399,11 @@ var DatePicker = react.forwardRef(
2078
2399
  hitSlop: 8,
2079
2400
  accessibilityRole: "button",
2080
2401
  accessibilityLabel: "Previous month",
2081
- style: styles9.navButton,
2402
+ style: styles10.navButton,
2082
2403
  children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { size: NAV_ICON_SIZE, color: colors.white })
2083
2404
  }
2084
2405
  ),
2085
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.Text, { style: styles9.monthHeading, children: [
2406
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.Text, { style: styles10.monthHeading, children: [
2086
2407
  monthNames[visibleMonth.getMonth()],
2087
2408
  " ",
2088
2409
  visibleMonth.getFullYear()
@@ -2094,13 +2415,13 @@ var DatePicker = react.forwardRef(
2094
2415
  hitSlop: 8,
2095
2416
  accessibilityRole: "button",
2096
2417
  accessibilityLabel: "Next month",
2097
- style: styles9.navButton,
2098
- children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles9.navIconMirror, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { size: NAV_ICON_SIZE, color: colors.white }) })
2418
+ style: styles10.navButton,
2419
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles10.navIconMirror, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { size: NAV_ICON_SIZE, color: colors.white }) })
2099
2420
  }
2100
2421
  )
2101
2422
  ] }),
2102
2423
  /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { children: [
2103
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles9.weekdayRow, children: weekdayLabels.map((weekdayLabel, index) => /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles9.dayCellWrap, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles9.weekdayText, children: weekdayLabel }) }, `${weekdayLabel}-${index}`)) }),
2424
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles10.weekdayRow, children: weekdayLabels.map((weekdayLabel, index) => /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles10.dayCellWrap, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles10.weekdayText, children: weekdayLabel }) }, `${weekdayLabel}-${index}`)) }),
2104
2425
  weeks.map((week, weekIndex) => {
2105
2426
  let rangeHighlightStyle = null;
2106
2427
  if (isRange && rangeValue.start && rangeValue.end) {
@@ -2137,13 +2458,13 @@ var DatePicker = react.forwardRef(
2137
2458
  return /* @__PURE__ */ jsxRuntime.jsxs(
2138
2459
  reactNative.View,
2139
2460
  {
2140
- style: [styles9.weekRow, weekIndex > 0 && styles9.weekRowSpaced],
2461
+ style: [styles10.weekRow, weekIndex > 0 && styles10.weekRowSpaced],
2141
2462
  children: [
2142
2463
  rangeHighlightStyle ? /* @__PURE__ */ jsxRuntime.jsx(
2143
2464
  reactNative.View,
2144
2465
  {
2145
2466
  pointerEvents: "none",
2146
- style: [styles9.rangeHighlight, rangeHighlightStyle]
2467
+ style: [styles10.rangeHighlight, rangeHighlightStyle]
2147
2468
  }
2148
2469
  ) : null,
2149
2470
  week.map((day, dayIndex) => {
@@ -2166,7 +2487,7 @@ var DatePicker = react.forwardRef(
2166
2487
  onHoverOut: () => setHoveredDayKey((current) => current === dayKey ? null : current),
2167
2488
  onPressIn: () => setHoveredDayKey(dayKey),
2168
2489
  onPressOut: () => setHoveredDayKey((current) => current === dayKey ? null : current),
2169
- style: styles9.dayCellWrap,
2490
+ style: styles10.dayCellWrap,
2170
2491
  accessibilityRole: "button",
2171
2492
  accessibilityLabel: formatValue(day),
2172
2493
  accessibilityState: {
@@ -2178,14 +2499,14 @@ var DatePicker = react.forwardRef(
2178
2499
  reactNative.View,
2179
2500
  {
2180
2501
  style: [
2181
- styles9.dayCircle,
2182
- isSelectedEndpoint && styles9.dayCircleSelected,
2183
- isHovered && styles9.dayCircleHovered
2502
+ styles10.dayCircle,
2503
+ isSelectedEndpoint && styles10.dayCircleSelected,
2504
+ isHovered && styles10.dayCircleHovered
2184
2505
  ],
2185
- children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles9.dayText, { color: dayTextColor }], children: day.getDate() })
2506
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles10.dayText, { color: dayTextColor }], children: day.getDate() })
2186
2507
  }
2187
2508
  ),
2188
- isToday && !isSelectedEndpoint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles9.todayDot }) : null
2509
+ isToday && !isSelectedEndpoint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles10.todayDot }) : null
2189
2510
  ]
2190
2511
  },
2191
2512
  dayIndex
@@ -2203,7 +2524,7 @@ var DatePicker = react.forwardRef(
2203
2524
  );
2204
2525
  }
2205
2526
  );
2206
- var styles9 = reactNative.StyleSheet.create({
2527
+ var styles10 = reactNative.StyleSheet.create({
2207
2528
  root: {
2208
2529
  width: DEFAULT_WIDTH,
2209
2530
  gap: 8,
@@ -2239,8 +2560,8 @@ var styles9 = reactNative.StyleSheet.create({
2239
2560
  minWidth: 0
2240
2561
  },
2241
2562
  iconSlot: {
2242
- width: ICON_SIZE5,
2243
- height: ICON_SIZE5,
2563
+ width: ICON_SIZE6,
2564
+ height: ICON_SIZE6,
2244
2565
  alignItems: "center",
2245
2566
  justifyContent: "center",
2246
2567
  flexShrink: 0
@@ -2463,13 +2784,13 @@ var Input = react.forwardRef(function Input2({
2463
2784
  const rightIconNode = rightIcon ?? /* @__PURE__ */ jsxRuntime.jsx(ShowIcon, { size: metrics.iconSize, color: chrome.rightIconColor });
2464
2785
  useApplyWebClassName(rootRef, className);
2465
2786
  useApplyWebClassName(inputRef, inputClassName);
2466
- return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles10.root, disabled && styles10.disabled, style], children: [
2467
- showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles10.label, { color: chrome.labelColor }], children: label }) : null,
2787
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles11.root, disabled && styles11.disabled, style], children: [
2788
+ showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles11.label, { color: chrome.labelColor }], children: label }) : null,
2468
2789
  /* @__PURE__ */ jsxRuntime.jsxs(
2469
2790
  reactNative.View,
2470
2791
  {
2471
2792
  style: [
2472
- styles10.field,
2793
+ styles11.field,
2473
2794
  {
2474
2795
  height: metrics.height,
2475
2796
  borderRadius: metrics.borderRadius,
@@ -2484,7 +2805,7 @@ var Input = react.forwardRef(function Input2({
2484
2805
  fieldStyle
2485
2806
  ],
2486
2807
  children: [
2487
- hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles10.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: leftIconNode }) : null,
2808
+ hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles11.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: leftIconNode }) : null,
2488
2809
  /* @__PURE__ */ jsxRuntime.jsx(
2489
2810
  reactNative.TextInput,
2490
2811
  {
@@ -2508,11 +2829,11 @@ var Input = react.forwardRef(function Input2({
2508
2829
  onBlur?.(event);
2509
2830
  },
2510
2831
  style: [
2511
- styles10.input,
2832
+ styles11.input,
2512
2833
  metrics.text,
2513
2834
  { color: chrome.textColor },
2514
- reactNative.Platform.OS === "web" ? styles10.inputWeb : null,
2515
- reactNative.Platform.OS === "android" ? styles10.inputAndroid : null,
2835
+ reactNative.Platform.OS === "web" ? styles11.inputWeb : null,
2836
+ reactNative.Platform.OS === "android" ? styles11.inputAndroid : null,
2516
2837
  inputStyle
2517
2838
  ],
2518
2839
  accessibilityLabel: resolvedAccessibilityLabel,
@@ -2524,20 +2845,20 @@ var Input = react.forwardRef(function Input2({
2524
2845
  {
2525
2846
  onPress: onRightIconPress,
2526
2847
  disabled,
2527
- style: [styles10.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }],
2848
+ style: [styles11.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }],
2528
2849
  accessibilityRole: "button",
2529
2850
  accessibilityLabel: rightIconAccessibilityLabel,
2530
2851
  hitSlop: 8,
2531
2852
  children: rightIconNode
2532
2853
  }
2533
- ) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles10.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: rightIconNode }) : null
2854
+ ) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles11.iconSlot, { width: metrics.iconSize, height: metrics.iconSize }], children: rightIconNode }) : null
2534
2855
  ]
2535
2856
  }
2536
2857
  ),
2537
- showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles10.hint, { color: chrome.hintColor }], children: hint }) : null
2858
+ showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles11.hint, { color: chrome.hintColor }], children: hint }) : null
2538
2859
  ] });
2539
2860
  });
2540
- var styles10 = reactNative.StyleSheet.create({
2861
+ var styles11 = reactNative.StyleSheet.create({
2541
2862
  root: {
2542
2863
  width: DEFAULT_WIDTH2,
2543
2864
  gap: 8,
@@ -2580,7 +2901,7 @@ var TRIGGER_RADIUS2 = 60;
2580
2901
  var MENU_RADIUS3 = 24;
2581
2902
  var MENU_MAX_LIST_HEIGHT = 248;
2582
2903
  var ITEM_RADIUS2 = 12;
2583
- var ICON_SIZE6 = 20;
2904
+ var ICON_SIZE7 = 20;
2584
2905
  var CHIP_GAP = 6;
2585
2906
  var FALLBACK_ELLIPSIS_WIDTH = 20;
2586
2907
  function itemBackground(state) {
@@ -2653,25 +2974,25 @@ function MultiValueChips({ options, disabled, onRemove }) {
2653
2974
  const next = Math.ceil(event.nativeEvent.layout.width);
2654
2975
  setEllipsisWidth((current) => current === next ? current : next);
2655
2976
  };
2656
- return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles11.multiValueRoot, children: [
2657
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles11.measureRow, children: [
2977
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles12.multiValueRoot, children: [
2978
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles12.measureRow, children: [
2658
2979
  options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
2659
2980
  reactNative.View,
2660
2981
  {
2661
- style: styles11.chip,
2982
+ style: styles12.chip,
2662
2983
  onLayout: (event) => handleChipLayout(option.value, event),
2663
2984
  children: [
2664
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.chipLabel, numberOfLines: 1, children: option.label }),
2665
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.chipRemove, children: "\xD7" })
2985
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.chipLabel, numberOfLines: 1, children: option.label }),
2986
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.chipRemove, children: "\xD7" })
2666
2987
  ]
2667
2988
  },
2668
2989
  `measure-${option.value}`
2669
2990
  )),
2670
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.ellipsis, onLayout: handleEllipsisLayout, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.ellipsisText, children: "..." }) })
2991
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.ellipsis, onLayout: handleEllipsisLayout, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.ellipsisText, children: "..." }) })
2671
2992
  ] }),
2672
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles11.chipsRow, onLayout: handleContainerLayout, children: [
2673
- visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles11.chip, children: [
2674
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.chipLabel, numberOfLines: 1, children: option.label }),
2993
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles12.chipsRow, onLayout: handleContainerLayout, children: [
2994
+ visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles12.chip, children: [
2995
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.chipLabel, numberOfLines: 1, children: option.label }),
2675
2996
  /* @__PURE__ */ jsxRuntime.jsx(
2676
2997
  reactNative.Pressable,
2677
2998
  {
@@ -2683,11 +3004,11 @@ function MultiValueChips({ options, disabled, onRemove }) {
2683
3004
  hitSlop: 6,
2684
3005
  accessibilityRole: "button",
2685
3006
  accessibilityLabel: `Remove ${option.label}`,
2686
- children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.chipRemove, children: "\xD7" })
3007
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.chipRemove, children: "\xD7" })
2687
3008
  }
2688
3009
  )
2689
3010
  ] }, option.value)),
2690
- hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.ellipsis, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.ellipsisText, children: "..." }) }) : null
3011
+ hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.ellipsis, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.ellipsisText, children: "..." }) }) : null
2691
3012
  ] })
2692
3013
  ] });
2693
3014
  }
@@ -2898,7 +3219,7 @@ var Select = react.forwardRef(
2898
3219
  const leftIconNode = leftIcon ?? /* @__PURE__ */ jsxRuntime.jsx(
2899
3220
  UserIcon,
2900
3221
  {
2901
- size: ICON_SIZE6,
3222
+ size: ICON_SIZE7,
2902
3223
  color: error ? colors.red : isOpen ? colors.primary : colors.grey100
2903
3224
  }
2904
3225
  );
@@ -2914,11 +3235,11 @@ var Select = react.forwardRef(
2914
3235
  {
2915
3236
  ...rest,
2916
3237
  ref: setRootRef,
2917
- style: [styles11.root, isOpen && styles11.rootOpen, disabled && styles11.disabled, style],
3238
+ style: [styles12.root, isOpen && styles12.rootOpen, disabled && styles12.disabled, style],
2918
3239
  accessibilityState: { disabled, expanded: isOpen },
2919
3240
  children: [
2920
- showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles11.label, { color: labelColor }], children: label }) : null,
2921
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles11.triggerWrap, isOpen && styles11.triggerWrapOpen], children: [
3241
+ showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles12.label, { color: labelColor }], children: label }) : null,
3242
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles12.triggerWrap, isOpen && styles12.triggerWrapOpen], children: [
2922
3243
  /* @__PURE__ */ jsxRuntime.jsxs(
2923
3244
  reactNative.Pressable,
2924
3245
  {
@@ -2929,29 +3250,29 @@ var Select = react.forwardRef(
2929
3250
  accessibilityLabel: resolvedAccessibilityLabel,
2930
3251
  accessibilityState: { disabled, expanded: isOpen },
2931
3252
  style: [
2932
- styles11.trigger,
3253
+ styles12.trigger,
2933
3254
  {
2934
3255
  borderColor: triggerBorderColor,
2935
3256
  backgroundColor: colors.grey700
2936
3257
  }
2937
3258
  ],
2938
3259
  children: [
2939
- hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.iconSlot, children: leftIconNode }) : null,
2940
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.triggerContent, children: multiple && hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
3260
+ hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.iconSlot, children: leftIconNode }) : null,
3261
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.triggerContent, children: multiple && hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
2941
3262
  MultiValueChips,
2942
3263
  {
2943
3264
  options: selectedOptions,
2944
3265
  disabled,
2945
3266
  onRemove: handleRemoveChip
2946
3267
  }
2947
- ) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles11.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: multiple ? placeholder : singleLabel }) }),
2948
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles11.iconSlot, isOpen && styles11.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE6, color: isOpen ? colors.primary : colors.grey100 }) })
3268
+ ) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles12.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: multiple ? placeholder : singleLabel }) }),
3269
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles12.iconSlot, isOpen && styles12.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE7, color: isOpen ? colors.primary : colors.grey100 }) })
2949
3270
  ]
2950
3271
  }
2951
3272
  ),
2952
- isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles11.menu, children: [
2953
- showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles11.searchField, children: [
2954
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: ICON_SIZE6, color: colors.grey100 }) }),
3273
+ isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles12.menu, children: [
3274
+ showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles12.searchField, children: [
3275
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: ICON_SIZE7, color: colors.grey100 }) }),
2955
3276
  /* @__PURE__ */ jsxRuntime.jsx(
2956
3277
  reactNative.TextInput,
2957
3278
  {
@@ -2962,9 +3283,9 @@ var Select = react.forwardRef(
2962
3283
  placeholder: searchPlaceholder,
2963
3284
  placeholderTextColor: colors.grey100,
2964
3285
  style: [
2965
- styles11.searchInput,
2966
- reactNative.Platform.OS === "web" ? styles11.searchInputWeb : null,
2967
- reactNative.Platform.OS === "android" ? styles11.searchInputAndroid : null
3286
+ styles12.searchInput,
3287
+ reactNative.Platform.OS === "web" ? styles12.searchInputWeb : null,
3288
+ reactNative.Platform.OS === "android" ? styles12.searchInputAndroid : null
2968
3289
  ],
2969
3290
  accessibilityLabel: searchPlaceholder
2970
3291
  }
@@ -2973,12 +3294,12 @@ var Select = react.forwardRef(
2973
3294
  /* @__PURE__ */ jsxRuntime.jsxs(
2974
3295
  reactNative.ScrollView,
2975
3296
  {
2976
- style: styles11.optionList,
2977
- contentContainerStyle: styles11.optionListContent,
3297
+ style: styles12.optionList,
3298
+ contentContainerStyle: styles12.optionListContent,
2978
3299
  keyboardShouldPersistTaps: "handled",
2979
3300
  showsVerticalScrollIndicator: false,
2980
3301
  children: [
2981
- loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.statusText, children: "Loading..." }) }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles11.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.statusText, children: emptyText }) }) : null,
3302
+ loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.statusText, children: "Loading..." }) }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles12.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.statusText, children: emptyText }) }) : null,
2982
3303
  !loading && filteredOptions.map((option) => {
2983
3304
  const isSelected = selectedValues.includes(option.value);
2984
3305
  const isHovered = hoveredValue === option.value;
@@ -2995,14 +3316,14 @@ var Select = react.forwardRef(
2995
3316
  accessibilityRole: multiple ? "checkbox" : "button",
2996
3317
  accessibilityState: { selected: isSelected, checked: isSelected, disabled },
2997
3318
  style: [
2998
- styles11.item,
3319
+ styles12.item,
2999
3320
  {
3000
3321
  backgroundColor: itemBackground(visualState)
3001
3322
  }
3002
3323
  ],
3003
3324
  children: [
3004
- multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles11.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
3005
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles11.itemLabel, numberOfLines: 1, children: option.label })
3325
+ multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles12.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
3326
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles12.itemLabel, numberOfLines: 1, children: option.label })
3006
3327
  ]
3007
3328
  },
3008
3329
  option.value
@@ -3013,13 +3334,13 @@ var Select = react.forwardRef(
3013
3334
  )
3014
3335
  ] }) : null
3015
3336
  ] }),
3016
- showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles11.hint, { color: hintColor }], children: hint }) : null
3337
+ showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles12.hint, { color: hintColor }], children: hint }) : null
3017
3338
  ]
3018
3339
  }
3019
3340
  );
3020
3341
  }
3021
3342
  );
3022
- var styles11 = reactNative.StyleSheet.create({
3343
+ var styles12 = reactNative.StyleSheet.create({
3023
3344
  root: {
3024
3345
  width: DEFAULT_WIDTH3,
3025
3346
  gap: 8,
@@ -3109,8 +3430,8 @@ var styles11 = reactNative.StyleSheet.create({
3109
3430
  lineHeight: 16
3110
3431
  },
3111
3432
  iconSlot: {
3112
- width: ICON_SIZE6,
3113
- height: ICON_SIZE6,
3433
+ width: ICON_SIZE7,
3434
+ height: ICON_SIZE7,
3114
3435
  alignItems: "center",
3115
3436
  justifyContent: "center",
3116
3437
  flexShrink: 0
@@ -3281,13 +3602,13 @@ var Textarea = react.forwardRef(function Textarea2({
3281
3602
  const resolvedAccessibilityLabel = accessibilityLabel ?? (showLabel ? void 0 : label);
3282
3603
  useApplyWebClassName(rootRef, className);
3283
3604
  useApplyWebClassName(inputRef, inputClassName);
3284
- return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles12.root, disabled && styles12.disabled, style], children: [
3285
- showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles12.label, { color: chrome.labelColor }], children: label }) : null,
3605
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles13.root, disabled && styles13.disabled, style], children: [
3606
+ showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles13.label, { color: chrome.labelColor }], children: label }) : null,
3286
3607
  /* @__PURE__ */ jsxRuntime.jsx(
3287
3608
  reactNative.View,
3288
3609
  {
3289
3610
  style: [
3290
- styles12.field,
3611
+ styles13.field,
3291
3612
  {
3292
3613
  borderColor: chrome.borderColor,
3293
3614
  backgroundColor: chrome.backgroundColor
@@ -3319,11 +3640,11 @@ var Textarea = react.forwardRef(function Textarea2({
3319
3640
  onBlur?.(event);
3320
3641
  },
3321
3642
  style: [
3322
- styles12.input,
3643
+ styles13.input,
3323
3644
  textareaTypography.field,
3324
3645
  { color: chrome.textColor },
3325
- reactNative.Platform.OS === "web" ? styles12.inputWeb : null,
3326
- reactNative.Platform.OS === "android" ? styles12.inputAndroid : null,
3646
+ reactNative.Platform.OS === "web" ? styles13.inputWeb : null,
3647
+ reactNative.Platform.OS === "android" ? styles13.inputAndroid : null,
3327
3648
  inputStyle
3328
3649
  ],
3329
3650
  accessibilityLabel: resolvedAccessibilityLabel,
@@ -3332,10 +3653,10 @@ var Textarea = react.forwardRef(function Textarea2({
3332
3653
  )
3333
3654
  }
3334
3655
  ),
3335
- showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles12.hint, { color: chrome.hintColor }], children: hint }) : null
3656
+ showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles13.hint, { color: chrome.hintColor }], children: hint }) : null
3336
3657
  ] });
3337
3658
  });
3338
- var styles12 = reactNative.StyleSheet.create({
3659
+ var styles13 = reactNative.StyleSheet.create({
3339
3660
  root: {
3340
3661
  width: DEFAULT_WIDTH4,
3341
3662
  gap: 8,
@@ -3435,13 +3756,13 @@ var Toggle = react.forwardRef(function Toggle2({
3435
3756
  accessibilityRole: "switch",
3436
3757
  accessibilityLabel: resolvedAccessibilityLabel,
3437
3758
  accessibilityState: { checked: isActive, disabled },
3438
- style: [styles13.pressable, disabled && styles13.disabled, style],
3759
+ style: [styles14.pressable, disabled && styles14.disabled, style],
3439
3760
  children: [
3440
3761
  /* @__PURE__ */ jsxRuntime.jsx(
3441
3762
  reactNative.Animated.View,
3442
3763
  {
3443
3764
  style: [
3444
- styles13.track,
3765
+ styles14.track,
3445
3766
  {
3446
3767
  backgroundColor: trackBackgroundColor
3447
3768
  }
@@ -3450,7 +3771,7 @@ var Toggle = react.forwardRef(function Toggle2({
3450
3771
  reactNative.Animated.View,
3451
3772
  {
3452
3773
  style: [
3453
- styles13.thumb,
3774
+ styles14.thumb,
3454
3775
  {
3455
3776
  transform: [{ translateX: thumbTranslateX }]
3456
3777
  }
@@ -3459,12 +3780,12 @@ var Toggle = react.forwardRef(function Toggle2({
3459
3780
  )
3460
3781
  }
3461
3782
  ),
3462
- labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles13.label, labelStyle], children: labelContent }) : labelContent : null
3783
+ labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles14.label, labelStyle], children: labelContent }) : labelContent : null
3463
3784
  ]
3464
3785
  }
3465
3786
  );
3466
3787
  });
3467
- var styles13 = reactNative.StyleSheet.create({
3788
+ var styles14 = reactNative.StyleSheet.create({
3468
3789
  pressable: {
3469
3790
  flexDirection: "row",
3470
3791
  alignItems: "center",
@@ -3492,6 +3813,272 @@ var styles13 = reactNative.StyleSheet.create({
3492
3813
  color: colors.white
3493
3814
  }
3494
3815
  });
3816
+ var STAR_COUNT = 5;
3817
+ var BASE_ITEM_SIZE = 16;
3818
+ var ICON_WIDTH_RATIO = 12.57 / BASE_ITEM_SIZE;
3819
+ var ICON_HEIGHT_RATIO = 11.98 / BASE_ITEM_SIZE;
3820
+ var STAR_GAP_RATIO = 2 / BASE_ITEM_SIZE;
3821
+ function clamp2(value) {
3822
+ return Math.max(0, Math.min(value, STAR_COUNT));
3823
+ }
3824
+ var RatingInput = react.forwardRef(
3825
+ function RatingInput2({
3826
+ value,
3827
+ defaultValue = 0,
3828
+ onValueChange,
3829
+ showValue = true,
3830
+ precision = 1,
3831
+ size = 20,
3832
+ starGap,
3833
+ readOnly = false,
3834
+ disabled = false,
3835
+ style,
3836
+ valueStyle,
3837
+ className,
3838
+ hitSlop = 6,
3839
+ accessibilityLabel,
3840
+ ...rest
3841
+ }, forwardedRef) {
3842
+ const containerRef = react.useRef(null);
3843
+ const setContainerRef = react.useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
3844
+ const isControlled = value !== void 0;
3845
+ const [uncontrolledValue, setUncontrolledValue] = react.useState(() => clamp2(defaultValue));
3846
+ const selectedValue = clamp2(isControlled ? value : uncontrolledValue);
3847
+ const selectedStarCount = Math.round(selectedValue);
3848
+ const iconWidth = size * ICON_WIDTH_RATIO;
3849
+ const iconHeight = size * ICON_HEIGHT_RATIO;
3850
+ const resolvedStarGap = starGap ?? size * STAR_GAP_RATIO;
3851
+ const resolvedAccessibilityLabel = accessibilityLabel ?? (readOnly ? `${selectedValue} out of ${STAR_COUNT} stars` : "Rating");
3852
+ useApplyWebClassName(containerRef, className);
3853
+ const selectValue = (nextValue) => {
3854
+ if (disabled || nextValue === selectedValue) return;
3855
+ if (!isControlled) setUncontrolledValue(nextValue);
3856
+ onValueChange?.(nextValue);
3857
+ };
3858
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3859
+ reactNative.View,
3860
+ {
3861
+ ...rest,
3862
+ ref: setContainerRef,
3863
+ style: [styles15.root, disabled && styles15.disabled, style],
3864
+ children: [
3865
+ showValue ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: [styles15.value, valueStyle], children: selectedValue.toFixed(precision) }) : null,
3866
+ /* @__PURE__ */ jsxRuntime.jsx(
3867
+ reactNative.View,
3868
+ {
3869
+ accessibilityRole: readOnly ? "image" : "radiogroup",
3870
+ accessibilityLabel: resolvedAccessibilityLabel,
3871
+ accessibilityState: { disabled },
3872
+ style: [styles15.stars, { gap: resolvedStarGap }],
3873
+ children: Array.from({ length: STAR_COUNT }, (_, index) => {
3874
+ const starValue = index + 1;
3875
+ const isSelected = starValue <= selectedStarCount;
3876
+ const icon = isSelected ? /* @__PURE__ */ jsxRuntime.jsx(StarFilledIcon, { size: iconWidth, height: iconHeight }) : /* @__PURE__ */ jsxRuntime.jsx(StarIcon, { size: iconWidth, height: iconHeight });
3877
+ const itemStyle = [styles15.starItem, { width: size, height: size }];
3878
+ if (readOnly) {
3879
+ return /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: itemStyle, children: icon }, starValue);
3880
+ }
3881
+ return /* @__PURE__ */ jsxRuntime.jsx(
3882
+ reactNative.Pressable,
3883
+ {
3884
+ disabled,
3885
+ hitSlop,
3886
+ onPress: () => selectValue(starValue),
3887
+ accessibilityRole: "radio",
3888
+ accessibilityLabel: `${starValue} star${starValue === 1 ? "" : "s"}`,
3889
+ accessibilityState: { checked: isSelected, disabled },
3890
+ style: itemStyle,
3891
+ children: icon
3892
+ },
3893
+ starValue
3894
+ );
3895
+ })
3896
+ }
3897
+ )
3898
+ ]
3899
+ }
3900
+ );
3901
+ }
3902
+ );
3903
+ var styles15 = reactNative.StyleSheet.create({
3904
+ root: {
3905
+ flexDirection: "row",
3906
+ alignItems: "center",
3907
+ flexWrap: "nowrap",
3908
+ alignSelf: "flex-start",
3909
+ gap: 16
3910
+ },
3911
+ stars: {
3912
+ flexDirection: "row",
3913
+ alignItems: "center"
3914
+ },
3915
+ starItem: {
3916
+ alignItems: "center",
3917
+ justifyContent: "center"
3918
+ },
3919
+ value: {
3920
+ ...ratingTypography,
3921
+ color: colors.white
3922
+ },
3923
+ disabled: {
3924
+ opacity: 0.5
3925
+ }
3926
+ });
3927
+ var CARD_WIDTH = 370;
3928
+ var CARD_MIN_HEIGHT = 173;
3929
+ var AVATAR_SIZE = 44;
3930
+ var CommentCard = react.forwardRef(
3931
+ function CommentCard2({
3932
+ userName,
3933
+ date,
3934
+ commentText,
3935
+ rating,
3936
+ imageUrl,
3937
+ maxCommentLines = 3,
3938
+ maxCommentLength = 111,
3939
+ readMoreLabel = "\u0534\u056B\u057F\u0565\u056C \u0561\u057E\u0565\u056C\u056B\u0576",
3940
+ readLessLabel = "\u0553\u0561\u056F\u0565\u056C",
3941
+ onExpandedChange,
3942
+ style,
3943
+ commentStyle,
3944
+ className,
3945
+ ...rest
3946
+ }, forwardedRef) {
3947
+ const containerRef = react.useRef(null);
3948
+ const setContainerRef = react.useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
3949
+ const [imageFailed, setImageFailed] = react.useState(false);
3950
+ const [expanded, setExpanded] = react.useState(false);
3951
+ const [actionHovered, setActionHovered] = react.useState(false);
3952
+ const hasImage = Boolean(imageUrl) && !imageFailed;
3953
+ const shouldShowAction = Array.from(commentText).length >= maxCommentLength;
3954
+ useApplyWebClassName(containerRef, className);
3955
+ react.useEffect(() => {
3956
+ setImageFailed(false);
3957
+ }, [imageUrl]);
3958
+ react.useEffect(() => {
3959
+ setExpanded(false);
3960
+ setActionHovered(false);
3961
+ }, [commentText, maxCommentLength, maxCommentLines]);
3962
+ const toggleExpanded = () => {
3963
+ const next = !expanded;
3964
+ setExpanded(next);
3965
+ onExpandedChange?.(next);
3966
+ };
3967
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ...rest, ref: setContainerRef, style: [styles16.root, style], children: [
3968
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles16.header, children: [
3969
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles16.avatar, children: hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
3970
+ reactNative.Image,
3971
+ {
3972
+ source: { uri: imageUrl ?? void 0 },
3973
+ style: styles16.avatarImage,
3974
+ onError: () => setImageFailed(true)
3975
+ }
3976
+ ) : /* @__PURE__ */ jsxRuntime.jsx(UserIcon, { size: 20, color: colors.primary }) }),
3977
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles16.identity, children: [
3978
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles16.name, children: userName }),
3979
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles16.date, children: date })
3980
+ ] }),
3981
+ /* @__PURE__ */ jsxRuntime.jsx(RatingInput, { value: rating, readOnly: true, showValue: false, size: 16 })
3982
+ ] }),
3983
+ /* @__PURE__ */ jsxRuntime.jsx(
3984
+ reactNative.Text,
3985
+ {
3986
+ numberOfLines: expanded ? void 0 : maxCommentLines,
3987
+ style: [styles16.comment, commentStyle],
3988
+ children: commentText
3989
+ }
3990
+ ),
3991
+ shouldShowAction ? /* @__PURE__ */ jsxRuntime.jsx(
3992
+ reactNative.Pressable,
3993
+ {
3994
+ onPress: toggleExpanded,
3995
+ accessibilityRole: "button",
3996
+ accessibilityState: { expanded },
3997
+ hitSlop: 6,
3998
+ onHoverIn: () => setActionHovered(true),
3999
+ onHoverOut: () => setActionHovered(false),
4000
+ style: styles16.action,
4001
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4002
+ reactNative.Text,
4003
+ {
4004
+ style: [
4005
+ styles16.actionText,
4006
+ expanded && styles16.closeActionText,
4007
+ actionHovered && (expanded ? styles16.closeActionTextHovered : styles16.openActionTextHovered)
4008
+ ],
4009
+ children: expanded ? readLessLabel : readMoreLabel
4010
+ }
4011
+ )
4012
+ }
4013
+ ) : null
4014
+ ] });
4015
+ }
4016
+ );
4017
+ var styles16 = reactNative.StyleSheet.create({
4018
+ root: {
4019
+ width: CARD_WIDTH,
4020
+ minHeight: CARD_MIN_HEIGHT,
4021
+ padding: 16,
4022
+ gap: 12,
4023
+ borderRadius: 12,
4024
+ backgroundColor: colors.grey750
4025
+ },
4026
+ header: {
4027
+ flexDirection: "row",
4028
+ alignItems: "center",
4029
+ gap: 8
4030
+ },
4031
+ avatar: {
4032
+ width: AVATAR_SIZE,
4033
+ height: AVATAR_SIZE,
4034
+ flexShrink: 0,
4035
+ alignItems: "center",
4036
+ justifyContent: "center",
4037
+ overflow: "hidden",
4038
+ borderRadius: AVATAR_SIZE / 2,
4039
+ backgroundColor: colors.grey600
4040
+ },
4041
+ avatarImage: {
4042
+ width: AVATAR_SIZE,
4043
+ height: AVATAR_SIZE
4044
+ },
4045
+ identity: {
4046
+ minWidth: 0,
4047
+ flex: 1,
4048
+ gap: 4
4049
+ },
4050
+ name: {
4051
+ ...commentCardTypography.name,
4052
+ color: colors.white
4053
+ },
4054
+ date: {
4055
+ ...commentCardTypography.date,
4056
+ color: colors.grey0
4057
+ },
4058
+ comment: {
4059
+ ...commentCardTypography.comment,
4060
+ color: colors.white
4061
+ },
4062
+ action: {
4063
+ alignSelf: "flex-start",
4064
+ marginTop: "auto",
4065
+ minHeight: 16,
4066
+ justifyContent: "center"
4067
+ },
4068
+ actionText: {
4069
+ ...commentCardTypography.action,
4070
+ color: colors.white
4071
+ },
4072
+ closeActionText: {
4073
+ color: colors.primary
4074
+ },
4075
+ openActionTextHovered: {
4076
+ color: colors.primary
4077
+ },
4078
+ closeActionTextHovered: {
4079
+ color: colors.white
4080
+ }
4081
+ });
3495
4082
 
3496
4083
  exports.ArrowRightIcon = ArrowRightIcon;
3497
4084
  exports.Avatar = Avatar;
@@ -3509,9 +4096,11 @@ exports.Checkbox = Checkbox;
3509
4096
  exports.ChevronDownIcon = ChevronDownIcon;
3510
4097
  exports.ChevronLeftIcon = ChevronLeftIcon;
3511
4098
  exports.ClockIcon = ClockIcon;
4099
+ exports.CommentCard = CommentCard;
3512
4100
  exports.Counter = Counter;
3513
4101
  exports.DatePicker = DatePicker;
3514
4102
  exports.FacebookIcon = FacebookIcon;
4103
+ exports.GlobeIcon = GlobeIcon;
3515
4104
  exports.HeartIcon = HeartIcon;
3516
4105
  exports.HelpCircleIcon = HelpCircleIcon;
3517
4106
  exports.HomeIcon = HomeIcon;
@@ -3519,6 +4108,7 @@ exports.Icon = Icon;
3519
4108
  exports.Input = Input;
3520
4109
  exports.InstagramIcon = InstagramIcon;
3521
4110
  exports.KeyIcon = KeyIcon;
4111
+ exports.LanguageSwitcher = LanguageSwitcher;
3522
4112
  exports.LayoutGridIcon = LayoutGridIcon;
3523
4113
  exports.LinkedInIcon = LinkedInIcon;
3524
4114
  exports.LogOutIcon = LogOutIcon;
@@ -3528,12 +4118,15 @@ exports.MinusIcon = MinusIcon;
3528
4118
  exports.NavigateIcon = NavigateIcon;
3529
4119
  exports.PhoneIcon = PhoneIcon;
3530
4120
  exports.PlusIcon = PlusIcon;
4121
+ exports.RatingInput = RatingInput;
3531
4122
  exports.SearchIcon = SearchIcon;
3532
4123
  exports.SegmentedToggle = SegmentedToggle;
3533
4124
  exports.Select = Select;
3534
4125
  exports.SettingsIcon = SettingsIcon;
3535
4126
  exports.ShowIcon = ShowIcon;
3536
4127
  exports.SidebarIcon = SidebarIcon;
4128
+ exports.StarFilledIcon = StarFilledIcon;
4129
+ exports.StarIcon = StarIcon;
3537
4130
  exports.StatCard = StatCard;
3538
4131
  exports.Textarea = Textarea;
3539
4132
  exports.Toggle = Toggle;
@@ -3544,8 +4137,10 @@ exports.avatarTypography = avatarTypography;
3544
4137
  exports.badgeTypography = badgeTypography;
3545
4138
  exports.buttonTypography = buttonTypography;
3546
4139
  exports.colors = colors;
4140
+ exports.commentCardTypography = commentCardTypography;
3547
4141
  exports.counterTypography = counterTypography;
3548
4142
  exports.datePickerTypography = datePickerTypography;
4143
+ exports.defaultLanguageOptions = defaultLanguageOptions;
3549
4144
  exports.fonts = fonts;
3550
4145
  exports.getIconsByGroup = getIconsByGroup;
3551
4146
  exports.grey = grey;
@@ -3554,6 +4149,8 @@ exports.iconGroups = iconGroups;
3554
4149
  exports.iconNames = iconNames;
3555
4150
  exports.icons = icons;
3556
4151
  exports.inputTypography = inputTypography;
4152
+ exports.languageSwitcherTypography = languageSwitcherTypography;
4153
+ exports.ratingTypography = ratingTypography;
3557
4154
  exports.segmentedToggleTypography = segmentedToggleTypography;
3558
4155
  exports.selectTypography = selectTypography;
3559
4156
  exports.statCardTypography = statCardTypography;