@buoy-gg/shared-ui 2.1.5 → 2.1.8

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 (59) hide show
  1. package/lib/commonjs/env/EnvironmentIndicator.js +3 -1
  2. package/lib/commonjs/env/EnvironmentSelector.js +3 -2
  3. package/lib/commonjs/env/EnvironmentSelectorInline.js +3 -2
  4. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  5. package/lib/commonjs/index.js +8 -0
  6. package/lib/commonjs/types/types.js +25 -0
  7. package/lib/commonjs/ui/components/CopyButton.js +41 -2
  8. package/lib/commonjs/ui/components/ExpandedInfoRow.js +95 -0
  9. package/lib/commonjs/ui/components/index.js +19 -0
  10. package/lib/commonjs/utils/formatting/dataFormatting.js +29 -0
  11. package/lib/module/env/EnvironmentIndicator.js +3 -1
  12. package/lib/module/env/EnvironmentSelector.js +5 -3
  13. package/lib/module/env/EnvironmentSelectorInline.js +5 -3
  14. package/lib/module/hooks/safe-area-impl.js +1 -1
  15. package/lib/module/index.js +2 -0
  16. package/lib/module/types/types.js +24 -0
  17. package/lib/module/ui/components/CopyButton.js +41 -2
  18. package/lib/module/ui/components/ExpandedInfoRow.js +90 -0
  19. package/lib/module/ui/components/index.js +3 -1
  20. package/lib/module/utils/formatting/dataFormatting.js +27 -0
  21. package/lib/typescript/commonjs/env/EnvironmentIndicator.d.ts +2 -2
  22. package/lib/typescript/commonjs/env/EnvironmentIndicator.d.ts.map +1 -1
  23. package/lib/typescript/commonjs/env/EnvironmentSelector.d.ts +1 -1
  24. package/lib/typescript/commonjs/env/EnvironmentSelector.d.ts.map +1 -1
  25. package/lib/typescript/commonjs/env/EnvironmentSelectorInline.d.ts +1 -1
  26. package/lib/typescript/commonjs/env/EnvironmentSelectorInline.d.ts.map +1 -1
  27. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  28. package/lib/typescript/commonjs/index.d.ts +1 -0
  29. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/types/types.d.ts +5 -0
  31. package/lib/typescript/commonjs/types/types.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/ui/components/CopyButton.d.ts +10 -0
  33. package/lib/typescript/commonjs/ui/components/CopyButton.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts +32 -0
  35. package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts.map +1 -0
  36. package/lib/typescript/commonjs/ui/components/index.d.ts +2 -1
  37. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/utils/formatting/dataFormatting.d.ts +15 -0
  39. package/lib/typescript/commonjs/utils/formatting/dataFormatting.d.ts.map +1 -1
  40. package/lib/typescript/module/env/EnvironmentIndicator.d.ts +2 -2
  41. package/lib/typescript/module/env/EnvironmentIndicator.d.ts.map +1 -1
  42. package/lib/typescript/module/env/EnvironmentSelector.d.ts +1 -1
  43. package/lib/typescript/module/env/EnvironmentSelector.d.ts.map +1 -1
  44. package/lib/typescript/module/env/EnvironmentSelectorInline.d.ts +1 -1
  45. package/lib/typescript/module/env/EnvironmentSelectorInline.d.ts.map +1 -1
  46. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  47. package/lib/typescript/module/index.d.ts +1 -0
  48. package/lib/typescript/module/index.d.ts.map +1 -1
  49. package/lib/typescript/module/types/types.d.ts +5 -0
  50. package/lib/typescript/module/types/types.d.ts.map +1 -1
  51. package/lib/typescript/module/ui/components/CopyButton.d.ts +10 -0
  52. package/lib/typescript/module/ui/components/CopyButton.d.ts.map +1 -1
  53. package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts +32 -0
  54. package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts.map +1 -0
  55. package/lib/typescript/module/ui/components/index.d.ts +2 -1
  56. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  57. package/lib/typescript/module/utils/formatting/dataFormatting.d.ts +15 -0
  58. package/lib/typescript/module/utils/formatting/dataFormatting.d.ts.map +1 -1
  59. package/package.json +4 -4
@@ -7,9 +7,11 @@ exports.EnvironmentIndicator = EnvironmentIndicator;
7
7
  var _reactNative = require("react-native");
8
8
  var _index = require("../icons/index.js");
9
9
  var _gameUIColors = require("../ui/gameUI/constants/gameUIColors.js");
10
+ var _types = require("../types/types.js");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function getEnvironmentConfig(environment) {
12
- switch (environment) {
13
+ const normalized = (0, _types.normalizeEnvironment)(environment);
14
+ switch (normalized) {
13
15
  case "local":
14
16
  return {
15
17
  label: "LOCAL",
@@ -9,12 +9,12 @@ var _reactNative = require("react-native");
9
9
  var _index = require("../icons/index.js");
10
10
  var _gameUIColors = require("../ui/gameUI/constants/gameUIColors.js");
11
11
  var _ExpandablePopover = require("../ui/components/ExpandablePopover.js");
12
+ var _types = require("../types/types.js");
12
13
  var _jsxRuntime = require("react/jsx-runtime");
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  // ============================================================================
15
16
  // Constants
16
17
  // ============================================================================
17
-
18
18
  const ENV_SELECTOR_WIDTH = 140; // Wider than minimized tools stack
19
19
  const PEEK_HEIGHT = 28;
20
20
  const OPTION_HEIGHT = 44;
@@ -30,7 +30,8 @@ const COLLAPSE_BUTTON_HEIGHT = 24;
30
30
  // ============================================================================
31
31
 
32
32
  function getEnvironmentConfig(environment) {
33
- switch (environment) {
33
+ const normalized = (0, _types.normalizeEnvironment)(environment);
34
+ switch (normalized) {
34
35
  case "local":
35
36
  return {
36
37
  label: "LOCAL",
@@ -8,12 +8,12 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _index = require("../icons/index.js");
10
10
  var _gameUIColors = require("../ui/gameUI/constants/gameUIColors.js");
11
+ var _types = require("../types/types.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
14
  // ============================================================================
14
15
  // Constants
15
16
  // ============================================================================
16
-
17
17
  const OPTION_HEIGHT = 36;
18
18
 
19
19
  // ============================================================================
@@ -25,7 +25,8 @@ const OPTION_HEIGHT = 36;
25
25
  // ============================================================================
26
26
 
27
27
  function getEnvironmentConfig(environment) {
28
- switch (environment) {
28
+ const normalized = (0, _types.normalizeEnvironment)(environment);
29
+ switch (normalized) {
29
30
  case "local":
30
31
  return {
31
32
  label: "LOCAL",
@@ -7,7 +7,7 @@ exports.useNativeSafeAreaInsets = exports.safeAreaType = exports.hasSafeAreaPack
7
7
  /**
8
8
  * Auto-generated safe area implementation
9
9
  * Detected: none
10
- * Generated at: 2026-02-14T18:20:55.885Z
10
+ * Generated at: 2026-03-17T23:38:16.354Z
11
11
  *
12
12
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
13
13
  *
@@ -50,6 +50,7 @@ var _exportNames = {
50
50
  EnvironmentIndicator: true,
51
51
  EnvironmentSelector: true,
52
52
  EnvironmentSelectorInline: true,
53
+ normalizeEnvironment: true,
53
54
  HintsProvider: true,
54
55
  useHintsDisabled: true,
55
56
  useHintsContext: true,
@@ -310,6 +311,12 @@ Object.defineProperty(exports, "macOSColors", {
310
311
  return _macOSDesignSystemColors.macOSColors;
311
312
  }
312
313
  });
314
+ Object.defineProperty(exports, "normalizeEnvironment", {
315
+ enumerable: true,
316
+ get: function () {
317
+ return _types.normalizeEnvironment;
318
+ }
319
+ });
313
320
  Object.defineProperty(exports, "notifySubscriberCountChange", {
314
321
  enumerable: true,
315
322
  get: function () {
@@ -535,6 +542,7 @@ var _macOSDesignSystemColors = require("./ui/gameUI/constants/macOSDesignSystemC
535
542
  var _EnvironmentIndicator = require("./env/EnvironmentIndicator.js");
536
543
  var _EnvironmentSelector = require("./env/EnvironmentSelector.js");
537
544
  var _EnvironmentSelectorInline = require("./env/EnvironmentSelectorInline.js");
545
+ var _types = require("./types/types.js");
538
546
  var _index10 = require("./context/index.js");
539
547
  var _index11 = require("./history/index.js");
540
548
  Object.keys(_index11).forEach(function (key) {
@@ -4,9 +4,34 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isPlainObject = isPlainObject;
7
+ exports.normalizeEnvironment = normalizeEnvironment;
7
8
  // Shared type definitions for the dev tools
8
9
 
9
10
  // Type guard to check if a value is a plain object (not Date, Array, etc.)
10
11
  function isPlainObject(value) {
11
12
  return value !== null && value !== undefined && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date) && !(value instanceof Error) && !(value instanceof Map) && !(value instanceof Set) && !(value instanceof RegExp) && typeof value !== "function";
13
+ }
14
+ /**
15
+ * Normalizes common environment strings to canonical Environment values.
16
+ * Handles variants like "production" → "prod", "development" → "dev", etc.
17
+ */
18
+ function normalizeEnvironment(env) {
19
+ switch (env.toLowerCase().trim()) {
20
+ case "local":
21
+ return "local";
22
+ case "dev":
23
+ case "development":
24
+ return "dev";
25
+ case "qa":
26
+ case "test":
27
+ return "qa";
28
+ case "staging":
29
+ case "stage":
30
+ return "staging";
31
+ case "prod":
32
+ case "production":
33
+ return "prod";
34
+ default:
35
+ return "local";
36
+ }
12
37
  }
@@ -3,12 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ToolbarCopyButton = exports.InlineCopyButton = exports.CopyButton = exports.ActionCopyButton = void 0;
6
+ exports.ToolbarCopyButton = exports.ToolbarClearButton = exports.InlineCopyButton = exports.CopyButton = exports.ActionCopyButton = void 0;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
9
  var _copyToClipboard = require("../../clipboard/copyToClipboard.js");
10
10
  var _gameUIColors = require("../gameUI/constants/gameUIColors.js");
11
11
  var _lucideIcons = require("../../icons/lucide-icons.js");
12
+ var _macOSDesignSystemColors = require("../gameUI/constants/macOSDesignSystemColors.js");
12
13
  var _ClipboardHintBanner = require("./ClipboardHintBanner.js");
13
14
  var _devToolsStorageKeys = require("../../storage/devToolsStorageKeys.js");
14
15
  var _persistentStorage = require("../../utils/persistentStorage.js");
@@ -110,7 +111,8 @@ const CopyButton = exports.CopyButton = /*#__PURE__*/(0, _react.memo)(function C
110
111
  timeoutRef.current = null;
111
112
  }
112
113
  try {
113
- const copied = await (0, _copyToClipboard.copyToClipboard)(valueRef.current);
114
+ const resolvedValue = typeof valueRef.current === "function" ? valueRef.current() : valueRef.current;
115
+ const copied = await (0, _copyToClipboard.copyToClipboard)(resolvedValue);
114
116
  if (copied) {
115
117
  setCopyState("success");
116
118
  onCopySuccess?.();
@@ -238,4 +240,41 @@ const ActionCopyButton = exports.ActionCopyButton = /*#__PURE__*/(0, _react.memo
238
240
  size: 18,
239
241
  ...props
240
242
  });
243
+ });
244
+ /**
245
+ * Shared clear/trash button for devtool headers.
246
+ * Always renders a red Trash2 icon — consistent across all tools.
247
+ */
248
+ const ToolbarClearButton = exports.ToolbarClearButton = /*#__PURE__*/(0, _react.memo)(function ToolbarClearButton({
249
+ onPress,
250
+ disabled = false,
251
+ buttonStyle
252
+ }) {
253
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
254
+ onPress: onPress,
255
+ style: [clearStyles.button, disabled && clearStyles.disabled, buttonStyle],
256
+ disabled: disabled,
257
+ hitSlop: {
258
+ top: 8,
259
+ bottom: 8,
260
+ left: 8,
261
+ right: 8
262
+ },
263
+ accessibilityLabel: "Clear",
264
+ accessibilityRole: "button",
265
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_lucideIcons.Trash2, {
266
+ size: 14,
267
+ color: disabled ? _macOSDesignSystemColors.macOSColors.text.disabled : _macOSDesignSystemColors.macOSColors.semantic.error
268
+ })
269
+ });
270
+ });
271
+ const clearStyles = _reactNative.StyleSheet.create({
272
+ button: {
273
+ padding: 4,
274
+ justifyContent: "center",
275
+ alignItems: "center"
276
+ },
277
+ disabled: {
278
+ opacity: 0.4
279
+ }
241
280
  });
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ExpandedInfoRow = ExpandedInfoRow;
7
+ exports.PillBadge = PillBadge;
8
+ var _reactNative = require("react-native");
9
+ var _macOSDesignSystemColors = require("../gameUI/constants/macOSDesignSystemColors.js");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * ExpandedInfoRow
13
+ *
14
+ * Shared primitive for the `label: [badge]` rows inside expanded DevTools cards.
15
+ * Used by both @buoy-gg/storage and @buoy-gg/zustand to keep expanded content
16
+ * visually consistent across tools.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <ExpandedInfoRow label="Storage">
21
+ * <PillBadge color={color}>MMKV</PillBadge>
22
+ * </ExpandedInfoRow>
23
+ * ```
24
+ */
25
+
26
+ function ExpandedInfoRow({
27
+ label,
28
+ children
29
+ }) {
30
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
31
+ style: styles.row,
32
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
33
+ style: styles.label,
34
+ children: [label, ":"]
35
+ }), children]
36
+ });
37
+ }
38
+
39
+ /**
40
+ * PillBadge — the pill-shaped badge used in expanded card rows.
41
+ * Matches the storage card badge style (rounded-full, with border).
42
+ */
43
+
44
+ function PillBadge({
45
+ color,
46
+ children,
47
+ icon
48
+ }) {
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
50
+ style: [styles.pill, {
51
+ backgroundColor: color + "20",
52
+ borderColor: color + "40"
53
+ }],
54
+ children: [icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
55
+ style: styles.pillIcon,
56
+ children: icon
57
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
58
+ style: [styles.pillText, {
59
+ color
60
+ }],
61
+ children: children
62
+ })]
63
+ });
64
+ }
65
+ const styles = _reactNative.StyleSheet.create({
66
+ row: {
67
+ flexDirection: "row",
68
+ alignItems: "center",
69
+ gap: 10
70
+ },
71
+ label: {
72
+ fontSize: 10,
73
+ color: _macOSDesignSystemColors.macOSColors.text.muted,
74
+ fontWeight: "600",
75
+ minWidth: 70,
76
+ fontFamily: "monospace"
77
+ },
78
+ pill: {
79
+ flexDirection: "row",
80
+ alignItems: "center",
81
+ paddingHorizontal: 8,
82
+ paddingVertical: 3,
83
+ borderRadius: 999,
84
+ borderWidth: 1
85
+ },
86
+ pillIcon: {
87
+ marginRight: 4
88
+ },
89
+ pillText: {
90
+ fontSize: 10,
91
+ fontWeight: "700",
92
+ fontFamily: "monospace",
93
+ letterSpacing: 0.5
94
+ }
95
+ });
@@ -153,6 +153,12 @@ Object.defineProperty(exports, "ExpandablePopover", {
153
153
  return _ExpandablePopover.ExpandablePopover;
154
154
  }
155
155
  });
156
+ Object.defineProperty(exports, "ExpandedInfoRow", {
157
+ enumerable: true,
158
+ get: function () {
159
+ return _ExpandedInfoRow.ExpandedInfoRow;
160
+ }
161
+ });
156
162
  Object.defineProperty(exports, "FilterBadge", {
157
163
  enumerable: true,
158
164
  get: function () {
@@ -225,6 +231,12 @@ Object.defineProperty(exports, "NoSearchResultsEmptyState", {
225
231
  return _EmptyState.NoSearchResultsEmptyState;
226
232
  }
227
233
  });
234
+ Object.defineProperty(exports, "PillBadge", {
235
+ enumerable: true,
236
+ get: function () {
237
+ return _ExpandedInfoRow.PillBadge;
238
+ }
239
+ });
228
240
  Object.defineProperty(exports, "PowerToggleButton", {
229
241
  enumerable: true,
230
242
  get: function () {
@@ -279,6 +291,12 @@ Object.defineProperty(exports, "TimeDisplay", {
279
291
  return _TimeDisplay.TimeDisplay;
280
292
  }
281
293
  });
294
+ Object.defineProperty(exports, "ToolbarClearButton", {
295
+ enumerable: true,
296
+ get: function () {
297
+ return _CopyButton.ToolbarClearButton;
298
+ }
299
+ });
282
300
  Object.defineProperty(exports, "ToolbarCopyButton", {
283
301
  enumerable: true,
284
302
  get: function () {
@@ -340,4 +358,5 @@ var _WindowControls = require("./WindowControls.js");
340
358
  var _EventStepperFooter = require("./EventStepperFooter.js");
341
359
  var _ExpandablePopover = require("./ExpandablePopover.js");
342
360
  var _PowerToggleButton = require("./PowerToggleButton.js");
361
+ var _ExpandedInfoRow = require("./ExpandedInfoRow.js");
343
362
  var _index = require("./EventHistoryViewer/index.js");
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.COPY_PAYLOAD_MAX_BYTES = void 0;
6
7
  exports.formatBytes = formatBytes;
7
8
  exports.formatDuration = formatDuration;
8
9
  exports.formatNumber = formatNumber;
9
10
  exports.truncateMiddle = truncateMiddle;
11
+ exports.truncatePayload = truncatePayload;
10
12
  /**
11
13
  * Shared data formatting utilities
12
14
  */
@@ -57,6 +59,33 @@ function formatNumber(num) {
57
59
  return num.toLocaleString();
58
60
  }
59
61
 
62
+ /** Default max bytes per value before it gets omitted from copy output (50 KB) */
63
+ const COPY_PAYLOAD_MAX_BYTES = exports.COPY_PAYLOAD_MAX_BYTES = 50_000;
64
+
65
+ /**
66
+ * Truncate a payload that is too large to be useful in clipboard output.
67
+ * If the serialized value exceeds `maxBytes`, returns a human-readable
68
+ * placeholder string instead of the original value.
69
+ *
70
+ * Use this in snapshot/copy functions to prevent huge values (e.g. react-query-cache)
71
+ * from making copied output unreadable or crashing the clipboard.
72
+ *
73
+ * @example
74
+ * value: truncatePayload(event.data?.value)
75
+ * // → "[omitted: 4.2 MB — too large to copy]"
76
+ */
77
+ function truncatePayload(value, maxBytes = COPY_PAYLOAD_MAX_BYTES) {
78
+ try {
79
+ const serialized = JSON.stringify(value);
80
+ if (serialized.length > maxBytes) {
81
+ return `[omitted: ${formatBytes(serialized.length)} — too large to copy]`;
82
+ }
83
+ return value;
84
+ } catch {
85
+ return "[omitted: could not serialize]";
86
+ }
87
+ }
88
+
60
89
  /**
61
90
  * Truncate a string in the middle with ellipsis
62
91
  * @param str The string to truncate
@@ -3,9 +3,11 @@
3
3
  import { Pressable, Text, View } from "react-native";
4
4
  import { FlaskConical, TestTube2, Bug, Zap, ChevronDown } from "../icons/index.js";
5
5
  import { gameUIColors } from "../ui/gameUI/constants/gameUIColors.js";
6
+ import { normalizeEnvironment } from "../types/types.js";
6
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
8
  function getEnvironmentConfig(environment) {
8
- switch (environment) {
9
+ const normalized = normalizeEnvironment(environment);
10
+ switch (normalized) {
9
11
  case "local":
10
12
  return {
11
13
  label: "LOCAL",
@@ -5,11 +5,12 @@ import { Pressable, StyleSheet, Text, View } from "react-native";
5
5
  import { Check } from "../icons/index.js";
6
6
  import { gameUIColors } from "../ui/gameUI/constants/gameUIColors.js";
7
7
  import { ExpandablePopover } from "../ui/components/ExpandablePopover.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ import { normalizeEnvironment } from "../types/types.js";
9
+
9
10
  // ============================================================================
10
11
  // Constants
11
12
  // ============================================================================
12
-
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
14
  const ENV_SELECTOR_WIDTH = 140; // Wider than minimized tools stack
14
15
  const PEEK_HEIGHT = 28;
15
16
  const OPTION_HEIGHT = 44;
@@ -25,7 +26,8 @@ const COLLAPSE_BUTTON_HEIGHT = 24;
25
26
  // ============================================================================
26
27
 
27
28
  function getEnvironmentConfig(environment) {
28
- switch (environment) {
29
+ const normalized = normalizeEnvironment(environment);
30
+ switch (normalized) {
29
31
  case "local":
30
32
  return {
31
33
  label: "LOCAL",
@@ -4,11 +4,12 @@ import React, { useCallback, useEffect, useRef, useState } from "react";
4
4
  import { Animated, Pressable, StyleSheet, Text, View } from "react-native";
5
5
  import { Check, ChevronUp } from "../icons/index.js";
6
6
  import { gameUIColors } from "../ui/gameUI/constants/gameUIColors.js";
7
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ import { normalizeEnvironment } from "../types/types.js";
8
+
8
9
  // ============================================================================
9
10
  // Constants
10
11
  // ============================================================================
11
-
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  const OPTION_HEIGHT = 36;
13
14
 
14
15
  // ============================================================================
@@ -20,7 +21,8 @@ const OPTION_HEIGHT = 36;
20
21
  // ============================================================================
21
22
 
22
23
  function getEnvironmentConfig(environment) {
23
- switch (environment) {
24
+ const normalized = normalizeEnvironment(environment);
25
+ switch (normalized) {
24
26
  case "local":
25
27
  return {
26
28
  label: "LOCAL",
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * Auto-generated safe area implementation
5
5
  * Detected: none
6
- * Generated at: 2026-02-14T18:20:55.885Z
6
+ * Generated at: 2026-03-17T23:38:16.354Z
7
7
  *
8
8
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
9
9
  *
@@ -58,6 +58,8 @@ export { EnvironmentIndicator } from "./env/EnvironmentIndicator.js";
58
58
  export { EnvironmentSelector } from "./env/EnvironmentSelector.js";
59
59
  // EnvironmentSelectorInline
60
60
  export { EnvironmentSelectorInline } from "./env/EnvironmentSelectorInline.js";
61
+ export { normalizeEnvironment } from "./types/types.js";
62
+
61
63
  // Context exports
62
64
  export { HintsProvider, useHintsDisabled, useHintsContext } from "./context/index.js";
63
65
 
@@ -5,4 +5,28 @@
5
5
  // Type guard to check if a value is a plain object (not Date, Array, etc.)
6
6
  export function isPlainObject(value) {
7
7
  return value !== null && value !== undefined && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date) && !(value instanceof Error) && !(value instanceof Map) && !(value instanceof Set) && !(value instanceof RegExp) && typeof value !== "function";
8
+ }
9
+ /**
10
+ * Normalizes common environment strings to canonical Environment values.
11
+ * Handles variants like "production" → "prod", "development" → "dev", etc.
12
+ */
13
+ export function normalizeEnvironment(env) {
14
+ switch (env.toLowerCase().trim()) {
15
+ case "local":
16
+ return "local";
17
+ case "dev":
18
+ case "development":
19
+ return "dev";
20
+ case "qa":
21
+ case "test":
22
+ return "qa";
23
+ case "staging":
24
+ case "stage":
25
+ return "staging";
26
+ case "prod":
27
+ case "production":
28
+ return "prod";
29
+ default:
30
+ return "local";
31
+ }
8
32
  }
@@ -4,7 +4,8 @@ import { useState, useRef, useCallback, memo, useEffect } from "react";
4
4
  import { TouchableOpacity, StyleSheet } from "react-native";
5
5
  import { copyToClipboard } from "../../clipboard/copyToClipboard.js";
6
6
  import { gameUIColors } from "../gameUI/constants/gameUIColors.js";
7
- import { Copy, CheckCircle2, AlertTriangle } from "../../icons/lucide-icons.js";
7
+ import { Copy, CheckCircle2, AlertTriangle, Trash2 } from "../../icons/lucide-icons.js";
8
+ import { macOSColors } from "../gameUI/constants/macOSDesignSystemColors.js";
8
9
  import { ClipboardHintBanner } from "./ClipboardHintBanner.js";
9
10
  import { devToolsStorageKeys } from "../../storage/devToolsStorageKeys.js";
10
11
  import { persistentStorage } from "../../utils/persistentStorage.js";
@@ -106,7 +107,8 @@ export const CopyButton = /*#__PURE__*/memo(function CopyButton({
106
107
  timeoutRef.current = null;
107
108
  }
108
109
  try {
109
- const copied = await copyToClipboard(valueRef.current);
110
+ const resolvedValue = typeof valueRef.current === "function" ? valueRef.current() : valueRef.current;
111
+ const copied = await copyToClipboard(resolvedValue);
110
112
  if (copied) {
111
113
  setCopyState("success");
112
114
  onCopySuccess?.();
@@ -234,4 +236,41 @@ export const ActionCopyButton = /*#__PURE__*/memo(function ActionCopyButton(prop
234
236
  size: 18,
235
237
  ...props
236
238
  });
239
+ });
240
+ /**
241
+ * Shared clear/trash button for devtool headers.
242
+ * Always renders a red Trash2 icon — consistent across all tools.
243
+ */
244
+ export const ToolbarClearButton = /*#__PURE__*/memo(function ToolbarClearButton({
245
+ onPress,
246
+ disabled = false,
247
+ buttonStyle
248
+ }) {
249
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
250
+ onPress: onPress,
251
+ style: [clearStyles.button, disabled && clearStyles.disabled, buttonStyle],
252
+ disabled: disabled,
253
+ hitSlop: {
254
+ top: 8,
255
+ bottom: 8,
256
+ left: 8,
257
+ right: 8
258
+ },
259
+ accessibilityLabel: "Clear",
260
+ accessibilityRole: "button",
261
+ children: /*#__PURE__*/_jsx(Trash2, {
262
+ size: 14,
263
+ color: disabled ? macOSColors.text.disabled : macOSColors.semantic.error
264
+ })
265
+ });
266
+ });
267
+ const clearStyles = StyleSheet.create({
268
+ button: {
269
+ padding: 4,
270
+ justifyContent: "center",
271
+ alignItems: "center"
272
+ },
273
+ disabled: {
274
+ opacity: 0.4
275
+ }
237
276
  });
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ExpandedInfoRow
5
+ *
6
+ * Shared primitive for the `label: [badge]` rows inside expanded DevTools cards.
7
+ * Used by both @buoy-gg/storage and @buoy-gg/zustand to keep expanded content
8
+ * visually consistent across tools.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * <ExpandedInfoRow label="Storage">
13
+ * <PillBadge color={color}>MMKV</PillBadge>
14
+ * </ExpandedInfoRow>
15
+ * ```
16
+ */
17
+
18
+ import { View, Text, StyleSheet } from "react-native";
19
+ import { macOSColors } from "../gameUI/constants/macOSDesignSystemColors.js";
20
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
21
+ export function ExpandedInfoRow({
22
+ label,
23
+ children
24
+ }) {
25
+ return /*#__PURE__*/_jsxs(View, {
26
+ style: styles.row,
27
+ children: [/*#__PURE__*/_jsxs(Text, {
28
+ style: styles.label,
29
+ children: [label, ":"]
30
+ }), children]
31
+ });
32
+ }
33
+
34
+ /**
35
+ * PillBadge — the pill-shaped badge used in expanded card rows.
36
+ * Matches the storage card badge style (rounded-full, with border).
37
+ */
38
+
39
+ export function PillBadge({
40
+ color,
41
+ children,
42
+ icon
43
+ }) {
44
+ return /*#__PURE__*/_jsxs(View, {
45
+ style: [styles.pill, {
46
+ backgroundColor: color + "20",
47
+ borderColor: color + "40"
48
+ }],
49
+ children: [icon && /*#__PURE__*/_jsx(View, {
50
+ style: styles.pillIcon,
51
+ children: icon
52
+ }), /*#__PURE__*/_jsx(Text, {
53
+ style: [styles.pillText, {
54
+ color
55
+ }],
56
+ children: children
57
+ })]
58
+ });
59
+ }
60
+ const styles = StyleSheet.create({
61
+ row: {
62
+ flexDirection: "row",
63
+ alignItems: "center",
64
+ gap: 10
65
+ },
66
+ label: {
67
+ fontSize: 10,
68
+ color: macOSColors.text.muted,
69
+ fontWeight: "600",
70
+ minWidth: 70,
71
+ fontFamily: "monospace"
72
+ },
73
+ pill: {
74
+ flexDirection: "row",
75
+ alignItems: "center",
76
+ paddingHorizontal: 8,
77
+ paddingVertical: 3,
78
+ borderRadius: 999,
79
+ borderWidth: 1
80
+ },
81
+ pillIcon: {
82
+ marginRight: 4
83
+ },
84
+ pillText: {
85
+ fontSize: 10,
86
+ fontWeight: "700",
87
+ fontFamily: "monospace",
88
+ letterSpacing: 0.5
89
+ }
90
+ });
@@ -3,7 +3,7 @@
3
3
  export { BackButton } from "./BackButton.js";
4
4
  export { ValueTypeBadge } from "./ValueTypeBadge.js";
5
5
  export { StorageTypeBadge } from "./StorageTypeBadge.js";
6
- export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton } from "./CopyButton.js";
6
+ export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton, ToolbarClearButton } from "./CopyButton.js";
7
7
  export { ModalHeader } from "./ModalHeader.js";
8
8
  export { ModalHintBanner } from "./ModalHintBanner.js";
9
9
  export { ClipboardHintBanner } from "./ClipboardHintBanner.js";
@@ -31,5 +31,7 @@ export { WindowControls } from "./WindowControls.js";
31
31
  export { EventStepperFooter } from "./EventStepperFooter.js";
32
32
  export { ExpandablePopover } from "./ExpandablePopover.js";
33
33
  export { PowerToggleButton } from "./PowerToggleButton.js";
34
+ export { ExpandedInfoRow, PillBadge } from "./ExpandedInfoRow.js";
35
+
34
36
  // EventHistoryViewer components
35
37
  export { EventHistoryViewer, ViewToggleCards, DiffModeTabs, CompareBar, EventPickerModal } from "./EventHistoryViewer/index.js";
@@ -50,6 +50,33 @@ export function formatNumber(num) {
50
50
  return num.toLocaleString();
51
51
  }
52
52
 
53
+ /** Default max bytes per value before it gets omitted from copy output (50 KB) */
54
+ export const COPY_PAYLOAD_MAX_BYTES = 50_000;
55
+
56
+ /**
57
+ * Truncate a payload that is too large to be useful in clipboard output.
58
+ * If the serialized value exceeds `maxBytes`, returns a human-readable
59
+ * placeholder string instead of the original value.
60
+ *
61
+ * Use this in snapshot/copy functions to prevent huge values (e.g. react-query-cache)
62
+ * from making copied output unreadable or crashing the clipboard.
63
+ *
64
+ * @example
65
+ * value: truncatePayload(event.data?.value)
66
+ * // → "[omitted: 4.2 MB — too large to copy]"
67
+ */
68
+ export function truncatePayload(value, maxBytes = COPY_PAYLOAD_MAX_BYTES) {
69
+ try {
70
+ const serialized = JSON.stringify(value);
71
+ if (serialized.length > maxBytes) {
72
+ return `[omitted: ${formatBytes(serialized.length)} — too large to copy]`;
73
+ }
74
+ return value;
75
+ } catch {
76
+ return "[omitted: could not serialize]";
77
+ }
78
+ }
79
+
53
80
  /**
54
81
  * Truncate a string in the middle with ellipsis
55
82
  * @param str The string to truncate
@@ -1,7 +1,7 @@
1
1
  import { LayoutChangeEvent } from "react-native";
2
- import { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentIndicatorProps {
4
- environment: Environment;
4
+ environment: Environment | string;
5
5
  onLayout?: (event: LayoutChangeEvent) => void;
6
6
  /** When true, the badge becomes pressable and shows a dropdown indicator */
7
7
  interactive?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentIndicator.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,cAAc,CAAC;AAWxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAwDD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,WAAmB,EACnB,OAAO,GACR,EAAE,yBAAyB,+BAkE3B"}
1
+ {"version":3,"file":"EnvironmentIndicator.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,cAAc,CAAC;AAWxE,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyDD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,WAAmB,EACnB,OAAO,GACR,EAAE,yBAAyB,+BAkE3B"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentSelectorProps {
4
4
  /** Whether the selector has items to show */
5
5
  hasItems: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentSelector.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBlD,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAmGD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,KAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB,qBA8C1B"}
1
+ {"version":3,"file":"EnvironmentSelector.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAgBxE,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAoGD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,KAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB,qBA8C1B"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentSelectorInlineProps {
4
4
  /** The currently active environment */
5
5
  currentEnvironment: Environment;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentSelectorInline.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelectorInline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYlD,MAAM,WAAW,8BAA8B;IAC7C,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACtC;AAqGD,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,GACT,EAAE,8BAA8B,qBAwGhC"}
1
+ {"version":3,"file":"EnvironmentSelectorInline.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelectorInline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAYxE,MAAM,WAAW,8BAA8B;IAC7C,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACtC;AAsGD,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,GACT,EAAE,8BAA8B,qBAwGhC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-02-14T18:20:55.885Z
4
+ * Generated at: 2026-03-17T23:38:16.354Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -23,6 +23,7 @@ export type { EnvironmentSelectorProps } from "./env/EnvironmentSelector";
23
23
  export { EnvironmentSelectorInline } from "./env/EnvironmentSelectorInline";
24
24
  export type { EnvironmentSelectorInlineProps } from "./env/EnvironmentSelectorInline";
25
25
  export type { Environment } from "./types/types";
26
+ export { normalizeEnvironment } from "./types/types";
26
27
  export { HintsProvider, useHintsDisabled, useHintsContext } from "./context";
27
28
  export * from "./history";
28
29
  export { FeatureGate, UpgradePrompt, useFeatureGate, ProFeatureBanner, UpgradeModal, LicenseEntryModal, ProBadge, ProUpgradeModal, getUseIsPro, getUseLicense } from "./license";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -5,4 +5,9 @@ export declare function isPlainObject(value: unknown): value is {
5
5
  [key: string]: JsonValue;
6
6
  };
7
7
  export type Environment = "local" | "dev" | "qa" | "staging" | "prod";
8
+ /**
9
+ * Normalizes common environment strings to canonical Environment values.
10
+ * Handles variants like "production" → "prod", "development" → "dev", etc.
11
+ */
12
+ export declare function normalizeEnvironment(env: string): Environment;
8
13
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,IAAI,GACJ,KAAK,GACL,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GACrB,GAAG,CAAC,OAAO,CAAC,GACZ,MAAM,GACN,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GACjC,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAGZ,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAavC;AACD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,IAAI,GACJ,KAAK,GACL,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GACrB,GAAG,CAAC,OAAO,CAAC,GACZ,MAAM,GACN,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GACjC,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAGZ,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAavC;AACD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAmB7D"}
@@ -35,5 +35,15 @@ export declare const ToolbarCopyButton: import("react").NamedExoticComponent<Omi
35
35
  * Preset copy button for main actions (larger size)
36
36
  */
37
37
  export declare const ActionCopyButton: import("react").NamedExoticComponent<Omit<CopyButtonProps, "size">>;
38
+ interface ToolbarClearButtonProps {
39
+ onPress: () => void;
40
+ disabled?: boolean;
41
+ buttonStyle?: ViewStyle;
42
+ }
43
+ /**
44
+ * Shared clear/trash button for devtool headers.
45
+ * Always renders a red Trash2 icon — consistent across all tools.
46
+ */
47
+ export declare const ToolbarClearButton: import("react").NamedExoticComponent<ToolbarClearButtonProps>;
38
48
  export {};
39
49
  //# sourceMappingURL=CopyButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CopyButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,qBAAqB,EACrB,SAAS,EACV,MAAM,cAAc,CAAC;AAatB,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC;IACtE,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA0CD,eAAO,MAAM,UAAU,uDAsJrB,CAAC;AAUH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,qEAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC"}
1
+ {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CopyButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,qBAAqB,EACrB,SAAS,EACV,MAAM,cAAc,CAAC;AActB,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC;IACtE,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA0CD,eAAO,MAAM,UAAU,uDA0JrB,CAAC;AAUH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,qEAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,+DAoB7B,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ExpandedInfoRow
3
+ *
4
+ * Shared primitive for the `label: [badge]` rows inside expanded DevTools cards.
5
+ * Used by both @buoy-gg/storage and @buoy-gg/zustand to keep expanded content
6
+ * visually consistent across tools.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * <ExpandedInfoRow label="Storage">
11
+ * <PillBadge color={color}>MMKV</PillBadge>
12
+ * </ExpandedInfoRow>
13
+ * ```
14
+ */
15
+ import type { ReactNode } from "react";
16
+ interface ExpandedInfoRowProps {
17
+ label: string;
18
+ children: ReactNode;
19
+ }
20
+ export declare function ExpandedInfoRow({ label, children }: ExpandedInfoRowProps): import("react").JSX.Element;
21
+ /**
22
+ * PillBadge — the pill-shaped badge used in expanded card rows.
23
+ * Matches the storage card badge style (rounded-full, with border).
24
+ */
25
+ interface PillBadgeProps {
26
+ color: string;
27
+ children: ReactNode;
28
+ icon?: ReactNode;
29
+ }
30
+ export declare function PillBadge({ color, children, icon }: PillBadgeProps): import("react").JSX.Element;
31
+ export {};
32
+ //# sourceMappingURL=ExpandedInfoRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandedInfoRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ExpandedInfoRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAOxE;AAED;;;GAGG;AACH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,cAAc,+BAYlE"}
@@ -1,7 +1,7 @@
1
1
  export { BackButton } from "./BackButton";
2
2
  export { ValueTypeBadge } from "./ValueTypeBadge";
3
3
  export { StorageTypeBadge } from "./StorageTypeBadge";
4
- export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton, } from "./CopyButton";
4
+ export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton, ToolbarClearButton, } from "./CopyButton";
5
5
  export { ModalHeader } from "./ModalHeader";
6
6
  export { ModalHintBanner } from "./ModalHintBanner";
7
7
  export { ClipboardHintBanner } from "./ClipboardHintBanner";
@@ -35,6 +35,7 @@ export { ExpandablePopover } from "./ExpandablePopover";
35
35
  export type { ExpandablePopoverProps } from "./ExpandablePopover";
36
36
  export { PowerToggleButton } from "./PowerToggleButton";
37
37
  export type { PowerToggleButtonProps } from "./PowerToggleButton";
38
+ export { ExpandedInfoRow, PillBadge } from "./ExpandedInfoRow";
38
39
  export { EventHistoryViewer, ViewToggleCards, DiffModeTabs, CompareBar, EventPickerModal, } from "./EventHistoryViewer";
39
40
  export type { ViewMode, DiffModeTab, EventDisplayInfo, IconComponent, ViewToggleCardsProps, CompareBarProps, DiffModeTabsProps, EventPickerItem, EventPickerModalProps, EventHistoryViewerProps, } from "./EventHistoryViewer";
40
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC"}
@@ -19,6 +19,21 @@ export declare function formatDuration(ms: number | undefined): string;
19
19
  * @returns Formatted number string (e.g., "1,234,567")
20
20
  */
21
21
  export declare function formatNumber(num: number): string;
22
+ /** Default max bytes per value before it gets omitted from copy output (50 KB) */
23
+ export declare const COPY_PAYLOAD_MAX_BYTES = 50000;
24
+ /**
25
+ * Truncate a payload that is too large to be useful in clipboard output.
26
+ * If the serialized value exceeds `maxBytes`, returns a human-readable
27
+ * placeholder string instead of the original value.
28
+ *
29
+ * Use this in snapshot/copy functions to prevent huge values (e.g. react-query-cache)
30
+ * from making copied output unreadable or crashing the clipboard.
31
+ *
32
+ * @example
33
+ * value: truncatePayload(event.data?.value)
34
+ * // → "[omitted: 4.2 MB — too large to copy]"
35
+ */
36
+ export declare function truncatePayload(value: unknown, maxBytes?: number): unknown;
22
37
  /**
23
38
  * Truncate a string in the middle with ellipsis
24
39
  * @param str The string to truncate
@@ -1 +1 @@
1
- {"version":3,"file":"dataFormatting.d.ts","sourceRoot":"","sources":["../../../../../src/utils/formatting/dataFormatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAoB7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAW,EACvB,QAAQ,GAAE,MAAW,GACpB,MAAM,CAOR"}
1
+ {"version":3,"file":"dataFormatting.d.ts","sourceRoot":"","sources":["../../../../../src/utils/formatting/dataFormatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAoB7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,GAAE,MAA+B,GACxC,OAAO,CAUT;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAW,EACvB,QAAQ,GAAE,MAAW,GACpB,MAAM,CAOR"}
@@ -1,7 +1,7 @@
1
1
  import { LayoutChangeEvent } from "react-native";
2
- import { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentIndicatorProps {
4
- environment: Environment;
4
+ environment: Environment | string;
5
5
  onLayout?: (event: LayoutChangeEvent) => void;
6
6
  /** When true, the badge becomes pressable and shows a dropdown indicator */
7
7
  interactive?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentIndicator.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,cAAc,CAAC;AAWxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAwDD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,WAAmB,EACnB,OAAO,GACR,EAAE,yBAAyB,+BAkE3B"}
1
+ {"version":3,"file":"EnvironmentIndicator.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,cAAc,CAAC;AAWxE,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyDD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,WAAmB,EACnB,OAAO,GACR,EAAE,yBAAyB,+BAkE3B"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentSelectorProps {
4
4
  /** Whether the selector has items to show */
5
5
  hasItems: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentSelector.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBlD,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAmGD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,KAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB,qBA8C1B"}
1
+ {"version":3,"file":"EnvironmentSelector.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAgBxE,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAoGD,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,KAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB,qBA8C1B"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Environment } from "../types/types";
2
+ import { type Environment } from "../types/types";
3
3
  export interface EnvironmentSelectorInlineProps {
4
4
  /** The currently active environment */
5
5
  currentEnvironment: Environment;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentSelectorInline.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelectorInline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYlD,MAAM,WAAW,8BAA8B;IAC7C,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACtC;AAqGD,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,GACT,EAAE,8BAA8B,qBAwGhC"}
1
+ {"version":3,"file":"EnvironmentSelectorInline.d.ts","sourceRoot":"","sources":["../../../../src/env/EnvironmentSelectorInline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AAYxE,MAAM,WAAW,8BAA8B;IAC7C,uCAAuC;IACvC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mDAAmD;IACnD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACtC;AAsGD,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,GACT,EAAE,8BAA8B,qBAwGhC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-02-14T18:20:55.885Z
4
+ * Generated at: 2026-03-17T23:38:16.354Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -23,6 +23,7 @@ export type { EnvironmentSelectorProps } from "./env/EnvironmentSelector";
23
23
  export { EnvironmentSelectorInline } from "./env/EnvironmentSelectorInline";
24
24
  export type { EnvironmentSelectorInlineProps } from "./env/EnvironmentSelectorInline";
25
25
  export type { Environment } from "./types/types";
26
+ export { normalizeEnvironment } from "./types/types";
26
27
  export { HintsProvider, useHintsDisabled, useHintsContext } from "./context";
27
28
  export * from "./history";
28
29
  export { FeatureGate, UpgradePrompt, useFeatureGate, ProFeatureBanner, UpgradeModal, LicenseEntryModal, ProBadge, ProUpgradeModal, getUseIsPro, getUseLicense } from "./license";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -5,4 +5,9 @@ export declare function isPlainObject(value: unknown): value is {
5
5
  [key: string]: JsonValue;
6
6
  };
7
7
  export type Environment = "local" | "dev" | "qa" | "staging" | "prod";
8
+ /**
9
+ * Normalizes common environment strings to canonical Environment values.
10
+ * Handles variants like "production" → "prod", "development" → "dev", etc.
11
+ */
12
+ export declare function normalizeEnvironment(env: string): Environment;
8
13
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,IAAI,GACJ,KAAK,GACL,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GACrB,GAAG,CAAC,OAAO,CAAC,GACZ,MAAM,GACN,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GACjC,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAGZ,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAavC;AACD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,IAAI,GACJ,KAAK,GACL,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GACrB,GAAG,CAAC,OAAO,CAAC,GACZ,MAAM,GACN,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GACjC,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAGZ,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAavC;AACD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAmB7D"}
@@ -35,5 +35,15 @@ export declare const ToolbarCopyButton: import("react").NamedExoticComponent<Omi
35
35
  * Preset copy button for main actions (larger size)
36
36
  */
37
37
  export declare const ActionCopyButton: import("react").NamedExoticComponent<Omit<CopyButtonProps, "size">>;
38
+ interface ToolbarClearButtonProps {
39
+ onPress: () => void;
40
+ disabled?: boolean;
41
+ buttonStyle?: ViewStyle;
42
+ }
43
+ /**
44
+ * Shared clear/trash button for devtool headers.
45
+ * Always renders a red Trash2 icon — consistent across all tools.
46
+ */
47
+ export declare const ToolbarClearButton: import("react").NamedExoticComponent<ToolbarClearButtonProps>;
38
48
  export {};
39
49
  //# sourceMappingURL=CopyButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CopyButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,qBAAqB,EACrB,SAAS,EACV,MAAM,cAAc,CAAC;AAatB,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC;IACtE,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA0CD,eAAO,MAAM,UAAU,uDAsJrB,CAAC;AAUH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,qEAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC"}
1
+ {"version":3,"file":"CopyButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CopyButton.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,qBAAqB,EACrB,SAAS,EACV,MAAM,cAAc,CAAC;AActB,UAAU,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC;IACtE,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA0CD,eAAO,MAAM,UAAU,uDA0JrB,CAAC;AAUH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,qEAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qEAI3B,CAAC;AAEH,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,+DAoB7B,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ExpandedInfoRow
3
+ *
4
+ * Shared primitive for the `label: [badge]` rows inside expanded DevTools cards.
5
+ * Used by both @buoy-gg/storage and @buoy-gg/zustand to keep expanded content
6
+ * visually consistent across tools.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * <ExpandedInfoRow label="Storage">
11
+ * <PillBadge color={color}>MMKV</PillBadge>
12
+ * </ExpandedInfoRow>
13
+ * ```
14
+ */
15
+ import type { ReactNode } from "react";
16
+ interface ExpandedInfoRowProps {
17
+ label: string;
18
+ children: ReactNode;
19
+ }
20
+ export declare function ExpandedInfoRow({ label, children }: ExpandedInfoRowProps): import("react").JSX.Element;
21
+ /**
22
+ * PillBadge — the pill-shaped badge used in expanded card rows.
23
+ * Matches the storage card badge style (rounded-full, with border).
24
+ */
25
+ interface PillBadgeProps {
26
+ color: string;
27
+ children: ReactNode;
28
+ icon?: ReactNode;
29
+ }
30
+ export declare function PillBadge({ color, children, icon }: PillBadgeProps): import("react").JSX.Element;
31
+ export {};
32
+ //# sourceMappingURL=ExpandedInfoRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandedInfoRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ExpandedInfoRow.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAOxE;AAED;;;GAGG;AACH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,cAAc,+BAYlE"}
@@ -1,7 +1,7 @@
1
1
  export { BackButton } from "./BackButton";
2
2
  export { ValueTypeBadge } from "./ValueTypeBadge";
3
3
  export { StorageTypeBadge } from "./StorageTypeBadge";
4
- export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton, } from "./CopyButton";
4
+ export { CopyButton, InlineCopyButton, ToolbarCopyButton, ActionCopyButton, ToolbarClearButton, } from "./CopyButton";
5
5
  export { ModalHeader } from "./ModalHeader";
6
6
  export { ModalHintBanner } from "./ModalHintBanner";
7
7
  export { ClipboardHintBanner } from "./ClipboardHintBanner";
@@ -35,6 +35,7 @@ export { ExpandablePopover } from "./ExpandablePopover";
35
35
  export type { ExpandablePopoverProps } from "./ExpandablePopover";
36
36
  export { PowerToggleButton } from "./PowerToggleButton";
37
37
  export type { PowerToggleButtonProps } from "./PowerToggleButton";
38
+ export { ExpandedInfoRow, PillBadge } from "./ExpandedInfoRow";
38
39
  export { EventHistoryViewer, ViewToggleCards, DiffModeTabs, CompareBar, EventPickerModal, } from "./EventHistoryViewer";
39
40
  export type { ViewMode, DiffModeTab, EventDisplayInfo, IconComponent, ViewToggleCardsProps, CompareBarProps, DiffModeTabsProps, EventPickerItem, EventPickerModalProps, EventHistoryViewerProps, } from "./EventHistoryViewer";
40
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/index.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,21 @@ export declare function formatDuration(ms: number | undefined): string;
19
19
  * @returns Formatted number string (e.g., "1,234,567")
20
20
  */
21
21
  export declare function formatNumber(num: number): string;
22
+ /** Default max bytes per value before it gets omitted from copy output (50 KB) */
23
+ export declare const COPY_PAYLOAD_MAX_BYTES = 50000;
24
+ /**
25
+ * Truncate a payload that is too large to be useful in clipboard output.
26
+ * If the serialized value exceeds `maxBytes`, returns a human-readable
27
+ * placeholder string instead of the original value.
28
+ *
29
+ * Use this in snapshot/copy functions to prevent huge values (e.g. react-query-cache)
30
+ * from making copied output unreadable or crashing the clipboard.
31
+ *
32
+ * @example
33
+ * value: truncatePayload(event.data?.value)
34
+ * // → "[omitted: 4.2 MB — too large to copy]"
35
+ */
36
+ export declare function truncatePayload(value: unknown, maxBytes?: number): unknown;
22
37
  /**
23
38
  * Truncate a string in the middle with ellipsis
24
39
  * @param str The string to truncate
@@ -1 +1 @@
1
- {"version":3,"file":"dataFormatting.d.ts","sourceRoot":"","sources":["../../../../../src/utils/formatting/dataFormatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAoB7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAW,EACvB,QAAQ,GAAE,MAAW,GACpB,MAAM,CAOR"}
1
+ {"version":3,"file":"dataFormatting.d.ts","sourceRoot":"","sources":["../../../../../src/utils/formatting/dataFormatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAoB7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,GAAE,MAA+B,GACxC,OAAO,CAUT;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAW,EACtB,UAAU,GAAE,MAAW,EACvB,QAAQ,GAAE,MAAW,GACpB,MAAM,CAOR"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/shared-ui",
3
- "version": "2.1.5",
3
+ "version": "2.1.8",
4
4
  "description": "Shared UI components, hooks, and utilities",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -115,10 +115,10 @@
115
115
  ],
116
116
  "sideEffects": false,
117
117
  "dependencies": {
118
- "@buoy-gg/floating-tools-core": "2.1.5"
118
+ "@buoy-gg/floating-tools-core": "2.1.8"
119
119
  },
120
120
  "peerDependencies": {
121
- "@buoy-gg/license": "2.1.5",
121
+ "@buoy-gg/license": "2.1.8",
122
122
  "@react-native-clipboard/clipboard": "*",
123
123
  "expo-clipboard": "*",
124
124
  "expo-file-system": "*",
@@ -146,7 +146,7 @@
146
146
  "expo-clipboard": "~7.1.5",
147
147
  "react-native-safe-area-context": "^5.6.2",
148
148
  "typescript": "~5.8.3",
149
- "@buoy-gg/license": "2.1.5"
149
+ "@buoy-gg/license": "2.1.8"
150
150
  },
151
151
  "react-native-builder-bob": {
152
152
  "source": "src",