craft-native 0.0.37

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 (117) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +424 -0
  3. package/bin/cli.ts +937 -0
  4. package/dist/api/android-advanced.d.ts +737 -0
  5. package/dist/api/android-advanced.d.ts.map +1 -0
  6. package/dist/api/app.d.ts +432 -0
  7. package/dist/api/app.d.ts.map +1 -0
  8. package/dist/api/clipboard.d.ts +85 -0
  9. package/dist/api/clipboard.d.ts.map +1 -0
  10. package/dist/api/crypto.d.ts +79 -0
  11. package/dist/api/crypto.d.ts.map +1 -0
  12. package/dist/api/db.d.ts +427 -0
  13. package/dist/api/db.d.ts.map +1 -0
  14. package/dist/api/dialog.d.ts +141 -0
  15. package/dist/api/dialog.d.ts.map +1 -0
  16. package/dist/api/fs.d.ts +131 -0
  17. package/dist/api/fs.d.ts.map +1 -0
  18. package/dist/api/http.d.ts +196 -0
  19. package/dist/api/http.d.ts.map +1 -0
  20. package/dist/api/index.d.ts +38 -0
  21. package/dist/api/index.d.ts.map +1 -0
  22. package/dist/api/ios-advanced.d.ts +833 -0
  23. package/dist/api/ios-advanced.d.ts.map +1 -0
  24. package/dist/api/macos-advanced.d.ts +721 -0
  25. package/dist/api/macos-advanced.d.ts.map +1 -0
  26. package/dist/api/media.d.ts +233 -0
  27. package/dist/api/media.d.ts.map +1 -0
  28. package/dist/api/mobile.d.ts +658 -0
  29. package/dist/api/mobile.d.ts.map +1 -0
  30. package/dist/api/process.d.ts +168 -0
  31. package/dist/api/process.d.ts.map +1 -0
  32. package/dist/api/sidebar.d.ts +125 -0
  33. package/dist/api/sidebar.d.ts.map +1 -0
  34. package/dist/api/tray.d.ts +410 -0
  35. package/dist/api/tray.d.ts.map +1 -0
  36. package/dist/api/window.d.ts +462 -0
  37. package/dist/api/window.d.ts.map +1 -0
  38. package/dist/api/windows-advanced.d.ts +719 -0
  39. package/dist/api/windows-advanced.d.ts.map +1 -0
  40. package/dist/assets/index.d.ts +69 -0
  41. package/dist/assets/index.d.ts.map +1 -0
  42. package/dist/binary-resolver.d.ts +39 -0
  43. package/dist/binary-resolver.d.ts.map +1 -0
  44. package/dist/bridge/android.d.ts +574 -0
  45. package/dist/bridge/android.d.ts.map +1 -0
  46. package/dist/bridge/core.d.ts +474 -0
  47. package/dist/bridge/core.d.ts.map +1 -0
  48. package/dist/bridge/ids.d.ts +18 -0
  49. package/dist/bridge/ids.d.ts.map +1 -0
  50. package/dist/bridge/ios.d.ts +528 -0
  51. package/dist/bridge/ios.d.ts.map +1 -0
  52. package/dist/bridge/webkit-pending.d.ts +50 -0
  53. package/dist/bridge/webkit-pending.d.ts.map +1 -0
  54. package/dist/build/bundle-optimizer.d.ts +69 -0
  55. package/dist/build/bundle-optimizer.d.ts.map +1 -0
  56. package/dist/components/index.d.ts +719 -0
  57. package/dist/components/index.d.ts.map +1 -0
  58. package/dist/components/native.d.ts +728 -0
  59. package/dist/components/native.d.ts.map +1 -0
  60. package/dist/components/sidebar.d.ts +458 -0
  61. package/dist/components/sidebar.d.ts.map +1 -0
  62. package/dist/dev/devtools.d.ts +118 -0
  63. package/dist/dev/devtools.d.ts.map +1 -0
  64. package/dist/dev/error-overlay.d.ts +73 -0
  65. package/dist/dev/error-overlay.d.ts.map +1 -0
  66. package/dist/dev/hot-reload.d.ts +127 -0
  67. package/dist/dev/hot-reload.d.ts.map +1 -0
  68. package/dist/index.cjs +10253 -0
  69. package/dist/index.d.cts +59 -0
  70. package/dist/index.d.ts +59 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +10240 -0
  73. package/dist/logging/index.d.ts +152 -0
  74. package/dist/logging/index.d.ts.map +1 -0
  75. package/dist/optimizations/index.d.ts +232 -0
  76. package/dist/optimizations/index.d.ts.map +1 -0
  77. package/dist/package.d.ts +90 -0
  78. package/dist/package.d.ts.map +1 -0
  79. package/dist/performance/runtime.d.ts +230 -0
  80. package/dist/performance/runtime.d.ts.map +1 -0
  81. package/dist/performance/startup.d.ts +223 -0
  82. package/dist/performance/startup.d.ts.map +1 -0
  83. package/dist/plugins/index.d.ts +114 -0
  84. package/dist/plugins/index.d.ts.map +1 -0
  85. package/dist/security/index.d.ts +268 -0
  86. package/dist/security/index.d.ts.map +1 -0
  87. package/dist/signing/index.d.ts +104 -0
  88. package/dist/signing/index.d.ts.map +1 -0
  89. package/dist/styles/headwind.d.ts +222 -0
  90. package/dist/styles/headwind.d.ts.map +1 -0
  91. package/dist/styles/index.d.ts +31 -0
  92. package/dist/styles/index.d.ts.map +1 -0
  93. package/dist/styles/sidebar-templates.d.ts +77 -0
  94. package/dist/styles/sidebar-templates.d.ts.map +1 -0
  95. package/dist/styles/sidebars.d.ts +194 -0
  96. package/dist/styles/sidebars.d.ts.map +1 -0
  97. package/dist/types.d.ts +1555 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/updater/index.d.ts +164 -0
  100. package/dist/updater/index.d.ts.map +1 -0
  101. package/dist/utils/audio.d.ts +40 -0
  102. package/dist/utils/audio.d.ts.map +1 -0
  103. package/dist/utils/index.d.ts +9 -0
  104. package/dist/utils/index.d.ts.map +1 -0
  105. package/dist/utils/native.d.ts +27 -0
  106. package/dist/utils/native.d.ts.map +1 -0
  107. package/dist/utils/react.d.ts +157 -0
  108. package/dist/utils/react.d.ts.map +1 -0
  109. package/dist/utils/storage.d.ts +35 -0
  110. package/dist/utils/storage.d.ts.map +1 -0
  111. package/dist/utils/svelte.d.ts +187 -0
  112. package/dist/utils/svelte.d.ts.map +1 -0
  113. package/dist/utils/timer.d.ts +57 -0
  114. package/dist/utils/timer.d.ts.map +1 -0
  115. package/dist/utils/vue.d.ts +157 -0
  116. package/dist/utils/vue.d.ts.map +1 -0
  117. package/package.json +78 -0
@@ -0,0 +1,721 @@
1
+ /**
2
+ * @fileoverview macOS Advanced Features API
3
+ * @description Advanced macOS-specific features including Touch Bar, Desktop Widgets,
4
+ * Stage Manager, Handoff/Continuity, Sidecar, and system integration.
5
+ * @module @craft-native/api/macos-advanced
6
+ */
7
+ /**
8
+ * Touch Bar item types.
9
+ */
10
+ export type TouchBarItemType = 'button' | 'label' | 'slider' | 'popover' | 'colorPicker' | 'scrubber' | 'segmentedControl' | 'spacer' | 'group';
11
+ /**
12
+ * Touch Bar button item.
13
+ */
14
+ export interface TouchBarButton {
15
+ type: 'button';
16
+ id: string;
17
+ label?: string;
18
+ icon?: string;
19
+ backgroundColor?: string;
20
+ accessibilityLabel?: string;
21
+ }
22
+ /**
23
+ * Touch Bar label item.
24
+ */
25
+ export interface TouchBarLabel {
26
+ type: 'label';
27
+ id: string;
28
+ label: string;
29
+ textColor?: string;
30
+ accessibilityLabel?: string;
31
+ }
32
+ /**
33
+ * Touch Bar slider item.
34
+ */
35
+ export interface TouchBarSlider {
36
+ type: 'slider';
37
+ id: string;
38
+ label?: string;
39
+ minValue: number;
40
+ maxValue: number;
41
+ value: number;
42
+ minAccessoryIcon?: string;
43
+ maxAccessoryIcon?: string;
44
+ }
45
+ /**
46
+ * Touch Bar color picker item.
47
+ */
48
+ export interface TouchBarColorPicker {
49
+ type: 'colorPicker';
50
+ id: string;
51
+ selectedColor?: string;
52
+ availableColors?: string[];
53
+ }
54
+ /**
55
+ * Touch Bar scrubber item.
56
+ */
57
+ export interface TouchBarScrubber {
58
+ type: 'scrubber';
59
+ id: string;
60
+ items: Array<{
61
+ label?: string;
62
+ icon?: string;
63
+ }>;
64
+ selectedIndex?: number;
65
+ mode: 'fixed' | 'free';
66
+ showsArrowButtons?: boolean;
67
+ }
68
+ /**
69
+ * Touch Bar segmented control.
70
+ */
71
+ export interface TouchBarSegmentedControl {
72
+ type: 'segmentedControl';
73
+ id: string;
74
+ segments: Array<{
75
+ label?: string;
76
+ icon?: string;
77
+ }>;
78
+ selectedIndex?: number;
79
+ segmentStyle?: 'automatic' | 'rounded' | 'separated';
80
+ }
81
+ /**
82
+ * Touch Bar popover item.
83
+ */
84
+ export interface TouchBarPopover {
85
+ type: 'popover';
86
+ id: string;
87
+ label?: string;
88
+ icon?: string;
89
+ items: TouchBarItem[];
90
+ showCloseButton?: boolean;
91
+ }
92
+ /**
93
+ * Touch Bar spacer.
94
+ */
95
+ export interface TouchBarSpacer {
96
+ type: 'spacer';
97
+ size: 'small' | 'large' | 'flexible';
98
+ }
99
+ /**
100
+ * Touch Bar group.
101
+ */
102
+ export interface TouchBarGroup {
103
+ type: 'group';
104
+ id: string;
105
+ items: TouchBarItem[];
106
+ }
107
+ /**
108
+ * Touch Bar item union type.
109
+ */
110
+ export type TouchBarItem = TouchBarButton | TouchBarLabel | TouchBarSlider | TouchBarColorPicker | TouchBarScrubber | TouchBarSegmentedControl | TouchBarPopover | TouchBarSpacer | TouchBarGroup;
111
+ /**
112
+ * Touch Bar API for MacBook Pro Touch Bar support.
113
+ *
114
+ * @example
115
+ * // Create a Touch Bar
116
+ * touchBar.set([
117
+ * { type: 'button', id: 'play', icon: 'play.fill' },
118
+ * { type: 'spacer', size: 'flexible' },
119
+ * { type: 'slider', id: 'volume', minValue: 0, maxValue: 100, value: 50 },
120
+ * { type: 'button', id: 'favorite', icon: 'heart.fill', backgroundColor: '#ff375f' }
121
+ * ])
122
+ *
123
+ * // Handle interactions
124
+ * touchBar.onTap('play', () => togglePlayback())
125
+ * touchBar.onSliderChange('volume', (value) => setVolume(value))
126
+ */
127
+ export declare const touchBar: {
128
+ /**
129
+ * Check if Touch Bar is available.
130
+ */
131
+ isAvailable(): Promise<boolean>;
132
+ /**
133
+ * Set Touch Bar items.
134
+ */
135
+ set(items: TouchBarItem[]): void;
136
+ /**
137
+ * Update a specific item.
138
+ */
139
+ updateItem(id: string, updates: Partial<TouchBarItem>): void;
140
+ /**
141
+ * Clear Touch Bar.
142
+ */
143
+ clear(): void;
144
+ /**
145
+ * Register tap handler for button.
146
+ */
147
+ onTap(id: string, handler: () => void): void;
148
+ /**
149
+ * Register slider change handler.
150
+ */
151
+ onSliderChange(id: string, handler: (value: number) => void): void;
152
+ /**
153
+ * Register color picker change handler.
154
+ */
155
+ onColorChange(id: string, handler: (color: string) => void): void;
156
+ /**
157
+ * Register scrubber selection handler.
158
+ */
159
+ onScrubberSelect(id: string, handler: (index: number) => void): void;
160
+ /**
161
+ * Register segment selection handler.
162
+ */
163
+ onSegmentSelect(id: string, handler: (index: number) => void): void;
164
+ /**
165
+ * Show/hide escape key.
166
+ */
167
+ setEscapeKeyVisible(visible: boolean): void;
168
+ };
169
+ /**
170
+ * Widget family (size).
171
+ */
172
+ export type WidgetFamily = 'systemSmall' | 'systemMedium' | 'systemLarge' | 'systemExtraLarge';
173
+ /**
174
+ * Widget timeline entry.
175
+ */
176
+ export interface WidgetTimelineEntry {
177
+ /** Entry date */
178
+ date: Date;
179
+ /** Widget content data */
180
+ content: Record<string, any>;
181
+ /** Relevance score (0-1) */
182
+ relevance?: number;
183
+ }
184
+ /**
185
+ * Widget configuration.
186
+ */
187
+ export interface WidgetConfiguration {
188
+ /** Widget kind identifier */
189
+ kind: string;
190
+ /** Display name */
191
+ displayName: string;
192
+ /** Description */
193
+ description: string;
194
+ /** Supported families */
195
+ supportedFamilies: WidgetFamily[];
196
+ /** Configuration intent type (for configurable widgets) */
197
+ configurationIntent?: string;
198
+ }
199
+ /**
200
+ * Desktop Widgets API for macOS widgets (WidgetKit).
201
+ *
202
+ * @example
203
+ * // Register a widget
204
+ * desktopWidgets.register({
205
+ * kind: 'weather',
206
+ * displayName: 'Weather',
207
+ * description: 'Shows current weather',
208
+ * supportedFamilies: ['systemSmall', 'systemMedium']
209
+ * })
210
+ *
211
+ * // Provide timeline
212
+ * desktopWidgets.provideTimeline('weather', async (_context) => {
213
+ * const weather = await fetchWeather()
214
+ * return {
215
+ * entries: [
216
+ * { date: new Date(), content: { temp: weather.temp, condition: weather.condition } }
217
+ * ],
218
+ * policy: { type: 'after', date: new Date(Date.now() + 3600000) }
219
+ * }
220
+ * })
221
+ *
222
+ * // Reload timeline
223
+ * await desktopWidgets.reloadTimeline('weather')
224
+ */
225
+ export declare const desktopWidgets: {
226
+ /**
227
+ * Check if widgets are supported.
228
+ */
229
+ isSupported(): Promise<boolean>;
230
+ /**
231
+ * Register a widget configuration.
232
+ */
233
+ register(config: WidgetConfiguration): void;
234
+ /**
235
+ * Provide timeline for a widget.
236
+ */
237
+ provideTimeline(kind: string, provider: (context: {
238
+ family: WidgetFamily;
239
+ isPreview: boolean;
240
+ }) => Promise<{
241
+ entries: WidgetTimelineEntry[];
242
+ policy: {
243
+ type: "atEnd" | "never" | "after";
244
+ date?: Date;
245
+ };
246
+ }>): void;
247
+ /**
248
+ * Reload timeline for a widget.
249
+ */
250
+ reloadTimeline(kind: string): Promise<void>;
251
+ /**
252
+ * Reload all timelines.
253
+ */
254
+ reloadAllTimelines(): Promise<void>;
255
+ /**
256
+ * Get current widget configurations.
257
+ */
258
+ getCurrentConfigurations(kind: string): Promise<Array<{
259
+ widgetId: string;
260
+ family: WidgetFamily;
261
+ intent?: Record<string, any>;
262
+ }>>;
263
+ /**
264
+ * Handle widget URL.
265
+ */
266
+ onWidgetURL(kind: string, handler: (url: string, widgetFamily: WidgetFamily) => void): void;
267
+ };
268
+ /**
269
+ * Stage Manager API for window organization.
270
+ *
271
+ * @example
272
+ * // Check if Stage Manager is active
273
+ * const isActive = await stageManager.isActive()
274
+ *
275
+ * // Create a window set (group)
276
+ * await stageManager.createSet(['window1', 'window2'])
277
+ *
278
+ * // Listen for active set changes
279
+ * stageManager.onActiveSetChange((windowIds) => {
280
+ * console.log('Active set:', windowIds)
281
+ * })
282
+ */
283
+ export declare const stageManager: {
284
+ /**
285
+ * Check if Stage Manager is active.
286
+ */
287
+ isActive(): Promise<boolean>;
288
+ /**
289
+ * Check if Stage Manager is available.
290
+ */
291
+ isAvailable(): Promise<boolean>;
292
+ /**
293
+ * Get the current active window set.
294
+ */
295
+ getActiveSet(): Promise<string[]>;
296
+ /**
297
+ * Create a window set.
298
+ */
299
+ createSet(windowIds: string[]): Promise<void>;
300
+ /**
301
+ * Add window to current set.
302
+ */
303
+ addToCurrentSet(windowId: string): Promise<void>;
304
+ /**
305
+ * Remove window from current set.
306
+ */
307
+ removeFromCurrentSet(windowId: string): Promise<void>;
308
+ /**
309
+ * Listen for active set changes.
310
+ */
311
+ onActiveSetChange(handler: (windowIds: string[]) => void): void;
312
+ /**
313
+ * Listen for Stage Manager enable/disable.
314
+ */
315
+ onStateChange(handler: (isActive: boolean) => void): void;
316
+ };
317
+ /**
318
+ * User activity for Handoff.
319
+ */
320
+ export interface UserActivity {
321
+ /** Activity type (reverse domain notation) */
322
+ activityType: string;
323
+ /** Title shown to user */
324
+ title: string;
325
+ /** User info dictionary */
326
+ userInfo?: Record<string, any>;
327
+ /** Web page URL for Universal Links */
328
+ webpageURL?: string;
329
+ /** Whether activity should be indexed */
330
+ isEligibleForSearch?: boolean;
331
+ /** Whether activity should be handed off */
332
+ isEligibleForHandoff?: boolean;
333
+ /** Whether activity supports public indexing */
334
+ isEligibleForPublicIndexing?: boolean;
335
+ /** Keywords for search */
336
+ keywords?: string[];
337
+ /** Expiration date */
338
+ expirationDate?: Date;
339
+ }
340
+ /**
341
+ * Handoff/Continuity API for cross-device experiences.
342
+ *
343
+ * @example
344
+ * // Start an activity for Handoff
345
+ * handoff.startActivity({
346
+ * activityType: 'com.myapp.editing-document',
347
+ * title: 'Editing: My Document',
348
+ * userInfo: { documentId: '123', scrollPosition: 500 },
349
+ * webpageURL: 'https://myapp.com/doc/123'
350
+ * })
351
+ *
352
+ * // Handle continuing activity from another device
353
+ * handoff.onContinue((activity) => {
354
+ * openDocument(activity.userInfo.documentId)
355
+ * scrollTo(activity.userInfo.scrollPosition)
356
+ * })
357
+ *
358
+ * // Universal Clipboard
359
+ * const hasRemoteContent = await handoff.hasRemoteClipboardContent()
360
+ */
361
+ export declare const handoff: {
362
+ /**
363
+ * Start a user activity for Handoff.
364
+ */
365
+ startActivity(activity: UserActivity): void;
366
+ /**
367
+ * Update the current activity.
368
+ */
369
+ updateActivity(updates: Partial<UserActivity>): void;
370
+ /**
371
+ * Invalidate (stop) the current activity.
372
+ */
373
+ invalidateActivity(): void;
374
+ /**
375
+ * Handle continuing an activity from another device.
376
+ */
377
+ onContinue(handler: (activity: UserActivity) => void): void;
378
+ /**
379
+ * Check if there's content on remote clipboard (Universal Clipboard).
380
+ */
381
+ hasRemoteClipboardContent(): Promise<boolean>;
382
+ /**
383
+ * Request AirDrop file transfer.
384
+ */
385
+ shareViaAirDrop(filePaths: string[]): Promise<boolean>;
386
+ /**
387
+ * Check if Handoff is available.
388
+ */
389
+ isAvailable(): Promise<boolean>;
390
+ };
391
+ /**
392
+ * Sidecar device info.
393
+ */
394
+ export interface SidecarDevice {
395
+ /** Device identifier */
396
+ id: string;
397
+ /** Device name */
398
+ name: string;
399
+ /** Device model */
400
+ model: string;
401
+ /** Whether currently connected */
402
+ isConnected: boolean;
403
+ }
404
+ /**
405
+ * Sidecar API for iPad as second display.
406
+ *
407
+ * @example
408
+ * // Get available Sidecar devices
409
+ * const devices = await sidecar.getAvailableDevices()
410
+ *
411
+ * // Connect to a device
412
+ * await sidecar.connect(devices[0].id)
413
+ *
414
+ * // Move window to Sidecar display
415
+ * await sidecar.moveWindowToSidecar(windowId)
416
+ */
417
+ export declare const sidecar: {
418
+ /**
419
+ * Check if Sidecar is available.
420
+ */
421
+ isAvailable(): Promise<boolean>;
422
+ /**
423
+ * Get available Sidecar devices.
424
+ */
425
+ getAvailableDevices(): Promise<SidecarDevice[]>;
426
+ /**
427
+ * Get currently connected device.
428
+ */
429
+ getConnectedDevice(): Promise<SidecarDevice | null>;
430
+ /**
431
+ * Connect to a Sidecar device.
432
+ */
433
+ connect(deviceId: string): Promise<boolean>;
434
+ /**
435
+ * Disconnect from Sidecar.
436
+ */
437
+ disconnect(): Promise<void>;
438
+ /**
439
+ * Move a window to the Sidecar display.
440
+ */
441
+ moveWindowToSidecar(windowId: string): Promise<void>;
442
+ /**
443
+ * Listen for connection changes.
444
+ */
445
+ onConnectionChange(handler: (device: SidecarDevice | null) => void): void;
446
+ };
447
+ /**
448
+ * Spotlight searchable item.
449
+ */
450
+ export interface SpotlightItem {
451
+ /** Unique identifier */
452
+ uniqueIdentifier: string;
453
+ /** Domain identifier (for grouping) */
454
+ domainIdentifier?: string;
455
+ /** Display title */
456
+ title: string;
457
+ /** Content description */
458
+ contentDescription?: string;
459
+ /** Thumbnail URL or path */
460
+ thumbnailURL?: string;
461
+ /** Keywords for search */
462
+ keywords?: string[];
463
+ /** Content type (UTI) */
464
+ contentType?: string;
465
+ /** URL to open when selected */
466
+ contentURL?: string;
467
+ /** Rating (0-5) */
468
+ rating?: number;
469
+ /** Relative importance */
470
+ rankingHint?: number;
471
+ }
472
+ /**
473
+ * Spotlight API for search integration.
474
+ *
475
+ * @example
476
+ * // Index items for Spotlight
477
+ * await spotlight.indexItems([
478
+ * {
479
+ * uniqueIdentifier: 'doc-123',
480
+ * title: 'My Document',
481
+ * contentDescription: 'Important notes about the project',
482
+ * keywords: ['notes', 'project', 'important']
483
+ * }
484
+ * ])
485
+ *
486
+ * // Delete items from index
487
+ * await spotlight.deleteItems(['doc-123'])
488
+ *
489
+ * // Handle Spotlight search result selection
490
+ * spotlight.onContinueActivity((identifier) => {
491
+ * openDocument(identifier)
492
+ * })
493
+ */
494
+ export declare const spotlight: {
495
+ /**
496
+ * Index items for Spotlight search.
497
+ */
498
+ indexItems(items: SpotlightItem[]): Promise<void>;
499
+ /**
500
+ * Delete items from Spotlight index.
501
+ */
502
+ deleteItems(identifiers: string[]): Promise<void>;
503
+ /**
504
+ * Delete all items in a domain.
505
+ */
506
+ deleteItemsInDomain(domainIdentifier: string): Promise<void>;
507
+ /**
508
+ * Delete all indexed items.
509
+ */
510
+ deleteAllItems(): Promise<void>;
511
+ /**
512
+ * Handle user selecting a Spotlight result.
513
+ */
514
+ onContinueActivity(handler: (identifier: string, userInfo?: Record<string, any>) => void): void;
515
+ /**
516
+ * Check indexing status.
517
+ */
518
+ getIndexingStatus(): Promise<{
519
+ isIndexing: boolean;
520
+ itemCount: number;
521
+ }>;
522
+ };
523
+ /**
524
+ * Quick Action definition.
525
+ */
526
+ export interface QuickAction {
527
+ /** Action identifier */
528
+ id: string;
529
+ /** Display title */
530
+ title: string;
531
+ /** Icon (SF Symbol or path) */
532
+ icon?: string;
533
+ /** Input types this action accepts */
534
+ inputTypes: Array<'text' | 'url' | 'file' | 'image'>;
535
+ }
536
+ /**
537
+ * Quick Actions API for Services menu integration.
538
+ *
539
+ * @example
540
+ * // Register a quick action
541
+ * quickActions.register({
542
+ * id: 'summarize-text',
543
+ * title: 'Summarize with MyApp',
544
+ * icon: 'text.alignleft',
545
+ * inputTypes: ['text']
546
+ * })
547
+ *
548
+ * // Handle quick action invocation
549
+ * quickActions.onInvoke('summarize-text', async (input) => {
550
+ * const summary = await summarize(input.text)
551
+ * return { result: summary }
552
+ * })
553
+ */
554
+ export declare const quickActions: {
555
+ /**
556
+ * Register a quick action.
557
+ */
558
+ register(action: QuickAction): void;
559
+ /**
560
+ * Unregister a quick action.
561
+ */
562
+ unregister(actionId: string): void;
563
+ /**
564
+ * Handle quick action invocation.
565
+ */
566
+ onInvoke(actionId: string, handler: (input: {
567
+ text?: string;
568
+ url?: string;
569
+ filePaths?: string[];
570
+ }) => Promise<{
571
+ result?: string;
572
+ error?: string;
573
+ }>): void;
574
+ };
575
+ /**
576
+ * Share Extension API.
577
+ *
578
+ * @example
579
+ * // Handle share extension invocation
580
+ * shareExtension.onReceive((items) => {
581
+ * for (const item of items) {
582
+ * if (item.type === 'url') {
583
+ * saveBookmark(item.url)
584
+ * }
585
+ * }
586
+ * })
587
+ */
588
+ export declare const shareExtension: {
589
+ /**
590
+ * Handle receiving shared items.
591
+ */
592
+ onReceive(handler: (items: Array<{
593
+ type: "text" | "url" | "image" | "file";
594
+ text?: string;
595
+ url?: string;
596
+ filePath?: string;
597
+ mimeType?: string;
598
+ }>) => void): void;
599
+ /**
600
+ * Complete the share action.
601
+ */
602
+ complete(success?: boolean): Promise<void>;
603
+ /**
604
+ * Cancel the share action.
605
+ */
606
+ cancel(): Promise<void>;
607
+ };
608
+ /**
609
+ * Window tab group.
610
+ */
611
+ export interface WindowTabGroup {
612
+ /** Tab group identifier */
613
+ id: string;
614
+ /** Windows in this group */
615
+ windowIds: string[];
616
+ /** Active window index */
617
+ activeIndex: number;
618
+ }
619
+ /**
620
+ * Advanced Window Management API.
621
+ *
622
+ * @example
623
+ * // Enable native tabs
624
+ * windowManagement.enableTabs()
625
+ *
626
+ * // Create a new tab
627
+ * await windowManagement.newTab()
628
+ *
629
+ * // Enter full screen
630
+ * await windowManagement.enterFullScreen()
631
+ *
632
+ * // Set up split view
633
+ * await windowManagement.createSplitView(window1Id, window2Id)
634
+ */
635
+ export declare const windowManagement: {
636
+ /**
637
+ * Enable native window tabs.
638
+ */
639
+ enableTabs(): void;
640
+ /**
641
+ * Disable native window tabs.
642
+ */
643
+ disableTabs(): void;
644
+ /**
645
+ * Create a new tab.
646
+ */
647
+ newTab(url?: string): Promise<string>;
648
+ /**
649
+ * Close current tab.
650
+ */
651
+ closeTab(): Promise<void>;
652
+ /**
653
+ * Get tab groups.
654
+ */
655
+ getTabGroups(): Promise<WindowTabGroup[]>;
656
+ /**
657
+ * Select a tab.
658
+ */
659
+ selectTab(windowId: string): Promise<void>;
660
+ /**
661
+ * Move tab to new window.
662
+ */
663
+ moveTabToNewWindow(windowId: string): Promise<void>;
664
+ /**
665
+ * Merge all windows.
666
+ */
667
+ mergeAllWindows(): Promise<void>;
668
+ /**
669
+ * Enter full screen mode.
670
+ */
671
+ enterFullScreen(): Promise<void>;
672
+ /**
673
+ * Exit full screen mode.
674
+ */
675
+ exitFullScreen(): Promise<void>;
676
+ /**
677
+ * Toggle full screen.
678
+ */
679
+ toggleFullScreen(): Promise<void>;
680
+ /**
681
+ * Create split view with two windows.
682
+ */
683
+ createSplitView(leftWindowId: string, rightWindowId: string): Promise<void>;
684
+ /**
685
+ * Exit split view.
686
+ */
687
+ exitSplitView(): Promise<void>;
688
+ /**
689
+ * Tile window to left half.
690
+ */
691
+ tileLeft(): Promise<void>;
692
+ /**
693
+ * Tile window to right half.
694
+ */
695
+ tileRight(): Promise<void>;
696
+ /**
697
+ * Move window to space.
698
+ */
699
+ moveToSpace(spaceIndex: number): Promise<void>;
700
+ /**
701
+ * Register tab change handler.
702
+ */
703
+ onTabChange(handler: (tabGroup: WindowTabGroup) => void): void;
704
+ /**
705
+ * Register full screen change handler.
706
+ */
707
+ onFullScreenChange(handler: (isFullScreen: boolean) => void): void;
708
+ };
709
+ declare const macosAdvanced: {
710
+ touchBar: typeof touchBar;
711
+ desktopWidgets: typeof desktopWidgets;
712
+ stageManager: typeof stageManager;
713
+ handoff: typeof handoff;
714
+ sidecar: typeof sidecar;
715
+ spotlight: typeof spotlight;
716
+ quickActions: typeof quickActions;
717
+ shareExtension: typeof shareExtension;
718
+ windowManagement: typeof windowManagement;
719
+ };
720
+ export default macosAdvanced;
721
+ //# sourceMappingURL=macos-advanced.d.ts.map