expo-calendar 58.0.1 → 58.0.3

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/CHANGELOG.md +12 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/calendar/next/mappers/ReminderMapper.kt +10 -5
  4. package/build/Calendar.d.ts +14 -6
  5. package/build/Calendar.js +14 -6
  6. package/build/Calendar.js.map +1 -1
  7. package/build/ExpoCalendar.types.d.ts +4 -0
  8. package/build/ExpoCalendar.types.js.map +1 -1
  9. package/expo-module.config.json +1 -1
  10. package/ios/Next/CalendarAccessGuard.swift +7 -7
  11. package/ios/Next/CalendarNextModule.swift +36 -26
  12. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/{58.0.1/expo.modules.calendar-58.0.1-sources.jar → 58.0.3/expo.modules.calendar-58.0.3-sources.jar} +0 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3-sources.jar.md5 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3-sources.jar.sha1 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3-sources.jar.sha256 +1 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3-sources.jar.sha512 +1 -0
  17. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/{58.0.1/expo.modules.calendar-58.0.1.aar → 58.0.3/expo.modules.calendar-58.0.3.aar} +0 -0
  18. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.aar.md5 +1 -0
  19. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.aar.sha1 +1 -0
  20. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.aar.sha256 +1 -0
  21. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.aar.sha512 +1 -0
  22. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/{58.0.1/expo.modules.calendar-58.0.1.module → 58.0.3/expo.modules.calendar-58.0.3.module} +23 -23
  23. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.module.md5 +1 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.module.sha1 +1 -0
  25. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.module.sha256 +1 -0
  26. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.module.sha512 +1 -0
  27. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/{58.0.1/expo.modules.calendar-58.0.1.pom → 58.0.3/expo.modules.calendar-58.0.3.pom} +2 -2
  28. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.pom.md5 +1 -0
  29. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.pom.sha1 +1 -0
  30. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.pom.sha256 +1 -0
  31. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.3/expo.modules.calendar-58.0.3.pom.sha512 +1 -0
  32. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/maven-metadata.xml +4 -4
  33. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/maven-metadata.xml.md5 +1 -1
  34. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/maven-metadata.xml.sha1 +1 -1
  35. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/maven-metadata.xml.sha256 +1 -1
  36. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/maven-metadata.xml.sha512 +1 -1
  37. package/package.json +3 -3
  38. package/src/Calendar.ts +14 -6
  39. package/src/ExpoCalendar.types.ts +4 -0
  40. package/.npmignore +0 -24
  41. package/.tsbuildinfo +0 -1
  42. package/android/.gitignore +0 -261
  43. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1-sources.jar.md5 +0 -1
  44. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1-sources.jar.sha1 +0 -1
  45. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1-sources.jar.sha256 +0 -1
  46. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1-sources.jar.sha512 +0 -1
  47. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.aar.md5 +0 -1
  48. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.aar.sha1 +0 -1
  49. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.aar.sha256 +0 -1
  50. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.aar.sha512 +0 -1
  51. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.module.md5 +0 -1
  52. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.module.sha1 +0 -1
  53. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.module.sha256 +0 -1
  54. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.module.sha512 +0 -1
  55. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.pom.md5 +0 -1
  56. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.pom.sha1 +0 -1
  57. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.pom.sha256 +0 -1
  58. package/local-maven-repo/host/exp/exponent/expo.modules.calendar/58.0.1/expo.modules.calendar-58.0.1.pom.sha512 +0 -1
  59. package/plugin/.tsbuildinfo +0 -1
  60. package/plugin/tsconfig.json +0 -10
  61. package/plugin/tsconfig.tsbuildinfo +0 -1
  62. package/tsconfig.all.json +0 -11
  63. package/tsconfig.json +0 -10
package/CHANGELOG.md CHANGED
@@ -10,6 +10,18 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 58.0.3 — 2026-09-25
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [Android] Fix the sign of alarm `relativeOffset` in the `next` API so that negative values fire before the event start, matching iOS and the legacy API.
18
+
19
+ ## 58.0.2 — 2026-09-16
20
+
21
+ ### 🐛 Bug fixes
22
+
23
+ - [iOS] Allow `getDefaultCalendarSync`, `getCalendars` and `ExpoCalendar.get` to work with write-only calendar access. ([#48186](https://github.com/expo/expo/pull/48186) by [@Wenszel](https://github.com/Wenszel))
24
+
13
25
  ## 58.0.1 — 2026-09-15
14
26
 
15
27
  ### 🛠 Breaking changes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '58.0.1'
7
+ version = '58.0.3'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.calendar"
11
11
  defaultConfig {
12
12
  versionCode 17
13
- versionName '58.0.1'
13
+ versionName '58.0.3'
14
14
  }
15
15
  }
16
16
 
@@ -7,14 +7,19 @@ import expo.modules.calendar.next.records.AlarmMethod as RecordAlarmMethod
7
7
  import expo.modules.calendar.next.records.AlarmRecord
8
8
 
9
9
  class ReminderMapper {
10
- fun toDomain(record: AlarmRecord) = ReminderInput(
11
- method = record.method?.toDomain(),
12
- minutes = record.relativeOffset
10
+ // `relativeOffset` is negative for an alarm before the event start,
11
+ // while `CalendarContract.Reminders.MINUTES` is positive for a reminder before it.
12
+ fun toDomain(record: AlarmRecord): ReminderInput {
13
+ val relativeOffset = record.relativeOffset
13
14
  ?: throw IllegalArgumentException("AlarmRecord must have relativeOffset defined")
14
- )
15
+ return ReminderInput(
16
+ method = record.method?.toDomain(),
17
+ minutes = -relativeOffset
18
+ )
19
+ }
15
20
 
16
21
  fun toRecord(entity: ReminderEntity) = AlarmRecord(
17
- relativeOffset = entity.minutes,
22
+ relativeOffset = -entity.minutes,
18
23
  method = entity.method?.toRecord()
19
24
  )
20
25
 
@@ -46,6 +46,10 @@ export declare class ExpoCalendar extends InternalExpoCalendar.ExpoCalendar {
46
46
  }
47
47
  /**
48
48
  * Gets an instance of the default calendar object.
49
+ *
50
+ * > **iOS 17+:** With write-only calendar access, this returns EventKit's virtual calendar,
51
+ * > which can be used to create events but does not expose existing calendar data.
52
+ *
49
53
  * > **Android:** This function is not available on Android. Android does not expose a single
50
54
  * > system-managed default calendar. Use `getCalendars()` and choose an appropriate writable
51
55
  * > calendar for your app; `isPrimary` can help identify per-account primary calendars.
@@ -54,12 +58,16 @@ export declare class ExpoCalendar extends InternalExpoCalendar.ExpoCalendar {
54
58
  */
55
59
  export declare function getDefaultCalendarSync(): ExpoCalendar;
56
60
  /**
57
- * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the different calendars stored on the device.
58
- * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to
59
- * a specific [entity type](#entitytypes). Possible values are `Calendar.EntityTypes.EVENT` (for calendars shown in
60
- * the Calendar app) and `Calendar.EntityTypes.REMINDER` (for the Reminders app).
61
- * > **Note:** If not defined, you will need both permissions: **CALENDAR** and **REMINDERS**.
62
- * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type (if provided).
61
+ * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the
62
+ * calendars available to the app.
63
+ *
64
+ * > **iOS 17+:** With write-only calendar access, requesting `EntityTypes.EVENT` returns a
65
+ * > single virtual calendar, which can be used to create events but does not expose the user's
66
+ * > real calendars.
67
+ *
68
+ * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to a specific [entity type](#entitytypes).
69
+ * > **Note:** If not defined, both calendar (write-only is enough) and reminders permissions are required.
70
+ * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type, if provided.
63
71
  */
64
72
  export declare function getCalendars(entityType?: EntityTypes): Promise<ExpoCalendar[]>;
65
73
  /**
package/build/Calendar.js CHANGED
@@ -145,6 +145,10 @@ import { stringifyDateValues, stringifyIfDate, getNullableDetailsFields } from '
145
145
  }
146
146
  /**
147
147
  * Gets an instance of the default calendar object.
148
+ *
149
+ * > **iOS 17+:** With write-only calendar access, this returns EventKit's virtual calendar,
150
+ * > which can be used to create events but does not expose existing calendar data.
151
+ *
148
152
  * > **Android:** This function is not available on Android. Android does not expose a single
149
153
  * > system-managed default calendar. Use `getCalendars()` and choose an appropriate writable
150
154
  * > calendar for your app; `isPrimary` can help identify per-account primary calendars.
@@ -159,12 +163,16 @@ import { stringifyDateValues, stringifyIfDate, getNullableDetailsFields } from '
159
163
  return defaultCalendar;
160
164
  }
161
165
  /**
162
- * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the different calendars stored on the device.
163
- * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to
164
- * a specific [entity type](#entitytypes). Possible values are `Calendar.EntityTypes.EVENT` (for calendars shown in
165
- * the Calendar app) and `Calendar.EntityTypes.REMINDER` (for the Reminders app).
166
- * > **Note:** If not defined, you will need both permissions: **CALENDAR** and **REMINDERS**.
167
- * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type (if provided).
166
+ * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the
167
+ * calendars available to the app.
168
+ *
169
+ * > **iOS 17+:** With write-only calendar access, requesting `EntityTypes.EVENT` returns a
170
+ * > single virtual calendar, which can be used to create events but does not expose the user's
171
+ * > real calendars.
172
+ *
173
+ * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to a specific [entity type](#entitytypes).
174
+ * > **Note:** If not defined, both calendar (write-only is enough) and reminders permissions are required.
175
+ * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type, if provided.
168
176
  */ export async function getCalendars(entityType) {
169
177
  if (!InternalExpoCalendar.getCalendars) {
170
178
  throw new UnavailabilityError('Calendar', 'getCalendars');
@@ -1 +1 @@
1
- {"version":3,"sources":["Calendar.ts"],"sourcesContent":[null],"names":["createPermissionHook","PermissionStatus","UnavailabilityError","Platform","processColor","InternalExpoCalendar","stringifyDateValues","stringifyIfDate","getNullableDetailsFields","ExpoCalendarAttendee","update","details","nullableDetailsFields","delete","ExpoCalendarEvent","getOccurrenceSync","recurringEventOptions","result","Object","setPrototypeOf","prototype","getAttendees","attendees","map","attendee","createAttendee","newAttendee","get","eventId","event","getEventById","ExpoCalendarReminder","OS","reminderId","reminder","getReminderById","ExpoCalendar","createEvent","newEvent","createReminder","newReminder","listEvents","startDate","endDate","Error","events","listReminders","status","reminders","color","undefined","newDetails","addEventWithForm","options","calendarId","calendar","getCalendarById","getDefaultCalendarSync","defaultCalendar","getCalendars","entityType","calendars","createCalendar","id","createdCalendar","presentPicker","calendarIds","Array","isArray","c","requestCalendarPermissions","getCalendarPermissions","requestRemindersPermissions","getRemindersPermissions","getSourcesSync","AlarmMethod","AttendeeRole","AttendeeStatus","AttendeeType","Availability","CalendarAccessLevel","CalendarDialogResultActions","CalendarType","DayOfTheWeek","EntityTypes","EventAccessLevel","EventStatus","Frequency","MonthOfTheYear","ReminderStatus","SourceType","useCalendarPermissions","getMethod","writeOnly","requestMethod","useRemindersPermissions","response","canAskAgain","expires","granted","DENIED","createRemindersPermissionHook"],"mappings":"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"}
1
+ {"version":3,"sources":["Calendar.ts"],"sourcesContent":[null],"names":["createPermissionHook","PermissionStatus","UnavailabilityError","Platform","processColor","InternalExpoCalendar","stringifyDateValues","stringifyIfDate","getNullableDetailsFields","ExpoCalendarAttendee","update","details","nullableDetailsFields","delete","ExpoCalendarEvent","getOccurrenceSync","recurringEventOptions","result","Object","setPrototypeOf","prototype","getAttendees","attendees","map","attendee","createAttendee","newAttendee","get","eventId","event","getEventById","ExpoCalendarReminder","OS","reminderId","reminder","getReminderById","ExpoCalendar","createEvent","newEvent","createReminder","newReminder","listEvents","startDate","endDate","Error","events","listReminders","status","reminders","color","undefined","newDetails","addEventWithForm","options","calendarId","calendar","getCalendarById","getDefaultCalendarSync","defaultCalendar","getCalendars","entityType","calendars","createCalendar","id","createdCalendar","presentPicker","calendarIds","Array","isArray","c","requestCalendarPermissions","getCalendarPermissions","requestRemindersPermissions","getRemindersPermissions","getSourcesSync","AlarmMethod","AttendeeRole","AttendeeStatus","AttendeeType","Availability","CalendarAccessLevel","CalendarDialogResultActions","CalendarType","DayOfTheWeek","EntityTypes","EventAccessLevel","EventStatus","Frequency","MonthOfTheYear","ReminderStatus","SourceType","useCalendarPermissions","getMethod","writeOnly","requestMethod","useRemindersPermissions","response","canAskAgain","expires","granted","DENIED","createRemindersPermissionHook"],"mappings":"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"}
@@ -156,6 +156,10 @@ export declare class ExpoCalendar {
156
156
  delete(): Promise<void>;
157
157
  /**
158
158
  * Gets a calendar by its ID. Throws an error if the calendar with the given ID does not exist.
159
+ *
160
+ * > **iOS 17+:** With write-only calendar access, only the virtual calendar's ID can be
161
+ * > resolved - real calendars require full calendar access.
162
+ *
159
163
  * @param calendarId The ID of the calendar to get.
160
164
  * @returns An [`ExpoCalendar`](#expocalendar) object representing the calendar.
161
165
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["ExpoCalendar.types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAogBA;;;CAGC,GACD,WAoDC"}
1
+ {"version":3,"sources":["ExpoCalendar.types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAwgBA;;;CAGC,GACD,WAoDC"}
@@ -11,7 +11,7 @@
11
11
  "publication": {
12
12
  "groupId": "host.exp.exponent",
13
13
  "artifactId": "expo.modules.calendar",
14
- "version": "58.0.1",
14
+ "version": "58.0.3",
15
15
  "repository": "local-maven-repo"
16
16
  }
17
17
  }
@@ -30,31 +30,31 @@ public class CalendarAccessGuard {
30
30
  self.permittedEntities = permittedEntities
31
31
  }
32
32
 
33
- public func checkCalendarPermissions() throws {
34
- try self.checkPermissions(
33
+ public func ensureCalendarFullAccess() throws {
34
+ try self.ensurePermissions(
35
35
  entity: .event,
36
36
  requester: CalendarNextPermissionsRequester.self,
37
37
  permissionName: "CALENDAR"
38
38
  )
39
39
  }
40
40
 
41
- public func checkCalendarWritePermissions() throws {
42
- try self.checkPermissions(
41
+ public func ensureCalendarWriteOnlyOrFullAccess() throws {
42
+ try self.ensurePermissions(
43
43
  entity: .event,
44
44
  requester: CalendarWriteOnlyNextPermissionsRequester.self,
45
45
  permissionName: "CALENDARWRITEONLY"
46
46
  )
47
47
  }
48
48
 
49
- public func checkRemindersPermissions() throws {
50
- try self.checkPermissions(
49
+ public func ensureRemindersAccess() throws {
50
+ try self.ensurePermissions(
51
51
  entity: .reminder,
52
52
  requester: RemindersNextPermissionRequester.self,
53
53
  permissionName: "REMINDERS"
54
54
  )
55
55
  }
56
56
 
57
- private func checkPermissions(
57
+ private func ensurePermissions(
58
58
  entity: EKEntityType,
59
59
  requester: EXPermissionsRequester.Type,
60
60
  permissionName: String
@@ -29,7 +29,9 @@ public final class CalendarNextModule: Module {
29
29
  }
30
30
 
31
31
  Function("getDefaultCalendarSync") { () -> ExpoCalendar in
32
- try calendarAccessGuard?.checkCalendarPermissions()
32
+ // With write-only permissions granted, `eventStore.defaultCalendarForNewEvents` is a virtual calendar:
33
+ // https://developer.apple.com/documentation/EventKit/accessing-the-event-store#Use-EventKit-with-write-only-calendar-access
34
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
33
35
  guard let defaultCalendar = eventStore.defaultCalendarForNewEvents else {
34
36
  throw DefaultCalendarNotFoundException()
35
37
  }
@@ -40,21 +42,24 @@ public final class CalendarNextModule: Module {
40
42
  let calendars: [EKCalendar]
41
43
  switch type {
42
44
  case nil:
43
- try calendarAccessGuard?.checkCalendarPermissions()
44
- try calendarAccessGuard?.checkRemindersPermissions()
45
+ // With write-only permissions granted, `eventStore.calendars` returns a single virtual calendar:
46
+ // https://developer.apple.com/documentation/EventKit/accessing-the-event-store#Use-EventKit-with-write-only-calendar-access
47
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
48
+ try calendarAccessGuard?.ensureRemindersAccess()
45
49
  calendars = eventStore.calendars(for: .event) + eventStore.calendars(for: .reminder)
46
50
  case .event:
47
- try calendarAccessGuard?.checkCalendarPermissions()
51
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
48
52
  calendars = eventStore.calendars(for: .event)
49
53
  case .reminder:
50
- try calendarAccessGuard?.checkRemindersPermissions()
54
+ try calendarAccessGuard?.ensureRemindersAccess()
51
55
  calendars = eventStore.calendars(for: .reminder)
52
56
  }
53
57
  return calendars.map { ExpoCalendar(calendar: $0) }
54
58
  }
55
59
 
56
60
  AsyncFunction("getCalendarById") { (calendarId: String) -> ExpoCalendar in
57
- try calendarAccessGuard?.checkCalendarPermissions()
61
+ // With write-only access, this can resolve the virtual calendar's identifier.
62
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
58
63
  guard let calendar = eventStore.calendar(withIdentifier: calendarId) else {
59
64
  throw CalendarIdNotFoundException(calendarId)
60
65
  }
@@ -62,6 +67,7 @@ public final class CalendarNextModule: Module {
62
67
  }
63
68
 
64
69
  AsyncFunction("presentPicker") { (promise: Promise) in
70
+ // No access guard here on purpose. The system picker itself shows a message when permissions aren't granted.
65
71
  guard let currentVc = appContext?.utilities?.currentViewController() else {
66
72
  throw MissingCurrentViewControllerException()
67
73
  }
@@ -88,10 +94,10 @@ public final class CalendarNextModule: Module {
88
94
  let calendar: EKCalendar
89
95
  switch calendarRecord.entityType {
90
96
  case .event:
91
- try calendarAccessGuard?.checkCalendarPermissions()
97
+ try calendarAccessGuard?.ensureCalendarFullAccess()
92
98
  calendar = EKCalendar(for: .event, eventStore: eventStore)
93
99
  case .reminder:
94
- try calendarAccessGuard?.checkRemindersPermissions()
100
+ try calendarAccessGuard?.ensureRemindersAccess()
95
101
  calendar = EKCalendar(for: .reminder, eventStore: eventStore)
96
102
  case .none:
97
103
  throw EntityNotSupportedException(calendarRecord.entityType?.rawValue)
@@ -122,7 +128,9 @@ public final class CalendarNextModule: Module {
122
128
  startDateStr: Either<String, Double>,
123
129
  endDateStr: Either<String, Double>,
124
130
  promise: Promise) throws in
125
- try calendarAccessGuard?.checkCalendarPermissions()
131
+ // The default EventKit behavior is to return an empty array if write-only permissions are granted.
132
+ // Ensuring full access makes the function throw instead of returning an ambiguous empty array.
133
+ try calendarAccessGuard?.ensureCalendarFullAccess()
126
134
 
127
135
  let startDate = try requireDate(from: startDateStr)
128
136
  let endDate = try requireDate(from: endDateStr)
@@ -147,7 +155,7 @@ public final class CalendarNextModule: Module {
147
155
 
148
156
  AsyncFunction("getEventById") {
149
157
  (eventId: String) -> ExpoCalendarEvent in
150
- try calendarAccessGuard?.checkCalendarPermissions()
158
+ try calendarAccessGuard?.ensureCalendarFullAccess()
151
159
  guard let event = eventStore.event(withIdentifier: eventId) else {
152
160
  throw EventNotFoundException(eventId)
153
161
  }
@@ -156,7 +164,7 @@ public final class CalendarNextModule: Module {
156
164
 
157
165
  AsyncFunction("getReminderById") {
158
166
  (reminderId: String) -> ExpoCalendarReminder in
159
- try calendarAccessGuard?.checkRemindersPermissions()
167
+ try calendarAccessGuard?.ensureRemindersAccess()
160
168
  guard let reminder = eventStore.calendarItem(withIdentifier: reminderId) as? EKReminder else {
161
169
  throw ReminderNotFoundException(reminderId)
162
170
  }
@@ -260,7 +268,9 @@ public final class CalendarNextModule: Module {
260
268
  startDateStr: Either<String, Double>,
261
269
  endDateStr: Either<String, Double>,
262
270
  promise: Promise) throws in
263
- try calendarAccessGuard?.checkCalendarPermissions()
271
+ // The default EventKit behavior is to return an empty array if write-only permissions are granted.
272
+ // Ensuring full access makes the function throw instead of returning an ambiguous empty array.
273
+ try calendarAccessGuard?.ensureCalendarFullAccess()
264
274
  let startDate = try requireDate(from: startDateStr)
265
275
  let endDate = try requireDate(from: endDateStr)
266
276
  promise.resolve(try expoCalendar.listEvents(startDate: startDate, endDate: endDate))
@@ -272,7 +282,7 @@ public final class CalendarNextModule: Module {
272
282
  endDateStr: String?,
273
283
  status: String?,
274
284
  promise: Promise) throws in
275
- try calendarAccessGuard?.checkRemindersPermissions()
285
+ try calendarAccessGuard?.ensureRemindersAccess()
276
286
 
277
287
  var startDate: Date?
278
288
  var endDate: Date?
@@ -290,7 +300,7 @@ public final class CalendarNextModule: Module {
290
300
 
291
301
  // swiftlint:enable closure_parameter_position
292
302
  AsyncFunction("createEvent") { (expoCalendar: ExpoCalendar, eventRecord: EventNext, options: RecurringEventOptions?) -> ExpoCalendarEvent in
293
- try calendarAccessGuard?.checkCalendarWritePermissions()
303
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
294
304
 
295
305
  guard let calendar = expoCalendar.calendar else {
296
306
  throw CalendarNoLongerExistsException()
@@ -312,7 +322,7 @@ public final class CalendarNextModule: Module {
312
322
  }
313
323
 
314
324
  AsyncFunction("createReminder") { (expoCalendar: ExpoCalendar, reminderRecord: Reminder, _: RecurringEventOptions?) -> ExpoCalendarReminder in
315
- try calendarAccessGuard?.checkRemindersPermissions()
325
+ try calendarAccessGuard?.ensureRemindersAccess()
316
326
 
317
327
  guard let calendarInstance = expoCalendar.calendar else {
318
328
  throw CalendarNoLongerExistsException()
@@ -334,7 +344,7 @@ public final class CalendarNextModule: Module {
334
344
  }
335
345
 
336
346
  AsyncFunction("addEventWithForm") { (expoCalendar: ExpoCalendar, options: AddEventWithFormOptions?, promise: Promise) in
337
- try calendarAccessGuard?.checkCalendarWritePermissions()
347
+ try calendarAccessGuard?.ensureCalendarWriteOnlyOrFullAccess()
338
348
 
339
349
  let event = EKEvent(eventStore: eventStore)
340
350
  event.calendar = expoCalendar.calendar
@@ -364,12 +374,12 @@ public final class CalendarNextModule: Module {
364
374
  }.runOnQueue(.main)
365
375
 
366
376
  AsyncFunction("update") { (expoCalendar: ExpoCalendar, calendarRecord: CalendarRecordNext) throws in
367
- try calendarAccessGuard?.checkCalendarPermissions()
377
+ try calendarAccessGuard?.ensureCalendarFullAccess()
368
378
  try expoCalendar.update(calendarRecord: calendarRecord)
369
379
  }
370
380
 
371
381
  AsyncFunction("delete") { (expoCalendar: ExpoCalendar) in
372
- try calendarAccessGuard?.checkCalendarPermissions()
382
+ try calendarAccessGuard?.ensureCalendarFullAccess()
373
383
  try expoCalendar.delete()
374
384
  }
375
385
  }
@@ -468,7 +478,7 @@ public final class CalendarNextModule: Module {
468
478
  }
469
479
 
470
480
  AsyncFunction("openInCalendar") { (expoEvent: ExpoCalendarEvent, options: OpenInCalendarOptions?, promise: Promise) in
471
- try calendarAccessGuard?.checkCalendarPermissions()
481
+ try calendarAccessGuard?.ensureCalendarFullAccess()
472
482
 
473
483
  let startDate = parse(date: options?.instanceStartDate)
474
484
  guard let calendarEvent = expoEvent.getOccurrence(startDate: startDate) else {
@@ -503,7 +513,7 @@ public final class CalendarNextModule: Module {
503
513
  }.runOnQueue(.main)
504
514
 
505
515
  AsyncFunction("editInCalendar") { (expoEvent: ExpoCalendarEvent, _: OpenInCalendarOptions?, promise: Promise) in
506
- try calendarAccessGuard?.checkCalendarPermissions()
516
+ try calendarAccessGuard?.ensureCalendarFullAccess()
507
517
 
508
518
  guard let event = expoEvent.event else {
509
519
  throw ItemNoLongerExistsException()
@@ -513,7 +523,7 @@ public final class CalendarNextModule: Module {
513
523
  }.runOnQueue(.main)
514
524
 
515
525
  Function("getOccurrenceSync") { (expoEvent: ExpoCalendarEvent, options: RecurringEventOptions?) throws in
516
- try calendarAccessGuard?.checkCalendarPermissions()
526
+ try calendarAccessGuard?.ensureCalendarFullAccess()
517
527
  guard let ekEvent = try expoEvent.getOccurrence(options: options) else {
518
528
  throw EventNotFoundException(options?.instanceStartDate ?? "")
519
529
  }
@@ -522,17 +532,17 @@ public final class CalendarNextModule: Module {
522
532
  }
523
533
 
524
534
  AsyncFunction("getAttendees") { (expoEvent: ExpoCalendarEvent) throws in
525
- try calendarAccessGuard?.checkCalendarPermissions()
535
+ try calendarAccessGuard?.ensureCalendarFullAccess()
526
536
  return try expoEvent.getAttendees()
527
537
  }
528
538
 
529
539
  AsyncFunction("update") { (expoEvent: ExpoCalendarEvent, eventRecord: EventNext, nullableFields: [String]?) throws in
530
- try calendarAccessGuard?.checkCalendarPermissions()
540
+ try calendarAccessGuard?.ensureCalendarFullAccess()
531
541
  try expoEvent.update(eventRecord: eventRecord, nullableFields: nullableFields)
532
542
  }
533
543
 
534
544
  AsyncFunction("delete") { (expoEvent: ExpoCalendarEvent) in
535
- try calendarAccessGuard?.checkCalendarPermissions()
545
+ try calendarAccessGuard?.ensureCalendarFullAccess()
536
546
  try expoEvent.delete()
537
547
  }
538
548
  }
@@ -633,12 +643,12 @@ public final class CalendarNextModule: Module {
633
643
  }
634
644
 
635
645
  AsyncFunction("update") { (expoReminder: ExpoCalendarReminder, reminderRecord: Reminder, nullableFields: [String]?) in
636
- try calendarAccessGuard?.checkRemindersPermissions()
646
+ try calendarAccessGuard?.ensureRemindersAccess()
637
647
  try expoReminder.update(reminderRecord: reminderRecord, nullableFields: nullableFields)
638
648
  }
639
649
 
640
650
  AsyncFunction("delete") { (expoReminder: ExpoCalendarReminder) in
641
- try calendarAccessGuard?.checkRemindersPermissions()
651
+ try calendarAccessGuard?.ensureRemindersAccess()
642
652
  try expoReminder.delete()
643
653
  }
644
654
  }
@@ -0,0 +1 @@
1
+ ac1c2995f7ced90ee877c8b1cb5702e5b997a081d9f832c6dab69a74dbf8c79d
@@ -0,0 +1 @@
1
+ 29fe517a1b67b720ee0e5c9ee188d092cf754df40680b04a24a7c1093e90e39a196522520c7128aecce699b0a0e2ff65bf89305ad7a432a30f70111a0369e9d0
@@ -0,0 +1 @@
1
+ a340ea80524bd3cac1fd88f9b3164f5949a6460348ee4abe9057412bab47cc75
@@ -0,0 +1 @@
1
+ 30a0529c41b19779de4a790b9242684f896e229bdf2b9de89464b4e428c005e797c76c797a136dc05f5244a4cb6dd4dee6b26691ecae8290dad423215623342b
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.calendar",
6
- "version": "58.0.1",
6
+ "version": "58.0.3",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.calendar-58.0.1.aar",
28
- "url": "expo.modules.calendar-58.0.1.aar",
29
- "size": 770663,
30
- "sha512": "c1651faac8a68132f29a267528cf42cef5874c6f0fc0f6bae35161e55d22b6d37b1d135f53d5b30aec29aae67d89f0cd7dd432546139cf44db932ff538f59225",
31
- "sha256": "6d78f4530b433586ca38facd7fc1b601a6ab00e441dbeba8a2c60616c7a8068f",
32
- "sha1": "cd1717dc2d95c38c1aa1a2cf1a553638081ddcb6",
33
- "md5": "e5bbf92b3d0ad4a93fc9ac66c1b83ce2"
27
+ "name": "expo.modules.calendar-58.0.3.aar",
28
+ "url": "expo.modules.calendar-58.0.3.aar",
29
+ "size": 770684,
30
+ "sha512": "30a0529c41b19779de4a790b9242684f896e229bdf2b9de89464b4e428c005e797c76c797a136dc05f5244a4cb6dd4dee6b26691ecae8290dad423215623342b",
31
+ "sha256": "a340ea80524bd3cac1fd88f9b3164f5949a6460348ee4abe9057412bab47cc75",
32
+ "sha1": "95a86cf2c24d554788c8da9f5bc85b6af7ddcb26",
33
+ "md5": "896023b2eaac6328c9fcaa865a27cfd2"
34
34
  }
35
35
  ]
36
36
  },
@@ -75,19 +75,19 @@
75
75
  "group": "io.github.expo.pika",
76
76
  "module": "pika-api",
77
77
  "version": {
78
- "requires": "1.0.0"
78
+ "requires": "1.1.0"
79
79
  }
80
80
  }
81
81
  ],
82
82
  "files": [
83
83
  {
84
- "name": "expo.modules.calendar-58.0.1.aar",
85
- "url": "expo.modules.calendar-58.0.1.aar",
86
- "size": 770663,
87
- "sha512": "c1651faac8a68132f29a267528cf42cef5874c6f0fc0f6bae35161e55d22b6d37b1d135f53d5b30aec29aae67d89f0cd7dd432546139cf44db932ff538f59225",
88
- "sha256": "6d78f4530b433586ca38facd7fc1b601a6ab00e441dbeba8a2c60616c7a8068f",
89
- "sha1": "cd1717dc2d95c38c1aa1a2cf1a553638081ddcb6",
90
- "md5": "e5bbf92b3d0ad4a93fc9ac66c1b83ce2"
84
+ "name": "expo.modules.calendar-58.0.3.aar",
85
+ "url": "expo.modules.calendar-58.0.3.aar",
86
+ "size": 770684,
87
+ "sha512": "30a0529c41b19779de4a790b9242684f896e229bdf2b9de89464b4e428c005e797c76c797a136dc05f5244a4cb6dd4dee6b26691ecae8290dad423215623342b",
88
+ "sha256": "a340ea80524bd3cac1fd88f9b3164f5949a6460348ee4abe9057412bab47cc75",
89
+ "sha1": "95a86cf2c24d554788c8da9f5bc85b6af7ddcb26",
90
+ "md5": "896023b2eaac6328c9fcaa865a27cfd2"
91
91
  }
92
92
  ]
93
93
  },
@@ -101,13 +101,13 @@
101
101
  },
102
102
  "files": [
103
103
  {
104
- "name": "expo.modules.calendar-58.0.1-sources.jar",
105
- "url": "expo.modules.calendar-58.0.1-sources.jar",
106
- "size": 88237,
107
- "sha512": "d5da071daf001903f4d12fd3ea8cb2aeb5b230946f8ce8213a1606ad078762f866aef223d242002885ab0ef73446cd3fca96d4bf7f056feccce2d58f1026d24c",
108
- "sha256": "ca1df57e53b98caacce39b4d2c1d01d45d6b8bdc3cead2de18190a3106984496",
109
- "sha1": "dcad3499d89b7cc6e5f26f2302aa4c8b7414f3ab",
110
- "md5": "2488340cb7370866d300a5f1567901a4"
104
+ "name": "expo.modules.calendar-58.0.3-sources.jar",
105
+ "url": "expo.modules.calendar-58.0.3-sources.jar",
106
+ "size": 88339,
107
+ "sha512": "29fe517a1b67b720ee0e5c9ee188d092cf754df40680b04a24a7c1093e90e39a196522520c7128aecce699b0a0e2ff65bf89305ad7a432a30f70111a0369e9d0",
108
+ "sha256": "ac1c2995f7ced90ee877c8b1cb5702e5b997a081d9f832c6dab69a74dbf8c79d",
109
+ "sha1": "99d6ffa1670b2ceb63f92201a34d6c3ba2eac634",
110
+ "md5": "62a58753ecfdda006b957ab52ebba05a"
111
111
  }
112
112
  ]
113
113
  }
@@ -0,0 +1 @@
1
+ b0bd0052bbcc135a2893d44c31ce5869c2795a6008ddd883af3c996be76fc733
@@ -0,0 +1 @@
1
+ 2e29f1118279c71903ea4f788ed3912c7d1d952c3def67247a51976d4650527917b8877332868de065cff607eeb7f009ae30cad790ac00f8c93a7690f773ca54
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.calendar</artifactId>
12
- <version>58.0.1</version>
12
+ <version>58.0.3</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.calendar</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -64,7 +64,7 @@
64
64
  <dependency>
65
65
  <groupId>io.github.expo.pika</groupId>
66
66
  <artifactId>pika-api</artifactId>
67
- <version>1.0.0</version>
67
+ <version>1.1.0</version>
68
68
  <scope>runtime</scope>
69
69
  </dependency>
70
70
  </dependencies>
@@ -0,0 +1 @@
1
+ f6fdd3ecc8ff5422c16b38d5d3451ea1f6bba352dec5630cd5d01656019a710c
@@ -0,0 +1 @@
1
+ 2f24313b34c20f892610e3d62a3aac7cbc4d9d96543037245053ce731437f0de993ead221b95c19548ff206ea6c14115353ae12493221d7d5d6fe2bd0d889ef8
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.calendar</artifactId>
5
5
  <versioning>
6
- <latest>58.0.1</latest>
7
- <release>58.0.1</release>
6
+ <latest>58.0.3</latest>
7
+ <release>58.0.3</release>
8
8
  <versions>
9
- <version>58.0.1</version>
9
+ <version>58.0.3</version>
10
10
  </versions>
11
- <lastUpdated>20260915202024</lastUpdated>
11
+ <lastUpdated>20260925081302</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 13590023bb693f1fec118acc69f22499
1
+ fec161cf16014ee993a8c29a8a02dc3a
@@ -1 +1 @@
1
- d247683fe7079629783fed1f722792ed56aa8c36
1
+ 53e1e5f7306ef8951e4d95f655f3f5e6bbf0220a
@@ -1 +1 @@
1
- 04b9d79b38fcc4a0e735ad111bd8feb4d481e194ee8003f00f8b35af8c075ece
1
+ 979c312e42be3a737129e359f0e919854bf7d0034e840fedd1ebac7d88ec5cdb
@@ -1 +1 @@
1
- 8727536a6ea48cbcd82e3715a17293c622f66734ec9cee04e0909a92f896bb349c63b14ae5064ccc81237045cfbc25c9196c20bff2d904c5c5a580a7501e08ce
1
+ 18f34642f8ba0ae83931a72679ede37b7867276b255f7f064964a594b414a4ba600c346fcd94c705d0078cb8c2675e025b3b43d67bdb0a4e637b11546a2ef0e7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-calendar",
3
- "version": "58.0.1",
3
+ "version": "58.0.3",
4
4
  "description": "Provides an API for interacting with the device's system calendars, events, reminders, and associated records.",
5
5
  "keywords": [
6
6
  "calendar",
@@ -55,7 +55,7 @@
55
55
  "devDependencies": {
56
56
  "@types/jest": "^29.2.1",
57
57
  "@types/node": "^22.14.0",
58
- "expo": "58.0.0-preview.2",
58
+ "expo": "58.0.0-preview.7",
59
59
  "expo-module-scripts": "56.0.3"
60
60
  },
61
61
  "peerDependencies": {
@@ -65,7 +65,7 @@
65
65
  "jest": {
66
66
  "preset": "expo-module-scripts"
67
67
  },
68
- "gitHead": "313e67f5c9dfb16f9deca74a271cd1d4f33a6f82",
68
+ "gitHead": "ad41d067bd3df6dd12f1788acc6b54a68e7a650d",
69
69
  "scripts": {
70
70
  "build": "pnpm run build:lib && pnpm run build:plugin",
71
71
  "build:lib": "expo-build src",
package/src/Calendar.ts CHANGED
@@ -210,6 +210,10 @@ export class ExpoCalendar extends InternalExpoCalendar.ExpoCalendar {
210
210
 
211
211
  /**
212
212
  * Gets an instance of the default calendar object.
213
+ *
214
+ * > **iOS 17+:** With write-only calendar access, this returns EventKit's virtual calendar,
215
+ * > which can be used to create events but does not expose existing calendar data.
216
+ *
213
217
  * > **Android:** This function is not available on Android. Android does not expose a single
214
218
  * > system-managed default calendar. Use `getCalendars()` and choose an appropriate writable
215
219
  * > calendar for your app; `isPrimary` can help identify per-account primary calendars.
@@ -226,12 +230,16 @@ export function getDefaultCalendarSync(): ExpoCalendar {
226
230
  }
227
231
 
228
232
  /**
229
- * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the different calendars stored on the device.
230
- * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to
231
- * a specific [entity type](#entitytypes). Possible values are `Calendar.EntityTypes.EVENT` (for calendars shown in
232
- * the Calendar app) and `Calendar.EntityTypes.REMINDER` (for the Reminders app).
233
- * > **Note:** If not defined, you will need both permissions: **CALENDAR** and **REMINDERS**.
234
- * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type (if provided).
233
+ * Gets an array of [`ExpoCalendar`](#expocalendar) shared objects with details about the
234
+ * calendars available to the app.
235
+ *
236
+ * > **iOS 17+:** With write-only calendar access, requesting `EntityTypes.EVENT` returns a
237
+ * > single virtual calendar, which can be used to create events but does not expose the user's
238
+ * > real calendars.
239
+ *
240
+ * @param entityType __iOS Only.__ Not required, but if defined, filters the returned calendars to a specific [entity type](#entitytypes).
241
+ * > **Note:** If not defined, both calendar (write-only is enough) and reminders permissions are required.
242
+ * @return An array of [`ExpoCalendar`](#expocalendar) shared objects matching the provided entity type, if provided.
235
243
  */
236
244
  export async function getCalendars(entityType?: EntityTypes): Promise<ExpoCalendar[]> {
237
245
  if (!InternalExpoCalendar.getCalendars) {
@@ -229,6 +229,10 @@ export declare class ExpoCalendar {
229
229
 
230
230
  /**
231
231
  * Gets a calendar by its ID. Throws an error if the calendar with the given ID does not exist.
232
+ *
233
+ * > **iOS 17+:** With write-only calendar access, only the virtual calendar's ID can be
234
+ * > resolved - real calendars require full calendar access.
235
+ *
232
236
  * @param calendarId The ID of the calendar to get.
233
237
  * @returns An [`ExpoCalendar`](#expocalendar) object representing the calendar.
234
238
  */
package/.npmignore DELETED
@@ -1,24 +0,0 @@
1
- # @generated by expo-module-scripts
2
-
3
- # Exclude all top-level hidden directories by convention
4
- /.*/
5
-
6
- # Exclude tarballs generated by `npm pack`
7
- /*.tgz
8
-
9
- __mocks__
10
- __tests__
11
- __rsc_tests__
12
-
13
- /e2e
14
- /e2e-cli
15
- /babel.config.js
16
- /oxlint.config.mjs
17
- /android/src/androidTest/
18
- /android/src/test/
19
- /ios/Tests
20
-
21
- # Exclude native build output (pnpm pack ignores nested .gitignore files)
22
- .cxx/
23
- .gradle/
24
- /android/build/
package/.tsbuildinfo DELETED
@@ -1 +0,0 @@
1
- {"version":"6.0.3"}
@@ -1,261 +0,0 @@
1
-
2
- # Created by https://www.gitignore.io/api/java,maven,gradle,android,intellij,androidstudio
3
-
4
- ### Android ###
5
- # Built application files
6
- *.apk
7
- *.ap_
8
-
9
- # Files for the ART/Dalvik VM
10
- *.dex
11
-
12
- # Java class files
13
- *.class
14
-
15
- # Generated files
16
- bin/
17
- gen/
18
- out/
19
-
20
- # Gradle files
21
- .gradle/
22
- build/
23
-
24
- # Local configuration file (sdk path, etc)
25
- local.properties
26
-
27
- # Proguard folder generated by Eclipse
28
- proguard/
29
-
30
- # Log Files
31
- *.log
32
-
33
- # Android Studio Navigation editor temp files
34
- .navigation/
35
-
36
- # Android Studio captures folder
37
- captures/
38
-
39
- # Intellij
40
- *.iml
41
- .idea/workspace.xml
42
- .idea/tasks.xml
43
- .idea/gradle.xml
44
- .idea/dictionaries
45
- .idea/libraries
46
-
47
- # External native build folder generated in Android Studio 2.2 and later
48
- .externalNativeBuild
49
-
50
- # Freeline
51
- freeline.py
52
- freeline/
53
- freeline_project_description.json
54
-
55
- ### Android Patch ###
56
- gen-external-apklibs
57
-
58
- ### AndroidStudio ###
59
- # Covers files to be ignored for android development using Android Studio.
60
-
61
- # Built application files
62
-
63
- # Files for the ART/Dalvik VM
64
-
65
- # Java class files
66
-
67
- # Generated files
68
-
69
- # Gradle files
70
- .gradle
71
-
72
- # Signing files
73
- .signing/
74
-
75
- # Local configuration file (sdk path, etc)
76
-
77
- # Proguard folder generated by Eclipse
78
-
79
- # Log Files
80
-
81
- # Android Studio
82
- /*/build/
83
- /*/local.properties
84
- /*/out
85
- /*/*/build
86
- /*/*/production
87
- *.ipr
88
- *~
89
- *.swp
90
-
91
- # Android Patch
92
-
93
- # External native build folder generated in Android Studio 2.2 and later
94
-
95
- # NDK
96
- obj/
97
-
98
- # IntelliJ IDEA
99
- *.iws
100
- /out/
101
-
102
- # User-specific configurations
103
- .idea/libraries/
104
- .idea/.name
105
- .idea/compiler.xml
106
- .idea/copyright/profiles_settings.xml
107
- .idea/encodings.xml
108
- .idea/misc.xml
109
- .idea/modules.xml
110
- .idea/scopes/scope_settings.xml
111
- .idea/vcs.xml
112
- .idea/jsLibraryMappings.xml
113
- .idea/datasources.xml
114
- .idea/dataSources.ids
115
- .idea/sqlDataSources.xml
116
- .idea/dynamic.xml
117
- .idea/uiDesigner.xml
118
-
119
- # OS-specific files
120
- .DS_Store
121
- .DS_Store?
122
- ._*
123
- .Spotlight-V100
124
- .Trashes
125
- ehthumbs.db
126
- Thumbs.db
127
-
128
- # Legacy Eclipse project files
129
- .classpath
130
- .project
131
- .cproject
132
- .settings/
133
-
134
- # Mobile Tools for Java (J2ME)
135
- .mtj.tmp/
136
-
137
- # Package Files #
138
- *.war
139
- *.ear
140
-
141
- # virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
142
- hs_err_pid*
143
-
144
- ## Plugin-specific files:
145
-
146
- # mpeltonen/sbt-idea plugin
147
- .idea_modules/
148
-
149
- # JIRA plugin
150
- atlassian-ide-plugin.xml
151
-
152
- # Mongo Explorer plugin
153
- .idea/mongoSettings.xml
154
-
155
- ### AndroidStudio Patch ###
156
-
157
- !/gradle/wrapper/gradle-wrapper.jar
158
-
159
- ### Intellij ###
160
- # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
161
- # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
162
-
163
- # User-specific stuff:
164
- .idea/**/workspace.xml
165
- .idea/**/tasks.xml
166
-
167
- # Sensitive or high-churn files:
168
- .idea/**/dataSources/
169
- .idea/**/dataSources.ids
170
- .idea/**/dataSources.xml
171
- .idea/**/dataSources.local.xml
172
- .idea/**/sqlDataSources.xml
173
- .idea/**/dynamic.xml
174
- .idea/**/uiDesigner.xml
175
-
176
- # Gradle:
177
- .idea/**/gradle.xml
178
- .idea/**/libraries
179
-
180
- # CMake
181
- cmake-build-debug/
182
-
183
- # Mongo Explorer plugin:
184
- .idea/**/mongoSettings.xml
185
-
186
- ## File-based project format:
187
-
188
- ## Plugin-specific files:
189
-
190
- # IntelliJ
191
-
192
- # mpeltonen/sbt-idea plugin
193
-
194
- # JIRA plugin
195
-
196
- # Cursive Clojure plugin
197
- .idea/replstate.xml
198
-
199
- # Ruby plugin and RubyMine
200
- /.rakeTasks
201
-
202
- ### Intellij Patch ###
203
- # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
204
-
205
- # *.iml
206
- # modules.xml
207
- # .idea/misc.xml
208
- # *.ipr
209
-
210
- # Sonarlint plugin
211
- .idea/sonarlint
212
-
213
- ### Java ###
214
- # Compiled class file
215
-
216
- # Log file
217
-
218
- # BlueJ files
219
- *.ctxt
220
-
221
- # Mobile Tools for Java (J2ME)
222
-
223
- # Package Files #
224
- *.jar
225
- *.zip
226
- *.tar.gz
227
- *.rar
228
-
229
- # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
230
-
231
- ### Maven ###
232
- target/
233
- pom.xml.tag
234
- pom.xml.releaseBackup
235
- pom.xml.versionsBackup
236
- pom.xml.next
237
- release.properties
238
- dependency-reduced-pom.xml
239
- buildNumber.properties
240
- .mvn/timing.properties
241
-
242
- # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
243
- !/.mvn/wrapper/maven-wrapper.jar
244
-
245
- ### Gradle ###
246
- **/build/
247
-
248
- # Ignore Gradle GUI config
249
- gradle-app.setting
250
-
251
- # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
252
- !gradle-wrapper.jar
253
-
254
- # Cache of project
255
- .gradletasknamecache
256
-
257
- # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
258
- # gradle/wrapper/gradle-wrapper.properties
259
-
260
-
261
- # End of https://www.gitignore.io/api/java,maven,gradle,android,intellij,androidstudio
@@ -1 +0,0 @@
1
- ca1df57e53b98caacce39b4d2c1d01d45d6b8bdc3cead2de18190a3106984496
@@ -1 +0,0 @@
1
- d5da071daf001903f4d12fd3ea8cb2aeb5b230946f8ce8213a1606ad078762f866aef223d242002885ab0ef73446cd3fca96d4bf7f056feccce2d58f1026d24c
@@ -1 +0,0 @@
1
- 6d78f4530b433586ca38facd7fc1b601a6ab00e441dbeba8a2c60616c7a8068f
@@ -1 +0,0 @@
1
- c1651faac8a68132f29a267528cf42cef5874c6f0fc0f6bae35161e55d22b6d37b1d135f53d5b30aec29aae67d89f0cd7dd432546139cf44db932ff538f59225
@@ -1 +0,0 @@
1
- 3b4d826740f0b42f8cf4a66e09ebec3f603bae690b44b6fcbbd358dda468ea4a
@@ -1 +0,0 @@
1
- eee23ee1fb402aa3efd36797f3bad080a14f74ce450a55eda624760ed190c0805c7f55428d1888cd124afa1d8a7cf227cb4ccc4b67f9a53bce2bc4288417ff85
@@ -1 +0,0 @@
1
- 2995a98b614c21d9804c717578cdf27b3dd66a430ecd942bd4f6af7212430362
@@ -1 +0,0 @@
1
- d39ec9e88e6de19de351d23a1afcfeda027579db81a3774f4b9f2a2eb489d7faf968be77cb6fa974106080cf7c292a10d7cc044e904089082ba856208657c47d
@@ -1 +0,0 @@
1
- {"version":"6.0.3"}
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "expo-module-scripts/tsconfig.plugin",
3
- "compilerOptions": {
4
- "composite": true,
5
- "rootDir": "./src",
6
- "noEmit": true,
7
- "types": ["node", "jest"]
8
- },
9
- "include": ["./src"]
10
- }
@@ -1 +0,0 @@
1
- {"root":["./src/withcalendar.ts"],"version":"5.9.2"}
package/tsconfig.all.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [
4
- {
5
- "path": "./tsconfig.json"
6
- },
7
- {
8
- "path": "./plugin"
9
- }
10
- ]
11
- }
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- // @generated by expo-module-scripts
2
- {
3
- "extends": "expo-module-scripts/tsconfig.base",
4
- "compilerOptions": {
5
- "composite": true,
6
- "rootDir": "./src",
7
- "noEmit": true
8
- },
9
- "include": ["./src"]
10
- }