@limrun/ui 0.1.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.
@@ -0,0 +1,342 @@
1
+ export const CONTROL_MSG_TYPE = {
2
+ INJECT_KEYCODE: 0,
3
+ INJECT_TEXT: 1,
4
+ INJECT_TOUCH_EVENT: 2,
5
+ INJECT_SCROLL_EVENT: 3,
6
+ BACK_OR_SCREEN_ON: 4,
7
+ EXPAND_NOTIFICATION_PANEL: 5,
8
+ EXPAND_SETTINGS_PANEL: 6,
9
+ COLLAPSE_PANELS: 7,
10
+ GET_CLIPBOARD: 8,
11
+ SET_CLIPBOARD: 9,
12
+ SET_DISPLAY_POWER: 10,
13
+ ROTATE_DEVICE: 11,
14
+ } as const;
15
+
16
+ export const AMOTION_EVENT = {
17
+ ACTION_DOWN: 0,
18
+ ACTION_UP: 1,
19
+ ACTION_MOVE: 2,
20
+ ACTION_CANCEL: 3,
21
+ ACTION_POINTER_DOWN: 5,
22
+ ACTION_POINTER_UP: 6,
23
+ BUTTON_PRIMARY: 1,
24
+ BUTTON_SECONDARY: 2,
25
+ BUTTON_TERTIARY: 4,
26
+ } as const;
27
+
28
+ export const ANDROID_KEYS = {
29
+ // Actions
30
+ ACTION_DOWN: 0,
31
+ ACTION_UP: 1,
32
+
33
+ // Meta state flags (from android.view.KeyEvent)
34
+ META_NONE: 0,
35
+ META_SHIFT_ON: 1,
36
+ META_ALT_ON: 2,
37
+ META_CTRL_ON: 4096, // META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON
38
+ META_META_ON: 65536, // META_META_LEFT_ON | META_META_RIGHT_ON
39
+
40
+ // Keycodes (from android.view.KeyEvent)
41
+ KEYCODE_UNKNOWN: 0,
42
+ KEYCODE_SOFT_LEFT: 1,
43
+ KEYCODE_SOFT_RIGHT: 2,
44
+ KEYCODE_HOME: 3,
45
+ KEYCODE_BACK: 4,
46
+ KEYCODE_CALL: 5,
47
+ KEYCODE_ENDCALL: 6,
48
+ KEYCODE_0: 7,
49
+ KEYCODE_1: 8,
50
+ KEYCODE_2: 9,
51
+ KEYCODE_3: 10,
52
+ KEYCODE_4: 11,
53
+ KEYCODE_5: 12,
54
+ KEYCODE_6: 13,
55
+ KEYCODE_7: 14,
56
+ KEYCODE_8: 15,
57
+ KEYCODE_9: 16,
58
+ KEYCODE_STAR: 17,
59
+ KEYCODE_POUND: 18,
60
+ DPAD_UP: 19, // KEYCODE_DPAD_UP
61
+ DPAD_DOWN: 20, // KEYCODE_DPAD_DOWN
62
+ DPAD_LEFT: 21, // KEYCODE_DPAD_LEFT
63
+ DPAD_RIGHT: 22, // KEYCODE_DPAD_RIGHT
64
+ KEYCODE_DPAD_CENTER: 23,
65
+ KEYCODE_VOLUME_UP: 24,
66
+ KEYCODE_VOLUME_DOWN: 25,
67
+ KEYCODE_POWER: 26,
68
+ KEYCODE_CAMERA: 27,
69
+ KEYCODE_CLEAR: 28,
70
+ KEYCODE_A: 29,
71
+ KEYCODE_B: 30,
72
+ KEYCODE_C: 31,
73
+ KEYCODE_D: 32,
74
+ KEYCODE_E: 33,
75
+ KEYCODE_F: 34,
76
+ KEYCODE_G: 35,
77
+ KEYCODE_H: 36,
78
+ KEYCODE_I: 37,
79
+ KEYCODE_J: 38,
80
+ KEYCODE_K: 39,
81
+ KEYCODE_L: 40,
82
+ KEYCODE_M: 41,
83
+ KEYCODE_N: 42,
84
+ KEYCODE_O: 43,
85
+ KEYCODE_P: 44,
86
+ KEYCODE_Q: 45,
87
+ KEYCODE_R: 46,
88
+ KEYCODE_S: 47,
89
+ KEYCODE_T: 48,
90
+ KEYCODE_U: 49,
91
+ KEYCODE_V: 50,
92
+ KEYCODE_W: 51,
93
+ KEYCODE_X: 52,
94
+ KEYCODE_Y: 53,
95
+ KEYCODE_Z: 54,
96
+ KEYCODE_COMMA: 55,
97
+ KEYCODE_PERIOD: 56,
98
+ KEYCODE_ALT_LEFT: 57,
99
+ KEYCODE_ALT_RIGHT: 58,
100
+ KEYCODE_SHIFT_LEFT: 59,
101
+ KEYCODE_SHIFT_RIGHT: 60,
102
+ KEYCODE_TAB: 61,
103
+ KEYCODE_SPACE: 62,
104
+ KEYCODE_SYM: 63,
105
+ KEYCODE_EXPLORER: 64,
106
+ KEYCODE_ENVELOPE: 65,
107
+ ENTER: 66, // KEYCODE_ENTER
108
+ DEL: 67, // KEYCODE_DEL (Backspace)
109
+ KEYCODE_GRAVE: 68, // `
110
+ KEYCODE_MINUS: 69, // -
111
+ KEYCODE_EQUALS: 70, // =
112
+ KEYCODE_LEFT_BRACKET: 71, // [
113
+ KEYCODE_RIGHT_BRACKET: 72, // ]
114
+ KEYCODE_BACKSLASH: 73, // \
115
+ KEYCODE_SEMICOLON: 74, // ;
116
+ KEYCODE_APOSTROPHE: 75, // '
117
+ KEYCODE_SLASH: 76, // /
118
+ KEYCODE_AT: 77, // @
119
+ KEYCODE_NUM: 78,
120
+ KEYCODE_HEADSETHOOK: 79,
121
+ KEYCODE_FOCUS: 80,
122
+ KEYCODE_PLUS: 81,
123
+ MENU: 82, // KEYCODE_MENU
124
+ KEYCODE_NOTIFICATION: 83,
125
+ KEYCODE_SEARCH: 84,
126
+ KEYCODE_MEDIA_PLAY_PAUSE: 85,
127
+ KEYCODE_MEDIA_STOP: 86,
128
+ KEYCODE_MEDIA_NEXT: 87,
129
+ KEYCODE_MEDIA_PREVIOUS: 88,
130
+ KEYCODE_MEDIA_REWIND: 89,
131
+ KEYCODE_MEDIA_FAST_FORWARD: 90,
132
+ KEYCODE_MUTE: 91,
133
+ KEYCODE_PAGE_UP: 92,
134
+ KEYCODE_PAGE_DOWN: 93,
135
+ KEYCODE_PICTSYMBOLS: 94,
136
+ KEYCODE_SWITCH_CHARSET: 95,
137
+ KEYCODE_BUTTON_A: 96,
138
+ KEYCODE_BUTTON_B: 97,
139
+ KEYCODE_BUTTON_C: 98,
140
+ KEYCODE_BUTTON_X: 99,
141
+ KEYCODE_BUTTON_Y: 100,
142
+ KEYCODE_BUTTON_Z: 101,
143
+ KEYCODE_BUTTON_L1: 102,
144
+ KEYCODE_BUTTON_R1: 103,
145
+ KEYCODE_BUTTON_L2: 104,
146
+ KEYCODE_BUTTON_R2: 105,
147
+ KEYCODE_BUTTON_THUMBL: 106,
148
+ KEYCODE_BUTTON_THUMBR: 107,
149
+ KEYCODE_BUTTON_START: 108,
150
+ KEYCODE_BUTTON_SELECT: 109,
151
+ KEYCODE_BUTTON_MODE: 110,
152
+ KEYCODE_ESCAPE: 111,
153
+ FORWARD_DEL: 112, // KEYCODE_FORWARD_DEL (Delete key)
154
+ KEYCODE_CTRL_LEFT: 113,
155
+ KEYCODE_CTRL_RIGHT: 114,
156
+ KEYCODE_CAPS_LOCK: 115,
157
+ KEYCODE_SCROLL_LOCK: 116,
158
+ KEYCODE_META_LEFT: 117,
159
+ KEYCODE_META_RIGHT: 118,
160
+ KEYCODE_FUNCTION: 119,
161
+ KEYCODE_SYSRQ: 120,
162
+ KEYCODE_BREAK: 121,
163
+ KEYCODE_MOVE_HOME: 122,
164
+ KEYCODE_MOVE_END: 123,
165
+ KEYCODE_INSERT: 124,
166
+ KEYCODE_FORWARD: 125,
167
+ KEYCODE_MEDIA_PLAY: 126,
168
+ KEYCODE_MEDIA_PAUSE: 127,
169
+ KEYCODE_MEDIA_CLOSE: 128,
170
+ KEYCODE_MEDIA_EJECT: 129,
171
+ KEYCODE_MEDIA_RECORD: 130,
172
+ KEYCODE_F1: 131,
173
+ KEYCODE_F2: 132,
174
+ KEYCODE_F3: 133,
175
+ KEYCODE_F4: 134,
176
+ KEYCODE_F5: 135,
177
+ KEYCODE_F6: 136,
178
+ KEYCODE_F7: 137,
179
+ KEYCODE_F8: 138,
180
+ KEYCODE_F9: 139,
181
+ KEYCODE_F10: 140,
182
+ KEYCODE_F11: 141,
183
+ KEYCODE_F12: 142,
184
+ KEYCODE_NUM_LOCK: 143,
185
+ KEYCODE_NUMPAD_0: 144,
186
+ KEYCODE_NUMPAD_1: 145,
187
+ KEYCODE_NUMPAD_2: 146,
188
+ KEYCODE_NUMPAD_3: 147,
189
+ KEYCODE_NUMPAD_4: 148,
190
+ KEYCODE_NUMPAD_5: 149,
191
+ KEYCODE_NUMPAD_6: 150,
192
+ KEYCODE_NUMPAD_7: 151,
193
+ KEYCODE_NUMPAD_8: 152,
194
+ KEYCODE_NUMPAD_9: 153,
195
+ KEYCODE_NUMPAD_DIVIDE: 154,
196
+ KEYCODE_NUMPAD_MULTIPLY: 155,
197
+ KEYCODE_NUMPAD_SUBTRACT: 156,
198
+ KEYCODE_NUMPAD_ADD: 157,
199
+ KEYCODE_NUMPAD_DOT: 158,
200
+ KEYCODE_NUMPAD_COMMA: 159,
201
+ KEYCODE_NUMPAD_ENTER: 160,
202
+ KEYCODE_NUMPAD_EQUALS: 161,
203
+ KEYCODE_NUMPAD_LEFT_PAREN: 162,
204
+ KEYCODE_NUMPAD_RIGHT_PAREN: 163,
205
+ KEYCODE_VOLUME_MUTE: 164,
206
+ KEYCODE_INFO: 165,
207
+ KEYCODE_CHANNEL_UP: 166,
208
+ KEYCODE_CHANNEL_DOWN: 167,
209
+ KEYCODE_ZOOM_IN: 168,
210
+ KEYCODE_ZOOM_OUT: 169,
211
+ KEYCODE_TV: 170,
212
+ KEYCODE_WINDOW: 171,
213
+ KEYCODE_GUIDE: 172,
214
+ KEYCODE_DVR: 173,
215
+ KEYCODE_BOOKMARK: 174,
216
+ KEYCODE_CAPTIONS: 175,
217
+ KEYCODE_SETTINGS: 176,
218
+ KEYCODE_TV_POWER: 177,
219
+ KEYCODE_TV_INPUT: 178,
220
+ KEYCODE_STB_POWER: 179,
221
+ KEYCODE_STB_INPUT: 180,
222
+ KEYCODE_AVR_POWER: 181,
223
+ KEYCODE_AVR_INPUT: 182,
224
+ KEYCODE_PROG_RED: 183,
225
+ KEYCODE_PROG_GREEN: 184,
226
+ KEYCODE_PROG_YELLOW: 185,
227
+ KEYCODE_PROG_BLUE: 186,
228
+ KEYCODE_APP_SWITCH: 187,
229
+ KEYCODE_LANGUAGE_SWITCH: 204,
230
+ KEYCODE_ASSIST: 219,
231
+ KEYCODE_BRIGHTNESS_DOWN: 220,
232
+ KEYCODE_BRIGHTNESS_UP: 221,
233
+ KEYCODE_SLEEP: 223,
234
+ KEYCODE_WAKEUP: 224,
235
+ KEYCODE_SOFT_SLEEP: 276,
236
+ } as const;
237
+
238
+ // Map based on event.code for layout independence
239
+ export const codeMap: { [code: string]: number } = {
240
+ KeyA: ANDROID_KEYS.KEYCODE_A,
241
+ KeyB: ANDROID_KEYS.KEYCODE_B,
242
+ KeyC: ANDROID_KEYS.KEYCODE_C,
243
+ KeyD: ANDROID_KEYS.KEYCODE_D,
244
+ KeyE: ANDROID_KEYS.KEYCODE_E,
245
+ KeyF: ANDROID_KEYS.KEYCODE_F,
246
+ KeyG: ANDROID_KEYS.KEYCODE_G,
247
+ KeyH: ANDROID_KEYS.KEYCODE_H,
248
+ KeyI: ANDROID_KEYS.KEYCODE_I,
249
+ KeyJ: ANDROID_KEYS.KEYCODE_J,
250
+ KeyK: ANDROID_KEYS.KEYCODE_K,
251
+ KeyL: ANDROID_KEYS.KEYCODE_L,
252
+ KeyM: ANDROID_KEYS.KEYCODE_M,
253
+ KeyN: ANDROID_KEYS.KEYCODE_N,
254
+ KeyO: ANDROID_KEYS.KEYCODE_O,
255
+ KeyP: ANDROID_KEYS.KEYCODE_P,
256
+ KeyQ: ANDROID_KEYS.KEYCODE_Q,
257
+ KeyR: ANDROID_KEYS.KEYCODE_R,
258
+ KeyS: ANDROID_KEYS.KEYCODE_S,
259
+ KeyT: ANDROID_KEYS.KEYCODE_T,
260
+ KeyU: ANDROID_KEYS.KEYCODE_U,
261
+ KeyV: ANDROID_KEYS.KEYCODE_V,
262
+ KeyW: ANDROID_KEYS.KEYCODE_W,
263
+ KeyX: ANDROID_KEYS.KEYCODE_X,
264
+ KeyY: ANDROID_KEYS.KEYCODE_Y,
265
+ KeyZ: ANDROID_KEYS.KEYCODE_Z,
266
+ Digit0: ANDROID_KEYS.KEYCODE_0,
267
+ Digit1: ANDROID_KEYS.KEYCODE_1,
268
+ Digit2: ANDROID_KEYS.KEYCODE_2,
269
+ Digit3: ANDROID_KEYS.KEYCODE_3,
270
+ Digit4: ANDROID_KEYS.KEYCODE_4,
271
+ Digit5: ANDROID_KEYS.KEYCODE_5,
272
+ Digit6: ANDROID_KEYS.KEYCODE_6,
273
+ Digit7: ANDROID_KEYS.KEYCODE_7,
274
+ Digit8: ANDROID_KEYS.KEYCODE_8,
275
+ Digit9: ANDROID_KEYS.KEYCODE_9,
276
+ Backquote: ANDROID_KEYS.KEYCODE_GRAVE,
277
+ Minus: ANDROID_KEYS.KEYCODE_MINUS,
278
+ Equal: ANDROID_KEYS.KEYCODE_EQUALS,
279
+ BracketLeft: ANDROID_KEYS.KEYCODE_LEFT_BRACKET,
280
+ BracketRight: ANDROID_KEYS.KEYCODE_RIGHT_BRACKET,
281
+ Backslash: ANDROID_KEYS.KEYCODE_BACKSLASH,
282
+ Semicolon: ANDROID_KEYS.KEYCODE_SEMICOLON,
283
+ Quote: ANDROID_KEYS.KEYCODE_APOSTROPHE,
284
+ Comma: ANDROID_KEYS.KEYCODE_COMMA,
285
+ Period: ANDROID_KEYS.KEYCODE_PERIOD,
286
+ Slash: ANDROID_KEYS.KEYCODE_SLASH,
287
+ Space: ANDROID_KEYS.KEYCODE_SPACE,
288
+ Tab: ANDROID_KEYS.KEYCODE_TAB,
289
+ Escape: ANDROID_KEYS.KEYCODE_ESCAPE,
290
+ ArrowUp: ANDROID_KEYS.DPAD_UP,
291
+ ArrowDown: ANDROID_KEYS.DPAD_DOWN,
292
+ ArrowLeft: ANDROID_KEYS.DPAD_LEFT,
293
+ ArrowRight: ANDROID_KEYS.DPAD_RIGHT,
294
+ Enter: ANDROID_KEYS.ENTER,
295
+ Backspace: ANDROID_KEYS.DEL,
296
+ Delete: ANDROID_KEYS.FORWARD_DEL,
297
+ Home: ANDROID_KEYS.KEYCODE_MOVE_HOME,
298
+ End: ANDROID_KEYS.KEYCODE_MOVE_END,
299
+ PageUp: ANDROID_KEYS.KEYCODE_PAGE_UP,
300
+ PageDown: ANDROID_KEYS.KEYCODE_PAGE_DOWN,
301
+ Insert: ANDROID_KEYS.KEYCODE_INSERT,
302
+ F1: ANDROID_KEYS.KEYCODE_F1,
303
+ F2: ANDROID_KEYS.KEYCODE_F2,
304
+ F3: ANDROID_KEYS.KEYCODE_F3,
305
+ F4: ANDROID_KEYS.KEYCODE_F4,
306
+ F5: ANDROID_KEYS.KEYCODE_F5,
307
+ F6: ANDROID_KEYS.KEYCODE_F6,
308
+ F7: ANDROID_KEYS.KEYCODE_F7,
309
+ F8: ANDROID_KEYS.KEYCODE_F8,
310
+ F9: ANDROID_KEYS.KEYCODE_F9,
311
+ F10: ANDROID_KEYS.KEYCODE_F10,
312
+ F11: ANDROID_KEYS.KEYCODE_F11,
313
+ F12: ANDROID_KEYS.KEYCODE_F12,
314
+ ShiftLeft: ANDROID_KEYS.KEYCODE_SHIFT_LEFT,
315
+ ShiftRight: ANDROID_KEYS.KEYCODE_SHIFT_RIGHT,
316
+ ControlLeft: ANDROID_KEYS.KEYCODE_CTRL_LEFT,
317
+ ControlRight: ANDROID_KEYS.KEYCODE_CTRL_RIGHT,
318
+ AltLeft: ANDROID_KEYS.KEYCODE_ALT_LEFT,
319
+ AltRight: ANDROID_KEYS.KEYCODE_ALT_RIGHT,
320
+ MetaLeft: ANDROID_KEYS.KEYCODE_META_LEFT,
321
+ MetaRight: ANDROID_KEYS.KEYCODE_META_RIGHT, // Windows/Command key
322
+ ContextMenu: ANDROID_KEYS.MENU, // Often the Menu key
323
+ // Numpad mappings
324
+ Numpad0: ANDROID_KEYS.KEYCODE_NUMPAD_0,
325
+ Numpad1: ANDROID_KEYS.KEYCODE_NUMPAD_1,
326
+ Numpad2: ANDROID_KEYS.KEYCODE_NUMPAD_2,
327
+ Numpad3: ANDROID_KEYS.KEYCODE_NUMPAD_3,
328
+ Numpad4: ANDROID_KEYS.KEYCODE_NUMPAD_4,
329
+ Numpad5: ANDROID_KEYS.KEYCODE_NUMPAD_5,
330
+ Numpad6: ANDROID_KEYS.KEYCODE_NUMPAD_6,
331
+ Numpad7: ANDROID_KEYS.KEYCODE_NUMPAD_7,
332
+ Numpad8: ANDROID_KEYS.KEYCODE_NUMPAD_8,
333
+ Numpad9: ANDROID_KEYS.KEYCODE_NUMPAD_9,
334
+ NumpadDivide: ANDROID_KEYS.KEYCODE_NUMPAD_DIVIDE,
335
+ NumpadMultiply: ANDROID_KEYS.KEYCODE_NUMPAD_MULTIPLY,
336
+ NumpadSubtract: ANDROID_KEYS.KEYCODE_NUMPAD_SUBTRACT,
337
+ NumpadAdd: ANDROID_KEYS.KEYCODE_NUMPAD_ADD,
338
+ NumpadDecimal: ANDROID_KEYS.KEYCODE_NUMPAD_DOT,
339
+ NumpadComma: ANDROID_KEYS.KEYCODE_NUMPAD_COMMA, // Some numpads have comma
340
+ NumpadEnter: ANDROID_KEYS.KEYCODE_NUMPAD_ENTER,
341
+ NumpadEqual: ANDROID_KEYS.KEYCODE_NUMPAD_EQUALS,
342
+ };
@@ -0,0 +1,100 @@
1
+ import { CONTROL_MSG_TYPE } from './constants';
2
+
3
+ export function createTouchControlMessage(
4
+ action: number,
5
+ pointerId: number,
6
+ videoWidth: number,
7
+ videoHeight: number,
8
+ x: number,
9
+ y: number,
10
+ pressure = 1.0,
11
+ actionButton = 0,
12
+ buttons = 0,
13
+ ): ArrayBuffer {
14
+ const buffer = new ArrayBuffer(32);
15
+ const view = new DataView(buffer);
16
+ let offset = 0;
17
+
18
+ view.setUint8(offset, CONTROL_MSG_TYPE.INJECT_TOUCH_EVENT);
19
+ offset += 1;
20
+
21
+ view.setUint8(offset, action);
22
+ offset += 1;
23
+
24
+ view.setBigInt64(offset, BigInt(pointerId));
25
+ offset += 8;
26
+
27
+ view.setInt32(offset, Math.round(x), true);
28
+ offset += 4;
29
+ view.setInt32(offset, Math.round(y), true);
30
+ offset += 4;
31
+ view.setUint16(offset, videoWidth, true);
32
+ offset += 2;
33
+ view.setUint16(offset, videoHeight, true);
34
+ offset += 2;
35
+
36
+ view.setInt16(offset, Math.round(pressure * 0xffff), true);
37
+ offset += 2;
38
+
39
+ view.setInt32(offset, actionButton, true);
40
+ offset += 4;
41
+
42
+ view.setInt32(offset, buttons, true);
43
+ return buffer;
44
+ }
45
+
46
+ export function createSetClipboardMessage(text: string, paste = true): ArrayBuffer {
47
+ const encoder = new TextEncoder();
48
+ const textBytes = encoder.encode(text);
49
+
50
+ // 1 byte for type + 8 bytes for sequence + 1 byte for paste flag + 4 bytes for length + text bytes
51
+ const buffer = new ArrayBuffer(14 + textBytes.length);
52
+ const view = new DataView(buffer);
53
+ let offset = 0;
54
+
55
+ view.setUint8(offset, CONTROL_MSG_TYPE.SET_CLIPBOARD);
56
+ offset += 1;
57
+
58
+ // Use 0 as sequence since we don't need an acknowledgement
59
+ view.setBigInt64(offset, BigInt(0), false);
60
+ offset += 8;
61
+
62
+ // Set paste flag
63
+ view.setUint8(offset, paste ? 1 : 0);
64
+ offset += 1;
65
+
66
+ // Text length
67
+ view.setUint32(offset, textBytes.length, false);
68
+ offset += 4;
69
+
70
+ // Text data
71
+ new Uint8Array(buffer, offset).set(textBytes);
72
+
73
+ return buffer;
74
+ }
75
+
76
+ export function createInjectKeycodeMessage(
77
+ action: number,
78
+ keycode: number,
79
+ repeat = 0,
80
+ metaState = 0,
81
+ ): ArrayBuffer {
82
+ const buffer = new ArrayBuffer(14);
83
+ const view = new DataView(buffer);
84
+ let offset = 0;
85
+
86
+ view.setUint8(offset, CONTROL_MSG_TYPE.INJECT_KEYCODE);
87
+ offset += 1;
88
+
89
+ view.setUint8(offset, action);
90
+ offset += 1;
91
+
92
+ view.setInt32(offset, keycode, true);
93
+ offset += 4;
94
+
95
+ view.setInt32(offset, repeat, true);
96
+ offset += 4;
97
+
98
+ view.setInt32(offset, metaState, true);
99
+ return buffer;
100
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { RemoteControl } from './components/remote-control';
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
package/tsconfig.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": false,
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "noEmit": false,
13
+ "emitDeclarationOnly": true,
14
+ "declaration": true,
15
+ "declarationDir": "dist",
16
+ "jsx": "react-jsx",
17
+ "strict": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "noFallthroughCasesInSwitch": true,
21
+ "outDir": "dist"
22
+ },
23
+ "include": ["src"],
24
+ "exclude": ["**/*.test.ts", "**/*.test.tsx", "node_modules", "dist"],
25
+ "references": [{ "path": "./tsconfig.node.json" }]
26
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
+ "target": "ES2022",
6
+ "lib": ["ES2023"],
7
+ "module": "ESNext",
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "isolatedModules": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": false,
16
+ "emitDeclarationOnly": true,
17
+
18
+ /* Linting */
19
+ "strict": true,
20
+ "noUnusedLocals": true,
21
+ "noUnusedParameters": true,
22
+ "noFallthroughCasesInSwitch": true,
23
+ "noUncheckedSideEffectImports": true
24
+ },
25
+ "include": ["vite.config.ts"]
26
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react-swc';
3
+ import { resolve } from 'path';
4
+ import dts from 'vite-plugin-dts';
5
+ import { libInjectCss } from 'vite-plugin-lib-inject-css';
6
+
7
+ // https://vite.dev/config/
8
+ export default defineConfig({
9
+ plugins: [react(), libInjectCss(), dts({ include: ['src'] })],
10
+ build: {
11
+ lib: {
12
+ entry: resolve(__dirname, 'src/index.ts'),
13
+ name: 'LimrunUI',
14
+ formats: ['es', 'cjs'],
15
+ fileName: (format) => `index.${format === 'es' ? 'js' : 'cjs'}`,
16
+ },
17
+ rollupOptions: {
18
+ external: ['react', 'react-dom', 'react/jsx-runtime'],
19
+ output: {
20
+ globals: {
21
+ react: 'React',
22
+ 'react-dom': 'ReactDOM',
23
+ 'react/jsx-runtime': 'jsxRuntime',
24
+ },
25
+ },
26
+ },
27
+ },
28
+ });