@orangecheck/design 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- export { DEFAULT_OC_THEME, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.mjs';
1
+ export { DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.mjs';
2
2
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusTone, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, prompt } from './primitives.mjs';
3
3
  export * from '@orangecheck/ui';
4
4
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats } from './format.mjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { DEFAULT_OC_THEME, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.js';
1
+ export { DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, resolveTheme, useOcSkin } from './tokens.js';
2
2
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusTone, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, prompt } from './primitives.js';
3
3
  export * from '@orangecheck/ui';
4
4
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats } from './format.js';
package/dist/index.js CHANGED
@@ -100,6 +100,7 @@ __export(src_exports, {
100
100
  Input: () => Input,
101
101
  Label: () => Label,
102
102
  Modal: () => Modal,
103
+ OC_DEFAULT_ACCENT: () => OC_DEFAULT_ACCENT,
103
104
  OC_SKIN_COOKIE: () => OC_SKIN_COOKIE,
104
105
  OC_THEMES: () => OC_THEMES,
105
106
  OcAppearanceMenu: () => OcAppearanceMenu,
@@ -146,6 +147,7 @@ __export(src_exports, {
146
147
  Toaster: () => Toaster,
147
148
  Working: () => Working,
148
149
  WorkingPanel: () => WorkingPanel,
150
+ accentFor: () => accentFor,
149
151
  badgeVariants: () => badgeVariants,
150
152
  buttonVariants: () => buttonVariants,
151
153
  cn: () => cn,
@@ -173,24 +175,32 @@ var OC_THEMES = [
173
175
  {
174
176
  id: "orangecheck",
175
177
  label: "orangecheck",
176
- description: "the chain \u2014 Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono"
178
+ description: "the chain \u2014 Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono",
179
+ accent: "#f97316"
177
180
  },
178
181
  {
179
182
  id: "phosphor",
180
183
  label: "phosphor",
181
- description: "the node \u2014 CRT terminal green, hard 0.125rem, all-mono \xB7 sovereignty & verify"
184
+ description: "the node \u2014 CRT terminal green, hard 0.125rem, all-mono \xB7 sovereignty & verify",
185
+ accent: "#55d671"
182
186
  },
183
187
  {
184
188
  id: "lightning",
185
189
  label: "lightning",
186
- description: "the network \u2014 electric violet (L2), hardest 0rem edges, sans \xB7 instant"
190
+ description: "the network \u2014 electric violet (L2), hardest 0rem edges, sans \xB7 instant",
191
+ accent: "#c27dff"
187
192
  },
188
193
  {
189
194
  id: "gold",
190
195
  label: "gold",
191
- description: "sound money \u2014 digital gold, hard 0.125rem milled edge, mono ledger \xB7 21M"
196
+ description: "sound money \u2014 digital gold, hard 0.125rem milled edge, mono ledger \xB7 21M",
197
+ accent: "#e3b831"
192
198
  }
193
199
  ];
200
+ var OC_DEFAULT_ACCENT = "#f97316";
201
+ function accentFor(id) {
202
+ return OC_THEMES.find((t) => t.id === id)?.accent ?? OC_DEFAULT_ACCENT;
203
+ }
194
204
  var DEFAULT_OC_THEME = "orangecheck";
195
205
  function isKnownTheme(id) {
196
206
  return !!id && OC_THEMES.some((t) => t.id === id);
@@ -232,6 +242,15 @@ function applyAttr(skin) {
232
242
  if (typeof document === "undefined") return;
233
243
  document.documentElement.setAttribute(ATTR, skin);
234
244
  }
245
+ function applySkinChrome(skin) {
246
+ if (typeof window === "undefined") return;
247
+ if (typeof window.__ocApplySkinChrome === "function") {
248
+ window.__ocApplySkinChrome(skin);
249
+ return;
250
+ }
251
+ const meta = document.querySelector('meta[name="theme-color"]');
252
+ if (meta) meta.setAttribute("content", accentFor(skin));
253
+ }
235
254
  var OcSkinContext = React2.createContext(null);
236
255
  function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
237
256
  const [skin, setSkinState] = React2.useState(() => resolveTheme(defaultSkin));
@@ -241,6 +260,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
241
260
  hydratedRef.current = true;
242
261
  const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);
243
262
  applyAttr(fromCookie);
263
+ applySkinChrome(fromCookie);
244
264
  setSkinState(fromCookie);
245
265
  }, [defaultSkin]);
246
266
  React2.useEffect(() => {
@@ -248,6 +268,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
248
268
  const fromCookie = resolveTheme(readSkinCookie() ?? skin);
249
269
  if (fromCookie !== skin) {
250
270
  applyAttr(fromCookie);
271
+ applySkinChrome(fromCookie);
251
272
  setSkinState(fromCookie);
252
273
  }
253
274
  }
@@ -261,6 +282,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
261
282
  const setSkin = React2.useCallback((id) => {
262
283
  const next = resolveTheme(id);
263
284
  applyAttr(next);
285
+ applySkinChrome(next);
264
286
  writeSkinCookie(next);
265
287
  setSkinState(next);
266
288
  }, []);
@@ -278,7 +300,8 @@ function useOcSkin() {
278
300
  return ctx;
279
301
  }
280
302
  function getOcThemeInitScript(defaultSkin = DEFAULT_OC_THEME) {
281
- return `(function(){try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):'${defaultSkin}';if(!s){s='${defaultSkin}';}document.documentElement.setAttribute('${ATTR}',s);}catch(e){document.documentElement.setAttribute('${ATTR}','${defaultSkin}');}})();`;
303
+ const accents = Object.fromEntries(OC_THEMES.map((t) => [t.id, t.accent]));
304
+ return `(function(){var ACC=${JSON.stringify(accents)},DEF=${JSON.stringify(defaultSkin)},ORIG=${JSON.stringify(OC_DEFAULT_ACCENT)},fav=null;function acc(s){return ACC[s]||ACC[DEF]||ORIG;}window.__ocApplySkinChrome=function(s){try{var a=acc(s);var meta=document.querySelector('meta[name="theme-color"]');if(meta){meta.setAttribute('content',a);}var link=document.querySelector('link[rel~="icon"][type="image/svg+xml"]');if(!link){return;}var paint=function(svg){link.setAttribute('href','data:image/svg+xml,'+encodeURIComponent(svg.split(ORIG).join(a)));};if(fav!=null){paint(fav);return;}var h=link.getAttribute('href');if(!h||h.indexOf('data:')===0){return;}fetch(h).then(function(r){return r.text();}).then(function(svg){fav=svg;paint(svg);}).catch(function(){});}catch(e){}};try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):DEF;if(!s){s=DEF;}document.documentElement.setAttribute('${ATTR}',s);window.__ocApplySkinChrome(s);}catch(e){document.documentElement.setAttribute('${ATTR}',DEF);}})();`;
282
305
  }
283
306
  var COOKIE = "oc_theme";
284
307
  var ALLOWED = /* @__PURE__ */ new Set(["light", "dark", "system"]);
@@ -752,6 +775,9 @@ function Textarea({ className, ...props }) {
752
775
  className: cn(
753
776
  "placeholder:text-muted-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 w-full min-w-0 rounded-md border px-3 py-2 font-mono text-xs leading-relaxed shadow-xs transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
754
777
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
778
+ // aria-invalid parity with Input — error styling when a consumer
779
+ // marks the field invalid.
780
+ "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
755
781
  className
756
782
  ),
757
783
  ...props
@@ -2029,6 +2055,7 @@ exports.ErrorBoundary = ErrorBoundary;
2029
2055
  exports.Input = Input;
2030
2056
  exports.Label = Label;
2031
2057
  exports.Modal = Modal;
2058
+ exports.OC_DEFAULT_ACCENT = OC_DEFAULT_ACCENT;
2032
2059
  exports.OC_SKIN_COOKIE = OC_SKIN_COOKIE;
2033
2060
  exports.OC_THEMES = OC_THEMES;
2034
2061
  exports.OcAppearanceMenu = OcAppearanceMenu;
@@ -2075,6 +2102,7 @@ exports.ThemeToggleLink = ThemeToggleLink;
2075
2102
  exports.Toaster = Toaster;
2076
2103
  exports.Working = Working;
2077
2104
  exports.WorkingPanel = WorkingPanel;
2105
+ exports.accentFor = accentFor;
2078
2106
  exports.badgeVariants = badgeVariants;
2079
2107
  exports.buttonVariants = buttonVariants;
2080
2108
  exports.cn = cn;