@peers-app/peers-ui 0.28.1 → 0.28.3

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.
@@ -12,6 +12,14 @@ const SaveButton = (props) => {
12
12
  let { doc, addActions } = props;
13
13
  (0, hooks_1.useObservable)(doc.q);
14
14
  const q = doc.q;
15
+ const save = async () => {
16
+ try {
17
+ await (props.onClick ? props.onClick() : doc.save());
18
+ }
19
+ catch (err) {
20
+ alert(`Save failed: ${err instanceof Error ? err.message : String(err)}`);
21
+ }
22
+ };
15
23
  if (!addActions) {
16
24
  addActions = [];
17
25
  }
@@ -62,9 +70,9 @@ const SaveButton = (props) => {
62
70
  className += "disabled";
63
71
  }
64
72
  if (!addActions?.length && props.noBuiltInActions) {
65
- return ((0, jsx_runtime_1.jsx)("button", { className: className, onClick: props.onClick ?? doc.save, disabled: !q(), children: (0, globals_1.isDesktop)() ? "Save Changes" : "Save" }));
73
+ return ((0, jsx_runtime_1.jsx)("button", { className: className, onClick: save, disabled: !q(), children: (0, globals_1.isDesktop)() ? "Save Changes" : "Save" }));
66
74
  }
67
- return ((0, jsx_runtime_1.jsx)("div", { style: { display: "inline-block" }, children: (0, jsx_runtime_1.jsxs)("div", { className: "input-group", children: [(0, jsx_runtime_1.jsx)("button", { className: className, onClick: props.onClick ?? doc.save, disabled: !q(), children: (0, globals_1.isDesktop)() ? "Save Changes" : "Save" }), (0, jsx_runtime_1.jsx)("button", { type: "button", "data-bs-toggle": "dropdown", "aria-expanded": "false",
75
+ return ((0, jsx_runtime_1.jsx)("div", { style: { display: "inline-block" }, children: (0, jsx_runtime_1.jsxs)("div", { className: "input-group", children: [(0, jsx_runtime_1.jsx)("button", { className: className, onClick: save, disabled: !q(), children: (0, globals_1.isDesktop)() ? "Save Changes" : "Save" }), (0, jsx_runtime_1.jsx)("button", { type: "button", "data-bs-toggle": "dropdown", "aria-expanded": "false",
68
76
  // className={`btn dropdown-toggle dropdown-toggle-split ${q() ? 'btn-primary' : 'btn-secondary'}`}
69
77
  className: `btn dropdown-toggle dropdown-toggle-split btn-secondary`, children: (0, jsx_runtime_1.jsx)("span", { className: "visually-hidden", children: "Toggle Dropdown" }) }), (0, jsx_runtime_1.jsx)("ul", { className: "dropdown-menu dropdown-menu-end", children: allActions.map((action) => {
70
78
  if (typeof action !== "object" || action === null || !("label" in action)) {
@@ -13,6 +13,13 @@ export declare function hostShellTools(): Promise<IHostShellConsumer["tools"]>;
13
13
  * @param target - Link or local path (`~` allowed).
14
14
  */
15
15
  export declare function openOnHost(target: string): Promise<void>;
16
+ /**
17
+ * Open a web link in the user's browser, or a `mailto:` link in their mail app. Package UIs use
18
+ * this: anything else (a local path, another scheme) is refused. Failures are logged and shown.
19
+ *
20
+ * @param url - An `http:`, `https:`, or `mailto:` URL.
21
+ */
22
+ export declare function openLink(url: string): Promise<void>;
16
23
  /**
17
24
  * Open a folder in a code editor (VS Code when installed), else with the OS.
18
25
  *
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hostShellContract = void 0;
4
4
  exports.hostShellTools = hostShellTools;
5
5
  exports.openOnHost = openOnHost;
6
+ exports.openLink = openLink;
6
7
  exports.openInEditorOnHost = openInEditorOnHost;
7
8
  const peers_sdk_1 = require("@peers-app/peers-sdk");
8
9
  /**
@@ -28,6 +29,28 @@ async function openOnHost(target) {
28
29
  reportHostShellError(`Could not open ${target}`, error);
29
30
  }
30
31
  }
32
+ /** Link schemes {@link openLink} opens. */
33
+ const LINK_SCHEMES = new Set(["http:", "https:", "mailto:"]);
34
+ /**
35
+ * Open a web link in the user's browser, or a `mailto:` link in their mail app. Package UIs use
36
+ * this: anything else (a local path, another scheme) is refused. Failures are logged and shown.
37
+ *
38
+ * @param url - An `http:`, `https:`, or `mailto:` URL.
39
+ */
40
+ async function openLink(url) {
41
+ let scheme;
42
+ try {
43
+ scheme = new URL(url).protocol;
44
+ }
45
+ catch {
46
+ // Not a URL; refused below.
47
+ }
48
+ if (!scheme || !LINK_SCHEMES.has(scheme)) {
49
+ reportHostShellError(`Could not open ${url}`, new Error("only http, https, and mailto links can be opened"));
50
+ return;
51
+ }
52
+ await openOnHost(url);
53
+ }
31
54
  /**
32
55
  * Open a folder in a code editor (VS Code when installed), else with the OS.
33
56
  *
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export * from "./components/tabs";
9
9
  export { Typeahead, type TypeaheadItem } from "./components/typeahead";
10
10
  export { isDesktop, mainContentPath } from "./globals";
11
11
  export * from "./hooks";
12
+ export { openLink } from "./host-shell/host-shell-consumer";
12
13
  export * from "./operator-console/operator-console";
13
14
  export * from "./operator-console/operator-console-state";
14
15
  export { type GlobalOverlay, globalOverlays, registerGlobalOverlay, unregisterGlobalOverlay, } from "./root-layout/global-overlays";
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.updateActiveTabTitle = exports.goToTabPath = exports.closeCurrentTab = exports.activeTabs = exports.activeTabId = exports.setRootLayout = exports.selectedRootLayoutId = exports.getRootLayouts = exports.getRootLayout = exports.DEFAULT_ROOT_LAYOUT_ID = exports.TabsLayoutApp = exports.RootLayoutHost = exports.LayoutPicker = exports.unregisterGlobalOverlay = exports.registerGlobalOverlay = exports.globalOverlays = exports.mainContentPath = exports.isDesktop = exports.Typeahead = exports.MarkdownEditor = void 0;
17
+ exports.updateActiveTabTitle = exports.goToTabPath = exports.closeCurrentTab = exports.activeTabs = exports.activeTabId = exports.setRootLayout = exports.selectedRootLayoutId = exports.getRootLayouts = exports.getRootLayout = exports.DEFAULT_ROOT_LAYOUT_ID = exports.TabsLayoutApp = exports.RootLayoutHost = exports.LayoutPicker = exports.unregisterGlobalOverlay = exports.registerGlobalOverlay = exports.globalOverlays = exports.openLink = exports.mainContentPath = exports.isDesktop = exports.Typeahead = exports.MarkdownEditor = void 0;
18
18
  __exportStar(require("./components/inverse-lazy-list"), exports);
19
19
  var editor_1 = require("./components/markdown-editor/editor");
20
20
  Object.defineProperty(exports, "MarkdownEditor", { enumerable: true, get: function () { return editor_1.MarkdownEditor; } });
@@ -29,6 +29,8 @@ var globals_1 = require("./globals");
29
29
  Object.defineProperty(exports, "isDesktop", { enumerable: true, get: function () { return globals_1.isDesktop; } });
30
30
  Object.defineProperty(exports, "mainContentPath", { enumerable: true, get: function () { return globals_1.mainContentPath; } });
31
31
  __exportStar(require("./hooks"), exports);
32
+ var host_shell_consumer_1 = require("./host-shell/host-shell-consumer");
33
+ Object.defineProperty(exports, "openLink", { enumerable: true, get: function () { return host_shell_consumer_1.openLink; } });
32
34
  __exportStar(require("./operator-console/operator-console"), exports);
33
35
  __exportStar(require("./operator-console/operator-console-state"), exports);
34
36
  var global_overlays_1 = require("./root-layout/global-overlays");
@@ -70,27 +70,27 @@ const PackageInfo = (props) => {
70
70
  return highest || "uptodate";
71
71
  }, undefined, [activeVersionId, pkg.packageId, effectiveFollowTags]);
72
72
  const remoteRepoUrl = pkg.remoteRepo;
73
+ const saveFollowPolicy = async (patch) => {
74
+ try {
75
+ const current = await (0, peers_sdk_1.Packages)().get(pkg.packageId);
76
+ if (current) {
77
+ await (0, peers_sdk_1.Packages)().signAndSave({ ...current, ...patch });
78
+ await pkg.load();
79
+ }
80
+ }
81
+ catch (err) {
82
+ alert(`Failed to save follow policy: ${err instanceof Error ? err.message : String(err)}`);
83
+ }
84
+ };
73
85
  return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("small", { children: "Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: pkg.qs.name, className: "form-control mb-3 p-0 ps-2", placeholder: "Package name", title: "Package name", disabled: true }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Local Path:", (0, jsx_runtime_1.jsxs)("small", { children: [(0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `The local path to the directory containing the package. This will open in VS Code if it's installed otherwise this will open in your native file system` }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-link", onClick: () => {
74
86
  void (0, host_shell_consumer_1.openInEditorOnHost)(localPath || peers_sdk_1.packagesRootDir);
75
87
  }, children: "Open Local" })] })] }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: "form-control mb-3 p-0 ps-2", placeholder: "~/peers/packages/my-package", value: localPath || "", onChange: (e) => setLocalPath(e.target.value) })] }), remoteRepoUrl ? ((0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Source URL:", (0, jsx_runtime_1.jsxs)("small", { children: [(0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `The remote source of this package. Often a github repository URL or a link to the Peers page for the package.` }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-link", onClick: () => {
76
88
  void (0, host_shell_consumer_1.openOnHost)(remoteRepoUrl);
77
- }, children: "Open Remote" })] })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: pkg.qs.remoteRepo, className: "form-control mb-3 p-0 ps-2", disabled: true })] })) : null, (0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Update URL:", (0, jsx_runtime_1.jsx)("small", { children: (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Base URL for remote package updates. Admin devices poll **<updateUrl>/latest-<tag>.json** on startup (for example **latest-stable.json**). Signed artifacts must be published to this host separately — for example via the publish-package tool or the peers-core full-release pipeline.` }) })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: pkg.qs.updateUrl, className: "form-control mb-3 p-0 ps-2", placeholder: "https://example.com/my-package", title: "Update URL" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsx)("hr", {}), (0, jsx_runtime_1.jsxs)("small", { children: ["Version:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "The currently active version of this package. Manage versions in the Versions tab." })] }), activeVersion ? ((0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center mt-1 mb-3", children: [(0, jsx_runtime_1.jsxs)("strong", { className: "me-2", children: ["v", activeVersion.version] }), activeVersion.versionTag && ((0, jsx_runtime_1.jsx)("span", { className: `badge ${activeVersion.versionTag === "dev" ? "text-bg-danger" : activeVersion.versionTag.startsWith("beta") ? "text-bg-warning" : "text-bg-success"} me-2`, children: activeVersion.versionTag })), (0, jsx_runtime_1.jsx)("code", { className: "text-muted small me-2", children: activeVersion.packageVersionHash?.substring(0, 8) }), newerLevel === "uptodate" ? ((0, jsx_runtime_1.jsx)("span", { className: "badge text-bg-success", children: "Up to date" })) : newerLevel ? ((0, jsx_runtime_1.jsxs)("span", { className: `badge text-bg-${newerLevel === "major" ? "danger" : newerLevel === "minor" ? "warning" : "info"}`, children: ["Newer ", newerLevel, " version available"] })) : null] })) : ((0, jsx_runtime_1.jsx)("div", { className: "text-muted small mt-1 mb-3", children: "No active version" })), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Auto-Update Range:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Controls which new versions are auto-activated for the group. When an admin device auto-upgrades, the group's active version advances for everyone. **Pinned** = never auto-update. **Patch** = same major.minor (e.g. 1.2.x). **Minor** = same major (e.g. 1.x.x). **Latest** = always auto-update to newest." })] }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: groupRange, onChange: async (e) => {
78
- const val = e.target.value;
79
- const current = await (0, peers_sdk_1.Packages)().get(pkg.packageId);
80
- if (current) {
81
- current.versionFollowRange = val;
82
- await (0, peers_sdk_1.Packages)().signAndSave(current);
83
- await pkg.load();
84
- }
85
- }, children: [(0, jsx_runtime_1.jsx)("option", { value: "latest", children: "Latest (auto-update to newest)" }), (0, jsx_runtime_1.jsx)("option", { value: "minor", children: "Minor (same major version)" }), (0, jsx_runtime_1.jsx)("option", { value: "patch", children: "Patch (same major.minor version)" }), (0, jsx_runtime_1.jsx)("option", { value: "pinned", children: "Pinned (no auto-updates)" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: `mb-3 ${groupRange === "pinned" ? "opacity-50" : ""}`, children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Following:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Which release channel the group follows. Devices using group settings will auto-upgrade within this channel. **Stable** = only fully promoted releases. **Stable + Beta** = also includes beta pre-releases for early testing." })] }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: groupFollowTags, disabled: groupRange === "pinned", onChange: async (e) => {
86
- const val = e.target.value;
87
- const current = await (0, peers_sdk_1.Packages)().get(pkg.packageId);
88
- if (current) {
89
- current.followVersionTags = val === "stable" ? undefined : val;
90
- await (0, peers_sdk_1.Packages)().signAndSave(current);
91
- await pkg.load();
92
- }
93
- }, children: [(0, jsx_runtime_1.jsx)("option", { value: "stable", children: "Stable" }), (0, jsx_runtime_1.jsx)("option", { value: "stable,beta", children: "Stable + Beta" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "mb-3", children: (0, jsx_runtime_1.jsxs)("div", { className: "form-check", children: [(0, jsx_runtime_1.jsx)("input", { className: "form-check-input", type: "checkbox", id: `deviceOverride_${pkg.packageId}`, checked: hasOverride, onChange: async (e) => {
89
+ }, children: "Open Remote" })] })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: pkg.qs.remoteRepo, className: "form-control mb-3 p-0 ps-2", disabled: true })] })) : null, (0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Update URL:", (0, jsx_runtime_1.jsx)("small", { children: (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Base URL for remote package updates. Admin devices poll **<updateUrl>/latest-<tag>.json** on startup (for example **latest-stable.json**). Signed artifacts must be published to this host separately — for example via the publish-package tool or the peers-core full-release pipeline.` }) })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: pkg.qs.updateUrl, className: "form-control mb-3 p-0 ps-2", placeholder: "https://example.com/my-package", title: "Update URL" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsx)("hr", {}), (0, jsx_runtime_1.jsxs)("small", { children: ["Version:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "The currently active version of this package. Manage versions in the Versions tab." })] }), activeVersion ? ((0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center mt-1 mb-3", children: [(0, jsx_runtime_1.jsxs)("strong", { className: "me-2", children: ["v", activeVersion.version] }), activeVersion.versionTag && ((0, jsx_runtime_1.jsx)("span", { className: `badge ${activeVersion.versionTag === "dev" ? "text-bg-danger" : activeVersion.versionTag.startsWith("beta") ? "text-bg-warning" : "text-bg-success"} me-2`, children: activeVersion.versionTag })), (0, jsx_runtime_1.jsx)("code", { className: "text-muted small me-2", children: activeVersion.packageVersionHash?.substring(0, 8) }), newerLevel === "uptodate" ? ((0, jsx_runtime_1.jsx)("span", { className: "badge text-bg-success", children: "Up to date" })) : newerLevel ? ((0, jsx_runtime_1.jsxs)("span", { className: `badge text-bg-${newerLevel === "major" ? "danger" : newerLevel === "minor" ? "warning" : "info"}`, children: ["Newer ", newerLevel, " version available"] })) : null] })) : ((0, jsx_runtime_1.jsx)("div", { className: "text-muted small mt-1 mb-3", children: "No active version" })), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Auto-Update Range:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Controls which new versions are auto-activated for the group. When an admin device auto-upgrades, the group's active version advances for everyone. **Pinned** = never auto-update. **Patch** = same major.minor (e.g. 1.2.x). **Minor** = same major (e.g. 1.x.x). **Latest** = always auto-update to newest." })] }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: groupRange, onChange: (e) => saveFollowPolicy({
90
+ versionFollowRange: e.target.value,
91
+ }), children: [(0, jsx_runtime_1.jsx)("option", { value: "latest", children: "Latest (auto-update to newest)" }), (0, jsx_runtime_1.jsx)("option", { value: "minor", children: "Minor (same major version)" }), (0, jsx_runtime_1.jsx)("option", { value: "patch", children: "Patch (same major.minor version)" }), (0, jsx_runtime_1.jsx)("option", { value: "pinned", children: "Pinned (no auto-updates)" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: `mb-3 ${groupRange === "pinned" ? "opacity-50" : ""}`, children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Following:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Which release channel the group follows. Devices using group settings will auto-upgrade within this channel. **Stable** = only fully promoted releases. **Stable + Beta** = also includes beta pre-releases for early testing." })] }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: groupFollowTags, disabled: groupRange === "pinned", onChange: (e) => saveFollowPolicy({
92
+ followVersionTags: e.target.value === "stable" ? undefined : e.target.value,
93
+ }), children: [(0, jsx_runtime_1.jsx)("option", { value: "stable", children: "Stable" }), (0, jsx_runtime_1.jsx)("option", { value: "stable,beta", children: "Stable + Beta" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "mb-3", children: (0, jsx_runtime_1.jsxs)("div", { className: "form-check", children: [(0, jsx_runtime_1.jsx)("input", { className: "form-check-input", type: "checkbox", id: `deviceOverride_${pkg.packageId}`, checked: hasOverride, onChange: async (e) => {
94
94
  if (e.target.checked) {
95
95
  await (0, peers_sdk_1.updatePackagePrefs)(pkg.packageId, {
96
96
  followRange: groupRange === "pinned"
@@ -4,6 +4,9 @@ import { type DataContext, type IPackage, type IPackageVersion } from "@peers-ap
4
4
  * the group's, checked with `assertPackageVersionRunnable`. A refusal is logged and gives
5
5
  * undefined, so the package's app links, routes and screens are left out rather than loaded.
6
6
  *
7
+ * The check reads the package's stored row rather than using `pkg`: the loaders pass copies
8
+ * with fields added (`appNavs`), and the row's signature covers only the row as it was signed.
9
+ *
7
10
  * @param pkg - The package.
8
11
  */
9
12
  export declare function resolveRunnableVersion(pkg: IPackage): Promise<{
@@ -7,26 +7,32 @@ const peers_sdk_1 = require("@peers-app/peers-sdk");
7
7
  * the group's, checked with `assertPackageVersionRunnable`. A refusal is logged and gives
8
8
  * undefined, so the package's app links, routes and screens are left out rather than loaded.
9
9
  *
10
+ * The check reads the package's stored row rather than using `pkg`: the loaders pass copies
11
+ * with fields added (`appNavs`), and the row's signature covers only the row as it was signed.
12
+ *
10
13
  * @param pkg - The package.
11
14
  */
12
15
  async function resolveRunnableVersion(pkg) {
13
- let pvId = pkg.activePackageVersionId;
14
- try {
15
- const pvar = (0, peers_sdk_1.packagePrefsVar)(pkg.packageId);
16
- await pvar.loadingPromise;
17
- pvId = pvar()?.activePackageVersionId ?? pvId;
18
- }
19
- catch {
20
- /* use group default */
21
- }
22
- if (!pvId)
23
- return undefined;
24
16
  try {
25
17
  const dataContext = await (0, peers_sdk_1.getDefaultDataContext)();
18
+ const stored = await (0, peers_sdk_1.Packages)(dataContext).get(pkg.packageId);
19
+ if (!stored)
20
+ return undefined;
21
+ let pvId = stored.activePackageVersionId;
22
+ try {
23
+ const pvar = (0, peers_sdk_1.packagePrefsVar)(stored.packageId);
24
+ await pvar.loadingPromise;
25
+ pvId = pvar()?.activePackageVersionId ?? pvId;
26
+ }
27
+ catch {
28
+ /* use group default */
29
+ }
30
+ if (!pvId)
31
+ return undefined;
26
32
  const pv = await (0, peers_sdk_1.PackageVersions)(dataContext).get(pvId);
27
33
  if (!pv)
28
34
  return undefined;
29
- await (0, peers_sdk_1.assertPackageVersionRunnable)(pkg, pv, dataContext);
35
+ await (0, peers_sdk_1.assertPackageVersionRunnable)(stored, pv, dataContext);
30
36
  return { pv, dataContext };
31
37
  }
32
38
  catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-ui",
3
- "version": "0.28.1",
3
+ "version": "0.28.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/peers-app/peers-ui.git"
@@ -36,7 +36,7 @@
36
36
  "lint:fix": "biome check --write ."
37
37
  },
38
38
  "peerDependencies": {
39
- "@peers-app/peers-sdk": "^0.28.1",
39
+ "@peers-app/peers-sdk": "^0.28.3",
40
40
  "bootstrap": "^5.3.3",
41
41
  "react": "^18.0.0",
42
42
  "react-dom": "^18.0.0"
@@ -47,7 +47,7 @@
47
47
  "@babel/preset-react": "^7.24.1",
48
48
  "@babel/preset-typescript": "^7.27.1",
49
49
  "@biomejs/biome": "2.3.11",
50
- "@peers-app/peers-sdk": "0.28.1",
50
+ "@peers-app/peers-sdk": "0.28.3",
51
51
  "@testing-library/dom": "^10.4.0",
52
52
  "@testing-library/jest-dom": "^6.6.3",
53
53
  "@testing-library/react": "^16.3.0",