@frontfriend/tailwind 2.5.4 → 2.6.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
@@ -1,2 +1,2 @@
1
- var o=typeof window<"u"&&typeof window.document<"u",u=typeof process<"u"&&process.versions&&process.versions.node,i=function(){return o&&console.warn("[FrontFriend] The Tailwind plugin cannot be used directly in browser environments"),{}};function p(e){return!e||typeof e!="object"?new Proxy({},{get(n,_){return new Proxy({},{get(F,f){return new Proxy({},{get(){return""}})}})}}):e}var r=null,t=null;function s(){if(typeof __FF_CONFIG__<"u")return __FF_CONFIG__;if(typeof process<"u"&&process.env){if(process.env.NEXT_PUBLIC_FF_CONFIG)try{return JSON.parse(process.env.NEXT_PUBLIC_FF_CONFIG)}catch{console.warn("[FrontFriend] Failed to parse NEXT_PUBLIC_FF_CONFIG from environment")}if(process.env.__FF_CONFIG__)try{return JSON.parse(process.env.__FF_CONFIG__)}catch{console.warn("[FrontFriend] Failed to parse __FF_CONFIG__ from environment")}}return o&&window.__FF_CONFIG__?window.__FF_CONFIG__:null}function c(){if(typeof __FF_ICONS__<"u")return __FF_ICONS__;if(typeof process<"u"&&process.env){if(process.env.NEXT_PUBLIC_FF_ICONS)try{return JSON.parse(process.env.NEXT_PUBLIC_FF_ICONS)}catch{console.warn("[FrontFriend] Failed to parse NEXT_PUBLIC_FF_ICONS from environment")}if(process.env.__FF_ICONS__)try{return JSON.parse(process.env.__FF_ICONS__)}catch{console.warn("[FrontFriend] Failed to parse __FF_ICONS__ from environment")}}return o&&window.__FF_ICONS__?window.__FF_ICONS__:null}var d=new Proxy({},{get(e,n){return r||(r=s()),r&&n in r?r[n]:new Proxy({},{get(_,F){return new Proxy({},{get(){return""}})}})}}),N=new Proxy({},{get(e,n){return t||(t=c()),t&&n in t?t[n]:null}}),a=i;export{d as config,a as default,p as ffdc,N as iconSet};
1
+ var u=typeof window<"u"&&typeof window.document<"u",F=typeof process<"u"&&process.versions&&process.versions.node,f=function(){return u&&console.warn("[FrontFriend] The Tailwind plugin cannot be used directly in browser environments"),{}};function c(){let t=new Map,e={get(s,i){return i===Symbol.toPrimitive||i==="valueOf"?()=>"":i==="toString"||i===Symbol.toStringTag?()=>"":i==="constructor"?Object:(t.has(i)||t.set(i,c()),t.get(i))},has(s,i){return!(typeof i=="symbol"&&i.toString().includes("nodejs.util.inspect"))},ownKeys(s){return[]},getOwnPropertyDescriptor(s,i){return{enumerable:!0,configurable:!0}}};return new Proxy({},e)}function a(t){return!t||typeof t!="object"?c():t}var r=null,n=null;function o(){if(typeof __FF_CONFIG__<"u")return __FF_CONFIG__;if(typeof process<"u"&&process.env){if(process.env.NEXT_PUBLIC_FF_CONFIG)try{return JSON.parse(process.env.NEXT_PUBLIC_FF_CONFIG)}catch{console.warn("[FrontFriend] Failed to parse NEXT_PUBLIC_FF_CONFIG from environment")}if(process.env.__FF_CONFIG__)try{return JSON.parse(process.env.__FF_CONFIG__)}catch{console.warn("[FrontFriend] Failed to parse __FF_CONFIG__ from environment")}}return u&&window.__FF_CONFIG__?window.__FF_CONFIG__:null}function _(){if(typeof __FF_ICONS__<"u")return __FF_ICONS__;if(typeof process<"u"&&process.env){if(process.env.NEXT_PUBLIC_FF_ICONS)try{return JSON.parse(process.env.NEXT_PUBLIC_FF_ICONS)}catch{console.warn("[FrontFriend] Failed to parse NEXT_PUBLIC_FF_ICONS from environment")}if(process.env.__FF_ICONS__)try{return JSON.parse(process.env.__FF_ICONS__)}catch{console.warn("[FrontFriend] Failed to parse __FF_ICONS__ from environment")}}return u&&window.__FF_ICONS__?window.__FF_ICONS__:null}var l=new Proxy({},{_proxyCache:new Map,get(t,e){return e===Symbol.toPrimitive||e==="valueOf"?()=>"":e==="toString"||e===Symbol.toStringTag?()=>"[object Object]":e==="constructor"?Object:(r||(r=o()),r&&e in r?r[e]:(this._proxyCache.has(e)||this._proxyCache.set(e,c()),this._proxyCache.get(e)))},has(t,e){return r||(r=o()),r?e in r:!0},ownKeys(t){return r||(r=o()),r?Object.keys(r):[]},getOwnPropertyDescriptor(t,e){return r||(r=o()),r&&e in r?Object.getOwnPropertyDescriptor(r,e):{enumerable:!0,configurable:!0}}}),d=new Proxy({},{get(t,e){return e===Symbol.toPrimitive||e==="valueOf"?()=>"":e==="toString"||e===Symbol.toStringTag?()=>"[object Object]":e==="constructor"?Object:(n||(n=_()),n&&e in n?n[e]:null)},has(t,e){return n||(n=_()),n?e in n:!1},ownKeys(t){return n||(n=_()),n?Object.keys(n):[]},getOwnPropertyDescriptor(t,e){if(n||(n=_()),n&&e in n)return Object.getOwnPropertyDescriptor(n,e)}}),O=f;export{l as config,O as default,a as ffdc,d as iconSet};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../index.mjs"],
4
- "sourcesContent": ["// ES Module wrapper for frontfriend-tailwind\n// This file provides ES module exports for browser environments\n\n// Determine environment\nconst isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst isNode = typeof process !== 'undefined' && process.versions && process.versions.node;\n\n// Default plugin stub for browser\nconst plugin = function() {\n if (isBrowser) {\n console.warn('[FrontFriend] The Tailwind plugin cannot be used directly in browser environments');\n }\n return {};\n};\n\n// The ffdc function - with graceful fallback for SSR\nexport function ffdc(config) {\n // During SSR or initial load, config might not be available yet\n // Return a proxy that provides empty objects/strings for any property access\n if (!config || typeof config !== 'object') {\n return new Proxy({}, {\n get(target, prop) {\n // Return another proxy for nested property access\n return new Proxy({}, {\n get(target2, prop2) {\n // For deeply nested properties, return empty string or another proxy\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n });\n }\n \n return config;\n}\n\n// In browser environments, config and iconSet must be provided by the build system\n// (e.g., Vite plugin, webpack plugin, etc.) or loaded from a global variable\nlet _config = null;\nlet _iconSet = null;\n\n// Function to get config - tries multiple sources\nfunction getConfig() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n // Try Next.js environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env) {\n // Try NEXT_PUBLIC_ prefixed version first (Next.js requirement)\n if (process.env.NEXT_PUBLIC_FF_CONFIG) {\n try {\n return JSON.parse(process.env.NEXT_PUBLIC_FF_CONFIG);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse NEXT_PUBLIC_FF_CONFIG from environment');\n }\n }\n // Fallback to __ prefixed version for non-Next.js environments\n if (process.env.__FF_CONFIG__) {\n try {\n return JSON.parse(process.env.__FF_CONFIG__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_CONFIG__ from environment');\n }\n }\n }\n // Try window global\n if (isBrowser && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n return null;\n}\n\n// Function to get icons - tries multiple sources\nfunction getIcons() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n // Try Next.js environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env) {\n // Try NEXT_PUBLIC_ prefixed version first (Next.js requirement)\n if (process.env.NEXT_PUBLIC_FF_ICONS) {\n try {\n return JSON.parse(process.env.NEXT_PUBLIC_FF_ICONS);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse NEXT_PUBLIC_FF_ICONS from environment');\n }\n }\n // Fallback to __ prefixed version for non-Next.js environments\n if (process.env.__FF_ICONS__) {\n try {\n return JSON.parse(process.env.__FF_ICONS__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_ICONS__ from environment');\n }\n }\n }\n // Try window global\n if (isBrowser && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n return null;\n}\n\n// Export config - returns empty object if not loaded\nexport const config = new Proxy({}, {\n get(target, prop) {\n // Try to get config if not already loaded\n if (!_config) {\n _config = getConfig();\n }\n \n if (_config && prop in _config) {\n return _config[prop];\n }\n \n // Return a proxy that provides empty objects for any nested access\n // This prevents errors when accessing nested properties during SSR\n return new Proxy({}, {\n get(target2, prop2) {\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n});\n\n// Export iconSet - returns null if not loaded\nexport const iconSet = new Proxy({}, {\n get(target, prop) {\n // Try to get icons if not already loaded\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n \n if (_iconSet && prop in _iconSet) {\n return _iconSet[prop];\n }\n return null;\n }\n});\n\n// Default export\nexport default plugin;"],
5
- "mappings": "AAIA,IAAMA,EAAY,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,IACxEC,EAAS,OAAO,QAAY,KAAe,QAAQ,UAAY,QAAQ,SAAS,KAGhFC,EAAS,UAAW,CACxB,OAAIF,GACF,QAAQ,KAAK,mFAAmF,EAE3F,CAAC,CACV,EAGO,SAASG,EAAKC,EAAQ,CAG3B,MAAI,CAACA,GAAU,OAAOA,GAAW,SACxB,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAAQC,EAAM,CAEhB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAASC,EAAO,CAElB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,KAAM,CACJ,MAAO,EACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGIJ,CACT,CAIA,IAAIK,EAAU,KACVC,EAAW,KAGf,SAASC,GAAY,CAEnB,GAAI,OAAO,cAAkB,IAC3B,OAAO,cAGT,GAAI,OAAO,QAAY,KAAe,QAAQ,IAAK,CAEjD,GAAI,QAAQ,IAAI,sBACd,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,qBAAqB,CACrD,MAAY,CACV,QAAQ,KAAK,sEAAsE,CACrF,CAGF,GAAI,QAAQ,IAAI,cACd,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,aAAa,CAC7C,MAAY,CACV,QAAQ,KAAK,8DAA8D,CAC7E,CAEJ,CAEA,OAAIX,GAAa,OAAO,cACf,OAAO,cAET,IACT,CAGA,SAASY,GAAW,CAElB,GAAI,OAAO,aAAiB,IAC1B,OAAO,aAGT,GAAI,OAAO,QAAY,KAAe,QAAQ,IAAK,CAEjD,GAAI,QAAQ,IAAI,qBACd,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CACpD,MAAY,CACV,QAAQ,KAAK,qEAAqE,CACpF,CAGF,GAAI,QAAQ,IAAI,aACd,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,YAAY,CAC5C,MAAY,CACV,QAAQ,KAAK,6DAA6D,CAC5E,CAEJ,CAEA,OAAIZ,GAAa,OAAO,aACf,OAAO,aAET,IACT,CAGO,IAAMI,EAAS,IAAI,MAAM,CAAC,EAAG,CAClC,IAAIC,EAAQC,EAAM,CAMhB,OAJKG,IACHA,EAAUE,EAAU,GAGlBF,GAAWH,KAAQG,EACdA,EAAQH,CAAI,EAKd,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAASC,EAAO,CAClB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,KAAM,CACJ,MAAO,EACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGYK,EAAU,IAAI,MAAM,CAAC,EAAG,CACnC,IAAIR,EAAQC,EAAM,CAMhB,OAJKI,IACHA,EAAWE,EAAS,GAGlBF,GAAYJ,KAAQI,EACfA,EAASJ,CAAI,EAEf,IACT,CACF,CAAC,EAGMQ,EAAQZ",
6
- "names": ["isBrowser", "isNode", "plugin", "ffdc", "config", "target", "prop", "target2", "prop2", "_config", "_iconSet", "getConfig", "getIcons", "iconSet", "frontfriend_tailwind_default"]
4
+ "sourcesContent": ["// ES Module wrapper for frontfriend-tailwind\n// This file provides ES module exports for browser environments\n\n// Determine environment\nconst isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst isNode = typeof process !== 'undefined' && process.versions && process.versions.node;\n\n// Default plugin stub for browser\nconst plugin = function() {\n if (isBrowser) {\n console.warn('[FrontFriend] The Tailwind plugin cannot be used directly in browser environments');\n }\n return {};\n};\n\n/**\n * Creates a deep proxy that gracefully handles arbitrary nested property access\n * without throwing errors. This is essential for SSR and build-time scenarios\n * where configuration might not be loaded yet.\n *\n * Features:\n * - Infinite depth access: config.a.b.c.d.e never crashes\n * - Referential equality: config.a === config.a (memoized)\n * - Iteration support: Object.keys(), spread operator, for...in\n * - Type coercion: Works with toString, valueOf, Symbol.toPrimitive\n * - 'in' operator: 'property' in config returns true\n *\n * @returns {Proxy} A proxy object that handles any property access safely\n *\n * @example\n * const config = createDeepProxy();\n * const value = config.sidebar.root.wrapper.base; // Never crashes\n * config.a === config.a; // true (referential equality)\n * 'anything' in config; // true\n * Object.keys(config); // []\n */\nfunction createDeepProxy() {\n // Cache for memoization - ensures referential equality\n // This is critical for React dependency arrays and equality checks\n const cache = new Map();\n\n const handler = {\n /**\n * Handles property access with memoization\n * Ensures config.a === config.a for referential equality\n */\n get(target, prop) {\n // Handle special cases for type coercion and inspection\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return () => '';\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return () => '';\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Return cached proxy for same property to maintain referential equality\n // This prevents issues with React hooks and memoization\n if (!cache.has(prop)) {\n cache.set(prop, createDeepProxy());\n }\n return cache.get(prop);\n },\n\n /**\n * Handles 'in' operator\n * Makes 'property' in config return true for any property\n */\n has(target, prop) {\n // Return true for all properties except internal symbols\n if (typeof prop === 'symbol' && prop.toString().includes('nodejs.util.inspect')) {\n return false;\n }\n return true;\n },\n\n /**\n * Handles Object.keys(), Object.getOwnPropertyNames(), for...in\n * Returns empty array since proxy represents missing/unknown config\n */\n ownKeys(target) {\n return [];\n },\n\n /**\n * Handles Object.getOwnPropertyDescriptor()\n * Required for proper iteration support with ownKeys\n */\n getOwnPropertyDescriptor(target, prop) {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n };\n\n return new Proxy({}, handler);\n}\n\n/**\n * FrontFriend Design Config (ffdc) - Safe config wrapper with SSR support\n *\n * Wraps configuration objects to prevent crashes during SSR or when config\n * is not yet loaded. Returns actual config if valid, or a deep proxy fallback.\n *\n * This is the recommended way to access config in components to ensure\n * they work during both build-time (SSR) and runtime.\n *\n * @param {Object|null|undefined} config - The configuration object to wrap\n * @returns {Object|Proxy} The config object or a safe deep proxy\n *\n * @example\n * import { config, ffdc } from '@frontfriend/tailwind';\n *\n * // Safe access during SSR - never crashes\n * const sidebarConfig = ffdc(config || {}).sidebar;\n * const className = sidebarConfig.root.wrapper.base; // Always safe\n *\n * @example\n * // In a React component\n * function Sidebar() {\n * const cfg = ffdc(config).sidebar;\n * return <div className={cfg.root.base}>...</div>;\n * }\n */\nexport function ffdc(config) {\n // During SSR or initial load, config might not be available yet\n // Return a deep proxy that handles any property access without crashing\n if (!config || typeof config !== 'object') {\n return createDeepProxy();\n }\n\n return config;\n}\n\n// In browser environments, config and iconSet must be provided by the build system\n// (e.g., Vite plugin, webpack plugin, etc.) or loaded from a global variable\nlet _config = null;\nlet _iconSet = null;\n\n// Function to get config - tries multiple sources\nfunction getConfig() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n // Try Next.js environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env) {\n // Try NEXT_PUBLIC_ prefixed version first (Next.js requirement)\n if (process.env.NEXT_PUBLIC_FF_CONFIG) {\n try {\n return JSON.parse(process.env.NEXT_PUBLIC_FF_CONFIG);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse NEXT_PUBLIC_FF_CONFIG from environment');\n }\n }\n // Fallback to __ prefixed version for non-Next.js environments\n if (process.env.__FF_CONFIG__) {\n try {\n return JSON.parse(process.env.__FF_CONFIG__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_CONFIG__ from environment');\n }\n }\n }\n // Try window global\n if (isBrowser && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n return null;\n}\n\n// Function to get icons - tries multiple sources\nfunction getIcons() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n // Try Next.js environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env) {\n // Try NEXT_PUBLIC_ prefixed version first (Next.js requirement)\n if (process.env.NEXT_PUBLIC_FF_ICONS) {\n try {\n return JSON.parse(process.env.NEXT_PUBLIC_FF_ICONS);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse NEXT_PUBLIC_FF_ICONS from environment');\n }\n }\n // Fallback to __ prefixed version for non-Next.js environments\n if (process.env.__FF_ICONS__) {\n try {\n return JSON.parse(process.env.__FF_ICONS__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_ICONS__ from environment');\n }\n }\n }\n // Try window global\n if (isBrowser && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n return null;\n}\n\n/**\n * Main config export with lazy loading and memoization\n *\n * This proxy:\n * - Lazily loads config from multiple sources (globals, env vars, window)\n * - Returns actual config values when available\n * - Falls back to deep proxy for missing properties\n * - Maintains referential equality for the same property access\n * - Supports 'in' operator and iteration\n *\n * @example\n * import { config } from '@frontfriend/tailwind';\n * const sidebarConfig = config.sidebar; // Loads config lazily\n * config.sidebar === config.sidebar; // true (memoized)\n */\nexport const config = new Proxy({}, {\n // Cache for memoized deep proxies\n _proxyCache: new Map(),\n\n get(target, prop) {\n // Handle special cases for console.log, JSON.stringify, etc.\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return () => '';\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return () => '[object Object]';\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Try to get config if not already loaded\n if (!_config) {\n _config = getConfig();\n }\n\n // Return actual config value if it exists\n if (_config && prop in _config) {\n return _config[prop];\n }\n\n // Return memoized deep proxy for missing properties\n // This ensures config.missing === config.missing (referential equality)\n if (!this._proxyCache.has(prop)) {\n this._proxyCache.set(prop, createDeepProxy());\n }\n return this._proxyCache.get(prop);\n },\n\n /**\n * Handles 'in' operator\n * Returns true if property exists in loaded config, or true for any property\n * to prevent crashes during property checks\n */\n has(target, prop) {\n // Try to load config first\n if (!_config) {\n _config = getConfig();\n }\n\n // If config is loaded, check if property exists\n if (_config) {\n return prop in _config;\n }\n\n // If config not loaded, return true to allow safe access\n return true;\n },\n\n /**\n * Handles Object.keys(), Object.getOwnPropertyNames()\n * Returns actual config keys if loaded, empty array otherwise\n */\n ownKeys(target) {\n if (!_config) {\n _config = getConfig();\n }\n\n return _config ? Object.keys(_config) : [];\n },\n\n /**\n * Handles Object.getOwnPropertyDescriptor()\n * Required for proper iteration support\n */\n getOwnPropertyDescriptor(target, prop) {\n if (!_config) {\n _config = getConfig();\n }\n\n if (_config && prop in _config) {\n return Object.getOwnPropertyDescriptor(_config, prop);\n }\n\n return {\n enumerable: true,\n configurable: true,\n };\n },\n});\n\n/**\n * Icon set export with lazy loading\n *\n * This proxy:\n * - Lazily loads icons from multiple sources (globals, env vars, window)\n * - Returns actual icon values when available\n * - Returns null for missing icons (allowing graceful fallbacks)\n * - Supports 'in' operator to check icon availability\n *\n * @example\n * import { iconSet } from '@frontfriend/tailwind';\n * const closeIcon = iconSet.sidebar?.close; // Safely access with optional chaining\n * if ('close' in iconSet.sidebar) { ... } // Check if icon exists\n */\nexport const iconSet = new Proxy({}, {\n get(target, prop) {\n // Handle special cases for type coercion\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return () => '';\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return () => '[object Object]';\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Try to get icons if not already loaded\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n\n // Return actual icon value if it exists\n if (_iconSet && prop in _iconSet) {\n return _iconSet[prop];\n }\n\n // Return null for missing icons (allows graceful fallbacks)\n return null;\n },\n\n /**\n * Handles 'in' operator for icon existence checks\n */\n has(target, prop) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n\n return _iconSet ? prop in _iconSet : false;\n },\n\n /**\n * Handles Object.keys() for iconSet\n */\n ownKeys(target) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n\n return _iconSet ? Object.keys(_iconSet) : [];\n },\n\n /**\n * Handles Object.getOwnPropertyDescriptor() for iconSet\n */\n getOwnPropertyDescriptor(target, prop) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n\n if (_iconSet && prop in _iconSet) {\n return Object.getOwnPropertyDescriptor(_iconSet, prop);\n }\n\n return undefined;\n },\n});\n\n// Default export\nexport default plugin;"],
5
+ "mappings": "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",
6
+ "names": ["isBrowser", "isNode", "plugin", "createDeepProxy", "cache", "handler", "target", "prop", "ffdc", "config", "_config", "_iconSet", "getConfig", "getIcons", "iconSet", "frontfriend_tailwind_default"]
7
7
  }
package/dist/runtime.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(){"use strict";let i=function(){return typeof window<"u"&&window.__FF_CONFIG__?window.__FF_CONFIG__:typeof global<"u"&&global.__FF_CONFIG__?global.__FF_CONFIG__:null},n=function(){return typeof window<"u"&&window.__FF_ICONS__?window.__FF_ICONS__:typeof global<"u"&&global.__FF_ICONS__?global.__FF_ICONS__:null},e={config:i(),iconSet:n(),getIcon:function(t){let o=n();return o&&o[t]?o[t]:null},refresh:function(){this.config=i(),this.iconSet=n()}};typeof define=="function"&&define.amd?define([],function(){return e}):typeof module<"u"&&typeof module.exports<"u"&&(module.exports=e),typeof window<"u"&&(window.FrontFriend=e)})();
1
+ (function(){"use strict";function c(){let r=new Map,t={get:function(g,i){return i===Symbol.toPrimitive||i==="valueOf"?function(){return""}:i==="toString"||i===Symbol.toStringTag?function(){return""}:i==="constructor"?Object:(r.has(i)||r.set(i,c()),r.get(i))},has:function(g,i){return!(typeof i=="symbol"&&i.toString().includes("nodejs.util.inspect"))},ownKeys:function(g){return[]},getOwnPropertyDescriptor:function(g,i){return{enumerable:!0,configurable:!0}}};return new Proxy({},t)}let n=null,e=null,u=function(){return typeof window<"u"&&window.__FF_CONFIG__?window.__FF_CONFIG__:typeof global<"u"&&global.__FF_CONFIG__?global.__FF_CONFIG__:null},o=function(){return typeof window<"u"&&window.__FF_ICONS__?window.__FF_ICONS__:typeof global<"u"&&global.__FF_ICONS__?global.__FF_ICONS__:null},f=new Map,_=new Proxy({},{get:function(r,t){return t===Symbol.toPrimitive||t==="valueOf"?function(){return""}:t==="toString"||t===Symbol.toStringTag?function(){return"[object Object]"}:t==="constructor"?Object:(n||(n=u()),n&&t in n?n[t]:(f.has(t)||f.set(t,c()),f.get(t)))},has:function(r,t){return n||(n=u()),n?t in n:!0},ownKeys:function(r){return n||(n=u()),n?Object.keys(n):[]},getOwnPropertyDescriptor:function(r,t){return n||(n=u()),n&&t in n?Object.getOwnPropertyDescriptor(n,t):{enumerable:!0,configurable:!0}}}),a=new Proxy({},{get:function(r,t){return t===Symbol.toPrimitive||t==="valueOf"?function(){return""}:t==="toString"||t===Symbol.toStringTag?function(){return"[object Object]"}:t==="constructor"?Object:(e||(e=o()),e&&t in e?e[t]:null)},has:function(r,t){return e||(e=o()),e?t in e:!1},ownKeys:function(r){return e||(e=o()),e?Object.keys(e):[]},getOwnPropertyDescriptor:function(r,t){if(e||(e=o()),e&&t in e)return Object.getOwnPropertyDescriptor(e,t)}});function s(r){return!r||typeof r!="object"?c():r}let l={config:_,iconSet:a,ffdc:s,getIcon:function(r){return a[r]},refresh:function(){n=null,e=null,f.clear()}};typeof define=="function"&&define.amd?define([],function(){return l}):typeof module<"u"&&typeof module.exports<"u"&&(module.exports=l),typeof window<"u"&&(window.FrontFriend=l)})();
2
2
  //# sourceMappingURL=runtime.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../runtime.js"],
4
- "sourcesContent": ["(function() {\n 'use strict';\n\n // Simple configuration reader\n const getConfig = function() {\n // Check if running in browser\n if (typeof window !== 'undefined' && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n // Check if in Node.js environment (for SSR)\n if (typeof global !== 'undefined' && global.__FF_CONFIG__) {\n return global.__FF_CONFIG__;\n }\n return null;\n };\n \n const getIcons = function() {\n // Check if running in browser\n if (typeof window !== 'undefined' && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n // Check if in Node.js environment (for SSR)\n if (typeof global !== 'undefined' && global.__FF_ICONS__) {\n return global.__FF_ICONS__;\n }\n return null;\n };\n\n // Public API\n const FrontFriend = {\n config: getConfig(),\n iconSet: getIcons(),\n \n // Helper method to get a specific icon\n getIcon: function(name) {\n const icons = getIcons();\n if (icons && icons[name]) {\n return icons[name];\n }\n return null;\n },\n \n // Helper method to refresh config (useful for dynamic updates)\n refresh: function() {\n this.config = getConfig();\n this.iconSet = getIcons();\n }\n };\n\n // Detect environment and export accordingly\n \n // AMD (RequireJS) - check first since it might also have module defined\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return FrontFriend;\n });\n }\n // CommonJS (Node.js)\n else if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = FrontFriend;\n }\n \n // Always attach to window in browser environment (even with module loaders)\n if (typeof window !== 'undefined') {\n window.FrontFriend = FrontFriend;\n }\n\n})();"],
5
- "mappings": "CAAC,UAAW,CACV,aAGA,IAAMA,EAAY,UAAW,CAE3B,OAAI,OAAO,OAAW,KAAe,OAAO,cACnC,OAAO,cAGZ,OAAO,OAAW,KAAe,OAAO,cACnC,OAAO,cAET,IACT,EAEMC,EAAW,UAAW,CAE1B,OAAI,OAAO,OAAW,KAAe,OAAO,aACnC,OAAO,aAGZ,OAAO,OAAW,KAAe,OAAO,aACnC,OAAO,aAET,IACT,EAGMC,EAAc,CAClB,OAAQF,EAAU,EAClB,QAASC,EAAS,EAGlB,QAAS,SAASE,EAAM,CACtB,IAAMC,EAAQH,EAAS,EACvB,OAAIG,GAASA,EAAMD,CAAI,EACdC,EAAMD,CAAI,EAEZ,IACT,EAGA,QAAS,UAAW,CAClB,KAAK,OAASH,EAAU,EACxB,KAAK,QAAUC,EAAS,CAC1B,CACF,EAKI,OAAO,QAAW,YAAc,OAAO,IACzC,OAAO,CAAC,EAAG,UAAW,CACpB,OAAOC,CACT,CAAC,EAGM,OAAO,OAAW,KAAe,OAAO,OAAO,QAAY,MAClE,OAAO,QAAUA,GAIf,OAAO,OAAW,MACpB,OAAO,YAAcA,EAGzB,GAAG",
6
- "names": ["getConfig", "getIcons", "FrontFriend", "name", "icons"]
4
+ "sourcesContent": ["(function() {\n 'use strict';\n\n /**\n * Creates a deep proxy that handles arbitrary nested property access\n * without throwing errors. Essential for SSR and build-time scenarios.\n */\n function createDeepProxy() {\n const cache = new Map();\n\n const handler = {\n get: function(target, prop) {\n // Handle special cases for type coercion\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return function() { return ''; };\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return function() { return ''; };\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Return cached proxy for referential equality\n if (!cache.has(prop)) {\n cache.set(prop, createDeepProxy());\n }\n return cache.get(prop);\n },\n\n has: function(target, prop) {\n // Return true for all properties except internal symbols\n if (typeof prop === 'symbol' && prop.toString().includes('nodejs.util.inspect')) {\n return false;\n }\n return true;\n },\n\n ownKeys: function(target) {\n return [];\n },\n\n getOwnPropertyDescriptor: function(target, prop) {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n };\n\n return new Proxy({}, handler);\n }\n\n // Configuration loader\n let _config = null;\n let _iconSet = null;\n\n const getConfig = function() {\n // Check if running in browser\n if (typeof window !== 'undefined' && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n // Check if in Node.js environment (for SSR)\n if (typeof global !== 'undefined' && global.__FF_CONFIG__) {\n return global.__FF_CONFIG__;\n }\n return null;\n };\n\n const getIcons = function() {\n // Check if running in browser\n if (typeof window !== 'undefined' && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n // Check if in Node.js environment (for SSR)\n if (typeof global !== 'undefined' && global.__FF_ICONS__) {\n return global.__FF_ICONS__;\n }\n return null;\n };\n\n // Config proxy with lazy loading and memoization\n const configProxyCache = new Map();\n const configProxy = new Proxy({}, {\n get: function(target, prop) {\n // Handle special cases\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return function() { return ''; };\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return function() { return '[object Object]'; };\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Lazy load config\n if (!_config) {\n _config = getConfig();\n }\n\n // Return actual value if exists\n if (_config && prop in _config) {\n return _config[prop];\n }\n\n // Return memoized deep proxy for missing properties\n if (!configProxyCache.has(prop)) {\n configProxyCache.set(prop, createDeepProxy());\n }\n return configProxyCache.get(prop);\n },\n\n has: function(target, prop) {\n if (!_config) {\n _config = getConfig();\n }\n return _config ? prop in _config : true;\n },\n\n ownKeys: function(target) {\n if (!_config) {\n _config = getConfig();\n }\n return _config ? Object.keys(_config) : [];\n },\n\n getOwnPropertyDescriptor: function(target, prop) {\n if (!_config) {\n _config = getConfig();\n }\n if (_config && prop in _config) {\n return Object.getOwnPropertyDescriptor(_config, prop);\n }\n return {\n enumerable: true,\n configurable: true,\n };\n },\n });\n\n // IconSet proxy with lazy loading\n const iconSetProxy = new Proxy({}, {\n get: function(target, prop) {\n // Handle special cases\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return function() { return ''; };\n }\n if (prop === 'toString' || prop === Symbol.toStringTag) {\n return function() { return '[object Object]'; };\n }\n if (prop === 'constructor') {\n return Object;\n }\n\n // Lazy load icons\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n\n // Return actual icon if exists\n if (_iconSet && prop in _iconSet) {\n return _iconSet[prop];\n }\n\n return null;\n },\n\n has: function(target, prop) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n return _iconSet ? prop in _iconSet : false;\n },\n\n ownKeys: function(target) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n return _iconSet ? Object.keys(_iconSet) : [];\n },\n\n getOwnPropertyDescriptor: function(target, prop) {\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n if (_iconSet && prop in _iconSet) {\n return Object.getOwnPropertyDescriptor(_iconSet, prop);\n }\n return undefined;\n },\n });\n\n /**\n * FrontFriend Design Config (ffdc) - Safe config wrapper\n * Returns actual config if valid, or a deep proxy fallback for SSR safety\n */\n function ffdc(config) {\n if (!config || typeof config !== 'object') {\n return createDeepProxy();\n }\n return config;\n }\n\n // Public API\n const FrontFriend = {\n config: configProxy,\n iconSet: iconSetProxy,\n ffdc: ffdc,\n\n // Helper method to get a specific icon\n getIcon: function(name) {\n return iconSetProxy[name];\n },\n\n // Helper method to refresh config (useful for dynamic updates)\n refresh: function() {\n _config = null;\n _iconSet = null;\n configProxyCache.clear();\n }\n };\n\n // Detect environment and export accordingly\n \n // AMD (RequireJS) - check first since it might also have module defined\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return FrontFriend;\n });\n }\n // CommonJS (Node.js)\n else if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = FrontFriend;\n }\n \n // Always attach to window in browser environment (even with module loaders)\n if (typeof window !== 'undefined') {\n window.FrontFriend = FrontFriend;\n }\n\n})();"],
5
+ "mappings": "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",
6
+ "names": ["createDeepProxy", "cache", "handler", "target", "prop", "_config", "_iconSet", "getConfig", "getIcons", "configProxyCache", "configProxy", "iconSetProxy", "ffdc", "config", "FrontFriend", "name"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontfriend/tailwind",
3
- "version": "2.5.4",
3
+ "version": "2.6.0",
4
4
  "description": "Design token management for Tailwind CSS",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -39,11 +39,6 @@
39
39
  "default": "./dist/ffdc.js"
40
40
  }
41
41
  },
42
- "scripts": {
43
- "test": "jest",
44
- "build": "node scripts/build.js",
45
- "prepublishOnly": "npm run build"
46
- },
47
42
  "keywords": [
48
43
  "tailwindcss",
49
44
  "design-tokens",
@@ -73,5 +68,9 @@
73
68
  "jest": "^29.0.0",
74
69
  "esbuild": "^0.19.0",
75
70
  "glob": "^10.0.0"
71
+ },
72
+ "scripts": {
73
+ "test": "jest",
74
+ "build": "node scripts/build.js"
76
75
  }
77
- }
76
+ }