@forthtilliath/react-native-kit 0.15.1 → 0.17.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 (110) hide show
  1. package/README.md +103 -3
  2. package/dist/components/feedback/ErrorFallback.d.ts +63 -0
  3. package/dist/components/feedback/ErrorFallback.d.ts.map +1 -0
  4. package/dist/components/feedback/ErrorFallback.js +86 -0
  5. package/dist/components/feedback/index.d.ts +2 -0
  6. package/dist/components/feedback/index.d.ts.map +1 -0
  7. package/dist/components/feedback/index.js +1 -0
  8. package/dist/components/index.d.ts +2 -0
  9. package/dist/components/index.d.ts.map +1 -1
  10. package/dist/components/index.js +2 -0
  11. package/dist/components/list/AddButton.d.ts +27 -0
  12. package/dist/components/list/AddButton.d.ts.map +1 -0
  13. package/dist/components/list/AddButton.js +29 -0
  14. package/dist/components/list/DragHandle.d.ts +35 -0
  15. package/dist/components/list/DragHandle.d.ts.map +1 -0
  16. package/dist/components/list/DragHandle.js +31 -0
  17. package/dist/components/list/SwipeableRow.d.ts +18 -4
  18. package/dist/components/list/SwipeableRow.d.ts.map +1 -1
  19. package/dist/components/list/SwipeableRow.js +40 -13
  20. package/dist/components/list/index.d.ts +2 -0
  21. package/dist/components/list/index.d.ts.map +1 -1
  22. package/dist/components/list/index.js +2 -0
  23. package/dist/components/overlay/BottomSheet.d.ts +45 -0
  24. package/dist/components/overlay/BottomSheet.d.ts.map +1 -0
  25. package/dist/components/overlay/BottomSheet.js +48 -0
  26. package/dist/components/overlay/index.d.ts +2 -0
  27. package/dist/components/overlay/index.d.ts.map +1 -0
  28. package/dist/components/overlay/index.js +1 -0
  29. package/dist/components/picker/CheckboxGroup.d.ts +47 -0
  30. package/dist/components/picker/CheckboxGroup.d.ts.map +1 -0
  31. package/dist/components/picker/CheckboxGroup.js +50 -0
  32. package/dist/components/picker/MonthDayGrid.d.ts +58 -0
  33. package/dist/components/picker/MonthDayGrid.d.ts.map +1 -0
  34. package/dist/components/picker/MonthDayGrid.js +73 -0
  35. package/dist/components/picker/OptionsModal.d.ts +45 -0
  36. package/dist/components/picker/OptionsModal.d.ts.map +1 -0
  37. package/dist/components/picker/OptionsModal.js +45 -0
  38. package/dist/components/picker/QuantityStepper.d.ts +63 -0
  39. package/dist/components/picker/QuantityStepper.d.ts.map +1 -0
  40. package/dist/components/picker/QuantityStepper.js +101 -0
  41. package/dist/components/picker/SegmentedToggle.d.ts +52 -0
  42. package/dist/components/picker/SegmentedToggle.d.ts.map +1 -0
  43. package/dist/components/picker/SegmentedToggle.js +48 -0
  44. package/dist/components/picker/SelectField.d.ts +45 -0
  45. package/dist/components/picker/SelectField.d.ts.map +1 -0
  46. package/dist/components/picker/SelectField.js +54 -0
  47. package/dist/components/picker/index.d.ts +6 -0
  48. package/dist/components/picker/index.d.ts.map +1 -1
  49. package/dist/components/picker/index.js +6 -0
  50. package/dist/components/settings/SettingsCard.d.ts +63 -0
  51. package/dist/components/settings/SettingsCard.d.ts.map +1 -0
  52. package/dist/components/settings/SettingsCard.js +68 -0
  53. package/dist/components/settings/SwitchRow.d.ts +48 -0
  54. package/dist/components/settings/SwitchRow.d.ts.map +1 -0
  55. package/dist/components/settings/SwitchRow.js +44 -0
  56. package/dist/components/settings/index.d.ts +2 -0
  57. package/dist/components/settings/index.d.ts.map +1 -1
  58. package/dist/components/settings/index.js +2 -0
  59. package/dist/components/theme/ThemePreferenceProvider.d.ts +39 -0
  60. package/dist/components/theme/ThemePreferenceProvider.d.ts.map +1 -0
  61. package/dist/components/theme/ThemePreferenceProvider.js +53 -0
  62. package/dist/components/theme/index.d.ts +2 -0
  63. package/dist/components/theme/index.d.ts.map +1 -1
  64. package/dist/components/theme/index.js +2 -0
  65. package/dist/components/theme/themePreferenceContext.d.ts +20 -0
  66. package/dist/components/theme/themePreferenceContext.d.ts.map +1 -0
  67. package/dist/components/theme/themePreferenceContext.js +21 -0
  68. package/dist/index.d.ts +20 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +20 -0
  71. package/dist/utils/calendar/index.d.ts +3 -0
  72. package/dist/utils/calendar/index.d.ts.map +1 -0
  73. package/dist/utils/calendar/index.js +2 -0
  74. package/dist/utils/calendar/syncDedicatedCalendar.d.ts +37 -0
  75. package/dist/utils/calendar/syncDedicatedCalendar.d.ts.map +1 -0
  76. package/dist/utils/calendar/syncDedicatedCalendar.js +42 -0
  77. package/dist/utils/calendar/toCalendarEventDetails.d.ts +32 -0
  78. package/dist/utils/calendar/toCalendarEventDetails.d.ts.map +1 -0
  79. package/dist/utils/calendar/toCalendarEventDetails.js +47 -0
  80. package/dist/utils/files/appFiles.d.ts +61 -0
  81. package/dist/utils/files/appFiles.d.ts.map +1 -0
  82. package/dist/utils/files/appFiles.js +126 -0
  83. package/dist/utils/files/imageThumbnail.d.ts +22 -0
  84. package/dist/utils/files/imageThumbnail.d.ts.map +1 -0
  85. package/dist/utils/files/imageThumbnail.js +28 -0
  86. package/dist/utils/files/index.d.ts +3 -0
  87. package/dist/utils/files/index.d.ts.map +1 -0
  88. package/dist/utils/files/index.js +2 -0
  89. package/dist/utils/helpers/haptics.d.ts +9 -0
  90. package/dist/utils/helpers/haptics.d.ts.map +1 -0
  91. package/dist/utils/helpers/haptics.js +28 -0
  92. package/dist/utils/helpers/index.d.ts +5 -0
  93. package/dist/utils/helpers/index.d.ts.map +1 -1
  94. package/dist/utils/helpers/index.js +5 -0
  95. package/dist/utils/helpers/isNativeModuleAvailable.d.ts +12 -0
  96. package/dist/utils/helpers/isNativeModuleAvailable.d.ts.map +1 -0
  97. package/dist/utils/helpers/isNativeModuleAvailable.js +15 -0
  98. package/dist/utils/helpers/shareFile.d.ts +23 -0
  99. package/dist/utils/helpers/shareFile.d.ts.map +1 -0
  100. package/dist/utils/helpers/shareFile.js +26 -0
  101. package/dist/utils/helpers/shareTextFile.d.ts +16 -0
  102. package/dist/utils/helpers/shareTextFile.d.ts.map +1 -0
  103. package/dist/utils/helpers/shareTextFile.js +23 -0
  104. package/dist/utils/helpers/shareViewAsImage.d.ts +21 -0
  105. package/dist/utils/helpers/shareViewAsImage.d.ts.map +1 -0
  106. package/dist/utils/helpers/shareViewAsImage.js +32 -0
  107. package/dist/utils/index.d.ts +2 -0
  108. package/dist/utils/index.d.ts.map +1 -1
  109. package/dist/utils/index.js +2 -0
  110. package/package.json +58 -7
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether the native module `name` is compiled into this binary (new or old
3
+ * architecture). Check it before loading a library that requires its native
4
+ * module on import: on a binary built without it (an older dev build),
5
+ * importing it anyway crashes the whole screen instead of disabling the one
6
+ * feature that needs it.
7
+ *
8
+ * @example
9
+ * if (isNativeModuleAvailable("RNViewShot")) showShareAsImageButton();
10
+ */
11
+ export declare function isNativeModuleAvailable(name: string): boolean;
12
+ //# sourceMappingURL=isNativeModuleAvailable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNativeModuleAvailable.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/isNativeModuleAvailable.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7D"}
@@ -0,0 +1,15 @@
1
+ import { NativeModules, TurboModuleRegistry, } from "react-native";
2
+ /**
3
+ * Whether the native module `name` is compiled into this binary (new or old
4
+ * architecture). Check it before loading a library that requires its native
5
+ * module on import: on a binary built without it (an older dev build),
6
+ * importing it anyway crashes the whole screen instead of disabling the one
7
+ * feature that needs it.
8
+ *
9
+ * @example
10
+ * if (isNativeModuleAvailable("RNViewShot")) showShareAsImageButton();
11
+ */
12
+ export function isNativeModuleAvailable(name) {
13
+ return (TurboModuleRegistry.get(name) != null ||
14
+ NativeModules[name] != null);
15
+ }
@@ -0,0 +1,23 @@
1
+ import { type KitLocale } from "../../i18n/locale.js";
2
+ export interface ShareFileOptions {
3
+ /** E.g. `"text/calendar"`, `"image/png"`. */
4
+ mimeType: string;
5
+ /** Title of Android's share sheet. */
6
+ dialogTitle?: string;
7
+ /** Language of the default error message. @defaultValue "fr" */
8
+ locale?: KitLocale;
9
+ /** Message of the error thrown when the device can't share. */
10
+ unavailableMessage?: string;
11
+ }
12
+ /**
13
+ * Opens the native share sheet for a local file (a capture, an export…).
14
+ * Needs `expo-sharing` (an optional peer dependency).
15
+ *
16
+ * @param uri - A `file://` URI.
17
+ * @param options - See {@link ShareFileOptions}.
18
+ * @throws An `Error` with a user-facing message when sharing isn't available.
19
+ * @example
20
+ * await shareFile(captureUri, { mimeType: "image/png", dialogTitle: "Partager le planning" });
21
+ */
22
+ export declare function shareFile(uri: string, options: ShareFileOptions): Promise<void>;
23
+ //# sourceMappingURL=shareFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareFile.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/shareFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,26 @@
1
+ import * as Sharing from "expo-sharing";
2
+ import { DEFAULT_KIT_LOCALE } from "../../i18n/locale.js";
3
+ const defaultUnavailableMessages = {
4
+ fr: "Le partage n'est pas disponible sur cet appareil.",
5
+ en: "Sharing isn't available on this device.",
6
+ };
7
+ /**
8
+ * Opens the native share sheet for a local file (a capture, an export…).
9
+ * Needs `expo-sharing` (an optional peer dependency).
10
+ *
11
+ * @param uri - A `file://` URI.
12
+ * @param options - See {@link ShareFileOptions}.
13
+ * @throws An `Error` with a user-facing message when sharing isn't available.
14
+ * @example
15
+ * await shareFile(captureUri, { mimeType: "image/png", dialogTitle: "Partager le planning" });
16
+ */
17
+ export async function shareFile(uri, options) {
18
+ if (!(await Sharing.isAvailableAsync())) {
19
+ throw new Error(options.unavailableMessage ??
20
+ defaultUnavailableMessages[options.locale ?? DEFAULT_KIT_LOCALE]);
21
+ }
22
+ await Sharing.shareAsync(uri, {
23
+ mimeType: options.mimeType,
24
+ dialogTitle: options.dialogTitle,
25
+ });
26
+ }
@@ -0,0 +1,16 @@
1
+ import { type ShareFileOptions } from "./shareFile.js";
2
+ /**
3
+ * Writes text to a file in the app's cache (replacing any previous one of
4
+ * that name), then opens the native share sheet for it — to export an
5
+ * `.ics`, a `.csv`, a JSON backup… Needs `expo-file-system` and
6
+ * `expo-sharing` (optional peer dependencies).
7
+ *
8
+ * @param filename - The shared file's name, extension included.
9
+ * @param content - Its text content.
10
+ * @param options - See `ShareFileOptions`.
11
+ * @throws An `Error` with a user-facing message when sharing isn't available.
12
+ * @example
13
+ * await shareTextFile("planning-2026-07.ics", ics, { mimeType: "text/calendar" });
14
+ */
15
+ export declare function shareTextFile(filename: string, content: string, options: ShareFileOptions): Promise<void>;
16
+ //# sourceMappingURL=shareTextFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareTextFile.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/shareTextFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,23 @@
1
+ import { File, Paths } from "expo-file-system";
2
+ import { shareFile } from "./shareFile.js";
3
+ /**
4
+ * Writes text to a file in the app's cache (replacing any previous one of
5
+ * that name), then opens the native share sheet for it — to export an
6
+ * `.ics`, a `.csv`, a JSON backup… Needs `expo-file-system` and
7
+ * `expo-sharing` (optional peer dependencies).
8
+ *
9
+ * @param filename - The shared file's name, extension included.
10
+ * @param content - Its text content.
11
+ * @param options - See `ShareFileOptions`.
12
+ * @throws An `Error` with a user-facing message when sharing isn't available.
13
+ * @example
14
+ * await shareTextFile("planning-2026-07.ics", ics, { mimeType: "text/calendar" });
15
+ */
16
+ export async function shareTextFile(filename, content, options) {
17
+ const file = new File(Paths.cache, filename);
18
+ if (file.exists)
19
+ file.delete();
20
+ file.create({ overwrite: true });
21
+ file.write(content);
22
+ await shareFile(file.uri, options);
23
+ }
@@ -0,0 +1,21 @@
1
+ import type { RefObject } from "react";
2
+ import type { View } from "react-native";
3
+ import { type ShareFileOptions } from "./shareFile.js";
4
+ export type ShareViewAsImageOptions = Omit<ShareFileOptions, "mimeType"> & {
5
+ /** Message of the error thrown when this binary can't capture views. */
6
+ captureUnavailableMessage?: string;
7
+ };
8
+ /**
9
+ * Captures a view as a PNG and opens the native share sheet with it (a
10
+ * scoreboard, a schedule…). Needs `react-native-view-shot` and
11
+ * `expo-sharing`. The capture library is loaded on demand, once its native
12
+ * module is known to be there: on a binary built without it, only this
13
+ * feature fails — with a user-facing `Error` — instead of the whole screen.
14
+ *
15
+ * @param view - Ref of the view to capture (`collapsable={false}` on Android).
16
+ * @param options - See {@link ShareViewAsImageOptions} and `shareFile`.
17
+ * @example
18
+ * await shareViewAsImage(rankingRef, { dialogTitle: "Partager le classement" });
19
+ */
20
+ export declare function shareViewAsImage(view: RefObject<View | null>, { captureUnavailableMessage, ...options }?: ShareViewAsImageOptions): Promise<void>;
21
+ //# sourceMappingURL=shareViewAsImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareViewAsImage.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/shareViewAsImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAKzC,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IACzE,wEAAwE;IACxE,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAOF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,EAC5B,EAAE,yBAAyB,EAAE,GAAG,OAAO,EAAE,GAAE,uBAA4B,GACtE,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,32 @@
1
+ import { DEFAULT_KIT_LOCALE } from "../../i18n/locale.js";
2
+ import { isNativeModuleAvailable } from "./isNativeModuleAvailable.js";
3
+ import { shareFile } from "./shareFile.js";
4
+ const defaultCaptureUnavailableMessages = {
5
+ fr: "Le partage en image n'est pas disponible dans cette version de l'app.",
6
+ en: "Sharing as an image isn't available in this version of the app.",
7
+ };
8
+ /**
9
+ * Captures a view as a PNG and opens the native share sheet with it (a
10
+ * scoreboard, a schedule…). Needs `react-native-view-shot` and
11
+ * `expo-sharing`. The capture library is loaded on demand, once its native
12
+ * module is known to be there: on a binary built without it, only this
13
+ * feature fails — with a user-facing `Error` — instead of the whole screen.
14
+ *
15
+ * @param view - Ref of the view to capture (`collapsable={false}` on Android).
16
+ * @param options - See {@link ShareViewAsImageOptions} and `shareFile`.
17
+ * @example
18
+ * await shareViewAsImage(rankingRef, { dialogTitle: "Partager le classement" });
19
+ */
20
+ export async function shareViewAsImage(view, { captureUnavailableMessage, ...options } = {}) {
21
+ if (!isNativeModuleAvailable("RNViewShot")) {
22
+ throw new Error(captureUnavailableMessage ??
23
+ defaultCaptureUnavailableMessages[options.locale ?? DEFAULT_KIT_LOCALE]);
24
+ }
25
+ const { captureRef } = await import("react-native-view-shot");
26
+ const uri = await captureRef(view, {
27
+ format: "png",
28
+ quality: 1,
29
+ result: "tmpfile",
30
+ });
31
+ await shareFile(uri, { ...options, mimeType: "image/png" });
32
+ }
@@ -1,2 +1,4 @@
1
+ export * from "./calendar/index.js";
2
+ export * from "./files/index.js";
1
3
  export * from "./helpers/index.js";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
@@ -1 +1,3 @@
1
+ export * from "./calendar/index.js";
2
+ export * from "./files/index.js";
1
3
  export * from "./helpers/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forthtilliath/react-native-kit",
3
- "version": "0.15.1",
3
+ "version": "0.17.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -22,17 +22,61 @@
22
22
  "./*": "./dist/*.js"
23
23
  },
24
24
  "dependencies": {
25
- "@forthtilliath/expo-release-updates-ui": "^0.3.1",
26
- "@forthtilliath/ts-kit": "^0.11.0"
25
+ "@forthtilliath/ts-kit": "^0.12.0"
27
26
  },
28
27
  "peerDependencies": {
29
28
  "@expo/vector-icons": ">=15.0.0",
29
+ "@forthtilliath/expo-release-updates-ui": ">=0.4.1",
30
+ "expo-calendar": ">=54.0.0",
31
+ "expo-file-system": ">=54.0.0",
32
+ "expo-haptics": ">=54.0.0",
33
+ "expo-image-manipulator": ">=54.0.0",
30
34
  "expo-image-picker": ">=54.0.0",
35
+ "expo-sharing": ">=54.0.0",
31
36
  "expo-speech-recognition": ">=1.0.0",
32
37
  "react": ">=19",
33
38
  "react-native": ">=0.81",
34
39
  "react-native-gesture-handler": ">=2.20.0",
35
- "react-native-reanimated": ">=3.0.0"
40
+ "react-native-reanimated": ">=3.0.0",
41
+ "react-native-view-shot": ">=4.0.0"
42
+ },
43
+ "peerDependenciesMeta": {
44
+ "@expo/vector-icons": {
45
+ "optional": true
46
+ },
47
+ "@forthtilliath/expo-release-updates-ui": {
48
+ "optional": true
49
+ },
50
+ "expo-calendar": {
51
+ "optional": true
52
+ },
53
+ "expo-file-system": {
54
+ "optional": true
55
+ },
56
+ "expo-haptics": {
57
+ "optional": true
58
+ },
59
+ "expo-image-manipulator": {
60
+ "optional": true
61
+ },
62
+ "expo-image-picker": {
63
+ "optional": true
64
+ },
65
+ "expo-sharing": {
66
+ "optional": true
67
+ },
68
+ "expo-speech-recognition": {
69
+ "optional": true
70
+ },
71
+ "react-native-gesture-handler": {
72
+ "optional": true
73
+ },
74
+ "react-native-reanimated": {
75
+ "optional": true
76
+ },
77
+ "react-native-view-shot": {
78
+ "optional": true
79
+ }
36
80
  },
37
81
  "devDependencies": {
38
82
  "@expo/vector-icons": "^15.1.1",
@@ -41,25 +85,32 @@
41
85
  "@types/react-test-renderer": "^19.1.0",
42
86
  "@vitest/coverage-v8": "5.0.2",
43
87
  "eslint": "10.7.0",
88
+ "expo-calendar": "~57.0.5",
89
+ "expo-file-system": "~57.0.2",
90
+ "expo-haptics": "~57.0.3",
91
+ "expo-image-manipulator": "~57.0.21",
44
92
  "expo-image-picker": "~57.0.9",
93
+ "expo-sharing": "~57.0.23",
45
94
  "expo-speech-recognition": "^56.0.1",
46
95
  "react": "^19.2.8",
47
96
  "react-native": "0.86.0",
48
97
  "react-native-gesture-handler": "~2.32.0",
49
98
  "react-native-reanimated": "4.5.1",
99
+ "react-native-view-shot": "5.1.0",
50
100
  "react-native-worklets": "0.10.1",
51
101
  "react-test-renderer": "19.2.3",
52
102
  "size-limit": "^14.1.0",
53
103
  "typescript": "^5.9.3",
54
104
  "vitest": "^5.0.2",
55
- "@forthtilliath/eslint-config": "0.8.0",
56
- "@forthtilliath/typescript-config": "0.1.1"
105
+ "@forthtilliath/eslint-config": "0.9.0",
106
+ "@forthtilliath/typescript-config": "0.1.1",
107
+ "@forthtilliath/expo-release-updates-ui": "^0.4.1"
57
108
  },
58
109
  "size-limit": [
59
110
  {
60
111
  "name": "dist (all modules, brotli)",
61
112
  "path": "dist/**/*.js",
62
- "limit": "30 KB"
113
+ "limit": "44 KB"
63
114
  }
64
115
  ],
65
116
  "scripts": {