@sigx/lynx-navigation 0.1.3 → 0.4.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.
- package/README.md +189 -7
- package/dist/components/EntryScope.d.ts +1 -1
- package/dist/components/EntryScope.d.ts.map +1 -1
- package/dist/components/Layer.d.ts +34 -0
- package/dist/components/Layer.d.ts.map +1 -0
- package/dist/components/Link.d.ts +2 -2
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/NavigationRoot.d.ts +2 -2
- package/dist/components/NavigationRoot.d.ts.map +1 -1
- package/dist/components/Screen.d.ts +6 -6
- package/dist/components/Screen.d.ts.map +1 -1
- package/dist/components/Stack.d.ts +83 -13
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/TabBar.d.ts +19 -20
- package/dist/components/TabBar.d.ts.map +1 -1
- package/dist/components/Tabs.d.ts +30 -21
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/define-routes.d.ts +1 -1
- package/dist/define-routes.d.ts.map +1 -1
- package/dist/hooks/use-focus.d.ts.map +1 -1
- package/dist/hooks/use-hardware-back.d.ts +9 -2
- package/dist/hooks/use-hardware-back.d.ts.map +1 -1
- package/dist/hooks/use-linking-nav.d.ts +3 -3
- package/dist/hooks/use-linking-nav.d.ts.map +1 -1
- package/dist/hooks/use-nav-internal.d.ts +21 -3
- package/dist/hooks/use-nav-internal.d.ts.map +1 -1
- package/dist/hooks/use-nav-serializer.d.ts +1 -1
- package/dist/hooks/use-nav-serializer.d.ts.map +1 -1
- package/dist/hooks/use-nav.d.ts +38 -3
- package/dist/hooks/use-nav.d.ts.map +1 -1
- package/dist/hooks/use-params.d.ts +1 -1
- package/dist/hooks/use-params.d.ts.map +1 -1
- package/dist/hooks/use-screen-chrome.d.ts +19 -0
- package/dist/hooks/use-screen-chrome.d.ts.map +1 -0
- package/dist/hooks/use-screen-options.d.ts +1 -1
- package/dist/hooks/use-screen-options.d.ts.map +1 -1
- package/dist/hooks/use-search.d.ts +1 -1
- package/dist/hooks/use-search.d.ts.map +1 -1
- package/dist/href.d.ts +2 -2
- package/dist/href.d.ts.map +1 -1
- package/dist/index.d.ts +33 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1160 -29
- package/dist/index.js.map +1 -1
- package/dist/internal/layer-plan.d.ts +69 -0
- package/dist/internal/layer-plan.d.ts.map +1 -0
- package/dist/internal/screen-registry.d.ts +1 -1
- package/dist/internal/screen-registry.d.ts.map +1 -1
- package/dist/internal/screen-width.d.ts +9 -7
- package/dist/internal/screen-width.d.ts.map +1 -1
- package/dist/navigator/core.d.ts +31 -4
- package/dist/navigator/core.d.ts.map +1 -1
- package/dist/register.d.ts +1 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/url/index.d.ts +6 -6
- package/dist/url/index.d.ts.map +1 -1
- package/dist/url/parse.d.ts +1 -1
- package/dist/url/parse.d.ts.map +1 -1
- package/dist/url/registry.d.ts +2 -2
- package/dist/url/registry.d.ts.map +1 -1
- package/dist/url/validate.d.ts +1 -1
- package/dist/url/validate.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/components/Drawer.d.ts +55 -0
- package/src/components/EdgeBackHandle.d.ts +1 -0
- package/src/components/EdgeBackHandle.tsx +2 -2
- package/{dist/components/EntryScope.js → src/components/EntryScope.d.ts} +7 -15
- package/src/components/EntryScope.tsx +15 -4
- package/src/components/Header.d.ts +6 -0
- package/src/components/Header.tsx +3 -3
- package/src/components/Layer.d.ts +33 -0
- package/src/components/Layer.tsx +96 -0
- package/src/components/Link.d.ts +60 -0
- package/src/components/Link.tsx +4 -4
- package/src/components/NavigationRoot.d.ts +36 -0
- package/src/components/NavigationRoot.tsx +6 -6
- package/src/components/Screen.d.ts +97 -0
- package/src/components/Screen.tsx +13 -11
- package/src/components/Stack.d.ts +90 -0
- package/src/components/Stack.tsx +333 -92
- package/src/components/TabBar.d.ts +38 -0
- package/src/components/TabBar.tsx +22 -22
- package/src/components/Tabs.d.ts +109 -0
- package/src/components/Tabs.tsx +54 -22
- package/{dist/define-routes.js → src/define-routes.d.ts} +2 -4
- package/src/define-routes.ts +1 -1
- package/{dist/hooks/use-focus.js → src/hooks/use-focus.d.ts} +3 -39
- package/src/hooks/use-focus.ts +9 -3
- package/src/hooks/use-hardware-back.d.ts +37 -0
- package/src/hooks/use-hardware-back.ts +43 -9
- package/src/hooks/use-linking-nav.d.ts +91 -0
- package/src/hooks/use-linking-nav.ts +4 -4
- package/src/hooks/use-nav-internal.d.ts +91 -0
- package/src/hooks/use-nav-internal.ts +24 -3
- package/src/hooks/use-nav-serializer.d.ts +82 -0
- package/src/hooks/use-nav-serializer.ts +3 -3
- package/src/hooks/use-nav.d.ts +111 -0
- package/src/hooks/use-nav.ts +40 -3
- package/{dist/hooks/use-params.js → src/hooks/use-params.d.ts} +2 -6
- package/src/hooks/use-params.ts +2 -2
- package/src/hooks/use-screen-chrome.d.ts +18 -0
- package/src/hooks/use-screen-chrome.ts +122 -0
- package/src/hooks/use-screen-options.d.ts +2 -0
- package/src/hooks/use-screen-options.ts +3 -3
- package/{dist/hooks/use-search.js → src/hooks/use-search.d.ts} +2 -6
- package/src/hooks/use-search.ts +2 -2
- package/src/href.d.ts +54 -0
- package/src/href.ts +6 -6
- package/src/index.d.ts +39 -0
- package/src/index.ts +33 -31
- package/src/internal/layer-plan.d.ts +68 -0
- package/src/internal/layer-plan.ts +187 -0
- package/{dist/internal/screen-registry.js → src/internal/screen-registry.d.ts} +21 -32
- package/src/internal/screen-registry.ts +1 -1
- package/src/internal/screen-width.d.ts +17 -0
- package/src/internal/screen-width.ts +22 -14
- package/src/navigator/core.d.ts +96 -0
- package/src/navigator/core.ts +90 -10
- package/src/register.d.ts +37 -0
- package/src/register.ts +1 -1
- package/src/types.d.ts +217 -0
- package/src/url/build.d.ts +15 -0
- package/src/url/build.ts +2 -2
- package/src/url/compile.d.ts +34 -0
- package/src/url/format.d.ts +28 -0
- package/src/url/index.ts +6 -6
- package/src/url/parse.d.ts +20 -0
- package/src/url/parse.ts +6 -6
- package/{dist/url/registry.js → src/url/registry.d.ts} +12 -28
- package/src/url/registry.ts +3 -3
- package/src/url/validate.d.ts +23 -0
- package/src/url/validate.ts +1 -1
- package/dist/components/Drawer.js +0 -74
- package/dist/components/Drawer.js.map +0 -1
- package/dist/components/EdgeBackHandle.js +0 -144
- package/dist/components/EdgeBackHandle.js.map +0 -1
- package/dist/components/EntryScope.js.map +0 -1
- package/dist/components/Header.js +0 -103
- package/dist/components/Header.js.map +0 -1
- package/dist/components/Link.js +0 -51
- package/dist/components/Link.js.map +0 -1
- package/dist/components/NavigationRoot.js +0 -67
- package/dist/components/NavigationRoot.js.map +0 -1
- package/dist/components/Screen.js +0 -94
- package/dist/components/Screen.js.map +0 -1
- package/dist/components/ScreenContainer.d.ts +0 -18
- package/dist/components/ScreenContainer.d.ts.map +0 -1
- package/dist/components/ScreenContainer.js +0 -77
- package/dist/components/ScreenContainer.js.map +0 -1
- package/dist/components/Stack.js +0 -75
- package/dist/components/Stack.js.map +0 -1
- package/dist/components/TabBar.js +0 -63
- package/dist/components/TabBar.js.map +0 -1
- package/dist/components/Tabs.js +0 -140
- package/dist/components/Tabs.js.map +0 -1
- package/dist/define-routes.js.map +0 -1
- package/dist/hooks/use-focus.js.map +0 -1
- package/dist/hooks/use-hardware-back.js +0 -50
- package/dist/hooks/use-hardware-back.js.map +0 -1
- package/dist/hooks/use-linking-nav.js +0 -109
- package/dist/hooks/use-linking-nav.js.map +0 -1
- package/dist/hooks/use-nav-internal.js +0 -44
- package/dist/hooks/use-nav-internal.js.map +0 -1
- package/dist/hooks/use-nav-serializer.js +0 -181
- package/dist/hooks/use-nav-serializer.js.map +0 -1
- package/dist/hooks/use-nav.js +0 -11
- package/dist/hooks/use-nav.js.map +0 -1
- package/dist/hooks/use-params.js.map +0 -1
- package/dist/hooks/use-screen-options.js +0 -43
- package/dist/hooks/use-screen-options.js.map +0 -1
- package/dist/hooks/use-search.js.map +0 -1
- package/dist/href.js +0 -57
- package/dist/href.js.map +0 -1
- package/dist/internal/screen-registry.js.map +0 -1
- package/dist/internal/screen-width.js +0 -30
- package/dist/internal/screen-width.js.map +0 -1
- package/dist/navigator/core.js +0 -344
- package/dist/navigator/core.js.map +0 -1
- package/dist/register.js +0 -2
- package/dist/register.js.map +0 -1
- package/dist/types.js +0 -9
- package/dist/types.js.map +0 -1
- package/dist/url/build.js +0 -30
- package/dist/url/build.js.map +0 -1
- package/dist/url/compile.js +0 -83
- package/dist/url/compile.js.map +0 -1
- package/dist/url/format.js +0 -102
- package/dist/url/format.js.map +0 -1
- package/dist/url/index.js +0 -13
- package/dist/url/index.js.map +0 -1
- package/dist/url/parse.js +0 -94
- package/dist/url/parse.js.map +0 -1
- package/dist/url/registry.js.map +0 -1
- package/dist/url/validate.js +0 -37
- package/dist/url/validate.js.map +0 -1
- package/src/components/ScreenContainer.tsx +0 -114
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Schema validation helper (sync only).
|
|
3
|
+
*
|
|
4
|
+
* `hrefFor` and `parseHref` run on hot paths (link rendering, deep-link
|
|
5
|
+
* resolution) so we restrict to sync validators. Zod/Valibot/ArkType are all
|
|
6
|
+
* sync, which covers the common case. Async validators throw a clear error.
|
|
7
|
+
*/
|
|
8
|
+
import type { StandardSchemaV1 } from '../types';
|
|
9
|
+
/** Outcome of a sync validation call — discriminated for explicit handling. */
|
|
10
|
+
export type ValidateOutcome = {
|
|
11
|
+
readonly ok: true;
|
|
12
|
+
readonly value: unknown;
|
|
13
|
+
} | {
|
|
14
|
+
readonly ok: false;
|
|
15
|
+
readonly issues: ReadonlyArray<string>;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Run a Standard Schema's `validate` synchronously. When the schema lacks a
|
|
19
|
+
* `validate` function (e.g. our test `fakeSchema`), passthrough — assume the
|
|
20
|
+
* input is already in the correct shape. This is a deliberate ergonomic
|
|
21
|
+
* choice so the type-spike fixtures stay terse.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateSync(schema: StandardSchemaV1 | undefined, input: unknown): ValidateOutcome;
|
package/src/url/validate.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* sync, which covers the common case. Async validators throw a clear error.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import type { StandardSchemaV1 } from '../types
|
|
9
|
+
import type { StandardSchemaV1 } from '../types';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Extended runtime view of a Standard Schema — adds the `validate` function
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@sigx/lynx/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* `<Drawer>` — minimal off-canvas drawer navigator.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
*
|
|
7
|
-
* ```tsx
|
|
8
|
-
* <NavigationRoot routes={routes}>
|
|
9
|
-
* <Drawer slots={{ sidebar: () => <view><text>Menu</text></view> }}>
|
|
10
|
-
* <Stack />
|
|
11
|
-
* </Drawer>
|
|
12
|
-
* </NavigationRoot>
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* `useDrawer()` from inside any descendant gives `{ isOpen, open(), close(),
|
|
16
|
-
* toggle() }`. The sidebar is laid out absolutely on the left and is
|
|
17
|
-
* visible whenever `isOpen` is true.
|
|
18
|
-
*
|
|
19
|
-
* Scope: this slice ships the state primitive + the bare-bones layout.
|
|
20
|
-
* Gesture-driven open (edge swipe from the left) and MTS slide-in are out
|
|
21
|
-
* of scope — the app shell can wrap its sidebar JSX in its own transition.
|
|
22
|
-
*
|
|
23
|
-
* Design note: the sidebar lives in a named slot (`sidebar`) rather than
|
|
24
|
-
* a render-prop or a `<Drawer.Sidebar>` child. Mixing
|
|
25
|
-
* "register-yourself-as-a-fill" children with the parent's own visible
|
|
26
|
-
* layout creates a feedback loop in sigx's reactive scope (the parent's
|
|
27
|
-
* render reads the fill, child's setup writes it, parent re-renders,
|
|
28
|
-
* child re-mounts, …). A scoped slot avoids that entirely and keeps the
|
|
29
|
-
* call site declarative.
|
|
30
|
-
*
|
|
31
|
-
* `default` slot is the main content (almost always a `<Stack>`).
|
|
32
|
-
*/
|
|
33
|
-
import { component, defineInjectable, defineProvide, signal, } from '@sigx/lynx';
|
|
34
|
-
/**
|
|
35
|
-
* Access the enclosing Drawer navigator. Throws when called outside
|
|
36
|
-
* `<Drawer>`.
|
|
37
|
-
*/
|
|
38
|
-
export const useDrawer = defineInjectable(() => {
|
|
39
|
-
throw new Error('[lynx-navigation] useDrawer() called outside of a <Drawer> component.');
|
|
40
|
-
});
|
|
41
|
-
export const Drawer = component(({ props, slots }) => {
|
|
42
|
-
// `isOpenSig` uses the `{value}` wrapper pattern — sigx's `signal()` of
|
|
43
|
-
// a primitive returns a proxy that requires `.value` reads; wrapping in
|
|
44
|
-
// an object makes the proxy carry a mutable boolean.
|
|
45
|
-
const isOpenSig = signal({
|
|
46
|
-
value: props.initialOpen === true,
|
|
47
|
-
});
|
|
48
|
-
const nav = {
|
|
49
|
-
get isOpen() {
|
|
50
|
-
return isOpenSig.value;
|
|
51
|
-
},
|
|
52
|
-
open() {
|
|
53
|
-
isOpenSig.value = true;
|
|
54
|
-
},
|
|
55
|
-
close() {
|
|
56
|
-
isOpenSig.value = false;
|
|
57
|
-
},
|
|
58
|
-
toggle() {
|
|
59
|
-
isOpenSig.value = !isOpenSig.value;
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
defineProvide(useDrawer, () => nav);
|
|
63
|
-
return () => {
|
|
64
|
-
const open = isOpenSig.value;
|
|
65
|
-
return (_jsxs("view", { style: { width: '100%', height: '100%' }, children: [_jsx("view", { style: { width: '100%', height: '100%' }, children: slots.default?.() }), _jsx("view", { style: {
|
|
66
|
-
position: 'absolute',
|
|
67
|
-
left: 0,
|
|
68
|
-
top: 0,
|
|
69
|
-
bottom: 0,
|
|
70
|
-
display: open ? 'flex' : 'none',
|
|
71
|
-
}, children: slots.sidebar?.() })] }));
|
|
72
|
-
};
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=Drawer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../src/components/Drawer.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EACH,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,MAAM,GAGT,MAAM,YAAY,CAAC;AAcpB;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAY,GAAG,EAAE;IACtD,MAAM,IAAI,KAAK,CACX,uEAAuE,CAC1E,CAAC;AACN,CAAC,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9D,wEAAwE;IACxE,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,SAAS,GAA+B,MAAM,CAAC;QACjD,KAAK,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;KACpC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAc;QACnB,IAAI,MAAM;YACN,OAAO,SAAS,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI;YACA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,KAAK;YACD,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,MAAM;YACF,SAAS,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;QACvC,CAAC;KACJ,CAAC;IAEF,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,GAAG,EAAE;QACR,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;QAC7B,OAAO,CACH,gBAAM,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAE1C,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YACzC,KAAK,CAAC,OAAO,EAAE,EAAE,GACf,EAKP,eACI,KAAK,EAAE;wBACH,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,CAAC;wBACP,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;qBAClC,YAEA,KAAK,CAAC,OAAO,EAAE,EAAE,GACf,IACJ,CACV,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "@sigx/lynx/jsx-runtime";
|
|
2
|
-
import { component, Gesture, runOnBackground, useGestureDetector, useMainThreadRef, } from '@sigx/lynx';
|
|
3
|
-
import { withTiming } from '@sigx/lynx-motion';
|
|
4
|
-
import { useNavInternals } from '../hooks/use-nav-internal.js';
|
|
5
|
-
import { SCREEN_WIDTH } from '../internal/screen-width.js';
|
|
6
|
-
/**
|
|
7
|
-
* Edge-pan recognizer for iOS-style swipe-back. Mounts as an absolutely-
|
|
8
|
-
* positioned 20px-wide strip on the left edge of the active screen; only
|
|
9
|
-
* exists when `nav.canGoBack && !transition`.
|
|
10
|
-
*
|
|
11
|
-
* `Gesture.Pan().minDistance(MIN_DISTANCE)` lets quick taps pass through to
|
|
12
|
-
* whatever's behind the strip (back button, screen header, etc.). Only
|
|
13
|
-
* horizontal drags past the threshold activate the gesture.
|
|
14
|
-
*
|
|
15
|
-
* MT/BG split:
|
|
16
|
-
* - All gesture handlers run on MT. They write `progress.current.value`
|
|
17
|
-
* directly per frame (no per-frame bridge crossing) and dispatch
|
|
18
|
-
* `runOnBackground(...)` only at start/commit/cancel — three BG hops
|
|
19
|
-
* per gesture max.
|
|
20
|
-
* - The transition state machine on BG mounts the underneath
|
|
21
|
-
* `<ScreenContainer>` once `beginBackGesture` lands; the gesture's
|
|
22
|
-
* in-flight progress writes are picked up the moment the binding
|
|
23
|
-
* registers (Phase 0.5 polish: pre-mount underneath when canGoBack to
|
|
24
|
-
* eliminate the brief pre-mount latency).
|
|
25
|
-
*
|
|
26
|
-
* Implementation notes (matching `<Draggable>`):
|
|
27
|
-
* - Single `useMainThreadRef` holding an object — primitive refs don't
|
|
28
|
-
* survive worklet capture cleanly in some Lynx versions, while object
|
|
29
|
-
* refs do (the worklet runtime resolves the ref via the
|
|
30
|
-
* `_workletRefMap`).
|
|
31
|
-
* - `e: any` rather than `e: unknown` — type annotations are erased, but
|
|
32
|
-
* SWC's worklet transform has been observed to behave better with the
|
|
33
|
-
* looser annotation. Keeps us aligned with Draggable verbatim.
|
|
34
|
-
* - Empty `onBegin`: load-bearing on iOS — without a registered onBegin
|
|
35
|
-
* callback, `LynxPanGestureHandler` skips the begin path and onStart/
|
|
36
|
-
* onEnd never fire (per Draggable's notes).
|
|
37
|
-
*/
|
|
38
|
-
/** Fraction of screen width past which a release commits the back nav. */
|
|
39
|
-
const COMMIT_TRANSLATION = 0.33;
|
|
40
|
-
/** px/sec horizontal speed past which a release commits, regardless of distance. */
|
|
41
|
-
const COMMIT_VELOCITY = 300;
|
|
42
|
-
/** Width of the touchable strip on the left edge of every screen. */
|
|
43
|
-
const EDGE_ZONE_WIDTH = 20;
|
|
44
|
-
/** Minimum movement before the gesture activates (lets taps pass through). */
|
|
45
|
-
const MIN_DISTANCE = 8;
|
|
46
|
-
const SNAP_DURATION_SEC = 0.18;
|
|
47
|
-
/**
|
|
48
|
-
* Pre-computed milliseconds for the BG-side `setTimeout`. Module-level so
|
|
49
|
-
* it's in scope for both the MT worklet (`withTiming` argument) and the BG
|
|
50
|
-
* callback wrapped by `runOnBackground` (`setTimeout` argument). Locals
|
|
51
|
-
* declared inside an MT worklet body are MT-only — the BG callback's
|
|
52
|
-
* closure can't see them, hence "ReferenceError: snapMs is not defined".
|
|
53
|
-
*/
|
|
54
|
-
const SNAP_DURATION_MS = Math.round(SNAP_DURATION_SEC * 1000);
|
|
55
|
-
export const EdgeBackHandle = component(() => {
|
|
56
|
-
const ref = useMainThreadRef(null);
|
|
57
|
-
// Per-gesture transient state — captured as a plain closure object
|
|
58
|
-
// rather than a `useMainThreadRef`. Lynx's SWC worklet transform deep-
|
|
59
|
-
// copies plain objects into `_c` once at register time; mutations on MT
|
|
60
|
-
// persist across calls because the same `_c` is bound for the lifetime
|
|
61
|
-
// of the gesture registration. Using a `useMainThreadRef` here was
|
|
62
|
-
// crashing on iOS with `cannot read property 'current' of undefined`
|
|
63
|
-
// — the resolved-ref capture path looked up an empty
|
|
64
|
-
// `_workletRefMap` entry under a race I haven't fully tracked down.
|
|
65
|
-
// Plain object avoids that path entirely.
|
|
66
|
-
const state = {
|
|
67
|
-
startPageX: 0,
|
|
68
|
-
prevPageX: 0,
|
|
69
|
-
prevTime: 0,
|
|
70
|
-
velocity: 0,
|
|
71
|
-
};
|
|
72
|
-
const internals = useNavInternals();
|
|
73
|
-
const progress = internals.progress;
|
|
74
|
-
const beginBackGesture = internals.beginBackGesture;
|
|
75
|
-
const commitBackGesture = internals.commitBackGesture;
|
|
76
|
-
const cancelBackGesture = internals.cancelBackGesture;
|
|
77
|
-
const pan = Gesture.Pan()
|
|
78
|
-
.minDistance(MIN_DISTANCE)
|
|
79
|
-
.onBegin(() => {
|
|
80
|
-
'main thread';
|
|
81
|
-
})
|
|
82
|
-
.onStart((e) => {
|
|
83
|
-
'main thread';
|
|
84
|
-
const p = e && e.params;
|
|
85
|
-
const pageX = (p && p.pageX) || 0;
|
|
86
|
-
state.startPageX = pageX;
|
|
87
|
-
state.prevPageX = pageX;
|
|
88
|
-
state.prevTime = Date.now();
|
|
89
|
-
state.velocity = 0;
|
|
90
|
-
runOnBackground(() => {
|
|
91
|
-
beginBackGesture();
|
|
92
|
-
})();
|
|
93
|
-
})
|
|
94
|
-
.onUpdate((e) => {
|
|
95
|
-
'main thread';
|
|
96
|
-
if (!progress)
|
|
97
|
-
return;
|
|
98
|
-
const p = e && e.params;
|
|
99
|
-
const pageX = (p && p.pageX) || 0;
|
|
100
|
-
const dx = pageX - state.startPageX;
|
|
101
|
-
const prog = Math.max(0, Math.min(1, dx / SCREEN_WIDTH));
|
|
102
|
-
progress.current.value = prog;
|
|
103
|
-
const now = Date.now();
|
|
104
|
-
const dt = now - state.prevTime;
|
|
105
|
-
if (dt > 0) {
|
|
106
|
-
state.velocity =
|
|
107
|
-
((pageX - state.prevPageX) / dt) * 1000;
|
|
108
|
-
}
|
|
109
|
-
state.prevPageX = pageX;
|
|
110
|
-
state.prevTime = now;
|
|
111
|
-
})
|
|
112
|
-
.onEnd((e) => {
|
|
113
|
-
'main thread';
|
|
114
|
-
if (!progress)
|
|
115
|
-
return;
|
|
116
|
-
const p = e && e.params;
|
|
117
|
-
const pageX = (p && p.pageX) || 0;
|
|
118
|
-
const dx = pageX - state.startPageX;
|
|
119
|
-
const fraction = dx / SCREEN_WIDTH;
|
|
120
|
-
const commit = fraction > COMMIT_TRANSLATION ||
|
|
121
|
-
state.velocity > COMMIT_VELOCITY;
|
|
122
|
-
if (commit) {
|
|
123
|
-
withTiming(progress, 1, { duration: SNAP_DURATION_SEC });
|
|
124
|
-
runOnBackground(() => {
|
|
125
|
-
setTimeout(() => commitBackGesture(), SNAP_DURATION_MS);
|
|
126
|
-
})();
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
withTiming(progress, 0, { duration: SNAP_DURATION_SEC });
|
|
130
|
-
runOnBackground(() => {
|
|
131
|
-
setTimeout(() => cancelBackGesture(), SNAP_DURATION_MS);
|
|
132
|
-
})();
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
useGestureDetector(ref, pan);
|
|
136
|
-
return () => (_jsx("view", { "main-thread:ref": ref, style: {
|
|
137
|
-
position: 'absolute',
|
|
138
|
-
top: '0',
|
|
139
|
-
left: '0',
|
|
140
|
-
width: `${EDGE_ZONE_WIDTH}px`,
|
|
141
|
-
bottom: '0',
|
|
142
|
-
} }));
|
|
143
|
-
});
|
|
144
|
-
//# sourceMappingURL=EdgeBackHandle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EdgeBackHandle.js","sourceRoot":"","sources":["../../src/components/EdgeBackHandle.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EntryScope.js","sourceRoot":"","sources":["../../src/components/EntryScope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAOtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACtE,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,aAAa,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,aAAa,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@sigx/lynx/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* `<Header>` — default navigator header chrome.
|
|
4
|
-
*
|
|
5
|
-
* Reads from the currently-focused entry's `ScreenRegistry`:
|
|
6
|
-
*
|
|
7
|
-
* - If `slots.header` is set, render that (full override).
|
|
8
|
-
* - Else render the default layout: headerLeft (back button when
|
|
9
|
-
* `nav.canGoBack`), title (from `options.title`, or the route name as
|
|
10
|
-
* a fallback), headerRight.
|
|
11
|
-
*
|
|
12
|
-
* Persistent: the Header component itself is mounted once near the root and
|
|
13
|
-
* stays mounted across navigations — it reactively switches its content
|
|
14
|
-
* when `nav.current` changes, rather than being remounted per screen. That
|
|
15
|
-
* matters because mounting cost adds to perceived transition latency.
|
|
16
|
-
*
|
|
17
|
-
* Header chrome is opt-in. Consumers place `<Header />` inside
|
|
18
|
-
* `<NavigationRoot>` above `<Stack />`. We don't auto-inject because:
|
|
19
|
-
* - app shells vary (some want the header inside a `<SafeArea>`, some
|
|
20
|
-
* want a custom toolbar, some want no header at all in tabs).
|
|
21
|
-
* - making it opt-in keeps `<Stack>`'s contract narrow.
|
|
22
|
-
*/
|
|
23
|
-
import { component, computed } from '@sigx/lynx';
|
|
24
|
-
import { useNav } from '../hooks/use-nav.js';
|
|
25
|
-
import { useNavInternals } from '../hooks/use-nav-internal.js';
|
|
26
|
-
/**
|
|
27
|
-
* Resolve a title (string or getter) to a plain string.
|
|
28
|
-
*
|
|
29
|
-
* Getter is the more general case; the `<Screen title={() => state.value}>`
|
|
30
|
-
* call site is how reactive titles work. A plain string is wrapped in a
|
|
31
|
-
* trivial closure so consumers always handle one shape.
|
|
32
|
-
*/
|
|
33
|
-
function resolveTitle(t, routeName) {
|
|
34
|
-
if (typeof t === 'function')
|
|
35
|
-
return t();
|
|
36
|
-
if (typeof t === 'string')
|
|
37
|
-
return t;
|
|
38
|
-
return routeName;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Default back-button rendering. Plain `<text>` with a tap handler — apps
|
|
42
|
-
* that want an icon or a custom design override via
|
|
43
|
-
* `<Screen.HeaderLeft>`. Kept minimal because there's no shared icon
|
|
44
|
-
* primitive at the navigation layer.
|
|
45
|
-
*/
|
|
46
|
-
const DefaultBackButton = component(({ props }) => {
|
|
47
|
-
return () => (_jsx("view", { bindtap: () => props.onPress(), "accessibility-element": true, "accessibility-label": "Back", "accessibility-trait": "button", children: _jsx("text", { children: "\u2039 Back" }) }));
|
|
48
|
-
});
|
|
49
|
-
const DefaultTitle = component(({ props }) => {
|
|
50
|
-
return () => (_jsx("view", { children: _jsx("text", { children: props.text }) }));
|
|
51
|
-
});
|
|
52
|
-
/**
|
|
53
|
-
* Persistent header chrome. Mount once above `<Stack>`; reactively follows
|
|
54
|
-
* the focused entry. No props in v1 — styling is a host-app concern,
|
|
55
|
-
* arrived at through the slot fills.
|
|
56
|
-
*/
|
|
57
|
-
export const Header = component(() => {
|
|
58
|
-
const nav = useNav();
|
|
59
|
-
const internals = useNavInternals();
|
|
60
|
-
// Snapshot computeds — each one reads only what it needs so the header
|
|
61
|
-
// doesn't re-run wholesale on every signal touch. The slot-fill thunks
|
|
62
|
-
// captured by `<Screen.Header>` etc. are themselves reactive (they
|
|
63
|
-
// execute on every render of the consumer's tree), so re-running the
|
|
64
|
-
// outer template is enough to pick up downstream updates.
|
|
65
|
-
const currentEntry = computed(() => nav.current);
|
|
66
|
-
const headerSlot = computed(() => {
|
|
67
|
-
const reg = internals.screens.get(currentEntry.value.key);
|
|
68
|
-
return reg?.slots.header;
|
|
69
|
-
});
|
|
70
|
-
const headerLeftSlot = computed(() => {
|
|
71
|
-
const reg = internals.screens.get(currentEntry.value.key);
|
|
72
|
-
return reg?.slots.headerLeft;
|
|
73
|
-
});
|
|
74
|
-
const headerRightSlot = computed(() => {
|
|
75
|
-
const reg = internals.screens.get(currentEntry.value.key);
|
|
76
|
-
return reg?.slots.headerRight;
|
|
77
|
-
});
|
|
78
|
-
const headerShown = computed(() => {
|
|
79
|
-
const reg = internals.screens.get(currentEntry.value.key);
|
|
80
|
-
// Default true — most screens want a header. Opting out is one prop
|
|
81
|
-
// on `<Screen>`.
|
|
82
|
-
return reg?.options.headerShown !== false;
|
|
83
|
-
});
|
|
84
|
-
const titleText = computed(() => {
|
|
85
|
-
const reg = internals.screens.get(currentEntry.value.key);
|
|
86
|
-
return resolveTitle(reg?.options.title, currentEntry.value.route);
|
|
87
|
-
});
|
|
88
|
-
return () => {
|
|
89
|
-
if (!headerShown.value)
|
|
90
|
-
return null;
|
|
91
|
-
// Full-override path: `<Screen.Header>` supplied its own content,
|
|
92
|
-
// we render that and skip the default layout entirely.
|
|
93
|
-
const override = headerSlot.value;
|
|
94
|
-
if (override)
|
|
95
|
-
return override();
|
|
96
|
-
return (_jsxs("view", { children: [_jsx("view", { children: headerLeftSlot.value
|
|
97
|
-
? headerLeftSlot.value()
|
|
98
|
-
: nav.canGoBack
|
|
99
|
-
? _jsx(DefaultBackButton, { onPress: () => nav.pop() })
|
|
100
|
-
: null }), _jsx(DefaultTitle, { text: titleText.value }), _jsx("view", { children: headerRightSlot.value ? headerRightSlot.value() : null })] }));
|
|
101
|
-
};
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"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"}
|
package/dist/components/Link.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "@sigx/lynx/jsx-runtime";
|
|
2
|
-
import { component } from '@sigx/lynx';
|
|
3
|
-
import { useNav } from '../hooks/use-nav.js';
|
|
4
|
-
import { useNavRoutes } from '../hooks/use-nav-internal.js';
|
|
5
|
-
const LinkImpl = component(({ props, slots }) => {
|
|
6
|
-
const nav = useNav();
|
|
7
|
-
const routes = useNavRoutes();
|
|
8
|
-
const handlePress = () => {
|
|
9
|
-
const route = props.to;
|
|
10
|
-
const routeDef = routes[route];
|
|
11
|
-
if (!routeDef) {
|
|
12
|
-
// Defensive: prop was typed against the registry, so this shouldn't
|
|
13
|
-
// happen at runtime — but if it does (e.g. a stale Link survived a
|
|
14
|
-
// route removal), surface a clear error rather than crashing on
|
|
15
|
-
// the navigator's lookup.
|
|
16
|
-
throw new Error(`[lynx-navigation] <Link to='${route}'>: route is not registered.`);
|
|
17
|
-
}
|
|
18
|
-
const hasParams = !!routeDef.params;
|
|
19
|
-
const action = props.replace ? nav.replace : nav.push;
|
|
20
|
-
// Branch on whether the route declares a params schema so positional
|
|
21
|
-
// args land correctly: routes-with-params shift everything one slot
|
|
22
|
-
// (push/replace overload signatures `(name, params, search?, options?)`
|
|
23
|
-
// vs `(name, search?, options?)`). Calling the wrong shape silently
|
|
24
|
-
// puts `search` into the `options` slot.
|
|
25
|
-
if (hasParams) {
|
|
26
|
-
action(route, props.params, props.search);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
action(route, props.search);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
return () => (_jsx("view", { bindtap: handlePress, children: slots.default?.() }));
|
|
33
|
-
}, { name: 'Link' });
|
|
34
|
-
/**
|
|
35
|
-
* Declarative navigation. Same typing as `nav.push` — pass `params` only when
|
|
36
|
-
* the route declares a schema. Wraps a `<view>` that fires `nav.push` (or
|
|
37
|
-
* `nav.replace` if `replace` is set) on tap.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```tsx
|
|
41
|
-
* <Link to="home">Home</Link>
|
|
42
|
-
* <Link to="profile" params={{ id: '42' }}>View profile</Link>
|
|
43
|
-
* <Link to="profile" params={{ id: '42' }} search={{ tab: 'about' }}>About</Link>
|
|
44
|
-
* <Link to="settings" replace>Settings (no back)</Link>
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* The cast widens the inferred prop type from the loose impl to the strict
|
|
48
|
-
* `LinkProps` so JSX usage gets per-route discrimination. Runtime is identical.
|
|
49
|
-
*/
|
|
50
|
-
export const Link = LinkImpl;
|
|
51
|
-
//# sourceMappingURL=Link.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAqD5D,MAAM,QAAQ,GAAG,SAAS,CAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,MAAM,WAAW,GAAG,GAAS,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,oEAAoE;YACpE,mEAAmE;YACnE,gEAAgE;YAChE,0BAA0B;YAC1B,MAAM,IAAI,KAAK,CACX,+BAA+B,KAAK,8BAA8B,CACrE,CAAC;QACN,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACtD,qEAAqE;QACrE,oEAAoE;QACpE,wEAAwE;QACxE,oEAAoE;QACpE,yCAAyC;QACzC,IAAI,SAAS,EAAE,CAAC;YACX,MAAuD,CACpD,KAAK,EACL,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAAM,CACf,CAAC;QACN,CAAC;aAAM,CAAC;YACH,MAA2C,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtE,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,GAAG,EAAE,CAAC,CAGT,eAAM,OAAO,EAAE,WAAW,YAAG,KAAK,CAAC,OAAO,EAAE,EAAE,GAAQ,CACzD,CAAC;AACN,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAErB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,QAAoD,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { component, defineProvide, useSharedValue } from '@sigx/lynx';
|
|
2
|
-
import { createNavigatorState } from '../navigator/core.js';
|
|
3
|
-
import { useNav } from '../hooks/use-nav.js';
|
|
4
|
-
import { useNavInternals, useNavRoutes } from '../hooks/use-nav-internal.js';
|
|
5
|
-
import { _setRouteRegistry } from '../url/registry.js';
|
|
6
|
-
/**
|
|
7
|
-
* Root of a navigator subtree.
|
|
8
|
-
*
|
|
9
|
-
* Creates a fresh `NavigatorState` from `routes` and provides it via
|
|
10
|
-
* `defineProvide`, so descendant `<Stack>` / `<Screen>` components and any
|
|
11
|
-
* `useNav()` / `useParams()` calls resolve through this instance.
|
|
12
|
-
*
|
|
13
|
-
* The bottom-of-stack entry is built from `initialRoute` (defaults to the
|
|
14
|
-
* first key in `routes`). For routes that declare a params schema, you must
|
|
15
|
-
* pass `initialParams` matching that schema.
|
|
16
|
-
*
|
|
17
|
-
* Mirrors the install pattern of `@sigx/router` (see
|
|
18
|
-
* `packages/router/src/router.ts:519-528`), but at component scope rather than
|
|
19
|
-
* `app.use(router)` — no app-wide singleton, so multi-navigator apps and
|
|
20
|
-
* tests get isolated state for free.
|
|
21
|
-
*/
|
|
22
|
-
export const NavigationRoot = component(({ props, slots }) => {
|
|
23
|
-
const routes = props.routes;
|
|
24
|
-
const initialName = props.initialRoute ?? Object.keys(routes)[0];
|
|
25
|
-
if (!routes[initialName]) {
|
|
26
|
-
throw new Error(`[lynx-navigation] <NavigationRoot> initialRoute='${initialName}' is not in the routes registry.`);
|
|
27
|
-
}
|
|
28
|
-
// Publish the active route registry to the URL bridge so module-level
|
|
29
|
-
// `hrefFor` / `parseHref` callers (deep-link handlers, anything outside
|
|
30
|
-
// the component tree) resolve against this navigator's routes. Last
|
|
31
|
-
// mount wins — multi-root apps that need isolation should call the
|
|
32
|
-
// URL helpers with explicit context (TBD post-1.0).
|
|
33
|
-
_setRouteRegistry(routes);
|
|
34
|
-
const initialPresentation = routes[initialName].presentation ?? 'card';
|
|
35
|
-
const initial = {
|
|
36
|
-
key: 'root',
|
|
37
|
-
route: initialName,
|
|
38
|
-
params: props.initialParams ?? {},
|
|
39
|
-
search: props.initialSearch ?? {},
|
|
40
|
-
state: undefined,
|
|
41
|
-
presentation: initialPresentation,
|
|
42
|
-
};
|
|
43
|
-
// SharedValue driving the slide-from-right push/pop transition. Created
|
|
44
|
-
// unconditionally (hooks must be) but only forwarded into the navigator
|
|
45
|
-
// when animations are enabled — `createNavigatorState` falls back to
|
|
46
|
-
// instant swaps when `progress` is undefined.
|
|
47
|
-
const progressSv = useSharedValue(0);
|
|
48
|
-
const animationsEnabled = props.animated !== false;
|
|
49
|
-
const navState = createNavigatorState({
|
|
50
|
-
routes,
|
|
51
|
-
initial,
|
|
52
|
-
progress: animationsEnabled ? progressSv : undefined,
|
|
53
|
-
});
|
|
54
|
-
defineProvide(useNav, () => navState.nav);
|
|
55
|
-
defineProvide(useNavRoutes, () => navState.routes);
|
|
56
|
-
const edgeSwipeEnabled = props.edgeSwipeEnabled !== false;
|
|
57
|
-
defineProvide(useNavInternals, () => ({
|
|
58
|
-
progress: animationsEnabled ? progressSv : null,
|
|
59
|
-
beginBackGesture: navState._gesture.beginBackGesture,
|
|
60
|
-
commitBackGesture: navState._gesture.commitBackGesture,
|
|
61
|
-
cancelBackGesture: navState._gesture.cancelBackGesture,
|
|
62
|
-
edgeSwipeEnabled,
|
|
63
|
-
screens: navState._screens,
|
|
64
|
-
}));
|
|
65
|
-
return () => slots.default?.();
|
|
66
|
-
});
|
|
67
|
-
//# sourceMappingURL=NavigationRoot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationRoot.js","sourceRoot":"","sources":["../../src/components/NavigationRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAqBvD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAsB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,WAAW,GAAW,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACX,oDAAoD,WAAW,kCAAkC,CACpG,CAAC;IACN,CAAC;IACD,sEAAsE;IACtE,wEAAwE;IACxE,oEAAoE;IACpE,mEAAmE;IACnE,oDAAoD;IACpD,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,mBAAmB,GAAiB,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC;IACrF,MAAM,OAAO,GAAe;QACxB,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;QACjC,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;QACjC,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,mBAAmB;KACpC,CAAC;IAEF,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,8CAA8C;IAC9C,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC;IACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QAClC,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACvD,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1C,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC;IAC1D,aAAa,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QAC/C,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,gBAAgB;QACpD,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;QACtD,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;QACtD,gBAAgB;QAChB,OAAO,EAAE,QAAQ,CAAC,QAAQ;KAC7B,CAAC,CAAC,CAAC;IAEJ,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `<Screen>` — declarative per-screen options + slot fills.
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
*
|
|
6
|
-
* ```tsx
|
|
7
|
-
* const ProfileScreen = component(() => () => (
|
|
8
|
-
* <Screen title="Profile" headerShown gestureEnabled>
|
|
9
|
-
* <Screen.HeaderRight>
|
|
10
|
-
* <text bindtap={onEdit}>Edit</text>
|
|
11
|
-
* </Screen.HeaderRight>
|
|
12
|
-
* <view>body…</view>
|
|
13
|
-
* </Screen>
|
|
14
|
-
* ));
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* `<Screen>` itself renders its `default` slot inline — so the body lives
|
|
18
|
-
* where you'd expect with no extra layout wrapper. The sub-components
|
|
19
|
-
* (`Screen.Header`, `Screen.HeaderLeft`, `Screen.HeaderRight`,
|
|
20
|
-
* `Screen.TabBarItem`) render `null` and write into the entry's
|
|
21
|
-
* `ScreenRegistry`. The navigator's persistent chrome reads from there.
|
|
22
|
-
*
|
|
23
|
-
* Note: `<Screen.TabBarItem>` registers a scoped slot fill on the entry's
|
|
24
|
-
* `ScreenRegistry`, but the built-in `<TabBar>` doesn't read it yet — the
|
|
25
|
-
* fill is exposed for custom tab-bar renderers (pass `renderTab` and look
|
|
26
|
-
* up the active entry's registry yourself).
|
|
27
|
-
*
|
|
28
|
-
* Sub-component placement inside `<Screen>` is conventional — sigx scopes
|
|
29
|
-
* are by component tree, so they work anywhere under the same EntryScope.
|
|
30
|
-
* Placing them as direct children of `<Screen>` keeps the call site
|
|
31
|
-
* declarative and grep-friendly.
|
|
32
|
-
*/
|
|
33
|
-
import { component, onUnmounted } from '@sigx/lynx';
|
|
34
|
-
import { useScreenRegistry } from '../hooks/use-nav-internal.js';
|
|
35
|
-
import { mergeOptions, setSlot } from '../internal/screen-registry.js';
|
|
36
|
-
const ScreenRoot = component(({ props, slots }) => {
|
|
37
|
-
const registry = useScreenRegistry();
|
|
38
|
-
// Apply options whenever the component sets up. Options are reactive
|
|
39
|
-
// through the registry's `options` signal — chrome consumers re-render
|
|
40
|
-
// on the next merge. We don't bother diffing here: the patch is small
|
|
41
|
-
// and writes only happen during setup + explicit prop changes upstream.
|
|
42
|
-
mergeOptions(registry, {
|
|
43
|
-
title: props.title,
|
|
44
|
-
headerShown: props.headerShown,
|
|
45
|
-
gestureEnabled: props.gestureEnabled,
|
|
46
|
-
});
|
|
47
|
-
return () => slots.default?.();
|
|
48
|
-
});
|
|
49
|
-
/**
|
|
50
|
-
* Build a sub-component that registers its `default` slot under `name` on
|
|
51
|
-
* the current screen's registry. Unmount removes the fill so navigating
|
|
52
|
-
* away from a screen with a `<Screen.HeaderRight>` clears that action.
|
|
53
|
-
*/
|
|
54
|
-
function makeSlotFiller(name) {
|
|
55
|
-
return component(({ slots }) => {
|
|
56
|
-
const registry = useScreenRegistry();
|
|
57
|
-
setSlot(registry, name, () => slots.default?.());
|
|
58
|
-
onUnmounted(() => setSlot(registry, name, undefined));
|
|
59
|
-
return () => null;
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
const Header = makeSlotFiller('header');
|
|
63
|
-
const HeaderLeft = makeSlotFiller('headerLeft');
|
|
64
|
-
const HeaderRight = makeSlotFiller('headerRight');
|
|
65
|
-
const TabBarItem = component(({ slots }) => {
|
|
66
|
-
const registry = useScreenRegistry();
|
|
67
|
-
setSlot(registry, 'tabBarItem', (ctx) => {
|
|
68
|
-
const out = slots.default?.();
|
|
69
|
-
// Children may be a render function `({active}) => JSX` or plain
|
|
70
|
-
// JSX (in which case `active` is ignored). Normalise to a value.
|
|
71
|
-
if (typeof out === 'function')
|
|
72
|
-
return out(ctx);
|
|
73
|
-
if (Array.isArray(out)) {
|
|
74
|
-
const first = out[0];
|
|
75
|
-
if (typeof first === 'function')
|
|
76
|
-
return first(ctx);
|
|
77
|
-
}
|
|
78
|
-
return out;
|
|
79
|
-
});
|
|
80
|
-
onUnmounted(() => setSlot(registry, 'tabBarItem', undefined));
|
|
81
|
-
return () => null;
|
|
82
|
-
});
|
|
83
|
-
/**
|
|
84
|
-
* Compound export. `Screen` is callable as a JSX element and exposes the
|
|
85
|
-
* sub-components as properties (`Screen.Header`, etc.) for the declarative
|
|
86
|
-
* call site shown in the file header.
|
|
87
|
-
*/
|
|
88
|
-
export const Screen = Object.assign(ScreenRoot, {
|
|
89
|
-
Header,
|
|
90
|
-
HeaderLeft,
|
|
91
|
-
HeaderRight,
|
|
92
|
-
TabBarItem,
|
|
93
|
-
});
|
|
94
|
-
//# sourceMappingURL=Screen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Screen.js","sourceRoot":"","sources":["../../src/components/Screen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAQvE,MAAM,UAAU,GAAG,SAAS,CAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,YAAY,CAAC,QAAQ,EAAE;QACnB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;KACvC,CAAC,CAAC;IACH,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC;AAIH;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAA6C;IACjE,OAAO,SAAS,CAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjD,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAclD,MAAM,UAAU,GAAG,SAAS,CAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACxD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9B,iEAAiE;QACjE,iEAAiE;QACjE,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,OAAQ,GAAkC,CAAC,GAAG,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,OAAQ,KAAoC,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9D,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;IAC5C,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;CACb,CAAC,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type ComponentFactory, type Define, type SharedValue } from '@sigx/lynx';
|
|
2
|
-
import type { RouteMap, StackEntry, TransitionKind, TransitionRole } from '../types.js';
|
|
3
|
-
type ScreenContainerProps = Define.Prop<'entry', StackEntry, true> & Define.Prop<'routes', RouteMap, true> & Define.Prop<'role', TransitionRole, true> & Define.Prop<'kind', TransitionKind, true> & Define.Prop<'progress', SharedValue<number>, true>;
|
|
4
|
-
/**
|
|
5
|
-
* Animated screen slot — absolutely positioned, MT-bound translateX driven by
|
|
6
|
-
* the navigator's progress SharedValue. Used during transitions to render the
|
|
7
|
-
* top + underneath entries together.
|
|
8
|
-
*
|
|
9
|
-
* Each instance is keyed by `${entry.key}-${role}-${kind}` in the parent so a
|
|
10
|
-
* role/kind change forces a fresh mount with a fresh `useAnimatedStyle`
|
|
11
|
-
* binding (the binding is set at setup and can't be re-keyed mid-life). State
|
|
12
|
-
* loss across transition boundaries is accepted in v0.2; persistent screen
|
|
13
|
-
* state (scroll position, input fields surviving navigations) is a polish
|
|
14
|
-
* item for Phase 0.5+.
|
|
15
|
-
*/
|
|
16
|
-
export declare const ScreenContainer: ComponentFactory<ScreenContainerProps, void, {}>;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=ScreenContainer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenContainer.d.ts","sourceRoot":"","sources":["../../src/components/ScreenContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,gBAAgB,EACrB,KAAK,MAAM,EAEX,KAAK,WAAW,EACnB,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAwCxF,KAAK,oBAAoB,GACnB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GACtC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GACrC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,GACzC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,GACzC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,kDA0C1B,CAAC"}
|