@trops/dash-core 0.1.182 → 0.1.184

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -27582,7 +27582,7 @@ var STATUS = {
27582
27582
  * @returns {Object} WebSocket provider interface
27583
27583
  */
27584
27584
  var useWebSocketProvider = function useWebSocketProvider(providerType) {
27585
- var _app$providers;
27585
+ var _dashApi$api, _app$providers;
27586
27586
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27587
27587
  var _options$autoConnect = options.autoConnect,
27588
27588
  autoConnect = _options$autoConnect === void 0 ? true : _options$autoConnect,
@@ -27629,6 +27629,10 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27629
27629
  var maxMessagesRef = React.useRef(maxMessages);
27630
27630
  maxMessagesRef.current = maxMessages;
27631
27631
  var dashApi = app === null || app === void 0 ? void 0 : app.dashApi;
27632
+ // Access the raw preload bridge (mainApi) for the webSocket sub-API.
27633
+ // dashApi is an ElectronDashboardApi wrapper; the webSocket methods
27634
+ // live on the underlying mainApi object (dashApi.api).
27635
+ var wsApi = dashApi === null || dashApi === void 0 || (_dashApi$api = dashApi.api) === null || _dashApi$api === void 0 ? void 0 : _dashApi$api.webSocket;
27632
27636
 
27633
27637
  // Get the widget data
27634
27638
  var widgetData = widgetContext === null || widgetContext === void 0 ? void 0 : widgetContext.widgetData;
@@ -27680,7 +27684,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27680
27684
  }
27681
27685
  return _context2.abrupt("return");
27682
27686
  case 1:
27683
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !provider)) {
27687
+ if (!(!wsApi || !provider)) {
27684
27688
  _context2.next = 2;
27685
27689
  break;
27686
27690
  }
@@ -27709,7 +27713,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27709
27713
  }
27710
27714
  _context2.prev = 5;
27711
27715
  _context2.next = 6;
27712
- return dashApi.webSocket.getStatus(selectedProviderName);
27716
+ return wsApi.getStatus(selectedProviderName);
27713
27717
  case 6:
27714
27718
  statusResult = _context2.sent;
27715
27719
  if (!((statusResult === null || statusResult === void 0 ? void 0 : statusResult.status) === "connected")) {
@@ -27786,7 +27790,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27786
27790
  case 0:
27787
27791
  _context.prev = 0;
27788
27792
  _context.next = 1;
27789
- return dashApi.webSocket.connect(selectedProviderName, {
27793
+ return wsApi.connect(selectedProviderName, {
27790
27794
  url: provider.wsConfig.url,
27791
27795
  headers: provider.wsConfig.headers || null,
27792
27796
  subprotocols: provider.wsConfig.subprotocols || null,
@@ -27866,7 +27870,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27866
27870
  return _context2.stop();
27867
27871
  }
27868
27872
  }, _callee2, null, [[5, 8], [10, 14], [18, 22]]);
27869
- })), [dashApi, provider, providerType, selectedProviderName, applyConnected]);
27873
+ })), [wsApi, provider, providerType, selectedProviderName, applyConnected]);
27870
27874
 
27871
27875
  /**
27872
27876
  * Disconnect from the WebSocket server.
@@ -27877,7 +27881,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27877
27881
  return _regeneratorRuntime.wrap(function (_context3) {
27878
27882
  while (1) switch (_context3.prev = _context3.next) {
27879
27883
  case 0:
27880
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName)) {
27884
+ if (!(!wsApi || !selectedProviderName)) {
27881
27885
  _context3.next = 1;
27882
27886
  break;
27883
27887
  }
@@ -27915,7 +27919,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27915
27919
  pendingConnects["delete"](selectedProviderName);
27916
27920
  _context3.prev = 4;
27917
27921
  _context3.next = 5;
27918
- return dashApi.webSocket.disconnect(selectedProviderName);
27922
+ return wsApi.disconnect(selectedProviderName);
27919
27923
  case 5:
27920
27924
  _context3.next = 7;
27921
27925
  break;
@@ -27927,7 +27931,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27927
27931
  return _context3.stop();
27928
27932
  }
27929
27933
  }, _callee3, null, [[4, 6]]);
27930
- })), [dashApi, selectedProviderName]);
27934
+ })), [wsApi, selectedProviderName]);
27931
27935
 
27932
27936
  /**
27933
27937
  * Send data through the WebSocket connection
@@ -27938,14 +27942,14 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27938
27942
  return _regeneratorRuntime.wrap(function (_context4) {
27939
27943
  while (1) switch (_context4.prev = _context4.next) {
27940
27944
  case 0:
27941
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName)) {
27945
+ if (!(!wsApi || !selectedProviderName)) {
27942
27946
  _context4.next = 1;
27943
27947
  break;
27944
27948
  }
27945
27949
  throw new Error("WebSocket not connected");
27946
27950
  case 1:
27947
27951
  _context4.next = 2;
27948
- return dashApi.webSocket.send(selectedProviderName, data);
27952
+ return wsApi.send(selectedProviderName, data);
27949
27953
  case 2:
27950
27954
  result = _context4.sent;
27951
27955
  if (!result.error) {
@@ -27964,7 +27968,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27964
27968
  return function (_x) {
27965
27969
  return _ref4.apply(this, arguments);
27966
27970
  };
27967
- }(), [dashApi, selectedProviderName]);
27971
+ }(), [wsApi, selectedProviderName]);
27968
27972
 
27969
27973
  // Keep a ref to connect so the auto-connect effect doesn't depend on it
27970
27974
  var connectRef = React.useRef(connect);
@@ -27972,7 +27976,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27972
27976
 
27973
27977
  // Listen for incoming messages from main process
27974
27978
  React.useEffect(function () {
27975
- if (!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName) return;
27979
+ if (!wsApi || !selectedProviderName) return;
27976
27980
  var handleMessage = function handleMessage(_event, payload) {
27977
27981
  if (payload.provider !== selectedProviderName) return;
27978
27982
  if (!mountedRef.current) return;
@@ -27987,15 +27991,15 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27987
27991
  setMessages(next);
27988
27992
  setLastMessage(msg);
27989
27993
  };
27990
- dashApi.webSocket.onMessage(handleMessage);
27994
+ wsApi.onMessage(handleMessage);
27991
27995
  return function () {
27992
- return dashApi.webSocket.offMessage(handleMessage);
27996
+ return wsApi.offMessage(handleMessage);
27993
27997
  };
27994
- }, [dashApi, selectedProviderName]);
27998
+ }, [wsApi, selectedProviderName]);
27995
27999
 
27996
28000
  // Listen for status changes from main process
27997
28001
  React.useEffect(function () {
27998
- if (!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName) return;
28002
+ if (!wsApi || !selectedProviderName) return;
27999
28003
  var handleStatusChange = function handleStatusChange(_event, payload) {
28000
28004
  if (payload.provider !== selectedProviderName) return;
28001
28005
  if (!mountedRef.current) return;
@@ -28032,11 +28036,11 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28032
28036
  }
28033
28037
  }
28034
28038
  };
28035
- dashApi.webSocket.onStatusChange(handleStatusChange);
28039
+ wsApi.onStatusChange(handleStatusChange);
28036
28040
  return function () {
28037
- return dashApi.webSocket.offStatusChange(handleStatusChange);
28041
+ return wsApi.offStatusChange(handleStatusChange);
28038
28042
  };
28039
- }, [dashApi, selectedProviderName]);
28043
+ }, [wsApi, selectedProviderName]);
28040
28044
 
28041
28045
  // Auto-connect on mount or when provider selection changes
28042
28046
  React.useEffect(function () {
@@ -28053,7 +28057,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28053
28057
  mountedRef.current = false;
28054
28058
 
28055
28059
  // Decrement consumer count; only disconnect if last consumer
28056
- if (connectedRef.current && dashApi !== null && dashApi !== void 0 && dashApi.webSocket && selectedProviderName) {
28060
+ if (connectedRef.current && wsApi && selectedProviderName) {
28057
28061
  var state = connectionStates.get(selectedProviderName);
28058
28062
  if (state) {
28059
28063
  state.consumerCount = Math.max(0, state.consumerCount - 1);
@@ -28065,10 +28069,10 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28065
28069
  // Last consumer — disconnect
28066
28070
  connectionStates["delete"](selectedProviderName);
28067
28071
  }
28068
- dashApi.webSocket.disconnect(selectedProviderName)["catch"](function () {});
28072
+ wsApi.disconnect(selectedProviderName)["catch"](function () {});
28069
28073
  }
28070
28074
  };
28071
- }, [dashApi, selectedProviderName]);
28075
+ }, [wsApi, selectedProviderName]);
28072
28076
  return {
28073
28077
  isConnected: isConnected,
28074
28078
  isConnecting: isConnecting,
@@ -40517,17 +40521,44 @@ var ThemeDetail = function ThemeDetail(_ref6) {
40517
40521
 
40518
40522
  function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
40519
40523
  function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
40520
- var ThemesSection = function ThemesSection(_ref) {
40521
- var _ref$onOpenThemeEdito = _ref.onOpenThemeEditor,
40522
- onOpenThemeEditor = _ref$onOpenThemeEdito === void 0 ? null : _ref$onOpenThemeEdito,
40523
- _ref$dashApi = _ref.dashApi,
40524
- dashApi = _ref$dashApi === void 0 ? null : _ref$dashApi,
40525
- _ref$credentials = _ref.credentials,
40526
- credentials = _ref$credentials === void 0 ? null : _ref$credentials,
40527
- _ref$createRequested = _ref.createRequested,
40528
- createRequested = _ref$createRequested === void 0 ? false : _ref$createRequested,
40529
- _ref$onCreateAcknowle = _ref.onCreateAcknowledged,
40530
- onCreateAcknowledged = _ref$onCreateAcknowle === void 0 ? null : _ref$onCreateAcknowle;
40524
+ var BackToChooser = function BackToChooser(_ref) {
40525
+ var onClick = _ref.onClick,
40526
+ children = _ref.children;
40527
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
40528
+ className: "flex flex-col h-full overflow-hidden",
40529
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
40530
+ className: "flex-shrink-0 px-4 pt-4",
40531
+ children: /*#__PURE__*/jsxRuntime.jsxs("button", {
40532
+ type: "button",
40533
+ onClick: onClick,
40534
+ className: "flex items-center gap-1.5 text-sm opacity-60 hover:opacity-100 transition-opacity",
40535
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
40536
+ icon: "arrow-left",
40537
+ className: "h-3 w-3"
40538
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
40539
+ children: "Back"
40540
+ })]
40541
+ })
40542
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
40543
+ className: "flex-1 min-h-0 overflow-y-auto",
40544
+ children: children
40545
+ })]
40546
+ });
40547
+ };
40548
+
40549
+ // ─── Main Component ──────────────────────────────────────────────────────
40550
+
40551
+ var ThemesSection = function ThemesSection(_ref2) {
40552
+ var _ref2$onOpenThemeEdit = _ref2.onOpenThemeEditor,
40553
+ onOpenThemeEditor = _ref2$onOpenThemeEdit === void 0 ? null : _ref2$onOpenThemeEdit,
40554
+ _ref2$dashApi = _ref2.dashApi,
40555
+ dashApi = _ref2$dashApi === void 0 ? null : _ref2$dashApi,
40556
+ _ref2$credentials = _ref2.credentials,
40557
+ credentials = _ref2$credentials === void 0 ? null : _ref2$credentials,
40558
+ _ref2$createRequested = _ref2.createRequested,
40559
+ createRequested = _ref2$createRequested === void 0 ? false : _ref2$createRequested,
40560
+ _ref2$onCreateAcknowl = _ref2.onCreateAcknowledged,
40561
+ onCreateAcknowledged = _ref2$onCreateAcknowl === void 0 ? null : _ref2$onCreateAcknowl;
40531
40562
  var _useContext = React.useContext(DashReact.ThemeContext),
40532
40563
  themes = _useContext.themes,
40533
40564
  currentThemeKey = _useContext.themeKey,
@@ -40565,6 +40596,10 @@ var ThemesSection = function ThemesSection(_ref) {
40565
40596
  _useState12 = _slicedToArray(_useState11, 2),
40566
40597
  enteredViaChooser = _useState12[0],
40567
40598
  setEnteredViaChooser = _useState12[1];
40599
+ var _useState13 = React.useState(null),
40600
+ _useState14 = _slicedToArray(_useState13, 2),
40601
+ initialMethod = _useState14[0],
40602
+ setInitialMethod = _useState14[1];
40568
40603
  var themeEntries = themes ? Object.entries(themes) : [];
40569
40604
  var appId = credentials === null || credentials === void 0 ? void 0 : credentials.appId;
40570
40605
  var rowStyles = DashReact.getStylesForItem(DashReact.themeObjects.PANEL_HEADER, currentTheme, {
@@ -40625,9 +40660,9 @@ var ThemesSection = function ThemesSection(_ref) {
40625
40660
  if (!dashApi || !appId) return;
40626
40661
  if (key === currentThemeKey) {
40627
40662
  var _themeEntries$find;
40628
- var otherKey = (_themeEntries$find = themeEntries.find(function (_ref2) {
40629
- var _ref3 = _slicedToArray(_ref2, 1),
40630
- k = _ref3[0];
40663
+ var otherKey = (_themeEntries$find = themeEntries.find(function (_ref3) {
40664
+ var _ref4 = _slicedToArray(_ref3, 1),
40665
+ k = _ref4[0];
40631
40666
  return k !== key;
40632
40667
  })) === null || _themeEntries$find === void 0 ? void 0 : _themeEntries$find[0];
40633
40668
  if (otherKey) {
@@ -40743,10 +40778,10 @@ var ThemesSection = function ThemesSection(_ref) {
40743
40778
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
40744
40779
  className: "flex-1 overflow-y-auto min-h-0",
40745
40780
  children: /*#__PURE__*/jsxRuntime.jsxs(DashReact.Sidebar.Content, {
40746
- children: [themeEntries.map(function (_ref4) {
40747
- var _ref5 = _slicedToArray(_ref4, 2),
40748
- key = _ref5[0],
40749
- theme = _ref5[1];
40781
+ children: [themeEntries.map(function (_ref5) {
40782
+ var _ref6 = _slicedToArray(_ref5, 2),
40783
+ key = _ref6[0],
40784
+ theme = _ref6[1];
40750
40785
  var isActive = key === currentThemeKey;
40751
40786
  var isSelected = selectedThemeKey === key && generateMode === GENERATE_MODES.NONE && installMode !== "marketplace";
40752
40787
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Item, {
@@ -40807,38 +40842,57 @@ var ThemesSection = function ThemesSection(_ref) {
40807
40842
  setInstallMode("marketplace");
40808
40843
  setEnteredViaChooser(true);
40809
40844
  },
40810
- onCreateNew: function onCreateNew() {
40811
- setGenerateMode(GENERATE_MODES.WIZARD);
40812
- },
40813
- onCreateFromUrl: function onCreateFromUrl() {
40814
- setGenerateMode(GENERATE_MODES.FROM_URL);
40845
+ onSelectMethod: function onSelectMethod(method) {
40846
+ setInitialMethod(method);
40847
+ if (method === "presets") setGenerateMode(GENERATE_MODES.PRESETS);else if (method === "color") setGenerateMode(GENERATE_MODES.COLOR);else if (method === "from-url") setGenerateMode(GENERATE_MODES.FROM_URL);else setGenerateMode(GENERATE_MODES.WIZARD);
40815
40848
  }
40816
40849
  });
40817
40850
  } else if (generateMode === GENERATE_MODES.WIZARD) {
40818
- detailContent = /*#__PURE__*/jsxRuntime.jsx(ThemeQuickCreate, {
40819
- wizardName: wizardName,
40820
- setWizardName: setWizardName,
40821
- wizardMethod: wizardMethod,
40822
- setWizardMethod: setWizardMethod,
40823
- wizardTheme: wizardTheme,
40824
- setWizardTheme: setWizardTheme,
40825
- onComplete: handleWizardComplete,
40826
- onExtract: handleUrlExtract,
40827
- onMapToTheme: handleUrlMapToTheme
40851
+ detailContent = /*#__PURE__*/jsxRuntime.jsx(BackToChooser, {
40852
+ onClick: function onClick() {
40853
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40854
+ },
40855
+ children: /*#__PURE__*/jsxRuntime.jsx(ThemeQuickCreate, {
40856
+ wizardName: wizardName,
40857
+ setWizardName: setWizardName,
40858
+ wizardMethod: wizardMethod,
40859
+ setWizardMethod: setWizardMethod,
40860
+ wizardTheme: wizardTheme,
40861
+ setWizardTheme: setWizardTheme,
40862
+ onComplete: handleWizardComplete,
40863
+ onExtract: handleUrlExtract,
40864
+ onMapToTheme: handleUrlMapToTheme,
40865
+ initialMethod: initialMethod
40866
+ })
40828
40867
  });
40829
40868
  } else if (generateMode === GENERATE_MODES.PRESETS) {
40830
- detailContent = /*#__PURE__*/jsxRuntime.jsx(PresetGallery, {
40831
- onSelect: handleCreateFromPreset
40869
+ detailContent = /*#__PURE__*/jsxRuntime.jsx(BackToChooser, {
40870
+ onClick: function onClick() {
40871
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40872
+ },
40873
+ children: /*#__PURE__*/jsxRuntime.jsx(PresetGallery, {
40874
+ onSelect: handleCreateFromPreset
40875
+ })
40832
40876
  });
40833
40877
  } else if (generateMode === GENERATE_MODES.FROM_URL) {
40834
- detailContent = /*#__PURE__*/jsxRuntime.jsx(DashReact.ThemeFromUrlPane, {
40835
- onExtract: handleUrlExtract,
40836
- onMapToTheme: handleUrlMapToTheme,
40837
- onGenerate: handleUrlThemeGenerated
40878
+ detailContent = /*#__PURE__*/jsxRuntime.jsx(BackToChooser, {
40879
+ onClick: function onClick() {
40880
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40881
+ },
40882
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.ThemeFromUrlPane, {
40883
+ onExtract: handleUrlExtract,
40884
+ onMapToTheme: handleUrlMapToTheme,
40885
+ onGenerate: handleUrlThemeGenerated
40886
+ })
40838
40887
  });
40839
40888
  } else if (generateMode === GENERATE_MODES.COLOR) {
40840
- detailContent = /*#__PURE__*/jsxRuntime.jsx(ColorHarmonyPicker, {
40841
- onGenerate: handleCreateFromHarmony
40889
+ detailContent = /*#__PURE__*/jsxRuntime.jsx(BackToChooser, {
40890
+ onClick: function onClick() {
40891
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40892
+ },
40893
+ children: /*#__PURE__*/jsxRuntime.jsx(ColorHarmonyPicker, {
40894
+ onGenerate: handleCreateFromHarmony
40895
+ })
40842
40896
  });
40843
40897
  } else if (selectedThemeKey && themes && themes[selectedThemeKey]) {
40844
40898
  detailContent = /*#__PURE__*/jsxRuntime.jsx(ThemeDetail, {