@zulfio/react-native-alarm-kit 1.0.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 (62) hide show
  1. package/Alarmkit.podspec +35 -0
  2. package/LICENSE +20 -0
  3. package/README.md +163 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +129 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +2 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/alarmkit/AlarmkitPackage.kt +22 -0
  10. package/android/src/main/java/com/margelo/nitro/alarmkit/Alarmkit.kt +7 -0
  11. package/ios/AlarmKit.swift +296 -0
  12. package/lib/module/AlarmKit.nitro.js +4 -0
  13. package/lib/module/AlarmKit.nitro.js.map +1 -0
  14. package/lib/module/index.js +40 -0
  15. package/lib/module/index.js.map +1 -0
  16. package/lib/module/package.json +1 -0
  17. package/lib/typescript/package.json +1 -0
  18. package/lib/typescript/src/AlarmKit.nitro.d.ts +24 -0
  19. package/lib/typescript/src/AlarmKit.nitro.d.ts.map +1 -0
  20. package/lib/typescript/src/index.d.ts +11 -0
  21. package/lib/typescript/src/index.d.ts.map +1 -0
  22. package/nitro.json +17 -0
  23. package/nitrogen/generated/android/alarmkit+autolinking.cmake +78 -0
  24. package/nitrogen/generated/android/alarmkit+autolinking.gradle +27 -0
  25. package/nitrogen/generated/android/alarmkitOnLoad.cpp +46 -0
  26. package/nitrogen/generated/android/alarmkitOnLoad.hpp +25 -0
  27. package/nitrogen/generated/android/c++/JAlarmCountdown.hpp +57 -0
  28. package/nitrogen/generated/android/c++/JAlarmWeekday.hpp +74 -0
  29. package/nitrogen/generated/android/c++/JCustomizableAlarmButton.hpp +61 -0
  30. package/nitrogen/generated/android/c++/JHybridAlarmKitSpec.cpp +180 -0
  31. package/nitrogen/generated/android/c++/JHybridAlarmKitSpec.hpp +68 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/AlarmCountdown.kt +27 -0
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/AlarmWeekday.kt +30 -0
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/CustomizableAlarmButton.kt +28 -0
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/HybridAlarmKitSpec.kt +76 -0
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/alarmkitOnLoad.kt +35 -0
  37. package/nitrogen/generated/ios/AlarmKit+autolinking.rb +60 -0
  38. package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Bridge.cpp +72 -0
  39. package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Bridge.hpp +309 -0
  40. package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Umbrella.hpp +56 -0
  41. package/nitrogen/generated/ios/AlarmKitAutolinking.mm +33 -0
  42. package/nitrogen/generated/ios/AlarmKitAutolinking.swift +25 -0
  43. package/nitrogen/generated/ios/c++/HybridAlarmKitSpecSwift.cpp +11 -0
  44. package/nitrogen/generated/ios/c++/HybridAlarmKitSpecSwift.hpp +130 -0
  45. package/nitrogen/generated/ios/swift/AlarmCountdown.swift +70 -0
  46. package/nitrogen/generated/ios/swift/AlarmWeekday.swift +60 -0
  47. package/nitrogen/generated/ios/swift/CustomizableAlarmButton.swift +57 -0
  48. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  49. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  50. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +52 -0
  51. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  52. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
  53. package/nitrogen/generated/ios/swift/HybridAlarmKitSpec.swift +54 -0
  54. package/nitrogen/generated/ios/swift/HybridAlarmKitSpec_cxx.swift +271 -0
  55. package/nitrogen/generated/shared/c++/AlarmCountdown.hpp +73 -0
  56. package/nitrogen/generated/shared/c++/AlarmWeekday.hpp +98 -0
  57. package/nitrogen/generated/shared/c++/CustomizableAlarmButton.hpp +77 -0
  58. package/nitrogen/generated/shared/c++/HybridAlarmKitSpec.cpp +27 -0
  59. package/nitrogen/generated/shared/c++/HybridAlarmKitSpec.hpp +79 -0
  60. package/package.json +168 -0
  61. package/src/AlarmKit.nitro.ts +48 -0
  62. package/src/index.tsx +96 -0
@@ -0,0 +1,296 @@
1
+ import AlarmKit
2
+ import SwiftUI
3
+ import NitroModules
4
+
5
+ class AlarmKit: HybridAlarmKitSpec {
6
+ @available(iOS 15.1, *)
7
+ public func requestAlarmPermission() throws -> NitroModules.Promise<Bool> {
8
+ return NitroModules.Promise.async {
9
+ if #available(iOS 26.0, *) {
10
+ let manager = AlarmManager.shared
11
+ let state: AlarmManager.AuthorizationState
12
+ do {
13
+ state = try await manager.requestAuthorization()
14
+ } catch {
15
+ print("Error in requestAuthorization: \(error)")
16
+ throw error
17
+ }
18
+ return state == .authorized
19
+ } else {
20
+ throw NSError(
21
+ domain: "AlarmKitError",
22
+ code: 1,
23
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
24
+ )
25
+ }
26
+ }
27
+ }
28
+
29
+ @available(iOS 15.1, *)
30
+ public func scheduleFixedAlarm(title: String, stopBtn: CustomizableAlarmButton, tintColor: String, secondaryBtn: CustomizableAlarmButton?, timestamp: Double?, countdown: AlarmCountdown?) throws -> NitroModules.Promise<String> {
31
+ return NitroModules.Promise.async {
32
+ if #available(iOS 26.0, *) {
33
+ let manager = AlarmManager.shared
34
+
35
+ let stopButton = AlarmButton(
36
+ text: LocalizedStringResource(stringLiteral: stopBtn.text),
37
+ textColor: Color(StringToColor(hex: stopBtn.textColor)),
38
+ systemImageName: stopBtn.icon
39
+ )
40
+ let alertPresentationAlert: AlarmPresentation.Alert
41
+
42
+ if let btn = secondaryBtn {
43
+ let secondaryButton = AlarmButton(
44
+ text: LocalizedStringResource(stringLiteral: btn.text),
45
+ textColor: Color(StringToColor(hex: btn.textColor)),
46
+ systemImageName: btn.icon
47
+ )
48
+
49
+ alertPresentationAlert = AlarmPresentation.Alert(
50
+ title: LocalizedStringResource(stringLiteral: title),
51
+ stopButton: stopButton,
52
+ secondaryButton: secondaryButton,
53
+ secondaryButtonBehavior: .countdown
54
+ )
55
+ } else {
56
+ alertPresentationAlert = AlarmPresentation.Alert(
57
+ title: LocalizedStringResource(stringLiteral: title),
58
+ stopButton: stopButton
59
+ )
60
+ }
61
+
62
+ let presentation = AlarmPresentation(alert: alertPresentationAlert)
63
+ let countdown = Alarm.CountdownDuration(preAlert: countdown?.preAlert, postAlert: countdown?.postAlert)
64
+
65
+ nonisolated struct EmptyMetadata: AlarmMetadata {}
66
+ let attributes = AlarmAttributes<EmptyMetadata>(presentation: presentation, tintColor: Color(StringToColor(hex: tintColor)))
67
+
68
+ var schedule: Alarm.Schedule? = nil
69
+
70
+ if let timestamp = timestamp {
71
+ let date = Date(timeIntervalSince1970: timestamp)
72
+ schedule = Alarm.Schedule.fixed(date)
73
+ }
74
+
75
+ let configuration = AlarmManager.AlarmConfiguration(
76
+ countdownDuration: countdown,
77
+ schedule: schedule,
78
+ attributes: attributes,
79
+ sound: .default
80
+ )
81
+
82
+ let uuid = UUID()
83
+ do {
84
+ _ = try await manager.schedule(id: uuid, configuration: configuration)
85
+ return uuid.uuidString
86
+ } catch {
87
+ throw error
88
+ }
89
+ } else {
90
+ print("error")
91
+ throw NSError(
92
+ domain: "AlarmKitError",
93
+ code: 1,
94
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
95
+ )
96
+ }
97
+ }
98
+ }
99
+
100
+ @available(iOS 15.1, *)
101
+ public func scheduleRelativeAlarm(
102
+ title: String,
103
+ stopBtn: CustomizableAlarmButton,
104
+ tintColor: String,
105
+ hour: Double,
106
+ minute: Double,
107
+ repeats: [AlarmWeekday],
108
+ secondaryBtn: CustomizableAlarmButton?,
109
+ countdown: AlarmCountdown?
110
+ ) throws -> NitroModules.Promise<String> {
111
+ return NitroModules.Promise.async {
112
+ if #available(iOS 26.0, *) {
113
+ let manager = AlarmManager.shared
114
+
115
+ let stopButton = AlarmButton(
116
+ text: LocalizedStringResource(stringLiteral: stopBtn.text),
117
+ textColor: Color(StringToColor(hex: stopBtn.textColor)),
118
+ systemImageName: stopBtn.icon
119
+ )
120
+
121
+ let alertPresentationAlert: AlarmPresentation.Alert
122
+
123
+ if let btn = secondaryBtn {
124
+ let secondaryButton = AlarmButton(
125
+ text: LocalizedStringResource(stringLiteral: btn.text),
126
+ textColor: Color(StringToColor(hex: btn.textColor)),
127
+ systemImageName: btn.icon
128
+ )
129
+
130
+ alertPresentationAlert = AlarmPresentation.Alert(
131
+ title: LocalizedStringResource(stringLiteral: title),
132
+ stopButton: stopButton,
133
+ secondaryButton: secondaryButton,
134
+ secondaryButtonBehavior: .countdown
135
+ )
136
+ } else {
137
+ alertPresentationAlert = AlarmPresentation.Alert(
138
+ title: LocalizedStringResource(stringLiteral: title),
139
+ stopButton: stopButton
140
+ )
141
+ }
142
+
143
+ let presentation = AlarmPresentation(alert: alertPresentationAlert)
144
+ let countdown = Alarm.CountdownDuration(preAlert: countdown?.preAlert, postAlert: countdown?.postAlert)
145
+
146
+ nonisolated struct EmptyMetadata: AlarmMetadata {}
147
+ let attributes = AlarmAttributes<EmptyMetadata>(presentation: presentation, tintColor: Color(StringToColor(hex: tintColor)))
148
+
149
+ let time = Alarm.Schedule.Relative.Time(hour: Int(hour), minute: Int(minute))
150
+
151
+ let localeWeekdays: [Locale.Weekday] = repeats.map { alarmWeekday in
152
+ switch alarmWeekday {
153
+ case .monday: return .monday
154
+ case .tuesday: return .tuesday
155
+ case .wednesday: return .wednesday
156
+ case .thursday: return .thursday
157
+ case .friday: return .friday
158
+ case .saturday: return .saturday
159
+ case .sunday: return .sunday
160
+ }
161
+ }
162
+ let recurrence = Alarm.Schedule.Relative.Recurrence.weekly(localeWeekdays)
163
+ let relativeSchedule = Alarm.Schedule.Relative(time: time, repeats: recurrence)
164
+ let schedule = Alarm.Schedule.relative(relativeSchedule)
165
+
166
+ let configuration = AlarmManager.AlarmConfiguration(
167
+ countdownDuration: countdown,
168
+ schedule: schedule,
169
+ attributes: attributes,
170
+ sound: .default
171
+ )
172
+
173
+ let uuid = UUID()
174
+ do {
175
+ _ = try await manager.schedule(id: uuid, configuration: configuration)
176
+ return uuid.uuidString
177
+ } catch {
178
+ throw error
179
+ }
180
+ } else {
181
+ throw NSError(
182
+ domain: "AlarmKitError",
183
+ code: 1,
184
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
185
+ )
186
+ }
187
+ }
188
+ }
189
+
190
+ @available(iOS 15.1, *)
191
+ public func cancelAlarm(id: String) throws -> NitroModules.Promise<Bool> {
192
+ return NitroModules.Promise.async {
193
+ if #available(iOS 26.0, *) {
194
+ guard let uuid = UUID(uuidString: id) else {
195
+ throw NSError(
196
+ domain: "AlarmKitError",
197
+ code: 2,
198
+ userInfo: [NSLocalizedDescriptionKey: "Invalid alarm ID: \(id)"]
199
+ )
200
+ }
201
+ do {
202
+ try await AlarmManager.shared.cancel(id: uuid)
203
+ return true
204
+ } catch {
205
+ throw error
206
+ }
207
+ } else {
208
+ throw NSError(
209
+ domain: "AlarmKitError",
210
+ code: 1,
211
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
212
+ )
213
+ }
214
+ }
215
+ }
216
+
217
+ @available(iOS 15.1, *)
218
+ public func cancelAllAlarms() throws -> NitroModules.Promise<Bool> {
219
+ return NitroModules.Promise.async {
220
+ if #available(iOS 26.0, *) {
221
+ let alarms = await AlarmManager.shared.alarms
222
+ for alarm in alarms {
223
+ try await AlarmManager.shared.cancel(id: alarm.id)
224
+ }
225
+ return true
226
+ } else {
227
+ throw NSError(
228
+ domain: "AlarmKitError",
229
+ code: 1,
230
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
231
+ )
232
+ }
233
+ }
234
+ }
235
+
236
+ @available(iOS 15.1, *)
237
+ public func getAlarm(id: String) throws -> NitroModules.Promise<String?> {
238
+ return NitroModules.Promise.async {
239
+ if #available(iOS 26.0, *) {
240
+ guard let uuid = UUID(uuidString: id) else { return nil }
241
+ let alarms = await AlarmManager.shared.alarms
242
+ guard let alarm = alarms.first(where: { $0.id == uuid }) else { return nil }
243
+ switch alarm.state {
244
+ case .scheduled: return "scheduled"
245
+ case .ringing: return "ringing"
246
+ case .snoozed: return "snoozed"
247
+ default: return "unknown"
248
+ }
249
+ } else {
250
+ throw NSError(
251
+ domain: "AlarmKitError",
252
+ code: 1,
253
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
254
+ )
255
+ }
256
+ }
257
+ }
258
+
259
+ @available(iOS 15.1, *)
260
+ public func getAllAlarms() throws -> NitroModules.Promise<[String]> {
261
+ return NitroModules.Promise.async {
262
+ if #available(iOS 26.0, *) {
263
+ let alarms = await AlarmManager.shared.alarms
264
+ return alarms.map { $0.id.uuidString }
265
+ } else {
266
+ throw NSError(
267
+ domain: "AlarmKitError",
268
+ code: 1,
269
+ userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
270
+ )
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ func StringToColor (hex:String) -> UIColor {
277
+ var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
278
+
279
+ if (cString.hasPrefix("#")) {
280
+ cString.remove(at: cString.startIndex)
281
+ }
282
+
283
+ if ((cString.count) != 6) {
284
+ return UIColor.gray
285
+ }
286
+
287
+ var rgbValue:UInt64 = 0
288
+ Scanner(string: cString).scanHexInt64(&rgbValue)
289
+
290
+ return UIColor(
291
+ red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
292
+ green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
293
+ blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
294
+ alpha: CGFloat(1.0)
295
+ )
296
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=AlarmKit.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["AlarmKit.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ import { NitroModules } from 'react-native-nitro-modules';
4
+ const AlarmKitHybridObject = NitroModules.createHybridObject('AlarmKit');
5
+ export async function requestAlarmPermission() {
6
+ return AlarmKitHybridObject.requestAlarmPermission();
7
+ }
8
+ export async function scheduleFixedAlarm(title, stopBtn, tintColor, secondaryBtn, timestamp, countdown) {
9
+ if (!timestamp && !countdown) throw new Error('You need to specify when the alarm will trigger, use countdown for a timer and timestamp for an alarm.');
10
+ return AlarmKitHybridObject.scheduleFixedAlarm(title, stopBtn, tintColor, secondaryBtn, timestamp, countdown);
11
+ }
12
+ export async function scheduleRelativeAlarm(title, stopBtn, tintColor, hour, minute, repeats, secondaryBtn, countdown) {
13
+ return AlarmKitHybridObject.scheduleRelativeAlarm(title, stopBtn, tintColor, hour, minute, repeats, secondaryBtn, countdown);
14
+ }
15
+ export async function cancelAlarm(id) {
16
+ return AlarmKitHybridObject.cancelAlarm(id);
17
+ }
18
+ export async function cancelAllAlarms() {
19
+ return AlarmKitHybridObject.cancelAllAlarms();
20
+ }
21
+ export async function getAlarm(id) {
22
+ return AlarmKitHybridObject.getAlarm(id);
23
+ }
24
+ export async function getAllAlarms() {
25
+ return AlarmKitHybridObject.getAllAlarms();
26
+ }
27
+ export async function createAlarmButton(text, textColor, icon) {
28
+ return {
29
+ text,
30
+ textColor,
31
+ icon
32
+ };
33
+ }
34
+ export async function createAlarmCountdown(preAlert, postAlert) {
35
+ return {
36
+ preAlert,
37
+ postAlert
38
+ };
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NitroModules","AlarmKitHybridObject","createHybridObject","requestAlarmPermission","scheduleFixedAlarm","title","stopBtn","tintColor","secondaryBtn","timestamp","countdown","Error","scheduleRelativeAlarm","hour","minute","repeats","cancelAlarm","id","cancelAllAlarms","getAlarm","getAllAlarms","createAlarmButton","text","textColor","icon","createAlarmCountdown","preAlert","postAlert"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAQzD,MAAMC,oBAAoB,GACxBD,YAAY,CAACE,kBAAkB,CAAW,UAAU,CAAC;AAEvD,OAAO,eAAeC,sBAAsBA,CAAA,EAAqB;EAC/D,OAAOF,oBAAoB,CAACE,sBAAsB,CAAC,CAAC;AACtD;AAEA,OAAO,eAAeC,kBAAkBA,CACtCC,KAAa,EACbC,OAAgC,EAChCC,SAAiB,EACjBC,YAAsC,EACtCC,SAAkB,EAClBC,SAA0B,EACT;EACjB,IAAI,CAACD,SAAS,IAAI,CAACC,SAAS,EAC1B,MAAM,IAAIC,KAAK,CACb,wGACF,CAAC;EACH,OAAOV,oBAAoB,CAACG,kBAAkB,CAC5CC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,YAAY,EACZC,SAAS,EACTC,SACF,CAAC;AACH;AAEA,OAAO,eAAeE,qBAAqBA,CACzCP,KAAa,EACbC,OAAgC,EAChCC,SAAiB,EACjBM,IAAY,EACZC,MAAc,EACdC,OAAuB,EACvBP,YAAsC,EACtCE,SAA0B,EACT;EACjB,OAAOT,oBAAoB,CAACW,qBAAqB,CAC/CP,KAAK,EACLC,OAAO,EACPC,SAAS,EACTM,IAAI,EACJC,MAAM,EACNC,OAAO,EACPP,YAAY,EACZE,SACF,CAAC;AACH;AAEA,OAAO,eAAeM,WAAWA,CAACC,EAAU,EAAoB;EAC9D,OAAOhB,oBAAoB,CAACe,WAAW,CAACC,EAAE,CAAC;AAC7C;AAEA,OAAO,eAAeC,eAAeA,CAAA,EAAqB;EACxD,OAAOjB,oBAAoB,CAACiB,eAAe,CAAC,CAAC;AAC/C;AAEA,OAAO,eAAeC,QAAQA,CAACF,EAAU,EAA0B;EACjE,OAAOhB,oBAAoB,CAACkB,QAAQ,CAACF,EAAE,CAAC;AAC1C;AAEA,OAAO,eAAeG,YAAYA,CAAA,EAAsB;EACtD,OAAOnB,oBAAoB,CAACmB,YAAY,CAAC,CAAC;AAC5C;AAEA,OAAO,eAAeC,iBAAiBA,CACrCC,IAAY,EACZC,SAAiB,EACjBC,IAAY,EACsB;EAClC,OAAO;IACLF,IAAI;IACJC,SAAS;IACTC;EACF,CAAC;AACH;AAEA,OAAO,eAAeC,oBAAoBA,CACxCC,QAAuB,EACvBC,SAAwB,EACC;EACzB,OAAO;IACLD,QAAQ;IACRC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,24 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+ export interface AlarmKit extends HybridObject<{
3
+ ios: 'swift';
4
+ android: 'kotlin';
5
+ }> {
6
+ requestAlarmPermission(): Promise<boolean>;
7
+ scheduleFixedAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, secondaryBtn?: CustomizableAlarmButton, timestamp?: number, countdown?: AlarmCountdown): Promise<string>;
8
+ scheduleRelativeAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, hour: number, minute: number, repeats: AlarmWeekday[], secondaryBtn?: CustomizableAlarmButton, countdown?: AlarmCountdown): Promise<string>;
9
+ cancelAlarm(id: string): Promise<boolean>;
10
+ cancelAllAlarms(): Promise<boolean>;
11
+ getAlarm(id: string): Promise<string | null>;
12
+ getAllAlarms(): Promise<string[]>;
13
+ }
14
+ export interface CustomizableAlarmButton {
15
+ text: string;
16
+ textColor: string;
17
+ icon: string;
18
+ }
19
+ export interface AlarmCountdown {
20
+ preAlert?: number | null;
21
+ postAlert?: number | null;
22
+ }
23
+ export type AlarmWeekday = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
24
+ //# sourceMappingURL=AlarmKit.nitro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlarmKit.nitro.d.ts","sourceRoot":"","sources":["../../../src/AlarmKit.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,QACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,qBAAqB,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AlarmCountdown, AlarmWeekday, CustomizableAlarmButton } from './AlarmKit.nitro';
2
+ export declare function requestAlarmPermission(): Promise<boolean>;
3
+ export declare function scheduleFixedAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, secondaryBtn?: CustomizableAlarmButton, timestamp?: number, countdown?: AlarmCountdown): Promise<string>;
4
+ export declare function scheduleRelativeAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, hour: number, minute: number, repeats: AlarmWeekday[], secondaryBtn?: CustomizableAlarmButton, countdown?: AlarmCountdown): Promise<string>;
5
+ export declare function cancelAlarm(id: string): Promise<boolean>;
6
+ export declare function cancelAllAlarms(): Promise<boolean>;
7
+ export declare function getAlarm(id: string): Promise<string | null>;
8
+ export declare function getAllAlarms(): Promise<string[]>;
9
+ export declare function createAlarmButton(text: string, textColor: string, icon: string): Promise<CustomizableAlarmButton>;
10
+ export declare function createAlarmCountdown(preAlert: number | null, postAlert: number | null): Promise<AlarmCountdown>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAK1B,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAExD;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEjE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEtD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,uBAAuB,CAAC,CAMlC;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,cAAc,CAAC,CAKzB"}
package/nitro.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "cxxNamespace": ["alarmkit"],
3
+ "ios": {
4
+ "iosModuleName": "AlarmKit"
5
+ },
6
+ "android": {
7
+ "androidNamespace": ["alarmkit"],
8
+ "androidCxxLibName": "alarmkit"
9
+ },
10
+ "autolinking": {
11
+ "AlarmKit": {
12
+ "swift": "AlarmKit",
13
+ "kotlin": "AlarmKit"
14
+ }
15
+ },
16
+ "ignorePaths": ["node_modules"]
17
+ }
@@ -0,0 +1,78 @@
1
+ #
2
+ # alarmkit+autolinking.cmake
3
+ # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ # https://github.com/mrousavy/nitro
5
+ # Copyright © 2026 Marc Rousavy @ Margelo
6
+ #
7
+
8
+ # This is a CMake file that adds all files generated by Nitrogen
9
+ # to the current CMake project.
10
+ #
11
+ # To use it, add this to your CMakeLists.txt:
12
+ # ```cmake
13
+ # include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/alarmkit+autolinking.cmake)
14
+ # ```
15
+
16
+ # Add all headers that were generated by Nitrogen
17
+ include_directories(
18
+ "../nitrogen/generated/shared/c++"
19
+ "../nitrogen/generated/android/c++"
20
+ "../nitrogen/generated/android/"
21
+ )
22
+
23
+ # Add all .cpp sources that were generated by Nitrogen
24
+ target_sources(
25
+ # CMake project name (Android C++ library name)
26
+ alarmkit PRIVATE
27
+ # Autolinking Setup
28
+ ../nitrogen/generated/android/alarmkitOnLoad.cpp
29
+ # Shared Nitrogen C++ sources
30
+ ../nitrogen/generated/shared/c++/HybridAlarmKitSpec.cpp
31
+ # Android-specific Nitrogen C++ sources
32
+ ../nitrogen/generated/android/c++/JHybridAlarmKitSpec.cpp
33
+ )
34
+
35
+ # Define a flag to check if we are building properly
36
+ add_definitions(-DBUILDING_ALARMKIT_WITH_GENERATED_CMAKE_PROJECT)
37
+
38
+ # From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
39
+ # Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
40
+ target_compile_definitions(
41
+ alarmkit PRIVATE
42
+ -DFOLLY_NO_CONFIG=1
43
+ -DFOLLY_HAVE_CLOCK_GETTIME=1
44
+ -DFOLLY_USE_LIBCPP=1
45
+ -DFOLLY_CFG_NO_COROUTINES=1
46
+ -DFOLLY_MOBILE=1
47
+ -DFOLLY_HAVE_RECVMMSG=1
48
+ -DFOLLY_HAVE_PTHREAD=1
49
+ # Once we target android-23 above, we can comment
50
+ # the following line. NDK uses GNU style stderror_r() after API 23.
51
+ -DFOLLY_HAVE_XSI_STRERROR_R=1
52
+ )
53
+
54
+ # Add all libraries required by the generated specs
55
+ find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
56
+ find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
57
+ find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
58
+
59
+ # Link all libraries together
60
+ target_link_libraries(
61
+ alarmkit
62
+ fbjni::fbjni # <-- Facebook C++ JNI helpers
63
+ ReactAndroid::jsi # <-- RN: JSI
64
+ react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
65
+ )
66
+
67
+ # Link react-native (different prefab between RN 0.75 and RN 0.76)
68
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
69
+ target_link_libraries(
70
+ alarmkit
71
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
72
+ )
73
+ else()
74
+ target_link_libraries(
75
+ alarmkit
76
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
77
+ )
78
+ endif()
@@ -0,0 +1,27 @@
1
+ ///
2
+ /// alarmkit+autolinking.gradle
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /// This is a Gradle file that adds all files generated by Nitrogen
9
+ /// to the current Gradle project.
10
+ ///
11
+ /// To use it, add this to your build.gradle:
12
+ /// ```gradle
13
+ /// apply from: '../nitrogen/generated/android/alarmkit+autolinking.gradle'
14
+ /// ```
15
+
16
+ logger.warn("[NitroModules] 🔥 alarmkit is boosted by nitro!")
17
+
18
+ android {
19
+ sourceSets {
20
+ main {
21
+ java.srcDirs += [
22
+ // Nitrogen files
23
+ "${project.projectDir}/../nitrogen/generated/android/kotlin"
24
+ ]
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,46 @@
1
+ ///
2
+ /// alarmkitOnLoad.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #ifndef BUILDING_ALARMKIT_WITH_GENERATED_CMAKE_PROJECT
9
+ #error alarmkitOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
10
+ #endif
11
+
12
+ #include "alarmkitOnLoad.hpp"
13
+
14
+ #include <jni.h>
15
+ #include <fbjni/fbjni.h>
16
+ #include <NitroModules/HybridObjectRegistry.hpp>
17
+
18
+ #include "JHybridAlarmKitSpec.hpp"
19
+ #include <NitroModules/JNISharedPtr.hpp>
20
+ #include <NitroModules/DefaultConstructableObject.hpp>
21
+
22
+ namespace margelo::nitro::alarmkit {
23
+
24
+ int initialize(JavaVM* vm) {
25
+ using namespace margelo::nitro;
26
+ using namespace margelo::nitro::alarmkit;
27
+ using namespace facebook;
28
+
29
+ return facebook::jni::initialize(vm, [] {
30
+ // Register native JNI methods
31
+ margelo::nitro::alarmkit::JHybridAlarmKitSpec::registerNatives();
32
+
33
+ // Register Nitro Hybrid Objects
34
+ HybridObjectRegistry::registerHybridObjectConstructor(
35
+ "AlarmKit",
36
+ []() -> std::shared_ptr<HybridObject> {
37
+ static DefaultConstructableObject<JHybridAlarmKitSpec::javaobject> object("com/margelo/nitro/alarmkit/AlarmKit");
38
+ auto instance = object.create();
39
+ auto globalRef = jni::make_global(instance);
40
+ return JNISharedPtr::make_shared_from_jni<JHybridAlarmKitSpec>(globalRef);
41
+ }
42
+ );
43
+ });
44
+ }
45
+
46
+ } // namespace margelo::nitro::alarmkit
@@ -0,0 +1,25 @@
1
+ ///
2
+ /// alarmkitOnLoad.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include <jni.h>
9
+ #include <NitroModules/NitroDefines.hpp>
10
+
11
+ namespace margelo::nitro::alarmkit {
12
+
13
+ /**
14
+ * Initializes the native (C++) part of alarmkit, and autolinks all Hybrid Objects.
15
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
16
+ * Example:
17
+ * ```cpp (cpp-adapter.cpp)
18
+ * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
19
+ * return margelo::nitro::alarmkit::initialize(vm);
20
+ * }
21
+ * ```
22
+ */
23
+ int initialize(JavaVM* vm);
24
+
25
+ } // namespace margelo::nitro::alarmkit
@@ -0,0 +1,57 @@
1
+ ///
2
+ /// JAlarmCountdown.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "AlarmCountdown.hpp"
12
+
13
+ #include <optional>
14
+
15
+ namespace margelo::nitro::alarmkit {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "AlarmCountdown" and the the Kotlin data class "AlarmCountdown".
21
+ */
22
+ struct JAlarmCountdown final: public jni::JavaClass<JAlarmCountdown> {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/alarmkit/AlarmCountdown;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct AlarmCountdown by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ AlarmCountdown toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldPreAlert = clazz->getField<jni::JDouble>("preAlert");
35
+ jni::local_ref<jni::JDouble> preAlert = this->getFieldValue(fieldPreAlert);
36
+ static const auto fieldPostAlert = clazz->getField<jni::JDouble>("postAlert");
37
+ jni::local_ref<jni::JDouble> postAlert = this->getFieldValue(fieldPostAlert);
38
+ return AlarmCountdown(
39
+ preAlert != nullptr ? std::make_optional(preAlert->value()) : std::nullopt,
40
+ postAlert != nullptr ? std::make_optional(postAlert->value()) : std::nullopt
41
+ );
42
+ }
43
+
44
+ public:
45
+ /**
46
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
47
+ */
48
+ [[maybe_unused]]
49
+ static jni::local_ref<JAlarmCountdown::javaobject> fromCpp(const AlarmCountdown& value) {
50
+ return newInstance(
51
+ value.preAlert.has_value() ? jni::JDouble::valueOf(value.preAlert.value()) : nullptr,
52
+ value.postAlert.has_value() ? jni::JDouble::valueOf(value.postAlert.value()) : nullptr
53
+ );
54
+ }
55
+ };
56
+
57
+ } // namespace margelo::nitro::alarmkit