@ecohouse/ui 0.1.3 → 0.1.5

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 (63) hide show
  1. package/README.md +33 -13
  2. package/dist/index.cjs +1182 -104
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +206 -5
  5. package/dist/index.d.ts +206 -5
  6. package/dist/index.js +1171 -107
  7. package/dist/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/components/Avatar/Avatar.stories.tsx +133 -0
  10. package/src/components/Avatar/Avatar.tsx +337 -0
  11. package/src/components/Avatar/index.ts +2 -0
  12. package/src/components/DatePicker/DatePicker.stories.tsx +172 -0
  13. package/src/components/DatePicker/DatePicker.tsx +628 -0
  14. package/src/components/DatePicker/index.ts +7 -0
  15. package/src/components/Select/Select.tsx +1 -1
  16. package/src/components/index.ts +11 -0
  17. package/src/icons/Calendar/CalendarIcon.tsx +21 -0
  18. package/src/icons/Calendar/CalendarIcon.web.tsx +27 -0
  19. package/src/icons/Calendar/calendarPath.ts +3 -0
  20. package/src/icons/Calendar/index.ts +1 -0
  21. package/src/icons/CalendarOutline/CalendarOutlineIcon.tsx +25 -0
  22. package/src/icons/CalendarOutline/CalendarOutlineIcon.web.tsx +31 -0
  23. package/src/icons/CalendarOutline/calendarOutlinePath.ts +3 -0
  24. package/src/icons/CalendarOutline/index.ts +1 -0
  25. package/src/icons/ChevronLeft/ChevronLeftIcon.tsx +21 -0
  26. package/src/icons/ChevronLeft/ChevronLeftIcon.web.tsx +27 -0
  27. package/src/icons/ChevronLeft/chevronLeftPath.ts +2 -0
  28. package/src/icons/ChevronLeft/index.ts +1 -0
  29. package/src/icons/Heart/HeartIcon.tsx +23 -0
  30. package/src/icons/Heart/HeartIcon.web.tsx +29 -0
  31. package/src/icons/Heart/heartPath.ts +3 -0
  32. package/src/icons/Heart/index.ts +1 -0
  33. package/src/icons/HelpCircle/HelpCircleIcon.tsx +25 -0
  34. package/src/icons/HelpCircle/HelpCircleIcon.web.tsx +31 -0
  35. package/src/icons/HelpCircle/helpCirclePath.ts +3 -0
  36. package/src/icons/HelpCircle/index.ts +1 -0
  37. package/src/icons/LayoutGrid/LayoutGridIcon.tsx +25 -0
  38. package/src/icons/LayoutGrid/LayoutGridIcon.web.tsx +31 -0
  39. package/src/icons/LayoutGrid/index.ts +1 -0
  40. package/src/icons/LayoutGrid/layoutGridPath.ts +3 -0
  41. package/src/icons/LogOut/LogOutIcon.tsx +21 -0
  42. package/src/icons/LogOut/LogOutIcon.web.tsx +27 -0
  43. package/src/icons/LogOut/index.ts +1 -0
  44. package/src/icons/LogOut/logOutPath.ts +3 -0
  45. package/src/icons/Settings/SettingsIcon.tsx +21 -0
  46. package/src/icons/Settings/SettingsIcon.web.tsx +27 -0
  47. package/src/icons/Settings/index.ts +1 -0
  48. package/src/icons/Settings/settingsPath.ts +3 -0
  49. package/src/icons/Video/VideoIcon.tsx +24 -0
  50. package/src/icons/Video/VideoIcon.web.tsx +30 -0
  51. package/src/icons/Video/index.ts +1 -0
  52. package/src/icons/Video/videoPath.ts +5 -0
  53. package/src/icons/index.ts +9 -0
  54. package/src/icons/registry.ts +33 -3
  55. package/src/index.ts +30 -1
  56. package/src/primitives/MenuItem/MenuItem.stories.tsx +98 -0
  57. package/src/primitives/MenuItem/MenuItem.tsx +138 -0
  58. package/src/primitives/MenuItem/index.ts +2 -0
  59. package/src/primitives/index.ts +2 -0
  60. package/src/theme/colors.ts +2 -0
  61. package/src/theme/index.ts +2 -0
  62. package/src/theme/typography.ts +65 -0
  63. package/src/utils/dateUtils.ts +86 -0
package/dist/index.d.cts CHANGED
@@ -1,7 +1,61 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ComponentType } from 'react';
3
3
  import * as react_native from 'react-native';
4
- import { TouchableOpacityProps, GestureResponderEvent, StyleProp, ViewStyle, TextStyle, View, PressableProps, TextInputProps, TextInput, ViewProps } from 'react-native';
4
+ import { PressableProps, GestureResponderEvent, StyleProp, ViewStyle, TextStyle, View, TouchableOpacityProps, ViewProps, TextInputProps, TextInput } from 'react-native';
5
+
6
+ interface MenuItemProps extends Omit<PressableProps, "onPress" | "disabled" | "style" | "children" | "hitSlop"> {
7
+ /** Leading icon, e.g. `<CalendarIcon size={16} />` — pass it pre-colored. */
8
+ icon?: ReactNode;
9
+ label: string;
10
+ onPress?: (event: GestureResponderEvent) => void;
11
+ disabled?: boolean;
12
+ /** Row background at rest. Defaults to transparent. */
13
+ backgroundColor?: string;
14
+ /** Row background on hover/press. Defaults to `colors.grey600`. */
15
+ hoverColor?: string;
16
+ style?: StyleProp<ViewStyle>;
17
+ labelStyle?: StyleProp<TextStyle>;
18
+ className?: string;
19
+ hitSlop?: PressableProps["hitSlop"];
20
+ }
21
+ declare const MenuItem: react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<View>>;
22
+
23
+ /** Data shape for an Avatar dropdown option — same fields as `MenuItem`. */
24
+ type AvatarMenuItem = Pick<MenuItemProps, "icon" | "label" | "disabled" | "backgroundColor" | "hoverColor"> & {
25
+ /** Stable identity for React keys; falls back to `label`. */
26
+ key?: string;
27
+ onPress: () => void;
28
+ };
29
+ interface AvatarProps extends Omit<PressableProps, "onPress" | "disabled" | "style" | "children" | "hitSlop"> {
30
+ /** Logged-in user's display name. */
31
+ name: string;
32
+ /** Shown under the name, e.g. the user's email. */
33
+ email?: string;
34
+ /** Photo URL; falls back to a placeholder icon when missing or when it fails to load. */
35
+ imageUrl?: string | null;
36
+ /** Called on every press, in addition to any menu toggling driven by `menuItems`. */
37
+ onPress?: (event: GestureResponderEvent) => void;
38
+ /** External — non-interactive. */
39
+ disabled?: boolean;
40
+ /** Trailing chevron, typically used to hint a dropdown/menu. */
41
+ showChevron?: boolean;
42
+ /**
43
+ * Account-menu options, supplied entirely by the consumer (icon, label,
44
+ * action, and per-item colors). When set, pressing the chip opens a
45
+ * dropdown listing them via `MenuItem`.
46
+ */
47
+ menuItems?: AvatarMenuItem[];
48
+ /** Controlled open state for the menu. */
49
+ open?: boolean;
50
+ defaultOpen?: boolean;
51
+ onOpenChange?: (open: boolean) => void;
52
+ /** Fixed menu width; defaults to matching the chip's width. */
53
+ menuWidth?: number;
54
+ style?: StyleProp<ViewStyle>;
55
+ className?: string;
56
+ hitSlop?: PressableProps["hitSlop"];
57
+ }
58
+ declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<View>>;
5
59
 
6
60
  type ButtonVariant = "primary" | "secondary";
7
61
  type ButtonSize = "lg" | "sm";
@@ -37,6 +91,51 @@ interface CheckboxProps extends Omit<PressableProps, "onPress" | "disabled" | "s
37
91
  }
38
92
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<View>>;
39
93
 
94
+ type DateRange = {
95
+ start: Date | null;
96
+ end: Date | null;
97
+ };
98
+ type DatePickerBaseProps = Omit<ViewProps, "style" | "children"> & {
99
+ placeholder?: string;
100
+ open?: boolean;
101
+ defaultOpen?: boolean;
102
+ onOpenChange?: (open: boolean) => void;
103
+ disabled?: boolean;
104
+ /**
105
+ * When true (default), the calendar closes after a complete selection —
106
+ * a single date, or both ends of a range. Set false to keep it open.
107
+ */
108
+ closeOnSelect?: boolean;
109
+ minDate?: Date;
110
+ maxDate?: Date;
111
+ /** First visible month when the calendar opens; defaults to the selected value's month, else today. */
112
+ defaultVisibleMonth?: Date;
113
+ /** Monday-first full month names. Defaults to Armenian. */
114
+ monthNames?: string[];
115
+ /** Weekday abbreviations, ordered starting from `weekStartsOn`. Defaults to Armenian, Monday-first. */
116
+ weekdayLabels?: string[];
117
+ /** Formats a selected date for the trigger and day accessibility labels. Defaults to "DD.MM.YYYY". */
118
+ formatValue?: (date: Date) => string;
119
+ /** First day of the week column (0 = Sunday, 1 = Monday). Defaults to Monday. */
120
+ weekStartsOn?: 0 | 1;
121
+ style?: StyleProp<ViewStyle>;
122
+ className?: string;
123
+ };
124
+ type DatePickerSingleProps = DatePickerBaseProps & {
125
+ range?: false;
126
+ value?: Date | null;
127
+ defaultValue?: Date | null;
128
+ onValueChange?: (value: Date | null) => void;
129
+ };
130
+ type DatePickerRangeProps = DatePickerBaseProps & {
131
+ range: true;
132
+ value?: DateRange;
133
+ defaultValue?: DateRange;
134
+ onValueChange?: (value: DateRange) => void;
135
+ };
136
+ type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
137
+ declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<View>>;
138
+
40
139
  type InputSize = "lg" | "sm";
41
140
  interface InputProps extends Omit<TextInputProps, "style" | "editable"> {
42
141
  label?: string;
@@ -166,6 +265,12 @@ declare function BellIcon({ size, color, strokeWidth }: IconProps): react.JSX.El
166
265
 
167
266
  declare function BuildingIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
168
267
 
268
+ /** Native — react-native-svg (peer dependency). */
269
+ declare function CalendarIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
270
+
271
+ /** Native — react-native-svg (peer dependency). */
272
+ declare function CalendarOutlineIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
273
+
169
274
  declare function CameraIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
170
275
 
171
276
  interface CheckIconProps {
@@ -186,18 +291,33 @@ interface ChevronDownIconProps {
186
291
  /** Native — react-native-svg (peer dependency). */
187
292
  declare function ChevronDownIcon({ size, color, strokeWidth, }: ChevronDownIconProps): react.JSX.Element;
188
293
 
294
+ /** Native — react-native-svg (peer dependency). */
295
+ declare function ChevronLeftIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
296
+
189
297
  declare function ClockIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
190
298
 
191
299
  declare function FacebookIcon({ size, color }: IconProps): react.JSX.Element;
192
300
 
301
+ /** Native — react-native-svg (peer dependency). */
302
+ declare function HeartIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
303
+
304
+ /** Native — react-native-svg (peer dependency). */
305
+ declare function HelpCircleIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
306
+
193
307
  declare function HomeIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
194
308
 
195
309
  declare function InstagramIcon({ size, color }: IconProps): react.JSX.Element;
196
310
 
197
311
  declare function KeyIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
198
312
 
313
+ /** Native — react-native-svg (peer dependency). */
314
+ declare function LayoutGridIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
315
+
199
316
  declare function LinkedInIcon({ size, color }: IconProps): react.JSX.Element;
200
317
 
318
+ /** Native — react-native-svg (peer dependency). */
319
+ declare function LogOutIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
320
+
201
321
  declare function MailIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
202
322
 
203
323
  declare function NavigateIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
@@ -212,6 +332,9 @@ interface SearchIconProps {
212
332
  /** Native — react-native-svg (peer dependency). */
213
333
  declare function SearchIcon({ size, color, strokeWidth, }: SearchIconProps): react.JSX.Element;
214
334
 
335
+ /** Native — react-native-svg (peer dependency). */
336
+ declare function SettingsIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
337
+
215
338
  interface ShowIconProps {
216
339
  size?: number;
217
340
  color?: string;
@@ -228,36 +351,49 @@ interface UserIconProps {
228
351
  /** Native — react-native-svg (peer dependency). */
229
352
  declare function UserIcon({ size, color, strokeWidth }: UserIconProps): react.JSX.Element;
230
353
 
354
+ /** Native — react-native-svg (peer dependency). */
355
+ declare function VideoIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
356
+
231
357
  declare const icons: {
232
358
  readonly arrowRight: typeof ArrowRightIcon;
233
359
  readonly bag: typeof BagIcon;
234
360
  readonly bell: typeof BellIcon;
235
361
  readonly building: typeof BuildingIcon;
362
+ readonly calendar: typeof CalendarIcon;
363
+ readonly calendarOutline: typeof CalendarOutlineIcon;
236
364
  readonly camera: typeof CameraIcon;
237
365
  readonly check: typeof CheckIcon;
238
366
  readonly checkBadge: typeof CheckBadgeIcon;
239
367
  readonly chevronDown: typeof ChevronDownIcon;
368
+ readonly chevronLeft: typeof ChevronLeftIcon;
240
369
  readonly clock: typeof ClockIcon;
241
370
  readonly facebook: typeof FacebookIcon;
371
+ readonly heart: typeof HeartIcon;
372
+ readonly helpCircle: typeof HelpCircleIcon;
242
373
  readonly home: typeof HomeIcon;
243
374
  readonly instagram: typeof InstagramIcon;
244
375
  readonly key: typeof KeyIcon;
376
+ readonly layoutGrid: typeof LayoutGridIcon;
245
377
  readonly linkedin: typeof LinkedInIcon;
378
+ readonly logOut: typeof LogOutIcon;
246
379
  readonly mail: typeof MailIcon;
247
380
  readonly navigate: typeof NavigateIcon;
248
381
  readonly phone: typeof PhoneIcon;
249
382
  readonly search: typeof SearchIcon;
383
+ readonly settings: typeof SettingsIcon;
250
384
  readonly show: typeof ShowIcon;
251
385
  readonly user: typeof UserIcon;
386
+ readonly video: typeof VideoIcon;
252
387
  };
253
388
  type IconName = keyof typeof icons;
254
389
  declare const iconNames: IconName[];
255
390
  declare const iconGroups: {
256
- readonly navigation: readonly ["arrowRight", "chevronDown", "home", "navigate"];
257
- readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search"];
258
- readonly objects: readonly ["bag", "building", "clock", "user"];
391
+ readonly navigation: readonly ["arrowRight", "chevronDown", "chevronLeft", "home", "navigate"];
392
+ readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart"];
393
+ readonly objects: readonly ["bag", "building", "clock", "user", "video"];
259
394
  readonly communication: readonly ["mail", "phone"];
260
395
  readonly social: readonly ["facebook", "instagram", "linkedin"];
396
+ readonly interface: readonly ["layoutGrid", "settings", "helpCircle", "logOut"];
261
397
  };
262
398
  type IconGroup = keyof typeof iconGroups;
263
399
  declare const iconGroupNames: IconGroup[];
@@ -294,7 +430,9 @@ declare const colors: {
294
430
  readonly red: "#A63E3E";
295
431
  readonly lightGrey: "#B7B7B7";
296
432
  readonly primaryMuted: "#B464360F";
433
+ readonly primaryHover: "#B4643633";
297
434
  readonly redMuted: "#A63E3E0F";
435
+ readonly redHover: "#A63E3E33";
298
436
  readonly grey0: "#767676";
299
437
  readonly grey50: "#6E6E6E";
300
438
  readonly grey100: "#666666";
@@ -380,6 +518,69 @@ declare const selectTypography: {
380
518
  readonly letterSpacing: 0.36;
381
519
  };
382
520
  };
521
+ /** Avatar name / email / menu-item typography — 100% line-height, 0 letter-spacing. */
522
+ declare const avatarTypography: {
523
+ readonly name: {
524
+ readonly fontFamily: "Noto Sans Armenian";
525
+ readonly fontSize: 14;
526
+ readonly fontWeight: "600";
527
+ readonly lineHeight: 14;
528
+ readonly letterSpacing: 0;
529
+ };
530
+ readonly email: {
531
+ readonly fontFamily: "Noto Sans Armenian";
532
+ readonly fontSize: 12;
533
+ readonly fontWeight: "400";
534
+ readonly lineHeight: 12;
535
+ readonly letterSpacing: 0;
536
+ };
537
+ readonly menuItem: {
538
+ readonly fontFamily: "Noto Sans Armenian";
539
+ readonly fontSize: 12;
540
+ readonly fontWeight: "600";
541
+ readonly lineHeight: 12;
542
+ readonly letterSpacing: 0;
543
+ };
544
+ };
545
+ /**
546
+ * DatePicker typography — trigger field text plus the calendar-panel type
547
+ * (month heading, weekday header, day-cell numbers). No label/hint chrome —
548
+ * the Figma trigger is a standalone field. Figma didn't spec the month
549
+ * heading / day-cell number sizes, so those reuse the existing type scale
550
+ * for visual consistency with the rest of the kit.
551
+ */
552
+ declare const datePickerTypography: {
553
+ readonly field: {
554
+ readonly fontFamily: "Noto Sans Armenian";
555
+ readonly fontSize: 12;
556
+ readonly fontWeight: "400";
557
+ readonly lineHeight: 12;
558
+ readonly letterSpacing: 0.36;
559
+ };
560
+ /** Calendar month/year heading — Bold, centered, White. */
561
+ readonly monthHeading: {
562
+ readonly fontFamily: "Noto Sans Armenian";
563
+ readonly fontSize: 14;
564
+ readonly fontWeight: "700";
565
+ readonly lineHeight: 14;
566
+ readonly letterSpacing: 0;
567
+ };
568
+ /** Weekday header (ԵՐ, ԵՔ, ...) — Regular, uppercase, centered, Grey/300. */
569
+ readonly weekday: {
570
+ readonly fontFamily: "Noto Sans Armenian";
571
+ readonly fontSize: 12;
572
+ readonly fontWeight: "400";
573
+ readonly lineHeight: 12;
574
+ readonly letterSpacing: 0;
575
+ };
576
+ readonly day: {
577
+ readonly fontFamily: "Noto Sans Armenian";
578
+ readonly fontSize: 14;
579
+ readonly fontWeight: "400";
580
+ readonly lineHeight: 14;
581
+ readonly letterSpacing: 0;
582
+ };
583
+ };
383
584
  /** Textarea label / field / hint typography — Medium/Regular 12–14, letter-spacing 3%. */
384
585
  declare const textareaTypography: {
385
586
  readonly label: {
@@ -405,4 +606,4 @@ declare const textareaTypography: {
405
606
  };
406
607
  };
407
608
 
408
- export { ArrowRightIcon, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ClockIcon, FacebookIcon, type GreyStep, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LinkedInIcon, MailIcon, NavigateIcon, PhoneIcon, SearchIcon, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, ShowIcon, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, buttonTypography, colors, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, selectTypography, textareaTypography };
609
+ export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, 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, NavigateIcon, PhoneIcon, SearchIcon, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, VideoIcon, avatarTypography, buttonTypography, colors, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, selectTypography, textareaTypography };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,61 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ComponentType } from 'react';
3
3
  import * as react_native from 'react-native';
4
- import { TouchableOpacityProps, GestureResponderEvent, StyleProp, ViewStyle, TextStyle, View, PressableProps, TextInputProps, TextInput, ViewProps } from 'react-native';
4
+ import { PressableProps, GestureResponderEvent, StyleProp, ViewStyle, TextStyle, View, TouchableOpacityProps, ViewProps, TextInputProps, TextInput } from 'react-native';
5
+
6
+ interface MenuItemProps extends Omit<PressableProps, "onPress" | "disabled" | "style" | "children" | "hitSlop"> {
7
+ /** Leading icon, e.g. `<CalendarIcon size={16} />` — pass it pre-colored. */
8
+ icon?: ReactNode;
9
+ label: string;
10
+ onPress?: (event: GestureResponderEvent) => void;
11
+ disabled?: boolean;
12
+ /** Row background at rest. Defaults to transparent. */
13
+ backgroundColor?: string;
14
+ /** Row background on hover/press. Defaults to `colors.grey600`. */
15
+ hoverColor?: string;
16
+ style?: StyleProp<ViewStyle>;
17
+ labelStyle?: StyleProp<TextStyle>;
18
+ className?: string;
19
+ hitSlop?: PressableProps["hitSlop"];
20
+ }
21
+ declare const MenuItem: react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<View>>;
22
+
23
+ /** Data shape for an Avatar dropdown option — same fields as `MenuItem`. */
24
+ type AvatarMenuItem = Pick<MenuItemProps, "icon" | "label" | "disabled" | "backgroundColor" | "hoverColor"> & {
25
+ /** Stable identity for React keys; falls back to `label`. */
26
+ key?: string;
27
+ onPress: () => void;
28
+ };
29
+ interface AvatarProps extends Omit<PressableProps, "onPress" | "disabled" | "style" | "children" | "hitSlop"> {
30
+ /** Logged-in user's display name. */
31
+ name: string;
32
+ /** Shown under the name, e.g. the user's email. */
33
+ email?: string;
34
+ /** Photo URL; falls back to a placeholder icon when missing or when it fails to load. */
35
+ imageUrl?: string | null;
36
+ /** Called on every press, in addition to any menu toggling driven by `menuItems`. */
37
+ onPress?: (event: GestureResponderEvent) => void;
38
+ /** External — non-interactive. */
39
+ disabled?: boolean;
40
+ /** Trailing chevron, typically used to hint a dropdown/menu. */
41
+ showChevron?: boolean;
42
+ /**
43
+ * Account-menu options, supplied entirely by the consumer (icon, label,
44
+ * action, and per-item colors). When set, pressing the chip opens a
45
+ * dropdown listing them via `MenuItem`.
46
+ */
47
+ menuItems?: AvatarMenuItem[];
48
+ /** Controlled open state for the menu. */
49
+ open?: boolean;
50
+ defaultOpen?: boolean;
51
+ onOpenChange?: (open: boolean) => void;
52
+ /** Fixed menu width; defaults to matching the chip's width. */
53
+ menuWidth?: number;
54
+ style?: StyleProp<ViewStyle>;
55
+ className?: string;
56
+ hitSlop?: PressableProps["hitSlop"];
57
+ }
58
+ declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<View>>;
5
59
 
6
60
  type ButtonVariant = "primary" | "secondary";
7
61
  type ButtonSize = "lg" | "sm";
@@ -37,6 +91,51 @@ interface CheckboxProps extends Omit<PressableProps, "onPress" | "disabled" | "s
37
91
  }
38
92
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<View>>;
39
93
 
94
+ type DateRange = {
95
+ start: Date | null;
96
+ end: Date | null;
97
+ };
98
+ type DatePickerBaseProps = Omit<ViewProps, "style" | "children"> & {
99
+ placeholder?: string;
100
+ open?: boolean;
101
+ defaultOpen?: boolean;
102
+ onOpenChange?: (open: boolean) => void;
103
+ disabled?: boolean;
104
+ /**
105
+ * When true (default), the calendar closes after a complete selection —
106
+ * a single date, or both ends of a range. Set false to keep it open.
107
+ */
108
+ closeOnSelect?: boolean;
109
+ minDate?: Date;
110
+ maxDate?: Date;
111
+ /** First visible month when the calendar opens; defaults to the selected value's month, else today. */
112
+ defaultVisibleMonth?: Date;
113
+ /** Monday-first full month names. Defaults to Armenian. */
114
+ monthNames?: string[];
115
+ /** Weekday abbreviations, ordered starting from `weekStartsOn`. Defaults to Armenian, Monday-first. */
116
+ weekdayLabels?: string[];
117
+ /** Formats a selected date for the trigger and day accessibility labels. Defaults to "DD.MM.YYYY". */
118
+ formatValue?: (date: Date) => string;
119
+ /** First day of the week column (0 = Sunday, 1 = Monday). Defaults to Monday. */
120
+ weekStartsOn?: 0 | 1;
121
+ style?: StyleProp<ViewStyle>;
122
+ className?: string;
123
+ };
124
+ type DatePickerSingleProps = DatePickerBaseProps & {
125
+ range?: false;
126
+ value?: Date | null;
127
+ defaultValue?: Date | null;
128
+ onValueChange?: (value: Date | null) => void;
129
+ };
130
+ type DatePickerRangeProps = DatePickerBaseProps & {
131
+ range: true;
132
+ value?: DateRange;
133
+ defaultValue?: DateRange;
134
+ onValueChange?: (value: DateRange) => void;
135
+ };
136
+ type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
137
+ declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<View>>;
138
+
40
139
  type InputSize = "lg" | "sm";
41
140
  interface InputProps extends Omit<TextInputProps, "style" | "editable"> {
42
141
  label?: string;
@@ -166,6 +265,12 @@ declare function BellIcon({ size, color, strokeWidth }: IconProps): react.JSX.El
166
265
 
167
266
  declare function BuildingIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
168
267
 
268
+ /** Native — react-native-svg (peer dependency). */
269
+ declare function CalendarIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
270
+
271
+ /** Native — react-native-svg (peer dependency). */
272
+ declare function CalendarOutlineIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
273
+
169
274
  declare function CameraIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
170
275
 
171
276
  interface CheckIconProps {
@@ -186,18 +291,33 @@ interface ChevronDownIconProps {
186
291
  /** Native — react-native-svg (peer dependency). */
187
292
  declare function ChevronDownIcon({ size, color, strokeWidth, }: ChevronDownIconProps): react.JSX.Element;
188
293
 
294
+ /** Native — react-native-svg (peer dependency). */
295
+ declare function ChevronLeftIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
296
+
189
297
  declare function ClockIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
190
298
 
191
299
  declare function FacebookIcon({ size, color }: IconProps): react.JSX.Element;
192
300
 
301
+ /** Native — react-native-svg (peer dependency). */
302
+ declare function HeartIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
303
+
304
+ /** Native — react-native-svg (peer dependency). */
305
+ declare function HelpCircleIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
306
+
193
307
  declare function HomeIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
194
308
 
195
309
  declare function InstagramIcon({ size, color }: IconProps): react.JSX.Element;
196
310
 
197
311
  declare function KeyIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
198
312
 
313
+ /** Native — react-native-svg (peer dependency). */
314
+ declare function LayoutGridIcon({ size, color, strokeWidth, }: IconProps): react.JSX.Element;
315
+
199
316
  declare function LinkedInIcon({ size, color }: IconProps): react.JSX.Element;
200
317
 
318
+ /** Native — react-native-svg (peer dependency). */
319
+ declare function LogOutIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
320
+
201
321
  declare function MailIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
202
322
 
203
323
  declare function NavigateIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
@@ -212,6 +332,9 @@ interface SearchIconProps {
212
332
  /** Native — react-native-svg (peer dependency). */
213
333
  declare function SearchIcon({ size, color, strokeWidth, }: SearchIconProps): react.JSX.Element;
214
334
 
335
+ /** Native — react-native-svg (peer dependency). */
336
+ declare function SettingsIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
337
+
215
338
  interface ShowIconProps {
216
339
  size?: number;
217
340
  color?: string;
@@ -228,36 +351,49 @@ interface UserIconProps {
228
351
  /** Native — react-native-svg (peer dependency). */
229
352
  declare function UserIcon({ size, color, strokeWidth }: UserIconProps): react.JSX.Element;
230
353
 
354
+ /** Native — react-native-svg (peer dependency). */
355
+ declare function VideoIcon({ size, color, strokeWidth }: IconProps): react.JSX.Element;
356
+
231
357
  declare const icons: {
232
358
  readonly arrowRight: typeof ArrowRightIcon;
233
359
  readonly bag: typeof BagIcon;
234
360
  readonly bell: typeof BellIcon;
235
361
  readonly building: typeof BuildingIcon;
362
+ readonly calendar: typeof CalendarIcon;
363
+ readonly calendarOutline: typeof CalendarOutlineIcon;
236
364
  readonly camera: typeof CameraIcon;
237
365
  readonly check: typeof CheckIcon;
238
366
  readonly checkBadge: typeof CheckBadgeIcon;
239
367
  readonly chevronDown: typeof ChevronDownIcon;
368
+ readonly chevronLeft: typeof ChevronLeftIcon;
240
369
  readonly clock: typeof ClockIcon;
241
370
  readonly facebook: typeof FacebookIcon;
371
+ readonly heart: typeof HeartIcon;
372
+ readonly helpCircle: typeof HelpCircleIcon;
242
373
  readonly home: typeof HomeIcon;
243
374
  readonly instagram: typeof InstagramIcon;
244
375
  readonly key: typeof KeyIcon;
376
+ readonly layoutGrid: typeof LayoutGridIcon;
245
377
  readonly linkedin: typeof LinkedInIcon;
378
+ readonly logOut: typeof LogOutIcon;
246
379
  readonly mail: typeof MailIcon;
247
380
  readonly navigate: typeof NavigateIcon;
248
381
  readonly phone: typeof PhoneIcon;
249
382
  readonly search: typeof SearchIcon;
383
+ readonly settings: typeof SettingsIcon;
250
384
  readonly show: typeof ShowIcon;
251
385
  readonly user: typeof UserIcon;
386
+ readonly video: typeof VideoIcon;
252
387
  };
253
388
  type IconName = keyof typeof icons;
254
389
  declare const iconNames: IconName[];
255
390
  declare const iconGroups: {
256
- readonly navigation: readonly ["arrowRight", "chevronDown", "home", "navigate"];
257
- readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search"];
258
- readonly objects: readonly ["bag", "building", "clock", "user"];
391
+ readonly navigation: readonly ["arrowRight", "chevronDown", "chevronLeft", "home", "navigate"];
392
+ readonly actions: readonly ["show", "bell", "camera", "key", "check", "checkBadge", "search", "calendar", "calendarOutline", "heart"];
393
+ readonly objects: readonly ["bag", "building", "clock", "user", "video"];
259
394
  readonly communication: readonly ["mail", "phone"];
260
395
  readonly social: readonly ["facebook", "instagram", "linkedin"];
396
+ readonly interface: readonly ["layoutGrid", "settings", "helpCircle", "logOut"];
261
397
  };
262
398
  type IconGroup = keyof typeof iconGroups;
263
399
  declare const iconGroupNames: IconGroup[];
@@ -294,7 +430,9 @@ declare const colors: {
294
430
  readonly red: "#A63E3E";
295
431
  readonly lightGrey: "#B7B7B7";
296
432
  readonly primaryMuted: "#B464360F";
433
+ readonly primaryHover: "#B4643633";
297
434
  readonly redMuted: "#A63E3E0F";
435
+ readonly redHover: "#A63E3E33";
298
436
  readonly grey0: "#767676";
299
437
  readonly grey50: "#6E6E6E";
300
438
  readonly grey100: "#666666";
@@ -380,6 +518,69 @@ declare const selectTypography: {
380
518
  readonly letterSpacing: 0.36;
381
519
  };
382
520
  };
521
+ /** Avatar name / email / menu-item typography — 100% line-height, 0 letter-spacing. */
522
+ declare const avatarTypography: {
523
+ readonly name: {
524
+ readonly fontFamily: "Noto Sans Armenian";
525
+ readonly fontSize: 14;
526
+ readonly fontWeight: "600";
527
+ readonly lineHeight: 14;
528
+ readonly letterSpacing: 0;
529
+ };
530
+ readonly email: {
531
+ readonly fontFamily: "Noto Sans Armenian";
532
+ readonly fontSize: 12;
533
+ readonly fontWeight: "400";
534
+ readonly lineHeight: 12;
535
+ readonly letterSpacing: 0;
536
+ };
537
+ readonly menuItem: {
538
+ readonly fontFamily: "Noto Sans Armenian";
539
+ readonly fontSize: 12;
540
+ readonly fontWeight: "600";
541
+ readonly lineHeight: 12;
542
+ readonly letterSpacing: 0;
543
+ };
544
+ };
545
+ /**
546
+ * DatePicker typography — trigger field text plus the calendar-panel type
547
+ * (month heading, weekday header, day-cell numbers). No label/hint chrome —
548
+ * the Figma trigger is a standalone field. Figma didn't spec the month
549
+ * heading / day-cell number sizes, so those reuse the existing type scale
550
+ * for visual consistency with the rest of the kit.
551
+ */
552
+ declare const datePickerTypography: {
553
+ readonly field: {
554
+ readonly fontFamily: "Noto Sans Armenian";
555
+ readonly fontSize: 12;
556
+ readonly fontWeight: "400";
557
+ readonly lineHeight: 12;
558
+ readonly letterSpacing: 0.36;
559
+ };
560
+ /** Calendar month/year heading — Bold, centered, White. */
561
+ readonly monthHeading: {
562
+ readonly fontFamily: "Noto Sans Armenian";
563
+ readonly fontSize: 14;
564
+ readonly fontWeight: "700";
565
+ readonly lineHeight: 14;
566
+ readonly letterSpacing: 0;
567
+ };
568
+ /** Weekday header (ԵՐ, ԵՔ, ...) — Regular, uppercase, centered, Grey/300. */
569
+ readonly weekday: {
570
+ readonly fontFamily: "Noto Sans Armenian";
571
+ readonly fontSize: 12;
572
+ readonly fontWeight: "400";
573
+ readonly lineHeight: 12;
574
+ readonly letterSpacing: 0;
575
+ };
576
+ readonly day: {
577
+ readonly fontFamily: "Noto Sans Armenian";
578
+ readonly fontSize: 14;
579
+ readonly fontWeight: "400";
580
+ readonly lineHeight: 14;
581
+ readonly letterSpacing: 0;
582
+ };
583
+ };
383
584
  /** Textarea label / field / hint typography — Medium/Regular 12–14, letter-spacing 3%. */
384
585
  declare const textareaTypography: {
385
586
  readonly label: {
@@ -405,4 +606,4 @@ declare const textareaTypography: {
405
606
  };
406
607
  };
407
608
 
408
- export { ArrowRightIcon, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ClockIcon, FacebookIcon, type GreyStep, HomeIcon, Icon, type IconByNameProps, type IconComponent, type IconGroup, type IconName, type IconProps, Input, type InputProps, type InputSize, InstagramIcon, KeyIcon, LinkedInIcon, MailIcon, NavigateIcon, PhoneIcon, SearchIcon, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, ShowIcon, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, buttonTypography, colors, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, selectTypography, textareaTypography };
609
+ export { ArrowRightIcon, Avatar, type AvatarMenuItem, type AvatarProps, BagIcon, BellIcon, BuildingIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, CalendarOutlineIcon, CameraIcon, CheckBadgeIcon, CheckIcon, Checkbox, type CheckboxProps, type CheckboxVariant, ChevronDownIcon, ChevronLeftIcon, ClockIcon, 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, NavigateIcon, PhoneIcon, SearchIcon, Select, type SelectMultipleProps, type SelectOption, type SelectProps, type SelectSingleProps, SettingsIcon, ShowIcon, Textarea, type TextareaProps, Toggle, type ToggleProps, UserIcon, VideoIcon, avatarTypography, buttonTypography, colors, datePickerTypography, fonts, getIconsByGroup, grey, iconGroupNames, iconGroups, iconNames, icons, inputTypography, selectTypography, textareaTypography };