@iwer/devui 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.
Files changed (58) hide show
  1. package/build/iwe.min.js +180 -0
  2. package/build/iwer-devui.js +40068 -0
  3. package/build/iwer-devui.min.js +252 -0
  4. package/build/iwer-devui.module.js +40060 -0
  5. package/build/iwer-devui.module.min.js +252 -0
  6. package/lib/components/analog.d.ts +11 -0
  7. package/lib/components/analog.d.ts.map +1 -0
  8. package/lib/components/analog.js +103 -0
  9. package/lib/components/analog.js.map +1 -0
  10. package/lib/components/binary.d.ts +11 -0
  11. package/lib/components/binary.d.ts.map +1 -0
  12. package/lib/components/binary.js +69 -0
  13. package/lib/components/binary.js.map +1 -0
  14. package/lib/components/controls.d.ts +11 -0
  15. package/lib/components/controls.d.ts.map +1 -0
  16. package/lib/components/controls.js +58 -0
  17. package/lib/components/controls.js.map +1 -0
  18. package/lib/components/fov.d.ts +10 -0
  19. package/lib/components/fov.d.ts.map +1 -0
  20. package/lib/components/fov.js +25 -0
  21. package/lib/components/fov.js.map +1 -0
  22. package/lib/components/header.d.ts +14 -0
  23. package/lib/components/header.d.ts.map +1 -0
  24. package/lib/components/header.js +70 -0
  25. package/lib/components/header.js.map +1 -0
  26. package/lib/components/icons.d.ts +31 -0
  27. package/lib/components/icons.d.ts.map +1 -0
  28. package/lib/components/icons.js +254 -0
  29. package/lib/components/icons.js.map +1 -0
  30. package/lib/components/joystick.d.ts +15 -0
  31. package/lib/components/joystick.d.ts.map +1 -0
  32. package/lib/components/joystick.js +238 -0
  33. package/lib/components/joystick.js.map +1 -0
  34. package/lib/components/keys.d.ts +4 -0
  35. package/lib/components/keys.d.ts.map +1 -0
  36. package/lib/components/keys.js +68 -0
  37. package/lib/components/keys.js.map +1 -0
  38. package/lib/components/mapper.d.ts +12 -0
  39. package/lib/components/mapper.d.ts.map +1 -0
  40. package/lib/components/mapper.js +128 -0
  41. package/lib/components/mapper.js.map +1 -0
  42. package/lib/components/settings.d.ts +50 -0
  43. package/lib/components/settings.d.ts.map +1 -0
  44. package/lib/components/settings.js +103 -0
  45. package/lib/components/settings.js.map +1 -0
  46. package/lib/components/styled.d.ts +31 -0
  47. package/lib/components/styled.d.ts.map +1 -0
  48. package/lib/components/styled.js +153 -0
  49. package/lib/components/styled.js.map +1 -0
  50. package/lib/index.d.ts +12 -0
  51. package/lib/index.d.ts.map +1 -0
  52. package/lib/index.js +75 -0
  53. package/lib/index.js.map +1 -0
  54. package/lib/scene.d.ts +54 -0
  55. package/lib/scene.d.ts.map +1 -0
  56. package/lib/scene.js +271 -0
  57. package/lib/scene.js.map +1 -0
  58. package/package.json +51 -0
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { XRController } from '../../../lib/device/XRController';
3
+ interface AnalogButtonProps {
4
+ xrController: XRController;
5
+ buttonId: string;
6
+ pointerLocked: boolean;
7
+ mappedKey: string;
8
+ }
9
+ export declare const AnalogButton: React.FC<AnalogButtonProps>;
10
+ export {};
11
+ //# sourceMappingURL=analog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/components/analog.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,UAAU,iBAAiB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyIpD,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, ButtonContainer, ButtonGroup, FAIcon, MappedKeyBlock, RangeSelector, } from './styled.js';
3
+ import { useEffect, useState } from 'react';
4
+ import { GamepadIcon } from './icons.js';
5
+ import { MappedKeyDisplay } from './keys.js';
6
+ import { faFingerprint } from '@fortawesome/free-solid-svg-icons';
7
+ export const AnalogButton = ({ xrController, buttonId, pointerLocked, mappedKey, }) => {
8
+ const [isTouched, setIsTouched] = useState(false);
9
+ const [isPressed, setIsPressed] = useState(false);
10
+ const [isKeyPressed, setIsKeyPressed] = useState(false);
11
+ const [analogValue, setAnalogValue] = useState(0);
12
+ const handedness = xrController.inputSource.handedness;
13
+ useEffect(() => {
14
+ const handleKeyDown = (event) => {
15
+ if (event.code === mappedKey) {
16
+ xrController.updateButtonValue(buttonId, 1);
17
+ setIsKeyPressed(true);
18
+ }
19
+ };
20
+ const handleKeyUp = (event) => {
21
+ if (event.code === mappedKey) {
22
+ xrController.updateButtonValue(buttonId, 0);
23
+ setIsKeyPressed(false);
24
+ }
25
+ };
26
+ const handleMouseDown = (event) => {
27
+ if (mappedKey === 'MouseLeft' && event.button === 0) {
28
+ xrController.updateButtonValue(buttonId, 1);
29
+ setIsKeyPressed(true);
30
+ }
31
+ else if (mappedKey === 'MouseRight' && event.button === 2) {
32
+ xrController.updateButtonValue(buttonId, 1);
33
+ setIsKeyPressed(true);
34
+ }
35
+ };
36
+ const handleMouseUp = (event) => {
37
+ if (mappedKey === 'MouseLeft' && event.button === 0) {
38
+ xrController.updateButtonValue(buttonId, 0);
39
+ setIsKeyPressed(false);
40
+ }
41
+ else if (mappedKey === 'MouseRight' && event.button === 2) {
42
+ xrController.updateButtonValue(buttonId, 0);
43
+ setIsKeyPressed(false);
44
+ }
45
+ };
46
+ if (pointerLocked) {
47
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
48
+ window.addEventListener('mousedown', handleMouseDown);
49
+ window.addEventListener('mouseup', handleMouseUp);
50
+ }
51
+ else {
52
+ window.addEventListener('keydown', handleKeyDown);
53
+ window.addEventListener('keyup', handleKeyUp);
54
+ }
55
+ }
56
+ else {
57
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
58
+ window.removeEventListener('mousedown', handleMouseDown);
59
+ window.removeEventListener('mouseup', handleMouseUp);
60
+ }
61
+ else {
62
+ window.removeEventListener('keydown', handleKeyDown);
63
+ window.removeEventListener('keyup', handleKeyUp);
64
+ }
65
+ }
66
+ return () => {
67
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
68
+ window.removeEventListener('mousedown', handleMouseDown);
69
+ window.removeEventListener('mouseup', handleMouseUp);
70
+ }
71
+ else {
72
+ window.removeEventListener('keydown', handleKeyDown);
73
+ window.removeEventListener('keyup', handleKeyUp);
74
+ }
75
+ };
76
+ }, [mappedKey, pointerLocked, buttonId, xrController]);
77
+ return (_jsxs(ButtonContainer, { "$reverse": handedness === 'right', children: [_jsx(GamepadIcon, { buttonName: buttonId, handedness: handedness }), _jsx(ButtonGroup, { "$reverse": handedness === 'right', children: pointerLocked ? (_jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { "$reverse": handedness === 'right', style: {
78
+ backgroundColor: isPressed
79
+ ? 'rgba(255, 255, 255, 0.6)'
80
+ : 'rgba(255, 255, 255, 0.3)',
81
+ width: '50px',
82
+ }, onClick: () => {
83
+ setIsPressed(true);
84
+ xrController.updateButtonValue(buttonId, 1);
85
+ setTimeout(() => {
86
+ setIsPressed(false);
87
+ xrController.updateButtonValue(buttonId, 0);
88
+ }, 500);
89
+ }, children: "Press" }), _jsx(Button, { "$reverse": handedness === 'right', style: {
90
+ backgroundColor: isTouched
91
+ ? 'rgba(255, 255, 255, 0.6)'
92
+ : 'rgba(255, 255, 255, 0.3)',
93
+ width: '29px',
94
+ }, onClick: () => {
95
+ setIsTouched(!isTouched);
96
+ xrController.updateButtonTouch(buttonId, !isTouched);
97
+ }, children: _jsx(FAIcon, { icon: faFingerprint }) }), _jsx(RangeSelector, { "$reverse": handedness === 'right', value: analogValue, onChange: (e) => {
98
+ const value = Number(e.target.value);
99
+ setAnalogValue(value);
100
+ xrController.updateButtonValue(buttonId, value / 100);
101
+ }, min: "0", max: "100" })] })) })] }));
102
+ };
103
+ //# sourceMappingURL=analog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/components/analog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { XRController } from '../../../lib/device/XRController';
3
+ interface BinaryButtonProps {
4
+ xrController: XRController;
5
+ buttonId: string;
6
+ pointerLocked: boolean;
7
+ mappedKey: string;
8
+ }
9
+ export declare const BinaryButton: React.FC<BinaryButtonProps>;
10
+ export {};
11
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/components/binary.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,UAAU,iBAAiB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0GpD,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, ButtonContainer, ButtonGroup, FAIcon, MappedKeyBlock, } from './styled.js';
3
+ import { useEffect, useState } from 'react';
4
+ import { GamepadIcon } from './icons.js';
5
+ import { MappedKeyDisplay } from './keys.js';
6
+ import { faFingerprint } from '@fortawesome/free-solid-svg-icons';
7
+ export const BinaryButton = ({ xrController, buttonId, pointerLocked, mappedKey, }) => {
8
+ const [isTouched, setIsTouched] = useState(false);
9
+ const [isOnHold, setIsOnHold] = useState(false);
10
+ const [isPressed, setIsPressed] = useState(false);
11
+ const [isKeyPressed, setIsKeyPressed] = useState(false);
12
+ const handedness = xrController.inputSource.handedness;
13
+ useEffect(() => {
14
+ const handleKeyDown = (event) => {
15
+ if (event.code === mappedKey) {
16
+ xrController.updateButtonValue(buttonId, 1);
17
+ setIsKeyPressed(true);
18
+ }
19
+ };
20
+ const handleKeyUp = (event) => {
21
+ if (event.code === mappedKey) {
22
+ xrController.updateButtonValue(buttonId, 0);
23
+ setIsKeyPressed(false);
24
+ }
25
+ };
26
+ if (pointerLocked) {
27
+ window.addEventListener('keydown', handleKeyDown);
28
+ window.addEventListener('keyup', handleKeyUp);
29
+ }
30
+ else {
31
+ window.removeEventListener('keydown', handleKeyDown);
32
+ window.removeEventListener('keyup', handleKeyUp);
33
+ }
34
+ return () => {
35
+ window.removeEventListener('keydown', handleKeyDown);
36
+ window.removeEventListener('keyup', handleKeyUp);
37
+ };
38
+ }, [mappedKey, pointerLocked, buttonId, xrController]);
39
+ return (_jsxs(ButtonContainer, { "$reverse": handedness === 'right', children: [_jsx(GamepadIcon, { buttonName: buttonId, handedness: handedness }), _jsx(ButtonGroup, { "$reverse": handedness === 'right', children: pointerLocked ? (_jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { "$reverse": handedness === 'right', style: {
40
+ backgroundColor: isPressed
41
+ ? 'rgba(255, 255, 255, 0.6)'
42
+ : 'rgba(255, 255, 255, 0.3)',
43
+ width: '50px',
44
+ }, onClick: () => {
45
+ setIsPressed(true);
46
+ xrController.updateButtonValue(buttonId, 1);
47
+ setTimeout(() => {
48
+ setIsPressed(false);
49
+ xrController.updateButtonValue(buttonId, 0);
50
+ }, 500);
51
+ }, children: "Press" }), _jsx(Button, { "$reverse": handedness === 'right', style: {
52
+ backgroundColor: isTouched
53
+ ? 'rgba(255, 255, 255, 0.6)'
54
+ : 'rgba(255, 255, 255, 0.3)',
55
+ width: '29px',
56
+ }, onClick: () => {
57
+ setIsTouched(!isTouched);
58
+ xrController.updateButtonTouch(buttonId, !isTouched);
59
+ }, children: _jsx(FAIcon, { icon: faFingerprint }) }), _jsx(Button, { "$reverse": handedness === 'right', style: {
60
+ backgroundColor: isOnHold
61
+ ? 'rgba(255, 255, 255, 0.6)'
62
+ : 'rgba(255, 255, 255, 0.3)',
63
+ width: '49px',
64
+ }, onClick: () => {
65
+ setIsOnHold(!isOnHold);
66
+ xrController.updateButtonValue(buttonId, isOnHold ? 0 : 1);
67
+ }, children: "Hold" })] })) })] }));
68
+ };
69
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/components/binary.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { KeyMapType } from './mapper.js';
2
+ import React from 'react';
3
+ import { XRDevice } from 'iwer';
4
+ interface ControlsProps {
5
+ xrDevice: XRDevice;
6
+ keyMap: KeyMapType;
7
+ pointerLocked: boolean;
8
+ }
9
+ export declare const ControlsUI: React.FC<ControlsProps>;
10
+ export {};
11
+ //# sourceMappingURL=controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAahC,UAAU,aAAa;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACvB;AAuCD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA+D9C,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AnalogButton } from './analog.js';
3
+ import { BinaryButton } from './binary.js';
4
+ import { Joystick } from './joystick.js';
5
+ import styled from 'styled-components';
6
+ const ControlsContainer = styled.div `
7
+ padding: ${({ $reverse }) => $reverse ? '6px 2px 3px 5px' : '6px 5px 3px 2px'};
8
+ pointer-events: all;
9
+ background-color: rgba(43, 43, 43, 0.5);
10
+ backdrop-filter: blur(10px);
11
+ -webkit-backdrop-filter: blur(10px);
12
+ border-radius: ${({ $reverse }) => ($reverse ? '12px 0 0 0' : '0 12px 0 0')};
13
+ `;
14
+ function transformGamepadConfig(gamepadConfig) {
15
+ const axesSet = new Set();
16
+ // Add all axis ids to the set
17
+ for (const axis of gamepadConfig.axes) {
18
+ if (axis && axis.id) {
19
+ axesSet.add(axis.id);
20
+ }
21
+ }
22
+ // Transform buttons to the desired format
23
+ const transformed = gamepadConfig.buttons
24
+ .filter((button) => button !== null) // Filter out null values
25
+ .map((button) => ({
26
+ id: button.id,
27
+ type: button.type,
28
+ hasAxes: axesSet.has(button.id),
29
+ }));
30
+ // Sort the array by hasAxes
31
+ transformed.sort((a, b) => {
32
+ if (a.hasAxes && !b.hasAxes)
33
+ return -1;
34
+ if (!a.hasAxes && b.hasAxes)
35
+ return 1;
36
+ return 0;
37
+ });
38
+ return transformed;
39
+ }
40
+ export const ControlsUI = ({ xrDevice, keyMap, pointerLocked, }) => {
41
+ return (_jsx("div", { style: {
42
+ display: 'flex',
43
+ justifyContent: 'space-between',
44
+ flexDirection: 'row',
45
+ }, children: Object.entries(xrDevice.controllers).map(([handedness, controller]) => (_jsx(ControlsContainer, { "$reverse": handedness !== 'left', children: transformGamepadConfig(controller.gamepadConfig).map((buttonConfig) => {
46
+ const mapping = keyMap[handedness];
47
+ if (buttonConfig.hasAxes) {
48
+ return (_jsx(Joystick, { xrController: controller, pointerLocked: pointerLocked, buttonId: buttonConfig.id, mappedKeyUp: keyMap[handedness][`${buttonConfig.id}-up`], mappedKeyDown: mapping[`${buttonConfig.id}-down`], mappedKeyLeft: mapping[`${buttonConfig.id}-left`], mappedKeyRight: mapping[`${buttonConfig.id}-right`], mappedKeyPressed: mapping[buttonConfig.id] }, buttonConfig.id));
49
+ }
50
+ else if (buttonConfig.type === 'analog') {
51
+ return (_jsx(AnalogButton, { xrController: controller, buttonId: buttonConfig.id, mappedKey: mapping[buttonConfig.id], pointerLocked: pointerLocked }, buttonConfig.id));
52
+ }
53
+ else {
54
+ return (_jsx(BinaryButton, { xrController: controller, buttonId: buttonConfig.id, mappedKey: mapping[buttonConfig.id], pointerLocked: pointerLocked }, buttonConfig.id));
55
+ }
56
+ }) }, handedness))) }));
57
+ };
58
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { InputLayer } from '../scene.js';
3
+ import { XRDevice } from 'iwer';
4
+ interface FOVMenuProps {
5
+ xrDevice: XRDevice;
6
+ inputLayer: InputLayer;
7
+ }
8
+ export declare const FOVMenu: React.FC<FOVMenuProps>;
9
+ export {};
10
+ //# sourceMappingURL=fov.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fov.d.ts","sourceRoot":"","sources":["../../src/components/fov.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,UAAU,YAAY;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACvB;AAaD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6B1C,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, ButtonGroup, RangeSelector } from './styled.js';
3
+ import { useState } from 'react';
4
+ import styled from 'styled-components';
5
+ const FovSettingContainer = styled.div `
6
+ display: flex;
7
+ justify-content: center;
8
+ pointer-events: all;
9
+ position: fixed;
10
+ display: flex;
11
+ top: 40px;
12
+ left: calc(50vw - 156px);
13
+ width: 312px;
14
+ `;
15
+ export const FOVMenu = ({ xrDevice, inputLayer }) => {
16
+ const [fovy, setFovy] = useState(xrDevice.fovy);
17
+ return (_jsx(FovSettingContainer, { children: _jsxs(ButtonGroup, { "$reverse": false, children: [_jsx(Button, { "$reverse": false, disabled: true, children: "FOV-Y" }), _jsx(RangeSelector, { "$reverse": false, value: fovy, style: { width: '100px', borderRadius: '2px' }, onChange: (e) => {
18
+ const value = Number(e.target.value);
19
+ setFovy(value);
20
+ xrDevice.fovy = value;
21
+ inputLayer.syncFovy();
22
+ inputLayer.renderScene();
23
+ }, min: Math.PI / 6, max: Math.PI / 1.5, step: Math.PI / 48 }), _jsxs(Button, { "$reverse": false, disabled: true, children: [((fovy / Math.PI) * 180).toFixed(2), "\u00B0"] })] }) }));
24
+ };
25
+ //# sourceMappingURL=fov.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fov.js","sourceRoot":"","sources":["../../src/components/fov.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAOvC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;CASrC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;IAC3E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CACN,KAAC,mBAAmB,cACnB,MAAC,WAAW,gBAAW,KAAK,aAC3B,KAAC,MAAM,gBAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,sBAE9B,EACT,KAAC,aAAa,gBACH,KAAK,EACf,KAAK,EAAE,IAAI,EACX,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAC9C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;wBACf,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACf,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;wBACtB,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACtB,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC1B,CAAC,EACD,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAChB,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,EAClB,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GACjB,EACF,MAAC,MAAM,gBAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,aACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAC5B,IACI,GACO,CACtB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { InputLayer } from '../scene.js';
2
+ import React from 'react';
3
+ import { XRDevice } from 'iwer';
4
+ interface HeaderUIProps {
5
+ xrDevice: XRDevice;
6
+ inputLayer: InputLayer;
7
+ keyMapOpen: boolean;
8
+ setKeyMapOpen: React.Dispatch<React.SetStateAction<boolean>>;
9
+ fovSettingOpen: boolean;
10
+ setFovSettingOpen: React.Dispatch<React.SetStateAction<boolean>>;
11
+ }
12
+ export declare const HeaderUI: React.FC<HeaderUIProps>;
13
+ export {};
14
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/components/header.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AA4ChC,UAAU,aAAa;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAiH5C,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, FAIcon, MappedKeyBlock } from './styled.js';
3
+ import { faArrowsUpDown, faCaretDown, faCaretUp, faCirclePlay, faKeyboard, faRightFromBracket, faRotateLeft, faSquareArrowUpRight, faVideo, } from '@fortawesome/free-solid-svg-icons';
4
+ import { IWERIcon } from './icons.js';
5
+ import styled from 'styled-components';
6
+ const HeaderButtonsContainer = styled.div `
7
+ padding: 6px 5px;
8
+ display: flex;
9
+ background-color: rgba(43, 43, 43, 0.5);
10
+ backdrop-filter: blur(10px);
11
+ -webkit-backdrop-filter: blur(10px);
12
+ justify-content: center;
13
+ pointer-events: all;
14
+ border-radius: 0 0 12px 12px;
15
+ align-items: center;
16
+ height: 24px;
17
+ `;
18
+ const MovementInstructionsContainer = styled.div `
19
+ background-color: rgba(43, 43, 43, 0.5);
20
+ backdrop-filter: blur(10px);
21
+ -webkit-backdrop-filter: blur(10px);
22
+ border: none;
23
+ display: flex;
24
+ flex-direction: column;
25
+ align-items: flex-start;
26
+ justify-content: center;
27
+ cursor: pointer;
28
+ color: white;
29
+ white-space: nowrap;
30
+ font-size: 14px;
31
+ text-transform: none;
32
+ box-shadow: none;
33
+ font-family: Arial, sans-serif;
34
+ border-radius: ${({ $reverse }) => ($reverse ? '0 0 0 12px' : '0 0 12px 0')};
35
+ padding: 5px;
36
+
37
+ > div {
38
+ display: flex;
39
+ flex-direction: row;
40
+ align-items: center;
41
+ gap: 2px;
42
+ margin: 2px;
43
+ }
44
+ `;
45
+ export const HeaderUI = ({ xrDevice, inputLayer, keyMapOpen, setKeyMapOpen, fovSettingOpen, setFovSettingOpen, }) => {
46
+ return (_jsxs("div", { style: {
47
+ display: 'flex',
48
+ justifyContent: 'center',
49
+ }, children: [_jsxs(HeaderButtonsContainer, { children: [_jsx(IWERIcon, {}), _jsxs("div", { style: {
50
+ display: 'flex',
51
+ flexDirection: 'row',
52
+ marginLeft: '4px',
53
+ }, children: [_jsx(Button, { "$reverse": false, onClick: () => {
54
+ inputLayer.resetDeviceTransforms();
55
+ }, children: _jsx(FAIcon, { icon: faRotateLeft }) }), _jsx(Button, { "$reverse": false, onClick: () => {
56
+ inputLayer.lockPointer();
57
+ setKeyMapOpen(false);
58
+ setFovSettingOpen(false);
59
+ }, children: _jsx(FAIcon, { icon: faCirclePlay }) }), _jsx(Button, { "$reverse": false, onClick: () => {
60
+ setKeyMapOpen(!keyMapOpen);
61
+ setFovSettingOpen(false);
62
+ }, children: _jsx(FAIcon, { icon: faKeyboard }) }), _jsx(Button, { "$reverse": false, onClick: () => {
63
+ setFovSettingOpen(!fovSettingOpen);
64
+ setKeyMapOpen(false);
65
+ }, children: _jsx(FAIcon, { icon: faVideo }) }), _jsx(Button, { "$reverse": false, onClick: () => {
66
+ const xrSession = xrDevice.activeSession;
67
+ xrSession === null || xrSession === void 0 ? void 0 : xrSession.end();
68
+ }, children: _jsx(FAIcon, { icon: faRightFromBracket }) })] })] }), _jsxs(MovementInstructionsContainer, { "$reverse": false, style: { position: 'fixed', left: '0', top: '0' }, children: [_jsxs("div", { children: [_jsx(FAIcon, { icon: faSquareArrowUpRight, style: { marginRight: '4px' } }), ' ', "Roomscale Movement"] }), _jsxs("div", { children: [_jsx(MappedKeyBlock, { "$pressed": false, style: { width: '50px' }, children: "L Shift" }), _jsx("span", { style: { margin: '0 4px' }, children: "+" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "W" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "A" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "S" }), _jsx(MappedKeyBlock, { "$pressed": false, children: "D" })] })] }), _jsxs(MovementInstructionsContainer, { "$reverse": true, style: { position: 'fixed', right: '0', top: '0' }, children: [_jsxs("div", { children: [_jsx(FAIcon, { icon: faArrowsUpDown, style: { marginRight: '4px' } }), " Camera Height"] }), _jsxs("div", { children: [_jsx(MappedKeyBlock, { "$pressed": false, style: { width: '50px' }, children: "L Shift" }), _jsx("span", { style: { margin: '0 4px' }, children: "+" }), _jsx(MappedKeyBlock, { "$pressed": false, children: _jsx(FAIcon, { icon: faCaretUp }) }), _jsx(MappedKeyBlock, { "$pressed": false, children: _jsx(FAIcon, { icon: faCaretDown }) })] })] })] }));
69
+ };
70
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/components/header.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ export declare const ButtonX: React.FC;
3
+ export declare const ButtonY: React.FC;
4
+ export declare const ButtonA: React.FC;
5
+ export declare const ButtonB: React.FC;
6
+ export declare const ThumbstickL: React.FC;
7
+ export declare const ThumbstickR: React.FC;
8
+ export declare const ThumbstickLUp: React.FC;
9
+ export declare const ThumbstickLDown: React.FC;
10
+ export declare const ThumbstickLLeft: React.FC;
11
+ export declare const ThumbstickLRight: React.FC;
12
+ export declare const ThumbstickRUp: React.FC;
13
+ export declare const ThumbstickRDown: React.FC;
14
+ export declare const ThumbstickRLeft: React.FC;
15
+ export declare const ThumbstickRRight: React.FC;
16
+ export declare const GripL: React.FC;
17
+ export declare const GripR: React.FC;
18
+ export declare const TriggerL: React.FC;
19
+ export declare const TriggerR: React.FC;
20
+ export declare const ThumbrestL: React.FC;
21
+ export declare const ThumbrestR: React.FC;
22
+ interface GamepadIconProps {
23
+ buttonName: string;
24
+ handedness: XRHandedness;
25
+ }
26
+ export declare const GamepadIcon: React.FC<GamepadIconProps>;
27
+ export declare const IWERIcon: React.FC;
28
+ export declare const MouseLeft: React.FC;
29
+ export declare const MouseRight: React.FC;
30
+ export {};
31
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EA8B3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA8B/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA8B/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA6BjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA6BpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA6BjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6BnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA6BpC,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EA8BzB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EA8BzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA8B5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA8B5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EA+B9B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EA+B9B,CAAC;AAiDF,UAAU,gBAAgB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;CACzB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAWlD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAa5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAiC7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAiC9B,CAAC"}