@ledgerhq/speculos-device-controller 0.0.0-develop-20251022001229

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 (126) hide show
  1. package/LICENSE.MD +202 -0
  2. package/README.md +99 -0
  3. package/lib/cjs/index.js +2 -0
  4. package/lib/cjs/index.js.map +7 -0
  5. package/lib/cjs/package.json +53 -0
  6. package/lib/cjs/src/api/DeviceController.js +2 -0
  7. package/lib/cjs/src/api/DeviceController.js.map +7 -0
  8. package/lib/cjs/src/api/DeviceController.test.js +2 -0
  9. package/lib/cjs/src/api/DeviceController.test.js.map +7 -0
  10. package/lib/cjs/src/index.js +2 -0
  11. package/lib/cjs/src/index.js.map +7 -0
  12. package/lib/cjs/src/internal/adapters/DefaultButtonController.js +2 -0
  13. package/lib/cjs/src/internal/adapters/DefaultButtonController.js.map +7 -0
  14. package/lib/cjs/src/internal/adapters/DefaultButtonController.test.js +2 -0
  15. package/lib/cjs/src/internal/adapters/DefaultButtonController.test.js.map +7 -0
  16. package/lib/cjs/src/internal/adapters/DefaultTouchController.js +2 -0
  17. package/lib/cjs/src/internal/adapters/DefaultTouchController.js.map +7 -0
  18. package/lib/cjs/src/internal/adapters/DefaultTouchController.test.js +2 -0
  19. package/lib/cjs/src/internal/adapters/DefaultTouchController.test.js.map +7 -0
  20. package/lib/cjs/src/internal/config/defaultScreens.js +2 -0
  21. package/lib/cjs/src/internal/config/defaultScreens.js.map +7 -0
  22. package/lib/cjs/src/internal/core/ButtonController.js +2 -0
  23. package/lib/cjs/src/internal/core/ButtonController.js.map +7 -0
  24. package/lib/cjs/src/internal/core/TouchController.js +2 -0
  25. package/lib/cjs/src/internal/core/TouchController.js.map +7 -0
  26. package/lib/cjs/src/internal/core/types.js +2 -0
  27. package/lib/cjs/src/internal/core/types.js.map +7 -0
  28. package/lib/cjs/src/internal/di.js +2 -0
  29. package/lib/cjs/src/internal/di.js.map +7 -0
  30. package/lib/cjs/src/internal/di.test.js +2 -0
  31. package/lib/cjs/src/internal/di.test.js.map +7 -0
  32. package/lib/cjs/src/internal/use-cases/buttonUseCases.js +2 -0
  33. package/lib/cjs/src/internal/use-cases/buttonUseCases.js.map +7 -0
  34. package/lib/cjs/src/internal/use-cases/buttonUseCases.test.js +2 -0
  35. package/lib/cjs/src/internal/use-cases/buttonUseCases.test.js.map +7 -0
  36. package/lib/cjs/src/internal/use-cases/touchUseCases.js +2 -0
  37. package/lib/cjs/src/internal/use-cases/touchUseCases.js.map +7 -0
  38. package/lib/cjs/src/internal/use-cases/touchUseCases.test.js +2 -0
  39. package/lib/cjs/src/internal/use-cases/touchUseCases.test.js.map +7 -0
  40. package/lib/cjs/src/internal/utils/axisClamp.js +2 -0
  41. package/lib/cjs/src/internal/utils/axisClamp.js.map +7 -0
  42. package/lib/cjs/src/internal/utils/axisClamp.test.js +2 -0
  43. package/lib/cjs/src/internal/utils/axisClamp.test.js.map +7 -0
  44. package/lib/esm/index.js +2 -0
  45. package/lib/esm/index.js.map +7 -0
  46. package/lib/esm/package.json +53 -0
  47. package/lib/esm/src/api/DeviceController.js +2 -0
  48. package/lib/esm/src/api/DeviceController.js.map +7 -0
  49. package/lib/esm/src/api/DeviceController.test.js +2 -0
  50. package/lib/esm/src/api/DeviceController.test.js.map +7 -0
  51. package/lib/esm/src/index.js +2 -0
  52. package/lib/esm/src/index.js.map +7 -0
  53. package/lib/esm/src/internal/adapters/DefaultButtonController.js +2 -0
  54. package/lib/esm/src/internal/adapters/DefaultButtonController.js.map +7 -0
  55. package/lib/esm/src/internal/adapters/DefaultButtonController.test.js +2 -0
  56. package/lib/esm/src/internal/adapters/DefaultButtonController.test.js.map +7 -0
  57. package/lib/esm/src/internal/adapters/DefaultTouchController.js +2 -0
  58. package/lib/esm/src/internal/adapters/DefaultTouchController.js.map +7 -0
  59. package/lib/esm/src/internal/adapters/DefaultTouchController.test.js +2 -0
  60. package/lib/esm/src/internal/adapters/DefaultTouchController.test.js.map +7 -0
  61. package/lib/esm/src/internal/config/defaultScreens.js +2 -0
  62. package/lib/esm/src/internal/config/defaultScreens.js.map +7 -0
  63. package/lib/esm/src/internal/core/ButtonController.js +1 -0
  64. package/lib/esm/src/internal/core/ButtonController.js.map +7 -0
  65. package/lib/esm/src/internal/core/TouchController.js +1 -0
  66. package/lib/esm/src/internal/core/TouchController.js.map +7 -0
  67. package/lib/esm/src/internal/core/types.js +2 -0
  68. package/lib/esm/src/internal/core/types.js.map +7 -0
  69. package/lib/esm/src/internal/di.js +2 -0
  70. package/lib/esm/src/internal/di.js.map +7 -0
  71. package/lib/esm/src/internal/di.test.js +2 -0
  72. package/lib/esm/src/internal/di.test.js.map +7 -0
  73. package/lib/esm/src/internal/use-cases/buttonUseCases.js +2 -0
  74. package/lib/esm/src/internal/use-cases/buttonUseCases.js.map +7 -0
  75. package/lib/esm/src/internal/use-cases/buttonUseCases.test.js +2 -0
  76. package/lib/esm/src/internal/use-cases/buttonUseCases.test.js.map +7 -0
  77. package/lib/esm/src/internal/use-cases/touchUseCases.js +2 -0
  78. package/lib/esm/src/internal/use-cases/touchUseCases.js.map +7 -0
  79. package/lib/esm/src/internal/use-cases/touchUseCases.test.js +2 -0
  80. package/lib/esm/src/internal/use-cases/touchUseCases.test.js.map +7 -0
  81. package/lib/esm/src/internal/utils/axisClamp.js +2 -0
  82. package/lib/esm/src/internal/utils/axisClamp.js.map +7 -0
  83. package/lib/esm/src/internal/utils/axisClamp.test.js +2 -0
  84. package/lib/esm/src/internal/utils/axisClamp.test.js.map +7 -0
  85. package/lib/types/index.d.ts +2 -0
  86. package/lib/types/index.d.ts.map +1 -0
  87. package/lib/types/src/api/DeviceController.d.ts +24 -0
  88. package/lib/types/src/api/DeviceController.d.ts.map +1 -0
  89. package/lib/types/src/api/DeviceController.test.d.ts +2 -0
  90. package/lib/types/src/api/DeviceController.test.d.ts.map +1 -0
  91. package/lib/types/src/index.d.ts +2 -0
  92. package/lib/types/src/index.d.ts.map +1 -0
  93. package/lib/types/src/internal/adapters/DefaultButtonController.d.ts +9 -0
  94. package/lib/types/src/internal/adapters/DefaultButtonController.d.ts.map +1 -0
  95. package/lib/types/src/internal/adapters/DefaultButtonController.test.d.ts +2 -0
  96. package/lib/types/src/internal/adapters/DefaultButtonController.test.d.ts.map +1 -0
  97. package/lib/types/src/internal/adapters/DefaultTouchController.d.ts +15 -0
  98. package/lib/types/src/internal/adapters/DefaultTouchController.d.ts.map +1 -0
  99. package/lib/types/src/internal/adapters/DefaultTouchController.test.d.ts +2 -0
  100. package/lib/types/src/internal/adapters/DefaultTouchController.test.d.ts.map +1 -0
  101. package/lib/types/src/internal/config/defaultScreens.d.ts +12 -0
  102. package/lib/types/src/internal/config/defaultScreens.d.ts.map +1 -0
  103. package/lib/types/src/internal/core/ButtonController.d.ts +5 -0
  104. package/lib/types/src/internal/core/ButtonController.d.ts.map +1 -0
  105. package/lib/types/src/internal/core/TouchController.d.ts +7 -0
  106. package/lib/types/src/internal/core/TouchController.d.ts.map +1 -0
  107. package/lib/types/src/internal/core/types.d.ts +23 -0
  108. package/lib/types/src/internal/core/types.d.ts.map +1 -0
  109. package/lib/types/src/internal/di.d.ts +9 -0
  110. package/lib/types/src/internal/di.d.ts.map +1 -0
  111. package/lib/types/src/internal/di.test.d.ts +2 -0
  112. package/lib/types/src/internal/di.test.d.ts.map +1 -0
  113. package/lib/types/src/internal/use-cases/buttonUseCases.d.ts +9 -0
  114. package/lib/types/src/internal/use-cases/buttonUseCases.d.ts.map +1 -0
  115. package/lib/types/src/internal/use-cases/buttonUseCases.test.d.ts +2 -0
  116. package/lib/types/src/internal/use-cases/buttonUseCases.test.d.ts.map +1 -0
  117. package/lib/types/src/internal/use-cases/touchUseCases.d.ts +5 -0
  118. package/lib/types/src/internal/use-cases/touchUseCases.d.ts.map +1 -0
  119. package/lib/types/src/internal/use-cases/touchUseCases.test.d.ts +2 -0
  120. package/lib/types/src/internal/use-cases/touchUseCases.test.d.ts.map +1 -0
  121. package/lib/types/src/internal/utils/axisClamp.d.ts +14 -0
  122. package/lib/types/src/internal/utils/axisClamp.d.ts.map +1 -0
  123. package/lib/types/src/internal/utils/axisClamp.test.d.ts +2 -0
  124. package/lib/types/src/internal/utils/axisClamp.test.d.ts.map +1 -0
  125. package/lib/types/tsconfig.prod.tsbuildinfo +1 -0
  126. package/package.json +52 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/use-cases/touchUseCases.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport type { TouchController } from \"@root/src/internal/core/TouchController\";\n\nimport { tapLong, tapQuick } from \"./touchUseCases\";\n\ndescribe(\"touchUsecases\", () => {\n const deviceKey = \"devA\";\n const point = { x: 50, y: 30 } as any;\n\n let controller: TouchController;\n\n beforeEach(() => {\n controller = {\n tap: vi.fn().mockResolvedValue(undefined),\n release: vi.fn().mockResolvedValue(undefined),\n tapAndRelease: vi.fn().mockResolvedValue(undefined),\n } as unknown as TouchController;\n vi.restoreAllMocks();\n vi.useRealTimers();\n });\n\n it(\"tapQuick calls tapAndRelease with the same deviceKey and point\", async () => {\n const quick = tapQuick(controller, deviceKey);\n await quick(point);\n\n expect(controller.tapAndRelease).toHaveBeenCalledTimes(1);\n expect(controller.tapAndRelease).toHaveBeenCalledWith(deviceKey, point);\n expect(controller.tap).not.toHaveBeenCalled();\n expect(controller.release).not.toHaveBeenCalled();\n });\n\n it(\"tapLong taps, waits default timeout, then releases\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n\n const longTap = tapLong(controller, deviceKey);\n const run = longTap(point);\n\n await Promise.resolve();\n\n expect(controller.tap).toHaveBeenCalledTimes(1);\n expect(controller.tap).toHaveBeenCalledWith(deviceKey, point);\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 5000);\n expect(controller.release).not.toHaveBeenCalled();\n\n // let the 5s timer elapse\n await vi.advanceTimersByTimeAsync(5000);\n await run;\n\n expect(controller.release).toHaveBeenCalledTimes(1);\n expect(controller.release).toHaveBeenCalledWith(deviceKey, point);\n });\n\n it(\"tapLong uses the provided delayMs value\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n\n const customMs = 1234;\n const longTap = tapLong(controller, deviceKey);\n const run = longTap(point, customMs);\n\n await Promise.resolve();\n\n expect(controller.tap).toHaveBeenCalledTimes(1);\n expect(controller.tap).toHaveBeenCalledWith(deviceKey, point);\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), customMs);\n expect(controller.release).not.toHaveBeenCalled();\n\n // advance exactly customMs and ensure release happens then\n await vi.advanceTimersByTimeAsync(customMs);\n await run;\n\n expect(controller.release).toHaveBeenCalledTimes(1);\n expect(controller.release).toHaveBeenCalledWith(deviceKey, point);\n });\n\n it(\"tapLong propagates error if tap() rejects (no release)\", async () => {\n vi.useFakeTimers();\n\n const boom = new Error(\"tap failed\");\n (controller.tap as any).mockRejectedValueOnce(boom);\n\n const longTap = tapLong(controller, deviceKey);\n const p = longTap(point);\n\n // attach rejection handler immediately\n await expect(p).rejects.toThrow(\"tap failed\");\n expect(controller.release).not.toHaveBeenCalled();\n });\n\n it(\"tapLong propagates error if release() rejects\", async () => {\n vi.useFakeTimers();\n\n const boom = new Error(\"release failed\");\n (controller.release as any).mockRejectedValueOnce(boom);\n\n const p = tapLong(controller, deviceKey)(point);\n\n const assertion = expect(p).rejects.toThrow(\"release failed\");\n\n await Promise.resolve();\n await vi.advanceTimersByTimeAsync(5000);\n\n await assertion;\n\n expect(controller.tap).toHaveBeenCalledTimes(1);\n expect(controller.release).toHaveBeenCalledTimes(1);\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["tapLong", "tapQuick", "deviceKey", "point", "controller", "timeoutSpy", "run", "customMs", "boom", "p", "assertion"]
7
+ }
@@ -0,0 +1,2 @@
1
+ const c=e=>Math.max(0,Math.min(100,e))/100,s=e=>t=>Math.floor(e*c(t)),o=(e,t)=>({vw:s(e),vh:s(t),xy:(r,n)=>({x:s(e)(r),y:s(t)(n)})}),p=e=>{const t={};for(const r of Object.keys(e)){const n=e[r];t[r]=o(n.width,n.height)}return t};export{s as clampValue,p as createAxes,o as createAxis};
2
+ //# sourceMappingURL=axisClamp.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/utils/axisClamp.ts"],
4
+ "sourcesContent": ["import type { DeviceScreens, Percent } from \"@internal/core/types\";\n\nconst clamp = (pct: number) => Math.max(0, Math.min(100, pct)) / 100;\n\nexport const clampValue = (value: number) => (pct: Percent) =>\n Math.floor(value * clamp(pct));\n\nexport const createAxis = (width: number, height: number) => ({\n vw: clampValue(width),\n vh: clampValue(height),\n xy: (xPct: Percent, yPct: Percent) => ({\n x: clampValue(width)(xPct),\n y: clampValue(height)(yPct),\n }),\n});\n\nexport type Axis = ReturnType<typeof createAxis>;\nexport type AxisMap<K extends string = string> = Record<K, Axis>;\n\nexport const createAxes = <K extends string>(\n screens: DeviceScreens<K>,\n): AxisMap<K> => {\n const mappedAxes = {} as AxisMap<K>;\n for (const key of Object.keys(screens) as K[]) {\n const screen = screens[key];\n mappedAxes[key] = createAxis(screen.width, screen.height);\n }\n return mappedAxes;\n};\n"],
5
+ "mappings": "AAEA,MAAMA,EAASC,GAAgB,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKA,CAAG,CAAC,EAAI,IAEpDC,EAAcC,GAAmBF,GAC5C,KAAK,MAAME,EAAQH,EAAMC,CAAG,CAAC,EAElBG,EAAa,CAACC,EAAeC,KAAoB,CAC5D,GAAIJ,EAAWG,CAAK,EACpB,GAAIH,EAAWI,CAAM,EACrB,GAAI,CAACC,EAAeC,KAAmB,CACrC,EAAGN,EAAWG,CAAK,EAAEE,CAAI,EACzB,EAAGL,EAAWI,CAAM,EAAEE,CAAI,CAC5B,EACF,GAKaC,EACXC,GACe,CACf,MAAMC,EAAa,CAAC,EACpB,UAAWC,KAAO,OAAO,KAAKF,CAAO,EAAU,CAC7C,MAAMG,EAASH,EAAQE,CAAG,EAC1BD,EAAWC,CAAG,EAAIR,EAAWS,EAAO,MAAOA,EAAO,MAAM,CAC1D,CACA,OAAOF,CACT",
6
+ "names": ["clamp", "pct", "clampValue", "value", "createAxis", "width", "height", "xPct", "yPct", "createAxes", "screens", "mappedAxes", "key", "screen"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{clampValue as o,createAxes as s,createAxis as x}from"./axisClamp";const e=t=>t;describe("axisClamp helpers",()=>{describe("clampValue",()=>{it("floors and clamps to [0, width]",()=>{const t=o(200);expect(t(e(0))).toBe(0),expect(t(e(50))).toBe(100),expect(t(e(50.4))).toBe(100),expect(t(e(50.5))).toBe(101),expect(t(e(100))).toBe(200),expect(t(e(150))).toBe(200),expect(t(e(-10))).toBe(0)})}),describe("createAxis",()=>{it("exposes vw, vh and xy with consistent flooring + clamping",()=>{const t=x(300,200);expect(t.vw(e(25))).toBe(75),expect(t.vh(e(75))).toBe(150),expect(t.xy(e(10),e(90))).toEqual({x:30,y:180}),expect(t.xy(e(150),e(-20))).toEqual({x:300,y:0});const c=t.xy(e(33.4),e(66.6));expect(c.x).toBe(Math.floor(300*.334)),expect(c.y).toBe(Math.floor(200*.666))})}),describe("createAxes",()=>{it("creates an AxisMap for all device keys with matching dimensions",()=>{const c=s({devA:{width:200,height:100},devB:{width:320,height:480}});expect(Object.keys(c).sort()).toEqual(["devA","devB"]),expect(c.devA.vw(e(100))).toBe(200),expect(c.devA.vh(e(100))).toBe(100),expect(c.devA.xy(e(120),e(-10))).toEqual({x:200,y:0}),expect(c.devB.vw(e(50))).toBe(160),expect(c.devB.vh(e(50))).toBe(240),expect(c.devB.xy(e(33.3),e(66.7))).toEqual({x:Math.floor(320*.333),y:Math.floor(480*.667)})})})});
2
+ //# sourceMappingURL=axisClamp.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/utils/axisClamp.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport type { DeviceScreens, Percent } from \"@internal/core/types\";\n\nimport { type AxisMap, clampValue, createAxes, createAxis } from \"./axisClamp\";\n\nconst p = (n: number) => n as unknown as Percent;\n\ndescribe(\"axisClamp helpers\", () => {\n describe(\"clampValue\", () => {\n it(\"floors and clamps to [0, width]\", () => {\n const clamp = clampValue(200);\n\n expect(clamp(p(0))).toBe(0);\n expect(clamp(p(50))).toBe(100); // 200 * 0.5 = 100\n expect(clamp(p(50.4))).toBe(100); // floor(200 * 0.504) = 100\n expect(clamp(p(50.5))).toBe(101); // floor(200 * 0.505) = 101\n expect(clamp(p(100))).toBe(200);\n expect(clamp(p(150))).toBe(200); // clamped\n expect(clamp(p(-10))).toBe(0); // clamped\n });\n });\n\n describe(\"createAxis\", () => {\n it(\"exposes vw, vh and xy with consistent flooring + clamping\", () => {\n const axis = createAxis(300, 200);\n\n // vw / vh\n expect(axis.vw(p(25))).toBe(75); // 300 * 0.25\n expect(axis.vh(p(75))).toBe(150); // 200 * 0.75\n\n // xy nominal\n expect(axis.xy(p(10), p(90))).toEqual({ x: 30, y: 180 });\n\n // xy clamps both axes\n expect(axis.xy(p(150), p(-20))).toEqual({ x: 300, y: 0 });\n\n // flooring behavior with fractional percent\n const xy = axis.xy(p(33.4), p(66.6));\n expect(xy.x).toBe(Math.floor(300 * 0.334));\n expect(xy.y).toBe(Math.floor(200 * 0.666));\n });\n });\n\n describe(\"createAxes\", () => {\n it(\"creates an AxisMap for all device keys with matching dimensions\", () => {\n const screens: DeviceScreens<\"devA\" | \"devB\"> = {\n devA: { width: 200, height: 100 } as any,\n devB: { width: 320, height: 480 } as any,\n };\n\n const axes: AxisMap<\"devA\" | \"devB\"> = createAxes(screens);\n\n // contains both keys\n expect(Object.keys(axes).sort()).toEqual([\"devA\", \"devB\"]);\n\n // devA\n expect(axes.devA.vw(p(100))).toBe(200);\n expect(axes.devA.vh(p(100))).toBe(100);\n expect(axes.devA.xy(p(120), p(-10))).toEqual({ x: 200, y: 0 });\n\n // devB\n expect(axes.devB.vw(p(50))).toBe(160);\n expect(axes.devB.vh(p(50))).toBe(240);\n expect(axes.devB.xy(p(33.3), p(66.7))).toEqual({\n x: Math.floor(320 * 0.333),\n y: Math.floor(480 * 0.667),\n });\n });\n });\n});\n"],
5
+ "mappings": "AAMA,OAAuB,cAAAA,EAAY,cAAAC,EAAY,cAAAC,MAAkB,cAEjE,MAAMC,EAAKC,GAAcA,EAEzB,SAAS,oBAAqB,IAAM,CAClC,SAAS,aAAc,IAAM,CAC3B,GAAG,kCAAmC,IAAM,CAC1C,MAAMC,EAAQL,EAAW,GAAG,EAE5B,OAAOK,EAAMF,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAC1B,OAAOE,EAAMF,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAC7B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAC9B,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,4DAA6D,IAAM,CACpE,MAAMG,EAAOJ,EAAW,IAAK,GAAG,EAGhC,OAAOI,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAC9B,OAAOG,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAG/B,OAAOG,EAAK,GAAGH,EAAE,EAAE,EAAGA,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,GAAI,EAAG,GAAI,CAAC,EAGvD,OAAOG,EAAK,GAAGH,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAGxD,MAAMI,EAAKD,EAAK,GAAGH,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,EACnC,OAAOI,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,EACzC,OAAOA,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,kEAAmE,IAAM,CAM1E,MAAMC,EAAiCP,EALS,CAC9C,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,EAChC,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,CAClC,CAEyD,EAGzD,OAAO,OAAO,KAAKO,CAAI,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAQ,MAAM,CAAC,EAGzD,OAAOA,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAG7D,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAC7C,EAAG,KAAK,MAAM,IAAM,IAAK,EACzB,EAAG,KAAK,MAAM,IAAM,IAAK,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["clampValue", "createAxes", "createAxis", "p", "n", "clamp", "axis", "xy", "axes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./src/index";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ButtonController } from "../internal/core/ButtonController";
2
+ import type { ButtonKey, DeviceControllerOptions, DeviceScreens, PercentCoordinates } from "../internal/core/types";
3
+ export type ButtonFactory = () => ButtonController & {
4
+ left(): Promise<void>;
5
+ right(): Promise<void>;
6
+ both(): Promise<void>;
7
+ pressSequence(keys: ButtonKey[], delayMs?: number): Promise<void>;
8
+ };
9
+ export type TapFactory = (deviceKey: string) => {
10
+ tapQuick: (point: PercentCoordinates) => Promise<void>;
11
+ tapLong: (point: PercentCoordinates) => Promise<void>;
12
+ };
13
+ export type DeviceControllerClientFactory = (baseURL: string, opts?: {
14
+ timeoutMs?: number;
15
+ clientHeader?: string;
16
+ screens?: DeviceScreens<string>;
17
+ }) => DeviceControllerClient;
18
+ export type DeviceControllerClient = {
19
+ buttonFactory: ButtonFactory;
20
+ tapFactory: TapFactory;
21
+ };
22
+ export declare const deviceControllerClientFactory: DeviceControllerClientFactory;
23
+ export type { ButtonKey, DeviceControllerOptions, DeviceScreens, PercentCoordinates, };
24
+ //# sourceMappingURL=DeviceController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceController.d.ts","sourceRoot":"","sources":["../../../../src/api/DeviceController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EACV,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,GAAG;IACnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjC,KACE,sBAAsB,CAAC;AAE5B,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,6BA0B3C,CAAC;AAEF,YAAY,EACV,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DeviceController.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceController.test.d.ts","sourceRoot":"","sources":["../../../../src/api/DeviceController.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./api/DeviceController";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AxiosInstance } from "axios";
2
+ import type { ButtonController } from "../core/ButtonController";
3
+ import { type ButtonKey } from "../core/types";
4
+ export declare class DefaultButtonController implements ButtonController {
5
+ private readonly client;
6
+ constructor(client: AxiosInstance);
7
+ press(key: ButtonKey): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=DefaultButtonController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultButtonController.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapters/DefaultButtonController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAEvE,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAE5C,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DefaultButtonController.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultButtonController.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapters/DefaultButtonController.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { AxiosInstance } from "axios";
2
+ import { type PercentCoordinates } from "../core/types";
3
+ import type { AxisMap } from "../utils/axisClamp";
4
+ import type { TouchController } from "../../../src/internal/core/TouchController";
5
+ export declare class DefaultTouchController<K extends string> implements TouchController<K> {
6
+ private readonly client;
7
+ private readonly axes;
8
+ constructor(client: AxiosInstance, axes: AxisMap<K>);
9
+ private assertPercentPoint;
10
+ private toAbs;
11
+ tapAndRelease(deviceKey: K, point: PercentCoordinates): Promise<void>;
12
+ tap(deviceKey: K, point: PercentCoordinates): Promise<void>;
13
+ release(deviceKey: K, point: PercentCoordinates): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=DefaultTouchController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultTouchController.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapters/DefaultTouchController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,qBAAa,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAClD,YAAW,eAAe,CAAC,CAAC,CAAC;IAG3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAGnC,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,KAAK;IAYP,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DefaultTouchController.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultTouchController.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/adapters/DefaultTouchController.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export declare const DEFAULT_SCREENS: {
2
+ readonly flex: {
3
+ readonly width: 480;
4
+ readonly height: 600;
5
+ };
6
+ readonly stax: {
7
+ readonly width: 400;
8
+ readonly height: 672;
9
+ };
10
+ };
11
+ export type DefaultDeviceKey = keyof typeof DEFAULT_SCREENS & string;
12
+ //# sourceMappingURL=defaultScreens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultScreens.d.ts","sourceRoot":"","sources":["../../../../../src/internal/config/defaultScreens.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;;;;;;;CAGlB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,GAAG,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ButtonKey } from "./types";
2
+ export interface ButtonController {
3
+ press(key: ButtonKey): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=ButtonController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonController.d.ts","sourceRoot":"","sources":["../../../../../src/internal/core/ButtonController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC"}
@@ -0,0 +1,7 @@
1
+ import type { PercentCoordinates } from "./types";
2
+ export interface TouchController<K extends string = string> {
3
+ tapAndRelease: (deviceKey: K, point: PercentCoordinates) => Promise<void>;
4
+ tap: (deviceKey: K, point: PercentCoordinates) => Promise<void>;
5
+ release: (deviceKey: K, point: PercentCoordinates) => Promise<void>;
6
+ }
7
+ //# sourceMappingURL=TouchController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TouchController.d.ts","sourceRoot":"","sources":["../../../../../src/internal/core/TouchController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACxD,aAAa,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE"}
@@ -0,0 +1,23 @@
1
+ export type ButtonKey = "left" | "right" | "both";
2
+ export type ScreenSpec = Readonly<{
3
+ width: number;
4
+ height: number;
5
+ }>;
6
+ export type DeviceScreens<K extends string = string> = Readonly<Record<K, ScreenSpec>>;
7
+ export type Range<N extends number, Acc extends number[] = []> = Acc["length"] extends N ? Acc[number] : Range<N, [...Acc, Acc["length"]]>;
8
+ export type Percent = Range<101>;
9
+ export type PercentCoordinates = {
10
+ x: Percent;
11
+ y: Percent;
12
+ };
13
+ export type DeviceControllerOptions<K extends string = string> = {
14
+ screens: DeviceScreens<K>;
15
+ timeoutMs?: number;
16
+ clientHeader?: string;
17
+ };
18
+ export declare enum SpeculosActions {
19
+ PRESS = "press",
20
+ RELEASE = "release",
21
+ PRESS_AND_RELEASE = "press-and-release"
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/internal/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAC7D,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,IACvB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAC/D,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,iBAAiB,sBAAsB;CACxC"}
@@ -0,0 +1,9 @@
1
+ import type { ButtonController } from "./core/ButtonController";
2
+ import type { DeviceControllerOptions } from "./core/types";
3
+ import type { TouchController } from "../../src/internal/core/TouchController";
4
+ export type ControllersContainer = {
5
+ buttons: ButtonController;
6
+ touch: TouchController;
7
+ };
8
+ export declare function createDefaultControllers(baseURL: string, opts: DeviceControllerOptions): ControllersContainer;
9
+ //# sourceMappingURL=di.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.d.ts","sourceRoot":"","sources":["../../../../src/internal/di.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,uBAAuB,GAC5B,oBAAoB,CAgBtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=di.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.test.d.ts","sourceRoot":"","sources":["../../../../src/internal/di.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ButtonController } from "../core/ButtonController";
2
+ import type { ButtonKey } from "../core/types";
3
+ export declare function pressSequence(buttons: ButtonController, keys: ButtonKey[], delayMs?: number): Promise<void>;
4
+ export declare function pressButtons(buttons: ButtonController): {
5
+ left: () => Promise<void>;
6
+ right: () => Promise<void>;
7
+ both: () => Promise<void>;
8
+ };
9
+ //# sourceMappingURL=buttonUseCases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttonUseCases.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/buttonUseCases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,EAAE,EACjB,OAAO,SAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG;IACvD,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAMA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=buttonUseCases.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttonUseCases.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/buttonUseCases.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { PercentCoordinates } from "../core/types";
2
+ import { type TouchController } from "../../../src/internal/core/TouchController";
3
+ export declare const tapLong: <K extends string>(touch: TouchController<K>, deviceKey: K) => (point: PercentCoordinates, delayMs?: number) => Promise<void>;
4
+ export declare const tapQuick: <K extends string>(touch: TouchController<K>, deviceKey: K) => (point: PercentCoordinates) => Promise<void>;
5
+ //# sourceMappingURL=touchUseCases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchUseCases.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/touchUseCases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAI/E,eAAO,MAAM,OAAO,GACjB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,EAAE,UAAS,MAAyB,kBAInE,CAAC;AAEJ,eAAO,MAAM,QAAQ,GAClB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,kBACa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=touchUseCases.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchUseCases.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/touchUseCases.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { DeviceScreens, Percent } from "../core/types";
2
+ export declare const clampValue: (value: number) => (pct: Percent) => number;
3
+ export declare const createAxis: (width: number, height: number) => {
4
+ vw: (pct: Percent) => number;
5
+ vh: (pct: Percent) => number;
6
+ xy: (xPct: Percent, yPct: Percent) => {
7
+ x: number;
8
+ y: number;
9
+ };
10
+ };
11
+ export type Axis = ReturnType<typeof createAxis>;
12
+ export type AxisMap<K extends string = string> = Record<K, Axis>;
13
+ export declare const createAxes: <K extends string>(screens: DeviceScreens<K>) => AxisMap<K>;
14
+ //# sourceMappingURL=axisClamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisClamp.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/axisClamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAInE,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,MAAM,KAAK,OAAO,WAC1B,CAAC;AAEjC,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM;cAHL,OAAO;cAAP,OAAO;eAM7C,OAAO,QAAQ,OAAO;;;;CAIjC,CAAC;AAEH,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AACjD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEjE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EACzC,SAAS,aAAa,CAAC,CAAC,CAAC,KACxB,OAAO,CAAC,CAAC,CAOX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=axisClamp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisClamp.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/utils/axisClamp.test.ts"],"names":[],"mappings":""}