@buoy-gg/shared-ui 7.0.33 → 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.
Files changed (189) hide show
  1. package/lib/commonjs/JsModal.js +57 -22
  2. package/lib/commonjs/hooks/index.js +26 -0
  3. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  4. package/lib/commonjs/hooks/useChangeLog.js +55 -0
  5. package/lib/commonjs/hooks/useEventStoreEvents.js +65 -0
  6. package/lib/commonjs/hooks/usePersistedState.js +45 -10
  7. package/lib/commonjs/index.js +143 -0
  8. package/lib/commonjs/storage/definePersistedSetting.js +67 -0
  9. package/lib/commonjs/storage/index.js +8 -1
  10. package/lib/commonjs/stores/ChangeLog.js +197 -0
  11. package/lib/commonjs/stores/createToolStore.js +175 -0
  12. package/lib/commonjs/stores/index.js +15 -1
  13. package/lib/commonjs/sync/toolSyncAdapter.js +63 -0
  14. package/lib/commonjs/sync/wireForm.js +172 -0
  15. package/lib/commonjs/tools/defineTool.js +79 -0
  16. package/lib/commonjs/ui/components/ChangeRow.js +110 -0
  17. package/lib/commonjs/ui/components/ChipStrip.js +94 -0
  18. package/lib/commonjs/ui/components/DetailViewToggle.js +130 -0
  19. package/lib/commonjs/ui/components/DevToolsCard.js +3 -1
  20. package/lib/commonjs/ui/components/EntityFilterView.js +354 -0
  21. package/lib/commonjs/ui/components/ExportPreview.js +174 -0
  22. package/lib/commonjs/ui/components/InfoRow.js +90 -0
  23. package/lib/commonjs/ui/components/ModalHeader.js +40 -7
  24. package/lib/commonjs/ui/components/Pill.js +114 -0
  25. package/lib/commonjs/ui/components/ToggleRow.js +116 -0
  26. package/lib/commonjs/ui/components/ToolFooter.js +204 -0
  27. package/lib/commonjs/ui/components/index.js +100 -1
  28. package/lib/commonjs/ui/index.js +24 -2
  29. package/lib/commonjs/ui/listPresets.js +43 -0
  30. package/lib/commonjs/ui/night/primitives.js +3 -1
  31. package/lib/commonjs/utils/snapshotProviderKit.js +167 -0
  32. package/lib/commonjs/utils/stateTools.js +160 -0
  33. package/lib/module/JsModal.js +57 -22
  34. package/lib/module/hooks/index.js +3 -1
  35. package/lib/module/hooks/safe-area-impl.js +1 -1
  36. package/lib/module/hooks/useChangeLog.js +50 -0
  37. package/lib/module/hooks/useEventStoreEvents.js +61 -0
  38. package/lib/module/hooks/usePersistedState.js +44 -10
  39. package/lib/module/index.js +11 -1
  40. package/lib/module/storage/definePersistedSetting.js +63 -0
  41. package/lib/module/storage/index.js +2 -1
  42. package/lib/module/stores/ChangeLog.js +192 -0
  43. package/lib/module/stores/createToolStore.js +171 -0
  44. package/lib/module/stores/index.js +3 -1
  45. package/lib/module/sync/toolSyncAdapter.js +58 -0
  46. package/lib/module/sync/wireForm.js +159 -0
  47. package/lib/module/tools/defineTool.js +74 -0
  48. package/lib/module/ui/components/ChangeRow.js +105 -0
  49. package/lib/module/ui/components/ChipStrip.js +91 -0
  50. package/lib/module/ui/components/DetailViewToggle.js +125 -0
  51. package/lib/module/ui/components/DevToolsCard.js +3 -1
  52. package/lib/module/ui/components/EntityFilterView.js +350 -0
  53. package/lib/module/ui/components/ExportPreview.js +169 -0
  54. package/lib/module/ui/components/InfoRow.js +86 -0
  55. package/lib/module/ui/components/ModalHeader.js +40 -7
  56. package/lib/module/ui/components/Pill.js +110 -0
  57. package/lib/module/ui/components/ToggleRow.js +112 -0
  58. package/lib/module/ui/components/ToolFooter.js +196 -0
  59. package/lib/module/ui/components/index.js +10 -1
  60. package/lib/module/ui/index.js +4 -1
  61. package/lib/module/ui/listPresets.js +39 -0
  62. package/lib/module/ui/night/primitives.js +3 -1
  63. package/lib/module/utils/snapshotProviderKit.js +156 -0
  64. package/lib/module/utils/stateTools.js +154 -0
  65. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/hooks/index.d.ts +3 -1
  67. package/lib/typescript/commonjs/hooks/index.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  69. package/lib/typescript/commonjs/hooks/useChangeLog.d.ts +38 -0
  70. package/lib/typescript/commonjs/hooks/useChangeLog.d.ts.map +1 -0
  71. package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts +25 -0
  72. package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts.map +1 -0
  73. package/lib/typescript/commonjs/hooks/usePersistedState.d.ts +34 -5
  74. package/lib/typescript/commonjs/hooks/usePersistedState.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/index.d.ts +6 -1
  76. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts +39 -0
  78. package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/storage/index.d.ts +1 -0
  80. package/lib/typescript/commonjs/storage/index.d.ts.map +1 -1
  81. package/lib/typescript/commonjs/stores/ChangeLog.d.ts +100 -0
  82. package/lib/typescript/commonjs/stores/ChangeLog.d.ts.map +1 -0
  83. package/lib/typescript/commonjs/stores/createToolStore.d.ts +92 -0
  84. package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +1 -0
  85. package/lib/typescript/commonjs/stores/index.d.ts +2 -0
  86. package/lib/typescript/commonjs/stores/index.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts +66 -0
  88. package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts.map +1 -0
  89. package/lib/typescript/commonjs/sync/wireForm.d.ts +100 -0
  90. package/lib/typescript/commonjs/sync/wireForm.d.ts.map +1 -0
  91. package/lib/typescript/commonjs/tools/defineTool.d.ts +100 -0
  92. package/lib/typescript/commonjs/tools/defineTool.d.ts.map +1 -0
  93. package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts +52 -0
  94. package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts.map +1 -0
  95. package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts +41 -0
  96. package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts.map +1 -0
  97. package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts +36 -0
  98. package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts.map +1 -0
  99. package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts +8 -1
  100. package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts.map +1 -1
  101. package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts +51 -0
  102. package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts.map +1 -0
  103. package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts +48 -0
  104. package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts.map +1 -0
  105. package/lib/typescript/commonjs/ui/components/InfoRow.d.ts +33 -0
  106. package/lib/typescript/commonjs/ui/components/InfoRow.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts +31 -1
  108. package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts.map +1 -1
  109. package/lib/typescript/commonjs/ui/components/Pill.d.ts +38 -0
  110. package/lib/typescript/commonjs/ui/components/Pill.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts +33 -0
  112. package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts +69 -0
  114. package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/ui/components/index.d.ts +9 -0
  116. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/ui/index.d.ts +1 -0
  118. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/ui/listPresets.d.ts +28 -0
  120. package/lib/typescript/commonjs/ui/listPresets.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/ui/night/primitives.d.ts +3 -1
  122. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts +81 -0
  124. package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/utils/stateTools.d.ts +44 -0
  126. package/lib/typescript/commonjs/utils/stateTools.d.ts.map +1 -0
  127. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  128. package/lib/typescript/module/hooks/index.d.ts +3 -1
  129. package/lib/typescript/module/hooks/index.d.ts.map +1 -1
  130. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  131. package/lib/typescript/module/hooks/useChangeLog.d.ts +38 -0
  132. package/lib/typescript/module/hooks/useChangeLog.d.ts.map +1 -0
  133. package/lib/typescript/module/hooks/useEventStoreEvents.d.ts +25 -0
  134. package/lib/typescript/module/hooks/useEventStoreEvents.d.ts.map +1 -0
  135. package/lib/typescript/module/hooks/usePersistedState.d.ts +34 -5
  136. package/lib/typescript/module/hooks/usePersistedState.d.ts.map +1 -1
  137. package/lib/typescript/module/index.d.ts +6 -1
  138. package/lib/typescript/module/index.d.ts.map +1 -1
  139. package/lib/typescript/module/storage/definePersistedSetting.d.ts +39 -0
  140. package/lib/typescript/module/storage/definePersistedSetting.d.ts.map +1 -0
  141. package/lib/typescript/module/storage/index.d.ts +1 -0
  142. package/lib/typescript/module/storage/index.d.ts.map +1 -1
  143. package/lib/typescript/module/stores/ChangeLog.d.ts +100 -0
  144. package/lib/typescript/module/stores/ChangeLog.d.ts.map +1 -0
  145. package/lib/typescript/module/stores/createToolStore.d.ts +92 -0
  146. package/lib/typescript/module/stores/createToolStore.d.ts.map +1 -0
  147. package/lib/typescript/module/stores/index.d.ts +2 -0
  148. package/lib/typescript/module/stores/index.d.ts.map +1 -1
  149. package/lib/typescript/module/sync/toolSyncAdapter.d.ts +66 -0
  150. package/lib/typescript/module/sync/toolSyncAdapter.d.ts.map +1 -0
  151. package/lib/typescript/module/sync/wireForm.d.ts +100 -0
  152. package/lib/typescript/module/sync/wireForm.d.ts.map +1 -0
  153. package/lib/typescript/module/tools/defineTool.d.ts +100 -0
  154. package/lib/typescript/module/tools/defineTool.d.ts.map +1 -0
  155. package/lib/typescript/module/ui/components/ChangeRow.d.ts +52 -0
  156. package/lib/typescript/module/ui/components/ChangeRow.d.ts.map +1 -0
  157. package/lib/typescript/module/ui/components/ChipStrip.d.ts +41 -0
  158. package/lib/typescript/module/ui/components/ChipStrip.d.ts.map +1 -0
  159. package/lib/typescript/module/ui/components/DetailViewToggle.d.ts +36 -0
  160. package/lib/typescript/module/ui/components/DetailViewToggle.d.ts.map +1 -0
  161. package/lib/typescript/module/ui/components/DevToolsCard.d.ts +8 -1
  162. package/lib/typescript/module/ui/components/DevToolsCard.d.ts.map +1 -1
  163. package/lib/typescript/module/ui/components/EntityFilterView.d.ts +51 -0
  164. package/lib/typescript/module/ui/components/EntityFilterView.d.ts.map +1 -0
  165. package/lib/typescript/module/ui/components/ExportPreview.d.ts +48 -0
  166. package/lib/typescript/module/ui/components/ExportPreview.d.ts.map +1 -0
  167. package/lib/typescript/module/ui/components/InfoRow.d.ts +33 -0
  168. package/lib/typescript/module/ui/components/InfoRow.d.ts.map +1 -0
  169. package/lib/typescript/module/ui/components/ModalHeader.d.ts +31 -1
  170. package/lib/typescript/module/ui/components/ModalHeader.d.ts.map +1 -1
  171. package/lib/typescript/module/ui/components/Pill.d.ts +38 -0
  172. package/lib/typescript/module/ui/components/Pill.d.ts.map +1 -0
  173. package/lib/typescript/module/ui/components/ToggleRow.d.ts +33 -0
  174. package/lib/typescript/module/ui/components/ToggleRow.d.ts.map +1 -0
  175. package/lib/typescript/module/ui/components/ToolFooter.d.ts +69 -0
  176. package/lib/typescript/module/ui/components/ToolFooter.d.ts.map +1 -0
  177. package/lib/typescript/module/ui/components/index.d.ts +9 -0
  178. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  179. package/lib/typescript/module/ui/index.d.ts +1 -0
  180. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/listPresets.d.ts +28 -0
  182. package/lib/typescript/module/ui/listPresets.d.ts.map +1 -0
  183. package/lib/typescript/module/ui/night/primitives.d.ts +3 -1
  184. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -1
  185. package/lib/typescript/module/utils/snapshotProviderKit.d.ts +81 -0
  186. package/lib/typescript/module/utils/snapshotProviderKit.d.ts.map +1 -0
  187. package/lib/typescript/module/utils/stateTools.d.ts +44 -0
  188. package/lib/typescript/module/utils/stateTools.d.ts.map +1 -0
  189. package/package.json +4 -4
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Pill = Pill;
7
+ var _reactNative = require("react-native");
8
+ var _nightTheme = require("../night/nightTheme.js");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * Pill — the small caption chip every tool draws next to a row: a verdict
12
+ * ("UNUSED", "OVERSIZE"), a kind ("event", "transaction"), a link ("↔ 2"),
13
+ * a source ("MMKV"). Sixteen packages defined 150+ local pill styles that
14
+ * fall into five looks; those are the `variant`s here. Text is always in
15
+ * the pill's color (or the muted ink for `quiet`), never the series color
16
+ * of anything else.
17
+ *
18
+ * - `tinted` — color fill at 15% + border at 40% (scenarios, react-query chips)
19
+ * - `soft` — color fill at 20%, rounded, no border (events correlation badge)
20
+ * - `outline` — color border only (sentry envelope types)
21
+ * - `quiet` — neutral 6% white fill, muted text, optional color dot (assets)
22
+ * - `text` — bare colored caption, no chrome (images row badges)
23
+ */
24
+
25
+ function Pill({
26
+ label,
27
+ color = _nightTheme.night.color.textSecondary,
28
+ variant = "tinted",
29
+ size = "xs",
30
+ mono = false,
31
+ uppercase,
32
+ dot = false,
33
+ icon,
34
+ testID,
35
+ style
36
+ }) {
37
+ const upper = uppercase ?? (variant === "tinted" || variant === "quiet" || variant === "text");
38
+ const textColor = variant === "quiet" ? _nightTheme.night.color.textSecondary : color;
39
+ const chrome = variant === "tinted" ? {
40
+ backgroundColor: `${color}15`,
41
+ borderColor: `${color}40`,
42
+ borderWidth: 1
43
+ } : variant === "soft" ? {
44
+ backgroundColor: `${color}20`
45
+ } : variant === "outline" ? {
46
+ borderColor: color,
47
+ borderWidth: 1
48
+ } : variant === "quiet" ? {
49
+ backgroundColor: "rgba(255,255,255,0.06)"
50
+ } : {};
51
+ if (variant === "text") {
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
53
+ style: [styles.text, size === "sm" && styles.textSm, mono && styles.mono, upper && styles.upper, {
54
+ color: textColor
55
+ }],
56
+ testID: testID,
57
+ children: label
58
+ });
59
+ }
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
61
+ style: [styles.pill, variant === "soft" && styles.pillSoft, size === "sm" && styles.pillSm, chrome, style],
62
+ children: [icon, dot && variant === "quiet" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
63
+ style: [styles.dot, {
64
+ backgroundColor: color
65
+ }]
66
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
67
+ style: [styles.text, size === "sm" && styles.textSm, mono && styles.mono, upper && styles.upper, {
68
+ color: textColor
69
+ }],
70
+ testID: testID,
71
+ children: label
72
+ })]
73
+ });
74
+ }
75
+ const styles = _reactNative.StyleSheet.create({
76
+ pill: {
77
+ flexDirection: "row",
78
+ alignItems: "center",
79
+ alignSelf: "flex-start",
80
+ gap: 4,
81
+ paddingHorizontal: 6,
82
+ paddingVertical: 2,
83
+ borderRadius: 4
84
+ },
85
+ pillSoft: {
86
+ paddingHorizontal: 8,
87
+ borderRadius: 10
88
+ },
89
+ pillSm: {
90
+ paddingHorizontal: 8,
91
+ paddingVertical: 3
92
+ },
93
+ dot: {
94
+ width: 5,
95
+ height: 5,
96
+ borderRadius: 2.5
97
+ },
98
+ text: {
99
+ fontSize: 10,
100
+ fontWeight: "600",
101
+ letterSpacing: 0.3
102
+ },
103
+ textSm: {
104
+ fontSize: 11
105
+ },
106
+ mono: {
107
+ fontFamily: "monospace"
108
+ },
109
+ upper: {
110
+ textTransform: "uppercase",
111
+ letterSpacing: 0.5,
112
+ fontWeight: "700"
113
+ }
114
+ });
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ToggleRow = ToggleRow;
7
+ var _reactNative = require("react-native");
8
+ var _nightTheme = require("../night/nightTheme.js");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * ToggleRow — a labeled switch row for a tool's settings surface.
12
+ *
13
+ * Every settings screen (impersonate, image-overlay, highlight-updates,
14
+ * perf-monitor, scenarios, storage, ask-buoy) drew its own `toggleRow` +
15
+ * `<Switch>` pair with the same night track colors. The native switch stays
16
+ * (a custom control would be a visible design change); the row chrome,
17
+ * the label/description stack and the accent/warning tone are shared.
18
+ *
19
+ * - `variant="card"` — an elevated bordered pill row (image-overlay)
20
+ * - `variant="plain"` — a bare list row for use inside a card (impersonate)
21
+ */
22
+
23
+ function ToggleRow({
24
+ label,
25
+ description,
26
+ value,
27
+ onValueChange,
28
+ disabled = false,
29
+ tone = "accent",
30
+ accessory,
31
+ variant = "card",
32
+ emphasizeLabel = false,
33
+ testID,
34
+ style
35
+ }) {
36
+ const onColor = tone === "warning" ? _nightTheme.night.color.warning : _nightTheme.night.color.accent;
37
+ const isCard = variant === "card";
38
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
39
+ style: [styles.row, isCard ? styles.rowCard : styles.rowPlain, style],
40
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
41
+ style: styles.info,
42
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
43
+ style: styles.header,
44
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
45
+ style: [isCard ? styles.labelCard : styles.labelPlain, emphasizeLabel && {
46
+ color: onColor
47
+ }],
48
+ numberOfLines: 2,
49
+ children: label
50
+ }), accessory]
51
+ }), description ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
52
+ style: styles.description,
53
+ children: description
54
+ }) : null]
55
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
56
+ value: value,
57
+ onValueChange: onValueChange,
58
+ disabled: disabled,
59
+ testID: testID,
60
+ accessibilityLabel: label,
61
+ trackColor: isCard ? {
62
+ false: _nightTheme.night.color.surfaceElevated,
63
+ true: onColor
64
+ } : {
65
+ false: _nightTheme.night.color.border,
66
+ true: `${onColor}50`
67
+ },
68
+ thumbColor: isCard ? undefined : value ? onColor : _nightTheme.night.color.knob
69
+ })]
70
+ });
71
+ }
72
+ const styles = _reactNative.StyleSheet.create({
73
+ row: {
74
+ flexDirection: "row",
75
+ alignItems: "center",
76
+ justifyContent: "space-between"
77
+ },
78
+ rowCard: {
79
+ backgroundColor: _nightTheme.night.color.surfaceElevated,
80
+ borderRadius: 8,
81
+ borderWidth: 1,
82
+ borderColor: _nightTheme.night.color.border,
83
+ paddingHorizontal: 12,
84
+ paddingVertical: 8
85
+ },
86
+ rowPlain: {
87
+ paddingVertical: 12,
88
+ paddingHorizontal: 12
89
+ },
90
+ info: {
91
+ flex: 1,
92
+ marginRight: 12
93
+ },
94
+ header: {
95
+ flexDirection: "row",
96
+ alignItems: "center",
97
+ gap: 8,
98
+ flexWrap: "wrap"
99
+ },
100
+ labelCard: {
101
+ fontSize: 13,
102
+ fontWeight: "500",
103
+ color: _nightTheme.night.color.textSecondary
104
+ },
105
+ labelPlain: {
106
+ fontSize: 14,
107
+ fontWeight: "500",
108
+ color: _nightTheme.night.color.text
109
+ },
110
+ description: {
111
+ fontSize: 12,
112
+ color: _nightTheme.night.color.textTertiary,
113
+ lineHeight: 16,
114
+ marginTop: 3
115
+ }
116
+ });
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FooterButton = FooterButton;
7
+ exports.FooterCaption = FooterCaption;
8
+ exports.FooterMessage = FooterMessage;
9
+ exports.FooterRow = FooterRow;
10
+ exports.ToolFooter = ToolFooter;
11
+ var _reactNative = require("react-native");
12
+ var _nightTheme = require("../night/nightTheme.js");
13
+ var _useSafeAreaInsets = require("../../hooks/useSafeAreaInsets.js");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ /**
16
+ * ToolFooter — the night glass bar pinned to the bottom of a tool: dark
17
+ * backing over the star field, a hairline on top, safe-area padding when
18
+ * docked as a sheet, rounded corners when floating.
19
+ *
20
+ * `EventStepperFooter` draws this bar for the Previous/Next case; the
21
+ * images and react-query tools each re-drew it for their action bars with
22
+ * a comment saying "matches EventStepperFooter". This is that bar as a
23
+ * container, plus `FooterButton` — the mono uppercase plate button those
24
+ * action bars are made of — and the caption/message lines above the row.
25
+ */
26
+
27
+ function ToolFooter({
28
+ children,
29
+ safeArea = true,
30
+ paddingBottom = 12,
31
+ floating = false,
32
+ absolute = false,
33
+ gap = 8,
34
+ style,
35
+ testID
36
+ }) {
37
+ const insets = (0, _useSafeAreaInsets.useSafeAreaInsets)();
38
+ const bottom = typeof safeArea === "number" ? safeArea + insets.bottom : safeArea ? paddingBottom + insets.bottom : paddingBottom;
39
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
40
+ style: [styles.footer, floating && styles.footerFloating, absolute && styles.footerAbsolute, {
41
+ paddingBottom: bottom,
42
+ gap
43
+ }, style],
44
+ testID: testID,
45
+ children: children
46
+ });
47
+ }
48
+
49
+ /** A row of footer buttons. */
50
+ function FooterRow({
51
+ children,
52
+ style
53
+ }) {
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
55
+ style: [styles.row, style],
56
+ children: children
57
+ });
58
+ }
59
+
60
+ /** Tracking caption above a row ("MASS ACTIONS — every image on screen"). */
61
+ function FooterCaption({
62
+ children,
63
+ style
64
+ }) {
65
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
66
+ style: [styles.caption, style],
67
+ numberOfLines: 1,
68
+ children: children
69
+ });
70
+ }
71
+
72
+ /** Mono feedback line ("Restored 3 images"). */
73
+ function FooterMessage({
74
+ children,
75
+ tone = "info",
76
+ style
77
+ }) {
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
79
+ style: [styles.message, tone === "muted" && styles.messageMuted, style],
80
+ numberOfLines: 1,
81
+ children: children
82
+ });
83
+ }
84
+ function FooterButton({
85
+ label,
86
+ onPress,
87
+ accent = false,
88
+ active = false,
89
+ disabled = false,
90
+ icon,
91
+ flex = true,
92
+ size = "sm",
93
+ testID,
94
+ accessibilityLabel,
95
+ style
96
+ }) {
97
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
98
+ onPress: onPress,
99
+ disabled: disabled,
100
+ activeOpacity: 0.7,
101
+ accessibilityRole: "button",
102
+ accessibilityLabel: accessibilityLabel ?? label,
103
+ accessibilityState: {
104
+ disabled,
105
+ selected: active
106
+ },
107
+ testID: testID,
108
+ style: [styles.button, flex ? styles.buttonFlex : styles.buttonFixed, size === "md" && styles.buttonMd, active && styles.buttonActive, disabled && styles.disabled, style],
109
+ children: [icon, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
110
+ style: [styles.buttonText, size === "md" && styles.buttonTextMd, accent && !disabled && styles.buttonTextAccent, active && styles.buttonTextActive, disabled && styles.buttonTextDisabled],
111
+ children: label
112
+ })]
113
+ });
114
+ }
115
+ const styles = _reactNative.StyleSheet.create({
116
+ footer: {
117
+ paddingHorizontal: 12,
118
+ paddingTop: 10,
119
+ // Dark glass over the star field — the same bar EventStepperFooter draws.
120
+ backgroundColor: "rgba(5, 5, 5, 0.92)",
121
+ borderTopWidth: 1,
122
+ borderTopColor: _nightTheme.night.color.border
123
+ },
124
+ footerFloating: {
125
+ borderBottomLeftRadius: 14,
126
+ borderBottomRightRadius: 14
127
+ },
128
+ footerAbsolute: {
129
+ position: "absolute",
130
+ left: 0,
131
+ right: 0,
132
+ bottom: 0
133
+ },
134
+ row: {
135
+ flexDirection: "row",
136
+ alignItems: "center",
137
+ gap: 6
138
+ },
139
+ caption: {
140
+ color: _nightTheme.night.color.textTertiary,
141
+ fontSize: 9,
142
+ fontWeight: "700",
143
+ letterSpacing: 0.8
144
+ },
145
+ message: {
146
+ color: _nightTheme.night.color.info,
147
+ fontSize: 10,
148
+ fontFamily: "monospace"
149
+ },
150
+ messageMuted: {
151
+ color: _nightTheme.night.color.textTertiary,
152
+ fontFamily: undefined
153
+ },
154
+ button: {
155
+ flexDirection: "row",
156
+ alignItems: "center",
157
+ justifyContent: "center",
158
+ gap: 6,
159
+ paddingVertical: 8,
160
+ // No horizontal padding: six of these share one row on a phone, and the
161
+ // mono uppercase label needs every point it can get before it wraps.
162
+ paddingHorizontal: 0,
163
+ borderRadius: 6,
164
+ backgroundColor: _nightTheme.night.color.button,
165
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
166
+ borderColor: _nightTheme.night.color.border
167
+ },
168
+ buttonFlex: {
169
+ flex: 1
170
+ },
171
+ buttonFixed: {
172
+ paddingHorizontal: 10
173
+ },
174
+ buttonMd: {
175
+ paddingVertical: 8
176
+ },
177
+ buttonActive: {
178
+ backgroundColor: _nightTheme.night.color.accentSoft,
179
+ borderColor: _nightTheme.night.color.accentBorderStrong
180
+ },
181
+ buttonText: {
182
+ fontSize: 10,
183
+ fontWeight: "600",
184
+ color: _nightTheme.night.color.textSecondary,
185
+ fontFamily: "monospace",
186
+ textTransform: "uppercase"
187
+ },
188
+ buttonTextMd: {
189
+ fontSize: 11,
190
+ color: _nightTheme.night.color.text
191
+ },
192
+ buttonTextAccent: {
193
+ color: _nightTheme.night.color.warning
194
+ },
195
+ buttonTextActive: {
196
+ color: _nightTheme.night.color.accent
197
+ },
198
+ buttonTextDisabled: {
199
+ color: _nightTheme.night.color.textTertiary
200
+ },
201
+ disabled: {
202
+ opacity: 0.4
203
+ }
204
+ });
@@ -33,6 +33,18 @@ Object.defineProperty(exports, "Badge", {
33
33
  return _Badge.Badge;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "ChangeRow", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _ChangeRow.ChangeRow;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "ChipStrip", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _ChipStrip.ChipStrip;
46
+ }
47
+ });
36
48
  Object.defineProperty(exports, "ClipboardHintBanner", {
37
49
  enumerable: true,
38
50
  get: function () {
@@ -93,6 +105,12 @@ Object.defineProperty(exports, "DetailView", {
93
105
  return _DetailView.DetailView;
94
106
  }
95
107
  });
108
+ Object.defineProperty(exports, "DetailViewToggle", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _DetailViewToggle.DetailViewToggle;
112
+ }
113
+ });
96
114
  Object.defineProperty(exports, "DevToolsCard", {
97
115
  enumerable: true,
98
116
  get: function () {
@@ -123,6 +141,12 @@ Object.defineProperty(exports, "EmptyState", {
123
141
  return _EmptyState.EmptyState;
124
142
  }
125
143
  });
144
+ Object.defineProperty(exports, "EntityFilterView", {
145
+ enumerable: true,
146
+ get: function () {
147
+ return _EntityFilterView.EntityFilterView;
148
+ }
149
+ });
126
150
  Object.defineProperty(exports, "EventHistoryViewer", {
127
151
  enumerable: true,
128
152
  get: function () {
@@ -159,6 +183,12 @@ Object.defineProperty(exports, "ExpandedInfoRow", {
159
183
  return _ExpandedInfoRow.ExpandedInfoRow;
160
184
  }
161
185
  });
186
+ Object.defineProperty(exports, "ExportPreview", {
187
+ enumerable: true,
188
+ get: function () {
189
+ return _ExportPreview.ExportPreview;
190
+ }
191
+ });
162
192
  Object.defineProperty(exports, "FilterBadge", {
163
193
  enumerable: true,
164
194
  get: function () {
@@ -177,6 +207,30 @@ Object.defineProperty(exports, "FilterSection", {
177
207
  return _FilterComponents.FilterSection;
178
208
  }
179
209
  });
210
+ Object.defineProperty(exports, "FooterButton", {
211
+ enumerable: true,
212
+ get: function () {
213
+ return _ToolFooter.FooterButton;
214
+ }
215
+ });
216
+ Object.defineProperty(exports, "FooterCaption", {
217
+ enumerable: true,
218
+ get: function () {
219
+ return _ToolFooter.FooterCaption;
220
+ }
221
+ });
222
+ Object.defineProperty(exports, "FooterMessage", {
223
+ enumerable: true,
224
+ get: function () {
225
+ return _ToolFooter.FooterMessage;
226
+ }
227
+ });
228
+ Object.defineProperty(exports, "FooterRow", {
229
+ enumerable: true,
230
+ get: function () {
231
+ return _ToolFooter.FooterRow;
232
+ }
233
+ });
180
234
  Object.defineProperty(exports, "GripVerticalIcon", {
181
235
  enumerable: true,
182
236
  get: function () {
@@ -189,6 +243,12 @@ Object.defineProperty(exports, "HeaderSearchButton", {
189
243
  return _HeaderSearchButton.HeaderSearchButton;
190
244
  }
191
245
  });
246
+ Object.defineProperty(exports, "InfoRow", {
247
+ enumerable: true,
248
+ get: function () {
249
+ return _InfoRow.InfoRow;
250
+ }
251
+ });
192
252
  Object.defineProperty(exports, "InlineCopyButton", {
193
253
  enumerable: true,
194
254
  get: function () {
@@ -237,6 +297,12 @@ Object.defineProperty(exports, "NoSearchResultsEmptyState", {
237
297
  return _EmptyState.NoSearchResultsEmptyState;
238
298
  }
239
299
  });
300
+ Object.defineProperty(exports, "Pill", {
301
+ enumerable: true,
302
+ get: function () {
303
+ return _Pill.Pill;
304
+ }
305
+ });
240
306
  Object.defineProperty(exports, "PillBadge", {
241
307
  enumerable: true,
242
308
  get: function () {
@@ -297,6 +363,12 @@ Object.defineProperty(exports, "TimeDisplay", {
297
363
  return _TimeDisplay.TimeDisplay;
298
364
  }
299
365
  });
366
+ Object.defineProperty(exports, "ToggleRow", {
367
+ enumerable: true,
368
+ get: function () {
369
+ return _ToggleRow.ToggleRow;
370
+ }
371
+ });
300
372
  Object.defineProperty(exports, "ToolButton", {
301
373
  enumerable: true,
302
374
  get: function () {
@@ -309,6 +381,12 @@ Object.defineProperty(exports, "ToolEmptyState", {
309
381
  return _ToolEmptyState.ToolEmptyState;
310
382
  }
311
383
  });
384
+ Object.defineProperty(exports, "ToolFooter", {
385
+ enumerable: true,
386
+ get: function () {
387
+ return _ToolFooter.ToolFooter;
388
+ }
389
+ });
312
390
  Object.defineProperty(exports, "ToolbarClearButton", {
313
391
  enumerable: true,
314
392
  get: function () {
@@ -363,6 +441,18 @@ Object.defineProperty(exports, "setExpandableWindowControls", {
363
441
  return _WindowControls.setExpandableWindowControls;
364
442
  }
365
443
  });
444
+ Object.defineProperty(exports, "sizeWarningLevel", {
445
+ enumerable: true,
446
+ get: function () {
447
+ return _ExportPreview.sizeWarningLevel;
448
+ }
449
+ });
450
+ Object.defineProperty(exports, "useChipTap", {
451
+ enumerable: true,
452
+ get: function () {
453
+ return _ChipStrip.useChipTap;
454
+ }
455
+ });
366
456
  Object.defineProperty(exports, "windowDragProps", {
367
457
  enumerable: true,
368
458
  get: function () {
@@ -405,4 +495,13 @@ var _EventStepperFooter = require("./EventStepperFooter.js");
405
495
  var _ExpandablePopover = require("./ExpandablePopover.js");
406
496
  var _PowerToggleButton = require("./PowerToggleButton.js");
407
497
  var _ExpandedInfoRow = require("./ExpandedInfoRow.js");
408
- var _index = require("./EventHistoryViewer/index.js");
498
+ var _index = require("./EventHistoryViewer/index.js");
499
+ var _InfoRow = require("./InfoRow.js");
500
+ var _DetailViewToggle = require("./DetailViewToggle.js");
501
+ var _ChangeRow = require("./ChangeRow.js");
502
+ var _Pill = require("./Pill.js");
503
+ var _ToolFooter = require("./ToolFooter.js");
504
+ var _EntityFilterView = require("./EntityFilterView.js");
505
+ var _ToggleRow = require("./ToggleRow.js");
506
+ var _ChipStrip = require("./ChipStrip.js");
507
+ var _ExportPreview = require("./ExportPreview.js");
@@ -5,14 +5,35 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {
7
7
  toolTheme: true,
8
- CyberpunkSectionButton: true
8
+ CyberpunkSectionButton: true,
9
+ EVENT_LIST_PRESET: true,
10
+ LOG_LIST_PRESET: true,
11
+ CLIP_OFFSCREEN_CELLS: true
9
12
  };
13
+ Object.defineProperty(exports, "CLIP_OFFSCREEN_CELLS", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _listPresets.CLIP_OFFSCREEN_CELLS;
17
+ }
18
+ });
10
19
  Object.defineProperty(exports, "CyberpunkSectionButton", {
11
20
  enumerable: true,
12
21
  get: function () {
13
22
  return _CyberpunkSectionButton.CyberpunkSectionButton;
14
23
  }
15
24
  });
25
+ Object.defineProperty(exports, "EVENT_LIST_PRESET", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _listPresets.EVENT_LIST_PRESET;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "LOG_LIST_PRESET", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _listPresets.LOG_LIST_PRESET;
35
+ }
36
+ });
16
37
  Object.defineProperty(exports, "toolTheme", {
17
38
  enumerable: true,
18
39
  get: function () {
@@ -68,4 +89,5 @@ Object.keys(_index4).forEach(function (key) {
68
89
  return _index4[key];
69
90
  }
70
91
  });
71
- });
92
+ });
93
+ var _listPresets = require("./listPresets.js");
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LOG_LIST_PRESET = exports.EVENT_LIST_PRESET = exports.CLIP_OFFSCREEN_CELLS = void 0;
7
+ /**
8
+ * FlatList presets for tool lists — the tuned window/batch values and the
9
+ * E2E clipping guard that eleven list sites carried as copy-pasted props.
10
+ *
11
+ * Spread them onto a FlatList: `<FlatList {...EVENT_LIST_PRESET} … />`.
12
+ * A tool that later moves to FlashList changes this file, not eleven.
13
+ */
14
+
15
+ /**
16
+ * `removeClippedSubviews` is off in E2E bundles: clipped rows leave the
17
+ * hierarchy entirely, so a row past the fold reads to the test as "the tool
18
+ * stopped capturing".
19
+ */
20
+ const CLIP_OFFSCREEN_CELLS = exports.CLIP_OFFSCREEN_CELLS = !(typeof process !== "undefined" && process.env?.EXPO_PUBLIC_E2E);
21
+ /**
22
+ * Event / change / request lists: rows are tall-ish and arrive in bursts.
23
+ * Window and batch values are the "tuned" winner of the buoy-optimize
24
+ * batch run on the network tool (2026-07-06, batch-1783396983529-6l7w).
25
+ */
26
+ const EVENT_LIST_PRESET = exports.EVENT_LIST_PRESET = {
27
+ initialNumToRender: 12,
28
+ maxToRenderPerBatch: 8,
29
+ windowSize: 5,
30
+ updateCellsBatchingPeriod: 50,
31
+ removeClippedSubviews: CLIP_OFFSCREEN_CELLS
32
+ };
33
+
34
+ /**
35
+ * Log tails (console, sentry): rows are short single lines, the list is
36
+ * read from the bottom, and a scroll-to-end must not land on blank cells.
37
+ */
38
+ const LOG_LIST_PRESET = exports.LOG_LIST_PRESET = {
39
+ initialNumToRender: 30,
40
+ maxToRenderPerBatch: 30,
41
+ windowSize: 21,
42
+ removeClippedSubviews: CLIP_OFFSCREEN_CELLS
43
+ };
@@ -167,12 +167,14 @@ function NightChip({
167
167
  selected,
168
168
  onPress,
169
169
  disabled,
170
- icon
170
+ icon,
171
+ testID
171
172
  }) {
172
173
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
173
174
  activeOpacity: 0.7,
174
175
  disabled: disabled || !onPress,
175
176
  onPress: onPress,
177
+ testID: testID,
176
178
  style: [styles.chip, selected ? styles.chipSelected : null, disabled ? styles.chipDisabled : null],
177
179
  children: [icon, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
178
180
  style: [styles.chipText, selected ? styles.chipTextSelected : null],