@ecohouse/ui 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -163,6 +163,19 @@ declare function ShowIcon({ size, color, strokeWidth }: ShowIconProps): react.JS
163
163
  /** Native — react-native-svg (peer dependency). */
164
164
  declare function SidebarIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
165
165
 
166
+ interface StarIconProps extends IconProps {
167
+ active?: boolean;
168
+ height?: number;
169
+ }
170
+ /** Native — active is solid orange; inactive is a grey outline. */
171
+ declare function StarIcon({ active, size, height, color, strokeWidth, }: StarIconProps): react.JSX.Element;
172
+
173
+ interface StarFilledIconProps extends IconProps {
174
+ height?: number;
175
+ }
176
+ /** Native — supplied solid orange 28×26 star icon. */
177
+ declare function StarFilledIcon({ size, height, color, strokeWidth, }: StarFilledIconProps): react.JSX.Element;
178
+
166
179
  interface UserIconProps {
167
180
  size?: number;
168
181
  color?: string;
@@ -207,6 +220,8 @@ declare const icons: {
207
220
  readonly settings: typeof SettingsIcon;
208
221
  readonly show: typeof ShowIcon;
209
222
  readonly sidebar: typeof SidebarIcon;
223
+ readonly star: typeof StarIcon;
224
+ readonly starFilled: typeof StarFilledIcon;
210
225
  readonly user: typeof UserIcon;
211
226
  readonly usersAlt: typeof UsersAltIcon;
212
227
  readonly video: typeof VideoIcon;
@@ -215,7 +230,7 @@ type IconName = keyof typeof icons;
215
230
  declare const iconNames: IconName[];
216
231
  declare const iconGroups: {
217
232
  readonly navigation: readonly ["arrowRight", "chevronDown", "chevronLeft", "home", "navigate"];
218
- readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart", "minus", "plus"];
233
+ readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart", "star", "starFilled", "minus", "plus"];
219
234
  readonly objects: readonly ["bag", "building", "clock", "user", "usersAlt", "video"];
220
235
  readonly communication: readonly ["mail", "phone"];
221
236
  readonly social: readonly ["facebook", "instagram", "linkedin"];
@@ -467,6 +482,43 @@ interface ToggleProps extends Omit<PressableProps, "onPress" | "disabled" | "sty
467
482
  }
468
483
  declare const Toggle: react.ForwardRefExoticComponent<ToggleProps & react.RefAttributes<react_native.View>>;
469
484
 
485
+ interface RatingInputProps extends Omit<ViewProps, "style" | "children"> {
486
+ value?: number;
487
+ defaultValue?: number;
488
+ onValueChange?: (value: number) => void;
489
+ showValue?: boolean;
490
+ precision?: number;
491
+ /** Star item size. Glyph dimensions and default spacing scale with it. */
492
+ size?: number;
493
+ /** Overrides the proportional spacing between star items. */
494
+ starGap?: number;
495
+ readOnly?: boolean;
496
+ disabled?: boolean;
497
+ style?: StyleProp<ViewStyle>;
498
+ valueStyle?: StyleProp<TextStyle>;
499
+ className?: string;
500
+ hitSlop?: PressableProps["hitSlop"];
501
+ accessibilityLabel?: string;
502
+ }
503
+ declare const RatingInput: react.ForwardRefExoticComponent<RatingInputProps & react.RefAttributes<View>>;
504
+
505
+ interface CommentCardProps extends Omit<ViewProps, "style" | "children"> {
506
+ userName: string;
507
+ date: string;
508
+ commentText: string;
509
+ rating: number;
510
+ imageUrl?: string | null;
511
+ maxCommentLines?: number;
512
+ maxCommentLength?: number;
513
+ readMoreLabel?: string;
514
+ readLessLabel?: string;
515
+ onExpandedChange?: (expanded: boolean) => void;
516
+ style?: StyleProp<ViewStyle>;
517
+ commentStyle?: StyleProp<TextStyle>;
518
+ className?: string;
519
+ }
520
+ declare const CommentCard: react.ForwardRefExoticComponent<CommentCardProps & react.RefAttributes<View>>;
521
+
470
522
  declare const grey: {
471
523
  readonly "0": "#767676";
472
524
  readonly "0.5": "#6E6E6E";
@@ -571,6 +623,45 @@ declare const counterTypography: {
571
623
  readonly lineHeight: 14;
572
624
  readonly letterSpacing: 0;
573
625
  };
626
+ /** Rating score — Bold 32, line-height 112%, letter-spacing 0. */
627
+ declare const ratingTypography: {
628
+ readonly fontFamily: "Noto Sans Armenian";
629
+ readonly fontSize: 32;
630
+ readonly fontWeight: "700";
631
+ readonly lineHeight: 35.84;
632
+ readonly letterSpacing: 0;
633
+ };
634
+ /** Comment card identity, body, and action typography. */
635
+ declare const commentCardTypography: {
636
+ readonly name: {
637
+ readonly fontFamily: "Noto Sans Armenian";
638
+ readonly fontSize: 16;
639
+ readonly fontWeight: "600";
640
+ readonly lineHeight: 18;
641
+ readonly letterSpacing: 0;
642
+ };
643
+ readonly date: {
644
+ readonly fontFamily: "Noto Sans Armenian";
645
+ readonly fontSize: 14;
646
+ readonly fontWeight: "400";
647
+ readonly lineHeight: 16;
648
+ readonly letterSpacing: 0;
649
+ };
650
+ readonly comment: {
651
+ readonly fontFamily: "Noto Sans Armenian";
652
+ readonly fontSize: 14;
653
+ readonly fontWeight: "400";
654
+ readonly lineHeight: 19;
655
+ readonly letterSpacing: 0;
656
+ };
657
+ readonly action: {
658
+ readonly fontFamily: "Noto Sans Armenian";
659
+ readonly fontSize: 12;
660
+ readonly fontWeight: "700";
661
+ readonly lineHeight: 12;
662
+ readonly letterSpacing: 0;
663
+ };
664
+ };
574
665
  /** Input label / field / hint typography. */
575
666
  declare const inputTypography: {
576
667
  readonly label: {
@@ -707,4 +798,4 @@ declare const textareaTypography: {
707
798
  };
708
799
  };
709
800
 
710
- export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, Counter, type CounterProps, DatePicker, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRange, FacebookIcon, type GreyStep, HeartIcon, HelpCircleIcon, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, type MenuItemProps, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, SearchIcon, SegmentedToggle, type SegmentedToggleOption, type SegmentedToggleProps, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, SidebarIcon, StatCard, type StatCardProps, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
801
+ export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, CommentCard, type CommentCardProps, Counter, type CounterProps, DatePicker, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRange, FacebookIcon, type GreyStep, HeartIcon, HelpCircleIcon, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, type MenuItemProps, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, RatingInput, type RatingInputProps, SearchIcon, SegmentedToggle, type SegmentedToggleOption, type SegmentedToggleProps, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, SidebarIcon, StarFilledIcon, StarIcon, type StarIconProps, StatCard, type StatCardProps, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, commentCardTypography, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, ratingTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
package/dist/index.d.ts CHANGED
@@ -163,6 +163,19 @@ declare function ShowIcon({ size, color, strokeWidth }: ShowIconProps): react.JS
163
163
  /** Native — react-native-svg (peer dependency). */
164
164
  declare function SidebarIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
165
165
 
166
+ interface StarIconProps extends IconProps {
167
+ active?: boolean;
168
+ height?: number;
169
+ }
170
+ /** Native — active is solid orange; inactive is a grey outline. */
171
+ declare function StarIcon({ active, size, height, color, strokeWidth, }: StarIconProps): react.JSX.Element;
172
+
173
+ interface StarFilledIconProps extends IconProps {
174
+ height?: number;
175
+ }
176
+ /** Native — supplied solid orange 28×26 star icon. */
177
+ declare function StarFilledIcon({ size, height, color, strokeWidth, }: StarFilledIconProps): react.JSX.Element;
178
+
166
179
  interface UserIconProps {
167
180
  size?: number;
168
181
  color?: string;
@@ -207,6 +220,8 @@ declare const icons: {
207
220
  readonly settings: typeof SettingsIcon;
208
221
  readonly show: typeof ShowIcon;
209
222
  readonly sidebar: typeof SidebarIcon;
223
+ readonly star: typeof StarIcon;
224
+ readonly starFilled: typeof StarFilledIcon;
210
225
  readonly user: typeof UserIcon;
211
226
  readonly usersAlt: typeof UsersAltIcon;
212
227
  readonly video: typeof VideoIcon;
@@ -215,7 +230,7 @@ type IconName = keyof typeof icons;
215
230
  declare const iconNames: IconName[];
216
231
  declare const iconGroups: {
217
232
  readonly navigation: readonly ["arrowRight", "chevronDown", "chevronLeft", "home", "navigate"];
218
- readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart", "minus", "plus"];
233
+ readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart", "star", "starFilled", "minus", "plus"];
219
234
  readonly objects: readonly ["bag", "building", "clock", "user", "usersAlt", "video"];
220
235
  readonly communication: readonly ["mail", "phone"];
221
236
  readonly social: readonly ["facebook", "instagram", "linkedin"];
@@ -467,6 +482,43 @@ interface ToggleProps extends Omit<PressableProps, "onPress" | "disabled" | "sty
467
482
  }
468
483
  declare const Toggle: react.ForwardRefExoticComponent<ToggleProps & react.RefAttributes<react_native.View>>;
469
484
 
485
+ interface RatingInputProps extends Omit<ViewProps, "style" | "children"> {
486
+ value?: number;
487
+ defaultValue?: number;
488
+ onValueChange?: (value: number) => void;
489
+ showValue?: boolean;
490
+ precision?: number;
491
+ /** Star item size. Glyph dimensions and default spacing scale with it. */
492
+ size?: number;
493
+ /** Overrides the proportional spacing between star items. */
494
+ starGap?: number;
495
+ readOnly?: boolean;
496
+ disabled?: boolean;
497
+ style?: StyleProp<ViewStyle>;
498
+ valueStyle?: StyleProp<TextStyle>;
499
+ className?: string;
500
+ hitSlop?: PressableProps["hitSlop"];
501
+ accessibilityLabel?: string;
502
+ }
503
+ declare const RatingInput: react.ForwardRefExoticComponent<RatingInputProps & react.RefAttributes<View>>;
504
+
505
+ interface CommentCardProps extends Omit<ViewProps, "style" | "children"> {
506
+ userName: string;
507
+ date: string;
508
+ commentText: string;
509
+ rating: number;
510
+ imageUrl?: string | null;
511
+ maxCommentLines?: number;
512
+ maxCommentLength?: number;
513
+ readMoreLabel?: string;
514
+ readLessLabel?: string;
515
+ onExpandedChange?: (expanded: boolean) => void;
516
+ style?: StyleProp<ViewStyle>;
517
+ commentStyle?: StyleProp<TextStyle>;
518
+ className?: string;
519
+ }
520
+ declare const CommentCard: react.ForwardRefExoticComponent<CommentCardProps & react.RefAttributes<View>>;
521
+
470
522
  declare const grey: {
471
523
  readonly "0": "#767676";
472
524
  readonly "0.5": "#6E6E6E";
@@ -571,6 +623,45 @@ declare const counterTypography: {
571
623
  readonly lineHeight: 14;
572
624
  readonly letterSpacing: 0;
573
625
  };
626
+ /** Rating score — Bold 32, line-height 112%, letter-spacing 0. */
627
+ declare const ratingTypography: {
628
+ readonly fontFamily: "Noto Sans Armenian";
629
+ readonly fontSize: 32;
630
+ readonly fontWeight: "700";
631
+ readonly lineHeight: 35.84;
632
+ readonly letterSpacing: 0;
633
+ };
634
+ /** Comment card identity, body, and action typography. */
635
+ declare const commentCardTypography: {
636
+ readonly name: {
637
+ readonly fontFamily: "Noto Sans Armenian";
638
+ readonly fontSize: 16;
639
+ readonly fontWeight: "600";
640
+ readonly lineHeight: 18;
641
+ readonly letterSpacing: 0;
642
+ };
643
+ readonly date: {
644
+ readonly fontFamily: "Noto Sans Armenian";
645
+ readonly fontSize: 14;
646
+ readonly fontWeight: "400";
647
+ readonly lineHeight: 16;
648
+ readonly letterSpacing: 0;
649
+ };
650
+ readonly comment: {
651
+ readonly fontFamily: "Noto Sans Armenian";
652
+ readonly fontSize: 14;
653
+ readonly fontWeight: "400";
654
+ readonly lineHeight: 19;
655
+ readonly letterSpacing: 0;
656
+ };
657
+ readonly action: {
658
+ readonly fontFamily: "Noto Sans Armenian";
659
+ readonly fontSize: 12;
660
+ readonly fontWeight: "700";
661
+ readonly lineHeight: 12;
662
+ readonly letterSpacing: 0;
663
+ };
664
+ };
574
665
  /** Input label / field / hint typography. */
575
666
  declare const inputTypography: {
576
667
  readonly label: {
@@ -707,4 +798,4 @@ declare const textareaTypography: {
707
798
  };
708
799
  };
709
800
 
710
- export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, Counter, type CounterProps, DatePicker, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRange, FacebookIcon, type GreyStep, HeartIcon, HelpCircleIcon, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, type MenuItemProps, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, SearchIcon, SegmentedToggle, type SegmentedToggleOption, type SegmentedToggleProps, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, SidebarIcon, StatCard, type StatCardProps, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
801
+ export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, CommentCard, type CommentCardProps, Counter, type CounterProps, DatePicker, type DatePickerProps, type DatePickerRangeProps, type DatePickerSingleProps, type DateRange, FacebookIcon, type GreyStep, HeartIcon, HelpCircleIcon, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, type MenuItemProps, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, RatingInput, type RatingInputProps, SearchIcon, SegmentedToggle, type SegmentedToggleOption, type SegmentedToggleProps, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, SidebarIcon, StarFilledIcon, StarIcon, type StarIconProps, StatCard, type StatCardProps, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, commentCardTypography, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, ratingTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
package/dist/index.js CHANGED
@@ -108,6 +108,43 @@ var counterTypography = {
108
108
  lineHeight: 14,
109
109
  letterSpacing: 0
110
110
  };
111
+ var ratingTypography = {
112
+ fontFamily: fonts.sans,
113
+ fontSize: 32,
114
+ fontWeight: "700",
115
+ lineHeight: 35.84,
116
+ letterSpacing: 0
117
+ };
118
+ var commentCardTypography = {
119
+ name: {
120
+ fontFamily: fonts.sans,
121
+ fontSize: 16,
122
+ fontWeight: "600",
123
+ lineHeight: 18,
124
+ letterSpacing: 0
125
+ },
126
+ date: {
127
+ fontFamily: fonts.sans,
128
+ fontSize: 14,
129
+ fontWeight: "400",
130
+ lineHeight: 16,
131
+ letterSpacing: 0
132
+ },
133
+ comment: {
134
+ fontFamily: fonts.sans,
135
+ fontSize: 14,
136
+ fontWeight: "400",
137
+ lineHeight: 19,
138
+ letterSpacing: 0
139
+ },
140
+ action: {
141
+ fontFamily: fonts.sans,
142
+ fontSize: 12,
143
+ fontWeight: "700",
144
+ lineHeight: 12,
145
+ letterSpacing: 0
146
+ }
147
+ };
111
148
  var inputTypography = {
112
149
  label: {
113
150
  fontFamily: fonts.sans,
@@ -705,6 +742,47 @@ function SidebarIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
705
742
  ) });
706
743
  }
707
744
 
745
+ // src/icons/Star/starPath.ts
746
+ 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";
747
+ function StarIcon({
748
+ active = false,
749
+ size = 28,
750
+ height,
751
+ color,
752
+ strokeWidth = 2
753
+ }) {
754
+ const resolvedColor = color ?? (active ? "#E38E5E" : colors.grey150);
755
+ return /* @__PURE__ */ jsx(Svg, { width: size, height: height ?? size * 26 / 28, viewBox: "0 0 28 26", fill: "none", children: /* @__PURE__ */ jsx(
756
+ Path,
757
+ {
758
+ d: STAR_PATH,
759
+ fill: active ? resolvedColor : "none",
760
+ stroke: resolvedColor,
761
+ strokeWidth,
762
+ strokeLinecap: "round",
763
+ strokeLinejoin: "round"
764
+ }
765
+ ) });
766
+ }
767
+ function StarFilledIcon({
768
+ size = 28,
769
+ height,
770
+ color = "#E38E5E",
771
+ strokeWidth = 2
772
+ }) {
773
+ return /* @__PURE__ */ jsx(Svg, { width: size, height: height ?? size * 26 / 28, viewBox: "0 0 28 26", fill: color, children: /* @__PURE__ */ jsx(
774
+ Path,
775
+ {
776
+ d: STAR_PATH,
777
+ fill: color,
778
+ stroke: color,
779
+ strokeWidth,
780
+ strokeLinecap: "round",
781
+ strokeLinejoin: "round"
782
+ }
783
+ ) });
784
+ }
785
+
708
786
  // src/icons/User/userPath.ts
709
787
  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";
710
788
  function UserIcon({ size = 20, color = colors.primary, strokeWidth = 2 }) {
@@ -777,6 +855,8 @@ var icons = {
777
855
  settings: SettingsIcon,
778
856
  show: ShowIcon,
779
857
  sidebar: SidebarIcon,
858
+ star: StarIcon,
859
+ starFilled: StarFilledIcon,
780
860
  user: UserIcon,
781
861
  usersAlt: UsersAltIcon,
782
862
  video: VideoIcon
@@ -795,6 +875,8 @@ var iconGroups = {
795
875
  "calendar",
796
876
  "calendarOutline",
797
877
  "heart",
878
+ "star",
879
+ "starFilled",
798
880
  "minus",
799
881
  "plus"
800
882
  ],
@@ -3486,7 +3568,273 @@ var styles13 = StyleSheet.create({
3486
3568
  color: colors.white
3487
3569
  }
3488
3570
  });
3571
+ var STAR_COUNT = 5;
3572
+ var BASE_ITEM_SIZE = 16;
3573
+ var ICON_WIDTH_RATIO = 12.57 / BASE_ITEM_SIZE;
3574
+ var ICON_HEIGHT_RATIO = 11.98 / BASE_ITEM_SIZE;
3575
+ var STAR_GAP_RATIO = 2 / BASE_ITEM_SIZE;
3576
+ function clamp2(value) {
3577
+ return Math.max(0, Math.min(value, STAR_COUNT));
3578
+ }
3579
+ var RatingInput = forwardRef(
3580
+ function RatingInput2({
3581
+ value,
3582
+ defaultValue = 0,
3583
+ onValueChange,
3584
+ showValue = true,
3585
+ precision = 1,
3586
+ size = 20,
3587
+ starGap,
3588
+ readOnly = false,
3589
+ disabled = false,
3590
+ style,
3591
+ valueStyle,
3592
+ className,
3593
+ hitSlop = 6,
3594
+ accessibilityLabel,
3595
+ ...rest
3596
+ }, forwardedRef) {
3597
+ const containerRef = useRef(null);
3598
+ const setContainerRef = useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
3599
+ const isControlled = value !== void 0;
3600
+ const [uncontrolledValue, setUncontrolledValue] = useState(() => clamp2(defaultValue));
3601
+ const selectedValue = clamp2(isControlled ? value : uncontrolledValue);
3602
+ const selectedStarCount = Math.round(selectedValue);
3603
+ const iconWidth = size * ICON_WIDTH_RATIO;
3604
+ const iconHeight = size * ICON_HEIGHT_RATIO;
3605
+ const resolvedStarGap = starGap ?? size * STAR_GAP_RATIO;
3606
+ const resolvedAccessibilityLabel = accessibilityLabel ?? (readOnly ? `${selectedValue} out of ${STAR_COUNT} stars` : "Rating");
3607
+ useApplyWebClassName(containerRef, className);
3608
+ const selectValue = (nextValue) => {
3609
+ if (disabled || nextValue === selectedValue) return;
3610
+ if (!isControlled) setUncontrolledValue(nextValue);
3611
+ onValueChange?.(nextValue);
3612
+ };
3613
+ return /* @__PURE__ */ jsxs(
3614
+ View,
3615
+ {
3616
+ ...rest,
3617
+ ref: setContainerRef,
3618
+ style: [styles14.root, disabled && styles14.disabled, style],
3619
+ children: [
3620
+ showValue ? /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles14.value, valueStyle], children: selectedValue.toFixed(precision) }) : null,
3621
+ /* @__PURE__ */ jsx(
3622
+ View,
3623
+ {
3624
+ accessibilityRole: readOnly ? "image" : "radiogroup",
3625
+ accessibilityLabel: resolvedAccessibilityLabel,
3626
+ accessibilityState: { disabled },
3627
+ style: [styles14.stars, { gap: resolvedStarGap }],
3628
+ children: Array.from({ length: STAR_COUNT }, (_, index) => {
3629
+ const starValue = index + 1;
3630
+ const isSelected = starValue <= selectedStarCount;
3631
+ const icon = isSelected ? /* @__PURE__ */ jsx(StarFilledIcon, { size: iconWidth, height: iconHeight }) : /* @__PURE__ */ jsx(StarIcon, { size: iconWidth, height: iconHeight });
3632
+ const itemStyle = [styles14.starItem, { width: size, height: size }];
3633
+ if (readOnly) {
3634
+ return /* @__PURE__ */ jsx(View, { style: itemStyle, children: icon }, starValue);
3635
+ }
3636
+ return /* @__PURE__ */ jsx(
3637
+ Pressable,
3638
+ {
3639
+ disabled,
3640
+ hitSlop,
3641
+ onPress: () => selectValue(starValue),
3642
+ accessibilityRole: "radio",
3643
+ accessibilityLabel: `${starValue} star${starValue === 1 ? "" : "s"}`,
3644
+ accessibilityState: { checked: isSelected, disabled },
3645
+ style: itemStyle,
3646
+ children: icon
3647
+ },
3648
+ starValue
3649
+ );
3650
+ })
3651
+ }
3652
+ )
3653
+ ]
3654
+ }
3655
+ );
3656
+ }
3657
+ );
3658
+ var styles14 = StyleSheet.create({
3659
+ root: {
3660
+ flexDirection: "row",
3661
+ alignItems: "center",
3662
+ flexWrap: "nowrap",
3663
+ alignSelf: "flex-start",
3664
+ gap: 16
3665
+ },
3666
+ stars: {
3667
+ flexDirection: "row",
3668
+ alignItems: "center"
3669
+ },
3670
+ starItem: {
3671
+ alignItems: "center",
3672
+ justifyContent: "center"
3673
+ },
3674
+ value: {
3675
+ ...ratingTypography,
3676
+ color: colors.white
3677
+ },
3678
+ disabled: {
3679
+ opacity: 0.5
3680
+ }
3681
+ });
3682
+ var CARD_WIDTH = 370;
3683
+ var CARD_MIN_HEIGHT = 173;
3684
+ var AVATAR_SIZE = 44;
3685
+ var CommentCard = forwardRef(
3686
+ function CommentCard2({
3687
+ userName,
3688
+ date,
3689
+ commentText,
3690
+ rating,
3691
+ imageUrl,
3692
+ maxCommentLines = 3,
3693
+ maxCommentLength = 111,
3694
+ readMoreLabel = "\u0534\u056B\u057F\u0565\u056C \u0561\u057E\u0565\u056C\u056B\u0576",
3695
+ readLessLabel = "\u0553\u0561\u056F\u0565\u056C",
3696
+ onExpandedChange,
3697
+ style,
3698
+ commentStyle,
3699
+ className,
3700
+ ...rest
3701
+ }, forwardedRef) {
3702
+ const containerRef = useRef(null);
3703
+ const setContainerRef = useMemo(() => mergeRefs(containerRef, forwardedRef), [forwardedRef]);
3704
+ const [imageFailed, setImageFailed] = useState(false);
3705
+ const [expanded, setExpanded] = useState(false);
3706
+ const [actionHovered, setActionHovered] = useState(false);
3707
+ const hasImage = Boolean(imageUrl) && !imageFailed;
3708
+ const shouldShowAction = Array.from(commentText).length >= maxCommentLength;
3709
+ useApplyWebClassName(containerRef, className);
3710
+ useEffect(() => {
3711
+ setImageFailed(false);
3712
+ }, [imageUrl]);
3713
+ useEffect(() => {
3714
+ setExpanded(false);
3715
+ setActionHovered(false);
3716
+ }, [commentText, maxCommentLength, maxCommentLines]);
3717
+ const toggleExpanded = () => {
3718
+ const next = !expanded;
3719
+ setExpanded(next);
3720
+ onExpandedChange?.(next);
3721
+ };
3722
+ return /* @__PURE__ */ jsxs(View, { ...rest, ref: setContainerRef, style: [styles15.root, style], children: [
3723
+ /* @__PURE__ */ jsxs(View, { style: styles15.header, children: [
3724
+ /* @__PURE__ */ jsx(View, { style: styles15.avatar, children: hasImage ? /* @__PURE__ */ jsx(
3725
+ Image,
3726
+ {
3727
+ source: { uri: imageUrl ?? void 0 },
3728
+ style: styles15.avatarImage,
3729
+ onError: () => setImageFailed(true)
3730
+ }
3731
+ ) : /* @__PURE__ */ jsx(UserIcon, { size: 20, color: colors.primary }) }),
3732
+ /* @__PURE__ */ jsxs(View, { style: styles15.identity, children: [
3733
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles15.name, children: userName }),
3734
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: styles15.date, children: date })
3735
+ ] }),
3736
+ /* @__PURE__ */ jsx(RatingInput, { value: rating, readOnly: true, showValue: false, size: 16 })
3737
+ ] }),
3738
+ /* @__PURE__ */ jsx(
3739
+ Text,
3740
+ {
3741
+ numberOfLines: expanded ? void 0 : maxCommentLines,
3742
+ style: [styles15.comment, commentStyle],
3743
+ children: commentText
3744
+ }
3745
+ ),
3746
+ shouldShowAction ? /* @__PURE__ */ jsx(
3747
+ Pressable,
3748
+ {
3749
+ onPress: toggleExpanded,
3750
+ accessibilityRole: "button",
3751
+ accessibilityState: { expanded },
3752
+ hitSlop: 6,
3753
+ onHoverIn: () => setActionHovered(true),
3754
+ onHoverOut: () => setActionHovered(false),
3755
+ style: styles15.action,
3756
+ children: /* @__PURE__ */ jsx(
3757
+ Text,
3758
+ {
3759
+ style: [
3760
+ styles15.actionText,
3761
+ expanded && styles15.closeActionText,
3762
+ actionHovered && (expanded ? styles15.closeActionTextHovered : styles15.openActionTextHovered)
3763
+ ],
3764
+ children: expanded ? readLessLabel : readMoreLabel
3765
+ }
3766
+ )
3767
+ }
3768
+ ) : null
3769
+ ] });
3770
+ }
3771
+ );
3772
+ var styles15 = StyleSheet.create({
3773
+ root: {
3774
+ width: CARD_WIDTH,
3775
+ minHeight: CARD_MIN_HEIGHT,
3776
+ padding: 16,
3777
+ gap: 12,
3778
+ borderRadius: 12,
3779
+ backgroundColor: colors.grey750
3780
+ },
3781
+ header: {
3782
+ flexDirection: "row",
3783
+ alignItems: "center",
3784
+ gap: 8
3785
+ },
3786
+ avatar: {
3787
+ width: AVATAR_SIZE,
3788
+ height: AVATAR_SIZE,
3789
+ flexShrink: 0,
3790
+ alignItems: "center",
3791
+ justifyContent: "center",
3792
+ overflow: "hidden",
3793
+ borderRadius: AVATAR_SIZE / 2,
3794
+ backgroundColor: colors.grey600
3795
+ },
3796
+ avatarImage: {
3797
+ width: AVATAR_SIZE,
3798
+ height: AVATAR_SIZE
3799
+ },
3800
+ identity: {
3801
+ minWidth: 0,
3802
+ flex: 1,
3803
+ gap: 4
3804
+ },
3805
+ name: {
3806
+ ...commentCardTypography.name,
3807
+ color: colors.white
3808
+ },
3809
+ date: {
3810
+ ...commentCardTypography.date,
3811
+ color: colors.grey0
3812
+ },
3813
+ comment: {
3814
+ ...commentCardTypography.comment,
3815
+ color: colors.white
3816
+ },
3817
+ action: {
3818
+ alignSelf: "flex-start",
3819
+ marginTop: "auto",
3820
+ minHeight: 16,
3821
+ justifyContent: "center"
3822
+ },
3823
+ actionText: {
3824
+ ...commentCardTypography.action,
3825
+ color: colors.white
3826
+ },
3827
+ closeActionText: {
3828
+ color: colors.primary
3829
+ },
3830
+ openActionTextHovered: {
3831
+ color: colors.primary
3832
+ },
3833
+ closeActionTextHovered: {
3834
+ color: colors.white
3835
+ }
3836
+ });
3489
3837
 
3490
- export { ArrowRightIcon, Avatar, Badge, BagIcon, BellIcon, BuildingIcon, Button, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ClockIcon, Counter, DatePicker, FacebookIcon, HeartIcon, HelpCircleIcon, HomeIcon, Icon, Input, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, SearchIcon, SegmentedToggle, Select, SettingsIcon, ShowIcon, SidebarIcon, StatCard, Textarea, Toggle, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
3838
+ export { ArrowRightIcon, Avatar, Badge, BagIcon, BellIcon, BuildingIcon, Button, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ClockIcon, CommentCard, Counter, DatePicker, FacebookIcon, HeartIcon, HelpCircleIcon, HomeIcon, Icon, Input, InstagramIcon, KeyIcon, LayoutGridIcon, LinkedInIcon, LogOutIcon, MailIcon, MenuItem, MinusIcon, NavigateIcon, PhoneIcon, PlusIcon, RatingInput, SearchIcon, SegmentedToggle, Select, SettingsIcon, ShowIcon, SidebarIcon, StarFilledIcon, StarIcon, StatCard, Textarea, Toggle, UserIcon, UsersAltIcon, VideoIcon, avatarTypography, badgeTypography, buttonTypography, colors, commentCardTypography, counterTypography, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, ratingTypography, segmentedToggleTypography, selectTypography, statCardTypography, textareaTypography };
3491
3839
  //# sourceMappingURL=index.js.map
3492
3840
  //# sourceMappingURL=index.js.map