@buoy-gg/assets 7.0.16

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 (179) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +55 -0
  3. package/lib/commonjs/capture/expo.js +46 -0
  4. package/lib/commonjs/capture/expo.js.map +1 -0
  5. package/lib/commonjs/capture/install.js +78 -0
  6. package/lib/commonjs/capture/install.js.map +1 -0
  7. package/lib/commonjs/capture/measure.js +186 -0
  8. package/lib/commonjs/capture/measure.js.map +1 -0
  9. package/lib/commonjs/capture/metroGraph.js +148 -0
  10. package/lib/commonjs/capture/metroGraph.js.map +1 -0
  11. package/lib/commonjs/capture/registry.js +124 -0
  12. package/lib/commonjs/capture/registry.js.map +1 -0
  13. package/lib/commonjs/components/AssetDetail.js +205 -0
  14. package/lib/commonjs/components/AssetDetail.js.map +1 -0
  15. package/lib/commonjs/components/AssetRow.js +246 -0
  16. package/lib/commonjs/components/AssetRow.js.map +1 -0
  17. package/lib/commonjs/components/AssetsFilterBar.js +92 -0
  18. package/lib/commonjs/components/AssetsFilterBar.js.map +1 -0
  19. package/lib/commonjs/components/AssetsHeader.js +66 -0
  20. package/lib/commonjs/components/AssetsHeader.js.map +1 -0
  21. package/lib/commonjs/components/AssetsIcon.js +19 -0
  22. package/lib/commonjs/components/AssetsIcon.js.map +1 -0
  23. package/lib/commonjs/components/AssetsListControls.js +94 -0
  24. package/lib/commonjs/components/AssetsListControls.js.map +1 -0
  25. package/lib/commonjs/components/AssetsModal.js +338 -0
  26. package/lib/commonjs/components/AssetsModal.js.map +1 -0
  27. package/lib/commonjs/components/BaselineBar.js +110 -0
  28. package/lib/commonjs/components/BaselineBar.js.map +1 -0
  29. package/lib/commonjs/export.js +62 -0
  30. package/lib/commonjs/export.js.map +1 -0
  31. package/lib/commonjs/format.js +59 -0
  32. package/lib/commonjs/format.js.map +1 -0
  33. package/lib/commonjs/hooks/useAssetRecords.js +22 -0
  34. package/lib/commonjs/hooks/useAssetRecords.js.map +1 -0
  35. package/lib/commonjs/index.js +260 -0
  36. package/lib/commonjs/index.js.map +1 -0
  37. package/lib/commonjs/package.json +1 -0
  38. package/lib/commonjs/preset.js +45 -0
  39. package/lib/commonjs/preset.js.map +1 -0
  40. package/lib/commonjs/remote.js +65 -0
  41. package/lib/commonjs/remote.js.map +1 -0
  42. package/lib/commonjs/state.js +51 -0
  43. package/lib/commonjs/state.js.map +1 -0
  44. package/lib/commonjs/store/assetStore.js +234 -0
  45. package/lib/commonjs/store/assetStore.js.map +1 -0
  46. package/lib/commonjs/store/baseline.js +165 -0
  47. package/lib/commonjs/store/baseline.js.map +1 -0
  48. package/lib/commonjs/store/insights.js +129 -0
  49. package/lib/commonjs/store/insights.js.map +1 -0
  50. package/lib/commonjs/sync/assetsSyncAdapter.js +157 -0
  51. package/lib/commonjs/sync/assetsSyncAdapter.js.map +1 -0
  52. package/lib/commonjs/types.js +2 -0
  53. package/lib/commonjs/types.js.map +1 -0
  54. package/lib/module/capture/expo.js +41 -0
  55. package/lib/module/capture/expo.js.map +1 -0
  56. package/lib/module/capture/install.js +72 -0
  57. package/lib/module/capture/install.js.map +1 -0
  58. package/lib/module/capture/measure.js +179 -0
  59. package/lib/module/capture/measure.js.map +1 -0
  60. package/lib/module/capture/metroGraph.js +141 -0
  61. package/lib/module/capture/metroGraph.js.map +1 -0
  62. package/lib/module/capture/registry.js +117 -0
  63. package/lib/module/capture/registry.js.map +1 -0
  64. package/lib/module/components/AssetDetail.js +201 -0
  65. package/lib/module/components/AssetDetail.js.map +1 -0
  66. package/lib/module/components/AssetRow.js +242 -0
  67. package/lib/module/components/AssetRow.js.map +1 -0
  68. package/lib/module/components/AssetsFilterBar.js +88 -0
  69. package/lib/module/components/AssetsFilterBar.js.map +1 -0
  70. package/lib/module/components/AssetsHeader.js +62 -0
  71. package/lib/module/components/AssetsHeader.js.map +1 -0
  72. package/lib/module/components/AssetsIcon.js +12 -0
  73. package/lib/module/components/AssetsIcon.js.map +1 -0
  74. package/lib/module/components/AssetsListControls.js +90 -0
  75. package/lib/module/components/AssetsListControls.js.map +1 -0
  76. package/lib/module/components/AssetsModal.js +333 -0
  77. package/lib/module/components/AssetsModal.js.map +1 -0
  78. package/lib/module/components/BaselineBar.js +106 -0
  79. package/lib/module/components/BaselineBar.js.map +1 -0
  80. package/lib/module/export.js +57 -0
  81. package/lib/module/export.js.map +1 -0
  82. package/lib/module/format.js +51 -0
  83. package/lib/module/format.js.map +1 -0
  84. package/lib/module/hooks/useAssetRecords.js +18 -0
  85. package/lib/module/hooks/useAssetRecords.js.map +1 -0
  86. package/lib/module/index.js +59 -0
  87. package/lib/module/index.js.map +1 -0
  88. package/lib/module/preset.js +40 -0
  89. package/lib/module/preset.js.map +1 -0
  90. package/lib/module/remote.js +58 -0
  91. package/lib/module/remote.js.map +1 -0
  92. package/lib/module/state.js +47 -0
  93. package/lib/module/state.js.map +1 -0
  94. package/lib/module/store/assetStore.js +219 -0
  95. package/lib/module/store/assetStore.js.map +1 -0
  96. package/lib/module/store/baseline.js +157 -0
  97. package/lib/module/store/baseline.js.map +1 -0
  98. package/lib/module/store/insights.js +125 -0
  99. package/lib/module/store/insights.js.map +1 -0
  100. package/lib/module/sync/assetsSyncAdapter.js +153 -0
  101. package/lib/module/sync/assetsSyncAdapter.js.map +1 -0
  102. package/lib/module/types.js +2 -0
  103. package/lib/module/types.js.map +1 -0
  104. package/lib/typescript/capture/expo.d.ts +18 -0
  105. package/lib/typescript/capture/expo.d.ts.map +1 -0
  106. package/lib/typescript/capture/install.d.ts +17 -0
  107. package/lib/typescript/capture/install.d.ts.map +1 -0
  108. package/lib/typescript/capture/measure.d.ts +38 -0
  109. package/lib/typescript/capture/measure.d.ts.map +1 -0
  110. package/lib/typescript/capture/metroGraph.d.ts +33 -0
  111. package/lib/typescript/capture/metroGraph.d.ts.map +1 -0
  112. package/lib/typescript/capture/registry.d.ts +45 -0
  113. package/lib/typescript/capture/registry.d.ts.map +1 -0
  114. package/lib/typescript/components/AssetDetail.d.ts +17 -0
  115. package/lib/typescript/components/AssetDetail.d.ts.map +1 -0
  116. package/lib/typescript/components/AssetRow.d.ts +32 -0
  117. package/lib/typescript/components/AssetRow.d.ts.map +1 -0
  118. package/lib/typescript/components/AssetsFilterBar.d.ts +16 -0
  119. package/lib/typescript/components/AssetsFilterBar.d.ts.map +1 -0
  120. package/lib/typescript/components/AssetsHeader.d.ts +22 -0
  121. package/lib/typescript/components/AssetsHeader.d.ts.map +1 -0
  122. package/lib/typescript/components/AssetsIcon.d.ts +9 -0
  123. package/lib/typescript/components/AssetsIcon.d.ts.map +1 -0
  124. package/lib/typescript/components/AssetsListControls.d.ts +18 -0
  125. package/lib/typescript/components/AssetsListControls.d.ts.map +1 -0
  126. package/lib/typescript/components/AssetsModal.d.ts +24 -0
  127. package/lib/typescript/components/AssetsModal.d.ts.map +1 -0
  128. package/lib/typescript/components/BaselineBar.d.ts +13 -0
  129. package/lib/typescript/components/BaselineBar.d.ts.map +1 -0
  130. package/lib/typescript/export.d.ts +8 -0
  131. package/lib/typescript/export.d.ts.map +1 -0
  132. package/lib/typescript/format.d.ts +13 -0
  133. package/lib/typescript/format.d.ts.map +1 -0
  134. package/lib/typescript/hooks/useAssetRecords.d.ts +11 -0
  135. package/lib/typescript/hooks/useAssetRecords.d.ts.map +1 -0
  136. package/lib/typescript/index.d.ts +26 -0
  137. package/lib/typescript/index.d.ts.map +1 -0
  138. package/lib/typescript/preset.d.ts +38 -0
  139. package/lib/typescript/preset.d.ts.map +1 -0
  140. package/lib/typescript/remote.d.ts +17 -0
  141. package/lib/typescript/remote.d.ts.map +1 -0
  142. package/lib/typescript/state.d.ts +41 -0
  143. package/lib/typescript/state.d.ts.map +1 -0
  144. package/lib/typescript/store/assetStore.d.ts +51 -0
  145. package/lib/typescript/store/assetStore.d.ts.map +1 -0
  146. package/lib/typescript/store/baseline.d.ts +22 -0
  147. package/lib/typescript/store/baseline.d.ts.map +1 -0
  148. package/lib/typescript/store/insights.d.ts +7 -0
  149. package/lib/typescript/store/insights.d.ts.map +1 -0
  150. package/lib/typescript/sync/assetsSyncAdapter.d.ts +83 -0
  151. package/lib/typescript/sync/assetsSyncAdapter.d.ts.map +1 -0
  152. package/lib/typescript/types.d.ts +162 -0
  153. package/lib/typescript/types.d.ts.map +1 -0
  154. package/package.json +77 -0
  155. package/src/capture/expo.ts +45 -0
  156. package/src/capture/install.ts +73 -0
  157. package/src/capture/measure.ts +167 -0
  158. package/src/capture/metroGraph.ts +146 -0
  159. package/src/capture/registry.ts +134 -0
  160. package/src/components/AssetDetail.tsx +207 -0
  161. package/src/components/AssetRow.tsx +243 -0
  162. package/src/components/AssetsFilterBar.tsx +99 -0
  163. package/src/components/AssetsHeader.tsx +75 -0
  164. package/src/components/AssetsIcon.tsx +9 -0
  165. package/src/components/AssetsListControls.tsx +101 -0
  166. package/src/components/AssetsModal.tsx +368 -0
  167. package/src/components/BaselineBar.tsx +98 -0
  168. package/src/export.ts +108 -0
  169. package/src/format.ts +53 -0
  170. package/src/hooks/useAssetRecords.ts +26 -0
  171. package/src/index.tsx +87 -0
  172. package/src/preset.tsx +35 -0
  173. package/src/remote.ts +65 -0
  174. package/src/state.ts +84 -0
  175. package/src/store/assetStore.ts +209 -0
  176. package/src/store/baseline.ts +152 -0
  177. package/src/store/insights.ts +145 -0
  178. package/src/sync/assetsSyncAdapter.ts +151 -0
  179. package/src/types.ts +160 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AssetsFilterBar = AssetsFilterBar;
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
+ * AssetsFilterBar — kind filter pills with counts, styled like the network
13
+ * tool's bordered pills: outlined, kind-accent-colored when active. Wrapping
14
+ * row, not a horizontal ScrollView (same height-measurement pitfall the
15
+ * images tool documents).
16
+ */
17
+
18
+ function AssetsFilterBar({
19
+ stats,
20
+ filter,
21
+ onChange
22
+ }) {
23
+ const chips = [{
24
+ key: "all",
25
+ label: `ALL ${stats.total}`,
26
+ accent: _sharedUi.macOSColors.text.secondary
27
+ }];
28
+ for (const kind of Object.keys(stats.byKind)) {
29
+ const entry = stats.byKind[kind];
30
+ if (entry.count > 0) {
31
+ chips.push({
32
+ key: kind,
33
+ label: `${_format.KIND_LABELS[kind]} ${entry.count}`,
34
+ accent: _format.KIND_COLORS[kind]
35
+ });
36
+ }
37
+ }
38
+ if (stats.neverLoaded > 0) {
39
+ // Amber, not semantic.warning — the bright yellow reads as an alarm.
40
+ chips.push({
41
+ key: "unused",
42
+ label: `UNUSED ${stats.neverLoaded}`,
43
+ accent: "#FF9F1C"
44
+ });
45
+ }
46
+ if (chips.length <= 1) return null;
47
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
48
+ style: styles.bar,
49
+ children: chips.map(chip => {
50
+ const active = chip.key === filter;
51
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
52
+ style: [styles.chip, active && {
53
+ borderColor: chip.accent,
54
+ backgroundColor: `${chip.accent}1A`
55
+ }]
56
+ // Tapping the active chip again untoggles back to ALL.
57
+ ,
58
+ onPress: () => onChange(active ? "all" : chip.key),
59
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
60
+ style: [styles.chipText, {
61
+ color: active ? chip.accent : _sharedUi.macOSColors.text.secondary
62
+ }],
63
+ children: chip.label
64
+ })
65
+ }, chip.key);
66
+ })
67
+ });
68
+ }
69
+ const styles = _reactNative.StyleSheet.create({
70
+ bar: {
71
+ flexDirection: "row",
72
+ flexWrap: "wrap",
73
+ gap: 6,
74
+ paddingHorizontal: 10,
75
+ paddingVertical: 8
76
+ },
77
+ chip: {
78
+ borderWidth: 1,
79
+ borderColor: _sharedUi.macOSColors.border.default,
80
+ backgroundColor: _sharedUi.macOSColors.background.card,
81
+ borderRadius: 999,
82
+ paddingHorizontal: 10,
83
+ paddingVertical: 5
84
+ },
85
+ chipText: {
86
+ fontSize: 10,
87
+ fontWeight: "700",
88
+ letterSpacing: 0.4,
89
+ lineHeight: 13
90
+ }
91
+ });
92
+ //# sourceMappingURL=AssetsFilterBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_format","_jsxRuntime","AssetsFilterBar","stats","filter","onChange","chips","key","label","total","accent","macOSColors","text","secondary","kind","Object","keys","byKind","entry","count","push","KIND_LABELS","KIND_COLORS","neverLoaded","length","jsx","View","style","styles","bar","children","map","chip","active","TouchableOpacity","borderColor","backgroundColor","onPress","Text","chipText","color","StyleSheet","create","flexDirection","flexWrap","gap","paddingHorizontal","paddingVertical","borderWidth","border","default","background","card","borderRadius","fontSize","fontWeight","letterSpacing","lineHeight"],"sourceRoot":"../../../src","sources":["components/AssetsFilterBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AssetsHeader = AssetsHeader;
7
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
+ var _format = require("../format");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * AssetsHeader — shared ModalHeader wiring, matching the Images/Console
12
+ * header pattern. List mode shows inventory totals plus the shared
13
+ * ToolbarCopyButton (full markdown report); detail mode shows back
14
+ * navigation and the single-asset report.
15
+ */
16
+
17
+ function AssetsHeader({
18
+ stats,
19
+ measuring,
20
+ detailOpen,
21
+ detailIndex = -1,
22
+ detailTotal = 0,
23
+ onCloseDetail,
24
+ onClear,
25
+ getReport,
26
+ onBack
27
+ }) {
28
+ if (detailOpen) {
29
+ const counter = detailIndex >= 0 && detailTotal > 0 ? `${detailIndex + 1} of ${detailTotal}` : undefined;
30
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
31
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
32
+ onBack: onCloseDetail
33
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
34
+ title: "Asset detail",
35
+ subtitle: counter
36
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {
37
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
38
+ value: getReport
39
+ })
40
+ })]
41
+ });
42
+ }
43
+ const subtitleParts = [`${stats.total} assets`];
44
+ // A mid-measure byte total reads as nonsense ("653 B+") — wait it out.
45
+ if (stats.totalBytes > 0 && !measuring) {
46
+ const partial = stats.measuredCount < stats.total ? "+" : "";
47
+ subtitleParts.push(`${(0, _format.formatBytes)(stats.totalBytes)}${partial}`);
48
+ }
49
+ if (stats.neverLoaded > 0) subtitleParts.push(`${stats.neverLoaded} never loaded`);
50
+ if (stats.fontFamilies > 0) subtitleParts.push(`${stats.fontFamilies} fonts`);
51
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
52
+ children: [onBack ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
53
+ onBack: onBack
54
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
55
+ title: "Assets",
56
+ subtitle: subtitleParts.join(" · ")
57
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
58
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
59
+ value: getReport
60
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarClearButton, {
61
+ onPress: onClear
62
+ })]
63
+ })]
64
+ });
65
+ }
66
+ //# sourceMappingURL=AssetsHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sharedUi","require","_format","_jsxRuntime","AssetsHeader","stats","measuring","detailOpen","detailIndex","detailTotal","onCloseDetail","onClear","getReport","onBack","counter","undefined","jsxs","ModalHeader","children","jsx","Navigation","Content","title","subtitle","Actions","ToolbarCopyButton","value","subtitleParts","total","totalBytes","partial","measuredCount","push","formatBytes","neverLoaded","fontFamilies","join","ToolbarClearButton","onPress"],"sourceRoot":"../../../src","sources":["components/AssetsHeader.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ASSETS_ICON_COLOR", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _sharedUi.ASSETS_ICON_COLOR;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "AssetsIcon", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _sharedUi.AssetsIcon;
16
+ }
17
+ });
18
+ var _sharedUi = require("@buoy-gg/shared-ui");
19
+ //# sourceMappingURL=AssetsIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_sharedUi","require"],"sourceRoot":"../../../src","sources":["components/AssetsIcon.tsx"],"mappings":";;;;;;;;;;;;;;;;;AAQA,IAAAA,SAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AssetsListControls = AssetsListControls;
7
+ var _reactNative = require("react-native");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _baseline = require("../store/baseline");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * AssetsListControls — one compact row: name search, sort cycle (SIZE →
13
+ * NAME → TYPE), and — when no baseline exists yet — the BASE button that
14
+ * saves one. Once a baseline exists the BaselineBar takes over the diff UI,
15
+ * so this row never wastes space on a hint sentence.
16
+ */
17
+
18
+ const NEXT_SORT = {
19
+ size: "name",
20
+ name: "type",
21
+ type: "size"
22
+ };
23
+ function AssetsListControls({
24
+ query,
25
+ onQueryChange,
26
+ sort,
27
+ onSortChange,
28
+ showBaselineButton
29
+ }) {
30
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
31
+ style: styles.row,
32
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
33
+ style: styles.input,
34
+ value: query,
35
+ onChangeText: onQueryChange,
36
+ placeholder: "Search assets\u2026",
37
+ placeholderTextColor: _sharedUi.macOSColors.text.muted,
38
+ autoCapitalize: "none",
39
+ autoCorrect: false,
40
+ testID: "buoy-assets-search"
41
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
42
+ style: styles.button,
43
+ onPress: () => onSortChange(NEXT_SORT[sort]),
44
+ testID: "buoy-assets-sort",
45
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
46
+ style: styles.buttonText,
47
+ children: ["\u2193 ", sort.toUpperCase()]
48
+ })
49
+ }), showBaselineButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
50
+ style: styles.button,
51
+ onPress: () => void (0, _baseline.saveBaseline)(),
52
+ testID: "buoy-assets-save-baseline",
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
54
+ style: styles.buttonText,
55
+ children: "BASE"
56
+ })
57
+ }) : null]
58
+ });
59
+ }
60
+ const styles = _reactNative.StyleSheet.create({
61
+ row: {
62
+ flexDirection: "row",
63
+ alignItems: "center",
64
+ gap: 8,
65
+ paddingHorizontal: 10,
66
+ paddingBottom: 8
67
+ },
68
+ input: {
69
+ flex: 1,
70
+ backgroundColor: _sharedUi.macOSColors.background.input,
71
+ borderWidth: 1,
72
+ borderColor: _sharedUi.macOSColors.border.default,
73
+ borderRadius: 8,
74
+ paddingHorizontal: 10,
75
+ paddingVertical: 6,
76
+ color: _sharedUi.macOSColors.text.primary,
77
+ fontSize: 12
78
+ },
79
+ button: {
80
+ backgroundColor: _sharedUi.macOSColors.background.card,
81
+ borderWidth: 1,
82
+ borderColor: _sharedUi.macOSColors.border.default,
83
+ borderRadius: 8,
84
+ paddingHorizontal: 10,
85
+ paddingVertical: 7
86
+ },
87
+ buttonText: {
88
+ color: _sharedUi.macOSColors.text.secondary,
89
+ fontSize: 10,
90
+ fontWeight: "700",
91
+ letterSpacing: 0.5
92
+ }
93
+ });
94
+ //# sourceMappingURL=AssetsListControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_baseline","_jsxRuntime","NEXT_SORT","size","name","type","AssetsListControls","query","onQueryChange","sort","onSortChange","showBaselineButton","jsxs","View","style","styles","row","children","jsx","TextInput","input","value","onChangeText","placeholder","placeholderTextColor","macOSColors","text","muted","autoCapitalize","autoCorrect","testID","TouchableOpacity","button","onPress","Text","buttonText","toUpperCase","saveBaseline","StyleSheet","create","flexDirection","alignItems","gap","paddingHorizontal","paddingBottom","flex","backgroundColor","background","borderWidth","borderColor","border","default","borderRadius","paddingVertical","color","primary","fontSize","card","secondary","fontWeight","letterSpacing"],"sourceRoot":"../../../src","sources":["components/AssetsListControls.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AssetsModal = AssetsModal;
7
+ exports.AssetsToolView = AssetsToolView;
8
+ var _react = require("react");
9
+ var _reactNative = require("react-native");
10
+ var _sharedUi = require("@buoy-gg/shared-ui");
11
+ var _install = require("../capture/install");
12
+ var _export = require("../export");
13
+ var _useAssetRecords = require("../hooks/useAssetRecords");
14
+ var _remote = require("../remote");
15
+ var _assetStore = require("../store/assetStore");
16
+ var _baseline = require("../store/baseline");
17
+ var _AssetDetail = require("./AssetDetail");
18
+ var _AssetRow = require("./AssetRow");
19
+ var _AssetsFilterBar = require("./AssetsFilterBar");
20
+ var _AssetsHeader = require("./AssetsHeader");
21
+ var _AssetsListControls = require("./AssetsListControls");
22
+ var _BaselineBar = require("./BaselineBar");
23
+ var _jsxRuntime = require("react/jsx-runtime");
24
+ /**
25
+ * AssetsModal — bottom-sheet wrapper rendered by FloatingDevTools when the
26
+ * Assets tool is opened. Inventory list (largest first) → tap for detail.
27
+ * Opening triggers a full rescan (registry walk + Metro graph + size
28
+ * measurement); merely installing the package never hits the network.
29
+ */
30
+
31
+ function ScanNotice() {
32
+ const status = (0, _install.getScanStatus)();
33
+ const notices = [];
34
+ if (!status.registryAvailable) {
35
+ notices.push("Asset registry unavailable — this environment doesn't expose @react-native/assets-registry.");
36
+ } else if (!status.graphSupported && status.graphError) {
37
+ notices.push("No Metro dev server — showing runtime-registered assets only. The full bundle inventory and byte sizes need a dev build.");
38
+ }
39
+ if (status.measuring) notices.push("Measuring sizes from the dev server…");
40
+ if (notices.length === 0) return null;
41
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
42
+ style: styles.notice,
43
+ children: notices.map(n => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
44
+ style: styles.noticeText,
45
+ children: n
46
+ }, n))
47
+ });
48
+ }
49
+ function FontFamilies() {
50
+ const families = (0, _install.getScanStatus)().fontFamilies;
51
+ if (!families.length) return null;
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
53
+ style: styles.fontsBox,
54
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
55
+ style: styles.fontsTitle,
56
+ children: ["LOADED FONT FAMILIES (", families.length, ")"]
57
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
58
+ style: styles.fontsWrap,
59
+ children: families.map(family => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
60
+ style: styles.fontChip,
61
+ children: family
62
+ }, family))
63
+ })]
64
+ });
65
+ }
66
+ function EmptyState() {
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
68
+ style: styles.empty,
69
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
70
+ style: styles.emptyTitle,
71
+ children: "No assets found yet"
72
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
73
+ style: styles.emptyText,
74
+ children: "Every bundled asset \u2014 images, fonts, video, audio \u2014 appears here with sizes, scale coverage, and never-loaded detection. Try Rescan after navigating around the app."
75
+ })]
76
+ });
77
+ }
78
+
79
+ /** Largest first — measured bytes, falling back to decoded estimate. */
80
+ function bySizeDesc(a, b) {
81
+ return (b.sizeBytes ?? (0, _assetStore.estDecodedBytes)(b)) - (a.sizeBytes ?? (0, _assetStore.estDecodedBytes)(a));
82
+ }
83
+ const COMPARATORS = {
84
+ size: bySizeDesc,
85
+ name: (a, b) => a.name.localeCompare(b.name) || a.type.localeCompare(b.type),
86
+ type: (a, b) => a.type.localeCompare(b.type) || bySizeDesc(a, b)
87
+ };
88
+ function AssetsModal({
89
+ visible,
90
+ onClose,
91
+ onBack,
92
+ onMinimize,
93
+ persistenceKey,
94
+ inline = false
95
+ }) {
96
+ // Safety net: the index import normally installed this already.
97
+ (0, _install.installAssetCapture)();
98
+ const {
99
+ records,
100
+ stats,
101
+ insights
102
+ } = (0, _useAssetRecords.useAssetRecords)();
103
+ const [selectedId, setSelectedId] = (0, _react.useState)(null);
104
+ const [filter, setFilter] = (0, _react.useState)("all");
105
+ const [query, setQuery] = (0, _react.useState)("");
106
+ const [sort, setSort] = (0, _react.useState)("size");
107
+ const selected = selectedId != null ? (0, _assetStore.getRecord)(selectedId) : undefined;
108
+
109
+ // Full scan on open — locally on device, forwarded on dashboard mirrors.
110
+ // The baseline load is async and re-renders through the store emit.
111
+ (0, _react.useEffect)(() => {
112
+ if (!visible) return;
113
+ void (0, _baseline.loadBaseline)();
114
+ const remote = (0, _remote.remoteAssetsDispatch)();
115
+ if (remote) {
116
+ remote("rescan").catch(() => {});
117
+ } else {
118
+ void (0, _install.rescan)();
119
+ }
120
+ }, [visible]);
121
+ const sorted = [...records].sort(COMPARATORS[sort]);
122
+ const trimmedQuery = query.trim().toLowerCase();
123
+ const filtered = sorted.filter(r => {
124
+ if (filter === "unused" && r.loaded) return false;
125
+ if (filter !== "all" && filter !== "unused" && r.kind !== filter) return false;
126
+ if (trimmedQuery && !`${r.name}.${r.type}`.toLowerCase().includes(trimmedQuery)) {
127
+ return false;
128
+ }
129
+ return true;
130
+ });
131
+ const selectedIndex = selected ? filtered.findIndex(r => r.id === selected.id) : -1;
132
+ const stepTo = index => {
133
+ const target = filtered[index];
134
+ if (target) setSelectedId(target.id);
135
+ };
136
+
137
+ // Set lookups so each row's badge checks are O(1).
138
+ const flagSets = {
139
+ scaleGaps: new Set(insights.scaleGaps),
140
+ scaleAnomalies: new Set(insights.scaleAnomalies),
141
+ duplicates: new Set(insights.duplicates.flatMap(d => d.ids)),
142
+ webpCandidates: new Set(insights.webpCandidates),
143
+ overDecode: new Set(insights.overDecode),
144
+ heavy: new Set([...insights.heavyGifs, ...insights.heavyFonts])
145
+ };
146
+ const diff = (0, _baseline.getDiff)();
147
+
148
+ // The proportional size bar is relative to the largest asset in view.
149
+ let maxBytes = 0;
150
+ for (const r of filtered) {
151
+ const bytes = r.sizeBytes ?? (0, _assetStore.estDecodedBytes)(r);
152
+ if (bytes > maxBytes) maxBytes = bytes;
153
+ }
154
+ const getReport = () => selected ? (0, _export.formatAssetMarkdown)(selected) : (0, _export.formatInventoryMarkdown)(sorted, stats, insights, (0, _install.getScanStatus)(), (0, _baseline.getDiff)());
155
+ const headerContent = /*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetsHeader.AssetsHeader, {
156
+ stats: stats,
157
+ measuring: (0, _install.getScanStatus)().measuring,
158
+ detailOpen: selected != null,
159
+ detailIndex: selectedIndex,
160
+ detailTotal: filtered.length,
161
+ onCloseDetail: () => setSelectedId(null),
162
+ onClear: _assetStore.clearRecords,
163
+ getReport: getReport,
164
+ onBack: onBack
165
+ });
166
+ const body = selected ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
167
+ style: styles.detailContainer,
168
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetDetail.AssetDetail, {
169
+ record: selected,
170
+ insights: insights
171
+ }), selectedIndex >= 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EventStepperFooter, {
172
+ currentIndex: selectedIndex,
173
+ totalItems: filtered.length,
174
+ itemLabel: "Asset",
175
+ onPrevious: () => stepTo(selectedIndex - 1),
176
+ onNext: () => stepTo(selectedIndex + 1)
177
+ }) : null]
178
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
179
+ style: styles.listContainer,
180
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetsFilterBar.AssetsFilterBar, {
181
+ stats: stats,
182
+ filter: filter,
183
+ onChange: setFilter
184
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetsListControls.AssetsListControls, {
185
+ query: query,
186
+ onQueryChange: setQuery,
187
+ sort: sort,
188
+ onSortChange: setSort,
189
+ showBaselineButton: diff == null
190
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_BaselineBar.BaselineBar, {
191
+ diff: diff
192
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(ScanNotice, {}), filter === "font" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(FontFamilies, {}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
193
+ data: filtered,
194
+ keyExtractor: item => String(item.id),
195
+ contentContainerStyle: styles.listContent,
196
+ renderItem: ({
197
+ item
198
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_AssetRow.AssetRow, {
199
+ record: item,
200
+ flags: {
201
+ scaleGap: flagSets.scaleGaps.has(item.id),
202
+ scaleAnomaly: flagSets.scaleAnomalies.has(item.id),
203
+ duplicate: flagSets.duplicates.has(item.id),
204
+ webp: flagSets.webpCandidates.has(item.id),
205
+ oversize: flagSets.overDecode.has(item.id),
206
+ heavy: flagSets.heavy.has(item.id)
207
+ },
208
+ sizeFraction: maxBytes > 0 ? (item.sizeBytes ?? (0, _assetStore.estDecodedBytes)(item)) / maxBytes : 0
209
+ // Guarded: programmatic invocations (automation) can call this
210
+ // with an event object instead of an id.
211
+ ,
212
+ onPress: id => setSelectedId(typeof id === "number" ? id : null)
213
+ }),
214
+ ListEmptyComponent: /*#__PURE__*/(0, _jsxRuntime.jsx)(EmptyState, {})
215
+ })]
216
+ });
217
+
218
+ // The ONLY difference between phone and desktop is which shell the header
219
+ // and body go in (same pattern as ImagesModal).
220
+ if (inline) {
221
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
222
+ style: styles.inlineRoot,
223
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
224
+ style: styles.inlineHeader,
225
+ children: headerContent
226
+ }), body]
227
+ });
228
+ }
229
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.JsModal, {
230
+ visible: visible,
231
+ onClose: onClose,
232
+ onMinimize: onMinimize,
233
+ persistenceKey: persistenceKey,
234
+ header: {
235
+ showToggleButton: true,
236
+ customContent: headerContent
237
+ },
238
+ enablePersistence: true,
239
+ initialMode: "bottomSheet",
240
+ disableScrollWrapper: true,
241
+ children: body
242
+ });
243
+ }
244
+
245
+ /**
246
+ * The same Assets tool rendered INLINE for hosts that place tools in a panel
247
+ * rather than a modal (the desktop dashboard). One implementation only.
248
+ */
249
+ function AssetsToolView(props = {}) {
250
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(AssetsModal, {
251
+ ...props,
252
+ inline: true,
253
+ visible: true,
254
+ onClose: () => {}
255
+ });
256
+ }
257
+ const styles = _reactNative.StyleSheet.create({
258
+ inlineRoot: {
259
+ flex: 1,
260
+ minHeight: 0,
261
+ backgroundColor: _sharedUi.macOSColors.background.base
262
+ },
263
+ inlineHeader: {
264
+ paddingHorizontal: 12,
265
+ paddingVertical: 8,
266
+ borderBottomWidth: 1,
267
+ borderBottomColor: _sharedUi.macOSColors.border.default,
268
+ backgroundColor: _sharedUi.macOSColors.background.card
269
+ },
270
+ listContainer: {
271
+ flex: 1
272
+ },
273
+ listContent: {
274
+ paddingBottom: 16
275
+ },
276
+ detailContainer: {
277
+ flex: 1
278
+ },
279
+ notice: {
280
+ marginHorizontal: 10,
281
+ marginBottom: 8,
282
+ padding: 10,
283
+ borderRadius: 8,
284
+ borderWidth: 1,
285
+ borderColor: _sharedUi.macOSColors.border.default,
286
+ backgroundColor: _sharedUi.macOSColors.background.card,
287
+ gap: 4
288
+ },
289
+ noticeText: {
290
+ color: _sharedUi.macOSColors.text.secondary,
291
+ fontSize: 11
292
+ },
293
+ fontsBox: {
294
+ marginHorizontal: 10,
295
+ marginTop: 8,
296
+ padding: 10,
297
+ borderRadius: 8,
298
+ backgroundColor: _sharedUi.macOSColors.background.card,
299
+ gap: 6
300
+ },
301
+ fontsTitle: {
302
+ color: _sharedUi.macOSColors.text.muted,
303
+ fontSize: 9,
304
+ fontWeight: "700",
305
+ letterSpacing: 0.5
306
+ },
307
+ fontsWrap: {
308
+ flexDirection: "row",
309
+ flexWrap: "wrap",
310
+ gap: 6
311
+ },
312
+ fontChip: {
313
+ color: _sharedUi.macOSColors.text.secondary,
314
+ fontSize: 10,
315
+ backgroundColor: _sharedUi.macOSColors.background.input,
316
+ borderRadius: 999,
317
+ paddingHorizontal: 8,
318
+ paddingVertical: 3,
319
+ overflow: "hidden"
320
+ },
321
+ empty: {
322
+ alignItems: "center",
323
+ padding: 32,
324
+ gap: 8
325
+ },
326
+ emptyTitle: {
327
+ color: _sharedUi.macOSColors.text.primary,
328
+ fontSize: 13,
329
+ fontWeight: "600"
330
+ },
331
+ emptyText: {
332
+ color: _sharedUi.macOSColors.text.secondary,
333
+ fontSize: 11,
334
+ textAlign: "center",
335
+ lineHeight: 16
336
+ }
337
+ });
338
+ //# sourceMappingURL=AssetsModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_install","_export","_useAssetRecords","_remote","_assetStore","_baseline","_AssetDetail","_AssetRow","_AssetsFilterBar","_AssetsHeader","_AssetsListControls","_BaselineBar","_jsxRuntime","ScanNotice","status","getScanStatus","notices","registryAvailable","push","graphSupported","graphError","measuring","length","jsx","View","style","styles","notice","children","map","n","Text","noticeText","FontFamilies","families","fontFamilies","jsxs","fontsBox","fontsTitle","fontsWrap","family","fontChip","EmptyState","empty","emptyTitle","emptyText","bySizeDesc","a","b","sizeBytes","estDecodedBytes","COMPARATORS","size","name","localeCompare","type","AssetsModal","visible","onClose","onBack","onMinimize","persistenceKey","inline","installAssetCapture","records","stats","insights","useAssetRecords","selectedId","setSelectedId","useState","filter","setFilter","query","setQuery","sort","setSort","selected","getRecord","undefined","useEffect","loadBaseline","remote","remoteAssetsDispatch","catch","rescan","sorted","trimmedQuery","trim","toLowerCase","filtered","r","loaded","kind","includes","selectedIndex","findIndex","id","stepTo","index","target","flagSets","scaleGaps","Set","scaleAnomalies","duplicates","flatMap","d","ids","webpCandidates","overDecode","heavy","heavyGifs","heavyFonts","diff","getDiff","maxBytes","bytes","getReport","formatAssetMarkdown","formatInventoryMarkdown","headerContent","AssetsHeader","detailOpen","detailIndex","detailTotal","onCloseDetail","onClear","clearRecords","body","detailContainer","AssetDetail","record","EventStepperFooter","currentIndex","totalItems","itemLabel","onPrevious","onNext","listContainer","AssetsFilterBar","onChange","AssetsListControls","onQueryChange","onSortChange","showBaselineButton","BaselineBar","FlatList","data","keyExtractor","item","String","contentContainerStyle","listContent","renderItem","AssetRow","flags","scaleGap","has","scaleAnomaly","duplicate","webp","oversize","sizeFraction","onPress","ListEmptyComponent","inlineRoot","inlineHeader","JsModal","header","showToggleButton","customContent","enablePersistence","initialMode","disableScrollWrapper","AssetsToolView","props","StyleSheet","create","flex","minHeight","backgroundColor","macOSColors","background","base","paddingHorizontal","paddingVertical","borderBottomWidth","borderBottomColor","border","default","card","paddingBottom","marginHorizontal","marginBottom","padding","borderRadius","borderWidth","borderColor","gap","color","text","secondary","fontSize","marginTop","muted","fontWeight","letterSpacing","flexDirection","flexWrap","input","overflow","alignItems","primary","textAlign","lineHeight"],"sourceRoot":"../../../src","sources":["components/AssetsModal.tsx"],"mappings":";;;;;;;AAOA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,gBAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,YAAA,GAAAT,OAAA;AACA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,gBAAA,GAAAX,OAAA;AACA,IAAAY,aAAA,GAAAZ,OAAA;AACA,IAAAa,mBAAA,GAAAb,OAAA;AACA,IAAAc,YAAA,GAAAd,OAAA;AAA4C,IAAAe,WAAA,GAAAf,OAAA;AAtB5C;AACA;AACA;AACA;AACA;AACA;;AA8BA,SAASgB,UAAUA,CAAA,EAAG;EACpB,MAAMC,MAAM,GAAG,IAAAC,sBAAa,EAAC,CAAC;EAC9B,MAAMC,OAAiB,GAAG,EAAE;EAC5B,IAAI,CAACF,MAAM,CAACG,iBAAiB,EAAE;IAC7BD,OAAO,CAACE,IAAI,CACV,6FACF,CAAC;EACH,CAAC,MAAM,IAAI,CAACJ,MAAM,CAACK,cAAc,IAAIL,MAAM,CAACM,UAAU,EAAE;IACtDJ,OAAO,CAACE,IAAI,CACV,0HACF,CAAC;EACH;EACA,IAAIJ,MAAM,CAACO,SAAS,EAAEL,OAAO,CAACE,IAAI,CAAC,sCAAsC,CAAC;EAC1E,IAAIF,OAAO,CAACM,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EACrC,oBACE,IAAAV,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAA0B,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,MAAO;IAAAC,QAAA,EACxBZ,OAAO,CAACa,GAAG,CAAEC,CAAC,iBACb,IAAAlB,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAAiC,IAAI;MAASN,KAAK,EAAEC,MAAM,CAACM,UAAW;MAAAJ,QAAA,EACpCE;IAAC,GADOA,CAEL,CACP;EAAC,CACE,CAAC;AAEX;AAEA,SAASG,YAAYA,CAAA,EAAG;EACtB,MAAMC,QAAQ,GAAG,IAAAnB,sBAAa,EAAC,CAAC,CAACoB,YAAY;EAC7C,IAAI,CAACD,QAAQ,CAACZ,MAAM,EAAE,OAAO,IAAI;EACjC,oBACE,IAAAV,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAA0B,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACW,QAAS;IAAAT,QAAA,gBAC3B,IAAAhB,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAAiC,IAAI;MAACN,KAAK,EAAEC,MAAM,CAACY,UAAW;MAAAV,QAAA,GAAC,wBAAsB,EAACM,QAAQ,CAACZ,MAAM,EAAC,GAAC;IAAA,CAAM,CAAC,eAC/E,IAAAV,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAA0B,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACa,SAAU;MAAAX,QAAA,EAC3BM,QAAQ,CAACL,GAAG,CAAEW,MAAM,iBACnB,IAAA5B,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAAiC,IAAI;QAAcN,KAAK,EAAEC,MAAM,CAACe,QAAS;QAAAb,QAAA,EACvCY;MAAM,GADEA,MAEL,CACP;IAAC,CACE,CAAC;EAAA,CACH,CAAC;AAEX;AAEA,SAASE,UAAUA,CAAA,EAAG;EACpB,oBACE,IAAA9B,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAA0B,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACiB,KAAM;IAAAf,QAAA,gBACxB,IAAAhB,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAAiC,IAAI;MAACN,KAAK,EAAEC,MAAM,CAACkB,UAAW;MAAAhB,QAAA,EAAC;IAAmB,CAAM,CAAC,eAC1D,IAAAhB,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAAiC,IAAI;MAACN,KAAK,EAAEC,MAAM,CAACmB,SAAU;MAAAjB,QAAA,EAAC;IAI/B,CAAM,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACA,SAASkB,UAAUA,CAACC,CAAc,EAAEC,CAAc,EAAU;EAC1D,OAAO,CAACA,CAAC,CAACC,SAAS,IAAI,IAAAC,2BAAe,EAACF,CAAC,CAAC,KAAKD,CAAC,CAACE,SAAS,IAAI,IAAAC,2BAAe,EAACH,CAAC,CAAC,CAAC;AAClF;AAEA,MAAMI,WAA0E,GAAG;EACjFC,IAAI,EAAEN,UAAU;EAChBO,IAAI,EAAEA,CAACN,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACM,IAAI,CAACC,aAAa,CAACN,CAAC,CAACK,IAAI,CAAC,IAAIN,CAAC,CAACQ,IAAI,CAACD,aAAa,CAACN,CAAC,CAACO,IAAI,CAAC;EAC5EA,IAAI,EAAEA,CAACR,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACQ,IAAI,CAACD,aAAa,CAACN,CAAC,CAACO,IAAI,CAAC,IAAIT,UAAU,CAACC,CAAC,EAAEC,CAAC;AACjE,CAAC;AAEM,SAASQ,WAAWA,CAAC;EAC1BC,OAAO;EACPC,OAAO;EACPC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC,MAAM,GAAG;AACO,CAAC,EAAE;EACnB;EACA,IAAAC,4BAAmB,EAAC,CAAC;EAErB,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAG,IAAAC,gCAAe,EAAC,CAAC;EACtD,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAgB,IAAI,CAAC;EACjE,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAF,eAAQ,EAAc,KAAK,CAAC;EACxD,MAAM,CAACG,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAJ,eAAQ,EAAC,EAAE,CAAC;EACtC,MAAM,CAACK,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAN,eAAQ,EAAY,MAAM,CAAC;EACnD,MAAMO,QAAQ,GAAGT,UAAU,IAAI,IAAI,GAAG,IAAAU,qBAAS,EAACV,UAAU,CAAC,GAAGW,SAAS;;EAEvE;EACA;EACA,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACvB,OAAO,EAAE;IACd,KAAK,IAAAwB,sBAAY,EAAC,CAAC;IACnB,MAAMC,MAAM,GAAG,IAAAC,4BAAoB,EAAC,CAAC;IACrC,IAAID,MAAM,EAAE;MACVA,MAAM,CAAC,QAAQ,CAAC,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC,MAAM;MACL,KAAK,IAAAC,eAAM,EAAC,CAAC;IACf;EACF,CAAC,EAAE,CAAC5B,OAAO,CAAC,CAAC;EAEb,MAAM6B,MAAM,GAAG,CAAC,GAAGtB,OAAO,CAAC,CAACW,IAAI,CAACxB,WAAW,CAACwB,IAAI,CAAC,CAAC;EACnD,MAAMY,YAAY,GAAGd,KAAK,CAACe,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAC/C,MAAMC,QAAQ,GAAGJ,MAAM,CAACf,MAAM,CAAEoB,CAAC,IAAK;IACpC,IAAIpB,MAAM,KAAK,QAAQ,IAAIoB,CAAC,CAACC,MAAM,EAAE,OAAO,KAAK;IACjD,IAAIrB,MAAM,KAAK,KAAK,IAAIA,MAAM,KAAK,QAAQ,IAAIoB,CAAC,CAACE,IAAI,KAAKtB,MAAM,EAAE,OAAO,KAAK;IAC9E,IAAIgB,YAAY,IAAI,CAAC,GAAGI,CAAC,CAACtC,IAAI,IAAIsC,CAAC,CAACpC,IAAI,EAAE,CAACkC,WAAW,CAAC,CAAC,CAACK,QAAQ,CAACP,YAAY,CAAC,EAAE;MAC/E,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb,CAAC,CAAC;EAEF,MAAMQ,aAAa,GAAGlB,QAAQ,GAC1Ba,QAAQ,CAACM,SAAS,CAAEL,CAAC,IAAKA,CAAC,CAACM,EAAE,KAAKpB,QAAQ,CAACoB,EAAE,CAAC,GAC/C,CAAC,CAAC;EACN,MAAMC,MAAM,GAAIC,KAAa,IAAK;IAChC,MAAMC,MAAM,GAAGV,QAAQ,CAACS,KAAK,CAAC;IAC9B,IAAIC,MAAM,EAAE/B,aAAa,CAAC+B,MAAM,CAACH,EAAE,CAAC;EACtC,CAAC;;EAED;EACA,MAAMI,QAAQ,GAAG;IACfC,SAAS,EAAE,IAAIC,GAAG,CAACrC,QAAQ,CAACoC,SAAS,CAAC;IACtCE,cAAc,EAAE,IAAID,GAAG,CAACrC,QAAQ,CAACsC,cAAc,CAAC;IAChDC,UAAU,EAAE,IAAIF,GAAG,CAACrC,QAAQ,CAACuC,UAAU,CAACC,OAAO,CAAEC,CAAC,IAAKA,CAAC,CAACC,GAAG,CAAC,CAAC;IAC9DC,cAAc,EAAE,IAAIN,GAAG,CAACrC,QAAQ,CAAC2C,cAAc,CAAC;IAChDC,UAAU,EAAE,IAAIP,GAAG,CAACrC,QAAQ,CAAC4C,UAAU,CAAC;IACxCC,KAAK,EAAE,IAAIR,GAAG,CAAC,CAAC,GAAGrC,QAAQ,CAAC8C,SAAS,EAAE,GAAG9C,QAAQ,CAAC+C,UAAU,CAAC;EAChE,CAAC;EAED,MAAMC,IAAI,GAAG,IAAAC,iBAAO,EAAC,CAAC;;EAEtB;EACA,IAAIC,QAAQ,GAAG,CAAC;EAChB,KAAK,MAAMzB,CAAC,IAAID,QAAQ,EAAE;IACxB,MAAM2B,KAAK,GAAG1B,CAAC,CAAC1C,SAAS,IAAI,IAAAC,2BAAe,EAACyC,CAAC,CAAC;IAC/C,IAAI0B,KAAK,GAAGD,QAAQ,EAAEA,QAAQ,GAAGC,KAAK;EACxC;EAEA,MAAMC,SAAS,GAAGA,CAAA,KAChBzC,QAAQ,GACJ,IAAA0C,2BAAmB,EAAC1C,QAAQ,CAAC,GAC7B,IAAA2C,+BAAuB,EAAClC,MAAM,EAAErB,KAAK,EAAEC,QAAQ,EAAE,IAAAnD,sBAAa,EAAC,CAAC,EAAE,IAAAoG,iBAAO,EAAC,CAAC,CAAC;EAElF,MAAMM,aAAa,gBACjB,IAAA7G,WAAA,CAAAW,GAAA,EAACd,aAAA,CAAAiH,YAAY;IACXzD,KAAK,EAAEA,KAAM;IACb5C,SAAS,EAAE,IAAAN,sBAAa,EAAC,CAAC,CAACM,SAAU;IACrCsG,UAAU,EAAE9C,QAAQ,IAAI,IAAK;IAC7B+C,WAAW,EAAE7B,aAAc;IAC3B8B,WAAW,EAAEnC,QAAQ,CAACpE,MAAO;IAC7BwG,aAAa,EAAEA,CAAA,KAAMzD,aAAa,CAAC,IAAI,CAAE;IACzC0D,OAAO,EAAEC,wBAAa;IACtBV,SAAS,EAAEA,SAAU;IACrB3D,MAAM,EAAEA;EAAO,CAChB,CACF;EAED,MAAMsE,IAAI,GAAGpD,QAAQ,gBACnB,IAAAjE,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAA0B,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACwG,eAAgB;IAAAtG,QAAA,gBAClC,IAAAhB,WAAA,CAAAW,GAAA,EAACjB,YAAA,CAAA6H,WAAW;MAACC,MAAM,EAAEvD,QAAS;MAACX,QAAQ,EAAEA;IAAS,CAAE,CAAC,EAGpD6B,aAAa,IAAI,CAAC,gBACjB,IAAAnF,WAAA,CAAAW,GAAA,EAACxB,SAAA,CAAAsI,kBAAkB;MACjBC,YAAY,EAAEvC,aAAc;MAC5BwC,UAAU,EAAE7C,QAAQ,CAACpE,MAAO;MAC5BkH,SAAS,EAAC,OAAO;MACjBC,UAAU,EAAEA,CAAA,KAAMvC,MAAM,CAACH,aAAa,GAAG,CAAC,CAAE;MAC5C2C,MAAM,EAAEA,CAAA,KAAMxC,MAAM,CAACH,aAAa,GAAG,CAAC;IAAE,CACzC,CAAC,GACA,IAAI;EAAA,CACJ,CAAC,gBAEP,IAAAnF,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAA0B,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACiH,aAAc;IAAA/G,QAAA,gBAChC,IAAAhB,WAAA,CAAAW,GAAA,EAACf,gBAAA,CAAAoI,eAAe;MAAC3E,KAAK,EAAEA,KAAM;MAACM,MAAM,EAAEA,MAAO;MAACsE,QAAQ,EAAErE;IAAU,CAAE,CAAC,eACtE,IAAA5D,WAAA,CAAAW,GAAA,EAACb,mBAAA,CAAAoI,kBAAkB;MACjBrE,KAAK,EAAEA,KAAM;MACbsE,aAAa,EAAErE,QAAS;MACxBC,IAAI,EAAEA,IAAK;MACXqE,YAAY,EAAEpE,OAAQ;MACtBqE,kBAAkB,EAAE/B,IAAI,IAAI;IAAK,CAClC,CAAC,eACF,IAAAtG,WAAA,CAAAW,GAAA,EAACZ,YAAA,CAAAuI,WAAW;MAAChC,IAAI,EAAEA;IAAK,CAAE,CAAC,eAC3B,IAAAtG,WAAA,CAAAW,GAAA,EAACV,UAAU,IAAE,CAAC,EACb0D,MAAM,KAAK,MAAM,gBAAG,IAAA3D,WAAA,CAAAW,GAAA,EAACU,YAAY,IAAE,CAAC,GAAG,IAAI,eAC5C,IAAArB,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAAqJ,QAAQ;MACPC,IAAI,EAAE1D,QAAS;MACf2D,YAAY,EAAGC,IAAiB,IAAKC,MAAM,CAACD,IAAI,CAACrD,EAAE,CAAE;MACrDuD,qBAAqB,EAAE9H,MAAM,CAAC+H,WAAY;MAC1CC,UAAU,EAAEA,CAAC;QAAEJ;MAAK,CAAC,kBACnB,IAAA1I,WAAA,CAAAW,GAAA,EAAChB,SAAA,CAAAoJ,QAAQ;QACPvB,MAAM,EAAEkB,IAAK;QACbM,KAAK,EAAE;UACLC,QAAQ,EAAExD,QAAQ,CAACC,SAAS,CAACwD,GAAG,CAACR,IAAI,CAACrD,EAAE,CAAC;UACzC8D,YAAY,EAAE1D,QAAQ,CAACG,cAAc,CAACsD,GAAG,CAACR,IAAI,CAACrD,EAAE,CAAC;UAClD+D,SAAS,EAAE3D,QAAQ,CAACI,UAAU,CAACqD,GAAG,CAACR,IAAI,CAACrD,EAAE,CAAC;UAC3CgE,IAAI,EAAE5D,QAAQ,CAACQ,cAAc,CAACiD,GAAG,CAACR,IAAI,CAACrD,EAAE,CAAC;UAC1CiE,QAAQ,EAAE7D,QAAQ,CAACS,UAAU,CAACgD,GAAG,CAACR,IAAI,CAACrD,EAAE,CAAC;UAC1Cc,KAAK,EAAEV,QAAQ,CAACU,KAAK,CAAC+C,GAAG,CAACR,IAAI,CAACrD,EAAE;QACnC,CAAE;QACFkE,YAAY,EACV/C,QAAQ,GAAG,CAAC,GACR,CAACkC,IAAI,CAACrG,SAAS,IAAI,IAAAC,2BAAe,EAACoG,IAAI,CAAC,IAAIlC,QAAQ,GACpD;QAEN;QACA;QAAA;QACAgD,OAAO,EAAGnE,EAAE,IAAK5B,aAAa,CAAC,OAAO4B,EAAE,KAAK,QAAQ,GAAGA,EAAE,GAAG,IAAI;MAAE,CACpE,CACD;MACFoE,kBAAkB,eAAE,IAAAzJ,WAAA,CAAAW,GAAA,EAACmB,UAAU,IAAE;IAAE,CACpC,CAAC;EAAA,CACE,CACP;;EAED;EACA;EACA,IAAIoB,MAAM,EAAE;IACV,oBACE,IAAAlD,WAAA,CAAAwB,IAAA,EAACtC,YAAA,CAAA0B,IAAI;MAACC,KAAK,EAAEC,MAAM,CAAC4I,UAAW;MAAA1I,QAAA,gBAC7B,IAAAhB,WAAA,CAAAW,GAAA,EAACzB,YAAA,CAAA0B,IAAI;QAACC,KAAK,EAAEC,MAAM,CAAC6I,YAAa;QAAA3I,QAAA,EAAE6F;MAAa,CAAO,CAAC,EACvDQ,IAAI;IAAA,CACD,CAAC;EAEX;EAEA,oBACE,IAAArH,WAAA,CAAAW,GAAA,EAACxB,SAAA,CAAAyK,OAAO;IACN/G,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IACjBE,UAAU,EAAEA,UAAW;IACvBC,cAAc,EAAEA,cAAe;IAC/B4G,MAAM,EAAE;MACNC,gBAAgB,EAAE,IAAI;MACtBC,aAAa,EAAElD;IACjB,CAAE;IACFmD,iBAAiB;IACjBC,WAAW,EAAC,aAAa;IACzBC,oBAAoB;IAAAlJ,QAAA,EAEnBqG;EAAI,CACE,CAAC;AAEd;;AAEA;AACA;AACA;AACA;AACO,SAAS8C,cAAcA,CAC5BC,KAA+D,GAAG,CAAC,CAAC,EACpE;EACA,oBAAO,IAAApK,WAAA,CAAAW,GAAA,EAACiC,WAAW;IAAA,GAAKwH,KAAK;IAAElH,MAAM;IAACL,OAAO;IAACC,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE,CAAE,CAAC;AACrE;AAEA,MAAMhC,MAAM,GAAGuJ,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,UAAU,EAAE;IACVa,IAAI,EAAE,CAAC;IACPC,SAAS,EAAE,CAAC;IACZC,eAAe,EAAEC,qBAAW,CAACC,UAAU,CAACC;EAC1C,CAAC;EACDjB,YAAY,EAAE;IACZkB,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,CAAC;IACpBC,iBAAiB,EAAEN,qBAAW,CAACO,MAAM,CAACC,OAAO;IAC7CT,eAAe,EAAEC,qBAAW,CAACC,UAAU,CAACQ;EAC1C,CAAC;EACDpD,aAAa,EAAE;IACbwC,IAAI,EAAE;EACR,CAAC;EACD1B,WAAW,EAAE;IACXuC,aAAa,EAAE;EACjB,CAAC;EACD9D,eAAe,EAAE;IACfiD,IAAI,EAAE;EACR,CAAC;EACDxJ,MAAM,EAAE;IACNsK,gBAAgB,EAAE,EAAE;IACpBC,YAAY,EAAE,CAAC;IACfC,OAAO,EAAE,EAAE;IACXC,YAAY,EAAE,CAAC;IACfC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEhB,qBAAW,CAACO,MAAM,CAACC,OAAO;IACvCT,eAAe,EAAEC,qBAAW,CAACC,UAAU,CAACQ,IAAI;IAC5CQ,GAAG,EAAE;EACP,CAAC;EACDvK,UAAU,EAAE;IACVwK,KAAK,EAAElB,qBAAW,CAACmB,IAAI,CAACC,SAAS;IACjCC,QAAQ,EAAE;EACZ,CAAC;EACDtK,QAAQ,EAAE;IACR4J,gBAAgB,EAAE,EAAE;IACpBW,SAAS,EAAE,CAAC;IACZT,OAAO,EAAE,EAAE;IACXC,YAAY,EAAE,CAAC;IACff,eAAe,EAAEC,qBAAW,CAACC,UAAU,CAACQ,IAAI;IAC5CQ,GAAG,EAAE;EACP,CAAC;EACDjK,UAAU,EAAE;IACVkK,KAAK,EAAElB,qBAAW,CAACmB,IAAI,CAACI,KAAK;IAC7BF,QAAQ,EAAE,CAAC;IACXG,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE;EACjB,CAAC;EACDxK,SAAS,EAAE;IACTyK,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,MAAM;IAChBV,GAAG,EAAE;EACP,CAAC;EACD9J,QAAQ,EAAE;IACR+J,KAAK,EAAElB,qBAAW,CAACmB,IAAI,CAACC,SAAS;IACjCC,QAAQ,EAAE,EAAE;IACZtB,eAAe,EAAEC,qBAAW,CAACC,UAAU,CAAC2B,KAAK;IAC7Cd,YAAY,EAAE,GAAG;IACjBX,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE,CAAC;IAClByB,QAAQ,EAAE;EACZ,CAAC;EACDxK,KAAK,EAAE;IACLyK,UAAU,EAAE,QAAQ;IACpBjB,OAAO,EAAE,EAAE;IACXI,GAAG,EAAE;EACP,CAAC;EACD3J,UAAU,EAAE;IACV4J,KAAK,EAAElB,qBAAW,CAACmB,IAAI,CAACY,OAAO;IAC/BV,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE;EACd,CAAC;EACDjK,SAAS,EAAE;IACT2J,KAAK,EAAElB,qBAAW,CAACmB,IAAI,CAACC,SAAS;IACjCC,QAAQ,EAAE,EAAE;IACZW,SAAS,EAAE,QAAQ;IACnBC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}