@moldable-ai/ui 0.2.17 → 0.2.19
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.
- package/dist/components/chat/chat-panel.d.ts +18 -12
- package/dist/components/chat/chat-panel.d.ts.map +1 -1
- package/dist/components/chat/chat-panel.js +73 -19
- package/dist/components/chat/index.d.ts +2 -1
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +2 -1
- package/dist/components/chat/model-effort-power-effects.d.ts +7 -0
- package/dist/components/chat/model-effort-power-effects.d.ts.map +1 -0
- package/dist/components/chat/model-effort-power-effects.js +54 -0
- package/dist/components/chat/model-effort-selector.d.ts +26 -0
- package/dist/components/chat/model-effort-selector.d.ts.map +1 -0
- package/dist/components/chat/model-effort-selector.js +179 -0
- package/dist/components/chat/model-effort-ultra-effects.d.ts +5 -0
- package/dist/components/chat/model-effort-ultra-effects.d.ts.map +1 -0
- package/dist/components/chat/model-effort-ultra-effects.js +56 -0
- package/dist/components/chat/tool-handlers.d.ts.map +1 -1
- package/dist/components/hardware/bluetooth-panel-helpers.d.ts +9 -0
- package/dist/components/hardware/bluetooth-panel-helpers.d.ts.map +1 -0
- package/dist/components/hardware/bluetooth-panel-helpers.js +37 -0
- package/dist/components/hardware/bluetooth-panel.d.ts +56 -0
- package/dist/components/hardware/bluetooth-panel.d.ts.map +1 -0
- package/dist/components/hardware/bluetooth-panel.js +470 -0
- package/dist/components/hardware/camera-preview.d.ts +39 -0
- package/dist/components/hardware/camera-preview.d.ts.map +1 -0
- package/dist/components/hardware/camera-preview.js +228 -0
- package/dist/components/hardware/capability-badge.d.ts +23 -0
- package/dist/components/hardware/capability-badge.d.ts.map +1 -0
- package/dist/components/hardware/capability-badge.js +39 -0
- package/dist/components/hardware/capability-matrix.d.ts +14 -0
- package/dist/components/hardware/capability-matrix.d.ts.map +1 -0
- package/dist/components/hardware/capability-matrix.js +97 -0
- package/dist/components/hardware/clipboard-button.d.ts +26 -0
- package/dist/components/hardware/clipboard-button.d.ts.map +1 -0
- package/dist/components/hardware/clipboard-button.js +114 -0
- package/dist/components/hardware/device-io-controls.d.ts +4 -0
- package/dist/components/hardware/device-io-controls.d.ts.map +1 -0
- package/dist/components/hardware/device-io-controls.js +28 -0
- package/dist/components/hardware/device-list.d.ts +20 -0
- package/dist/components/hardware/device-list.d.ts.map +1 -0
- package/dist/components/hardware/device-list.js +14 -0
- package/dist/components/hardware/display-map.d.ts +23 -0
- package/dist/components/hardware/display-map.d.ts.map +1 -0
- package/dist/components/hardware/display-map.js +114 -0
- package/dist/components/hardware/haptic-button.d.ts +26 -0
- package/dist/components/hardware/haptic-button.d.ts.map +1 -0
- package/dist/components/hardware/haptic-button.js +94 -0
- package/dist/components/hardware/hardware-panel.d.ts +11 -0
- package/dist/components/hardware/hardware-panel.d.ts.map +1 -0
- package/dist/components/hardware/hardware-panel.js +28 -0
- package/dist/components/hardware/hid-panel.d.ts +40 -0
- package/dist/components/hardware/hid-panel.d.ts.map +1 -0
- package/dist/components/hardware/hid-panel.js +373 -0
- package/dist/components/hardware/index.d.ts +27 -0
- package/dist/components/hardware/index.d.ts.map +1 -0
- package/dist/components/hardware/index.js +26 -0
- package/dist/components/hardware/live-indicator.d.ts +15 -0
- package/dist/components/hardware/live-indicator.d.ts.map +1 -0
- package/dist/components/hardware/live-indicator.js +26 -0
- package/dist/components/hardware/local-auth-button.d.ts +33 -0
- package/dist/components/hardware/local-auth-button.d.ts.map +1 -0
- package/dist/components/hardware/local-auth-button.js +115 -0
- package/dist/components/hardware/location-panel.d.ts +29 -0
- package/dist/components/hardware/location-panel.d.ts.map +1 -0
- package/dist/components/hardware/location-panel.js +154 -0
- package/dist/components/hardware/microphone-meter.d.ts +35 -0
- package/dist/components/hardware/microphone-meter.d.ts.map +1 -0
- package/dist/components/hardware/microphone-meter.js +244 -0
- package/dist/components/hardware/midi-monitor.d.ts +54 -0
- package/dist/components/hardware/midi-monitor.d.ts.map +1 -0
- package/dist/components/hardware/midi-monitor.js +534 -0
- package/dist/components/hardware/notification-panel.d.ts +24 -0
- package/dist/components/hardware/notification-panel.d.ts.map +1 -0
- package/dist/components/hardware/notification-panel.js +124 -0
- package/dist/components/hardware/power-blocker-controller.d.ts +19 -0
- package/dist/components/hardware/power-blocker-controller.d.ts.map +1 -0
- package/dist/components/hardware/power-blocker-controller.js +83 -0
- package/dist/components/hardware/power-panel.d.ts +67 -0
- package/dist/components/hardware/power-panel.d.ts.map +1 -0
- package/dist/components/hardware/power-panel.js +309 -0
- package/dist/components/hardware/readout.d.ts +10 -0
- package/dist/components/hardware/readout.d.ts.map +1 -0
- package/dist/components/hardware/readout.js +11 -0
- package/dist/components/hardware/screen-share-preview.d.ts +36 -0
- package/dist/components/hardware/screen-share-preview.d.ts.map +1 -0
- package/dist/components/hardware/screen-share-preview.js +191 -0
- package/dist/components/hardware/secure-storage-panel.d.ts +36 -0
- package/dist/components/hardware/secure-storage-panel.d.ts.map +1 -0
- package/dist/components/hardware/secure-storage-panel.js +193 -0
- package/dist/components/hardware/serial-console.d.ts +64 -0
- package/dist/components/hardware/serial-console.d.ts.map +1 -0
- package/dist/components/hardware/serial-console.js +399 -0
- package/dist/components/hardware/shortcut-recorder.d.ts +35 -0
- package/dist/components/hardware/shortcut-recorder.d.ts.map +1 -0
- package/dist/components/hardware/shortcut-recorder.js +217 -0
- package/dist/components/hardware/stream-log.d.ts +35 -0
- package/dist/components/hardware/stream-log.d.ts.map +1 -0
- package/dist/components/hardware/stream-log.js +65 -0
- package/dist/components/hardware/system-audio-monitor.d.ts +34 -0
- package/dist/components/hardware/system-audio-monitor.d.ts.map +1 -0
- package/dist/components/hardware/system-audio-monitor.js +275 -0
- package/dist/components/hardware/usb-panel.d.ts +54 -0
- package/dist/components/hardware/usb-panel.d.ts.map +1 -0
- package/dist/components/hardware/usb-panel.js +363 -0
- package/dist/components/hardware/use-capability.d.ts +20 -0
- package/dist/components/hardware/use-capability.d.ts.map +1 -0
- package/dist/components/hardware/use-capability.js +61 -0
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/slider.d.ts +4 -1
- package/dist/components/ui/slider.d.ts.map +1 -1
- package/dist/components/ui/slider.js +2 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/lib/commands.d.ts +59 -0
- package/dist/lib/commands.d.ts.map +1 -1
- package/dist/lib/commands.js +97 -0
- package/dist/lib/native-hardware/bluetooth-access.d.ts +14 -0
- package/dist/lib/native-hardware/bluetooth-access.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-access.js +40 -0
- package/dist/lib/native-hardware/bluetooth-connection.d.ts +19 -0
- package/dist/lib/native-hardware/bluetooth-connection.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-connection.js +88 -0
- package/dist/lib/native-hardware/bluetooth-gatt.d.ts +7 -0
- package/dist/lib/native-hardware/bluetooth-gatt.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-gatt.js +77 -0
- package/dist/lib/native-hardware/bluetooth-internal.d.ts +10 -0
- package/dist/lib/native-hardware/bluetooth-internal.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-internal.js +105 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts +33 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-native-fallback.js +214 -0
- package/dist/lib/native-hardware/bluetooth-types.d.ts +85 -0
- package/dist/lib/native-hardware/bluetooth-types.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth-types.js +2 -0
- package/dist/lib/native-hardware/bluetooth.d.ts +7 -0
- package/dist/lib/native-hardware/bluetooth.d.ts.map +1 -0
- package/dist/lib/native-hardware/bluetooth.js +4 -0
- package/dist/lib/native-hardware/bridge.d.ts +23 -0
- package/dist/lib/native-hardware/bridge.d.ts.map +1 -0
- package/dist/lib/native-hardware/bridge.js +266 -0
- package/dist/lib/native-hardware/capabilities.d.ts +7 -0
- package/dist/lib/native-hardware/capabilities.d.ts.map +1 -0
- package/dist/lib/native-hardware/capabilities.js +95 -0
- package/dist/lib/native-hardware/clipboard.d.ts +11 -0
- package/dist/lib/native-hardware/clipboard.d.ts.map +1 -0
- package/dist/lib/native-hardware/clipboard.js +55 -0
- package/dist/lib/native-hardware/device-io-errors.d.ts +11 -0
- package/dist/lib/native-hardware/device-io-errors.d.ts.map +1 -0
- package/dist/lib/native-hardware/device-io-errors.js +82 -0
- package/dist/lib/native-hardware/displays.d.ts +38 -0
- package/dist/lib/native-hardware/displays.d.ts.map +1 -0
- package/dist/lib/native-hardware/displays.js +12 -0
- package/dist/lib/native-hardware/global-shortcuts.d.ts +86 -0
- package/dist/lib/native-hardware/global-shortcuts.d.ts.map +1 -0
- package/dist/lib/native-hardware/global-shortcuts.js +351 -0
- package/dist/lib/native-hardware/haptics.d.ts +25 -0
- package/dist/lib/native-hardware/haptics.d.ts.map +1 -0
- package/dist/lib/native-hardware/haptics.js +18 -0
- package/dist/lib/native-hardware/hid-native.d.ts +26 -0
- package/dist/lib/native-hardware/hid-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/hid-native.js +229 -0
- package/dist/lib/native-hardware/hid.d.ts +52 -0
- package/dist/lib/native-hardware/hid.d.ts.map +1 -0
- package/dist/lib/native-hardware/hid.js +160 -0
- package/dist/lib/native-hardware/index.d.ts +38 -0
- package/dist/lib/native-hardware/index.d.ts.map +1 -0
- package/dist/lib/native-hardware/index.js +20 -0
- package/dist/lib/native-hardware/local-authentication.d.ts +32 -0
- package/dist/lib/native-hardware/local-authentication.d.ts.map +1 -0
- package/dist/lib/native-hardware/local-authentication.js +46 -0
- package/dist/lib/native-hardware/location.d.ts +49 -0
- package/dist/lib/native-hardware/location.d.ts.map +1 -0
- package/dist/lib/native-hardware/location.js +114 -0
- package/dist/lib/native-hardware/media-permissions.d.ts +28 -0
- package/dist/lib/native-hardware/media-permissions.d.ts.map +1 -0
- package/dist/lib/native-hardware/media-permissions.js +37 -0
- package/dist/lib/native-hardware/media.d.ts +17 -0
- package/dist/lib/native-hardware/media.d.ts.map +1 -0
- package/dist/lib/native-hardware/media.js +99 -0
- package/dist/lib/native-hardware/midi-access.d.ts +13 -0
- package/dist/lib/native-hardware/midi-access.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-access.js +66 -0
- package/dist/lib/native-hardware/midi-internal.d.ts +12 -0
- package/dist/lib/native-hardware/midi-internal.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-internal.js +88 -0
- package/dist/lib/native-hardware/midi-native-fallback.d.ts +27 -0
- package/dist/lib/native-hardware/midi-native-fallback.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-native-fallback.js +127 -0
- package/dist/lib/native-hardware/midi-ports.d.ts +6 -0
- package/dist/lib/native-hardware/midi-ports.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-ports.js +115 -0
- package/dist/lib/native-hardware/midi-types.d.ts +25 -0
- package/dist/lib/native-hardware/midi-types.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi-types.js +1 -0
- package/dist/lib/native-hardware/midi.d.ts +6 -0
- package/dist/lib/native-hardware/midi.d.ts.map +1 -0
- package/dist/lib/native-hardware/midi.js +3 -0
- package/dist/lib/native-hardware/native-device-io.d.ts +28 -0
- package/dist/lib/native-hardware/native-device-io.d.ts.map +1 -0
- package/dist/lib/native-hardware/native-device-io.js +91 -0
- package/dist/lib/native-hardware/native-device-lifecycle.d.ts +13 -0
- package/dist/lib/native-hardware/native-device-lifecycle.d.ts.map +1 -0
- package/dist/lib/native-hardware/native-device-lifecycle.js +40 -0
- package/dist/lib/native-hardware/notifications.d.ts +38 -0
- package/dist/lib/native-hardware/notifications.d.ts.map +1 -0
- package/dist/lib/native-hardware/notifications.js +50 -0
- package/dist/lib/native-hardware/power-session.d.ts +113 -0
- package/dist/lib/native-hardware/power-session.d.ts.map +1 -0
- package/dist/lib/native-hardware/power-session.js +264 -0
- package/dist/lib/native-hardware/secure-storage.d.ts +36 -0
- package/dist/lib/native-hardware/secure-storage.d.ts.map +1 -0
- package/dist/lib/native-hardware/secure-storage.js +64 -0
- package/dist/lib/native-hardware/serial-native.d.ts +23 -0
- package/dist/lib/native-hardware/serial-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/serial-native.js +181 -0
- package/dist/lib/native-hardware/serial.d.ts +76 -0
- package/dist/lib/native-hardware/serial.d.ts.map +1 -0
- package/dist/lib/native-hardware/serial.js +212 -0
- package/dist/lib/native-hardware/system-audio.d.ts +127 -0
- package/dist/lib/native-hardware/system-audio.d.ts.map +1 -0
- package/dist/lib/native-hardware/system-audio.js +330 -0
- package/dist/lib/native-hardware/types.d.ts +62 -0
- package/dist/lib/native-hardware/types.d.ts.map +1 -0
- package/dist/lib/native-hardware/types.js +27 -0
- package/dist/lib/native-hardware/usb-native.d.ts +39 -0
- package/dist/lib/native-hardware/usb-native.d.ts.map +1 -0
- package/dist/lib/native-hardware/usb-native.js +217 -0
- package/dist/lib/native-hardware/usb.d.ts +85 -0
- package/dist/lib/native-hardware/usb.d.ts.map +1 -0
- package/dist/lib/native-hardware/usb.js +222 -0
- package/package.json +1 -1
- package/src/styles/index.css +377 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { NATIVE_HARDWARE_CAPABILITY_IDS, NATIVE_HARDWARE_MANIFEST_SCHEMA_VERSION, } from './types';
|
|
2
|
+
const CAPABILITY_IDS = new Set(NATIVE_HARDWARE_CAPABILITY_IDS);
|
|
3
|
+
const PLATFORMS = new Set(['macos', 'windows', 'linux', 'unknown']);
|
|
4
|
+
const SUPPORT_LEVELS = new Set(['supported', 'partial', 'unsupported']);
|
|
5
|
+
const TRANSPORT_KINDS = new Set([
|
|
6
|
+
'web-api',
|
|
7
|
+
'desktop-bridge',
|
|
8
|
+
'tauri-command',
|
|
9
|
+
'hybrid',
|
|
10
|
+
'unavailable',
|
|
11
|
+
]);
|
|
12
|
+
const PERMISSION_NAMES = new Set([
|
|
13
|
+
'camera',
|
|
14
|
+
'microphone',
|
|
15
|
+
'screen-recording',
|
|
16
|
+
'location',
|
|
17
|
+
'clipboard-read',
|
|
18
|
+
'clipboard-write',
|
|
19
|
+
'notifications',
|
|
20
|
+
'global-shortcuts',
|
|
21
|
+
'local-authentication',
|
|
22
|
+
'secure-storage',
|
|
23
|
+
'usb',
|
|
24
|
+
'hid',
|
|
25
|
+
'serial',
|
|
26
|
+
'midi',
|
|
27
|
+
'bluetooth',
|
|
28
|
+
'none',
|
|
29
|
+
]);
|
|
30
|
+
const PERMISSION_AUTHORITIES = new Set([
|
|
31
|
+
'webview',
|
|
32
|
+
'operating-system',
|
|
33
|
+
'both',
|
|
34
|
+
'none',
|
|
35
|
+
]);
|
|
36
|
+
const PERMISSION_REQUESTS = new Set([
|
|
37
|
+
'on-use',
|
|
38
|
+
'explicit',
|
|
39
|
+
'system-settings',
|
|
40
|
+
'none',
|
|
41
|
+
]);
|
|
42
|
+
function isRecord(value) {
|
|
43
|
+
return typeof value === 'object' && value !== null;
|
|
44
|
+
}
|
|
45
|
+
export function isNativeHardwareCapabilityId(value) {
|
|
46
|
+
return typeof value === 'string' && CAPABILITY_IDS.has(value);
|
|
47
|
+
}
|
|
48
|
+
export function isNativeHardwareCapabilityDescriptor(value, expectedId) {
|
|
49
|
+
if (!isRecord(value) || !isNativeHardwareCapabilityId(value.id))
|
|
50
|
+
return false;
|
|
51
|
+
if (expectedId && value.id !== expectedId)
|
|
52
|
+
return false;
|
|
53
|
+
if (typeof value.support !== 'string' || !SUPPORT_LEVELS.has(value.support)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (!isRecord(value.transport))
|
|
57
|
+
return false;
|
|
58
|
+
if (typeof value.transport.kind !== 'string' ||
|
|
59
|
+
!TRANSPORT_KINDS.has(value.transport.kind) ||
|
|
60
|
+
typeof value.transport.name !== 'string') {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (!isRecord(value.permission))
|
|
64
|
+
return false;
|
|
65
|
+
if (typeof value.permission.name !== 'string' ||
|
|
66
|
+
!PERMISSION_NAMES.has(value.permission.name) ||
|
|
67
|
+
typeof value.permission.required !== 'boolean' ||
|
|
68
|
+
typeof value.permission.authority !== 'string' ||
|
|
69
|
+
!PERMISSION_AUTHORITIES.has(value.permission.authority) ||
|
|
70
|
+
typeof value.permission.request !== 'string' ||
|
|
71
|
+
!PERMISSION_REQUESTS.has(value.permission.request)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return value.reason === undefined || typeof value.reason === 'string';
|
|
75
|
+
}
|
|
76
|
+
export function isNativeHardwareCapabilityManifest(value) {
|
|
77
|
+
if (!isRecord(value))
|
|
78
|
+
return false;
|
|
79
|
+
if (value.schemaVersion !== NATIVE_HARDWARE_MANIFEST_SCHEMA_VERSION) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (typeof value.platform !== 'string' || !PLATFORMS.has(value.platform)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
if (!isRecord(value.capabilities))
|
|
86
|
+
return false;
|
|
87
|
+
const capabilities = value.capabilities;
|
|
88
|
+
return NATIVE_HARDWARE_CAPABILITY_IDS.every((id) => isNativeHardwareCapabilityDescriptor(capabilities[id], id));
|
|
89
|
+
}
|
|
90
|
+
export function getNativeHardwareCapability(manifest, id) {
|
|
91
|
+
return manifest.capabilities[id];
|
|
92
|
+
}
|
|
93
|
+
export function supportsNativeHardwareCapability(manifest, id) {
|
|
94
|
+
return getNativeHardwareCapability(manifest, id).support !== 'unsupported';
|
|
95
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads plain text from the clipboard. Browsers generally require a secure context,
|
|
3
|
+
* clipboard permission, and a recent user gesture for reads.
|
|
4
|
+
*/
|
|
5
|
+
export declare function readMoldableClipboardText(): Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* Writes plain text to the clipboard. Browsers require a secure context and may
|
|
8
|
+
* require this call to run directly in response to a user gesture.
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeMoldableClipboardText(text: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/lib/native-hardware/clipboard.ts"],"names":[],"mappings":"AA6DA;;;GAGG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { NativeHardwareBridgeError, toNativeHardwareBridgeError, } from './bridge';
|
|
2
|
+
function clipboardFor(capability, method) {
|
|
3
|
+
if (typeof navigator === 'undefined' ||
|
|
4
|
+
!navigator.clipboard ||
|
|
5
|
+
typeof navigator.clipboard[method] !== 'function') {
|
|
6
|
+
throw clipboardError(capability, new DOMException('Clipboard API unavailable', 'NotSupportedError'));
|
|
7
|
+
}
|
|
8
|
+
return navigator.clipboard;
|
|
9
|
+
}
|
|
10
|
+
function clipboardError(capability, error) {
|
|
11
|
+
if (error instanceof NativeHardwareBridgeError)
|
|
12
|
+
return error;
|
|
13
|
+
const name = error instanceof DOMException ? error.name : undefined;
|
|
14
|
+
let code = 'host_error';
|
|
15
|
+
if (name === 'NotSupportedError')
|
|
16
|
+
code = 'unsupported';
|
|
17
|
+
else if (name === 'NotAllowedError' || name === 'SecurityError') {
|
|
18
|
+
code = 'permission_denied';
|
|
19
|
+
}
|
|
20
|
+
const fallbackMessage = `Unable to ${capability === 'clipboard-read' ? 'read' : 'write'} clipboard text`;
|
|
21
|
+
return toNativeHardwareBridgeError({
|
|
22
|
+
code,
|
|
23
|
+
message: error instanceof Error
|
|
24
|
+
? error.message || fallbackMessage
|
|
25
|
+
: fallbackMessage,
|
|
26
|
+
details: { capability, ...(name ? { cause: name } : {}) },
|
|
27
|
+
retryable: false,
|
|
28
|
+
}, fallbackMessage);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Reads plain text from the clipboard. Browsers generally require a secure context,
|
|
32
|
+
* clipboard permission, and a recent user gesture for reads.
|
|
33
|
+
*/
|
|
34
|
+
export async function readMoldableClipboardText() {
|
|
35
|
+
const capability = 'clipboard-read';
|
|
36
|
+
try {
|
|
37
|
+
return await clipboardFor(capability, 'readText').readText();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw clipboardError(capability, error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Writes plain text to the clipboard. Browsers require a secure context and may
|
|
45
|
+
* require this call to run directly in response to a user gesture.
|
|
46
|
+
*/
|
|
47
|
+
export async function writeMoldableClipboardText(text) {
|
|
48
|
+
const capability = 'clipboard-write';
|
|
49
|
+
try {
|
|
50
|
+
await clipboardFor(capability, 'writeText').writeText(text);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw clipboardError(capability, error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NativeHardwareBridgeError } from './bridge';
|
|
2
|
+
export type DeviceIoOperation = 'enumerate' | 'request' | 'open' | 'close' | 'read' | 'write';
|
|
3
|
+
export declare function deviceIoError(capability: 'usb' | 'hid' | 'serial', operation: DeviceIoOperation, error: unknown): NativeHardwareBridgeError;
|
|
4
|
+
export declare function unsupportedDeviceIoError(capability: 'usb' | 'hid' | 'serial'): NativeHardwareBridgeError;
|
|
5
|
+
export declare function abortedDeviceIoError(capability: 'usb' | 'hid' | 'serial', operation: DeviceIoOperation): NativeHardwareBridgeError;
|
|
6
|
+
/**
|
|
7
|
+
* Rejects promptly when the caller aborts. The browser operation itself may
|
|
8
|
+
* continue when its underlying standard does not accept an AbortSignal.
|
|
9
|
+
*/
|
|
10
|
+
export declare function awaitDeviceIoWithAbort<T>(promise: Promise<T>, capability: 'usb' | 'hid' | 'serial', operation: DeviceIoOperation, signal?: AbortSignal): Promise<T>;
|
|
11
|
+
//# sourceMappingURL=device-io-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-io-errors.d.ts","sourceRoot":"","sources":["../../../src/lib/native-hardware/device-io-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAE1B,MAAM,UAAU,CAAA;AAGjB,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,SAAS,GACT,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,CAAA;AA8BX,wBAAgB,aAAa,CAC3B,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,EACpC,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,OAAO,GACb,yBAAyB,CAuB3B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GACnC,yBAAyB,CAO3B;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,EACpC,SAAS,EAAE,iBAAiB,GAC3B,yBAAyB,CAO3B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,EACpC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAuBZ"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { NativeHardwareBridgeError, toNativeHardwareBridgeError, } from './bridge';
|
|
2
|
+
function errorCodeFor(error, operation) {
|
|
3
|
+
if (error instanceof NativeHardwareBridgeError)
|
|
4
|
+
return error.code;
|
|
5
|
+
const name = error instanceof DOMException ? error.name : undefined;
|
|
6
|
+
if (name === 'NotSupportedError')
|
|
7
|
+
return 'unsupported';
|
|
8
|
+
if (name === 'NotAllowedError' || name === 'SecurityError') {
|
|
9
|
+
return 'permission_denied';
|
|
10
|
+
}
|
|
11
|
+
if (name === 'AbortError')
|
|
12
|
+
return 'aborted';
|
|
13
|
+
if (name === 'NotFoundError') {
|
|
14
|
+
return operation === 'request' ? 'cancelled' : 'unavailable';
|
|
15
|
+
}
|
|
16
|
+
if (name === 'InvalidStateError' ||
|
|
17
|
+
name === 'DataError' ||
|
|
18
|
+
error instanceof TypeError) {
|
|
19
|
+
return 'invalid_request';
|
|
20
|
+
}
|
|
21
|
+
if (name === 'NetworkError')
|
|
22
|
+
return 'unavailable';
|
|
23
|
+
return 'host_error';
|
|
24
|
+
}
|
|
25
|
+
export function deviceIoError(capability, operation, error) {
|
|
26
|
+
if (error instanceof NativeHardwareBridgeError)
|
|
27
|
+
return error;
|
|
28
|
+
const code = errorCodeFor(error, operation);
|
|
29
|
+
const cause = error instanceof DOMException ? error.name : undefined;
|
|
30
|
+
const fallbackMessage = `Unable to ${operation} ${capability} device.`;
|
|
31
|
+
return toNativeHardwareBridgeError({
|
|
32
|
+
code,
|
|
33
|
+
message: error instanceof Error && error.message
|
|
34
|
+
? error.message
|
|
35
|
+
: fallbackMessage,
|
|
36
|
+
details: { capability, operation, ...(cause ? { cause } : {}) },
|
|
37
|
+
retryable: code === 'unavailable' ||
|
|
38
|
+
code === 'cancelled' ||
|
|
39
|
+
code === 'aborted' ||
|
|
40
|
+
code === 'host_error',
|
|
41
|
+
}, fallbackMessage);
|
|
42
|
+
}
|
|
43
|
+
export function unsupportedDeviceIoError(capability) {
|
|
44
|
+
return new NativeHardwareBridgeError({
|
|
45
|
+
code: 'unsupported',
|
|
46
|
+
message: `This runtime does not expose the Web ${capability.toUpperCase()} API.`,
|
|
47
|
+
details: { capability },
|
|
48
|
+
retryable: false,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function abortedDeviceIoError(capability, operation) {
|
|
52
|
+
return new NativeHardwareBridgeError({
|
|
53
|
+
code: 'aborted',
|
|
54
|
+
message: `${capability.toUpperCase()} ${operation} was aborted.`,
|
|
55
|
+
details: { capability, operation },
|
|
56
|
+
retryable: true,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Rejects promptly when the caller aborts. The browser operation itself may
|
|
61
|
+
* continue when its underlying standard does not accept an AbortSignal.
|
|
62
|
+
*/
|
|
63
|
+
export function awaitDeviceIoWithAbort(promise, capability, operation, signal) {
|
|
64
|
+
if (!signal)
|
|
65
|
+
return promise;
|
|
66
|
+
if (signal.aborted) {
|
|
67
|
+
return Promise.reject(abortedDeviceIoError(capability, operation));
|
|
68
|
+
}
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const handleAbort = () => {
|
|
71
|
+
reject(abortedDeviceIoError(capability, operation));
|
|
72
|
+
};
|
|
73
|
+
signal.addEventListener('abort', handleAbort, { once: true });
|
|
74
|
+
promise.then((value) => {
|
|
75
|
+
signal.removeEventListener('abort', handleAbort);
|
|
76
|
+
resolve(value);
|
|
77
|
+
}, (error) => {
|
|
78
|
+
signal.removeEventListener('abort', handleAbort);
|
|
79
|
+
reject(error);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { NativeHardwareRequestEnvelope, NativeHardwareResultEnvelope } from './types';
|
|
2
|
+
export declare const NATIVE_DISPLAYS_REQUEST_TYPE: "moldable:native-displays";
|
|
3
|
+
export declare const NATIVE_DISPLAYS_RESULT_TYPE: "moldable:native-displays-result";
|
|
4
|
+
/** A position in physical screen pixels within the virtual desktop. */
|
|
5
|
+
export interface MoldableDisplayPosition {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
}
|
|
9
|
+
/** A size in physical screen pixels. */
|
|
10
|
+
export interface MoldableDisplaySize {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
}
|
|
14
|
+
/** Serializable display metadata. This API never returns screen pixels. */
|
|
15
|
+
export interface MoldableDisplay {
|
|
16
|
+
name: string | null;
|
|
17
|
+
position: MoldableDisplayPosition;
|
|
18
|
+
size: MoldableDisplaySize;
|
|
19
|
+
scaleFactor: number;
|
|
20
|
+
primary: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface MoldableDisplaysResult {
|
|
23
|
+
displays: MoldableDisplay[];
|
|
24
|
+
}
|
|
25
|
+
export type MoldableDisplaysRequest = NativeHardwareRequestEnvelope<typeof NATIVE_DISPLAYS_REQUEST_TYPE>;
|
|
26
|
+
export type MoldableDisplaysResultMessage = NativeHardwareResultEnvelope<typeof NATIVE_DISPLAYS_RESULT_TYPE, MoldableDisplaysResult>;
|
|
27
|
+
export interface GetMoldableDisplaysOptions {
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Query metadata for the displays attached to the native desktop host.
|
|
33
|
+
*
|
|
34
|
+
* This is intentionally a one-shot query. Display polling and change events are
|
|
35
|
+
* not exposed because monitor metadata can contribute to device fingerprinting.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getMoldableDisplays(options?: GetMoldableDisplaysOptions): Promise<MoldableDisplaysResult>;
|
|
38
|
+
//# sourceMappingURL=displays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../../src/lib/native-hardware/displays.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,4BAA4B,EAAG,0BAAmC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EACtC,iCAA0C,CAAA;AAE5C,uEAAuE;AACvE,MAAM,WAAW,uBAAuB;IACtC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,uBAAuB,CAAA;IACjC,IAAI,EAAE,mBAAmB,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CACjE,OAAO,4BAA4B,CACpC,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,4BAA4B,CACtE,OAAO,2BAA2B,EAClC,sBAAsB,CACvB,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,sBAAsB,CAAC,CAMjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { callNativeHardwareBridge } from './bridge';
|
|
2
|
+
export const NATIVE_DISPLAYS_REQUEST_TYPE = 'moldable:native-displays';
|
|
3
|
+
export const NATIVE_DISPLAYS_RESULT_TYPE = 'moldable:native-displays-result';
|
|
4
|
+
/**
|
|
5
|
+
* Query metadata for the displays attached to the native desktop host.
|
|
6
|
+
*
|
|
7
|
+
* This is intentionally a one-shot query. Display polling and change events are
|
|
8
|
+
* not exposed because monitor metadata can contribute to device fingerprinting.
|
|
9
|
+
*/
|
|
10
|
+
export function getMoldableDisplays(options = {}) {
|
|
11
|
+
return callNativeHardwareBridge({ type: NATIVE_DISPLAYS_REQUEST_TYPE }, NATIVE_DISPLAYS_RESULT_TYPE, options);
|
|
12
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type NativeHardwareBridgeOptions } from './bridge';
|
|
2
|
+
import type { NativeHardwareRequestEnvelope, NativeHardwareResultEnvelope } from './types';
|
|
3
|
+
export declare const NATIVE_GLOBAL_SHORTCUT_REQUEST_TYPE: "moldable:native-global-shortcuts";
|
|
4
|
+
export declare const NATIVE_GLOBAL_SHORTCUT_RESULT_TYPE: "moldable:native-global-shortcuts-result";
|
|
5
|
+
export declare const NATIVE_GLOBAL_SHORTCUT_EVENT_TYPE: "moldable:native-global-shortcut-event";
|
|
6
|
+
export declare const NATIVE_GLOBAL_SHORTCUT_MAX_LENGTH = 128;
|
|
7
|
+
export declare const NATIVE_GLOBAL_SHORTCUT_MAX_PER_APP = 32;
|
|
8
|
+
export type MoldableGlobalShortcutState = 'Pressed' | 'Released';
|
|
9
|
+
export interface MoldableGlobalShortcutEvent {
|
|
10
|
+
registrationId: string;
|
|
11
|
+
shortcut: string;
|
|
12
|
+
state: MoldableGlobalShortcutState;
|
|
13
|
+
}
|
|
14
|
+
export type MoldableGlobalShortcutHandler = (event: MoldableGlobalShortcutEvent) => void;
|
|
15
|
+
export interface MoldableGlobalShortcutRegistration {
|
|
16
|
+
readonly registrationId: string;
|
|
17
|
+
readonly shortcut: string;
|
|
18
|
+
unregister(options?: NativeHardwareBridgeOptions): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface NativeGlobalShortcutRegistrationInput {
|
|
21
|
+
registrationId: string;
|
|
22
|
+
shortcut: string;
|
|
23
|
+
}
|
|
24
|
+
export type NativeGlobalShortcutRequest = NativeHardwareRequestEnvelope<typeof NATIVE_GLOBAL_SHORTCUT_REQUEST_TYPE, {
|
|
25
|
+
capability: 'global-shortcuts';
|
|
26
|
+
action: 'register';
|
|
27
|
+
registrationId: string;
|
|
28
|
+
shortcut: string;
|
|
29
|
+
} | {
|
|
30
|
+
capability: 'global-shortcuts';
|
|
31
|
+
action: 'unregister';
|
|
32
|
+
registrationId: string;
|
|
33
|
+
} | {
|
|
34
|
+
capability: 'global-shortcuts';
|
|
35
|
+
action: 'unregisterAll';
|
|
36
|
+
} | {
|
|
37
|
+
capability: 'global-shortcuts';
|
|
38
|
+
action: 'registerAll';
|
|
39
|
+
registrations: NativeGlobalShortcutRegistrationInput[];
|
|
40
|
+
} | {
|
|
41
|
+
capability: 'global-shortcuts';
|
|
42
|
+
action: 'isRegistered';
|
|
43
|
+
shortcut: string;
|
|
44
|
+
} | {
|
|
45
|
+
capability: 'global-shortcuts';
|
|
46
|
+
action: 'setSuspended';
|
|
47
|
+
suspended: boolean;
|
|
48
|
+
} | {
|
|
49
|
+
capability: 'global-shortcuts';
|
|
50
|
+
action: 'isSuspended';
|
|
51
|
+
}>;
|
|
52
|
+
export interface NativeGlobalShortcutRegistrationResult {
|
|
53
|
+
registered: true;
|
|
54
|
+
registrationId: string;
|
|
55
|
+
shortcut: string;
|
|
56
|
+
}
|
|
57
|
+
export interface NativeGlobalShortcutUnregisterResult {
|
|
58
|
+
unregistered: true;
|
|
59
|
+
registrationId: string;
|
|
60
|
+
}
|
|
61
|
+
export interface NativeGlobalShortcutUnregisterAllResult {
|
|
62
|
+
unregisteredCount: number;
|
|
63
|
+
}
|
|
64
|
+
export interface NativeGlobalShortcutRegisterAllResult {
|
|
65
|
+
registered: true;
|
|
66
|
+
registrations: NativeGlobalShortcutRegistrationResult[];
|
|
67
|
+
}
|
|
68
|
+
export interface NativeGlobalShortcutIsRegisteredResult {
|
|
69
|
+
registered: boolean;
|
|
70
|
+
shortcut: string;
|
|
71
|
+
}
|
|
72
|
+
export interface NativeGlobalShortcutSuspendedResult {
|
|
73
|
+
suspended: boolean;
|
|
74
|
+
}
|
|
75
|
+
export type NativeGlobalShortcutResult = NativeHardwareResultEnvelope<typeof NATIVE_GLOBAL_SHORTCUT_RESULT_TYPE, NativeGlobalShortcutRegistrationResult | NativeGlobalShortcutUnregisterResult | NativeGlobalShortcutUnregisterAllResult | NativeGlobalShortcutRegisterAllResult | NativeGlobalShortcutIsRegisteredResult | NativeGlobalShortcutSuspendedResult>;
|
|
76
|
+
export declare function isMoldableGlobalShortcut(value: unknown): value is string;
|
|
77
|
+
export declare function registerMoldableGlobalShortcut(shortcut: string, handler: MoldableGlobalShortcutHandler, options?: NativeHardwareBridgeOptions): Promise<MoldableGlobalShortcutRegistration>;
|
|
78
|
+
export declare function registerAllMoldableGlobalShortcuts(shortcuts: readonly string[], handler: MoldableGlobalShortcutHandler, options?: NativeHardwareBridgeOptions): Promise<MoldableGlobalShortcutRegistration[]>;
|
|
79
|
+
export declare function isMoldableGlobalShortcutRegistered(shortcut: string, options?: NativeHardwareBridgeOptions): Promise<boolean>;
|
|
80
|
+
export declare function setMoldableGlobalShortcutsSuspended(suspended: boolean, options?: NativeHardwareBridgeOptions): Promise<void>;
|
|
81
|
+
export declare function areMoldableGlobalShortcutsSuspended(options?: NativeHardwareBridgeOptions): Promise<boolean>;
|
|
82
|
+
export declare function unregisterMoldableGlobalShortcut(registrationId: string, options?: NativeHardwareBridgeOptions): Promise<void>;
|
|
83
|
+
export declare function unregisterAllMoldableGlobalShortcuts(options?: NativeHardwareBridgeOptions): Promise<NativeGlobalShortcutUnregisterAllResult>;
|
|
84
|
+
/** Test-only reset for module-level event delivery state. */
|
|
85
|
+
export declare function resetMoldableGlobalShortcutClientForTests(): void;
|
|
86
|
+
//# sourceMappingURL=global-shortcuts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-shortcuts.d.ts","sourceRoot":"","sources":["../../../src/lib/native-hardware/global-shortcuts.ts"],"names":[],"mappings":"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"}
|