dsh-ds-balance 3.1.1 → 3.2.1

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/lib/client.js CHANGED
@@ -2010,6 +2010,7 @@ var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primi
2010
2010
  // src/client/sidebar/BalancePopover.module.css
2011
2011
  var BalancePopover_default = {
2012
2012
  panel: "BalancePopover_panel",
2013
+ body: "BalancePopover_body",
2013
2014
  title: "BalancePopover_title",
2014
2015
  titleMain: "BalancePopover_titleMain",
2015
2016
  titleLabel: "BalancePopover_titleLabel",
@@ -2061,7 +2062,6 @@ function BalancePopover(props) {
2061
2062
  cooldownSeconds,
2062
2063
  configSlotWarning,
2063
2064
  panelRef,
2064
- style,
2065
2065
  onRefresh,
2066
2066
  onUseShown,
2067
2067
  useShownDisabled,
@@ -2084,86 +2084,80 @@ function BalancePopover(props) {
2084
2084
  const pluginsLabel = t(
2085
2085
  pluginsAction?.reachesConfig === true ? "popover.action.openPluginConfig" : "popover.action.openPlugins"
2086
2086
  );
2087
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2088
- "section",
2089
- {
2090
- ref: panelRef,
2091
- className: BalancePopover_default.panel,
2092
- style,
2093
- role: "dialog",
2094
- "aria-label": t("popover.title"),
2095
- children: [
2096
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.title, children: [
2097
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: BalancePopover_default.titleMain, children: [
2098
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2099
- "a",
2100
- {
2101
- className: BalancePopover_default.titleLabel,
2102
- href: "https://platform.deepseek.com/usage",
2103
- target: "_blank",
2104
- rel: "noopener noreferrer",
2105
- children: [
2106
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.FishLogo, { size: 14 }),
2107
- t("popover.title")
2108
- ]
2109
- }
2110
- ),
2111
- sourceLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.sourceLabel, title: sourceLabel, children: sourceLabel })
2112
- ] }),
2113
- pluginsAction === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.Tooltip, { label: pluginsLabel, side: "top", delayMs: 500, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2114
- "button",
2115
- {
2116
- type: "button",
2117
- className: BalancePopover_default.iconButton,
2118
- "aria-label": pluginsLabel,
2119
- onClick: pluginsAction.open,
2120
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.IconPluginPinwheelOutlineRegular, { size: 16 })
2121
- }
2122
- ) })
2123
- ] }),
2124
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.titleRule, "aria-hidden": true }),
2125
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("dl", { className: BalancePopover_default.details, children: [
2126
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.total") }),
2127
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: totalText }),
2128
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.granted") }),
2129
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: grantedText }),
2130
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.toppedUp") }),
2131
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: toppedUpText })
2132
- ] }),
2133
- shown !== null && !selection.matchesPreference ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.notice, children: [
2134
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: BalancePopover_default.noticeText, children: interpolate(t("popover.mismatch"), { wanted: displayCurrency, shown: shown.currency }) }),
2135
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.noticeActions, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2136
- import_dsh_client_ui_primitives4.Button,
2137
- {
2138
- size: "sm",
2139
- variant: "outline",
2140
- disabled: useShownDisabled === true,
2141
- onClick: onUseShown,
2142
- children: interpolate(t("popover.action.useShown"), { shown: shown.currency })
2143
- }
2144
- ) })
2145
- ] }) : null,
2146
- configSlotWarning === null ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.notice, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: BalancePopover_default.noticeText, children: configSlotWarning }) }),
2147
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.footer, children: [
2148
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.updated, children: updatedText }),
2149
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.status, role: "status", children: statusText }),
2150
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.Tooltip, { label: refreshLabel, side: "top", delayMs: 500, disabled: refreshing || cooling, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2151
- "button",
2152
- {
2153
- type: "button",
2154
- className: BalancePopover_default.refresh,
2155
- "aria-label": refreshLabel,
2156
- disabled: refreshing || cooling,
2157
- "data-refreshing": refreshing || void 0,
2158
- "data-cooling": cooling || void 0,
2159
- onClick: onRefresh,
2160
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.IconRefreshOutlineRegular, { size: 16 })
2161
- }
2162
- ) })
2163
- ] })
2164
- ]
2165
- }
2166
- );
2087
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { ref: panelRef, className: BalancePopover_default.panel, role: "dialog", "aria-label": t("popover.title"), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: BalancePopover_default.body, children: [
2088
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.title, children: [
2089
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: BalancePopover_default.titleMain, children: [
2090
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2091
+ "a",
2092
+ {
2093
+ className: BalancePopover_default.titleLabel,
2094
+ href: "https://platform.deepseek.com/usage",
2095
+ target: "_blank",
2096
+ rel: "noopener noreferrer",
2097
+ children: [
2098
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.FishLogo, { size: 14 }),
2099
+ t("popover.title")
2100
+ ]
2101
+ }
2102
+ ),
2103
+ sourceLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.sourceLabel, title: sourceLabel, children: sourceLabel })
2104
+ ] }),
2105
+ pluginsAction === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.Tooltip, { label: pluginsLabel, side: "top", delayMs: 500, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2106
+ "button",
2107
+ {
2108
+ type: "button",
2109
+ className: BalancePopover_default.iconButton,
2110
+ "aria-label": pluginsLabel,
2111
+ onClick: pluginsAction.open,
2112
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.IconPluginPinwheelOutlineRegular, { size: 16 })
2113
+ }
2114
+ ) })
2115
+ ] }),
2116
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.titleRule, "aria-hidden": true }),
2117
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("dl", { className: BalancePopover_default.details, children: [
2118
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.total") }),
2119
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: totalText }),
2120
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.granted") }),
2121
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: grantedText }),
2122
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: t("popover.toppedUp") }),
2123
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: toppedUpText })
2124
+ ] }),
2125
+ shown !== null && !selection.matchesPreference ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.notice, children: [
2126
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: BalancePopover_default.noticeText, children: interpolate(t("popover.mismatch"), {
2127
+ wanted: displayCurrency,
2128
+ shown: shown.currency
2129
+ }) }),
2130
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.noticeActions, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2131
+ import_dsh_client_ui_primitives4.Button,
2132
+ {
2133
+ size: "sm",
2134
+ variant: "outline",
2135
+ disabled: useShownDisabled === true,
2136
+ onClick: onUseShown,
2137
+ children: interpolate(t("popover.action.useShown"), { shown: shown.currency })
2138
+ }
2139
+ ) })
2140
+ ] }) : null,
2141
+ configSlotWarning === null ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: BalancePopover_default.notice, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: BalancePopover_default.noticeText, children: configSlotWarning }) }),
2142
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: BalancePopover_default.footer, children: [
2143
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.updated, children: updatedText }),
2144
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: BalancePopover_default.status, role: "status", children: statusText }),
2145
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.Tooltip, { label: refreshLabel, side: "top", delayMs: 500, disabled: refreshing || cooling, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2146
+ "button",
2147
+ {
2148
+ type: "button",
2149
+ className: BalancePopover_default.refresh,
2150
+ "aria-label": refreshLabel,
2151
+ "aria-busy": refreshing || void 0,
2152
+ disabled: refreshing || cooling,
2153
+ "data-refreshing": refreshing || void 0,
2154
+ "data-cooling": cooling || void 0,
2155
+ onClick: onRefresh,
2156
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dsh_client_ui_primitives4.IconRefreshOutlineRegular, { size: 16 })
2157
+ }
2158
+ ) })
2159
+ ] })
2160
+ ] }) });
2167
2161
  }
2168
2162
 
2169
2163
  // src/client/sidebar/PercentRing.module.css
@@ -2278,9 +2272,6 @@ var SidebarBalance_default = {
2278
2272
  // src/client/sidebar/SidebarBalance.tsx
2279
2273
  var import_jsx_runtime7 = require("react/jsx-runtime");
2280
2274
  var REFRESH_SIMULATION_MS = 600;
2281
- var PANEL_GAP = 8;
2282
- var PANEL_MARGIN = 12;
2283
- var MEASURE_STYLE = { visibility: "hidden", left: 0, top: 0 };
2284
2275
  var MS_PER_SECOND2 = 1e3;
2285
2276
  var TICK_MS = MS_PER_SECOND2;
2286
2277
  function useConfigSlotState(probe) {
@@ -2420,14 +2411,6 @@ function SidebarBalance({
2420
2411
  const toggleOpen = (0, import_react6.useCallback)(() => {
2421
2412
  setOpen((value) => !value);
2422
2413
  }, []);
2423
- const pos = (0, import_dsh_client_ui_primitives5.useAnchoredPosition)({
2424
- open,
2425
- anchorRef: rootRef,
2426
- panelRef,
2427
- side: "top",
2428
- gap: PANEL_GAP,
2429
- margin: PANEL_MARGIN
2430
- });
2431
2414
  (0, import_react6.useLayoutEffect)(() => {
2432
2415
  if (!open) return;
2433
2416
  setNow(Date.now());
@@ -2565,7 +2548,7 @@ function SidebarBalance({
2565
2548
  "aria-expanded": open,
2566
2549
  onClick: toggleOpen,
2567
2550
  children: wide ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
2568
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: SidebarBalance_default.icon, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PercentRing, { state: ring.state, marker: ring.marker, ratio: ringRatio, size: 16 }) }),
2551
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: SidebarBalance_default.icon, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PercentRing, { state: ring.state, marker: ring.marker, ratio: ringRatio, size: 24 }) }),
2569
2552
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: SidebarBalance_default.label, children: t("sidebar.label") }),
2570
2553
  markerLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_dsh_client_ui_primitives5.Tooltip, { label: markerHint, side: "bottom", delayMs: 500, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: SidebarBalance_default.marker, role: "img", "aria-label": markerLabel, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_dsh_client_ui_primitives5.IconWarningOutlineRegular, { size: 12 }) }) })
2571
2554
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -2574,7 +2557,7 @@ function SidebarBalance({
2574
2557
  state: ring.state,
2575
2558
  marker: ring.marker,
2576
2559
  ratio: ringRatio,
2577
- size: 18,
2560
+ size: 24,
2578
2561
  title: hoverText ?? void 0
2579
2562
  }
2580
2563
  )
@@ -2595,7 +2578,6 @@ function SidebarBalance({
2595
2578
  cooldownSeconds,
2596
2579
  configSlotWarning: configSlotState === "missing" ? CONFIG_SLOT_WARNING : null,
2597
2580
  panelRef,
2598
- style: pos ?? MEASURE_STYLE,
2599
2581
  onRefresh: handleRefresh,
2600
2582
  onUseShown: handleUseShown,
2601
2583
  useShownDisabled: !config.writable,
@@ -2881,7 +2863,7 @@ function apply(ctx) {
2881
2863
  );
2882
2864
  });
2883
2865
  }
2884
- var __dsbCss = "/* src/client/settings/AccountAvatar.module.css */\n.AccountAvatar_avatar {\n box-sizing: border-box;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n corner-shape: round;\n overflow: hidden;\n background: var(--dsw-alias-bg-skeleton);\n}\n.AccountAvatar_image {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n corner-shape: round;\n object-fit: cover;\n}\n\n/* src/client/settings/fields.module.css */\n.fields_group {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n padding: 12px 0 0;\n}\n.fields_groupHead {\n position: relative;\n display: flex;\n align-items: center;\n height: calc(24px + var(--dsh-content-font-delta, 0px));\n min-width: 0;\n color: var(--dsw-alias-label-tertiary);\n transition: color 100ms ease;\n cursor: pointer;\n}\n.fields_groupHead:hover {\n color: var(--dsw-alias-label-secondary);\n}\n.fields_groupLeading {\n position: relative;\n flex: none;\n width: calc(16px + var(--dsh-content-font-delta, 0px));\n height: calc(16px + var(--dsh-content-font-delta, 0px));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 6px;\n}\n.fields_groupLeading svg {\n width: calc(14px + var(--dsh-content-font-delta, 0px));\n height: calc(14px + var(--dsh-content-font-delta, 0px));\n}\n.fields_groupIcon {\n display: inline-flex;\n opacity: 1;\n transition: opacity 100ms ease;\n}\n.fields_groupChevronClosed,\n.fields_groupChevronOpen {\n position: absolute;\n inset: 0;\n margin: auto;\n opacity: 0;\n pointer-events: none;\n transition: opacity 100ms ease;\n}\n.fields_groupHead[aria-expanded=false]:hover .fields_groupChevronClosed,\n.fields_groupHead[aria-expanded=false]:focus-visible .fields_groupChevronClosed,\n.fields_groupHead[aria-expanded=true]:hover .fields_groupChevronOpen,\n.fields_groupHead[aria-expanded=true]:focus-visible .fields_groupChevronOpen {\n opacity: 1;\n}\n.fields_groupHead:hover .fields_groupIcon,\n.fields_groupHead:focus-visible .fields_groupIcon {\n opacity: 0;\n}\n.fields_groupTitle {\n flex: none;\n font-size: var(--dsh-content-font-size-secondary, 13px);\n line-height: calc(24px + var(--dsh-content-font-delta, 0px));\n color: inherit;\n}\n@media (prefers-reduced-motion: reduce) {\n .fields_groupHead {\n transition: none;\n }\n .fields_groupIcon,\n .fields_groupChevronClosed,\n .fields_groupChevronOpen {\n transition: none;\n }\n}\n.fields_groupLast {\n padding-bottom: 12px;\n}\n.fields_groupNote {\n margin: 4px 0 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_fields {\n display: flex;\n flex-direction: column;\n}\n.fields_fields > * + * {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.fields_details {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n margin-top: 12px;\n padding-top: 12px;\n}\n.fields_detailsBody {\n padding-top: 10px;\n}\n.fields_source {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n}\n.fields_sourceHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_dot {\n box-sizing: border-box;\n display: inline-block;\n flex: none;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n corner-shape: round;\n}\n.fields_dotOk {\n background: var(--dsw-alias-state-success-primary);\n}\n.fields_dotMissing {\n background: var(--dsw-alias-state-error-primary);\n}\n.fields_sourceName {\n flex: none;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_sourceSlot {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n.fields_sourceIdentity,\n.fields_sourceLiveText {\n min-width: 0;\n font-size: 12px;\n line-height: 1.5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_sourceIdentityMono {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Consolas,\n monospace;\n}\n.fields_sourceLive {\n flex: 0 1 auto;\n min-width: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.fields_sourceLiveIcon {\n flex: none;\n}\n.fields_sourceDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n}\n.fields_field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n}\n.fields_row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 0;\n}\n.fields_rowText {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-right: 48px;\n}\n.fields_rowTitleLine {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_rowTitle {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_head {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_label {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_badges {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n.fields_reset {\n border: none;\n background: none;\n padding: 0;\n font: inherit;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n.fields_reset:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.fields_reset:disabled {\n cursor: default;\n}\n.fields_inputStatic,\n.fields_inputStatic:hover {\n pointer-events: none;\n}\n.fields_inputStatic input,\n.fields_inputStatic input:hover,\n.fields_inputStatic input:focus,\n.fields_inputStatic input:focus-visible,\n.fields_inputStatic input:active {\n border-color: var(--dsw-alias-border-l4);\n background: var(--dsw-alias-bg-layer-3);\n outline: none;\n box-shadow: none;\n cursor: default;\n}\n.fields_inputInvalid input {\n border: 1px solid var(--dsw-alias-state-error-primary);\n}\n.fields_inputInvalid input:focus-visible {\n border-color: var(--dsw-alias-brand-primary);\n}\n.fields_inputWithAction {\n position: relative;\n display: flex;\n align-items: center;\n}\n.fields_inputWithAction .fields_input,\n.fields_inputWithAction .fields_inputInvalid {\n padding-right: 38px;\n}\n.fields_reveal {\n position: absolute;\n right: 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: none;\n border-radius: 50%;\n corner-shape: round;\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n.fields_reveal:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n.fields_revealOn {\n color: var(--dsw-alias-label-primary);\n}\n.fields_reveal:disabled {\n cursor: default;\n opacity: 0.4;\n}\n.fields_selectorAnchor {\n flex: none;\n}\n.fields_selector {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n flex: none;\n max-width: 100%;\n height: 36px;\n padding: 0 14px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n.fields_selector:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.fields_selector:disabled {\n color: var(--dsw-alias-label-tertiary);\n cursor: default;\n}\n.fields_selectorChevron {\n flex: none;\n}\n.fields_hint {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_pairNote {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-warn-primary);\n}\n.fields_pairNote::before {\n content: \"\";\n flex: none;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n corner-shape: round;\n background: currentColor;\n}\n.fields_invalid {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-error-primary);\n}\n.fields_actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* src/client/settings/BalanceSettingsCard.module.css */\n.BalanceSettingsCard_form {\n display: flex;\n flex-direction: column;\n}\n.BalanceSettingsCard_readOnly {\n margin: 0 0 12px;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalanceSettingsCard_footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 16px;\n}\n.BalanceSettingsCard_save {\n appearance: none;\n border: 1px solid transparent;\n border-radius: var(--dsw-radius-md);\n padding: 5px 14px;\n font: inherit;\n font-size: 13px;\n line-height: 1.5;\n cursor: pointer;\n background: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-3);\n}\n.BalanceSettingsCard_save:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.BalanceSettingsCard_save:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: 1px;\n}\n.BalanceSettingsCard_failed {\n flex: 1;\n min-width: 0;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-error-primary);\n}\n.BalanceSettingsCard_notice {\n flex: 1;\n min-width: 0;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n\n/* src/client/sidebar/BalancePopover.module.css */\n.BalancePopover_panel {\n position: fixed;\n isolation: isolate;\n z-index: 1100;\n box-sizing: border-box;\n width: max-content;\n min-width: min(300px, calc(100vw - 24px));\n max-width: min(440px, calc(100vw - 24px));\n padding: 16px;\n border: 0;\n border-radius: var(--dsw-radius-lg);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n cursor: default;\n}\n.BalancePopover_panel::before {\n position: absolute;\n z-index: -1;\n inset: 0;\n border-radius: inherit;\n background: var(--dsw-specific-menu);\n backdrop-filter: var(--dsw-menu-backdrop-filter);\n content: \"\";\n pointer-events: none;\n}\n.BalancePopover_title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 8px;\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n.BalancePopover_titleMain {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.BalancePopover_titleLabel {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n cursor: pointer;\n color: inherit;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.BalancePopover_titleLabel:hover,\n.BalancePopover_titleLabel:visited {\n color: inherit;\n}\n.BalancePopover_sourceLabel {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-tertiary);\n font-weight: 400;\n}\n.BalancePopover_titleLabel svg {\n flex: none;\n width: 14px;\n height: auto;\n}\n.BalancePopover_iconButton {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n margin-block: -5px;\n border: none;\n border-radius: var(--dsw-radius-sm);\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-secondary);\n}\n.BalancePopover_iconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.BalancePopover_iconButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.BalancePopover_titleRule {\n margin-bottom: 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.BalancePopover_details {\n display: grid;\n grid-template-columns: minmax(76px, auto) minmax(0, 1fr);\n gap: 6px 16px;\n margin: 0;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_details dt,\n.BalancePopover_details dd {\n min-width: 0;\n margin: 0;\n}\n.BalancePopover_details dd {\n color: var(--dsw-alias-label-secondary);\n font-variant-numeric: tabular-nums;\n text-align: right;\n}\n.BalancePopover_notice {\n margin-top: 12px;\n}\n.BalancePopover_noticeText {\n margin: 0 0 8px;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_noticeActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n.BalancePopover_footer {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 12px;\n}\n.BalancePopover_updated {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_status {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_refresh {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n.BalancePopover_refresh:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n.BalancePopover_refresh:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.BalancePopover_refresh:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.BalancePopover_refresh[data-cooling] {\n color: var(--dsw-alias-label-caption);\n}\n.BalancePopover_refresh[data-refreshing] svg {\n animation: BalancePopover_balance-refresh-spin 900ms linear infinite;\n}\n@keyframes BalancePopover_balance-refresh-spin {\n to {\n transform: rotate(360deg);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .BalancePopover_refresh[data-refreshing] svg {\n animation-duration: 2400ms;\n }\n}\n\n/* src/client/sidebar/PercentRing.module.css */\n.PercentRing_ring {\n display: block;\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n.PercentRing_ring[data-state=done] {\n color: var(--dsw-alias-state-success-primary);\n}\n.PercentRing_ring[data-state=warning] {\n color: var(--dsw-alias-state-warn-primary);\n}\n.PercentRing_ring[data-state=error] {\n color: var(--dsw-alias-state-error-primary);\n}\n.PercentRing_ring[data-state=idle] {\n color: var(--dsw-alias-state-idle-primary);\n}\n.PercentRing_track {\n fill: none;\n stroke: var(--dsw-alias-border-l3);\n stroke-width: 1;\n}\n.PercentRing_fill {\n fill: none;\n stroke: currentColor;\n stroke-width: 1;\n stroke-linecap: round;\n}\n.PercentRing_marker {\n fill: none;\n stroke: currentColor;\n stroke-width: 1;\n stroke-linecap: round;\n}\n.PercentRing_spin {\n transform-origin: center;\n animation: PercentRing_dsb-ring-spin 1.5s linear infinite;\n}\n@keyframes PercentRing_dsb-ring-spin {\n to {\n transform: rotate(360deg);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .PercentRing_spin {\n animation: none;\n }\n}\n\n/* src/client/sidebar/SidebarBalance.module.css */\n.SidebarBalance_root {\n position: relative;\n display: flex;\n min-width: 0;\n}\n.SidebarBalance_root[data-mode=wide] {\n flex: none;\n width: calc(100% + 4px);\n margin: 4px -2px 0;\n}\n.SidebarBalance_root[data-mode=rail] {\n flex: none;\n margin: 8px 0 0;\n}\n.SidebarBalance_trigger {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n border: none;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font-family: inherit;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n overflow: hidden;\n}\n.SidebarBalance_trigger:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.SidebarBalance_trigger:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.SidebarBalance_root[data-mode=wide] .SidebarBalance_trigger {\n flex: none;\n gap: 8px;\n width: 100%;\n height: 42px;\n padding: 0 10px 0 8px;\n border-radius: var(--dsw-radius-md);\n}\n.SidebarBalance_root[data-mode=rail] .SidebarBalance_trigger {\n flex: none;\n justify-content: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border-radius: var(--dsw-radius-md);\n}\n.SidebarBalance_icon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n}\n.SidebarBalance_label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.SidebarBalance_marker {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n color: var(--dsw-alias-label-tertiary);\n position: relative;\n top: 1.63px;\n}\n\n/* src/client/sidebar/footer-stack.module.css */\ndiv:has(> [data-slot=\"sidebar.footer.action\"]) {\n flex-direction: column;\n}\n";
2866
+ var __dsbCss = "/* src/client/settings/AccountAvatar.module.css */\n.AccountAvatar_avatar {\n box-sizing: border-box;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n corner-shape: round;\n overflow: hidden;\n background: var(--dsw-alias-bg-skeleton);\n}\n.AccountAvatar_image {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n corner-shape: round;\n object-fit: cover;\n}\n\n/* src/client/settings/fields.module.css */\n.fields_group {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n padding: 12px 0 0;\n}\n.fields_groupHead {\n position: relative;\n display: flex;\n align-items: center;\n height: calc(24px + var(--dsh-content-font-delta, 0px));\n min-width: 0;\n color: var(--dsw-alias-label-tertiary);\n transition: color 100ms ease;\n cursor: pointer;\n}\n.fields_groupHead:hover {\n color: var(--dsw-alias-label-secondary);\n}\n.fields_groupLeading {\n position: relative;\n flex: none;\n width: calc(16px + var(--dsh-content-font-delta, 0px));\n height: calc(16px + var(--dsh-content-font-delta, 0px));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 6px;\n}\n.fields_groupLeading svg {\n width: calc(14px + var(--dsh-content-font-delta, 0px));\n height: calc(14px + var(--dsh-content-font-delta, 0px));\n}\n.fields_groupIcon {\n display: inline-flex;\n opacity: 1;\n transition: opacity 100ms ease;\n}\n.fields_groupChevronClosed,\n.fields_groupChevronOpen {\n position: absolute;\n inset: 0;\n margin: auto;\n opacity: 0;\n pointer-events: none;\n transition: opacity 100ms ease;\n}\n.fields_groupHead[aria-expanded=false]:hover .fields_groupChevronClosed,\n.fields_groupHead[aria-expanded=false]:focus-visible .fields_groupChevronClosed,\n.fields_groupHead[aria-expanded=true]:hover .fields_groupChevronOpen,\n.fields_groupHead[aria-expanded=true]:focus-visible .fields_groupChevronOpen {\n opacity: 1;\n}\n.fields_groupHead:hover .fields_groupIcon,\n.fields_groupHead:focus-visible .fields_groupIcon {\n opacity: 0;\n}\n.fields_groupTitle {\n flex: none;\n font-size: var(--dsh-content-font-size-secondary, 13px);\n line-height: calc(24px + var(--dsh-content-font-delta, 0px));\n color: inherit;\n}\n@media (prefers-reduced-motion: reduce) {\n .fields_groupHead {\n transition: none;\n }\n .fields_groupIcon,\n .fields_groupChevronClosed,\n .fields_groupChevronOpen {\n transition: none;\n }\n}\n.fields_groupLast {\n padding-bottom: 12px;\n}\n.fields_groupNote {\n margin: 4px 0 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_fields {\n display: flex;\n flex-direction: column;\n}\n.fields_fields > * + * {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.fields_details {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n margin-top: 12px;\n padding-top: 12px;\n}\n.fields_detailsBody {\n padding-top: 10px;\n}\n.fields_source {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n}\n.fields_sourceHead {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_dot {\n box-sizing: border-box;\n display: inline-block;\n flex: none;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n corner-shape: round;\n}\n.fields_dotOk {\n background: var(--dsw-alias-state-success-primary);\n}\n.fields_dotMissing {\n background: var(--dsw-alias-state-error-primary);\n}\n.fields_sourceName {\n flex: none;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_sourceSlot {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n.fields_sourceIdentity,\n.fields_sourceLiveText {\n min-width: 0;\n font-size: 12px;\n line-height: 1.5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_sourceIdentityMono {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Consolas,\n monospace;\n}\n.fields_sourceLive {\n flex: 0 1 auto;\n min-width: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.fields_sourceLiveIcon {\n flex: none;\n}\n.fields_sourceDetail {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n}\n.fields_field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n}\n.fields_row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 0;\n}\n.fields_rowText {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-right: 48px;\n}\n.fields_rowTitleLine {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_rowTitle {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_head {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.fields_label {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary);\n}\n.fields_badges {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n.fields_reset {\n border: none;\n background: none;\n padding: 0;\n font: inherit;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n.fields_reset:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.fields_reset:disabled {\n cursor: default;\n}\n.fields_inputStatic,\n.fields_inputStatic:hover {\n pointer-events: none;\n}\n.fields_inputStatic input,\n.fields_inputStatic input:hover,\n.fields_inputStatic input:focus,\n.fields_inputStatic input:focus-visible,\n.fields_inputStatic input:active {\n border-color: var(--dsw-alias-border-l4);\n background: var(--dsw-alias-bg-layer-3);\n outline: none;\n box-shadow: none;\n cursor: default;\n}\n.fields_inputInvalid input {\n border: 1px solid var(--dsw-alias-state-error-primary);\n}\n.fields_inputInvalid input:focus-visible {\n border-color: var(--dsw-alias-brand-primary);\n}\n.fields_inputWithAction {\n position: relative;\n display: flex;\n align-items: center;\n}\n.fields_inputWithAction .fields_input,\n.fields_inputWithAction .fields_inputInvalid {\n padding-right: 38px;\n}\n.fields_reveal {\n position: absolute;\n right: 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: none;\n border-radius: 50%;\n corner-shape: round;\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n.fields_reveal:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n.fields_revealOn {\n color: var(--dsw-alias-label-primary);\n}\n.fields_reveal:disabled {\n cursor: default;\n opacity: 0.4;\n}\n.fields_selectorAnchor {\n flex: none;\n}\n.fields_selector {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n flex: none;\n max-width: 100%;\n height: 36px;\n padding: 0 14px;\n border: none;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n.fields_selector:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.fields_selector:disabled {\n color: var(--dsw-alias-label-tertiary);\n cursor: default;\n}\n.fields_selectorChevron {\n flex: none;\n}\n.fields_hint {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.fields_pairNote {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-warn-primary);\n}\n.fields_pairNote::before {\n content: \"\";\n flex: none;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n corner-shape: round;\n background: currentColor;\n}\n.fields_invalid {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-error-primary);\n}\n.fields_actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* src/client/settings/BalanceSettingsCard.module.css */\n.BalanceSettingsCard_form {\n display: flex;\n flex-direction: column;\n}\n.BalanceSettingsCard_readOnly {\n margin: 0 0 12px;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalanceSettingsCard_footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 16px;\n}\n.BalanceSettingsCard_save {\n appearance: none;\n border: 1px solid transparent;\n border-radius: var(--dsw-radius-md);\n padding: 5px 14px;\n font: inherit;\n font-size: 13px;\n line-height: 1.5;\n cursor: pointer;\n background: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-3);\n}\n.BalanceSettingsCard_save:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.BalanceSettingsCard_save:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: 1px;\n}\n.BalanceSettingsCard_failed {\n flex: 1;\n min-width: 0;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-state-error-primary);\n}\n.BalanceSettingsCard_notice {\n flex: 1;\n min-width: 0;\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-tertiary);\n}\n\n/* src/client/sidebar/BalancePopover.module.css */\nsection.BalancePopover_panel {\n position: fixed;\n position-anchor: --dsb-balance-anchor;\n bottom: calc(anchor(top) + 8px);\n left: clamp(12px, anchor(left), calc(100vw - 12px - min(440px, calc(100vw - 24px))));\n max-height: calc(100dvh - 12px - max(12px, var(--dsh-frame-overlay-top, 12px))) !important;\n position-try-fallbacks: --dsb-balance-window;\n display: flex;\n flex-direction: column;\n isolation: isolate;\n z-index: 1100;\n box-sizing: border-box;\n width: max-content !important;\n height: auto !important;\n min-width: min(300px, calc(100vw - 24px));\n max-width: min(440px, calc(100vw - 24px)) !important;\n padding: 11px 16px 16px !important;\n margin: 0;\n border: 0;\n border-radius: var(--dsw-radius-lg) !important;\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n font-size: 12px;\n line-height: 18px;\n color: var(--dsw-alias-label-secondary);\n cursor: default;\n}\n.BalancePopover_body {\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n@position-try --dsb-balance-window {\n position-area: none;\n top: max(12px, var(--dsh-frame-overlay-top, 12px));\n bottom: 12px;\n max-height: none;\n align-self: safe start;\n justify-self: safe end;\n}\n.BalancePopover_panel::before {\n position: absolute;\n z-index: -1;\n inset: 0;\n border-radius: inherit;\n background: var(--dsw-specific-menu);\n backdrop-filter: var(--dsw-menu-backdrop-filter);\n content: \"\";\n pointer-events: none;\n}\n.BalancePopover_title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 3px;\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n.BalancePopover_titleMain {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.BalancePopover_titleLabel {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n cursor: pointer;\n color: inherit;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.BalancePopover_titleLabel:hover,\n.BalancePopover_titleLabel:visited {\n color: inherit;\n}\n.BalancePopover_sourceLabel {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--dsw-alias-label-tertiary);\n font-weight: 400;\n}\n.BalancePopover_titleLabel svg {\n flex: none;\n width: 14px;\n height: auto;\n}\n.BalancePopover_iconButton {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: var(--dsw-radius-sm);\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-secondary);\n}\n.BalancePopover_iconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.BalancePopover_iconButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.BalancePopover_titleRule {\n margin-bottom: 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.BalancePopover_details {\n display: grid;\n grid-template-columns: minmax(76px, auto) minmax(0, 1fr);\n gap: 6px 16px;\n margin: 0;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_details dt,\n.BalancePopover_details dd {\n min-width: 0;\n margin: 0;\n}\n.BalancePopover_details dd {\n color: var(--dsw-alias-label-secondary);\n font-variant-numeric: tabular-nums;\n text-align: right;\n}\n.BalancePopover_notice {\n margin-top: 12px;\n}\n.BalancePopover_noticeText {\n margin: 0 0 8px;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_noticeActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n.BalancePopover_footer {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 12px;\n}\n.BalancePopover_updated {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_status {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n color: var(--dsw-alias-label-tertiary);\n}\n.BalancePopover_refresh {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n.BalancePopover_refresh:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.BalancePopover_refresh:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.BalancePopover_refresh:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.BalancePopover_refresh[data-cooling] {\n color: var(--dsw-alias-label-caption);\n}\n.BalancePopover_refresh[data-refreshing] svg {\n animation: BalancePopover_balance-refresh-spin 900ms linear infinite;\n}\n@keyframes BalancePopover_balance-refresh-spin {\n to {\n transform: rotate(360deg);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .BalancePopover_refresh[data-refreshing] svg {\n animation-duration: 2400ms;\n }\n}\n\n/* src/client/sidebar/PercentRing.module.css */\n.PercentRing_ring {\n display: block;\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n.PercentRing_ring[data-state=done] {\n color: var(--dsw-alias-state-success-primary);\n}\n.PercentRing_ring[data-state=warning] {\n color: var(--dsw-alias-state-warn-primary);\n}\n.PercentRing_ring[data-state=error] {\n color: var(--dsw-alias-state-error-primary);\n}\n.PercentRing_ring[data-state=idle] {\n color: var(--dsw-alias-state-idle-primary);\n}\n.PercentRing_track {\n fill: none;\n stroke: var(--dsw-alias-border-l3);\n stroke-width: 1;\n}\n.PercentRing_fill {\n fill: none;\n stroke: currentColor;\n stroke-width: 1;\n stroke-linecap: round;\n}\n.PercentRing_marker {\n fill: none;\n stroke: currentColor;\n stroke-width: 1;\n stroke-linecap: round;\n}\n.PercentRing_spin {\n transform-origin: center;\n animation: PercentRing_dsb-ring-spin 1.5s linear infinite;\n}\n@keyframes PercentRing_dsb-ring-spin {\n to {\n transform: rotate(360deg);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .PercentRing_spin {\n animation: none;\n }\n}\n\n/* src/client/sidebar/SidebarBalance.module.css */\n.SidebarBalance_root {\n position: relative;\n display: flex;\n min-width: 0;\n anchor-name: --dsb-balance-anchor;\n}\n.SidebarBalance_root[data-mode=wide] {\n flex: none;\n margin: 4px 2px 0;\n}\n.SidebarBalance_root[data-mode=rail] {\n flex: none;\n margin: 8px 0 0;\n}\n.SidebarBalance_trigger {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n border: none;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font-family: inherit;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n overflow: hidden;\n}\n.SidebarBalance_trigger:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.SidebarBalance_trigger:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color);\n outline-offset: -2px;\n}\n.SidebarBalance_root[data-mode=wide] .SidebarBalance_trigger {\n flex: none;\n gap: 8px;\n width: 100%;\n height: 44px;\n padding: 6px;\n border-radius: var(--dsw-radius-md);\n}\n.SidebarBalance_root[data-mode=rail] .SidebarBalance_trigger {\n flex: none;\n justify-content: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border-radius: var(--dsw-radius-md);\n}\n.SidebarBalance_icon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.SidebarBalance_label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.SidebarBalance_marker {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n color: var(--dsw-alias-label-tertiary);\n position: relative;\n top: 1.63px;\n}\n\n/* src/client/sidebar/footer-stack.module.css */\ndiv:has(> [data-slot=\"sidebar.footer.action\"]) {\n flex-direction: column;\n}\n";
2885
2867
  var __dsbTagId = "dsh-ds-balance/client.css";
2886
2868
  if (typeof document !== 'undefined' && document.querySelector('style[data-plugin-css="' + __dsbTagId + '"]') === null) {
2887
2869
  var __dsbTag = document.createElement('style');
@@ -36,10 +36,10 @@ export type AppIcon = ComponentType<IconProps>;
36
36
  * 仪表盘(`IconGaugeOutlineRegular`)语义偏「量程」,不选。
37
37
  */
38
38
  export declare const GROUP_ICONS: {
39
- readonly connection: (props: IconProps) => import("react").JSX.Element;
39
+ readonly connection: (props: IconProps) => React.JSX.Element;
40
40
  readonly display: typeof CurrencyOutlineIcon;
41
- readonly thresholds: (props: IconProps) => import("react").JSX.Element;
42
- readonly refresh: (props: IconProps) => import("react").JSX.Element;
41
+ readonly thresholds: (props: IconProps) => React.JSX.Element;
42
+ readonly refresh: (props: IconProps) => React.JSX.Element;
43
43
  };
44
44
  /** 分组键,与 `BalanceSettingsCard` 的分组顺序一致。 */
45
45
  export type GroupIconKey = keyof typeof GROUP_ICONS;
@@ -57,8 +57,8 @@ export type GroupIconKey = keyof typeof GROUP_ICONS;
57
57
  * 引官方符号前先在声明下限那一档确认它存在 —— 这条规则就是这么生效的。
58
58
  */
59
59
  export declare const RESULT_ICONS: {
60
- readonly ok: (props: IconProps) => import("react").JSX.Element;
61
- readonly fail: (props: IconProps) => import("react").JSX.Element;
60
+ readonly ok: (props: IconProps) => React.JSX.Element;
61
+ readonly fail: (props: IconProps) => React.JSX.Element;
62
62
  };
63
63
  /**
64
64
  * 分组折叠头的两个箭头。
@@ -71,8 +71,8 @@ export declare const RESULT_ICONS: {
71
71
  * 的唯一出处,`fields.tsx` 只该消费它。
72
72
  */
73
73
  export declare const HEADER_CHEVRONS: {
74
- readonly closed: (props: IconProps) => import("react").JSX.Element;
75
- readonly open: (props: IconProps) => import("react").JSX.Element;
74
+ readonly closed: (props: IconProps) => React.JSX.Element;
75
+ readonly open: (props: IconProps) => React.JSX.Element;
76
76
  };
77
77
  /**
78
78
  * 选择器 pill 右端的 chevron。
@@ -87,6 +87,6 @@ export declare const SELECTOR_ICON: AppIcon;
87
87
  * 可以照引);`refresh` 与分组头的刷新同源。
88
88
  */
89
89
  export declare const POPOVER_ICONS: {
90
- readonly plugins: (props: IconProps) => import("react").JSX.Element;
91
- readonly refresh: (props: IconProps) => import("react").JSX.Element;
90
+ readonly plugins: (props: IconProps) => React.JSX.Element;
91
+ readonly refresh: (props: IconProps) => React.JSX.Element;
92
92
  };
@@ -2,11 +2,13 @@
2
2
  * 余额浮层:点击条目后在条目的上方展开。
3
3
  *
4
4
  * 皮肤照抄官方「用量 / 用时」浮层(ui-chat 的 stat-dialog.module.css);
5
- * 定位由父组件用 useAnchoredPosition 算好后经 style 传入,本组件只渲染表面。
5
+ * **定位全在 CSS 里**:面板用 `position-anchor` 挂到触发区根节点的 `anchor-name` 上
6
+ * (CSS Anchor Positioning,见 BalancePopover.module.css 的 .panel),
7
+ * 父组件既不量尺寸也不传坐标 —— 传进来的只有数据与回调。
6
8
  * 面板由父组件 createPortal 挂到 document.body,所以 panelRef 指向面板自身。
7
9
  * @module dsh-ds-balance/client/sidebar/BalancePopover
8
10
  */
9
- import type { CSSProperties, RefObject } from 'react';
11
+ import type { RefObject } from 'react';
10
12
  import { type LocaleKey } from '../locales.ts';
11
13
  import { type CurrencySelection } from '../model.ts';
12
14
  /** 没有可显示金额时的占位符;条目与浮层共用同一个字面量。 */
@@ -39,10 +41,8 @@ export interface BalancePopoverProps {
39
41
  * 按兼容性硬约束两种语言下都照原文给,所以刻意不进双语词典。
40
42
  */
41
43
  configSlotWarning: string | null;
42
- /** 面板自身的引用:useAnchoredPosition 用它量尺寸,外部点击判定用它算「内部」。 */
44
+ /** 面板自身的引用:外部点击判定用它算「内部」(定位不读它,坐标全在 CSS 里)。 */
43
45
  panelRef: RefObject<HTMLElement>;
44
- /** 由 useAnchoredPosition 给出的 fixed 坐标;首帧是 MEASURE_STYLE(隐藏待测)。 */
45
- style: CSSProperties;
46
46
  /** 刷新回调。 */
47
47
  onRefresh: () => void;
48
48
  /** 「改用 X」回调。 */
@@ -73,7 +73,7 @@ export interface PluginsAction {
73
73
  }
74
74
  /**
75
75
  * 渲染余额浮层。
76
- * @param props - 选择结果、时间、刷新状态、面板 ref/style 与三个动作回调。
76
+ * @param props - 选择结果、时间、刷新状态、面板 ref 与三个动作回调。
77
77
  * @returns 浮层元素。
78
78
  */
79
79
  export declare function BalancePopover(props: BalancePopoverProps): JSX.Element;
package/lib/version.d.ts CHANGED
@@ -8,5 +8,5 @@
8
8
  /** 线上 schema 版本。响应里逐条回传,消费方据此判断兼容性。 */
9
9
  export declare const SCHEMA_VERSION = 1;
10
10
  /** 插件版本。与 `package.json` 的 `version` 一致(有测试兜底)。 */
11
- export declare const PLUGIN_VERSION = "3.1.1";
11
+ export declare const PLUGIN_VERSION = "3.2.1";
12
12
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -8,5 +8,5 @@
8
8
  /** 线上 schema 版本。响应里逐条回传,消费方据此判断兼容性。 */
9
9
  export const SCHEMA_VERSION = 1;
10
10
  /** 插件版本。与 `package.json` 的 `version` 一致(有测试兜底)。 */
11
- export const PLUGIN_VERSION = '3.1.1';
11
+ export const PLUGIN_VERSION = '3.2.1';
12
12
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-ds-balance",
3
- "version": "3.1.1",
3
+ "version": "3.2.1",
4
4
  "icon": "./icon.svg",
5
5
  "description": "DSH plugin: shows the DeepSeek account balance at the bottom of the sidebar, with a configuration card on the Plugins page.",
6
6
  "keywords": [
@@ -47,7 +47,7 @@
47
47
  "LICENSE"
48
48
  ],
49
49
  "engines": {
50
- "dsh": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
50
+ "dsh": "^0.2.2-rc.1",
51
51
  "node": ">=20"
52
52
  },
53
53
  "dsh": {
@@ -74,38 +74,38 @@
74
74
  "check:declaration": "node scripts/check-declaration.mjs"
75
75
  },
76
76
  "peerDependencies": {
77
- "@deepseek-ai/cordis": "^4.0.3",
78
- "@deepseek-ai/dsh-client-connection": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
79
- "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
80
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
81
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
82
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
83
- "@deepseek-ai/dsh-credentials": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
84
- "@deepseek-ai/dsh-deepseek-account-platform": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
85
- "@deepseek-ai/dsh-home-paths": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
86
- "@deepseek-ai/dsh-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
87
- "@deepseek-ai/dsh-storage-domain": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
88
- "@deepseek-ai/schemastery": "^3.18.5",
77
+ "@deepseek-ai/cordis": "^4.1.0",
78
+ "@deepseek-ai/dsh-client-connection": "^0.2.2-rc.1",
79
+ "@deepseek-ai/dsh-client-locale": "^0.2.2-rc.1",
80
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.2.2-rc.1",
81
+ "@deepseek-ai/dsh-client-ui-settings": "^0.2.2-rc.1",
82
+ "@deepseek-ai/dsh-client-ui-slots": "^0.2.2-rc.1",
83
+ "@deepseek-ai/dsh-credentials": "^0.2.2-rc.1",
84
+ "@deepseek-ai/dsh-deepseek-account-platform": "^0.2.2-rc.1",
85
+ "@deepseek-ai/dsh-home-paths": "^0.2.2-rc.1",
86
+ "@deepseek-ai/dsh-settings": "^0.2.2-rc.1",
87
+ "@deepseek-ai/dsh-storage-domain": "^0.2.2-rc.1",
88
+ "@deepseek-ai/schemastery": "^3.19.0",
89
89
  "react": "^18.3.1",
90
90
  "react-dom": "^18.3.1"
91
91
  },
92
92
  "devDependencies": {
93
- "@deepseek-ai/cordis": "^4.0.3",
93
+ "@deepseek-ai/cordis": "^4.1.0",
94
94
  "@deepseek-ai/cordis-plugin-loader": "^1.0.4",
95
- "@deepseek-ai/dsh-client-connection": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
96
- "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
97
- "@deepseek-ai/dsh-client-ui-plugin-manager": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
98
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
99
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
100
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
101
- "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
102
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
103
- "@deepseek-ai/dsh-credentials": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
104
- "@deepseek-ai/dsh-deepseek-account-platform": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
105
- "@deepseek-ai/dsh-home-paths": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
106
- "@deepseek-ai/dsh-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
107
- "@deepseek-ai/dsh-storage-domain": "^0.1.7-rc.1 || ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-rc.1",
108
- "@deepseek-ai/schemastery": "^3.18.5",
95
+ "@deepseek-ai/dsh-client-connection": "^0.2.2-rc.1",
96
+ "@deepseek-ai/dsh-client-locale": "^0.2.2-rc.1",
97
+ "@deepseek-ai/dsh-client-ui-plugin-manager": "^0.2.2-rc.1",
98
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.2.2-rc.1",
99
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.2.2-rc.1",
100
+ "@deepseek-ai/dsh-client-ui-settings": "^0.2.2-rc.1",
101
+ "@deepseek-ai/dsh-client-ui-sidebar": "^0.2.2-rc.1",
102
+ "@deepseek-ai/dsh-client-ui-slots": "^0.2.2-rc.1",
103
+ "@deepseek-ai/dsh-credentials": "^0.2.2-rc.1",
104
+ "@deepseek-ai/dsh-deepseek-account-platform": "^0.2.2-rc.1",
105
+ "@deepseek-ai/dsh-home-paths": "^0.2.2-rc.1",
106
+ "@deepseek-ai/dsh-settings": "^0.2.2-rc.1",
107
+ "@deepseek-ai/dsh-storage-domain": "^0.2.2-rc.1",
108
+ "@deepseek-ai/schemastery": "^3.19.0",
109
109
  "@eslint/js": "^10.0.1",
110
110
  "@types/node": "^20.0.0",
111
111
  "@types/react": "~18.3.1",
@@ -120,9 +120,10 @@
120
120
  "react-dom": "^18.3.1",
121
121
  "typescript": "^5.4.0",
122
122
  "typescript-eslint": "^8.70.1",
123
- "vitest": "^4.1.11"
123
+ "vitest": "^4.1.11",
124
+ "yaml": "^2.9.1"
124
125
  },
125
126
  "dependencies": {
126
- "zod": "4.4.3"
127
+ "zod": "4.6.6"
127
128
  }
128
129
  }