Repository navigation
feat: core agnóstico de framework con bindings para DOM, React y Angular - #3
Merged
Merged
Conversation
…bindings Replace the jQuery port of the Google TV UI library with a pnpm monorepo: - @arxis/gtvzone-core: DOM-free navigation engine (zones, geometry/list/grid strategies, prioritized layers, overrides, store with subscribe) - @arxis/gtvzone-dom: browser adapter, platform key maps and a selector mode with MutationObserver for apps without a framework - @arxis/gtvzone-react: useFocusable, FocusZone and FocusLayer on top of useSyncExternalStore - @arxis/gtvzone-angular: standalone directives and a signal-based service, with key handling outside the Angular zone Builds target chrome63 (Tizen 5) and CI replaces Travis.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué cambia
Reescribe gtvzone como un core de navegación espacial sin DOM ni framework más bindings finos, en un monorepo pnpm. Sale el port jQuery del Google TV UI Library (2010).
@arxis/gtvzone-coregeometry/list/grid(o una propia), capas con prioridad y restauración del foco,nextFocus/nextZone/trap, store congetState+subscribey eventos. Cero dependencias.@arxis/gtvzone-domgetRectenchufable para polyfills, orden por posición en el DOM), mapas de teclas Tizen / webOS / VIDAA / navegador y modo selectores (bindZone) conMutationObserverpara apps sin framework.@arxis/gtvzone-reactNavigationProvider,useFocusable,<FocusZone>(reenvíaref),<FocusLayer>. UsauseSyncExternalStorecon shim, así que funciona desde React 16.8/17.@arxis/gtvzone-angulargtvFocusable/gtvZone/gtvLayer,GtvNavigationServicecon signals ystate$,provideGtvNavigation(). Angular ≥ 16.1.Decisiones de diseño
listygridno miden el layout al moverse dentro de la zona. Sologeometryy la entrada a una zona desde un costado llaman agetBoundingClientRect, y cada operación mide cada nodo una sola vez.runOutsideAngulary solo se entra a la zona cuando el foco cambia.core,domyreactse compilan con targetchrome63(Tizen 5); verifiqué que el bundle no tiene?.ni??. El paquete Angular queda conminVersion: 16.1.0en la compilación parcial.Cómo lo probé
pnpm test: 43 tests con vitest.list/grid, capas, overrides, contrato del store y orden estable al re-registrar.bindZonecon mutaciones, zonas anidadas y cleanup.focused()como signal, capas, provider con teclas.pnpm typecheckypnpm builden verde para los cuatro paquetes.examples/vanillaen Chrome real contra losdist. Probé menú → filas, bajar entre filas cayendo en la tarjeta alineada, volver a la última enfocada, abrir un modal como capa (las flechas no salen de él) y cerrarlo con Esc, que devuelve el foco a la tarjeta de origen.Los tests encontraron dos bugs que ya quedaron corregidos en esta rama:
focused()quedaba suscrito a un signal viejo. Ahora es uncomputedestable.Breaking change
Es una reescritura completa y no hay API compatible con la 0.x. El README trae una tabla de migración (
KeyBehaviorZone→bindZone,KeyZoneLayer→openLayer, etc.). Las 0.x siguen en npm como@arxis/gtvzone. Los paquetes nuevos quedan en1.0.0-alpha.0y esta PR no publica nada.Pendiente, fuera de esta PR
@arxis/gtvzonepasa a ser un paquete paraguas (core+dom) o se depreca.0.1.0, peromasterestaba en0.0.6; esa versión se publicó desde código que no está en el repo.