@rydr/game-sdk 3.27.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +26 -21
  2. package/dist/client/HardwareStore.d.ts +10 -0
  3. package/dist/client/HardwareStore.d.ts.map +1 -1
  4. package/dist/client/HardwareStore.js +10 -0
  5. package/dist/client/HardwareStore.js.map +1 -1
  6. package/dist/client/PlatformClient.d.ts +51 -28
  7. package/dist/client/PlatformClient.d.ts.map +1 -1
  8. package/dist/client/PlatformClient.js +33 -9
  9. package/dist/client/PlatformClient.js.map +1 -1
  10. package/dist/host/PlatformHost.d.ts +30 -13
  11. package/dist/host/PlatformHost.d.ts.map +1 -1
  12. package/dist/host/PlatformHost.js +42 -8
  13. package/dist/host/PlatformHost.js.map +1 -1
  14. package/dist/nav/README.md +26 -6
  15. package/dist/nav/scroll-nav.d.ts.map +1 -1
  16. package/dist/nav/scroll-nav.js +8 -4
  17. package/dist/nav/scroll-nav.js.map +1 -1
  18. package/dist/nav/spatial-nav.d.ts +27 -0
  19. package/dist/nav/spatial-nav.d.ts.map +1 -1
  20. package/dist/nav/spatial-nav.js +173 -8
  21. package/dist/nav/spatial-nav.js.map +1 -1
  22. package/dist/protocol/boards.d.ts +0 -8
  23. package/dist/protocol/boards.d.ts.map +1 -1
  24. package/dist/protocol/boards.js.map +1 -1
  25. package/dist/protocol/buttons.d.ts +49 -15
  26. package/dist/protocol/buttons.d.ts.map +1 -1
  27. package/dist/protocol/buttons.js +39 -17
  28. package/dist/protocol/buttons.js.map +1 -1
  29. package/dist/protocol/glyphs.d.ts +47 -0
  30. package/dist/protocol/glyphs.d.ts.map +1 -0
  31. package/dist/protocol/glyphs.js +75 -0
  32. package/dist/protocol/glyphs.js.map +1 -0
  33. package/dist/protocol/index.d.ts +1 -0
  34. package/dist/protocol/index.d.ts.map +1 -1
  35. package/dist/protocol/index.js +1 -0
  36. package/dist/protocol/index.js.map +1 -1
  37. package/dist/protocol/messages.d.ts +25 -19
  38. package/dist/protocol/messages.d.ts.map +1 -1
  39. package/dist/protocol/version.d.ts +2 -2
  40. package/dist/protocol/version.d.ts.map +1 -1
  41. package/dist/protocol/version.js +47 -2
  42. package/dist/protocol/version.js.map +1 -1
  43. package/dist/three/README.md +1 -1
  44. package/dist/ui/README.md +6 -6
  45. package/dist/ui/action-card.d.ts +4 -4
  46. package/dist/ui/action-card.d.ts.map +1 -1
  47. package/dist/ui/action-card.js.map +1 -1
  48. package/dist/ui/action-diamond.d.ts +3 -3
  49. package/dist/ui/action-diamond.d.ts.map +1 -1
  50. package/dist/ui/action-diamond.js +4 -2
  51. package/dist/ui/action-diamond.js.map +1 -1
  52. package/dist/ui/choice-card.d.ts +3 -3
  53. package/dist/ui/choice-card.d.ts.map +1 -1
  54. package/dist/ui/choice-card.js +1 -1
  55. package/dist/ui/choice-card.js.map +1 -1
  56. package/dist/ui/dialogue-card.d.ts +3 -3
  57. package/dist/ui/dialogue-card.d.ts.map +1 -1
  58. package/dist/ui/dialogue-card.js +1 -1
  59. package/dist/ui/dialogue-card.js.map +1 -1
  60. package/dist/ui/keycap.d.ts +19 -5
  61. package/dist/ui/keycap.d.ts.map +1 -1
  62. package/dist/ui/keycap.js +63 -9
  63. package/dist/ui/keycap.js.map +1 -1
  64. package/dist/ui/labeled-diamond.d.ts +4 -4
  65. package/dist/ui/labeled-diamond.d.ts.map +1 -1
  66. package/dist/ui/labeled-diamond.js +7 -4
  67. package/dist/ui/labeled-diamond.js.map +1 -1
  68. package/dist/ui/showcase/index.d.ts.map +1 -1
  69. package/dist/ui/showcase/index.js +53 -27
  70. package/dist/ui/showcase/index.js.map +1 -1
  71. package/dist/ui/solo-labeled-diamond.d.ts +5 -5
  72. package/dist/ui/solo-labeled-diamond.d.ts.map +1 -1
  73. package/dist/ui/solo-labeled-diamond.js +4 -2
  74. package/dist/ui/solo-labeled-diamond.js.map +1 -1
  75. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-nav.js","sourceRoot":"","sources":["../../src/nav/scroll-nav.ts"],"names":[],"mappings":"AA0BA,oGAAoG;AACpG,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAiCpC,SAAS,oBAAoB;IAC3B,OAAO,OAAO,MAAM,KAAK,WAAW;QAClC,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QACvC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC;IAE1C,MAAM,QAAQ,GAAG,GAAmB,EAAE,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;IAEvG,SAAS,UAAU,CAAC,GAAkB;QACpC,iGAAiG;QACjG,gGAAgG;QAChG,yDAAyD;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,CAAC,+CAA+C;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAc;QACrB,MAAM,CAAC,IAAgB;YACrB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC;gBAAC,KAAK,MAAM;oBACpB,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO;gBACT,KAAK,GAAG;oBACN,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACnB,OAAO;gBACT,KAAK,GAAG,CAAC;gBAAC,KAAK,GAAG;oBAChB,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBAChB,OAAO;gBACT;oBACE,OAAO,CAAC,6CAA6C;YACzD,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAkB;YACzB,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;IAEF,oGAAoG;IACpG,0EAA0E;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"scroll-nav.js","sourceRoot":"","sources":["../../src/nav/scroll-nav.ts"],"names":[],"mappings":"AA0BA,oGAAoG;AACpG,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAiCpC,SAAS,oBAAoB;IAC3B,OAAO,OAAO,MAAM,KAAK,WAAW;QAClC,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QACvC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC;IAE1C,MAAM,QAAQ,GAAG,GAAmB,EAAE,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;IAEvG,SAAS,UAAU,CAAC,GAAkB;QACpC,iGAAiG;QACjG,gGAAgG;QAChG,yDAAyD;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,CAAC,+CAA+C;QACzE,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAc;QACrB,MAAM,CAAC,IAAgB;YACrB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,IAAI,CAAC;gBAAC,KAAK,MAAM;oBACpB,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO;gBACT,KAAK,cAAc;oBACjB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACnB,OAAO;gBACT,6FAA6F;gBAC7F,8FAA8F;gBAC9F,+CAA+C;gBAC/C,KAAK,eAAe;oBAClB,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBAChB,OAAO;gBACT;oBACE,0FAA0F;oBAC1F,kCAAkC;oBAClC,OAAO;YACX,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAkB;YACzB,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;YACL,KAAK,EAAE,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;IAEF,oGAAoG;IACpG,0EAA0E;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -86,6 +86,27 @@ export interface SpatialNavOptions {
86
86
  * item, exactly as before.
87
87
  */
88
88
  zoneSelector?: string;
89
+ /**
90
+ * Keep focus (and the `onFocusChange` emit) **live across DOM changes**, not just on directional
91
+ * moves. Default `true`. When on, the engine watches the active scope (a `MutationObserver`), the
92
+ * focused element's box (a `ResizeObserver`), and `transitionend` on the scope, and:
93
+ * - if the focused element is **replaced or removed** by a re-render, re-resolves it — by a shared
94
+ * `data-nav-id` if present, else the same zone + index, else the flat index (or clears focus when
95
+ * the scope has no focusables left) — re-applies `[nav-focused]`, and **re-fires `onFocusChange`**;
96
+ * - if the focused element merely **moves or resizes** (content reflow, a sibling appearing, the
97
+ * focus-grow `transform`), re-fires `onFocusChange` so a consumer riding it (e.g. a floating
98
+ * keycap positioned by `getBoundingClientRect`) re-anchors — de-duped by the element's rounded
99
+ * viewport rect so an unchanged box never re-emits.
100
+ * This makes `onFocusChange` mean "the current focus, kept correct" rather than "a directional move
101
+ * happened". Set `false` to restore the pre-3.28 behaviour (emit only on engine-driven focus moves).
102
+ * SSR-safe: a no-op where `MutationObserver`/`ResizeObserver`/`requestAnimationFrame` are absent.
103
+ *
104
+ * Two `[data-nav]` elements that should behave as ONE logical focus slot — a button that replaces
105
+ * another across a state change, or a card whose node identity changes on re-render — carry the same
106
+ * `data-nav-id`; focus and the ring then transfer to whichever is present. Opt-in; absent, resolution
107
+ * falls back to zone+index then flat index.
108
+ */
109
+ reconcileFocus?: boolean;
89
110
  }
90
111
  export interface SpatialNav {
91
112
  /** Feed one discrete button (a `down` edge). No-op for non-nav names. */
@@ -107,6 +128,12 @@ export interface SpatialNav {
107
128
  pushScreen(root: ParentNode): void;
108
129
  /** Leave the top scope, restoring the previous scope and its focus. */
109
130
  popScreen(): void;
131
+ /**
132
+ * Force a synchronous focus reconcile — re-resolve the focused element if it was replaced/removed and
133
+ * re-fire `onFocusChange` if it moved. Normally automatic (see `reconcileFocus`); call this to re-point
134
+ * immediately after a known render instead of waiting for the next observer tick. No-op if focus is null.
135
+ */
136
+ revalidate(): void;
110
137
  /** Tear down: unsubscribe the session and drop focus. */
111
138
  dispose(): void;
112
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-nav.d.ts","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAErE,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/E;AAED,mGAAmG;AACnG,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kFAAkF;IAClF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4HAA4H;IAC5H,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,qIAAqI;IACrI,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6GAA6G;IAC7G,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC7D;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,qFAAqF;IACrF,UAAU,IAAI,IAAI,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,wGAAwG;IACxG,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,4FAA4F;IAC5F,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,uEAAuE;IACvE,SAAS,IAAI,IAAI,CAAC;IAClB,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CA4QzE"}
1
+ {"version":3,"file":"spatial-nav.d.ts","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAErE,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/E;AAED,mGAAmG;AACnG,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kFAAkF;IAClF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4HAA4H;IAC5H,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,qIAAqI;IACrI,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6GAA6G;IAC7G,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC7D;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,qFAAqF;IACrF,UAAU,IAAI,IAAI,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,wGAAwG;IACxG,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,4FAA4F;IAC5F,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,uEAAuE;IACvE,SAAS,IAAI,IAAI,CAAC;IAClB;;;;OAIG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAoazE"}
@@ -100,6 +100,131 @@ export function createSpatialNav(opts = {}) {
100
100
  // client rects) and disabled, so nav never lands on a hidden or dead control. `getClientRects`
101
101
  // (not `offsetParent`) keeps position:fixed items eligible.
102
102
  const items = () => Array.from(top().root.querySelectorAll(selector)).filter((el) => el.getClientRects().length > 0 && !el.disabled);
103
+ // ── Focus reconciliation (reconcileFocus, default on) ───────────────────────────────────────────
104
+ // The engine tracks focus by element reference, so when a consumer's framework (e.g. Lit) re-renders
105
+ // and REPLACES or RESIZES the focused node, `onFocusChange` would never re-fire and a consumer's
106
+ // floating adornment (a keycap positioned by getBoundingClientRect) would strand on the dead rect.
107
+ // We watch the active scope + the focused box and re-resolve / re-emit. SSR-safe (all typeof-guarded).
108
+ const reconcileEnabled = opts.reconcileFocus !== false && typeof document !== "undefined" && typeof MutationObserver !== "undefined";
109
+ let mo = null;
110
+ let ro = null;
111
+ let rafId = null;
112
+ let transitionTarget = null;
113
+ /** Identity + rounded viewport rect of the last value handed to onFocusChange — the redundant-emit guard. */
114
+ let lastEmit = { el: null, sig: "" };
115
+ /** Positional identity of the focused item, captured while attached so a detach can re-resolve it. */
116
+ let slot = null;
117
+ const rectSig = (el) => {
118
+ const r = el.getBoundingClientRect();
119
+ return `${Math.round(r.left)}|${Math.round(r.top)}|${Math.round(r.width)}|${Math.round(r.height)}`;
120
+ };
121
+ /** The single funnel every `onFocusChange` emit goes through — records what the consumer last saw. */
122
+ const emitFocus = (el) => {
123
+ lastEmit = { el, sig: el ? rectSig(el) : "" };
124
+ opts.onFocusChange?.(el);
125
+ };
126
+ /** Remember the focused item by POSITION (not node ref) while it's attached, so a swap can re-resolve it. */
127
+ const captureSlot = (el) => {
128
+ if (!reconcileEnabled)
129
+ return;
130
+ const list = items();
131
+ const flatIndex = list.indexOf(el);
132
+ if (zoneSelector) {
133
+ const zones = zonesOf(list);
134
+ const z = zoneKey(el);
135
+ const members = list.filter((m) => zoneKey(m) === z);
136
+ slot = { navId: el.getAttribute("data-nav-id"), zoneIndex: zones.indexOf(z), itemIndex: members.indexOf(el), flatIndex };
137
+ }
138
+ else {
139
+ slot = { navId: el.getAttribute("data-nav-id"), zoneIndex: -1, itemIndex: -1, flatIndex };
140
+ }
141
+ };
142
+ /** After the focused node vanished: data-nav-id → same zone+index → flat index → null (scope emptied). */
143
+ const resolveReplacement = () => {
144
+ const list = items();
145
+ if (list.length === 0)
146
+ return null;
147
+ if (slot?.navId) {
148
+ const byId = list.find((el) => el.getAttribute("data-nav-id") === slot.navId);
149
+ if (byId)
150
+ return byId; // survives even a cross-zone move
151
+ }
152
+ if (zoneSelector && slot && slot.zoneIndex >= 0) {
153
+ const zones = zonesOf(list);
154
+ const z = zones[Math.min(slot.zoneIndex, zones.length - 1)];
155
+ if (z) {
156
+ const members = list.filter((el) => zoneKey(el) === z);
157
+ if (members.length)
158
+ return members[Math.min(slot.itemIndex, members.length - 1)];
159
+ }
160
+ }
161
+ return list[Math.min(slot?.flatIndex ?? 0, list.length - 1)];
162
+ };
163
+ const observeFocused = (el) => {
164
+ if (!ro)
165
+ return;
166
+ ro.disconnect();
167
+ if (el)
168
+ ro.observe(el);
169
+ };
170
+ /** Re-point focus if it went stale across a render, else re-emit if it merely moved/resized. */
171
+ const reconcile = () => {
172
+ const scope = top();
173
+ const el = scope.current;
174
+ if (!el)
175
+ return;
176
+ if (!el.isConnected || !items().includes(el)) {
177
+ const next = resolveReplacement();
178
+ scope.current?.removeAttribute("nav-focused");
179
+ if (next) {
180
+ next.setAttribute("nav-focused", ""); // nav-focused is excluded from the observer's attributeFilter
181
+ scope.current = next;
182
+ captureSlot(next);
183
+ observeFocused(next);
184
+ emitFocus(next);
185
+ }
186
+ else {
187
+ scope.current = null;
188
+ slot = null;
189
+ observeFocused(null);
190
+ emitFocus(null);
191
+ }
192
+ return;
193
+ }
194
+ const sig = rectSig(el);
195
+ if (el === lastEmit.el && sig === lastEmit.sig)
196
+ return; // unchanged box — suppress redundant emit
197
+ emitFocus(el);
198
+ };
199
+ const scheduleReconcile = () => {
200
+ if (!reconcileEnabled || rafId != null || typeof requestAnimationFrame === "undefined")
201
+ return;
202
+ rafId = requestAnimationFrame(() => { rafId = null; reconcile(); });
203
+ };
204
+ const onTransitionEnd = () => scheduleReconcile(); // CSS transforms (focus-grow) don't fire ResizeObserver
205
+ /** (Re)target the MutationObserver + transitionend listener at the ACTIVE scope root (changes on push/pop). */
206
+ const observeScope = () => {
207
+ if (!reconcileEnabled)
208
+ return;
209
+ const root = top().root;
210
+ // A Document has no observable "self" element subtree — observe its documentElement instead. A
211
+ // ShadowRoot (the shell's `host.renderRoot`) and a plain Element are observed directly.
212
+ const target = root && root.nodeType === 9 ? root.documentElement : root;
213
+ mo?.disconnect();
214
+ if (mo && target) {
215
+ mo.observe(target, {
216
+ childList: true,
217
+ subtree: true,
218
+ attributes: true,
219
+ // nav-focused is deliberately OMITTED so our own ring writes never self-trigger the observer.
220
+ attributeFilter: ["disabled", "hidden", "style", "class", "data-nav", "data-nav-id"],
221
+ });
222
+ }
223
+ if (transitionTarget)
224
+ transitionTarget.removeEventListener("transitionend", onTransitionEnd);
225
+ transitionTarget = target ?? null;
226
+ transitionTarget?.addEventListener?.("transitionend", onTransitionEnd);
227
+ };
103
228
  function setFocus(el, opt = {}) {
104
229
  const scope = top();
105
230
  if (scope.current === el)
@@ -107,7 +232,9 @@ export function createSpatialNav(opts = {}) {
107
232
  scope.current?.removeAttribute("nav-focused");
108
233
  scope.current = el;
109
234
  if (!el) {
110
- opts.onFocusChange?.(null);
235
+ slot = null;
236
+ observeFocused(null);
237
+ emitFocus(null);
111
238
  return;
112
239
  }
113
240
  el.setAttribute("nav-focused", "");
@@ -123,7 +250,9 @@ export function createSpatialNav(opts = {}) {
123
250
  el.scrollIntoView({ block: opt.scroll ?? "center", inline: "nearest" });
124
251
  if (isEditable(el))
125
252
  el.focus();
126
- opts.onFocusChange?.(el);
253
+ captureSlot(el);
254
+ observeFocused(el);
255
+ emitFocus(el);
127
256
  }
128
257
  /** The distinct zones present among `list` (deduped, in first-seen DOM order). */
129
258
  const zonesOf = (list) => {
@@ -293,7 +422,7 @@ export function createSpatialNav(opts = {}) {
293
422
  case "RIGHT":
294
423
  move(name);
295
424
  return;
296
- case "A": {
425
+ case "DIAMOND_DOWN": {
297
426
  const el = top().current;
298
427
  // Re-validate against the live list, exactly like move() does: focus can go stale across a
299
428
  // re-render (the remembered element removed, disabled, or hidden), and activating a detached
@@ -312,12 +441,16 @@ export function createSpatialNav(opts = {}) {
312
441
  el.click();
313
442
  return;
314
443
  }
315
- case "B":
316
- case "Z":
444
+ // Back is DIAMOND_RIGHT alone. This used to accept the bottom button too, which is no longer
445
+ // possible: the bottom button is now CONFIRM on every console layout (see the case above), so
446
+ // keeping it as a back alias would make one press mean both things.
447
+ case "DIAMOND_RIGHT":
317
448
  back();
318
449
  return;
319
450
  default:
320
- return; // Y / LT / RT carry no nav meaning
451
+ // DIAMOND_UP/DIAMOND_LEFT, LT/RT, the R* right-stick directions and the stick clicks carry
452
+ // no nav meaning — menus move on the D-pad / left stick, so the right stick stays the game's.
453
+ return;
321
454
  }
322
455
  },
323
456
  focusFirst() {
@@ -356,6 +489,10 @@ export function createSpatialNav(opts = {}) {
356
489
  top().current?.removeAttribute("nav-focused");
357
490
  resetLane();
358
491
  stack.push({ root, current: null });
492
+ slot = null;
493
+ lastEmit = { el: null, sig: "" };
494
+ observeFocused(null);
495
+ observeScope(); // re-target the mutation/transition watchers at the new scope root
359
496
  },
360
497
  popScreen() {
361
498
  if (stack.length <= 1)
@@ -363,12 +500,30 @@ export function createSpatialNav(opts = {}) {
363
500
  top().current?.removeAttribute("nav-focused");
364
501
  resetLane();
365
502
  stack.pop();
366
- top().current?.setAttribute("nav-focused", ""); // restore the ring on the scope we returned to
367
- opts.onFocusChange?.(top().current);
503
+ const restored = top().current;
504
+ restored?.setAttribute("nav-focused", ""); // restore the ring on the scope we returned to
505
+ observeScope();
506
+ observeFocused(restored);
507
+ if (restored)
508
+ captureSlot(restored);
509
+ else
510
+ slot = null;
511
+ emitFocus(restored);
512
+ },
513
+ revalidate() {
514
+ reconcile();
368
515
  },
369
516
  dispose() {
370
517
  unsub?.();
371
518
  disposePointer();
519
+ mo?.disconnect();
520
+ ro?.disconnect();
521
+ if (transitionTarget)
522
+ transitionTarget.removeEventListener("transitionend", onTransitionEnd);
523
+ transitionTarget = null;
524
+ if (rafId != null && typeof cancelAnimationFrame !== "undefined")
525
+ cancelAnimationFrame(rafId);
526
+ rafId = null;
372
527
  for (const s of stack)
373
528
  s.current?.removeAttribute("nav-focused");
374
529
  },
@@ -399,6 +554,16 @@ export function createSpatialNav(opts = {}) {
399
554
  pointerRoot?.addEventListener("pointermove", onPointerMove);
400
555
  disposePointer = () => pointerRoot?.removeEventListener("pointermove", onPointerMove);
401
556
  }
557
+ // Start the focus-reconciliation watchers (see `reconcileFocus`). One MutationObserver on the active
558
+ // scope catches focused-node replacement/removal; one ResizeObserver on the focused element (plus the
559
+ // bubbling `transitionend` on the scope) catches it moving/resizing — both funnel through the rAF-
560
+ // coalesced `reconcile`, so `onFocusChange` stays true to the live DOM without the consumer polling.
561
+ if (reconcileEnabled) {
562
+ mo = new MutationObserver(scheduleReconcile);
563
+ if (typeof ResizeObserver !== "undefined")
564
+ ro = new ResizeObserver(scheduleReconcile);
565
+ observeScope();
566
+ }
402
567
  return api;
403
568
  }
404
569
  //# sourceMappingURL=spatial-nav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-nav.js","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spatial-nav.js","sourceRoot":"","sources":["../../src/nav/spatial-nav.ts"],"names":[],"mappings":"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"}
@@ -74,14 +74,6 @@ export interface ScoreSubmission {
74
74
  * (no client aggregation). Additive — omit for a plain submission; older shells ignore it.
75
75
  */
76
76
  rollups?: Record<string, string>;
77
- /**
78
- * Opaque human label for the board this score belongs to — e.g. `"Silverstone GP · 3 laps"`
79
- * or `"Through the Fire and Flames · Expert"`. The **game** composes it, because only the game
80
- * can turn its private board `key` into words. The platform stores it verbatim and echoes it on
81
- * the leaderboard hub and in WR/PB team notifications — it never parses it. Additive: omit for an
82
- * unlabeled board; older shells ignore it, and the newest wins (last submission relabels the board).
83
- */
84
- displayText?: string;
85
77
  }
86
78
  /** Result of one score submission — drives a post-game "you placed #N (new PB!)" screen. */
87
79
  export interface SubmitScoreResult {
@@ -1 +1 @@
1
- {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,OAAO,GACP,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB;qFACiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iEAAiE;IACjE,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjF"}
1
+ {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,OAAO,GACP,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,OAAO,CAAC;AAEZ,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB;qFACiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;0FAC0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iEAAiE;IACjE,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjF"}
@@ -1 +1 @@
1
- {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA4HH,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,SAAyB,EAAE,KAAa;IACvE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,KAAK,IAAI,IAAI;gBAClB,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACnC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAU,EAAE,OAAgB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACxD,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACpF,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/protocol/boards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoHH,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,SAAyB,EAAE,KAAa;IACvE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,KAAK,IAAI,IAAI;gBAClB,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACnC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAU,EAAE,OAAgB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAElC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;YACxD,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACpF,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC"}
@@ -21,21 +21,42 @@
21
21
  * Delete) is the correct desktop UX. *Gameplay never listens to the keyboard directly.*
22
22
  * ──────────────────────────────────────────────────────────────────────────────────────────────
23
23
  *
24
- * - **Directions** — `UP`/`DOWN`/`LEFT`/`RIGHT` (the D-pad / arrow keys).
25
- * - **Face buttons** `A`/`B`/`Y`/`Z`, the four buttons on the controller (Zwift Play layout:
26
- * A right, B bottom, Y top, Z left). They carry no built-in meaning each game assigns its
27
- * own but the platform **house convention** is `A` = **confirm / primary action** and `Z` =
28
- * **back / cancel**, with `B`/`Y` as contextual extras. Follow it so confirm/back stay
29
- * consistent across the library, and show the actual button glyph (A/B/Y/Z, by colour) in
30
- * on-screen prompts rather than a generic label.
24
+ * - **Directions** — `UP`/`DOWN`/`LEFT`/`RIGHT`: the D-pad / arrow keys, **and** the LEFT stick once it
25
+ * deflects past the platform's deadzone. One name per direction whichever produced it a held
26
+ * direction stays held until *every* source lets go so a game that only needs "move" reads these
27
+ * four and works on every device.
28
+ * - **Right-stick directions** `RUP`/`RDOWN`/`RLEFT`/`RRIGHT`: the same four edges for the RIGHT stick,
29
+ * fired once it deflects past the platform's deadzone. Kept separate from the D-pad's so a dual-stick
30
+ * game can tell *move* (`LEFT`/`RIGHT`…) from *aim* (`RLEFT`/`RRIGHT`…) without touching the analog
31
+ * API. Most devices have no second stick — never gate a required flow behind them.
32
+ * - **Face buttons** — `DIAMOND_UP`/`DIAMOND_DOWN`/`DIAMOND_LEFT`/`DIAMOND_RIGHT`, the four buttons of
33
+ * the face diamond, named by their **position on the pad** and never by a letter. No letter is right
34
+ * for everyone: the bottom button is printed `A` on an Xbox pad, `✕` on a DualSense and `B` on a
35
+ * Switch Pro, so a contract that said "A" would be lying to two riders out of three. Position is the
36
+ * one thing every controller agrees on.
37
+ *
38
+ * They carry no built-in meaning — each game assigns its own — but the platform **house convention**
39
+ * is `DIAMOND_DOWN` = **confirm / primary action** and `DIAMOND_RIGHT` = **back / cancel**, matching
40
+ * Xbox, PlayStation and Nintendo (all of which confirm on the bottom button), with `DIAMOND_UP` and
41
+ * `DIAMOND_LEFT` as contextual extras. Follow it so confirm/back stay consistent across the library.
42
+ *
43
+ * **RULE: never hardcode a button letter in on-screen text.** Ask for the label of the pad the rider
44
+ * is actually holding — `session.buttonLabel("DIAMOND_DOWN")` gives `"A"`, `"✕"` or `"B"` as
45
+ * appropriate — or use a keycap from `@rydr/game-sdk/ui`, which resolves it for you. See
46
+ * {@link GlyphSet}.
31
47
  * - **Shoulder triggers** — `LT`/`RT`, the left/right triggers. Like the face buttons they carry
32
48
  * no built-in meaning; treat them as extra contextual inputs (e.g. secondary fire, boost, lean).
33
49
  * Not every controller exposes them, so never gate a required flow behind `LT`/`RT` alone.
50
+ * - **Stick presses** — `LSTICK_PRESS`/`RSTICK_PRESS`, emitted when a joystick is clicked straight down.
51
+ * Like the triggers they carry no built-in meaning (crouch, recentre the camera, sprint) and most
52
+ * controllers can't produce them at all, so use them only as a shortcut for something already
53
+ * reachable another way.
34
54
  *
35
- * Devices with fewer than four face buttons (e.g. a phone) expose at least the `A`/`Z`
36
- * confirm/back pair — don't require `B`/`Y` for a flow that must work on every input.
55
+ * Devices with fewer than four face buttons (e.g. a phone) expose at least the
56
+ * `DIAMOND_DOWN`/`DIAMOND_RIGHT` confirm/back pair — don't require `DIAMOND_UP`/`DIAMOND_LEFT`,
57
+ * `LT`/`RT`, the right-stick `R*` directions, or a stick press for a flow that must work on every input.
37
58
  */
38
- export type ButtonName = "UP" | "DOWN" | "LEFT" | "RIGHT" | "A" | "B" | "Y" | "Z" | "LT" | "RT";
59
+ export type ButtonName = "UP" | "DOWN" | "LEFT" | "RIGHT" | "RUP" | "RDOWN" | "RLEFT" | "RRIGHT" | "DIAMOND_UP" | "DIAMOND_DOWN" | "DIAMOND_LEFT" | "DIAMOND_RIGHT" | "LT" | "RT" | "LSTICK_PRESS" | "RSTICK_PRESS";
39
60
  /** Press = "down", release = "up". A held button emits one of each. */
40
61
  export type ButtonEdge = "down" | "up";
41
62
  /**
@@ -62,8 +83,11 @@ export type ButtonEdge = "down" | "up";
62
83
  * - **Sticks** — `LX`/`LY` (left stick) and `RX`/`RY` (right stick), each `-1..1` with the convention
63
84
  * **right = +1, up = +1**, centre = 0. Values arrive *raw* (calibrated but not deadzoned); apply your
64
85
  * own deadzone, or read {@link StickName} via `session.stick(...)` which does it for you (radially).
65
- * Stick deflection past the platform's deadzone is also surfaced as `UP`/`DOWN`/`LEFT`/`RIGHT`
66
- * digital edges, so `session.isDown("LEFT")` keeps working on an analog stick.
86
+ * Stick deflection past the platform's deadzone is ALSO surfaced as digital {@link ButtonName} edges:
87
+ * the LEFT stick as `UP`/`DOWN`/`LEFT`/`RIGHT` (shared with the D-pad, so `session.isDown("LEFT")`
88
+ * keeps working on an analog stick — and a direction held by both the stick and the D-pad emits one
89
+ * `down` and one `up`, not two), and the RIGHT stick as its own `RUP`/`RDOWN`/`RLEFT`/`RRIGHT`.
90
+ * Clicking a stick straight down is a button too (`LSTICK_PRESS`/`RSTICK_PRESS`), never an axis.
67
91
  *
68
92
  * Not every controller exposes analog — never *require* an axis for a flow that must work everywhere;
69
93
  * fall back to the digital button, which always exists.
@@ -75,6 +99,10 @@ export type AxisName = "LT" | "RT" | "LX" | "LY" | "RX" | "RY";
75
99
  *
76
100
  * `"LSTICK"` reads `LX`/`LY`, `"RSTICK"` reads `RX`/`RY`. Deliberately NOT `LEFT`/`RIGHT`, which are
77
101
  * the D-pad {@link ButtonName} directions.
102
+ *
103
+ * Pressing a stick *down* is not part of this vector — it's a {@link ButtonName} (`LSTICK_PRESS` /
104
+ * `RSTICK_PRESS`) on the ordinary edge stream, as are the right stick's digital directions
105
+ * (`RUP`/`RDOWN`/`RLEFT`/`RRIGHT`).
78
106
  */
79
107
  export type StickName = "LSTICK" | "RSTICK";
80
108
  /**
@@ -86,11 +114,17 @@ export type StickName = "LSTICK" | "RSTICK";
86
114
  * therefore never sees the event — see `connectToPlatform`). Defining it once here means the two
87
115
  * capture sites can never drift.
88
116
  *
89
- * Layout: arrows → D-pad; Space/Enter → `A` (confirm); Escape/Backspace → `Z` (back); the
90
- * face-button diamond on the keyboard `z`=Y (top), `q`=Z (left), `d`=A (right), `s`=B (bottom);
91
- * and the triggers on the keys flanking that diamond — `a`=LT (left of it), `e`=RT (upper-right).
117
+ * Layout: arrows → D-pad / left stick; Space/Enter → `DIAMOND_DOWN` (confirm); Escape/Backspace →
118
+ * `DIAMOND_RIGHT` (back); the face diamond mirrored onto the AZERTY `z`/`q`/`s`/`d` cluster, key
119
+ * position matching button position — `z`=up, `q`=left, `s`=down, `d`=right;
120
+ * the triggers on the keys flanking that diamond — `a`=LT (left of it), `e`=RT (upper-right); the RIGHT
121
+ * stick mirrored onto the `i`/`j`/`k`/`l` cluster — `i`=RUP, `j`=RLEFT, `k`=RDOWN, `l`=RRIGHT; and the two
122
+ * joystick clicks on a key beside each cluster — `f`=LSTICK_PRESS, `o`=RSTICK_PRESS.
92
123
  * Upper-case is duplicated so Shift / caps-lock still register.
93
124
  *
125
+ * The right-stick keys drive the `RX`/`RY` {@link AxisName}s as well as these edges (see
126
+ * `syncKeyboardAxes` in `PlatformClient`), so `session.stick("RSTICK")` works on a keyboard too.
127
+ *
94
128
  * NOT in this map: the shell-owned rider keys — `T`/`G` (master volume up/down), `W`/`X` (trainer
95
129
  * resistance −/+), and `M` (toggle the in-game platform menu). Those are not game buttons; the SDK
96
130
  * client handles them directly (see `PlatformClient` keyboard capture) and forwards each as its own
@@ -1 +1 @@
1
- {"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/protocol/buttons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,UAAU,GAClB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GAGP,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GAEH,IAAI,GACJ,IAAI,CAAC;AAET,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,IAAI,GAEJ,IAAI,GACJ,IAAI,GAEJ,IAAI,GACJ,IAAI,CAAC;AAET;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAwB9D,CAAC"}
1
+ {"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/protocol/buttons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,MAAM,UAAU,GAElB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GAGP,KAAK,GACL,OAAO,GACP,OAAO,GACP,QAAQ,GAIR,YAAY,GACZ,cAAc,GACd,cAAc,GACd,eAAe,GAEf,IAAI,GACJ,IAAI,GAEJ,cAAc,GACd,cAAc,CAAC;AAEnB,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,IAAI,GAEJ,IAAI,GACJ,IAAI,GAEJ,IAAI,GACJ,IAAI,CAAC;AAET;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAwC9D,CAAC"}
@@ -7,11 +7,17 @@
7
7
  * therefore never sees the event — see `connectToPlatform`). Defining it once here means the two
8
8
  * capture sites can never drift.
9
9
  *
10
- * Layout: arrows → D-pad; Space/Enter → `A` (confirm); Escape/Backspace → `Z` (back); the
11
- * face-button diamond on the keyboard `z`=Y (top), `q`=Z (left), `d`=A (right), `s`=B (bottom);
12
- * and the triggers on the keys flanking that diamond — `a`=LT (left of it), `e`=RT (upper-right).
10
+ * Layout: arrows → D-pad / left stick; Space/Enter → `DIAMOND_DOWN` (confirm); Escape/Backspace →
11
+ * `DIAMOND_RIGHT` (back); the face diamond mirrored onto the AZERTY `z`/`q`/`s`/`d` cluster, key
12
+ * position matching button position — `z`=up, `q`=left, `s`=down, `d`=right;
13
+ * the triggers on the keys flanking that diamond — `a`=LT (left of it), `e`=RT (upper-right); the RIGHT
14
+ * stick mirrored onto the `i`/`j`/`k`/`l` cluster — `i`=RUP, `j`=RLEFT, `k`=RDOWN, `l`=RRIGHT; and the two
15
+ * joystick clicks on a key beside each cluster — `f`=LSTICK_PRESS, `o`=RSTICK_PRESS.
13
16
  * Upper-case is duplicated so Shift / caps-lock still register.
14
17
  *
18
+ * The right-stick keys drive the `RX`/`RY` {@link AxisName}s as well as these edges (see
19
+ * `syncKeyboardAxes` in `PlatformClient`), so `session.stick("RSTICK")` works on a keyboard too.
20
+ *
15
21
  * NOT in this map: the shell-owned rider keys — `T`/`G` (master volume up/down), `W`/`X` (trainer
16
22
  * resistance −/+), and `M` (toggle the in-game platform menu). Those are not game buttons; the SDK
17
23
  * client handles them directly (see `PlatformClient` keyboard capture) and forwards each as its own
@@ -23,24 +29,40 @@ export const KEY_TO_BUTTON = {
23
29
  ArrowDown: "DOWN",
24
30
  ArrowLeft: "LEFT",
25
31
  ArrowRight: "RIGHT",
26
- // Confirm / back ergonomic aliases.
27
- " ": "A",
28
- Enter: "A",
29
- Escape: "Z",
30
- Backspace: "Z",
31
- // Face-button diamond: top=Y, left=Z, right=A, bottom=B. Upper-case covers Shift/caps.
32
- z: "Y",
33
- Z: "Y",
34
- q: "Z",
35
- Q: "Z",
36
- d: "A",
37
- D: "A",
38
- s: "B",
39
- S: "B",
32
+ // Confirm / back ergonomic aliases, following the house convention.
33
+ " ": "DIAMOND_DOWN",
34
+ Enter: "DIAMOND_DOWN",
35
+ Escape: "DIAMOND_RIGHT",
36
+ Backspace: "DIAMOND_RIGHT",
37
+ // Face diamond on the AZERTY z/q/s/d cluster key position mirrors button position.
38
+ // Upper-case covers Shift/caps.
39
+ z: "DIAMOND_UP",
40
+ Z: "DIAMOND_UP",
41
+ q: "DIAMOND_LEFT",
42
+ Q: "DIAMOND_LEFT",
43
+ d: "DIAMOND_RIGHT",
44
+ D: "DIAMOND_RIGHT",
45
+ s: "DIAMOND_DOWN",
46
+ S: "DIAMOND_DOWN",
40
47
  // Shoulder triggers flanking the diamond: left=LT, right=RT.
41
48
  a: "LT",
42
49
  A: "LT",
43
50
  e: "RT",
44
51
  E: "RT",
52
+ // Right stick mirrored onto the i/j/k/l cluster: i=up, j=left, k=down, l=right. These also drive the
53
+ // RX/RY axes in the client's keyboard emulation, so `stick("RSTICK")` works without a controller.
54
+ i: "RUP",
55
+ I: "RUP",
56
+ j: "RLEFT",
57
+ J: "RLEFT",
58
+ k: "RDOWN",
59
+ K: "RDOWN",
60
+ l: "RRIGHT",
61
+ L: "RRIGHT",
62
+ // Joystick clicks: `f` beside the left cluster (ZQSD/arrows), `o` beside the right one (ijkl).
63
+ f: "LSTICK_PRESS",
64
+ F: "LSTICK_PRESS",
65
+ o: "RSTICK_PRESS",
66
+ O: "RSTICK_PRESS",
45
67
  };
46
68
  //# sourceMappingURL=buttons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../src/protocol/buttons.ts"],"names":[],"mappings":"AAwGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyC;IACjE,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,OAAO;IACnB,oCAAoC;IACpC,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,GAAG;IACd,uFAAuF;IACvF,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,6DAA6D;IAC7D,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;CACR,CAAC"}
1
+ {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../src/protocol/buttons.ts"],"names":[],"mappings":"AA+IA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyC;IACjE,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,OAAO;IACnB,oEAAoE;IACpE,GAAG,EAAE,cAAc;IACnB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,eAAe;IACvB,SAAS,EAAE,eAAe;IAC1B,qFAAqF;IACrF,gCAAgC;IAChC,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,cAAc;IACjB,6DAA6D;IAC7D,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,qGAAqG;IACrG,kGAAkG;IAClG,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,QAAQ;IACX,+FAA+F;IAC/F,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,cAAc;CAClB,CAAC"}