@buoy-gg/images 7.0.3

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 (195) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +58 -0
  3. package/lib/commonjs/capture/actions.js +227 -0
  4. package/lib/commonjs/capture/actions.js.map +1 -0
  5. package/lib/commonjs/capture/install.js +41 -0
  6. package/lib/commonjs/capture/install.js.map +1 -0
  7. package/lib/commonjs/capture/installExpoImage.js +99 -0
  8. package/lib/commonjs/capture/installExpoImage.js.map +1 -0
  9. package/lib/commonjs/capture/installRnImage.js +128 -0
  10. package/lib/commonjs/capture/installRnImage.js.map +1 -0
  11. package/lib/commonjs/capture/overrides.js +286 -0
  12. package/lib/commonjs/capture/overrides.js.map +1 -0
  13. package/lib/commonjs/capture/savings.js +193 -0
  14. package/lib/commonjs/capture/savings.js.map +1 -0
  15. package/lib/commonjs/capture/shared.js +367 -0
  16. package/lib/commonjs/capture/shared.js.map +1 -0
  17. package/lib/commonjs/components/ImageDetail.js +444 -0
  18. package/lib/commonjs/components/ImageDetail.js.map +1 -0
  19. package/lib/commonjs/components/ImageDetailFooter.js +232 -0
  20. package/lib/commonjs/components/ImageDetailFooter.js.map +1 -0
  21. package/lib/commonjs/components/ImageRow.js +164 -0
  22. package/lib/commonjs/components/ImageRow.js.map +1 -0
  23. package/lib/commonjs/components/ImagesHeader.js +63 -0
  24. package/lib/commonjs/components/ImagesHeader.js.map +1 -0
  25. package/lib/commonjs/components/ImagesIcon.js +59 -0
  26. package/lib/commonjs/components/ImagesIcon.js.map +1 -0
  27. package/lib/commonjs/components/ImagesListFooter.js +194 -0
  28. package/lib/commonjs/components/ImagesListFooter.js.map +1 -0
  29. package/lib/commonjs/components/ImagesModal.js +173 -0
  30. package/lib/commonjs/components/ImagesModal.js.map +1 -0
  31. package/lib/commonjs/components/ImagesRoot.js +24 -0
  32. package/lib/commonjs/components/ImagesRoot.js.map +1 -0
  33. package/lib/commonjs/components/InsightsBar.js +59 -0
  34. package/lib/commonjs/components/InsightsBar.js.map +1 -0
  35. package/lib/commonjs/export.js +81 -0
  36. package/lib/commonjs/export.js.map +1 -0
  37. package/lib/commonjs/format.js +117 -0
  38. package/lib/commonjs/format.js.map +1 -0
  39. package/lib/commonjs/hooks/useImageRecords.js +20 -0
  40. package/lib/commonjs/hooks/useImageRecords.js.map +1 -0
  41. package/lib/commonjs/index.js +236 -0
  42. package/lib/commonjs/index.js.map +1 -0
  43. package/lib/commonjs/package.json +1 -0
  44. package/lib/commonjs/preset.js +45 -0
  45. package/lib/commonjs/preset.js.map +1 -0
  46. package/lib/commonjs/register.js +19 -0
  47. package/lib/commonjs/register.js.map +1 -0
  48. package/lib/commonjs/state.js +54 -0
  49. package/lib/commonjs/state.js.map +1 -0
  50. package/lib/commonjs/store/imageEventStore.js +160 -0
  51. package/lib/commonjs/store/imageEventStore.js.map +1 -0
  52. package/lib/commonjs/store/insights.js +76 -0
  53. package/lib/commonjs/store/insights.js.map +1 -0
  54. package/lib/commonjs/sync/imagesSyncAdapter.js +315 -0
  55. package/lib/commonjs/sync/imagesSyncAdapter.js.map +1 -0
  56. package/lib/commonjs/types.js +2 -0
  57. package/lib/commonjs/types.js.map +1 -0
  58. package/lib/module/capture/actions.js +214 -0
  59. package/lib/module/capture/actions.js.map +1 -0
  60. package/lib/module/capture/install.js +36 -0
  61. package/lib/module/capture/install.js.map +1 -0
  62. package/lib/module/capture/installExpoImage.js +94 -0
  63. package/lib/module/capture/installExpoImage.js.map +1 -0
  64. package/lib/module/capture/installRnImage.js +122 -0
  65. package/lib/module/capture/installRnImage.js.map +1 -0
  66. package/lib/module/capture/overrides.js +269 -0
  67. package/lib/module/capture/overrides.js.map +1 -0
  68. package/lib/module/capture/savings.js +189 -0
  69. package/lib/module/capture/savings.js.map +1 -0
  70. package/lib/module/capture/shared.js +359 -0
  71. package/lib/module/capture/shared.js.map +1 -0
  72. package/lib/module/components/ImageDetail.js +440 -0
  73. package/lib/module/components/ImageDetail.js.map +1 -0
  74. package/lib/module/components/ImageDetailFooter.js +228 -0
  75. package/lib/module/components/ImageDetailFooter.js.map +1 -0
  76. package/lib/module/components/ImageRow.js +160 -0
  77. package/lib/module/components/ImageRow.js.map +1 -0
  78. package/lib/module/components/ImagesHeader.js +59 -0
  79. package/lib/module/components/ImagesHeader.js.map +1 -0
  80. package/lib/module/components/ImagesIcon.js +55 -0
  81. package/lib/module/components/ImagesIcon.js.map +1 -0
  82. package/lib/module/components/ImagesListFooter.js +190 -0
  83. package/lib/module/components/ImagesListFooter.js.map +1 -0
  84. package/lib/module/components/ImagesModal.js +169 -0
  85. package/lib/module/components/ImagesModal.js.map +1 -0
  86. package/lib/module/components/ImagesRoot.js +20 -0
  87. package/lib/module/components/ImagesRoot.js.map +1 -0
  88. package/lib/module/components/InsightsBar.js +55 -0
  89. package/lib/module/components/InsightsBar.js.map +1 -0
  90. package/lib/module/export.js +76 -0
  91. package/lib/module/export.js.map +1 -0
  92. package/lib/module/format.js +108 -0
  93. package/lib/module/format.js.map +1 -0
  94. package/lib/module/hooks/useImageRecords.js +16 -0
  95. package/lib/module/hooks/useImageRecords.js.map +1 -0
  96. package/lib/module/index.js +73 -0
  97. package/lib/module/index.js.map +1 -0
  98. package/lib/module/preset.js +40 -0
  99. package/lib/module/preset.js.map +1 -0
  100. package/lib/module/register.js +19 -0
  101. package/lib/module/register.js.map +1 -0
  102. package/lib/module/state.js +50 -0
  103. package/lib/module/state.js.map +1 -0
  104. package/lib/module/store/imageEventStore.js +146 -0
  105. package/lib/module/store/imageEventStore.js.map +1 -0
  106. package/lib/module/store/insights.js +71 -0
  107. package/lib/module/store/insights.js.map +1 -0
  108. package/lib/module/sync/imagesSyncAdapter.js +311 -0
  109. package/lib/module/sync/imagesSyncAdapter.js.map +1 -0
  110. package/lib/module/types.js +2 -0
  111. package/lib/module/types.js.map +1 -0
  112. package/lib/typescript/capture/actions.d.ts +49 -0
  113. package/lib/typescript/capture/actions.d.ts.map +1 -0
  114. package/lib/typescript/capture/install.d.ts +15 -0
  115. package/lib/typescript/capture/install.d.ts.map +1 -0
  116. package/lib/typescript/capture/installExpoImage.d.ts +23 -0
  117. package/lib/typescript/capture/installExpoImage.d.ts.map +1 -0
  118. package/lib/typescript/capture/installRnImage.d.ts +24 -0
  119. package/lib/typescript/capture/installRnImage.d.ts.map +1 -0
  120. package/lib/typescript/capture/overrides.d.ts +83 -0
  121. package/lib/typescript/capture/overrides.d.ts.map +1 -0
  122. package/lib/typescript/capture/savings.d.ts +37 -0
  123. package/lib/typescript/capture/savings.d.ts.map +1 -0
  124. package/lib/typescript/capture/shared.d.ts +61 -0
  125. package/lib/typescript/capture/shared.d.ts.map +1 -0
  126. package/lib/typescript/components/ImageDetail.d.ts +13 -0
  127. package/lib/typescript/components/ImageDetail.d.ts.map +1 -0
  128. package/lib/typescript/components/ImageDetailFooter.d.ts +19 -0
  129. package/lib/typescript/components/ImageDetailFooter.d.ts.map +1 -0
  130. package/lib/typescript/components/ImageRow.d.ts +15 -0
  131. package/lib/typescript/components/ImageRow.d.ts.map +1 -0
  132. package/lib/typescript/components/ImagesHeader.d.ts +25 -0
  133. package/lib/typescript/components/ImagesHeader.d.ts.map +1 -0
  134. package/lib/typescript/components/ImagesIcon.d.ts +13 -0
  135. package/lib/typescript/components/ImagesIcon.d.ts.map +1 -0
  136. package/lib/typescript/components/ImagesListFooter.d.ts +8 -0
  137. package/lib/typescript/components/ImagesListFooter.d.ts.map +1 -0
  138. package/lib/typescript/components/ImagesModal.d.ts +17 -0
  139. package/lib/typescript/components/ImagesModal.d.ts.map +1 -0
  140. package/lib/typescript/components/ImagesRoot.d.ts +11 -0
  141. package/lib/typescript/components/ImagesRoot.d.ts.map +1 -0
  142. package/lib/typescript/components/InsightsBar.d.ts +13 -0
  143. package/lib/typescript/components/InsightsBar.d.ts.map +1 -0
  144. package/lib/typescript/export.d.ts +12 -0
  145. package/lib/typescript/export.d.ts.map +1 -0
  146. package/lib/typescript/format.d.ts +26 -0
  147. package/lib/typescript/format.d.ts.map +1 -0
  148. package/lib/typescript/hooks/useImageRecords.d.ts +11 -0
  149. package/lib/typescript/hooks/useImageRecords.d.ts.map +1 -0
  150. package/lib/typescript/index.d.ts +33 -0
  151. package/lib/typescript/index.d.ts.map +1 -0
  152. package/lib/typescript/preset.d.ts +38 -0
  153. package/lib/typescript/preset.d.ts.map +1 -0
  154. package/lib/typescript/register.d.ts +15 -0
  155. package/lib/typescript/register.d.ts.map +1 -0
  156. package/lib/typescript/state.d.ts +54 -0
  157. package/lib/typescript/state.d.ts.map +1 -0
  158. package/lib/typescript/store/imageEventStore.d.ts +34 -0
  159. package/lib/typescript/store/imageEventStore.d.ts.map +1 -0
  160. package/lib/typescript/store/insights.d.ts +11 -0
  161. package/lib/typescript/store/insights.d.ts.map +1 -0
  162. package/lib/typescript/sync/imagesSyncAdapter.d.ts +205 -0
  163. package/lib/typescript/sync/imagesSyncAdapter.d.ts.map +1 -0
  164. package/lib/typescript/types.d.ts +121 -0
  165. package/lib/typescript/types.d.ts.map +1 -0
  166. package/package.json +67 -0
  167. package/register.d.ts +1 -0
  168. package/register.js +15 -0
  169. package/src/capture/actions.ts +206 -0
  170. package/src/capture/install.ts +36 -0
  171. package/src/capture/installExpoImage.ts +115 -0
  172. package/src/capture/installRnImage.tsx +133 -0
  173. package/src/capture/overrides.ts +282 -0
  174. package/src/capture/savings.ts +193 -0
  175. package/src/capture/shared.ts +387 -0
  176. package/src/components/ImageDetail.tsx +456 -0
  177. package/src/components/ImageDetailFooter.tsx +270 -0
  178. package/src/components/ImageRow.tsx +148 -0
  179. package/src/components/ImagesHeader.tsx +77 -0
  180. package/src/components/ImagesIcon.tsx +66 -0
  181. package/src/components/ImagesListFooter.tsx +193 -0
  182. package/src/components/ImagesModal.tsx +195 -0
  183. package/src/components/ImagesRoot.tsx +18 -0
  184. package/src/components/InsightsBar.tsx +51 -0
  185. package/src/export.ts +100 -0
  186. package/src/format.ts +85 -0
  187. package/src/hooks/useImageRecords.ts +24 -0
  188. package/src/index.tsx +108 -0
  189. package/src/preset.tsx +35 -0
  190. package/src/register.ts +17 -0
  191. package/src/state.ts +88 -0
  192. package/src/store/imageEventStore.ts +162 -0
  193. package/src/store/insights.ts +66 -0
  194. package/src/sync/imagesSyncAdapter.ts +261 -0
  195. package/src/types.ts +111 -0
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ImageDetailFooter — bottom navbar for the detail view: previous/next
5
+ * stepping through the captured list at the edges, per-image actions in the
6
+ * middle (hard reload / retry), with inline action feedback. Styling matches
7
+ * shared-ui's EventStepperFooter so it reads like the rest of Buoy.
8
+ *
9
+ * Mount with key={record.id} so action feedback resets when stepping.
10
+ */
11
+
12
+ import { useState } from "react";
13
+ import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
14
+ import { ChevronLeft, ChevronRight, RefreshCw, macOSColors, useSafeAreaInsets } from "@buoy-gg/shared-ui";
15
+ import { hardReloadRecord, retryRecord } from "../capture/actions";
16
+ import { clearOverride, flashRecord, setOverride } from "../capture/overrides";
17
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
+ export function ImageDetailFooter({
19
+ record,
20
+ hasPrevious,
21
+ hasNext,
22
+ onPrevious,
23
+ onNext
24
+ }) {
25
+ const insets = useSafeAreaInsets();
26
+ const [message, setMessage] = useState(null);
27
+ const runAction = action => {
28
+ setMessage("…");
29
+ action().then(result => setMessage(result.message)).catch(error => setMessage(String(error?.message ?? error)));
30
+ };
31
+ const actionsDisabled = !record.mounted;
32
+ const overrideActive = record.overrideLabel != null;
33
+ const simulate = (source, label) => {
34
+ setOverride(record.id, {
35
+ source,
36
+ label
37
+ });
38
+ setMessage(`${label} — Restore to undo`);
39
+ };
40
+ return /*#__PURE__*/_jsxs(View, {
41
+ style: [styles.footer, {
42
+ paddingBottom: 12 + insets.bottom
43
+ }],
44
+ children: [message ? /*#__PURE__*/_jsx(Text, {
45
+ style: styles.message,
46
+ numberOfLines: 1,
47
+ children: message
48
+ }) : actionsDisabled ? /*#__PURE__*/_jsx(Text, {
49
+ style: styles.hint,
50
+ numberOfLines: 1,
51
+ children: "Instance unmounted \u2014 reload actions need the image on screen."
52
+ }) : null, /*#__PURE__*/_jsxs(View, {
53
+ style: styles.row,
54
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
55
+ onPress: onPrevious,
56
+ disabled: !hasPrevious,
57
+ style: [styles.navButton, !hasPrevious && styles.disabled],
58
+ activeOpacity: 0.7,
59
+ accessibilityLabel: "Previous image",
60
+ children: /*#__PURE__*/_jsx(ChevronLeft, {
61
+ size: 20,
62
+ color: hasPrevious ? macOSColors.text.primary : macOSColors.text.muted
63
+ })
64
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
65
+ onPress: () => runAction(() => hardReloadRecord(record)),
66
+ disabled: actionsDisabled,
67
+ style: [styles.actionButton, actionsDisabled && styles.disabled],
68
+ activeOpacity: 0.7,
69
+ children: [/*#__PURE__*/_jsx(RefreshCw, {
70
+ size: 13,
71
+ color: actionsDisabled ? macOSColors.text.muted : macOSColors.semantic.info
72
+ }), /*#__PURE__*/_jsx(Text, {
73
+ style: [styles.actionText, actionsDisabled && styles.actionTextDisabled],
74
+ children: "Hard reload"
75
+ })]
76
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
77
+ onPress: () => runAction(() => retryRecord(record)),
78
+ disabled: actionsDisabled,
79
+ style: [styles.actionButton, actionsDisabled && styles.disabled],
80
+ activeOpacity: 0.7,
81
+ children: /*#__PURE__*/_jsx(Text, {
82
+ style: [styles.actionText, actionsDisabled && styles.actionTextDisabled],
83
+ children: record.status === "error" ? "Retry" : "Reload"
84
+ })
85
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
86
+ onPress: onNext,
87
+ disabled: !hasNext,
88
+ style: [styles.navButton, !hasNext && styles.disabled],
89
+ activeOpacity: 0.7,
90
+ accessibilityLabel: "Next image",
91
+ children: /*#__PURE__*/_jsx(ChevronRight, {
92
+ size: 20,
93
+ color: hasNext ? macOSColors.text.primary : macOSColors.text.muted
94
+ })
95
+ })]
96
+ }), /*#__PURE__*/_jsxs(View, {
97
+ style: styles.row,
98
+ children: [/*#__PURE__*/_jsx(SimButton, {
99
+ label: "Error",
100
+ disabled: actionsDisabled,
101
+ onPress: () => simulate({
102
+ type: "error"
103
+ }, "Forced error")
104
+ }), /*#__PURE__*/_jsx(SimButton, {
105
+ label: "Loading",
106
+ disabled: actionsDisabled,
107
+ onPress: () => simulate({
108
+ type: "hang"
109
+ }, "Forced loading")
110
+ }), /*#__PURE__*/_jsx(SimButton, {
111
+ label: "Blank",
112
+ disabled: actionsDisabled,
113
+ onPress: () => simulate({
114
+ type: "blank"
115
+ }, "Blanked")
116
+ }), /*#__PURE__*/_jsx(SimButton, {
117
+ label: "Find",
118
+ disabled: actionsDisabled,
119
+ onPress: () => {
120
+ flashRecord(record.id);
121
+ setMessage("Flashing a red border on the image (2.5s)");
122
+ }
123
+ }), /*#__PURE__*/_jsx(SimButton, {
124
+ label: "Restore",
125
+ accent: true,
126
+ disabled: !overrideActive,
127
+ onPress: () => {
128
+ clearOverride(record.id);
129
+ setMessage("Override removed — original source restored");
130
+ }
131
+ })]
132
+ })]
133
+ });
134
+ }
135
+ function SimButton({
136
+ label,
137
+ onPress,
138
+ disabled,
139
+ accent
140
+ }) {
141
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
142
+ onPress: onPress,
143
+ disabled: disabled,
144
+ style: [styles.simButton, disabled && styles.disabled],
145
+ activeOpacity: 0.7,
146
+ children: /*#__PURE__*/_jsx(Text, {
147
+ style: [styles.simText, accent && !disabled && styles.simTextAccent, disabled && styles.actionTextDisabled],
148
+ children: label
149
+ })
150
+ });
151
+ }
152
+ const styles = StyleSheet.create({
153
+ footer: {
154
+ paddingHorizontal: 12,
155
+ paddingTop: 10,
156
+ backgroundColor: macOSColors.background.base,
157
+ borderTopWidth: 1,
158
+ borderTopColor: macOSColors.border.default,
159
+ gap: 8
160
+ },
161
+ row: {
162
+ flexDirection: "row",
163
+ alignItems: "center",
164
+ gap: 8
165
+ },
166
+ navButton: {
167
+ paddingHorizontal: 10,
168
+ paddingVertical: 8,
169
+ borderRadius: 6,
170
+ backgroundColor: macOSColors.background.card,
171
+ alignItems: "center",
172
+ justifyContent: "center"
173
+ },
174
+ actionButton: {
175
+ flex: 1,
176
+ flexDirection: "row",
177
+ alignItems: "center",
178
+ justifyContent: "center",
179
+ gap: 6,
180
+ paddingVertical: 8,
181
+ borderRadius: 6,
182
+ backgroundColor: macOSColors.background.card,
183
+ borderWidth: StyleSheet.hairlineWidth,
184
+ borderColor: macOSColors.border.default
185
+ },
186
+ actionText: {
187
+ fontSize: 11,
188
+ fontWeight: "600",
189
+ color: macOSColors.text.primary,
190
+ fontFamily: "monospace",
191
+ textTransform: "uppercase"
192
+ },
193
+ actionTextDisabled: {
194
+ color: macOSColors.text.muted
195
+ },
196
+ disabled: {
197
+ opacity: 0.4
198
+ },
199
+ simButton: {
200
+ flex: 1,
201
+ alignItems: "center",
202
+ paddingVertical: 7,
203
+ borderRadius: 6,
204
+ backgroundColor: macOSColors.background.card,
205
+ borderWidth: StyleSheet.hairlineWidth,
206
+ borderColor: macOSColors.border.default
207
+ },
208
+ simText: {
209
+ fontSize: 10,
210
+ fontWeight: "600",
211
+ color: macOSColors.text.secondary,
212
+ fontFamily: "monospace",
213
+ textTransform: "uppercase"
214
+ },
215
+ simTextAccent: {
216
+ color: macOSColors.semantic.warning
217
+ },
218
+ message: {
219
+ color: macOSColors.semantic.info,
220
+ fontSize: 10,
221
+ fontFamily: "monospace"
222
+ },
223
+ hint: {
224
+ color: macOSColors.text.muted,
225
+ fontSize: 10
226
+ }
227
+ });
228
+ //# sourceMappingURL=ImageDetailFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","StyleSheet","Text","TouchableOpacity","View","ChevronLeft","ChevronRight","RefreshCw","macOSColors","useSafeAreaInsets","hardReloadRecord","retryRecord","clearOverride","flashRecord","setOverride","jsx","_jsx","jsxs","_jsxs","ImageDetailFooter","record","hasPrevious","hasNext","onPrevious","onNext","insets","message","setMessage","runAction","action","then","result","catch","error","String","actionsDisabled","mounted","overrideActive","overrideLabel","simulate","source","label","id","style","styles","footer","paddingBottom","bottom","children","numberOfLines","hint","row","onPress","disabled","navButton","activeOpacity","accessibilityLabel","size","color","text","primary","muted","actionButton","semantic","info","actionText","actionTextDisabled","status","SimButton","type","accent","simButton","simText","simTextAccent","create","paddingHorizontal","paddingTop","backgroundColor","background","base","borderTopWidth","borderTopColor","border","default","gap","flexDirection","alignItems","paddingVertical","borderRadius","card","justifyContent","flex","borderWidth","hairlineWidth","borderColor","fontSize","fontWeight","fontFamily","textTransform","opacity","secondary","warning"],"sourceRoot":"../../../src","sources":["components/ImageDetailFooter.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ImageRow — one captured image in the list: thumbnail, filename, library +
5
+ * cache badges, load time, and the size verdict.
6
+ *
7
+ * Thumbnails carry the buoy-internal testID so the capture layer skips them —
8
+ * the tool must never appear in its own registry.
9
+ */
10
+
11
+ import { Image, StyleSheet, Text, TouchableOpacity, View } from "react-native";
12
+ import { macOSColors } from "@buoy-gg/shared-ui";
13
+ import { cacheBadge, formatMs, sizeVerdict, statusColor, uriTail } from "../format";
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ export function ImageRow({
16
+ record,
17
+ onPress
18
+ }) {
19
+ const verdict = sizeVerdict(record);
20
+ const cache = cacheBadge(record);
21
+ const showThumb = record.sourceKind === "network" || record.sourceKind === "asset" || record.sourceKind === "file";
22
+ return /*#__PURE__*/_jsxs(TouchableOpacity, {
23
+ style: styles.row,
24
+ testID: `buoy-image-row-${record.id}`,
25
+ onPress: () => onPress(record.id),
26
+ children: [/*#__PURE__*/_jsxs(View, {
27
+ style: styles.thumbBox,
28
+ children: [showThumb && record.uri ? /*#__PURE__*/_jsx(Image, {
29
+ testID: "buoy-internal-images-thumb",
30
+ source: {
31
+ uri: record.uri
32
+ },
33
+ style: styles.thumb,
34
+ resizeMode: "cover"
35
+ }) : /*#__PURE__*/_jsx(Text, {
36
+ style: styles.thumbFallback,
37
+ children: "?"
38
+ }), /*#__PURE__*/_jsx(View, {
39
+ style: [styles.statusDot, {
40
+ backgroundColor: statusColor(record)
41
+ }]
42
+ })]
43
+ }), /*#__PURE__*/_jsxs(View, {
44
+ style: styles.main,
45
+ children: [/*#__PURE__*/_jsx(Text, {
46
+ style: styles.name,
47
+ numberOfLines: 1,
48
+ children: uriTail(record.uri)
49
+ }), /*#__PURE__*/_jsxs(View, {
50
+ style: styles.metaRow,
51
+ children: [/*#__PURE__*/_jsx(Text, {
52
+ style: [styles.badge, {
53
+ color: macOSColors.text.muted
54
+ }],
55
+ children: record.lib === "expo" ? "EXPO" : "RN"
56
+ }), /*#__PURE__*/_jsx(Text, {
57
+ style: [styles.badge, {
58
+ color: cache.color
59
+ }],
60
+ children: cache.label
61
+ }), record.overrideLabel ? /*#__PURE__*/_jsx(Text, {
62
+ style: [styles.badge, {
63
+ color: macOSColors.semantic.warning
64
+ }],
65
+ children: "SIM"
66
+ }) : null, /*#__PURE__*/_jsx(Text, {
67
+ style: styles.meta,
68
+ children: formatMs(record.durationMs)
69
+ }), record.intrinsic ? /*#__PURE__*/_jsxs(Text, {
70
+ style: styles.meta,
71
+ children: [record.intrinsic.width, "\xD7", record.intrinsic.height]
72
+ }) : null]
73
+ })]
74
+ }), /*#__PURE__*/_jsx(View, {
75
+ style: styles.right,
76
+ children: record.status === "error" ? /*#__PURE__*/_jsx(Text, {
77
+ style: [styles.verdict, {
78
+ color: macOSColors.semantic.error
79
+ }],
80
+ children: "FAILED"
81
+ }) : verdict.label ? /*#__PURE__*/_jsx(Text, {
82
+ style: [styles.verdict, {
83
+ color: verdict.color
84
+ }],
85
+ children: verdict.label
86
+ }) : null
87
+ })]
88
+ });
89
+ }
90
+ const styles = StyleSheet.create({
91
+ row: {
92
+ flexDirection: "row",
93
+ alignItems: "center",
94
+ paddingHorizontal: 12,
95
+ paddingVertical: 8,
96
+ borderBottomWidth: StyleSheet.hairlineWidth,
97
+ borderBottomColor: macOSColors.border.default,
98
+ gap: 10
99
+ },
100
+ thumbBox: {
101
+ width: 40,
102
+ height: 40,
103
+ borderRadius: 6,
104
+ backgroundColor: macOSColors.background.input,
105
+ alignItems: "center",
106
+ justifyContent: "center",
107
+ overflow: "hidden"
108
+ },
109
+ thumb: {
110
+ width: 40,
111
+ height: 40
112
+ },
113
+ thumbFallback: {
114
+ color: macOSColors.text.muted,
115
+ fontSize: 16,
116
+ fontWeight: "700"
117
+ },
118
+ statusDot: {
119
+ position: "absolute",
120
+ right: 2,
121
+ bottom: 2,
122
+ width: 8,
123
+ height: 8,
124
+ borderRadius: 4,
125
+ borderWidth: 1,
126
+ borderColor: macOSColors.background.base
127
+ },
128
+ main: {
129
+ flex: 1,
130
+ gap: 2
131
+ },
132
+ name: {
133
+ color: macOSColors.text.primary,
134
+ fontSize: 12,
135
+ fontWeight: "600"
136
+ },
137
+ metaRow: {
138
+ flexDirection: "row",
139
+ alignItems: "center",
140
+ gap: 8
141
+ },
142
+ badge: {
143
+ fontSize: 9,
144
+ fontWeight: "700",
145
+ letterSpacing: 0.5
146
+ },
147
+ meta: {
148
+ color: macOSColors.text.secondary,
149
+ fontSize: 10,
150
+ fontVariant: ["tabular-nums"]
151
+ },
152
+ right: {
153
+ alignItems: "flex-end"
154
+ },
155
+ verdict: {
156
+ fontSize: 10,
157
+ fontWeight: "700"
158
+ }
159
+ });
160
+ //# sourceMappingURL=ImageRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Image","StyleSheet","Text","TouchableOpacity","View","macOSColors","cacheBadge","formatMs","sizeVerdict","statusColor","uriTail","jsx","_jsx","jsxs","_jsxs","ImageRow","record","onPress","verdict","cache","showThumb","sourceKind","style","styles","row","testID","id","children","thumbBox","uri","source","thumb","resizeMode","thumbFallback","statusDot","backgroundColor","main","name","numberOfLines","metaRow","badge","color","text","muted","lib","label","overrideLabel","semantic","warning","meta","durationMs","intrinsic","width","height","right","status","error","create","flexDirection","alignItems","paddingHorizontal","paddingVertical","borderBottomWidth","hairlineWidth","borderBottomColor","border","default","gap","borderRadius","background","input","justifyContent","overflow","fontSize","fontWeight","position","bottom","borderWidth","borderColor","base","flex","primary","letterSpacing","secondary","fontVariant"],"sourceRoot":"../../../src","sources":["components/ImageRow.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * ImagesHeader — shared ModalHeader wiring for the Images tool, matching the
5
+ * Console/Network header pattern. List mode shows aggregate stats, the shared
6
+ * ToolbarCopyButton (full registry report) and the shared ToolbarClearButton;
7
+ * detail mode shows back navigation plus the copy button for that record's
8
+ * report. Copy behavior (Pro gating, hint banner, success/error feedback)
9
+ * comes from shared-ui — identical to every other tool.
10
+ */
11
+
12
+ import { ModalHeader, ToolbarClearButton, ToolbarCopyButton } from "@buoy-gg/shared-ui";
13
+ import { formatBytes } from "../format";
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ export function ImagesHeader({
16
+ stats,
17
+ detailOpen,
18
+ detailIndex = -1,
19
+ detailTotal = 0,
20
+ onCloseDetail,
21
+ onClear,
22
+ getReport,
23
+ onBack
24
+ }) {
25
+ if (detailOpen) {
26
+ const counter = detailIndex >= 0 && detailTotal > 0 ? `${detailIndex + 1} of ${detailTotal}` : undefined;
27
+ return /*#__PURE__*/_jsxs(ModalHeader, {
28
+ children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
29
+ onBack: onCloseDetail
30
+ }), /*#__PURE__*/_jsx(ModalHeader.Content, {
31
+ title: "Image detail",
32
+ subtitle: counter
33
+ }), /*#__PURE__*/_jsx(ModalHeader.Actions, {
34
+ children: /*#__PURE__*/_jsx(ToolbarCopyButton, {
35
+ value: getReport
36
+ })
37
+ })]
38
+ });
39
+ }
40
+ const subtitleParts = [`${stats.total} images`, `${stats.errors} failed`, `≈${formatBytes(stats.estDecodedBytes)} decoded`];
41
+ if (stats.estWastedBytes > 0) {
42
+ subtitleParts.push(`${formatBytes(stats.estWastedBytes)} wasted`);
43
+ }
44
+ return /*#__PURE__*/_jsxs(ModalHeader, {
45
+ children: [onBack ? /*#__PURE__*/_jsx(ModalHeader.Navigation, {
46
+ onBack: onBack
47
+ }) : null, /*#__PURE__*/_jsx(ModalHeader.Content, {
48
+ title: "Images",
49
+ subtitle: subtitleParts.join(" · ")
50
+ }), /*#__PURE__*/_jsxs(ModalHeader.Actions, {
51
+ children: [/*#__PURE__*/_jsx(ToolbarCopyButton, {
52
+ value: getReport
53
+ }), /*#__PURE__*/_jsx(ToolbarClearButton, {
54
+ onPress: onClear
55
+ })]
56
+ })]
57
+ });
58
+ }
59
+ //# sourceMappingURL=ImagesHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ModalHeader","ToolbarClearButton","ToolbarCopyButton","formatBytes","jsx","_jsx","jsxs","_jsxs","ImagesHeader","stats","detailOpen","detailIndex","detailTotal","onCloseDetail","onClear","getReport","onBack","counter","undefined","children","Navigation","Content","title","subtitle","Actions","value","subtitleParts","total","errors","estDecodedBytes","estWastedBytes","push","join","onPress"],"sourceRoot":"../../../src","sources":["components/ImagesHeader.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,WAAW,EACXC,kBAAkB,EAClBC,iBAAiB,QACZ,oBAAoB;AAC3B,SAASC,WAAW,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBxC,OAAO,SAASC,YAAYA,CAAC;EAC3BC,KAAK;EACLC,UAAU;EACVC,WAAW,GAAG,CAAC,CAAC;EAChBC,WAAW,GAAG,CAAC;EACfC,aAAa;EACbC,OAAO;EACPC,SAAS;EACTC;AACiB,CAAC,EAAE;EACpB,IAAIN,UAAU,EAAE;IACd,MAAMO,OAAO,GACXN,WAAW,IAAI,CAAC,IAAIC,WAAW,GAAG,CAAC,GAC/B,GAAGD,WAAW,GAAG,CAAC,OAAOC,WAAW,EAAE,GACtCM,SAAS;IACf,oBACEX,KAAA,CAACP,WAAW;MAAAmB,QAAA,gBACVd,IAAA,CAACL,WAAW,CAACoB,UAAU;QAACJ,MAAM,EAAEH;MAAc,CAAE,CAAC,eACjDR,IAAA,CAACL,WAAW,CAACqB,OAAO;QAACC,KAAK,EAAC,cAAc;QAACC,QAAQ,EAAEN;MAAQ,CAAE,CAAC,eAC/DZ,IAAA,CAACL,WAAW,CAACwB,OAAO;QAAAL,QAAA,eAClBd,IAAA,CAACH,iBAAiB;UAACuB,KAAK,EAAEV;QAAU,CAAE;MAAC,CACpB,CAAC;IAAA,CACX,CAAC;EAElB;EAEA,MAAMW,aAAa,GAAG,CACpB,GAAGjB,KAAK,CAACkB,KAAK,SAAS,EACvB,GAAGlB,KAAK,CAACmB,MAAM,SAAS,EACxB,IAAIzB,WAAW,CAACM,KAAK,CAACoB,eAAe,CAAC,UAAU,CACjD;EACD,IAAIpB,KAAK,CAACqB,cAAc,GAAG,CAAC,EAAE;IAC5BJ,aAAa,CAACK,IAAI,CAAC,GAAG5B,WAAW,CAACM,KAAK,CAACqB,cAAc,CAAC,SAAS,CAAC;EACnE;EAEA,oBACEvB,KAAA,CAACP,WAAW;IAAAmB,QAAA,GACTH,MAAM,gBAAGX,IAAA,CAACL,WAAW,CAACoB,UAAU;MAACJ,MAAM,EAAEA;IAAO,CAAE,CAAC,GAAG,IAAI,eAC3DX,IAAA,CAACL,WAAW,CAACqB,OAAO;MAACC,KAAK,EAAC,QAAQ;MAACC,QAAQ,EAAEG,aAAa,CAACM,IAAI,CAAC,KAAK;IAAE,CAAE,CAAC,eAC3EzB,KAAA,CAACP,WAAW,CAACwB,OAAO;MAAAL,QAAA,gBAClBd,IAAA,CAACH,iBAAiB;QAACuB,KAAK,EAAEV;MAAU,CAAE,CAAC,eACvCV,IAAA,CAACJ,kBAAkB;QAACgC,OAAO,EAAEnB;MAAQ,CAAE,CAAC;IAAA,CACrB,CAAC;EAAA,CACX,CAAC;AAElB","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ import { View, Text, StyleSheet } from "react-native";
4
+
5
+ /** Tool accent color (photo violet). */
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ export const IMAGES_ICON_COLOR = "#C084FC";
8
+ /**
9
+ * Dependency-free "picture" glyph: rounded frame with a sun dot and a
10
+ * mountain-ish baseline, rendered from plain views.
11
+ */
12
+ export function ImagesIcon({
13
+ size,
14
+ color = IMAGES_ICON_COLOR
15
+ }) {
16
+ return /*#__PURE__*/_jsxs(View, {
17
+ style: [styles.frame, {
18
+ width: size,
19
+ height: size,
20
+ borderRadius: size * 0.2,
21
+ borderColor: color
22
+ }],
23
+ children: [/*#__PURE__*/_jsx(View, {
24
+ style: [styles.sun, {
25
+ width: size * 0.18,
26
+ height: size * 0.18,
27
+ borderRadius: size * 0.09,
28
+ backgroundColor: color,
29
+ top: size * 0.18,
30
+ right: size * 0.2
31
+ }]
32
+ }), /*#__PURE__*/_jsx(Text, {
33
+ style: {
34
+ color,
35
+ fontSize: size * 0.52,
36
+ fontWeight: "700",
37
+ lineHeight: size * 0.62,
38
+ marginTop: size * 0.28
39
+ },
40
+ children: "▲"
41
+ })]
42
+ });
43
+ }
44
+ const styles = StyleSheet.create({
45
+ frame: {
46
+ borderWidth: 1.5,
47
+ alignItems: "center",
48
+ justifyContent: "flex-end",
49
+ overflow: "hidden"
50
+ },
51
+ sun: {
52
+ position: "absolute"
53
+ }
54
+ });
55
+ //# sourceMappingURL=ImagesIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["View","Text","StyleSheet","jsx","_jsx","jsxs","_jsxs","IMAGES_ICON_COLOR","ImagesIcon","size","color","style","styles","frame","width","height","borderRadius","borderColor","children","sun","backgroundColor","top","right","fontSize","fontWeight","lineHeight","marginTop","create","borderWidth","alignItems","justifyContent","overflow","position"],"sourceRoot":"../../../src","sources":["components/ImagesIcon.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;;AAErD;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,OAAO,MAAMC,iBAAiB,GAAG,SAAS;AAO1C;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC,IAAI;EAAEC,KAAK,GAAGH;AAAmC,CAAC,EAAE;EAC/E,oBACED,KAAA,CAACN,IAAI;IACHW,KAAK,EAAE,CACLC,MAAM,CAACC,KAAK,EACZ;MACEC,KAAK,EAAEL,IAAI;MACXM,MAAM,EAAEN,IAAI;MACZO,YAAY,EAAEP,IAAI,GAAG,GAAG;MACxBQ,WAAW,EAAEP;IACf,CAAC,CACD;IAAAQ,QAAA,gBAEFd,IAAA,CAACJ,IAAI;MACHW,KAAK,EAAE,CACLC,MAAM,CAACO,GAAG,EACV;QACEL,KAAK,EAAEL,IAAI,GAAG,IAAI;QAClBM,MAAM,EAAEN,IAAI,GAAG,IAAI;QACnBO,YAAY,EAAEP,IAAI,GAAG,IAAI;QACzBW,eAAe,EAAEV,KAAK;QACtBW,GAAG,EAAEZ,IAAI,GAAG,IAAI;QAChBa,KAAK,EAAEb,IAAI,GAAG;MAChB,CAAC;IACD,CACH,CAAC,eACFL,IAAA,CAACH,IAAI;MACHU,KAAK,EAAE;QACLD,KAAK;QACLa,QAAQ,EAAEd,IAAI,GAAG,IAAI;QACrBe,UAAU,EAAE,KAAK;QACjBC,UAAU,EAAEhB,IAAI,GAAG,IAAI;QACvBiB,SAAS,EAAEjB,IAAI,GAAG;MACpB,CAAE;MAAAS,QAAA,EAED;IAAG,CACA,CAAC;EAAA,CACH,CAAC;AAEX;AAEA,MAAMN,MAAM,GAAGV,UAAU,CAACyB,MAAM,CAAC;EAC/Bd,KAAK,EAAE;IACLe,WAAW,EAAE,GAAG;IAChBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,UAAU;IAC1BC,QAAQ,EAAE;EACZ,CAAC;EACDZ,GAAG,EAAE;IACHa,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}