@aitos/input 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.
- package/dist/index.d.ts +5 -0
- package/dist/index.js +33 -0
- package/dist/interact.d.ts +3 -0
- package/dist/interact.js +82 -0
- package/dist/keyboard.d.ts +2 -0
- package/dist/keyboard.js +32 -0
- package/dist/pointer.d.ts +5 -0
- package/dist/pointer.js +176 -0
- package/package.json +32 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.allAtoms = void 0;
|
|
18
|
+
__exportStar(require("./pointer"), exports);
|
|
19
|
+
__exportStar(require("./keyboard"), exports);
|
|
20
|
+
__exportStar(require("./interact"), exports);
|
|
21
|
+
const pointer_1 = require("./pointer");
|
|
22
|
+
const keyboard_1 = require("./keyboard");
|
|
23
|
+
const interact_1 = require("./interact");
|
|
24
|
+
exports.allAtoms = [
|
|
25
|
+
pointer_1.getMousePositionAtom,
|
|
26
|
+
pointer_1.getTouchAtom,
|
|
27
|
+
pointer_1.addEventListenerAtom,
|
|
28
|
+
pointer_1.removeEventListenerAtom,
|
|
29
|
+
keyboard_1.getKeyAtom,
|
|
30
|
+
interact_1.showFilePickerAtom,
|
|
31
|
+
interact_1.readFileAtom,
|
|
32
|
+
];
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQiw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBRzNCLHVDQUttQjtBQUNuQix5Q0FFb0I7QUFDcEIseUNBR29CO0FBRVAsUUFBQSxRQUFRLEdBQVc7SUFDOUIsOEJBQW9CO0lBQ3BCLHNCQUFZO0lBQ1osOEJBQW9CO0lBQ3BCLGlDQUF1QjtJQUN2QixxQkFBVTtJQUNWLDZCQUFrQjtJQUNsQix1QkFBWTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BvaW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyYWN0JztcblxuaW1wb3J0IHsgQXRvbSB9IGZyb20gJ0BhaXRvcy9jb3JlJztcbmltcG9ydCB7XG4gIGdldE1vdXNlUG9zaXRpb25BdG9tLFxuICBnZXRUb3VjaEF0b20sXG4gIGFkZEV2ZW50TGlzdGVuZXJBdG9tLFxuICByZW1vdmVFdmVudExpc3RlbmVyQXRvbSxcbn0gZnJvbSAnLi9wb2ludGVyJztcbmltcG9ydCB7XG4gIGdldEtleUF0b20sXG59IGZyb20gJy4va2V5Ym9hcmQnO1xuaW1wb3J0IHtcbiAgc2hvd0ZpbGVQaWNrZXJBdG9tLFxuICByZWFkRmlsZUF0b20sXG59IGZyb20gJy4vaW50ZXJhY3QnO1xuXG5leHBvcnQgY29uc3QgYWxsQXRvbXM6IEF0b21bXSA9IFtcbiAgZ2V0TW91c2VQb3NpdGlvbkF0b20sXG4gIGdldFRvdWNoQXRvbSxcbiAgYWRkRXZlbnRMaXN0ZW5lckF0b20sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXJBdG9tLFxuICBnZXRLZXlBdG9tLFxuICBzaG93RmlsZVBpY2tlckF0b20sXG4gIHJlYWRGaWxlQXRvbSxcbl07XG4iXX0=
|
package/dist/interact.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readFileAtom = exports.showFilePickerAtom = void 0;
|
|
4
|
+
exports.showFilePickerAtom = {
|
|
5
|
+
name: 'showFilePicker',
|
|
6
|
+
version: '1.0.0',
|
|
7
|
+
meta: {
|
|
8
|
+
input: [
|
|
9
|
+
{ name: 'accept', type: 'string', description: 'File types to accept (e.g. ".jpg,.png")' },
|
|
10
|
+
{ name: 'multiple', type: 'boolean', description: 'Allow multiple file selection' }
|
|
11
|
+
],
|
|
12
|
+
output: { type: 'object', description: 'Selected file(s) or FileList' }
|
|
13
|
+
},
|
|
14
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
15
|
+
execute: async (input, context) => {
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
if (typeof document === 'undefined') {
|
|
18
|
+
resolve({ success: false, error: 'File picker not available' });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const inputEl = document.createElement('input');
|
|
22
|
+
inputEl.type = 'file';
|
|
23
|
+
if (input.accept)
|
|
24
|
+
inputEl.accept = input.accept;
|
|
25
|
+
if (input.multiple)
|
|
26
|
+
inputEl.multiple = true;
|
|
27
|
+
inputEl.onchange = () => {
|
|
28
|
+
if (inputEl.files && inputEl.files.length > 0) {
|
|
29
|
+
if (input.multiple) {
|
|
30
|
+
resolve({ success: true, data: Array.from(inputEl.files) });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
resolve({ success: true, data: inputEl.files[0] });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
resolve({ success: false, error: 'No file selected' });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
inputEl.click();
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
exports.readFileAtom = {
|
|
45
|
+
name: 'readFile',
|
|
46
|
+
version: '1.0.0',
|
|
47
|
+
meta: {
|
|
48
|
+
input: [
|
|
49
|
+
{ name: 'file', type: 'object', description: 'File object to read' },
|
|
50
|
+
{ name: 'encoding', type: 'string', description: 'Encoding type: text, dataURL, arrayBuffer' }
|
|
51
|
+
],
|
|
52
|
+
output: { type: 'string', description: 'File content' }
|
|
53
|
+
},
|
|
54
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
55
|
+
execute: async (input, context) => {
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
if (!input.file) {
|
|
58
|
+
resolve({ success: false, error: 'No file provided' });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const reader = new FileReader();
|
|
62
|
+
const encoding = input.encoding || 'text';
|
|
63
|
+
reader.onload = () => {
|
|
64
|
+
resolve({ success: true, data: reader.result });
|
|
65
|
+
};
|
|
66
|
+
reader.onerror = () => {
|
|
67
|
+
resolve({ success: false, error: 'Failed to read file' });
|
|
68
|
+
};
|
|
69
|
+
switch (encoding) {
|
|
70
|
+
case 'dataURL':
|
|
71
|
+
reader.readAsDataURL(input.file);
|
|
72
|
+
break;
|
|
73
|
+
case 'arrayBuffer':
|
|
74
|
+
reader.readAsArrayBuffer(input.file);
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
reader.readAsText(input.file);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbnRlcmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLGtCQUFrQixHQUFTO0lBQ3RDLElBQUksRUFBRSxnQkFBZ0I7SUFDdEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsSUFBSSxFQUFFO1FBQ0osS0FBSyxFQUFFO1lBQ0wsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHlDQUF5QyxFQUFFO1lBQzFGLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtTQUNwRjtRQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFO0tBQ3hFO0lBQ0QsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUE4QyxFQUFFLE9BQWdCLEVBQW1CLEVBQUU7UUFDbkcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQztnQkFDaEUsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3RCLElBQUksS0FBSyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2hELElBQUksS0FBSyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFNUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ25CLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDOUQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsWUFBWSxHQUFTO0lBQ2hDLElBQUksRUFBRSxVQUFVO0lBQ2hCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRTtZQUNMLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRTtZQUNwRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsMkNBQTJDLEVBQUU7U0FDL0Y7UUFDRCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUU7S0FDeEQ7SUFDRCxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUNwRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQXdDLEVBQUUsT0FBZ0IsRUFBbUIsRUFBRTtRQUM3RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7WUFFMUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDO1lBRUYsUUFBUSxRQUFRLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxTQUFTO29CQUNaLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssYUFBYTtvQkFDaEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0b20sIENvbnRleHQsIFJlc3VsdCB9IGZyb20gJ0BhaXRvcy9jb3JlJztcblxuZXhwb3J0IGNvbnN0IHNob3dGaWxlUGlja2VyQXRvbTogQXRvbSA9IHtcbiAgbmFtZTogJ3Nob3dGaWxlUGlja2VyJyxcbiAgdmVyc2lvbjogJzEuMC4wJyxcbiAgbWV0YToge1xuICAgIGlucHV0OiBbXG4gICAgICB7IG5hbWU6ICdhY2NlcHQnLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdGaWxlIHR5cGVzIHRvIGFjY2VwdCAoZS5nLiBcIi5qcGcsLnBuZ1wiKScgfSxcbiAgICAgIHsgbmFtZTogJ211bHRpcGxlJywgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjcmlwdGlvbjogJ0FsbG93IG11bHRpcGxlIGZpbGUgc2VsZWN0aW9uJyB9XG4gICAgXSxcbiAgICBvdXRwdXQ6IHsgdHlwZTogJ29iamVjdCcsIGRlc2NyaXB0aW9uOiAnU2VsZWN0ZWQgZmlsZShzKSBvciBGaWxlTGlzdCcgfVxuICB9LFxuICBjaGFyYWN0ZXJpc3RpY3M6IHsgc3RhdGVsZXNzOiB0cnVlLCBhdG9taWM6IHRydWUsIGNvbXBvc2FibGU6IHRydWUgfSxcbiAgZXhlY3V0ZTogYXN5bmMgKGlucHV0OiB7IGFjY2VwdD86IHN0cmluZzsgbXVsdGlwbGU/OiBib29sZWFuIH0sIGNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0ZpbGUgcGlja2VyIG5vdCBhdmFpbGFibGUnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlucHV0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgaW5wdXRFbC50eXBlID0gJ2ZpbGUnO1xuICAgICAgaWYgKGlucHV0LmFjY2VwdCkgaW5wdXRFbC5hY2NlcHQgPSBpbnB1dC5hY2NlcHQ7XG4gICAgICBpZiAoaW5wdXQubXVsdGlwbGUpIGlucHV0RWwubXVsdGlwbGUgPSB0cnVlO1xuXG4gICAgICBpbnB1dEVsLm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRFbC5maWxlcyAmJiBpbnB1dEVsLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoaW5wdXQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBBcnJheS5mcm9tKGlucHV0RWwuZmlsZXMpIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogaW5wdXRFbC5maWxlc1swXSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ05vIGZpbGUgc2VsZWN0ZWQnIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpbnB1dEVsLmNsaWNrKCk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcmVhZEZpbGVBdG9tOiBBdG9tID0ge1xuICBuYW1lOiAncmVhZEZpbGUnLFxuICB2ZXJzaW9uOiAnMS4wLjAnLFxuICBtZXRhOiB7XG4gICAgaW5wdXQ6IFtcbiAgICAgIHsgbmFtZTogJ2ZpbGUnLCB0eXBlOiAnb2JqZWN0JywgZGVzY3JpcHRpb246ICdGaWxlIG9iamVjdCB0byByZWFkJyB9LFxuICAgICAgeyBuYW1lOiAnZW5jb2RpbmcnLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdFbmNvZGluZyB0eXBlOiB0ZXh0LCBkYXRhVVJMLCBhcnJheUJ1ZmZlcicgfVxuICAgIF0sXG4gICAgb3V0cHV0OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0ZpbGUgY29udGVudCcgfVxuICB9LFxuICBjaGFyYWN0ZXJpc3RpY3M6IHsgc3RhdGVsZXNzOiB0cnVlLCBhdG9taWM6IHRydWUsIGNvbXBvc2FibGU6IHRydWUgfSxcbiAgZXhlY3V0ZTogYXN5bmMgKGlucHV0OiB7IGZpbGU6IEZpbGU7IGVuY29kaW5nPzogc3RyaW5nIH0sIGNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFpbnB1dC5maWxlKSB7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdObyBmaWxlIHByb3ZpZGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBpbnB1dC5lbmNvZGluZyB8fCAndGV4dCc7XG5cbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZWFkZXIucmVzdWx0IH0pO1xuICAgICAgfTtcblxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdGYWlsZWQgdG8gcmVhZCBmaWxlJyB9KTtcbiAgICAgIH07XG5cbiAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgY2FzZSAnZGF0YVVSTCc6XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoaW5wdXQuZmlsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FycmF5QnVmZmVyJzpcbiAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoaW5wdXQuZmlsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoaW5wdXQuZmlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG59O1xuIl19
|
package/dist/keyboard.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getKeyAtom = void 0;
|
|
4
|
+
const keyState = new Map();
|
|
5
|
+
function initKeyListener() {
|
|
6
|
+
if (typeof window !== 'undefined' && !(window.__aitosKeyListenerAdded)) {
|
|
7
|
+
window.addEventListener('keydown', (e) => {
|
|
8
|
+
keyState.set(e.key, true);
|
|
9
|
+
});
|
|
10
|
+
window.addEventListener('keyup', (e) => {
|
|
11
|
+
keyState.set(e.key, false);
|
|
12
|
+
});
|
|
13
|
+
window.__aitosKeyListenerAdded = true;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
initKeyListener();
|
|
17
|
+
exports.getKeyAtom = {
|
|
18
|
+
name: 'getKey',
|
|
19
|
+
version: '1.0.0',
|
|
20
|
+
meta: {
|
|
21
|
+
input: [
|
|
22
|
+
{ name: 'key', type: 'string', description: 'Key name (e.g. "ArrowUp", "a", "Enter", "Space")' }
|
|
23
|
+
],
|
|
24
|
+
output: { type: 'boolean', description: 'true if key is currently pressed' }
|
|
25
|
+
},
|
|
26
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
27
|
+
execute: async (input, context) => {
|
|
28
|
+
const pressed = keyState.get(input.key) ?? false;
|
|
29
|
+
return { success: true, data: pressed };
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9rZXlib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztBQUU1QyxTQUFTLGVBQWU7SUFDdEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFFLE1BQWMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDaEYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDRixNQUFjLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDO0FBRUQsZUFBZSxFQUFFLENBQUM7QUFFTCxRQUFBLFVBQVUsR0FBUztJQUM5QixJQUFJLEVBQUUsUUFBUTtJQUNkLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRTtZQUNMLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxrREFBa0QsRUFBRTtTQUNqRztRQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFO0tBQzdFO0lBQ0QsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFzQixFQUFFLE9BQWdCLEVBQW1CLEVBQUU7UUFDM0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0b20sIENvbnRleHQsIFJlc3VsdCB9IGZyb20gJ0BhaXRvcy9jb3JlJztcblxuY29uc3Qga2V5U3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuZnVuY3Rpb24gaW5pdEtleUxpc3RlbmVyKCk6IHZvaWQge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISgod2luZG93IGFzIGFueSkuX19haXRvc0tleUxpc3RlbmVyQWRkZWQpKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAga2V5U3RhdGUuc2V0KGUua2V5LCB0cnVlKTtcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZSkgPT4ge1xuICAgICAga2V5U3RhdGUuc2V0KGUua2V5LCBmYWxzZSk7XG4gICAgfSk7XG4gICAgKHdpbmRvdyBhcyBhbnkpLl9fYWl0b3NLZXlMaXN0ZW5lckFkZGVkID0gdHJ1ZTtcbiAgfVxufVxuXG5pbml0S2V5TGlzdGVuZXIoKTtcblxuZXhwb3J0IGNvbnN0IGdldEtleUF0b206IEF0b20gPSB7XG4gIG5hbWU6ICdnZXRLZXknLFxuICB2ZXJzaW9uOiAnMS4wLjAnLFxuICBtZXRhOiB7XG4gICAgaW5wdXQ6IFtcbiAgICAgIHsgbmFtZTogJ2tleScsIHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0tleSBuYW1lIChlLmcuIFwiQXJyb3dVcFwiLCBcImFcIiwgXCJFbnRlclwiLCBcIlNwYWNlXCIpJyB9XG4gICAgXSxcbiAgICBvdXRwdXQ6IHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjcmlwdGlvbjogJ3RydWUgaWYga2V5IGlzIGN1cnJlbnRseSBwcmVzc2VkJyB9XG4gIH0sXG4gIGNoYXJhY3RlcmlzdGljczogeyBzdGF0ZWxlc3M6IHRydWUsIGF0b21pYzogdHJ1ZSwgY29tcG9zYWJsZTogdHJ1ZSB9LFxuICBleGVjdXRlOiBhc3luYyAoaW5wdXQ6IHsga2V5OiBzdHJpbmcgfSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8UmVzdWx0PiA9PiB7XG4gICAgY29uc3QgcHJlc3NlZCA9IGtleVN0YXRlLmdldChpbnB1dC5rZXkpID8/IGZhbHNlO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHByZXNzZWQgfTtcbiAgfSxcbn07XG4iXX0=
|
package/dist/pointer.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.removeEventListenerAtom = exports.addEventListenerAtom = exports.getTouchAtom = exports.getMousePositionAtom = void 0;
|
|
4
|
+
exports.getMousePositionAtom = {
|
|
5
|
+
name: 'getMousePosition',
|
|
6
|
+
version: '1.0.0',
|
|
7
|
+
meta: {
|
|
8
|
+
input: [
|
|
9
|
+
{ name: 'id', type: 'string', description: 'Element ID to track mouse position' },
|
|
10
|
+
{ name: 'xKey', type: 'string', description: 'Store key for X coordinate' },
|
|
11
|
+
{ name: 'yKey', type: 'string', description: 'Store key for Y coordinate' }
|
|
12
|
+
],
|
|
13
|
+
output: { type: 'void', description: 'Nothing' }
|
|
14
|
+
},
|
|
15
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
16
|
+
execute: async (input, context) => {
|
|
17
|
+
if (typeof document === 'undefined') {
|
|
18
|
+
return { success: false, error: 'Mouse position requires browser environment' };
|
|
19
|
+
}
|
|
20
|
+
const el = document.getElementById(input.id);
|
|
21
|
+
if (!el) {
|
|
22
|
+
return { success: false, error: `Element "${input.id}" not found` };
|
|
23
|
+
}
|
|
24
|
+
const handler = (event) => {
|
|
25
|
+
const rect = el.getBoundingClientRect();
|
|
26
|
+
context.store.set(input.xKey, event.clientX - rect.left);
|
|
27
|
+
context.store.set(input.yKey, event.clientY - rect.top);
|
|
28
|
+
};
|
|
29
|
+
el.addEventListener('mousemove', handler);
|
|
30
|
+
return { success: true, data: { done: true } };
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
exports.getTouchAtom = {
|
|
34
|
+
name: 'getTouch',
|
|
35
|
+
version: '1.0.0',
|
|
36
|
+
meta: {
|
|
37
|
+
input: [
|
|
38
|
+
{ name: 'id', type: 'string', description: 'Element ID to listen for touches' },
|
|
39
|
+
{ name: 'xKey', type: 'string', description: 'Store key for X coordinate' },
|
|
40
|
+
{ name: 'yKey', type: 'string', description: 'Store key for Y coordinate' }
|
|
41
|
+
],
|
|
42
|
+
output: { type: 'void', description: 'Nothing' }
|
|
43
|
+
},
|
|
44
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
45
|
+
execute: async (input, context) => {
|
|
46
|
+
if (typeof document === 'undefined') {
|
|
47
|
+
return { success: false, error: 'Touch requires browser environment' };
|
|
48
|
+
}
|
|
49
|
+
const el = document.getElementById(input.id);
|
|
50
|
+
if (!el) {
|
|
51
|
+
return { success: false, error: `Element "${input.id}" not found` };
|
|
52
|
+
}
|
|
53
|
+
const handler = (event) => {
|
|
54
|
+
const touch = event.touches[0];
|
|
55
|
+
const rect = el.getBoundingClientRect();
|
|
56
|
+
context.store.set(input.xKey, touch.clientX - rect.left);
|
|
57
|
+
context.store.set(input.yKey, touch.clientY - rect.top);
|
|
58
|
+
};
|
|
59
|
+
el.addEventListener('touchstart', handler);
|
|
60
|
+
el.addEventListener('touchmove', handler);
|
|
61
|
+
return { success: true, data: { done: true } };
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
exports.addEventListenerAtom = {
|
|
65
|
+
name: 'addEventListener',
|
|
66
|
+
version: '1.0.0',
|
|
67
|
+
meta: {
|
|
68
|
+
input: [
|
|
69
|
+
{ name: 'id', type: 'string', description: 'Element ID or "window" or "document"' },
|
|
70
|
+
{ name: 'event', type: 'string', description: 'Event type (e.g., "click", "resize", "input")' },
|
|
71
|
+
{ name: 'storeKey', type: 'string', description: 'Key to store event data in context store' },
|
|
72
|
+
{ name: 'action', type: 'string', description: 'Optional graph file to execute when event fires' },
|
|
73
|
+
{ name: 'preventDefault', type: 'boolean', description: 'Whether to call e.preventDefault() before executing action' }
|
|
74
|
+
],
|
|
75
|
+
output: { type: 'void', description: 'Nothing' }
|
|
76
|
+
},
|
|
77
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
78
|
+
execute: async (input, context) => {
|
|
79
|
+
if (typeof document === 'undefined') {
|
|
80
|
+
return { success: false, error: 'addEventListener requires browser environment' };
|
|
81
|
+
}
|
|
82
|
+
const listenerKey = `__listener_${input.id}_${input.event}`;
|
|
83
|
+
const existingListener = context.store.get(listenerKey);
|
|
84
|
+
if (existingListener) {
|
|
85
|
+
const currentTarget = input.id === 'window' ? window : input.id === 'document' ? document : document.getElementById(input.id);
|
|
86
|
+
if (existingListener.target === currentTarget) {
|
|
87
|
+
return { success: true, data: null };
|
|
88
|
+
}
|
|
89
|
+
existingListener.target.removeEventListener(input.event, existingListener.handler);
|
|
90
|
+
context.store.delete(listenerKey);
|
|
91
|
+
}
|
|
92
|
+
let target = null;
|
|
93
|
+
if (input.id === 'window') {
|
|
94
|
+
target = window;
|
|
95
|
+
}
|
|
96
|
+
else if (input.id === 'document') {
|
|
97
|
+
target = document;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
target = document.getElementById(input.id);
|
|
101
|
+
}
|
|
102
|
+
if (!target) {
|
|
103
|
+
return { success: false, error: `Target "${input.id}" not found` };
|
|
104
|
+
}
|
|
105
|
+
const handler = async (e) => {
|
|
106
|
+
const eventData = { type: e.type };
|
|
107
|
+
if (e instanceof MouseEvent) {
|
|
108
|
+
eventData.x = e.clientX;
|
|
109
|
+
eventData.y = e.clientY;
|
|
110
|
+
eventData.button = e.button;
|
|
111
|
+
}
|
|
112
|
+
else if (e instanceof KeyboardEvent) {
|
|
113
|
+
eventData.key = e.key;
|
|
114
|
+
eventData.code = e.code;
|
|
115
|
+
eventData.shiftKey = e.shiftKey;
|
|
116
|
+
eventData.ctrlKey = e.ctrlKey;
|
|
117
|
+
eventData.altKey = e.altKey;
|
|
118
|
+
if (input.action && input.preventDefault && e.key === 'Enter') {
|
|
119
|
+
e.preventDefault();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (e instanceof Event && e.target?.value !== undefined) {
|
|
123
|
+
eventData.value = e.target.value;
|
|
124
|
+
}
|
|
125
|
+
if (e.target) {
|
|
126
|
+
let targetEl = e.target;
|
|
127
|
+
while (targetEl && targetEl !== document.body) {
|
|
128
|
+
if (targetEl.id) {
|
|
129
|
+
eventData.targetId = targetEl.id;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
targetEl = targetEl.parentElement;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (e.target && e.target.dataset) {
|
|
136
|
+
eventData.targetData = e.target.dataset;
|
|
137
|
+
}
|
|
138
|
+
context.store.set(input.storeKey, eventData);
|
|
139
|
+
if (input.action && context.executeGraph) {
|
|
140
|
+
const graph = context.store.get(`__graph_${input.action}`);
|
|
141
|
+
if (graph) {
|
|
142
|
+
await context.executeGraph(graph);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
target.addEventListener(input.event, handler);
|
|
147
|
+
context.store.set(listenerKey, { handler, target });
|
|
148
|
+
return { success: true, data: null };
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
exports.removeEventListenerAtom = {
|
|
152
|
+
name: 'removeEventListener',
|
|
153
|
+
version: '1.0.0',
|
|
154
|
+
meta: {
|
|
155
|
+
input: [
|
|
156
|
+
{ name: 'id', type: 'string', description: 'Element ID or "window" or "document"' },
|
|
157
|
+
{ name: 'event', type: 'string', description: 'Event type' }
|
|
158
|
+
],
|
|
159
|
+
output: { type: 'void', description: 'Nothing' }
|
|
160
|
+
},
|
|
161
|
+
characteristics: { stateless: true, atomic: true, composable: true },
|
|
162
|
+
execute: async (input, context) => {
|
|
163
|
+
if (typeof document === 'undefined') {
|
|
164
|
+
return { success: false, error: 'removeEventListener requires browser environment' };
|
|
165
|
+
}
|
|
166
|
+
const listenerKey = `__listener_${input.id}_${input.event}`;
|
|
167
|
+
const listenerData = context.store.get(listenerKey);
|
|
168
|
+
if (listenerData) {
|
|
169
|
+
const { handler, target } = listenerData;
|
|
170
|
+
target.removeEventListener(input.event, handler);
|
|
171
|
+
context.store.delete(listenerKey);
|
|
172
|
+
}
|
|
173
|
+
return { success: true, data: null };
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3BvaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRWEsUUFBQSxvQkFBb0IsR0FBUztJQUN4QyxJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRTtZQUNMLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRTtZQUNqRixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUU7WUFDM0UsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFO1NBQzVFO1FBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFO0tBQ2pEO0lBQ0QsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFpRCxFQUFFLE9BQWdCLEVBQW1CLEVBQUU7UUFDdEcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsNkNBQTZDLEVBQUUsQ0FBQztRQUNsRixDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksS0FBSyxDQUFDLEVBQUUs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QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdG9tLCBDb250ZXh0LCBSZXN1bHQgfSBmcm9tICdAYWl0b3MvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRNb3VzZVBvc2l0aW9uQXRvbTogQXRvbSA9IHtcbiAgbmFtZTogJ2dldE1vdXNlUG9zaXRpb24nLFxuICB2ZXJzaW9uOiAnMS4wLjAnLFxuICBtZXRhOiB7XG4gICAgaW5wdXQ6IFtcbiAgICAgIHsgbmFtZTogJ2lkJywgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRWxlbWVudCBJRCB0byB0cmFjayBtb3VzZSBwb3NpdGlvbicgfSxcbiAgICAgIHsgbmFtZTogJ3hLZXknLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdTdG9yZSBrZXkgZm9yIFggY29vcmRpbmF0ZScgfSxcbiAgICAgIHsgbmFtZTogJ3lLZXknLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdTdG9yZSBrZXkgZm9yIFkgY29vcmRpbmF0ZScgfVxuICAgIF0sXG4gICAgb3V0cHV0OiB7IHR5cGU6ICd2b2lkJywgZGVzY3JpcHRpb246ICdOb3RoaW5nJyB9XG4gIH0sXG4gIGNoYXJhY3RlcmlzdGljczogeyBzdGF0ZWxlc3M6IHRydWUsIGF0b21pYzogdHJ1ZSwgY29tcG9zYWJsZTogdHJ1ZSB9LFxuICBleGVjdXRlOiBhc3luYyAoaW5wdXQ6IHsgaWQ6IHN0cmluZzsgeEtleTogc3RyaW5nOyB5S2V5OiBzdHJpbmcgfSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8UmVzdWx0PiA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ01vdXNlIHBvc2l0aW9uIHJlcXVpcmVzIGJyb3dzZXIgZW52aXJvbm1lbnQnIH07XG4gICAgfVxuXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dC5pZCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBgRWxlbWVudCBcIiR7aW5wdXQuaWR9XCIgbm90IGZvdW5kYCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnRleHQuc3RvcmUuc2V0KGlucHV0LnhLZXksIGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgY29udGV4dC5zdG9yZS5zZXQoaW5wdXQueUtleSwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9O1xuXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlcik7XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogeyBkb25lOiB0cnVlIH0gfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUb3VjaEF0b206IEF0b20gPSB7XG4gIG5hbWU6ICdnZXRUb3VjaCcsXG4gIHZlcnNpb246ICcxLjAuMCcsXG4gIG1ldGE6IHtcbiAgICBpbnB1dDogW1xuICAgICAgeyBuYW1lOiAnaWQnLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdFbGVtZW50IElEIHRvIGxpc3RlbiBmb3IgdG91Y2hlcycgfSxcbiAgICAgIHsgbmFtZTogJ3hLZXknLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdTdG9yZSBrZXkgZm9yIFggY29vcmRpbmF0ZScgfSxcbiAgICAgIHsgbmFtZTogJ3lLZXknLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdTdG9yZSBrZXkgZm9yIFkgY29vcmRpbmF0ZScgfVxuICAgIF0sXG4gICAgb3V0cHV0OiB7IHR5cGU6ICd2b2lkJywgZGVzY3JpcHRpb246ICdOb3RoaW5nJyB9XG4gIH0sXG4gIGNoYXJhY3RlcmlzdGljczogeyBzdGF0ZWxlc3M6IHRydWUsIGF0b21pYzogdHJ1ZSwgY29tcG9zYWJsZTogdHJ1ZSB9LFxuICBleGVjdXRlOiBhc3luYyAoaW5wdXQ6IHsgaWQ6IHN0cmluZzsgeEtleTogc3RyaW5nOyB5S2V5OiBzdHJpbmcgfSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8UmVzdWx0PiA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1RvdWNoIHJlcXVpcmVzIGJyb3dzZXIgZW52aXJvbm1lbnQnIH07XG4gICAgfVxuXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dC5pZCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBgRWxlbWVudCBcIiR7aW5wdXQuaWR9XCIgbm90IGZvdW5kYCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnRleHQuc3RvcmUuc2V0KGlucHV0LnhLZXksIHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgY29udGV4dC5zdG9yZS5zZXQoaW5wdXQueUtleSwgdG91Y2guY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9O1xuXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZXIpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZXIpO1xuICAgIFxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHsgZG9uZTogdHJ1ZSB9IH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgYWRkRXZlbnRMaXN0ZW5lckF0b206IEF0b20gPSB7XG4gIG5hbWU6ICdhZGRFdmVudExpc3RlbmVyJyxcbiAgdmVyc2lvbjogJzEuMC4wJyxcbiAgbWV0YToge1xuICAgIGlucHV0OiBbXG4gICAgICB7IG5hbWU6ICdpZCcsIHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0VsZW1lbnQgSUQgb3IgXCJ3aW5kb3dcIiBvciBcImRvY3VtZW50XCInIH0sXG4gICAgICB7IG5hbWU6ICdldmVudCcsIHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0V2ZW50IHR5cGUgKGUuZy4sIFwiY2xpY2tcIiwgXCJyZXNpemVcIiwgXCJpbnB1dFwiKScgfSxcbiAgICAgIHsgbmFtZTogJ3N0b3JlS2V5JywgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnS2V5IHRvIHN0b3JlIGV2ZW50IGRhdGEgaW4gY29udGV4dCBzdG9yZScgfSxcbiAgICAgIHsgbmFtZTogJ2FjdGlvbicsIHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ09wdGlvbmFsIGdyYXBoIGZpbGUgdG8gZXhlY3V0ZSB3aGVuIGV2ZW50IGZpcmVzJyB9LFxuICAgICAgeyBuYW1lOiAncHJldmVudERlZmF1bHQnLCB0eXBlOiAnYm9vbGVhbicsIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBjYWxsIGUucHJldmVudERlZmF1bHQoKSBiZWZvcmUgZXhlY3V0aW5nIGFjdGlvbicgfVxuICAgIF0sXG4gICAgb3V0cHV0OiB7IHR5cGU6ICd2b2lkJywgZGVzY3JpcHRpb246ICdOb3RoaW5nJyB9XG4gIH0sXG4gIGNoYXJhY3RlcmlzdGljczogeyBzdGF0ZWxlc3M6IHRydWUsIGF0b21pYzogdHJ1ZSwgY29tcG9zYWJsZTogdHJ1ZSB9LFxuICBleGVjdXRlOiBhc3luYyAoaW5wdXQ6IHsgaWQ6IHN0cmluZzsgZXZlbnQ6IHN0cmluZzsgc3RvcmVLZXk6IHN0cmluZzsgYWN0aW9uPzogc3RyaW5nOyBwcmV2ZW50RGVmYXVsdD86IGJvb2xlYW4gfSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8UmVzdWx0PiA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ2FkZEV2ZW50TGlzdGVuZXIgcmVxdWlyZXMgYnJvd3NlciBlbnZpcm9ubWVudCcgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lcktleSA9IGBfX2xpc3RlbmVyXyR7aW5wdXQuaWR9XyR7aW5wdXQuZXZlbnR9YDtcbiAgICBjb25zdCBleGlzdGluZ0xpc3RlbmVyID0gY29udGV4dC5zdG9yZS5nZXQobGlzdGVuZXJLZXkpO1xuICAgIGlmIChleGlzdGluZ0xpc3RlbmVyKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gaW5wdXQuaWQgPT09ICd3aW5kb3cnID8gd2luZG93IDogaW5wdXQuaWQgPT09ICdkb2N1bWVudCcgPyBkb2N1bWVudCA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0LmlkKTtcbiAgICAgIGlmIChleGlzdGluZ0xpc3RlbmVyLnRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICB9XG4gICAgICBleGlzdGluZ0xpc3RlbmVyLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGlucHV0LmV2ZW50LCBleGlzdGluZ0xpc3RlbmVyLmhhbmRsZXIpO1xuICAgICAgY29udGV4dC5zdG9yZS5kZWxldGUobGlzdGVuZXJLZXkpO1xuICAgIH1cblxuICAgIGxldCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGlucHV0LmlkID09PSAnd2luZG93Jykge1xuICAgICAgdGFyZ2V0ID0gd2luZG93O1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuaWQgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgIHRhcmdldCA9IGRvY3VtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dC5pZCk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogYFRhcmdldCBcIiR7aW5wdXQuaWR9XCIgbm90IGZvdW5kYCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YTogYW55ID0geyB0eXBlOiBlLnR5cGUgfTtcbiAgICAgIFxuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50RGF0YS54ID0gZS5jbGllbnRYO1xuICAgICAgICBldmVudERhdGEueSA9IGUuY2xpZW50WTtcbiAgICAgICAgZXZlbnREYXRhLmJ1dHRvbiA9IGUuYnV0dG9uO1xuICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudERhdGEua2V5ID0gZS5rZXk7XG4gICAgICAgIGV2ZW50RGF0YS5jb2RlID0gZS5jb2RlO1xuICAgICAgICBldmVudERhdGEuc2hpZnRLZXkgPSBlLnNoaWZ0S2V5O1xuICAgICAgICBldmVudERhdGEuY3RybEtleSA9IGUuY3RybEtleTtcbiAgICAgICAgZXZlbnREYXRhLmFsdEtleSA9IGUuYWx0S2V5O1xuICAgICAgICBpZiAoaW5wdXQuYWN0aW9uICYmIGlucHV0LnByZXZlbnREZWZhdWx0ICYmIGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBFdmVudCAmJiAoZS50YXJnZXQgYXMgYW55KT8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBldmVudERhdGEudmFsdWUgPSAoZS50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGUudGFyZ2V0KSB7XG4gICAgICAgIGxldCB0YXJnZXRFbCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB3aGlsZSAodGFyZ2V0RWwgJiYgdGFyZ2V0RWwgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICBpZiAoKHRhcmdldEVsIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgIGV2ZW50RGF0YS50YXJnZXRJZCA9ICh0YXJnZXRFbCBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldEVsID0gdGFyZ2V0RWwucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZS50YXJnZXQgJiYgKGUudGFyZ2V0IGFzIGFueSkuZGF0YXNldCkge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0RGF0YSA9IChlLnRhcmdldCBhcyBhbnkpLmRhdGFzZXQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnRleHQuc3RvcmUuc2V0KGlucHV0LnN0b3JlS2V5LCBldmVudERhdGEpO1xuICAgICAgXG4gICAgICBpZiAoaW5wdXQuYWN0aW9uICYmIGNvbnRleHQuZXhlY3V0ZUdyYXBoKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gY29udGV4dC5zdG9yZS5nZXQoYF9fZ3JhcGhfJHtpbnB1dC5hY3Rpb259YCk7XG4gICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgIGF3YWl0IGNvbnRleHQuZXhlY3V0ZUdyYXBoKGdyYXBoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihpbnB1dC5ldmVudCwgaGFuZGxlcik7XG4gICAgY29udGV4dC5zdG9yZS5zZXQobGlzdGVuZXJLZXksIHsgaGFuZGxlciwgdGFyZ2V0IH0pO1xuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV2ZW50TGlzdGVuZXJBdG9tOiBBdG9tID0ge1xuICBuYW1lOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsXG4gIHZlcnNpb246ICcxLjAuMCcsXG4gIG1ldGE6IHtcbiAgICBpbnB1dDogW1xuICAgICAgeyBuYW1lOiAnaWQnLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdFbGVtZW50IElEIG9yIFwid2luZG93XCIgb3IgXCJkb2N1bWVudFwiJyB9LFxuICAgICAgeyBuYW1lOiAnZXZlbnQnLCB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdFdmVudCB0eXBlJyB9XG4gICAgXSxcbiAgICBvdXRwdXQ6IHsgdHlwZTogJ3ZvaWQnLCBkZXNjcmlwdGlvbjogJ05vdGhpbmcnIH1cbiAgfSxcbiAgY2hhcmFjdGVyaXN0aWNzOiB7IHN0YXRlbGVzczogdHJ1ZSwgYXRvbWljOiB0cnVlLCBjb21wb3NhYmxlOiB0cnVlIH0sXG4gIGV4ZWN1dGU6IGFzeW5jIChpbnB1dDogeyBpZDogc3RyaW5nOyBldmVudDogc3RyaW5nIH0sIGNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdyZW1vdmVFdmVudExpc3RlbmVyIHJlcXVpcmVzIGJyb3dzZXIgZW52aXJvbm1lbnQnIH07XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXJLZXkgPSBgX19saXN0ZW5lcl8ke2lucHV0LmlkfV8ke2lucHV0LmV2ZW50fWA7XG4gICAgY29uc3QgbGlzdGVuZXJEYXRhID0gY29udGV4dC5zdG9yZS5nZXQobGlzdGVuZXJLZXkpO1xuXG4gICAgaWYgKGxpc3RlbmVyRGF0YSkge1xuICAgICAgY29uc3QgeyBoYW5kbGVyLCB0YXJnZXQgfSA9IGxpc3RlbmVyRGF0YTtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGlucHV0LmV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIGNvbnRleHQuc3RvcmUuZGVsZXRlKGxpc3RlbmVyS2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gIH0sXG59O1xuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aitos/input",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AITOS Input Capability Package - Keyboard, Pointer, and Voice input atoms",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc --watch"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"aitos",
|
|
13
|
+
"input",
|
|
14
|
+
"keyboard",
|
|
15
|
+
"pointer",
|
|
16
|
+
"voice",
|
|
17
|
+
"capability"
|
|
18
|
+
],
|
|
19
|
+
"author": "AITOS Team",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@aitos/core": "^1.0.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@aitos/core": "file:../../../aitos",
|
|
29
|
+
"@types/node": "^20.0.0",
|
|
30
|
+
"typescript": "^5.9.3"
|
|
31
|
+
}
|
|
32
|
+
}
|