@buoy-gg/assets 7.0.38 → 7.0.40
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.
- package/lib/commonjs/capture/expo.js +46 -1
- package/lib/commonjs/capture/expo.js.map +1 -0
- package/lib/commonjs/capture/install.js +91 -1
- package/lib/commonjs/capture/install.js.map +1 -0
- package/lib/commonjs/capture/isBuoyAsset.js +23 -1
- package/lib/commonjs/capture/isBuoyAsset.js.map +1 -0
- package/lib/commonjs/capture/measure.js +186 -1
- package/lib/commonjs/capture/measure.js.map +1 -0
- package/lib/commonjs/capture/metroGraph.js +175 -1
- package/lib/commonjs/capture/metroGraph.js.map +1 -0
- package/lib/commonjs/capture/registry.js +127 -1
- package/lib/commonjs/capture/registry.js.map +1 -0
- package/lib/commonjs/components/AssetDetail.js +211 -1
- package/lib/commonjs/components/AssetDetail.js.map +1 -0
- package/lib/commonjs/components/AssetImage.js +66 -1
- package/lib/commonjs/components/AssetImage.js.map +1 -0
- package/lib/commonjs/components/AssetRow.js +232 -1
- package/lib/commonjs/components/AssetRow.js.map +1 -0
- package/lib/commonjs/components/AssetsFilterBar.js +105 -1
- package/lib/commonjs/components/AssetsFilterBar.js.map +1 -0
- package/lib/commonjs/components/AssetsHeader.js +73 -1
- package/lib/commonjs/components/AssetsHeader.js.map +1 -0
- package/lib/commonjs/components/AssetsIcon.js +19 -1
- package/lib/commonjs/components/AssetsIcon.js.map +1 -0
- package/lib/commonjs/components/AssetsListControls.js +81 -1
- package/lib/commonjs/components/AssetsListControls.js.map +1 -0
- package/lib/commonjs/components/AssetsModal.js +378 -1
- package/lib/commonjs/components/AssetsModal.js.map +1 -0
- package/lib/commonjs/components/ScanNotice.js +85 -1
- package/lib/commonjs/components/ScanNotice.js.map +1 -0
- package/lib/commonjs/components/optionalExpoImage.js +16 -1
- package/lib/commonjs/components/optionalExpoImage.js.map +1 -0
- package/lib/commonjs/components/optionalExpoImage.web.js +11 -1
- package/lib/commonjs/components/optionalExpoImage.web.js.map +1 -0
- package/lib/commonjs/export.js +62 -1
- package/lib/commonjs/export.js.map +1 -0
- package/lib/commonjs/format.js +59 -1
- package/lib/commonjs/format.js.map +1 -0
- package/lib/commonjs/hooks/useAssetRecords.js +22 -1
- package/lib/commonjs/hooks/useAssetRecords.js.map +1 -0
- package/lib/commonjs/hooks/useAssetScanStatus.js +28 -1
- package/lib/commonjs/hooks/useAssetScanStatus.js.map +1 -0
- package/lib/commonjs/index.js +313 -1
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/preset.js +39 -1
- package/lib/commonjs/preset.js.map +1 -0
- package/lib/commonjs/remote.js +68 -1
- package/lib/commonjs/remote.js.map +1 -0
- package/lib/commonjs/state.js +51 -1
- package/lib/commonjs/state.js.map +1 -0
- package/lib/commonjs/store/assetStore.js +256 -1
- package/lib/commonjs/store/assetStore.js.map +1 -0
- package/lib/commonjs/store/baseline.js +175 -1
- package/lib/commonjs/store/baseline.js.map +1 -0
- package/lib/commonjs/store/insights.js +120 -1
- package/lib/commonjs/store/insights.js.map +1 -0
- package/lib/commonjs/sync/assetsSyncAdapter.js +157 -1
- package/lib/commonjs/sync/assetsSyncAdapter.js.map +1 -0
- package/lib/commonjs/types.js +2 -1
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/deviceScale.js +50 -1
- package/lib/commonjs/utils/deviceScale.js.map +1 -0
- package/lib/commonjs/utils/testIDs.js +110 -1
- package/lib/commonjs/utils/testIDs.js.map +1 -0
- package/lib/module/capture/expo.js +41 -1
- package/lib/module/capture/expo.js.map +1 -0
- package/lib/module/capture/install.js +85 -1
- package/lib/module/capture/install.js.map +1 -0
- package/lib/module/capture/isBuoyAsset.js +18 -1
- package/lib/module/capture/isBuoyAsset.js.map +1 -0
- package/lib/module/capture/measure.js +179 -1
- package/lib/module/capture/measure.js.map +1 -0
- package/lib/module/capture/metroGraph.js +168 -1
- package/lib/module/capture/metroGraph.js.map +1 -0
- package/lib/module/capture/registry.js +120 -1
- package/lib/module/capture/registry.js.map +1 -0
- package/lib/module/components/AssetDetail.js +207 -1
- package/lib/module/components/AssetDetail.js.map +1 -0
- package/lib/module/components/AssetImage.js +62 -1
- package/lib/module/components/AssetImage.js.map +1 -0
- package/lib/module/components/AssetRow.js +228 -1
- package/lib/module/components/AssetRow.js.map +1 -0
- package/lib/module/components/AssetsFilterBar.js +101 -1
- package/lib/module/components/AssetsFilterBar.js.map +1 -0
- package/lib/module/components/AssetsHeader.js +69 -1
- package/lib/module/components/AssetsHeader.js.map +1 -0
- package/lib/module/components/AssetsIcon.js +12 -1
- package/lib/module/components/AssetsIcon.js.map +1 -0
- package/lib/module/components/AssetsListControls.js +77 -1
- package/lib/module/components/AssetsListControls.js.map +1 -0
- package/lib/module/components/AssetsModal.js +373 -1
- package/lib/module/components/AssetsModal.js.map +1 -0
- package/lib/module/components/ScanNotice.js +81 -1
- package/lib/module/components/ScanNotice.js.map +1 -0
- package/lib/module/components/optionalExpoImage.js +12 -1
- package/lib/module/components/optionalExpoImage.js.map +1 -0
- package/lib/module/components/optionalExpoImage.web.js +7 -1
- package/lib/module/components/optionalExpoImage.web.js.map +1 -0
- package/lib/module/export.js +57 -1
- package/lib/module/export.js.map +1 -0
- package/lib/module/format.js +51 -1
- package/lib/module/format.js.map +1 -0
- package/lib/module/hooks/useAssetRecords.js +18 -1
- package/lib/module/hooks/useAssetRecords.js.map +1 -0
- package/lib/module/hooks/useAssetScanStatus.js +23 -1
- package/lib/module/hooks/useAssetScanStatus.js.map +1 -0
- package/lib/module/index.js +63 -1
- package/lib/module/index.js.map +1 -0
- package/lib/module/preset.js +35 -1
- package/lib/module/preset.js.map +1 -0
- package/lib/module/remote.js +61 -1
- package/lib/module/remote.js.map +1 -0
- package/lib/module/state.js +47 -1
- package/lib/module/state.js.map +1 -0
- package/lib/module/store/assetStore.js +240 -1
- package/lib/module/store/assetStore.js.map +1 -0
- package/lib/module/store/baseline.js +167 -1
- package/lib/module/store/baseline.js.map +1 -0
- package/lib/module/store/insights.js +116 -1
- package/lib/module/store/insights.js.map +1 -0
- package/lib/module/sync/assetsSyncAdapter.js +153 -1
- package/lib/module/sync/assetsSyncAdapter.js.map +1 -0
- package/lib/module/types.js +2 -1
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/deviceScale.js +46 -1
- package/lib/module/utils/deviceScale.js.map +1 -0
- package/lib/module/utils/testIDs.js +99 -1
- package/lib/module/utils/testIDs.js.map +1 -0
- package/lib/typescript/capture/expo.d.ts.map +1 -0
- package/lib/typescript/capture/install.d.ts.map +1 -0
- package/lib/typescript/capture/isBuoyAsset.d.ts.map +1 -0
- package/lib/typescript/capture/measure.d.ts.map +1 -0
- package/lib/typescript/capture/metroGraph.d.ts.map +1 -0
- package/lib/typescript/capture/registry.d.ts.map +1 -0
- package/lib/typescript/components/AssetDetail.d.ts.map +1 -0
- package/lib/typescript/components/AssetImage.d.ts.map +1 -0
- package/lib/typescript/components/AssetRow.d.ts.map +1 -0
- package/lib/typescript/components/AssetsFilterBar.d.ts.map +1 -0
- package/lib/typescript/components/AssetsHeader.d.ts.map +1 -0
- package/lib/typescript/components/AssetsIcon.d.ts.map +1 -0
- package/lib/typescript/components/AssetsListControls.d.ts.map +1 -0
- package/lib/typescript/components/AssetsModal.d.ts.map +1 -0
- package/lib/typescript/components/ScanNotice.d.ts.map +1 -0
- package/lib/typescript/components/optionalExpoImage.d.ts.map +1 -0
- package/lib/typescript/components/optionalExpoImage.web.d.ts.map +1 -0
- package/lib/typescript/export.d.ts.map +1 -0
- package/lib/typescript/format.d.ts.map +1 -0
- package/lib/typescript/hooks/useAssetRecords.d.ts.map +1 -0
- package/lib/typescript/hooks/useAssetScanStatus.d.ts.map +1 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/preset.d.ts.map +1 -0
- package/lib/typescript/remote.d.ts.map +1 -0
- package/lib/typescript/state.d.ts.map +1 -0
- package/lib/typescript/store/assetStore.d.ts.map +1 -0
- package/lib/typescript/store/baseline.d.ts.map +1 -0
- package/lib/typescript/store/insights.d.ts.map +1 -0
- package/lib/typescript/sync/assetsSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/utils/deviceScale.d.ts.map +1 -0
- package/lib/typescript/utils/testIDs.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1,207 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AssetDetail — full metadata for one asset: preview, identity, dimensions,
|
|
5
|
+
* per-scale sizes, resolution info, and which audit findings apply.
|
|
6
|
+
*
|
|
7
|
+
* Image previews use registry ids or asset URLs, with optional expo-image for
|
|
8
|
+
* native SVGs; fonts render a pangram with fontFamily set to the asset name
|
|
9
|
+
* — a best-effort guess (family ≠ filename for many fonts) that falls back
|
|
10
|
+
* to the system font silently when it misses.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { ScrollView, StyleSheet, Text, View } from "react-native";
|
|
14
|
+
import { night } from "@buoy-gg/shared-ui";
|
|
15
|
+
import { AssetImage } from "./AssetImage";
|
|
16
|
+
import { formatBytes, formatDimensions, formatScales } from "../format";
|
|
17
|
+
import { estDecodedBytes } from "../store/assetStore";
|
|
18
|
+
import { ASSETS_TEST_IDS, assetDetailRowTestID, assetFindingTestID } from "../utils/testIDs";
|
|
19
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
function Row({
|
|
21
|
+
label,
|
|
22
|
+
value
|
|
23
|
+
}) {
|
|
24
|
+
const testID = assetDetailRowTestID(label);
|
|
25
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
26
|
+
style: styles.kvRow,
|
|
27
|
+
testID: testID,
|
|
28
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
29
|
+
style: styles.kvLabel,
|
|
30
|
+
children: label
|
|
31
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
32
|
+
style: styles.kvValue,
|
|
33
|
+
selectable: true,
|
|
34
|
+
testID: `${testID}-value`,
|
|
35
|
+
children: value
|
|
36
|
+
})]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function Preview({
|
|
40
|
+
record
|
|
41
|
+
}) {
|
|
42
|
+
if (record.kind === "image") {
|
|
43
|
+
return /*#__PURE__*/_jsx(View, {
|
|
44
|
+
style: styles.previewBox,
|
|
45
|
+
testID: ASSETS_TEST_IDS.detailPreview,
|
|
46
|
+
children: /*#__PURE__*/_jsx(AssetImage, {
|
|
47
|
+
testID: "buoy-internal-assets-preview",
|
|
48
|
+
record: record,
|
|
49
|
+
style: styles.previewImage
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (record.kind === "font") {
|
|
54
|
+
return /*#__PURE__*/_jsx(View, {
|
|
55
|
+
style: styles.previewBox,
|
|
56
|
+
testID: ASSETS_TEST_IDS.detailFontPreview,
|
|
57
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
58
|
+
style: [styles.fontPreview, {
|
|
59
|
+
fontFamily: record.name
|
|
60
|
+
}],
|
|
61
|
+
children: "The quick brown fox jumps over the lazy dog 0123456789"
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
export function AssetDetail({
|
|
68
|
+
record,
|
|
69
|
+
insights
|
|
70
|
+
}) {
|
|
71
|
+
const findings = [];
|
|
72
|
+
if (insights.neverLoaded.includes(record.id)) {
|
|
73
|
+
findings.push("Not observed in the runtime registry this app run. This does not prove the asset is unused.");
|
|
74
|
+
}
|
|
75
|
+
if (insights.scaleGaps.includes(record.id)) {
|
|
76
|
+
findings.push("Scale gap — no variant covers this device's pixel ratio");
|
|
77
|
+
}
|
|
78
|
+
if (insights.webpCandidates.includes(record.id)) {
|
|
79
|
+
findings.push("WebP candidate — large png/jpeg, converting typically saves 20–40%");
|
|
80
|
+
}
|
|
81
|
+
const duplicate = insights.duplicates.find(d => d.ids.includes(record.id));
|
|
82
|
+
if (duplicate) {
|
|
83
|
+
findings.push(`Duplicate content — identical bytes shipped ${duplicate.ids.length} times`);
|
|
84
|
+
}
|
|
85
|
+
if (insights.overDecode.includes(record.id)) {
|
|
86
|
+
findings.push("Decodes larger than 2× this entire screen — resize the source, no view can need this many pixels");
|
|
87
|
+
}
|
|
88
|
+
if (insights.heavyGifs.includes(record.id)) {
|
|
89
|
+
findings.push("Heavy GIF — every frame decodes into memory; a video or Lottie is typically ~90% smaller");
|
|
90
|
+
}
|
|
91
|
+
if (insights.heavyFonts.includes(record.id)) {
|
|
92
|
+
findings.push("Heavy font — likely an unsubset icon font; subsetting to used glyphs usually saves most of it");
|
|
93
|
+
}
|
|
94
|
+
if (insights.scaleAnomalies.includes(record.id)) {
|
|
95
|
+
findings.push("Scale anomaly — a higher-resolution variant is smaller in bytes than a lower one; check the exports");
|
|
96
|
+
}
|
|
97
|
+
const estimate = estDecodedBytes(record);
|
|
98
|
+
return /*#__PURE__*/_jsxs(ScrollView, {
|
|
99
|
+
style: styles.scroll,
|
|
100
|
+
contentContainerStyle: styles.content,
|
|
101
|
+
testID: ASSETS_TEST_IDS.detailScroll,
|
|
102
|
+
children: [/*#__PURE__*/_jsx(Preview, {
|
|
103
|
+
record: record
|
|
104
|
+
}), findings.length > 0 ? /*#__PURE__*/_jsx(View, {
|
|
105
|
+
style: styles.findings,
|
|
106
|
+
testID: ASSETS_TEST_IDS.detailFindings,
|
|
107
|
+
children: findings.map((finding, index) => /*#__PURE__*/_jsx(Text, {
|
|
108
|
+
style: styles.findingText,
|
|
109
|
+
testID: assetFindingTestID(index),
|
|
110
|
+
children: finding
|
|
111
|
+
}, finding))
|
|
112
|
+
}) : null, /*#__PURE__*/_jsx(Row, {
|
|
113
|
+
label: "Name",
|
|
114
|
+
value: `${record.name}.${record.type}`
|
|
115
|
+
}), /*#__PURE__*/_jsx(Row, {
|
|
116
|
+
label: "Kind",
|
|
117
|
+
value: record.kind
|
|
118
|
+
}), /*#__PURE__*/_jsx(Row, {
|
|
119
|
+
label: "Status",
|
|
120
|
+
value: record.loaded ? "Loaded (registered at runtime)" : "Not observed in the runtime registry"
|
|
121
|
+
}), record.kind === "image" ? /*#__PURE__*/_jsx(Row, {
|
|
122
|
+
label: "Dimensions",
|
|
123
|
+
value: `${formatDimensions(record)} (logical)`
|
|
124
|
+
}) : null, record.kind === "image" && record.scales.length ? /*#__PURE__*/_jsx(Row, {
|
|
125
|
+
label: "Scales",
|
|
126
|
+
value: formatScales(record.scales)
|
|
127
|
+
}) : null, record.sizesByScale ? Object.entries(record.sizesByScale).map(([scale, bytes]) => /*#__PURE__*/_jsx(Row, {
|
|
128
|
+
label: `Size @${scale}x`,
|
|
129
|
+
value: formatBytes(bytes)
|
|
130
|
+
}, scale)) : null, record.sizeBytes != null && record.sizeSource === "measured" ? /*#__PURE__*/_jsx(Row, {
|
|
131
|
+
label: "Total size",
|
|
132
|
+
value: formatBytes(record.sizeBytes)
|
|
133
|
+
}) : null, estimate > 0 ? /*#__PURE__*/_jsx(Row, {
|
|
134
|
+
label: "Decoded memory",
|
|
135
|
+
value: `~${formatBytes(estimate)} (RGBA)`
|
|
136
|
+
}) : null, record.registryId != null ? /*#__PURE__*/_jsx(Row, {
|
|
137
|
+
label: "Registry id",
|
|
138
|
+
value: String(record.registryId)
|
|
139
|
+
}) : null, record.hash ? /*#__PURE__*/_jsx(Row, {
|
|
140
|
+
label: "Hash",
|
|
141
|
+
value: record.hash
|
|
142
|
+
}) : null, record.httpServerLocation ? /*#__PURE__*/_jsx(Row, {
|
|
143
|
+
label: "Location",
|
|
144
|
+
value: record.httpServerLocation
|
|
145
|
+
}) : null, record.fileSystemLocation ? /*#__PURE__*/_jsx(Row, {
|
|
146
|
+
label: "Source dir",
|
|
147
|
+
value: record.fileSystemLocation
|
|
148
|
+
}) : null, record.resolvedUri ? /*#__PURE__*/_jsx(Row, {
|
|
149
|
+
label: "Resolved URI",
|
|
150
|
+
value: record.resolvedUri
|
|
151
|
+
}) : null]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const styles = StyleSheet.create({
|
|
155
|
+
scroll: {
|
|
156
|
+
flex: 1
|
|
157
|
+
},
|
|
158
|
+
content: {
|
|
159
|
+
padding: 12,
|
|
160
|
+
gap: 8
|
|
161
|
+
},
|
|
162
|
+
previewBox: {
|
|
163
|
+
borderRadius: 8,
|
|
164
|
+
backgroundColor: night.color.bg,
|
|
165
|
+
padding: 12,
|
|
166
|
+
alignItems: "center",
|
|
167
|
+
justifyContent: "center",
|
|
168
|
+
minHeight: 96
|
|
169
|
+
},
|
|
170
|
+
previewImage: {
|
|
171
|
+
width: "100%",
|
|
172
|
+
height: 140
|
|
173
|
+
},
|
|
174
|
+
fontPreview: {
|
|
175
|
+
color: night.color.text,
|
|
176
|
+
fontSize: 16,
|
|
177
|
+
textAlign: "center"
|
|
178
|
+
},
|
|
179
|
+
findings: {
|
|
180
|
+
borderRadius: 8,
|
|
181
|
+
borderWidth: 1,
|
|
182
|
+
borderColor: night.color.border,
|
|
183
|
+
backgroundColor: night.color.surface,
|
|
184
|
+
padding: 10,
|
|
185
|
+
gap: 6
|
|
186
|
+
},
|
|
187
|
+
findingText: {
|
|
188
|
+
color: night.color.textSecondary,
|
|
189
|
+
fontSize: 11,
|
|
190
|
+
lineHeight: 15
|
|
191
|
+
},
|
|
192
|
+
kvRow: {
|
|
193
|
+
gap: 2
|
|
194
|
+
},
|
|
195
|
+
kvLabel: {
|
|
196
|
+
color: night.color.textTertiary,
|
|
197
|
+
fontSize: 9,
|
|
198
|
+
fontWeight: "700",
|
|
199
|
+
letterSpacing: 0.5,
|
|
200
|
+
textTransform: "uppercase"
|
|
201
|
+
},
|
|
202
|
+
kvValue: {
|
|
203
|
+
color: night.color.text,
|
|
204
|
+
fontSize: 12
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=AssetDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ScrollView","StyleSheet","Text","View","night","AssetImage","formatBytes","formatDimensions","formatScales","estDecodedBytes","ASSETS_TEST_IDS","assetDetailRowTestID","assetFindingTestID","jsx","_jsx","jsxs","_jsxs","Row","label","value","testID","style","styles","kvRow","children","kvLabel","kvValue","selectable","Preview","record","kind","previewBox","detailPreview","previewImage","detailFontPreview","fontPreview","fontFamily","name","AssetDetail","insights","findings","neverLoaded","includes","id","push","scaleGaps","webpCandidates","duplicate","duplicates","find","d","ids","length","overDecode","heavyGifs","heavyFonts","scaleAnomalies","estimate","scroll","contentContainerStyle","content","detailScroll","detailFindings","map","finding","index","findingText","type","loaded","scales","sizesByScale","Object","entries","scale","bytes","sizeBytes","sizeSource","registryId","String","hash","httpServerLocation","fileSystemLocation","resolvedUri","create","flex","padding","gap","borderRadius","backgroundColor","color","bg","alignItems","justifyContent","minHeight","width","height","text","fontSize","textAlign","borderWidth","borderColor","border","surface","textSecondary","lineHeight","textTertiary","fontWeight","letterSpacing","textTransform"],"sourceRoot":"../../../src","sources":["components/AssetDetail.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1,62 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Image, Platform, StyleSheet, Text, View } from "react-native";
|
|
5
|
+
import { night } from "@buoy-gg/shared-ui";
|
|
6
|
+
import { displaySource } from "../capture/measure";
|
|
7
|
+
import { getExpoPreviewImage } from "./optionalExpoImage";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export function AssetImage({
|
|
10
|
+
record,
|
|
11
|
+
style,
|
|
12
|
+
testID,
|
|
13
|
+
compact = false
|
|
14
|
+
}) {
|
|
15
|
+
const source = displaySource(record);
|
|
16
|
+
const svg = record.type.toLowerCase() === "svg";
|
|
17
|
+
const ExpoImage = svg && Platform.OS !== "web" ? getExpoPreviewImage() : null;
|
|
18
|
+
const sourceKey = `${record.key}:${record.hash ?? ""}:${typeof source === "number" ? source : source?.uri ?? ""}`;
|
|
19
|
+
const [failedSource, setFailedSource] = useState(null);
|
|
20
|
+
const unavailable = source == null || failedSource === sourceKey || svg && Platform.OS !== "web" && !ExpoImage;
|
|
21
|
+
if (unavailable) {
|
|
22
|
+
const label = svg ? "SVG preview unavailable" : "Image preview unavailable";
|
|
23
|
+
return /*#__PURE__*/_jsx(View, {
|
|
24
|
+
style: [style, styles.fallback],
|
|
25
|
+
accessibilityLabel: label,
|
|
26
|
+
testID: `${testID}-unavailable`,
|
|
27
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
28
|
+
style: styles.text,
|
|
29
|
+
children: compact ? svg ? "SVG" : "IMG" : label
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const onError = () => setFailedSource(sourceKey);
|
|
34
|
+
if (ExpoImage) {
|
|
35
|
+
return /*#__PURE__*/_jsx(ExpoImage, {
|
|
36
|
+
source: source,
|
|
37
|
+
style: style,
|
|
38
|
+
contentFit: "contain",
|
|
39
|
+
onError: onError,
|
|
40
|
+
testID: testID
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return /*#__PURE__*/_jsx(Image, {
|
|
44
|
+
source: source,
|
|
45
|
+
style: style,
|
|
46
|
+
resizeMode: "contain",
|
|
47
|
+
onError: onError,
|
|
48
|
+
testID: testID
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const styles = StyleSheet.create({
|
|
52
|
+
fallback: {
|
|
53
|
+
alignItems: "center",
|
|
54
|
+
justifyContent: "center"
|
|
55
|
+
},
|
|
56
|
+
text: {
|
|
57
|
+
color: night.color.textSecondary,
|
|
58
|
+
fontSize: 10,
|
|
59
|
+
textAlign: "center"
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=AssetImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","Image","Platform","StyleSheet","Text","View","night","displaySource","getExpoPreviewImage","jsx","_jsx","AssetImage","record","style","testID","compact","source","svg","type","toLowerCase","ExpoImage","OS","sourceKey","key","hash","uri","failedSource","setFailedSource","unavailable","label","styles","fallback","accessibilityLabel","children","text","onError","contentFit","resizeMode","create","alignItems","justifyContent","color","textSecondary","fontSize","textAlign"],"sourceRoot":"../../../src","sources":["components/AssetImage.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,KAAK,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAEtE,SAASC,KAAK,QAAQ,oBAAoB;AAC1C,SAASC,aAAa,QAAQ,oBAAoB;AAElD,SAASC,mBAAmB,QAAQ,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1D,OAAO,SAASC,UAAUA,CAAC;EAAEC,MAAM;EAAEC,KAAK;EAAEC,MAAM;EAAEC,OAAO,GAAG;AAK9D,CAAC,EAAE;EACD,MAAMC,MAAM,GAAGT,aAAa,CAACK,MAAM,CAAC;EACpC,MAAMK,GAAG,GAAGL,MAAM,CAACM,IAAI,CAACC,WAAW,CAAC,CAAC,KAAK,KAAK;EAC/C,MAAMC,SAAS,GAAGH,GAAG,IAAIf,QAAQ,CAACmB,EAAE,KAAK,KAAK,GAAGb,mBAAmB,CAAC,CAAC,GAAG,IAAI;EAC7E,MAAMc,SAAS,GAAG,GAAGV,MAAM,CAACW,GAAG,IAAIX,MAAM,CAACY,IAAI,IAAI,EAAE,IAAI,OAAOR,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGA,MAAM,EAAES,GAAG,IAAI,EAAE,EAAE;EACjH,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG3B,QAAQ,CAAgB,IAAI,CAAC;EACrE,MAAM4B,WAAW,GAAGZ,MAAM,IAAI,IAAI,IAAIU,YAAY,KAAKJ,SAAS,IAC7DL,GAAG,IAAIf,QAAQ,CAACmB,EAAE,KAAK,KAAK,IAAI,CAACD,SAAU;EAE9C,IAAIQ,WAAW,EAAE;IACf,MAAMC,KAAK,GAAGZ,GAAG,GAAG,yBAAyB,GAAG,2BAA2B;IAC3E,oBACEP,IAAA,CAACL,IAAI;MAACQ,KAAK,EAAE,CAACA,KAAK,EAAEiB,MAAM,CAACC,QAAQ,CAAE;MAACC,kBAAkB,EAAEH,KAAM;MAACf,MAAM,EAAE,GAAGA,MAAM,cAAe;MAAAmB,QAAA,eAChGvB,IAAA,CAACN,IAAI;QAACS,KAAK,EAAEiB,MAAM,CAACI,IAAK;QAAAD,QAAA,EAAElB,OAAO,GAAIE,GAAG,GAAG,KAAK,GAAG,KAAK,GAAIY;MAAK,CAAO;IAAC,CACtE,CAAC;EAEX;EAEA,MAAMM,OAAO,GAAGA,CAAA,KAAMR,eAAe,CAACL,SAAS,CAAC;EAChD,IAAIF,SAAS,EAAE;IACb,oBAAOV,IAAA,CAACU,SAAS;MAACJ,MAAM,EAAEA,MAAO;MAACH,KAAK,EAAEA,KAAM;MAACuB,UAAU,EAAC,SAAS;MAACD,OAAO,EAAEA,OAAQ;MAACrB,MAAM,EAAEA;IAAO,CAAE,CAAC;EAC3G;EACA,oBAAOJ,IAAA,CAACT,KAAK;IAACe,MAAM,EAAEA,MAAO;IAACH,KAAK,EAAEA,KAAM;IAACwB,UAAU,EAAC,SAAS;IAACF,OAAO,EAAEA,OAAQ;IAACrB,MAAM,EAAEA;EAAO,CAAE,CAAC;AACvG;AAEA,MAAMgB,MAAM,GAAG3B,UAAU,CAACmC,MAAM,CAAC;EAC/BP,QAAQ,EAAE;IAAEQ,UAAU,EAAE,QAAQ;IAAEC,cAAc,EAAE;EAAS,CAAC;EAC5DN,IAAI,EAAE;IAAEO,KAAK,EAAEnC,KAAK,CAACmC,KAAK,CAACC,aAAa;IAAEC,QAAQ,EAAE,EAAE;IAAEC,SAAS,EAAE;EAAS;AAC9E,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1,228 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AssetRow — one bundled asset as a family-style card (matching the network
|
|
5
|
+
* tool's rows): rounded card, colored accent edge per kind, thumbnail, name,
|
|
6
|
+
* quiet metadata, bold right-aligned size, and finding badges ONLY when a
|
|
7
|
+
* finding exists. A thin proportional bar along the card bottom makes the
|
|
8
|
+
* heavy assets feel heavy at a glance.
|
|
9
|
+
*
|
|
10
|
+
* Thumbnails render through the NUMERIC registry id when available — that
|
|
11
|
+
* routes through resolveAssetSource natively, so it works in dev, iOS
|
|
12
|
+
* release (file://) and Android release (bare resource id) alike. They carry
|
|
13
|
+
* the buoy-internal testID so the images tool never records our own UI.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
17
|
+
import { macOSColors, night, Pill } from "@buoy-gg/shared-ui";
|
|
18
|
+
import { AssetImage } from "./AssetImage";
|
|
19
|
+
import { formatDimensions, formatScales, formatSize, KIND_COLORS, KIND_LABELS } from "../format";
|
|
20
|
+
import { estDecodedBytes } from "../store/assetStore";
|
|
21
|
+
import { assetBadgeTestID, assetRowTestID } from "../utils/testIDs";
|
|
22
|
+
|
|
23
|
+
/** Which audit findings apply to this record (drives the row badges). */
|
|
24
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
function Badge({
|
|
26
|
+
label,
|
|
27
|
+
color,
|
|
28
|
+
testID
|
|
29
|
+
}) {
|
|
30
|
+
// Quiet chip: legibility from light-gray text on a neutral fill. Only the
|
|
31
|
+
// serious tiers (red) and WEBP (blue) carry a small dot; the rest are plain.
|
|
32
|
+
return /*#__PURE__*/_jsx(Pill, {
|
|
33
|
+
label: label,
|
|
34
|
+
color: color,
|
|
35
|
+
variant: "quiet",
|
|
36
|
+
dot: Boolean(color),
|
|
37
|
+
style: {
|
|
38
|
+
paddingVertical: 2.5
|
|
39
|
+
},
|
|
40
|
+
testID: testID
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function AssetRow({
|
|
44
|
+
record,
|
|
45
|
+
flags,
|
|
46
|
+
sizeFraction,
|
|
47
|
+
onPress
|
|
48
|
+
}) {
|
|
49
|
+
const accent = KIND_COLORS[record.kind];
|
|
50
|
+
const badges = [];
|
|
51
|
+
if (!record.loaded) badges.push({
|
|
52
|
+
label: "NOT OBSERVED"
|
|
53
|
+
});
|
|
54
|
+
if (flags.oversize) badges.push({
|
|
55
|
+
label: "OVERSIZE",
|
|
56
|
+
color: macOSColors.semantic.error
|
|
57
|
+
});
|
|
58
|
+
if (flags.duplicate) badges.push({
|
|
59
|
+
label: "DUP"
|
|
60
|
+
});
|
|
61
|
+
if (flags.heavy) badges.push({
|
|
62
|
+
label: "HEAVY"
|
|
63
|
+
});
|
|
64
|
+
if (flags.scaleAnomaly) badges.push({
|
|
65
|
+
label: "BAD SCALE",
|
|
66
|
+
color: macOSColors.semantic.error
|
|
67
|
+
});else if (flags.scaleGap) badges.push({
|
|
68
|
+
label: "LOW-RES"
|
|
69
|
+
});
|
|
70
|
+
if (flags.webp) badges.push({
|
|
71
|
+
label: "WEBP",
|
|
72
|
+
color: macOSColors.semantic.info
|
|
73
|
+
});
|
|
74
|
+
return /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
75
|
+
style: styles.card,
|
|
76
|
+
testID: assetRowTestID(record.name, record.type),
|
|
77
|
+
onPress: () => onPress(record.id),
|
|
78
|
+
activeOpacity: 0.7,
|
|
79
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
80
|
+
style: styles.body,
|
|
81
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
82
|
+
style: styles.thumbBox,
|
|
83
|
+
children: record.kind === "image" ? /*#__PURE__*/_jsx(AssetImage
|
|
84
|
+
// buoy-internal- prefix: the images tool skips its own toolchain's
|
|
85
|
+
// views, so previewing an asset never records a render of itself.
|
|
86
|
+
, {
|
|
87
|
+
testID: "buoy-internal-assets-thumb",
|
|
88
|
+
record: record,
|
|
89
|
+
style: styles.thumb,
|
|
90
|
+
compact: true
|
|
91
|
+
}) : /*#__PURE__*/_jsx(Text, {
|
|
92
|
+
style: [styles.thumbFallback, {
|
|
93
|
+
color: accent
|
|
94
|
+
}],
|
|
95
|
+
children: KIND_LABELS[record.kind]
|
|
96
|
+
})
|
|
97
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
98
|
+
style: styles.main,
|
|
99
|
+
children: [/*#__PURE__*/_jsxs(Text, {
|
|
100
|
+
style: styles.name,
|
|
101
|
+
numberOfLines: 1,
|
|
102
|
+
testID: `${assetRowTestID(record.name, record.type)}-name`,
|
|
103
|
+
children: [record.name, /*#__PURE__*/_jsxs(Text, {
|
|
104
|
+
style: styles.ext,
|
|
105
|
+
children: [".", record.type]
|
|
106
|
+
})]
|
|
107
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
108
|
+
style: styles.metaRow,
|
|
109
|
+
children: [record.kind === "image" && record.width != null ? /*#__PURE__*/_jsx(Text, {
|
|
110
|
+
style: styles.meta,
|
|
111
|
+
children: formatDimensions(record)
|
|
112
|
+
}) : null, record.kind === "image" && record.scales.length ? /*#__PURE__*/_jsx(Text, {
|
|
113
|
+
style: styles.meta,
|
|
114
|
+
children: formatScales(record.scales)
|
|
115
|
+
}) : null]
|
|
116
|
+
})]
|
|
117
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
118
|
+
style: styles.right,
|
|
119
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
120
|
+
style: styles.size,
|
|
121
|
+
testID: `${assetRowTestID(record.name, record.type)}-size`,
|
|
122
|
+
children: formatSize(record, estDecodedBytes(record))
|
|
123
|
+
}), badges.length ? /*#__PURE__*/_jsx(View, {
|
|
124
|
+
style: styles.badgeRow,
|
|
125
|
+
children: badges.slice(0, 3).map(b => /*#__PURE__*/_jsx(Badge, {
|
|
126
|
+
label: b.label,
|
|
127
|
+
color: b.color,
|
|
128
|
+
testID: assetBadgeTestID(record.name, record.type, b.label)
|
|
129
|
+
}, b.label))
|
|
130
|
+
}) : null]
|
|
131
|
+
})]
|
|
132
|
+
}), sizeFraction > 0 ? /*#__PURE__*/_jsx(View, {
|
|
133
|
+
style: styles.sizeTrack,
|
|
134
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
135
|
+
style: [styles.sizeFill, {
|
|
136
|
+
backgroundColor: accent,
|
|
137
|
+
width: `${Math.max(2, Math.round(sizeFraction * 100))}%`
|
|
138
|
+
}]
|
|
139
|
+
})
|
|
140
|
+
}) : null]
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const styles = StyleSheet.create({
|
|
144
|
+
card: {
|
|
145
|
+
marginHorizontal: 10,
|
|
146
|
+
marginTop: 6,
|
|
147
|
+
borderRadius: 10,
|
|
148
|
+
backgroundColor: night.color.surface,
|
|
149
|
+
borderWidth: 1,
|
|
150
|
+
borderColor: night.color.border,
|
|
151
|
+
overflow: "hidden"
|
|
152
|
+
},
|
|
153
|
+
body: {
|
|
154
|
+
flexDirection: "row",
|
|
155
|
+
alignItems: "center",
|
|
156
|
+
paddingVertical: 8,
|
|
157
|
+
paddingHorizontal: 12,
|
|
158
|
+
gap: 10
|
|
159
|
+
},
|
|
160
|
+
thumbBox: {
|
|
161
|
+
width: 40,
|
|
162
|
+
height: 40,
|
|
163
|
+
borderRadius: 8,
|
|
164
|
+
// Light plate so dark glyph assets stay visible on the dark card.
|
|
165
|
+
backgroundColor: "rgba(255,255,255,0.10)",
|
|
166
|
+
borderWidth: 1,
|
|
167
|
+
borderColor: night.color.border,
|
|
168
|
+
alignItems: "center",
|
|
169
|
+
justifyContent: "center",
|
|
170
|
+
overflow: "hidden"
|
|
171
|
+
},
|
|
172
|
+
thumb: {
|
|
173
|
+
width: 34,
|
|
174
|
+
height: 34
|
|
175
|
+
},
|
|
176
|
+
thumbFallback: {
|
|
177
|
+
fontSize: 9,
|
|
178
|
+
fontWeight: "700",
|
|
179
|
+
letterSpacing: 0.5
|
|
180
|
+
},
|
|
181
|
+
main: {
|
|
182
|
+
flex: 1,
|
|
183
|
+
gap: 3
|
|
184
|
+
},
|
|
185
|
+
name: {
|
|
186
|
+
color: night.color.text,
|
|
187
|
+
fontSize: 12,
|
|
188
|
+
fontWeight: "600"
|
|
189
|
+
},
|
|
190
|
+
ext: {
|
|
191
|
+
color: night.color.textTertiary,
|
|
192
|
+
fontWeight: "400"
|
|
193
|
+
},
|
|
194
|
+
metaRow: {
|
|
195
|
+
flexDirection: "row",
|
|
196
|
+
alignItems: "center",
|
|
197
|
+
gap: 8
|
|
198
|
+
},
|
|
199
|
+
meta: {
|
|
200
|
+
color: night.color.textSecondary,
|
|
201
|
+
fontSize: 10,
|
|
202
|
+
fontVariant: ["tabular-nums"]
|
|
203
|
+
},
|
|
204
|
+
right: {
|
|
205
|
+
alignItems: "flex-end",
|
|
206
|
+
gap: 4
|
|
207
|
+
},
|
|
208
|
+
size: {
|
|
209
|
+
color: night.color.text,
|
|
210
|
+
fontSize: 12,
|
|
211
|
+
fontWeight: "700",
|
|
212
|
+
fontVariant: ["tabular-nums"]
|
|
213
|
+
},
|
|
214
|
+
badgeRow: {
|
|
215
|
+
flexDirection: "row",
|
|
216
|
+
gap: 4
|
|
217
|
+
},
|
|
218
|
+
sizeTrack: {
|
|
219
|
+
height: 2,
|
|
220
|
+
backgroundColor: "transparent"
|
|
221
|
+
},
|
|
222
|
+
sizeFill: {
|
|
223
|
+
height: 2,
|
|
224
|
+
opacity: 0.45,
|
|
225
|
+
borderTopRightRadius: 2
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=AssetRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","Text","TouchableOpacity","View","macOSColors","night","Pill","AssetImage","formatDimensions","formatScales","formatSize","KIND_COLORS","KIND_LABELS","estDecodedBytes","assetBadgeTestID","assetRowTestID","jsx","_jsx","jsxs","_jsxs","Badge","label","color","testID","variant","dot","Boolean","style","paddingVertical","AssetRow","record","flags","sizeFraction","onPress","accent","kind","badges","loaded","push","oversize","semantic","error","duplicate","heavy","scaleAnomaly","scaleGap","webp","info","styles","card","name","type","id","activeOpacity","children","body","thumbBox","thumb","compact","thumbFallback","main","numberOfLines","ext","metaRow","width","meta","scales","length","right","size","badgeRow","slice","map","b","sizeTrack","sizeFill","backgroundColor","Math","max","round","create","marginHorizontal","marginTop","borderRadius","surface","borderWidth","borderColor","border","overflow","flexDirection","alignItems","paddingHorizontal","gap","height","justifyContent","fontSize","fontWeight","letterSpacing","flex","text","textTertiary","textSecondary","fontVariant","opacity","borderTopRightRadius"],"sourceRoot":"../../../src","sources":["components/AssetRow.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1,101 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AssetsFilterBar — kind filter pills with counts, styled like the network
|
|
5
|
+
* tool's bordered pills: outlined, kind-accent-colored when active. Wrapping
|
|
6
|
+
* row, not a horizontal ScrollView (same height-measurement pitfall the
|
|
7
|
+
* images tool documents).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
11
|
+
import { night } from "@buoy-gg/shared-ui";
|
|
12
|
+
import { KIND_COLORS, KIND_LABELS } from "../format";
|
|
13
|
+
import { ASSETS_TEST_IDS, assetFilterTestID } from "../utils/testIDs";
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
export function AssetsFilterBar({
|
|
16
|
+
stats,
|
|
17
|
+
duplicateCount,
|
|
18
|
+
filter,
|
|
19
|
+
onChange
|
|
20
|
+
}) {
|
|
21
|
+
const chips = [{
|
|
22
|
+
key: "all",
|
|
23
|
+
label: `ALL ${stats.total}`,
|
|
24
|
+
accent: night.color.textSecondary
|
|
25
|
+
}, {
|
|
26
|
+
key: "duplicates",
|
|
27
|
+
label: `DUPLICATES ${duplicateCount}`,
|
|
28
|
+
accent: "#FF9F1C"
|
|
29
|
+
}];
|
|
30
|
+
for (const kind of Object.keys(stats.byKind)) {
|
|
31
|
+
const entry = stats.byKind[kind];
|
|
32
|
+
if (entry.count > 0) {
|
|
33
|
+
chips.push({
|
|
34
|
+
key: kind,
|
|
35
|
+
label: `${KIND_LABELS[kind]} ${entry.count}`,
|
|
36
|
+
accent: KIND_COLORS[kind]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (stats.neverLoaded > 0) {
|
|
41
|
+
// Amber, not semantic.warning — the bright yellow reads as an alarm.
|
|
42
|
+
chips.push({
|
|
43
|
+
key: "unused",
|
|
44
|
+
label: `NOT OBSERVED ${stats.neverLoaded}`,
|
|
45
|
+
accent: "#FF9F1C"
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (chips.length <= 1) return null;
|
|
49
|
+
return /*#__PURE__*/_jsx(View, {
|
|
50
|
+
style: styles.bar,
|
|
51
|
+
testID: ASSETS_TEST_IDS.filterBar,
|
|
52
|
+
children: chips.map(chip => {
|
|
53
|
+
const active = chip.key === filter;
|
|
54
|
+
return /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
55
|
+
accessibilityRole: "button",
|
|
56
|
+
accessibilityState: {
|
|
57
|
+
selected: active
|
|
58
|
+
},
|
|
59
|
+
testID: assetFilterTestID(chip.key),
|
|
60
|
+
style: [styles.chip, active && {
|
|
61
|
+
borderColor: chip.accent,
|
|
62
|
+
backgroundColor: `${chip.accent}1A`
|
|
63
|
+
}]
|
|
64
|
+
// Tapping the active chip again untoggles back to ALL.
|
|
65
|
+
,
|
|
66
|
+
onPress: () => onChange(active ? "all" : chip.key),
|
|
67
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
68
|
+
testID: `${assetFilterTestID(chip.key)}-label`,
|
|
69
|
+
style: [styles.chipText, {
|
|
70
|
+
color: active ? chip.accent : night.color.textSecondary
|
|
71
|
+
}],
|
|
72
|
+
children: chip.label
|
|
73
|
+
})
|
|
74
|
+
}, chip.key);
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const styles = StyleSheet.create({
|
|
79
|
+
bar: {
|
|
80
|
+
flexDirection: "row",
|
|
81
|
+
flexWrap: "wrap",
|
|
82
|
+
gap: 6,
|
|
83
|
+
paddingHorizontal: 10,
|
|
84
|
+
paddingVertical: 8
|
|
85
|
+
},
|
|
86
|
+
chip: {
|
|
87
|
+
borderWidth: 1,
|
|
88
|
+
borderColor: night.color.border,
|
|
89
|
+
backgroundColor: night.color.surface,
|
|
90
|
+
borderRadius: 999,
|
|
91
|
+
paddingHorizontal: 10,
|
|
92
|
+
paddingVertical: 5
|
|
93
|
+
},
|
|
94
|
+
chipText: {
|
|
95
|
+
fontSize: 10,
|
|
96
|
+
fontWeight: "700",
|
|
97
|
+
letterSpacing: 0.4,
|
|
98
|
+
lineHeight: 13
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=AssetsFilterBar.js.map
|