@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.mjs CHANGED
@@ -69,6 +69,7 @@ __export(src_exports, {
69
69
  Input: () => Input,
70
70
  Label: () => Label,
71
71
  Modal: () => Modal,
72
+ OC_DEFAULT_ACCENT: () => OC_DEFAULT_ACCENT,
72
73
  OC_SKIN_COOKIE: () => OC_SKIN_COOKIE,
73
74
  OC_THEMES: () => OC_THEMES,
74
75
  OcAppearanceMenu: () => OcAppearanceMenu,
@@ -115,6 +116,7 @@ __export(src_exports, {
115
116
  Toaster: () => Toaster,
116
117
  Working: () => Working,
117
118
  WorkingPanel: () => WorkingPanel,
119
+ accentFor: () => accentFor,
118
120
  badgeVariants: () => badgeVariants,
119
121
  buttonVariants: () => buttonVariants,
120
122
  cn: () => cn,
@@ -142,24 +144,32 @@ var OC_THEMES = [
142
144
  {
143
145
  id: "orangecheck",
144
146
  label: "orangecheck",
145
- description: "the chain \u2014 Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono"
147
+ description: "the chain \u2014 Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono",
148
+ accent: "#f97316"
146
149
  },
147
150
  {
148
151
  id: "phosphor",
149
152
  label: "phosphor",
150
- description: "the node \u2014 CRT terminal green, hard 0.125rem, all-mono \xB7 sovereignty & verify"
153
+ description: "the node \u2014 CRT terminal green, hard 0.125rem, all-mono \xB7 sovereignty & verify",
154
+ accent: "#55d671"
151
155
  },
152
156
  {
153
157
  id: "lightning",
154
158
  label: "lightning",
155
- description: "the network \u2014 electric violet (L2), hardest 0rem edges, sans \xB7 instant"
159
+ description: "the network \u2014 electric violet (L2), hardest 0rem edges, sans \xB7 instant",
160
+ accent: "#c27dff"
156
161
  },
157
162
  {
158
163
  id: "gold",
159
164
  label: "gold",
160
- description: "sound money \u2014 digital gold, hard 0.125rem milled edge, mono ledger \xB7 21M"
165
+ description: "sound money \u2014 digital gold, hard 0.125rem milled edge, mono ledger \xB7 21M",
166
+ accent: "#e3b831"
161
167
  }
162
168
  ];
169
+ var OC_DEFAULT_ACCENT = "#f97316";
170
+ function accentFor(id) {
171
+ return OC_THEMES.find((t) => t.id === id)?.accent ?? OC_DEFAULT_ACCENT;
172
+ }
163
173
  var DEFAULT_OC_THEME = "orangecheck";
164
174
  function isKnownTheme(id) {
165
175
  return !!id && OC_THEMES.some((t) => t.id === id);
@@ -201,6 +211,15 @@ function applyAttr(skin) {
201
211
  if (typeof document === "undefined") return;
202
212
  document.documentElement.setAttribute(ATTR, skin);
203
213
  }
214
+ function applySkinChrome(skin) {
215
+ if (typeof window === "undefined") return;
216
+ if (typeof window.__ocApplySkinChrome === "function") {
217
+ window.__ocApplySkinChrome(skin);
218
+ return;
219
+ }
220
+ const meta = document.querySelector('meta[name="theme-color"]');
221
+ if (meta) meta.setAttribute("content", accentFor(skin));
222
+ }
204
223
  var OcSkinContext = createContext(null);
205
224
  function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
206
225
  const [skin, setSkinState] = useState(() => resolveTheme(defaultSkin));
@@ -210,6 +229,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
210
229
  hydratedRef.current = true;
211
230
  const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);
212
231
  applyAttr(fromCookie);
232
+ applySkinChrome(fromCookie);
213
233
  setSkinState(fromCookie);
214
234
  }, [defaultSkin]);
215
235
  useEffect(() => {
@@ -217,6 +237,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
217
237
  const fromCookie = resolveTheme(readSkinCookie() ?? skin);
218
238
  if (fromCookie !== skin) {
219
239
  applyAttr(fromCookie);
240
+ applySkinChrome(fromCookie);
220
241
  setSkinState(fromCookie);
221
242
  }
222
243
  }
@@ -230,6 +251,7 @@ function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }) {
230
251
  const setSkin = useCallback((id) => {
231
252
  const next = resolveTheme(id);
232
253
  applyAttr(next);
254
+ applySkinChrome(next);
233
255
  writeSkinCookie(next);
234
256
  setSkinState(next);
235
257
  }, []);
@@ -247,7 +269,8 @@ function useOcSkin() {
247
269
  return ctx;
248
270
  }
249
271
  function getOcThemeInitScript(defaultSkin = DEFAULT_OC_THEME) {
250
- 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}');}})();`;
272
+ const accents = Object.fromEntries(OC_THEMES.map((t) => [t.id, t.accent]));
273
+ 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);}})();`;
251
274
  }
252
275
  var COOKIE = "oc_theme";
253
276
  var ALLOWED = /* @__PURE__ */ new Set(["light", "dark", "system"]);
@@ -721,6 +744,9 @@ function Textarea({ className, ...props }) {
721
744
  className: cn(
722
745
  "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",
723
746
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
747
+ // aria-invalid parity with Input — error styling when a consumer
748
+ // marks the field invalid.
749
+ "aria-invalid:ring-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand",
724
750
  className
725
751
  ),
726
752
  ...props
@@ -1967,6 +1993,6 @@ __reExport(components_exports, ui_star);
1967
1993
  // src/index.ts
1968
1994
  __reExport(src_exports, components_exports);
1969
1995
 
1970
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithCountdown, Badge, Bar, BitcoinAddress, Button, Card, ConfirmHost, CopyButton, DEFAULT_OC_THEME, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcThemeBridge, OcThemePicker, OcThemeProvider, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, QrCode, REFERENCE_BTC_USD, SatsAmount, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Sparkline, StatBlock, StatusPill, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, badgeVariants, buttonVariants, cn, confirm, explorerUrl, formatSats, formatSatsCompact, getOcThemeInitScript, isKnownTheme, priceBoth, prompt, relativeTime, resolveTheme, satsToUsd, shortenAddress, usdToSats, useOcSkin };
1996
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithCountdown, Badge, Bar, BitcoinAddress, Button, Card, ConfirmHost, CopyButton, DEFAULT_OC_THEME, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, Input, Label, Modal, OC_DEFAULT_ACCENT, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcThemeBridge, OcThemePicker, OcThemeProvider, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, QrCode, REFERENCE_BTC_USD, SatsAmount, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Sparkline, StatBlock, StatusPill, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Working, WorkingPanel, accentFor, badgeVariants, buttonVariants, cn, confirm, explorerUrl, formatSats, formatSatsCompact, getOcThemeInitScript, isKnownTheme, priceBoth, prompt, relativeTime, resolveTheme, satsToUsd, shortenAddress, usdToSats, useOcSkin };
1971
1997
  //# sourceMappingURL=index.mjs.map
1972
1998
  //# sourceMappingURL=index.mjs.map