@orangecheck/design 0.7.5 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1904,6 +1904,38 @@ function TabsContent({ className, ...props }) {
1904
1904
  }
1905
1905
  );
1906
1906
  }
1907
+ function useSpotPrice(opts = {}) {
1908
+ const { endpoint = "/api/price/btc-usd", intervalMs = 6e4 } = opts;
1909
+ const [state, setState] = useState({
1910
+ btcUsd: REFERENCE_BTC_USD,
1911
+ fetchedAt: null
1912
+ });
1913
+ useEffect(() => {
1914
+ let cancelled = false;
1915
+ async function pull() {
1916
+ try {
1917
+ const res = await fetch(endpoint);
1918
+ if (!res.ok) return;
1919
+ const json = await res.json();
1920
+ if (cancelled) return;
1921
+ if (typeof json.btc_usd === "number" && json.btc_usd > 0) {
1922
+ setState({
1923
+ btcUsd: Math.round(json.btc_usd),
1924
+ fetchedAt: json.fetched_at ?? null
1925
+ });
1926
+ }
1927
+ } catch {
1928
+ }
1929
+ }
1930
+ void pull();
1931
+ const t = setInterval(pull, intervalMs);
1932
+ return () => {
1933
+ cancelled = true;
1934
+ clearInterval(t);
1935
+ };
1936
+ }, [endpoint, intervalMs]);
1937
+ return state;
1938
+ }
1907
1939
 
1908
1940
  // src/format/index.ts
1909
1941
  var REFERENCE_BTC_USD = 95e3;
@@ -1933,6 +1965,16 @@ function usdToSats(usd, btcUsd = REFERENCE_BTC_USD) {
1933
1965
  function priceBoth(sats, btcUsd = REFERENCE_BTC_USD) {
1934
1966
  return `${formatSats(sats)} sats \xB7 ${satsToUsd(sats, btcUsd)}`;
1935
1967
  }
1968
+ function asOf(iso) {
1969
+ if (!iso) return null;
1970
+ const t = new Date(iso);
1971
+ if (Number.isNaN(t.getTime())) return null;
1972
+ return `as of ${t.toLocaleTimeString(void 0, {
1973
+ hour: "2-digit",
1974
+ minute: "2-digit",
1975
+ hour12: false
1976
+ })}`;
1977
+ }
1936
1978
  function relativeTime(when) {
1937
1979
  const t = when instanceof Date ? when.getTime() : new Date(when).getTime();
1938
1980
  if (Number.isNaN(t)) return "";
@@ -3888,6 +3930,6 @@ function LayoutSubHeader({
3888
3930
  ] }) });
3889
3931
  }
3890
3932
 
3891
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithCountdown, AppShell, Badge, Bar, BitcoinAddress, Button, Callout, Card, Checkbox, ConfirmHost, CopyButton, DEFAULT_OC_THEME, DataRow, DefinitionList, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, EcosystemSwitcher, EmptyState, ErrorBoundary, FAMILY_PROPERTIES, HelpHint, Input, Label, LayoutSubHeader, Modal, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAccountMenu, OcAccountMenuView, OcAppearanceMenu, OcDashboardHub, OcDashboardShell, OcLogoDropdown, OcPrimaryNav, OcThemeBridge, OcThemePicker, OcThemeProvider, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, QrCode, REFERENCE_BTC_USD, RadioGroup, RadioGroupItem, SITE_STATE_LABEL, SatsAmount, SectionHeader, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Sparkline, StatBlock, StatCard, StatGrid, StatTile, StatusPill, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, accentFor, badgeVariants, buttonVariants, cn, confirm, explorerUrl, findFamilyProperty, formatSats, formatSatsCompact, getOcThemeInitScript, isKnownTheme, makeStatusPill, priceBoth, prompt, relativeTime, resolveTheme, satsToUsd, shortenAddress, usdToSats, useOcSkin };
3933
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithCountdown, AppShell, Badge, Bar, BitcoinAddress, Button, Callout, Card, Checkbox, ConfirmHost, CopyButton, DEFAULT_OC_THEME, DataRow, DefinitionList, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, EcosystemSwitcher, EmptyState, ErrorBoundary, FAMILY_PROPERTIES, HelpHint, Input, Label, LayoutSubHeader, Modal, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAccountMenu, OcAccountMenuView, OcAppearanceMenu, OcDashboardHub, OcDashboardShell, OcLogoDropdown, OcPrimaryNav, OcThemeBridge, OcThemePicker, OcThemeProvider, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, QrCode, REFERENCE_BTC_USD, RadioGroup, RadioGroupItem, SITE_STATE_LABEL, SatsAmount, SectionHeader, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Sparkline, StatBlock, StatCard, StatGrid, StatTile, StatusPill, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, accentFor, asOf, badgeVariants, buttonVariants, cn, confirm, explorerUrl, findFamilyProperty, formatSats, formatSatsCompact, getOcThemeInitScript, isKnownTheme, makeStatusPill, priceBoth, prompt, relativeTime, resolveTheme, satsToUsd, shortenAddress, usdToSats, useOcSkin, useSpotPrice };
3892
3934
  //# sourceMappingURL=index.mjs.map
3893
3935
  //# sourceMappingURL=index.mjs.map