@gearbox-protocol/ui-kit 3.14.0-next.27 → 3.14.0-next.28

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),w=require("../tooltip/simple-tooltip.cjs");require("../tooltip/tooltip.cjs");const M=require("../typed-intl/index.cjs"),T=require("../../utils/cn.cjs");require("../accordion/accordion.cjs");require("@gearbox-protocol/static");require("@fortawesome/free-solid-svg-icons");require("../icons/fa-icon.cjs");require("@gearbox-protocol/sdk");require("sonner");require("@gearbox-protocol/sdk/common-utils");require("luxon");require("../../utils/z-index.cjs");require("../alert-badge/alert-badge.cjs");require("../alert-dialog/alert-dialog.cjs");require("../alert-modal/alert-modal.cjs");require("../arc-loader/arc-loader.cjs");require("../asset-line/asset-line.cjs");require("../buttons/back-button/back-button.cjs");require("../buttons/button/button.cjs");require("../buttons/copy-button/copy-button.cjs");require("../buttons/external-button/external-button.cjs");require("../buttons/filter-button/filter-button.cjs");require("../buttons/navigation-button/navigation-button.cjs");require("../buttons/tab-button/tab-button.cjs");require("../token-icon/token-icon.cjs");require("wagmi");require("../auth/wallet-ui-context.cjs");require("../avatar/avatar.cjs");require("../badge/badge.cjs");require("../base-link/base-link.cjs");require("../navigation-context/navigation-context.cjs");require("../button-checkbox/button-checkbox.cjs");require("../card-grid/card-grid.cjs");require("../cards/card/card.cjs");require("../carousel/carousel.cjs");require("../checkbox/checkbox.cjs");require("../checkbox/checkbox-labeled.cjs");require("../checkbox-item/checkbox-item.cjs");require("../client-adapters/styled-button/styled-button.cjs");require("../client-adapters/styled-dialog-container/styled-dialog-container.cjs");require("../client-adapters/styled-rounded-image/styled-rounded-image.cjs");require("../colored-text/colored-text.cjs");require("../input/input.cjs");require("../with-title/with-title.cjs");require("../smart-number-input/balance-indicator.cjs");require("../smart-number-input/smart-number-input.cjs");require("../table/grid-table.cjs");require("../token-symbol/token-symbol.cjs");require("../typography/typography.cjs");require("../help-tip/help-tip.cjs");require("../description/description.cjs");require("../confirm-menu/confirm-menu.cjs");require("../dialog/dialog-modal-container.cjs");require("../text-button/text-button.cjs");require("../vertical-indicator/vertical-indicator.cjs");require("../points-icon/points-icon.cjs");require("../skeleton/skeleton.cjs");require("../vertical-list/vertical-list.cjs");require("../rounded-image/rounded-image.cjs");require("../progress/progress.cjs");require("../pool-indicator-icon/pool-indicator-icon.cjs");require("../composites/strategies-table/components/feature/feature.styles.cjs");require("viem");require("../icon-button/icon-button.cjs");require("../separate-line/separate-line.cjs");require("../tip-card/tip-card.cjs");require("../composites/strategies-table/components/rewards-tooltip/rewards-tooltip-root.cjs");require("../currency-button/currency-button.cjs");require("../detailed-apy/detailed-apy.cjs");require("../detailed-page-title/detailed-page-title.cjs");require("../detailed-page-title/detailed-page-title-copy-button.cjs");require("../detailed-page-title/detailed-page-title-explorer-dropdown.cjs");require("../modal/modal.cjs");require("@radix-ui/react-dialog");require("../dialog/dialog-container.cjs");require("../dialog/dialog-content.cjs");require("../dialog/dialog-description.cjs");require("../dialog/dialog-footer.cjs");require("../dialog/dialog-header.cjs");require("../dialog/dialog-title.cjs");require("../dialog/dialog-overlay.cjs");require("../label/label.cjs");require("../dropdown-menu/dropdown-menu.cjs");require("../dropdown-menu/dropdown-menu-checkbox-item.cjs");require("../dropdown-menu/dropdown-menu-content.cjs");require("../dropdown-menu/dropdown-menu-item.cjs");require("../dropdown-menu/dropdown-menu-label.cjs");require("../dropdown-menu/dropdown-menu-radio-item.cjs");require("../dropdown-menu/dropdown-menu-separator.cjs");require("../dropdown-menu/dropdown-menu-shortcut.cjs");require("../dropdown-menu/dropdown-menu-sub-content.cjs");require("../dropdown-menu/dropdown-menu-sub-trigger.cjs");require("../edit-input/edit-input.cjs");require("react-intl");require("../fadeout-loading/fadeout-loading.cjs");require("../filter/filter-block.cjs");require("../filter/filter-checkbox-item.cjs");require("../filter/filter-chip.cjs");require("../filter/filter-chips.cjs");require("../filter/filter-dropdown-item.cjs");require("../filter/filter-group.cjs");require("../filter/filter-label.cjs");require("../search-line/search-line.cjs");require("../tabs/tabs.cjs");require("../filter/filter-modal-item.cjs");require("../filter/filter-radio-item.cjs");require("../filter/filter-separator.cjs");require("../filter/variants.cjs");require("../graph/formatters.cjs");require("lightweight-charts");require("../graph/graph-view.cjs");require("../health-factor/health-factor.cjs");require("../horizontal-indicator/horizontal-indicator.cjs");require("../layout/app-footer/app-footer.cjs");require("../layout/app-header/app-header.cjs");require("../layout/col/col.cjs");require("../layout/container/container.cjs");require("../layout/footer/footer.cjs");require("../layout/grid/grid.cjs");require("../layout/header/header.cjs");require("../layout/layout/layout.cjs");require("../layout/main-aside-layout/main-aside-layout.cjs");require("../page-title/page-title.cjs");require("../layout/social-icons/social-icons.cjs");require("../legal-agreement/legal-agreement-theme.cjs");require("../link/link.cjs");require("../../utils/reactochart-compat.cjs");require("../status-elements/status-elements.cjs");require("../loader/loader.cjs");require("../loading/loading.cjs");require("../loading-bar/loading-bar.cjs");require("react-markdown");require("remark-gfm");require("../navbar/navbar.cjs");require("../navbar/navbar-indicator-context.cjs");require("../app-bar/app-bar.cjs");require("../navitem/navitem.cjs");require("../simple-dropdown/simple-dropdown.cjs");require("../progress-bar/progress-bar.cjs");require("../radio-group/radio-group.cjs");require("../search-bar/search-bar.cjs");require("../segmented-control/segmented-control.cjs");require("../select/select.cjs");require("../separator/separator.cjs");require("../simple-accordion/simple-accordion.cjs");require("../simple-dropdown/simple-dropdown-menu-item.cjs");require("../slider/slider.cjs");require("../slider/slider-context.cjs");require("@radix-ui/react-slider");require("../spinner/spinner.cjs");require("../spinner-loader/spinner-loader.cjs");require("../split-list/split-list.cjs");require("../stat-badge/stat-badge.cjs");const R=require("../status-dot/status-dot.cjs");require("../stepper/stepper.cjs");require("../switch/switch.cjs");require("../table/table.cjs");require("../table/grid-table-loader.cjs");require("../textarea/textarea.cjs");require("../theme-provider.cjs");require("../time-to-liquidation/time-to-liquidation.cjs");require("../toggle/toggle.cjs");require("../with-filter-button/with-filter-button.cjs");const U=300*1e3,O=2.5;function $({blockByChain:t,explorerAddresses:j,networkById:b,syncIntervalMs:v=U,staleMultiplier:_=O,statusLabel:h="Status",className:k}){const{formatMessage:a}=M.useIntlTyped(),[m,L]=d.useState(Date.now());d.useEffect(()=>{const r=()=>{L(Date.now())},u=window.setInterval(r,1e3);return()=>{clearInterval(u)}},[]);const p=v*_,n=d.useMemo(()=>{const r=t?Object.values(t).filter(i=>!!i):[],u=r.some(i=>!!i.error),o=r.filter(i=>i.lastSyncBlock.block>0n&&i.lastSyncBlock.localTimestamp).map(i=>i.lastSyncBlock.localTimestamp),s=o.length?Math.min(...o):0,c=s>0&&m-s>p;return u||c?"error":s===0?"loading":"synced"},[t,m,p]),N=t?Object.values(t).some(r=>r?.loading):!1,A=n==="error"?"alert":n==="loading"?"default":"success",D=n==="loading"||n==="synced"&&N,x=()=>e.jsxs("span",{className:T.cn("inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs",n==="error"?"text-destructive":"text-muted-foreground",k),children:[e.jsx(R.StatusDot,{variant:A,size:"xs",pulse:D}),h]}),f=(()=>{if(!t)return null;const r=Object.entries(t).filter(u=>!!u[1]);return r.length===0?null:e.jsx("div",{className:"flex flex-col text-left text-xs",children:r.map(([u,o],s)=>{const{lastSyncBlock:c,error:i}=o,l=c?.block||0n,S=c?.localTimestamp,q=j[Number(u)],g=typeof q=="string"?q:q&&typeof q=="object"&&"url"in q?q.url:void 0,E=b[Number(u)]||"Unknown",y=`[${l.toString()}]`,I=s===r.length-1,P=l>0n&&!!S;return e.jsxs("div",{className:T.cn(!I&&"mb-2"),children:[e.jsxs("span",{children:[E," "]}),g&&l>0?e.jsx("a",{href:`${g}/block/${l}`,target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-foreground",children:y}):e.jsx("span",{children:y}),i?e.jsx("span",{className:"text-destructive",children:a({messageId:"components.blockSyncPill.syncError"})}):P?e.jsx("span",{children:a({messageId:"components.blockSyncPill.syncedAt"},{time:new Date(S).toLocaleTimeString()})}):e.jsx("span",{children:a({messageId:"components.blockSyncPill.syncing"})})]},u)})})})();return f?e.jsx(w.SimpleTooltip,{title:x(),children:f}):e.jsx("div",{className:"select-none",children:x()})}exports.BlockSyncPill=$;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),E=require("../tooltip/simple-tooltip.cjs");require("../tooltip/tooltip.cjs");const M=require("../typed-intl/index.cjs"),g=require("../../utils/cn.cjs");require("../accordion/accordion.cjs");require("@gearbox-protocol/static");require("@fortawesome/free-solid-svg-icons");require("../icons/fa-icon.cjs");require("@gearbox-protocol/sdk");require("sonner");require("@gearbox-protocol/sdk/common-utils");require("luxon");require("../../utils/z-index.cjs");require("../alert-badge/alert-badge.cjs");require("../alert-dialog/alert-dialog.cjs");require("../alert-modal/alert-modal.cjs");require("../arc-loader/arc-loader.cjs");require("../asset-line/asset-line.cjs");require("../buttons/back-button/back-button.cjs");require("../buttons/button/button.cjs");require("../buttons/copy-button/copy-button.cjs");require("../buttons/external-button/external-button.cjs");require("../buttons/filter-button/filter-button.cjs");require("../buttons/navigation-button/navigation-button.cjs");require("../buttons/tab-button/tab-button.cjs");require("../token-icon/token-icon.cjs");require("wagmi");require("../auth/wallet-ui-context.cjs");require("../avatar/avatar.cjs");require("../badge/badge.cjs");require("../base-link/base-link.cjs");require("../navigation-context/navigation-context.cjs");require("../button-checkbox/button-checkbox.cjs");require("../card-grid/card-grid.cjs");require("../cards/card/card.cjs");require("../carousel/carousel.cjs");require("../checkbox/checkbox.cjs");require("../checkbox/checkbox-labeled.cjs");require("../checkbox-item/checkbox-item.cjs");require("../client-adapters/styled-button/styled-button.cjs");require("../client-adapters/styled-dialog-container/styled-dialog-container.cjs");require("../client-adapters/styled-rounded-image/styled-rounded-image.cjs");require("../colored-text/colored-text.cjs");require("../input/input.cjs");require("../with-title/with-title.cjs");require("../smart-number-input/balance-indicator.cjs");require("../smart-number-input/smart-number-input.cjs");require("../table/grid-table.cjs");require("../token-symbol/token-symbol.cjs");require("../typography/typography.cjs");require("../help-tip/help-tip.cjs");require("../description/description.cjs");require("../confirm-menu/confirm-menu.cjs");require("../dialog/dialog-modal-container.cjs");require("../text-button/text-button.cjs");require("../vertical-indicator/vertical-indicator.cjs");require("../points-icon/points-icon.cjs");require("../skeleton/skeleton.cjs");require("../vertical-list/vertical-list.cjs");require("../rounded-image/rounded-image.cjs");require("../progress/progress.cjs");require("../pool-indicator-icon/pool-indicator-icon.cjs");require("../composites/strategies-table/components/feature/feature.styles.cjs");require("viem");require("../icon-button/icon-button.cjs");require("../separate-line/separate-line.cjs");require("../tip-card/tip-card.cjs");require("../composites/strategies-table/components/rewards-tooltip/rewards-tooltip-root.cjs");require("../currency-button/currency-button.cjs");require("../detailed-apy/detailed-apy.cjs");require("../detailed-page-title/detailed-page-title.cjs");require("../detailed-page-title/detailed-page-title-copy-button.cjs");require("../detailed-page-title/detailed-page-title-explorer-dropdown.cjs");require("../modal/modal.cjs");require("@radix-ui/react-dialog");require("../dialog/dialog-container.cjs");require("../dialog/dialog-content.cjs");require("../dialog/dialog-description.cjs");require("../dialog/dialog-footer.cjs");require("../dialog/dialog-header.cjs");require("../dialog/dialog-title.cjs");require("../dialog/dialog-overlay.cjs");require("../label/label.cjs");require("../dropdown-menu/dropdown-menu.cjs");require("../dropdown-menu/dropdown-menu-checkbox-item.cjs");require("../dropdown-menu/dropdown-menu-content.cjs");require("../dropdown-menu/dropdown-menu-item.cjs");require("../dropdown-menu/dropdown-menu-label.cjs");require("../dropdown-menu/dropdown-menu-radio-item.cjs");require("../dropdown-menu/dropdown-menu-separator.cjs");require("../dropdown-menu/dropdown-menu-shortcut.cjs");require("../dropdown-menu/dropdown-menu-sub-content.cjs");require("../dropdown-menu/dropdown-menu-sub-trigger.cjs");require("../edit-input/edit-input.cjs");require("react-intl");require("../fadeout-loading/fadeout-loading.cjs");require("../filter/filter-block.cjs");require("../filter/filter-checkbox-item.cjs");require("../filter/filter-chip.cjs");require("../filter/filter-chips.cjs");require("../filter/filter-dropdown-item.cjs");require("../filter/filter-group.cjs");require("../filter/filter-label.cjs");require("../search-line/search-line.cjs");require("../tabs/tabs.cjs");require("../filter/filter-modal-item.cjs");require("../filter/filter-radio-item.cjs");require("../filter/filter-separator.cjs");require("../filter/variants.cjs");require("../graph/formatters.cjs");require("lightweight-charts");require("../graph/graph-view.cjs");require("../health-factor/health-factor.cjs");require("../horizontal-indicator/horizontal-indicator.cjs");require("../layout/app-footer/app-footer.cjs");require("../layout/app-header/app-header.cjs");require("../layout/col/col.cjs");require("../layout/container/container.cjs");require("../layout/footer/footer.cjs");require("../layout/grid/grid.cjs");require("../layout/header/header.cjs");require("../layout/layout/layout.cjs");require("../layout/main-aside-layout/main-aside-layout.cjs");require("../page-title/page-title.cjs");require("../layout/social-icons/social-icons.cjs");require("../legal-agreement/legal-agreement-theme.cjs");require("../link/link.cjs");require("../../utils/reactochart-compat.cjs");require("../status-elements/status-elements.cjs");require("../loader/loader.cjs");require("../loading/loading.cjs");require("../loading-bar/loading-bar.cjs");require("react-markdown");require("remark-gfm");require("../navbar/navbar.cjs");require("../navbar/navbar-indicator-context.cjs");require("../app-bar/app-bar.cjs");require("../navitem/navitem.cjs");require("../simple-dropdown/simple-dropdown.cjs");require("../progress-bar/progress-bar.cjs");require("../radio-group/radio-group.cjs");require("../search-bar/search-bar.cjs");require("../segmented-control/segmented-control.cjs");require("../select/select.cjs");require("../separator/separator.cjs");require("../simple-accordion/simple-accordion.cjs");require("../simple-dropdown/simple-dropdown-menu-item.cjs");require("../slider/slider.cjs");require("../slider/slider-context.cjs");require("@radix-ui/react-slider");require("../spinner/spinner.cjs");require("../spinner-loader/spinner-loader.cjs");require("../split-list/split-list.cjs");require("../stat-badge/stat-badge.cjs");const R=require("../status-dot/status-dot.cjs");require("../stepper/stepper.cjs");require("../switch/switch.cjs");require("../table/table.cjs");require("../table/grid-table-loader.cjs");require("../textarea/textarea.cjs");require("../theme-provider.cjs");require("../time-to-liquidation/time-to-liquidation.cjs");require("../toggle/toggle.cjs");require("../with-filter-button/with-filter-button.cjs");const U=require("./block-sync-status.cjs"),$=300*1e3,F=2.5;function O({blockByChain:t,explorerAddresses:y,networkById:f,syncIntervalMs:b=$,staleMultiplier:j=F,statusLabel:T="Status",className:_}){const{formatMessage:s}=M.useIntlTyped(),[c,k]=o.useState(Date.now());o.useEffect(()=>{const q=()=>{k(Date.now())},r=window.setInterval(q,1e3);return()=>{clearInterval(r)}},[]);const l=b*j,{state:u,isSyncing:h}=o.useMemo(()=>U.getBlockSyncStatus({blockByChain:t,now:c,staleAfterMs:l}),[t,c,l]),v=u==="error"?"alert":u==="loading"?"default":"success",L=u==="loading"||u==="synced"&&h,a=()=>e.jsxs("span",{className:g.cn("inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs",u==="error"?"text-destructive":"text-muted-foreground",_),children:[e.jsx(R.StatusDot,{variant:v,size:"xs",pulse:L}),T]}),d=(()=>{if(!t)return null;const q=Object.entries(t).filter(r=>!!r[1]);return q.length===0?null:e.jsx("div",{className:"flex flex-col text-left text-xs",children:q.map(([r,N],P)=>{const{lastSyncBlock:p,error:w}=N,n=p?.block||0n,m=p?.localTimestamp,i=y[Number(r)],x=typeof i=="string"?i:i&&typeof i=="object"&&"url"in i?i.url:void 0,D=f[Number(r)]||"Unknown",S=`[${n.toString()}]`,I=P===q.length-1,A=n>0n&&!!m;return e.jsxs("div",{className:g.cn(!I&&"mb-2"),children:[e.jsxs("span",{children:[D," "]}),x&&n>0?e.jsx("a",{href:`${x}/block/${n}`,target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-foreground",children:S}):e.jsx("span",{children:S}),w?e.jsx("span",{className:"text-destructive",children:s({messageId:"components.blockSyncPill.syncError"})}):A?e.jsx("span",{children:s({messageId:"components.blockSyncPill.syncedAt"},{time:new Date(m).toLocaleTimeString()})}):e.jsx("span",{children:s({messageId:"components.blockSyncPill.syncing"})})]},r)})})})();return d?e.jsx(E.SimpleTooltip,{title:a(),children:d}):e.jsx("div",{className:"select-none",children:a()})}exports.BlockSyncPill=O;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function m({blockByChain:l,now:o,staleAfterMs:a}){const s=l?Object.values(l).filter(t=>!!t):[],i=s.some(t=>!!t.error),r=s.some(t=>!!t.loading),n=s.filter(t=>t.lastSyncBlock.block>0n&&t.lastSyncBlock.localTimestamp).map(t=>t.lastSyncBlock.localTimestamp),c=n.length?Math.min(...n):0,S=c>0&&o-c>a;let e;return i||S?e="error":c===0?e="loading":e="synced",{state:e,isSyncing:r}}exports.getBlockSyncStatus=m;
@@ -1,9 +1,9 @@
1
- import { jsx as i, jsxs as d } from "react/jsx-runtime";
2
- import { useState as _, useEffect as U, useMemo as O } from "react";
3
- import { SimpleTooltip as R } from "../tooltip/simple-tooltip.js";
1
+ import { jsx as t, jsxs as s } from "react/jsx-runtime";
2
+ import { useState as U, useEffect as j, useMemo as R } from "react";
3
+ import { SimpleTooltip as $ } from "../tooltip/simple-tooltip.js";
4
4
  import "../tooltip/tooltip.js";
5
- import { useIntlTyped as $ } from "../typed-intl/index.js";
6
- import { cn as b } from "../../utils/cn.js";
5
+ import { useIntlTyped as F } from "../typed-intl/index.js";
6
+ import { cn as S } from "../../utils/cn.js";
7
7
  import "../accordion/accordion.js";
8
8
  import "@gearbox-protocol/static";
9
9
  import "@fortawesome/free-solid-svg-icons";
@@ -154,7 +154,7 @@ import "../spinner/spinner.js";
154
154
  import "../spinner-loader/spinner-loader.js";
155
155
  import "../split-list/split-list.js";
156
156
  import "../stat-badge/stat-badge.js";
157
- import { StatusDot as F } from "../status-dot/status-dot.js";
157
+ import { StatusDot as V } from "../status-dot/status-dot.js";
158
158
  import "../stepper/stepper.js";
159
159
  import "../switch/switch.js";
160
160
  import "../table/table.js";
@@ -164,77 +164,76 @@ import "../theme-provider.js";
164
164
  import "../time-to-liquidation/time-to-liquidation.js";
165
165
  import "../toggle/toggle.js";
166
166
  import "../with-filter-button/with-filter-button.js";
167
- const V = 300 * 1e3, z = 2.5;
167
+ import { getBlockSyncStatus as z } from "./block-sync-status.js";
168
+ const C = 300 * 1e3, O = 2.5;
168
169
  function Qo({
169
- blockByChain: m,
170
- explorerAddresses: h,
171
- networkById: v,
172
- syncIntervalMs: k = V,
173
- staleMultiplier: L = z,
174
- statusLabel: N = "Status",
175
- className: A
170
+ blockByChain: p,
171
+ explorerAddresses: y,
172
+ networkById: T,
173
+ syncIntervalMs: b = C,
174
+ staleMultiplier: h = O,
175
+ statusLabel: k = "Status",
176
+ className: v
176
177
  }) {
177
- const { formatMessage: a } = $(), [u, E] = _(Date.now());
178
- U(() => {
179
- const t = () => {
180
- E(Date.now());
181
- }, o = window.setInterval(t, 1e3);
178
+ const { formatMessage: n } = F(), [c, L] = U(Date.now());
179
+ j(() => {
180
+ const m = () => {
181
+ L(Date.now());
182
+ }, r = window.setInterval(m, 1e3);
182
183
  return () => {
183
- clearInterval(o);
184
+ clearInterval(r);
184
185
  };
185
186
  }, []);
186
- const f = k * L, e = O(() => {
187
- const t = m ? Object.values(m).filter(
188
- (r) => !!r
189
- ) : [], o = t.some((r) => !!r.error), s = t.filter((r) => r.lastSyncBlock.block > 0n && r.lastSyncBlock.localTimestamp).map((r) => r.lastSyncBlock.localTimestamp), n = s.length ? Math.min(...s) : 0, l = n > 0 && u - n > f;
190
- return o || l ? "error" : n === 0 ? "loading" : "synced";
191
- }, [m, u, f]), w = m ? Object.values(m).some((t) => t?.loading) : !1, I = e === "error" ? "alert" : e === "loading" ? "default" : "success", j = e === "loading" || e === "synced" && w, S = () => /* @__PURE__ */ d(
187
+ const l = b * h, { state: i, isSyncing: N } = R(
188
+ () => z({ blockByChain: p, now: c, staleAfterMs: l }),
189
+ [p, c, l]
190
+ ), w = i === "error" ? "alert" : i === "loading" ? "default" : "success", A = i === "loading" || i === "synced" && N, a = () => /* @__PURE__ */ s(
192
191
  "span",
193
192
  {
194
- className: b(
193
+ className: S(
195
194
  "inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs",
196
- e === "error" ? "text-destructive" : "text-muted-foreground",
197
- A
195
+ i === "error" ? "text-destructive" : "text-muted-foreground",
196
+ v
198
197
  ),
199
198
  children: [
200
- /* @__PURE__ */ i(F, { variant: I, size: "xs", pulse: j }),
201
- N
199
+ /* @__PURE__ */ t(V, { variant: w, size: "xs", pulse: A }),
200
+ k
202
201
  ]
203
202
  }
204
- ), g = (() => {
205
- if (!m) return null;
206
- const t = Object.entries(m).filter(
207
- (o) => !!o[1]
203
+ ), d = (() => {
204
+ if (!p) return null;
205
+ const m = Object.entries(p).filter(
206
+ (r) => !!r[1]
208
207
  );
209
- return t.length === 0 ? null : /* @__PURE__ */ i("div", { className: "flex flex-col text-left text-xs", children: t.map(([o, s], n) => {
210
- const { lastSyncBlock: l, error: r } = s, c = l?.block || 0n, x = l?.localTimestamp, p = h[Number(o)], y = typeof p == "string" ? p : p && typeof p == "object" && "url" in p ? p.url : void 0, D = v[Number(o)] || "Unknown", T = `[${c.toString()}]`, M = n === t.length - 1, P = c > 0n && !!x;
211
- return /* @__PURE__ */ d("div", { className: b(!M && "mb-2"), children: [
212
- /* @__PURE__ */ d("span", { children: [
213
- D,
208
+ return m.length === 0 ? null : /* @__PURE__ */ t("div", { className: "flex flex-col text-left text-xs", children: m.map(([r, E], I) => {
209
+ const { lastSyncBlock: u, error: D } = E, e = u?.block || 0n, f = u?.localTimestamp, o = y[Number(r)], g = typeof o == "string" ? o : o && typeof o == "object" && "url" in o ? o.url : void 0, P = T[Number(r)] || "Unknown", x = `[${e.toString()}]`, _ = I === m.length - 1, M = e > 0n && !!f;
210
+ return /* @__PURE__ */ s("div", { className: S(!_ && "mb-2"), children: [
211
+ /* @__PURE__ */ s("span", { children: [
212
+ P,
214
213
  " "
215
214
  ] }),
216
- y && c > 0 ? /* @__PURE__ */ i(
215
+ g && e > 0 ? /* @__PURE__ */ t(
217
216
  "a",
218
217
  {
219
- href: `${y}/block/${c}`,
218
+ href: `${g}/block/${e}`,
220
219
  target: "_blank",
221
220
  rel: "noopener noreferrer",
222
221
  className: "underline hover:text-foreground",
223
- children: T
222
+ children: x
224
223
  }
225
- ) : /* @__PURE__ */ i("span", { children: T }),
226
- r ? /* @__PURE__ */ i("span", { className: "text-destructive", children: a({
224
+ ) : /* @__PURE__ */ t("span", { children: x }),
225
+ D ? /* @__PURE__ */ t("span", { className: "text-destructive", children: n({
227
226
  messageId: "components.blockSyncPill.syncError"
228
- }) }) : P ? /* @__PURE__ */ i("span", { children: a(
227
+ }) }) : M ? /* @__PURE__ */ t("span", { children: n(
229
228
  { messageId: "components.blockSyncPill.syncedAt" },
230
- { time: new Date(x).toLocaleTimeString() }
231
- ) }) : /* @__PURE__ */ i("span", { children: a({
229
+ { time: new Date(f).toLocaleTimeString() }
230
+ ) }) : /* @__PURE__ */ t("span", { children: n({
232
231
  messageId: "components.blockSyncPill.syncing"
233
232
  }) })
234
- ] }, o);
233
+ ] }, r);
235
234
  }) });
236
235
  })();
237
- return g ? /* @__PURE__ */ i(R, { title: S(), children: g }) : /* @__PURE__ */ i("div", { className: "select-none", children: S() });
236
+ return d ? /* @__PURE__ */ t($, { title: a(), children: d }) : /* @__PURE__ */ t("div", { className: "select-none", children: a() });
238
237
  }
239
238
  export {
240
239
  Qo as BlockSyncPill
@@ -0,0 +1,12 @@
1
+ function S({
2
+ blockByChain: c,
3
+ now: o,
4
+ staleAfterMs: a
5
+ }) {
6
+ const e = c ? Object.values(c).filter((t) => !!t) : [], i = e.some((t) => !!t.error), r = e.some((t) => !!t.loading), l = e.filter((t) => t.lastSyncBlock.block > 0n && t.lastSyncBlock.localTimestamp).map((t) => t.lastSyncBlock.localTimestamp), n = l.length ? Math.min(...l) : 0, m = n > 0 && o - n > a;
7
+ let s;
8
+ return i || m ? s = "error" : n === 0 ? s = "loading" : s = "synced", { state: s, isSyncing: r };
9
+ }
10
+ export {
11
+ S as getBlockSyncStatus
12
+ };
@@ -0,0 +1,29 @@
1
+ import { BlockByChain } from '../../types/footer';
2
+ /**
3
+ * Liveness state of the data-refresh loop, derived from per-chain sync info:
4
+ * - `loading` — nothing has successfully synced yet (initial state);
5
+ * - `synced` — at least one chain synced and none are stale/failing;
6
+ * - `error` — a chain reported an error, or the oldest sync is stale.
7
+ */
8
+ export type BlockSyncState = "loading" | "synced" | "error";
9
+ export interface BlockSyncStatus {
10
+ state: BlockSyncState;
11
+ /** True while any chain has a refresh in flight. */
12
+ isSyncing: boolean;
13
+ }
14
+ export interface GetBlockSyncStatusProps {
15
+ blockByChain: BlockByChain | undefined;
16
+ /** Reference "now" timestamp (ms) used to evaluate staleness. */
17
+ now: number;
18
+ /** Age (ms) after which the oldest sync is considered stale. */
19
+ staleAfterMs: number;
20
+ }
21
+ /**
22
+ * Pure derivation of the {@link BlockSyncState} from chain sync info.
23
+ *
24
+ * A chain counts as "synced" only when it has both a real block (`> 0`) and a
25
+ * local sync timestamp. Staleness is measured against the **oldest** synced
26
+ * chain, so a single lagging chain is enough to flag the whole indicator.
27
+ * Errors take priority over everything else.
28
+ */
29
+ export declare function getBlockSyncStatus({ blockByChain, now, staleAfterMs, }: GetBlockSyncStatusProps): BlockSyncStatus;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/ui-kit",
3
- "version": "3.14.0-next.27",
3
+ "version": "3.14.0-next.28",
4
4
  "description": "Internal UI components",
5
5
  "repository": {
6
6
  "type": "git",