@buoy-gg/shared-ui 7.0.25 → 7.0.27
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/JsModal.js +156 -20
- package/lib/commonjs/JsModal.web.js +85 -39
- package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +14 -4
- package/lib/commonjs/dataViewer/diffThemes.js +20 -18
- package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +8 -8
- package/lib/commonjs/hooks/safe-area-impl.js +1 -1
- package/lib/commonjs/icons/lucide-icons.js +74 -15
- package/lib/commonjs/index.js +86 -0
- package/lib/commonjs/ui/backgrounds/BackgroundSwitcher.js +248 -74
- package/lib/commonjs/ui/backgrounds/README.md +102 -20
- package/lib/commonjs/ui/backgrounds/backgroundStore.js +20 -6
- package/lib/commonjs/ui/backgrounds/index.js +91 -1
- package/lib/commonjs/ui/backgrounds/primitives.js +50 -14
- package/lib/commonjs/ui/backgrounds/registry.js +41 -64
- package/lib/commonjs/ui/backgrounds/rng.js +21 -0
- package/lib/commonjs/ui/backgrounds/skyClock.js +45 -0
- package/lib/commonjs/ui/backgrounds/variants/daylight.js +453 -0
- package/lib/commonjs/ui/backgrounds/variants/deepField.js +60 -30
- package/lib/commonjs/ui/backgrounds/variants/hyperspace.js +218 -0
- package/lib/commonjs/ui/backgrounds/variants/liveSky.js +898 -0
- package/lib/commonjs/ui/backgrounds/variants/meteors.js +257 -0
- package/lib/commonjs/ui/backgrounds/variants/moonlight.js +472 -0
- package/lib/commonjs/ui/backgrounds/variants/underwater.js +757 -0
- package/lib/commonjs/ui/components/Badge.js +11 -10
- package/lib/commonjs/ui/components/CompactRow.js +30 -17
- package/lib/commonjs/ui/components/DevToolsCard.js +12 -8
- package/lib/commonjs/ui/components/DynamicFilterView.js +43 -41
- package/lib/commonjs/ui/components/EventStepperFooter.js +38 -10
- package/lib/commonjs/ui/components/FilterComponents.js +11 -11
- package/lib/commonjs/ui/components/ModalHeader.js +13 -13
- package/lib/commonjs/ui/components/SectionHeader.js +3 -1
- package/lib/commonjs/ui/components/StorageTypeBadge.js +3 -2
- package/lib/commonjs/ui/components/TabSelector.js +56 -38
- package/lib/commonjs/ui/components/ValueTypeBadge.js +7 -6
- package/lib/commonjs/ui/components/WindowControls.js +37 -10
- package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +8 -0
- package/lib/commonjs/ui/night/nightTheme.js +120 -0
- package/lib/commonjs/ui/night/primitives.js +498 -0
- package/lib/module/JsModal.js +156 -20
- package/lib/module/JsModal.web.js +83 -39
- package/lib/module/dataViewer/VirtualizedDataExplorer.js +14 -4
- package/lib/module/dataViewer/diffThemes.js +20 -18
- package/lib/module/dataViewer/tree/TreeDiffViewer.js +9 -9
- package/lib/module/hooks/safe-area-impl.js +1 -1
- package/lib/module/icons/lucide-icons.js +74 -15
- package/lib/module/index.js +4 -0
- package/lib/module/ui/backgrounds/BackgroundSwitcher.js +250 -76
- package/lib/module/ui/backgrounds/README.md +102 -20
- package/lib/module/ui/backgrounds/backgroundStore.js +19 -5
- package/lib/module/ui/backgrounds/index.js +11 -2
- package/lib/module/ui/backgrounds/primitives.js +53 -16
- package/lib/module/ui/backgrounds/registry.js +41 -64
- package/lib/module/ui/backgrounds/rng.js +20 -0
- package/lib/module/ui/backgrounds/skyClock.js +39 -0
- package/lib/module/ui/backgrounds/variants/daylight.js +449 -0
- package/lib/module/ui/backgrounds/variants/deepField.js +62 -31
- package/lib/module/ui/backgrounds/variants/hyperspace.js +214 -0
- package/lib/module/ui/backgrounds/variants/liveSky.js +893 -0
- package/lib/module/ui/backgrounds/variants/meteors.js +253 -0
- package/lib/module/ui/backgrounds/variants/moonlight.js +468 -0
- package/lib/module/ui/backgrounds/variants/underwater.js +753 -0
- package/lib/module/ui/components/Badge.js +11 -10
- package/lib/module/ui/components/CompactRow.js +30 -17
- package/lib/module/ui/components/DevToolsCard.js +12 -8
- package/lib/module/ui/components/DynamicFilterView.js +43 -41
- package/lib/module/ui/components/EventStepperFooter.js +38 -10
- package/lib/module/ui/components/FilterComponents.js +11 -11
- package/lib/module/ui/components/ModalHeader.js +13 -13
- package/lib/module/ui/components/SectionHeader.js +3 -1
- package/lib/module/ui/components/StorageTypeBadge.js +3 -2
- package/lib/module/ui/components/TabSelector.js +57 -39
- package/lib/module/ui/components/ValueTypeBadge.js +7 -6
- package/lib/module/ui/components/WindowControls.js +37 -10
- package/lib/module/ui/gameUI/constants/gameUIColors.js +8 -0
- package/lib/module/ui/night/nightTheme.js +116 -0
- package/lib/module/ui/night/primitives.js +485 -0
- package/lib/typescript/commonjs/JsModal.d.ts +18 -0
- package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/JsModal.web.d.ts +13 -0
- package/lib/typescript/commonjs/JsModal.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
- package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts +3 -1
- package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts.map +1 -1
- package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/commonjs/icons/lucide-icons.d.ts +12 -1
- package/lib/typescript/commonjs/icons/lucide-icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +3 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts +26 -6
- package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts +3 -0
- package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/index.d.ts +7 -1
- package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts +18 -3
- package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts +8 -0
- package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts +6 -0
- package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts +17 -0
- package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/types.d.ts +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts +30 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts +19 -4
- package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts +39 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts +41 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts +26 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts +35 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts +51 -0
- package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/Badge.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts +2 -0
- package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/StorageTypeBadge.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/TabSelector.d.ts +9 -0
- package/lib/typescript/commonjs/ui/components/TabSelector.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ValueTypeBadge.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts +4 -2
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts +8 -0
- package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/night/nightTheme.d.ts +113 -0
- package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/night/primitives.d.ts +111 -0
- package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -0
- package/lib/typescript/module/JsModal.d.ts +18 -0
- package/lib/typescript/module/JsModal.d.ts.map +1 -1
- package/lib/typescript/module/JsModal.web.d.ts +13 -0
- package/lib/typescript/module/JsModal.web.d.ts.map +1 -1
- package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
- package/lib/typescript/module/dataViewer/diffThemes.d.ts +3 -1
- package/lib/typescript/module/dataViewer/diffThemes.d.ts.map +1 -1
- package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
- package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/module/icons/lucide-icons.d.ts +12 -1
- package/lib/typescript/module/icons/lucide-icons.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +3 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts +26 -6
- package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts +3 -0
- package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/index.d.ts +7 -1
- package/lib/typescript/module/ui/backgrounds/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/primitives.d.ts +18 -3
- package/lib/typescript/module/ui/backgrounds/primitives.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/registry.d.ts +8 -0
- package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/rng.d.ts +6 -0
- package/lib/typescript/module/ui/backgrounds/rng.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/skyClock.d.ts +17 -0
- package/lib/typescript/module/ui/backgrounds/skyClock.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/types.d.ts +1 -1
- package/lib/typescript/module/ui/backgrounds/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts +30 -0
- package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts +19 -4
- package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts.map +1 -1
- package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts +39 -0
- package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts +41 -0
- package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts +26 -0
- package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts +35 -0
- package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts.map +1 -0
- package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts +51 -0
- package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/Badge.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/EventStepperFooter.d.ts +2 -0
- package/lib/typescript/module/ui/components/EventStepperFooter.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/StorageTypeBadge.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/TabSelector.d.ts +9 -0
- package/lib/typescript/module/ui/components/TabSelector.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ValueTypeBadge.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/WindowControls.d.ts +4 -2
- package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts +8 -0
- package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
- package/lib/typescript/module/ui/night/nightTheme.d.ts +113 -0
- package/lib/typescript/module/ui/night/nightTheme.d.ts.map +1 -0
- package/lib/typescript/module/ui/night/primitives.d.ts +111 -0
- package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -0
- package/package.json +4 -4
- package/lib/commonjs/ui/backgrounds/variants/lattice.js +0 -579
- package/lib/commonjs/ui/backgrounds/variants/starfield.js +0 -210
- package/lib/module/ui/backgrounds/variants/lattice.js +0 -575
- package/lib/module/ui/backgrounds/variants/starfield.js +0 -206
- package/lib/typescript/commonjs/ui/backgrounds/variants/lattice.d.ts +0 -33
- package/lib/typescript/commonjs/ui/backgrounds/variants/lattice.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/starfield.d.ts +0 -12
- package/lib/typescript/commonjs/ui/backgrounds/variants/starfield.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/lattice.d.ts +0 -33
- package/lib/typescript/module/ui/backgrounds/variants/lattice.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/starfield.d.ts +0 -12
- package/lib/typescript/module/ui/backgrounds/variants/starfield.d.ts.map +0 -1
package/lib/commonjs/JsModal.js
CHANGED
|
@@ -10,6 +10,8 @@ var _absoluteFill = require("./utils/absoluteFill.js");
|
|
|
10
10
|
var _useSafeAreaInsets = require("./hooks/useSafeAreaInsets.js");
|
|
11
11
|
var _index = require("./ui/gameUI/index.js");
|
|
12
12
|
var _index2 = require("./ui/components/index.js");
|
|
13
|
+
var _ToolBackground = require("./ui/backgrounds/ToolBackground.js");
|
|
14
|
+
var _nightTheme = require("./ui/night/nightTheme.js");
|
|
13
15
|
var _persistentStorage = require("./utils/persistentStorage.js");
|
|
14
16
|
var _devToolsStorageKeys = require("./storage/devToolsStorageKeys.js");
|
|
15
17
|
var _index3 = require("./context/index.js");
|
|
@@ -29,6 +31,21 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
29
31
|
// ============================================================================
|
|
30
32
|
// CONSTANTS - Modal dimensions and configuration
|
|
31
33
|
// ============================================================================
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Tool modals open and close without an entrance animation.
|
|
37
|
+
*
|
|
38
|
+
* The animated entrance was `parallel([spring(tension:180, friction:22),
|
|
39
|
+
* timing(200ms)])`. Two measured problems: the modal mounts at opacity 0 and
|
|
40
|
+
* the fade only starts once its content has committed, so a tap left the screen
|
|
41
|
+
* unchanged for ~240ms; and the spring's completion did not land until ~1s,
|
|
42
|
+
* creeping long after it looked settled. Snapping to the final state made the
|
|
43
|
+
* whole devtools UI feel markedly faster.
|
|
44
|
+
*
|
|
45
|
+
* Setting this to `false` restores the animation for every tool modal — this is
|
|
46
|
+
* shared chrome, not settings-specific.
|
|
47
|
+
*/
|
|
48
|
+
const INSTANT_MODAL_ENTRANCE = true;
|
|
32
49
|
const SCREEN = _reactNative.Dimensions.get("window");
|
|
33
50
|
const MIN_HEIGHT = 100;
|
|
34
51
|
const DEFAULT_HEIGHT = 400;
|
|
@@ -96,6 +113,15 @@ class ModalStorage {
|
|
|
96
113
|
// TYPE DEFINITIONS - Interface contracts for the modal
|
|
97
114
|
// ============================================================================
|
|
98
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Chrome variant. "night" (the default since the suite-wide theme move) is
|
|
118
|
+
* the Everlights-style sheet (see ui/night): near-black `#050505` surfaces at
|
|
119
|
+
* radius 16, a hairline accent border, a neutral drag handle instead of the
|
|
120
|
+
* teal bar, a transparent header, and the ToolBackground hoisted to the sheet
|
|
121
|
+
* root so the star field runs through the header instead of stopping under
|
|
122
|
+
* it. "default" is the legacy card-grey chrome, kept as an escape hatch.
|
|
123
|
+
*/
|
|
124
|
+
|
|
99
125
|
/**
|
|
100
126
|
* Modal state that can be saved and restored when minimizing/restoring
|
|
101
127
|
*/
|
|
@@ -110,12 +136,15 @@ class ModalStorage {
|
|
|
110
136
|
const DragIndicator = /*#__PURE__*/(0, _react.memo)(function DragIndicator({
|
|
111
137
|
isResizing,
|
|
112
138
|
mode,
|
|
113
|
-
hasCustomContent = false
|
|
139
|
+
hasCustomContent = false,
|
|
140
|
+
variant = "default"
|
|
114
141
|
}) {
|
|
115
142
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
116
143
|
style: [styles.dragIndicatorContainer, hasCustomContent && styles.dragIndicatorContainerCustom],
|
|
117
144
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
118
|
-
style: [styles.dragIndicator, mode === "floating" && styles.floatingDragIndicator, isResizing && styles.dragIndicatorActive
|
|
145
|
+
style: [styles.dragIndicator, mode === "floating" && styles.floatingDragIndicator, isResizing && styles.dragIndicatorActive,
|
|
146
|
+
// Night: the neutral Everlights sheet handle, no glow, both modes.
|
|
147
|
+
variant === "night" && styles.nightDragIndicator]
|
|
119
148
|
}), isResizing && mode === "bottomSheet" && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
120
149
|
style: styles.resizeGripContainer,
|
|
121
150
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
@@ -155,7 +184,8 @@ const ModalHeader = /*#__PURE__*/(0, _react.memo)(function ModalHeader({
|
|
|
155
184
|
onMinimize,
|
|
156
185
|
isResizing,
|
|
157
186
|
mode,
|
|
158
|
-
panHandlers
|
|
187
|
+
panHandlers,
|
|
188
|
+
variant = "default"
|
|
159
189
|
}) {
|
|
160
190
|
const lastTapRef = (0, _react.useRef)(0);
|
|
161
191
|
const tapCountRef = (0, _react.useRef)(0);
|
|
@@ -234,11 +264,12 @@ const ModalHeader = /*#__PURE__*/(0, _react.memo)(function ModalHeader({
|
|
|
234
264
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
235
265
|
isResizing: isResizing,
|
|
236
266
|
mode: mode,
|
|
237
|
-
hasCustomContent: true
|
|
267
|
+
hasCustomContent: true,
|
|
268
|
+
variant: variant
|
|
238
269
|
}), customContentWithMinimize]
|
|
239
270
|
});
|
|
240
271
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
241
|
-
style: styles.header,
|
|
272
|
+
style: [styles.header, variant === "night" && styles.nightHeader],
|
|
242
273
|
...headerProps,
|
|
243
274
|
children: shouldHandleTap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback, {
|
|
244
275
|
onPress: handleHeaderTap,
|
|
@@ -250,7 +281,8 @@ const ModalHeader = /*#__PURE__*/(0, _react.memo)(function ModalHeader({
|
|
|
250
281
|
style: styles.headerInner,
|
|
251
282
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
252
283
|
isResizing: isResizing,
|
|
253
|
-
mode: mode
|
|
284
|
+
mode: mode,
|
|
285
|
+
variant: variant
|
|
254
286
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
255
287
|
style: styles.headerContent,
|
|
256
288
|
children: [header?.title && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
@@ -269,7 +301,7 @@ const ModalHeader = /*#__PURE__*/(0, _react.memo)(function ModalHeader({
|
|
|
269
301
|
})]
|
|
270
302
|
});
|
|
271
303
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
272
|
-
style: [styles.header, mode === "floating" && styles.floatingModeHeader],
|
|
304
|
+
style: [styles.header, mode === "floating" && styles.floatingModeHeader, variant === "night" && styles.nightHeader],
|
|
273
305
|
...headerProps,
|
|
274
306
|
children: shouldHandleTap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback, {
|
|
275
307
|
onPress: handleHeaderTap,
|
|
@@ -342,7 +374,9 @@ const JsModalComponent = ({
|
|
|
342
374
|
minimizeTargetPosition,
|
|
343
375
|
initialModalState,
|
|
344
376
|
zIndex,
|
|
345
|
-
disableScrollWrapper = false
|
|
377
|
+
disableScrollWrapper = false,
|
|
378
|
+
background = true,
|
|
379
|
+
variant = "night"
|
|
346
380
|
}) => {
|
|
347
381
|
const insets = (0, _useSafeAreaInsets.useSafeAreaInsets)();
|
|
348
382
|
const [isStateLoaded, setIsStateLoaded] = (0, _react.useState)(!enablePersistence);
|
|
@@ -671,6 +705,27 @@ const JsModalComponent = ({
|
|
|
671
705
|
// Visibility effect
|
|
672
706
|
let openAnimation = null;
|
|
673
707
|
let closeAnimation = null;
|
|
708
|
+
if (INSTANT_MODAL_ENTRANCE) {
|
|
709
|
+
// Snap to the final state — no animation in either direction.
|
|
710
|
+
if (visible) {
|
|
711
|
+
if (mode === "bottomSheet") {
|
|
712
|
+
bottomSheetTranslateY.setValue(0);
|
|
713
|
+
} else {
|
|
714
|
+
floatingScale.setValue(1);
|
|
715
|
+
floatingPosition.setValue({
|
|
716
|
+
x: currentDimensionsRef.current.left,
|
|
717
|
+
y: currentDimensionsRef.current.top
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
visibilityProgress.setValue(1);
|
|
721
|
+
} else {
|
|
722
|
+
if (mode === "bottomSheet") {
|
|
723
|
+
bottomSheetTranslateY.setValue(SCREEN.height);
|
|
724
|
+
}
|
|
725
|
+
visibilityProgress.setValue(0);
|
|
726
|
+
}
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
674
729
|
if (visible) {
|
|
675
730
|
// Reset position if needed and then open
|
|
676
731
|
bottomSheetTranslateY.setValue(SCREEN.height);
|
|
@@ -1148,8 +1203,12 @@ const JsModalComponent = ({
|
|
|
1148
1203
|
...(zIndex !== undefined && {
|
|
1149
1204
|
zIndex
|
|
1150
1205
|
})
|
|
1151
|
-
}, (isDragging || isResizing) && styles.floatingModalDragging, customStyles.container, !visible && styles.parkedOffscreen],
|
|
1152
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
1206
|
+
}, variant === "night" && styles.nightFloatingModal, (isDragging || isResizing) && styles.floatingModalDragging, customStyles.container, !visible && styles.parkedOffscreen],
|
|
1207
|
+
children: [background && variant === "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1208
|
+
style: styles.nightBackdropFloating,
|
|
1209
|
+
pointerEvents: "none",
|
|
1210
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {})
|
|
1211
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.DraggableHeader, {
|
|
1153
1212
|
position: floatingPosition,
|
|
1154
1213
|
onDragStart: handleFloatingDragStart,
|
|
1155
1214
|
onDragEnd: handleFloatingDragEnd,
|
|
@@ -1168,7 +1227,8 @@ const JsModalComponent = ({
|
|
|
1168
1227
|
onToggleMode: toggleMode,
|
|
1169
1228
|
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1170
1229
|
isResizing: isDragging || isResizing,
|
|
1171
|
-
mode: mode
|
|
1230
|
+
mode: mode,
|
|
1231
|
+
variant: variant
|
|
1172
1232
|
})
|
|
1173
1233
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1174
1234
|
style: styles.windowControlsContainer,
|
|
@@ -1176,11 +1236,12 @@ const JsModalComponent = ({
|
|
|
1176
1236
|
onClose: onClose,
|
|
1177
1237
|
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1178
1238
|
onToggleMode: toggleMode,
|
|
1179
|
-
mode: mode
|
|
1239
|
+
mode: mode,
|
|
1240
|
+
variant: variant
|
|
1180
1241
|
})
|
|
1181
1242
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1182
|
-
style: [styles.content, customStyles.content],
|
|
1183
|
-
children: [disableScrollWrapper ?
|
|
1243
|
+
style: [styles.content, variant === "night" && styles.nightContent, customStyles.content],
|
|
1244
|
+
children: [background && variant !== "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {}) : null, disableScrollWrapper ?
|
|
1184
1245
|
/*#__PURE__*/
|
|
1185
1246
|
// Render children directly when they manage their own scrolling (FlatList, etc.)
|
|
1186
1247
|
(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
@@ -1264,30 +1325,36 @@ const JsModalComponent = ({
|
|
|
1264
1325
|
}]
|
|
1265
1326
|
}],
|
|
1266
1327
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
1267
|
-
style: [styles.bottomSheet, customStyles.container, {
|
|
1328
|
+
style: [styles.bottomSheet, variant === "night" && styles.nightBottomSheet, customStyles.container, {
|
|
1268
1329
|
height: externalAnimatedHeight || animatedBottomPosition
|
|
1269
1330
|
}],
|
|
1270
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
1331
|
+
children: [background && variant === "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1332
|
+
style: styles.nightBackdropSheet,
|
|
1333
|
+
pointerEvents: "none",
|
|
1334
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {})
|
|
1335
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHeader, {
|
|
1271
1336
|
header: header,
|
|
1272
1337
|
onClose: onClose,
|
|
1273
1338
|
onToggleMode: toggleMode,
|
|
1274
1339
|
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1275
1340
|
isResizing: isResizing,
|
|
1276
1341
|
mode: mode,
|
|
1277
|
-
panHandlers: bottomSheetPanResponder.panHandlers
|
|
1342
|
+
panHandlers: bottomSheetPanResponder.panHandlers,
|
|
1343
|
+
variant: variant
|
|
1278
1344
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1279
1345
|
style: styles.windowControlsContainer,
|
|
1280
1346
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.WindowControls, {
|
|
1281
1347
|
onClose: onClose,
|
|
1282
1348
|
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1283
1349
|
onToggleMode: toggleMode,
|
|
1284
|
-
mode: mode
|
|
1350
|
+
mode: mode,
|
|
1351
|
+
variant: variant
|
|
1285
1352
|
})
|
|
1286
1353
|
}), hintLoaded && showHint && mode === "bottomSheet" && !hintsDisabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.ModalHintBanner, {
|
|
1287
1354
|
onAcknowledge: handleHintAcknowledge
|
|
1288
1355
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1289
|
-
style: [styles.content, customStyles.content],
|
|
1290
|
-
children: [disableScrollWrapper ?
|
|
1356
|
+
style: [styles.content, variant === "night" && styles.nightContent, customStyles.content],
|
|
1357
|
+
children: [background && variant !== "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {}) : null, disableScrollWrapper ?
|
|
1291
1358
|
/*#__PURE__*/
|
|
1292
1359
|
// Render children directly when they manage their own scrolling (FlatList, etc.)
|
|
1293
1360
|
(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
@@ -1407,6 +1474,75 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
1407
1474
|
borderBottomWidth: 1,
|
|
1408
1475
|
borderBottomColor: _index.buoyColors.border
|
|
1409
1476
|
},
|
|
1477
|
+
// ── Night variant (Everlights sheet — see ui/night/nightTheme.ts) ────────
|
|
1478
|
+
// NO `overflow: "hidden"` on the sheets: Fabric clips children to the
|
|
1479
|
+
// square rect, so the star-field layer's corner painted OVER the rounded
|
|
1480
|
+
// corner (it read as chopped off) — and iOS suppresses a layer's own shadow
|
|
1481
|
+
// when it clips. The backdrop clips itself instead (nightBackdrop* below).
|
|
1482
|
+
nightBottomSheet: {
|
|
1483
|
+
backgroundColor: _nightTheme.night.color.bg,
|
|
1484
|
+
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1485
|
+
borderTopRightRadius: _nightTheme.night.radius.sheet,
|
|
1486
|
+
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
1487
|
+
borderColor: _nightTheme.night.color.accent + "55",
|
|
1488
|
+
shadowColor: _nightTheme.night.color.accent,
|
|
1489
|
+
shadowOffset: {
|
|
1490
|
+
width: 0,
|
|
1491
|
+
height: -4
|
|
1492
|
+
},
|
|
1493
|
+
shadowOpacity: 0.22,
|
|
1494
|
+
shadowRadius: 10
|
|
1495
|
+
},
|
|
1496
|
+
nightFloatingModal: {
|
|
1497
|
+
backgroundColor: _nightTheme.night.color.bg,
|
|
1498
|
+
borderRadius: _nightTheme.night.radius.sheet,
|
|
1499
|
+
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
1500
|
+
borderColor: _nightTheme.night.color.accent + "55",
|
|
1501
|
+
shadowColor: _nightTheme.night.color.accent,
|
|
1502
|
+
shadowOffset: {
|
|
1503
|
+
width: 0,
|
|
1504
|
+
height: 0
|
|
1505
|
+
},
|
|
1506
|
+
shadowOpacity: 0.22,
|
|
1507
|
+
shadowRadius: 14
|
|
1508
|
+
},
|
|
1509
|
+
/** The header is glass — the sheet-level star field runs through it. */
|
|
1510
|
+
nightHeader: {
|
|
1511
|
+
backgroundColor: "transparent",
|
|
1512
|
+
borderWidth: 0,
|
|
1513
|
+
borderBottomWidth: 0,
|
|
1514
|
+
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1515
|
+
borderTopRightRadius: _nightTheme.night.radius.sheet
|
|
1516
|
+
},
|
|
1517
|
+
nightContent: {
|
|
1518
|
+
backgroundColor: "transparent"
|
|
1519
|
+
},
|
|
1520
|
+
/**
|
|
1521
|
+
* The hoisted star field clips ITSELF to the sheet's corners (matching
|
|
1522
|
+
* radii + overflow hidden) — see the note on the sheet styles above. It
|
|
1523
|
+
* also keeps scenes that animate outside their own bounds (Hyperspace's
|
|
1524
|
+
* scaled shells) from bleeding past the window.
|
|
1525
|
+
*/
|
|
1526
|
+
nightBackdropSheet: {
|
|
1527
|
+
..._absoluteFill.absoluteFill,
|
|
1528
|
+
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1529
|
+
borderTopRightRadius: _nightTheme.night.radius.sheet,
|
|
1530
|
+
overflow: "hidden"
|
|
1531
|
+
},
|
|
1532
|
+
nightBackdropFloating: {
|
|
1533
|
+
..._absoluteFill.absoluteFill,
|
|
1534
|
+
borderRadius: _nightTheme.night.radius.sheet,
|
|
1535
|
+
overflow: "hidden"
|
|
1536
|
+
},
|
|
1537
|
+
/** Neutral Everlights handle instead of the glowing teal bar. */
|
|
1538
|
+
nightDragIndicator: {
|
|
1539
|
+
width: 36,
|
|
1540
|
+
height: 5,
|
|
1541
|
+
borderRadius: 2.5,
|
|
1542
|
+
backgroundColor: _nightTheme.night.color.placeholder,
|
|
1543
|
+
shadowOpacity: 0,
|
|
1544
|
+
elevation: 0
|
|
1545
|
+
},
|
|
1410
1546
|
floatingHeader: {
|
|
1411
1547
|
borderTopLeftRadius: 6,
|
|
1412
1548
|
borderTopRightRadius: 6
|
|
@@ -7,6 +7,8 @@ exports.JsModal = void 0;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _devToolsStorageKeys = require("./storage/devToolsStorageKeys.js");
|
|
9
9
|
var _index = require("./context/index.js");
|
|
10
|
+
var _ToolBackground = require("./ui/backgrounds/ToolBackground.js");
|
|
11
|
+
var _nightTheme = require("./ui/night/nightTheme.js");
|
|
10
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
13
|
/**
|
|
12
14
|
* JsModal.web — DOM port of JsModal.tsx (React Native).
|
|
@@ -78,6 +80,12 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
78
80
|
* @platform React DOM Web (Vite, Tauri, Capacitor/Ionic, Electron)
|
|
79
81
|
*/
|
|
80
82
|
|
|
83
|
+
// RN component, but safe here: every consumer of the web modal (desktop
|
|
84
|
+
// renderer, website demos) aliases `react-native` to react-native-web, and
|
|
85
|
+
// the backgrounds primitives handle RNW explicitly (see backgrounds/README).
|
|
86
|
+
|
|
87
|
+
// Pure token module (no react-native import) — safe on web.
|
|
88
|
+
|
|
81
89
|
// ============================================================================
|
|
82
90
|
// PALETTE — inlined from shared-ui with provenance (RN-only modules on web)
|
|
83
91
|
// ============================================================================
|
|
@@ -470,9 +478,11 @@ function WindowControls({
|
|
|
470
478
|
const DragIndicator = /*#__PURE__*/(0, _react.memo)(function DragIndicator({
|
|
471
479
|
isResizing,
|
|
472
480
|
mode,
|
|
473
|
-
hasCustomContent = false
|
|
481
|
+
hasCustomContent = false,
|
|
482
|
+
variant = "default"
|
|
474
483
|
}) {
|
|
475
484
|
const floating = mode === "floating";
|
|
485
|
+
const isNight = variant === "night";
|
|
476
486
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
477
487
|
style: {
|
|
478
488
|
display: "flex",
|
|
@@ -489,12 +499,13 @@ const DragIndicator = /*#__PURE__*/(0, _react.memo)(function DragIndicator({
|
|
|
489
499
|
style: {
|
|
490
500
|
// native dragIndicator: 40x3 teal bar, radius 2, teal glow
|
|
491
501
|
// (shadowOpacity 0.6, radius 4); floating variant: 50x5 textMuted;
|
|
492
|
-
// active (isResizing/isDragging): teal, width 40
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
502
|
+
// active (isResizing/isDragging): teal, width 40.
|
|
503
|
+
// Night: the neutral 36x5 Everlights handle, no glow, both modes.
|
|
504
|
+
width: isNight ? 36 : isResizing ? 40 : floating ? 50 : 40,
|
|
505
|
+
height: isNight ? 5 : floating ? 5 : 3,
|
|
506
|
+
backgroundColor: isNight ? _nightTheme.night.color.placeholder : isResizing ? buoy.primary : floating ? buoy.textMuted : buoy.primary,
|
|
507
|
+
borderRadius: isNight ? 2.5 : 2,
|
|
508
|
+
boxShadow: isNight ? "none" : `0 0 4px ${buoy.primary}99`
|
|
498
509
|
}
|
|
499
510
|
}), isResizing && mode === "bottomSheet" && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
500
511
|
style: {
|
|
@@ -628,7 +639,8 @@ function ModalHeaderContent({
|
|
|
628
639
|
header,
|
|
629
640
|
isResizing,
|
|
630
641
|
mode,
|
|
631
|
-
onMinimize
|
|
642
|
+
onMinimize,
|
|
643
|
+
variant = "default"
|
|
632
644
|
}) {
|
|
633
645
|
if (header?.customContent) {
|
|
634
646
|
// native (non-CyberpunkModalHeader path): inject onMinimize into the
|
|
@@ -651,7 +663,8 @@ function ModalHeaderContent({
|
|
|
651
663
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
652
664
|
isResizing: isResizing,
|
|
653
665
|
mode: mode,
|
|
654
|
-
hasCustomContent: true
|
|
666
|
+
hasCustomContent: true,
|
|
667
|
+
variant: variant
|
|
655
668
|
}), customContent]
|
|
656
669
|
});
|
|
657
670
|
}
|
|
@@ -666,7 +679,8 @@ function ModalHeaderContent({
|
|
|
666
679
|
},
|
|
667
680
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
668
681
|
isResizing: isResizing,
|
|
669
|
-
mode: mode
|
|
682
|
+
mode: mode,
|
|
683
|
+
variant: variant
|
|
670
684
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
671
685
|
style: {
|
|
672
686
|
// native headerContent: paddingHorizontal 16, alignItems center
|
|
@@ -743,7 +757,9 @@ const JsModalComponent = ({
|
|
|
743
757
|
minimizeTargetPosition,
|
|
744
758
|
initialModalState,
|
|
745
759
|
zIndex,
|
|
746
|
-
disableScrollWrapper = false
|
|
760
|
+
disableScrollWrapper = false,
|
|
761
|
+
background = true,
|
|
762
|
+
variant = "night"
|
|
747
763
|
}) => {
|
|
748
764
|
const [insets] = (0, _react.useState)(readSafeAreaInsets);
|
|
749
765
|
const [isStateLoaded, setIsStateLoaded] = (0, _react.useState)(!enablePersistence);
|
|
@@ -1346,9 +1362,23 @@ const JsModalComponent = ({
|
|
|
1346
1362
|
}, "hidden");
|
|
1347
1363
|
}
|
|
1348
1364
|
const dialogLabel = header?.title || "Dev tool panel";
|
|
1365
|
+
const isNight = variant === "night";
|
|
1366
|
+
|
|
1367
|
+
// Night: the star field fills the whole sheet — header included — instead
|
|
1368
|
+
// of starting under the header band (native parity: hoisted to sheet root).
|
|
1369
|
+
const nightBackdrop = background && isNight ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1370
|
+
style: {
|
|
1371
|
+
position: "absolute",
|
|
1372
|
+
inset: 0,
|
|
1373
|
+
pointerEvents: "none"
|
|
1374
|
+
},
|
|
1375
|
+
"aria-hidden": true,
|
|
1376
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {})
|
|
1377
|
+
}) : null;
|
|
1349
1378
|
|
|
1350
1379
|
// Content block shared by both modes — native styles.content:
|
|
1351
1380
|
// flex 1, bg base #121212, borderBottomRadius 16, overflow hidden.
|
|
1381
|
+
// Night: transparent, so the sheet-level star field shows through.
|
|
1352
1382
|
const contentBlock = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
1353
1383
|
style: {
|
|
1354
1384
|
flex: 1,
|
|
@@ -1356,13 +1386,13 @@ const JsModalComponent = ({
|
|
|
1356
1386
|
position: "relative",
|
|
1357
1387
|
display: "flex",
|
|
1358
1388
|
flexDirection: "column",
|
|
1359
|
-
backgroundColor: buoy.base,
|
|
1389
|
+
backgroundColor: isNight ? "transparent" : buoy.base,
|
|
1360
1390
|
borderBottomLeftRadius: 16,
|
|
1361
1391
|
borderBottomRightRadius: 16,
|
|
1362
1392
|
overflow: "hidden",
|
|
1363
1393
|
...customStyles.content
|
|
1364
1394
|
},
|
|
1365
|
-
children: [disableScrollWrapper ?
|
|
1395
|
+
children: [background && !isNight ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {}) : null, disableScrollWrapper ?
|
|
1366
1396
|
/*#__PURE__*/
|
|
1367
1397
|
// children manage their own scrolling (native: plain flex View)
|
|
1368
1398
|
(0, _jsxRuntime.jsx)("div", {
|
|
@@ -1437,27 +1467,32 @@ const JsModalComponent = ({
|
|
|
1437
1467
|
transform: `translate(${posRef.current.x}px, ${posRef.current.y}px)`,
|
|
1438
1468
|
display: "flex",
|
|
1439
1469
|
flexDirection: "column",
|
|
1440
|
-
backgroundColor: buoy.card,
|
|
1441
|
-
borderRadius: 6,
|
|
1442
|
-
border: active ? `2px solid ${buoy.primary}` : `1px solid ${buoy.border}`,
|
|
1443
|
-
boxShadow: active ? `0 0 12px ${buoy.primary}7A` : `0 0 20px ${buoy.primary}4D`,
|
|
1470
|
+
backgroundColor: isNight ? _nightTheme.night.color.bg : buoy.card,
|
|
1471
|
+
borderRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1472
|
+
border: isNight ? `1px solid ${_nightTheme.night.color.accent}55` : active ? `2px solid ${buoy.primary}` : `1px solid ${buoy.border}`,
|
|
1473
|
+
boxShadow: isNight ? `0 0 14px ${_nightTheme.night.color.accent}38` : active ? `0 0 12px ${buoy.primary}7A` : `0 0 20px ${buoy.primary}4D`,
|
|
1474
|
+
// Night clips the hoisted star field to the rounded window.
|
|
1475
|
+
...(isNight ? {
|
|
1476
|
+
overflow: "hidden"
|
|
1477
|
+
} : null),
|
|
1444
1478
|
boxSizing: "border-box",
|
|
1445
1479
|
// RN borders draw inside the rect
|
|
1446
1480
|
zIndex: zIndex ?? 1000,
|
|
1447
1481
|
...customStyles.container
|
|
1448
1482
|
},
|
|
1449
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1483
|
+
children: [nightBackdrop, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1450
1484
|
onPointerDown: handleFloatPointerDown,
|
|
1451
1485
|
onPointerMove: handleFloatPointerMove,
|
|
1452
1486
|
onPointerUp: handleFloatPointerUp,
|
|
1453
1487
|
onPointerCancel: handleFloatPointerCancel,
|
|
1454
1488
|
style: {
|
|
1455
|
-
// native styles.header (+ floatingHeader top radius 6)
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1489
|
+
// native styles.header (+ floatingHeader top radius 6);
|
|
1490
|
+
// night: transparent glass, no border — the field runs through
|
|
1491
|
+
borderTopLeftRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1492
|
+
borderTopRightRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1493
|
+
backgroundColor: isNight ? "transparent" : buoy.card,
|
|
1459
1494
|
minHeight: 56,
|
|
1460
|
-
border: `1px solid ${buoy.border}`,
|
|
1495
|
+
border: isNight ? "none" : `1px solid ${buoy.border}`,
|
|
1461
1496
|
boxSizing: "border-box",
|
|
1462
1497
|
display: "flex",
|
|
1463
1498
|
flexDirection: "column",
|
|
@@ -1465,13 +1500,16 @@ const JsModalComponent = ({
|
|
|
1465
1500
|
flexShrink: 0,
|
|
1466
1501
|
touchAction: "none",
|
|
1467
1502
|
userSelect: "none",
|
|
1468
|
-
cursor: isDragging ? "grabbing" : "grab"
|
|
1503
|
+
cursor: isDragging ? "grabbing" : "grab",
|
|
1504
|
+
// web-only affordance
|
|
1505
|
+
position: "relative"
|
|
1469
1506
|
},
|
|
1470
1507
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHeaderContent, {
|
|
1471
1508
|
header: header,
|
|
1472
1509
|
isResizing: isDragging || isResizing,
|
|
1473
1510
|
mode: mode,
|
|
1474
|
-
onMinimize: onMinimize ? handleMinimize : undefined
|
|
1511
|
+
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1512
|
+
variant: variant
|
|
1475
1513
|
})
|
|
1476
1514
|
}), windowControlsBlock, contentBlock, ["bottomLeft", "bottomRight"].map(corner => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1477
1515
|
onPointerDown: handleResizePointerDown(corner),
|
|
@@ -1533,31 +1571,36 @@ const JsModalComponent = ({
|
|
|
1533
1571
|
"aria-label": dialogLabel,
|
|
1534
1572
|
style: {
|
|
1535
1573
|
// native bottomSheet: card bg, top radius 6, 1px #333 border,
|
|
1536
|
-
// teal shadow (offset 0/-4, opacity 0.2, radius 12)
|
|
1574
|
+
// teal shadow (offset 0/-4, opacity 0.2, radius 12).
|
|
1575
|
+
// Night: #050505 sheet, top radius 16, hairline accent border.
|
|
1537
1576
|
height: currentHeightRef.current,
|
|
1538
1577
|
display: "flex",
|
|
1539
1578
|
flexDirection: "column",
|
|
1540
|
-
backgroundColor: buoy.card,
|
|
1541
|
-
borderTopLeftRadius: 6,
|
|
1542
|
-
borderTopRightRadius: 6,
|
|
1543
|
-
border: `1px solid ${buoy.border}`,
|
|
1544
|
-
boxShadow: `0 -4px 12px ${buoy.primary}33`,
|
|
1579
|
+
backgroundColor: isNight ? _nightTheme.night.color.bg : buoy.card,
|
|
1580
|
+
borderTopLeftRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1581
|
+
borderTopRightRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1582
|
+
border: isNight ? `1px solid ${_nightTheme.night.color.accent}55` : `1px solid ${buoy.border}`,
|
|
1583
|
+
boxShadow: isNight ? `0 -4px 10px ${_nightTheme.night.color.accent}38` : `0 -4px 12px ${buoy.primary}33`,
|
|
1584
|
+
// Night clips the hoisted star field to the rounded sheet.
|
|
1585
|
+
...(isNight ? {
|
|
1586
|
+
overflow: "hidden"
|
|
1587
|
+
} : null),
|
|
1545
1588
|
boxSizing: "border-box",
|
|
1546
1589
|
position: "relative",
|
|
1547
1590
|
...customStyles.container
|
|
1548
1591
|
},
|
|
1549
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1592
|
+
children: [nightBackdrop, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
1550
1593
|
onPointerDown: handleSheetPointerDown,
|
|
1551
1594
|
onPointerMove: handleSheetPointerMove,
|
|
1552
1595
|
onPointerUp: handleSheetPointerUp,
|
|
1553
1596
|
onPointerCancel: handleSheetPointerCancel,
|
|
1554
1597
|
style: {
|
|
1555
|
-
// native styles.header
|
|
1556
|
-
borderTopLeftRadius: 6,
|
|
1557
|
-
borderTopRightRadius: 6,
|
|
1558
|
-
backgroundColor: buoy.card,
|
|
1598
|
+
// native styles.header; night: transparent glass, no border
|
|
1599
|
+
borderTopLeftRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1600
|
+
borderTopRightRadius: isNight ? _nightTheme.night.radius.sheet : 6,
|
|
1601
|
+
backgroundColor: isNight ? "transparent" : buoy.card,
|
|
1559
1602
|
minHeight: 56,
|
|
1560
|
-
border: `1px solid ${buoy.border}`,
|
|
1603
|
+
border: isNight ? "none" : `1px solid ${buoy.border}`,
|
|
1561
1604
|
boxSizing: "border-box",
|
|
1562
1605
|
display: "flex",
|
|
1563
1606
|
flexDirection: "column",
|
|
@@ -1565,13 +1608,16 @@ const JsModalComponent = ({
|
|
|
1565
1608
|
flexShrink: 0,
|
|
1566
1609
|
touchAction: "none",
|
|
1567
1610
|
userSelect: "none",
|
|
1568
|
-
cursor: "ns-resize"
|
|
1611
|
+
cursor: "ns-resize",
|
|
1612
|
+
// web-only affordance
|
|
1613
|
+
position: "relative"
|
|
1569
1614
|
},
|
|
1570
1615
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHeaderContent, {
|
|
1571
1616
|
header: header,
|
|
1572
1617
|
isResizing: isResizing,
|
|
1573
1618
|
mode: mode,
|
|
1574
|
-
onMinimize: onMinimize ? handleMinimize : undefined
|
|
1619
|
+
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1620
|
+
variant: variant
|
|
1575
1621
|
})
|
|
1576
1622
|
}), windowControlsBlock, hintLoaded && showHint && !hintsDisabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHintBanner, {
|
|
1577
1623
|
onAcknowledge: handleHintAcknowledge
|
|
@@ -8,6 +8,7 @@ var _react = require("react");
|
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var _displayValue = require("../utils/displayValue.js");
|
|
10
10
|
var _index = require("../ui/gameUI/index.js");
|
|
11
|
+
var _nightTheme = require("../ui/night/nightTheme.js");
|
|
11
12
|
var _CopyButton = require("../ui/components/CopyButton.js");
|
|
12
13
|
var _index2 = require("../icons/index.js");
|
|
13
14
|
var _IndentGuidesOverlay = require("./IndentGuidesOverlay.js");
|
|
@@ -57,11 +58,13 @@ const TYPE_COLOR_CACHE = new Map([["string", _index.gameUIColors.dataTypes.strin
|
|
|
57
58
|
// Pre-computed stable styles with React Query-inspired design
|
|
58
59
|
const STABLE_STYLES = _reactNative.StyleSheet.create({
|
|
59
60
|
container: {
|
|
60
|
-
|
|
61
|
-
//
|
|
61
|
+
// Night inset panel: darker than the card it sits in, hairline border —
|
|
62
|
+
// the old white-wash fill (primary+"08") read as a grey slab on the
|
|
63
|
+
// night surfaces. Global on purpose: every tool is moving to night.
|
|
64
|
+
backgroundColor: _nightTheme.night.color.bg,
|
|
62
65
|
borderRadius: 8,
|
|
63
66
|
borderWidth: 1,
|
|
64
|
-
borderColor:
|
|
67
|
+
borderColor: _nightTheme.night.color.border
|
|
65
68
|
},
|
|
66
69
|
header: {
|
|
67
70
|
flexDirection: "column",
|
|
@@ -893,7 +896,14 @@ const VirtualizedItemComponent = ({
|
|
|
893
896
|
style: [STABLE_STYLES.itemContainer, indentStyle],
|
|
894
897
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
895
898
|
"sentry-label": "ignore devtools data explorer item",
|
|
896
|
-
style: [STABLE_STYLES.itemTouchable, isPressed && STABLE_STYLES.itemTouchablePressed,
|
|
899
|
+
style: [STABLE_STYLES.itemTouchable, isPressed && STABLE_STYLES.itemTouchablePressed,
|
|
900
|
+
// The selected wash exists for the action-bar/edit flow. In a plain
|
|
901
|
+
// read-only viewer every expand/collapse tap ALSO selects, which
|
|
902
|
+
// left a permanent grey strip on the last-tapped row (the collapsed
|
|
903
|
+
// root, usually) — so the wash only paints when selection means
|
|
904
|
+
// something. selectedId still tracks either way: the indent-guide
|
|
905
|
+
// depth highlight uses it.
|
|
906
|
+
canEdit && isSelected && STABLE_STYLES.itemSelected, isLongKey && {
|
|
897
907
|
minHeight: LONG_ITEM_HEIGHT,
|
|
898
908
|
paddingVertical: 2
|
|
899
909
|
}],
|