stoop 0.6.0 → 0.6.2

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.
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Internal implementation for creating Stoop instances.
3
+ * SERVER-SAFE: No "use client" dependencies, no React imports.
4
+ * This file is used by both client (create-stoop.ts) and server (create-stoop-ssr.ts) entry points.
5
+ */
6
+ import { createTheme as createThemeFactory, createCSSFunction, createKeyframesFunction, createGlobalCSSFunction, } from "./api/core-api";
7
+ import { DEFAULT_THEME_MAP } from "./constants";
8
+ import { compileCSS, cssObjectToString } from "./core/compiler";
9
+ import { mergeWithDefaultTheme, registerDefaultTheme, injectAllThemes } from "./core/theme-manager";
10
+ import { getCssText as getCssTextBase, removeThemeVariableBlocks } from "./inject";
11
+ import { validateTheme, applyUtilities } from "./utils/helpers";
12
+ import { generateAllThemeVariables, generateCSSVariables, replaceThemeTokensWithVars } from "./utils/theme";
13
+ import { sanitizePrefix } from "./utils/theme-utils";
14
+ /**
15
+ * Shared implementation for creating Stoop instances.
16
+ * Handles common setup logic for both client and server instances.
17
+ */
18
+ export function createStoopBase(config) {
19
+ const { globalCss: globalCssConfig, media: configMedia, prefix = "stoop", theme, themeMap: userThemeMap, utils, } = config;
20
+ const sanitizedPrefix = sanitizePrefix(prefix);
21
+ const validatedTheme = validateTheme(theme);
22
+ const media = validatedTheme.media || configMedia;
23
+ const mergedThemeMap = {
24
+ ...DEFAULT_THEME_MAP,
25
+ ...userThemeMap,
26
+ };
27
+ registerDefaultTheme(validatedTheme, sanitizedPrefix);
28
+ const css = createCSSFunction(validatedTheme, sanitizedPrefix, media, utils, mergedThemeMap);
29
+ const createTheme = createThemeFactory(validatedTheme);
30
+ const globalCss = createGlobalCSSFunction(validatedTheme, sanitizedPrefix, media, utils, mergedThemeMap);
31
+ const keyframes = createKeyframesFunction(sanitizedPrefix, validatedTheme, mergedThemeMap);
32
+ const themeObject = Object.freeze({ ...validatedTheme });
33
+ /**
34
+ * Pre-compiles CSS objects to warm the cache.
35
+ * Useful for eliminating FOUC by pre-compiling common styles.
36
+ *
37
+ * @param styles - Array of CSS objects to pre-compile
38
+ */
39
+ function warmCache(styles) {
40
+ for (const style of styles) {
41
+ try {
42
+ compileCSS(style, validatedTheme, sanitizedPrefix, media, utils, mergedThemeMap);
43
+ }
44
+ catch {
45
+ // Skip invalid styles
46
+ }
47
+ }
48
+ }
49
+ /**
50
+ * Preloads themes by injecting CSS variables before React renders.
51
+ * Useful for preventing FOUC when loading a non-default theme from localStorage.
52
+ */
53
+ function preloadTheme() {
54
+ if (!config.themes || Object.keys(config.themes).length === 0) {
55
+ return;
56
+ }
57
+ injectAllThemes(config.themes, sanitizedPrefix);
58
+ }
59
+ /**
60
+ * Gets all injected CSS text for server-side rendering.
61
+ * Includes all theme CSS variables using attribute selectors.
62
+ * Includes global CSS config for SSR (prevents FOUC in Pages Router).
63
+ *
64
+ * @returns CSS text string with theme variables, global CSS, and component styles
65
+ */
66
+ function getCssText() {
67
+ let result = "";
68
+ if (config.themes && Object.keys(config.themes).length > 0) {
69
+ const mergedThemes = {};
70
+ for (const [themeName, theme] of Object.entries(config.themes)) {
71
+ mergedThemes[themeName] = mergeWithDefaultTheme(theme, sanitizedPrefix);
72
+ }
73
+ const allThemeVars = generateAllThemeVariables(mergedThemes, sanitizedPrefix, "data-theme");
74
+ if (allThemeVars) {
75
+ result += allThemeVars + "\n";
76
+ }
77
+ }
78
+ else {
79
+ const themeVars = generateCSSVariables(validatedTheme, sanitizedPrefix);
80
+ if (themeVars) {
81
+ result += themeVars + "\n";
82
+ }
83
+ }
84
+ // Include global CSS from config for SSR
85
+ // This ensures global styles are present in initial HTML (prevents FOUC)
86
+ // Provider will call globalCss() on mount but it's deduplicated automatically
87
+ if (globalCssConfig) {
88
+ const stylesWithUtils = applyUtilities(globalCssConfig, utils);
89
+ const themedStyles = replaceThemeTokensWithVars(stylesWithUtils, validatedTheme, mergedThemeMap);
90
+ const globalCssText = cssObjectToString(themedStyles, "", 0, media);
91
+ if (globalCssText) {
92
+ result += (result ? "\n" : "") + globalCssText;
93
+ }
94
+ }
95
+ const baseCss = getCssTextBase();
96
+ const cleanedCss = removeThemeVariableBlocks(baseCss).trim();
97
+ if (cleanedCss) {
98
+ result += (result ? "\n" : "") + cleanedCss;
99
+ }
100
+ return result;
101
+ }
102
+ return {
103
+ config: { ...config, prefix: sanitizedPrefix },
104
+ createTheme,
105
+ css,
106
+ getCssText,
107
+ globalCss,
108
+ globalCssConfig,
109
+ keyframes,
110
+ media,
111
+ mergedThemeMap,
112
+ preloadTheme,
113
+ sanitizedPrefix,
114
+ theme: themeObject,
115
+ utils,
116
+ validatedTheme,
117
+ warmCache,
118
+ };
119
+ }
@@ -2,6 +2,8 @@
2
2
  * SSR-safe entry point for Stoop.
3
3
  * Exports only server-safe APIs that don't require React.
4
4
  * Use this import in Server Components: import { createStoop } from "stoop/ssr"
5
+ *
6
+ * SERVER-ONLY: No "use client" modules imported. Safe for React Server Components.
5
7
  */
6
8
  import type { StoopConfig, StoopServerInstance } from "./types";
7
9
  export type { CSS, Theme, StoopConfig, StoopServerInstance, UtilityFunction, ThemeScale, DefaultTheme, } from "./types";
@@ -1,16 +1,22 @@
1
- var Q0=Object.freeze({}),C=1e4,FJ=5000,HJ=10,UJ=500,x=1000;var l=["colors","opacities","space","radii","sizes","fonts","fontWeights","fontSizes","lineHeights","letterSpacings","shadows","zIndices","transitions"],T={accentColor:"colors",animation:"transitions",animationDelay:"transitions",animationDuration:"transitions",animationTimingFunction:"transitions",backdropFilter:"shadows",background:"colors",backgroundColor:"colors",blockSize:"sizes",border:"colors",borderBlockColor:"colors",borderBlockEndColor:"colors",borderBlockStartColor:"colors",borderBottomColor:"colors",borderBottomLeftRadius:"radii",borderBottomRightRadius:"radii",borderColor:"colors",borderEndEndRadius:"radii",borderEndStartRadius:"radii",borderInlineColor:"colors",borderInlineEndColor:"colors",borderInlineStartColor:"colors",borderLeftColor:"colors",borderRadius:"radii",borderRightColor:"colors",borderStartEndRadius:"radii",borderStartStartRadius:"radii",borderTopColor:"colors",borderTopLeftRadius:"radii",borderTopRightRadius:"radii",bottom:"space",boxShadow:"shadows",caretColor:"colors",color:"colors",columnGap:"space",columnRuleColor:"colors",fill:"colors",filter:"shadows",flexBasis:"sizes",floodColor:"colors",font:"fontSizes",fontFamily:"fonts",fontSize:"fontSizes",fontWeight:"fontWeights",gap:"space",gridColumnGap:"space",gridGap:"space",gridRowGap:"space",height:"sizes",inlineSize:"sizes",inset:"space",insetBlock:"space",insetBlockEnd:"space",insetBlockStart:"space",insetInline:"space",insetInlineEnd:"space",insetInlineStart:"space",left:"space",letterSpacing:"letterSpacings",lightingColor:"colors",lineHeight:"lineHeights",margin:"space",marginBlock:"space",marginBlockEnd:"space",marginBlockStart:"space",marginBottom:"space",marginInline:"space",marginInlineEnd:"space",marginInlineStart:"space",marginLeft:"space",marginRight:"space",marginTop:"space",maxBlockSize:"sizes",maxHeight:"sizes",maxInlineSize:"sizes",maxWidth:"sizes",minBlockSize:"sizes",minHeight:"sizes",minInlineSize:"sizes",minWidth:"sizes",opacity:"opacities",outline:"colors",outlineColor:"colors",padding:"space",paddingBlock:"space",paddingBlockEnd:"space",paddingBlockStart:"space",paddingBottom:"space",paddingInline:"space",paddingInlineEnd:"space",paddingInlineStart:"space",paddingLeft:"space",paddingRight:"space",paddingTop:"space",right:"space",rowGap:"space",size:"sizes",stopColor:"colors",stroke:"colors",textDecorationColor:"colors",textEmphasisColor:"colors",textShadow:"shadows",top:"space",transition:"transitions",transitionDelay:"transitions",transitionDuration:"transitions",transitionProperty:"transitions",transitionTimingFunction:"transitions",width:"sizes",zIndex:"zIndices"},BJ=Symbol.for("stoop.component");class R extends Map{maxSize;constructor(J){super();this.maxSize=J}get(J){let $=super.get(J);if($!==void 0)super.delete(J),super.set(J,$);return $}set(J,$){if(super.has(J))super.delete(J);else if(this.size>=this.maxSize){let q=this.keys().next().value;if(q!==void 0)super.delete(q)}return super.set(J,$),this}}var LJ=new R(FJ),r=new R(C);function P(){return typeof window!=="undefined"&&typeof document!=="undefined"&&typeof window.document==="object"&&typeof document.createElement==="function"}function k(){return typeof process!=="undefined"&&process.env?.NODE_ENV==="production"}function S(J){return typeof J==="object"&&J!==null}function s(J){return typeof J==="object"&&J!==null&&"__isStoopStyled"in J&&"__stoopClassName"in J&&J.__isStoopStyled===!0}function d(J){return S(J)&&!s(J)}function a(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function u(J){if(!J||typeof J!=="object"||Array.isArray(J))throw new Error("[Stoop] Theme must be a non-null object");if(k())return J;let $=J,q=[];for(let Y in $){if(Y==="media")continue;if(!l.includes(Y))q.push(Y)}if(q.length>0){let Y=`[Stoop] Theme contains invalid scales: ${q.join(", ")}. Only these scales are allowed: ${l.join(", ")}`;throw new Error(Y)}return J}function v(J,$){if(!$||!J||typeof J!=="object")return J;let q=Object.keys($),Y=!1;for(let w in J)if(q.includes(w)){Y=!0;break}if(!Y)return J;let G={};for(let w in J){let Q=J[w];if(q.includes(w)&&$[w])try{let W=$[w](Q);if(W&&typeof W==="object")for(let X in W)G[X]=W[X]}catch{G[w]=Q}else if(S(Q))G[w]=v(Q,$);else G[w]=Q}return G}var t=null,_J=new R(x),B0=new R(x),AJ=new R(x);function f(J){if(J.length===0)return"0";let $=2166136261,q=16777619,Y=$;for(let G=0;G<J.length;G++)Y^=J.charCodeAt(G),Y=Math.imul(Y,q);return Y^=J.length,(Y>>>0).toString(36)}function e(J){try{return f(JSON.stringify(J))}catch{return f(String(J))}}function OJ(J,$=!1){let Y=String(J).replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/'/g,"\\'").replace(/;/g,"\\;").replace(/\n/g,"\\A ").replace(/\r/g,"").replace(/\f/g,"\\C ");if($)Y=Y.replace(/\{/g,"\\7B ").replace(/\}/g,"\\7D ");return Y}function JJ(J){return OJ(J,!1)}function V(J){let $=_J.get(J);if($!==void 0)return $;let q=J.replace(/[^a-zA-Z0-9\s\-_>+~:.#[\]&@(),]/g,""),Y=!q.trim()||/^[>+~:.#[\]&@()\s]+$/.test(q)?"":q;return _J.set(J,Y),Y}function E(J){let $=AJ.get(J);if($!==void 0)return $;let G=J.replace(/[^a-zA-Z0-9-_]/g,"-").replace(/^[\d-]+/,"").replace(/^-+/,"")||"invalid";return AJ.set(J,G),G}function KJ(J){return OJ(J,!0)}function O(J){if(!J)return"stoop";return J.replace(/[^a-zA-Z0-9-_]/g,"").replace(/^[\d-]+/,"").replace(/^-+/,"")||"stoop"}function RJ(J){if(!J||typeof J!=="string")return"";let $=J.replace(/[^a-zA-Z0-9\s():,<>=\-@]/g,"");if(!$.trim()||!/[a-zA-Z]/.test($))return"";return $}function IJ(J){if(!J||typeof J!=="string")return!1;if(J==="from"||J==="to")return!0;if(/^\d+(\.\d+)?%$/.test(J)){let q=parseFloat(J);return q>=0&&q<=100}return!1}function MJ(J=""){if(!t){let q=":root".replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=new RegExp(`${q}\\s*\\{[\\s\\S]*\\}`)}return t}function oJ(J){if(J.includes("Color")||J==="fill"||J==="stroke"||J==="accentColor"||J==="caretColor"||J==="border"||J==="outline"||J.includes("background")&&!J.includes("Size")&&!J.includes("Image"))return"colors";if(/^(margin|padding|gap|inset|top|right|bottom|left|rowGap|columnGap|gridGap|gridRowGap|gridColumnGap)/.test(J)||J.includes("Block")||J.includes("Inline"))return"space";if(/(width|height|size|basis)$/i.test(J)||J.includes("BlockSize")||J.includes("InlineSize"))return"sizes";if(J==="fontSize"||J==="font"&&!J.includes("Family"))return"fontSizes";if(J==="fontFamily"||J.includes("FontFamily"))return"fonts";if(J==="fontWeight"||J.includes("FontWeight"))return"fontWeights";if(J==="letterSpacing"||J.includes("LetterSpacing"))return"letterSpacings";if(J.includes("Radius")||J.includes("radius"))return"radii";if(J.includes("Shadow")||J.includes("shadow")||J==="filter"||J==="backdropFilter")return"shadows";if(J==="zIndex"||J.includes("ZIndex")||J.includes("z-index"))return"zIndices";if(J==="opacity"||J.includes("Opacity"))return"opacities";if(J.startsWith("transition")||J.startsWith("animation")||J.includes("Transition")||J.includes("Animation"))return"transitions";return}function EJ(J,$){if($&&J in $)return $[J];if(J in T)return T[J];return oJ(J)}var qJ=new Map;function h(J){return qJ.has(J)}function n(J,$){qJ.set(J,$)}var $J=new R(C);function gJ(J){if(!$J.has(J))$J.set(J,!0)}function PJ(){return Array.from($J.keys()).join(`
2
- `)}var y=new Map;var VJ=new Map;function xJ(J="stoop"){if(!P())throw new Error("Cannot access document in SSR context");let $=O(J),q=y.get($);if(!q||!q.parentNode){let Y=document.getElementById("stoop-ssr");if(Y){let G=Y.getAttribute("data-stoop");if(!G||G===$)return q=Y,q.setAttribute("data-stoop",$),y.set($,q),q}q=document.createElement("style"),q.setAttribute("data-stoop",$),q.setAttribute("id",`stoop-${$}`),document.head.appendChild(q),y.set($,q)}return q}function YJ(J){let $=J,q=MJ("");$=$.replace(q,"").trim();let Y=$.indexOf("[data-theme=");while(Y!==-1){let G=$.indexOf("{",Y);if(G===-1)break;let w=1,Q=G+1;while(Q<$.length&&w>0){if($[Q]==="{")w++;else if($[Q]==="}")w--;Q++}if(w===0){let W=$.substring(0,Y).trim(),X=$.substring(Q).trim();$=(W+`
3
- `+X).trim()}else break;Y=$.indexOf("[data-theme=")}return $.trim()}function zJ(J,$="stoop"){if(!J)return;let q=O($),Y=`__all_theme_vars_${q}`;if((VJ.get(Y)??null)===J)return;if(VJ.set(Y,J),!P()){gJ(J);return}let w=xJ(q),Q=w.textContent||"",W=Q.includes(":root")||Q.includes("[data-theme=");if(h(Y)||W){let X=YJ(Q);w.textContent=J+(X?`
4
-
5
- `+X:""),n(Y,J)}else w.textContent=J+(Q?`
6
-
7
- `+Q:""),n(Y,J)}function pJ(J,$,q="stoop"){if(!P())return;let Y=O(q);if(h($))return;let G=xJ(Y),w=G.textContent||"";G.textContent=w+(w?`
8
- `:"")+J,n($,J)}function iJ(J,$,q="stoop"){if(h($))return;let Y=O(q);pJ(J,$,Y)}function lJ(J="stoop"){let $=O(J);return y.get($)||null}function rJ(){return new Map(qJ)}function z(J,$="stoop",q){let Y=q||J;if(!P()){if(!h(Y))n(Y,J);gJ(J);return}iJ(J,Y,$)}function jJ(J="stoop"){if(P()){let $=O(J),q=lJ($);if(q&&q.parentNode){let Y=q.textContent||"";if(!Y&&rJ().size>0)return PJ();return Y}}return PJ()}var sJ=/(-?\$[a-zA-Z][a-zA-Z0-9]*(?:\$[a-zA-Z][a-zA-Z0-9]*)?(?:\.[a-zA-Z][a-zA-Z0-9]*)?)/g,NJ=new WeakMap;function GJ(J){let $=NJ.get(J);if($)return $;let q=new Map;function Y(G,w=[]){let Q=Object.keys(G);for(let W of Q){let X=G[W],Z=[...w,W];if(a(X))Y(X,Z);else{let D=q.get(W);if(D)D.push(Z);else q.set(W,[Z])}}}Y(J);for(let[,G]of q.entries())if(G.length>1)G.sort((w,Q)=>{let W=w.length-Q.length;if(W!==0)return W;let X=w.join("."),Z=Q.join(".");return X.localeCompare(Z)});return NJ.set(J,q),q}function aJ(J,$){let q=Object.keys(J).filter((G)=>G!=="media"),Y=Object.keys($).filter((G)=>G!=="media");if(q.length!==Y.length)return!1;for(let G of q)if(!(G in $))return!1;return!0}function TJ(J,$){if(J===$)return!0;if(!J||!$)return!1;if(!aJ(J,$))return!1;let q={...J},Y={...$};return delete q.media,delete Y.media,JSON.stringify(q)===JSON.stringify(Y)}function tJ(J,$,q){if(q&&q in J){let w=J[q];if(w&&typeof w==="object"&&!Array.isArray(w)&&$ in w)return[q,$]}let G=GJ(J).get($);if(!G||G.length===0)return null;return G[0]}function c(J,$,q,Y){if(!J.startsWith("$"))return J;let G=J.slice(1);if(G.includes("$")||G.includes("."))return`var(${`--${(G.includes("$")?G.split("$"):G.split(".")).map((D)=>E(D)).join("-")}`})`;if($&&q){let W=EJ(q,Y);if(W){let D=tJ($,G,W);if(D)return`var(${`--${D.map((U)=>E(U)).join("-")}`})`}let Z=GJ($).get(G);if(Z&&Z.length>1){if(!k()){let D=W?`Property "${q}" maps to "${W}" scale, but token not found there. `:`No scale mapping found for property "${q}". `;console.warn(`[Stoop] Ambiguous token "$${G}" found in multiple categories: ${Z.map((H)=>H.join(".")).join(", ")}. ${D}Using "${Z[0].join(".")}" (deterministic: shorter paths first, then alphabetical). Use full path "$${Z[0].join(".")}" to be explicit.`)}}if(Z&&Z.length>0){let[D]=Z;return`var(${`--${D.map((U)=>E(U)).join("-")}`})`}}else if($){let X=GJ($).get(G);if(X&&X.length>1){if(!k())console.warn(`[Stoop] Ambiguous token "$${G}" found in multiple categories: ${X.map((Z)=>Z.join(".")).join(", ")}. Using "${X[0].join(".")}" (deterministic: shorter paths first, then alphabetical). Use full path "$${X[0].join(".")}" to be explicit, or use with a CSS property for automatic resolution.`)}if(X&&X.length>0){let[Z]=X;return`var(${`--${Z.map((F)=>E(F)).join("-")}`})`}}return`var(${`--${E(G)}`})`}function XJ(J,$="stoop",q){let Y=q||":root",G=[];function w(Q,W=[]){let X=Object.keys(Q).sort();for(let Z of X){if(Z==="media")continue;let D=Q[Z],H=[...W,Z];if(a(D))w(D,H);else{let U=`--${H.map((B)=>E(B)).join("-")}`,_=typeof D==="string"||typeof D==="number"?KJ(D):String(D);G.push(` ${U}: ${_};`)}}}if(w(J),G.length===0)return"";return`${Y} {
9
- ${G.join(`
10
- `)}
11
- }`}function m(J,$="stoop",q="data-theme"){let Y=[];for(let[G,w]of Object.entries(J)){let Q=`[${q}="${G}"]`,W=XJ(w,$,Q);if(W)Y.push(W)}return Y.join(`
12
-
13
- `)}function j(J,$,q,Y){if(!J||typeof J!=="object")return J;let G=Object.keys(J),w=!1;for(let X of G){let Z=J[X];if(typeof Z==="string"&&Z.includes("$")){w=!0;break}}if(!w&&!$)return J;let Q={},W=!1;for(let X of G){let Z=J[X];if(S(Z)){let D=j(Z,$,q,void 0);if(Q[X]=D,D!==Z)W=!0}else if(typeof Z==="string"&&Z.includes("$")){W=!0;let D=Y||X;if(Z.startsWith("$")&&!Z.includes(" ")&&!Z.includes("calc(")&&Z===Z.trim())if(Z.startsWith("-$")){let F=Z.slice(1);if(F.includes(".")||F.includes("$")){let U=F.includes("$")?F.split("$"):F.split("."),_=!1;for(let B=0;B<U.length;B++){let A=U[B];for(let K=0;K<A.length;K++){let L=A.charCodeAt(K);if(!(L>=48&&L<=57||L>=65&&L<=90||L>=97&&L<=122||L===45||L===95)){_=!0;break}}if(_)break}if(_){let A=`--${U.map((K)=>E(K)).join("-")}`;Q[X]=`calc(-1 * var(${A}))`}else{let B=`--${U.join("-")}`;Q[X]=`calc(-1 * var(${B}))`}}else{let U=c(F,$,D,q);Q[X]=`calc(-1 * ${U})`}}else{let F=Z.slice(1);if(F.includes(".")||F.includes("$")){let U=F.includes("$")?F.split("$"):F.split("."),_=!1;for(let B=0;B<U.length;B++){let A=U[B];for(let K=0;K<A.length;K++){let L=A.charCodeAt(K);if(!(L>=48&&L<=57||L>=65&&L<=90||L>=97&&L<=122||L===45||L===95)){_=!0;break}}if(_)break}if(_){let A=`--${U.map((K)=>E(K)).join("-")}`;Q[X]=`var(${A})`}else{let B=`--${U.join("-")}`;Q[X]=`var(${B})`}}else Q[X]=c(Z,$,D,q)}else Q[X]=Z.replace(sJ,(F)=>{if(F.startsWith("-$")){let U=F.slice(1);return`calc(-1 * ${c(U,$,D,q)})`}return c(F,$,D,q)})}else Q[X]=Z}if(!W)return J;return Q}var M=new R(x);function eJ(J){return J.replace(/([A-Z])/g,"-$1").toLowerCase()}function J0(J){if(J===J.toUpperCase()&&J.length>1)return J.charAt(0)+J.slice(1).toLowerCase();return J}function o(J){if(!J)return"";return J.charAt(0).toLowerCase()+J.slice(1).replace(/([A-Z])/g,"-$1").toLowerCase()}function b(J){if(!J||typeof J!=="string")return"";let $=M.get(J);if($!==void 0)return $;if(/^-[a-z]+-/.test(J))return M.set(J,J),J;let q=J0(J);if(/^[Mm]oz/i.test(q)){if(q.length===3||q.toLowerCase()==="moz")return M.set(J,"-moz"),"-moz";let Q=q.match(/^[Mm]oz(.+)$/i);if(Q&&Q[1]){let[,W]=Q,X=o(W);if(X){let Z=`-moz-${X}`;return M.set(J,Z),Z}}}if(/^[Ww]ebkit/i.test(q)){if(q.length===6||q.toLowerCase()==="webkit")return M.set(J,"-webkit"),"-webkit";let Q=q.match(/^[Ww]ebkit(.+)$/i);if(Q&&Q[1]){let[,W]=Q,X=o(W);if(X){let Z=`-webkit-${X}`;return M.set(J,Z),Z}}}if(/^[Mm]s/i.test(q)){if(q.length===2||q.toLowerCase()==="ms")return M.set(J,"-ms"),"-ms";let Q=q.match(/^[Mm]s(.+)$/i);if(Q&&Q[1]){let[,W]=Q,X=o(W);if(X){let Z=`-ms-${X}`;return M.set(J,Z),Z}}}if(/^O/i.test(q)){if(q.length===1||q.toLowerCase()==="o")return M.set(J,"-o"),"-o";if(/^O[A-Z]/.test(q)){let Q=q.substring(1),W=o(Q);if(W){let X=`-o-${W}`;return M.set(J,X),X}}}let w=eJ(q).replace(/[^a-zA-Z0-9-]/g,"").replace(/^-+|-+$/g,"").replace(/^\d+/,"")||"";return M.set(J,w),w}var $0=new Set(["width","height","min-width","min-height","max-width","max-height","top","right","bottom","left","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","border-width","border-top-width","border-right-width","border-bottom-width","border-left-width","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","font-size","letter-spacing","word-spacing","text-indent","flex-basis","gap","row-gap","column-gap","grid-template-rows","grid-template-columns","grid-auto-rows","grid-auto-columns","perspective","outline-width","outline-offset","clip","vertical-align","object-position","background-position","background-size","mask-position","mask-size","scroll-margin","scroll-padding","shape-margin"]);function vJ(J){return $0.has(J)}function fJ(J,$){if(typeof $==="string"){if(vJ(J)&&/^-?\d+\.?\d*$/.test($.trim()))return`${$}px`;return $}if(typeof $==="number"&&vJ(J))return`${$}px`;return String($)}function bJ(J,$){if(typeof J==="symbol"&&J===BJ)return!0;if(s($))return!0;if(typeof J==="string"&&J.startsWith("__STOOP_COMPONENT_"))return!0;return!1}function q0(J,$){if(typeof $==="object"&&$!==null&&"__stoopClassName"in $&&typeof $.__stoopClassName==="string")return $.__stoopClassName;if(typeof J==="string"&&J.startsWith("__STOOP_COMPONENT_"))return J.replace("__STOOP_COMPONENT_","");return""}function I(J,$="",q=0,Y){if(!J||typeof J!=="object")return"";if(q>HJ)return"";let G=[],w=[],Q=$===""?Object.keys(J).sort():Object.keys(J);for(let X of Q){let Z=J[X];if(bJ(X,Z)){let D=q0(X,Z);if(!D)continue;let H=V(D);if(!H)continue;let F=$?`${$} .${H}`:`.${H}`,U=d(Z)?I(Z,F,q+1,Y):"";if(U)w.push(U);continue}if(d(Z))if(Y&&X in Y){let D=RJ(Y[X]);if(D){let H=I(Z,$,q+1,Y);if(H)w.push(`${D} { ${H} }`)}}else if(X.startsWith("@")){let D=V(X);if(D){let H=I(Z,$,q+1,Y);if(H)w.push(`${D} { ${H} }`)}}else if(X.includes("&")){let D=V(X);if(D){let H=D.split("&");if($.includes(",")){let _=$.split(",").map((A)=>A.trim()).map((A)=>H.join(A)).join(", "),B=I(Z,_,q+1,Y);if(B)w.push(B)}else{let F=H.join($),U=I(Z,F,q+1,Y);if(U)w.push(U)}}}else if(X.startsWith(":")){let D=V(X);if(D){let H=`${$}${D}`,F=I(Z,H,q+1,Y);if(F)w.push(F)}}else if(X.includes(",")){let H=X.split(",").map((F)=>F.trim()).map((F)=>V(F)).filter((F)=>F);if(H.length>0){let F=H.join(", "),U=I(Z,F,q+1,Y);if(U)w.push(U)}}else if(X.includes(" ")||X.includes(">")||X.includes("+")||X.includes("~")){let D=V(X);if(D){let F=/^[\s>+~]/.test(D.trim())?`${$}${D}`:`${$} ${D}`,U=I(Z,F,q+1,Y);if(U)w.push(U)}}else{let D=V(X);if(D){let H=$?`${$} ${D}`:D,F=I(Z,H,q+1,Y);if(F)w.push(F)}}else if(Z!==void 0){let D=b(X);if(D&&(typeof Z==="string"||typeof Z==="number")){let H=fJ(D,Z);if(D==="content"&&H==="")G.push(`${D}: "";`);else{let F=JJ(H);G.push(`${D}: ${F};`)}}}}let W=[];if(G.length>0)W.push(`${$} { ${G.join(" ")} }`);return W.push(...w),W.join("")}function Y0(J,$){if(!J||typeof J!=="object")return"";let q=[],Y=Object.keys(J).sort();for(let G of Y){let w=J[G];if(d(w))return"";if($&&G in $)return"";if(G.startsWith("@")||G.includes("&")||G.startsWith(":")||G.includes(" ")||G.includes(">")||G.includes("+")||G.includes("~"))return"";if(w!==void 0&&!bJ(G,w)){let Q=b(G);if(Q&&(typeof w==="string"||typeof w==="number")){let W=fJ(Q,w);if(Q==="content"&&W==="")q.push(`${Q}: "";`);else{let X=JJ(W);q.push(`${Q}: ${X};`)}}}}return q.join(" ")}function p(J,$,q="stoop",Y,G,w){let Q=O(q),W=v(J,G),X=j(W,$,w),Z=Y0(X,Y),D,H;if(Z)D=Z,H=f(D);else D=I(X,"",0,Y),H=f(D);let F=Q?`${Q}-${H}`:`css-${H}`,U=`${Q}:${F}`,_=r.get(U);if(_)return z(_,Q,U),F;let B;if(Z)B=`.${F} { ${Z} }`;else B=I(X,`.${F}`,0,Y);return r.set(U,B),LJ.set(U,F),z(B,Q,U),F}var CJ=new Map;function kJ(J,$="stoop"){let q=$||"";CJ.set(q,J)}function G0(J="stoop"){let $=J||"";return CJ.get($)||null}function QJ(J,$){let q={...J},Y=Object.keys($);for(let G of Y){if(G==="media")continue;let w=$[G],Q=J[G];if(w&&typeof w==="object"&&!Array.isArray(w)&&Q&&typeof Q==="object"&&!Array.isArray(Q))q[G]={...Q,...w};else if(w!==void 0)q[G]=w}return q}function ZJ(J,$="stoop"){let q=G0($);if(!q)return J;if(TJ(J,q))return J;return QJ(q,J)}function SJ(J,$="stoop",q="data-theme"){if(!P())return;let Y={};for(let[w,Q]of Object.entries(J))Y[w]=ZJ(Q,$);let G=m(Y,$,q);zJ(G,$)}function dJ(J){return function $(q={}){let Y=u(q);return QJ(J,Y)}}function uJ(J,$="stoop",q,Y,G){return function w(Q){return p(Q,J,$,q,Y,G)}}function X0(J,$,q,Y){let G=`@keyframes ${$} {`,w=Object.keys(J).sort((Q,W)=>{let X=parseFloat(Q.replace("%","")),Z=parseFloat(W.replace("%",""));if(Q==="from")return-1;if(W==="from")return 1;if(Q==="to")return 1;if(W==="to")return-1;return X-Z});for(let Q of w){if(!IJ(Q))continue;let W=J[Q];if(!W||typeof W!=="object")continue;G+=` ${Q} {`;let X=j(W,q,Y),Z=Object.keys(X).sort();for(let D of Z){let H=X[D];if(H!==void 0&&(typeof H==="string"||typeof H==="number")){let F=b(D);if(F){let U=String(H);G+=` ${F}: ${U};`}}}G+=" }"}return G+=" }",G}function yJ(J="stoop",$,q){let Y=O(J),G=new R(UJ);return function w(Q){let W=e(Q),X=G.get(W);if(X)return X;let Z=W.slice(0,8),D=Y?`${Y}-${Z}`:`stoop-${Z}`,H=X0(Q,D,$,q),F=`__keyframes_${D}`;return z(H,Y,F),G.set(W,D),D}}var WJ=new Set;function nJ(J,$="stoop",q,Y,G){return function w(Q){let W=e(Q);if(WJ.has(W))return()=>{};WJ.add(W);let X=O($),Z=v(Q,Y),D=j(Z,J,G),H=I(D,"",0,q);return z(H,X,`__global_${W}`),()=>{WJ.delete(W)}}}function hJ(J){let{globalCss:$,media:q,prefix:Y="stoop",theme:G,themeMap:w,utils:Q}=J,W=O(Y),X=u(G),Z=X.media||q,D={...T,...w};kJ(X,W);let H=uJ(X,W,Z,Q,D),F=dJ(X),U=nJ(X,W,Z,Q,D),_=yJ(W,X,D),B=Object.freeze({...X});function A(g){for(let i of g)try{p(i,X,W,Z,Q,D)}catch{}}function K(){if(!J.themes||Object.keys(J.themes).length===0)return;SJ(J.themes,W)}function L(){let g="";if(J.themes&&Object.keys(J.themes).length>0){let N={};for(let[cJ,mJ]of Object.entries(J.themes))N[cJ]=ZJ(mJ,W);let DJ=m(N,W,"data-theme");if(DJ)g+=DJ+`
14
- `}else{let N=XJ(X,W);if(N)g+=N+`
15
- `}let i=jJ(),wJ=YJ(i).trim();if(wJ)g+=(g?`
16
- `:"")+wJ;return g}return{config:{...J,prefix:W},createTheme:F,css:H,getCssText:L,globalCss:U,globalCssConfig:$,keyframes:_,media:Z,mergedThemeMap:D,preloadTheme:K,sanitizedPrefix:W,theme:B,utils:Q,validatedTheme:X,warmCache:A}}function Q1(J){let $=hJ(J);return{config:{...$.config,prefix:$.sanitizedPrefix},createTheme:$.createTheme,css:$.css,getCssText:$.getCssText,globalCss:$.globalCss,keyframes:$.keyframes,preloadTheme:$.preloadTheme,theme:$.theme,warmCache:$.warmCache}}export{Q1 as createStoop};
1
+ /**
2
+ * SSR-safe entry point for Stoop.
3
+ * Exports only server-safe APIs that don't require React.
4
+ * Use this import in Server Components: import { createStoop } from "stoop/ssr"
5
+ *
6
+ * SERVER-ONLY: No "use client" modules imported. Safe for React Server Components.
7
+ */
8
+ import { createStoopBase } from "./create-stoop-internal";
9
+ export function createStoop(config) {
10
+ const base = createStoopBase(config);
11
+ return {
12
+ config: { ...base.config, prefix: base.sanitizedPrefix },
13
+ createTheme: base.createTheme,
14
+ css: base.css,
15
+ getCssText: base.getCssText,
16
+ globalCss: base.globalCss,
17
+ keyframes: base.keyframes,
18
+ preloadTheme: base.preloadTheme,
19
+ theme: base.theme,
20
+ warmCache: base.warmCache,
21
+ };
22
+ }
@@ -1,30 +1,11 @@
1
1
  /**
2
- * Factory function that creates a Stoop instance.
3
- * Supports both client-side (with React APIs) and server-side (without React) usage.
4
- */
5
- import type { CSS, StoopConfig, StoopInstance, Theme, ThemeScale } from "./types";
6
- import { createCSSFunction, createKeyframesFunction, createGlobalCSSFunction } from "./api/core-api";
7
- /**
8
- * Shared implementation for creating Stoop instances.
9
- * Handles common setup logic for both client and server instances.
2
+ * Client-side entry point for creating Stoop instances.
3
+ * Includes React-based APIs: styled(), Provider, useTheme.
4
+ *
5
+ * NOTE: This file imports from "use client" modules (api/styled, api/theme-provider)
6
+ * making it client-side only. For server-side usage, import from "stoop/ssr".
10
7
  */
11
- export declare function createStoopBase(config: StoopConfig): {
12
- config: StoopConfig;
13
- createTheme: (overrides?: Partial<Theme>) => Theme;
14
- css: ReturnType<typeof createCSSFunction>;
15
- getCssText: () => string;
16
- globalCss: ReturnType<typeof createGlobalCSSFunction>;
17
- globalCssConfig: StoopConfig["globalCss"];
18
- keyframes: ReturnType<typeof createKeyframesFunction>;
19
- media: StoopConfig["media"];
20
- mergedThemeMap: Record<string, ThemeScale>;
21
- preloadTheme: () => void;
22
- sanitizedPrefix: string;
23
- theme: Theme;
24
- utils: StoopConfig["utils"];
25
- validatedTheme: Theme;
26
- warmCache: (styles: CSS[]) => void;
27
- };
8
+ import type { StoopConfig, StoopInstance } from "./types";
28
9
  /**
29
10
  * Creates a Stoop instance with the provided configuration.
30
11
  * Includes all APIs: styled, Provider, useTheme, etc.
@@ -32,5 +13,4 @@ export declare function createStoopBase(config: StoopConfig): {
32
13
  * @param config - Configuration object containing theme, media queries, utilities, and optional prefix/themeMap
33
14
  * @returns StoopInstance with all API functions
34
15
  */
35
- export type { CSS, ComponentProps, DefaultTheme, StoopConfig, StoopInstance, Theme, ThemeScale, UtilityFunction, } from "./types";
36
16
  export declare function createStoop(config: StoopConfig): StoopInstance;
@@ -1,17 +1,48 @@
1
- var s=Object.freeze({}),a=1e4,kJ=5000,SJ=10,dJ=500,y=1000,uJ=31536000,yJ="/",HJ=["colors","opacities","space","radii","sizes","fonts","fontWeights","fontSizes","lineHeights","letterSpacings","shadows","zIndices","transitions"],m={accentColor:"colors",animation:"transitions",animationDelay:"transitions",animationDuration:"transitions",animationTimingFunction:"transitions",backdropFilter:"shadows",background:"colors",backgroundColor:"colors",blockSize:"sizes",border:"colors",borderBlockColor:"colors",borderBlockEndColor:"colors",borderBlockStartColor:"colors",borderBottomColor:"colors",borderBottomLeftRadius:"radii",borderBottomRightRadius:"radii",borderColor:"colors",borderEndEndRadius:"radii",borderEndStartRadius:"radii",borderInlineColor:"colors",borderInlineEndColor:"colors",borderInlineStartColor:"colors",borderLeftColor:"colors",borderRadius:"radii",borderRightColor:"colors",borderStartEndRadius:"radii",borderStartStartRadius:"radii",borderTopColor:"colors",borderTopLeftRadius:"radii",borderTopRightRadius:"radii",bottom:"space",boxShadow:"shadows",caretColor:"colors",color:"colors",columnGap:"space",columnRuleColor:"colors",fill:"colors",filter:"shadows",flexBasis:"sizes",floodColor:"colors",font:"fontSizes",fontFamily:"fonts",fontSize:"fontSizes",fontWeight:"fontWeights",gap:"space",gridColumnGap:"space",gridGap:"space",gridRowGap:"space",height:"sizes",inlineSize:"sizes",inset:"space",insetBlock:"space",insetBlockEnd:"space",insetBlockStart:"space",insetInline:"space",insetInlineEnd:"space",insetInlineStart:"space",left:"space",letterSpacing:"letterSpacings",lightingColor:"colors",lineHeight:"lineHeights",margin:"space",marginBlock:"space",marginBlockEnd:"space",marginBlockStart:"space",marginBottom:"space",marginInline:"space",marginInlineEnd:"space",marginInlineStart:"space",marginLeft:"space",marginRight:"space",marginTop:"space",maxBlockSize:"sizes",maxHeight:"sizes",maxInlineSize:"sizes",maxWidth:"sizes",minBlockSize:"sizes",minHeight:"sizes",minInlineSize:"sizes",minWidth:"sizes",opacity:"opacities",outline:"colors",outlineColor:"colors",padding:"space",paddingBlock:"space",paddingBlockEnd:"space",paddingBlockStart:"space",paddingBottom:"space",paddingInline:"space",paddingInlineEnd:"space",paddingInlineStart:"space",paddingLeft:"space",paddingRight:"space",paddingTop:"space",right:"space",rowGap:"space",size:"sizes",stopColor:"colors",stroke:"colors",textDecorationColor:"colors",textEmphasisColor:"colors",textShadow:"shadows",top:"space",transition:"transitions",transitionDelay:"transitions",transitionDuration:"transitions",transitionProperty:"transitions",transitionTimingFunction:"transitions",width:"sizes",zIndex:"zIndices"},t=Symbol.for("stoop.component");class j extends Map{maxSize;constructor(J){super();this.maxSize=J}get(J){let $=super.get(J);if($!==void 0)super.delete(J),super.set(J,$);return $}set(J,$){if(super.has(J))super.delete(J);else if(this.size>=this.maxSize){let q=this.keys().next().value;if(q!==void 0)super.delete(q)}return super.set(J,$),this}}var hJ=new j(kJ),UJ=new j(a);function O(){return typeof window!=="undefined"&&typeof document!=="undefined"&&typeof window.document==="object"&&typeof document.createElement==="function"}function h(){return typeof process!=="undefined"&&process.env?.NODE_ENV==="production"}function e(J){return typeof J==="object"&&J!==null}function o(J){return typeof J==="object"&&J!==null&&"__isStoopStyled"in J&&"__stoopClassName"in J&&J.__isStoopStyled===!0}function JJ(J){return e(J)&&!o(J)}function FJ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function $J(J){if(!J||typeof J!=="object"||Array.isArray(J))throw new Error("[Stoop] Theme must be a non-null object");if(h())return J;let $=J,q=[];for(let X in $){if(X==="media")continue;if(!HJ.includes(X))q.push(X)}if(q.length>0){let X=`[Stoop] Theme contains invalid scales: ${q.join(", ")}. Only these scales are allowed: ${HJ.join(", ")}`;throw new Error(X)}return J}function S(J,$){if(!$||!J||typeof J!=="object")return J;let q=Object.keys($),X=!1;for(let Z in J)if(q.includes(Z)){X=!0;break}if(!X)return J;let Y={};for(let Z in J){let G=J[Z];if(q.includes(Z)&&$[Z])try{let D=$[Z](G);if(D&&typeof D==="object")for(let Q in D)Y[Q]=D[Q]}catch{Y[Z]=G}else if(e(G))Y[Z]=S(G,$);else Y[Z]=G}return Y}var LJ=null,cJ=new j(y),nJ=new j(y),pJ=new j(y);function d(J){if(J.length===0)return"0";let $=2166136261,q=16777619,X=$;for(let Y=0;Y<J.length;Y++)X^=J.charCodeAt(Y),X=Math.imul(X,q);return X^=J.length,(X>>>0).toString(36)}function wJ(J){try{return d(JSON.stringify(J))}catch{return d(String(J))}}function mJ(J,$=!1){let X=String(J).replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/'/g,"\\'").replace(/;/g,"\\;").replace(/\n/g,"\\A ").replace(/\r/g,"").replace(/\f/g,"\\C ");if($)X=X.replace(/\{/g,"\\7B ").replace(/\}/g,"\\7D ");return X}function BJ(J){return mJ(J,!1)}function b(J){let $=cJ.get(J);if($!==void 0)return $;let q=J.replace(/[^a-zA-Z0-9\s\-_>+~:.#[\]&@(),]/g,""),X=!q.trim()||/^[>+~:.#[\]&@()\s]+$/.test(q)?"":q;return cJ.set(J,X),X}function T(J){let $=pJ.get(J);if($!==void 0)return $;let Y=J.replace(/[^a-zA-Z0-9-_]/g,"-").replace(/^[\d-]+/,"").replace(/^-+/,"")||"invalid";return pJ.set(J,Y),Y}function oJ(J){return mJ(J,!0)}function z(J){if(!J)return"stoop";return J.replace(/[^a-zA-Z0-9-_]/g,"").replace(/^[\d-]+/,"").replace(/^-+/,"")||"stoop"}function iJ(J){if(!J||typeof J!=="string")return"";let $=J.replace(/[^a-zA-Z0-9\s():,<>=\-@]/g,"");if(!$.trim()||!/[a-zA-Z]/.test($))return"";return $}function lJ(J){if(!J||typeof J!=="string")return"";let $=nJ.get(J);if($!==void 0)return $;let q=J.trim().split(/\s+/),X=[];for(let Z of q){if(!Z)continue;let D=Z.replace(/[^a-zA-Z0-9-_]/g,"").replace(/^\d+/,"");if(D&&/^[a-zA-Z-_]/.test(D))X.push(D)}let Y=X.join(" ");return nJ.set(J,Y),Y}function rJ(J){if(!J||typeof J!=="string")return!1;if(J==="from"||J==="to")return!0;if(/^\d+(\.\d+)?%$/.test(J)){let q=parseFloat(J);return q>=0&&q<=100}return!1}function sJ(J=""){if(!LJ){let q=":root".replace(/[.*+?^${}()|[\]\\]/g,"\\$&");LJ=new RegExp(`${q}\\s*\\{[\\s\\S]*\\}`)}return LJ}function K0(J){if(J.includes("Color")||J==="fill"||J==="stroke"||J==="accentColor"||J==="caretColor"||J==="border"||J==="outline"||J.includes("background")&&!J.includes("Size")&&!J.includes("Image"))return"colors";if(/^(margin|padding|gap|inset|top|right|bottom|left|rowGap|columnGap|gridGap|gridRowGap|gridColumnGap)/.test(J)||J.includes("Block")||J.includes("Inline"))return"space";if(/(width|height|size|basis)$/i.test(J)||J.includes("BlockSize")||J.includes("InlineSize"))return"sizes";if(J==="fontSize"||J==="font"&&!J.includes("Family"))return"fontSizes";if(J==="fontFamily"||J.includes("FontFamily"))return"fonts";if(J==="fontWeight"||J.includes("FontWeight"))return"fontWeights";if(J==="letterSpacing"||J.includes("LetterSpacing"))return"letterSpacings";if(J.includes("Radius")||J.includes("radius"))return"radii";if(J.includes("Shadow")||J.includes("shadow")||J==="filter"||J==="backdropFilter")return"shadows";if(J==="zIndex"||J.includes("ZIndex")||J.includes("z-index"))return"zIndices";if(J==="opacity"||J.includes("Opacity"))return"opacities";if(J.startsWith("transition")||J.startsWith("animation")||J.includes("Transition")||J.includes("Animation"))return"transitions";return}function aJ(J,$){if($&&J in $)return $[J];if(J in m)return m[J];return K0(J)}var _J=new Map;function YJ(J){return _J.has(J)}function XJ(J,$){_J.set(J,$)}var AJ=new j(a);function J0(J){if(!AJ.has(J))AJ.set(J,!0)}function tJ(){return Array.from(AJ.keys()).join(`
2
- `)}var qJ=new Map;var eJ=new Map;function $0(J="stoop"){if(!O())throw new Error("Cannot access document in SSR context");let $=z(J),q=qJ.get($);if(!q||!q.parentNode){let X=document.getElementById("stoop-ssr");if(X){let Y=X.getAttribute("data-stoop");if(!Y||Y===$)return q=X,q.setAttribute("data-stoop",$),qJ.set($,q),q}q=document.createElement("style"),q.setAttribute("data-stoop",$),q.setAttribute("id",`stoop-${$}`),document.head.appendChild(q),qJ.set($,q)}return q}function OJ(J){let $=J,q=sJ("");$=$.replace(q,"").trim();let X=$.indexOf("[data-theme=");while(X!==-1){let Y=$.indexOf("{",X);if(Y===-1)break;let Z=1,G=Y+1;while(G<$.length&&Z>0){if($[G]==="{")Z++;else if($[G]==="}")Z--;G++}if(Z===0){let D=$.substring(0,X).trim(),Q=$.substring(G).trim();$=(D+`
3
- `+Q).trim()}else break;X=$.indexOf("[data-theme=")}return $.trim()}function q0(J,$="stoop"){if(!J)return;let q=z($),X=`__all_theme_vars_${q}`;if((eJ.get(X)??null)===J)return;if(eJ.set(X,J),!O()){J0(J);return}let Z=$0(q),G=Z.textContent||"",D=G.includes(":root")||G.includes("[data-theme=");if(YJ(X)||D){let Q=OJ(G);Z.textContent=J+(Q?`
4
-
5
- `+Q:""),XJ(X,J)}else Z.textContent=J+(G?`
6
-
7
- `+G:""),XJ(X,J)}function V0(J,$,q="stoop"){if(!O())return;let X=z(q);if(YJ($))return;let Y=$0(X),Z=Y.textContent||"";Y.textContent=Z+(Z?`
8
- `:"")+J,XJ($,J)}function z0(J,$,q="stoop"){if(YJ($))return;let X=z(q);V0(J,$,X)}function P0(J="stoop"){let $=z(J);return qJ.get($)||null}function j0(){return new Map(_J)}function c(J,$="stoop",q){let X=q||J;if(!O()){if(!YJ(X))XJ(X,J);J0(J);return}z0(J,X,$)}function X0(J="stoop"){if(O()){let $=z(J),q=P0($);if(q&&q.parentNode){let X=q.textContent||"";if(!X&&j0().size>0)return tJ();return X}}return tJ()}var x0=/(-?\$[a-zA-Z][a-zA-Z0-9]*(?:\$[a-zA-Z][a-zA-Z0-9]*)?(?:\.[a-zA-Z][a-zA-Z0-9]*)?)/g,Y0=new WeakMap;function IJ(J){let $=Y0.get(J);if($)return $;let q=new Map;function X(Y,Z=[]){let G=Object.keys(Y);for(let D of G){let Q=Y[D],W=[...Z,D];if(FJ(Q))X(Q,W);else{let H=q.get(D);if(H)H.push(W);else q.set(D,[W])}}}X(J);for(let[,Y]of q.entries())if(Y.length>1)Y.sort((Z,G)=>{let D=Z.length-G.length;if(D!==0)return D;let Q=Z.join("."),W=G.join(".");return Q.localeCompare(W)});return Y0.set(J,q),q}function N0(J,$){let q=Object.keys(J).filter((Y)=>Y!=="media"),X=Object.keys($).filter((Y)=>Y!=="media");if(q.length!==X.length)return!1;for(let Y of q)if(!(Y in $))return!1;return!0}function G0(J,$){if(J===$)return!0;if(!J||!$)return!1;if(!N0(J,$))return!1;let q={...J},X={...$};return delete q.media,delete X.media,JSON.stringify(q)===JSON.stringify(X)}function g0(J,$,q){if(q&&q in J){let Z=J[q];if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&$ in Z)return[q,$]}let Y=IJ(J).get($);if(!Y||Y.length===0)return null;return Y[0]}function GJ(J,$,q,X){if(!J.startsWith("$"))return J;let Y=J.slice(1);if(Y.includes("$")||Y.includes("."))return`var(${`--${(Y.includes("$")?Y.split("$"):Y.split(".")).map((H)=>T(H)).join("-")}`})`;if($&&q){let D=aJ(q,X);if(D){let H=g0($,Y,D);if(H)return`var(${`--${H.map((L)=>T(L)).join("-")}`})`}let W=IJ($).get(Y);if(W&&W.length>1){if(!h()){let H=D?`Property "${q}" maps to "${D}" scale, but token not found there. `:`No scale mapping found for property "${q}". `;console.warn(`[Stoop] Ambiguous token "$${Y}" found in multiple categories: ${W.map((F)=>F.join(".")).join(", ")}. ${H}Using "${W[0].join(".")}" (deterministic: shorter paths first, then alphabetical). Use full path "$${W[0].join(".")}" to be explicit.`)}}if(W&&W.length>0){let[H]=W;return`var(${`--${H.map((L)=>T(L)).join("-")}`})`}}else if($){let Q=IJ($).get(Y);if(Q&&Q.length>1){if(!h())console.warn(`[Stoop] Ambiguous token "$${Y}" found in multiple categories: ${Q.map((W)=>W.join(".")).join(", ")}. Using "${Q[0].join(".")}" (deterministic: shorter paths first, then alphabetical). Use full path "$${Q[0].join(".")}" to be explicit, or use with a CSS property for automatic resolution.`)}if(Q&&Q.length>0){let[W]=Q;return`var(${`--${W.map((U)=>T(U)).join("-")}`})`}}return`var(${`--${T(Y)}`})`}function RJ(J,$="stoop",q){let X=q||":root",Y=[];function Z(G,D=[]){let Q=Object.keys(G).sort();for(let W of Q){if(W==="media")continue;let H=G[W],F=[...D,W];if(FJ(H))Z(H,F);else{let L=`--${F.map((w)=>T(w)).join("-")}`,_=typeof H==="string"||typeof H==="number"?oJ(H):String(H);Y.push(` ${L}: ${_};`)}}}if(Z(J),Y.length===0)return"";return`${X} {
9
- ${Y.join(`
10
- `)}
11
- }`}function QJ(J,$="stoop",q="data-theme"){let X=[];for(let[Y,Z]of Object.entries(J)){let G=`[${q}="${Y}"]`,D=RJ(Z,$,G);if(D)X.push(D)}return X.join(`
12
-
13
- `)}function C(J,$,q,X){if(!J||typeof J!=="object")return J;let Y=Object.keys(J),Z=!1;for(let Q of Y){let W=J[Q];if(typeof W==="string"&&W.includes("$")){Z=!0;break}}if(!Z&&!$)return J;let G={},D=!1;for(let Q of Y){let W=J[Q];if(e(W)){let H=C(W,$,q,void 0);if(G[Q]=H,H!==W)D=!0}else if(typeof W==="string"&&W.includes("$")){D=!0;let H=X||Q;if(W.startsWith("$")&&!W.includes(" ")&&!W.includes("calc(")&&W===W.trim())if(W.startsWith("-$")){let U=W.slice(1);if(U.includes(".")||U.includes("$")){let L=U.includes("$")?U.split("$"):U.split("."),_=!1;for(let w=0;w<L.length;w++){let B=L[w];for(let I=0;I<B.length;I++){let A=B.charCodeAt(I);if(!(A>=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===45||A===95)){_=!0;break}}if(_)break}if(_){let B=`--${L.map((I)=>T(I)).join("-")}`;G[Q]=`calc(-1 * var(${B}))`}else{let w=`--${L.join("-")}`;G[Q]=`calc(-1 * var(${w}))`}}else{let L=GJ(U,$,H,q);G[Q]=`calc(-1 * ${L})`}}else{let U=W.slice(1);if(U.includes(".")||U.includes("$")){let L=U.includes("$")?U.split("$"):U.split("."),_=!1;for(let w=0;w<L.length;w++){let B=L[w];for(let I=0;I<B.length;I++){let A=B.charCodeAt(I);if(!(A>=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===45||A===95)){_=!0;break}}if(_)break}if(_){let B=`--${L.map((I)=>T(I)).join("-")}`;G[Q]=`var(${B})`}else{let w=`--${L.join("-")}`;G[Q]=`var(${w})`}}else G[Q]=GJ(W,$,H,q)}else G[Q]=W.replace(x0,(U)=>{if(U.startsWith("-$")){let L=U.slice(1);return`calc(-1 * ${GJ(L,$,H,q)})`}return GJ(U,$,H,q)})}else G[Q]=W}if(!D)return J;return G}var v=new j(y);function v0(J){return J.replace(/([A-Z])/g,"-$1").toLowerCase()}function T0(J){if(J===J.toUpperCase()&&J.length>1)return J.charAt(0)+J.slice(1).toLowerCase();return J}function ZJ(J){if(!J)return"";return J.charAt(0).toLowerCase()+J.slice(1).replace(/([A-Z])/g,"-$1").toLowerCase()}function i(J){if(!J||typeof J!=="string")return"";let $=v.get(J);if($!==void 0)return $;if(/^-[a-z]+-/.test(J))return v.set(J,J),J;let q=T0(J);if(/^[Mm]oz/i.test(q)){if(q.length===3||q.toLowerCase()==="moz")return v.set(J,"-moz"),"-moz";let G=q.match(/^[Mm]oz(.+)$/i);if(G&&G[1]){let[,D]=G,Q=ZJ(D);if(Q){let W=`-moz-${Q}`;return v.set(J,W),W}}}if(/^[Ww]ebkit/i.test(q)){if(q.length===6||q.toLowerCase()==="webkit")return v.set(J,"-webkit"),"-webkit";let G=q.match(/^[Ww]ebkit(.+)$/i);if(G&&G[1]){let[,D]=G,Q=ZJ(D);if(Q){let W=`-webkit-${Q}`;return v.set(J,W),W}}}if(/^[Mm]s/i.test(q)){if(q.length===2||q.toLowerCase()==="ms")return v.set(J,"-ms"),"-ms";let G=q.match(/^[Mm]s(.+)$/i);if(G&&G[1]){let[,D]=G,Q=ZJ(D);if(Q){let W=`-ms-${Q}`;return v.set(J,W),W}}}if(/^O/i.test(q)){if(q.length===1||q.toLowerCase()==="o")return v.set(J,"-o"),"-o";if(/^O[A-Z]/.test(q)){let G=q.substring(1),D=ZJ(G);if(D){let Q=`-o-${D}`;return v.set(J,Q),Q}}}let Z=v0(q).replace(/[^a-zA-Z0-9-]/g,"").replace(/^-+|-+$/g,"").replace(/^\d+/,"")||"";return v.set(J,Z),Z}var f0=new Set(["width","height","min-width","min-height","max-width","max-height","top","right","bottom","left","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","border-width","border-top-width","border-right-width","border-bottom-width","border-left-width","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-left-radius","border-bottom-right-radius","font-size","letter-spacing","word-spacing","text-indent","flex-basis","gap","row-gap","column-gap","grid-template-rows","grid-template-columns","grid-auto-rows","grid-auto-columns","perspective","outline-width","outline-offset","clip","vertical-align","object-position","background-position","background-size","mask-position","mask-size","scroll-margin","scroll-padding","shape-margin"]);function Q0(J){return f0.has(J)}function Z0(J,$){if(typeof $==="string"){if(Q0(J)&&/^-?\d+\.?\d*$/.test($.trim()))return`${$}px`;return $}if(typeof $==="number"&&Q0(J))return`${$}px`;return String($)}function D0(J,$){if(typeof J==="symbol"&&J===t)return!0;if(o($))return!0;if(typeof J==="string"&&J.startsWith("__STOOP_COMPONENT_"))return!0;return!1}function b0(J,$){if(typeof $==="object"&&$!==null&&"__stoopClassName"in $&&typeof $.__stoopClassName==="string")return $.__stoopClassName;if(typeof J==="string"&&J.startsWith("__STOOP_COMPONENT_"))return J.replace("__STOOP_COMPONENT_","");return""}function K(J,$="",q=0,X){if(!J||typeof J!=="object")return"";if(q>SJ)return"";let Y=[],Z=[],G=$===""?Object.keys(J).sort():Object.keys(J);for(let Q of G){let W=J[Q];if(D0(Q,W)){let H=b0(Q,W);if(!H)continue;let F=b(H);if(!F)continue;let U=$?`${$} .${F}`:`.${F}`,L=JJ(W)?K(W,U,q+1,X):"";if(L)Z.push(L);continue}if(JJ(W))if(X&&Q in X){let H=iJ(X[Q]);if(H){let F=K(W,$,q+1,X);if(F)Z.push(`${H} { ${F} }`)}}else if(Q.startsWith("@")){let H=b(Q);if(H){let F=K(W,$,q+1,X);if(F)Z.push(`${H} { ${F} }`)}}else if(Q.includes("&")){let H=b(Q);if(H){let F=H.split("&");if($.includes(",")){let _=$.split(",").map((B)=>B.trim()).map((B)=>F.join(B)).join(", "),w=K(W,_,q+1,X);if(w)Z.push(w)}else{let U=F.join($),L=K(W,U,q+1,X);if(L)Z.push(L)}}}else if(Q.startsWith(":")){let H=b(Q);if(H){let F=`${$}${H}`,U=K(W,F,q+1,X);if(U)Z.push(U)}}else if(Q.includes(",")){let F=Q.split(",").map((U)=>U.trim()).map((U)=>b(U)).filter((U)=>U);if(F.length>0){let U=F.join(", "),L=K(W,U,q+1,X);if(L)Z.push(L)}}else if(Q.includes(" ")||Q.includes(">")||Q.includes("+")||Q.includes("~")){let H=b(Q);if(H){let U=/^[\s>+~]/.test(H.trim())?`${$}${H}`:`${$} ${H}`,L=K(W,U,q+1,X);if(L)Z.push(L)}}else{let H=b(Q);if(H){let F=$?`${$} ${H}`:H,U=K(W,F,q+1,X);if(U)Z.push(U)}}else if(W!==void 0){let H=i(Q);if(H&&(typeof W==="string"||typeof W==="number")){let F=Z0(H,W);if(H==="content"&&F==="")Y.push(`${H}: "";`);else{let U=BJ(F);Y.push(`${H}: ${U};`)}}}}let D=[];if(Y.length>0)D.push(`${$} { ${Y.join(" ")} }`);return D.push(...Z),D.join("")}function C0(J,$){if(!J||typeof J!=="object")return"";let q=[],X=Object.keys(J).sort();for(let Y of X){let Z=J[Y];if(JJ(Z))return"";if($&&Y in $)return"";if(Y.startsWith("@")||Y.includes("&")||Y.startsWith(":")||Y.includes(" ")||Y.includes(">")||Y.includes("+")||Y.includes("~"))return"";if(Z!==void 0&&!D0(Y,Z)){let G=i(Y);if(G&&(typeof Z==="string"||typeof Z==="number")){let D=Z0(G,Z);if(G==="content"&&D==="")q.push(`${G}: "";`);else{let Q=BJ(D);q.push(`${G}: ${Q};`)}}}}return q.join(" ")}function n(J,$,q="stoop",X,Y,Z){let G=z(q),D=S(J,Y),Q=C(D,$,Z),W=C0(Q,X),H,F;if(W)H=W,F=d(H);else H=K(Q,"",0,X),F=d(H);let U=G?`${G}-${F}`:`css-${F}`,L=`${G}:${U}`,_=UJ.get(L);if(_)return c(_,G,L),U;let w;if(W)w=`.${U} { ${W} }`;else w=K(Q,`.${U}`,0,X);return UJ.set(L,w),hJ.set(L,U),c(w,G,L),U}var W0=new Map;function H0(J,$="stoop"){let q=$||"";W0.set(q,J)}function k0(J="stoop"){let $=J||"";return W0.get($)||null}function MJ(J,$){let q={...J},X=Object.keys($);for(let Y of X){if(Y==="media")continue;let Z=$[Y],G=J[Y];if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&G&&typeof G==="object"&&!Array.isArray(G))q[Y]={...G,...Z};else if(Z!==void 0)q[Y]=Z}return q}function EJ(J,$="stoop"){let q=k0($);if(!q)return J;if(G0(J,q))return J;return MJ(q,J)}function DJ(J,$="stoop",q="data-theme"){if(!O())return;let X={};for(let[Z,G]of Object.entries(J))X[Z]=EJ(G,$);let Y=QJ(X,$,q);q0(Y,$)}function U0(J){return function $(q={}){let X=$J(q);return MJ(J,X)}}function F0(J,$="stoop",q,X,Y){return function Z(G){return n(G,J,$,q,X,Y)}}function S0(J,$,q,X){let Y=`@keyframes ${$} {`,Z=Object.keys(J).sort((G,D)=>{let Q=parseFloat(G.replace("%","")),W=parseFloat(D.replace("%",""));if(G==="from")return-1;if(D==="from")return 1;if(G==="to")return 1;if(D==="to")return-1;return Q-W});for(let G of Z){if(!rJ(G))continue;let D=J[G];if(!D||typeof D!=="object")continue;Y+=` ${G} {`;let Q=C(D,q,X),W=Object.keys(Q).sort();for(let H of W){let F=Q[H];if(F!==void 0&&(typeof F==="string"||typeof F==="number")){let U=i(H);if(U){let L=String(F);Y+=` ${U}: ${L};`}}}Y+=" }"}return Y+=" }",Y}function L0(J="stoop",$,q){let X=z(J),Y=new j(dJ);return function Z(G){let D=wJ(G),Q=Y.get(D);if(Q)return Q;let W=D.slice(0,8),H=X?`${X}-${W}`:`stoop-${W}`,F=S0(G,H,$,q),U=`__keyframes_${H}`;return c(F,X,U),Y.set(D,H),H}}var KJ=new Set;function w0(J,$="stoop",q,X,Y){return function Z(G){let D=wJ(G);if(KJ.has(D))return()=>{};KJ.add(D);let Q=z($),W=S(G,X),H=C(W,J,Y),F=K(H,"",0,q);return c(F,Q,`__global_${D}`),()=>{KJ.delete(D)}}}import{useMemo as WJ,forwardRef as d0,createElement as u0,useContext as y0,createContext as h0}from"react";function c0(J,$,q){let X=[];for(let Z in J){let G=$[Z];if(G===void 0)continue;let D=J[Z],Q=G===!0?"true":G===!1?"false":String(G);if(D[Q])X.push(D[Q])}if(X.length===0)return q;if(X.length===1)return{...q,...X[0]};let Y={...X[0]};for(let Z=1;Z<X.length;Z++)Object.assign(Y,X[Z]);return{...q,...Y}}var VJ=null;function n0(){if(!VJ)VJ=h0(null);return VJ}function p0(J){return{__isStoopStyled:!0,__stoopClassName:J,[t]:J,toString:()=>`__STOOP_COMPONENT_${J}`}}function m0(J){return o(J)}var o0=new Set(["alignContent","alignItems","alignSelf","animation","animationDelay","animationDirection","animationDuration","animationFillMode","animationIterationCount","animationName","animationPlayState","animationTimingFunction","aspectRatio","backdropFilter","backfaceVisibility","background","backgroundAttachment","backgroundBlendMode","backgroundClip","backgroundColor","backgroundImage","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","border","borderBottom","borderBottomColor","borderBottomLeftRadius","borderBottomRightRadius","borderBottomStyle","borderBottomWidth","borderCollapse","borderColor","borderImage","borderImageOutset","borderImageRepeat","borderImageSlice","borderImageSource","borderImageWidth","borderLeft","borderLeftColor","borderLeftStyle","borderLeftWidth","borderRadius","borderRight","borderRightColor","borderRightStyle","borderRightWidth","borderSpacing","borderStyle","borderTop","borderTopColor","borderTopLeftRadius","borderTopRightRadius","borderTopStyle","borderTopWidth","borderWidth","bottom","boxShadow","boxSizing","captionSide","caretColor","clear","clip","clipPath","color","columnCount","columnFill","columnGap","columnRule","columnRuleColor","columnRuleStyle","columnRuleWidth","columnSpan","columnWidth","columns","content","counterIncrement","counterReset","cursor","direction","display","emptyCells","filter","flex","flexBasis","flexDirection","flexFlow","flexGrow","flexShrink","flexWrap","float","font","fontFamily","fontFeatureSettings","fontKerning","fontLanguageOverride","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontSynthesis","fontVariant","fontVariantAlternates","fontVariantCaps","fontVariantEastAsian","fontVariantLigatures","fontVariantNumeric","fontVariantPosition","fontWeight","gap","grid","gridArea","gridAutoColumns","gridAutoFlow","gridAutoRows","gridColumn","gridColumnEnd","gridColumnGap","gridColumnStart","gridGap","gridRow","gridRowEnd","gridRowGap","gridRowStart","gridTemplate","gridTemplateAreas","gridTemplateColumns","gridTemplateRows","height","hyphens","imageOrientation","imageRendering","imageResolution","imeMode","inlineSize","isolation","justifyContent","justifyItems","justifySelf","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginBottom","marginLeft","marginRight","marginTop","maxHeight","maxWidth","minHeight","minWidth","objectFit","objectPosition","opacity","order","orphans","outline","outlineColor","outlineOffset","outlineStyle","outlineWidth","overflow","overflowWrap","overflowX","overflowY","padding","paddingBottom","paddingLeft","paddingRight","paddingTop","pageBreakAfter","pageBreakBefore","pageBreakInside","perspective","perspectiveOrigin","placeContent","placeItems","placeSelf","pointerEvents","position","quotes","resize","right","rowGap","scrollBehavior","tabSize","tableLayout","textAlign","textAlignLast","textDecoration","textDecorationColor","textDecorationLine","textDecorationStyle","textIndent","textJustify","textOverflow","textShadow","textTransform","textUnderlinePosition","top","transform","transformOrigin","transformStyle","transition","transitionDelay","transitionDuration","transitionProperty","transitionTimingFunction","unicodeBidi","userSelect","verticalAlign","visibility","whiteSpace","width","wordBreak","wordSpacing","wordWrap","writingMode","zIndex"]);function i0(J){return o0.has(J)}function l0(J,$){let q=$?new Set(Object.keys($)):new Set,X={},Y={},Z={};for(let G in J)if(q.has(G))X[G]=J[G];else if(i0(G))Y[G]=J[G];else Z[G]=J[G];return{cssProps:Y,elementProps:Z,variantProps:X}}function B0(J,$="stoop",q,X,Y,Z){return function G(D,Q){let W=Q||s,H;if(Q&&"variants"in Q&&typeof Q.variants==="object"&&Q.variants!==null&&!Array.isArray(Q.variants)){let B=Q.variants;if(Object.keys(B).length>0&&Object.values(B).every((A)=>typeof A==="object"&&A!==null&&!Array.isArray(A))){H=Q.variants;let{variants:A,...R}=Q;W=R}}let F;if(typeof D!=="string"&&m0(D))F=D.__stoopClassName;let U=d0(function B(I,A){let{as:R,className:x,css:N,...V}=I,f=R||D,g=WJ(()=>N&&typeof N==="object"&&N!==null?N:s,[N]),{cssProps:k,elementProps:M,variantProps:P}=l0(V,H),r=y0(Z||n0())?.theme||J,TJ=r.media?{...q,...r.media}:q,fJ=WJ(()=>{if(!H)return"";let E=Object.entries(P);if(E.length===0)return"";return E.sort(([u],[p])=>u.localeCompare(p)).map(([u,p])=>`${u}:${String(p)}`).join("|")},[P]),bJ=WJ(()=>{let E=W;if(H&&fJ)E=c0(H,P,W);if(Object.keys(k).length>0)E=Object.assign({},E,k);if(g!==s)E=Object.assign({},E,g);return E},[fJ,g,k,W,H,P]),E0=WJ(()=>{let E=[];if(F)E.push(F);let u=n(bJ,r,$,TJ,X,Y);if(u)E.push(u);if(x){let p=typeof x==="string"?x:String(x),CJ=lJ(p);if(CJ)E.push(CJ)}return E.length>0?E.join(" "):void 0},[bJ,x,F,r,$,TJ,X,Y]);return u0(f,{...M,className:E0,ref:A})}),L=d(JSON.stringify(W)),_=`${$}-${L}`,w=U;return w.selector=p0(_),w}}import{createContext as _0,useCallback as O0,useContext as r0,useLayoutEffect as l,useMemo as xJ,useRef as NJ,useState as s0}from"react";function zJ(J){if(!O())return{error:"Not in browser environment",success:!1,value:null};try{return{source:"localStorage",success:!0,value:localStorage.getItem(J)}}catch($){return{error:$ instanceof Error?$.message:"localStorage access failed",success:!1,value:null}}}function PJ(J,$){if(!O())return{error:"Not in browser environment",success:!1,value:void 0};try{return localStorage.setItem(J,$),{success:!0,value:void 0}}catch(q){return{error:q instanceof Error?q.message:"localStorage write failed",success:!1,value:void 0}}}function jJ(J){if(!O())return null;let q=`; ${document.cookie}`.split(`; ${J}=`);if(q.length===2)return q.pop()?.split(";").shift()||null;return null}function A0(J,$,q={}){if(!O())return!1;let{maxAge:X=uJ,path:Y=yJ,secure:Z=!1}=q;try{return document.cookie=`${J}=${$}; path=${Y}; max-age=${X}${Z?"; secure":""}`,!0}catch{return!1}}import{jsx as I0}from"react/jsx-runtime";function gJ(J,$,q){if(!O())return;let X=$?jJ($):null,Y=zJ(q),Z=Y.success?Y.value:null;if(X===J&&Z!==J)PJ(q,J);if(Z===J&&$&&X!==J)A0($,J)}function a0(J,$,q){if(!O())return null;if(J!==void 0){let Z=jJ(J);if(Z&&q[Z])return Z}let X=zJ($),Y=X.success?X.value:null;if(Y&&q[Y])return Y;return null}function R0(J,$,q="stoop",X,Y){let Z=_0(null),G=_0(null),D=Object.keys(J),Q=D[0]||"default",W=X&&Y?Y(X):void 0;function H({attribute:F="data-theme",children:U,cookieKey:L,defaultTheme:_,storageKey:w="stoop-theme"}){let[B,I]=s0(_||Q),A=NJ(!1);l(()=>{if(!O()||A.current)return;let M=a0(L,w,J);if(M){if(gJ(M,L,w),M!==B)I(M)}A.current=!0},[L,w,J]),l(()=>{if(!O())return;let M=(P)=>{if(P.key===w&&P.newValue&&J[P.newValue]&&P.newValue!==B)I(P.newValue),gJ(P.newValue,L,w)};return window.addEventListener("storage",M),()=>{window.removeEventListener("storage",M)}},[w,L,B,J]);let R=xJ(()=>{return J[B]||J[_||Q]||$},[B,_,Q,J,$]),x=NJ(!1),N=NJ(!1);l(()=>{if(!O()||x.current)return;DJ(J,q,F),x.current=!0},[J,q,F]),l(()=>{if(!O()||N.current)return;if(W)W(),N.current=!0},[W]),l(()=>{if(!O())return;if(F)document.documentElement.setAttribute(F,B)},[B,F]);let V=O0((M)=>{if(J[M])I(M),PJ(w,M),gJ(M,L,w);else if(!h())console.warn(`[Stoop] Theme "${M}" not found. Available themes: ${D.join(", ")}`)},[w,L,J,D,B]),f=xJ(()=>({theme:R,themeName:B}),[R,B]),g=O0(()=>{let P=(D.indexOf(B)+1)%D.length,vJ=D[P];V(vJ)},[B,V,D]),k=xJ(()=>({availableThemes:D,setTheme:V,theme:R,themeName:B,toggleTheme:g}),[R,B,V,g]);return I0(Z.Provider,{value:f,children:I0(G.Provider,{value:k,children:U})})}return{Provider:H,ThemeContext:Z,ThemeManagementContext:G}}function M0(J){return function $(){let q=r0(J);if(!q)throw new Error("useTheme must be used within a Provider");return q}}function t0(J){let{globalCss:$,media:q,prefix:X="stoop",theme:Y,themeMap:Z,utils:G}=J,D=z(X),Q=$J(Y),W=Q.media||q,H={...m,...Z};H0(Q,D);let F=F0(Q,D,W,G,H),U=U0(Q),L=w0(Q,D,W,G,H),_=L0(D,Q,H),w=Object.freeze({...Q});function B(R){for(let x of R)try{n(x,Q,D,W,G,H)}catch{}}function I(){if(!J.themes||Object.keys(J.themes).length===0)return;DJ(J.themes,D)}function A(){let R="";if(J.themes&&Object.keys(J.themes).length>0){let V={};for(let[g,k]of Object.entries(J.themes))V[g]=EJ(k,D);let f=QJ(V,D,"data-theme");if(f)R+=f+`
14
- `}else{let V=RJ(Q,D);if(V)R+=V+`
15
- `}if($){let V=S($,G),f=C(V,Q,H),g=K(f,"",0,W);if(g)R+=(R?`
16
- `:"")+g}let x=X0(),N=OJ(x).trim();if(N)R+=(R?`
17
- `:"")+N;return R}return{config:{...J,prefix:D},createTheme:U,css:F,getCssText:A,globalCss:L,globalCssConfig:$,keyframes:_,media:W,mergedThemeMap:H,preloadTheme:I,sanitizedPrefix:D,theme:w,utils:G,validatedTheme:Q,warmCache:B}}function F4(J){let $=t0(J),q,X,Y;if(J.themes){let G={};for(let[H,F]of Object.entries(J.themes))G[H]=$.createTheme(F);let{Provider:D,ThemeContext:Q,ThemeManagementContext:W}=R0(G,$.validatedTheme,$.sanitizedPrefix,$.globalCssConfig,$.globalCss);Y=Q,q=D,X=M0(W)}let Z=B0($.validatedTheme,$.sanitizedPrefix,$.media,$.utils,$.mergedThemeMap,Y);return{config:$.config,createTheme:$.createTheme,css:$.css,getCssText:$.getCssText,globalCss:$.globalCss,keyframes:$.keyframes,preloadTheme:$.preloadTheme,Provider:q,styled:Z,theme:$.theme,useTheme:X,warmCache:$.warmCache}}export{t0 as createStoopBase,F4 as createStoop};
1
+ /**
2
+ * Client-side entry point for creating Stoop instances.
3
+ * Includes React-based APIs: styled(), Provider, useTheme.
4
+ *
5
+ * NOTE: This file imports from "use client" modules (api/styled, api/theme-provider)
6
+ * making it client-side only. For server-side usage, import from "stoop/ssr".
7
+ */
8
+ import { createStyledFunction } from "./api/styled"; // "use client" module
9
+ import { createProvider, createUseThemeHook } from "./api/theme-provider"; // "use client" module
10
+ import { createStoopBase } from "./create-stoop-internal"; // Server-safe module
11
+ /**
12
+ * Creates a Stoop instance with the provided configuration.
13
+ * Includes all APIs: styled, Provider, useTheme, etc.
14
+ *
15
+ * @param config - Configuration object containing theme, media queries, utilities, and optional prefix/themeMap
16
+ * @returns StoopInstance with all API functions
17
+ */
18
+ export function createStoop(config) {
19
+ const base = createStoopBase(config);
20
+ let Provider;
21
+ let useTheme;
22
+ let themeContext;
23
+ if (config.themes) {
24
+ const mergedThemesForProvider = {};
25
+ for (const [themeName, themeOverride] of Object.entries(config.themes)) {
26
+ mergedThemesForProvider[themeName] = base.createTheme(themeOverride);
27
+ }
28
+ const { Provider: ProviderComponent, ThemeContext, ThemeManagementContext, } = createProvider(mergedThemesForProvider, base.validatedTheme, base.sanitizedPrefix, base.globalCssConfig, base.globalCss);
29
+ themeContext = ThemeContext;
30
+ Provider = ProviderComponent;
31
+ useTheme = createUseThemeHook(ThemeManagementContext);
32
+ }
33
+ const styled = createStyledFunction(base.validatedTheme, base.sanitizedPrefix, base.media, base.utils, base.mergedThemeMap, themeContext);
34
+ return {
35
+ config: base.config,
36
+ createTheme: base.createTheme,
37
+ css: base.css,
38
+ getCssText: base.getCssText,
39
+ globalCss: base.globalCss,
40
+ keyframes: base.keyframes,
41
+ preloadTheme: base.preloadTheme,
42
+ Provider,
43
+ styled,
44
+ theme: base.theme,
45
+ useTheme,
46
+ warmCache: base.warmCache,
47
+ };
48
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Main entry point for Stoop
3
+ * Re-exports createStoop and all types
4
+ */
5
+ export { createStoop } from "./create-stoop";
6
+ export type { CSS, ComponentProps, DefaultTheme, StoopConfig, StoopInstance, Theme, ThemeScale, UtilityFunction, VariantProps, StyledComponent, StyledFunction, CSSFunction, GlobalCSSFunction, KeyframesFunction, CreateThemeFunction, ProviderProps, ThemeManagementContextValue, ThemeContextValue, } from "./types";
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Main entry point for Stoop
3
+ * Re-exports createStoop and all types
4
+ */
5
+ export { createStoop } from "./create-stoop";