@buoy-gg/shared-ui 7.0.32 → 7.0.34
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/JsModal.js +70 -28
- package/lib/commonjs/hooks/index.js +26 -0
- package/lib/commonjs/hooks/safe-area-impl.js +1 -1
- package/lib/commonjs/hooks/useChangeLog.js +55 -0
- package/lib/commonjs/hooks/useEventStoreEvents.js +65 -0
- package/lib/commonjs/hooks/usePersistedState.js +45 -10
- package/lib/commonjs/index.js +143 -0
- package/lib/commonjs/storage/definePersistedSetting.js +67 -0
- package/lib/commonjs/storage/devToolsStorageKeys.js +12 -0
- package/lib/commonjs/storage/index.js +8 -1
- package/lib/commonjs/stores/ChangeLog.js +197 -0
- package/lib/commonjs/stores/createToolStore.js +175 -0
- package/lib/commonjs/stores/index.js +15 -1
- package/lib/commonjs/sync/toolSyncAdapter.js +63 -0
- package/lib/commonjs/sync/wireForm.js +172 -0
- package/lib/commonjs/tools/defineTool.js +79 -0
- package/lib/commonjs/ui/components/ChangeRow.js +110 -0
- package/lib/commonjs/ui/components/ChipStrip.js +94 -0
- package/lib/commonjs/ui/components/DetailViewToggle.js +130 -0
- package/lib/commonjs/ui/components/DevToolsCard.js +3 -1
- package/lib/commonjs/ui/components/EmptyState.js +10 -2
- package/lib/commonjs/ui/components/EntityFilterView.js +354 -0
- package/lib/commonjs/ui/components/ExportPreview.js +174 -0
- package/lib/commonjs/ui/components/InfoRow.js +90 -0
- package/lib/commonjs/ui/components/ModalHeader.js +40 -7
- package/lib/commonjs/ui/components/Pill.js +114 -0
- package/lib/commonjs/ui/components/ToggleRow.js +116 -0
- package/lib/commonjs/ui/components/ToolEmptyState.js +154 -0
- package/lib/commonjs/ui/components/ToolFooter.js +204 -0
- package/lib/commonjs/ui/components/WindowControls.js +8 -5
- package/lib/commonjs/ui/components/index.js +113 -1
- package/lib/commonjs/ui/index.js +36 -2
- package/lib/commonjs/ui/listPresets.js +43 -0
- package/lib/commonjs/ui/night/primitives.js +3 -1
- package/lib/commonjs/ui/otto/OttoSprite.js +510 -0
- package/lib/commonjs/ui/otto/index.js +38 -0
- package/lib/commonjs/ui/otto/ottoEngine.js +2734 -0
- package/lib/commonjs/ui/otto/ottoSheet.js +191 -0
- package/lib/commonjs/utils/snapshotProviderKit.js +167 -0
- package/lib/commonjs/utils/stateTools.js +160 -0
- package/lib/module/JsModal.js +70 -28
- package/lib/module/hooks/index.js +3 -1
- package/lib/module/hooks/safe-area-impl.js +1 -1
- package/lib/module/hooks/useChangeLog.js +50 -0
- package/lib/module/hooks/useEventStoreEvents.js +61 -0
- package/lib/module/hooks/usePersistedState.js +44 -10
- package/lib/module/index.js +11 -1
- package/lib/module/storage/definePersistedSetting.js +63 -0
- package/lib/module/storage/devToolsStorageKeys.js +12 -0
- package/lib/module/storage/index.js +2 -1
- package/lib/module/stores/ChangeLog.js +192 -0
- package/lib/module/stores/createToolStore.js +171 -0
- package/lib/module/stores/index.js +3 -1
- package/lib/module/sync/toolSyncAdapter.js +58 -0
- package/lib/module/sync/wireForm.js +159 -0
- package/lib/module/tools/defineTool.js +74 -0
- package/lib/module/ui/components/ChangeRow.js +105 -0
- package/lib/module/ui/components/ChipStrip.js +91 -0
- package/lib/module/ui/components/DetailViewToggle.js +125 -0
- package/lib/module/ui/components/DevToolsCard.js +3 -1
- package/lib/module/ui/components/EmptyState.js +10 -2
- package/lib/module/ui/components/EntityFilterView.js +350 -0
- package/lib/module/ui/components/ExportPreview.js +169 -0
- package/lib/module/ui/components/InfoRow.js +86 -0
- package/lib/module/ui/components/ModalHeader.js +40 -7
- package/lib/module/ui/components/Pill.js +110 -0
- package/lib/module/ui/components/ToggleRow.js +112 -0
- package/lib/module/ui/components/ToolEmptyState.js +149 -0
- package/lib/module/ui/components/ToolFooter.js +196 -0
- package/lib/module/ui/components/WindowControls.js +8 -5
- package/lib/module/ui/components/index.js +13 -1
- package/lib/module/ui/index.js +7 -1
- package/lib/module/ui/listPresets.js +39 -0
- package/lib/module/ui/night/primitives.js +3 -1
- package/lib/module/ui/otto/OttoSprite.js +496 -0
- package/lib/module/ui/otto/index.js +20 -0
- package/lib/module/ui/otto/ottoEngine.js +2726 -0
- package/lib/module/ui/otto/ottoSheet.js +180 -0
- package/lib/module/utils/snapshotProviderKit.js +156 -0
- package/lib/module/utils/stateTools.js +154 -0
- package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/index.d.ts +3 -1
- package/lib/typescript/commonjs/hooks/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/commonjs/hooks/useChangeLog.d.ts +38 -0
- package/lib/typescript/commonjs/hooks/useChangeLog.d.ts.map +1 -0
- package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts +25 -0
- package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts.map +1 -0
- package/lib/typescript/commonjs/hooks/usePersistedState.d.ts +34 -5
- package/lib/typescript/commonjs/hooks/usePersistedState.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +6 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts +39 -0
- package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts.map +1 -0
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +12 -0
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
- package/lib/typescript/commonjs/storage/index.d.ts +1 -0
- package/lib/typescript/commonjs/storage/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/stores/ChangeLog.d.ts +100 -0
- package/lib/typescript/commonjs/stores/ChangeLog.d.ts.map +1 -0
- package/lib/typescript/commonjs/stores/createToolStore.d.ts +92 -0
- package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/stores/index.d.ts +2 -0
- package/lib/typescript/commonjs/stores/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts +66 -0
- package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/sync/wireForm.d.ts +100 -0
- package/lib/typescript/commonjs/sync/wireForm.d.ts.map +1 -0
- package/lib/typescript/commonjs/tools/defineTool.d.ts +100 -0
- package/lib/typescript/commonjs/tools/defineTool.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts +52 -0
- package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts +41 -0
- package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts +36 -0
- package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts +8 -1
- package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/EmptyState.d.ts +14 -1
- package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts +51 -0
- package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts +48 -0
- package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/InfoRow.d.ts +33 -0
- package/lib/typescript/commonjs/ui/components/InfoRow.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts +31 -1
- package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/Pill.d.ts +38 -0
- package/lib/typescript/commonjs/ui/components/Pill.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts +33 -0
- package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts +113 -0
- package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts +69 -0
- package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts +7 -1
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/index.d.ts +11 -0
- package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/index.d.ts +2 -0
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/listPresets.d.ts +28 -0
- package/lib/typescript/commonjs/ui/listPresets.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/night/primitives.d.ts +3 -1
- package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts +103 -0
- package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/otto/index.d.ts +19 -0
- package/lib/typescript/commonjs/ui/otto/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts +2205 -0
- package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts +73 -0
- package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts +81 -0
- package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/stateTools.d.ts +44 -0
- package/lib/typescript/commonjs/utils/stateTools.d.ts.map +1 -0
- package/lib/typescript/module/JsModal.d.ts.map +1 -1
- package/lib/typescript/module/hooks/index.d.ts +3 -1
- package/lib/typescript/module/hooks/index.d.ts.map +1 -1
- package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/module/hooks/useChangeLog.d.ts +38 -0
- package/lib/typescript/module/hooks/useChangeLog.d.ts.map +1 -0
- package/lib/typescript/module/hooks/useEventStoreEvents.d.ts +25 -0
- package/lib/typescript/module/hooks/useEventStoreEvents.d.ts.map +1 -0
- package/lib/typescript/module/hooks/usePersistedState.d.ts +34 -5
- package/lib/typescript/module/hooks/usePersistedState.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +6 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/storage/definePersistedSetting.d.ts +39 -0
- package/lib/typescript/module/storage/definePersistedSetting.d.ts.map +1 -0
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +12 -0
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
- package/lib/typescript/module/storage/index.d.ts +1 -0
- package/lib/typescript/module/storage/index.d.ts.map +1 -1
- package/lib/typescript/module/stores/ChangeLog.d.ts +100 -0
- package/lib/typescript/module/stores/ChangeLog.d.ts.map +1 -0
- package/lib/typescript/module/stores/createToolStore.d.ts +92 -0
- package/lib/typescript/module/stores/createToolStore.d.ts.map +1 -0
- package/lib/typescript/module/stores/index.d.ts +2 -0
- package/lib/typescript/module/stores/index.d.ts.map +1 -1
- package/lib/typescript/module/sync/toolSyncAdapter.d.ts +66 -0
- package/lib/typescript/module/sync/toolSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/module/sync/wireForm.d.ts +100 -0
- package/lib/typescript/module/sync/wireForm.d.ts.map +1 -0
- package/lib/typescript/module/tools/defineTool.d.ts +100 -0
- package/lib/typescript/module/tools/defineTool.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ChangeRow.d.ts +52 -0
- package/lib/typescript/module/ui/components/ChangeRow.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ChipStrip.d.ts +41 -0
- package/lib/typescript/module/ui/components/ChipStrip.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/DetailViewToggle.d.ts +36 -0
- package/lib/typescript/module/ui/components/DetailViewToggle.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/DevToolsCard.d.ts +8 -1
- package/lib/typescript/module/ui/components/DevToolsCard.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/EmptyState.d.ts +14 -1
- package/lib/typescript/module/ui/components/EmptyState.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/EntityFilterView.d.ts +51 -0
- package/lib/typescript/module/ui/components/EntityFilterView.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ExportPreview.d.ts +48 -0
- package/lib/typescript/module/ui/components/ExportPreview.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/InfoRow.d.ts +33 -0
- package/lib/typescript/module/ui/components/InfoRow.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ModalHeader.d.ts +31 -1
- package/lib/typescript/module/ui/components/ModalHeader.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/Pill.d.ts +38 -0
- package/lib/typescript/module/ui/components/Pill.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ToggleRow.d.ts +33 -0
- package/lib/typescript/module/ui/components/ToggleRow.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ToolEmptyState.d.ts +113 -0
- package/lib/typescript/module/ui/components/ToolEmptyState.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ToolFooter.d.ts +69 -0
- package/lib/typescript/module/ui/components/ToolFooter.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/WindowControls.d.ts +7 -1
- package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/index.d.ts +11 -0
- package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/index.d.ts +2 -0
- package/lib/typescript/module/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/listPresets.d.ts +28 -0
- package/lib/typescript/module/ui/listPresets.d.ts.map +1 -0
- package/lib/typescript/module/ui/night/primitives.d.ts +3 -1
- package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
- package/lib/typescript/module/ui/otto/OttoSprite.d.ts +103 -0
- package/lib/typescript/module/ui/otto/OttoSprite.d.ts.map +1 -0
- package/lib/typescript/module/ui/otto/index.d.ts +19 -0
- package/lib/typescript/module/ui/otto/index.d.ts.map +1 -0
- package/lib/typescript/module/ui/otto/ottoEngine.d.ts +2205 -0
- package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +1 -0
- package/lib/typescript/module/ui/otto/ottoSheet.d.ts +73 -0
- package/lib/typescript/module/ui/otto/ottoSheet.d.ts.map +1 -0
- package/lib/typescript/module/utils/snapshotProviderKit.d.ts +81 -0
- package/lib/typescript/module/utils/snapshotProviderKit.d.ts.map +1 -0
- package/lib/typescript/module/utils/stateTools.d.ts +44 -0
- package/lib/typescript/module/utils/stateTools.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChangeRow — one recorded change in a state tool's history list.
|
|
3
|
+
*
|
|
4
|
+
* redux, zustand and jotai each drew the same row on top of `CompactRow`:
|
|
5
|
+
* a colored status word (the slice / store / atom), a sublabel ("1.2ms ·
|
|
6
|
+
* 3 keys changed"), the primary line (changed keys or a value preview), a
|
|
7
|
+
* relative timestamp, and a right-hand badge made of a mono verb (SET,
|
|
8
|
+
* WRITE, ADDITEM) plus an icon — a lightning bolt when state actually
|
|
9
|
+
* changed, a clock when the update was slow. The three copies differed
|
|
10
|
+
* only in how they computed those strings. This component owns the drawing;
|
|
11
|
+
* tools own the strings.
|
|
12
|
+
*
|
|
13
|
+
* testID convention (unchanged from the originals): `${testID}-badge`,
|
|
14
|
+
* `${testID}-change`, `${testID}-slow`, `${testID}-status`,
|
|
15
|
+
* `${testID}-sublabel`, `${testID}-keys`.
|
|
16
|
+
*/
|
|
17
|
+
import React, { type ReactNode } from "react";
|
|
18
|
+
export interface ChangeRowProps {
|
|
19
|
+
/** Status dot + status word color (a category color or the entity's color). */
|
|
20
|
+
statusColor: string;
|
|
21
|
+
/** The status word: "Cart", "Replace", "Pending", … */
|
|
22
|
+
statusLabel: string;
|
|
23
|
+
/** Line under the status word: duration and diff summary. */
|
|
24
|
+
sublabel?: string;
|
|
25
|
+
/** The row's main line: changed keys, a preview, an action type. */
|
|
26
|
+
primaryText: string;
|
|
27
|
+
/** Capture time; rendered as a self-ticking relative time. */
|
|
28
|
+
timestamp: number;
|
|
29
|
+
/** Mono verb drawn in `statusColor` on the right: "SET", "WRITE", "ADDITEM". */
|
|
30
|
+
badgeText?: string;
|
|
31
|
+
/** Draws the ⚡ indicator (state actually changed). */
|
|
32
|
+
changed?: boolean;
|
|
33
|
+
/** Draws the 🕒 indicator instead of ⚡ (update exceeded the frame budget). */
|
|
34
|
+
slow?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Tool-specific badge content drawn BEFORE the verb (redux's async
|
|
37
|
+
* "1/2 #3" sequence chip). When set together with `badgeText`, both render.
|
|
38
|
+
*/
|
|
39
|
+
badgePrefix?: ReactNode;
|
|
40
|
+
/** Replace the whole badge. Wins over badgeText / changed / slow. */
|
|
41
|
+
customBadge?: ReactNode;
|
|
42
|
+
/**
|
|
43
|
+
* Let CompactRow draw its own plain badge with this text when there is
|
|
44
|
+
* nothing else to show (no verb, no indicator, no custom badge).
|
|
45
|
+
*/
|
|
46
|
+
plainBadgeText?: string;
|
|
47
|
+
onPress?: () => void;
|
|
48
|
+
testID?: string;
|
|
49
|
+
accessibilityLabel?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare function ChangeRow({ statusColor, statusLabel, sublabel, primaryText, timestamp, badgeText, changed, slow, badgePrefix, customBadge, plainBadgeText, onPress, testID, accessibilityLabel, }: ChangeRowProps): React.JSX.Element;
|
|
52
|
+
//# sourceMappingURL=ChangeRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangeRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ChangeRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO9C,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qEAAqE;IACrE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAe,EACf,IAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,OAAO,EACP,MAAM,EACN,kBAAkB,GACnB,EAAE,cAAc,qBAiDhB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChipStrip — a horizontally scrolling row of filter chips whose taps
|
|
3
|
+
* don't misfire while the strip is being panned.
|
|
4
|
+
*
|
|
5
|
+
* react-query drew this three times (query status, mutation status, storage
|
|
6
|
+
* type) with the same 5-point / 300 ms swipe-vs-tap discrimination. The
|
|
7
|
+
* strip and the discrimination live here; the chip is whatever the tool
|
|
8
|
+
* renders, wired through `useChipTap`.
|
|
9
|
+
*/
|
|
10
|
+
import { type ReactNode } from "react";
|
|
11
|
+
import { type GestureResponderEvent, type StyleProp, type ViewStyle } from "react-native";
|
|
12
|
+
export interface ChipTap {
|
|
13
|
+
/** Spread onto the ScrollView (or pass `scrollProps` to `ChipStrip`). */
|
|
14
|
+
scrollProps: {
|
|
15
|
+
onScrollBeginDrag: () => void;
|
|
16
|
+
onScrollEndDrag: () => void;
|
|
17
|
+
onMomentumScrollBegin: () => void;
|
|
18
|
+
onMomentumScrollEnd: () => void;
|
|
19
|
+
};
|
|
20
|
+
/** Give each chip this as `onTouchStart`. */
|
|
21
|
+
onTouchStart: (event: GestureResponderEvent) => void;
|
|
22
|
+
/** In a chip's `onPress`: run the action only when this returns true. */
|
|
23
|
+
isTap: (event?: GestureResponderEvent) => boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Swipe-vs-tap discrimination for chips inside a horizontal ScrollView.
|
|
27
|
+
* A press that moved more than a few points, or landed while the strip was
|
|
28
|
+
* still scrolling, is a pan — not a filter toggle.
|
|
29
|
+
*/
|
|
30
|
+
export declare function useChipTap(): ChipTap;
|
|
31
|
+
export interface ChipStripProps {
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
/** From `useChipTap()`. */
|
|
34
|
+
scrollProps: ChipTap["scrollProps"];
|
|
35
|
+
/** Sentry label for the scroll view. */
|
|
36
|
+
sentryLabel?: string;
|
|
37
|
+
style?: StyleProp<ViewStyle>;
|
|
38
|
+
contentStyle?: StyleProp<ViewStyle>;
|
|
39
|
+
}
|
|
40
|
+
export declare function ChipStrip({ children, scrollProps, sentryLabel, style, contentStyle }: ChipStripProps): import("react").JSX.Element;
|
|
41
|
+
//# sourceMappingURL=ChipStrip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChipStrip.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ChipStrip.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAOtB,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,WAAW,EAAE;QACX,iBAAiB,EAAE,MAAM,IAAI,CAAC;QAC9B,eAAe,EAAE,MAAM,IAAI,CAAC;QAC5B,qBAAqB,EAAE,MAAM,IAAI,CAAC;QAClC,mBAAmB,EAAE,MAAM,IAAI,CAAC;KACjC,CAAC;IACF,6CAA6C;IAC7C,YAAY,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACrD,yEAAyE;IACzE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAmCpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,+BAepG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DetailViewToggle — the row of view cards at the top of a detail screen
|
|
3
|
+
* (ACTION · STATE · DIFF, CHANGE · STATE · DIFF, …).
|
|
4
|
+
*
|
|
5
|
+
* redux, zustand and jotai each shipped their own copy, differing only in
|
|
6
|
+
* the view keys, labels and testID prefix. The cards, the accent chrome,
|
|
7
|
+
* the disabled state (diff with nothing to compare) and the a11y contract
|
|
8
|
+
* are all one component now; tools pass their `views`.
|
|
9
|
+
*/
|
|
10
|
+
import React, { type ComponentType } from "react";
|
|
11
|
+
export interface DetailViewOption<K extends string = string> {
|
|
12
|
+
key: K;
|
|
13
|
+
/** Uppercase short label, e.g. "ACTION". */
|
|
14
|
+
label: string;
|
|
15
|
+
/** One-line hint under the label. Omit for the compact (label-only) card. */
|
|
16
|
+
description?: string;
|
|
17
|
+
icon: ComponentType<{
|
|
18
|
+
size: number;
|
|
19
|
+
color: string;
|
|
20
|
+
}>;
|
|
21
|
+
/** Card accent when active. Default: the night accent. */
|
|
22
|
+
activeColor?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface DetailViewToggleProps<K extends string = string> {
|
|
25
|
+
views: readonly DetailViewOption<K>[];
|
|
26
|
+
activeView: K;
|
|
27
|
+
onViewChange: (view: K) => void;
|
|
28
|
+
/** Keys that cannot be selected right now (e.g. "diff" with no previous state). */
|
|
29
|
+
disabledKeys?: readonly K[];
|
|
30
|
+
/** `${testIDPrefix}-view-${key}` on each card. */
|
|
31
|
+
testIDPrefix?: string;
|
|
32
|
+
}
|
|
33
|
+
declare function DetailViewToggleImpl<K extends string>({ views, activeView, onViewChange, disabledKeys, testIDPrefix, }: DetailViewToggleProps<K>): React.JSX.Element;
|
|
34
|
+
export declare const DetailViewToggle: typeof DetailViewToggleImpl;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=DetailViewToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailViewToggle.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DetailViewToggle.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,EAAQ,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAIxD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACzD,GAAG,EAAE,CAAC,CAAC;IACP,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC9D,KAAK,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,mFAAmF;IACnF,YAAY,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iBAAS,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,EAC9C,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,EAAE,qBAAqB,CAAC,CAAC,CAAC,qBA8D1B;AAED,eAAO,MAAM,gBAAgB,EAAiC,OAAO,oBAAoB,CAAC"}
|
|
@@ -51,6 +51,13 @@ export interface DevToolsCardProps {
|
|
|
51
51
|
testID?: string;
|
|
52
52
|
/** Accessibility label for agents / VoiceOver */
|
|
53
53
|
accessibilityLabel?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Collapse the card into ONE accessibility element, so its label is what a
|
|
56
|
+
* reader (or an agent, or a test) gets instead of the children's text. Only
|
|
57
|
+
* meaningful on a non-interactive card — an interactive one is already an
|
|
58
|
+
* element in its own right.
|
|
59
|
+
*/
|
|
60
|
+
accessible?: boolean;
|
|
54
61
|
}
|
|
55
|
-
export declare function DevToolsCard({ children, onPress, onLongPress, isSelected, disabled, activeOpacity, style, contentStyle, testID, accessibilityLabel, }: DevToolsCardProps): import("react").JSX.Element;
|
|
62
|
+
export declare function DevToolsCard({ children, onPress, onLongPress, isSelected, disabled, activeOpacity, style, contentStyle, testID, accessibilityLabel, accessible, }: DevToolsCardProps): import("react").JSX.Element;
|
|
56
63
|
//# sourceMappingURL=DevToolsCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevToolsCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DevToolsCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAIL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,yCAAyC;;IAEzC,qDAAqD;;IAErD,oCAAoC;;IAEpC,yBAAyB;;IAEzB,yDAAyD;;IAEzD,mBAAmB;;CAEX,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DevToolsCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DevToolsCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAIL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,yCAAyC;;IAEzC,qDAAqD;;IAErD,oCAAoC;;IAEpC,yBAAyB;;IAEzB,yDAAyD;;IAEzD,mBAAmB;;CAEX,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAkB,EAClB,QAAgB,EAChB,aAAmB,EACnB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,UAAU,GACX,EAAE,iBAAiB,+BAmCnB"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { ViewStyle } from "react-native";
|
|
2
2
|
import { LucideIcon } from "../../icons";
|
|
3
|
+
import { type OttoState } from "../otto";
|
|
3
4
|
interface EmptyStateProps {
|
|
5
|
+
/**
|
|
6
|
+
* Show Otto instead of an icon, in this state.
|
|
7
|
+
*
|
|
8
|
+
* Pick the state whose `OTTO_USES` sentence is literally what this empty
|
|
9
|
+
* state is saying — `fishing` for "capture is on, nothing caught yet",
|
|
10
|
+
* `empty` for a genuinely empty list, `sad` for a search that matched
|
|
11
|
+
* nothing. A mascot in the wrong state is worse than none, because this is
|
|
12
|
+
* a debugging tool and the state reads as a status.
|
|
13
|
+
*
|
|
14
|
+
* Opt-in: with no `otto`, this renders exactly as it always has.
|
|
15
|
+
*/
|
|
16
|
+
otto?: OttoState;
|
|
4
17
|
/** Primary message to display */
|
|
5
18
|
title: string;
|
|
6
19
|
/** Optional secondary/description message */
|
|
@@ -24,7 +37,7 @@ interface EmptyStateProps {
|
|
|
24
37
|
/**
|
|
25
38
|
* Reusable empty state component for consistent empty/no-data displays
|
|
26
39
|
*/
|
|
27
|
-
export declare function EmptyState({ title, description, icon: Icon, iconSize, iconColor, action, variant, style, }: EmptyStateProps): import("react").JSX.Element;
|
|
40
|
+
export declare function EmptyState({ otto, title, description, icon: Icon, iconSize, iconColor, action, variant, style, }: EmptyStateProps): import("react").JSX.Element;
|
|
28
41
|
/**
|
|
29
42
|
* Pre-configured empty state for no data scenarios
|
|
30
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/C,UAAU,eAAe;IACvB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;IACF,6BAA6B;IAC7B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,IAAI,EAAE,IAAI,EACV,QAAa,EACb,SAAoC,EACpC,MAAM,EACN,OAAmB,EACnB,KAAK,GACN,EAAE,eAAe,+BAsCjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,gCAO/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,gCAOlC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,UAAU,GACX,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,+BAWA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntityFilterView — the "hide these by name" filter screen the state tools
|
|
3
|
+
* share: a list of registered entities (stores, atoms) you can tap to hide,
|
|
4
|
+
* the active name patterns with a remove ✕, an add-pattern affordance, and
|
|
5
|
+
* a how-it-works card.
|
|
6
|
+
*
|
|
7
|
+
* zustand and jotai each shipped their own copy (~370 lines apiece). The
|
|
8
|
+
* tool supplies the entities, the nouns and the testID prefix; the screen
|
|
9
|
+
* is drawn once.
|
|
10
|
+
*
|
|
11
|
+
* testID convention (unchanged from zustand's):
|
|
12
|
+
* `${prefix}-filters-scroll`, `${prefix}-filters-${entityKey}-count`,
|
|
13
|
+
* `${prefix}-filters-${entityKey}-${slug(name)}`, `${prefix}-filters-count`,
|
|
14
|
+
* `${prefix}-filters-add-open`, `${prefix}-filters-add-input`,
|
|
15
|
+
* `${prefix}-filters-chip-${slug(pattern)}`.
|
|
16
|
+
*/
|
|
17
|
+
export interface FilterableEntity {
|
|
18
|
+
/** The name a pattern is matched against and the label shown. */
|
|
19
|
+
name: string;
|
|
20
|
+
/** The entity's color (dot + label). */
|
|
21
|
+
color: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EntityFilterViewProps {
|
|
24
|
+
/** Registered entities; tap one to hide it. */
|
|
25
|
+
entities: FilterableEntity[];
|
|
26
|
+
/** Active hide patterns. */
|
|
27
|
+
ignoredPatterns: Set<string>;
|
|
28
|
+
/** Tapping an active pattern removes it. */
|
|
29
|
+
onTogglePattern: (pattern: string) => void;
|
|
30
|
+
onAddPattern: (pattern: string) => void;
|
|
31
|
+
/** Plural noun in caps for the headers: "STORES", "ATOMS". */
|
|
32
|
+
entityNoun: string;
|
|
33
|
+
/** Singular noun for copy: "store", "atom". */
|
|
34
|
+
entitySingular: string;
|
|
35
|
+
/** Segment used in the per-entity testIDs: "store", "atom". */
|
|
36
|
+
entityKey: string;
|
|
37
|
+
/** testID prefix, e.g. "buoy-zustand". */
|
|
38
|
+
testIDPrefix: string;
|
|
39
|
+
/** Slug an entity name / pattern for a testID. */
|
|
40
|
+
slug: (value: string) => string;
|
|
41
|
+
/** The how-it-works paragraph. */
|
|
42
|
+
howItWorks: string;
|
|
43
|
+
/** Example bullet lines (rendered as given). */
|
|
44
|
+
examples: string[];
|
|
45
|
+
/** Optional override for the add-pattern placeholder. */
|
|
46
|
+
addPlaceholder?: string;
|
|
47
|
+
/** Shown (with `${prefix}-filters-${entityKey}s-empty`) when there are no entities. */
|
|
48
|
+
emptyMessage?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare function EntityFilterView({ entities, ignoredPatterns, onTogglePattern, onAddPattern, entityNoun, entitySingular, entityKey, testIDPrefix, slug, howItWorks, examples, addPlaceholder, emptyMessage, }: EntityFilterViewProps): import("react").JSX.Element;
|
|
51
|
+
//# sourceMappingURL=EntityFilterView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityFilterView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/EntityFilterView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,4BAA4B;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,eAAe,EACf,eAAe,EACf,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,EAAE,qBAAqB,+BA2KvB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExportPreview — the collapsible "what will be copied" panel at the bottom
|
|
3
|
+
* of a copy-settings screen.
|
|
4
|
+
*
|
|
5
|
+
* Collapsed, it is a card: an eye icon, "Show Preview", a one-line summary
|
|
6
|
+
* ("14 events · ~12.3 KB (mock data)"), a chevron — and, when the estimated
|
|
7
|
+
* payload is big, an amber or red size warning under it. Expanded, it is a
|
|
8
|
+
* "Hide Preview" bar over whatever the tool renders (a DataViewer for JSON,
|
|
9
|
+
* a mono text block otherwise).
|
|
10
|
+
*
|
|
11
|
+
* network, events and highlight-updates each drew this (~120 lines apiece).
|
|
12
|
+
* Tools keep their own summary string, warning copy and body; the chrome
|
|
13
|
+
* and the size-threshold ladder live here.
|
|
14
|
+
*/
|
|
15
|
+
import type { ReactNode } from "react";
|
|
16
|
+
export type SizeWarningLevel = "none" | "warning" | "danger";
|
|
17
|
+
/** The two-step ladder every copy view used (thresholds differ per tool). */
|
|
18
|
+
export declare function sizeWarningLevel(bytes: number, thresholds: {
|
|
19
|
+
warning: number;
|
|
20
|
+
danger: number;
|
|
21
|
+
}): SizeWarningLevel;
|
|
22
|
+
export interface ExportPreviewTestIDs {
|
|
23
|
+
expand?: string;
|
|
24
|
+
collapse?: string;
|
|
25
|
+
summary?: string;
|
|
26
|
+
warning?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ExportPreviewProps {
|
|
29
|
+
expanded: boolean;
|
|
30
|
+
onExpandedChange: (next: boolean) => void;
|
|
31
|
+
/** One line under "Show Preview": counts, size, "(mock data)". */
|
|
32
|
+
summary: string;
|
|
33
|
+
warningLevel?: SizeWarningLevel;
|
|
34
|
+
/** Copy for the warning band. Defaults name "payload". */
|
|
35
|
+
warningText?: {
|
|
36
|
+
warning: string;
|
|
37
|
+
danger: string;
|
|
38
|
+
};
|
|
39
|
+
testIDs?: ExportPreviewTestIDs;
|
|
40
|
+
/**
|
|
41
|
+
* Builds the expanded body. A function, not children, so the export text
|
|
42
|
+
* is only generated once the user asks for it — building it eagerly for
|
|
43
|
+
* a large capture is what used to crash these screens.
|
|
44
|
+
*/
|
|
45
|
+
renderBody: () => ReactNode;
|
|
46
|
+
}
|
|
47
|
+
export declare function ExportPreview({ expanded, onExpandedChange, summary, warningLevel, warningText, testIDs, renderBody, }: ExportPreviewProps): import("react").JSX.Element;
|
|
48
|
+
//# sourceMappingURL=ExportPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportPreview.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ExportPreview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7D,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9C,gBAAgB,CAIlB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,0DAA0D;IAC1D,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;;;OAIG;IACH,UAAU,EAAE,MAAM,SAAS,CAAC;CAC7B;AAOD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,YAAqB,EACrB,WAA6B,EAC7B,OAAO,EACP,UAAU,GACX,EAAE,kBAAkB,+BA2DpB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InfoRow — the label / value line of every detail screen.
|
|
3
|
+
*
|
|
4
|
+
* Thirteen tools hand-rolled this (redux and zustand byte-for-byte). The
|
|
5
|
+
* night-theme recipe below is theirs: 11 px, tertiary label on the left,
|
|
6
|
+
* right-aligned value that truncates in the MIDDLE so both ends of an id or
|
|
7
|
+
* a path stay readable, optional monospace, optional color.
|
|
8
|
+
*
|
|
9
|
+
* `ellipsizeMode="middle"` truncates the RENDERED text and iOS reports the
|
|
10
|
+
* truncated string back, so anything a test reads off one of these rows has
|
|
11
|
+
* to be short enough to fit on the line.
|
|
12
|
+
*/
|
|
13
|
+
import type { ReactNode } from "react";
|
|
14
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from "react-native";
|
|
15
|
+
export interface InfoRowProps {
|
|
16
|
+
label: string;
|
|
17
|
+
/** A string/number is rendered as text; a node is rendered as-is. */
|
|
18
|
+
value?: string | number | ReactNode;
|
|
19
|
+
/** Override the value color (a status, a warning). */
|
|
20
|
+
valueColor?: string;
|
|
21
|
+
/** Monospace value (ids, paths, JSON fragments). */
|
|
22
|
+
mono?: boolean;
|
|
23
|
+
/** Show a small copy button for a text value. */
|
|
24
|
+
copyable?: boolean;
|
|
25
|
+
/** Lines the value may take before truncating. Default 1. */
|
|
26
|
+
numberOfLines?: number;
|
|
27
|
+
testID?: string;
|
|
28
|
+
style?: StyleProp<ViewStyle>;
|
|
29
|
+
labelStyle?: StyleProp<TextStyle>;
|
|
30
|
+
valueStyle?: StyleProp<TextStyle>;
|
|
31
|
+
}
|
|
32
|
+
export declare function InfoRow({ label, value, valueColor, mono, copyable, numberOfLines, testID, style, labelStyle, valueStyle, }: InfoRowProps): import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=InfoRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/InfoRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAItG,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,UAAU,EACV,IAAY,EACZ,QAAgB,EAChB,aAAiB,EACjB,MAAM,EACN,KAAK,EACL,UAAU,EACV,UAAU,GACX,EAAE,YAAY,+BA6Bd"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type TextInputProps } from "react-native";
|
|
1
2
|
import { type ReactNode } from "react";
|
|
2
3
|
interface ModalHeaderProps {
|
|
3
4
|
children: ReactNode;
|
|
@@ -54,7 +55,36 @@ interface SearchProps {
|
|
|
54
55
|
* ledger for that (still open, and RN-level).
|
|
55
56
|
*/
|
|
56
57
|
testID?: string;
|
|
58
|
+
/** Handle for the whole search row (tools that hand-rolled one used `${TOOL}-search`). */
|
|
59
|
+
containerTestID?: string;
|
|
60
|
+
/** Handle for the dismiss ✕. Default `${testID}-clear`. */
|
|
61
|
+
clearTestID?: string;
|
|
62
|
+
/** Accessibility label for the field. Default: the placeholder. */
|
|
63
|
+
accessibilityLabel?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Called when the field loses focus. The idiom most tools settled on:
|
|
66
|
+
* collapse the field only when the query is empty — a query that still
|
|
67
|
+
* filters the list must stay visible, or the narrowed list has no
|
|
68
|
+
* explanation.
|
|
69
|
+
*/
|
|
70
|
+
onBlur?: () => void;
|
|
71
|
+
/** Icon size. The managed header uses 12; hand-rolled tool headers used 14. */
|
|
72
|
+
iconSize?: number;
|
|
73
|
+
/**
|
|
74
|
+
* The other idiom (network, react-query): the field collapses when it loses
|
|
75
|
+
* focus or the user submits — unless the blur was caused by pressing the
|
|
76
|
+
* ✕, which must clear THEN close. Calls `onDismiss` (or `onCancel`).
|
|
77
|
+
*/
|
|
78
|
+
dismissOnBlur?: boolean;
|
|
79
|
+
/** Close without clearing (blur / submit under `dismissOnBlur`). Default `onCancel`. */
|
|
80
|
+
onDismiss?: () => void;
|
|
81
|
+
/** Only render the ✕ once there is text to clear. */
|
|
82
|
+
clearOnlyWhenText?: boolean;
|
|
83
|
+
/** Extra props for the input (a `sentry-label`, say). */
|
|
84
|
+
inputProps?: Partial<TextInputProps>;
|
|
85
|
+
/** `nativeID` on the row (highlight-updates excludes its own search from render tracking by it). */
|
|
86
|
+
containerNativeID?: string;
|
|
57
87
|
}
|
|
58
|
-
export declare function HeaderSearch({ value, onChangeText, onCancel, placeholder, autoFocus, testID, }: SearchProps): import("react").JSX.Element;
|
|
88
|
+
export declare function HeaderSearch({ value, onChangeText, onCancel, placeholder, autoFocus, testID, containerTestID, clearTestID, accessibilityLabel, onBlur, iconSize, dismissOnBlur, onDismiss, clearOnlyWhenText, inputProps, containerNativeID, }: SearchProps): import("react").JSX.Element;
|
|
59
89
|
export {};
|
|
60
90
|
//# sourceMappingURL=ModalHeader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ModalHeader.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ModalHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwD,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO1D,UAAU,gBAAgB;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BASzD;yBATe,WAAW;;;;;;AAY3B,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,sCAmDnF;AAGD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,YAAY,+BAsCd;AAID,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,+BAMjD;yBANe,OAAO;;;AAYvB,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;oDACgD;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,WAAyB,EACzB,SAAgB,EAChB,MAAM,EACN,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,QAAa,EACb,aAAqB,EACrB,SAAS,EACT,iBAAyB,EACzB,UAAU,EACV,iBAAiB,GAClB,EAAE,WAAW,+BAwDb"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pill — the small caption chip every tool draws next to a row: a verdict
|
|
3
|
+
* ("UNUSED", "OVERSIZE"), a kind ("event", "transaction"), a link ("↔ 2"),
|
|
4
|
+
* a source ("MMKV"). Sixteen packages defined 150+ local pill styles that
|
|
5
|
+
* fall into five looks; those are the `variant`s here. Text is always in
|
|
6
|
+
* the pill's color (or the muted ink for `quiet`), never the series color
|
|
7
|
+
* of anything else.
|
|
8
|
+
*
|
|
9
|
+
* - `tinted` — color fill at 15% + border at 40% (scenarios, react-query chips)
|
|
10
|
+
* - `soft` — color fill at 20%, rounded, no border (events correlation badge)
|
|
11
|
+
* - `outline` — color border only (sentry envelope types)
|
|
12
|
+
* - `quiet` — neutral 6% white fill, muted text, optional color dot (assets)
|
|
13
|
+
* - `text` — bare colored caption, no chrome (images row badges)
|
|
14
|
+
*/
|
|
15
|
+
import type { ReactNode } from "react";
|
|
16
|
+
import { type StyleProp, type ViewStyle } from "react-native";
|
|
17
|
+
export type PillVariant = "tinted" | "soft" | "outline" | "quiet" | "text";
|
|
18
|
+
export type PillSize = "xs" | "sm";
|
|
19
|
+
export interface PillProps {
|
|
20
|
+
label: string;
|
|
21
|
+
/** Tint. Defaults to the secondary ink. */
|
|
22
|
+
color?: string;
|
|
23
|
+
variant?: PillVariant;
|
|
24
|
+
/** `xs` = 9–10 px caption (default), `sm` = 11 px. */
|
|
25
|
+
size?: PillSize;
|
|
26
|
+
/** Monospace label (ids, verbs, codes). */
|
|
27
|
+
mono?: boolean;
|
|
28
|
+
/** Uppercase with tracking. Default true for `tinted`/`quiet`/`text`, false otherwise. */
|
|
29
|
+
uppercase?: boolean;
|
|
30
|
+
/** `quiet` only: a small dot in `color` before the label. */
|
|
31
|
+
dot?: boolean;
|
|
32
|
+
/** Leading node (an icon). */
|
|
33
|
+
icon?: ReactNode;
|
|
34
|
+
testID?: string;
|
|
35
|
+
style?: StyleProp<ViewStyle>;
|
|
36
|
+
}
|
|
37
|
+
export declare function Pill({ label, color, variant, size, mono, uppercase, dot, icon, testID, style, }: PillProps): import("react").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=Pill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pill.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/Pill.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGtF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,sDAAsD;IACtD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0FAA0F;IAC1F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,KAAiC,EACjC,OAAkB,EAClB,IAAW,EACX,IAAY,EACZ,SAAS,EACT,GAAW,EACX,IAAI,EACJ,MAAM,EACN,KAAK,GACN,EAAE,SAAS,+BAwCX"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToggleRow — a labeled switch row for a tool's settings surface.
|
|
3
|
+
*
|
|
4
|
+
* Every settings screen (impersonate, image-overlay, highlight-updates,
|
|
5
|
+
* perf-monitor, scenarios, storage, ask-buoy) drew its own `toggleRow` +
|
|
6
|
+
* `<Switch>` pair with the same night track colors. The native switch stays
|
|
7
|
+
* (a custom control would be a visible design change); the row chrome,
|
|
8
|
+
* the label/description stack and the accent/warning tone are shared.
|
|
9
|
+
*
|
|
10
|
+
* - `variant="card"` — an elevated bordered pill row (image-overlay)
|
|
11
|
+
* - `variant="plain"` — a bare list row for use inside a card (impersonate)
|
|
12
|
+
*/
|
|
13
|
+
import type { ReactNode } from "react";
|
|
14
|
+
import { type StyleProp, type ViewStyle } from "react-native";
|
|
15
|
+
export interface ToggleRowProps {
|
|
16
|
+
label: string;
|
|
17
|
+
/** Explanatory line under the label. */
|
|
18
|
+
description?: string;
|
|
19
|
+
value: boolean;
|
|
20
|
+
onValueChange: (next: boolean) => void;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
/** `warning` paints the on-state amber — the "this is destructive" idiom. */
|
|
23
|
+
tone?: "accent" | "warning";
|
|
24
|
+
/** Small nodes drawn after the label (a "Detected" chip, a "Recommended" tag). */
|
|
25
|
+
accessory?: ReactNode;
|
|
26
|
+
variant?: "card" | "plain";
|
|
27
|
+
/** Paint the label in the tone color (impersonate's dangerous rows). */
|
|
28
|
+
emphasizeLabel?: boolean;
|
|
29
|
+
testID?: string;
|
|
30
|
+
style?: StyleProp<ViewStyle>;
|
|
31
|
+
}
|
|
32
|
+
export declare function ToggleRow({ label, description, value, onValueChange, disabled, tone, accessory, variant, emphasizeLabel, testID, style, }: ToggleRowProps): import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=ToggleRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ToggleRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAkC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,WAAW,EACX,KAAK,EACL,aAAa,EACb,QAAgB,EAChB,IAAe,EACf,SAAS,EACT,OAAgB,EAChB,cAAsB,EACtB,MAAM,EACN,KAAK,GACN,EAAE,cAAc,+BAmChB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one "nothing here" panel, for every tool that shows a list.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS
|
|
5
|
+
*
|
|
6
|
+
* Every capture tool — network, events, highlight-updates, storage, zustand,
|
|
7
|
+
* redux, jotai, console — renders the same panel with the same four causes and
|
|
8
|
+
* different nouns. Written out per tool, that produced four copies of the same
|
|
9
|
+
* layout (each of which had to be re-inset by hand the first time a sentence
|
|
10
|
+
* was longer than "No events yet"), and four independent guesses at the
|
|
11
|
+
* PRECEDENCE between those causes. The guesses disagreed, and the disagreements
|
|
12
|
+
* were bugs:
|
|
13
|
+
*
|
|
14
|
+
* - A search that matched nothing showed "Enable tracking to start
|
|
15
|
+
* capturing" — pointing at a toggle that was already on.
|
|
16
|
+
* - Turning every source chip off showed "Events will appear here as they
|
|
17
|
+
* occur" — inviting you to go generate events that were already in the
|
|
18
|
+
* store, behind your own filter.
|
|
19
|
+
* - Typing into a search box while the store was empty produced no
|
|
20
|
+
* acknowledgement of the query at all, which reads as a dead search box.
|
|
21
|
+
*
|
|
22
|
+
* So the precedence lives here, once, and each tool supplies only what is
|
|
23
|
+
* genuinely its own: the noun, and what "switched on but waiting" looks like
|
|
24
|
+
* for it (network fishes, events listens, the highlighter stares).
|
|
25
|
+
*
|
|
26
|
+
* SPLIT IN TWO ON PURPOSE
|
|
27
|
+
*
|
|
28
|
+
* `resolveListEmptyState` is a pure function returning `{ otto, title,
|
|
29
|
+
* message }`, and `ToolEmptyState` renders that object. Tools with a cause
|
|
30
|
+
* nobody else has — storage's "no issues found" (which is a PASS, not a
|
|
31
|
+
* failure), zustand's unregistered store — resolve the common cases and
|
|
32
|
+
* substitute their own, or skip the resolver and hand the shell a literal.
|
|
33
|
+
* Adding a mascot to every tool at once is then one edit in this file, which is
|
|
34
|
+
* also what makes the Flutter and Swift ports one component to mirror instead
|
|
35
|
+
* of eight.
|
|
36
|
+
*/
|
|
37
|
+
import { type ViewStyle } from "react-native";
|
|
38
|
+
import { type OttoState } from "../otto";
|
|
39
|
+
/** What a "nothing here" panel says. */
|
|
40
|
+
export interface ToolEmptyContent {
|
|
41
|
+
/**
|
|
42
|
+
* Otto's state. It must be TRUE of the branch that chose it — this is a
|
|
43
|
+
* debugging tool, and a mascot in the wrong state reads as a status. See
|
|
44
|
+
* `OTTO_USES` in the engine for what each one claims.
|
|
45
|
+
*/
|
|
46
|
+
otto: OttoState;
|
|
47
|
+
title: string;
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ToolEmptyStateProps extends ToolEmptyContent {
|
|
51
|
+
/**
|
|
52
|
+
* Base testID. Renders `${testID}` on the container, `${testID}-title` and
|
|
53
|
+
* `${testID}-text` on the two lines — the shape the existing e2e suites
|
|
54
|
+
* already select on.
|
|
55
|
+
*/
|
|
56
|
+
testID?: string;
|
|
57
|
+
style?: ViewStyle;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The panel itself: Otto, a heading, a sentence. Nothing else — this only ever
|
|
61
|
+
* renders where the alternative is a blank body, so it has no actions and no
|
|
62
|
+
* decoration to compete with the list it stands in for.
|
|
63
|
+
*/
|
|
64
|
+
export declare function ToolEmptyState({ otto, title, message, testID, style, }: ToolEmptyStateProps): import("react").JSX.Element;
|
|
65
|
+
export interface ListEmptyFacts {
|
|
66
|
+
/**
|
|
67
|
+
* Plural noun for what the list holds — "requests", "events", "components",
|
|
68
|
+
* "changes", "keys". Used in the generated sentences.
|
|
69
|
+
*/
|
|
70
|
+
subject: string;
|
|
71
|
+
/**
|
|
72
|
+
* Past participle for how they got here: "captured" (default), "tracked",
|
|
73
|
+
* "registered". Reads as "None of the 176 tracked components match".
|
|
74
|
+
*/
|
|
75
|
+
verb?: string;
|
|
76
|
+
/**
|
|
77
|
+
* The live search box. A non-empty query ALWAYS wins: whatever else is
|
|
78
|
+
* wrong, the user just typed something and is watching for it to land, and
|
|
79
|
+
* a panel that answers with anything else reads as a search box that does
|
|
80
|
+
* nothing. Never gate this on there being something to match.
|
|
81
|
+
*/
|
|
82
|
+
search?: string;
|
|
83
|
+
/**
|
|
84
|
+
* How many items exist BEFORE the user's own search and filters — the
|
|
85
|
+
* denominator that separates "your filter hid it" from "nothing happened".
|
|
86
|
+
* Leave undefined and both of those collapse into `waiting`/`paused`.
|
|
87
|
+
*/
|
|
88
|
+
total?: number;
|
|
89
|
+
/**
|
|
90
|
+
* The tool's capture/tracking switch. `false` selects `paused`; leave it
|
|
91
|
+
* undefined for tools that have no such switch.
|
|
92
|
+
*/
|
|
93
|
+
capturing?: boolean;
|
|
94
|
+
/** Otto + copy for "switched on, nothing has arrived yet". */
|
|
95
|
+
waiting: ToolEmptyContent;
|
|
96
|
+
/** Copy for "switched off". Otto defaults to `paused`. */
|
|
97
|
+
paused?: Partial<ToolEmptyContent>;
|
|
98
|
+
/**
|
|
99
|
+
* A harder blocker to name in the search branch's body instead of the
|
|
100
|
+
* generated sentence — "Every source chip is off, so there is nothing to
|
|
101
|
+
* search." Clearing the query would not help, and saying "clear the search
|
|
102
|
+
* to see them" when it would not is the lie this exists to prevent.
|
|
103
|
+
*/
|
|
104
|
+
blocked?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Which "nothing here" this is, in the order the facts answer the question.
|
|
108
|
+
*
|
|
109
|
+
* A typed query first (see `search`), then the user's filters, then the
|
|
110
|
+
* capture switch, then the honest "nothing yet".
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveListEmptyState(facts: ListEmptyFacts): ToolEmptyContent;
|
|
113
|
+
//# sourceMappingURL=ToolEmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolEmptyState.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ToolEmptyState.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAG/C,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,GACN,EAAE,mBAAmB,+BAmBrB;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,OAAO,EAAE,gBAAgB,CAAC;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAmD7E"}
|