@buoy-gg/network 7.0.14 → 7.0.16
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/lib/commonjs/index.web.js +395 -0
- package/lib/commonjs/network/components/DataViewer.web.js +879 -0
- package/lib/commonjs/network/components/NetworkCopyScreen.web.js +48 -0
- package/lib/commonjs/network/components/NetworkCopySettingsView.web.js +1242 -0
- package/lib/commonjs/network/components/NetworkDetailScreen.web.js +101 -0
- package/lib/commonjs/network/components/NetworkDetailStepper.web.js +296 -0
- package/lib/commonjs/network/components/NetworkEventDetailView.web.js +1498 -0
- package/lib/commonjs/network/components/NetworkEventItemCompact.web.js +802 -0
- package/lib/commonjs/network/components/NetworkFilterScreen.web.js +55 -0
- package/lib/commonjs/network/components/NetworkFilterViewV3.web.js +1310 -0
- package/lib/commonjs/network/components/NetworkHeaderLive.web.js +604 -0
- package/lib/commonjs/network/components/NetworkListScreen.js +2 -1
- package/lib/commonjs/network/components/NetworkListScreen.web.js +607 -0
- package/lib/commonjs/network/components/NetworkModal.js +12 -3
- package/lib/commonjs/network/components/NetworkNumberPrompt.web.js +232 -0
- package/lib/commonjs/network/components/NetworkOverrideEditor.web.js +942 -0
- package/lib/commonjs/network/components/NetworkOverrideHeaderButton.web.js +133 -0
- package/lib/commonjs/network/components/NetworkOverridesButton.web.js +143 -0
- package/lib/commonjs/network/components/NetworkOverridesScreen.js +160 -126
- package/lib/commonjs/network/components/NetworkOverridesScreen.web.js +830 -0
- package/lib/commonjs/network/components/NetworkSavedScreen.web.js +459 -0
- package/lib/commonjs/network/components/response-editor/Explorer.web.js +1136 -0
- package/lib/commonjs/network/hooks/useNetworkEventList.js +12 -2
- package/lib/commonjs/network/overrides/applyToXhr.js +276 -15
- package/lib/commonjs/network/utils/generateNetworkCopyText.js +32 -5
- package/lib/commonjs/network/utils/networkEventStore.js +12 -4
- package/lib/commonjs/network/utils/networkListener.js +1 -16
- package/lib/module/index.web.js +81 -0
- package/lib/module/network/components/DataViewer.web.js +875 -0
- package/lib/module/network/components/NetworkCopyScreen.web.js +44 -0
- package/lib/module/network/components/NetworkCopySettingsView.web.js +1237 -0
- package/lib/module/network/components/NetworkDetailScreen.web.js +97 -0
- package/lib/module/network/components/NetworkDetailStepper.web.js +294 -0
- package/lib/module/network/components/NetworkEventDetailView.web.js +1496 -0
- package/lib/module/network/components/NetworkEventItemCompact.web.js +800 -0
- package/lib/module/network/components/NetworkFilterScreen.web.js +51 -0
- package/lib/module/network/components/NetworkFilterViewV3.web.js +1306 -0
- package/lib/module/network/components/NetworkHeaderLive.web.js +598 -0
- package/lib/module/network/components/NetworkListScreen.js +2 -1
- package/lib/module/network/components/NetworkListScreen.web.js +605 -0
- package/lib/module/network/components/NetworkModal.js +12 -3
- package/lib/module/network/components/NetworkNumberPrompt.web.js +230 -0
- package/lib/module/network/components/NetworkOverrideEditor.web.js +939 -0
- package/lib/module/network/components/NetworkOverrideHeaderButton.web.js +131 -0
- package/lib/module/network/components/NetworkOverridesButton.web.js +141 -0
- package/lib/module/network/components/NetworkOverridesScreen.js +161 -127
- package/lib/module/network/components/NetworkOverridesScreen.web.js +826 -0
- package/lib/module/network/components/NetworkSavedScreen.web.js +457 -0
- package/lib/module/network/components/response-editor/Explorer.web.js +1133 -0
- package/lib/module/network/hooks/useNetworkEventList.js +12 -2
- package/lib/module/network/overrides/applyToXhr.js +275 -15
- package/lib/module/network/utils/generateNetworkCopyText.js +28 -1
- package/lib/module/network/utils/networkEventStore.js +12 -4
- package/lib/module/network/utils/networkListener.js +1 -16
- package/lib/typescript/index.web.d.ts +56 -0
- package/lib/typescript/index.web.d.ts.map +1 -0
- package/lib/typescript/network/components/DataViewer.web.d.ts +78 -0
- package/lib/typescript/network/components/DataViewer.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkCopyScreen.web.d.ts +27 -0
- package/lib/typescript/network/components/NetworkCopyScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkCopySettingsView.web.d.ts +68 -0
- package/lib/typescript/network/components/NetworkCopySettingsView.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkDetailScreen.web.d.ts +45 -0
- package/lib/typescript/network/components/NetworkDetailScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkDetailStepper.web.d.ts +40 -0
- package/lib/typescript/network/components/NetworkDetailStepper.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkEventDetailView.web.d.ts +67 -0
- package/lib/typescript/network/components/NetworkEventDetailView.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkEventItemCompact.web.d.ts +58 -0
- package/lib/typescript/network/components/NetworkEventItemCompact.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkFilterScreen.web.d.ts +28 -0
- package/lib/typescript/network/components/NetworkFilterScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkFilterViewV3.web.d.ts +74 -0
- package/lib/typescript/network/components/NetworkFilterViewV3.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkHeaderLive.web.d.ts +112 -0
- package/lib/typescript/network/components/NetworkHeaderLive.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkListScreen.web.d.ts +63 -0
- package/lib/typescript/network/components/NetworkListScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkNumberPrompt.web.d.ts +38 -0
- package/lib/typescript/network/components/NetworkNumberPrompt.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkOverrideEditor.web.d.ts +43 -0
- package/lib/typescript/network/components/NetworkOverrideEditor.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkOverrideHeaderButton.web.d.ts +32 -0
- package/lib/typescript/network/components/NetworkOverrideHeaderButton.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkOverridesButton.web.d.ts +26 -0
- package/lib/typescript/network/components/NetworkOverridesButton.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkOverridesScreen.d.ts +9 -0
- package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkOverridesScreen.web.d.ts +69 -0
- package/lib/typescript/network/components/NetworkOverridesScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkSavedScreen.web.d.ts +67 -0
- package/lib/typescript/network/components/NetworkSavedScreen.web.d.ts.map +1 -0
- package/lib/typescript/network/components/response-editor/Explorer.web.d.ts +56 -0
- package/lib/typescript/network/components/response-editor/Explorer.web.d.ts.map +1 -0
- package/lib/typescript/network/hooks/useNetworkEventList.d.ts +10 -0
- package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +1 -1
- package/lib/typescript/network/overrides/__tests__/applyToXhr.test.d.ts.map +1 -1
- package/lib/typescript/network/overrides/applyToXhr.d.ts +40 -14
- package/lib/typescript/network/overrides/applyToXhr.d.ts.map +1 -1
- package/lib/typescript/network/utils/generateNetworkCopyText.d.ts +34 -1
- package/lib/typescript/network/utils/generateNetworkCopyText.d.ts.map +1 -1
- package/lib/typescript/network/utils/networkEventStore.d.ts.map +1 -1
- package/lib/typescript/network/utils/networkListener.d.ts +0 -1
- package/lib/typescript/network/utils/networkListener.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkCopySettingsView.web — DOM twin of NetworkCopySettingsView.tsx.
|
|
3
|
+
*
|
|
4
|
+
* The COPY tab's configurator: quick presets (URLs / LLM / JSON / Full /
|
|
5
|
+
* Custom), the Include toggles, the output-format pick, and the collapsible
|
|
6
|
+
* live preview with its size warnings and copy action. Same preset configs,
|
|
7
|
+
* preset detection, option-change routing (`group::key` ids), mock-request
|
|
8
|
+
* fallback, size estimation and preview/copy text generation as the native
|
|
9
|
+
* file — all copied verbatim.
|
|
10
|
+
*
|
|
11
|
+
* Natively the chrome is shared-ui's `DynamicFilterView`; the web shim
|
|
12
|
+
* doesn't ship it, so this twin renders the exact subtree DynamicFilterView
|
|
13
|
+
* produces FOR THIS CONFIG (no tabs, no filter-summary, no pattern sections —
|
|
14
|
+
* those config branches are unused here), same precedent as
|
|
15
|
+
* NetworkFilterViewV3.web:
|
|
16
|
+
* 1. Facet-card sections — Presets (icon + label), Include (label-only
|
|
17
|
+
* toggles), Format (icon + label); single active-card treatment
|
|
18
|
+
* (primary fill + 2px ring + glow).
|
|
19
|
+
* 2. PREVIEW section — SectionHeader (Eye icon, title, header actions =
|
|
20
|
+
* status label + toolbar copy button) over the recessed content box;
|
|
21
|
+
* collapsed by default behind the Show Preview summary (request count +
|
|
22
|
+
* estimated size + large-payload warnings), exactly like native.
|
|
23
|
+
*
|
|
24
|
+
* shared-ui RN chrome replicated as DOM with provenance:
|
|
25
|
+
* - `buoyColors` / `macOSColors` — inlined verbatim subsets from
|
|
26
|
+
* shared/src/ui/gameUI/constants/ (DynamicFilterView + SectionHeader use
|
|
27
|
+
* buoyColors; the preview widgets use macOSColors directly).
|
|
28
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports).
|
|
29
|
+
* - `ToolbarCopyButton` — the DataViewer.web `CopyButton` twin at size 14
|
|
30
|
+
* (the native preset is exactly `CopyButton size={14}` with default
|
|
31
|
+
* colors); copies via navigator.clipboard with the same 1500ms feedback.
|
|
32
|
+
* - `DataViewer` (JSON-format preview) — the DataViewer.web twin.
|
|
33
|
+
* - `formatRelativeTime` — copied verbatim from
|
|
34
|
+
* shared/src/utils/time/formatRelativeTime.ts.
|
|
35
|
+
* - Native card glow (`shadowColor` primary, opacity 0.3, radius 8) → an
|
|
36
|
+
* equivalent CSS box-shadow.
|
|
37
|
+
*
|
|
38
|
+
* Intentional deviations (all logged):
|
|
39
|
+
* - License gating isn't part of the web port: native reads
|
|
40
|
+
* `useFeatureGate()` and wraps the view in a `ProFeatureBanner` for free
|
|
41
|
+
* users; here `isPro` is a constant true, so that branch never renders and
|
|
42
|
+
* is not ported. Copy is likewise ungated (native's CopyButton shows a
|
|
43
|
+
* Pro modal via @buoy-gg/license).
|
|
44
|
+
* - `useTickEveryMinute` (shared TickProvider context, 5s cadence as mounted
|
|
45
|
+
* by NetworkModal) → the same module-level shared 5s interval hook the
|
|
46
|
+
* compact row twin uses.
|
|
47
|
+
* - Native's `previewData` memo is dead code (computed, never read) and is
|
|
48
|
+
* dropped here — the host tsconfig runs `noUnusedLocals`.
|
|
49
|
+
* - `selectable={isPro}` on the preview text → `userSelect: "text"` (isPro
|
|
50
|
+
* is constant-true on web).
|
|
51
|
+
* - `CopySettings` / `DEFAULT_COPY_SETTINGS` are re-declared against the
|
|
52
|
+
* platform-free type in `generateNetworkCopyText` (the native module would
|
|
53
|
+
* drag react-native in); the shape is byte-identical.
|
|
54
|
+
*
|
|
55
|
+
* @platform React DOM Web
|
|
56
|
+
*/
|
|
57
|
+
import type { NetworkEvent } from "../types";
|
|
58
|
+
import type { CopySettings } from "../utils/generateNetworkCopyText";
|
|
59
|
+
export type { CopySettings };
|
|
60
|
+
/** NetworkCopySettingsView.tsx `DEFAULT_COPY_SETTINGS`, verbatim. */
|
|
61
|
+
export declare const DEFAULT_COPY_SETTINGS: CopySettings;
|
|
62
|
+
export interface NetworkCopySettingsViewProps {
|
|
63
|
+
settings: CopySettings;
|
|
64
|
+
onSettingsChange: (settings: CopySettings) => void;
|
|
65
|
+
events?: NetworkEvent[];
|
|
66
|
+
}
|
|
67
|
+
export declare function NetworkCopySettingsView({ settings, onSettingsChange, events, }: NetworkCopySettingsViewProps): import("react").JSX.Element;
|
|
68
|
+
//# sourceMappingURL=NetworkCopySettingsView.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkCopySettingsView.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkCopySettingsView.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGrE,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,EAAE,YAenC,CAAC;AAsRF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAyGD,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,gBAAgB,EAChB,MAAW,GACZ,EAAE,4BAA4B,+BAomB9B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkDetailScreen.web — DOM twin of the `NetworkDetailScreen` screen
|
|
3
|
+
* component inside NetworkModal.tsx (the native detail screen is private to
|
|
4
|
+
* the modal; web hosts compose their own shell, so the screen is exported
|
|
5
|
+
* here as the reusable piece).
|
|
6
|
+
*
|
|
7
|
+
* Same rule4 contract and the same two-cursor render strategy as native:
|
|
8
|
+
*
|
|
9
|
+
* - Hooks run unconditionally; the component returns null when not visible.
|
|
10
|
+
* - The detail chrome renders at the IMMEDIATE selection
|
|
11
|
+
* (`useSelectedNetworkEventId`) — every step, no delay — while the
|
|
12
|
+
* expensive JSON body trees wait for the settled cursor
|
|
13
|
+
* (`useNetworkBodyEventId`): `showBodies` is false exactly while the
|
|
14
|
+
* prev/next cursor is still moving, so a burst of taps renders the request
|
|
15
|
+
* you land on and none of the ones you flew past.
|
|
16
|
+
* - The ID resolves through `useLiveNetworkEvent` so a request opened while
|
|
17
|
+
* pending picks up its response/error in place.
|
|
18
|
+
* - `reportRendered` still fires after the trees commit — benchmark
|
|
19
|
+
* instrumentation, same gating as native.
|
|
20
|
+
*
|
|
21
|
+
* All hooks and the selection store are the platform-free modules native
|
|
22
|
+
* uses — REUSED, not forked. Layout: the detail body scrolls, the stepper
|
|
23
|
+
* stays pinned under it (the body owns its scroll — see the native comment);
|
|
24
|
+
* the spacer holds the footer down when the ID resolves to nothing.
|
|
25
|
+
*
|
|
26
|
+
* @platform React DOM Web
|
|
27
|
+
*/
|
|
28
|
+
import type { IgnoredPattern } from "@buoy-gg/shared-ui";
|
|
29
|
+
import type { NetworkFilter } from "../types";
|
|
30
|
+
export interface NetworkDetailScreenProps {
|
|
31
|
+
visible: boolean;
|
|
32
|
+
paused: boolean;
|
|
33
|
+
/** Pattern VALUES the detail's Filter Options section marks as ignored. */
|
|
34
|
+
ignoredPatternValues: Set<string>;
|
|
35
|
+
onTogglePattern: (value: string) => void;
|
|
36
|
+
isPro: boolean;
|
|
37
|
+
filter: NetworkFilter;
|
|
38
|
+
ignoredPatterns: readonly IgnoredPattern[];
|
|
39
|
+
/** Detail was opened from the Saved screen — step through THAT list. */
|
|
40
|
+
fromSaved: boolean;
|
|
41
|
+
savedSearch: string;
|
|
42
|
+
applySafeAreaInset: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function NetworkDetailScreen({ visible, paused, ignoredPatternValues, onTogglePattern, isPro, filter, ignoredPatterns, fromSaved, savedSearch, applySafeAreaInset, }: NetworkDetailScreenProps): import("react").JSX.Element | null;
|
|
45
|
+
//# sourceMappingURL=NetworkDetailScreen.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkDetailScreen.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailScreen.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAU9C,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,KAAK,EACL,MAAM,EACN,eAAe,EACf,SAAS,EACT,WAAW,EACX,kBAAkB,GACnB,EAAE,wBAAwB,sCA4C1B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkDetailStepper.web — DOM twin of NetworkDetailStepper.tsx.
|
|
3
|
+
*
|
|
4
|
+
* Previous/Next footer for the request DETAIL screen. The data layer is
|
|
5
|
+
* REUSED, not forked — `useNetworkEventList`, `useNetworkSaved`,
|
|
6
|
+
* `useNetworkCursor`, `networkSelectionStore`, `splitPinned` and
|
|
7
|
+
* `selectSavedEvents` are all platform-free — so the navigable order is
|
|
8
|
+
* EXACTLY what the list screen renders (`[...pinned, ...rest]`), re-scoped in
|
|
9
|
+
* place by the live filter, and detail opened from the Saved screen steps
|
|
10
|
+
* through the saved list instead. It is its own leaf for the same reason as
|
|
11
|
+
* native: it is the only part of the detail screen that needs the event LIST,
|
|
12
|
+
* so a request arriving re-renders this footer and nothing else.
|
|
13
|
+
*
|
|
14
|
+
* shared-ui RN chrome is replicated as DOM with provenance:
|
|
15
|
+
* - `EventStepperFooter` — inlined DOM twin below, values from
|
|
16
|
+
* shared/src/ui/components/EventStepperFooter.tsx (macOSColors verbatim;
|
|
17
|
+
* the native -2px shadow → an equivalent CSS box-shadow).
|
|
18
|
+
* - `applySafeAreaInset` maps `useSafeAreaInsets().bottom` →
|
|
19
|
+
* `env(safe-area-inset-bottom)` (0 on desktop webviews, the real inset on
|
|
20
|
+
* phone webviews).
|
|
21
|
+
*
|
|
22
|
+
* @platform React DOM Web
|
|
23
|
+
*/
|
|
24
|
+
import type { IgnoredPattern } from "@buoy-gg/shared-ui";
|
|
25
|
+
import type { NetworkFilter } from "../types";
|
|
26
|
+
interface NetworkDetailStepperProps {
|
|
27
|
+
paused: boolean;
|
|
28
|
+
filter: NetworkFilter;
|
|
29
|
+
ignoredPatterns: readonly IgnoredPattern[];
|
|
30
|
+
isPro: boolean;
|
|
31
|
+
/** Detail was opened from the Saved screen — step through THAT list. */
|
|
32
|
+
fromSaved: boolean;
|
|
33
|
+
/** The Saved screen's search box (lifted to the host root so both agree). */
|
|
34
|
+
savedSearch: string;
|
|
35
|
+
/** Only a bottom-sheet-style host sits on the home indicator (native). */
|
|
36
|
+
applySafeAreaInset: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare const NetworkDetailStepper: import("react").NamedExoticComponent<NetworkDetailStepperProps>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=NetworkDetailStepper.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkDetailStepper.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailStepper.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AA4O5D,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,eAAO,MAAM,oBAAoB,iEA+D/B,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkEventDetailView.web — DOM twin of NetworkEventDetailView.tsx.
|
|
3
|
+
*
|
|
4
|
+
* The request DETAIL inspector: method/status/duration header row, URL
|
|
5
|
+
* breakdown (with collapsible query parameters), error box, timing card
|
|
6
|
+
* (Started + Sent/Received + the two real timing-phase bars), collapsible
|
|
7
|
+
* Request/Response Headers, Request/Response Body (JSON trees, response
|
|
8
|
+
* expanded on arrival), and the Filter Options section — same section order,
|
|
9
|
+
* labels, defaults and styling as native. The data layer is REUSED, not
|
|
10
|
+
* forked: `useNetworkBodyResolver` (plain React context), `formatGraphQLDisplay`
|
|
11
|
+
* and the `NetworkEvent`/`NetworkTimings` types are the same modules native
|
|
12
|
+
* uses; `showBodies` carries the same settle-window contract (see the native
|
|
13
|
+
* file's prop doc) with the same fixed-height `BodyDeferred` stand-in.
|
|
14
|
+
*
|
|
15
|
+
* shared-ui RN chrome is replicated as DOM with provenance (web consumers
|
|
16
|
+
* resolve `@buoy-gg/shared-ui` to a minimal shim):
|
|
17
|
+
* - `macOSColors` — inlined verbatim subset from
|
|
18
|
+
* shared/src/ui/gameUI/constants/macOSDesignSystemColors.ts.
|
|
19
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports).
|
|
20
|
+
* - `formatBytes` / `formatDuration` — copied verbatim from
|
|
21
|
+
* shared/src/utils/formatting/dataFormatting.ts (not in the web shim).
|
|
22
|
+
* - `formatHttpStatus` — copied verbatim from
|
|
23
|
+
* shared/src/utils/formatting/httpFormatting.ts; its `gameUIColors` are the
|
|
24
|
+
* macOS theme, so the color table below carries the same resolved values.
|
|
25
|
+
* - `formatRelativeTime` — copied verbatim from
|
|
26
|
+
* shared/src/utils/time/formatRelativeTime.ts.
|
|
27
|
+
* - `DataViewer` / `InlineCopyButton` — DOM twins in ./DataViewer.web.
|
|
28
|
+
*
|
|
29
|
+
* Intentional deviations (all logged):
|
|
30
|
+
* - License gating isn't part of the web port: the view renders the Pro path
|
|
31
|
+
* (`isPro = true` everywhere native branches) — copy buttons are real
|
|
32
|
+
* clipboard copies, never upgrade prompts — and shared-ui's `UpgradeModal`
|
|
33
|
+
* is therefore not mounted (`useFeatureGate` lives behind @buoy-gg/license,
|
|
34
|
+
* outside the web port).
|
|
35
|
+
* - Copy affordances use `navigator.clipboard` via the CopyButton twin; the
|
|
36
|
+
* full-request copy keeps native's LAZY function value so no markdown is
|
|
37
|
+
* built per render.
|
|
38
|
+
* - Relative time ("12s ago") refreshes on re-render only — native mounts a
|
|
39
|
+
* `TickProvider` at the modal root; the web port's live-event subscription
|
|
40
|
+
* re-renders an open detail on every store update, which covers it in
|
|
41
|
+
* practice for in-flight requests.
|
|
42
|
+
*
|
|
43
|
+
* @platform React DOM Web
|
|
44
|
+
*/
|
|
45
|
+
import type { NetworkEvent } from "../types";
|
|
46
|
+
interface NetworkEventDetailViewProps {
|
|
47
|
+
event: NetworkEvent;
|
|
48
|
+
ignoredPatterns?: Set<string>;
|
|
49
|
+
onTogglePattern?: (pattern: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Mount the request/response BODY trees. False while the prev/next cursor is
|
|
52
|
+
* still moving — same settle-window contract as native (the body trees are
|
|
53
|
+
* the only part of this view that can't keep up with a thumb).
|
|
54
|
+
*/
|
|
55
|
+
showBodies?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Detailed inspector for a single network event — Sentry-style layout with
|
|
59
|
+
* collapsible sections and quick copy affordances.
|
|
60
|
+
*
|
|
61
|
+
* MEMOIZED for the same two render paths as native: `useLiveNetworkEvent`
|
|
62
|
+
* replays the same event object on re-subscribe, and host-root state changes
|
|
63
|
+
* re-render the shell with the detail body unchanged.
|
|
64
|
+
*/
|
|
65
|
+
export declare const NetworkEventDetailView: import("react").NamedExoticComponent<NetworkEventDetailViewProps>;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=NetworkEventDetailView.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkEventDetailView.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventDetailView.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAWH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,UAAU,CAAC;AA8S7D,UAAU,2BAA2B;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuOD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,mEA+djC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkEventItemCompact.web — DOM twin of NetworkEventItemCompact.tsx.
|
|
3
|
+
*
|
|
4
|
+
* Same row layout, prop contract, memoization and display logic as the native
|
|
5
|
+
* file: method badge + size indicators on the left, 2-line URL / GraphQL
|
|
6
|
+
* operation display in the middle (via the SAME pure `formatGraphQLDisplay`
|
|
7
|
+
* util), content-type badge + chevron on the right, absolute-positioned
|
|
8
|
+
* status/client chips top-right and duration/relative-time bottom-right, and
|
|
9
|
+
* the pinned/saved/overridden glyphs.
|
|
10
|
+
*
|
|
11
|
+
* Web consumers resolve `@buoy-gg/shared-ui` to a minimal shim (storage +
|
|
12
|
+
* JsModal + ignored-pattern helpers only), so the RN-only chrome the native
|
|
13
|
+
* row imports from shared-ui is replicated here as DOM with provenance:
|
|
14
|
+
* - `DevToolsCard` / `MethodBadge` / `TypeBadge` — inlined DOM twins, values
|
|
15
|
+
* copied from shared/src/ui/components/DevToolsCard.tsx and Badge.tsx
|
|
16
|
+
* (buoyColors palette inlined below).
|
|
17
|
+
* - `macOSColors` — inlined verbatim subset from
|
|
18
|
+
* shared/src/ui/gameUI/constants/macOSDesignSystemColors.ts.
|
|
19
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports,
|
|
20
|
+
* 24×24 viewBox, strokeWidth 2).
|
|
21
|
+
* - `formatBytes` / `formatDuration` — copied verbatim from
|
|
22
|
+
* shared/src/utils/formatting/dataFormatting.ts (not in the web shim).
|
|
23
|
+
* - `formatRelativeTime` — copied verbatim from
|
|
24
|
+
* shared/src/utils/time/formatRelativeTime.ts.
|
|
25
|
+
*
|
|
26
|
+
* Intentional deviations (all logged):
|
|
27
|
+
* - `useTickEveryMinute` (shared-ui TickProvider context, 5s interval as
|
|
28
|
+
* mounted by NetworkModal) is replaced by a module-level shared 5s interval
|
|
29
|
+
* hook — the shim exposes no `useTick`, and one shared timer keeps the
|
|
30
|
+
* native "one clock for all rows" behavior.
|
|
31
|
+
* - `onLongPress` (pin toggle) fires after a 500ms pointer hold — the native
|
|
32
|
+
* TouchableOpacity default `delayLongPress`. The click that follows a long
|
|
33
|
+
* press is swallowed, matching native semantics.
|
|
34
|
+
* - `activeOpacity={0.8}` press feedback is a pointer-driven opacity state.
|
|
35
|
+
* - `numberOfLines={2}` → `-webkit-line-clamp: 2`.
|
|
36
|
+
* - The duration/relative-time separator is two literal spaces natively;
|
|
37
|
+
* `white-space: pre` preserves them (HTML would collapse to one).
|
|
38
|
+
*
|
|
39
|
+
* @platform React DOM Web
|
|
40
|
+
*/
|
|
41
|
+
import type { NetworkEvent } from "../types";
|
|
42
|
+
interface NetworkEventItemCompactProps {
|
|
43
|
+
event: NetworkEvent;
|
|
44
|
+
onPress: (event: NetworkEvent) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Pinned/saved markers. Deliberately GLYPHS, not buttons — same rationale as
|
|
47
|
+
* native (render cost + tap area). Toggling happens on long-press here and
|
|
48
|
+
* from the detail-view header.
|
|
49
|
+
*/
|
|
50
|
+
pinned?: boolean;
|
|
51
|
+
saved?: boolean;
|
|
52
|
+
onLongPress?: (event: NetworkEvent) => void;
|
|
53
|
+
/** Rendered in the OVERRIDDEN strip — a rule covers this row right now. */
|
|
54
|
+
overridden?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export declare const NetworkEventItemCompact: import("react").NamedExoticComponent<NetworkEventItemCompactProps>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=NetworkEventItemCompact.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkEventItemCompact.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventItemCompact.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8a7C,UAAU,4BAA4B;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAyFD,eAAO,MAAM,uBAAuB,oEAkHnC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkFilterScreen.web — DOM twin of the `NetworkFilterScreen` screen
|
|
3
|
+
* component inside NetworkModal.tsx (the native screen is private to the
|
|
4
|
+
* modal; web hosts compose their own shell, so the screen is exported here as
|
|
5
|
+
* the reusable piece — same precedent as NetworkDetailScreen.web).
|
|
6
|
+
*
|
|
7
|
+
* Same rule4 contract as native: hooks run unconditionally and the component
|
|
8
|
+
* returns null when not visible; the subscription passes `paused || !visible`
|
|
9
|
+
* so a hidden screen doesn't subscribe. Facet counts read the SAME filtered
|
|
10
|
+
* list the user is looking at (`useNetworkEventList` — the platform-free hook
|
|
11
|
+
* native uses, reused, not forked).
|
|
12
|
+
*
|
|
13
|
+
* @platform React DOM Web
|
|
14
|
+
*/
|
|
15
|
+
import type { IgnoredPattern, NetworkFilter } from "../types";
|
|
16
|
+
export interface NetworkFilterScreenProps {
|
|
17
|
+
visible: boolean;
|
|
18
|
+
paused: boolean;
|
|
19
|
+
isPro: boolean;
|
|
20
|
+
filter: NetworkFilter;
|
|
21
|
+
onFilterChange: (filter: NetworkFilter) => void;
|
|
22
|
+
ignoredPatterns: IgnoredPattern[];
|
|
23
|
+
onRemovePattern: (pattern: string) => void;
|
|
24
|
+
onAddPattern: (pattern: IgnoredPattern) => void;
|
|
25
|
+
onTogglePatternMode: (pattern: string) => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function NetworkFilterScreen({ visible, paused, isPro, filter, onFilterChange, ignoredPatterns, onRemovePattern, onAddPattern, onTogglePatternMode, }: NetworkFilterScreenProps): import("react").JSX.Element | null;
|
|
28
|
+
//# sourceMappingURL=NetworkFilterScreen.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkFilterScreen.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkFilterScreen.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9D,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,GACpB,EAAE,wBAAwB,sCAoB1B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkFilterViewV3.web — DOM twin of NetworkFilterViewV3.tsx.
|
|
3
|
+
*
|
|
4
|
+
* Same props, same filter semantics, same screen inventory. Natively the
|
|
5
|
+
* screen is a thin config over shared-ui's `DynamicFilterView`; the web shim
|
|
6
|
+
* doesn't ship that component, so this twin renders the exact subtree
|
|
7
|
+
* DynamicFilterView produces FOR THIS CONFIG (no tabs, no filter-summary, no
|
|
8
|
+
* include-only, no preview — those config branches are disabled natively and
|
|
9
|
+
* are not ported):
|
|
10
|
+
*
|
|
11
|
+
* 1. Facet card sections — Status (All/Success/Error/Pending, icon + count),
|
|
12
|
+
* Method (colored method badge + count, no label — native's
|
|
13
|
+
* `showLabel = type !== "method"`), Content Type (icon + count + label).
|
|
14
|
+
* Same single-select method/content-type replace behavior
|
|
15
|
+
* (`handleDynamicFilterChange` is native's handler, verbatim).
|
|
16
|
+
* 2. ACTIVE FILTERS — add-pattern button → input (with the Match:
|
|
17
|
+
* Contains/Exact mode toggle rendered above it, native `renderExtra`),
|
|
18
|
+
* and the pattern list where each row removes on click and carries the
|
|
19
|
+
* CONTAINS/EXACT mode badge (native `renderPatternMeta`) that toggles the
|
|
20
|
+
* pattern's match mode.
|
|
21
|
+
* 3. AVAILABLE DOMAINS & URLS — host + origin+pathname suggestions from the
|
|
22
|
+
* visible events (30 per group), click-to-add with the currently selected
|
|
23
|
+
* mode; suggestions already covered by an active pattern are hidden
|
|
24
|
+
* (native's `item.includes(pattern)` filter).
|
|
25
|
+
* 4. HOW NETWORK FILTERS WORK — description + examples.
|
|
26
|
+
*
|
|
27
|
+
* shared-ui RN chrome replicated as DOM with provenance:
|
|
28
|
+
* - `buoyColors` — inlined verbatim subset from
|
|
29
|
+
* shared/src/ui/gameUI/constants/gameUIColors.ts (DynamicFilterView /
|
|
30
|
+
* SectionHeader / FilterComponents palette).
|
|
31
|
+
* - `macOSColors` — inlined verbatim subset from
|
|
32
|
+
* shared/src/ui/gameUI/constants/macOSDesignSystemColors.ts (the mode
|
|
33
|
+
* toggle/badge palette the native screen uses directly).
|
|
34
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports).
|
|
35
|
+
* - Native card glow (`shadowColor` primary, opacity 0.3, radius 8) → an
|
|
36
|
+
* equivalent CSS box-shadow; native text shadows → CSS text-shadow.
|
|
37
|
+
*
|
|
38
|
+
* Intentional deviations (all logged):
|
|
39
|
+
* - Pattern rows nest a pressable mode badge inside a pressable row; RN's
|
|
40
|
+
* inner Touchable swallows the press, DOM needs `stopPropagation()` on the
|
|
41
|
+
* badge so toggling a mode doesn't also remove the pattern.
|
|
42
|
+
* - Native's `adjustsFontSizeToFit` on the method badge has no DOM
|
|
43
|
+
* equivalent — long method names ellipsize at the same max width instead.
|
|
44
|
+
* - The add-pattern input autofocuses via the `autoFocus` attribute rather
|
|
45
|
+
* than RN's imperative focus.
|
|
46
|
+
*
|
|
47
|
+
* @platform React DOM Web
|
|
48
|
+
*/
|
|
49
|
+
import type { IgnoredPattern, NetworkEvent } from "../types";
|
|
50
|
+
interface NetworkFilter {
|
|
51
|
+
status?: "all" | "success" | "error" | "pending";
|
|
52
|
+
method?: string[];
|
|
53
|
+
contentType?: string[];
|
|
54
|
+
searchText?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface NetworkFilterViewV3Props {
|
|
57
|
+
events: NetworkEvent[];
|
|
58
|
+
filter: NetworkFilter;
|
|
59
|
+
onFilterChange: (filter: NetworkFilter) => void;
|
|
60
|
+
ignoredPatterns?: IgnoredPattern[];
|
|
61
|
+
/** Remove a pattern by its value. */
|
|
62
|
+
onRemovePattern?: (pattern: string) => void;
|
|
63
|
+
/** Add a new pattern with the user-selected mode. */
|
|
64
|
+
onAddPattern?: (pattern: IgnoredPattern) => void;
|
|
65
|
+
/** Flip a pattern's mode between `contains` and `exact`. */
|
|
66
|
+
onTogglePatternMode?: (pattern: string) => void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Control panel for filtering captured network events by status, method, and
|
|
70
|
+
* content type, plus ignored-pattern management — same surface as native.
|
|
71
|
+
*/
|
|
72
|
+
export declare function NetworkFilterViewV3({ events, filter, onFilterChange, ignoredPatterns, onRemovePattern, onAddPattern, onTogglePatternMode, }: NetworkFilterViewV3Props): import("react").JSX.Element;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=NetworkFilterViewV3.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkFilterViewV3.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkFilterViewV3.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAIH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACb,MAAM,UAAU,CAAC;AAoKlB,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,qCAAqC;IACrC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,qDAAqD;IACrD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AA6LD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAM,EACN,cAAc,EACd,eAAoB,EACpB,eAA0B,EAC1B,YAAuB,EACvB,mBAA8B,GAC/B,EAAE,wBAAwB,+BAwhB1B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkHeaderLive.web — DOM twin of NetworkHeaderLive.tsx.
|
|
3
|
+
*
|
|
4
|
+
* The header pieces that consume LIVE event data, each its own narrow store
|
|
5
|
+
* subscriber (same decomposition + hooks as native — `useNetworkBadgeCounts`,
|
|
6
|
+
* `useNetworkHasEvents`, `useNetworkSaved` are platform-free and reused, not
|
|
7
|
+
* forked):
|
|
8
|
+
*
|
|
9
|
+
* - `NetworkHeaderBadges` — success/error/pending count chips (tap toggles
|
|
10
|
+
* the status filter)
|
|
11
|
+
* - `NetworkClearButton` — trash button, enabled while the store has events
|
|
12
|
+
* - `NetworkSavedButton` — Saved-screen entry point with its live count
|
|
13
|
+
* - `NetworkDetailPinActions` — pin + save toggles for the request-DETAIL
|
|
14
|
+
* header (ported with the F3 detail-view feature; same flagsForEventId /
|
|
15
|
+
* cap logic and press-time event resolution as native)
|
|
16
|
+
* - `NetworkHeaderCopyButton` — copy-all button / labelled ⋯-menu row
|
|
17
|
+
* (ported with the F5 saved+copy feature; the copy text is the SAME
|
|
18
|
+
* platform-free `generateNetworkCopyText`, resolved lazily at press time
|
|
19
|
+
* from a live store read, exactly like native)
|
|
20
|
+
*
|
|
21
|
+
* shared-ui RN chrome is replicated as DOM with provenance (web consumers
|
|
22
|
+
* resolve `@buoy-gg/shared-ui` to a minimal shim):
|
|
23
|
+
* - `macOSColors` — inlined verbatim subset from
|
|
24
|
+
* shared/src/ui/gameUI/constants/macOSDesignSystemColors.ts.
|
|
25
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports).
|
|
26
|
+
* - The active chip's native shadow (shadowOffset 0/1, opacity 0.08,
|
|
27
|
+
* radius 2) → an equivalent CSS box-shadow.
|
|
28
|
+
* - shared-ui `CopyButton` (the Pro branch of the copy button) — inlined
|
|
29
|
+
* labelled DOM twin below: same idle/success/error icon set, 1500ms
|
|
30
|
+
* feedback, lazy function value, and label-follows-labelStyle behavior.
|
|
31
|
+
*
|
|
32
|
+
* Intentional deviations (all logged):
|
|
33
|
+
* - shared-ui CopyButton's ClipboardHintBanner and internal
|
|
34
|
+
* @buoy-gg/license Pro modal are not ported — license gating isn't part
|
|
35
|
+
* of the web port; the explicit `isPro` prop branch (native's own outer
|
|
36
|
+
* gate) still routes free users to `onUpgradePress`.
|
|
37
|
+
* - `CopySettings` is imported from the platform-free
|
|
38
|
+
* `generateNetworkCopyText` module (the native file imports it from
|
|
39
|
+
* NetworkCopySettingsView.tsx, which would drag react-native in).
|
|
40
|
+
*
|
|
41
|
+
* @platform React DOM Web
|
|
42
|
+
*/
|
|
43
|
+
import type { IgnoredPattern } from "@buoy-gg/shared-ui";
|
|
44
|
+
import type { NetworkFilter } from "../types";
|
|
45
|
+
import { type CopySettings } from "../utils/generateNetworkCopyText";
|
|
46
|
+
type StatusFilter = "success" | "error" | "pending";
|
|
47
|
+
interface NetworkHeaderBadgesProps {
|
|
48
|
+
activeStatus: NetworkFilter["status"];
|
|
49
|
+
onToggleStatus: (status: StatusFilter) => void;
|
|
50
|
+
ignoredPatterns: readonly IgnoredPattern[];
|
|
51
|
+
paused: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** Success / error / pending chips — tap to toggle the status filter. */
|
|
54
|
+
export declare function NetworkHeaderBadges({ activeStatus, onToggleStatus, ignoredPatterns, paused, }: NetworkHeaderBadgesProps): import("react").JSX.Element;
|
|
55
|
+
interface NetworkClearButtonProps {
|
|
56
|
+
paused: boolean;
|
|
57
|
+
}
|
|
58
|
+
/** Trash button — handler co-located; enabled while the store has events.
|
|
59
|
+
* Subscribes to a flip-guarded boolean, so it renders when the store goes
|
|
60
|
+
* empty↔non-empty, not on every count change. */
|
|
61
|
+
export declare function NetworkClearButton({ paused }: NetworkClearButtonProps): import("react").JSX.Element;
|
|
62
|
+
interface NetworkSavedButtonProps {
|
|
63
|
+
onPress: () => void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Entry point to the Saved screen, with its count. A self-subscribing leaf so
|
|
67
|
+
* the badge tracks the store without the modal header re-rendering.
|
|
68
|
+
*/
|
|
69
|
+
export declare function NetworkSavedButton({ onPress }: NetworkSavedButtonProps): import("react").JSX.Element;
|
|
70
|
+
interface NetworkDetailPinActionsProps {
|
|
71
|
+
isPro: boolean;
|
|
72
|
+
onUpgradePress: () => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Pin + Save toggles for the request-detail header — same self-subscribing
|
|
76
|
+
* leaf as native, for the same two reasons: the host root stays free of
|
|
77
|
+
* subscriptions, and these buttons deliberately do NOT live inside
|
|
78
|
+
* `NetworkEventDetailView` (the Events tool renders that same detail view
|
|
79
|
+
* with no saved store behind it).
|
|
80
|
+
*
|
|
81
|
+
* The event object is resolved at PRESS time (live store first, then the
|
|
82
|
+
* saved snapshot), and the selected id is SUBSCRIBED here rather than passed
|
|
83
|
+
* down, so stepping through requests doesn't rebuild the host header.
|
|
84
|
+
*/
|
|
85
|
+
export declare function NetworkDetailPinActions({ isPro, onUpgradePress, }: NetworkDetailPinActionsProps): import("react").JSX.Element;
|
|
86
|
+
interface NetworkHeaderCopyButtonProps {
|
|
87
|
+
isPro: boolean;
|
|
88
|
+
filter: NetworkFilter;
|
|
89
|
+
ignoredPatterns: readonly IgnoredPattern[];
|
|
90
|
+
copySettings: CopySettings;
|
|
91
|
+
paused: boolean;
|
|
92
|
+
onUpgradePress: () => void;
|
|
93
|
+
/**
|
|
94
|
+
* Render as a labelled row instead of a bare glyph, for the header's
|
|
95
|
+
* overflow menu. The behaviour is identical — this button owns the lazy copy
|
|
96
|
+
* value, the Pro gate and the copied/failed feedback, and a menu row that
|
|
97
|
+
* reimplemented them would be a second copy path to keep in step.
|
|
98
|
+
*/
|
|
99
|
+
label?: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Copy-all-requests button. Subscribes to a flip-guarded boolean (its
|
|
103
|
+
* enabled state); the copy text is generated at PRESS time from a live
|
|
104
|
+
* store read, so there's no per-event work and no stale closure.
|
|
105
|
+
*
|
|
106
|
+
* The Pro branch inlines shared-ui CopyButton's copy/feedback loop (same
|
|
107
|
+
* icon set, 1500ms feedback, label keeps its own color while the icon
|
|
108
|
+
* follows the state — native's `labelStyle` wins over the state color).
|
|
109
|
+
*/
|
|
110
|
+
export declare function NetworkHeaderCopyButton({ isPro, filter, ignoredPatterns, copySettings, paused, onUpgradePress, label, }: NetworkHeaderCopyButtonProps): import("react").JSX.Element;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=NetworkHeaderLive.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkHeaderLive.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAgB9C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAwH1C,KAAK,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,UAAU,wBAAwB;IAChC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,MAAM,GACP,EAAE,wBAAwB,+BA+D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAoBrE;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,+BAwBtE;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BAqF9B;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAmG9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0J5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0J5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,sCAwJxB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkListScreen.web — DOM twin of NetworkListScreen.tsx.
|
|
3
|
+
*
|
|
4
|
+
* The network tool's LIST screen: owns the event-store subscription, the
|
|
5
|
+
* scrolling list, the OVERRIDDEN and PINNED strips, empty state, disabled
|
|
6
|
+
* banner, and the free-tier locked-history footer. Identical prop contract,
|
|
7
|
+
* hook usage and derivation order as the native file — the data layer is
|
|
8
|
+
* REUSED, not forked (`useNetworkEventList`, `useNetworkSaved`,
|
|
9
|
+
* `useOverrideRules`, `ruleMatches`, `splitPinned` are all platform-free).
|
|
10
|
+
*
|
|
11
|
+
* Stable-tree contract (rule4): hooks run unconditionally, then the
|
|
12
|
+
* component returns null when not visible. The subscription is gated with
|
|
13
|
+
* `paused || !visible` so a hidden list doesn't subscribe at all.
|
|
14
|
+
*
|
|
15
|
+
* shared-ui RN chrome is replicated as DOM with provenance (web consumers
|
|
16
|
+
* resolve `@buoy-gg/shared-ui` to a minimal shim):
|
|
17
|
+
* - `macOSColors` / `buoyColors` — inlined verbatim subsets from
|
|
18
|
+
* shared/src/ui/gameUI/constants/.
|
|
19
|
+
* - Icons — inline lucide SVGs (shared-ui's icons are lucide re-exports).
|
|
20
|
+
* - `NetworkUpgradeBanner` (which itself leans on shared-ui `ProBadge` +
|
|
21
|
+
* `Zap`) — inlined DOM twin below, values from
|
|
22
|
+
* NetworkUpgradeBanner.tsx + license/FeatureGate.tsx `proBadge` styles.
|
|
23
|
+
*
|
|
24
|
+
* Intentional deviations (all logged):
|
|
25
|
+
* - FlatList virtualization → a plain scrolled div. The store caps at 500
|
|
26
|
+
* events and web rows are cheap DOM; the window/batch tuning the native
|
|
27
|
+
* list carries is a FlatList-only concern.
|
|
28
|
+
* (`extraData={savedLiveIds}` is likewise moot — plain `map` has no
|
|
29
|
+
* PureComponent bail-out to bust.)
|
|
30
|
+
* - The upgrade banner's `ProBadge` renders the static gold "PRO" — the
|
|
31
|
+
* Weekend Pass variant reads `useProAccess` from @buoy-gg/license, which
|
|
32
|
+
* is not part of the web port.
|
|
33
|
+
* - `onEventPress` opens the detail view (ported in F3 as
|
|
34
|
+
* NetworkEventDetailView.web / NetworkDetailScreen.web) — callers wire the
|
|
35
|
+
* prop to `networkSelectionStore.select`, the screen just calls it
|
|
36
|
+
* (native behavior; nothing stubbed here).
|
|
37
|
+
* - Native's row tap opens the detail view and long-press toggles the pin;
|
|
38
|
+
* both are wired identically here (long-press = 500ms pointer hold, see
|
|
39
|
+
* NetworkEventItemCompact.web).
|
|
40
|
+
*
|
|
41
|
+
* F4 integration point: `ignoredPatterns` is a prop (same as native). The
|
|
42
|
+
* native root feeds it from shared-ui's persisted `useIgnoredPatterns` store,
|
|
43
|
+
* which the web shim does not expose — web hosts pass `[]` until the filter
|
|
44
|
+
* feature lands.
|
|
45
|
+
*
|
|
46
|
+
* @platform React DOM Web
|
|
47
|
+
*/
|
|
48
|
+
import type { IgnoredPattern } from "@buoy-gg/shared-ui";
|
|
49
|
+
import type { NetworkEvent, NetworkFilter } from "../types";
|
|
50
|
+
interface NetworkListScreenProps {
|
|
51
|
+
visible: boolean;
|
|
52
|
+
paused: boolean;
|
|
53
|
+
filter: NetworkFilter;
|
|
54
|
+
ignoredPatterns: readonly IgnoredPattern[];
|
|
55
|
+
isPro: boolean;
|
|
56
|
+
searchText: string;
|
|
57
|
+
/** Row tap — the root's setSelectedEvent (inherently stable setter). */
|
|
58
|
+
onEventPress: (event: NetworkEvent) => void;
|
|
59
|
+
onUpgradePress: () => void;
|
|
60
|
+
}
|
|
61
|
+
export declare function NetworkListScreen({ visible, paused, filter, ignoredPatterns, isPro, searchText, onEventPress, onUpgradePress, }: NetworkListScreenProps): import("react").JSX.Element | null;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=NetworkListScreen.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkListScreen.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAwQ5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,sCA8HxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAqEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAqEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAy1BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD;AAED,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,oBAAyB,+BAa/D"}
|