@medway-ui/native 1.6.1 → 1.7.0

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 (223) hide show
  1. package/README.md +27 -2
  2. package/lib/commonjs/components/Alert.js +3 -1
  3. package/lib/commonjs/components/Alert.js.map +1 -1
  4. package/lib/commonjs/components/AlertDialog.js +5 -2
  5. package/lib/commonjs/components/AlertDialog.js.map +1 -1
  6. package/lib/commonjs/components/Badge.js +37 -2
  7. package/lib/commonjs/components/Badge.js.map +1 -1
  8. package/lib/commonjs/components/Button.js +32 -1
  9. package/lib/commonjs/components/Button.js.map +1 -1
  10. package/lib/commonjs/components/Carousel.js +12 -2
  11. package/lib/commonjs/components/Carousel.js.map +1 -1
  12. package/lib/commonjs/components/Checkbox.js +2 -0
  13. package/lib/commonjs/components/Checkbox.js.map +1 -1
  14. package/lib/commonjs/components/Chip.js +208 -0
  15. package/lib/commonjs/components/Chip.js.map +1 -0
  16. package/lib/commonjs/components/Choice.js +116 -0
  17. package/lib/commonjs/components/Choice.js.map +1 -0
  18. package/lib/commonjs/components/Dialog.js +27 -16
  19. package/lib/commonjs/components/Dialog.js.map +1 -1
  20. package/lib/commonjs/components/DropdownMenu.js +73 -57
  21. package/lib/commonjs/components/DropdownMenu.js.map +1 -1
  22. package/lib/commonjs/components/EmptyState.js +9 -2
  23. package/lib/commonjs/components/EmptyState.js.map +1 -1
  24. package/lib/commonjs/components/Feed.js +7 -3
  25. package/lib/commonjs/components/Feed.js.map +1 -1
  26. package/lib/commonjs/components/Feedback.js +77 -0
  27. package/lib/commonjs/components/Feedback.js.map +1 -0
  28. package/lib/commonjs/components/Filter.js +93 -0
  29. package/lib/commonjs/components/Filter.js.map +1 -0
  30. package/lib/commonjs/components/IndexLevel.js +4 -3
  31. package/lib/commonjs/components/IndexLevel.js.map +1 -1
  32. package/lib/commonjs/components/Input.js +149 -45
  33. package/lib/commonjs/components/Input.js.map +1 -1
  34. package/lib/commonjs/components/InvitePopover.js +4 -1
  35. package/lib/commonjs/components/InvitePopover.js.map +1 -1
  36. package/lib/commonjs/components/MemberRow.js +3 -4
  37. package/lib/commonjs/components/MemberRow.js.map +1 -1
  38. package/lib/commonjs/components/PostForm.js +18 -8
  39. package/lib/commonjs/components/PostForm.js.map +1 -1
  40. package/lib/commonjs/components/PrizeCollection.js +1 -1
  41. package/lib/commonjs/components/RadioGroup.js +7 -0
  42. package/lib/commonjs/components/RadioGroup.js.map +1 -1
  43. package/lib/commonjs/components/Select.js +1 -1
  44. package/lib/commonjs/components/Sheet.js +4 -1
  45. package/lib/commonjs/components/Sheet.js.map +1 -1
  46. package/lib/commonjs/components/Skeleton.js +55 -4
  47. package/lib/commonjs/components/Skeleton.js.map +1 -1
  48. package/lib/commonjs/components/Switch.js +2 -0
  49. package/lib/commonjs/components/Switch.js.map +1 -1
  50. package/lib/commonjs/components/Tabs.js +2 -0
  51. package/lib/commonjs/components/Tabs.js.map +1 -1
  52. package/lib/commonjs/components/Toast.js +355 -79
  53. package/lib/commonjs/components/Toast.js.map +1 -1
  54. package/lib/commonjs/editor/NoteEditor.js +36 -11
  55. package/lib/commonjs/editor/NoteEditor.js.map +1 -1
  56. package/lib/commonjs/editor/editorHtml.generated.js +1 -1
  57. package/lib/commonjs/editor/editorHtml.generated.js.map +1 -1
  58. package/lib/commonjs/hooks/useThemeColor.js +693 -65
  59. package/lib/commonjs/hooks/useThemeColor.js.map +1 -1
  60. package/lib/commonjs/hooks/useTrackedText.js +21 -0
  61. package/lib/commonjs/hooks/useTrackedText.js.map +1 -0
  62. package/lib/commonjs/index.js +46 -0
  63. package/lib/commonjs/index.js.map +1 -1
  64. package/lib/commonjs/lib/optional-deps.js +20 -0
  65. package/lib/commonjs/lib/optional-deps.js.map +1 -0
  66. package/lib/commonjs/lib/touch-target.js +19 -0
  67. package/lib/commonjs/lib/touch-target.js.map +1 -0
  68. package/lib/module/components/Alert.js +3 -1
  69. package/lib/module/components/Alert.js.map +1 -1
  70. package/lib/module/components/AlertDialog.js +5 -2
  71. package/lib/module/components/AlertDialog.js.map +1 -1
  72. package/lib/module/components/Badge.js +36 -2
  73. package/lib/module/components/Badge.js.map +1 -1
  74. package/lib/module/components/Button.js +32 -1
  75. package/lib/module/components/Button.js.map +1 -1
  76. package/lib/module/components/Carousel.js +12 -2
  77. package/lib/module/components/Carousel.js.map +1 -1
  78. package/lib/module/components/Checkbox.js +2 -0
  79. package/lib/module/components/Checkbox.js.map +1 -1
  80. package/lib/module/components/Chip.js +204 -0
  81. package/lib/module/components/Chip.js.map +1 -0
  82. package/lib/module/components/Choice.js +112 -0
  83. package/lib/module/components/Choice.js.map +1 -0
  84. package/lib/module/components/Dialog.js +28 -17
  85. package/lib/module/components/Dialog.js.map +1 -1
  86. package/lib/module/components/DropdownMenu.js +74 -58
  87. package/lib/module/components/DropdownMenu.js.map +1 -1
  88. package/lib/module/components/EmptyState.js +9 -2
  89. package/lib/module/components/EmptyState.js.map +1 -1
  90. package/lib/module/components/Feed.js +7 -3
  91. package/lib/module/components/Feed.js.map +1 -1
  92. package/lib/module/components/Feedback.js +74 -0
  93. package/lib/module/components/Feedback.js.map +1 -0
  94. package/lib/module/components/Filter.js +89 -0
  95. package/lib/module/components/Filter.js.map +1 -0
  96. package/lib/module/components/IndexLevel.js +4 -3
  97. package/lib/module/components/IndexLevel.js.map +1 -1
  98. package/lib/module/components/Input.js +149 -45
  99. package/lib/module/components/Input.js.map +1 -1
  100. package/lib/module/components/InvitePopover.js +4 -1
  101. package/lib/module/components/InvitePopover.js.map +1 -1
  102. package/lib/module/components/MemberRow.js +3 -4
  103. package/lib/module/components/MemberRow.js.map +1 -1
  104. package/lib/module/components/PostForm.js +18 -8
  105. package/lib/module/components/PostForm.js.map +1 -1
  106. package/lib/module/components/PrizeCollection.js +1 -1
  107. package/lib/module/components/RadioGroup.js +7 -0
  108. package/lib/module/components/RadioGroup.js.map +1 -1
  109. package/lib/module/components/Select.js +1 -1
  110. package/lib/module/components/Sheet.js +4 -1
  111. package/lib/module/components/Sheet.js.map +1 -1
  112. package/lib/module/components/Skeleton.js +56 -5
  113. package/lib/module/components/Skeleton.js.map +1 -1
  114. package/lib/module/components/Switch.js +2 -0
  115. package/lib/module/components/Switch.js.map +1 -1
  116. package/lib/module/components/Tabs.js +2 -0
  117. package/lib/module/components/Tabs.js.map +1 -1
  118. package/lib/module/components/Toast.js +360 -84
  119. package/lib/module/components/Toast.js.map +1 -1
  120. package/lib/module/editor/NoteEditor.js +36 -11
  121. package/lib/module/editor/NoteEditor.js.map +1 -1
  122. package/lib/module/editor/editorHtml.generated.js +1 -1
  123. package/lib/module/editor/editorHtml.generated.js.map +1 -1
  124. package/lib/module/hooks/useThemeColor.js +693 -65
  125. package/lib/module/hooks/useThemeColor.js.map +1 -1
  126. package/lib/module/hooks/useTrackedText.js +18 -0
  127. package/lib/module/hooks/useTrackedText.js.map +1 -0
  128. package/lib/module/index.js +8 -0
  129. package/lib/module/index.js.map +1 -1
  130. package/lib/module/lib/optional-deps.js +16 -0
  131. package/lib/module/lib/optional-deps.js.map +1 -0
  132. package/lib/module/lib/touch-target.js +15 -0
  133. package/lib/module/lib/touch-target.js.map +1 -0
  134. package/lib/typescript/components/Alert.d.ts.map +1 -1
  135. package/lib/typescript/components/AlertDialog.d.ts.map +1 -1
  136. package/lib/typescript/components/Badge.d.ts +1 -1
  137. package/lib/typescript/components/Badge.d.ts.map +1 -1
  138. package/lib/typescript/components/Button.d.ts.map +1 -1
  139. package/lib/typescript/components/Carousel.d.ts +1 -1
  140. package/lib/typescript/components/Carousel.d.ts.map +1 -1
  141. package/lib/typescript/components/Checkbox.d.ts.map +1 -1
  142. package/lib/typescript/components/Chip.d.ts +30 -0
  143. package/lib/typescript/components/Chip.d.ts.map +1 -0
  144. package/lib/typescript/components/Choice.d.ts +17 -0
  145. package/lib/typescript/components/Choice.d.ts.map +1 -0
  146. package/lib/typescript/components/Dialog.d.ts.map +1 -1
  147. package/lib/typescript/components/DropdownMenu.d.ts +0 -7
  148. package/lib/typescript/components/DropdownMenu.d.ts.map +1 -1
  149. package/lib/typescript/components/EmptyState.d.ts +3 -2
  150. package/lib/typescript/components/EmptyState.d.ts.map +1 -1
  151. package/lib/typescript/components/Feed.d.ts.map +1 -1
  152. package/lib/typescript/components/Feedback.d.ts +17 -0
  153. package/lib/typescript/components/Feedback.d.ts.map +1 -0
  154. package/lib/typescript/components/Filter.d.ts +17 -0
  155. package/lib/typescript/components/Filter.d.ts.map +1 -0
  156. package/lib/typescript/components/IndexLevel.d.ts.map +1 -1
  157. package/lib/typescript/components/Input.d.ts +3 -3
  158. package/lib/typescript/components/Input.d.ts.map +1 -1
  159. package/lib/typescript/components/InvitePopover.d.ts.map +1 -1
  160. package/lib/typescript/components/MemberRow.d.ts.map +1 -1
  161. package/lib/typescript/components/PostForm.d.ts.map +1 -1
  162. package/lib/typescript/components/RadioGroup.d.ts.map +1 -1
  163. package/lib/typescript/components/Sheet.d.ts.map +1 -1
  164. package/lib/typescript/components/Skeleton.d.ts +1 -1
  165. package/lib/typescript/components/Skeleton.d.ts.map +1 -1
  166. package/lib/typescript/components/Switch.d.ts.map +1 -1
  167. package/lib/typescript/components/Tabs.d.ts.map +1 -1
  168. package/lib/typescript/components/Tag.d.ts +2 -2
  169. package/lib/typescript/components/ThemedIcon.d.ts +1 -1
  170. package/lib/typescript/components/ThemedIcon.d.ts.map +1 -1
  171. package/lib/typescript/components/Toast.d.ts +24 -13
  172. package/lib/typescript/components/Toast.d.ts.map +1 -1
  173. package/lib/typescript/editor/NoteEditor.d.ts.map +1 -1
  174. package/lib/typescript/editor/editorHtml.generated.d.ts.map +1 -1
  175. package/lib/typescript/hooks/useThemeColor.d.ts +0 -10
  176. package/lib/typescript/hooks/useThemeColor.d.ts.map +1 -1
  177. package/lib/typescript/hooks/useTrackedText.d.ts +6 -0
  178. package/lib/typescript/hooks/useTrackedText.d.ts.map +1 -0
  179. package/lib/typescript/index.d.ts +9 -1
  180. package/lib/typescript/index.d.ts.map +1 -1
  181. package/lib/typescript/lib/optional-deps.d.ts +23 -0
  182. package/lib/typescript/lib/optional-deps.d.ts.map +1 -0
  183. package/lib/typescript/lib/touch-target.d.ts +5 -0
  184. package/lib/typescript/lib/touch-target.d.ts.map +1 -0
  185. package/package.json +6 -1
  186. package/setup/createMedwayUiNavigator.tsx +4 -7
  187. package/setup/metro.js +12 -3
  188. package/src/components/Alert.tsx +3 -1
  189. package/src/components/AlertDialog.tsx +8 -3
  190. package/src/components/Badge.tsx +51 -3
  191. package/src/components/Button.tsx +39 -1
  192. package/src/components/Carousel.tsx +17 -3
  193. package/src/components/Checkbox.tsx +2 -0
  194. package/src/components/Chip.tsx +227 -0
  195. package/src/components/Choice.tsx +139 -0
  196. package/src/components/Dialog.tsx +39 -23
  197. package/src/components/DropdownMenu.tsx +99 -87
  198. package/src/components/EmptyState.tsx +18 -3
  199. package/src/components/Feed.tsx +4 -3
  200. package/src/components/Feedback.tsx +111 -0
  201. package/src/components/Filter.tsx +106 -0
  202. package/src/components/IndexLevel.tsx +8 -10
  203. package/src/components/Input.tsx +142 -54
  204. package/src/components/InvitePopover.tsx +5 -1
  205. package/src/components/MemberRow.tsx +3 -5
  206. package/src/components/PostForm.tsx +16 -9
  207. package/src/components/PrizeCollection.tsx +1 -1
  208. package/src/components/RadioGroup.tsx +8 -0
  209. package/src/components/Select.tsx +1 -1
  210. package/src/components/Sheet.tsx +4 -1
  211. package/src/components/Skeleton.tsx +47 -6
  212. package/src/components/Switch.tsx +2 -0
  213. package/src/components/Tabs.tsx +2 -0
  214. package/src/components/ThemedIcon.tsx +1 -1
  215. package/src/components/Toast.tsx +489 -87
  216. package/src/editor/NoteEditor.tsx +47 -10
  217. package/src/editor/editorHtml.generated.ts +1 -1
  218. package/src/hooks/useThemeColor.ts +757 -64
  219. package/src/hooks/useTrackedText.ts +20 -0
  220. package/src/index.ts +36 -1
  221. package/src/lib/optional-deps.ts +27 -0
  222. package/src/lib/touch-target.ts +12 -0
  223. package/setup/index.tsx +0 -42
@@ -0,0 +1,20 @@
1
+ import { useState } from "react";
2
+
3
+ function useTrackedText(
4
+ value: string | undefined,
5
+ defaultValue: string | undefined,
6
+ onChangeText?: (text: string) => void
7
+ ) {
8
+ const [uncontrolledText, setUncontrolledText] = useState(defaultValue ?? "");
9
+ const isControlled = value !== undefined;
10
+ const text = isControlled ? value : uncontrolledText;
11
+
12
+ const handleChangeText = (nextText: string) => {
13
+ if (!isControlled) setUncontrolledText(nextText);
14
+ onChangeText?.(nextText);
15
+ };
16
+
17
+ return { text, handleChangeText };
18
+ }
19
+
20
+ export { useTrackedText };
package/src/index.ts CHANGED
@@ -375,6 +375,15 @@ export type {
375
375
  export { Tag, tagVariants, tagTextVariants } from "@/components/Tag";
376
376
  export type { TagProps } from "@/components/Tag";
377
377
 
378
+ // Chip
379
+ export {
380
+ Chip,
381
+ chipVariants,
382
+ chipBackgroundVariants,
383
+ chipTextVariants,
384
+ } from "@/components/Chip";
385
+ export type { ChipProps, ChipSize, ChipVariant } from "@/components/Chip";
386
+
378
387
  // Tabs
379
388
  export {
380
389
  Tabs,
@@ -391,6 +400,23 @@ export type {
391
400
  TabsVariant,
392
401
  } from "@/components/Tabs";
393
402
 
403
+ // Choice
404
+ export { Choice } from "@/components/Choice";
405
+ export type { ChoiceProps, ChoiceTheme } from "@/components/Choice";
406
+
407
+ // Filter
408
+ export { Filter } from "@/components/Filter";
409
+ export type { FilterProps } from "@/components/Filter";
410
+
411
+ // Feedback
412
+ export { Feedback } from "@/components/Feedback";
413
+ export type {
414
+ FeedbackProps,
415
+ FeedbackSize,
416
+ FeedbackType,
417
+ FeedbackVariant,
418
+ } from "@/components/Feedback";
419
+
394
420
  // Toast
395
421
  export {
396
422
  Toast,
@@ -402,7 +428,16 @@ export {
402
428
  ToastViewport,
403
429
  toastVariants,
404
430
  } from "@/components/Toast";
405
- export type { ToastActionElement, ToastProps } from "@/components/Toast";
431
+ export type {
432
+ ToastActionElement,
433
+ ToastActionProps,
434
+ ToastActionVariant,
435
+ ToastCloseProps,
436
+ ToastGradientVariant,
437
+ ToastProps,
438
+ ToastProviderProps,
439
+ ToastVariant,
440
+ } from "@/components/Toast";
406
441
 
407
442
  // Tooltip
408
443
  export {
@@ -0,0 +1,27 @@
1
+ import type { ComponentType, ReactNode } from "react";
2
+
3
+ export type LinearGradientProps = {
4
+ colors: string[];
5
+ locations?: number[];
6
+ start?: { x: number; y: number };
7
+ end?: { x: number; y: number };
8
+ style?: object;
9
+ pointerEvents?: "none" | "auto" | "box-none" | "box-only";
10
+ children?: ReactNode;
11
+ };
12
+
13
+ export type LinearGradientComponent = ComponentType<LinearGradientProps>;
14
+
15
+ /**
16
+ * Lazy-load `expo-linear-gradient` so components that export from the package
17
+ * entrypoint keep working when the optional peer is not installed.
18
+ */
19
+ export function loadLinearGradient(): LinearGradientComponent | null {
20
+ try {
21
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
22
+ const gradient = require("expo-linear-gradient");
23
+ return gradient.LinearGradient ?? null;
24
+ } catch {
25
+ return null;
26
+ }
27
+ }
@@ -0,0 +1,12 @@
1
+ import { type Insets } from "react-native";
2
+
3
+ const MIN_TOUCH_TARGET = 44;
4
+
5
+ function getMinTouchHitSlop(width: number, height: number = width): Insets {
6
+ const horizontal = Math.max(0, (MIN_TOUCH_TARGET - width) / 2);
7
+ const vertical = Math.max(0, (MIN_TOUCH_TARGET - height) / 2);
8
+
9
+ return { top: vertical, bottom: vertical, left: horizontal, right: horizontal };
10
+ }
11
+
12
+ export { MIN_TOUCH_TARGET, getMinTouchHitSlop };
package/setup/index.tsx DELETED
@@ -1,42 +0,0 @@
1
- import React from 'react';
2
- import { createNativeStackNavigator } from '@react-navigation/native-stack';
3
-
4
- type RequireContext = {
5
- keys(): string[];
6
- (id: string): { default: React.ComponentType<any> };
7
- };
8
-
9
- type MedwayUiNavigatorResult = {
10
- MedwayUiNavigator: React.ComponentType;
11
- screenNames: string[];
12
- };
13
-
14
- function extractScreenName(key: string): string {
15
- return key.replace(/^\.\//, '').replace(/\/index\.tsx$/, '');
16
- }
17
-
18
- function createMedwayUiNavigator(context: RequireContext): MedwayUiNavigatorResult {
19
- const Stack = createNativeStackNavigator();
20
-
21
- const screens = context.keys().map((key) => ({
22
- name: extractScreenName(key),
23
- component: context(key).default,
24
- }));
25
-
26
- const screenNames = screens.map((s) => s.name);
27
-
28
- function MedwayUiNavigator() {
29
- return (
30
- <Stack.Navigator screenOptions={{ headerShown: false }}>
31
- {screens.map(({ name, component }) => (
32
- <Stack.Screen key={name} name={name} component={component} />
33
- ))}
34
- </Stack.Navigator>
35
- );
36
- }
37
-
38
- return { MedwayUiNavigator, screenNames };
39
- }
40
-
41
- export { createMedwayUiNavigator };
42
- export type { MedwayUiNavigatorResult };