@buoy-gg/core 7.0.14 → 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 (99) hide show
  1. package/lib/commonjs/floatingMenu/AppHost.web.js +359 -0
  2. package/lib/commonjs/floatingMenu/AppHostLogic.js +6 -0
  3. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +787 -418
  4. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
  5. package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +244 -36
  6. package/lib/commonjs/floatingMenu/FloatingMenu.js +2 -2
  7. package/lib/commonjs/floatingMenu/MinimizedToolsContext.js +2 -3
  8. package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +287 -0
  9. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +16 -0
  10. package/lib/commonjs/floatingMenu/autoExternalSync.js +9 -0
  11. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +7 -4
  12. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +373 -231
  13. package/lib/commonjs/floatingMenu/dial/DialIcon.js +25 -3
  14. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +1 -1
  15. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +154 -0
  16. package/lib/commonjs/floatingMenu/dial/onboardingConstants.web.js +34 -0
  17. package/lib/commonjs/floatingMenu/floatingTools.js +3 -3
  18. package/lib/commonjs/floatingMenu/floatingTools.web.js +191 -28
  19. package/lib/commonjs/index.js +2 -2
  20. package/lib/commonjs/index.web.js +19 -0
  21. package/lib/commonjs/utils/autoDiscoverPresets.web.js +50 -5
  22. package/lib/module/floatingMenu/AppHost.web.js +351 -0
  23. package/lib/module/floatingMenu/AppHostLogic.js +6 -0
  24. package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +792 -422
  25. package/lib/module/floatingMenu/FloatingDevTools.js +2 -2
  26. package/lib/module/floatingMenu/FloatingDevTools.web.js +247 -38
  27. package/lib/module/floatingMenu/FloatingMenu.js +2 -2
  28. package/lib/module/floatingMenu/MinimizedToolsContext.js +2 -3
  29. package/lib/module/floatingMenu/MinimizedToolsStack.web.js +284 -0
  30. package/lib/module/floatingMenu/autoDiscoverPresets.js +16 -0
  31. package/lib/module/floatingMenu/autoExternalSync.js +9 -0
  32. package/lib/module/floatingMenu/dial/DialDevTools.js +8 -5
  33. package/lib/module/floatingMenu/dial/DialDevTools.web.js +375 -233
  34. package/lib/module/floatingMenu/dial/DialIcon.js +26 -4
  35. package/lib/module/floatingMenu/dial/OnboardingTooltip.js +1 -1
  36. package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +149 -0
  37. package/lib/module/floatingMenu/dial/onboardingConstants.web.js +27 -0
  38. package/lib/module/floatingMenu/floatingTools.js +3 -3
  39. package/lib/module/floatingMenu/floatingTools.web.js +190 -28
  40. package/lib/module/index.js +2 -2
  41. package/lib/module/index.web.js +5 -0
  42. package/lib/module/utils/autoDiscoverPresets.web.js +53 -7
  43. package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts +38 -0
  44. package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts.map +1 -0
  45. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts +21 -1
  46. package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts +5 -2
  48. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +2 -14
  50. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  51. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts +2 -20
  52. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts.map +1 -1
  53. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts +21 -0
  54. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts +16 -2
  59. package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts +9 -0
  62. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +1 -0
  63. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts +13 -0
  64. package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts +29 -2
  66. package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +1 -1
  67. package/lib/typescript/commonjs/index.web.d.ts +1 -0
  68. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  69. package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts +2 -0
  70. package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts.map +1 -1
  71. package/lib/typescript/module/floatingMenu/AppHost.web.d.ts +38 -0
  72. package/lib/typescript/module/floatingMenu/AppHost.web.d.ts.map +1 -0
  73. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts +21 -1
  74. package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts.map +1 -1
  75. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts +5 -2
  76. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +1 -1
  77. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +2 -14
  78. package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +1 -1
  79. package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts +2 -20
  80. package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts.map +1 -1
  81. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts +21 -0
  82. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +1 -0
  83. package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  84. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -1
  85. package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +1 -1
  86. package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts +16 -2
  87. package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +1 -1
  88. package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +1 -1
  89. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts +9 -0
  90. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +1 -0
  91. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts +13 -0
  92. package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +1 -0
  93. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts +29 -2
  94. package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +1 -1
  95. package/lib/typescript/module/index.web.d.ts +1 -0
  96. package/lib/typescript/module/index.web.d.ts.map +1 -1
  97. package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts +2 -0
  98. package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts.map +1 -1
  99. package/package.json +5 -5
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MinimizedToolsStack = MinimizedToolsStack;
7
+ var _react = require("react");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _AppHostWeb = require("./AppHost.web.js");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ /**
12
+ * MinimizedToolsStack — Web twin of MinimizedToolsStack.tsx +
13
+ * shared-ui's ExpandablePopover (inlined: the popover is only used here on
14
+ * web). A vertical stack of minimized-tool icons fused to the top of the
15
+ * floating bubble's drag handle:
16
+ * - collapsed: a 28px "peek" tab (chevron-up + count) with top corners only
17
+ * - expanded: animated-height panel, icons newest-first, collapse chevron
18
+ * - expanded state persists under "@react_buoy_minimized_stack_expanded"
19
+ * - each icon runs the native randomized glitch loop (translateX shake +
20
+ * opacity flicker + scale pulse, 80ms), scheduled every 2-6s + index*300ms
21
+ *
22
+ * Data comes from the web AppHost (openApps with minimized === true) instead
23
+ * of the native MinimizedToolsContext — same derivation the MinimizedDock
24
+ * used before this replaced it.
25
+ */
26
+
27
+ // native MinimizedToolsStack.tsx constants
28
+ const PEEK_HEIGHT = 28;
29
+ const TOOL_ITEM_SIZE = 32;
30
+ const ICON_GAP = 6;
31
+ const TOOLBAR_PADDING = 8;
32
+ const COLLAPSE_BUTTON_SIZE = 24;
33
+ const STORAGE_KEY_EXPANDED = '@react_buoy_minimized_stack_expanded';
34
+ const GLITCH_DURATION_MS = 80;
35
+ const MIN_GLITCH_DELAY = 2000;
36
+ const MAX_GLITCH_DELAY = 6000;
37
+
38
+ // native shared-ui buoyColors (gameUIColors.ts) — card + textMuted
39
+ const CARD = '#1A1A1A';
40
+ const TEXT_MUTED = '#888888';
41
+ function ChevronGlyph({
42
+ down = false
43
+ }) {
44
+ // native: ChevronUp size 12, strokeWidth 2, buoyColors.textMuted
45
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
46
+ width: 12,
47
+ height: 12,
48
+ viewBox: "0 0 24 24",
49
+ "aria-hidden": "true",
50
+ style: {
51
+ transform: down ? 'rotate(180deg)' : undefined
52
+ },
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
54
+ d: "M18 15l-6-6-6 6",
55
+ fill: "none",
56
+ stroke: TEXT_MUTED,
57
+ strokeWidth: "2",
58
+ strokeLinecap: "round",
59
+ strokeLinejoin: "round"
60
+ })
61
+ });
62
+ }
63
+ function GlitchToolButton({
64
+ title,
65
+ icon,
66
+ index,
67
+ onPress
68
+ }) {
69
+ const innerRef = (0, _react.useRef)(null);
70
+ (0, _react.useEffect)(() => {
71
+ let mounted = true;
72
+ let timer;
73
+ const runGlitch = () => {
74
+ // native: parallel translateX shake / opacity flicker / scale pulse,
75
+ // all inside GLITCH_DURATION_MS — one WAAPI animation with offsets.
76
+ innerRef.current?.animate([{
77
+ transform: 'translateX(0) scale(1)',
78
+ opacity: 1,
79
+ offset: 0
80
+ }, {
81
+ transform: 'translateX(3px) scale(1.05)',
82
+ opacity: 0.4,
83
+ offset: 0.2
84
+ }, {
85
+ transform: 'translateX(-3px) scale(1.1)',
86
+ opacity: 1,
87
+ offset: 0.4
88
+ }, {
89
+ transform: 'translateX(2px) scale(1.0)',
90
+ opacity: 0.6,
91
+ offset: 0.6
92
+ }, {
93
+ transform: 'translateX(-1px) scale(0.95)',
94
+ opacity: 1,
95
+ offset: 0.8
96
+ }, {
97
+ transform: 'translateX(0) scale(1)',
98
+ opacity: 1,
99
+ offset: 1
100
+ }], {
101
+ duration: GLITCH_DURATION_MS,
102
+ easing: 'linear'
103
+ });
104
+ };
105
+ const schedule = initial => {
106
+ const delay = initial ? 500 + Math.random() * 1500 + index * 200 : MIN_GLITCH_DELAY + Math.random() * (MAX_GLITCH_DELAY - MIN_GLITCH_DELAY) + index * 300;
107
+ timer = setTimeout(() => {
108
+ if (!mounted) return;
109
+ runGlitch();
110
+ schedule(false);
111
+ }, delay);
112
+ };
113
+ schedule(true);
114
+ return () => {
115
+ mounted = false;
116
+ clearTimeout(timer);
117
+ };
118
+ }, [index]);
119
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
120
+ type: "button",
121
+ "aria-label": `Restore ${title}`,
122
+ onClick: onPress,
123
+ style: {
124
+ width: TOOL_ITEM_SIZE,
125
+ height: TOOL_ITEM_SIZE,
126
+ display: 'flex',
127
+ alignItems: 'center',
128
+ justifyContent: 'center',
129
+ background: 'none',
130
+ border: 'none',
131
+ padding: 0,
132
+ cursor: 'pointer'
133
+ },
134
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
135
+ ref: innerRef,
136
+ style: {
137
+ display: 'flex',
138
+ alignItems: 'center',
139
+ justifyContent: 'center'
140
+ },
141
+ children: icon
142
+ })
143
+ });
144
+ }
145
+ function MinimizedToolsStack({
146
+ containerWidth = 32
147
+ }) {
148
+ const {
149
+ openApps,
150
+ restore
151
+ } = (0, _AppHostWeb.useAppHost)();
152
+ const minimized = openApps.filter(app => app.minimized && app.launchMode !== 'toggle-only');
153
+ const [isExpanded, setIsExpanded] = (0, _react.useState)(false);
154
+ const [isStateRestored, setIsStateRestored] = (0, _react.useState)(false);
155
+
156
+ // Restore + persist the expanded flag (native ExpandablePopover persistState).
157
+ (0, _react.useEffect)(() => {
158
+ let cancelled = false;
159
+ const load = async () => {
160
+ const saved = await _sharedUi.persistentStorage.getItem(STORAGE_KEY_EXPANDED);
161
+ if (!cancelled && saved === 'true') setIsExpanded(true);
162
+ if (!cancelled) setIsStateRestored(true);
163
+ };
164
+ void load();
165
+ return () => {
166
+ cancelled = true;
167
+ };
168
+ }, []);
169
+ (0, _react.useEffect)(() => {
170
+ if (!isStateRestored) return;
171
+ void _sharedUi.persistentStorage.setItem(STORAGE_KEY_EXPANDED, isExpanded ? 'true' : 'false');
172
+ }, [isExpanded, isStateRestored]);
173
+ const handleRestore = (0, _react.useCallback)(instanceId => {
174
+ restore(instanceId);
175
+ }, [restore]);
176
+ if (minimized.length === 0) return null;
177
+
178
+ // native: expandedHeight = padding + n*item + (n-1)*gap + gap + collapse + 4
179
+ const expandedHeight = TOOLBAR_PADDING + minimized.length * TOOL_ITEM_SIZE + (minimized.length - 1) * ICON_GAP + ICON_GAP + COLLAPSE_BUTTON_SIZE + 4;
180
+ const frame = {
181
+ // native peekButton/expandedContainer: card bg, top corners 6, 1px border
182
+ // on top/left/right only (fuses with the bubble below)
183
+ backgroundColor: CARD,
184
+ borderTopLeftRadius: 6,
185
+ borderTopRightRadius: 6,
186
+ borderTop: `1px solid ${TEXT_MUTED}66`,
187
+ borderLeft: `1px solid ${TEXT_MUTED}66`,
188
+ borderRight: `1px solid ${TEXT_MUTED}66`,
189
+ borderBottom: 'none',
190
+ boxSizing: 'border-box'
191
+ };
192
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
193
+ style: {
194
+ height: PEEK_HEIGHT,
195
+ overflow: 'visible',
196
+ position: 'relative'
197
+ },
198
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
199
+ style: {
200
+ position: 'absolute',
201
+ bottom: 0,
202
+ left: 0,
203
+ width: containerWidth,
204
+ height: isExpanded ? expandedHeight : 0,
205
+ opacity: isExpanded ? 1 : 0,
206
+ overflow: 'hidden',
207
+ transition: 'height 200ms ease, opacity 200ms ease',
208
+ pointerEvents: isExpanded ? 'auto' : 'none',
209
+ ...frame
210
+ },
211
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
212
+ style: {
213
+ height: expandedHeight,
214
+ display: 'flex',
215
+ flexDirection: 'column',
216
+ alignItems: 'center',
217
+ paddingTop: TOOLBAR_PADDING,
218
+ gap: ICON_GAP,
219
+ boxSizing: 'border-box'
220
+ },
221
+ children: [[...minimized].reverse().map((app, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(GlitchToolButton, {
222
+ title: app.title || app.id,
223
+ icon: app.icon ?? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
224
+ style: {
225
+ color: '#fff',
226
+ fontSize: 13
227
+ },
228
+ children: (app.title || app.id).slice(0, 1).toUpperCase()
229
+ }),
230
+ index: index,
231
+ onPress: () => handleRestore(app.instanceId)
232
+ }, app.instanceId)), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
233
+ type: "button",
234
+ "aria-label": "Collapse",
235
+ onClick: () => setIsExpanded(false),
236
+ style: {
237
+ width: '100%',
238
+ height: COLLAPSE_BUTTON_SIZE,
239
+ marginTop: 3,
240
+ display: 'flex',
241
+ alignItems: 'center',
242
+ justifyContent: 'center',
243
+ background: 'none',
244
+ border: 'none',
245
+ cursor: 'pointer',
246
+ padding: 0
247
+ },
248
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ChevronGlyph, {
249
+ down: true
250
+ })
251
+ })]
252
+ })
253
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("button", {
254
+ type: "button",
255
+ "aria-label": `Show ${minimized.length} minimized tools`,
256
+ onClick: () => setIsExpanded(true),
257
+ style: {
258
+ position: 'absolute',
259
+ bottom: 0,
260
+ left: 0,
261
+ width: containerWidth,
262
+ height: PEEK_HEIGHT,
263
+ display: 'flex',
264
+ flexDirection: 'row',
265
+ alignItems: 'center',
266
+ justifyContent: 'center',
267
+ gap: 2,
268
+ cursor: 'pointer',
269
+ padding: 0,
270
+ opacity: isExpanded ? 0 : 1,
271
+ transform: isExpanded ? 'scale(0.9)' : 'scale(1)',
272
+ transition: 'opacity 200ms ease, transform 200ms ease',
273
+ pointerEvents: isExpanded ? 'none' : 'auto',
274
+ ...frame
275
+ },
276
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ChevronGlyph, {}), minimized.length > 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
277
+ style: {
278
+ fontSize: 9,
279
+ fontWeight: 600,
280
+ color: TEXT_MUTED,
281
+ marginLeft: 1
282
+ },
283
+ children: minimized.length
284
+ })]
285
+ })]
286
+ });
287
+ }
@@ -318,6 +318,22 @@ function autoDiscoverPresets() {
318
318
  return null;
319
319
  }
320
320
  }
321
+ },
322
+ // ASSETS — bundled-asset inventory (sizes / scale coverage / unused)
323
+ {
324
+ name: "@buoy-gg/assets",
325
+ loader: () => {
326
+ try {
327
+ // @ts-ignore - Dynamic import that may not exist
328
+ const {
329
+ assetsToolPreset
330
+ } = require("@buoy-gg/assets");
331
+ return assetsToolPreset;
332
+ } catch (e) {
333
+ (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/assets", e);
334
+ return null;
335
+ }
336
+ }
321
337
  }];
322
338
 
323
339
  // Attempt to load each preset
@@ -51,6 +51,7 @@ let impersonateModule = null;
51
51
  let perfMonitorModule = null;
52
52
  let jsTopModule = null;
53
53
  let imagesModule = null;
54
+ let assetsModule = null;
54
55
  let expoConstantsModule = null;
55
56
 
56
57
  // Catch bodies report through reportOptionalRequireError: silent for a
@@ -141,6 +142,11 @@ try {
141
142
  } catch (e) {
142
143
  (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/images", e);
143
144
  }
145
+ try {
146
+ assetsModule = require("@buoy-gg/assets");
147
+ } catch (e) {
148
+ (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/assets", e);
149
+ }
144
150
  try {
145
151
  expoConstantsModule = require("expo-constants");
146
152
  } catch (e) {
@@ -275,6 +281,9 @@ function AutoExternalSync({
275
281
  if (imagesModule?.imagesSyncAdapter) {
276
282
  map.images = imagesModule.imagesSyncAdapter;
277
283
  }
284
+ if (assetsModule?.assetsSyncAdapter) {
285
+ map.assets = assetsModule.assetsSyncAdapter;
286
+ }
278
287
  return map;
279
288
  }, [queryAdapter, requiredEnvVars]);
280
289
  useExternalSync({
@@ -13,8 +13,8 @@ var _DialPagination = require("./DialPagination.js");
13
13
  var _dialUsageStore = require("./dialUsageStore.js");
14
14
  var _DevToolsSettingsModal = require("../DevToolsSettingsModal");
15
15
  var _license = require("@buoy-gg/license");
16
- var _AppHost = require("../AppHost.js");
17
- var _OnboardingTooltip = require("./OnboardingTooltip.js");
16
+ var _AppHost = require("../AppHost");
17
+ var _OnboardingTooltip = require("./OnboardingTooltip");
18
18
  var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
19
19
  var _jsxRuntime = require("react/jsx-runtime");
20
20
  // Icons are provided by installedApps; no direct icon imports here.
@@ -230,8 +230,11 @@ const DialDevTools = ({
230
230
  map.set(tool.id, {
231
231
  id: tool.id,
232
232
  name: tool.name,
233
- // Pre-render the icon at the standard dial slot size so it looks correct.
234
- icon: tool.renderIcon(_floatingToolsCore.DIAL_ICON_SIZE),
233
+ // Pre-render the icon at the standard GLYPH size (not the slot size —
234
+ // the slot also holds the label + "Unavailable" caption, so a glyph
235
+ // rendered at DIAL_ICON_SIZE overflows the slot and looks ~2x bigger
236
+ // than installed tools' icons).
237
+ icon: tool.renderIcon(_floatingToolsCore.DIAL_ICON_GLYPH_SIZE),
235
238
  iconComponent: undefined,
236
239
  color: tool.color,
237
240
  unavailable: true,