@iwer/devui 1.0.2 → 1.1.1

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 (107) hide show
  1. package/build/iwer-devui.js +415 -119
  2. package/build/iwer-devui.min.js +65 -55
  3. package/build/iwer-devui.module.js +415 -119
  4. package/build/iwer-devui.module.min.js +56 -46
  5. package/lib/components/controller.d.ts +18 -0
  6. package/lib/components/controller.d.ts.map +1 -0
  7. package/lib/{src/components/controls.js → components/controller.js} +28 -63
  8. package/lib/components/controller.js.map +1 -0
  9. package/lib/components/controls.d.ts +5 -9
  10. package/lib/components/controls.d.ts.map +1 -1
  11. package/lib/components/controls.js +14 -83
  12. package/lib/components/controls.js.map +1 -1
  13. package/lib/components/hand.d.ts +18 -0
  14. package/lib/components/hand.d.ts.map +1 -0
  15. package/lib/components/hand.js +51 -0
  16. package/lib/components/hand.js.map +1 -0
  17. package/lib/components/header.d.ts +7 -0
  18. package/lib/components/header.d.ts.map +1 -1
  19. package/lib/components/header.js +48 -4
  20. package/lib/components/header.js.map +1 -1
  21. package/lib/components/icons.d.ts +4 -0
  22. package/lib/components/icons.d.ts.map +1 -1
  23. package/lib/components/icons.js +10 -1
  24. package/lib/components/icons.js.map +1 -1
  25. package/lib/components/mapper.d.ts +3 -2
  26. package/lib/components/mapper.d.ts.map +1 -1
  27. package/lib/components/mapper.js +8 -2
  28. package/lib/components/mapper.js.map +1 -1
  29. package/lib/{src/components/analog.d.ts → components/pinch.d.ts} +5 -6
  30. package/lib/components/pinch.d.ts.map +1 -0
  31. package/lib/{src/components/analog.js → components/pinch.js} +22 -39
  32. package/lib/components/pinch.js.map +1 -0
  33. package/lib/{src/components/binary.d.ts → components/pose.d.ts} +5 -6
  34. package/lib/components/pose.d.ts.map +1 -0
  35. package/lib/components/pose.js +62 -0
  36. package/lib/components/pose.js.map +1 -0
  37. package/lib/components/styled.d.ts +6 -0
  38. package/lib/components/styled.d.ts.map +1 -1
  39. package/lib/components/styled.js +11 -0
  40. package/lib/components/styled.js.map +1 -1
  41. package/lib/index.d.ts +1 -1
  42. package/lib/index.d.ts.map +1 -1
  43. package/lib/index.js +2 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/scene.d.ts.map +1 -1
  46. package/lib/scene.js +5 -3
  47. package/lib/scene.js.map +1 -1
  48. package/lib/version.d.ts +1 -1
  49. package/lib/version.js +1 -1
  50. package/package.json +2 -2
  51. package/lib/components/fov.d.ts +0 -16
  52. package/lib/components/fov.d.ts.map +0 -1
  53. package/lib/components/fov.js +0 -30
  54. package/lib/components/fov.js.map +0 -1
  55. package/lib/package.json +0 -55
  56. package/lib/src/components/analog.d.ts.map +0 -1
  57. package/lib/src/components/analog.js.map +0 -1
  58. package/lib/src/components/binary.d.ts.map +0 -1
  59. package/lib/src/components/binary.js +0 -77
  60. package/lib/src/components/binary.js.map +0 -1
  61. package/lib/src/components/controls.d.ts +0 -29
  62. package/lib/src/components/controls.d.ts.map +0 -1
  63. package/lib/src/components/controls.js.map +0 -1
  64. package/lib/src/components/fov.d.ts +0 -16
  65. package/lib/src/components/fov.d.ts.map +0 -1
  66. package/lib/src/components/fov.js +0 -30
  67. package/lib/src/components/fov.js.map +0 -1
  68. package/lib/src/components/header.d.ts +0 -20
  69. package/lib/src/components/header.d.ts.map +0 -1
  70. package/lib/src/components/header.js +0 -47
  71. package/lib/src/components/header.js.map +0 -1
  72. package/lib/src/components/headset.d.ts +0 -17
  73. package/lib/src/components/headset.d.ts.map +0 -1
  74. package/lib/src/components/headset.js +0 -29
  75. package/lib/src/components/headset.js.map +0 -1
  76. package/lib/src/components/icons.d.ts +0 -37
  77. package/lib/src/components/icons.d.ts.map +0 -1
  78. package/lib/src/components/icons.js +0 -265
  79. package/lib/src/components/icons.js.map +0 -1
  80. package/lib/src/components/joystick.d.ts +0 -21
  81. package/lib/src/components/joystick.d.ts.map +0 -1
  82. package/lib/src/components/joystick.js +0 -245
  83. package/lib/src/components/joystick.js.map +0 -1
  84. package/lib/src/components/keys.d.ts +0 -10
  85. package/lib/src/components/keys.d.ts.map +0 -1
  86. package/lib/src/components/keys.js +0 -74
  87. package/lib/src/components/keys.js.map +0 -1
  88. package/lib/src/components/mapper.d.ts +0 -22
  89. package/lib/src/components/mapper.d.ts.map +0 -1
  90. package/lib/src/components/mapper.js +0 -108
  91. package/lib/src/components/mapper.js.map +0 -1
  92. package/lib/src/components/styled.d.ts +0 -70
  93. package/lib/src/components/styled.d.ts.map +0 -1
  94. package/lib/src/components/styled.js +0 -272
  95. package/lib/src/components/styled.js.map +0 -1
  96. package/lib/src/components/vec3.d.ts +0 -22
  97. package/lib/src/components/vec3.d.ts.map +0 -1
  98. package/lib/src/components/vec3.js +0 -123
  99. package/lib/src/components/vec3.js.map +0 -1
  100. package/lib/src/index.d.ts +0 -22
  101. package/lib/src/index.d.ts.map +0 -1
  102. package/lib/src/index.js +0 -92
  103. package/lib/src/index.js.map +0 -1
  104. package/lib/src/scene.d.ts +0 -51
  105. package/lib/src/scene.d.ts.map +0 -1
  106. package/lib/src/scene.js +0 -250
  107. package/lib/src/scene.js.map +0 -1
@@ -4912,6 +4912,17 @@
4912
4912
  width: ${({ $size = 14 }) => `${$size}px`};
4913
4913
  min-width: ${({ $size = 14 }) => `${$size}px`};
4914
4914
  max-width: ${({ $size = 14 }) => `${$size}px`};
4915
+ transform: ${({ $reverse }) => ($reverse ? 'scaleX(-1)' : 'unset')};
4916
+ `;
4917
+ const FAControlIcon = dt(FontAwesomeIcon) `
4918
+ height: 18px;
4919
+ min-height: 18px;
4920
+ max-height: 18px;
4921
+ width: 18px;
4922
+ min-width: 18px;
4923
+ max-width: 18px;
4924
+ margin: 6px;
4925
+ transform: ${({ $reverse }) => ($reverse ? 'scaleX(-1)' : 'unset')};
4915
4926
  `;
4916
4927
  const ControlPanel = dt.div `
4917
4928
  position: fixed;
@@ -4997,6 +5008,142 @@
4997
5008
  font-size: 10px;
4998
5009
  `;
4999
5010
 
5011
+ const faRightFromBracket = {
5012
+ prefix: 'fas',
5013
+ iconName: 'right-from-bracket',
5014
+ icon: [512, 512, ["sign-out-alt"], "f2f5", "M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z"]
5015
+ };
5016
+ const faFingerprint = {
5017
+ prefix: 'fas',
5018
+ iconName: 'fingerprint',
5019
+ icon: [512, 512, [], "f577", "M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256l0 24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z"]
5020
+ };
5021
+ const faCaretRight = {
5022
+ prefix: 'fas',
5023
+ iconName: 'caret-right',
5024
+ icon: [256, 512, [], "f0da", "M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z"]
5025
+ };
5026
+ const faCaretLeft = {
5027
+ prefix: 'fas',
5028
+ iconName: 'caret-left',
5029
+ icon: [256, 512, [], "f0d9", "M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z"]
5030
+ };
5031
+ const faGamepad = {
5032
+ prefix: 'fas',
5033
+ iconName: 'gamepad',
5034
+ icon: [640, 512, [], "f11b", "M192 64C86 64 0 150 0 256S86 448 192 448l256 0c106 0 192-86 192-192s-86-192-192-192L192 64zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32z"]
5035
+ };
5036
+ const faHand = {
5037
+ prefix: 'fas',
5038
+ iconName: 'hand',
5039
+ icon: [512, 512, [129306, 9995, "hand-paper"], "f256", "M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208z"]
5040
+ };
5041
+ const faPlug = {
5042
+ prefix: 'fas',
5043
+ iconName: 'plug',
5044
+ icon: [384, 512, [128268], "f1e6", "M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2C297 398 352 333.4 352 256l0-32c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z"]
5045
+ };
5046
+ const faBan = {
5047
+ prefix: 'fas',
5048
+ iconName: 'ban',
5049
+ icon: [512, 512, [128683, "cancel"], "f05e", "M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"]
5050
+ };
5051
+ const faArrowRightToBracket = {
5052
+ prefix: 'fas',
5053
+ iconName: 'arrow-right-to-bracket',
5054
+ icon: [512, 512, ["sign-in"], "f090", "M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z"]
5055
+ };
5056
+ const faCaretUp = {
5057
+ prefix: 'fas',
5058
+ iconName: 'caret-up',
5059
+ icon: [320, 512, [], "f0d8", "M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"]
5060
+ };
5061
+ const faRotateLeft = {
5062
+ prefix: 'fas',
5063
+ iconName: 'rotate-left',
5064
+ icon: [512, 512, ["rotate-back", "rotate-backward", "undo-alt"], "f2ea", "M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z"]
5065
+ };
5066
+ const faCirclePlay = {
5067
+ prefix: 'fas',
5068
+ iconName: 'circle-play',
5069
+ icon: [512, 512, [61469, "play-circle"], "f144", "M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z"]
5070
+ };
5071
+ const faPersonShelter = {
5072
+ prefix: 'fas',
5073
+ iconName: 'person-shelter',
5074
+ icon: [512, 512, [], "e54f", "M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.4L256 68.9 448 178.6 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280l0-88 16 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-174.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5 200 488c0 13.3 10.7 24 24 24s24-10.7 24-24z"]
5075
+ };
5076
+ const faHandScissors = {
5077
+ prefix: 'fas',
5078
+ iconName: 'hand-scissors',
5079
+ icon: [512, 512, [], "f257", "M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9c0 0 0 .1 0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z"]
5080
+ };
5081
+ const faStreetView = {
5082
+ prefix: 'fas',
5083
+ iconName: 'street-view',
5084
+ icon: [512, 512, [], "f21d", "M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64l0 48c0 17.7 14.3 32 32 32l1.8 0 11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5l38.7 0c16.3 0 30-12.3 31.8-28.5L318.2 304l1.8 0c17.7 0 32-14.3 32-32l0-48c0-35.3-28.7-64-64-64l-64 0zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z"]
5085
+ };
5086
+ const faGear = {
5087
+ prefix: 'fas',
5088
+ iconName: 'gear',
5089
+ icon: [512, 512, [9881, "cog"], "f013", "M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"]
5090
+ };
5091
+ const faCaretDown = {
5092
+ prefix: 'fas',
5093
+ iconName: 'caret-down',
5094
+ icon: [320, 512, [], "f0d7", "M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"]
5095
+ };
5096
+ const faDeleteLeft = {
5097
+ prefix: 'fas',
5098
+ iconName: 'delete-left',
5099
+ icon: [576, 512, [9003, "backspace"], "f55a", "M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]
5100
+ };
5101
+ const faBug = {
5102
+ prefix: 'fas',
5103
+ iconName: 'bug',
5104
+ icon: [512, 512, [], "f188", "M256 0c53 0 96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4l112 0c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5l64.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6L272 240c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 239.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.3 0c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"]
5105
+ };
5106
+ const faAngleUp = {
5107
+ prefix: 'fas',
5108
+ iconName: 'angle-up',
5109
+ icon: [448, 512, [8963], "f106", "M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"]
5110
+ };
5111
+ const faChevronLeft = {
5112
+ prefix: 'fas',
5113
+ iconName: 'chevron-left',
5114
+ icon: [320, 512, [9001], "f053", "M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"]
5115
+ };
5116
+ const faHandLizard = {
5117
+ prefix: 'fas',
5118
+ iconName: 'hand-lizard',
5119
+ icon: [512, 512, [], "f258", "M0 112C0 85.5 21.5 64 48 64l112 0 80 0 46.5 0c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8l0 12 0 16 0 48c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-13.8L273.9 352 240 352l-80 0-48 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l48 0 80 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-80 0L48 160c-26.5 0-48-21.5-48-48z"]
5120
+ };
5121
+ const faChevronRight = {
5122
+ prefix: 'fas',
5123
+ iconName: 'chevron-right',
5124
+ icon: [320, 512, [9002], "f054", "M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"]
5125
+ };
5126
+ const faVrCardboard = {
5127
+ prefix: 'fas',
5128
+ iconName: 'vr-cardboard',
5129
+ icon: [640, 512, [], "f729", "M576 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l120.4 0c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4L576 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"]
5130
+ };
5131
+ const faArrowTurnDown = {
5132
+ prefix: 'fas',
5133
+ iconName: 'arrow-turn-down',
5134
+ icon: [384, 512, ["level-down"], "f149", "M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z"]
5135
+ };
5136
+ const faCircleXmark = {
5137
+ prefix: 'fas',
5138
+ iconName: 'circle-xmark',
5139
+ icon: [512, 512, [61532, "times-circle", "xmark-circle"], "f057", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]
5140
+ };
5141
+ const faVideo = {
5142
+ prefix: 'fas',
5143
+ iconName: 'video',
5144
+ icon: [576, 512, ["video-camera"], "f03d", "M0 128C0 92.7 28.7 64 64 64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2l0 256c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1l0-17.1 0-128 0-17.1 14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z"]
5145
+ };
5146
+
5000
5147
  const IconSize = ControlButtonStyles.height;
5001
5148
  const ButtonX = ({ scale = 1.2 }) => (jsxRuntimeExports.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: IconSize, height: IconSize, fill: "none", transform: `scale(${scale}, ${scale})`, children: [jsxRuntimeExports.jsx("path", { fill: "#fff", fillRule: "evenodd", d: "M7 13.125a7 7 0 1 0 14 0v1.75a7 7 0 0 1-14 0v-1.75Z", clipRule: "evenodd", style: {
5002
5149
  fill: '#fff',
@@ -5198,6 +5345,10 @@
5198
5345
  fill: '#fff',
5199
5346
  fillOpacity: 1,
5200
5347
  } })] }));
5348
+ const PoseL = () => (jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandScissors, "$reverse": true }));
5349
+ const PoseR = () => (jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandScissors, "$reverse": false }));
5350
+ const PinchL = () => (jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandLizard, "$reverse": true }));
5351
+ const PinchR = () => (jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandLizard, "$reverse": false }));
5201
5352
  // Create a mapping of buttonId to icon component
5202
5353
  const buttonIdToIcon = {
5203
5354
  'x-button-left': ButtonX,
@@ -5209,6 +5360,8 @@
5209
5360
  'thumbstick-down-left': ThumbstickLDown,
5210
5361
  'thumbstick-right-left': ThumbstickLRight,
5211
5362
  'thumbstick-left-left': ThumbstickLLeft,
5363
+ 'pose-left': PoseL,
5364
+ 'pinch-left': PinchL,
5212
5365
  'thumbstick-right': ThumbstickR,
5213
5366
  'thumbstick-up-right': ThumbstickRUp,
5214
5367
  'thumbstick-down-right': ThumbstickRDown,
@@ -5220,6 +5373,8 @@
5220
5373
  'squeeze-right': GripR,
5221
5374
  'thumbrest-left': ThumbrestL,
5222
5375
  'thumbrest-right': ThumbrestR,
5376
+ 'pose-right': PoseR,
5377
+ 'pinch-right': PinchR,
5223
5378
  };
5224
5379
  const GamepadIcon = ({ buttonName, handedness, }) => {
5225
5380
  const buttonId = `${buttonName}-${handedness}`;
@@ -5269,112 +5424,6 @@
5269
5424
  fillOpacity: 1,
5270
5425
  } })] }));
5271
5426
 
5272
- const faRightFromBracket = {
5273
- prefix: 'fas',
5274
- iconName: 'right-from-bracket',
5275
- icon: [512, 512, ["sign-out-alt"], "f2f5", "M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z"]
5276
- };
5277
- const faFingerprint = {
5278
- prefix: 'fas',
5279
- iconName: 'fingerprint',
5280
- icon: [512, 512, [], "f577", "M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256l0 24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z"]
5281
- };
5282
- const faCaretRight = {
5283
- prefix: 'fas',
5284
- iconName: 'caret-right',
5285
- icon: [256, 512, [], "f0da", "M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z"]
5286
- };
5287
- const faCaretLeft = {
5288
- prefix: 'fas',
5289
- iconName: 'caret-left',
5290
- icon: [256, 512, [], "f0d9", "M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z"]
5291
- };
5292
- const faGamepad = {
5293
- prefix: 'fas',
5294
- iconName: 'gamepad',
5295
- icon: [640, 512, [], "f11b", "M192 64C86 64 0 150 0 256S86 448 192 448l256 0c106 0 192-86 192-192s-86-192-192-192L192 64zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32z"]
5296
- };
5297
- const faPlug = {
5298
- prefix: 'fas',
5299
- iconName: 'plug',
5300
- icon: [384, 512, [128268], "f1e6", "M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2C297 398 352 333.4 352 256l0-32c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z"]
5301
- };
5302
- const faBan = {
5303
- prefix: 'fas',
5304
- iconName: 'ban',
5305
- icon: [512, 512, [128683, "cancel"], "f05e", "M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"]
5306
- };
5307
- const faArrowRightToBracket = {
5308
- prefix: 'fas',
5309
- iconName: 'arrow-right-to-bracket',
5310
- icon: [512, 512, ["sign-in"], "f090", "M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z"]
5311
- };
5312
- const faCaretUp = {
5313
- prefix: 'fas',
5314
- iconName: 'caret-up',
5315
- icon: [320, 512, [], "f0d8", "M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"]
5316
- };
5317
- const faRotateLeft = {
5318
- prefix: 'fas',
5319
- iconName: 'rotate-left',
5320
- icon: [512, 512, ["rotate-back", "rotate-backward", "undo-alt"], "f2ea", "M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z"]
5321
- };
5322
- const faCirclePlay = {
5323
- prefix: 'fas',
5324
- iconName: 'circle-play',
5325
- icon: [512, 512, [61469, "play-circle"], "f144", "M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z"]
5326
- };
5327
- const faStreetView = {
5328
- prefix: 'fas',
5329
- iconName: 'street-view',
5330
- icon: [512, 512, [], "f21d", "M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64l0 48c0 17.7 14.3 32 32 32l1.8 0 11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5l38.7 0c16.3 0 30-12.3 31.8-28.5L318.2 304l1.8 0c17.7 0 32-14.3 32-32l0-48c0-35.3-28.7-64-64-64l-64 0zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z"]
5331
- };
5332
- const faGear = {
5333
- prefix: 'fas',
5334
- iconName: 'gear',
5335
- icon: [512, 512, [9881, "cog"], "f013", "M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"]
5336
- };
5337
- const faCaretDown = {
5338
- prefix: 'fas',
5339
- iconName: 'caret-down',
5340
- icon: [320, 512, [], "f0d7", "M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z"]
5341
- };
5342
- const faDeleteLeft = {
5343
- prefix: 'fas',
5344
- iconName: 'delete-left',
5345
- icon: [576, 512, [9003, "backspace"], "f55a", "M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]
5346
- };
5347
- const faBug = {
5348
- prefix: 'fas',
5349
- iconName: 'bug',
5350
- icon: [512, 512, [], "f188", "M256 0c53 0 96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4l112 0c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5l64.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6L272 240c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 239.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.3 0c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"]
5351
- };
5352
- const faAngleUp = {
5353
- prefix: 'fas',
5354
- iconName: 'angle-up',
5355
- icon: [448, 512, [8963], "f106", "M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z"]
5356
- };
5357
- const faVrCardboard = {
5358
- prefix: 'fas',
5359
- iconName: 'vr-cardboard',
5360
- icon: [640, 512, [], "f729", "M576 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l120.4 0c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4L576 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"]
5361
- };
5362
- const faArrowTurnDown = {
5363
- prefix: 'fas',
5364
- iconName: 'arrow-turn-down',
5365
- icon: [384, 512, ["level-down"], "f149", "M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z"]
5366
- };
5367
- const faCircleXmark = {
5368
- prefix: 'fas',
5369
- iconName: 'circle-xmark',
5370
- icon: [512, 512, [61532, "times-circle", "xmark-circle"], "f057", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"]
5371
- };
5372
- const faVideo = {
5373
- prefix: 'fas',
5374
- iconName: 'video',
5375
- icon: [576, 512, ["video-camera"], "f03d", "M0 128C0 92.7 28.7 64 64 64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2l0 256c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1l0-17.1 0-128 0-17.1 14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z"]
5376
- };
5377
-
5378
5427
  const MappedKeyDisplay = {
5379
5428
  KeyA: 'A',
5380
5429
  KeyB: 'B',
@@ -5715,6 +5764,8 @@
5715
5764
  'y-button': 'KeyZ',
5716
5765
  trigger: 'KeyQ',
5717
5766
  squeeze: 'KeyE',
5767
+ pinch: 'MouseLeft',
5768
+ pose: 'KeyF',
5718
5769
  },
5719
5770
  right: {
5720
5771
  'thumbstick-up': 'ArrowUp',
@@ -5726,6 +5777,8 @@
5726
5777
  'b-button': 'ShiftRight',
5727
5778
  trigger: 'MouseLeft',
5728
5779
  squeeze: 'MouseRight',
5780
+ pinch: 'MouseRight',
5781
+ pose: 'Backslash',
5729
5782
  },
5730
5783
  };
5731
5784
  const useKeyMapStore = create((set) => ({
@@ -5751,7 +5804,7 @@
5751
5804
  margin-bottom: 0;
5752
5805
  }
5753
5806
  `;
5754
- const ControllerMapper = ({ handedness, }) => {
5807
+ const ControlsMapper = ({ handedness, actions, }) => {
5755
5808
  const { keyMap, bindKey } = useKeyMapStore();
5756
5809
  const [currentMapping, setCurrentMapping] = reactExports.useState(null);
5757
5810
  const startMapping = (action) => {
@@ -5789,7 +5842,9 @@
5789
5842
  window.removeEventListener('contextmenu', preventDefaultContextMenu);
5790
5843
  };
5791
5844
  }, [currentMapping]);
5792
- return Object.keys(keyMap[handedness]).map((action) => (jsxRuntimeExports.jsxs(Row, { children: [jsxRuntimeExports.jsx(GamepadIcon, { buttonName: action === 'up' ? 'thumbstick' : action, handedness: handedness }), jsxRuntimeExports.jsxs(ButtonGroup, { "$reverse": false, children: [jsxRuntimeExports.jsx(Button, { "$reverse": false, style: {
5845
+ return Object.keys(keyMap[handedness])
5846
+ .filter((action) => actions.includes(action))
5847
+ .map((action) => (jsxRuntimeExports.jsxs(Row, { children: [jsxRuntimeExports.jsx(GamepadIcon, { buttonName: action === 'up' ? 'thumbstick' : action, handedness: handedness }), jsxRuntimeExports.jsxs(ButtonGroup, { "$reverse": false, children: [jsxRuntimeExports.jsx(Button, { "$reverse": false, style: {
5793
5848
  width: '100px',
5794
5849
  background: currentMapping && currentMapping.action === action
5795
5850
  ? Colors.gradientLightGreyTranslucent
@@ -6292,13 +6347,25 @@
6292
6347
  });
6293
6348
  return transformed;
6294
6349
  }
6295
- const ControlsUI = ({ xrDevice, inputLayer, pointerLocked, }) => {
6296
- return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: Object.entries(xrDevice.controllers).map(([handedness, controller]) => (jsxRuntimeExports.jsx(ControllerUI, { controller: controller, handle: inputLayer.transformHandles.get(handedness), handedness: handedness, pointerLocked: pointerLocked }, `controller-${handedness}`))) }));
6297
- };
6298
6350
  const ControllerUI = ({ controller, handle, handedness, pointerLocked, }) => {
6299
6351
  const { keyMap } = useKeyMapStore();
6300
6352
  const [connected, setConnected] = React.useState(controller.connected);
6301
6353
  const [settingsOpen, setSettingsOpen] = React.useState(false);
6354
+ const transformedConfig = transformGamepadConfig(controller.gamepadConfig);
6355
+ const actions = transformedConfig.flatMap((config) => {
6356
+ if (config.hasAxes) {
6357
+ return [
6358
+ `${config.id}-left`,
6359
+ `${config.id}-right`,
6360
+ `${config.id}-up`,
6361
+ `${config.id}-down`,
6362
+ config.id,
6363
+ ];
6364
+ }
6365
+ else {
6366
+ return config.id;
6367
+ }
6368
+ });
6302
6369
  React.useEffect(() => {
6303
6370
  if (pointerLocked) {
6304
6371
  setSettingsOpen(false);
@@ -6329,7 +6396,7 @@
6329
6396
  controller.connected = true;
6330
6397
  setConnected(true);
6331
6398
  }, style: { marginLeft: '5px' }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faPlug }) })) })] }) })), connected && !pointerLocked && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [!settingsOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(SectionBreak, {}), jsxRuntimeExports.jsx(Vector3Input, { vector: handle.position, label: "Position", marginBottom: ControlButtonStyles.gap }), jsxRuntimeExports.jsx(Vector3Input, { vector: handle.rotation, label: "Rotation" })] })), jsxRuntimeExports.jsx(SectionBreak, {})] })), connected &&
6332
- (settingsOpen ? (jsxRuntimeExports.jsx(ControllerMapper, { handedness: handedness })) : (transformGamepadConfig(controller.gamepadConfig).map((buttonConfig) => {
6399
+ (settingsOpen ? (jsxRuntimeExports.jsx(ControlsMapper, { handedness: handedness, actions: actions })) : (transformedConfig.map((buttonConfig) => {
6333
6400
  const mapping = keyMap[handedness];
6334
6401
  if (buttonConfig.hasAxes) {
6335
6402
  return (jsxRuntimeExports.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));
@@ -6343,6 +6410,190 @@
6343
6410
  })))] }, handedness));
6344
6411
  };
6345
6412
 
6413
+ const pinchSliderWidth = `calc(${ControlButtonStyles.widthLong} + ${ControlButtonStyles.widthShort} + ${ControlButtonStyles.gap})`;
6414
+ const PinchControl = ({ hand, pointerLocked, mappedKey, }) => {
6415
+ const [isPressed, setIsPressed] = reactExports.useState(false);
6416
+ const [isKeyPressed, setIsKeyPressed] = reactExports.useState(false);
6417
+ const [analogValue, setAnalogValue] = reactExports.useState(0);
6418
+ const handedness = hand.inputSource.handedness;
6419
+ reactExports.useEffect(() => {
6420
+ const handleKeyDown = (event) => {
6421
+ if (event.code === mappedKey) {
6422
+ hand.updatePinchValue(1);
6423
+ setIsKeyPressed(true);
6424
+ }
6425
+ };
6426
+ const handleKeyUp = (event) => {
6427
+ if (event.code === mappedKey) {
6428
+ hand.updatePinchValue(0);
6429
+ setIsKeyPressed(false);
6430
+ }
6431
+ };
6432
+ const handleMouseDown = (event) => {
6433
+ if ((mappedKey === 'MouseLeft' && event.button === 0) ||
6434
+ (mappedKey === 'MouseRight' && event.button === 2)) {
6435
+ hand.updatePinchValue(1);
6436
+ setIsKeyPressed(true);
6437
+ }
6438
+ };
6439
+ const handleMouseUp = (event) => {
6440
+ if ((mappedKey === 'MouseLeft' && event.button === 0) ||
6441
+ (mappedKey === 'MouseRight' && event.button === 2)) {
6442
+ hand.updatePinchValue(0);
6443
+ setIsKeyPressed(false);
6444
+ }
6445
+ };
6446
+ if (pointerLocked) {
6447
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
6448
+ window.addEventListener('mousedown', handleMouseDown);
6449
+ window.addEventListener('mouseup', handleMouseUp);
6450
+ }
6451
+ else {
6452
+ window.addEventListener('keydown', handleKeyDown);
6453
+ window.addEventListener('keyup', handleKeyUp);
6454
+ }
6455
+ }
6456
+ else {
6457
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
6458
+ window.removeEventListener('mousedown', handleMouseDown);
6459
+ window.removeEventListener('mouseup', handleMouseUp);
6460
+ }
6461
+ else {
6462
+ window.removeEventListener('keydown', handleKeyDown);
6463
+ window.removeEventListener('keyup', handleKeyUp);
6464
+ }
6465
+ }
6466
+ return () => {
6467
+ if (mappedKey === 'MouseLeft' || mappedKey === 'MouseRight') {
6468
+ window.removeEventListener('mousedown', handleMouseDown);
6469
+ window.removeEventListener('mouseup', handleMouseUp);
6470
+ }
6471
+ else {
6472
+ window.removeEventListener('keydown', handleKeyDown);
6473
+ window.removeEventListener('keyup', handleKeyUp);
6474
+ }
6475
+ };
6476
+ }, [mappedKey, pointerLocked, hand]);
6477
+ return (jsxRuntimeExports.jsxs(ButtonContainer, { "$reverse": handedness === 'right', children: [jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandLizard, "$reverse": handedness === 'left' }), jsxRuntimeExports.jsx(ButtonGroup, { "$reverse": handedness === 'right', children: pointerLocked ? (jsxRuntimeExports.jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Button, { "$reverse": handedness === 'right', style: {
6478
+ background: isPressed
6479
+ ? Colors.gradientLightGreyTranslucent
6480
+ : Colors.gradientGreyTranslucent,
6481
+ width: ControlButtonStyles.widthLong,
6482
+ }, onClick: () => {
6483
+ setIsPressed(true);
6484
+ hand.updatePinchValue(1);
6485
+ setTimeout(() => {
6486
+ setIsPressed(false);
6487
+ hand.updatePinchValue(0);
6488
+ }, 250);
6489
+ }, children: "Pinch" }), jsxRuntimeExports.jsx(RangeSelector$1, { "$reverse": handedness === 'right', value: analogValue, onChange: (e) => {
6490
+ const value = Number(e.target.value);
6491
+ setAnalogValue(value);
6492
+ hand.updatePinchValue(value / 100);
6493
+ }, style: { width: pinchSliderWidth }, min: "0", max: "100" })] })) })] }));
6494
+ };
6495
+
6496
+ const poses = ['default', 'point'];
6497
+ const poseButtonWidth = `calc(2 * ${ControlButtonStyles.widthLong} - ${ControlButtonStyles.widthShort})`;
6498
+ const PoseSelector = ({ hand, pointerLocked, mappedKey, }) => {
6499
+ const [poseId, setPoseId] = reactExports.useState(hand.poseId);
6500
+ const [isKeyPressed, setIsKeyPressed] = reactExports.useState(false);
6501
+ const handedness = hand.inputSource.handedness;
6502
+ const cyclePose = (delta) => {
6503
+ const poseIdx = poses.indexOf(hand.poseId);
6504
+ const newPoseIdx = (poseIdx + poses.length + delta) % poses.length;
6505
+ setPoseId(poses[newPoseIdx]);
6506
+ hand.poseId = poses[newPoseIdx];
6507
+ };
6508
+ const layoutReverse = handedness === 'right';
6509
+ reactExports.useEffect(() => {
6510
+ const handleKeyDown = (event) => {
6511
+ if (event.code === mappedKey) {
6512
+ cyclePose(1);
6513
+ setIsKeyPressed(true);
6514
+ }
6515
+ };
6516
+ const handleKeyUp = (event) => {
6517
+ if (event.code === mappedKey) {
6518
+ setIsKeyPressed(false);
6519
+ }
6520
+ };
6521
+ if (pointerLocked) {
6522
+ window.addEventListener('keydown', handleKeyDown);
6523
+ window.addEventListener('keyup', handleKeyUp);
6524
+ }
6525
+ else {
6526
+ window.removeEventListener('keydown', handleKeyDown);
6527
+ window.removeEventListener('keyup', handleKeyUp);
6528
+ }
6529
+ return () => {
6530
+ window.removeEventListener('keydown', handleKeyDown);
6531
+ window.removeEventListener('keyup', handleKeyUp);
6532
+ };
6533
+ }, [mappedKey, pointerLocked, hand]);
6534
+ return (jsxRuntimeExports.jsxs(ButtonContainer, { "$reverse": layoutReverse, children: [jsxRuntimeExports.jsx(FAControlIcon, { icon: faHandScissors, "$reverse": handedness === 'left' }), jsxRuntimeExports.jsx(ButtonGroup, { "$reverse": layoutReverse, children: pointerLocked ? (jsxRuntimeExports.jsx(MappedKeyBlock, { "$pressed": isKeyPressed, children: MappedKeyDisplay[mappedKey] })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(Button, { "$reverse": layoutReverse, style: {
6535
+ width: ControlButtonStyles.widthShort,
6536
+ }, onClick: () => {
6537
+ cyclePose(layoutReverse ? 1 : -1);
6538
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: layoutReverse ? faChevronRight : faChevronLeft }) }), jsxRuntimeExports.jsxs(Button, { "$reverse": layoutReverse, style: {
6539
+ width: poseButtonWidth,
6540
+ }, disabled: true, children: ["Pose: ", poseId] }), jsxRuntimeExports.jsx(Button, { "$reverse": layoutReverse, style: {
6541
+ width: ControlButtonStyles.widthShort,
6542
+ }, onClick: () => {
6543
+ cyclePose(layoutReverse ? -1 : 1);
6544
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: layoutReverse ? faChevronLeft : faChevronRight }) })] })) })] }));
6545
+ };
6546
+
6547
+ const HandUI = ({ hand, handle, handedness, pointerLocked, }) => {
6548
+ const { keyMap } = useKeyMapStore();
6549
+ const [connected, setConnected] = React.useState(hand.connected);
6550
+ const [settingsOpen, setSettingsOpen] = React.useState(false);
6551
+ React.useEffect(() => {
6552
+ if (pointerLocked) {
6553
+ setSettingsOpen(false);
6554
+ }
6555
+ }, [pointerLocked]);
6556
+ return (jsxRuntimeExports.jsxs(ControlPanel, { style: handedness === 'left'
6557
+ ? { left: '8px', bottom: '8px' }
6558
+ : { right: '8px', bottom: '8px' }, children: [!pointerLocked && (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: jsxRuntimeExports.jsxs("div", { style: {
6559
+ display: 'flex',
6560
+ flexDirection: 'row',
6561
+ justifyContent: 'space-between',
6562
+ alignItems: 'center',
6563
+ }, children: [jsxRuntimeExports.jsxs("div", { style: {
6564
+ fontSize: '13px',
6565
+ display: 'flex',
6566
+ flexDirection: 'row',
6567
+ alignItems: 'center',
6568
+ }, children: [jsxRuntimeExports.jsx(FAIcon, { icon: faHand, "$reverse": handedness === 'left', style: { marginRight: '5px' } }), "Hand\u00A0", jsxRuntimeExports.jsxs("span", { style: { fontWeight: 'bold' }, children: ["[", handedness === 'left' ? 'L' : 'R', "]"] })] }), jsxRuntimeExports.jsx("div", { style: {
6569
+ display: 'flex',
6570
+ flexDirection: 'row',
6571
+ gap: '1px',
6572
+ }, children: connected ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(PanelHeaderButton, { title: `Click to ${settingsOpen ? 'close' : 'change'} key bindings`, onClick: () => {
6573
+ setSettingsOpen(!settingsOpen);
6574
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faGear }) }), jsxRuntimeExports.jsx(PanelHeaderButton, { title: `Click to disconnect ${handedness} controller`, "$isRed": true, onClick: () => {
6575
+ hand.connected = false;
6576
+ setConnected(false);
6577
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faCircleXmark }) })] })) : (jsxRuntimeExports.jsx(PanelHeaderButton, { title: `Click to reconnect ${handedness} controller`, onClick: () => {
6578
+ hand.connected = true;
6579
+ setConnected(true);
6580
+ }, style: { marginLeft: '5px' }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faPlug }) })) })] }) })), connected && !pointerLocked && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [!settingsOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(SectionBreak, {}), jsxRuntimeExports.jsx(Vector3Input, { vector: handle.position, label: "Position", marginBottom: ControlButtonStyles.gap }), jsxRuntimeExports.jsx(Vector3Input, { vector: handle.rotation, label: "Rotation" })] })), jsxRuntimeExports.jsx(SectionBreak, {})] })), connected &&
6581
+ (settingsOpen ? (jsxRuntimeExports.jsx(ControlsMapper, { handedness: handedness, actions: ['pose', 'pinch'] })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(PoseSelector, { hand: hand, pointerLocked: pointerLocked, mappedKey: keyMap[handedness].pose }), jsxRuntimeExports.jsx(PinchControl, { hand: hand, pointerLocked: pointerLocked, mappedKey: keyMap[handedness].pinch })] })))] }, handedness));
6582
+ };
6583
+
6584
+ const useInputModeStore = create((set) => ({
6585
+ inputMode: 'controller',
6586
+ setInputMode: (mode) => set(() => ({
6587
+ inputMode: mode,
6588
+ })),
6589
+ }));
6590
+ const ControlsUI = ({ xrDevice, inputLayer, pointerLocked, }) => {
6591
+ const { inputMode } = useInputModeStore();
6592
+ return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: inputMode === 'controller'
6593
+ ? Object.entries(xrDevice.controllers).map(([handedness, controller]) => (jsxRuntimeExports.jsx(ControllerUI, { controller: controller, handle: inputLayer.transformHandles.get(handedness), handedness: handedness, pointerLocked: pointerLocked }, `controller-${handedness}`)))
6594
+ : Object.entries(xrDevice.hands).map(([handedness, hand]) => (jsxRuntimeExports.jsx(HandUI, { hand: hand, handle: inputLayer.transformHandles.get(handedness), handedness: handedness, pointerLocked: pointerLocked }, `hand-${handedness}`))) }));
6595
+ };
6596
+
6346
6597
  const VersionTableCol1 = dt.td `
6347
6598
  text-align: right;
6348
6599
  color: ${Colors.textWhite};
@@ -6354,12 +6605,32 @@
6354
6605
  color: ${Colors.textGrey};
6355
6606
  padding: 0;
6356
6607
  `;
6608
+ const envNames = [
6609
+ 'meeting_room',
6610
+ 'living_room',
6611
+ 'music_room',
6612
+ 'office_large',
6613
+ 'office_small',
6614
+ ];
6615
+ const useHeaderStateStore = create((set) => ({
6616
+ infoPanelOpen: false,
6617
+ envDropDownOpen: false,
6618
+ setInfoPanelOpen: (open) => set(() => ({ infoPanelOpen: open })),
6619
+ setEnvDropDownOpen: (open) => set(() => ({ envDropDownOpen: open })),
6620
+ }));
6621
+ function underscoreToTitleCase(str) {
6622
+ return str
6623
+ .split('_')
6624
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
6625
+ .join(' ');
6626
+ }
6357
6627
  const HeaderUI = ({ xrDevice, inputLayer }) => {
6358
6628
  var _a, _b, _c;
6359
6629
  const [planesVisible, setPlanesVisible] = React.useState(Boolean((_a = xrDevice.sem) === null || _a === void 0 ? void 0 : _a.planesVisible));
6360
6630
  const [boxesVisible, setBoxesVisible] = React.useState(Boolean((_b = xrDevice.sem) === null || _b === void 0 ? void 0 : _b.boundingBoxesVisible));
6361
6631
  const [meshesVisible, setMeshesVisible] = React.useState(Boolean((_c = xrDevice.sem) === null || _c === void 0 ? void 0 : _c.meshesVisible));
6362
- const [infoPanelOpen, setInfoPanelOpen] = React.useState(false);
6632
+ const { inputMode, setInputMode } = useInputModeStore();
6633
+ const { infoPanelOpen, setInfoPanelOpen, envDropDownOpen, setEnvDropDownOpen, } = useHeaderStateStore();
6363
6634
  return (jsxRuntimeExports.jsxs("div", { style: {
6364
6635
  display: 'flex',
6365
6636
  justifyContent: 'center',
@@ -6375,7 +6646,18 @@
6375
6646
  inputLayer.resetDeviceTransforms();
6376
6647
  }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faRotateLeft, "$size": 16 }) }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to activate play mode", onClick: () => {
6377
6648
  inputLayer.lockPointer();
6378
- }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faCirclePlay, "$size": 16 }) }), xrDevice.sem && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(SectionBreak, { "$horizontal": false }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to toggle visibility of planes", onClick: () => {
6649
+ setEnvDropDownOpen(false);
6650
+ setInfoPanelOpen(false);
6651
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: faCirclePlay, "$size": 16 }) }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to toggle input mode", onClick: () => {
6652
+ if (inputMode === 'controller') {
6653
+ setInputMode('hand');
6654
+ xrDevice.primaryInputMode = 'hand';
6655
+ }
6656
+ else {
6657
+ setInputMode('controller');
6658
+ xrDevice.primaryInputMode = 'controller';
6659
+ }
6660
+ }, children: jsxRuntimeExports.jsx(FAIcon, { icon: inputMode === 'controller' ? faGamepad : faHand, "$size": 16 }) }), xrDevice.sem && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx(SectionBreak, { "$horizontal": false }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to select/change emulated environment", onClick: () => setEnvDropDownOpen(!envDropDownOpen), children: jsxRuntimeExports.jsx(FAIcon, { icon: faPersonShelter, "$size": 16 }) }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to toggle visibility of planes", onClick: () => {
6379
6661
  xrDevice.sem.planesVisible = !planesVisible;
6380
6662
  setPlanesVisible(!planesVisible);
6381
6663
  }, children: jsxRuntimeExports.jsx(PlaneIcon, { size: 16, color: planesVisible ? Colors.textWhite : Colors.textGrey }) }), jsxRuntimeExports.jsx(HeaderButton, { title: "Click to toggle visibility of bounding boxes", onClick: () => {
@@ -6418,7 +6700,18 @@
6418
6700
  borderRadius: ControlButtonStyles.radiusSolo,
6419
6701
  }, onClick: () => {
6420
6702
  window.open('https://github.com/meta-quest/immersive-web-emulation-runtime', '_blank');
6421
- }, children: "View Source on GitHub" })] }))] }));
6703
+ }, children: "View Source on GitHub" })] })), envDropDownOpen && (jsxRuntimeExports.jsx(ControlPanel, { style: {
6704
+ position: 'absolute',
6705
+ top: '40px',
6706
+ }, children: envNames.map((name) => (jsxRuntimeExports.jsx("div", { children: jsxRuntimeExports.jsx(HeaderButton, { style: {
6707
+ fontSize: '12px',
6708
+ width: '100%',
6709
+ justifyContent: 'start',
6710
+ borderRadius: '8px',
6711
+ }, onClick: () => {
6712
+ // @ts-ignore
6713
+ xrDevice.sem.loadDefaultEnvironment(name);
6714
+ }, children: underscoreToTitleCase(name) }) }, name))) }))] }));
6422
6715
  };
6423
6716
 
6424
6717
  const HeadsetOptionContainer = dt.div `
@@ -42190,7 +42483,6 @@ void main() {
42190
42483
  transformHandle.space = 'local';
42191
42484
  this.transformHandles.set(handedness, transformHandle);
42192
42485
  transformHandle.addEventListener('click', () => {
42193
- console.log('click');
42194
42486
  if (transformHandle.userData.mode === 'translate') {
42195
42487
  transformHandle.userData.setMode('rotate');
42196
42488
  }
@@ -42298,8 +42590,11 @@ void main() {
42298
42590
  xrDevice.position.copy(cameraRig.getWorldPosition(this.vec3));
42299
42591
  xrDevice.quaternion.copy(cameraRig.getWorldQuaternion(this.quat));
42300
42592
  transformHandles.forEach((transformHandle, handedness) => {
42301
- xrDevice.controllers[handedness].position.copy(transformHandle.getWorldPosition(this.vec3));
42302
- xrDevice.controllers[handedness].quaternion.copy(transformHandle.getWorldQuaternion(this.quat));
42593
+ const emulatedInput = xrDevice.primaryInputMode === 'controller'
42594
+ ? xrDevice.controllers[handedness]
42595
+ : xrDevice.hands[handedness];
42596
+ emulatedInput.position.copy(transformHandle.getWorldPosition(this.vec3));
42597
+ emulatedInput.quaternion.copy(transformHandle.getWorldQuaternion(this.quat));
42303
42598
  });
42304
42599
  }
42305
42600
  renderScene(time) {
@@ -42361,7 +42656,7 @@ void main() {
42361
42656
  }
42362
42657
  }
42363
42658
 
42364
- const VERSION = "1.0.2";
42659
+ const VERSION = "1.1.1";
42365
42660
 
42366
42661
  var client = {};
42367
42662
 
@@ -42795,6 +43090,7 @@ void main() {
42795
43090
  constructor(xrDevice) {
42796
43091
  this.version = VERSION;
42797
43092
  xrDevice.ipd = 0;
43093
+ useInputModeStore.getState().setInputMode(xrDevice.primaryInputMode);
42798
43094
  this.devUIContainer = document.createElement('div');
42799
43095
  this.devUIContainer.style.position = 'fixed';
42800
43096
  this.devUIContainer.style.width = '100vw';