@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.
Files changed (209) hide show
  1. package/lib/commonjs/JsModal.js +156 -20
  2. package/lib/commonjs/JsModal.web.js +85 -39
  3. package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +14 -4
  4. package/lib/commonjs/dataViewer/diffThemes.js +20 -18
  5. package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +8 -8
  6. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  7. package/lib/commonjs/icons/lucide-icons.js +74 -15
  8. package/lib/commonjs/index.js +86 -0
  9. package/lib/commonjs/ui/backgrounds/BackgroundSwitcher.js +248 -74
  10. package/lib/commonjs/ui/backgrounds/README.md +102 -20
  11. package/lib/commonjs/ui/backgrounds/backgroundStore.js +20 -6
  12. package/lib/commonjs/ui/backgrounds/index.js +91 -1
  13. package/lib/commonjs/ui/backgrounds/primitives.js +50 -14
  14. package/lib/commonjs/ui/backgrounds/registry.js +41 -64
  15. package/lib/commonjs/ui/backgrounds/rng.js +21 -0
  16. package/lib/commonjs/ui/backgrounds/skyClock.js +45 -0
  17. package/lib/commonjs/ui/backgrounds/variants/daylight.js +453 -0
  18. package/lib/commonjs/ui/backgrounds/variants/deepField.js +60 -30
  19. package/lib/commonjs/ui/backgrounds/variants/hyperspace.js +218 -0
  20. package/lib/commonjs/ui/backgrounds/variants/liveSky.js +898 -0
  21. package/lib/commonjs/ui/backgrounds/variants/meteors.js +257 -0
  22. package/lib/commonjs/ui/backgrounds/variants/moonlight.js +472 -0
  23. package/lib/commonjs/ui/backgrounds/variants/underwater.js +757 -0
  24. package/lib/commonjs/ui/components/Badge.js +11 -10
  25. package/lib/commonjs/ui/components/CompactRow.js +30 -17
  26. package/lib/commonjs/ui/components/DevToolsCard.js +12 -8
  27. package/lib/commonjs/ui/components/DynamicFilterView.js +43 -41
  28. package/lib/commonjs/ui/components/EventStepperFooter.js +38 -10
  29. package/lib/commonjs/ui/components/FilterComponents.js +11 -11
  30. package/lib/commonjs/ui/components/ModalHeader.js +13 -13
  31. package/lib/commonjs/ui/components/SectionHeader.js +3 -1
  32. package/lib/commonjs/ui/components/StorageTypeBadge.js +3 -2
  33. package/lib/commonjs/ui/components/TabSelector.js +56 -38
  34. package/lib/commonjs/ui/components/ValueTypeBadge.js +7 -6
  35. package/lib/commonjs/ui/components/WindowControls.js +37 -10
  36. package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +8 -0
  37. package/lib/commonjs/ui/night/nightTheme.js +120 -0
  38. package/lib/commonjs/ui/night/primitives.js +498 -0
  39. package/lib/module/JsModal.js +156 -20
  40. package/lib/module/JsModal.web.js +83 -39
  41. package/lib/module/dataViewer/VirtualizedDataExplorer.js +14 -4
  42. package/lib/module/dataViewer/diffThemes.js +20 -18
  43. package/lib/module/dataViewer/tree/TreeDiffViewer.js +9 -9
  44. package/lib/module/hooks/safe-area-impl.js +1 -1
  45. package/lib/module/icons/lucide-icons.js +74 -15
  46. package/lib/module/index.js +4 -0
  47. package/lib/module/ui/backgrounds/BackgroundSwitcher.js +250 -76
  48. package/lib/module/ui/backgrounds/README.md +102 -20
  49. package/lib/module/ui/backgrounds/backgroundStore.js +19 -5
  50. package/lib/module/ui/backgrounds/index.js +11 -2
  51. package/lib/module/ui/backgrounds/primitives.js +53 -16
  52. package/lib/module/ui/backgrounds/registry.js +41 -64
  53. package/lib/module/ui/backgrounds/rng.js +20 -0
  54. package/lib/module/ui/backgrounds/skyClock.js +39 -0
  55. package/lib/module/ui/backgrounds/variants/daylight.js +449 -0
  56. package/lib/module/ui/backgrounds/variants/deepField.js +62 -31
  57. package/lib/module/ui/backgrounds/variants/hyperspace.js +214 -0
  58. package/lib/module/ui/backgrounds/variants/liveSky.js +893 -0
  59. package/lib/module/ui/backgrounds/variants/meteors.js +253 -0
  60. package/lib/module/ui/backgrounds/variants/moonlight.js +468 -0
  61. package/lib/module/ui/backgrounds/variants/underwater.js +753 -0
  62. package/lib/module/ui/components/Badge.js +11 -10
  63. package/lib/module/ui/components/CompactRow.js +30 -17
  64. package/lib/module/ui/components/DevToolsCard.js +12 -8
  65. package/lib/module/ui/components/DynamicFilterView.js +43 -41
  66. package/lib/module/ui/components/EventStepperFooter.js +38 -10
  67. package/lib/module/ui/components/FilterComponents.js +11 -11
  68. package/lib/module/ui/components/ModalHeader.js +13 -13
  69. package/lib/module/ui/components/SectionHeader.js +3 -1
  70. package/lib/module/ui/components/StorageTypeBadge.js +3 -2
  71. package/lib/module/ui/components/TabSelector.js +57 -39
  72. package/lib/module/ui/components/ValueTypeBadge.js +7 -6
  73. package/lib/module/ui/components/WindowControls.js +37 -10
  74. package/lib/module/ui/gameUI/constants/gameUIColors.js +8 -0
  75. package/lib/module/ui/night/nightTheme.js +116 -0
  76. package/lib/module/ui/night/primitives.js +485 -0
  77. package/lib/typescript/commonjs/JsModal.d.ts +18 -0
  78. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/JsModal.web.d.ts +13 -0
  80. package/lib/typescript/commonjs/JsModal.web.d.ts.map +1 -1
  81. package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts +3 -1
  83. package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  85. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  86. package/lib/typescript/commonjs/icons/lucide-icons.d.ts +12 -1
  87. package/lib/typescript/commonjs/icons/lucide-icons.d.ts.map +1 -1
  88. package/lib/typescript/commonjs/index.d.ts +3 -0
  89. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts +26 -6
  91. package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts +3 -0
  93. package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts +7 -1
  95. package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts +18 -3
  97. package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts.map +1 -1
  98. package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts +8 -0
  99. package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts +6 -0
  101. package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts +17 -0
  103. package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts.map +1 -0
  104. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts +1 -1
  105. package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts +30 -0
  107. package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts +19 -4
  109. package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts.map +1 -1
  110. package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts +39 -0
  111. package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts.map +1 -0
  112. package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts +41 -0
  113. package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts.map +1 -0
  114. package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts +26 -0
  115. package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts.map +1 -0
  116. package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts +35 -0
  117. package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts +51 -0
  119. package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/ui/components/Badge.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts +2 -0
  124. package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/ui/components/StorageTypeBadge.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/ui/components/TabSelector.d.ts +9 -0
  127. package/lib/typescript/commonjs/ui/components/TabSelector.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/ui/components/ValueTypeBadge.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts +4 -2
  130. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts +8 -0
  132. package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts +113 -0
  134. package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/ui/night/primitives.d.ts +111 -0
  136. package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +1 -0
  137. package/lib/typescript/module/JsModal.d.ts +18 -0
  138. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  139. package/lib/typescript/module/JsModal.web.d.ts +13 -0
  140. package/lib/typescript/module/JsModal.web.d.ts.map +1 -1
  141. package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
  142. package/lib/typescript/module/dataViewer/diffThemes.d.ts +3 -1
  143. package/lib/typescript/module/dataViewer/diffThemes.d.ts.map +1 -1
  144. package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +1 -1
  145. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  146. package/lib/typescript/module/icons/lucide-icons.d.ts +12 -1
  147. package/lib/typescript/module/icons/lucide-icons.d.ts.map +1 -1
  148. package/lib/typescript/module/index.d.ts +3 -0
  149. package/lib/typescript/module/index.d.ts.map +1 -1
  150. package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts +26 -6
  151. package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts.map +1 -1
  152. package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts +3 -0
  153. package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts.map +1 -1
  154. package/lib/typescript/module/ui/backgrounds/index.d.ts +7 -1
  155. package/lib/typescript/module/ui/backgrounds/index.d.ts.map +1 -1
  156. package/lib/typescript/module/ui/backgrounds/primitives.d.ts +18 -3
  157. package/lib/typescript/module/ui/backgrounds/primitives.d.ts.map +1 -1
  158. package/lib/typescript/module/ui/backgrounds/registry.d.ts +8 -0
  159. package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +1 -1
  160. package/lib/typescript/module/ui/backgrounds/rng.d.ts +6 -0
  161. package/lib/typescript/module/ui/backgrounds/rng.d.ts.map +1 -1
  162. package/lib/typescript/module/ui/backgrounds/skyClock.d.ts +17 -0
  163. package/lib/typescript/module/ui/backgrounds/skyClock.d.ts.map +1 -0
  164. package/lib/typescript/module/ui/backgrounds/types.d.ts +1 -1
  165. package/lib/typescript/module/ui/backgrounds/types.d.ts.map +1 -1
  166. package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts +30 -0
  167. package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts.map +1 -0
  168. package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts +19 -4
  169. package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts.map +1 -1
  170. package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts +39 -0
  171. package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts.map +1 -0
  172. package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts +41 -0
  173. package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts.map +1 -0
  174. package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts +26 -0
  175. package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts.map +1 -0
  176. package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts +35 -0
  177. package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts.map +1 -0
  178. package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts +51 -0
  179. package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts.map +1 -0
  180. package/lib/typescript/module/ui/components/Badge.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
  182. package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +1 -1
  183. package/lib/typescript/module/ui/components/EventStepperFooter.d.ts +2 -0
  184. package/lib/typescript/module/ui/components/EventStepperFooter.d.ts.map +1 -1
  185. package/lib/typescript/module/ui/components/StorageTypeBadge.d.ts.map +1 -1
  186. package/lib/typescript/module/ui/components/TabSelector.d.ts +9 -0
  187. package/lib/typescript/module/ui/components/TabSelector.d.ts.map +1 -1
  188. package/lib/typescript/module/ui/components/ValueTypeBadge.d.ts.map +1 -1
  189. package/lib/typescript/module/ui/components/WindowControls.d.ts +4 -2
  190. package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
  191. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts +8 -0
  192. package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +1 -1
  193. package/lib/typescript/module/ui/night/nightTheme.d.ts +113 -0
  194. package/lib/typescript/module/ui/night/nightTheme.d.ts.map +1 -0
  195. package/lib/typescript/module/ui/night/primitives.d.ts +111 -0
  196. package/lib/typescript/module/ui/night/primitives.d.ts.map +1 -0
  197. package/package.json +4 -4
  198. package/lib/commonjs/ui/backgrounds/variants/lattice.js +0 -579
  199. package/lib/commonjs/ui/backgrounds/variants/starfield.js +0 -210
  200. package/lib/module/ui/backgrounds/variants/lattice.js +0 -575
  201. package/lib/module/ui/backgrounds/variants/starfield.js +0 -206
  202. package/lib/typescript/commonjs/ui/backgrounds/variants/lattice.d.ts +0 -33
  203. package/lib/typescript/commonjs/ui/backgrounds/variants/lattice.d.ts.map +0 -1
  204. package/lib/typescript/commonjs/ui/backgrounds/variants/starfield.d.ts +0 -12
  205. package/lib/typescript/commonjs/ui/backgrounds/variants/starfield.d.ts.map +0 -1
  206. package/lib/typescript/module/ui/backgrounds/variants/lattice.d.ts +0 -33
  207. package/lib/typescript/module/ui/backgrounds/variants/lattice.d.ts.map +0 -1
  208. package/lib/typescript/module/ui/backgrounds/variants/starfield.d.ts +0 -12
  209. package/lib/typescript/module/ui/backgrounds/variants/starfield.d.ts.map +0 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { View, Text, TouchableOpacity, TextInput, StyleSheet } from "react-native";
4
4
  import { X, Plus } from "../../icons/index.js";
5
- import { buoyColors } from "../gameUI/constants/gameUIColors.js";
5
+ import { night } from "../night/nightTheme.js";
6
6
 
7
7
  // Container for filter section
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -165,7 +165,7 @@ export function FilterList({
165
165
  const styles = StyleSheet.create({
166
166
  filterSection: {
167
167
  padding: 16,
168
- backgroundColor: buoyColors.base
168
+ backgroundColor: "transparent"
169
169
  },
170
170
  badge: {
171
171
  flexDirection: "row",
@@ -188,10 +188,10 @@ const styles = StyleSheet.create({
188
188
  inputContainer: {
189
189
  flexDirection: "row",
190
190
  alignItems: "center",
191
- backgroundColor: buoyColors.input,
191
+ backgroundColor: night.color.surfaceElevated,
192
192
  borderRadius: 10,
193
193
  borderWidth: 1,
194
- borderColor: buoyColors.border,
194
+ borderColor: night.color.border,
195
195
  paddingHorizontal: 14,
196
196
  paddingVertical: 10,
197
197
  marginBottom: 8
@@ -200,7 +200,7 @@ const styles = StyleSheet.create({
200
200
  flex: 1,
201
201
  fontSize: 13,
202
202
  paddingVertical: 0,
203
- color: buoyColors.text
203
+ color: night.color.text
204
204
  },
205
205
  inputButtons: {
206
206
  flexDirection: "row",
@@ -210,7 +210,7 @@ const styles = StyleSheet.create({
210
210
  cancelButton: {
211
211
  padding: 4,
212
212
  borderRadius: 6,
213
- backgroundColor: buoyColors.hover
213
+ backgroundColor: night.color.surfaceElevated
214
214
  },
215
215
  inlineAddButton: {
216
216
  paddingHorizontal: 12,
@@ -231,8 +231,8 @@ const styles = StyleSheet.create({
231
231
  borderRadius: 10,
232
232
  borderWidth: 1,
233
233
  borderStyle: "dashed",
234
- borderColor: buoyColors.border,
235
- backgroundColor: buoyColors.input
234
+ borderColor: night.color.border,
235
+ backgroundColor: night.color.surfaceElevated
236
236
  },
237
237
  addButtonText: {
238
238
  fontSize: 13,
@@ -248,17 +248,17 @@ const styles = StyleSheet.create({
248
248
  justifyContent: "space-between",
249
249
  paddingVertical: 10,
250
250
  paddingHorizontal: 12,
251
- backgroundColor: buoyColors.hover,
251
+ backgroundColor: night.color.surfaceElevated,
252
252
  borderRadius: 8,
253
253
  borderWidth: 1,
254
- borderColor: buoyColors.border
254
+ borderColor: night.color.border
255
255
  },
256
256
  filterItemText: {
257
257
  flex: 1,
258
258
  fontSize: 12,
259
259
  fontFamily: "monospace",
260
260
  marginRight: 8,
261
- color: buoyColors.text
261
+ color: night.color.text
262
262
  },
263
263
  filterItemMeta: {
264
264
  marginRight: 8
@@ -3,7 +3,7 @@
3
3
  import { View, Text, TextInput, TouchableOpacity, StyleSheet } from "react-native";
4
4
  import { useEffect, useRef } from "react";
5
5
  import { ChevronLeft, Search as SearchIcon, X } from "../../icons/index.js";
6
- import { buoyColors } from "../gameUI/constants/gameUIColors.js";
6
+ import { night } from "../night/nightTheme.js";
7
7
 
8
8
  // Base ModalHeader container component
9
9
  // Note: onClose and onMinimize are now handled by WindowControls in JsModal
@@ -37,7 +37,7 @@ export function Navigation({
37
37
  style: styles.navigationButton,
38
38
  children: closeIcon || /*#__PURE__*/_jsx(X, {
39
39
  size: 20,
40
- color: buoyColors.textMuted
40
+ color: night.color.textSecondary
41
41
  })
42
42
  })]
43
43
  });
@@ -50,7 +50,7 @@ export function Navigation({
50
50
  style: styles.navigationButton,
51
51
  children: backIcon || /*#__PURE__*/_jsx(ChevronLeft, {
52
52
  size: 20,
53
- color: buoyColors.textSecondary
53
+ color: night.color.textSecondary
54
54
  })
55
55
  });
56
56
  }
@@ -63,7 +63,7 @@ export function Navigation({
63
63
  style: styles.navigationButton,
64
64
  children: backIcon || /*#__PURE__*/_jsx(ChevronLeft, {
65
65
  size: 20,
66
- color: buoyColors.textSecondary
66
+ color: night.color.textSecondary
67
67
  })
68
68
  });
69
69
  }
@@ -131,12 +131,12 @@ export function HeaderSearch({
131
131
  style: styles.searchContainer,
132
132
  children: [/*#__PURE__*/_jsx(SearchIcon, {
133
133
  size: 12,
134
- color: buoyColors.textSecondary
134
+ color: night.color.textSecondary
135
135
  }), /*#__PURE__*/_jsx(TextInput, {
136
136
  ref: inputRef,
137
137
  style: styles.searchInput,
138
138
  placeholder: placeholder,
139
- placeholderTextColor: buoyColors.textMuted,
139
+ placeholderTextColor: night.color.placeholder,
140
140
  value: value,
141
141
  onChangeText: onChangeText,
142
142
  autoCorrect: false,
@@ -146,7 +146,7 @@ export function HeaderSearch({
146
146
  style: styles.searchCancelButton,
147
147
  children: /*#__PURE__*/_jsx(X, {
148
148
  size: 12,
149
- color: buoyColors.textSecondary
149
+ color: night.color.textSecondary
150
150
  })
151
151
  })]
152
152
  });
@@ -181,7 +181,7 @@ const styles = StyleSheet.create({
181
181
  justifyContent: "center"
182
182
  },
183
183
  headerTitle: {
184
- color: buoyColors.text,
184
+ color: night.color.text,
185
185
  fontSize: 14,
186
186
  fontWeight: "500"
187
187
  },
@@ -190,7 +190,7 @@ const styles = StyleSheet.create({
190
190
  },
191
191
  headerSubtitle: {
192
192
  fontSize: 12,
193
- color: buoyColors.textSecondary,
193
+ color: night.color.textSecondary,
194
194
  marginTop: 2
195
195
  },
196
196
  headerSubtitleCentered: {
@@ -209,21 +209,21 @@ const styles = StyleSheet.create({
209
209
  flexDirection: "row",
210
210
  alignItems: "center",
211
211
  flex: 1,
212
- backgroundColor: buoyColors.input,
213
- borderRadius: 6,
212
+ backgroundColor: night.color.surfaceElevated,
213
+ borderRadius: 10,
214
214
  paddingHorizontal: 10,
215
215
  paddingVertical: 4,
216
216
  marginHorizontal: 12,
217
217
  marginVertical: 4,
218
218
  height: 32,
219
219
  borderWidth: 1,
220
- borderColor: buoyColors.border
220
+ borderColor: night.color.border
221
221
  },
222
222
  searchInput: {
223
223
  flex: 1,
224
224
  marginLeft: 8,
225
225
  fontSize: 13,
226
- color: buoyColors.text,
226
+ color: night.color.text,
227
227
  padding: 0,
228
228
  height: "100%"
229
229
  },
@@ -90,7 +90,9 @@ const styles = StyleSheet.create({
90
90
  alignItems: "center",
91
91
  paddingHorizontal: 16,
92
92
  paddingVertical: 8,
93
- backgroundColor: buoyColors.base,
93
+ // Transparent (was the opaque buoy base): section headers sit on night
94
+ // surfaces now, and an opaque strip breaks the star field behind them.
95
+ backgroundColor: "transparent",
94
96
  minHeight: 40
95
97
  },
96
98
  iconWrapper: {
@@ -3,6 +3,7 @@
3
3
  import { View, Text, StyleSheet } from "react-native";
4
4
  import { Database, Lock, HardDrive } from "../../icons/index.js";
5
5
  import { buoyColors } from "../gameUI/constants/gameUIColors.js";
6
+ import { night } from "../night/nightTheme.js";
6
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
8
  export function StorageTypeBadge({
8
9
  type,
@@ -13,13 +14,13 @@ export function StorageTypeBadge({
13
14
  const getStorageColor = () => {
14
15
  switch (type) {
15
16
  case "async":
16
- return buoyColors.textSecondary;
17
+ return night.color.textSecondary;
17
18
  case "mmkv":
18
19
  return buoyColors.success;
19
20
  case "secure":
20
21
  return buoyColors.warning;
21
22
  default:
22
- return buoyColors.textMuted;
23
+ return night.color.textTertiary;
23
24
  }
24
25
  };
25
26
  const getStorageText = () => {
@@ -1,8 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  import { View, Text, TouchableOpacity, StyleSheet } from "react-native";
4
- import { buoyColors } from "../gameUI/constants/gameUIColors.js";
5
- import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { night } from "../night/nightTheme.js";
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * Header tab strip — the night segmented control (see ui/night): `#050505`
8
+ * track, `#161618` thumb, accent underline glow under the active label.
9
+ *
10
+ * Same props API it has always had, so every tool header that mounts it got
11
+ * the night look in one shared edit. Visually identical to `NightSegmented`
12
+ * at its compact size — new night-native code should prefer that primitive;
13
+ * this component exists so existing consumers convert without a code change.
14
+ */
6
15
  export function TabSelector({
7
16
  tabs,
8
17
  activeTab,
@@ -10,60 +19,69 @@ export function TabSelector({
10
19
  }) {
11
20
  return /*#__PURE__*/_jsx(View, {
12
21
  style: styles.container,
13
- children: tabs.map(tab => /*#__PURE__*/_jsx(TouchableOpacity, {
14
- "sentry-label": "ignore user interaction",
15
- accessibilityLabel: tab.label,
16
- accessibilityHint: `View ${tab.label.toLowerCase()}`,
17
- onPress: () => onTabChange(tab.key),
18
- style: [styles.tabButton, activeTab === tab.key ? styles.tabButtonActive : styles.tabButtonInactive],
19
- children: /*#__PURE__*/_jsx(Text, {
20
- style: [styles.tabButtonText, activeTab === tab.key ? styles.tabButtonTextActive : styles.tabButtonTextInactive],
21
- children: tab.label
22
- })
23
- }, tab.key))
22
+ children: tabs.map(tab => {
23
+ const active = activeTab === tab.key;
24
+ return /*#__PURE__*/_jsxs(TouchableOpacity, {
25
+ "sentry-label": "ignore user interaction",
26
+ accessibilityRole: "tab",
27
+ accessibilityState: {
28
+ selected: active
29
+ },
30
+ accessibilityLabel: tab.label,
31
+ accessibilityHint: `View ${tab.label.toLowerCase()}`,
32
+ onPress: () => onTabChange(tab.key),
33
+ style: [styles.tabButton, active && styles.tabButtonActive],
34
+ children: [/*#__PURE__*/_jsx(Text, {
35
+ style: [styles.tabButtonText, active && styles.tabButtonTextActive],
36
+ children: tab.label
37
+ }), active ? /*#__PURE__*/_jsx(View, {
38
+ style: styles.underline
39
+ }) : null]
40
+ }, tab.key);
41
+ })
24
42
  });
25
43
  }
26
44
  const styles = StyleSheet.create({
27
45
  container: {
28
46
  flexDirection: "row",
29
- backgroundColor: buoyColors.hover,
30
- borderRadius: 6,
31
- padding: 2,
47
+ backgroundColor: night.color.bg,
48
+ borderRadius: night.radius.row,
32
49
  borderWidth: 1,
33
- borderColor: buoyColors.border,
34
- justifyContent: "space-evenly",
35
- height: 28
50
+ borderColor: night.color.border,
51
+ padding: 3
36
52
  },
37
53
  tabButton: {
38
- paddingHorizontal: 8,
39
- paddingVertical: 3,
40
- borderRadius: 4,
54
+ flex: 1,
55
+ paddingVertical: 5,
41
56
  alignItems: "center",
42
57
  justifyContent: "center",
43
- flex: 1,
44
- marginHorizontal: 1
58
+ borderRadius: night.radius.segment
45
59
  },
46
- /**
47
- * The selected tab is marked with an accent ring.
48
- */
49
60
  tabButtonActive: {
50
- backgroundColor: buoyColors.primary + "20",
51
- borderWidth: 1,
52
- borderColor: buoyColors.primary
53
- },
54
- tabButtonInactive: {
55
- backgroundColor: "transparent"
61
+ backgroundColor: night.color.surfaceElevated
56
62
  },
57
63
  tabButtonText: {
58
64
  fontSize: 12,
59
- fontWeight: "600",
60
- letterSpacing: 0.5,
61
- textTransform: "uppercase"
65
+ fontWeight: "500",
66
+ color: night.color.textSecondary
62
67
  },
63
68
  tabButtonTextActive: {
64
- color: buoyColors.primary
69
+ fontWeight: "600",
70
+ color: night.color.text
65
71
  },
66
- tabButtonTextInactive: {
67
- color: buoyColors.textMuted
72
+ underline: {
73
+ position: "absolute",
74
+ bottom: 1.5,
75
+ width: 20,
76
+ height: 2,
77
+ borderRadius: 1,
78
+ backgroundColor: night.color.accent,
79
+ shadowColor: night.color.accent,
80
+ shadowOffset: {
81
+ width: 0,
82
+ height: 0
83
+ },
84
+ shadowOpacity: 0.6,
85
+ shadowRadius: 6
68
86
  }
69
87
  });
@@ -3,6 +3,7 @@
3
3
  import { View, Text, StyleSheet } from "react-native";
4
4
  import { CheckCircle, XCircle } from "../../icons/index.js";
5
5
  import { buoyColors } from "../gameUI/constants/gameUIColors.js";
6
+ import { night } from "../night/nightTheme.js";
6
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
8
  export function ValueTypeBadge({
8
9
  type,
@@ -71,12 +72,12 @@ export function ValueTypeBadge({
71
72
  return buoyColors.primary;
72
73
  case "null":
73
74
  case "undefined":
74
- return buoyColors.textMuted;
75
+ return night.color.textTertiary;
75
76
  case "object":
76
77
  case "array":
77
- return buoyColors.textSecondary;
78
+ return night.color.textSecondary;
78
79
  default:
79
- return buoyColors.textMuted;
80
+ return night.color.textTertiary;
80
81
  }
81
82
  };
82
83
  return /*#__PURE__*/_jsx(View, {
@@ -131,12 +132,12 @@ const styles = StyleSheet.create({
131
132
  backgroundColor: buoyColors.primary + "1A"
132
133
  },
133
134
  secondaryBadge: {
134
- backgroundColor: buoyColors.textSecondary + "1A"
135
+ backgroundColor: night.color.textSecondary + "1A"
135
136
  },
136
137
  mutedBadge: {
137
- backgroundColor: buoyColors.textMuted + "1A"
138
+ backgroundColor: night.color.textTertiary + "1A"
138
139
  },
139
140
  defaultBadge: {
140
- backgroundColor: buoyColors.textMuted + "1A"
141
+ backgroundColor: night.color.textTertiary + "1A"
141
142
  }
142
143
  });
@@ -4,6 +4,7 @@ import { useState, useRef, useCallback, useEffect } from "react";
4
4
  import { View, TouchableOpacity, TouchableWithoutFeedback, StyleSheet, Animated, Modal, Platform } from "react-native";
5
5
  import { X, Minus, DockBottom, FloatWindow } from "../../icons/index.js";
6
6
  import { buoyColors } from "../gameUI/constants/gameUIColors.js";
7
+ import { night } from "../night/nightTheme.js";
7
8
 
8
9
  // ============================================================================
9
10
  // Global expandable setting — controlled via setExpandableWindowControls()
@@ -68,7 +69,8 @@ export function WindowControls({
68
69
  onClose,
69
70
  onMinimize,
70
71
  onToggleMode,
71
- mode
72
+ mode,
73
+ variant = "night"
72
74
  }) {
73
75
  // Show action-based icon: what will happen when clicked
74
76
  const ToggleModeIcon = mode === "floating" ? DockBottom : FloatWindow;
@@ -121,15 +123,18 @@ export function WindowControls({
121
123
  onClose: onClose,
122
124
  onMinimize: onMinimize,
123
125
  onToggleMode: onToggleMode,
124
- mode: mode
126
+ mode: mode,
127
+ variant: variant
125
128
  });
126
129
  }
127
130
  function ExpandableWindowControls({
128
131
  onClose,
129
132
  onMinimize,
130
133
  onToggleMode,
131
- mode
134
+ mode,
135
+ variant = "night"
132
136
  }) {
137
+ const isNight = variant === "night";
133
138
  const [expanded, setExpanded] = useState(false);
134
139
  const [triggerLayout, setTriggerLayout] = useState(null);
135
140
  const expandAnim = useRef(new Animated.Value(0)).current;
@@ -263,38 +268,38 @@ function ExpandableWindowControls({
263
268
  }],
264
269
  children: /*#__PURE__*/_jsx(TouchableWithoutFeedback, {
265
270
  children: /*#__PURE__*/_jsxs(View, {
266
- style: styles.expandedContainer,
271
+ style: [styles.expandedContainer, isNight && styles.nightExpandedContainer],
267
272
  children: [onMinimize && /*#__PURE__*/_jsx(TouchableOpacity, {
268
273
  onPress: () => handleAction(onMinimize),
269
- style: [styles.expandedButton, styles.minimizeButtonExpanded],
274
+ style: [styles.expandedButton, isNight ? styles.nightMinimizeButton : styles.minimizeButtonExpanded],
270
275
  activeOpacity: 0.7,
271
276
  accessibilityLabel: "Minimize modal",
272
277
  accessibilityRole: "button",
273
278
  children: /*#__PURE__*/_jsx(Minus, {
274
279
  size: EXPANDED_ICON_SIZE,
275
- color: "#7A5A00",
280
+ color: isNight ? night.color.warning : "#7A5A00",
276
281
  strokeWidth: 2
277
282
  })
278
283
  }), onToggleMode && /*#__PURE__*/_jsx(TouchableOpacity, {
279
284
  onPress: () => handleAction(onToggleMode),
280
- style: [styles.expandedButton, styles.expandButtonExpanded],
285
+ style: [styles.expandedButton, isNight ? styles.nightToggleButton : styles.expandButtonExpanded],
281
286
  activeOpacity: 0.7,
282
287
  accessibilityLabel: toggleModeLabel,
283
288
  accessibilityRole: "button",
284
289
  children: /*#__PURE__*/_jsx(ToggleModeIcon, {
285
290
  size: EXPANDED_ICON_SIZE,
286
- color: "#004A1A",
291
+ color: isNight ? night.color.accent : "#004A1A",
287
292
  strokeWidth: 2
288
293
  })
289
294
  }), /*#__PURE__*/_jsx(TouchableOpacity, {
290
295
  onPress: () => handleAction(onClose),
291
- style: [styles.expandedButton, styles.closeButtonExpanded],
296
+ style: [styles.expandedButton, isNight ? styles.nightCloseButton : styles.closeButtonExpanded],
292
297
  activeOpacity: 0.7,
293
298
  accessibilityLabel: "Close modal",
294
299
  accessibilityRole: "button",
295
300
  children: /*#__PURE__*/_jsx(X, {
296
301
  size: EXPANDED_ICON_SIZE,
297
- color: "#4A0000",
302
+ color: isNight ? night.color.danger : "#4A0000",
298
303
  strokeWidth: 2
299
304
  })
300
305
  })]
@@ -377,5 +382,27 @@ const styles = StyleSheet.create({
377
382
  },
378
383
  expandButtonExpanded: {
379
384
  backgroundColor: COLORS.toggleMode
385
+ },
386
+ // ── Night variant (Everlights language — see ui/night/nightTheme.ts):
387
+ // near-black plate, hairline border, soft-tinted circles with toned icons
388
+ // instead of the solid macOS traffic lights.
389
+ nightExpandedContainer: {
390
+ backgroundColor: night.color.surface,
391
+ borderColor: night.color.border
392
+ },
393
+ nightMinimizeButton: {
394
+ backgroundColor: night.color.warningSoft,
395
+ borderWidth: 1,
396
+ borderColor: night.color.warning + "59"
397
+ },
398
+ nightToggleButton: {
399
+ backgroundColor: night.color.accentSoft,
400
+ borderWidth: 1,
401
+ borderColor: night.color.accentBorderStrong
402
+ },
403
+ nightCloseButton: {
404
+ backgroundColor: night.color.dangerSoft,
405
+ borderWidth: 1,
406
+ borderColor: night.color.danger + "59"
380
407
  }
381
408
  });
@@ -174,6 +174,14 @@ export const buoyColors = {
174
174
  // Backgrounds (dark to light)
175
175
  base: "#121212",
176
176
  card: "#1A1A1A",
177
+ /**
178
+ * Card fill for surfaces that sit over a ToolBackground: translucent so the
179
+ * field reads through, but calibrated against the BRIGHTEST scene in the
180
+ * catalogue (Live Sky's noon clouds/sun bloom, ~215 luminance) so a card's
181
+ * backing stays ≤ ~45 luminance and text never washes out. Over the "off"
182
+ * preset it is visually indistinguishable from `card`.
183
+ */
184
+ cardScrim: "rgba(10,13,20,0.9)",
177
185
  hover: "#242424",
178
186
  input: "#2A2A2A",
179
187
  // Borders
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * "Night" design tokens — the Everlights surface language, ported.
5
+ *
6
+ * A near-black, smooth, borderless-feeling system built to sit ON TOP of the
7
+ * shared ToolBackground star field: one `#050505` sheet the field shows
8
+ * through, `#0C0C0C` cards with hairline `#1A1A1C` borders, `#161618` rows
9
+ * inside them, uppercase section labels OUTSIDE the cards, and a single green
10
+ * accent that takes dark ink.
11
+ *
12
+ * Values are lifted 1:1 from the Everlights app's `constants/theme.ts`
13
+ * (`Palette` + `DarkColors`) and its modal tokens — that app is the design
14
+ * reference, so when in doubt match it, don't invent.
15
+ *
16
+ * THE ACCENT IS ONE SEAM: everything green reads `night.color.accent*`. The
17
+ * family is Buoy's brand green (`buoyColors.primary`, #20C997 — kept as
18
+ * literals so this module stays import-free); swapping it is a seven-line
19
+ * change here and nowhere else. `onAccent` stays black — this green wants
20
+ * dark ink.
21
+ *
22
+ * SCOPE: piloted on the dial menu's settings modal (JsModal `variant="night"`
23
+ * + DevToolsSettingsModal). If it sticks, convert the other tools to it.
24
+ */
25
+
26
+ export const night = {
27
+ color: {
28
+ /** The sheet itself — also the inset track of a segmented control. */
29
+ bg: "#050505",
30
+ /** A card. */
31
+ surface: "#0C0C0C",
32
+ /** A row or control inside a card. */
33
+ surfaceElevated: "#161618",
34
+ /** Hairline card border. */
35
+ border: "#1A1A1C",
36
+ /** Hairline between rows inside a card. */
37
+ separator: "rgba(255, 255, 255, 0.08)",
38
+ /** Neutral fills, lightest → strongest. */
39
+ fill: "rgba(255, 255, 255, 0.06)",
40
+ fillSecondary: "rgba(255, 255, 255, 0.08)",
41
+ fillTertiary: "rgba(255, 255, 255, 0.12)",
42
+ /** Chip resting fill — dark glass, readable over the star field. */
43
+ buttonSurface: "rgba(8, 10, 14, 0.85)",
44
+ /** Secondary/destructive button plate. */
45
+ button: "#1C1C1C",
46
+ buttonPressed: "#2C2C2E",
47
+ text: "#ECEDEE",
48
+ textSecondary: "#9BA1A6",
49
+ textTertiary: "#636366",
50
+ /** Drag handles, input placeholders. */
51
+ placeholder: "rgba(255, 255, 255, 0.30)",
52
+ /** The one accent (Buoy brand green). See the header note — one seam. */
53
+ accent: "#20C997",
54
+ accentPressed: "#1BAB80",
55
+ accentSoft: "rgba(32, 201, 151, 0.12)",
56
+ accentFill: "rgba(32, 201, 151, 0.18)",
57
+ accentBorder: "rgba(32, 201, 151, 0.20)",
58
+ accentBorderStrong: "rgba(32, 201, 151, 0.35)",
59
+ /** Ink on a filled accent surface — the accent takes DARK ink. */
60
+ onAccent: "#000000",
61
+ danger: "#FF3B30",
62
+ dangerSoft: "rgba(255, 59, 48, 0.10)",
63
+ warning: "#FF8329",
64
+ warningSoft: "rgba(255, 131, 41, 0.12)",
65
+ info: "#1E6DFF",
66
+ infoSoft: "rgba(30, 109, 255, 0.12)",
67
+ /** Switch thumb at rest (Everlights moon gray). */
68
+ knob: "#D4D8DC"
69
+ },
70
+ radius: {
71
+ /** Sheets and dialogs. */
72
+ sheet: 16,
73
+ /** Cards. */
74
+ card: 14,
75
+ /** Inputs and code blocks. */
76
+ input: 12,
77
+ /** Rows and inner controls; also the segmented-control track. */
78
+ row: 10,
79
+ /** Segment thumb inside a radius-10 track. */
80
+ segment: 8,
81
+ /** Small badges. */
82
+ badge: 6,
83
+ /** Zone-style chips. */
84
+ chip: 20,
85
+ /** Fully rounded pills (buttons use height/2 instead). */
86
+ pill: 999
87
+ },
88
+ /** Screen/sheet horizontal margin. */
89
+ gutter: 16,
90
+ /** Section labels sit 4pt in from the card edge. */
91
+ labelInset: 4,
92
+ /** Vertical rhythm between labeled card groups. */
93
+ groupGap: 24,
94
+ /** Card interior padding. */
95
+ cardPad: 14,
96
+ /** Row padding inside an edge-to-edge card. */
97
+ rowPadH: 16,
98
+ rowPadV: 14,
99
+ font: {
100
+ /** Sheet/modal titles. */
101
+ title: 17,
102
+ /** Row labels and values. */
103
+ row: 15,
104
+ /** Body copy, chip labels. */
105
+ body: 14,
106
+ /** Segmented-control labels, captions, footnotes. */
107
+ caption: 13,
108
+ /** Uppercase section labels. */
109
+ label: 12,
110
+ /** Uppercase micro labels (START/END style). */
111
+ micro: 11
112
+ }
113
+ };
114
+
115
+ /** Section labels track wide open, Everlights-style. */
116
+ export const NIGHT_LABEL_TRACKING = 0.8;