@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,194 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImagesListFooter = ImagesListFooter;
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
+ * ImagesListFooter — the list screen's action bar: mass simulations applied
15
+ * to EVERY mounted image at once (error / loading / blank), mass hard-reload,
16
+ * flash everything, restore all — plus the global network simulation modes
17
+ * (Normal / Offline / Cold). Styled to match the detail footer.
18
+ */
19
+
20
+ const NETWORK_MODES = [{
21
+ key: "normal",
22
+ label: "Normal"
23
+ }, {
24
+ key: "offline",
25
+ label: "Offline"
26
+ }, {
27
+ key: "cold",
28
+ label: "Cold"
29
+ }];
30
+ function ImagesListFooter() {
31
+ const insets = (0, _sharedUi.useSafeAreaInsets)();
32
+ const [message, setMessage] = (0, _react.useState)(null);
33
+ const network = (0, _react.useSyncExternalStore)(_actions.subscribeActions, () => (0, _overrides.getGlobalModes)().network);
34
+ const massOverride = (source, label) => {
35
+ const count = (0, _overrides.setOverrideForAllMounted)(source, label);
36
+ setMessage(count > 0 ? `${label} on ${count} image${count === 1 ? "" : "s"} — Restore all to undo` : "No mounted images");
37
+ };
38
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
39
+ style: [styles.footer, {
40
+ paddingBottom: 10 + insets.bottom
41
+ }],
42
+ children: [message ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
43
+ style: styles.message,
44
+ numberOfLines: 1,
45
+ children: message
46
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
47
+ style: styles.caption,
48
+ children: "MASS ACTIONS \u2014 every image on screen"
49
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
50
+ style: styles.row,
51
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
52
+ label: "Error",
53
+ onPress: () => massOverride({
54
+ type: "error"
55
+ }, "Forced error")
56
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
57
+ label: "Loading",
58
+ onPress: () => massOverride({
59
+ type: "hang"
60
+ }, "Forced loading")
61
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
62
+ label: "Blank",
63
+ onPress: () => massOverride({
64
+ type: "blank"
65
+ }, "Blanked")
66
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
67
+ label: "Reload",
68
+ onPress: () => {
69
+ setMessage("…");
70
+ (0, _actions.hardReloadAllMounted)().then(r => setMessage(r.message));
71
+ }
72
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
73
+ label: "Find",
74
+ onPress: () => {
75
+ const count = (0, _overrides.flashAllMounted)();
76
+ setMessage(`Flashing ${count} image${count === 1 ? "" : "s"} (2.5s)`);
77
+ }
78
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(MassButton, {
79
+ label: "Restore",
80
+ accent: true,
81
+ onPress: () => {
82
+ const count = (0, _overrides.clearAllOverrides)();
83
+ setMessage(count > 0 ? `Restored ${count} image${count === 1 ? "" : "s"}` : "No overrides active");
84
+ }
85
+ })]
86
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
87
+ style: styles.row,
88
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
89
+ style: styles.netLabel,
90
+ children: "NET"
91
+ }), NETWORK_MODES.map(mode => {
92
+ const active = network === mode.key;
93
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
94
+ onPress: () => {
95
+ (0, _overrides.setNetworkMode)(mode.key);
96
+ // Modes only affect loads that happen AFTER they're set — an
97
+ // on-screen image keeps its bitmap until something reloads it.
98
+ setMessage(mode.key === "normal" ? "Network simulation off — tap RELOAD to load normally again" : mode.key === "offline" ? "Offline: network images FAIL (bundled assets still load) — tap RELOAD to apply to on-screen images" : "Cold (bypass caches) — tap RELOAD: everything refetches like first launch");
99
+ },
100
+ style: [styles.netButton, active && styles.netButtonActive],
101
+ activeOpacity: 0.7,
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
103
+ style: [styles.buttonText, active && styles.netTextActive],
104
+ children: mode.label
105
+ })
106
+ }, mode.key);
107
+ })]
108
+ })]
109
+ });
110
+ }
111
+ function MassButton({
112
+ label,
113
+ onPress,
114
+ accent
115
+ }) {
116
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
117
+ onPress: onPress,
118
+ style: styles.button,
119
+ activeOpacity: 0.7,
120
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
121
+ style: [styles.buttonText, accent && styles.buttonTextAccent],
122
+ children: label
123
+ })
124
+ });
125
+ }
126
+ const styles = _reactNative.StyleSheet.create({
127
+ footer: {
128
+ paddingHorizontal: 12,
129
+ paddingTop: 8,
130
+ backgroundColor: _sharedUi.macOSColors.background.base,
131
+ borderTopWidth: 1,
132
+ borderTopColor: _sharedUi.macOSColors.border.default,
133
+ gap: 8
134
+ },
135
+ caption: {
136
+ color: _sharedUi.macOSColors.text.muted,
137
+ fontSize: 9,
138
+ fontWeight: "700",
139
+ letterSpacing: 0.8
140
+ },
141
+ message: {
142
+ color: _sharedUi.macOSColors.semantic.info,
143
+ fontSize: 10,
144
+ fontFamily: "monospace"
145
+ },
146
+ row: {
147
+ flexDirection: "row",
148
+ gap: 6
149
+ },
150
+ button: {
151
+ flex: 1,
152
+ alignItems: "center",
153
+ paddingVertical: 8,
154
+ borderRadius: 6,
155
+ backgroundColor: _sharedUi.macOSColors.background.card,
156
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
157
+ borderColor: _sharedUi.macOSColors.border.default
158
+ },
159
+ buttonText: {
160
+ fontSize: 10,
161
+ fontWeight: "600",
162
+ color: _sharedUi.macOSColors.text.secondary,
163
+ fontFamily: "monospace",
164
+ textTransform: "uppercase"
165
+ },
166
+ buttonTextAccent: {
167
+ color: _sharedUi.macOSColors.semantic.warning
168
+ },
169
+ netLabel: {
170
+ color: _sharedUi.macOSColors.text.muted,
171
+ fontSize: 9,
172
+ fontWeight: "700",
173
+ letterSpacing: 0.8,
174
+ alignSelf: "center",
175
+ marginRight: 2
176
+ },
177
+ netButton: {
178
+ flex: 1,
179
+ alignItems: "center",
180
+ paddingVertical: 6,
181
+ borderRadius: 6,
182
+ backgroundColor: _sharedUi.macOSColors.background.card,
183
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
184
+ borderColor: _sharedUi.macOSColors.border.default
185
+ },
186
+ netButtonActive: {
187
+ backgroundColor: _sharedUi.macOSColors.semantic.infoBackground,
188
+ borderColor: _sharedUi.macOSColors.semantic.info
189
+ },
190
+ netTextActive: {
191
+ color: _sharedUi.macOSColors.semantic.info
192
+ }
193
+ });
194
+ //# sourceMappingURL=ImagesListFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_actions","_overrides","_jsxRuntime","NETWORK_MODES","key","label","ImagesListFooter","insets","useSafeAreaInsets","message","setMessage","useState","network","useSyncExternalStore","subscribeActions","getGlobalModes","massOverride","source","count","setOverrideForAllMounted","jsxs","View","style","styles","footer","paddingBottom","bottom","children","jsx","Text","numberOfLines","caption","row","MassButton","onPress","type","hardReloadAllMounted","then","r","flashAllMounted","accent","clearAllOverrides","netLabel","map","mode","active","TouchableOpacity","setNetworkMode","netButton","netButtonActive","activeOpacity","buttonText","netTextActive","button","buttonTextAccent","StyleSheet","create","paddingHorizontal","paddingTop","backgroundColor","macOSColors","background","base","borderTopWidth","borderTopColor","border","default","gap","color","text","muted","fontSize","fontWeight","letterSpacing","semantic","info","fontFamily","flexDirection","flex","alignItems","paddingVertical","borderRadius","card","borderWidth","hairlineWidth","borderColor","secondary","textTransform","warning","alignSelf","marginRight","infoBackground"],"sourceRoot":"../../../src","sources":["components/ImagesListFooter.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImagesModal = ImagesModal;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _install = require("../capture/install");
11
+ var _overrides = require("../capture/overrides");
12
+ var _export = require("../export");
13
+ var _useImageRecords = require("../hooks/useImageRecords");
14
+ var _imageEventStore = require("../store/imageEventStore");
15
+ var _ImageDetail = require("./ImageDetail");
16
+ var _ImageDetailFooter = require("./ImageDetailFooter");
17
+ var _ImageRow = require("./ImageRow");
18
+ var _ImagesHeader = require("./ImagesHeader");
19
+ var _ImagesListFooter = require("./ImagesListFooter");
20
+ var _InsightsBar = require("./InsightsBar");
21
+ var _insights = require("../store/insights");
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ /**
24
+ * ImagesModal — bottom-sheet wrapper rendered by FloatingDevTools when the
25
+ * Images tool is opened. List of captured images → tap for detail. Also
26
+ * surfaces the capture status so a mis-ordered install is self-diagnosing
27
+ * instead of silently empty.
28
+ */
29
+
30
+ function CaptureNotice() {
31
+ const status = (0, _install.getCaptureStatus)();
32
+ const notices = [];
33
+ if (status.rnDecoratorTooLate) {
34
+ notices.push('RN <Image> instrumentation missed the module-load race — add `import "@buoy-gg/images/register"` as the FIRST import of your entry file.');
35
+ }
36
+ if (!status.expoAvailable && !status.rnDecoratorActive && !status.rnDecoratorTooLate) {
37
+ notices.push("Waiting for images… render some <Image> components to populate the list.");
38
+ }
39
+ if (notices.length === 0) return null;
40
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
41
+ style: styles.notice,
42
+ children: notices.map(n => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
43
+ style: styles.noticeText,
44
+ children: n
45
+ }, n))
46
+ });
47
+ }
48
+ function EmptyState() {
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
50
+ style: styles.empty,
51
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
52
+ style: styles.emptyTitle,
53
+ children: "No images captured yet"
54
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
55
+ style: styles.emptyText,
56
+ children: ["Every RN ", "<Image>", " and expo-image load is recorded here with cache verdicts, timings, and oversize checks."]
57
+ })]
58
+ });
59
+ }
60
+ function ImagesModal({
61
+ visible,
62
+ onClose,
63
+ onBack,
64
+ onMinimize,
65
+ persistenceKey
66
+ }) {
67
+ // Safety net: ensures capture is live even without the early register
68
+ // import (expo-image capture is timing-immune, so this still gets most data).
69
+ (0, _install.installImageCapture)();
70
+ const {
71
+ records,
72
+ stats
73
+ } = (0, _useImageRecords.useImageRecords)();
74
+ const [selectedId, setSelectedId] = (0, _react.useState)(null);
75
+ const selected = selectedId != null ? (0, _imageEventStore.getRecord)(selectedId) : undefined;
76
+
77
+ // Stepping is relative to the live list (newest first): previous = newer.
78
+ const selectedIndex = selected ? records.findIndex(r => r.id === selected.id) : -1;
79
+ const stepTo = index => {
80
+ const target = records[index];
81
+ if (target) setSelectedId(target.id);
82
+ };
83
+
84
+ // Mode-appropriate report: single record in detail, full registry (stats +
85
+ // insights + table) in the list. The shared ToolbarCopyButton resolves this
86
+ // lazily on press and handles clipboard + feedback + gating.
87
+ const getReport = () => selected ? (0, _export.formatRecordMarkdown)(selected) : (0, _export.formatRegistryMarkdown)(records, stats, (0, _insights.computeInsights)(records), (0, _install.getCaptureStatus)(), (0, _overrides.getGlobalModes)());
88
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.JsModal, {
89
+ visible: visible,
90
+ onClose: onClose,
91
+ onMinimize: onMinimize,
92
+ persistenceKey: persistenceKey,
93
+ header: {
94
+ showToggleButton: true,
95
+ customContent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImagesHeader.ImagesHeader, {
96
+ stats: stats,
97
+ detailOpen: selected != null,
98
+ detailIndex: selectedIndex,
99
+ detailTotal: records.length,
100
+ onCloseDetail: () => setSelectedId(null),
101
+ onClear: _imageEventStore.clearRecords,
102
+ getReport: getReport,
103
+ onBack: onBack
104
+ })
105
+ },
106
+ enablePersistence: true,
107
+ initialMode: "bottomSheet",
108
+ disableScrollWrapper: true,
109
+ children: selected ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
110
+ style: styles.detailContainer,
111
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ImageDetail.ImageDetail, {
112
+ record: selected
113
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImageDetailFooter.ImageDetailFooter, {
114
+ record: selected,
115
+ hasPrevious: selectedIndex > 0,
116
+ hasNext: selectedIndex >= 0 && selectedIndex < records.length - 1,
117
+ onPrevious: () => stepTo(selectedIndex - 1),
118
+ onNext: () => stepTo(selectedIndex + 1)
119
+ }, selected.id)]
120
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
121
+ style: styles.listContainer,
122
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_InsightsBar.InsightsBar, {
123
+ insights: (0, _insights.computeInsights)(records)
124
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(CaptureNotice, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
125
+ data: records,
126
+ keyExtractor: item => String(item.id),
127
+ renderItem: ({
128
+ item
129
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImageRow.ImageRow, {
130
+ record: item,
131
+ onPress: setSelectedId
132
+ }),
133
+ ListEmptyComponent: /*#__PURE__*/(0, _jsxRuntime.jsx)(EmptyState, {})
134
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImagesListFooter.ImagesListFooter, {})]
135
+ })
136
+ });
137
+ }
138
+ const styles = _reactNative.StyleSheet.create({
139
+ listContainer: {
140
+ flex: 1
141
+ },
142
+ detailContainer: {
143
+ flex: 1
144
+ },
145
+ notice: {
146
+ margin: 10,
147
+ padding: 10,
148
+ borderRadius: 8,
149
+ backgroundColor: _sharedUi.macOSColors.semantic.warningBackground,
150
+ gap: 4
151
+ },
152
+ noticeText: {
153
+ color: _sharedUi.macOSColors.semantic.warning,
154
+ fontSize: 11
155
+ },
156
+ empty: {
157
+ alignItems: "center",
158
+ padding: 32,
159
+ gap: 8
160
+ },
161
+ emptyTitle: {
162
+ color: _sharedUi.macOSColors.text.primary,
163
+ fontSize: 13,
164
+ fontWeight: "600"
165
+ },
166
+ emptyText: {
167
+ color: _sharedUi.macOSColors.text.secondary,
168
+ fontSize: 11,
169
+ textAlign: "center",
170
+ lineHeight: 16
171
+ }
172
+ });
173
+ //# sourceMappingURL=ImagesModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_install","_overrides","_export","_useImageRecords","_imageEventStore","_ImageDetail","_ImageDetailFooter","_ImageRow","_ImagesHeader","_ImagesListFooter","_InsightsBar","_insights","_jsxRuntime","CaptureNotice","status","getCaptureStatus","notices","rnDecoratorTooLate","push","expoAvailable","rnDecoratorActive","length","jsx","View","style","styles","notice","children","map","n","Text","noticeText","EmptyState","jsxs","empty","emptyTitle","emptyText","ImagesModal","visible","onClose","onBack","onMinimize","persistenceKey","installImageCapture","records","stats","useImageRecords","selectedId","setSelectedId","useState","selected","getRecord","undefined","selectedIndex","findIndex","r","id","stepTo","index","target","getReport","formatRecordMarkdown","formatRegistryMarkdown","computeInsights","getGlobalModes","JsModal","header","showToggleButton","customContent","ImagesHeader","detailOpen","detailIndex","detailTotal","onCloseDetail","onClear","clearRecords","enablePersistence","initialMode","disableScrollWrapper","detailContainer","ImageDetail","record","ImageDetailFooter","hasPrevious","hasNext","onPrevious","onNext","listContainer","InsightsBar","insights","FlatList","data","keyExtractor","item","String","renderItem","ImageRow","onPress","ListEmptyComponent","ImagesListFooter","StyleSheet","create","flex","margin","padding","borderRadius","backgroundColor","macOSColors","semantic","warningBackground","gap","color","warning","fontSize","alignItems","text","primary","fontWeight","secondary","textAlign","lineHeight"],"sourceRoot":"../../../src","sources":["components/ImagesModal.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImagesRoot = ImagesRoot;
7
+ var _install = require("../capture/install");
8
+ /**
9
+ * Mount once near the app root to start image capture immediately.
10
+ *
11
+ * NOTE: for full RN-core <Image> coverage prefer the side-effect import
12
+ * `import "@buoy-gg/images/register"` as the first import of your entry file —
13
+ * the RN decorator must be installed before React Native's Image module first
14
+ * evaluates. ImagesRoot alone still captures every expo-image instance
15
+ * (timing-immune) and reports whether the RN hook landed.
16
+ */
17
+
18
+ function ImagesRoot() {
19
+ // Synchronous on first render — earlier than an effect, though still later
20
+ // than the register import. Idempotent.
21
+ (0, _install.installImageCapture)();
22
+ return null;
23
+ }
24
+ //# sourceMappingURL=ImagesRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_install","require","ImagesRoot","installImageCapture"],"sourceRoot":"../../../src","sources":["components/ImagesRoot.tsx"],"mappings":";;;;;;AAUA,IAAAA,QAAA,GAAAC,OAAA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,SAASC,UAAUA,CAAA,EAAS;EACjC;EACA;EACA,IAAAC,4BAAmB,EAAC,CAAC;EACrB,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.InsightsBar = InsightsBar;
7
+ var _reactNative = require("react-native");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _insights = require("../store/insights");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * InsightsBar — compact warning chips above the list when cross-record
13
+ * findings exist (duplicates, retry storms, queue saturation, missing alt,
14
+ * layout shifts). Renders nothing when all clear.
15
+ *
16
+ * A wrapping row (not a horizontal ScrollView — that under-measures its
17
+ * height inside the modal's flex column and clips the chips).
18
+ */
19
+
20
+ function InsightsBar({
21
+ insights
22
+ }) {
23
+ const chips = (0, _insights.insightChips)(insights);
24
+ if (chips.length === 0) return null;
25
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
26
+ style: styles.bar,
27
+ children: chips.map(chip => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
28
+ style: styles.chip,
29
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
30
+ style: styles.chipText,
31
+ children: chip
32
+ })
33
+ }, chip))
34
+ });
35
+ }
36
+ const styles = _reactNative.StyleSheet.create({
37
+ bar: {
38
+ flexDirection: "row",
39
+ flexWrap: "wrap",
40
+ gap: 6,
41
+ paddingHorizontal: 10,
42
+ paddingVertical: 8,
43
+ borderBottomWidth: _reactNative.StyleSheet.hairlineWidth,
44
+ borderBottomColor: _sharedUi.macOSColors.border.default
45
+ },
46
+ chip: {
47
+ backgroundColor: _sharedUi.macOSColors.semantic.warningBackground,
48
+ borderRadius: 999,
49
+ paddingHorizontal: 10,
50
+ paddingVertical: 5
51
+ },
52
+ chipText: {
53
+ color: _sharedUi.macOSColors.semantic.warning,
54
+ fontSize: 10,
55
+ fontWeight: "600",
56
+ lineHeight: 13
57
+ }
58
+ });
59
+ //# sourceMappingURL=InsightsBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_insights","_jsxRuntime","InsightsBar","insights","chips","insightChips","length","jsx","View","style","styles","bar","children","map","chip","Text","chipText","StyleSheet","create","flexDirection","flexWrap","gap","paddingHorizontal","paddingVertical","borderBottomWidth","hairlineWidth","borderBottomColor","macOSColors","border","default","backgroundColor","semantic","warningBackground","borderRadius","color","warning","fontSize","fontWeight","lineHeight"],"sourceRoot":"../../../src","sources":["components/InsightsBar.tsx"],"mappings":";;;;;;AASA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAAiD,IAAAG,WAAA,GAAAH,OAAA;AAXjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,SAASI,WAAWA,CAAC;EAAEC;AAAsC,CAAC,EAAE;EACrE,MAAMC,KAAK,GAAG,IAAAC,sBAAY,EAACF,QAAQ,CAAC;EACpC,IAAIC,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EACnC,oBACE,IAAAL,WAAA,CAAAM,GAAA,EAACV,YAAA,CAAAW,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,GAAI;IAAAC,QAAA,EACrBR,KAAK,CAACS,GAAG,CAAEC,IAAI,iBACd,IAAAb,WAAA,CAAAM,GAAA,EAACV,YAAA,CAAAW,IAAI;MAAYC,KAAK,EAAEC,MAAM,CAACI,IAAK;MAAAF,QAAA,eAClC,IAAAX,WAAA,CAAAM,GAAA,EAACV,YAAA,CAAAkB,IAAI;QAACN,KAAK,EAAEC,MAAM,CAACM,QAAS;QAAAJ,QAAA,EAAEE;MAAI,CAAO;IAAC,GADlCA,IAEL,CACP;EAAC,CACE,CAAC;AAEX;AAEA,MAAMJ,MAAM,GAAGO,uBAAU,CAACC,MAAM,CAAC;EAC/BP,GAAG,EAAE;IACHQ,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,MAAM;IAChBC,GAAG,EAAE,CAAC;IACNC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAEP,uBAAU,CAACQ,aAAa;IAC3CC,iBAAiB,EAAEC,qBAAW,CAACC,MAAM,CAACC;EACxC,CAAC;EACDf,IAAI,EAAE;IACJgB,eAAe,EAAEH,qBAAW,CAACI,QAAQ,CAACC,iBAAiB;IACvDC,YAAY,EAAE,GAAG;IACjBX,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EACnB,CAAC;EACDP,QAAQ,EAAE;IACRkB,KAAK,EAAEP,qBAAW,CAACI,QAAQ,CAACI,OAAO;IACnCC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjBC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatRecordMarkdown = formatRecordMarkdown;
7
+ exports.formatRegistryMarkdown = formatRegistryMarkdown;
8
+ var _reactNative = require("react-native");
9
+ var _imageEventStore = require("./store/imageEventStore");
10
+ var _insights = require("./store/insights");
11
+ var _format = require("./format");
12
+ /**
13
+ * Copy-friendly markdown reports — paste-ready context for an issue, PR, or
14
+ * an AI chat. One for the whole registry (list header copy) and one for a
15
+ * single record (detail header copy).
16
+ */
17
+
18
+ function formatRecordMarkdown(record) {
19
+ const verdict = (0, _format.sizeVerdict)(record);
20
+ const cache = (0, _format.cacheBadge)(record);
21
+ const needed = (0, _imageEventStore.neededPixels)(record);
22
+ const decoded = (0, _imageEventStore.estDecodedBytes)(record);
23
+ const wasted = (0, _imageEventStore.estWastedBytes)(record);
24
+ const lines = [];
25
+ lines.push(`## Image report — ${(0, _format.uriTail)(record.uri)}`);
26
+ lines.push("");
27
+ lines.push(`- URI: ${record.uri || "(none)"}`);
28
+ lines.push(`- Library: ${record.lib === "expo" ? "expo-image" : "RN <Image>"} · kind: ${record.sourceKind} · mounted: ${record.mounted ? "yes" : "no"}`);
29
+ lines.push(`- Status: ${record.status}${record.errorCode ? ` (HTTP ${record.errorCode})` : ""} · load cycles: ${record.loadCount}`);
30
+ lines.push(`- Cache: ${cache.label}${record.cacheVerdictSource ? ` (via ${record.cacheVerdictSource === "event" ? "expo onLoad" : "Image.queryCache"})` : ""}`);
31
+ lines.push(`- Load time: ${(0, _format.formatMs)(record.durationMs)}${record.displayedAt && record.loadedAt ? ` · decode→display ${(0, _format.formatMs)(Math.max(0, record.displayedAt - record.loadedAt))}` : ""}`);
32
+ if (record.intrinsic) {
33
+ lines.push(`- Decoded: ${record.intrinsic.width}×${record.intrinsic.height}px${record.mediaType ? ` (${record.mediaType})` : ""}${record.isAnimated ? " animated" : ""} ≈ ${(0, _format.formatBytes)(decoded)} decoded memory`);
34
+ }
35
+ if (record.layout) {
36
+ lines.push(`- Displayed: ${Math.round(record.layout.width)}×${Math.round(record.layout.height)}dp @${_reactNative.PixelRatio.get()}x (needs ${needed ? `${needed.width}×${needed.height}px` : "?"})`);
37
+ }
38
+ if (verdict.label) {
39
+ lines.push(`- Size verdict: ${verdict.label}${wasted > 0 && needed ? ` — wasting ≈${(0, _format.formatBytes)(wasted)}; serve ${needed.width}×${needed.height}` : ""}`);
40
+ }
41
+ if (record.progressSeen) {
42
+ lines.push(`- Network transfer: ${record.bytesTotal ? (0, _format.formatBytes)(record.bytesTotal) : "observed"}`);
43
+ }
44
+ if (record.hasAltText === false) lines.push(`- Accessibility: MISSING alt/accessibilityLabel`);
45
+ if ((record.layoutShifts ?? 0) > 0) lines.push(`- Layout shifts after load: ${record.layoutShifts} (reserve explicit dimensions)`);
46
+ if (record.error) {
47
+ lines.push(`- Error: ${record.error}`);
48
+ if (record.errorHeaders) {
49
+ lines.push(`- Response headers: ${JSON.stringify(record.errorHeaders)}`);
50
+ }
51
+ }
52
+ if (record.overrideLabel) lines.push(`- Simulation active: ${record.overrideLabel}`);
53
+ return lines.join("\n");
54
+ }
55
+ function formatRegistryMarkdown(records, stats, insights, captureStatus, modes) {
56
+ const lines = [];
57
+ lines.push(`## Buoy Images registry (${stats.total} records)`);
58
+ lines.push("");
59
+ lines.push(`${stats.loaded} loaded · ${stats.errors} failed · ${stats.loading} in flight · ≈${(0, _format.formatBytes)(stats.estDecodedBytes)} decoded` + (stats.estWastedBytes > 0 ? ` · ${(0, _format.formatBytes)(stats.estWastedBytes)} wasted on oversized sources` : ""));
60
+ const chips = (0, _insights.insightChips)(insights);
61
+ if (chips.length > 0) lines.push(`Insights: ${chips.join(" · ")}`);
62
+ if (modes.network !== "normal" || modes.blank) {
63
+ lines.push(`Simulation active: network=${modes.network}${modes.blank ? ", blank images" : ""}`);
64
+ }
65
+ if (captureStatus.rnDecoratorTooLate) {
66
+ lines.push(`⚠ RN <Image> capture inactive (register import too late)`);
67
+ }
68
+ lines.push("");
69
+ lines.push("| image | lib | status | cache | ms | decoded px | shown dp | verdict | notes |");
70
+ lines.push("|---|---|---|---|---|---|---|---|---|");
71
+ for (const r of records) {
72
+ const verdict = (0, _format.sizeVerdict)(r);
73
+ const cache = (0, _format.cacheBadge)(r);
74
+ const dims = r.intrinsic ? `${r.intrinsic.width}×${r.intrinsic.height}` : "–";
75
+ const layout = r.layout ? `${Math.round(r.layout.width)}×${Math.round(r.layout.height)}` : "–";
76
+ const notes = [r.error ? `error: ${r.error}` : null, r.overrideLabel ? `sim: ${r.overrideLabel}` : null, r.hasAltText === false ? "no alt" : null, (r.layoutShifts ?? 0) > 0 ? `${r.layoutShifts} layout shifts` : null, r.mounted ? null : "unmounted"].filter(Boolean).join("; ");
77
+ lines.push(`| ${(0, _format.uriTail)(r.uri)} | ${r.lib} | ${r.status} | ${cache.label} | ${r.durationMs != null ? Math.round(r.durationMs) : "–"} | ${dims} | ${layout} | ${verdict.label || "–"} | ${notes || "–"} |`);
78
+ }
79
+ return lines.join("\n");
80
+ }
81
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_imageEventStore","_insights","_format","formatRecordMarkdown","record","verdict","sizeVerdict","cache","cacheBadge","needed","neededPixels","decoded","estDecodedBytes","wasted","estWastedBytes","lines","push","uriTail","uri","lib","sourceKind","mounted","status","errorCode","loadCount","label","cacheVerdictSource","formatMs","durationMs","displayedAt","loadedAt","Math","max","intrinsic","width","height","mediaType","isAnimated","formatBytes","layout","round","PixelRatio","get","progressSeen","bytesTotal","hasAltText","layoutShifts","error","errorHeaders","JSON","stringify","overrideLabel","join","formatRegistryMarkdown","records","stats","insights","captureStatus","modes","total","loaded","errors","loading","chips","insightChips","length","network","blank","rnDecoratorTooLate","r","dims","notes","filter","Boolean"],"sourceRoot":"../../src","sources":["export.ts"],"mappings":"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","ignoreList":[]}