@optimizely/ocp-local-env 1.0.0-beta.10

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 (244) hide show
  1. package/README.md +51 -0
  2. package/dist/package.json +112 -0
  3. package/dist/public/bundle.82dc5d29fffb9f205051.js +3 -0
  4. package/dist/public/bundle.82dc5d29fffb9f205051.js.LICENSE.txt +92 -0
  5. package/dist/public/bundle.82dc5d29fffb9f205051.js.map +1 -0
  6. package/dist/public/index.html +1 -0
  7. package/dist/src/cli.d.ts +2 -0
  8. package/dist/src/cli.js +115 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/executor/DestinationExecutor.d.ts +19 -0
  11. package/dist/src/executor/DestinationExecutor.js +72 -0
  12. package/dist/src/executor/DestinationExecutor.js.map +1 -0
  13. package/dist/src/executor/FunctionExecutor.d.ts +67 -0
  14. package/dist/src/executor/FunctionExecutor.js +189 -0
  15. package/dist/src/executor/FunctionExecutor.js.map +1 -0
  16. package/dist/src/executor/JobExecutor.d.ts +79 -0
  17. package/dist/src/executor/JobExecutor.js +215 -0
  18. package/dist/src/executor/JobExecutor.js.map +1 -0
  19. package/dist/src/executor/LifecycleExecutor.d.ts +64 -0
  20. package/dist/src/executor/LifecycleExecutor.js +167 -0
  21. package/dist/src/executor/LifecycleExecutor.js.map +1 -0
  22. package/dist/src/executor/SourceExecutor.d.ts +32 -0
  23. package/dist/src/executor/SourceExecutor.js +163 -0
  24. package/dist/src/executor/SourceExecutor.js.map +1 -0
  25. package/dist/src/executor/watcher.d.ts +62 -0
  26. package/dist/src/executor/watcher.js +213 -0
  27. package/dist/src/executor/watcher.js.map +1 -0
  28. package/dist/src/functions/hello.d.ts +4 -0
  29. package/dist/src/functions/hello.js +8 -0
  30. package/dist/src/functions/hello.js.map +1 -0
  31. package/dist/src/index.d.ts +1 -0
  32. package/dist/src/index.js +9 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/jobs/dailyJob.d.ts +4 -0
  35. package/dist/src/jobs/dailyJob.js +8 -0
  36. package/dist/src/jobs/dailyJob.js.map +1 -0
  37. package/dist/src/local_engine/LocalFunctionApi.d.ts +17 -0
  38. package/dist/src/local_engine/LocalFunctionApi.js +54 -0
  39. package/dist/src/local_engine/LocalFunctionApi.js.map +1 -0
  40. package/dist/src/local_engine/LocalJobApi.d.ts +67 -0
  41. package/dist/src/local_engine/LocalJobApi.js +205 -0
  42. package/dist/src/local_engine/LocalJobApi.js.map +1 -0
  43. package/dist/src/local_engine/LocalNotifier.d.ts +9 -0
  44. package/dist/src/local_engine/LocalNotifier.js +26 -0
  45. package/dist/src/local_engine/LocalNotifier.js.map +1 -0
  46. package/dist/src/local_engine/local-engine-child-base.d.ts +110 -0
  47. package/dist/src/local_engine/local-engine-child-base.js +607 -0
  48. package/dist/src/local_engine/local-engine-child-base.js.map +1 -0
  49. package/dist/src/local_engine/local-engine-client.d.ts +161 -0
  50. package/dist/src/local_engine/local-engine-client.js +888 -0
  51. package/dist/src/local_engine/local-engine-client.js.map +1 -0
  52. package/dist/src/local_engine/local-engine-types.d.ts +245 -0
  53. package/dist/src/local_engine/local-engine-types.js +6 -0
  54. package/dist/src/local_engine/local-engine-types.js.map +1 -0
  55. package/dist/src/local_engine/local-engine-unified.d.ts +71 -0
  56. package/dist/src/local_engine/local-engine-unified.js +723 -0
  57. package/dist/src/local_engine/local-engine-unified.js.map +1 -0
  58. package/dist/src/local_engine/local-engine-utils.d.ts +68 -0
  59. package/dist/src/local_engine/local-engine-utils.js +219 -0
  60. package/dist/src/local_engine/local-engine-utils.js.map +1 -0
  61. package/dist/src/local_engine/localSDKConfig.d.ts +40 -0
  62. package/dist/src/local_engine/localSDKConfig.js +247 -0
  63. package/dist/src/local_engine/localSDKConfig.js.map +1 -0
  64. package/dist/src/local_engine/storage/BaseKVStoreWrapper.d.ts +37 -0
  65. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js +110 -0
  66. package/dist/src/local_engine/storage/BaseKVStoreWrapper.js.map +1 -0
  67. package/dist/src/local_engine/storage/LocalConfigStore.d.ts +74 -0
  68. package/dist/src/local_engine/storage/LocalConfigStore.js +178 -0
  69. package/dist/src/local_engine/storage/LocalConfigStore.js.map +1 -0
  70. package/dist/src/local_engine/storage/LocalJobStore.d.ts +111 -0
  71. package/dist/src/local_engine/storage/LocalJobStore.js +249 -0
  72. package/dist/src/local_engine/storage/LocalJobStore.js.map +1 -0
  73. package/dist/src/local_engine/storage/LocalKVStore.d.ts +106 -0
  74. package/dist/src/local_engine/storage/LocalKVStore.js +1061 -0
  75. package/dist/src/local_engine/storage/LocalKVStore.js.map +1 -0
  76. package/dist/src/local_engine/storage/LocalNotificationStore.d.ts +28 -0
  77. package/dist/src/local_engine/storage/LocalNotificationStore.js +149 -0
  78. package/dist/src/local_engine/storage/LocalNotificationStore.js.map +1 -0
  79. package/dist/src/local_engine/storage/LocalSecretsStore.d.ts +115 -0
  80. package/dist/src/local_engine/storage/LocalSecretsStore.js +350 -0
  81. package/dist/src/local_engine/storage/LocalSecretsStore.js.map +1 -0
  82. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.d.ts +19 -0
  83. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js +52 -0
  84. package/dist/src/local_engine/storage/LocalSecretsStoreWrapper.js.map +1 -0
  85. package/dist/src/local_engine/storage/LocalSettingsStore.d.ts +168 -0
  86. package/dist/src/local_engine/storage/LocalSettingsStore.js +509 -0
  87. package/dist/src/local_engine/storage/LocalSettingsStore.js.map +1 -0
  88. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.d.ts +15 -0
  89. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js +28 -0
  90. package/dist/src/local_engine/storage/LocalSettingsStoreWrapper.js.map +1 -0
  91. package/dist/src/local_engine/storage/NumberSet.d.ts +21 -0
  92. package/dist/src/local_engine/storage/NumberSet.js +32 -0
  93. package/dist/src/local_engine/storage/NumberSet.js.map +1 -0
  94. package/dist/src/local_engine/storage/SourceDataStore.d.ts +23 -0
  95. package/dist/src/local_engine/storage/SourceDataStore.js +83 -0
  96. package/dist/src/local_engine/storage/SourceDataStore.js.map +1 -0
  97. package/dist/src/local_engine/storage/SourceJobExecutionStore.d.ts +25 -0
  98. package/dist/src/local_engine/storage/SourceJobExecutionStore.js +61 -0
  99. package/dist/src/local_engine/storage/SourceJobExecutionStore.js.map +1 -0
  100. package/dist/src/local_engine/storage/StringSet.d.ts +21 -0
  101. package/dist/src/local_engine/storage/StringSet.js +32 -0
  102. package/dist/src/local_engine/storage/StringSet.js.map +1 -0
  103. package/dist/src/local_engine/types.d.ts +53 -0
  104. package/dist/src/local_engine/types.js +6 -0
  105. package/dist/src/local_engine/types.js.map +1 -0
  106. package/dist/src/local_engine/utils.d.ts +33 -0
  107. package/dist/src/local_engine/utils.js +143 -0
  108. package/dist/src/local_engine/utils.js.map +1 -0
  109. package/dist/src/logging/LogManager.d.ts +246 -0
  110. package/dist/src/logging/LogManager.js +343 -0
  111. package/dist/src/logging/LogManager.js.map +1 -0
  112. package/dist/src/server/api/destinations.d.ts +7 -0
  113. package/dist/src/server/api/destinations.js +170 -0
  114. package/dist/src/server/api/destinations.js.map +1 -0
  115. package/dist/src/server/api/functions.d.ts +7 -0
  116. package/dist/src/server/api/functions.js +80 -0
  117. package/dist/src/server/api/functions.js.map +1 -0
  118. package/dist/src/server/api/jobs.d.ts +10 -0
  119. package/dist/src/server/api/jobs.js +244 -0
  120. package/dist/src/server/api/jobs.js.map +1 -0
  121. package/dist/src/server/api/settings.d.ts +6 -0
  122. package/dist/src/server/api/settings.js +116 -0
  123. package/dist/src/server/api/settings.js.map +1 -0
  124. package/dist/src/server/api/sources.d.ts +7 -0
  125. package/dist/src/server/api/sources.js +382 -0
  126. package/dist/src/server/api/sources.js.map +1 -0
  127. package/dist/src/server/api/stores.d.ts +2 -0
  128. package/dist/src/server/api/stores.js +341 -0
  129. package/dist/src/server/api/stores.js.map +1 -0
  130. package/dist/src/server/api/v1.d.ts +10 -0
  131. package/dist/src/server/api/v1.js +718 -0
  132. package/dist/src/server/api/v1.js.map +1 -0
  133. package/dist/src/server/api.d.ts +8 -0
  134. package/dist/src/server/api.js +217 -0
  135. package/dist/src/server/api.js.map +1 -0
  136. package/dist/src/server/app-discovery.d.ts +5 -0
  137. package/dist/src/server/app-discovery.js +113 -0
  138. package/dist/src/server/app-discovery.js.map +1 -0
  139. package/dist/src/server/config.d.ts +26 -0
  140. package/dist/src/server/config.js +112 -0
  141. package/dist/src/server/config.js.map +1 -0
  142. package/dist/src/server/mockDataGenerator.d.ts +1 -0
  143. package/dist/src/server/mockDataGenerator.js +154 -0
  144. package/dist/src/server/mockDataGenerator.js.map +1 -0
  145. package/dist/src/server/websocket.d.ts +0 -0
  146. package/dist/src/server/websocket.js +2 -0
  147. package/dist/src/server/websocket.js.map +1 -0
  148. package/dist/src/server.d.ts +2 -0
  149. package/dist/src/server.js +735 -0
  150. package/dist/src/server.js.map +1 -0
  151. package/dist/src/types/app.d.ts +154 -0
  152. package/dist/src/types/app.js +24 -0
  153. package/dist/src/types/app.js.map +1 -0
  154. package/dist/src/types/kvstore.d.ts +320 -0
  155. package/dist/src/types/kvstore.js +5 -0
  156. package/dist/src/types/kvstore.js.map +1 -0
  157. package/dist/src/ui/components/App.d.ts +6 -0
  158. package/dist/src/ui/components/App.js +432 -0
  159. package/dist/src/ui/components/App.js.map +1 -0
  160. package/dist/src/ui/components/DestinationBatchEditor.d.ts +7 -0
  161. package/dist/src/ui/components/DestinationBatchEditor.js +160 -0
  162. package/dist/src/ui/components/DestinationBatchEditor.js.map +1 -0
  163. package/dist/src/ui/components/DestinationSchemaViewer.d.ts +7 -0
  164. package/dist/src/ui/components/DestinationSchemaViewer.js +61 -0
  165. package/dist/src/ui/components/DestinationSchemaViewer.js.map +1 -0
  166. package/dist/src/ui/components/DestinationsView.d.ts +14 -0
  167. package/dist/src/ui/components/DestinationsView.js +68 -0
  168. package/dist/src/ui/components/DestinationsView.js.map +1 -0
  169. package/dist/src/ui/components/FunctionsView.d.ts +13 -0
  170. package/dist/src/ui/components/FunctionsView.js +288 -0
  171. package/dist/src/ui/components/FunctionsView.js.map +1 -0
  172. package/dist/src/ui/components/JobsView.d.ts +13 -0
  173. package/dist/src/ui/components/JobsView.js +320 -0
  174. package/dist/src/ui/components/JobsView.js.map +1 -0
  175. package/dist/src/ui/components/KVStoreViewer.d.ts +11 -0
  176. package/dist/src/ui/components/KVStoreViewer.js +168 -0
  177. package/dist/src/ui/components/KVStoreViewer.js.map +1 -0
  178. package/dist/src/ui/components/MetadataModal.d.ts +14 -0
  179. package/dist/src/ui/components/MetadataModal.js +28 -0
  180. package/dist/src/ui/components/MetadataModal.js.map +1 -0
  181. package/dist/src/ui/components/MetadataModal.test.d.ts +1 -0
  182. package/dist/src/ui/components/MetadataModal.test.js +143 -0
  183. package/dist/src/ui/components/MetadataModal.test.js.map +1 -0
  184. package/dist/src/ui/components/NotificationViewer.d.ts +16 -0
  185. package/dist/src/ui/components/NotificationViewer.js +69 -0
  186. package/dist/src/ui/components/NotificationViewer.js.map +1 -0
  187. package/dist/src/ui/components/SecretsStoreViewer.d.ts +11 -0
  188. package/dist/src/ui/components/SecretsStoreViewer.js +179 -0
  189. package/dist/src/ui/components/SecretsStoreViewer.js.map +1 -0
  190. package/dist/src/ui/components/SettingsStoreViewer.d.ts +24 -0
  191. package/dist/src/ui/components/SettingsStoreViewer.js +132 -0
  192. package/dist/src/ui/components/SettingsStoreViewer.js.map +1 -0
  193. package/dist/src/ui/components/SourceDataViewer.d.ts +8 -0
  194. package/dist/src/ui/components/SourceDataViewer.js +84 -0
  195. package/dist/src/ui/components/SourceDataViewer.js.map +1 -0
  196. package/dist/src/ui/components/SourceJobsSection.d.ts +8 -0
  197. package/dist/src/ui/components/SourceJobsSection.js +99 -0
  198. package/dist/src/ui/components/SourceJobsSection.js.map +1 -0
  199. package/dist/src/ui/components/SourceLifecycleSection.d.ts +7 -0
  200. package/dist/src/ui/components/SourceLifecycleSection.js +58 -0
  201. package/dist/src/ui/components/SourceLifecycleSection.js.map +1 -0
  202. package/dist/src/ui/components/SourceSchemaViewer.d.ts +7 -0
  203. package/dist/src/ui/components/SourceSchemaViewer.js +65 -0
  204. package/dist/src/ui/components/SourceSchemaViewer.js.map +1 -0
  205. package/dist/src/ui/components/SourceWebhookEditor.d.ts +8 -0
  206. package/dist/src/ui/components/SourceWebhookEditor.js +181 -0
  207. package/dist/src/ui/components/SourceWebhookEditor.js.map +1 -0
  208. package/dist/src/ui/components/SourcesView.d.ts +14 -0
  209. package/dist/src/ui/components/SourcesView.js +74 -0
  210. package/dist/src/ui/components/SourcesView.js.map +1 -0
  211. package/dist/src/ui/components/StoreViewer.d.ts +16 -0
  212. package/dist/src/ui/components/StoreViewer.js +86 -0
  213. package/dist/src/ui/components/StoreViewer.js.map +1 -0
  214. package/dist/src/ui/components/TabbedConsole.d.ts +17 -0
  215. package/dist/src/ui/components/TabbedConsole.js +163 -0
  216. package/dist/src/ui/components/TabbedConsole.js.map +1 -0
  217. package/dist/src/ui/components/common/DataTree.d.ts +15 -0
  218. package/dist/src/ui/components/common/DataTree.js +95 -0
  219. package/dist/src/ui/components/common/DataTree.js.map +1 -0
  220. package/dist/src/ui/components/common/EyeIcon.d.ts +11 -0
  221. package/dist/src/ui/components/common/EyeIcon.js +11 -0
  222. package/dist/src/ui/components/common/EyeIcon.js.map +1 -0
  223. package/dist/src/ui/hooks/useEntityNavigation.d.ts +72 -0
  224. package/dist/src/ui/hooks/useEntityNavigation.js +150 -0
  225. package/dist/src/ui/hooks/useEntityNavigation.js.map +1 -0
  226. package/dist/src/ui/hooks/useQueryParams.d.ts +6 -0
  227. package/dist/src/ui/hooks/useQueryParams.js +39 -0
  228. package/dist/src/ui/hooks/useQueryParams.js.map +1 -0
  229. package/dist/src/ui/index.d.ts +1 -0
  230. package/dist/src/ui/index.js +23 -0
  231. package/dist/src/ui/index.js.map +1 -0
  232. package/dist/src/ui/store/formStateSlice.d.ts +54 -0
  233. package/dist/src/ui/store/formStateSlice.js +94 -0
  234. package/dist/src/ui/store/formStateSlice.js.map +1 -0
  235. package/dist/src/ui/store/hooks.d.ts +6 -0
  236. package/dist/src/ui/store/hooks.js +8 -0
  237. package/dist/src/ui/store/hooks.js.map +1 -0
  238. package/dist/src/ui/store/index.d.ts +11 -0
  239. package/dist/src/ui/store/index.js +107 -0
  240. package/dist/src/ui/store/index.js.map +1 -0
  241. package/dist/src/utils/functionEndpoints.d.ts +24 -0
  242. package/dist/src/utils/functionEndpoints.js +45 -0
  243. package/dist/src/utils/functionEndpoints.js.map +1 -0
  244. package/package.json +112 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const StoreViewer_1 = __importDefault(require("./StoreViewer"));
9
+ const useQueryParams_1 = require("../hooks/useQueryParams");
10
+ const TabbedConsole = ({ logs, onClearLogs, storeTimestamps, onRefreshStores, notificationCount = 0 }) => {
11
+ const { getParam, setParam } = (0, useQueryParams_1.useQueryParams)();
12
+ // Derive activeTab from URL, default to 'console'
13
+ const activeTab = getParam('console') || 'console';
14
+ // Restore expanded state from localStorage, default to false
15
+ const [expanded, setExpanded] = (0, react_1.useState)(() => {
16
+ const stored = localStorage.getItem('consoleExpanded');
17
+ return stored ? JSON.parse(stored) : false;
18
+ });
19
+ // Restore height from localStorage, default to 200
20
+ const [height, setHeight] = (0, react_1.useState)(() => {
21
+ const stored = localStorage.getItem('consoleHeight');
22
+ return stored ? parseInt(stored, 10) : 200;
23
+ });
24
+ const [logFilter, setLogFilter] = (0, react_1.useState)('app');
25
+ const [categoryFilter, setCategoryFilter] = (0, react_1.useState)('all');
26
+ const [levelFilter, setLevelFilter] = (0, react_1.useState)('all');
27
+ const dragStateRef = (0, react_1.useRef)({
28
+ isMouseDown: false,
29
+ isDragging: false,
30
+ startY: 0,
31
+ startHeight: 200
32
+ });
33
+ // Log categories organized by source type
34
+ const APP_CATEGORIES = [
35
+ 'function',
36
+ 'lifecycle',
37
+ 'jobs',
38
+ 'notifications'
39
+ ];
40
+ const SYSTEM_CATEGORIES = [
41
+ 'build',
42
+ 'destination',
43
+ 'kvstore',
44
+ 'settings',
45
+ 'secrets',
46
+ 'config',
47
+ 'ipc',
48
+ 'process'
49
+ ];
50
+ // Save expanded state to localStorage when it changes
51
+ (0, react_1.useEffect)(() => {
52
+ localStorage.setItem('consoleExpanded', JSON.stringify(expanded));
53
+ }, [expanded]);
54
+ // Save height to localStorage when it changes
55
+ (0, react_1.useEffect)(() => {
56
+ localStorage.setItem('consoleHeight', String(height));
57
+ }, [height]);
58
+ const filterLogs = (logs) => {
59
+ let filtered = logs;
60
+ // Filter by source (all/app/engine)
61
+ if (logFilter === 'app') {
62
+ filtered = filtered.filter(log => log.source === 'app');
63
+ }
64
+ else if (logFilter === 'engine') {
65
+ filtered = filtered.filter(log => log.source === 'system');
66
+ }
67
+ // Filter by category
68
+ if (categoryFilter !== 'all') {
69
+ filtered = filtered.filter(log => log.category === categoryFilter);
70
+ }
71
+ // Filter by level (hierarchical: show selected level and above)
72
+ if (levelFilter !== 'all') {
73
+ const levels = ['debug', 'info', 'warn', 'error'];
74
+ const minLevelIndex = levels.indexOf(levelFilter);
75
+ filtered = filtered.filter(log => levels.indexOf(log.level) >= minLevelIndex);
76
+ }
77
+ return filtered;
78
+ };
79
+ const renderTabContent = () => {
80
+ switch (activeTab) {
81
+ case 'console':
82
+ const filteredLogs = filterLogs(logs);
83
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "console-tab-content", children: [(0, jsx_runtime_1.jsxs)("div", { className: "console-controls", children: [(0, jsx_runtime_1.jsxs)("div", { className: "filter-row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Source:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: logFilter, onChange: (e) => setLogFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "app", children: "App" }), (0, jsx_runtime_1.jsx)("option", { value: "engine", children: "Engine (System)" }), (0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Sources" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Level:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: levelFilter, onChange: (e) => setLevelFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Levels" }), (0, jsx_runtime_1.jsx)("option", { value: "debug", children: "Debug+" }), (0, jsx_runtime_1.jsx)("option", { value: "info", children: "Info+" }), (0, jsx_runtime_1.jsx)("option", { value: "warn", children: "Warn+" }), (0, jsx_runtime_1.jsx)("option", { value: "error", children: "Error Only" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "filter-group", children: [(0, jsx_runtime_1.jsx)("label", { className: "filter-label", children: "Category:" }), (0, jsx_runtime_1.jsxs)("select", { className: "filter-select", value: categoryFilter, onChange: (e) => setCategoryFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Categories" }), (0, jsx_runtime_1.jsx)("optgroup", { label: "\u2500\u2500\u2500 App \u2500\u2500\u2500", children: APP_CATEGORIES.map(cat => ((0, jsx_runtime_1.jsx)("option", { value: cat, children: cat }, cat))) }), (0, jsx_runtime_1.jsx)("optgroup", { label: "\u2500\u2500\u2500 System \u2500\u2500\u2500", children: SYSTEM_CATEGORIES.map(cat => ((0, jsx_runtime_1.jsx)("option", { value: cat, children: cat }, cat))) })] })] })] }), (0, jsx_runtime_1.jsx)("button", { className: "clear-logs-btn", onClick: onClearLogs, children: "Clear Logs" })] }), (0, jsx_runtime_1.jsx)("div", { className: "log-container", children: filteredLogs.length > 0 ? (filteredLogs.map((log) => {
84
+ // Format log inline with access to all fields
85
+ const time = new Date(log.timestamp).toLocaleTimeString();
86
+ const id = log.context?.id || 'unknown';
87
+ const sourceCategoryId = `${log.source}:${log.category}:${id}`;
88
+ const level = log.level.toUpperCase();
89
+ const formattedLog = `[${time}] ${sourceCategoryId.toUpperCase()} ${level}: ${log.message}`;
90
+ return ((0, jsx_runtime_1.jsx)("div", { className: `log-line log-${log.level} log-source-${log.source} log-category-${log.category}`, children: formattedLog }, log.id));
91
+ })) : ((0, jsx_runtime_1.jsx)("div", { className: "no-logs", children: "No console output yet" })) })] }));
92
+ case 'settings':
93
+ case 'secrets':
94
+ case 'kv':
95
+ case 'sharedKv':
96
+ case 'notifications':
97
+ return ((0, jsx_runtime_1.jsx)("div", { className: "store-tab-content", children: (0, jsx_runtime_1.jsx)(StoreViewer_1.default, { initialTab: activeTab, hideTabs: true, storeTimestamps: storeTimestamps, onRefreshStores: onRefreshStores }) }));
98
+ default:
99
+ return null;
100
+ }
101
+ };
102
+ // Handle mouse resize events - ONLY for resize handle
103
+ const handleResizeMouseDown = (e) => {
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+ dragStateRef.current = {
107
+ isMouseDown: true,
108
+ isDragging: false,
109
+ startY: e.clientY,
110
+ startHeight: height
111
+ };
112
+ const handleMouseMove = (e) => {
113
+ const current = dragStateRef.current;
114
+ if (!current.isMouseDown)
115
+ return;
116
+ // Only start dragging if the mouse has moved enough
117
+ if (!current.isDragging) {
118
+ const deltaY = Math.abs(current.startY - e.clientY);
119
+ // Only start dragging if mouse moved at least 5px
120
+ if (deltaY < 5)
121
+ return;
122
+ current.isDragging = true;
123
+ document.body.style.cursor = 'ns-resize';
124
+ document.body.style.userSelect = 'none';
125
+ }
126
+ // Only resize if we're actually dragging
127
+ if (current.isDragging) {
128
+ const deltaY = current.startY - e.clientY; // Inverted: moving up increases height
129
+ const newHeight = current.startHeight + deltaY;
130
+ const minHeight = 100;
131
+ const maxHeight = window.innerHeight * 0.8;
132
+ const clampedHeight = Math.max(minHeight, Math.min(maxHeight, newHeight));
133
+ setHeight(clampedHeight);
134
+ }
135
+ };
136
+ const handleMouseUp = () => {
137
+ dragStateRef.current = {
138
+ isMouseDown: false,
139
+ isDragging: false,
140
+ startY: 0,
141
+ startHeight: height // Keep current height instead of resetting to 200
142
+ };
143
+ document.body.style.cursor = '';
144
+ document.body.style.userSelect = '';
145
+ // Remove event listeners
146
+ document.removeEventListener('mousemove', handleMouseMove);
147
+ document.removeEventListener('mouseup', handleMouseUp);
148
+ };
149
+ // Add event listeners
150
+ document.addEventListener('mousemove', handleMouseMove);
151
+ document.addEventListener('mouseup', handleMouseUp);
152
+ };
153
+ // Handle tab click - switch tab and expand console if collapsed
154
+ const handleTabClick = (tab) => {
155
+ setParam('console', tab);
156
+ if (!expanded) {
157
+ setExpanded(true);
158
+ }
159
+ };
160
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `console-panel ${expanded ? 'expanded' : 'collapsed'}`, style: { height: expanded ? `${height}px` : '32px' }, children: [expanded && ((0, jsx_runtime_1.jsx)("div", { className: "console-resize-handle", onMouseDown: handleResizeMouseDown })), (0, jsx_runtime_1.jsxs)("div", { className: "console-tab-headers", children: [(0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'console' ? 'active' : ''}`, onClick: () => handleTabClick('console'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDCCB" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Console" }), (0, jsx_runtime_1.jsxs)("span", { className: "tab-count", children: ["(", logs.length, ")"] })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'settings' ? 'active' : ''}`, onClick: () => handleTabClick('settings'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\u2699\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Settings" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'secrets' ? 'active' : ''}`, onClick: () => handleTabClick('secrets'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD10" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Secrets" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'kv' ? 'active' : ''}`, onClick: () => handleTabClick('kv'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDDC3\uFE0F" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "KV Store" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'sharedKv' ? 'active' : ''}`, onClick: () => handleTabClick('sharedKv'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD17" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Shared KV" })] }), (0, jsx_runtime_1.jsxs)("button", { className: `console-tab ${activeTab === 'notifications' ? 'active' : ''}`, onClick: () => handleTabClick('notifications'), children: [(0, jsx_runtime_1.jsx)("span", { className: "tab-icon", children: "\uD83D\uDD14" }), (0, jsx_runtime_1.jsx)("span", { className: "tab-label", children: "Notifications" }), notificationCount > 0 && ((0, jsx_runtime_1.jsx)("span", { className: "notification-badge", children: notificationCount }))] }), (0, jsx_runtime_1.jsx)("button", { className: "console-toggle", onClick: () => setExpanded(!expanded), children: expanded ? '▼' : '▲' })] }), expanded && ((0, jsx_runtime_1.jsx)("div", { className: "console-content", children: (0, jsx_runtime_1.jsx)("div", { className: "console-tab-body", children: renderTabContent() }) }))] }));
161
+ };
162
+ exports.default = TabbedConsole;
163
+ //# sourceMappingURL=TabbedConsole.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabbedConsole.js","sourceRoot":"","sources":["../../../../src/ui/components/TabbedConsole.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA2D;AAC3D,gEAAwC;AAGxC,4DAAyD;AAkBzD,MAAM,aAAa,GAAiC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,EAAE;IACrI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAA,+BAAc,GAAE,CAAC;IAEhD,kDAAkD;IAClD,MAAM,SAAS,GAAI,QAAQ,CAAC,SAAS,CAAgB,IAAI,SAAS,CAAC;IAEnE,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAA2B,KAAK,CAAC,CAAC;IAC5E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAS,KAAK,CAAC,CAAC;IACpE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAS,KAAK,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAA,cAAM,EAAC;QAC1B,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,GAAG;KACjB,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,cAAc,GAAG;QACrB,UAAU;QACV,WAAW;QACX,MAAM;QACN,eAAe;KAChB,CAAC;IAEF,MAAM,iBAAiB,GAAG;QACxB,OAAO;QACP,aAAa;QACb,SAAS;QACT,UAAU;QACV,SAAS;QACT,QAAQ;QACR,KAAK;QACL,SAAS;KACV,CAAC;IAEF,sDAAsD;IACtD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,8CAA8C;IAC9C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAc,EAAE;QAClD,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,oCAAoC;QACpC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,qBAAqB;QACrB,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;QACrE,CAAC;QAED,gEAAgE;QAChE,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAClD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,SAAS;gBACZ,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEtC,OAAO,CACL,iCAAK,SAAS,EAAC,qBAAqB,aAClC,iCAAK,SAAS,EAAC,kBAAkB,aAC/B,iCAAK,SAAS,EAAC,YAAY,aACzB,iCAAK,SAAS,EAAC,cAAc,aAC3B,kCAAO,SAAS,EAAC,cAAc,wBAAgB,EAC/C,oCACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAiC,CAAC,aAEzE,mCAAQ,KAAK,EAAC,KAAK,oBAAa,EAChC,mCAAQ,KAAK,EAAC,QAAQ,gCAAyB,EAC/C,mCAAQ,KAAK,EAAC,KAAK,4BAAqB,IACjC,IACL,EAEN,iCAAK,SAAS,EAAC,cAAc,aAC3B,kCAAO,SAAS,EAAC,cAAc,uBAAe,EAC9C,oCACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAE/C,mCAAQ,KAAK,EAAC,KAAK,2BAAoB,EACvC,mCAAQ,KAAK,EAAC,OAAO,uBAAgB,EACrC,mCAAQ,KAAK,EAAC,MAAM,sBAAe,EACnC,mCAAQ,KAAK,EAAC,MAAM,sBAAe,EACnC,mCAAQ,KAAK,EAAC,OAAO,2BAAoB,IAClC,IACL,EAEN,iCAAK,SAAS,EAAC,cAAc,aAC3B,kCAAO,SAAS,EAAC,cAAc,0BAAkB,EACjD,oCACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAElD,mCAAQ,KAAK,EAAC,KAAK,+BAAwB,EAC3C,qCAAU,KAAK,EAAC,2CAAa,YAC1B,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACzB,mCAAkB,KAAK,EAAE,GAAG,YAAG,GAAG,IAArB,GAAG,CAA4B,CAC7C,CAAC,GACO,EACX,qCAAU,KAAK,EAAC,8CAAgB,YAC7B,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5B,mCAAkB,KAAK,EAAE,GAAG,YAAG,GAAG,IAArB,GAAG,CAA4B,CAC7C,CAAC,GACO,IACJ,IACL,IACF,EAEN,mCAAQ,SAAS,EAAC,gBAAgB,EAAC,OAAO,EAAE,WAAW,2BAE9C,IACL,EACN,gCAAK,SAAS,EAAC,eAAe,YAC3B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,YAAY,CAAC,GAAG,CAAC,CAAC,GAAa,EAAE,EAAE;gCACjC,8CAA8C;gCAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;gCAC1D,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS,CAAC;gCACxC,MAAM,gBAAgB,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gCAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gCACtC,MAAM,YAAY,GAAG,IAAI,IAAI,KAAK,gBAAgB,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;gCAE5F,OAAO,CACL,gCAAkB,SAAS,EAAE,gBAAgB,GAAG,CAAC,KAAK,eAAe,GAAG,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,YAC3G,YAAY,IADL,GAAG,CAAC,EAAE,CAEV,CACP,CAAC;4BACJ,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,SAAS,sCAA4B,CACrD,GACG,IACF,CACP,CAAC;YAEJ,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS,CAAC;YACf,KAAK,IAAI,CAAC;YACV,KAAK,UAAU,CAAC;YAChB,KAAK,eAAe;gBAClB,OAAO,CACL,gCAAK,SAAS,EAAC,mBAAmB,YAChC,uBAAC,qBAAW,IACV,UAAU,EAAE,SAAS,EACrB,QAAQ,EAAE,IAAI,EACd,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,GAChC,GACE,CACP,CAAC;YAEJ;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,sDAAsD;IACtD,MAAM,qBAAqB,GAAG,CAAC,CAAmB,EAAE,EAAE;QACpD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAEpB,YAAY,CAAC,OAAO,GAAG;YACrB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,WAAW,EAAE,MAAM;SACpB,CAAC;QAEF,MAAM,eAAe,GAAG,CAAC,CAAa,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,WAAW;gBAAE,OAAO;YAEjC,oDAAoD;YACpD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;gBACpD,kDAAkD;gBAClD,IAAI,MAAM,GAAG,CAAC;oBAAE,OAAO;gBAEvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;YAC1C,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,uCAAuC;gBAClF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;gBAC/C,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC;gBAE3C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1E,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,YAAY,CAAC,OAAO,GAAG;gBACrB,WAAW,EAAE,KAAK;gBAClB,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,MAAM,CAAE,kDAAkD;aACxE,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YAEpC,yBAAyB;YACzB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC3D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,sBAAsB;QACtB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACxD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,gEAAgE;IAChE,MAAM,cAAc,GAAG,CAAC,GAAe,EAAE,EAAE;QACzC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,iCACE,SAAS,EAAE,iBAAiB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,EACjE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,aAGnD,QAAQ,IAAI,CACX,gCACE,SAAS,EAAC,uBAAuB,EACjC,WAAW,EAAE,qBAAqB,GAClC,CACH,EAGD,iCAAK,SAAS,EAAC,qBAAqB,aAClC,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,aAExC,iCAAM,SAAS,EAAC,UAAU,6BAAU,EACpC,iCAAM,SAAS,EAAC,WAAW,wBAAe,EAC1C,kCAAM,SAAS,EAAC,WAAW,kBAAG,IAAI,CAAC,MAAM,SAAS,IAC3C,EAET,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACpE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,aAEzC,iCAAM,SAAS,EAAC,UAAU,6BAAU,EACpC,iCAAM,SAAS,EAAC,WAAW,yBAAgB,IACpC,EAET,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACnE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,aAExC,iCAAM,SAAS,EAAC,UAAU,6BAAU,EACpC,iCAAM,SAAS,EAAC,WAAW,wBAAe,IACnC,EAET,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAC9D,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,aAEnC,iCAAM,SAAS,EAAC,UAAU,mCAAW,EACrC,iCAAM,SAAS,EAAC,WAAW,yBAAgB,IACpC,EAET,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACpE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,aAEzC,iCAAM,SAAS,EAAC,UAAU,6BAAU,EACpC,iCAAM,SAAS,EAAC,WAAW,0BAAiB,IACrC,EAET,oCACE,SAAS,EAAE,eAAe,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EACzE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,aAE9C,iCAAM,SAAS,EAAC,UAAU,6BAAU,EACpC,iCAAM,SAAS,EAAC,WAAW,8BAAqB,EAC/C,iBAAiB,GAAG,CAAC,IAAI,CACxB,iCAAM,SAAS,EAAC,oBAAoB,YAAE,iBAAiB,GAAQ,CAChE,IACM,EAET,mCAAQ,SAAS,EAAC,gBAAgB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,YACrE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACd,IACL,EAEL,QAAQ,IAAI,CACX,gCAAK,SAAS,EAAC,iBAAiB,YAE9B,gCAAK,SAAS,EAAC,kBAAkB,YAC9B,gBAAgB,EAAE,GACf,GACF,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ interface DataTreeProps {
3
+ data: any;
4
+ title?: string;
5
+ isSecret?: boolean;
6
+ showEyeIcon?: boolean;
7
+ onValueChange?: (newValue: any) => void;
8
+ readonly?: boolean;
9
+ depth?: number;
10
+ }
11
+ /**
12
+ * Recursive tree component for displaying nested data structures
13
+ */
14
+ declare const DataTree: React.FC<DataTreeProps>;
15
+ export default DataTree;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const EyeIcon_1 = __importDefault(require("./EyeIcon"));
9
+ /**
10
+ * Recursive tree component for displaying nested data structures
11
+ */
12
+ const DataTree = ({ data, title, isSecret = false, showEyeIcon = false, onValueChange, readonly = false, depth = 0 }) => {
13
+ const [isVisible, setIsVisible] = (0, react_1.useState)(!isSecret);
14
+ const [isEditing, setIsEditing] = (0, react_1.useState)(false);
15
+ const [editValue, setEditValue] = (0, react_1.useState)('');
16
+ const toggleVisibility = () => {
17
+ setIsVisible(!isVisible);
18
+ };
19
+ const startEditing = () => {
20
+ if (readonly)
21
+ return;
22
+ setEditValue(JSON.stringify(data, null, 2));
23
+ setIsEditing(true);
24
+ };
25
+ const saveEdit = () => {
26
+ try {
27
+ const newValue = JSON.parse(editValue);
28
+ onValueChange?.(newValue);
29
+ setIsEditing(false);
30
+ }
31
+ catch (error) {
32
+ alert('Invalid JSON format');
33
+ }
34
+ };
35
+ const cancelEdit = () => {
36
+ setIsEditing(false);
37
+ setEditValue('');
38
+ };
39
+ const renderValue = (value) => {
40
+ if (value === null)
41
+ return (0, jsx_runtime_1.jsx)("span", { className: "null-value", children: "null" });
42
+ if (value === undefined)
43
+ return (0, jsx_runtime_1.jsx)("span", { className: "undefined-value", children: "undefined" });
44
+ if (typeof value === 'boolean')
45
+ return (0, jsx_runtime_1.jsx)("span", { className: "boolean-value", children: String(value) });
46
+ if (typeof value === 'number')
47
+ return (0, jsx_runtime_1.jsx)("span", { className: "number-value", children: value });
48
+ if (typeof value === 'string') {
49
+ if (!isVisible && isSecret) {
50
+ return (0, jsx_runtime_1.jsx)("span", { className: "hidden-value", children: '•'.repeat(8) });
51
+ }
52
+ return (0, jsx_runtime_1.jsxs)("span", { className: "string-value", children: ["\"", value, "\""] });
53
+ }
54
+ return null;
55
+ };
56
+ const renderPrimitive = () => {
57
+ const displayValue = renderValue(data);
58
+ return ((0, jsx_runtime_1.jsx)("div", { className: `data-tree-item primitive depth-${depth}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "item-header", children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsxs)("div", { className: "item-value", children: [isEditing ? ((0, jsx_runtime_1.jsxs)("div", { className: "edit-mode", children: [(0, jsx_runtime_1.jsx)("textarea", { className: "edit-input", value: editValue, onChange: (e) => setEditValue(e.target.value), rows: 3 }), (0, jsx_runtime_1.jsxs)("div", { className: "edit-controls", children: [(0, jsx_runtime_1.jsx)("button", { className: "save-btn", onClick: saveEdit, children: "Save" }), (0, jsx_runtime_1.jsx)("button", { className: "cancel-btn", onClick: cancelEdit, children: "Cancel" })] })] })) : ((0, jsx_runtime_1.jsx)("span", { className: `value ${readonly ? 'readonly' : 'editable'}`, onClick: !readonly ? startEditing : undefined, children: displayValue })), showEyeIcon && isSecret && ((0, jsx_runtime_1.jsx)(EyeIcon_1.default, { isVisible: isVisible, onClick: toggleVisibility }))] })] }) }));
59
+ };
60
+ const renderObject = () => {
61
+ const [isExpanded, setIsExpanded] = (0, react_1.useState)(depth < 2);
62
+ const keys = Object.keys(data);
63
+ if (keys.length === 0) {
64
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item empty-object depth-${depth}`, children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "empty-value", children: '{}' })] }));
65
+ }
66
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item object depth-${depth}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "item-header", onClick: () => setIsExpanded(!isExpanded), children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "object-info", children: `{${keys.length} ${keys.length === 1 ? 'key' : 'keys'}}` })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "item-children", children: keys.map(key => ((0, jsx_runtime_1.jsx)(DataTree, { data: data[key], title: key, isSecret: isSecret, showEyeIcon: showEyeIcon && typeof data[key] !== 'object', onValueChange: onValueChange ? (newValue) => {
67
+ const updated = { ...data, [key]: newValue };
68
+ onValueChange(updated);
69
+ } : undefined, readonly: readonly, depth: depth + 1 }, key))) }))] }));
70
+ };
71
+ const renderArray = () => {
72
+ const [isExpanded, setIsExpanded] = (0, react_1.useState)(depth < 2);
73
+ if (data.length === 0) {
74
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item empty-array depth-${depth}`, children: [title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "empty-value", children: "[]" })] }));
75
+ }
76
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `data-tree-item array depth-${depth}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "item-header", onClick: () => setIsExpanded(!isExpanded), children: [(0, jsx_runtime_1.jsx)("span", { className: "expand-icon", children: isExpanded ? '▼' : '▶' }), title && (0, jsx_runtime_1.jsxs)("span", { className: "item-title", children: [title, ":"] }), (0, jsx_runtime_1.jsx)("span", { className: "array-info", children: `[${data.length} ${data.length === 1 ? 'item' : 'items'}]` })] }), isExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "item-children", children: data.map((item, index) => ((0, jsx_runtime_1.jsx)(DataTree, { data: item, title: `[${index}]`, isSecret: isSecret, showEyeIcon: showEyeIcon && typeof item !== 'object', onValueChange: onValueChange ? (newValue) => {
77
+ const updated = [...data];
78
+ updated[index] = newValue;
79
+ onValueChange(updated);
80
+ } : undefined, readonly: readonly, depth: depth + 1 }, index))) }))] }));
81
+ };
82
+ // Determine what type of data we're rendering
83
+ if (data === null || data === undefined || typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') {
84
+ return renderPrimitive();
85
+ }
86
+ if (Array.isArray(data)) {
87
+ return renderArray();
88
+ }
89
+ if (typeof data === 'object') {
90
+ return renderObject();
91
+ }
92
+ return renderPrimitive();
93
+ };
94
+ exports.default = DataTree;
95
+ //# sourceMappingURL=DataTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTree.js","sourceRoot":"","sources":["../../../../../src/ui/components/common/DataTree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface EyeIconProps {
3
+ isVisible: boolean;
4
+ onClick: () => void;
5
+ className?: string;
6
+ }
7
+ /**
8
+ * Toggleable eye icon for showing/hiding sensitive values
9
+ */
10
+ declare const EyeIcon: React.FC<EyeIconProps>;
11
+ export default EyeIcon;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ /**
5
+ * Toggleable eye icon for showing/hiding sensitive values
6
+ */
7
+ const EyeIcon = ({ isVisible, onClick, className = '' }) => {
8
+ return ((0, jsx_runtime_1.jsx)("button", { className: `eye-icon ${isVisible ? 'visible' : 'hidden'} ${className}`, onClick: onClick, title: isVisible ? 'Hide value' : 'Show value', type: "button", children: isVisible ? '👁️' : '👁️‍🗨️' }));
9
+ };
10
+ exports.default = EyeIcon;
11
+ //# sourceMappingURL=EyeIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EyeIcon.js","sourceRoot":"","sources":["../../../../../src/ui/components/common/EyeIcon.tsx"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,MAAM,OAAO,GAA2B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE;IACjF,OAAO,CACL,mCACE,SAAS,EAAE,YAAY,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,EACtE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAC9C,IAAI,EAAC,QAAQ,YAEZ,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GACvB,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Configuration for entity navigation hook
3
+ */
4
+ interface EntityNavigationConfig<TTab extends string = never> {
5
+ /** Base path for the entity (e.g., '/functions', '/jobs') */
6
+ basePath: string;
7
+ /** Entity name for logging purposes (e.g., 'function', 'job') */
8
+ entityName: string;
9
+ /** List of available entities */
10
+ entities: Array<{
11
+ id: string;
12
+ }>;
13
+ /** Currently selected entity ID from URL */
14
+ selectedEntityId: string | null;
15
+ /** Default tab value (optional, for views with tabs) */
16
+ defaultTab?: TTab;
17
+ /** Valid tab values (optional, for views with tabs) */
18
+ validTabs?: readonly TTab[];
19
+ /** Additional query parameters to preserve during navigation (default: ['console']) */
20
+ preserveParams?: string[];
21
+ /** Additional query parameters to set when navigating to an entity */
22
+ additionalParams?: Record<string, string>;
23
+ }
24
+ /**
25
+ * Return value from entity navigation hook
26
+ */
27
+ interface EntityNavigationReturn<TTab extends string = never> {
28
+ /** Navigate to a specific entity or clear selection */
29
+ navigateToEntity: (entityId: string | null, replace?: boolean) => void;
30
+ /** Whether the currently selected entity exists in the entities list */
31
+ isValidEntity: boolean;
32
+ /** Whether the first entity should be auto-selected */
33
+ shouldAutoSelect: boolean;
34
+ /** Active tab (if tabs are configured) */
35
+ activeTab?: TTab;
36
+ /** Set the active tab (if tabs are configured) */
37
+ setActiveTab?: (tab: TTab) => void;
38
+ /** Whether the current tab is valid (if tabs are configured) */
39
+ isValidTab?: boolean;
40
+ }
41
+ /**
42
+ * Custom hook for managing entity selection and navigation with URL synchronization.
43
+ *
44
+ * This hook handles:
45
+ * - Navigation to/from entities while preserving query parameters (e.g., console tab)
46
+ * - Auto-selection of first entity when none is selected
47
+ * - Validation of entity ID and redirect to first entity if invalid
48
+ * - Optional tab management with validation
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * // Simple entity navigation (no tabs)
53
+ * const { navigateToEntity } = useEntityNavigation({
54
+ * basePath: '/destinations',
55
+ * entityName: 'destination',
56
+ * entities: destinations,
57
+ * selectedEntityId: selectedDestination,
58
+ * });
59
+ *
60
+ * // With tabs
61
+ * const { navigateToEntity, activeTab, setActiveTab } = useEntityNavigation({
62
+ * basePath: '/functions',
63
+ * entityName: 'function',
64
+ * entities: functions,
65
+ * selectedEntityId: selectedFunction,
66
+ * defaultTab: 'body' as const,
67
+ * validTabs: ['params', 'headers', 'body'] as const,
68
+ * });
69
+ * ```
70
+ */
71
+ export declare function useEntityNavigation<TTab extends string = never>(config: EntityNavigationConfig<TTab>): EntityNavigationReturn<TTab>;
72
+ export {};
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEntityNavigation = useEntityNavigation;
4
+ const react_1 = require("react");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const useQueryParams_1 = require("./useQueryParams");
7
+ /**
8
+ * Custom hook for managing entity selection and navigation with URL synchronization.
9
+ *
10
+ * This hook handles:
11
+ * - Navigation to/from entities while preserving query parameters (e.g., console tab)
12
+ * - Auto-selection of first entity when none is selected
13
+ * - Validation of entity ID and redirect to first entity if invalid
14
+ * - Optional tab management with validation
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Simple entity navigation (no tabs)
19
+ * const { navigateToEntity } = useEntityNavigation({
20
+ * basePath: '/destinations',
21
+ * entityName: 'destination',
22
+ * entities: destinations,
23
+ * selectedEntityId: selectedDestination,
24
+ * });
25
+ *
26
+ * // With tabs
27
+ * const { navigateToEntity, activeTab, setActiveTab } = useEntityNavigation({
28
+ * basePath: '/functions',
29
+ * entityName: 'function',
30
+ * entities: functions,
31
+ * selectedEntityId: selectedFunction,
32
+ * defaultTab: 'body' as const,
33
+ * validTabs: ['params', 'headers', 'body'] as const,
34
+ * });
35
+ * ```
36
+ */
37
+ function useEntityNavigation(config) {
38
+ const navigate = (0, react_router_dom_1.useNavigate)();
39
+ const { getParam, setParams } = (0, useQueryParams_1.useQueryParams)();
40
+ const { basePath, entityName, entities, selectedEntityId, defaultTab, validTabs, preserveParams = ['console'], additionalParams = {}, } = config;
41
+ /**
42
+ * Build URLSearchParams with preserved parameters
43
+ */
44
+ const buildPreservedParams = (0, react_1.useCallback)(() => {
45
+ const params = new URLSearchParams();
46
+ // Preserve specified query params
47
+ preserveParams.forEach(param => {
48
+ const value = getParam(param);
49
+ if (value) {
50
+ params.set(param, value);
51
+ }
52
+ });
53
+ // Add any additional params
54
+ Object.entries(additionalParams).forEach(([key, value]) => {
55
+ if (value) {
56
+ params.set(key, value);
57
+ }
58
+ });
59
+ return params;
60
+ }, [getParam, preserveParams, additionalParams]);
61
+ /**
62
+ * Navigate to an entity (or clear selection if entityId is null)
63
+ */
64
+ const navigateToEntity = (0, react_1.useCallback)((entityId, replace = false) => {
65
+ const params = buildPreservedParams();
66
+ if (entityId) {
67
+ // Add default tab if configured
68
+ if (defaultTab) {
69
+ params.set('tab', defaultTab);
70
+ }
71
+ const query = params.toString();
72
+ navigate(`${basePath}/${entityId}${query ? `?${query}` : ''}`, { replace });
73
+ }
74
+ else {
75
+ // No entity selected, navigate to base path
76
+ const query = params.toString();
77
+ navigate(`${basePath}${query ? `?${query}` : ''}`, { replace });
78
+ }
79
+ }, [navigate, basePath, defaultTab, buildPreservedParams]);
80
+ /**
81
+ * Check if the selected entity exists in the entities list
82
+ */
83
+ const isValidEntity = (0, react_1.useMemo)(() => {
84
+ if (!selectedEntityId || entities.length === 0)
85
+ return true;
86
+ return entities.some(e => e.id === selectedEntityId);
87
+ }, [selectedEntityId, entities]);
88
+ /**
89
+ * Determine if we should auto-select the first entity
90
+ */
91
+ const shouldAutoSelect = (0, react_1.useMemo)(() => {
92
+ return entities.length > 0 && !selectedEntityId;
93
+ }, [entities.length, selectedEntityId]);
94
+ /**
95
+ * Validate entity ID and redirect if invalid
96
+ */
97
+ (0, react_1.useEffect)(() => {
98
+ if (selectedEntityId && entities.length > 0 && !isValidEntity) {
99
+ console.warn(`${entityName} '${selectedEntityId}' not found, redirecting to first ${entityName}`);
100
+ navigateToEntity(entities[0].id, true);
101
+ }
102
+ // eslint-disable-next-line react-hooks/exhaustive-deps
103
+ }, [selectedEntityId, entities, isValidEntity, entityName]);
104
+ /**
105
+ * Auto-select first entity if none selected
106
+ */
107
+ (0, react_1.useEffect)(() => {
108
+ if (shouldAutoSelect) {
109
+ navigateToEntity(entities[0].id, true);
110
+ }
111
+ // eslint-disable-next-line react-hooks/exhaustive-deps
112
+ }, [shouldAutoSelect, entities]);
113
+ // Tab handling (if configured)
114
+ const activeTab = (validTabs && getParam('tab')) || defaultTab;
115
+ const isValidTab = (0, react_1.useMemo)(() => {
116
+ if (!validTabs || !activeTab)
117
+ return true;
118
+ return validTabs.includes(activeTab);
119
+ }, [validTabs, activeTab]);
120
+ const setActiveTab = (0, react_1.useCallback)((tab) => {
121
+ setParams({ tab });
122
+ }, [setParams]);
123
+ /**
124
+ * Validate tab and set default if needed
125
+ */
126
+ (0, react_1.useEffect)(() => {
127
+ if (!validTabs || !selectedEntityId)
128
+ return;
129
+ const urlTab = getParam('tab');
130
+ if (urlTab && !validTabs.includes(urlTab)) {
131
+ console.warn(`Invalid tab '${urlTab}', resetting to '${defaultTab}'`);
132
+ setParams({ tab: defaultTab });
133
+ }
134
+ else if (!urlTab && defaultTab) {
135
+ setParams({ tab: defaultTab });
136
+ }
137
+ // eslint-disable-next-line react-hooks/exhaustive-deps
138
+ }, [selectedEntityId, validTabs, defaultTab, getParam('tab')]);
139
+ return {
140
+ navigateToEntity,
141
+ isValidEntity,
142
+ shouldAutoSelect,
143
+ ...(validTabs && {
144
+ activeTab,
145
+ setActiveTab,
146
+ isValidTab,
147
+ }),
148
+ };
149
+ }
150
+ //# sourceMappingURL=useEntityNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntityNavigation.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useEntityNavigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function useQueryParams(): {
2
+ getParam: (key: string) => string | null;
3
+ setParam: (key: string, value: string | null, replace?: boolean) => void;
4
+ setParams: (updates: Record<string, string | null>, replace?: boolean) => void;
5
+ searchParams: URLSearchParams;
6
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useQueryParams = useQueryParams;
4
+ const react_router_dom_1 = require("react-router-dom");
5
+ const react_1 = require("react");
6
+ function useQueryParams() {
7
+ const [searchParams, setSearchParams] = (0, react_router_dom_1.useSearchParams)();
8
+ const getParam = (0, react_1.useCallback)((key) => {
9
+ return searchParams.get(key);
10
+ }, [searchParams]);
11
+ const setParam = (0, react_1.useCallback)((key, value, replace) => {
12
+ setSearchParams(prev => {
13
+ const next = new URLSearchParams(prev);
14
+ if (value === null || value === undefined) {
15
+ next.delete(key);
16
+ }
17
+ else {
18
+ next.set(key, value);
19
+ }
20
+ return next;
21
+ }, { replace });
22
+ }, [setSearchParams]);
23
+ const setParams = (0, react_1.useCallback)((updates, replace) => {
24
+ setSearchParams(prev => {
25
+ const next = new URLSearchParams(prev);
26
+ Object.entries(updates).forEach(([key, value]) => {
27
+ if (value === null || value === undefined) {
28
+ next.delete(key);
29
+ }
30
+ else {
31
+ next.set(key, value);
32
+ }
33
+ });
34
+ return next;
35
+ }, { replace });
36
+ }, [setSearchParams]);
37
+ return { getParam, setParam, setParams, searchParams };
38
+ }
39
+ //# sourceMappingURL=useQueryParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueryParams.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQueryParams.ts"],"names":[],"mappings":";;AAGA,wCAkCC;AArCD,uDAAmD;AACnD,iCAAoC;AAEpC,SAAgB,cAAc;IAC5B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,kCAAe,GAAE,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,GAAW,EAAiB,EAAE;QAC1D,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,GAAW,EAAE,KAAoB,EAAE,OAAiB,EAAE,EAAE;QACpF,eAAe,CAAC,IAAI,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,CAAC,OAAsC,EAAE,OAAiB,EAAE,EAAE;QAC1F,eAAe,CAAC,IAAI,CAAC,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1 @@
1
+ import "./styles.css";