@orangecheck/design 0.7.5 → 0.8.0

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
@@ -67,6 +67,11 @@ function resolveTheme(id) {
67
67
  return isKnownTheme(id) ? id : DEFAULT_OC_THEME;
68
68
  }
69
69
  var OC_SKIN_COOKIE = "oc_skin";
70
+ var BLOBS = [1, 2, 3, 4, 5];
71
+ function OcAurora({ intensity, className }) {
72
+ const style = intensity == null ? void 0 : { "--oc-aurora-intensity": String(intensity) };
73
+ return /* @__PURE__ */ jsx("div", { className: cn("oc-aurora", className), style, "aria-hidden": "true", children: BLOBS.map((n) => /* @__PURE__ */ jsx("div", { className: `oc-aurora__blob oc-aurora__blob-${n}` }, n)) });
74
+ }
70
75
  var ONE_YEAR = 60 * 60 * 24 * 365;
71
76
  var ATTR = "data-oc-theme";
72
77
  function readSkinCookie() {
@@ -110,7 +115,11 @@ function applySkinChrome(skin) {
110
115
  if (meta) meta.setAttribute("content", accentFor(skin));
111
116
  }
112
117
  var OcSkinContext = createContext(null);
113
- function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
118
+ function OcThemeProvider({
119
+ children,
120
+ defaultSkin = DEFAULT_OC_THEME,
121
+ aurora = true
122
+ }) {
114
123
  const [skin, setSkinState] = useState(() => resolveTheme(defaultSkin));
115
124
  const hydratedRef = useRef(false);
116
125
  useEffect(() => {
@@ -148,7 +157,10 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
148
157
  () => ({ skin, setSkin, themes: OC_THEMES }),
149
158
  [skin, setSkin]
150
159
  );
151
- return /* @__PURE__ */ jsx(OcSkinContext.Provider, { value, children });
160
+ return /* @__PURE__ */ jsxs(OcSkinContext.Provider, { value, children: [
161
+ aurora !== false && /* @__PURE__ */ jsx(OcAurora, { intensity: typeof aurora === "object" ? aurora.intensity : void 0 }),
162
+ children
163
+ ] });
152
164
  }
153
165
  function useOcSkin() {
154
166
  const ctx = useContext(OcSkinContext);
@@ -1904,6 +1916,38 @@ function TabsContent({ className, ...props }) {
1904
1916
  }
1905
1917
  );
1906
1918
  }
1919
+ function useSpotPrice(opts = {}) {
1920
+ const { endpoint = "/api/price/btc-usd", intervalMs = 6e4 } = opts;
1921
+ const [state, setState] = useState({
1922
+ btcUsd: REFERENCE_BTC_USD,
1923
+ fetchedAt: null
1924
+ });
1925
+ useEffect(() => {
1926
+ let cancelled = false;
1927
+ async function pull() {
1928
+ try {
1929
+ const res = await fetch(endpoint);
1930
+ if (!res.ok) return;
1931
+ const json = await res.json();
1932
+ if (cancelled) return;
1933
+ if (typeof json.btc_usd === "number" && json.btc_usd > 0) {
1934
+ setState({
1935
+ btcUsd: Math.round(json.btc_usd),
1936
+ fetchedAt: json.fetched_at ?? null
1937
+ });
1938
+ }
1939
+ } catch {
1940
+ }
1941
+ }
1942
+ void pull();
1943
+ const t = setInterval(pull, intervalMs);
1944
+ return () => {
1945
+ cancelled = true;
1946
+ clearInterval(t);
1947
+ };
1948
+ }, [endpoint, intervalMs]);
1949
+ return state;
1950
+ }
1907
1951
 
1908
1952
  // src/format/index.ts
1909
1953
  var REFERENCE_BTC_USD = 95e3;
@@ -1933,6 +1977,16 @@ function usdToSats(usd, btcUsd = REFERENCE_BTC_USD) {
1933
1977
  function priceBoth(sats, btcUsd = REFERENCE_BTC_USD) {
1934
1978
  return `${formatSats(sats)} sats \xB7 ${satsToUsd(sats, btcUsd)}`;
1935
1979
  }
1980
+ function asOf(iso) {
1981
+ if (!iso) return null;
1982
+ const t = new Date(iso);
1983
+ if (Number.isNaN(t.getTime())) return null;
1984
+ return `as of ${t.toLocaleTimeString(void 0, {
1985
+ hour: "2-digit",
1986
+ minute: "2-digit",
1987
+ hour12: false
1988
+ })}`;
1989
+ }
1936
1990
  function relativeTime(when) {
1937
1991
  const t = when instanceof Date ? when.getTime() : new Date(when).getTime();
1938
1992
  if (Number.isNaN(t)) return "";
@@ -3888,6 +3942,6 @@ function LayoutSubHeader({
3888
3942
  ] }) });
3889
3943
  }
3890
3944
 
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 };
3945
+ 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, OcAurora, 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
3946
  //# sourceMappingURL=index.mjs.map
3893
3947
  //# sourceMappingURL=index.mjs.map