@ecohouse/ui 0.1.33 → 0.1.34

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 (45) hide show
  1. package/dist/index.cjs +29640 -471
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +101 -4
  4. package/dist/index.d.ts +101 -4
  5. package/dist/index.js +29568 -407
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/components/AccordionItem/AccordionItem.stories.tsx +54 -0
  9. package/src/components/AccordionItem/AccordionItem.tsx +220 -0
  10. package/src/components/AccordionItem/index.ts +2 -0
  11. package/src/components/AccountHeader/AccountHeader.tsx +34 -29
  12. package/src/components/Button/Button.stories.tsx +10 -1
  13. package/src/components/Button/Button.tsx +32 -3
  14. package/src/components/ContactInfoCard/ContactInfoCard.stories.tsx +30 -0
  15. package/src/components/ContactInfoCard/ContactInfoCard.tsx +141 -0
  16. package/src/components/ContactInfoCard/index.ts +2 -0
  17. package/src/components/DatePicker/DatePicker.tsx +4 -1
  18. package/src/components/Modal/Modal.stories.tsx +100 -0
  19. package/src/components/Modal/Modal.tsx +165 -0
  20. package/src/components/Modal/index.ts +2 -0
  21. package/src/components/Sidebar/Sidebar.tsx +19 -3
  22. package/src/components/ToggleRow/ToggleRow.stories.tsx +46 -0
  23. package/src/components/ToggleRow/ToggleRow.tsx +121 -0
  24. package/src/components/ToggleRow/index.ts +2 -0
  25. package/src/components/VerificationCodeInput/VerificationCodeInput.tsx +80 -60
  26. package/src/components/index.ts +12 -0
  27. package/src/icons/CameraFilled/CameraFilledIcon.tsx +15 -0
  28. package/src/icons/CameraFilled/CameraFilledIcon.web.tsx +21 -0
  29. package/src/icons/CameraFilled/cameraFilledPath.ts +2 -0
  30. package/src/icons/CameraFilled/index.ts +1 -0
  31. package/src/icons/Headset/HeadsetIcon.tsx +26 -0
  32. package/src/icons/Headset/HeadsetIcon.web.tsx +25 -0
  33. package/src/icons/Headset/headsetPath.ts +6 -0
  34. package/src/icons/Headset/index.ts +1 -0
  35. package/src/icons/Hide/HideIcon.tsx +21 -0
  36. package/src/icons/Hide/HideIcon.web.tsx +27 -0
  37. package/src/icons/Hide/hidePath.ts +3 -0
  38. package/src/icons/Hide/index.ts +1 -0
  39. package/src/icons/MenuLines/MenuLinesIcon.tsx +20 -0
  40. package/src/icons/MenuLines/MenuLinesIcon.web.tsx +26 -0
  41. package/src/icons/MenuLines/index.ts +1 -0
  42. package/src/icons/MenuLines/menuLinesPath.ts +3 -0
  43. package/src/icons/index.ts +4 -0
  44. package/src/icons/registry.ts +11 -0
  45. package/src/index.ts +12 -0
@@ -9,6 +9,7 @@ import {
9
9
  import {
10
10
  Platform,
11
11
  StyleSheet,
12
+ Text,
12
13
  TextInput,
13
14
  useWindowDimensions,
14
15
  View,
@@ -24,12 +25,13 @@ import { useApplyWebClassName } from "../../utils/useApplyWebClassName";
24
25
  import { normalizeVerificationCode, updateVerificationCode } from "./VerificationCodeInput.utils";
25
26
 
26
27
  const DEFAULT_LENGTH = 6;
27
- const DESKTOP_CELL_WIDTH = 54;
28
- const MOBILE_CELL_WIDTH = 50;
29
- const CELL_HEIGHT = 68;
28
+ const DESKTOP_CELL_WIDTH = 54.333335876464844;
29
+ const MOBILE_CELL_WIDTH = 45.16666793823242;
30
+ const DESKTOP_CELL_HEIGHT = 68;
31
+ const MOBILE_CELL_HEIGHT = 58;
30
32
  const DESKTOP_GAP = 12;
31
- const MOBILE_GAP = 4;
32
- const MOBILE_BREAKPOINT = 640;
33
+ const MOBILE_GAP = 12;
34
+ const MOBILE_BREAKPOINT = 1024;
33
35
 
34
36
  export interface VerificationCodeInputHandle {
35
37
  clear: () => void;
@@ -47,6 +49,8 @@ export interface VerificationCodeInputProps extends Omit<ViewProps, "children" |
47
49
  /** Called when Enter/submit is pressed from a cell. */
48
50
  onSubmit?: (value: string) => void;
49
51
  error?: boolean;
52
+ /** Shown under the cells when `error` is true. */
53
+ errorMessage?: string;
50
54
  disabled?: boolean;
51
55
  autoFocus?: boolean;
52
56
  /** Localized accessible name for each zero-based cell index. */
@@ -68,6 +72,7 @@ export const VerificationCodeInput = forwardRef<
68
72
  onComplete,
69
73
  onSubmit,
70
74
  error = false,
75
+ errorMessage,
71
76
  disabled = false,
72
77
  autoFocus = false,
73
78
  getDigitAccessibilityLabel,
@@ -161,71 +166,77 @@ export const VerificationCodeInput = forwardRef<
161
166
 
162
167
  const mobile = viewportWidth < MOBILE_BREAKPOINT;
163
168
  const cellWidth = mobile ? MOBILE_CELL_WIDTH : DESKTOP_CELL_WIDTH;
169
+ const cellHeight = mobile ? MOBILE_CELL_HEIGHT : DESKTOP_CELL_HEIGHT;
164
170
  const cellGap = mobile ? MOBILE_GAP : DESKTOP_GAP;
165
- const rootWidth = cellWidth * safeLength + cellGap * Math.max(0, safeLength - 1);
171
+ const rowWidth = cellWidth * safeLength + cellGap * Math.max(0, safeLength - 1);
172
+ const showErrorMessage = Boolean(error && errorMessage);
166
173
 
167
174
  return (
168
- <View
169
- {...viewProps}
170
- ref={rootRef}
171
- style={[
172
- styles.root,
173
- { width: rootWidth, maxWidth: "100%", gap: cellGap },
174
- disabled && styles.disabled,
175
- style,
176
- ]}
177
- >
178
- {Array.from({ length: safeLength }, (_, index) => {
179
- const active = focusedIndex === index;
180
- const borderColor = error ? colors.redHover : active ? colors.primary : colors.grey600;
181
-
182
- return (
183
- <TextInput
184
- ref={(element) => {
185
- inputRefs.current[index] = element;
186
- }}
187
- accessibilityLabel={
188
- getDigitAccessibilityLabel?.(index) ?? `Verification code digit ${index + 1}`
189
- }
190
- accessibilityState={{ disabled }}
191
- autoComplete={index === 0 ? "one-time-code" : "off"}
192
- autoFocus={autoFocus && index === 0}
193
- caretHidden={Platform.OS !== "web"}
194
- editable={!disabled}
195
- inputMode="numeric"
196
- key={index}
197
- keyboardType="number-pad"
198
- maxLength={safeLength}
199
- onBlur={() => setFocusedIndex((current) => (current === index ? null : current))}
200
- onChangeText={(text) => handleChange(index, text)}
201
- onFocus={() => setFocusedIndex(index)}
202
- onKeyPress={(event) => handleKeyPress(index, event)}
203
- onSubmitEditing={() => onSubmit?.(currentCode)}
204
- selectTextOnFocus
205
- style={[
206
- styles.cell,
207
- {
208
- width: cellWidth,
209
- height: CELL_HEIGHT,
210
- borderColor,
211
- color: error ? colors.red : colors.white,
212
- },
213
- Platform.OS === "web" ? styles.cellWeb : null,
214
- Platform.OS === "android" ? styles.cellAndroid : null,
215
- inputStyle,
216
- ]}
217
- value={currentCode[index] ?? ""}
218
- />
219
- );
220
- })}
175
+ <View {...viewProps} ref={rootRef} style={[styles.wrapper, disabled && styles.disabled, style]}>
176
+ <View style={[styles.row, { width: rowWidth, maxWidth: "100%", gap: cellGap }]}>
177
+ {Array.from({ length: safeLength }, (_, index) => {
178
+ const active = focusedIndex === index;
179
+ const borderColor = error ? colors.red : active ? colors.primary : colors.grey600;
180
+
181
+ return (
182
+ <TextInput
183
+ ref={(element) => {
184
+ inputRefs.current[index] = element;
185
+ }}
186
+ accessibilityLabel={
187
+ getDigitAccessibilityLabel?.(index) ?? `Verification code digit ${index + 1}`
188
+ }
189
+ accessibilityState={{ disabled }}
190
+ autoComplete={index === 0 ? "one-time-code" : "off"}
191
+ autoFocus={autoFocus && index === 0}
192
+ caretHidden={Platform.OS !== "web"}
193
+ editable={!disabled}
194
+ inputMode="numeric"
195
+ key={index}
196
+ keyboardType="number-pad"
197
+ maxLength={safeLength}
198
+ onBlur={() => setFocusedIndex((current) => (current === index ? null : current))}
199
+ onChangeText={(text) => handleChange(index, text)}
200
+ onFocus={() => setFocusedIndex(index)}
201
+ onKeyPress={(event) => handleKeyPress(index, event)}
202
+ onSubmitEditing={() => onSubmit?.(currentCode)}
203
+ selectTextOnFocus
204
+ style={[
205
+ styles.cell,
206
+ {
207
+ width: cellWidth,
208
+ height: cellHeight,
209
+ borderColor,
210
+ color: error ? colors.red : colors.white,
211
+ },
212
+ Platform.OS === "web" ? styles.cellWeb : null,
213
+ Platform.OS === "android" ? styles.cellAndroid : null,
214
+ inputStyle,
215
+ ]}
216
+ value={currentCode[index] ?? ""}
217
+ />
218
+ );
219
+ })}
220
+ </View>
221
+
222
+ {showErrorMessage ? (
223
+ <Text accessibilityLiveRegion="assertive" style={styles.errorMessage}>
224
+ {errorMessage}
225
+ </Text>
226
+ ) : null}
221
227
  </View>
222
228
  );
223
229
  });
224
230
 
225
231
  const styles = StyleSheet.create({
226
- root: {
232
+ wrapper: {
227
233
  minWidth: 0,
228
234
  alignSelf: "center",
235
+ alignItems: "center",
236
+ gap: 12,
237
+ },
238
+ row: {
239
+ minWidth: 0,
229
240
  flexDirection: "row",
230
241
  justifyContent: "center",
231
242
  },
@@ -252,4 +263,13 @@ const styles = StyleSheet.create({
252
263
  cellAndroid: {
253
264
  includeFontPadding: false,
254
265
  },
266
+ errorMessage: {
267
+ fontFamily: fonts.sans,
268
+ fontSize: 12,
269
+ fontWeight: "400",
270
+ lineHeight: 12,
271
+ letterSpacing: 0,
272
+ textAlign: "center",
273
+ color: colors.red,
274
+ },
255
275
  });
@@ -22,6 +22,12 @@ export type { StepPagerProps } from "./StepPager";
22
22
  export { InfoTile } from "./InfoTile";
23
23
  export type { InfoTileProps } from "./InfoTile";
24
24
 
25
+ export { ContactInfoCard } from "./ContactInfoCard";
26
+ export type { ContactInfoCardProps } from "./ContactInfoCard";
27
+
28
+ export { AccordionItem } from "./AccordionItem";
29
+ export type { AccordionItemProps } from "./AccordionItem";
30
+
25
31
  export { StepList } from "./StepList";
26
32
  export type { StepListProps } from "./StepList";
27
33
 
@@ -58,6 +64,9 @@ export type {
58
64
  export { FloatingActionButton } from "./FloatingActionButton";
59
65
  export type { FloatingActionButtonProps } from "./FloatingActionButton";
60
66
 
67
+ export { Modal } from "./Modal";
68
+ export type { ModalProps } from "./Modal";
69
+
61
70
  export { Input } from "./Input";
62
71
  export type { InputIcon, InputProps, InputSize } from "./Input";
63
72
 
@@ -82,6 +91,9 @@ export type { TextareaProps } from "./Textarea";
82
91
  export { Toggle } from "./Toggle";
83
92
  export type { ToggleProps } from "./Toggle";
84
93
 
94
+ export { ToggleRow } from "./ToggleRow";
95
+ export type { ToggleRowProps } from "./ToggleRow";
96
+
85
97
  export { RatingInput } from "./RatingInput";
86
98
  export type { RatingInputProps } from "./RatingInput";
87
99
 
@@ -0,0 +1,15 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { CAMERA_FILLED_PATH } from "./cameraFilledPath";
3
+ import { colors } from "../../theme";
4
+ import type { IconProps } from "../types";
5
+
6
+ export { CAMERA_FILLED_PATH } from "./cameraFilledPath";
7
+
8
+ /** Native — filled camera, 32×32 viewBox. */
9
+ export function CameraFilledIcon({ size = 32, color = colors.primary }: IconProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 32 32" fill="none">
12
+ <Path d={CAMERA_FILLED_PATH} fill={color} />
13
+ </Svg>
14
+ );
15
+ }
@@ -0,0 +1,21 @@
1
+ import { CAMERA_FILLED_PATH } from "./cameraFilledPath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ /** Web / Storybook — filled camera, 32×32 viewBox. */
6
+ export function CameraFilledIcon({ size = 32, color = colors.primary }: IconProps) {
7
+ return (
8
+ <svg
9
+ width={size}
10
+ height={size}
11
+ viewBox="0 0 32 32"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ aria-hidden
15
+ >
16
+ <path d={CAMERA_FILLED_PATH} fill={color} />
17
+ </svg>
18
+ );
19
+ }
20
+
21
+ export { CAMERA_FILLED_PATH } from "./cameraFilledPath";
@@ -0,0 +1,2 @@
1
+ export const CAMERA_FILLED_PATH =
2
+ "M25.3327 8.66605H23.626L23.1993 7.33271C22.9228 6.55035 22.4097 5.87338 21.7312 5.39559C21.0528 4.9178 20.2425 4.66285 19.4127 4.66605H12.586C11.7481 4.66761 10.9318 4.93229 10.2524 5.42272C9.57295 5.91315 9.06469 6.60456 8.79935 7.39938L8.37268 8.73271H6.66602C5.60515 8.73271 4.58773 9.15414 3.83759 9.90428C3.08744 10.6544 2.66602 11.6718 2.66602 12.7327V23.3994C2.66602 24.4602 3.08744 25.4777 3.83759 26.2278C4.58773 26.978 5.60515 27.3994 6.66602 27.3994H25.3327C26.3935 27.3994 27.411 26.978 28.1611 26.2278C28.9113 25.4777 29.3327 24.4602 29.3327 23.3994V12.7327C29.3415 12.2018 29.2446 11.6745 29.0476 11.1815C28.8505 10.6885 28.5573 10.2396 28.1849 9.86109C27.8126 9.48256 27.3687 9.18195 26.879 8.97678C26.3893 8.7716 25.8636 8.66597 25.3327 8.66605ZM26.666 23.3327C26.666 23.6863 26.5255 24.0255 26.2755 24.2755C26.0254 24.5256 25.6863 24.666 25.3327 24.666H6.66602C6.31239 24.666 5.97326 24.5256 5.72321 24.2755C5.47316 24.0255 5.33268 23.6863 5.33268 23.3327V12.666C5.33268 12.3124 5.47316 11.9733 5.72321 11.7232C5.97326 11.4732 6.31239 11.3327 6.66602 11.3327H9.33268C9.62344 11.3479 9.91117 11.2675 10.1519 11.1038C10.3927 10.94 10.5732 10.702 10.666 10.426L11.386 8.23938C11.4755 7.97455 11.6459 7.74453 11.8732 7.58183C12.1005 7.41914 12.3732 7.33199 12.6527 7.33271H19.4793C19.7589 7.33199 20.0316 7.41914 20.2589 7.58183C20.4862 7.74453 20.6566 7.97455 20.746 8.23938L21.466 10.426C21.5516 10.6804 21.7119 10.903 21.926 11.0647C22.1401 11.2265 22.398 11.3199 22.666 11.3327H25.3327C25.6863 11.3327 26.0254 11.4732 26.2755 11.7232C26.5255 11.9733 26.666 12.3124 26.666 12.666V23.3327ZM15.9993 11.3327C14.9445 11.3327 13.9134 11.6455 13.0363 12.2315C12.1592 12.8176 11.4757 13.6505 11.072 14.6251C10.6683 15.5996 10.5627 16.672 10.7685 17.7065C10.9743 18.7411 11.4822 19.6914 12.2281 20.4373C12.974 21.1832 13.9243 21.6911 14.9589 21.8969C15.9934 22.1027 17.0658 21.9971 18.0403 21.5934C19.0149 21.1897 19.8478 20.5061 20.4339 19.6291C21.0199 18.752 21.3327 17.7209 21.3327 16.666C21.3327 15.2516 20.7708 13.895 19.7706 12.8948C18.7704 11.8946 17.4138 11.3327 15.9993 11.3327ZM15.9993 19.3327C15.4719 19.3327 14.9564 19.1763 14.5178 18.8833C14.0793 18.5903 13.7375 18.1738 13.5357 17.6865C13.3338 17.1993 13.281 16.6631 13.3839 16.1458C13.4868 15.6285 13.7408 15.1534 14.1137 14.7804C14.4867 14.4075 14.9618 14.1535 15.4791 14.0506C15.9964 13.9477 16.5326 14.0005 17.0198 14.2024C17.5071 14.4042 17.9236 14.746 18.2166 15.1845C18.5096 15.6231 18.666 16.1386 18.666 16.666C18.666 17.3733 18.3851 18.0516 17.885 18.5517C17.3849 19.0518 16.7066 19.3327 15.9993 19.3327Z";
@@ -0,0 +1 @@
1
+ export { CameraFilledIcon, CAMERA_FILLED_PATH } from "./CameraFilledIcon";
@@ -0,0 +1,26 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import type { IconProps } from "../types";
3
+ import { HEADSET_MIC_PATH, HEADSET_PATH } from "./headsetPath";
4
+
5
+ export function HeadsetIcon({ size = 24, color = "#B76533", strokeWidth = 2 }: IconProps) {
6
+ return (
7
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
8
+ <Path
9
+ d={HEADSET_PATH}
10
+ stroke={color}
11
+ strokeWidth={strokeWidth}
12
+ strokeLinecap="round"
13
+ strokeLinejoin="round"
14
+ />
15
+ <Path
16
+ d={HEADSET_MIC_PATH}
17
+ stroke={color}
18
+ strokeWidth={strokeWidth}
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ />
22
+ </Svg>
23
+ );
24
+ }
25
+
26
+ export { HEADSET_MIC_PATH, HEADSET_PATH } from "./headsetPath";
@@ -0,0 +1,25 @@
1
+ import type { IconProps } from "../types";
2
+ import { HEADSET_MIC_PATH, HEADSET_PATH } from "./headsetPath";
3
+
4
+ export function HeadsetIcon({ size = 24, color = "#B76533", strokeWidth = 2 }: IconProps) {
5
+ return (
6
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" aria-hidden>
7
+ <path
8
+ d={HEADSET_PATH}
9
+ stroke={color}
10
+ strokeWidth={strokeWidth}
11
+ strokeLinecap="round"
12
+ strokeLinejoin="round"
13
+ />
14
+ <path
15
+ d={HEADSET_MIC_PATH}
16
+ stroke={color}
17
+ strokeWidth={strokeWidth}
18
+ strokeLinecap="round"
19
+ strokeLinejoin="round"
20
+ />
21
+ </svg>
22
+ );
23
+ }
24
+
25
+ export { HEADSET_MIC_PATH, HEADSET_PATH } from "./headsetPath";
@@ -0,0 +1,6 @@
1
+ /** Headset / support hours — viewBox 0 0 24 24. */
2
+ export const HEADSET_PATH =
3
+ "M3 11H6C6.53043 11 7.03914 11.2107 7.41421 11.5858C7.78929 11.9609 8 12.4696 8 13V16C8 16.5304 7.78929 17.0391 7.41421 17.4142C7.03914 17.7893 6.53043 18 6 18H5C4.46957 18 3.96086 17.7893 3.58579 17.4142C3.21071 17.0391 3 16.5304 3 16V11ZM3 11C3 9.8181 3.23279 8.64778 3.68508 7.55585C4.13738 6.46392 4.80031 5.47177 5.63604 4.63604C6.47177 3.80031 7.46392 3.13738 8.55585 2.68508C9.64778 2.23279 10.8181 2 12 2C13.1819 2 14.3522 2.23279 15.4442 2.68508C16.5361 3.13738 17.5282 3.80031 18.364 4.63604C19.1997 5.47177 19.8626 6.46392 20.3149 7.55585C20.7672 8.64778 21 9.8181 21 11M21 11V16C21 16.5304 20.7893 17.0391 20.4142 17.4142C20.0391 17.7893 19.5304 18 19 18H18C17.4696 18 16.9609 17.7893 16.5858 17.4142C16.2107 17.0391 16 16.5304 16 16V13C16 12.4696 16.2107 11.9609 16.5858 11.5858C16.9609 11.2107 17.4696 11 18 11H21Z";
4
+
5
+ export const HEADSET_MIC_PATH =
6
+ "M21 16V18C21 19.0609 20.5786 20.0783 19.8284 20.8284C19.0783 21.5786 18.0609 22 17 22H12";
@@ -0,0 +1 @@
1
+ export { HeadsetIcon, HEADSET_MIC_PATH, HEADSET_PATH } from "./HeadsetIcon";
@@ -0,0 +1,21 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { HIDE_PATH } from "./hidePath";
3
+ import { colors } from "../../theme";
4
+ import type { IconProps } from "../types";
5
+
6
+ export { HIDE_PATH } from "./hidePath";
7
+
8
+ /** Native — react-native-svg (peer dependency). */
9
+ export function HideIcon({ size = 24, color = colors.primary, strokeWidth = 2 }: IconProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path
13
+ d={HIDE_PATH}
14
+ stroke={color}
15
+ strokeWidth={strokeWidth}
16
+ strokeLinecap="round"
17
+ strokeLinejoin="round"
18
+ />
19
+ </Svg>
20
+ );
21
+ }
@@ -0,0 +1,27 @@
1
+ import { HIDE_PATH } from "./hidePath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ /** Web / Storybook — plain SVG (no react-native-svg). */
6
+ export function HideIcon({ size = 24, color = colors.primary, strokeWidth = 2 }: IconProps) {
7
+ return (
8
+ <svg
9
+ width={size}
10
+ height={size}
11
+ viewBox="0 0 24 24"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ aria-hidden
15
+ >
16
+ <path
17
+ d={HIDE_PATH}
18
+ stroke={color}
19
+ strokeWidth={strokeWidth}
20
+ strokeLinecap="round"
21
+ strokeLinejoin="round"
22
+ />
23
+ </svg>
24
+ );
25
+ }
26
+
27
+ export { HIDE_PATH } from "./hidePath";
@@ -0,0 +1,3 @@
1
+ /** Hide (eye-off) icon path — 24×24 viewBox. */
2
+ export const HIDE_PATH =
3
+ "M10.7429 5.09232C11.1494 5.03223 11.5686 5 12.0004 5C17.1054 5 20.4553 9.50484 21.5807 11.2868C21.7169 11.5025 21.785 11.6103 21.8231 11.7767C21.8518 11.9016 21.8517 12.0987 21.8231 12.2236C21.7849 12.3899 21.7164 12.4985 21.5792 12.7156C21.2793 13.1901 20.8222 13.8571 20.2165 14.5805M6.72432 6.71504C4.56225 8.1817 3.09445 10.2194 2.42111 11.2853C2.28428 11.5019 2.21587 11.6102 2.17774 11.7765C2.1491 11.9014 2.14909 12.0984 2.17771 12.2234C2.21583 12.3897 2.28393 12.4975 2.42013 12.7132C3.54554 14.4952 6.89541 19 12.0004 19C14.0588 19 15.8319 18.2676 17.2888 17.2766M3.00042 3L21.0004 21M9.8791 9.87868C9.3362 10.4216 9.00042 11.1716 9.00042 12C9.00042 13.6569 10.3436 15 12.0004 15C12.8288 15 13.5788 14.6642 14.1217 14.1213";
@@ -0,0 +1 @@
1
+ export { HideIcon, HIDE_PATH } from "./HideIcon";
@@ -0,0 +1,20 @@
1
+ import Svg, { Path } from "react-native-svg";
2
+ import { MENU_LINES_PATH } from "./menuLinesPath";
3
+ import { colors } from "../../theme";
4
+ import type { IconProps } from "../types";
5
+
6
+ export { MENU_LINES_PATH } from "./menuLinesPath";
7
+
8
+ export function MenuLinesIcon({ size = 28, color = colors.white, strokeWidth = 2 }: IconProps) {
9
+ return (
10
+ <Svg width={size} height={size} viewBox="0 0 28 28" fill="none">
11
+ <Path
12
+ d={MENU_LINES_PATH}
13
+ stroke={color}
14
+ strokeWidth={strokeWidth}
15
+ strokeLinecap="round"
16
+ strokeLinejoin="round"
17
+ />
18
+ </Svg>
19
+ );
20
+ }
@@ -0,0 +1,26 @@
1
+ import { MENU_LINES_PATH } from "./menuLinesPath";
2
+ import { colors } from "../../theme";
3
+ import type { IconProps } from "../types";
4
+
5
+ export function MenuLinesIcon({ size = 28, color = colors.white, strokeWidth = 2 }: IconProps) {
6
+ return (
7
+ <svg
8
+ width={size}
9
+ height={size}
10
+ viewBox="0 0 28 28"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ aria-hidden
14
+ >
15
+ <path
16
+ d={MENU_LINES_PATH}
17
+ stroke={color}
18
+ strokeWidth={strokeWidth}
19
+ strokeLinecap="round"
20
+ strokeLinejoin="round"
21
+ />
22
+ </svg>
23
+ );
24
+ }
25
+
26
+ export { MENU_LINES_PATH } from "./menuLinesPath";
@@ -0,0 +1 @@
1
+ export { MenuLinesIcon, MENU_LINES_PATH } from "./MenuLinesIcon";
@@ -0,0 +1,3 @@
1
+ /** Account header hamburger — 28×28 viewBox, left-aligned uneven lines. */
2
+ export const MENU_LINES_PATH =
3
+ "M5.83398 19.8337H15.1673M5.83398 14.0003H22.1673M5.83398 8.16699H15.1673";
@@ -17,6 +17,7 @@ export { BuildingIcon } from "./Building";
17
17
  export { CalendarIcon } from "./Calendar";
18
18
  export { CalendarOutlineIcon } from "./CalendarOutline";
19
19
  export { CameraIcon } from "./Camera";
20
+ export { CameraFilledIcon } from "./CameraFilled";
20
21
  export { CheckIcon } from "./Check";
21
22
  export { CheckBadgeIcon } from "./CheckBadge";
22
23
  export { ChevronDownIcon } from "./ChevronDown";
@@ -48,9 +49,11 @@ export { FacebookIcon } from "./Facebook";
48
49
  export { FiltersIcon } from "./Filters";
49
50
  export { FullscreenIcon } from "./Fullscreen";
50
51
  export { HeartIcon } from "./Heart";
52
+ export { HeadsetIcon } from "./Headset";
51
53
  export { GlobeIcon } from "./Globe";
52
54
  export { GooglePlayIcon } from "./Store";
53
55
  export { HelpCircleIcon } from "./HelpCircle";
56
+ export { HideIcon } from "./Hide";
54
57
  export { HomeIcon } from "./Home";
55
58
  export { InstagramIcon } from "./Instagram";
56
59
  export { KeyIcon } from "./Key";
@@ -66,6 +69,7 @@ export { MapViewIcon } from "./MapView";
66
69
  export { MapCollapseIcon, MapExpandIcon } from "./MapControls";
67
70
  export { MenuIcon } from "./Menu";
68
71
  export type { MenuIconProps } from "./Menu";
72
+ export { MenuLinesIcon } from "./MenuLines";
69
73
  export { NavigateIcon } from "./Navigate";
70
74
  export { PhoneIcon } from "./Phone";
71
75
  export { PlusIcon } from "./Plus";
@@ -8,6 +8,7 @@ import { BuildingIcon } from "./Building";
8
8
  import { CalendarIcon } from "./Calendar";
9
9
  import { CalendarOutlineIcon } from "./CalendarOutline";
10
10
  import { CameraIcon } from "./Camera";
11
+ import { CameraFilledIcon } from "./CameraFilled";
11
12
  import { CheckIcon } from "./Check";
12
13
  import { CheckBadgeIcon } from "./CheckBadge";
13
14
  import { ChevronDownIcon } from "./ChevronDown";
@@ -39,8 +40,10 @@ import { FacebookIcon } from "./Facebook";
39
40
  import { FiltersIcon } from "./Filters";
40
41
  import { FullscreenIcon } from "./Fullscreen";
41
42
  import { HeartIcon } from "./Heart";
43
+ import { HeadsetIcon } from "./Headset";
42
44
  import { GlobeIcon } from "./Globe";
43
45
  import { HelpCircleIcon } from "./HelpCircle";
46
+ import { HideIcon } from "./Hide";
44
47
  import { HomeIcon } from "./Home";
45
48
  import { InstagramIcon } from "./Instagram";
46
49
  import { KeyIcon } from "./Key";
@@ -55,6 +58,7 @@ import { MailIcon } from "./Mail";
55
58
  import { MapViewIcon } from "./MapView";
56
59
  import { MapCollapseIcon, MapExpandIcon } from "./MapControls";
57
60
  import { MenuIcon } from "./Menu";
61
+ import { MenuLinesIcon } from "./MenuLines";
58
62
  import { MinusIcon } from "./Minus";
59
63
  import { NavigateIcon } from "./Navigate";
60
64
  import { PhoneIcon } from "./Phone";
@@ -87,6 +91,7 @@ export const icons = {
87
91
  calendar: CalendarIcon,
88
92
  calendarOutline: CalendarOutlineIcon,
89
93
  camera: CameraIcon,
94
+ cameraFilled: CameraFilledIcon,
90
95
  check: CheckIcon,
91
96
  checkBadge: CheckBadgeIcon,
92
97
  checkSuccess: CheckSuccessIcon,
@@ -106,9 +111,11 @@ export const icons = {
106
111
  fullscreen: FullscreenIcon,
107
112
  guests: GuestsIcon,
108
113
  heart: HeartIcon,
114
+ headset: HeadsetIcon,
109
115
  globe: GlobeIcon,
110
116
  googlePlay: GooglePlayIcon,
111
117
  helpCircle: HelpCircleIcon,
118
+ hide: HideIcon,
112
119
  home: HomeIcon,
113
120
  instagram: InstagramIcon,
114
121
  key: KeyIcon,
@@ -124,6 +131,7 @@ export const icons = {
124
131
  mapCollapse: MapCollapseIcon,
125
132
  mapExpand: MapExpandIcon,
126
133
  menu: MenuIcon,
134
+ menuLines: MenuLinesIcon,
127
135
  minus: MinusIcon,
128
136
  navigate: NavigateIcon,
129
137
  noSmoking: NoSmokingIcon,
@@ -171,10 +179,12 @@ export const iconGroups = {
171
179
  "mapExpand",
172
180
  "mapView",
173
181
  "menu",
182
+ "menuLines",
174
183
  "navigate",
175
184
  ],
176
185
  actions: [
177
186
  "show",
187
+ "hide",
178
188
  "alertTriangle",
179
189
  "ban",
180
190
  "bell",
@@ -196,6 +206,7 @@ export const iconGroups = {
196
206
  "filters",
197
207
  "fullscreen",
198
208
  "heart",
209
+ "headset",
199
210
  "zoomOut",
200
211
  "star",
201
212
  "starFilled",
package/src/index.ts CHANGED
@@ -7,6 +7,8 @@ export {
7
7
  PaginationDots,
8
8
  StepPager,
9
9
  InfoTile,
10
+ ContactInfoCard,
11
+ AccordionItem,
10
12
  StepList,
11
13
  Counter,
12
14
  SegmentedToggle,
@@ -18,11 +20,13 @@ export {
18
20
  Checkbox,
19
21
  DatePicker,
20
22
  FloatingActionButton,
23
+ Modal,
21
24
  Input,
22
25
  VerificationCodeInput,
23
26
  Select,
24
27
  Textarea,
25
28
  Toggle,
29
+ ToggleRow,
26
30
  RatingInput,
27
31
  CommentCard,
28
32
  Range,
@@ -39,6 +43,8 @@ export type {
39
43
  PaginationDotsProps,
40
44
  StepPagerProps,
41
45
  InfoTileProps,
46
+ ContactInfoCardProps,
47
+ AccordionItemProps,
42
48
  StepListProps,
43
49
  CounterProps,
44
50
  SegmentedToggleOption,
@@ -60,6 +66,7 @@ export type {
60
66
  DatePickerVariant,
61
67
  DateRange,
62
68
  FloatingActionButtonProps,
69
+ ModalProps,
63
70
  InputIcon,
64
71
  InputProps,
65
72
  InputSize,
@@ -72,6 +79,7 @@ export type {
72
79
  SelectMultipleProps,
73
80
  TextareaProps,
74
81
  ToggleProps,
82
+ ToggleRowProps,
75
83
  RatingInputProps,
76
84
  CommentCardProps,
77
85
  RangeProps,
@@ -114,6 +122,7 @@ export {
114
122
  CalendarIcon,
115
123
  CalendarOutlineIcon,
116
124
  CameraIcon,
125
+ CameraFilledIcon,
117
126
  CheckIcon,
118
127
  CheckBadgeIcon,
119
128
  ChevronDownIcon,
@@ -144,9 +153,11 @@ export {
144
153
  FiltersIcon,
145
154
  FullscreenIcon,
146
155
  HeartIcon,
156
+ HeadsetIcon,
147
157
  GlobeIcon,
148
158
  GooglePlayIcon,
149
159
  HelpCircleIcon,
160
+ HideIcon,
150
161
  HomeIcon,
151
162
  InstagramIcon,
152
163
  KeyIcon,
@@ -162,6 +173,7 @@ export {
162
173
  MapCollapseIcon,
163
174
  MapExpandIcon,
164
175
  MenuIcon,
176
+ MenuLinesIcon,
165
177
  MinusIcon,
166
178
  NavigateIcon,
167
179
  PhoneIcon,