@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,232 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImageDetailFooter = ImageDetailFooter;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _actions = require("../capture/actions");
11
+ var _overrides = require("../capture/overrides");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ /**
14
+ * ImageDetailFooter — bottom navbar for the detail view: previous/next
15
+ * stepping through the captured list at the edges, per-image actions in the
16
+ * middle (hard reload / retry), with inline action feedback. Styling matches
17
+ * shared-ui's EventStepperFooter so it reads like the rest of Buoy.
18
+ *
19
+ * Mount with key={record.id} so action feedback resets when stepping.
20
+ */
21
+
22
+ function ImageDetailFooter({
23
+ record,
24
+ hasPrevious,
25
+ hasNext,
26
+ onPrevious,
27
+ onNext
28
+ }) {
29
+ const insets = (0, _sharedUi.useSafeAreaInsets)();
30
+ const [message, setMessage] = (0, _react.useState)(null);
31
+ const runAction = action => {
32
+ setMessage("…");
33
+ action().then(result => setMessage(result.message)).catch(error => setMessage(String(error?.message ?? error)));
34
+ };
35
+ const actionsDisabled = !record.mounted;
36
+ const overrideActive = record.overrideLabel != null;
37
+ const simulate = (source, label) => {
38
+ (0, _overrides.setOverride)(record.id, {
39
+ source,
40
+ label
41
+ });
42
+ setMessage(`${label} — Restore to undo`);
43
+ };
44
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
45
+ style: [styles.footer, {
46
+ paddingBottom: 12 + insets.bottom
47
+ }],
48
+ children: [message ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
49
+ style: styles.message,
50
+ numberOfLines: 1,
51
+ children: message
52
+ }) : actionsDisabled ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
53
+ style: styles.hint,
54
+ numberOfLines: 1,
55
+ children: "Instance unmounted \u2014 reload actions need the image on screen."
56
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
57
+ style: styles.row,
58
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
59
+ onPress: onPrevious,
60
+ disabled: !hasPrevious,
61
+ style: [styles.navButton, !hasPrevious && styles.disabled],
62
+ activeOpacity: 0.7,
63
+ accessibilityLabel: "Previous image",
64
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronLeft, {
65
+ size: 20,
66
+ color: hasPrevious ? _sharedUi.macOSColors.text.primary : _sharedUi.macOSColors.text.muted
67
+ })
68
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
69
+ onPress: () => runAction(() => (0, _actions.hardReloadRecord)(record)),
70
+ disabled: actionsDisabled,
71
+ style: [styles.actionButton, actionsDisabled && styles.disabled],
72
+ activeOpacity: 0.7,
73
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.RefreshCw, {
74
+ size: 13,
75
+ color: actionsDisabled ? _sharedUi.macOSColors.text.muted : _sharedUi.macOSColors.semantic.info
76
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
77
+ style: [styles.actionText, actionsDisabled && styles.actionTextDisabled],
78
+ children: "Hard reload"
79
+ })]
80
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
81
+ onPress: () => runAction(() => (0, _actions.retryRecord)(record)),
82
+ disabled: actionsDisabled,
83
+ style: [styles.actionButton, actionsDisabled && styles.disabled],
84
+ activeOpacity: 0.7,
85
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
86
+ style: [styles.actionText, actionsDisabled && styles.actionTextDisabled],
87
+ children: record.status === "error" ? "Retry" : "Reload"
88
+ })
89
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
90
+ onPress: onNext,
91
+ disabled: !hasNext,
92
+ style: [styles.navButton, !hasNext && styles.disabled],
93
+ activeOpacity: 0.7,
94
+ accessibilityLabel: "Next image",
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
96
+ size: 20,
97
+ color: hasNext ? _sharedUi.macOSColors.text.primary : _sharedUi.macOSColors.text.muted
98
+ })
99
+ })]
100
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
101
+ style: styles.row,
102
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(SimButton, {
103
+ label: "Error",
104
+ disabled: actionsDisabled,
105
+ onPress: () => simulate({
106
+ type: "error"
107
+ }, "Forced error")
108
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SimButton, {
109
+ label: "Loading",
110
+ disabled: actionsDisabled,
111
+ onPress: () => simulate({
112
+ type: "hang"
113
+ }, "Forced loading")
114
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SimButton, {
115
+ label: "Blank",
116
+ disabled: actionsDisabled,
117
+ onPress: () => simulate({
118
+ type: "blank"
119
+ }, "Blanked")
120
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SimButton, {
121
+ label: "Find",
122
+ disabled: actionsDisabled,
123
+ onPress: () => {
124
+ (0, _overrides.flashRecord)(record.id);
125
+ setMessage("Flashing a red border on the image (2.5s)");
126
+ }
127
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SimButton, {
128
+ label: "Restore",
129
+ accent: true,
130
+ disabled: !overrideActive,
131
+ onPress: () => {
132
+ (0, _overrides.clearOverride)(record.id);
133
+ setMessage("Override removed — original source restored");
134
+ }
135
+ })]
136
+ })]
137
+ });
138
+ }
139
+ function SimButton({
140
+ label,
141
+ onPress,
142
+ disabled,
143
+ accent
144
+ }) {
145
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
146
+ onPress: onPress,
147
+ disabled: disabled,
148
+ style: [styles.simButton, disabled && styles.disabled],
149
+ activeOpacity: 0.7,
150
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
151
+ style: [styles.simText, accent && !disabled && styles.simTextAccent, disabled && styles.actionTextDisabled],
152
+ children: label
153
+ })
154
+ });
155
+ }
156
+ const styles = _reactNative.StyleSheet.create({
157
+ footer: {
158
+ paddingHorizontal: 12,
159
+ paddingTop: 10,
160
+ backgroundColor: _sharedUi.macOSColors.background.base,
161
+ borderTopWidth: 1,
162
+ borderTopColor: _sharedUi.macOSColors.border.default,
163
+ gap: 8
164
+ },
165
+ row: {
166
+ flexDirection: "row",
167
+ alignItems: "center",
168
+ gap: 8
169
+ },
170
+ navButton: {
171
+ paddingHorizontal: 10,
172
+ paddingVertical: 8,
173
+ borderRadius: 6,
174
+ backgroundColor: _sharedUi.macOSColors.background.card,
175
+ alignItems: "center",
176
+ justifyContent: "center"
177
+ },
178
+ actionButton: {
179
+ flex: 1,
180
+ flexDirection: "row",
181
+ alignItems: "center",
182
+ justifyContent: "center",
183
+ gap: 6,
184
+ paddingVertical: 8,
185
+ borderRadius: 6,
186
+ backgroundColor: _sharedUi.macOSColors.background.card,
187
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
188
+ borderColor: _sharedUi.macOSColors.border.default
189
+ },
190
+ actionText: {
191
+ fontSize: 11,
192
+ fontWeight: "600",
193
+ color: _sharedUi.macOSColors.text.primary,
194
+ fontFamily: "monospace",
195
+ textTransform: "uppercase"
196
+ },
197
+ actionTextDisabled: {
198
+ color: _sharedUi.macOSColors.text.muted
199
+ },
200
+ disabled: {
201
+ opacity: 0.4
202
+ },
203
+ simButton: {
204
+ flex: 1,
205
+ alignItems: "center",
206
+ paddingVertical: 7,
207
+ borderRadius: 6,
208
+ backgroundColor: _sharedUi.macOSColors.background.card,
209
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
210
+ borderColor: _sharedUi.macOSColors.border.default
211
+ },
212
+ simText: {
213
+ fontSize: 10,
214
+ fontWeight: "600",
215
+ color: _sharedUi.macOSColors.text.secondary,
216
+ fontFamily: "monospace",
217
+ textTransform: "uppercase"
218
+ },
219
+ simTextAccent: {
220
+ color: _sharedUi.macOSColors.semantic.warning
221
+ },
222
+ message: {
223
+ color: _sharedUi.macOSColors.semantic.info,
224
+ fontSize: 10,
225
+ fontFamily: "monospace"
226
+ },
227
+ hint: {
228
+ color: _sharedUi.macOSColors.text.muted,
229
+ fontSize: 10
230
+ }
231
+ });
232
+ //# sourceMappingURL=ImageDetailFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_actions","_overrides","_jsxRuntime","ImageDetailFooter","record","hasPrevious","hasNext","onPrevious","onNext","insets","useSafeAreaInsets","message","setMessage","useState","runAction","action","then","result","catch","error","String","actionsDisabled","mounted","overrideActive","overrideLabel","simulate","source","label","setOverride","id","jsxs","View","style","styles","footer","paddingBottom","bottom","children","jsx","Text","numberOfLines","hint","row","TouchableOpacity","onPress","disabled","navButton","activeOpacity","accessibilityLabel","ChevronLeft","size","color","macOSColors","text","primary","muted","hardReloadRecord","actionButton","RefreshCw","semantic","info","actionText","actionTextDisabled","retryRecord","status","ChevronRight","SimButton","type","flashRecord","accent","clearOverride","simButton","simText","simTextAccent","StyleSheet","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,164 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImageRow = ImageRow;
7
+ var _reactNative = require("react-native");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _format = require("../format");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * ImageRow — one captured image in the list: thumbnail, filename, library +
13
+ * cache badges, load time, and the size verdict.
14
+ *
15
+ * Thumbnails carry the buoy-internal testID so the capture layer skips them —
16
+ * the tool must never appear in its own registry.
17
+ */
18
+
19
+ function ImageRow({
20
+ record,
21
+ onPress
22
+ }) {
23
+ const verdict = (0, _format.sizeVerdict)(record);
24
+ const cache = (0, _format.cacheBadge)(record);
25
+ const showThumb = record.sourceKind === "network" || record.sourceKind === "asset" || record.sourceKind === "file";
26
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
27
+ style: styles.row,
28
+ testID: `buoy-image-row-${record.id}`,
29
+ onPress: () => onPress(record.id),
30
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
31
+ style: styles.thumbBox,
32
+ children: [showThumb && record.uri ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
33
+ testID: "buoy-internal-images-thumb",
34
+ source: {
35
+ uri: record.uri
36
+ },
37
+ style: styles.thumb,
38
+ resizeMode: "cover"
39
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
40
+ style: styles.thumbFallback,
41
+ children: "?"
42
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
43
+ style: [styles.statusDot, {
44
+ backgroundColor: (0, _format.statusColor)(record)
45
+ }]
46
+ })]
47
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
48
+ style: styles.main,
49
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
50
+ style: styles.name,
51
+ numberOfLines: 1,
52
+ children: (0, _format.uriTail)(record.uri)
53
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
54
+ style: styles.metaRow,
55
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
56
+ style: [styles.badge, {
57
+ color: _sharedUi.macOSColors.text.muted
58
+ }],
59
+ children: record.lib === "expo" ? "EXPO" : "RN"
60
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
61
+ style: [styles.badge, {
62
+ color: cache.color
63
+ }],
64
+ children: cache.label
65
+ }), record.overrideLabel ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
66
+ style: [styles.badge, {
67
+ color: _sharedUi.macOSColors.semantic.warning
68
+ }],
69
+ children: "SIM"
70
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
71
+ style: styles.meta,
72
+ children: (0, _format.formatMs)(record.durationMs)
73
+ }), record.intrinsic ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
74
+ style: styles.meta,
75
+ children: [record.intrinsic.width, "\xD7", record.intrinsic.height]
76
+ }) : null]
77
+ })]
78
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
79
+ style: styles.right,
80
+ children: record.status === "error" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
81
+ style: [styles.verdict, {
82
+ color: _sharedUi.macOSColors.semantic.error
83
+ }],
84
+ children: "FAILED"
85
+ }) : verdict.label ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
86
+ style: [styles.verdict, {
87
+ color: verdict.color
88
+ }],
89
+ children: verdict.label
90
+ }) : null
91
+ })]
92
+ });
93
+ }
94
+ const styles = _reactNative.StyleSheet.create({
95
+ row: {
96
+ flexDirection: "row",
97
+ alignItems: "center",
98
+ paddingHorizontal: 12,
99
+ paddingVertical: 8,
100
+ borderBottomWidth: _reactNative.StyleSheet.hairlineWidth,
101
+ borderBottomColor: _sharedUi.macOSColors.border.default,
102
+ gap: 10
103
+ },
104
+ thumbBox: {
105
+ width: 40,
106
+ height: 40,
107
+ borderRadius: 6,
108
+ backgroundColor: _sharedUi.macOSColors.background.input,
109
+ alignItems: "center",
110
+ justifyContent: "center",
111
+ overflow: "hidden"
112
+ },
113
+ thumb: {
114
+ width: 40,
115
+ height: 40
116
+ },
117
+ thumbFallback: {
118
+ color: _sharedUi.macOSColors.text.muted,
119
+ fontSize: 16,
120
+ fontWeight: "700"
121
+ },
122
+ statusDot: {
123
+ position: "absolute",
124
+ right: 2,
125
+ bottom: 2,
126
+ width: 8,
127
+ height: 8,
128
+ borderRadius: 4,
129
+ borderWidth: 1,
130
+ borderColor: _sharedUi.macOSColors.background.base
131
+ },
132
+ main: {
133
+ flex: 1,
134
+ gap: 2
135
+ },
136
+ name: {
137
+ color: _sharedUi.macOSColors.text.primary,
138
+ fontSize: 12,
139
+ fontWeight: "600"
140
+ },
141
+ metaRow: {
142
+ flexDirection: "row",
143
+ alignItems: "center",
144
+ gap: 8
145
+ },
146
+ badge: {
147
+ fontSize: 9,
148
+ fontWeight: "700",
149
+ letterSpacing: 0.5
150
+ },
151
+ meta: {
152
+ color: _sharedUi.macOSColors.text.secondary,
153
+ fontSize: 10,
154
+ fontVariant: ["tabular-nums"]
155
+ },
156
+ right: {
157
+ alignItems: "flex-end"
158
+ },
159
+ verdict: {
160
+ fontSize: 10,
161
+ fontWeight: "700"
162
+ }
163
+ });
164
+ //# sourceMappingURL=ImageRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_format","_jsxRuntime","ImageRow","record","onPress","verdict","sizeVerdict","cache","cacheBadge","showThumb","sourceKind","jsxs","TouchableOpacity","style","styles","row","testID","id","children","View","thumbBox","uri","jsx","Image","source","thumb","resizeMode","Text","thumbFallback","statusDot","backgroundColor","statusColor","main","name","numberOfLines","uriTail","metaRow","badge","color","macOSColors","text","muted","lib","label","overrideLabel","semantic","warning","meta","formatMs","durationMs","intrinsic","width","height","right","status","error","StyleSheet","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,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImagesHeader = ImagesHeader;
7
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
+ var _format = require("../format");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * ImagesHeader — shared ModalHeader wiring for the Images tool, matching the
12
+ * Console/Network header pattern. List mode shows aggregate stats, the shared
13
+ * ToolbarCopyButton (full registry report) and the shared ToolbarClearButton;
14
+ * detail mode shows back navigation plus the copy button for that record's
15
+ * report. Copy behavior (Pro gating, hint banner, success/error feedback)
16
+ * comes from shared-ui — identical to every other tool.
17
+ */
18
+
19
+ function ImagesHeader({
20
+ stats,
21
+ detailOpen,
22
+ detailIndex = -1,
23
+ detailTotal = 0,
24
+ onCloseDetail,
25
+ onClear,
26
+ getReport,
27
+ onBack
28
+ }) {
29
+ if (detailOpen) {
30
+ const counter = detailIndex >= 0 && detailTotal > 0 ? `${detailIndex + 1} of ${detailTotal}` : undefined;
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
32
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
33
+ onBack: onCloseDetail
34
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
35
+ title: "Image detail",
36
+ subtitle: counter
37
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {
38
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
39
+ value: getReport
40
+ })
41
+ })]
42
+ });
43
+ }
44
+ const subtitleParts = [`${stats.total} images`, `${stats.errors} failed`, `≈${(0, _format.formatBytes)(stats.estDecodedBytes)} decoded`];
45
+ if (stats.estWastedBytes > 0) {
46
+ subtitleParts.push(`${(0, _format.formatBytes)(stats.estWastedBytes)} wasted`);
47
+ }
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
49
+ children: [onBack ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
50
+ onBack: onBack
51
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
52
+ title: "Images",
53
+ subtitle: subtitleParts.join(" · ")
54
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
55
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
56
+ value: getReport
57
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarClearButton, {
58
+ onPress: onClear
59
+ })]
60
+ })]
61
+ });
62
+ }
63
+ //# sourceMappingURL=ImagesHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sharedUi","require","_format","_jsxRuntime","ImagesHeader","stats","detailOpen","detailIndex","detailTotal","onCloseDetail","onClear","getReport","onBack","counter","undefined","jsxs","ModalHeader","children","jsx","Navigation","Content","title","subtitle","Actions","ToolbarCopyButton","value","subtitleParts","total","errors","formatBytes","estDecodedBytes","estWastedBytes","push","join","ToolbarClearButton","onPress"],"sourceRoot":"../../../src","sources":["components/ImagesHeader.tsx"],"mappings":";;;;;;AASA,IAAAA,SAAA,GAAAC,OAAA;AAKA,IAAAC,OAAA,GAAAD,OAAA;AAAwC,IAAAE,WAAA,GAAAF,OAAA;AAdxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwBO,SAASG,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,oBACE,IAAAX,WAAA,CAAAY,IAAA,EAACf,SAAA,CAAAgB,WAAW;MAAAC,QAAA,gBACV,IAAAd,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAgB,WAAW,CAACG,UAAU;QAACP,MAAM,EAAEH;MAAc,CAAE,CAAC,eACjD,IAAAN,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAgB,WAAW,CAACI,OAAO;QAACC,KAAK,EAAC,cAAc;QAACC,QAAQ,EAAET;MAAQ,CAAE,CAAC,eAC/D,IAAAV,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAgB,WAAW,CAACO,OAAO;QAAAN,QAAA,eAClB,IAAAd,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAwB,iBAAiB;UAACC,KAAK,EAAEd;QAAU,CAAE;MAAC,CACpB,CAAC;IAAA,CACX,CAAC;EAElB;EAEA,MAAMe,aAAa,GAAG,CACpB,GAAGrB,KAAK,CAACsB,KAAK,SAAS,EACvB,GAAGtB,KAAK,CAACuB,MAAM,SAAS,EACxB,IAAI,IAAAC,mBAAW,EAACxB,KAAK,CAACyB,eAAe,CAAC,UAAU,CACjD;EACD,IAAIzB,KAAK,CAAC0B,cAAc,GAAG,CAAC,EAAE;IAC5BL,aAAa,CAACM,IAAI,CAAC,GAAG,IAAAH,mBAAW,EAACxB,KAAK,CAAC0B,cAAc,CAAC,SAAS,CAAC;EACnE;EAEA,oBACE,IAAA5B,WAAA,CAAAY,IAAA,EAACf,SAAA,CAAAgB,WAAW;IAAAC,QAAA,GACTL,MAAM,gBAAG,IAAAT,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAgB,WAAW,CAACG,UAAU;MAACP,MAAM,EAAEA;IAAO,CAAE,CAAC,GAAG,IAAI,eAC3D,IAAAT,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAgB,WAAW,CAACI,OAAO;MAACC,KAAK,EAAC,QAAQ;MAACC,QAAQ,EAAEI,aAAa,CAACO,IAAI,CAAC,KAAK;IAAE,CAAE,CAAC,eAC3E,IAAA9B,WAAA,CAAAY,IAAA,EAACf,SAAA,CAAAgB,WAAW,CAACO,OAAO;MAAAN,QAAA,gBAClB,IAAAd,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAwB,iBAAiB;QAACC,KAAK,EAAEd;MAAU,CAAE,CAAC,eACvC,IAAAR,WAAA,CAAAe,GAAA,EAAClB,SAAA,CAAAkC,kBAAkB;QAACC,OAAO,EAAEzB;MAAQ,CAAE,CAAC;IAAA,CACrB,CAAC;EAAA,CACX,CAAC;AAElB","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.IMAGES_ICON_COLOR = void 0;
7
+ exports.ImagesIcon = ImagesIcon;
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /** Tool accent color (photo violet). */
11
+ const IMAGES_ICON_COLOR = exports.IMAGES_ICON_COLOR = "#C084FC";
12
+ /**
13
+ * Dependency-free "picture" glyph: rounded frame with a sun dot and a
14
+ * mountain-ish baseline, rendered from plain views.
15
+ */
16
+ function ImagesIcon({
17
+ size,
18
+ color = IMAGES_ICON_COLOR
19
+ }) {
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
21
+ style: [styles.frame, {
22
+ width: size,
23
+ height: size,
24
+ borderRadius: size * 0.2,
25
+ borderColor: color
26
+ }],
27
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
28
+ style: [styles.sun, {
29
+ width: size * 0.18,
30
+ height: size * 0.18,
31
+ borderRadius: size * 0.09,
32
+ backgroundColor: color,
33
+ top: size * 0.18,
34
+ right: size * 0.2
35
+ }]
36
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
37
+ style: {
38
+ color,
39
+ fontSize: size * 0.52,
40
+ fontWeight: "700",
41
+ lineHeight: size * 0.62,
42
+ marginTop: size * 0.28
43
+ },
44
+ children: "▲"
45
+ })]
46
+ });
47
+ }
48
+ const styles = _reactNative.StyleSheet.create({
49
+ frame: {
50
+ borderWidth: 1.5,
51
+ alignItems: "center",
52
+ justifyContent: "flex-end",
53
+ overflow: "hidden"
54
+ },
55
+ sun: {
56
+ position: "absolute"
57
+ }
58
+ });
59
+ //# sourceMappingURL=ImagesIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_jsxRuntime","IMAGES_ICON_COLOR","exports","ImagesIcon","size","color","jsxs","View","style","styles","frame","width","height","borderRadius","borderColor","children","jsx","sun","backgroundColor","top","right","Text","fontSize","fontWeight","lineHeight","marginTop","StyleSheet","create","borderWidth","alignItems","justifyContent","overflow","position"],"sourceRoot":"../../../src","sources":["components/ImagesIcon.tsx"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAsD,IAAAC,WAAA,GAAAD,OAAA;AAEtD;AACO,MAAME,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,SAAS;AAO1C;AACA;AACA;AACA;AACO,SAASE,UAAUA,CAAC;EAAEC,IAAI;EAAEC,KAAK,GAAGJ;AAAmC,CAAC,EAAE;EAC/E,oBACE,IAAAD,WAAA,CAAAM,IAAA,EAACR,YAAA,CAAAS,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACC,KAAK,EACZ;MACEC,KAAK,EAAEP,IAAI;MACXQ,MAAM,EAAER,IAAI;MACZS,YAAY,EAAET,IAAI,GAAG,GAAG;MACxBU,WAAW,EAAET;IACf,CAAC,CACD;IAAAU,QAAA,gBAEF,IAAAf,WAAA,CAAAgB,GAAA,EAAClB,YAAA,CAAAS,IAAI;MACHC,KAAK,EAAE,CACLC,MAAM,CAACQ,GAAG,EACV;QACEN,KAAK,EAAEP,IAAI,GAAG,IAAI;QAClBQ,MAAM,EAAER,IAAI,GAAG,IAAI;QACnBS,YAAY,EAAET,IAAI,GAAG,IAAI;QACzBc,eAAe,EAAEb,KAAK;QACtBc,GAAG,EAAEf,IAAI,GAAG,IAAI;QAChBgB,KAAK,EAAEhB,IAAI,GAAG;MAChB,CAAC;IACD,CACH,CAAC,eACF,IAAAJ,WAAA,CAAAgB,GAAA,EAAClB,YAAA,CAAAuB,IAAI;MACHb,KAAK,EAAE;QACLH,KAAK;QACLiB,QAAQ,EAAElB,IAAI,GAAG,IAAI;QACrBmB,UAAU,EAAE,KAAK;QACjBC,UAAU,EAAEpB,IAAI,GAAG,IAAI;QACvBqB,SAAS,EAAErB,IAAI,GAAG;MACpB,CAAE;MAAAW,QAAA,EAED;IAAG,CACA,CAAC;EAAA,CACH,CAAC;AAEX;AAEA,MAAMN,MAAM,GAAGiB,uBAAU,CAACC,MAAM,CAAC;EAC/BjB,KAAK,EAAE;IACLkB,WAAW,EAAE,GAAG;IAChBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,UAAU;IAC1BC,QAAQ,EAAE;EACZ,CAAC;EACDd,GAAG,EAAE;IACHe,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}