@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.esm.js CHANGED
@@ -27564,7 +27564,7 @@ var STATUS = {
27564
27564
  * @returns {Object} WebSocket provider interface
27565
27565
  */
27566
27566
  var useWebSocketProvider = function useWebSocketProvider(providerType) {
27567
- var _app$providers;
27567
+ var _dashApi$api, _app$providers;
27568
27568
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27569
27569
  var _options$autoConnect = options.autoConnect,
27570
27570
  autoConnect = _options$autoConnect === void 0 ? true : _options$autoConnect,
@@ -27611,6 +27611,10 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27611
27611
  var maxMessagesRef = useRef(maxMessages);
27612
27612
  maxMessagesRef.current = maxMessages;
27613
27613
  var dashApi = app === null || app === void 0 ? void 0 : app.dashApi;
27614
+ // Access the raw preload bridge (mainApi) for the webSocket sub-API.
27615
+ // dashApi is an ElectronDashboardApi wrapper; the webSocket methods
27616
+ // live on the underlying mainApi object (dashApi.api).
27617
+ var wsApi = dashApi === null || dashApi === void 0 || (_dashApi$api = dashApi.api) === null || _dashApi$api === void 0 ? void 0 : _dashApi$api.webSocket;
27614
27618
 
27615
27619
  // Get the widget data
27616
27620
  var widgetData = widgetContext === null || widgetContext === void 0 ? void 0 : widgetContext.widgetData;
@@ -27662,7 +27666,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27662
27666
  }
27663
27667
  return _context2.abrupt("return");
27664
27668
  case 1:
27665
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !provider)) {
27669
+ if (!(!wsApi || !provider)) {
27666
27670
  _context2.next = 2;
27667
27671
  break;
27668
27672
  }
@@ -27691,7 +27695,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27691
27695
  }
27692
27696
  _context2.prev = 5;
27693
27697
  _context2.next = 6;
27694
- return dashApi.webSocket.getStatus(selectedProviderName);
27698
+ return wsApi.getStatus(selectedProviderName);
27695
27699
  case 6:
27696
27700
  statusResult = _context2.sent;
27697
27701
  if (!((statusResult === null || statusResult === void 0 ? void 0 : statusResult.status) === "connected")) {
@@ -27768,7 +27772,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27768
27772
  case 0:
27769
27773
  _context.prev = 0;
27770
27774
  _context.next = 1;
27771
- return dashApi.webSocket.connect(selectedProviderName, {
27775
+ return wsApi.connect(selectedProviderName, {
27772
27776
  url: provider.wsConfig.url,
27773
27777
  headers: provider.wsConfig.headers || null,
27774
27778
  subprotocols: provider.wsConfig.subprotocols || null,
@@ -27848,7 +27852,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27848
27852
  return _context2.stop();
27849
27853
  }
27850
27854
  }, _callee2, null, [[5, 8], [10, 14], [18, 22]]);
27851
- })), [dashApi, provider, providerType, selectedProviderName, applyConnected]);
27855
+ })), [wsApi, provider, providerType, selectedProviderName, applyConnected]);
27852
27856
 
27853
27857
  /**
27854
27858
  * Disconnect from the WebSocket server.
@@ -27859,7 +27863,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27859
27863
  return _regeneratorRuntime.wrap(function (_context3) {
27860
27864
  while (1) switch (_context3.prev = _context3.next) {
27861
27865
  case 0:
27862
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName)) {
27866
+ if (!(!wsApi || !selectedProviderName)) {
27863
27867
  _context3.next = 1;
27864
27868
  break;
27865
27869
  }
@@ -27897,7 +27901,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27897
27901
  pendingConnects["delete"](selectedProviderName);
27898
27902
  _context3.prev = 4;
27899
27903
  _context3.next = 5;
27900
- return dashApi.webSocket.disconnect(selectedProviderName);
27904
+ return wsApi.disconnect(selectedProviderName);
27901
27905
  case 5:
27902
27906
  _context3.next = 7;
27903
27907
  break;
@@ -27909,7 +27913,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27909
27913
  return _context3.stop();
27910
27914
  }
27911
27915
  }, _callee3, null, [[4, 6]]);
27912
- })), [dashApi, selectedProviderName]);
27916
+ })), [wsApi, selectedProviderName]);
27913
27917
 
27914
27918
  /**
27915
27919
  * Send data through the WebSocket connection
@@ -27920,14 +27924,14 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27920
27924
  return _regeneratorRuntime.wrap(function (_context4) {
27921
27925
  while (1) switch (_context4.prev = _context4.next) {
27922
27926
  case 0:
27923
- if (!(!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName)) {
27927
+ if (!(!wsApi || !selectedProviderName)) {
27924
27928
  _context4.next = 1;
27925
27929
  break;
27926
27930
  }
27927
27931
  throw new Error("WebSocket not connected");
27928
27932
  case 1:
27929
27933
  _context4.next = 2;
27930
- return dashApi.webSocket.send(selectedProviderName, data);
27934
+ return wsApi.send(selectedProviderName, data);
27931
27935
  case 2:
27932
27936
  result = _context4.sent;
27933
27937
  if (!result.error) {
@@ -27946,7 +27950,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27946
27950
  return function (_x) {
27947
27951
  return _ref4.apply(this, arguments);
27948
27952
  };
27949
- }(), [dashApi, selectedProviderName]);
27953
+ }(), [wsApi, selectedProviderName]);
27950
27954
 
27951
27955
  // Keep a ref to connect so the auto-connect effect doesn't depend on it
27952
27956
  var connectRef = useRef(connect);
@@ -27954,7 +27958,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27954
27958
 
27955
27959
  // Listen for incoming messages from main process
27956
27960
  useEffect(function () {
27957
- if (!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName) return;
27961
+ if (!wsApi || !selectedProviderName) return;
27958
27962
  var handleMessage = function handleMessage(_event, payload) {
27959
27963
  if (payload.provider !== selectedProviderName) return;
27960
27964
  if (!mountedRef.current) return;
@@ -27969,15 +27973,15 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
27969
27973
  setMessages(next);
27970
27974
  setLastMessage(msg);
27971
27975
  };
27972
- dashApi.webSocket.onMessage(handleMessage);
27976
+ wsApi.onMessage(handleMessage);
27973
27977
  return function () {
27974
- return dashApi.webSocket.offMessage(handleMessage);
27978
+ return wsApi.offMessage(handleMessage);
27975
27979
  };
27976
- }, [dashApi, selectedProviderName]);
27980
+ }, [wsApi, selectedProviderName]);
27977
27981
 
27978
27982
  // Listen for status changes from main process
27979
27983
  useEffect(function () {
27980
- if (!(dashApi !== null && dashApi !== void 0 && dashApi.webSocket) || !selectedProviderName) return;
27984
+ if (!wsApi || !selectedProviderName) return;
27981
27985
  var handleStatusChange = function handleStatusChange(_event, payload) {
27982
27986
  if (payload.provider !== selectedProviderName) return;
27983
27987
  if (!mountedRef.current) return;
@@ -28014,11 +28018,11 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28014
28018
  }
28015
28019
  }
28016
28020
  };
28017
- dashApi.webSocket.onStatusChange(handleStatusChange);
28021
+ wsApi.onStatusChange(handleStatusChange);
28018
28022
  return function () {
28019
- return dashApi.webSocket.offStatusChange(handleStatusChange);
28023
+ return wsApi.offStatusChange(handleStatusChange);
28020
28024
  };
28021
- }, [dashApi, selectedProviderName]);
28025
+ }, [wsApi, selectedProviderName]);
28022
28026
 
28023
28027
  // Auto-connect on mount or when provider selection changes
28024
28028
  useEffect(function () {
@@ -28035,7 +28039,7 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28035
28039
  mountedRef.current = false;
28036
28040
 
28037
28041
  // Decrement consumer count; only disconnect if last consumer
28038
- if (connectedRef.current && dashApi !== null && dashApi !== void 0 && dashApi.webSocket && selectedProviderName) {
28042
+ if (connectedRef.current && wsApi && selectedProviderName) {
28039
28043
  var state = connectionStates.get(selectedProviderName);
28040
28044
  if (state) {
28041
28045
  state.consumerCount = Math.max(0, state.consumerCount - 1);
@@ -28047,10 +28051,10 @@ var useWebSocketProvider = function useWebSocketProvider(providerType) {
28047
28051
  // Last consumer — disconnect
28048
28052
  connectionStates["delete"](selectedProviderName);
28049
28053
  }
28050
- dashApi.webSocket.disconnect(selectedProviderName)["catch"](function () {});
28054
+ wsApi.disconnect(selectedProviderName)["catch"](function () {});
28051
28055
  }
28052
28056
  };
28053
- }, [dashApi, selectedProviderName]);
28057
+ }, [wsApi, selectedProviderName]);
28054
28058
  return {
28055
28059
  isConnected: isConnected,
28056
28060
  isConnecting: isConnecting,
@@ -40499,17 +40503,44 @@ var ThemeDetail = function ThemeDetail(_ref6) {
40499
40503
 
40500
40504
  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; }
40501
40505
  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; }
40502
- var ThemesSection = function ThemesSection(_ref) {
40503
- var _ref$onOpenThemeEdito = _ref.onOpenThemeEditor,
40504
- onOpenThemeEditor = _ref$onOpenThemeEdito === void 0 ? null : _ref$onOpenThemeEdito,
40505
- _ref$dashApi = _ref.dashApi,
40506
- dashApi = _ref$dashApi === void 0 ? null : _ref$dashApi,
40507
- _ref$credentials = _ref.credentials,
40508
- credentials = _ref$credentials === void 0 ? null : _ref$credentials,
40509
- _ref$createRequested = _ref.createRequested,
40510
- createRequested = _ref$createRequested === void 0 ? false : _ref$createRequested,
40511
- _ref$onCreateAcknowle = _ref.onCreateAcknowledged,
40512
- onCreateAcknowledged = _ref$onCreateAcknowle === void 0 ? null : _ref$onCreateAcknowle;
40506
+ var BackToChooser = function BackToChooser(_ref) {
40507
+ var onClick = _ref.onClick,
40508
+ children = _ref.children;
40509
+ return /*#__PURE__*/jsxs("div", {
40510
+ className: "flex flex-col h-full overflow-hidden",
40511
+ children: [/*#__PURE__*/jsx("div", {
40512
+ className: "flex-shrink-0 px-4 pt-4",
40513
+ children: /*#__PURE__*/jsxs("button", {
40514
+ type: "button",
40515
+ onClick: onClick,
40516
+ className: "flex items-center gap-1.5 text-sm opacity-60 hover:opacity-100 transition-opacity",
40517
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
40518
+ icon: "arrow-left",
40519
+ className: "h-3 w-3"
40520
+ }), /*#__PURE__*/jsx("span", {
40521
+ children: "Back"
40522
+ })]
40523
+ })
40524
+ }), /*#__PURE__*/jsx("div", {
40525
+ className: "flex-1 min-h-0 overflow-y-auto",
40526
+ children: children
40527
+ })]
40528
+ });
40529
+ };
40530
+
40531
+ // ─── Main Component ──────────────────────────────────────────────────────
40532
+
40533
+ var ThemesSection = function ThemesSection(_ref2) {
40534
+ var _ref2$onOpenThemeEdit = _ref2.onOpenThemeEditor,
40535
+ onOpenThemeEditor = _ref2$onOpenThemeEdit === void 0 ? null : _ref2$onOpenThemeEdit,
40536
+ _ref2$dashApi = _ref2.dashApi,
40537
+ dashApi = _ref2$dashApi === void 0 ? null : _ref2$dashApi,
40538
+ _ref2$credentials = _ref2.credentials,
40539
+ credentials = _ref2$credentials === void 0 ? null : _ref2$credentials,
40540
+ _ref2$createRequested = _ref2.createRequested,
40541
+ createRequested = _ref2$createRequested === void 0 ? false : _ref2$createRequested,
40542
+ _ref2$onCreateAcknowl = _ref2.onCreateAcknowledged,
40543
+ onCreateAcknowledged = _ref2$onCreateAcknowl === void 0 ? null : _ref2$onCreateAcknowl;
40513
40544
  var _useContext = useContext(ThemeContext),
40514
40545
  themes = _useContext.themes,
40515
40546
  currentThemeKey = _useContext.themeKey,
@@ -40547,6 +40578,10 @@ var ThemesSection = function ThemesSection(_ref) {
40547
40578
  _useState12 = _slicedToArray(_useState11, 2),
40548
40579
  enteredViaChooser = _useState12[0],
40549
40580
  setEnteredViaChooser = _useState12[1];
40581
+ var _useState13 = useState(null),
40582
+ _useState14 = _slicedToArray(_useState13, 2),
40583
+ initialMethod = _useState14[0],
40584
+ setInitialMethod = _useState14[1];
40550
40585
  var themeEntries = themes ? Object.entries(themes) : [];
40551
40586
  var appId = credentials === null || credentials === void 0 ? void 0 : credentials.appId;
40552
40587
  var rowStyles = getStylesForItem(themeObjects.PANEL_HEADER, currentTheme, {
@@ -40607,9 +40642,9 @@ var ThemesSection = function ThemesSection(_ref) {
40607
40642
  if (!dashApi || !appId) return;
40608
40643
  if (key === currentThemeKey) {
40609
40644
  var _themeEntries$find;
40610
- var otherKey = (_themeEntries$find = themeEntries.find(function (_ref2) {
40611
- var _ref3 = _slicedToArray(_ref2, 1),
40612
- k = _ref3[0];
40645
+ var otherKey = (_themeEntries$find = themeEntries.find(function (_ref3) {
40646
+ var _ref4 = _slicedToArray(_ref3, 1),
40647
+ k = _ref4[0];
40613
40648
  return k !== key;
40614
40649
  })) === null || _themeEntries$find === void 0 ? void 0 : _themeEntries$find[0];
40615
40650
  if (otherKey) {
@@ -40725,10 +40760,10 @@ var ThemesSection = function ThemesSection(_ref) {
40725
40760
  }), /*#__PURE__*/jsx("div", {
40726
40761
  className: "flex-1 overflow-y-auto min-h-0",
40727
40762
  children: /*#__PURE__*/jsxs(Sidebar.Content, {
40728
- children: [themeEntries.map(function (_ref4) {
40729
- var _ref5 = _slicedToArray(_ref4, 2),
40730
- key = _ref5[0],
40731
- theme = _ref5[1];
40763
+ children: [themeEntries.map(function (_ref5) {
40764
+ var _ref6 = _slicedToArray(_ref5, 2),
40765
+ key = _ref6[0],
40766
+ theme = _ref6[1];
40732
40767
  var isActive = key === currentThemeKey;
40733
40768
  var isSelected = selectedThemeKey === key && generateMode === GENERATE_MODES.NONE && installMode !== "marketplace";
40734
40769
  return /*#__PURE__*/jsx(Sidebar.Item, {
@@ -40789,38 +40824,57 @@ var ThemesSection = function ThemesSection(_ref) {
40789
40824
  setInstallMode("marketplace");
40790
40825
  setEnteredViaChooser(true);
40791
40826
  },
40792
- onCreateNew: function onCreateNew() {
40793
- setGenerateMode(GENERATE_MODES.WIZARD);
40794
- },
40795
- onCreateFromUrl: function onCreateFromUrl() {
40796
- setGenerateMode(GENERATE_MODES.FROM_URL);
40827
+ onSelectMethod: function onSelectMethod(method) {
40828
+ setInitialMethod(method);
40829
+ 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);
40797
40830
  }
40798
40831
  });
40799
40832
  } else if (generateMode === GENERATE_MODES.WIZARD) {
40800
- detailContent = /*#__PURE__*/jsx(ThemeQuickCreate, {
40801
- wizardName: wizardName,
40802
- setWizardName: setWizardName,
40803
- wizardMethod: wizardMethod,
40804
- setWizardMethod: setWizardMethod,
40805
- wizardTheme: wizardTheme,
40806
- setWizardTheme: setWizardTheme,
40807
- onComplete: handleWizardComplete,
40808
- onExtract: handleUrlExtract,
40809
- onMapToTheme: handleUrlMapToTheme
40833
+ detailContent = /*#__PURE__*/jsx(BackToChooser, {
40834
+ onClick: function onClick() {
40835
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40836
+ },
40837
+ children: /*#__PURE__*/jsx(ThemeQuickCreate, {
40838
+ wizardName: wizardName,
40839
+ setWizardName: setWizardName,
40840
+ wizardMethod: wizardMethod,
40841
+ setWizardMethod: setWizardMethod,
40842
+ wizardTheme: wizardTheme,
40843
+ setWizardTheme: setWizardTheme,
40844
+ onComplete: handleWizardComplete,
40845
+ onExtract: handleUrlExtract,
40846
+ onMapToTheme: handleUrlMapToTheme,
40847
+ initialMethod: initialMethod
40848
+ })
40810
40849
  });
40811
40850
  } else if (generateMode === GENERATE_MODES.PRESETS) {
40812
- detailContent = /*#__PURE__*/jsx(PresetGallery, {
40813
- onSelect: handleCreateFromPreset
40851
+ detailContent = /*#__PURE__*/jsx(BackToChooser, {
40852
+ onClick: function onClick() {
40853
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40854
+ },
40855
+ children: /*#__PURE__*/jsx(PresetGallery, {
40856
+ onSelect: handleCreateFromPreset
40857
+ })
40814
40858
  });
40815
40859
  } else if (generateMode === GENERATE_MODES.FROM_URL) {
40816
- detailContent = /*#__PURE__*/jsx(ThemeFromUrlPane, {
40817
- onExtract: handleUrlExtract,
40818
- onMapToTheme: handleUrlMapToTheme,
40819
- onGenerate: handleUrlThemeGenerated
40860
+ detailContent = /*#__PURE__*/jsx(BackToChooser, {
40861
+ onClick: function onClick() {
40862
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40863
+ },
40864
+ children: /*#__PURE__*/jsx(ThemeFromUrlPane, {
40865
+ onExtract: handleUrlExtract,
40866
+ onMapToTheme: handleUrlMapToTheme,
40867
+ onGenerate: handleUrlThemeGenerated
40868
+ })
40820
40869
  });
40821
40870
  } else if (generateMode === GENERATE_MODES.COLOR) {
40822
- detailContent = /*#__PURE__*/jsx(ColorHarmonyPicker, {
40823
- onGenerate: handleCreateFromHarmony
40871
+ detailContent = /*#__PURE__*/jsx(BackToChooser, {
40872
+ onClick: function onClick() {
40873
+ return setGenerateMode(GENERATE_MODES.CHOOSER);
40874
+ },
40875
+ children: /*#__PURE__*/jsx(ColorHarmonyPicker, {
40876
+ onGenerate: handleCreateFromHarmony
40877
+ })
40824
40878
  });
40825
40879
  } else if (selectedThemeKey && themes && themes[selectedThemeKey]) {
40826
40880
  detailContent = /*#__PURE__*/jsx(ThemeDetail, {