@diffenderfer-games/hub 2.0.0-next.2 → 2.0.0-next.4

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 (49) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/auto.d.ts +3 -3
  3. package/dist/auto.js +3 -3
  4. package/dist/doctor/cli.mjs +1 -1
  5. package/dist/index.d.ts +3 -3
  6. package/dist/index.js +3 -3
  7. package/dist/input.d.ts +2 -2
  8. package/dist/input.js +2 -2
  9. package/dist/rooms.js +1 -1
  10. package/dist/shared/client-version.gen.js +1 -1
  11. package/dist/shared/daily.d.ts +13 -4
  12. package/dist/shared/daily.d.ts.map +1 -1
  13. package/dist/shared/daily.js +15 -6
  14. package/dist/shared/daily.js.map +1 -1
  15. package/dist/shared/index.d.ts +204 -4
  16. package/dist/shared/index.d.ts.map +1 -1
  17. package/dist/shared/input.d.ts +47 -5
  18. package/dist/shared/input.d.ts.map +1 -1
  19. package/dist/shared/input.js +132 -21
  20. package/dist/shared/input.js.map +1 -1
  21. package/dist/shared/rooms.d.ts.map +1 -1
  22. package/dist/shared/rooms.js +12 -1
  23. package/dist/shared/rooms.js.map +1 -1
  24. package/dist/shared/src.js +531 -8
  25. package/dist/shared/src.js.map +1 -1
  26. package/package.json +2 -2
  27. package/src/core/connection.ts +5 -0
  28. package/src/core/hub.ts +55 -4
  29. package/src/core/offline/hub-kinds/index.ts +6 -0
  30. package/src/core/offline/hub-kinds/resume-kind.ts +108 -0
  31. package/src/core/page.ts +10 -0
  32. package/src/core/rest/routes.gen.ts +4 -0
  33. package/src/core/resume/hub-resume.ts +252 -0
  34. package/src/core/resume/local-resume.ts +130 -0
  35. package/src/core/resume/resume-list.ts +65 -0
  36. package/src/core/resume/resume-request.ts +52 -0
  37. package/src/core/resume/resume-types.ts +64 -0
  38. package/src/core/version/client-version.gen.ts +1 -1
  39. package/src/daily/daily-system.ts +14 -5
  40. package/src/index.ts +3 -1
  41. package/src/input/focus-ring.ts +13 -0
  42. package/src/input/input-system.ts +4 -0
  43. package/src/input/modality.ts +122 -0
  44. package/src/input/nav-state.ts +13 -4
  45. package/src/input/zero-config.ts +1 -14
  46. package/src/input.ts +3 -0
  47. package/src/overlay/overlay.ts +5 -3
  48. package/src/overlay/styles.ts +4 -3
  49. package/src/realtime/rooms-forwarder.ts +14 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["GameInfo","ContractGameInfo","GameInfo","presence","social","mp","rooms","notify","race"],"sources":["../../src/core/storage/key-value.ts","../../src/core/game-data.ts","../../src/core/rest/endpoint-types.ts","../../src/core/types.ts","../../src/core/offline/events.ts","../../src/core/offline/queue.ts","../../src/core/offline/local-store.ts","../../src/core/rest/rest-client.ts","../../src/core/offline/outbox-entry.ts","../../src/core/offline/outbox-kinds.ts","../../src/core/offline/outbox-store.ts","../../src/core/offline/outbox-replayer.ts","../../src/core/offline/outbox.ts","../../src/core/offline/offline-api.ts","../../src/core/connection.ts","../../src/core/hub-progress.ts","../../src/core/hub-economy.ts","../../src/core/menu-control.ts","../../src/core/version/hub-version.ts","../../src/core/hub.ts","../../src/core/errors.ts","../../src/core/version/client-version.gen.ts"],"mappings":";;;;;;;;;;;;;;;;UAQiB;;EAEf,KAAK;;EAEL,MAAM,aAAa;;EAEnB,OAAO;;EAEP;;;;;KCLU;;;;KCFA,qBAAqB;;KAGrB,eAAe,UAAU,gBAAgB,WAAW,gBAAgB;;;;;KAM3E,UAAU,SAAS;WAAyB;WAAyB,YAAY;IAAS,OAAO;;KAG1F,cAAc,UAAU,gBAAgB,UAAU,QAAQ,WAAW,gBAAgB;;;;KCNrF,OAAO,KAAK,kCAAkC,QAAQ,KAAK;;UAGtD;;WAEN;;WAEA;;;UAIM;;WAEN,MAAM;;WAEN,UAAU;;;UAIJ,QAAQ,QAAQ;;WAEtB;;WAEA;;WAEA,MAAM;;WAEN;;;UAIM;;WAEN;;WAEA;;WAEA;;;UAIM,KAAK,QAAQ,cAAc;;WAEjC,MAAM;;;UAIA,mBAAmB,cAAc,cAAc;;WAErD;;WAEA,OAAO;;WAEP,OAAO;;;UAID;;WAEN,OAAO;;WAEP;;WAEA;;;KAIC,oBAAoB;;KAGpB,eAAe;;KAGf,gBAAgB;;UAGX;;WAEN,QAAQ;;WAER,QAAQ;aAAqB;aAAuB;;;;KAInDA,aAAWC;;KAGX,mBAAmB;;KAGnB,oBAAoB;;UAGf;;WAEN;;WAEA;;WAEA;;;UAIM;;WAEN;;WAEA;;WAEA,eAAe;;;;;;;;WAQf;;;;;UCzHM;;WAEN;;WAEA;;;;;UCJM;;WAEN;;WAEA,OAAO;;WAEP,OAAO;;;UAID;;EAEf;;EAEA,OAAO;;;UAIC;;WAEC;;WAEA;;;KAIC;WACG;WAA0B;WAAuB,MAAM;WAAe;;WACtE;WAA6B;;WAC7B;WAA0B;WAAsB;;WAChD;WAA0B;WAAsB;;WAChD;WAA2B;WAAsB;;WACjD;WAA8B;WAAsB;WAAwB,MAAM;;WAClF;WAA6B,OAAO;;;KAGvC,UAAU,eAAe;;;;UC3BpB;;WAEN,OAAO;;WAEP;;;KAIC;;cAyDC;mBACM;mBACA;;EAGL,YAAA,cAAc,QAAO;UAMzB;UAMA;;EAKR,WAAW;;EAKX,QAAQ,MAAM;;EAKd;;EAKA,cAAc;;EAKd,WAAW,cAAc,4BAA4B,aAAa,OAAO;;EAOzE,aAAa;;EAWb,QAAQ,eAAe;;EAKvB,QAAQ,cAAc,UAAU,MAAM;;EAOtC,WAAW;;EAKX,YAAY;;EAMZ,WAAW,aAAa,gBAAgB,MAAM;;EAS9C,cAAc;;EAUd,SAAS,cAAc;;EAKvB,YAAY,aAAa,eAAe,SAAS,qBAAqB;;EAUtE,mBAAmB;;EAOnB,gBAAgB;;EAKhB,aAAa,WAAW,YAAY;;EAMpC,aAAa;;EAKb,UAAU,iBAAiB;;EAK3B,YAAY;;EAKZ,QAAQ,UAAU;;;;;cC7NP;;KAgBD,cAAc,UAAU,gBAAgB,QAAQ,eAAe,YAAY,eAAe,MACjG,SAAS,eAAe,OACxB,QAAQ,eAAe;;UAGX;;WAEN;;EAET,KAAK,UAAU,cAAc,MAAM,MAAM,gBAAgB,cAAc,KAAK,QAAQ,cAAc;;;;;;EAMlG,SAAS,UAAU,cAAc,eAAe,MAAM,MAAM,gBAAgB,cAAc,KAAK,QAAQ,cAAc;;;;;UCnCtG;;WAEN;;WAEA;;WAEA,SAAS;;WAET;;WAEA;;WAEA;;WAEA;;;;;UCdM;;WAEN;;WAEA;;WAEA;;;;;;;;EAQT,KAAK,UAAU,cAAc,MAAM,MAAM,gBAAgB,cAAc,KAAK,QAAQ,cAAc;;EAElG,IAAI;;;KAIM,eAAe,YAAY,SAAS,SAAS,SAAS,kBAAkB,QAAQ,oBAAoB;;UAG/F,sBAAsB;;WAE5B,KAAK,eAAe;;;;;WAKpB,YAAY,SAAS;;;;;WAKrB,SAAS,SAAS,SAAS,UAAU,YAAY;;WAEjD;;;UAIM;;WAEN,MAAM,SAAS,MAAM,SAAS,kBAAkB,QAAQ,oBAAoB;;WAE5E,UAAU,SAAS;WACnB,YAAY,SAAS;WACrB,SAAS,SAAS,MAAM,UAAU,SAAS;WAC3C;;;cAOE;mBACM;;EAGjB,SAAS,cAAc,YAAY;;EAKnC,IAAI,eAAe;;;;;cC/DR;;cAGA;;cAGA;;WAEF;mBACQ;;EAGL,YAAA,cAAc,OAAO;;EAMjC,QAAQ;;EAeR;;EAKA,IAAI,aAAa;;EAMjB,KAAK;;EAUL,IAAI,OAAO;;EAOX,OAAO;;EAKP,KAAK;UAIG;;;;;UChEO;;WAEN,OAAO;;WAEP;;;KAIC;;UAGK;;WAEN,UAAU;;WAEV,QAAQ;;WAER,YAAY;;;;;KCdX,YAAY;;UAGP;;EAEf;aAAmB,IAAI;;;EAEvB;aAAqB,IAAI;aAAoB,SAAS;;;EAEtD;aAAmB,IAAI;aAAoB;;;;KAIjC,yBAAyB;;KAGzB,gBAAgB,aAAa,qBAAqB,QAAQ,oBAAoB;;cAG7E;;UAMI;;WAEN;;WAEA,OAAO;;WAEP,MAAM;;WAEN,OAAO,cAAc,QAAQ,oBAAoB;;WAEjD;;WAEA;;WAEA;WACA;;;cAIE;;WAEF,OAAK;;WAEL,SAAS;mBACD;mBACA;mBACA;UACT;UACA;UACA;mBACS;;EAKL,YAAA,SAAS;;EAwBrB,OAAO,cAAc,YAAY;;EAKjC,MAAM,cAAc,SAAS,OAAO;;;;;;EAWpC,IAAI,IAAI;;EAkBF,OAAO,IAAI,cAAc,QAAQ;;EASjC,OAAO,oBAAkB,QAAQ;;EAYvC,WAAW;;EAKX;;EAKA,GAAG,aAAa,kBAAkB,MAAM,MAAM,UAAU,gBAAgB;UAQhE;UAYA;UAgBA;UAcA;;;;;UC9MO;;WAEN,QAAQ;;EAEjB;;;cAIW;mBACM;;EAGL,YAAA,MAAM;;;;;;EASlB,OAAO,gBAAgB,aAAa,cAAc,YAAY,eAAe,WAAW,sBAAsB;;;;;;;EAc9G,QAAQ,cAAc,SAAS,cAAc;;EAQ7C,WAAW;;EAKX,GAAG,aAAa,kBAAkB,MAAM,MAAM,UAAU,gBAAgB;;;;;UCvCzD;;WAEN,IAAI;;WAEJ;;;UAIM;;WAEN;;WAEA,WAAW;;;UAaL;;WAEN;;;cAIE;;WAEF;;WAEA;;qBAEU,MAAM;;qBAEN,OAAO;;qBAEP,QAAQ;mBACV;UACT;UACA;UACA;UACA;UACA;UACA;UACA;mBACS;;EAGL,YAAA,UAAS;;MA4CjB;;MAKA;;;;;MAQA,WAAW;;EAaf;;EAKA,SAAS,WAAW,QAAQ;;YAQlB;;YAaA,aAAa;;YAcb,cAAc;;;;;;YAYR,aAAa,OAAO,mBAAmB,QAAQ,QAAQ,qBAAqB,QAAQ,QAAQ;;;;;;;;;;YAwB5F,cAAc,OAAO,cAAc,SAAS,MAAM,mBAAmB,OAAO,eAAe,QAAQ,qBAAqB,oBAAoB,QAAQ;;;;;;EAkCpK,QAAQ,QAAQ;;UAKR;;;;;;UAUA;UAkBA;UAUM;;UAgBA;;UAgBN;;UAiBA;;;;;;EAwBF,YAAY,qBAAmB,QAAQ;;;;;UCtW9B;;WAEN,MAAM;;;UAIA;;WAEN;;WAEA;;;UAIM,cAAc,cAAc,cAAc;;WAEhD;;WAEA,OAAO;;;cAcL,oBAAoB;;EAE/B,MAAM,QAAQ;;;;;;EAYd,eAAe,QAAQ;;;;;;EAiBvB,MAAM,kBAAkB,mBAAmB,QAAQ;;EAKnD,OAAO,kBAAkB,mBAAmB,QAAQ;;EAKpD,MAAM,kBAAkB,mBAAmB,QAAQ;;EAKnD,UAAU;IAAU;;UAOZ;;EAMR,WAAW,QAAQ,SAAS;IAAU,SAAS,QAAQ;;;EAQvD,WAAW,cAAc,cAAc,MAAM,OAAO,cAAc,SAAS;IAAU,SAAS,QAAQ;;;EAYtG,aAAa;IAAU,OAAO;;;EAK9B,QAAQ,QAAQ,MAAM,eAAe;IAAU,MAAM,KAAK;;;EAS1D,QAAQ,cAAc,cAAc,MAAM,cAAc,UAAU,OAAO,iBAAiB;IAAU;IAAU;;;EAM9G,WAAW,eAAe;IAAU;;;EAQpC,SAAS,kBAAkB;IAAU,OAAO;;;EAQ5C,QAAQ,aAAa,gBAAgB,QAAQ;;EAK7C,SAAS,aAAa,kBAAa,QAAQ;;EAK3C,QAAQ,aAAa,gBAAgB,QAAQ;;EAK7C,YAAY,cAAc,cAAc,MAAM,kBAAkB,eAAe,OAAM,mBAAmB,SAAc,QAAQ;;EAU9H,eAAe,kBAAkB,iBAAa,QAAQ;;EAYtD,oBAAoB;IAAU,QAAQ;;;;;;KCpL5B,cAAc,KAAK;;KAGnB,cAAc;;KAGd;;UAGK;;WAEN;;;KAgBC,mBAAmB,KAAK;;cAGvB,mBAAmB;;EAE9B,cAAc;;EAKd,aAAa;;EAKP,MAAM,eAAe;;EAoB3B,aAAa,QAAQ;;EAKrB,mBAAmB,QAAQ;;EAK3B,aAAa;IAAU,OAAOC;;;EAK9B,gBAAgB,eAAU,QAAQ;;;;;EAQlC,aAAa;IAAU;;;EASvB,YAAY,cAAc,gBAAgB;IAAU;;;EAUpD,UAAU,mBAAmB,QAAQ;;EAQrC,gBAAgB,QAAQ;;EAKxB,gBAAgB,iBAAiB,QAAQ;;;;;EAQzC,MAAM,QAAQ,cAAc,QAAQ;;;;;;EAUpC,SAAS,OAAO,aAAa,OAAO,cAAc,QAAQ;;EAe1D,KAAK,OAAO,wBAAwB,gBAAgB,QAAQ;;EAK5D,IAAI,eAAe,OAAO,yBAAyB,QAAQ;;EAK3D,aAAa;IAAU;;;EAKvB,eAAe,QAAQ;;EAKvB,WAAW,OAAM,mBAAwB,QAAQ;;EAKjD,YAAY,yBAAyB,OAAO,aAAa,OAAO,aAAa,OAAM,mBAAwB,QAAQ;;EAKnH,YAAY,IAAI,UAAU,QAAQ;;EAKlC,aAAa,IAAI,UAAU,QAAQ;;EAKnC,YAAY,IAAI,UAAU,QAAQ;;EAKlC,aAAa,IAAI,SAAS,OAAO,aAAa,OAAO,aAAa,OAAM,mBAAwB,QAAQ;;;;QCvMlG;YACI;;IAER;;;;UAKa;;;;;;;;EAQf,WAAW;;EAEX;;EAEA;;WAES;;;;;KCvBC;;;;;;;;;;;;cCaC,YAAY;;WAEd;;;;;EAMT,cAAc,QAAQ;;EAKhB,iBAAiB,QAAQ;;;;;;MAS3B,SAAS;;MAUT,WAAW,kBAAkB;;MAK7B,QAAQ;;;;;;MASR,SAAS;;MAKT,mBAAmBC;;MAKnB,iBAAiBC;;MAKjB,aAAaC;;MAKb,gBAAgBC;;MAKhB,iBAAiBC;;MAKjB,eAAeC;;UAKX;;;cAqBG,KAAK;;iBAGF,UAAU,UAAS,aAAkB;;;;;;;cCtHxC;;cAGA;;;;;;KAOD,eAAe,mBAAmB,4BAA4B,yBAAyB;;UAGlF;;WAEN,OAAO;;WAEP,SAAS,yBAAyB;;WAElC;;WAEA;;WAEA;;;;;;;;cASE,iBAAiB;;WAEnB;;WAEA,MAAM;;WAEN;;WAEA;;WAEA;;WAEA;;EAGG,YAAA,iBAAiB,iBAAiB,UAAS;;MAYnD;;;cAMO,qBAAqB;;EAEpB,YAAA;;;;;;;cAWD,6BAA6B;;EAE5B,YAAA,iBAAiB,4BAA4B,SAAS;;;;;cC1FvD"}
1
+ {"version":3,"file":"index.d.ts","names":["GameInfo","ContractGameInfo","GameInfo","presence","social","mp","rooms","notify","race"],"sources":["../../src/core/storage/key-value.ts","../../src/core/game-data.ts","../../src/core/rest/endpoint-types.ts","../../src/core/types.ts","../../src/core/offline/events.ts","../../src/core/offline/queue.ts","../../src/core/offline/local-store.ts","../../src/core/rest/rest-client.ts","../../src/core/offline/outbox-entry.ts","../../src/core/offline/outbox-kinds.ts","../../src/core/offline/outbox-store.ts","../../src/core/offline/outbox-replayer.ts","../../src/core/offline/outbox.ts","../../src/core/offline/offline-api.ts","../../src/core/resume/local-resume.ts","../../src/core/connection.ts","../../src/core/hub-progress.ts","../../src/core/hub-economy.ts","../../src/core/menu-control.ts","../../src/core/offline/hub-kinds/resume-kind.ts","../../src/core/resume/resume-types.ts","../../src/core/resume/hub-resume.ts","../../src/core/version/hub-version.ts","../../src/core/hub.ts","../../src/core/errors.ts","../../src/core/version/client-version.gen.ts"],"mappings":"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"}
@@ -375,6 +375,7 @@ declare class InputSystem implements ControlsPanelHost, PageInputControl {
375
375
  private activeSource;
376
376
  private isPageOwner;
377
377
  private pageOwner;
378
+ private readonly modality;
378
379
  constructor(host: InputHost, options?: InputSystemOptions);
379
380
  /** Whether this page counts as a touch device. */
380
381
  get touchDevice(): boolean;
@@ -491,11 +492,52 @@ declare function parseInputOverrides(saved: unknown): InputOverrides;
491
492
  */
492
493
  declare function getInput(options?: InputOptions): InputSystem;
493
494
  //#endregion
495
+ //#region src/input/focus-ring.d.ts
496
+ /**
497
+ * The hub's focus ring: a two-tone box-shadow (a dark gap, then a light ring)
498
+ * that follows the element's own border-radius and shows on light and dark
499
+ * buttons alike. Pages tune it with CSS variables:
500
+ * `--hub-focus-color` (the ring), `--hub-focus-inner` (the gap),
501
+ * `--hub-focus-width` and `--hub-focus-gap`.
502
+ */
503
+ /** The ring as a `box-shadow` value. */
504
+ declare const FOCUS_RING_SHADOW = "0 0 0 var(--hub-focus-gap, 2px) var(--hub-focus-inner, rgba(13, 15, 20, 0.85)), 0 0 0 calc(var(--hub-focus-gap, 2px) + var(--hub-focus-width, 3px)) var(--hub-focus-color, #fff)";
505
+ //#endregion
506
+ //#region src/input/modality.d.ts
507
+ /** `keys`: keyboard or gamepad. `pointer`: mouse or pen. `touch`: a finger. */
508
+ type InputModality = 'keys' | 'pointer' | 'touch';
509
+ /** The `<html>` attribute that holds the modality. */
510
+ declare const MODALITY_ATTRIBUTE = "data-hub-input";
511
+ /** Where the modality is stored: `<html>`, or a fake in tests. */
512
+ interface ModalityRoot {
513
+ getAttribute(name: string): string | null;
514
+ setAttribute(name: string, value: string): void;
515
+ }
516
+ /** Reads and writes the page's modality attribute. */
517
+ declare class ModalityTracker {
518
+ private readonly root;
519
+ /** Start at `initial` unless another copy already set the attribute. */
520
+ constructor(root: ModalityRoot, initial: InputModality);
521
+ /** The last modality used. */
522
+ get current(): InputModality;
523
+ /** Whether focus should show: the last input was a keyboard or gamepad. */
524
+ get showsFocus(): boolean;
525
+ /** Record the modality the player just used. */
526
+ set(modality: InputModality): void;
527
+ /** A key went down (`isTyping`: in a text field). */
528
+ noteKey(key: string, isTyping: boolean): void;
529
+ /** A pointer went down. */
530
+ notePointer(pointerType: string): void;
531
+ private readAttribute;
532
+ }
533
+ /** Track the page's modality (once per bundle) and add the focus styles (once per page). */
534
+ declare function trackInputModality(): ModalityTracker;
535
+ //#endregion
494
536
  //#region src/input/nav-state.d.ts
495
537
  /** What a navigable list draws with (the overlay). */
496
538
  interface NavHighlighter {
497
- /** Ring the highlighted element. */
498
- showHighlight(bounds: Rect): void;
539
+ /** Ring the highlighted element, following its corner radius (a CSS `border-radius`, or empty). */
540
+ showHighlight(bounds: Rect, radius: string): void;
499
541
  /** Remove the ring. */
500
542
  hideHighlight(): void;
501
543
  /** Open the on-screen keyboard for a text field. */
@@ -591,8 +633,8 @@ declare class Overlay implements NavHighlighter {
591
633
  setInsets(insets: Partial<Insets>): void;
592
634
  /** Re-place every control for the current viewport, keeping the player's dragged spots. */
593
635
  layout(): void;
594
- /** Ring the highlighted element. */
595
- showHighlight(bounds: Rect): void;
636
+ /** Ring the highlighted element, for keyboard and gamepad players only (never after a tap or click). */
637
+ showHighlight(bounds: Rect, radius: string): void;
596
638
  /** Remove the ring. */
597
639
  hideHighlight(): void;
598
640
  /** Open the on-screen keyboard for a text field. */
@@ -726,5 +768,5 @@ declare function getUiStack(): UiStack;
726
768
  /** Bump when the UiStack contract gains behaviour; idle older instances are replaced. */
727
769
  declare const UI_STACK_VERSION = 1;
728
770
  //#endregion
729
- export { VirtualControlType as $, AxisSide as A, InputReading as B, parseInputOverrides as C, isPageInputControl as D, PageInputControl as E, InputConfig as F, NavElement as G, MenuBridge as H, InputDef as I, NavTarget as J, NavElementKind as K, InputEvents as L, EdgeOffsets as M, GamepadMapping as N, Anchor as O, GroupDef as P, Vector as Q, InputHost as R, isInputSystem as S, InputSystemOptions as T, MouseMapping as U, InputSource as V, NavBlurEvent as W, Rect as X, NavigableDef as Y, TouchMapping as Z, boxesTouch as _, OverlayEdge as a, InputOptions as b, OverlayReason as c, LayoutOptions as d, VirtualDef as et, layoutControls as f, LayoutItem as g, LayoutBox as h, AutoPauseOptions as i, DraggedSpot as j, AxisDef as k, UiStack as l, Insets as m, getUiStack as n, VirtualOverride as nt, OverlayEvent as o, Overlay as p, NavFocusEvent as q, isUiStack as r, OverlayListener as s, UI_STACK_VERSION as t, VirtualInputs as tt, UiStackHandoff as u, controlSize as v, InputSystem as w, getInput as x, INPUT_SINGLETON_API as y, InputOverrides as z };
771
+ export { NavigableDef as $, PageInputControl as A, InputDef as B, INPUT_SINGLETON_API as C, parseInputOverrides as D, isInputSystem as E, DraggedSpot as F, InputSource as G, InputHost as H, EdgeOffsets as I, NavBlurEvent as J, MenuBridge as K, GamepadMapping as L, Anchor as M, AxisDef as N, InputSystem as O, AxisSide as P, NavTarget as Q, GroupDef as R, FOCUS_RING_SHADOW as S, getInput as T, InputOverrides as U, InputEvents as V, InputReading as W, NavElementKind as X, NavElement as Y, NavFocusEvent as Z, boxesTouch as _, OverlayEdge as a, VirtualInputs as at, MODALITY_ATTRIBUTE as b, OverlayReason as c, LayoutOptions as d, Rect as et, layoutControls as f, LayoutItem as g, LayoutBox as h, AutoPauseOptions as i, VirtualDef as it, isPageInputControl as j, InputSystemOptions as k, UiStack as l, Insets as m, getUiStack as n, Vector as nt, OverlayEvent as o, VirtualOverride as ot, Overlay as p, MouseMapping as q, isUiStack as r, VirtualControlType as rt, OverlayListener as s, UI_STACK_VERSION as t, TouchMapping as tt, UiStackHandoff as u, controlSize as v, InputOptions as w, trackInputModality as x, InputModality as y, InputConfig as z };
730
772
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","names":[],"sources":["../../src/input/types.ts","../../src/overlay/controls-panel.ts","../../src/input/page-control.ts","../../src/input/input-system.ts","../../src/input/page-input.ts","../../src/input/nav-state.ts","../../src/overlay/layout-geometry.ts","../../src/overlay/virtual-controls.ts","../../src/overlay/overlay.ts","../../src/overlay/layout.ts","../../src/uistack/types.ts","../../src/uistack/page-stack.ts","../../src/uistack/ui-stack.ts"],"mappings":"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"}
1
+ {"version":3,"file":"input.d.ts","names":[],"sources":["../../src/input/types.ts","../../src/overlay/controls-panel.ts","../../src/input/page-control.ts","../../src/input/input-system.ts","../../src/input/page-input.ts","../../src/input/focus-ring.ts","../../src/input/modality.ts","../../src/input/nav-state.ts","../../src/overlay/layout-geometry.ts","../../src/overlay/virtual-controls.ts","../../src/overlay/overlay.ts","../../src/overlay/layout.ts","../../src/uistack/types.ts","../../src/uistack/page-stack.ts","../../src/uistack/ui-stack.ts"],"mappings":"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"}
@@ -493,6 +493,116 @@ var InputRegistry = class {
493
493
  }
494
494
  };
495
495
  //#endregion
496
+ //#region src/input/focus-ring.ts
497
+ /**
498
+ * The hub's focus ring: a two-tone box-shadow (a dark gap, then a light ring)
499
+ * that follows the element's own border-radius and shows on light and dark
500
+ * buttons alike. Pages tune it with CSS variables:
501
+ * `--hub-focus-color` (the ring), `--hub-focus-inner` (the gap),
502
+ * `--hub-focus-width` and `--hub-focus-gap`.
503
+ */
504
+ const GAP = "var(--hub-focus-gap, 2px)";
505
+ /** The ring as a `box-shadow` value. */
506
+ const FOCUS_RING_SHADOW = `0 0 0 ${GAP} var(--hub-focus-inner, rgba(13, 15, 20, 0.85)), 0 0 0 calc(${GAP} + var(--hub-focus-width, 3px)) var(--hub-focus-color, #fff)`;
507
+ //#endregion
508
+ //#region src/input/modality.ts
509
+ /**
510
+ * Which kind of input the player used last, published as `data-hub-input` on
511
+ * `<html>` so focus styles show only to keyboard and gamepad players: a tap or
512
+ * click never leaves a ring behind, and touch devices show none at all. The
513
+ * attribute is the shared state, so every bundle's copy of the client agrees.
514
+ */
515
+ /** The `<html>` attribute that holds the modality. */
516
+ const MODALITY_ATTRIBUTE = "data-hub-input";
517
+ const STYLE_ID = "hub-focus-style";
518
+ const MODIFIER_KEYS = /* @__PURE__ */ new Set([
519
+ "Shift",
520
+ "Control",
521
+ "Alt",
522
+ "Meta",
523
+ "AltGraph",
524
+ "CapsLock"
525
+ ]);
526
+ const MODALITIES = [
527
+ "keys",
528
+ "pointer",
529
+ "touch"
530
+ ];
531
+ /**
532
+ * The page focus styles: the gamepad highlight (`gp-focus`) for keyboard and
533
+ * gamepad players only, and no browser focus ring on buttons after a tap.
534
+ */
535
+ const PAGE_FOCUS_CSS = `html[${MODALITY_ATTRIBUTE}="keys"] .gp-focus{outline:none !important;box-shadow:${FOCUS_RING_SHADOW} !important;}
536
+ html[${MODALITY_ATTRIBUTE}="touch"] :is(button,a,summary,[role="button"],[tabindex]):focus{outline:none;}`;
537
+ /** The modality a pointer event's `pointerType` implies. */
538
+ function modalityOfPointer(pointerType) {
539
+ return pointerType === "touch" ? "touch" : "pointer";
540
+ }
541
+ /** The modality a key press implies, or `null` when it says nothing (a lone modifier, typing in a field). */
542
+ function modalityOfKey(key, isTyping) {
543
+ if (MODIFIER_KEYS.has(key)) return null;
544
+ return isTyping && key !== "Tab" ? null : "keys";
545
+ }
546
+ /** Reads and writes the page's modality attribute. */
547
+ var ModalityTracker = class {
548
+ /** Start at `initial` unless another copy already set the attribute. */
549
+ constructor(root, initial) {
550
+ _defineProperty(this, "root", void 0);
551
+ this.root = root;
552
+ if (this.readAttribute() === null) this.set(initial);
553
+ }
554
+ /** The last modality used. */
555
+ get current() {
556
+ return this.readAttribute() ?? "pointer";
557
+ }
558
+ /** Whether focus should show: the last input was a keyboard or gamepad. */
559
+ get showsFocus() {
560
+ return this.current === "keys";
561
+ }
562
+ /** Record the modality the player just used. */
563
+ set(modality) {
564
+ if (this.readAttribute() !== modality) this.root.setAttribute(MODALITY_ATTRIBUTE, modality);
565
+ }
566
+ /** A key went down (`isTyping`: in a text field). */
567
+ noteKey(key, isTyping) {
568
+ const modality = modalityOfKey(key, isTyping);
569
+ if (modality !== null) this.set(modality);
570
+ }
571
+ /** A pointer went down. */
572
+ notePointer(pointerType) {
573
+ this.set(modalityOfPointer(pointerType));
574
+ }
575
+ readAttribute() {
576
+ const value = this.root.getAttribute(MODALITY_ATTRIBUTE);
577
+ return MODALITIES.find((modality) => modality === value) ?? null;
578
+ }
579
+ };
580
+ let pageTracker = null;
581
+ /** Track the page's modality (once per bundle) and add the focus styles (once per page). */
582
+ function trackInputModality() {
583
+ if (pageTracker !== null) return pageTracker;
584
+ const root = document.documentElement;
585
+ const isTouchDevice = typeof matchMedia === "function" && matchMedia("(hover: none) and (pointer: coarse)").matches;
586
+ const isFirstCopy = root.getAttribute(MODALITY_ATTRIBUTE) === null;
587
+ const tracker = new ModalityTracker(root, isTouchDevice ? "touch" : "pointer");
588
+ pageTracker = tracker;
589
+ if (isFirstCopy) {
590
+ document.addEventListener("keydown", (event) => {
591
+ tracker.noteKey(event.key, isTypingTarget(event.target));
592
+ }, true);
593
+ document.addEventListener("pointerdown", (event) => {
594
+ tracker.notePointer(event.pointerType);
595
+ }, true);
596
+ }
597
+ if (document.getElementById(STYLE_ID) === null) {
598
+ const style = document.createElement("style");
599
+ style.id = STYLE_ID;
600
+ style.textContent = PAGE_FOCUS_CSS;
601
+ document.head.appendChild(style);
602
+ }
603
+ return tracker;
604
+ }
605
+ //#endregion
496
606
  //#region src/input/legacy-controls.ts
497
607
  /**
498
608
  * `game.controls` (`window.__HUB__.controls`): the gamepad-to-keyboard map a
@@ -607,6 +717,10 @@ function boundsOf(element) {
607
717
  height: 0
608
718
  } : rectOf(element.el);
609
719
  }
720
+ /** A navigable element's CSS corner radius, so the ring can follow it (empty for a non-DOM element). */
721
+ function radiusOf(element) {
722
+ return element.el === void 0 ? "" : getComputedStyle(element.el).borderRadius;
723
+ }
610
724
  /** The text field a navigable element edits, if it is one. */
611
725
  function textFieldOf(element) {
612
726
  return element.el instanceof HTMLInputElement || element.el instanceof HTMLTextAreaElement ? element.el : null;
@@ -687,12 +801,14 @@ var NavState = class {
687
801
  this.elements = this.resolve();
688
802
  this.position(highlighter);
689
803
  }
690
- /** Move the ring to the highlighted element (or hide it). */
804
+ /** Move the ring to the highlighted element (or hide it), following keyboard focus (Tab) within the list. */
691
805
  position(highlighter) {
692
806
  if (highlighter === null) return;
807
+ const focused = this.elements.findIndex((element) => element.el !== void 0 && element.el === document.activeElement);
808
+ if (focused >= 0) this.index = focused;
693
809
  const current = this.elements[this.index];
694
810
  if (current === void 0) highlighter.hideHighlight();
695
- else highlighter.showHighlight(boundsOf(current));
811
+ else highlighter.showHighlight(boundsOf(current), radiusOf(current));
696
812
  }
697
813
  resolve() {
698
814
  return this.queryElements().map((target) => target instanceof HTMLElement ? {
@@ -1540,8 +1656,8 @@ const OVERLAY_CSS = `
1540
1656
  :host(.editing) .edit-bar .btn { margin: 0; }
1541
1657
  .safe-probe { position: fixed; left: 0; top: 0; width: 0; height: 0; visibility: hidden; pointer-events: none;
1542
1658
  padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px); }
1543
- .ring { position: fixed; pointer-events: none; z-index: 2147483200; border: 3px solid ${ACCENT_COLOR}; border-radius: 8px;
1544
- box-shadow: 0 0 0 2px rgba(0,0,0,.4); transition: left .08s, top .08s, width .08s, height .08s; }
1659
+ .ring { position: fixed; pointer-events: none; z-index: 2147483200; box-shadow: ${FOCUS_RING_SHADOW};
1660
+ transition: left .08s, top .08s, width .08s, height .08s; }
1545
1661
  .ring[hidden] { display: none; }
1546
1662
  .kb { position: fixed; left: 0; right: 0; bottom: 0; z-index: 2147483400; background: #0d0f14ee; padding: 10px;
1547
1663
  pointer-events: auto; border-top: 1px solid #2a3142; }
@@ -1550,7 +1666,7 @@ const OVERLAY_CSS = `
1550
1666
  .kb .k { flex: 1; min-width: 0; max-width: 64px; height: 46px; border-radius: 8px; border: 1px solid #2a3142;
1551
1667
  background: #11141c; color: #e8e6df; font: 16px monospace; cursor: pointer; }
1552
1668
  .kb .k.space { max-width: 280px; } .kb .k.wide { max-width: 90px; }
1553
- .kb .k.kfocus { border-color: ${ACCENT_COLOR}; box-shadow: 0 0 0 2px ${ACCENT_COLOR}; }
1669
+ .kb .k.kfocus { box-shadow: ${FOCUS_RING_SHADOW}; }
1554
1670
  .panel { position: fixed; inset: 0; z-index: 2147483500; display: grid; place-items: center; background: rgba(0,0,0,.6); pointer-events: auto;
1555
1671
  font-family: 'Space Mono', ui-monospace, monospace; }
1556
1672
  .panel-card { background: #0d0f14; color: #e8e6df; border: 1px solid #2a3142; border-radius: 12px; padding: 18px;
@@ -1897,9 +2013,10 @@ var Overlay = class {
1897
2013
  if (box !== void 0) placeAt(control.element, box.x, box.y);
1898
2014
  }
1899
2015
  }
1900
- /** Ring the highlighted element. */
1901
- showHighlight(bounds) {
1902
- this.ring.hidden = false;
2016
+ /** Ring the highlighted element, for keyboard and gamepad players only (never after a tap or click). */
2017
+ showHighlight(bounds, radius) {
2018
+ this.ring.hidden = !trackInputModality().showsFocus;
2019
+ this.ring.style.borderRadius = radius;
1903
2020
  this.ring.style.left = `${String(bounds.x)}px`;
1904
2021
  this.ring.style.top = `${String(bounds.y)}px`;
1905
2022
  this.ring.style.width = `${String(bounds.width)}px`;
@@ -2104,9 +2221,8 @@ var PlayerRemaps = class {
2104
2221
  //#region src/input/zero-config.ts
2105
2222
  /** Synthetic keys stay pressed past half deflection. */
2106
2223
  const SYNTH_DEADZONE = .5;
2224
+ /** The catalog tile highlight; its style (keyboard and gamepad players only) is in `modality.ts`. */
2107
2225
  const FOCUS_CLASS = "gp-focus";
2108
- const FOCUS_STYLE_ID = "gp-focus-style";
2109
- const FOCUS_CSS = ".gp-focus{outline:3px solid #ff5f3b !important;outline-offset:2px;border-radius:4px;}";
2110
2226
  /** `KeyboardEvent.code` → its `key` and legacy `keyCode`. */
2111
2227
  const KEY_FOR_CODE = /* @__PURE__ */ new Map([
2112
2228
  ["ArrowUp", ["ArrowUp", 38]],
@@ -2142,14 +2258,6 @@ function dispatchKey(type, code) {
2142
2258
  Object.defineProperty(event, "which", { get: () => keyCode });
2143
2259
  target.dispatchEvent(event);
2144
2260
  }
2145
- /** Add the highlight style to the page once. */
2146
- function ensureFocusStyle() {
2147
- if (document.getElementById(FOCUS_STYLE_ID) !== null) return;
2148
- const style = document.createElement("style");
2149
- style.id = FOCUS_STYLE_ID;
2150
- style.textContent = FOCUS_CSS;
2151
- document.head.appendChild(style);
2152
- }
2153
2261
  /** The keys each pad holds down, by pad index. */
2154
2262
  const heldCodes = /* @__PURE__ */ new Map();
2155
2263
  function releaseAllKeys() {
@@ -2238,7 +2346,6 @@ function navigateCatalog(frame) {
2238
2346
  /** One frame of the zero-config fallback. */
2239
2347
  function runZeroConfigFrame(frame) {
2240
2348
  if (frame.gamepads.length === 0) return;
2241
- ensureFocusStyle();
2242
2349
  if (frame.slug === null) navigateCatalog(frame);
2243
2350
  else synthesizeKeys(frame);
2244
2351
  }
@@ -2266,6 +2373,7 @@ var InputSystem = class {
2266
2373
  _defineProperty(this, "activeSource", "keyboard");
2267
2374
  _defineProperty(this, "isPageOwner", void 0);
2268
2375
  _defineProperty(this, "pageOwner", null);
2376
+ _defineProperty(this, "modality", typeof document === "undefined" ? null : trackInputModality());
2269
2377
  this.host = host;
2270
2378
  this.options = options;
2271
2379
  this.isPageOwner = options.isPageOwner ?? true;
@@ -2500,7 +2608,10 @@ var InputSystem = class {
2500
2608
  this.devices.frame += 1;
2501
2609
  const { isConnected, hasActivity } = this.devices.pollGamepads();
2502
2610
  this.controls.isGamepadConnected = isConnected;
2503
- if (hasActivity) this.setSource("gamepad");
2611
+ if (hasActivity) {
2612
+ this.setSource("gamepad");
2613
+ this.modality?.set("keys");
2614
+ }
2504
2615
  if (this.isPageOwner) this.driveFrame();
2505
2616
  else this.registry.sample(this.devices, this.activeSource);
2506
2617
  this.devices.decay();
@@ -2718,6 +2829,6 @@ function getInput(options = {}) {
2718
2829
  return claimedInput;
2719
2830
  }
2720
2831
  //#endregion
2721
- export { isPageInputControl as a, layoutControls as c, parseInputOverrides as i, boxesTouch as l, getInput as n, InputSystem as o, isInputSystem as r, Overlay as s, INPUT_SINGLETON_API as t, controlSize as u };
2832
+ export { isPageInputControl as a, layoutControls as c, MODALITY_ATTRIBUTE as d, trackInputModality as f, parseInputOverrides as i, boxesTouch as l, getInput as n, InputSystem as o, FOCUS_RING_SHADOW as p, isInputSystem as r, Overlay as s, INPUT_SINGLETON_API as t, controlSize as u };
2722
2833
 
2723
2834
  //# sourceMappingURL=input.js.map