@tenoxui/moxie 0.3.0 → 0.3.1

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.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var Z=Object.defineProperty;var R=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var V=(P,s,e)=>s in P?Z(P,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):P[s]=e,W=(P,s)=>{for(var e in s||(s={}))z.call(s,e)&&V(P,e,s[e]);if(R)for(var e of R(s))_.call(s,e)&&V(P,e,s[e]);return P};Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class S{constructor({property:s={},values:e={},classes:t={},aliases:n={}}={}){this.property=W({moxie:({key:r})=>r},s),this.values=e,this.classes=t,this.aliases=n}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const e=s.match(/^(webkit|moz|ms|o)/);if(e){const t=e[0];return`-${t}${s.slice(t.length).replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const e=new Set;return Object.entries(s).forEach(([t,n])=>{n&&typeof n=="object"&&Object.keys(n).forEach(r=>{e.add(r)})}),Array.from(e)}getTypePrefixes(s=[]){const e=this.property,t=this.classes,n=Object.keys(e);if(!t)return[...n,...s].sort((i,l)=>l.length-i.length).join("|");const o=[...this.getAllClassNames(t)];return[...n,...o,...s].sort((i,l)=>l.length-i.length).join("|")}generateClassNameRegEx(s){const e=this.getTypePrefixes(s),t="\\[[^\\]]+\\]",n="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+t+")|"+t+"|"+n+"|"+r+"):)?",i=`(${e}|\\[[^\\]]+\\])`,l="(?:-)?",h="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+t+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))",f="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+t+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+i+l+h+f+a)}parse(s,e){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const t=this.generateClassNameRegEx(e),n=(s+"-dummy").match(t);if(!n)return null;const[,r,o,i,l,h,f]=n,a=i==="dummy"?"":i.replace("-dummy","");return[r,o,a,l||"",h,f]}processValue(s,e,t){if(!s)return"";const n=r=>r.replace(/\{([^}]+)\}/g,(o,i)=>{const l=this.values,h=l!==null?typeof l[t]=="object"?l[t][i]:l[i]:void 0;return typeof h=="string"?h:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[t]&&typeof this.values[t]=="object"&&this.values[t][s]||this.values[s]))return typeof this.values[t]=="object"&&this.values[t]!==null?this.values[t][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?n(r):r.startsWith("--")?`var(${r})`:r}return s+(e||"")}processShorthand(s="",e="",t="",n,r="",o="",i=!0){const l=this.property[s],h=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let f=null,a=e||"";const p=a.match(h);p&&(f=p[1].trim(),a=p[2].trim());let c;e.includes(f+":")?c=e.startsWith("(")?`(${a})`:`[${a}]`:c=e;const u=this.processValue(c,t,s),m=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const d=s.slice(1,-1).split(",").map(y=>y.trim()).map(y=>{const $=this.property[y]||y;return`${typeof $=="string"&&$.startsWith("--")?String($):this.toKebabCase(String($))}: ${u}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${i?"-":""}${e}${t}`}`,cssRules:d,value:null,prefix:n}}if(l){if(typeof l=="object"&&"property"in l&&"value"in l){const d=typeof l.property=="function"?l.property({value:t?e:u,unit:t,secondValue:o?r:m,secondUnit:o,key:f}):l.property,y=l.value;let $;if(typeof y=="function")$=y({value:t?e:u,unit:t,secondValue:o?r:m,secondUnit:o,key:f,property:d});else if(y&&typeof y=="string"){const C=l.group||s,A=this.processValue(c,t,C);console.log(c),$=this.values[c]||this.values[C][c]||c.includes("{")||y.includes("{")?this.parseValuePattern(C,y,A,"",m,""):u}else $=null;return{className:`${s}${e?`${i&&i?"-":""}${e}${t}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(d)||typeof d=="string"&&d.includes(":")?d:this.toKebabCase(String(d)),value:y===null?null:e.startsWith("[")?u:$,prefix:n}}const g=typeof l=="function"?l({value:t?e:u,unit:t,secondValue:o?r:m,secondUnit:o,key:f}):l;return{className:`${s}${e?(i?"-":"")+e+t:""}`,cssRules:Array.isArray(l)?g:typeof g=="string"&&g.startsWith("value:")?g.slice(6):this.toKebabCase(String(g)),value:typeof g=="string"&&g.startsWith("value:")?null:u,prefix:n}}return null}parseValuePattern(s,e,t,n,r,o){if(!e.includes("{0}")&&!e.includes("{1")&&!e.includes("||"))return e;const[i,l]=e.split("||").map(a=>a.trim()),h=this.processValue(t,n,s),f=this.processValue(r,o,s);if(e.includes("{0}")&&e.includes("{1")||e.includes("{1")){let a=i;if(t&&(a=a.replace("{0}",h)),e.includes("{1")){const p=a.match(/{1([^}]*)}/);if(e.includes("{1}"))r?a=r.startsWith("[")?f:a.replace("{1}",f):a=l;else if(p){const c=p[0],u=p[1].trim();let m=f;!m&&u.includes("|")?m=u.split("|")[1].trim():m||(m=""),a=t.startsWith("[")?h:a.replace(c,m)}}return t?a:l||i}else return t?t.startsWith("[")?h:i.replace("{0}",h):l||i}getParentClass(s){return Object.keys(this.classes).filter(e=>Object.prototype.hasOwnProperty.call(this.classes[e],s))}processCustomClass(s,e="",t="",n="",r="",o="",i=!0){if(!s)return null;const l=this.getParentClass(s);if(l.length>0){const h=l.map(p=>{const c=this.classes[p];if(!c)return"";const u=this.parseValuePattern(s,c[s]||"",e,t,r,o);return`${this.toKebabCase(String(p))}: ${u}`}).filter(Boolean).join("; "),f=s.slice(-(e+t).length),a=`${s}${e?`${i?"-":""}${e}${t}`:""}${r?`/${r}${o}`:""}`;return{className:e===f?s:a,cssRules:h,value:null,prefix:n}}return null}processAlias(s,e=""){const t=this.aliases[s];if(!t)return null;const n=t.split(" "),r=[];return n.forEach(o=>{const[i,l]=o.split(":"),h=l||i,f=l?i:void 0,a=this.parse(o),p=a||[f,h,"",""];if(!p)return;const[c,u,m,g,d,y]=p,$=this.processShorthand(u,m,g,void 0,d,y),b=this.processCustomClass(u,m,g,c,d,y);if(b){const{cssRules:C}=b;r.push(C);return}if($){const C=$.value!==null?`: ${$.value}`:"";Array.isArray($.cssRules)?$.cssRules.forEach(A=>{r.push(`${this.toKebabCase(A)}${C}`)}):r.push(`${$.cssRules}${C}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:e}}process(s){const e=Array.isArray(s)?s:s.split(/\s+/),t=[];return e.forEach(n=>{if(!n)return this;const[r,o]=n.split(":"),i=o||r,l=o?r:void 0,h=this.processAlias(i,l);if(h){const{className:A,cssRules:v}=h;t.push({className:A,cssRules:v,value:null,prefix:l});return}const f=this.parse(n),a=f||[l,i,"",""];if(!a)return this;const[p,c,u,m,g,d]=a,y=!n.includes((c||"")+(u||"")),$=this.getParentClass(`${c}${y?"-":""}${u}`).length>0?`${c}${y?"-":""}${u}`:c,b=this.processCustomClass($,u,m,p,g,d,y);if(b){const{className:A,cssRules:v,prefix:x}=b;t.push({className:A,cssRules:v,value:null,prefix:x});return}const C=this.processShorthand(c,u,m,p,g,d,y);if(C){const{className:A,cssRules:v,value:x,prefix:j}=C;t.push({className:A,cssRules:v,value:x,prefix:j})}}),t}}exports.TenoxUI=S;exports.default=S;
1
+ "use strict";var Z=Object.defineProperty;var R=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var V=(v,s,e)=>s in v?Z(v,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):v[s]=e,W=(v,s)=>{for(var e in s||(s={}))z.call(s,e)&&V(v,e,s[e]);if(R)for(var e of R(s))_.call(s,e)&&V(v,e,s[e]);return v};Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class S{constructor({property:s={},values:e={},classes:t={},aliases:i={}}={}){this.property=W({moxie:({key:r})=>r},s),this.values=e,this.classes=t,this.aliases=i}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const e=s.match(/^(webkit|moz|ms|o)/);if(e){const t=e[0];return`-${t}${s.slice(t.length).replace(/[A-Z]/g,i=>`-${i.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const e=new Set;return Object.entries(s).forEach(([t,i])=>{i&&typeof i=="object"&&Object.keys(i).forEach(r=>{e.add(r)})}),Array.from(e)}getTypePrefixes(s=[]){const e=this.property,t=this.classes,i=Object.keys(e);if(!t)return[...i,...s].sort((n,l)=>l.length-n.length).join("|");const o=[...this.getAllClassNames(t)];return[...i,...o,...s].sort((n,l)=>l.length-n.length).join("|")}generateClassNameRegEx(s){const e=this.getTypePrefixes(s),t="\\[[^\\]]+\\]",i="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+t+")|"+t+"|"+i+"|"+r+"):)?",n=`(${e}|\\[[^\\]]+\\])`,l="(?:-)?",h="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+t+"|"+r+"|"+i+"|(?:\\$[^\\s\\/]+))",f="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+t+"|"+r+"|"+i+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+n+l+h+f+a)}parse(s,e){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const t=this.generateClassNameRegEx(e),i=(s+"-dummy").match(t);if(!i)return null;const[,r,o,n,l,h,f]=i,a=n==="dummy"?"":n.replace("-dummy","");return[r,o,a,l||"",h,f]}processValue(s,e,t){if(!s)return"";const i=r=>r.replace(/\{([^}]+)\}/g,(o,n)=>{const l=this.values,h=l!==null?typeof l[t]=="object"?l[t][n]:l[n]:void 0;return typeof h=="string"?h:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[t]&&typeof this.values[t]=="object"&&this.values[t][s]||this.values[s]))return typeof this.values[t]=="object"&&this.values[t]!==null?this.values[t][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?i(r):r.startsWith("--")?`var(${r})`:r}return s+(e||"")}processShorthand(s="",e="",t="",i,r="",o="",n=!0){const l=this.property[s],h=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let f=null,a=e||"";const p=a.match(h);p&&(f=p[1].trim(),a=p[2].trim());let y;e.includes(f+":")?y=e.startsWith("(")?`(${a})`:`[${a}]`:y=e;const c=this.processValue(y,t,s),$=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const C=s.slice(1,-1).split(",").map(m=>m.trim()).map(m=>{const u=this.property[m]||m;return`${typeof u=="string"&&u.startsWith("--")?String(u):this.toKebabCase(String(u))}: ${c}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${n?"-":""}${e}${t}`}`,cssRules:C,value:null,prefix:i}}if(l){if(typeof l=="object"&&"property"in l&&"value"in l){const C=l.group||s,m=this.values[C][c]?this.values[C][c]:t?e:c,u=typeof l.property=="function"?l.property({value:m,unit:t,secondValue:o?r:$,secondUnit:o,key:f}):l.property,g=l.value;let A;if(typeof g=="function")A=g({value:m,unit:t,secondValue:o?r:$,secondUnit:o,key:f,property:u});else if(g&&typeof g=="string"){const b=this.processValue(y,t,C);A=this.values[y]||this.values[C][y]||y.includes("{")||g.includes("{")?this.parseValuePattern(C,g,b,"",$,""):c}else A=null;return{className:`${s}${e?`${n&&n?"-":""}${e}${t}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(u)||typeof u=="string"&&u.includes(":")?u:this.toKebabCase(String(u)),value:g===null?null:e.startsWith("[")?c:A,prefix:i}}const d=typeof l=="function"?l({value:t?e:c,unit:t,secondValue:o?r:$,secondUnit:o,key:f}):l;return{className:`${s}${e?(n?"-":"")+e+t:""}`,cssRules:Array.isArray(l)?d:typeof d=="string"&&d.startsWith("value:")?d.slice(6):this.toKebabCase(String(d)),value:typeof d=="string"&&d.startsWith("value:")?null:c,prefix:i}}return null}parseValuePattern(s,e,t,i,r,o){if(!e.includes("{0}")&&!e.includes("{1")&&!e.includes("||"))return e;const[n,l]=e.split("||").map(a=>a.trim()),h=this.processValue(t,i,s),f=this.processValue(r,o,s);if(e.includes("{0}")&&e.includes("{1")||e.includes("{1")){let a=n;if(t&&(a=a.replace("{0}",h)),e.includes("{1")){const p=a.match(/{1([^}]*)}/);if(e.includes("{1}"))r?a=r.startsWith("[")?f:a.replace("{1}",f):a=l;else if(p){const y=p[0],c=p[1].trim();let $=f;!$&&c.includes("|")?$=c.split("|")[1].trim():$||($=""),a=t.startsWith("[")?h:a.replace(y,$)}}return t?a:l||n}else return t?t.startsWith("[")?h:n.replace("{0}",h):l||n}getParentClass(s){return Object.keys(this.classes).filter(e=>Object.prototype.hasOwnProperty.call(this.classes[e],s))}processCustomClass(s,e="",t="",i="",r="",o="",n=!0){if(!s)return null;const l=this.getParentClass(s);if(l.length>0){const h=l.map(p=>{const y=this.classes[p];if(!y)return"";const c=this.parseValuePattern(s,y[s]||"",e,t,r,o);return`${this.toKebabCase(String(p))}: ${c}`}).filter(Boolean).join("; "),f=s.slice(-(e+t).length),a=`${s}${e?`${n?"-":""}${e}${t}`:""}${r?`/${r}${o}`:""}`;return{className:e===f?s:a,cssRules:h,value:null,prefix:i}}return null}processAlias(s,e=""){const t=this.aliases[s];if(!t)return null;const i=t.split(" "),r=[];return i.forEach(o=>{const[n,l]=o.split(":"),h=l||n,f=l?n:void 0,a=this.parse(o),p=a||[f,h,"",""];if(!p)return;const[y,c,$,d,C,m]=p,u=this.processShorthand(c,$,d,void 0,C,m),g=this.processCustomClass(c,$,d,y,C,m);if(g){const{cssRules:A}=g;r.push(A);return}if(u){const A=u.value!==null?`: ${u.value}`:"";Array.isArray(u.cssRules)?u.cssRules.forEach(P=>{r.push(`${this.toKebabCase(P)}${A}`)}):r.push(`${u.cssRules}${A}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:e}}process(s){const e=Array.isArray(s)?s:s.split(/\s+/),t=[];return e.forEach(i=>{if(!i)return this;const[r,o]=i.split(":"),n=o||r,l=o?r:void 0,h=this.processAlias(n,l);if(h){const{className:P,cssRules:b}=h;t.push({className:P,cssRules:b,value:null,prefix:l});return}const f=this.parse(i),a=f||[l,n,"",""];if(!a)return this;const[p,y,c,$,d,C]=a,m=!i.includes((y||"")+(c||"")),u=this.getParentClass(`${y}${m?"-":""}${c}`).length>0?`${y}${m?"-":""}${c}`:y,g=this.processCustomClass(u,c,$,p,d,C,m);if(g){const{className:P,cssRules:b,prefix:x}=g;t.push({className:P,cssRules:b,value:null,prefix:x});return}const A=this.processShorthand(y,c,$,p,d,C,m);if(A){const{className:P,cssRules:b,value:x,prefix:j}=A;t.push({className:P,cssRules:b,value:x,prefix:j})}}),t}}exports.TenoxUI=S;exports.default=S;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const valuesGroup = properties.group || type\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n console.log(finalCleanValue)\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","template","processedValue","valuesGroup","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const valuesGroup = properties.group || type\n const groupValue = (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n ? (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n : unit\n ? value\n : finalValue\n\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","valuesGroup","groupValue","template","processedValue","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -1,13 +1,13 @@
1
1
  var j = Object.defineProperty;
2
2
  var R = Object.getOwnPropertySymbols;
3
3
  var z = Object.prototype.hasOwnProperty, S = Object.prototype.propertyIsEnumerable;
4
- var V = (P, s, e) => s in P ? j(P, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : P[s] = e, W = (P, s) => {
4
+ var V = (v, s, e) => s in v ? j(v, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : v[s] = e, W = (v, s) => {
5
5
  for (var e in s || (s = {}))
6
- z.call(s, e) && V(P, e, s[e]);
6
+ z.call(s, e) && V(v, e, s[e]);
7
7
  if (R)
8
8
  for (var e of R(s))
9
- S.call(s, e) && V(P, e, s[e]);
10
- return P;
9
+ S.call(s, e) && V(v, e, s[e]);
10
+ return v;
11
11
  };
12
12
  class _ {
13
13
  constructor({ property: s = {}, values: e = {}, classes: t = {}, aliases: n = {} } = {}) {
@@ -49,18 +49,18 @@ class _ {
49
49
  t + "|" + n + "|" + r + "):)?", i = `(${e}|\\[[^\\]]+\\])`, l = "(?:-)?", h = "(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|" + // Hex colors
50
50
  t + "|" + // Bracket content
51
51
  r + "|" + // Curly brace content
52
- n + "|(?:\\$[^\\s\\/]+))", f = "([a-zA-Z%]*)", a = "(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|" + t + "|" + r + "|" + n + "|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";
52
+ n + "|(?:\\$[^\\s\\/]+))", p = "([a-zA-Z%]*)", a = "(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|" + t + "|" + r + "|" + n + "|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";
53
53
  return new RegExp(
54
- c + i + l + h + f + a
54
+ c + i + l + h + p + a
55
55
  );
56
56
  }
57
57
  parse(s, e) {
58
- if (Object.values(this.classes).some((p) => p == null ? void 0 : p[s]))
58
+ if (Object.values(this.classes).some((f) => f == null ? void 0 : f[s]))
59
59
  return [void 0, s, "", "", void 0, void 0];
60
60
  const t = this.generateClassNameRegEx(e), n = (s + "-dummy").match(t);
61
61
  if (!n) return null;
62
- const [, r, c, i, l, h, f] = n, a = i === "dummy" ? "" : i.replace("-dummy", "");
63
- return [r, c, a, l || "", h, f];
62
+ const [, r, c, i, l, h, p] = n, a = i === "dummy" ? "" : i.replace("-dummy", "");
63
+ return [r, c, a, l || "", h, p];
64
64
  }
65
65
  // unique value parser
66
66
  processValue(s, e, t) {
@@ -81,20 +81,20 @@ class _ {
81
81
  }
82
82
  processShorthand(s = "", e = "", t = "", n, r = "", c = "", i = !0) {
83
83
  const l = this.property[s], h = /^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;
84
- let f = null, a = e || "";
85
- const p = a.match(h);
86
- p && (f = p[1].trim(), a = p[2].trim());
87
- let o;
88
- e.includes(f + ":") ? o = e.startsWith("(") ? `(${a})` : `[${a}]` : o = e;
89
- const u = this.processValue(o, t, s), m = this.processValue(r, c, s);
84
+ let p = null, a = e || "";
85
+ const f = a.match(h);
86
+ f && (p = f[1].trim(), a = f[2].trim());
87
+ let y;
88
+ e.includes(p + ":") ? y = e.startsWith("(") ? `(${a})` : `[${a}]` : y = e;
89
+ const o = this.processValue(y, t, s), $ = this.processValue(r, c, s);
90
90
  if (s.startsWith("[") && s.endsWith("]")) {
91
- const d = s.slice(1, -1).split(",").map((y) => y.trim()).map((y) => {
92
- const $ = this.property[y] || y;
93
- return `${typeof $ == "string" && $.startsWith("--") ? String($) : this.toKebabCase(String($))}: ${u}`;
91
+ const C = s.slice(1, -1).split(",").map((m) => m.trim()).map((m) => {
92
+ const u = this.property[m] || m;
93
+ return `${typeof u == "string" && u.startsWith("--") ? String(u) : this.toKebabCase(String(u))}: ${o}`;
94
94
  }).join("; ");
95
95
  return {
96
96
  className: `${`[${s.slice(1, -1)}]${i ? "-" : ""}${e}${t}`}`,
97
- cssRules: d,
97
+ cssRules: C,
98
98
  // return css rules directly
99
99
  value: null,
100
100
  // and set value to null to prevent value duplication
@@ -103,45 +103,45 @@ class _ {
103
103
  }
104
104
  if (l) {
105
105
  if (typeof l == "object" && "property" in l && "value" in l) {
106
- const d = typeof l.property == "function" ? l.property({
107
- value: t ? e : u,
106
+ const C = l.group || s, m = this.values[C][o] ? this.values[C][o] : t ? e : o, u = typeof l.property == "function" ? l.property({
107
+ value: m,
108
108
  unit: t,
109
- secondValue: c ? r : m,
109
+ secondValue: c ? r : $,
110
110
  secondUnit: c,
111
- key: f
112
- }) : l.property, y = l.value;
113
- let $;
114
- if (typeof y == "function")
115
- $ = y({
116
- value: t ? e : u,
111
+ key: p
112
+ }) : l.property, g = l.value;
113
+ let A;
114
+ if (typeof g == "function")
115
+ A = g({
116
+ value: m,
117
117
  unit: t,
118
- secondValue: c ? r : m,
118
+ secondValue: c ? r : $,
119
119
  secondUnit: c,
120
- key: f,
121
- property: d
120
+ key: p,
121
+ property: u
122
122
  });
123
- else if (y && typeof y == "string") {
124
- const C = l.group || s, A = this.processValue(o, t, C);
125
- console.log(o), $ = this.values[o] || this.values[C][o] || o.includes("{") || y.includes("{") ? this.parseValuePattern(C, y, A, "", m, "") : u;
126
- } else $ = null;
123
+ else if (g && typeof g == "string") {
124
+ const x = this.processValue(y, t, C);
125
+ A = this.values[y] || this.values[C][y] || y.includes("{") || g.includes("{") ? this.parseValuePattern(C, g, x, "", $, "") : o;
126
+ } else A = null;
127
127
  return {
128
128
  className: `${s}${e ? `${i && i ? "-" : ""}${e}${t}` : ""}${r ? `/${r}${c}` : ""}`,
129
- cssRules: Array.isArray(d) || typeof d == "string" && d.includes(":") ? d : this.toKebabCase(String(d)),
130
- value: y === null ? null : e.startsWith("[") ? u : $,
129
+ cssRules: Array.isArray(u) || typeof u == "string" && u.includes(":") ? u : this.toKebabCase(String(u)),
130
+ value: g === null ? null : e.startsWith("[") ? o : A,
131
131
  prefix: n
132
132
  };
133
133
  }
134
- const g = typeof l == "function" ? l({
135
- value: t ? e : u,
134
+ const d = typeof l == "function" ? l({
135
+ value: t ? e : o,
136
136
  unit: t,
137
- secondValue: c ? r : m,
137
+ secondValue: c ? r : $,
138
138
  secondUnit: c,
139
- key: f
139
+ key: p
140
140
  }) : l;
141
141
  return {
142
142
  className: `${s}${e ? (i ? "-" : "") + e + t : ""}`,
143
- cssRules: Array.isArray(l) ? g : typeof g == "string" && g.startsWith("value:") ? g.slice(6) : this.toKebabCase(String(g)),
144
- value: typeof g == "string" && g.startsWith("value:") ? null : u,
143
+ cssRules: Array.isArray(l) ? d : typeof d == "string" && d.startsWith("value:") ? d.slice(6) : this.toKebabCase(String(d)),
144
+ value: typeof d == "string" && d.startsWith("value:") ? null : o,
145
145
  prefix: n
146
146
  };
147
147
  }
@@ -150,17 +150,17 @@ class _ {
150
150
  parseValuePattern(s, e, t, n, r, c) {
151
151
  if (!e.includes("{0}") && !e.includes("{1") && !e.includes("||"))
152
152
  return e;
153
- const [i, l] = e.split("||").map((a) => a.trim()), h = this.processValue(t, n, s), f = this.processValue(r, c, s);
153
+ const [i, l] = e.split("||").map((a) => a.trim()), h = this.processValue(t, n, s), p = this.processValue(r, c, s);
154
154
  if (e.includes("{0}") && e.includes("{1") || e.includes("{1")) {
155
155
  let a = i;
156
156
  if (t && (a = a.replace("{0}", h)), e.includes("{1")) {
157
- const p = a.match(/{1([^}]*)}/);
157
+ const f = a.match(/{1([^}]*)}/);
158
158
  if (e.includes("{1}"))
159
- r ? a = r.startsWith("[") ? f : a.replace("{1}", f) : a = l;
160
- else if (p) {
161
- const o = p[0], u = p[1].trim();
162
- let m = f;
163
- !m && u.includes("|") ? m = u.split("|")[1].trim() : m || (m = ""), a = t.startsWith("[") ? h : a.replace(o, m);
159
+ r ? a = r.startsWith("[") ? p : a.replace("{1}", p) : a = l;
160
+ else if (f) {
161
+ const y = f[0], o = f[1].trim();
162
+ let $ = p;
163
+ !$ && o.includes("|") ? $ = o.split("|")[1].trim() : $ || ($ = ""), a = t.startsWith("[") ? h : a.replace(y, $);
164
164
  }
165
165
  }
166
166
  return t ? a : l || i;
@@ -179,21 +179,21 @@ class _ {
179
179
  if (!s) return null;
180
180
  const l = this.getParentClass(s);
181
181
  if (l.length > 0) {
182
- const h = l.map((p) => {
183
- const o = this.classes[p];
184
- if (!o) return "";
185
- const u = this.parseValuePattern(
182
+ const h = l.map((f) => {
183
+ const y = this.classes[f];
184
+ if (!y) return "";
185
+ const o = this.parseValuePattern(
186
186
  s,
187
- o[s] || "",
187
+ y[s] || "",
188
188
  e,
189
189
  t,
190
190
  r,
191
191
  c
192
192
  );
193
- return `${this.toKebabCase(String(p))}: ${u}`;
194
- }).filter(Boolean).join("; "), f = s.slice(-(e + t).length), a = `${s}${e ? `${i ? "-" : ""}${e}${t}` : ""}${r ? `/${r}${c}` : ""}`;
193
+ return `${this.toKebabCase(String(f))}: ${o}`;
194
+ }).filter(Boolean).join("; "), p = s.slice(-(e + t).length), a = `${s}${e ? `${i ? "-" : ""}${e}${t}` : ""}${r ? `/${r}${c}` : ""}`;
195
195
  return {
196
- className: e === f ? s : a,
196
+ className: e === p ? s : a,
197
197
  cssRules: h,
198
198
  value: null,
199
199
  prefix: n
@@ -206,19 +206,19 @@ class _ {
206
206
  if (!t) return null;
207
207
  const n = t.split(" "), r = [];
208
208
  return n.forEach((c) => {
209
- const [i, l] = c.split(":"), h = l || i, f = l ? i : void 0, a = this.parse(c), p = a || [f, h, "", ""];
210
- if (!p) return;
211
- const [o, u, m, g, d, y] = p, $ = this.processShorthand(u, m, g, void 0, d, y), x = this.processCustomClass(u, m, g, o, d, y);
212
- if (x) {
213
- const { cssRules: C } = x;
214
- r.push(C);
209
+ const [i, l] = c.split(":"), h = l || i, p = l ? i : void 0, a = this.parse(c), f = a || [p, h, "", ""];
210
+ if (!f) return;
211
+ const [y, o, $, d, C, m] = f, u = this.processShorthand(o, $, d, void 0, C, m), g = this.processCustomClass(o, $, d, y, C, m);
212
+ if (g) {
213
+ const { cssRules: A } = g;
214
+ r.push(A);
215
215
  return;
216
216
  }
217
- if ($) {
218
- const C = $.value !== null ? `: ${$.value}` : "";
219
- Array.isArray($.cssRules) ? $.cssRules.forEach((A) => {
220
- r.push(`${this.toKebabCase(A)}${C}`);
221
- }) : r.push(`${$.cssRules}${C}`);
217
+ if (u) {
218
+ const A = u.value !== null ? `: ${u.value}` : "";
219
+ Array.isArray(u.cssRules) ? u.cssRules.forEach((P) => {
220
+ r.push(`${this.toKebabCase(P)}${A}`);
221
+ }) : r.push(`${u.cssRules}${A}`);
222
222
  }
223
223
  }), {
224
224
  className: s,
@@ -233,43 +233,43 @@ class _ {
233
233
  if (!n) return this;
234
234
  const [r, c] = n.split(":"), i = c || r, l = c ? r : void 0, h = this.processAlias(i, l);
235
235
  if (h) {
236
- const { className: A, cssRules: b } = h;
236
+ const { className: P, cssRules: x } = h;
237
237
  t.push({
238
- className: A,
239
- cssRules: b,
238
+ className: P,
239
+ cssRules: x,
240
240
  value: null,
241
241
  prefix: l
242
242
  });
243
243
  return;
244
244
  }
245
- const f = this.parse(n), a = f || [l, i, "", ""];
245
+ const p = this.parse(n), a = p || [l, i, "", ""];
246
246
  if (!a) return this;
247
- const [p, o, u, m, g, d] = a, y = !n.includes((o || "") + (u || "")), $ = this.getParentClass(`${o}${y ? "-" : ""}${u}`).length > 0 ? `${o}${y ? "-" : ""}${u}` : o, x = this.processCustomClass(
248
- $,
247
+ const [f, y, o, $, d, C] = a, m = !n.includes((y || "") + (o || "")), u = this.getParentClass(`${y}${m ? "-" : ""}${o}`).length > 0 ? `${y}${m ? "-" : ""}${o}` : y, g = this.processCustomClass(
249
248
  u,
250
- m,
251
- p,
252
- g,
249
+ o,
250
+ $,
251
+ f,
253
252
  d,
254
- y
253
+ C,
254
+ m
255
255
  );
256
- if (x) {
257
- const { className: A, cssRules: b, prefix: v } = x;
256
+ if (g) {
257
+ const { className: P, cssRules: x, prefix: b } = g;
258
258
  t.push({
259
- className: A,
260
- cssRules: b,
259
+ className: P,
260
+ cssRules: x,
261
261
  value: null,
262
- prefix: v
262
+ prefix: b
263
263
  });
264
264
  return;
265
265
  }
266
- const C = this.processShorthand(o, u, m, p, g, d, y);
267
- if (C) {
268
- const { className: A, cssRules: b, value: v, prefix: Z } = C;
266
+ const A = this.processShorthand(y, o, $, f, d, C, m);
267
+ if (A) {
268
+ const { className: P, cssRules: x, value: b, prefix: Z } = A;
269
269
  t.push({
270
- className: A,
271
- cssRules: b,
272
- value: v,
270
+ className: P,
271
+ cssRules: x,
272
+ value: b,
273
273
  prefix: Z
274
274
  });
275
275
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const valuesGroup = properties.group || type\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n console.log(finalCleanValue)\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","template","processedValue","valuesGroup","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const valuesGroup = properties.group || type\n const groupValue = (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n ? (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n : unit\n ? value\n : finalValue\n\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","valuesGroup","groupValue","template","processedValue","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var __tenoxui_moxie__=function(A){"use strict";var Z=Object.defineProperty;var W=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable;var _=(A,C,P)=>C in A?Z(A,C,{enumerable:!0,configurable:!0,writable:!0,value:P}):A[C]=P,S=(A,C)=>{for(var P in C||(C={}))z.call(C,P)&&_(A,P,C[P]);if(W)for(var P of W(C))E.call(C,P)&&_(A,P,C[P]);return A};class C{constructor({property:s={},values:t={},classes:e={},aliases:n={}}={}){this.property=S({moxie:({key:r})=>r},s),this.values=t,this.classes=e,this.aliases=n}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const t=s.match(/^(webkit|moz|ms|o)/);if(t){const e=t[0];return`-${e}${s.slice(e.length).replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const t=new Set;return Object.entries(s).forEach(([e,n])=>{n&&typeof n=="object"&&Object.keys(n).forEach(r=>{t.add(r)})}),Array.from(t)}getTypePrefixes(s=[]){const t=this.property,e=this.classes,n=Object.keys(t);if(!e)return[...n,...s].sort((i,l)=>l.length-i.length).join("|");const o=[...this.getAllClassNames(e)];return[...n,...o,...s].sort((i,l)=>l.length-i.length).join("|")}generateClassNameRegEx(s){const t=this.getTypePrefixes(s),e="\\[[^\\]]+\\]",n="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+e+")|"+e+"|"+n+"|"+r+"):)?",i=`(${t}|\\[[^\\]]+\\])`,l="(?:-)?",h="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))",f="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+i+l+h+f+a)}parse(s,t){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const e=this.generateClassNameRegEx(t),n=(s+"-dummy").match(e);if(!n)return null;const[,r,o,i,l,h,f]=n,a=i==="dummy"?"":i.replace("-dummy","");return[r,o,a,l||"",h,f]}processValue(s,t,e){if(!s)return"";const n=r=>r.replace(/\{([^}]+)\}/g,(o,i)=>{const l=this.values,h=l!==null?typeof l[e]=="object"?l[e][i]:l[i]:void 0;return typeof h=="string"?h:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[e]&&typeof this.values[e]=="object"&&this.values[e][s]||this.values[s]))return typeof this.values[e]=="object"&&this.values[e]!==null?this.values[e][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?n(r):r.startsWith("--")?`var(${r})`:r}return s+(t||"")}processShorthand(s="",t="",e="",n,r="",o="",i=!0){const l=this.property[s],h=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let f=null,a=t||"";const p=a.match(h);p&&(f=p[1].trim(),a=p[2].trim());let c;t.includes(f+":")?c=t.startsWith("(")?`(${a})`:`[${a}]`:c=t;const u=this.processValue(c,e,s),m=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const d=s.slice(1,-1).split(",").map(y=>y.trim()).map(y=>{const $=this.property[y]||y;return`${typeof $=="string"&&$.startsWith("--")?String($):this.toKebabCase(String($))}: ${u}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${i?"-":""}${t}${e}`}`,cssRules:d,value:null,prefix:n}}if(l){if(typeof l=="object"&&"property"in l&&"value"in l){const d=typeof l.property=="function"?l.property({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:f}):l.property,y=l.value;let $;if(typeof y=="function")$=y({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:f,property:d});else if(y&&typeof y=="string"){const v=l.group||s,b=this.processValue(c,e,v);console.log(c),$=this.values[c]||this.values[v][c]||c.includes("{")||y.includes("{")?this.parseValuePattern(v,y,b,"",m,""):u}else $=null;return{className:`${s}${t?`${i&&i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(d)||typeof d=="string"&&d.includes(":")?d:this.toKebabCase(String(d)),value:y===null?null:t.startsWith("[")?u:$,prefix:n}}const g=typeof l=="function"?l({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:f}):l;return{className:`${s}${t?(i?"-":"")+t+e:""}`,cssRules:Array.isArray(l)?g:typeof g=="string"&&g.startsWith("value:")?g.slice(6):this.toKebabCase(String(g)),value:typeof g=="string"&&g.startsWith("value:")?null:u,prefix:n}}return null}parseValuePattern(s,t,e,n,r,o){if(!t.includes("{0}")&&!t.includes("{1")&&!t.includes("||"))return t;const[i,l]=t.split("||").map(a=>a.trim()),h=this.processValue(e,n,s),f=this.processValue(r,o,s);if(t.includes("{0}")&&t.includes("{1")||t.includes("{1")){let a=i;if(e&&(a=a.replace("{0}",h)),t.includes("{1")){const p=a.match(/{1([^}]*)}/);if(t.includes("{1}"))r?a=r.startsWith("[")?f:a.replace("{1}",f):a=l;else if(p){const c=p[0],u=p[1].trim();let m=f;!m&&u.includes("|")?m=u.split("|")[1].trim():m||(m=""),a=e.startsWith("[")?h:a.replace(c,m)}}return e?a:l||i}else return e?e.startsWith("[")?h:i.replace("{0}",h):l||i}getParentClass(s){return Object.keys(this.classes).filter(t=>Object.prototype.hasOwnProperty.call(this.classes[t],s))}processCustomClass(s,t="",e="",n="",r="",o="",i=!0){if(!s)return null;const l=this.getParentClass(s);if(l.length>0){const h=l.map(p=>{const c=this.classes[p];if(!c)return"";const u=this.parseValuePattern(s,c[s]||"",t,e,r,o);return`${this.toKebabCase(String(p))}: ${u}`}).filter(Boolean).join("; "),f=s.slice(-(t+e).length),a=`${s}${t?`${i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`;return{className:t===f?s:a,cssRules:h,value:null,prefix:n}}return null}processAlias(s,t=""){const e=this.aliases[s];if(!e)return null;const n=e.split(" "),r=[];return n.forEach(o=>{const[i,l]=o.split(":"),h=l||i,f=l?i:void 0,a=this.parse(o),p=a||[f,h,"",""];if(!p)return;const[c,u,m,g,d,y]=p,$=this.processShorthand(u,m,g,void 0,d,y),x=this.processCustomClass(u,m,g,c,d,y);if(x){const{cssRules:v}=x;r.push(v);return}if($){const v=$.value!==null?`: ${$.value}`:"";Array.isArray($.cssRules)?$.cssRules.forEach(b=>{r.push(`${this.toKebabCase(b)}${v}`)}):r.push(`${$.cssRules}${v}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:t}}process(s){const t=Array.isArray(s)?s:s.split(/\s+/),e=[];return t.forEach(n=>{if(!n)return this;const[r,o]=n.split(":"),i=o||r,l=o?r:void 0,h=this.processAlias(i,l);if(h){const{className:b,cssRules:R}=h;e.push({className:b,cssRules:R,value:null,prefix:l});return}const f=this.parse(n),a=f||[l,i,"",""];if(!a)return this;const[p,c,u,m,g,d]=a,y=!n.includes((c||"")+(u||"")),$=this.getParentClass(`${c}${y?"-":""}${u}`).length>0?`${c}${y?"-":""}${u}`:c,x=this.processCustomClass($,u,m,p,g,d,y);if(x){const{className:b,cssRules:R,prefix:V}=x;e.push({className:b,cssRules:R,value:null,prefix:V});return}const v=this.processShorthand(c,u,m,p,g,d,y);if(v){const{className:b,cssRules:R,value:V,prefix:j}=v;e.push({className:b,cssRules:R,value:V,prefix:j})}}),e}}return A.TenoxUI=C,A.default=C,Object.defineProperties(A,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),A}({});
1
+ var __tenoxui_moxie__=function(A){"use strict";var Z=Object.defineProperty;var W=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable;var _=(A,C,b)=>C in A?Z(A,C,{enumerable:!0,configurable:!0,writable:!0,value:b}):A[C]=b,S=(A,C)=>{for(var b in C||(C={}))z.call(C,b)&&_(A,b,C[b]);if(W)for(var b of W(C))E.call(C,b)&&_(A,b,C[b]);return A};class C{constructor({property:s={},values:t={},classes:e={},aliases:n={}}={}){this.property=S({moxie:({key:r})=>r},s),this.values=t,this.classes=e,this.aliases=n}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const t=s.match(/^(webkit|moz|ms|o)/);if(t){const e=t[0];return`-${e}${s.slice(e.length).replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const t=new Set;return Object.entries(s).forEach(([e,n])=>{n&&typeof n=="object"&&Object.keys(n).forEach(r=>{t.add(r)})}),Array.from(t)}getTypePrefixes(s=[]){const t=this.property,e=this.classes,n=Object.keys(t);if(!e)return[...n,...s].sort((i,l)=>l.length-i.length).join("|");const o=[...this.getAllClassNames(e)];return[...n,...o,...s].sort((i,l)=>l.length-i.length).join("|")}generateClassNameRegEx(s){const t=this.getTypePrefixes(s),e="\\[[^\\]]+\\]",n="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+e+")|"+e+"|"+n+"|"+r+"):)?",i=`(${t}|\\[[^\\]]+\\])`,l="(?:-)?",h="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))",f="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+n+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+i+l+h+f+a)}parse(s,t){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const e=this.generateClassNameRegEx(t),n=(s+"-dummy").match(e);if(!n)return null;const[,r,o,i,l,h,f]=n,a=i==="dummy"?"":i.replace("-dummy","");return[r,o,a,l||"",h,f]}processValue(s,t,e){if(!s)return"";const n=r=>r.replace(/\{([^}]+)\}/g,(o,i)=>{const l=this.values,h=l!==null?typeof l[e]=="object"?l[e][i]:l[i]:void 0;return typeof h=="string"?h:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[e]&&typeof this.values[e]=="object"&&this.values[e][s]||this.values[s]))return typeof this.values[e]=="object"&&this.values[e]!==null?this.values[e][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?n(r):r.startsWith("--")?`var(${r})`:r}return s+(t||"")}processShorthand(s="",t="",e="",n,r="",o="",i=!0){const l=this.property[s],h=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let f=null,a=t||"";const p=a.match(h);p&&(f=p[1].trim(),a=p[2].trim());let y;t.includes(f+":")?y=t.startsWith("(")?`(${a})`:`[${a}]`:y=t;const c=this.processValue(y,e,s),$=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const v=s.slice(1,-1).split(",").map(m=>m.trim()).map(m=>{const u=this.property[m]||m;return`${typeof u=="string"&&u.startsWith("--")?String(u):this.toKebabCase(String(u))}: ${c}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${i?"-":""}${t}${e}`}`,cssRules:v,value:null,prefix:n}}if(l){if(typeof l=="object"&&"property"in l&&"value"in l){const v=l.group||s,m=this.values[v][c]?this.values[v][c]:e?t:c,u=typeof l.property=="function"?l.property({value:m,unit:e,secondValue:o?r:$,secondUnit:o,key:f}):l.property,g=l.value;let P;if(typeof g=="function")P=g({value:m,unit:e,secondValue:o?r:$,secondUnit:o,key:f,property:u});else if(g&&typeof g=="string"){const R=this.processValue(y,e,v);P=this.values[y]||this.values[v][y]||y.includes("{")||g.includes("{")?this.parseValuePattern(v,g,R,"",$,""):c}else P=null;return{className:`${s}${t?`${i&&i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(u)||typeof u=="string"&&u.includes(":")?u:this.toKebabCase(String(u)),value:g===null?null:t.startsWith("[")?c:P,prefix:n}}const d=typeof l=="function"?l({value:e?t:c,unit:e,secondValue:o?r:$,secondUnit:o,key:f}):l;return{className:`${s}${t?(i?"-":"")+t+e:""}`,cssRules:Array.isArray(l)?d:typeof d=="string"&&d.startsWith("value:")?d.slice(6):this.toKebabCase(String(d)),value:typeof d=="string"&&d.startsWith("value:")?null:c,prefix:n}}return null}parseValuePattern(s,t,e,n,r,o){if(!t.includes("{0}")&&!t.includes("{1")&&!t.includes("||"))return t;const[i,l]=t.split("||").map(a=>a.trim()),h=this.processValue(e,n,s),f=this.processValue(r,o,s);if(t.includes("{0}")&&t.includes("{1")||t.includes("{1")){let a=i;if(e&&(a=a.replace("{0}",h)),t.includes("{1")){const p=a.match(/{1([^}]*)}/);if(t.includes("{1}"))r?a=r.startsWith("[")?f:a.replace("{1}",f):a=l;else if(p){const y=p[0],c=p[1].trim();let $=f;!$&&c.includes("|")?$=c.split("|")[1].trim():$||($=""),a=e.startsWith("[")?h:a.replace(y,$)}}return e?a:l||i}else return e?e.startsWith("[")?h:i.replace("{0}",h):l||i}getParentClass(s){return Object.keys(this.classes).filter(t=>Object.prototype.hasOwnProperty.call(this.classes[t],s))}processCustomClass(s,t="",e="",n="",r="",o="",i=!0){if(!s)return null;const l=this.getParentClass(s);if(l.length>0){const h=l.map(p=>{const y=this.classes[p];if(!y)return"";const c=this.parseValuePattern(s,y[s]||"",t,e,r,o);return`${this.toKebabCase(String(p))}: ${c}`}).filter(Boolean).join("; "),f=s.slice(-(t+e).length),a=`${s}${t?`${i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`;return{className:t===f?s:a,cssRules:h,value:null,prefix:n}}return null}processAlias(s,t=""){const e=this.aliases[s];if(!e)return null;const n=e.split(" "),r=[];return n.forEach(o=>{const[i,l]=o.split(":"),h=l||i,f=l?i:void 0,a=this.parse(o),p=a||[f,h,"",""];if(!p)return;const[y,c,$,d,v,m]=p,u=this.processShorthand(c,$,d,void 0,v,m),g=this.processCustomClass(c,$,d,y,v,m);if(g){const{cssRules:P}=g;r.push(P);return}if(u){const P=u.value!==null?`: ${u.value}`:"";Array.isArray(u.cssRules)?u.cssRules.forEach(x=>{r.push(`${this.toKebabCase(x)}${P}`)}):r.push(`${u.cssRules}${P}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:t}}process(s){const t=Array.isArray(s)?s:s.split(/\s+/),e=[];return t.forEach(n=>{if(!n)return this;const[r,o]=n.split(":"),i=o||r,l=o?r:void 0,h=this.processAlias(i,l);if(h){const{className:x,cssRules:R}=h;e.push({className:x,cssRules:R,value:null,prefix:l});return}const f=this.parse(n),a=f||[l,i,"",""];if(!a)return this;const[p,y,c,$,d,v]=a,m=!n.includes((y||"")+(c||"")),u=this.getParentClass(`${y}${m?"-":""}${c}`).length>0?`${y}${m?"-":""}${c}`:y,g=this.processCustomClass(u,c,$,p,d,v,m);if(g){const{className:x,cssRules:R,prefix:V}=g;e.push({className:x,cssRules:R,value:null,prefix:V});return}const P=this.processShorthand(y,c,$,p,d,v,m);if(P){const{className:x,cssRules:R,value:V,prefix:j}=P;e.push({className:x,cssRules:R,value:V,prefix:j})}}),e}}return A.TenoxUI=C,A.default=C,Object.defineProperties(A,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),A}({});
2
2
  //# sourceMappingURL=index.iife.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.iife.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const valuesGroup = properties.group || type\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n console.log(finalCleanValue)\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","template","processedValue","valuesGroup","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"wYASO,MAAMA,CAAQ,CAMnB,YAAY,CAAE,SAAAC,EAAW,CAAC,EAAG,OAAAC,EAAS,CAAA,EAAI,QAAAC,EAAU,GAAI,QAAAC,EAAU,CAAG,CAAA,EAAY,CAAA,EAAI,CACnF,KAAK,SAAWC,EAAA,CACd,MAAO,CAAC,CAAE,IAAAC,CAAA,IAAUA,GACjBL,GAEL,KAAK,OAASC,EACd,KAAK,QAAUC,EACf,KAAK,QAAUC,CAAA,CAGV,YAAYG,EAAqB,CAClC,GAAA,0BAA0B,KAAKA,CAAG,EAAG,CACjC,MAAAC,EAAQD,EAAI,MAAM,oBAAoB,EAC5C,GAAIC,EAAO,CACH,MAAAC,EAASD,EAAM,CAAC,EACtB,MAAO,IAAIC,CAAM,GAAGF,EACjB,MAAME,EAAO,MAAM,EACnB,QAAQ,SAAWC,GAAW,IAAIA,EAAO,YAAa,CAAA,EAAE,CAAC,EAAA,CAC9D,CAGK,OAAAH,EAAI,QAAQ,SAAWG,GAAW,IAAIA,EAAO,YAAa,CAAA,EAAE,CAAA,CAG9D,kBAAkBH,EAAqB,CACrC,OAAAA,EAAI,QAAQ,qCAAsC,MAAM,CAAA,CAGzD,iBAAiBI,EAA8C,CACjE,GAAA,CAACA,EAAe,MAAO,CAAC,EACtB,MAAAC,MAAiB,IAEhB,cAAA,QAAQD,CAAa,EAAE,QAAQ,CAAC,CAACV,EAAUY,CAAQ,IAAM,CAC1DA,GAAY,OAAOA,GAAa,UAClC,OAAO,KAAKA,CAAQ,EAAE,QAASC,GAAc,CAC3CF,EAAW,IAAIE,CAAS,CAAA,CACzB,CACH,CACD,EAEM,MAAM,KAAKF,CAAU,CAAA,CAGtB,gBAAgBG,EAAqB,GAAY,CACvD,MAAMC,EAAiB,KAAK,SACtBL,EAAgB,KAAK,QACrBM,EAAgB,OAAO,KAAKD,CAAc,EAEhD,GAAI,CAACL,EACH,MAAO,CAAC,GAAGM,EAAe,GAAGF,CAAQ,EAAE,KAAK,CAACG,EAAGC,IAAMA,EAAE,OAASD,EAAE,MAAM,EAAE,KAAK,GAAG,EAI/E,MAAAE,EAAgB,CAAC,GADF,KAAK,iBAAiBT,CAAa,CAClB,EAEtC,MAAO,CAAC,GAAGM,EAAe,GAAGG,EAAe,GAAGL,CAAQ,EACpD,KAAK,CAACG,EAAGC,IAAMA,EAAE,OAASD,EAAE,MAAM,EAClC,KAAK,GAAG,CAAA,CAGL,uBAAuBH,EAA6B,CACpD,MAAAM,EAAe,KAAK,gBAAgBN,CAAQ,EAG5CO,EAAuB,gBACvBC,EAAqB,sCACrBC,EAAqB,sCAGrBC,EACJ,wCAKAH,EACA,KAEAA,EACA,IACAC,EACA,IACAC,EACA,OAGIE,EAAc,IAAIL,CAAY,kBAG9BM,EAAY,SAGZC,EACJ,qGAGAN,EACA,IACAE,EACA,IACAD,EACA,sBAIIM,EAAc,eAGdC,EACJ,2GAGAR,EACA,IACAE,EACA,IACAD,EACA,oCAIF,OAAO,IAAI,OACTE,EAAgBC,EAAcC,EAAYC,EAAeC,EAAcC,CACzE,CAAA,CAGK,MAAMhB,EAAmBC,EAAqB,CAE/C,GAAA,OAAO,OAAO,KAAK,OAAO,EAAE,KAAMF,GAAaA,GAAA,YAAAA,EAAWC,EAAU,EACtE,MAAO,CAAC,OAAWA,EAAW,GAAI,GAAI,OAAW,MAAS,EAGtD,MAAAiB,EAAiB,KAAK,uBAAuBhB,CAAQ,EACrDP,GAASM,EAAY,UAAU,MAAMiB,CAAc,EACrD,GAAA,CAACvB,EAAc,OAAA,KAEb,KAAA,CAAA,CAAGC,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAI5B,EACnD6B,EAAaJ,IAAU,QAAU,GAAKA,EAAM,QAAQ,SAAU,EAAE,EAEtE,MAAO,CAACxB,EAAQuB,EAAMK,EAAYH,GAAQ,GAAIC,EAAUC,CAAO,CAAA,CAI1D,aAAaH,EAAeC,EAAcI,EAAuB,CAClE,GAAA,CAACL,EAAc,MAAA,GAGb,MAAAM,EAA4BC,GACzBA,EAAK,QAAQ,eAAgB,CAAChC,EAAOF,IAAQ,CAClD,MAAMmC,EAAgB,KAAK,OACrBC,EACJD,IAAkB,KACd,OAAOA,EAAcH,CAAK,GAAM,SAC7BG,EAAcH,CAAK,EAAkChC,CAAG,EACzDmC,EAAcnC,CAAG,EACnB,OAEC,OAAA,OAAOoC,GAAQ,SAAWA,EAAMlC,CAAA,CACxC,EAID,GAAA,OAAO,KAAK,QAAW,UACvB,KAAK,SAAW,OACd,KAAK,OAAO8B,CAAK,GACjB,OAAO,KAAK,OAAOA,CAAK,GAAM,UAC9B,KAAK,OAAOA,CAAK,EAAEL,CAAK,GACxB,KAAK,OAAOA,CAAK,GAEf,OAAA,OAAO,KAAK,OAAOK,CAAK,GAAM,UAAY,KAAK,OAAOA,CAAK,IAAM,KAC5D,KAAK,OAAOA,CAAK,EAAEL,CAAK,EAG1B,KAAK,OAAOA,CAAK,EACf,GAAAA,EAAM,WAAW,GAAG,EAC7B,MAAO,SAASA,EAAM,MAAM,CAAC,CAAC,OAE7BA,EAAM,WAAW,GAAG,GAAKA,EAAM,SAAS,GAAG,GAC3CA,EAAM,WAAW,GAAG,GAAKA,EAAM,SAAS,GAAG,EAC5C,CACM,MAAAU,EAAaV,EAAM,MAAM,EAAG,EAAE,EAAE,QAAQ,KAAM,GAAG,EAEnD,OAAAU,EAAW,SAAS,GAAG,EAClBJ,EAAyBI,CAAU,EAErCA,EAAW,WAAW,IAAI,EAAI,OAAOA,CAAU,IAAMA,CAAA,CAG9D,OAAOV,GAASC,GAAQ,GAAA,CAGnB,iBACLF,EAAe,GACfC,EAA4B,GAC5BC,EAA2B,GAC3BzB,EACAmC,EAAkC,GAClCC,EAAiC,GACjCC,EAAoB,GACG,CACjB,MAAAC,EAAa,KAAK,SAASf,CAAI,EAG/BgB,EAAU,mCAChB,IAAIC,EAA8B,KAC9BN,EAAaV,GAAS,GACpB,MAAAiB,EAAaP,EAAW,MAAMK,CAAO,EACvCE,IACaD,EAAAC,EAAW,CAAC,EAAE,KAAK,EACrBP,EAAAO,EAAW,CAAC,EAAE,KAAK,GAG9B,IAAAC,EAEAlB,EAAM,SAASgB,EAAe,GAAG,EACjBE,EAAAlB,EAAM,WAAW,GAAG,EAAI,IAAIU,CAAU,IAAM,IAAIA,CAAU,IACrDQ,EAAAlB,EAGzB,MAAMI,EAAa,KAAK,aAAac,EAAiBjB,EAAMF,CAAI,EAE1DoB,EAAgB,KAAK,aAAaR,EAAaC,EAAYb,CAAI,EAIrE,GAAIA,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,GAAG,EAAG,CAM9C,MAAMqB,EALQrB,EACX,MAAM,EAAG,EAAE,EACX,MAAM,GAAG,EACT,IAAKsB,GAASA,EAAK,MAAM,EAGzB,IAAKA,GAAS,CACb,MAAMC,EAAO,KAAK,SAASD,CAAI,GAAKA,EAK7B,MAAA,GAHL,OAAOC,GAAS,UAAYA,EAAK,WAAW,IAAI,EAC5C,OAAOA,CAAI,EACX,KAAK,YAAY,OAAOA,CAAI,CAAC,CACZ,KAAKlB,CAAU,EAAA,CACvC,EACA,KAAK,IAAI,EAEL,MAAA,CACL,UAAW,GAAG,IAAIL,EAAK,MAAM,EAAG,EAAE,CAAC,IAAIc,EAAW,IAAM,EAAE,GAAGb,CAAK,GAAGC,CAAI,EAAE,GAC3E,SAAAmB,EACA,MAAO,KACP,OAAA5C,CACF,CAAA,CAMF,GAAIsC,EAAY,CACd,GAAI,OAAOA,GAAe,UAAY,aAAcA,GAAc,UAAWA,EAAY,CACvF,MAAM9C,EACJ,OAAO8C,EAAW,UAAa,WAC3BA,EAAW,SAAS,CAClB,MAAOb,EAAOD,EAAQI,EACtB,KAAAH,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,CAAA,CACN,EACDF,EAAW,SAEXS,EAAWT,EAAW,MAExB,IAAAU,EAEA,GAAA,OAAOD,GAAa,WACtBC,EAAiBD,EAAS,CACxB,MAAOtB,EAAOD,EAAQI,EACtB,KAAAH,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,EACL,SAAAhD,CAAA,CACD,UACQuD,GAAY,OAAOA,GAAa,SAAU,CAC7C,MAAAE,EAAcX,EAAW,OAASf,EAClC2B,EAAW,KAAK,aAAaR,EAAiBjB,EAAMwB,CAAW,EACrE,QAAQ,IAAIP,CAAe,EAEzBM,EAAA,KAAK,OAAON,CAAe,GAC1B,KAAK,OAAOO,CAAW,EAAkCP,CAAe,GACzEA,EAAgB,SAAS,GAAG,GAC5BK,EAAS,SAAS,GAAG,EACjB,KAAK,kBAAkBE,EAAaF,EAAUG,EAAU,GAAIP,EAAe,EAAE,EAC7Ef,OACgBoB,EAAA,KAMjB,MAAA,CACL,UALgB,GAAGzB,CAAI,GACvBC,EAAQ,GAAGa,GAAYA,EAAW,IAAY,EAAE,GAAGb,CAAK,GAAGC,CAAI,GAAK,EACtE,GAAGU,EAAc,IAAIA,CAAW,GAAGC,CAAU,GAAK,EAAE,GAIlD,SAAU,MAAM,QAAQ5C,CAAQ,GAE5B,OAAOA,GAAa,UAAaA,EAAoB,SAAS,GAAG,EADhEA,EAGE,KAAK,YAAY,OAAOA,CAAQ,CAAC,EACxC,MAAOuD,IAAa,KAAO,KAAOvB,EAAM,WAAW,GAAG,EAAII,EAAaoB,EACvE,OAAAhD,CACF,CAAA,CAGF,MAAMmD,EACJ,OAAOb,GAAe,WAClBA,EAAW,CACT,MAAOb,EAAOD,EAAQI,EACtB,KAAAH,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,CACN,CAAA,EACDF,EAEC,MAAA,CACL,UAAW,GAAGf,CAAI,GAAGC,GAASa,EAAW,IAAM,IAAMb,EAAQC,EAAO,EAAE,GACtE,SAAU,MAAM,QAAQa,CAAU,EAC7Ba,EACD,OAAOA,GAAqB,UAAYA,EAAiB,WAAW,QAAQ,EAC1EA,EAAiB,MAAM,CAAC,EACvB,KAAK,YAAY,OAAOA,CAAgB,CAAC,EAChD,MACE,OAAOA,GAAqB,UAAYA,EAAiB,WAAW,QAAQ,EACxE,KACAvB,EACN,OAAA5B,CACF,CAAA,CAGK,OAAA,IAAA,CAGD,kBACN6B,EACAU,EACAa,EACAC,EACAC,EACAC,EACQ,CACR,GAAI,CAAChB,EAAQ,SAAS,KAAK,GAAK,CAACA,EAAQ,SAAS,IAAI,GAAK,CAACA,EAAQ,SAAS,IAAI,EACxE,OAAAA,EAET,KAAM,CAACf,EAAOgC,CAAY,EAAIjB,EAAQ,MAAM,IAAI,EAAE,IAAKkB,GAAMA,EAAE,MAAM,EAC/D7B,EAAa,KAAK,aAAawB,EAAYC,EAAWxB,CAAK,EAC3Dc,EAAgB,KAAK,aAAaW,EAAeC,EAAc1B,CAAK,EAErE,GAAAU,EAAQ,SAAS,KAAK,GAAKA,EAAQ,SAAS,IAAI,GAAMA,EAAQ,SAAS,IAAI,EAAG,CACjF,IAAImB,EAAgBlC,EAIhB,GAHA4B,IACcM,EAAAA,EAAc,QAAQ,MAAO9B,CAAU,GAErDW,EAAQ,SAAS,IAAI,EAAG,CAEpB,MAAAxC,EAAQ2D,EAAc,MAAM,YAAY,EAC1C,GAAAnB,EAAQ,SAAS,KAAK,EACpBe,EACcI,EAAAJ,EAAc,WAAW,GAAG,EACxCX,EACAe,EAAc,QAAQ,MAAOf,CAAa,EAE9Be,EAAAF,UAETzD,EAAO,CACV,MAAA4D,EAAY5D,EAAM,CAAC,EACnB6D,EAAe7D,EAAM,CAAC,EAAE,KAAK,EAEnC,IAAI8D,EAAmBlB,EACnB,CAACkB,GAAoBD,EAAa,SAAS,GAAG,EAEhDC,EAAmBD,EAAa,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EACzCC,IACSA,EAAA,IAELH,EAAAN,EAAW,WAAW,GAAG,EACrCxB,EACA8B,EAAc,QAAQC,EAAWE,CAAgB,CAAA,CACvD,CAEK,OAAAT,EAAaM,EAAgBF,GAAgBhC,CAAA,KAI7C,QAAA4B,EACHA,EAAW,WAAW,GAAG,EACvBxB,EACAJ,EAAM,QAAQ,MAAOI,CAAU,EACjC4B,GAAgBhC,CACtB,CAGM,eAAenB,EAA4C,CACjE,OAAO,OAAO,KAAK,KAAK,OAAO,EAAE,OAAQyD,GACvC,OAAO,UAAU,eAAe,KAC9B,KAAK,QAAQA,CAAoC,EACjDzD,CAAA,CAEJ,CAAA,CAGK,mBACLA,EACAmB,EAA4B,GAC5BC,EAA2B,GAC3BzB,EAA6B,GAC7B0B,EAA+B,GAC/BC,EAA8B,GAC9BU,EAAoB,GACG,CACnB,GAAA,CAAChC,EAAkB,OAAA,KAEjB,MAAAiC,EAAa,KAAK,eAAejC,CAAS,EAE5C,GAAAiC,EAAW,OAAS,EAAG,CACzB,MAAMyB,EAAQzB,EACX,IAAKQ,GAAS,CACP,MAAA1C,EAAW,KAAK,QAAQ0C,CAAI,EAC9B,GAAA,CAAC1C,EAAiB,MAAA,GAEtB,MAAM4C,EAAiB,KAAK,kBAC1B3C,EACAD,EAASC,CAAS,GAAK,GACvBmB,EACAC,EACAC,EACAC,CACF,EAEO,MAAA,GAAG,KAAK,YAAY,OAAOmB,CAAI,CAAC,CAAC,KAAKE,CAAc,EAC5D,CAAA,EACA,OAAO,OAAO,EACd,KAAK,IAAI,EAENgB,EAAc3D,EAAU,MAAM,EAAEmB,EAAQC,GAAM,MAAM,EAEpDwC,EAAiB,GAAG5D,CAAS,GAAGmB,EAAQ,GAAGa,EAAW,IAAM,EAAE,GAAGb,CAAK,GAAGC,CAAI,GAAK,EAAE,GACxFC,EAAW,IAAIA,CAAQ,GAAGC,CAAO,GAAK,EACxC,GAEO,MAAA,CACL,UAAWH,IAAUwC,EAAc3D,EAAY4D,EAC/C,SAAUF,EACV,MAAO,KACP,OAAA/D,CACF,CAAA,CAGK,OAAA,IAAA,CAGF,aAAaK,EAAmBL,EAAiB,GAA2B,CAC3E,MAAAkE,EAAQ,KAAK,QAAQ7D,CAAS,EAEhC,GAAA,CAAC6D,EAAc,OAAA,KAEb,MAAAC,EAAeD,EAAM,MAAM,GAAG,EAC9BE,EAA0B,CAAC,EAEpB,OAAAD,EAAA,QAASE,GAAe,CACnC,KAAM,CAACC,EAASC,CAAK,EAAIF,EAAW,MAAM,GAAG,EACvCG,EAAUD,GAASD,EACnBG,EAAYF,EAAQD,EAAU,OAC9BI,EAAQ,KAAK,MAAML,CAAU,EAC7BM,EAASD,GAAgB,CAACD,EAAWD,EAAS,GAAI,EAAE,EAC1D,GAAI,CAACG,EAAQ,OAEb,KAAM,CAAC3E,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAIgD,EACjDC,EAAS,KAAK,iBAAiBrD,EAAMC,EAAQC,EAAM,OAAWC,EAAUC,CAAO,EAE/EkD,EAAgB,KAAK,mBAAmBtD,EAAMC,EAAOC,EAAMzB,EAAQ0B,EAAUC,CAAO,EAC1F,GAAIkD,EAAe,CACX,KAAA,CAAE,SAAAjC,GAAaiC,EACrBT,EAAc,KAAKxB,CAAkB,EAErC,MAAA,CAGF,GAAIgC,EAAQ,CACV,MAAMpD,EAAQoD,EAAO,QAAU,KAAO,KAAKA,EAAO,KAAK,GAAK,GACxD,MAAM,QAAQA,EAAO,QAAQ,EACxBA,EAAA,SAAS,QAASE,GAAS,CAClBV,EAAA,KAAK,GAAG,KAAK,YAAYU,CAAI,CAAC,GAAGtD,CAAK,EAAE,CAAA,CACvD,EAED4C,EAAc,KAAK,GAAGQ,EAAO,QAAQ,GAAGpD,CAAK,EAAE,CACjD,CACF,CACD,EAEM,CACL,UAAAnB,EACA,SAAU+D,EAAc,KAAK,IAAI,EACjC,MAAO,KACP,OAAApE,CACF,CAAA,CAGK,QAAQG,EAAiD,CACxD,MAAA4E,EAAY,MAAM,QAAQ5E,CAAU,EAAIA,EAAaA,EAAW,MAAM,KAAK,EAE3E6E,EAA4B,CAAC,EAEzB,OAAAD,EAAA,QAAS1E,GAAc,CAC3B,GAAA,CAACA,EAAkB,OAAA,KAEvB,KAAM,CAACiE,EAASC,CAAK,EAAIlE,EAAU,MAAM,GAAG,EACtCmE,EAAUD,GAASD,EACnBG,EAAYF,EAAQD,EAAU,OAG9BW,EAAc,KAAK,aAAaT,EAASC,CAAS,EACxD,GAAIQ,EAAa,CACf,KAAM,CAAE,UAAWC,EAAgB,SAAAtC,CAAa,EAAAqC,EAEhDD,EAAQ,KAAK,CACX,UAAWE,EACX,SAAAtC,EACA,MAAO,KACP,OAAQ6B,CAAA,CACT,EAED,MAAA,CAGI,MAAAC,EAAQ,KAAK,MAAMrE,CAAS,EAC5BsE,EAASD,GAAgB,CAACD,EAAWD,EAAS,GAAI,EAAE,EACtD,GAAA,CAACG,EAAe,OAAA,KAEpB,KAAM,CAAC3E,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAIgD,EAEjDtC,EAAW,CAAChC,EAAU,UAAUkB,GAAQ,KAAOC,GAAS,GAAG,EAE3D2D,EACJ,KAAK,eAAe,GAAG5D,CAAI,GAAGc,EAAW,IAAM,EAAE,GAAGb,CAAK,EAAE,EAAE,OAAS,EAClE,GAAGD,CAAI,GAAGc,EAAW,IAAM,EAAE,GAAGb,CAAK,GACrCD,EAEAsD,EAAgB,KAAK,mBACzBM,EACA3D,EACAC,EACAzB,EACA0B,EACAC,EACAU,CACF,EAEA,GAAIwC,EAAe,CACjB,KAAM,CAAE,UAAAxE,EAAW,SAAAuC,EAAU,OAAA5C,GAAW6E,EAExCG,EAAQ,KAAK,CACX,UAAA3E,EACA,SAAAuC,EACA,MAAO,KACP,OAAA5C,CAAA,CACD,EAED,MAAA,CAGI,MAAA4E,EAAS,KAAK,iBAAiBrD,EAAMC,EAAQC,EAAMzB,EAAQ0B,EAAUC,EAASU,CAAQ,EAE5F,GAAIuC,EAAQ,CACJ,KAAA,CAAE,UAAAvE,EAAW,SAAAuC,EAAU,MAAOwC,EAAW,OAAQC,GAAeT,EAEtEI,EAAQ,KAAK,CACX,UAAA3E,EACA,SAAAuC,EACA,MAAOwC,EACP,OAAQC,CAAA,CACT,CAAA,CACH,CACD,EAEML,CAAA,CAEX"}
1
+ {"version":3,"file":"index.iife.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const valuesGroup = properties.group || type\n const groupValue = (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n ? (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n : unit\n ? value\n : finalValue\n\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","valuesGroup","groupValue","template","processedValue","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"wYASO,MAAMA,CAAQ,CAMnB,YAAY,CAAE,SAAAC,EAAW,CAAC,EAAG,OAAAC,EAAS,CAAA,EAAI,QAAAC,EAAU,GAAI,QAAAC,EAAU,CAAG,CAAA,EAAY,CAAA,EAAI,CACnF,KAAK,SAAWC,EAAA,CACd,MAAO,CAAC,CAAE,IAAAC,CAAA,IAAUA,GACjBL,GAEL,KAAK,OAASC,EACd,KAAK,QAAUC,EACf,KAAK,QAAUC,CAAA,CAGV,YAAYG,EAAqB,CAClC,GAAA,0BAA0B,KAAKA,CAAG,EAAG,CACjC,MAAAC,EAAQD,EAAI,MAAM,oBAAoB,EAC5C,GAAIC,EAAO,CACH,MAAAC,EAASD,EAAM,CAAC,EACtB,MAAO,IAAIC,CAAM,GAAGF,EACjB,MAAME,EAAO,MAAM,EACnB,QAAQ,SAAWC,GAAW,IAAIA,EAAO,YAAa,CAAA,EAAE,CAAC,EAAA,CAC9D,CAGK,OAAAH,EAAI,QAAQ,SAAWG,GAAW,IAAIA,EAAO,YAAa,CAAA,EAAE,CAAA,CAG9D,kBAAkBH,EAAqB,CACrC,OAAAA,EAAI,QAAQ,qCAAsC,MAAM,CAAA,CAGzD,iBAAiBI,EAA8C,CACjE,GAAA,CAACA,EAAe,MAAO,CAAC,EACtB,MAAAC,MAAiB,IAEhB,cAAA,QAAQD,CAAa,EAAE,QAAQ,CAAC,CAACV,EAAUY,CAAQ,IAAM,CAC1DA,GAAY,OAAOA,GAAa,UAClC,OAAO,KAAKA,CAAQ,EAAE,QAASC,GAAc,CAC3CF,EAAW,IAAIE,CAAS,CAAA,CACzB,CACH,CACD,EAEM,MAAM,KAAKF,CAAU,CAAA,CAGtB,gBAAgBG,EAAqB,GAAY,CACvD,MAAMC,EAAiB,KAAK,SACtBL,EAAgB,KAAK,QACrBM,EAAgB,OAAO,KAAKD,CAAc,EAEhD,GAAI,CAACL,EACH,MAAO,CAAC,GAAGM,EAAe,GAAGF,CAAQ,EAAE,KAAK,CAACG,EAAGC,IAAMA,EAAE,OAASD,EAAE,MAAM,EAAE,KAAK,GAAG,EAI/E,MAAAE,EAAgB,CAAC,GADF,KAAK,iBAAiBT,CAAa,CAClB,EAEtC,MAAO,CAAC,GAAGM,EAAe,GAAGG,EAAe,GAAGL,CAAQ,EACpD,KAAK,CAACG,EAAGC,IAAMA,EAAE,OAASD,EAAE,MAAM,EAClC,KAAK,GAAG,CAAA,CAGL,uBAAuBH,EAA6B,CACpD,MAAAM,EAAe,KAAK,gBAAgBN,CAAQ,EAG5CO,EAAuB,gBACvBC,EAAqB,sCACrBC,EAAqB,sCAGrBC,EACJ,wCAKAH,EACA,KAEAA,EACA,IACAC,EACA,IACAC,EACA,OAGIE,EAAc,IAAIL,CAAY,kBAG9BM,EAAY,SAGZC,EACJ,qGAGAN,EACA,IACAE,EACA,IACAD,EACA,sBAIIM,EAAc,eAGdC,EACJ,2GAGAR,EACA,IACAE,EACA,IACAD,EACA,oCAIF,OAAO,IAAI,OACTE,EAAgBC,EAAcC,EAAYC,EAAeC,EAAcC,CACzE,CAAA,CAGK,MAAMhB,EAAmBC,EAAqB,CAE/C,GAAA,OAAO,OAAO,KAAK,OAAO,EAAE,KAAMF,GAAaA,GAAA,YAAAA,EAAWC,EAAU,EACtE,MAAO,CAAC,OAAWA,EAAW,GAAI,GAAI,OAAW,MAAS,EAGtD,MAAAiB,EAAiB,KAAK,uBAAuBhB,CAAQ,EACrDP,GAASM,EAAY,UAAU,MAAMiB,CAAc,EACrD,GAAA,CAACvB,EAAc,OAAA,KAEb,KAAA,CAAA,CAAGC,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAI5B,EACnD6B,EAAaJ,IAAU,QAAU,GAAKA,EAAM,QAAQ,SAAU,EAAE,EAEtE,MAAO,CAACxB,EAAQuB,EAAMK,EAAYH,GAAQ,GAAIC,EAAUC,CAAO,CAAA,CAI1D,aAAaH,EAAeC,EAAcI,EAAuB,CAClE,GAAA,CAACL,EAAc,MAAA,GAGb,MAAAM,EAA4BC,GACzBA,EAAK,QAAQ,eAAgB,CAAChC,EAAOF,IAAQ,CAClD,MAAMmC,EAAgB,KAAK,OACrBC,EACJD,IAAkB,KACd,OAAOA,EAAcH,CAAK,GAAM,SAC7BG,EAAcH,CAAK,EAAkChC,CAAG,EACzDmC,EAAcnC,CAAG,EACnB,OAEC,OAAA,OAAOoC,GAAQ,SAAWA,EAAMlC,CAAA,CACxC,EAID,GAAA,OAAO,KAAK,QAAW,UACvB,KAAK,SAAW,OACd,KAAK,OAAO8B,CAAK,GACjB,OAAO,KAAK,OAAOA,CAAK,GAAM,UAC9B,KAAK,OAAOA,CAAK,EAAEL,CAAK,GACxB,KAAK,OAAOA,CAAK,GAEf,OAAA,OAAO,KAAK,OAAOK,CAAK,GAAM,UAAY,KAAK,OAAOA,CAAK,IAAM,KAC5D,KAAK,OAAOA,CAAK,EAAEL,CAAK,EAG1B,KAAK,OAAOA,CAAK,EACf,GAAAA,EAAM,WAAW,GAAG,EAC7B,MAAO,SAASA,EAAM,MAAM,CAAC,CAAC,OAE7BA,EAAM,WAAW,GAAG,GAAKA,EAAM,SAAS,GAAG,GAC3CA,EAAM,WAAW,GAAG,GAAKA,EAAM,SAAS,GAAG,EAC5C,CACM,MAAAU,EAAaV,EAAM,MAAM,EAAG,EAAE,EAAE,QAAQ,KAAM,GAAG,EAEnD,OAAAU,EAAW,SAAS,GAAG,EAClBJ,EAAyBI,CAAU,EAErCA,EAAW,WAAW,IAAI,EAAI,OAAOA,CAAU,IAAMA,CAAA,CAG9D,OAAOV,GAASC,GAAQ,GAAA,CAGnB,iBACLF,EAAe,GACfC,EAA4B,GAC5BC,EAA2B,GAC3BzB,EACAmC,EAAkC,GAClCC,EAAiC,GACjCC,EAAoB,GACG,CACjB,MAAAC,EAAa,KAAK,SAASf,CAAI,EAG/BgB,EAAU,mCAChB,IAAIC,EAA8B,KAC9BN,EAAaV,GAAS,GACpB,MAAAiB,EAAaP,EAAW,MAAMK,CAAO,EACvCE,IACaD,EAAAC,EAAW,CAAC,EAAE,KAAK,EACrBP,EAAAO,EAAW,CAAC,EAAE,KAAK,GAG9B,IAAAC,EAEAlB,EAAM,SAASgB,EAAe,GAAG,EACjBE,EAAAlB,EAAM,WAAW,GAAG,EAAI,IAAIU,CAAU,IAAM,IAAIA,CAAU,IACrDQ,EAAAlB,EAGzB,MAAMI,EAAa,KAAK,aAAac,EAAiBjB,EAAMF,CAAI,EAE1DoB,EAAgB,KAAK,aAAaR,EAAaC,EAAYb,CAAI,EAIrE,GAAIA,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,GAAG,EAAG,CAM9C,MAAMqB,EALQrB,EACX,MAAM,EAAG,EAAE,EACX,MAAM,GAAG,EACT,IAAKsB,GAASA,EAAK,MAAM,EAGzB,IAAKA,GAAS,CACb,MAAMC,EAAO,KAAK,SAASD,CAAI,GAAKA,EAK7B,MAAA,GAHL,OAAOC,GAAS,UAAYA,EAAK,WAAW,IAAI,EAC5C,OAAOA,CAAI,EACX,KAAK,YAAY,OAAOA,CAAI,CAAC,CACZ,KAAKlB,CAAU,EAAA,CACvC,EACA,KAAK,IAAI,EAEL,MAAA,CACL,UAAW,GAAG,IAAIL,EAAK,MAAM,EAAG,EAAE,CAAC,IAAIc,EAAW,IAAM,EAAE,GAAGb,CAAK,GAAGC,CAAI,EAAE,GAC3E,SAAAmB,EACA,MAAO,KACP,OAAA5C,CACF,CAAA,CAMF,GAAIsC,EAAY,CACd,GAAI,OAAOA,GAAe,UAAY,aAAcA,GAAc,UAAWA,EAAY,CACjF,MAAAS,EAAcT,EAAW,OAASf,EAClCyB,EAAc,KAAK,OAAOD,CAAW,EAAkCnB,CAAU,EAClF,KAAK,OAAOmB,CAAW,EAAkCnB,CAAU,EACpEH,EACED,EACAI,EAEApC,EACJ,OAAO8C,EAAW,UAAa,WAC3BA,EAAW,SAAS,CAClB,MAAOU,EACP,KAAAvB,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,CAAA,CACN,EACDF,EAAW,SAEXW,EAAWX,EAAW,MAExB,IAAAY,EAEA,GAAA,OAAOD,GAAa,WACtBC,EAAiBD,EAAS,CACxB,MAAOD,EACP,KAAAvB,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,EACL,SAAAhD,CAAA,CACD,UACQyD,GAAY,OAAOA,GAAa,SAAU,CACnD,MAAME,EAAW,KAAK,aAAaT,EAAiBjB,EAAMsB,CAAW,EAGnEG,EAAA,KAAK,OAAOR,CAAe,GAC1B,KAAK,OAAOK,CAAW,EAAkCL,CAAe,GACzEA,EAAgB,SAAS,GAAG,GAC5BO,EAAS,SAAS,GAAG,EACjB,KAAK,kBAAkBF,EAAaE,EAAUE,EAAU,GAAIR,EAAe,EAAE,EAC7Ef,OACgBsB,EAAA,KAMjB,MAAA,CACL,UALgB,GAAG3B,CAAI,GACvBC,EAAQ,GAAGa,GAAYA,EAAW,IAAY,EAAE,GAAGb,CAAK,GAAGC,CAAI,GAAK,EACtE,GAAGU,EAAc,IAAIA,CAAW,GAAGC,CAAU,GAAK,EAAE,GAIlD,SAAU,MAAM,QAAQ5C,CAAQ,GAE5B,OAAOA,GAAa,UAAaA,EAAoB,SAAS,GAAG,EADhEA,EAGE,KAAK,YAAY,OAAOA,CAAQ,CAAC,EACxC,MAAOyD,IAAa,KAAO,KAAOzB,EAAM,WAAW,GAAG,EAAII,EAAasB,EACvE,OAAAlD,CACF,CAAA,CAGF,MAAMoD,EACJ,OAAOd,GAAe,WAClBA,EAAW,CACT,MAAOb,EAAOD,EAAQI,EACtB,KAAAH,EACA,YAAaW,EAAaD,EAAcQ,EACxC,WAAAP,EACA,IAAKI,CACN,CAAA,EACDF,EAEC,MAAA,CACL,UAAW,GAAGf,CAAI,GAAGC,GAASa,EAAW,IAAM,IAAMb,EAAQC,EAAO,EAAE,GACtE,SAAU,MAAM,QAAQa,CAAU,EAC7Bc,EACD,OAAOA,GAAqB,UAAYA,EAAiB,WAAW,QAAQ,EAC1EA,EAAiB,MAAM,CAAC,EACvB,KAAK,YAAY,OAAOA,CAAgB,CAAC,EAChD,MACE,OAAOA,GAAqB,UAAYA,EAAiB,WAAW,QAAQ,EACxE,KACAxB,EACN,OAAA5B,CACF,CAAA,CAGK,OAAA,IAAA,CAGD,kBACN6B,EACAU,EACAc,EACAC,EACAC,EACAC,EACQ,CACR,GAAI,CAACjB,EAAQ,SAAS,KAAK,GAAK,CAACA,EAAQ,SAAS,IAAI,GAAK,CAACA,EAAQ,SAAS,IAAI,EACxE,OAAAA,EAET,KAAM,CAACf,EAAOiC,CAAY,EAAIlB,EAAQ,MAAM,IAAI,EAAE,IAAKmB,GAAMA,EAAE,MAAM,EAC/D9B,EAAa,KAAK,aAAayB,EAAYC,EAAWzB,CAAK,EAC3Dc,EAAgB,KAAK,aAAaY,EAAeC,EAAc3B,CAAK,EAErE,GAAAU,EAAQ,SAAS,KAAK,GAAKA,EAAQ,SAAS,IAAI,GAAMA,EAAQ,SAAS,IAAI,EAAG,CACjF,IAAIoB,EAAgBnC,EAIhB,GAHA6B,IACcM,EAAAA,EAAc,QAAQ,MAAO/B,CAAU,GAErDW,EAAQ,SAAS,IAAI,EAAG,CAEpB,MAAAxC,EAAQ4D,EAAc,MAAM,YAAY,EAC1C,GAAApB,EAAQ,SAAS,KAAK,EACpBgB,EACcI,EAAAJ,EAAc,WAAW,GAAG,EACxCZ,EACAgB,EAAc,QAAQ,MAAOhB,CAAa,EAE9BgB,EAAAF,UAET1D,EAAO,CACV,MAAA6D,EAAY7D,EAAM,CAAC,EACnB8D,EAAe9D,EAAM,CAAC,EAAE,KAAK,EAEnC,IAAI+D,EAAmBnB,EACnB,CAACmB,GAAoBD,EAAa,SAAS,GAAG,EAEhDC,EAAmBD,EAAa,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EACzCC,IACSA,EAAA,IAELH,EAAAN,EAAW,WAAW,GAAG,EACrCzB,EACA+B,EAAc,QAAQC,EAAWE,CAAgB,CAAA,CACvD,CAEK,OAAAT,EAAaM,EAAgBF,GAAgBjC,CAAA,KAI7C,QAAA6B,EACHA,EAAW,WAAW,GAAG,EACvBzB,EACAJ,EAAM,QAAQ,MAAOI,CAAU,EACjC6B,GAAgBjC,CACtB,CAGM,eAAenB,EAA4C,CACjE,OAAO,OAAO,KAAK,KAAK,OAAO,EAAE,OAAQ0D,GACvC,OAAO,UAAU,eAAe,KAC9B,KAAK,QAAQA,CAAoC,EACjD1D,CAAA,CAEJ,CAAA,CAGK,mBACLA,EACAmB,EAA4B,GAC5BC,EAA2B,GAC3BzB,EAA6B,GAC7B0B,EAA+B,GAC/BC,EAA8B,GAC9BU,EAAoB,GACG,CACnB,GAAA,CAAChC,EAAkB,OAAA,KAEjB,MAAAiC,EAAa,KAAK,eAAejC,CAAS,EAE5C,GAAAiC,EAAW,OAAS,EAAG,CACzB,MAAM0B,EAAQ1B,EACX,IAAKQ,GAAS,CACP,MAAA1C,EAAW,KAAK,QAAQ0C,CAAI,EAC9B,GAAA,CAAC1C,EAAiB,MAAA,GAEtB,MAAM8C,EAAiB,KAAK,kBAC1B7C,EACAD,EAASC,CAAS,GAAK,GACvBmB,EACAC,EACAC,EACAC,CACF,EAEO,MAAA,GAAG,KAAK,YAAY,OAAOmB,CAAI,CAAC,CAAC,KAAKI,CAAc,EAC5D,CAAA,EACA,OAAO,OAAO,EACd,KAAK,IAAI,EAENe,EAAc5D,EAAU,MAAM,EAAEmB,EAAQC,GAAM,MAAM,EAEpDyC,EAAiB,GAAG7D,CAAS,GAAGmB,EAAQ,GAAGa,EAAW,IAAM,EAAE,GAAGb,CAAK,GAAGC,CAAI,GAAK,EAAE,GACxFC,EAAW,IAAIA,CAAQ,GAAGC,CAAO,GAAK,EACxC,GAEO,MAAA,CACL,UAAWH,IAAUyC,EAAc5D,EAAY6D,EAC/C,SAAUF,EACV,MAAO,KACP,OAAAhE,CACF,CAAA,CAGK,OAAA,IAAA,CAGF,aAAaK,EAAmBL,EAAiB,GAA2B,CAC3E,MAAAmE,EAAQ,KAAK,QAAQ9D,CAAS,EAEhC,GAAA,CAAC8D,EAAc,OAAA,KAEb,MAAAC,EAAeD,EAAM,MAAM,GAAG,EAC9BE,EAA0B,CAAC,EAEpB,OAAAD,EAAA,QAASE,GAAe,CACnC,KAAM,CAACC,EAASC,CAAK,EAAIF,EAAW,MAAM,GAAG,EACvCG,EAAUD,GAASD,EACnBG,EAAYF,EAAQD,EAAU,OAC9BI,EAAQ,KAAK,MAAML,CAAU,EAC7BM,EAASD,GAAgB,CAACD,EAAWD,EAAS,GAAI,EAAE,EAC1D,GAAI,CAACG,EAAQ,OAEb,KAAM,CAAC5E,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAIiD,EACjDC,EAAS,KAAK,iBAAiBtD,EAAMC,EAAQC,EAAM,OAAWC,EAAUC,CAAO,EAE/EmD,EAAgB,KAAK,mBAAmBvD,EAAMC,EAAOC,EAAMzB,EAAQ0B,EAAUC,CAAO,EAC1F,GAAImD,EAAe,CACX,KAAA,CAAE,SAAAlC,GAAakC,EACrBT,EAAc,KAAKzB,CAAkB,EAErC,MAAA,CAGF,GAAIiC,EAAQ,CACV,MAAMrD,EAAQqD,EAAO,QAAU,KAAO,KAAKA,EAAO,KAAK,GAAK,GACxD,MAAM,QAAQA,EAAO,QAAQ,EACxBA,EAAA,SAAS,QAASE,GAAS,CAClBV,EAAA,KAAK,GAAG,KAAK,YAAYU,CAAI,CAAC,GAAGvD,CAAK,EAAE,CAAA,CACvD,EAED6C,EAAc,KAAK,GAAGQ,EAAO,QAAQ,GAAGrD,CAAK,EAAE,CACjD,CACF,CACD,EAEM,CACL,UAAAnB,EACA,SAAUgE,EAAc,KAAK,IAAI,EACjC,MAAO,KACP,OAAArE,CACF,CAAA,CAGK,QAAQG,EAAiD,CACxD,MAAA6E,EAAY,MAAM,QAAQ7E,CAAU,EAAIA,EAAaA,EAAW,MAAM,KAAK,EAE3E8E,EAA4B,CAAC,EAEzB,OAAAD,EAAA,QAAS3E,GAAc,CAC3B,GAAA,CAACA,EAAkB,OAAA,KAEvB,KAAM,CAACkE,EAASC,CAAK,EAAInE,EAAU,MAAM,GAAG,EACtCoE,EAAUD,GAASD,EACnBG,EAAYF,EAAQD,EAAU,OAG9BW,EAAc,KAAK,aAAaT,EAASC,CAAS,EACxD,GAAIQ,EAAa,CACf,KAAM,CAAE,UAAWC,EAAgB,SAAAvC,CAAa,EAAAsC,EAEhDD,EAAQ,KAAK,CACX,UAAWE,EACX,SAAAvC,EACA,MAAO,KACP,OAAQ8B,CAAA,CACT,EAED,MAAA,CAGI,MAAAC,EAAQ,KAAK,MAAMtE,CAAS,EAC5BuE,EAASD,GAAgB,CAACD,EAAWD,EAAS,GAAI,EAAE,EACtD,GAAA,CAACG,EAAe,OAAA,KAEpB,KAAM,CAAC5E,EAAQuB,EAAMC,EAAOC,EAAMC,EAAUC,CAAO,EAAIiD,EAEjDvC,EAAW,CAAChC,EAAU,UAAUkB,GAAQ,KAAOC,GAAS,GAAG,EAE3D4D,EACJ,KAAK,eAAe,GAAG7D,CAAI,GAAGc,EAAW,IAAM,EAAE,GAAGb,CAAK,EAAE,EAAE,OAAS,EAClE,GAAGD,CAAI,GAAGc,EAAW,IAAM,EAAE,GAAGb,CAAK,GACrCD,EAEAuD,EAAgB,KAAK,mBACzBM,EACA5D,EACAC,EACAzB,EACA0B,EACAC,EACAU,CACF,EAEA,GAAIyC,EAAe,CACjB,KAAM,CAAE,UAAAzE,EAAW,SAAAuC,EAAU,OAAA5C,GAAW8E,EAExCG,EAAQ,KAAK,CACX,UAAA5E,EACA,SAAAuC,EACA,MAAO,KACP,OAAA5C,CAAA,CACD,EAED,MAAA,CAGI,MAAA6E,EAAS,KAAK,iBAAiBtD,EAAMC,EAAQC,EAAMzB,EAAQ0B,EAAUC,EAASU,CAAQ,EAE5F,GAAIwC,EAAQ,CACJ,KAAA,CAAE,UAAAxE,EAAW,SAAAuC,EAAU,MAAOyC,EAAW,OAAQC,GAAeT,EAEtEI,EAAQ,KAAK,CACX,UAAA5E,EACA,SAAAuC,EACA,MAAOyC,EACP,OAAQC,CAAA,CACT,CAAA,CACH,CACD,EAEML,CAAA,CAEX"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(g,$){typeof exports=="object"&&typeof module!="undefined"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(g=typeof globalThis!="undefined"?globalThis:g||self,$(g.__tenoxui_moxie__={}))})(this,function(g){"use strict";var Z=Object.defineProperty;var W=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var _=(g,$,x)=>$ in g?Z(g,$,{enumerable:!0,configurable:!0,writable:!0,value:x}):g[$]=x,j=(g,$)=>{for(var x in $||($={}))z.call($,x)&&_(g,x,$[x]);if(W)for(var x of W($))T.call($,x)&&_(g,x,$[x]);return g};class ${constructor({property:s={},values:t={},classes:e={},aliases:l={}}={}){this.property=j({moxie:({key:r})=>r},s),this.values=t,this.classes=e,this.aliases=l}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const t=s.match(/^(webkit|moz|ms|o)/);if(t){const e=t[0];return`-${e}${s.slice(e.length).replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const t=new Set;return Object.entries(s).forEach(([e,l])=>{l&&typeof l=="object"&&Object.keys(l).forEach(r=>{t.add(r)})}),Array.from(t)}getTypePrefixes(s=[]){const t=this.property,e=this.classes,l=Object.keys(t);if(!e)return[...l,...s].sort((i,n)=>n.length-i.length).join("|");const o=[...this.getAllClassNames(e)];return[...l,...o,...s].sort((i,n)=>n.length-i.length).join("|")}generateClassNameRegEx(s){const t=this.getTypePrefixes(s),e="\\[[^\\]]+\\]",l="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+e+")|"+e+"|"+l+"|"+r+"):)?",i=`(${t}|\\[[^\\]]+\\])`,n="(?:-)?",f="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+l+"|(?:\\$[^\\s\\/]+))",h="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+l+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+i+n+f+h+a)}parse(s,t){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const e=this.generateClassNameRegEx(t),l=(s+"-dummy").match(e);if(!l)return null;const[,r,o,i,n,f,h]=l,a=i==="dummy"?"":i.replace("-dummy","");return[r,o,a,n||"",f,h]}processValue(s,t,e){if(!s)return"";const l=r=>r.replace(/\{([^}]+)\}/g,(o,i)=>{const n=this.values,f=n!==null?typeof n[e]=="object"?n[e][i]:n[i]:void 0;return typeof f=="string"?f:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[e]&&typeof this.values[e]=="object"&&this.values[e][s]||this.values[s]))return typeof this.values[e]=="object"&&this.values[e]!==null?this.values[e][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?l(r):r.startsWith("--")?`var(${r})`:r}return s+(t||"")}processShorthand(s="",t="",e="",l,r="",o="",i=!0){const n=this.property[s],f=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let h=null,a=t||"";const p=a.match(f);p&&(h=p[1].trim(),a=p[2].trim());let c;t.includes(h+":")?c=t.startsWith("(")?`(${a})`:`[${a}]`:c=t;const u=this.processValue(c,e,s),m=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const C=s.slice(1,-1).split(",").map(y=>y.trim()).map(y=>{const d=this.property[y]||y;return`${typeof d=="string"&&d.startsWith("--")?String(d):this.toKebabCase(String(d))}: ${u}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${i?"-":""}${t}${e}`}`,cssRules:C,value:null,prefix:l}}if(n){if(typeof n=="object"&&"property"in n&&"value"in n){const C=typeof n.property=="function"?n.property({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:h}):n.property,y=n.value;let d;if(typeof y=="function")d=y({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:h,property:C});else if(y&&typeof y=="string"){const P=n.group||s,b=this.processValue(c,e,P);console.log(c),d=this.values[c]||this.values[P][c]||c.includes("{")||y.includes("{")?this.parseValuePattern(P,y,b,"",m,""):u}else d=null;return{className:`${s}${t?`${i&&i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(C)||typeof C=="string"&&C.includes(":")?C:this.toKebabCase(String(C)),value:y===null?null:t.startsWith("[")?u:d,prefix:l}}const A=typeof n=="function"?n({value:e?t:u,unit:e,secondValue:o?r:m,secondUnit:o,key:h}):n;return{className:`${s}${t?(i?"-":"")+t+e:""}`,cssRules:Array.isArray(n)?A:typeof A=="string"&&A.startsWith("value:")?A.slice(6):this.toKebabCase(String(A)),value:typeof A=="string"&&A.startsWith("value:")?null:u,prefix:l}}return null}parseValuePattern(s,t,e,l,r,o){if(!t.includes("{0}")&&!t.includes("{1")&&!t.includes("||"))return t;const[i,n]=t.split("||").map(a=>a.trim()),f=this.processValue(e,l,s),h=this.processValue(r,o,s);if(t.includes("{0}")&&t.includes("{1")||t.includes("{1")){let a=i;if(e&&(a=a.replace("{0}",f)),t.includes("{1")){const p=a.match(/{1([^}]*)}/);if(t.includes("{1}"))r?a=r.startsWith("[")?h:a.replace("{1}",h):a=n;else if(p){const c=p[0],u=p[1].trim();let m=h;!m&&u.includes("|")?m=u.split("|")[1].trim():m||(m=""),a=e.startsWith("[")?f:a.replace(c,m)}}return e?a:n||i}else return e?e.startsWith("[")?f:i.replace("{0}",f):n||i}getParentClass(s){return Object.keys(this.classes).filter(t=>Object.prototype.hasOwnProperty.call(this.classes[t],s))}processCustomClass(s,t="",e="",l="",r="",o="",i=!0){if(!s)return null;const n=this.getParentClass(s);if(n.length>0){const f=n.map(p=>{const c=this.classes[p];if(!c)return"";const u=this.parseValuePattern(s,c[s]||"",t,e,r,o);return`${this.toKebabCase(String(p))}: ${u}`}).filter(Boolean).join("; "),h=s.slice(-(t+e).length),a=`${s}${t?`${i?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`;return{className:t===h?s:a,cssRules:f,value:null,prefix:l}}return null}processAlias(s,t=""){const e=this.aliases[s];if(!e)return null;const l=e.split(" "),r=[];return l.forEach(o=>{const[i,n]=o.split(":"),f=n||i,h=n?i:void 0,a=this.parse(o),p=a||[h,f,"",""];if(!p)return;const[c,u,m,A,C,y]=p,d=this.processShorthand(u,m,A,void 0,C,y),v=this.processCustomClass(u,m,A,c,C,y);if(v){const{cssRules:P}=v;r.push(P);return}if(d){const P=d.value!==null?`: ${d.value}`:"";Array.isArray(d.cssRules)?d.cssRules.forEach(b=>{r.push(`${this.toKebabCase(b)}${P}`)}):r.push(`${d.cssRules}${P}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:t}}process(s){const t=Array.isArray(s)?s:s.split(/\s+/),e=[];return t.forEach(l=>{if(!l)return this;const[r,o]=l.split(":"),i=o||r,n=o?r:void 0,f=this.processAlias(i,n);if(f){const{className:b,cssRules:R}=f;e.push({className:b,cssRules:R,value:null,prefix:n});return}const h=this.parse(l),a=h||[n,i,"",""];if(!a)return this;const[p,c,u,m,A,C]=a,y=!l.includes((c||"")+(u||"")),d=this.getParentClass(`${c}${y?"-":""}${u}`).length>0?`${c}${y?"-":""}${u}`:c,v=this.processCustomClass(d,u,m,p,A,C,y);if(v){const{className:b,cssRules:R,prefix:V}=v;e.push({className:b,cssRules:R,value:null,prefix:V});return}const P=this.processShorthand(c,u,m,p,A,C,y);if(P){const{className:b,cssRules:R,value:V,prefix:S}=P;e.push({className:b,cssRules:R,value:V,prefix:S})}}),e}}g.TenoxUI=$,g.default=$,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(m,d){typeof exports=="object"&&typeof module!="undefined"?d(exports):typeof define=="function"&&define.amd?define(["exports"],d):(m=typeof globalThis!="undefined"?globalThis:m||self,d(m.__tenoxui_moxie__={}))})(this,function(m){"use strict";var Z=Object.defineProperty;var W=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var _=(m,d,P)=>d in m?Z(m,d,{enumerable:!0,configurable:!0,writable:!0,value:P}):m[d]=P,j=(m,d)=>{for(var P in d||(d={}))z.call(d,P)&&_(m,P,d[P]);if(W)for(var P of W(d))T.call(d,P)&&_(m,P,d[P]);return m};class d{constructor({property:s={},values:t={},classes:e={},aliases:i={}}={}){this.property=j({moxie:({key:r})=>r},s),this.values=t,this.classes=e,this.aliases=i}toKebabCase(s){if(/^(webkit|moz|ms|o)[A-Z]/.test(s)){const t=s.match(/^(webkit|moz|ms|o)/);if(t){const e=t[0];return`-${e}${s.slice(e.length).replace(/[A-Z]/g,i=>`-${i.toLowerCase()}`)}`}}return s.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}escapeCSSSelector(s){return s.replace(/([ #{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}getAllClassNames(s){if(!s)return[];const t=new Set;return Object.entries(s).forEach(([e,i])=>{i&&typeof i=="object"&&Object.keys(i).forEach(r=>{t.add(r)})}),Array.from(t)}getTypePrefixes(s=[]){const t=this.property,e=this.classes,i=Object.keys(t);if(!e)return[...i,...s].sort((l,n)=>n.length-l.length).join("|");const o=[...this.getAllClassNames(e)];return[...i,...o,...s].sort((l,n)=>n.length-l.length).join("|")}generateClassNameRegEx(s){const t=this.getTypePrefixes(s),e="\\[[^\\]]+\\]",i="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",r="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",o="(?:([a-zA-Z0-9_-]+|[a-zA-Z0-9_-]+(?:-"+e+")|"+e+"|"+i+"|"+r+"):)?",l=`(${t}|\\[[^\\]]+\\])`,n="(?:-)?",f="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+i+"|(?:\\$[^\\s\\/]+))",h="([a-zA-Z%]*)",a="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+e+"|"+r+"|"+i+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return new RegExp(o+l+n+f+h+a)}parse(s,t){if(Object.values(this.classes).some(p=>p==null?void 0:p[s]))return[void 0,s,"","",void 0,void 0];const e=this.generateClassNameRegEx(t),i=(s+"-dummy").match(e);if(!i)return null;const[,r,o,l,n,f,h]=i,a=l==="dummy"?"":l.replace("-dummy","");return[r,o,a,n||"",f,h]}processValue(s,t,e){if(!s)return"";const i=r=>r.replace(/\{([^}]+)\}/g,(o,l)=>{const n=this.values,f=n!==null?typeof n[e]=="object"?n[e][l]:n[l]:void 0;return typeof f=="string"?f:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[e]&&typeof this.values[e]=="object"&&this.values[e][s]||this.values[s]))return typeof this.values[e]=="object"&&this.values[e]!==null?this.values[e][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const r=s.slice(1,-1).replace(/_/g," ");return r.includes("{")?i(r):r.startsWith("--")?`var(${r})`:r}return s+(t||"")}processShorthand(s="",t="",e="",i,r="",o="",l=!0){const n=this.property[s],f=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let h=null,a=t||"";const p=a.match(f);p&&(h=p[1].trim(),a=p[2].trim());let y;t.includes(h+":")?y=t.startsWith("(")?`(${a})`:`[${a}]`:y=t;const c=this.processValue(y,e,s),$=this.processValue(r,o,s);if(s.startsWith("[")&&s.endsWith("]")){const v=s.slice(1,-1).split(",").map(g=>g.trim()).map(g=>{const u=this.property[g]||g;return`${typeof u=="string"&&u.startsWith("--")?String(u):this.toKebabCase(String(u))}: ${c}`}).join("; ");return{className:`${`[${s.slice(1,-1)}]${l?"-":""}${t}${e}`}`,cssRules:v,value:null,prefix:i}}if(n){if(typeof n=="object"&&"property"in n&&"value"in n){const v=n.group||s,g=this.values[v][c]?this.values[v][c]:e?t:c,u=typeof n.property=="function"?n.property({value:g,unit:e,secondValue:o?r:$,secondUnit:o,key:h}):n.property,A=n.value;let x;if(typeof A=="function")x=A({value:g,unit:e,secondValue:o?r:$,secondUnit:o,key:h,property:u});else if(A&&typeof A=="string"){const R=this.processValue(y,e,v);x=this.values[y]||this.values[v][y]||y.includes("{")||A.includes("{")?this.parseValuePattern(v,A,R,"",$,""):c}else x=null;return{className:`${s}${t?`${l&&l?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`,cssRules:Array.isArray(u)||typeof u=="string"&&u.includes(":")?u:this.toKebabCase(String(u)),value:A===null?null:t.startsWith("[")?c:x,prefix:i}}const C=typeof n=="function"?n({value:e?t:c,unit:e,secondValue:o?r:$,secondUnit:o,key:h}):n;return{className:`${s}${t?(l?"-":"")+t+e:""}`,cssRules:Array.isArray(n)?C:typeof C=="string"&&C.startsWith("value:")?C.slice(6):this.toKebabCase(String(C)),value:typeof C=="string"&&C.startsWith("value:")?null:c,prefix:i}}return null}parseValuePattern(s,t,e,i,r,o){if(!t.includes("{0}")&&!t.includes("{1")&&!t.includes("||"))return t;const[l,n]=t.split("||").map(a=>a.trim()),f=this.processValue(e,i,s),h=this.processValue(r,o,s);if(t.includes("{0}")&&t.includes("{1")||t.includes("{1")){let a=l;if(e&&(a=a.replace("{0}",f)),t.includes("{1")){const p=a.match(/{1([^}]*)}/);if(t.includes("{1}"))r?a=r.startsWith("[")?h:a.replace("{1}",h):a=n;else if(p){const y=p[0],c=p[1].trim();let $=h;!$&&c.includes("|")?$=c.split("|")[1].trim():$||($=""),a=e.startsWith("[")?f:a.replace(y,$)}}return e?a:n||l}else return e?e.startsWith("[")?f:l.replace("{0}",f):n||l}getParentClass(s){return Object.keys(this.classes).filter(t=>Object.prototype.hasOwnProperty.call(this.classes[t],s))}processCustomClass(s,t="",e="",i="",r="",o="",l=!0){if(!s)return null;const n=this.getParentClass(s);if(n.length>0){const f=n.map(p=>{const y=this.classes[p];if(!y)return"";const c=this.parseValuePattern(s,y[s]||"",t,e,r,o);return`${this.toKebabCase(String(p))}: ${c}`}).filter(Boolean).join("; "),h=s.slice(-(t+e).length),a=`${s}${t?`${l?"-":""}${t}${e}`:""}${r?`/${r}${o}`:""}`;return{className:t===h?s:a,cssRules:f,value:null,prefix:i}}return null}processAlias(s,t=""){const e=this.aliases[s];if(!e)return null;const i=e.split(" "),r=[];return i.forEach(o=>{const[l,n]=o.split(":"),f=n||l,h=n?l:void 0,a=this.parse(o),p=a||[h,f,"",""];if(!p)return;const[y,c,$,C,v,g]=p,u=this.processShorthand(c,$,C,void 0,v,g),A=this.processCustomClass(c,$,C,y,v,g);if(A){const{cssRules:x}=A;r.push(x);return}if(u){const x=u.value!==null?`: ${u.value}`:"";Array.isArray(u.cssRules)?u.cssRules.forEach(b=>{r.push(`${this.toKebabCase(b)}${x}`)}):r.push(`${u.cssRules}${x}`)}}),{className:s,cssRules:r.join("; "),value:null,prefix:t}}process(s){const t=Array.isArray(s)?s:s.split(/\s+/),e=[];return t.forEach(i=>{if(!i)return this;const[r,o]=i.split(":"),l=o||r,n=o?r:void 0,f=this.processAlias(l,n);if(f){const{className:b,cssRules:R}=f;e.push({className:b,cssRules:R,value:null,prefix:n});return}const h=this.parse(i),a=h||[n,l,"",""];if(!a)return this;const[p,y,c,$,C,v]=a,g=!i.includes((y||"")+(c||"")),u=this.getParentClass(`${y}${g?"-":""}${c}`).length>0?`${y}${g?"-":""}${c}`:y,A=this.processCustomClass(u,c,$,p,C,v,g);if(A){const{className:b,cssRules:R,prefix:V}=A;e.push({className:b,cssRules:R,value:null,prefix:V});return}const x=this.processShorthand(y,c,$,p,C,v,g);if(x){const{className:b,cssRules:R,value:V,prefix:S}=x;e.push({className:b,cssRules:R,value:V,prefix:S})}}),e}}m.TenoxUI=d,m.default=d,Object.defineProperties(m,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const valuesGroup = properties.group || type\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n console.log(finalCleanValue)\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","template","processedValue","valuesGroup","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import type {\n Values,\n Aliases,\n Classes,\n CSSPropertyOrVariable,\n GetCSSProperty\n} from '@tenoxui/types'\nimport type { Property, Config, ProcessedStyle } from './types'\nexport * from './types'\nexport class TenoxUI {\n private property: Property\n private values: Values\n private classes: Classes\n private aliases: Aliases\n\n constructor({ property = {}, values = {}, classes = {}, aliases = {} }: Config = {}) {\n this.property = {\n moxie: ({ key }) => key as GetCSSProperty, // use moxie-* to access all properties and variables\n ...property\n }\n this.values = values\n this.classes = classes\n this.aliases = aliases\n }\n\n public toKebabCase(str: string): string {\n if (/^(webkit|moz|ms|o)[A-Z]/.test(str)) {\n const match = str.match(/^(webkit|moz|ms|o)/)\n if (match) {\n const prefix = match[0]\n return `-${prefix}${str\n .slice(prefix.length)\n .replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`\n }\n }\n\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n }\n\n public escapeCSSSelector(str: string): string {\n return str.replace(/([ #{}.:;?%&,@+*~'\"!^$[\\]()=>|/])/g, '\\\\$1')\n }\n\n private getAllClassNames(classRegistry: Classes | undefined): string[] {\n if (!classRegistry) return []\n const classNames = new Set<string>()\n\n Object.entries(classRegistry).forEach(([property, classObj]) => {\n if (classObj && typeof classObj === 'object') {\n Object.keys(classObj).forEach((className) => {\n classNames.add(className)\n })\n }\n })\n\n return Array.from(classNames)\n }\n\n private getTypePrefixes(safelist: string[] = []): string {\n const styleAttribute = this.property\n const classRegistry = this.classes\n const propertyTypes = Object.keys(styleAttribute)\n\n if (!classRegistry) {\n return [...propertyTypes, ...safelist].sort((a, b) => b.length - a.length).join('|')\n }\n\n const classConfigs = this.getAllClassNames(classRegistry)\n const classPatterns = [...classConfigs]\n\n return [...propertyTypes, ...classPatterns, ...safelist]\n .sort((a, b) => b.length - a.length)\n .join('|')\n }\n\n private generateClassNameRegEx(safelist?: string[]): RegExp {\n const typePrefixes = this.getTypePrefixes(safelist)\n\n // Common pattern for handling complex nested structures\n const nestedBracketPattern = '\\\\[[^\\\\]]+\\\\]'\n const nestedParenPattern = '\\\\([^()]*(?:\\\\([^()]*\\\\)[^()]*)*\\\\)'\n const nestedBracePattern = '\\\\{[^{}]*(?:\\\\{[^{}]*\\\\}[^{}]*)*\\\\}'\n\n // 1. Prefix pattern - now allows for complex structures like nth-[...]\n const prefixPattern =\n '(?:(' +\n // Simple prefix (hover, md, focus, etc.)\n '[a-zA-Z0-9_-]+|' +\n // Prefix with nested structures like nth-[...]\n '[a-zA-Z0-9_-]+(?:-' +\n nestedBracketPattern +\n ')|' +\n // Direct bracket, parenthesis, or brace content\n nestedBracketPattern +\n '|' +\n nestedParenPattern +\n '|' +\n nestedBracePattern +\n '):)?'\n\n // 2. Type pattern\n const typePattern = `(${typePrefixes}|\\\\[[^\\\\]]+\\\\])`\n\n // 3. Separator (optional)\n const separator = '(?:-)?'\n\n // 4. Value pattern - modified to handle $ variables correctly\n const valuePattern =\n '(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Numbers\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' + // Words with hyphens\n '(?:#[0-9a-fA-F]+)|' + // Hex colors\n nestedBracketPattern +\n '|' + // Bracket content\n nestedBracePattern +\n '|' + // Curly brace content\n nestedParenPattern +\n '|' + // Parentheses content\n '(?:\\\\$[^\\\\s\\\\/]+))' // Dollar sign content\n\n // 5. Unit pattern (optional)\n const unitPattern = '([a-zA-Z%]*)'\n\n // 6. Secondary value pattern (optional)\n const secondaryPattern =\n '(?:\\\\/(-?(?:\\\\d+(?:\\\\.\\\\d+)?)|' + // Same pattern as valuePattern\n '(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|' +\n '(?:#[0-9a-fA-F]+)|' +\n nestedBracketPattern +\n '|' +\n nestedBracePattern +\n '|' +\n nestedParenPattern +\n '|' +\n '(?:\\\\$[^\\\\s\\\\/]+))' +\n '([a-zA-Z%]*))?'\n\n return new RegExp(\n prefixPattern + typePattern + separator + valuePattern + unitPattern + secondaryPattern\n )\n }\n\n public parse(className: string, safelist?: string[]) {\n // Check if the className exists in any class object\n if (Object.values(this.classes).some((classObj) => classObj?.[className])) {\n return [undefined, className, '', '', undefined, undefined]\n }\n\n const classNameRegEx = this.generateClassNameRegEx(safelist)\n const match = (className + '-dummy').match(classNameRegEx)\n if (!match) return null\n\n const [, prefix, type, value, unit, secValue, secUnit] = match\n const finalValue = value === 'dummy' ? '' : value.replace('-dummy', '')\n\n return [prefix, type, finalValue, unit || '', secValue, secUnit]\n }\n\n // unique value parser\n public processValue(value: string, unit: string, group: string): string {\n if (!value) return ''\n\n // Replace values wrapped in {} with values from this.values\n const replaceWithValueRegistry = (text: string): string => {\n return text.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const valueRegistry = this.values\n const val =\n valueRegistry !== null\n ? typeof valueRegistry[group] === 'object'\n ? (valueRegistry[group] as { [value: string]: string })[key]\n : valueRegistry[key]\n : undefined\n\n return typeof val === 'string' ? val : match\n })\n }\n\n if (\n typeof this.values === 'object' &&\n this.values !== null &&\n ((this.values[group] &&\n typeof this.values[group] === 'object' &&\n this.values[group][value]) ||\n this.values[value])\n ) {\n if (typeof this.values[group] === 'object' && this.values[group] !== null) {\n return this.values[group][value] as string\n }\n\n return this.values[value] as string\n } else if (value.startsWith('$')) {\n return `var(--${value.slice(1)})` //? [color]-$my-color => color: var(--my-color)\n } else if (\n (value.startsWith('[') && value.endsWith(']')) ||\n (value.startsWith('(') && value.endsWith(')'))\n ) {\n const cleanValue = value.slice(1, -1).replace(/_/g, ' ') //? replace '_' with ' '\n\n if (cleanValue.includes('{')) {\n return replaceWithValueRegistry(cleanValue)\n }\n return cleanValue.startsWith('--') ? `var(${cleanValue})` : cleanValue\n }\n\n return value + (unit || '') //? [padding]-4px => padding: 4px\n }\n\n public processShorthand(\n type: string = '',\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined,\n secondValue: string | undefined = '',\n secondUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n const properties = this.property[type]\n // Extract \"for\" from (color:red) => { for: 'color', cleanValue: 'red' }\n // Pattern that matches both (label:value) and [label:value] formats\n const pattern = /^(?:\\(|\\[)([^:]+):(.+)(?:\\)|\\])$/\n let extractedFor: string | null = null\n let cleanValue = value || ''\n const matchValue = cleanValue.match(pattern)\n if (matchValue) {\n extractedFor = matchValue[1].trim()\n cleanValue = matchValue[2].trim()\n }\n\n let finalCleanValue\n\n if (value.includes(extractedFor + ':')) {\n finalCleanValue = value.startsWith('(') ? `(${cleanValue})` : `[${cleanValue}]`\n } else finalCleanValue = value\n\n // process input value\n const finalValue = this.processValue(finalCleanValue, unit, type)\n // process second value\n const finalSecValue = this.processValue(secondValue, secondUnit, type)\n\n // if the type started with square bracket\n // e.g. [--my-color], [color,borderColor] ...\n if (type.startsWith('[') && type.endsWith(']')) {\n const items = type\n .slice(1, -1)\n .split(',')\n .map((item) => item.trim())\n\n const cssRules = items\n .map((item) => {\n const prop = this.property[item] || item\n const finalProperty =\n typeof prop === 'string' && prop.startsWith('--')\n ? String(prop)\n : this.toKebabCase(String(prop))\n return `${finalProperty}: ${finalValue}`\n })\n .join('; ')\n\n return {\n className: `${`[${type.slice(1, -1)}]${isHyphen ? '-' : ''}${value}${unit}`}`,\n cssRules, // return css rules directly\n value: null, // and set value to null to prevent value duplication\n prefix\n }\n }\n\n // if type matched property's key\n // e.g. { property: { bg: 'background' } }\n // the `bg` is the type\n if (properties) {\n if (typeof properties === 'object' && 'property' in properties && 'value' in properties) {\n const valuesGroup = properties.group || type\n const groupValue = (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n ? (this.values[valuesGroup] as { [value: string]: string })[finalValue]\n : unit\n ? value\n : finalValue\n\n const property =\n typeof properties.property === 'function'\n ? properties.property({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties.property\n\n const template = properties.value\n\n let processedValue\n\n if (typeof template === 'function') {\n processedValue = template({\n value: groupValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor,\n property\n })\n } else if (template && typeof template === 'string') {\n const newValue = this.processValue(finalCleanValue, unit, valuesGroup)\n\n processedValue =\n this.values[finalCleanValue] ||\n (this.values[valuesGroup] as { [value: string]: string })[finalCleanValue] ||\n finalCleanValue.includes('{') ||\n template.includes('{')\n ? this.parseValuePattern(valuesGroup, template, newValue, '', finalSecValue, '')\n : finalValue\n } else processedValue = null\n\n const className = `${type}${\n value ? `${isHyphen ? (isHyphen ? '-' : '') : ''}${value}${unit}` : ''\n }${secondValue ? `/${secondValue}${secondUnit}` : ''}`\n\n return {\n className,\n cssRules: Array.isArray(property)\n ? (property as string[])\n : typeof property === 'string' && (property as string).includes(':')\n ? (property as string)\n : (this.toKebabCase(String(property)) as string),\n value: template === null ? null : value.startsWith('[') ? finalValue : processedValue,\n prefix\n }\n }\n\n const finalRegProperty =\n typeof properties === 'function'\n ? properties({\n value: unit ? value : finalValue,\n unit,\n secondValue: secondUnit ? secondValue : finalSecValue,\n secondUnit,\n key: extractedFor\n })\n : properties\n\n return {\n className: `${type}${value ? (isHyphen ? '-' : '') + value + unit : ''}`,\n cssRules: Array.isArray(properties)\n ? (finalRegProperty as string[])\n : typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? finalRegProperty.slice(6)\n : (this.toKebabCase(String(finalRegProperty)) as string),\n value:\n typeof finalRegProperty === 'string' && finalRegProperty.startsWith('value:')\n ? null\n : finalValue,\n prefix\n }\n }\n\n return null\n }\n\n private parseValuePattern(\n group: string,\n pattern: string,\n inputValue: string,\n inputUnit: string,\n inputSecValue: string,\n inputSecUnit: string\n ): string {\n if (!pattern.includes('{0}') && !pattern.includes('{1') && !pattern.includes('||'))\n return pattern\n\n const [value, defaultValue] = pattern.split('||').map((s) => s.trim())\n const finalValue = this.processValue(inputValue, inputUnit, group)\n const finalSecValue = this.processValue(inputSecValue, inputSecUnit, group)\n\n if ((pattern.includes('{0}') && pattern.includes('{1')) || pattern.includes('{1')) {\n let computedValue = value\n if (inputValue) {\n computedValue = computedValue.replace('{0}', finalValue)\n }\n if (pattern.includes('{1')) {\n // find {1 ... } pattern and extract default value if present\n const match = computedValue.match(/{1([^}]*)}/)\n if (pattern.includes('{1}')) {\n if (inputSecValue) {\n computedValue = inputSecValue.startsWith('[')\n ? finalSecValue\n : computedValue.replace('{1}', finalSecValue)\n } else {\n computedValue = defaultValue\n }\n } else if (match) {\n const fullMatch = match[0]\n const innerContent = match[1].trim()\n\n let replacementValue = finalSecValue\n if (!replacementValue && innerContent.includes('|')) {\n // use default value after | if second value isn provided\n replacementValue = innerContent.split('|')[1].trim()\n } else if (!replacementValue) {\n replacementValue = ''\n }\n computedValue = inputValue.startsWith('[')\n ? finalValue\n : computedValue.replace(fullMatch, replacementValue)\n }\n }\n return inputValue ? computedValue : defaultValue || value\n }\n // Handle only {0} replacement\n else {\n return inputValue\n ? inputValue.startsWith('[')\n ? finalValue\n : value.replace('{0}', finalValue)\n : defaultValue || value\n }\n }\n\n private getParentClass(className: string): CSSPropertyOrVariable[] {\n return Object.keys(this.classes).filter((cssProperty) =>\n Object.prototype.hasOwnProperty.call(\n this.classes[cssProperty as CSSPropertyOrVariable],\n className\n )\n ) as CSSPropertyOrVariable[]\n }\n\n public processCustomClass(\n className: string | undefined,\n value: string | undefined = '',\n unit: string | undefined = '',\n prefix: string | undefined = '',\n secValue: string | undefined = '',\n secUnit: string | undefined = '',\n isHyphen: boolean = true\n ): ProcessedStyle | null {\n if (!className) return null\n\n const properties = this.getParentClass(className)\n\n if (properties.length > 0) {\n const rules = properties\n .map((prop) => {\n const classObj = this.classes[prop]\n if (!classObj) return ''\n\n const processedValue = this.parseValuePattern(\n className,\n classObj[className] || '',\n value,\n unit,\n secValue,\n secUnit\n )\n\n return `${this.toKebabCase(String(prop))}: ${processedValue}`\n })\n .filter(Boolean)\n .join('; ')\n\n const isValueType = className.slice(-(value + unit).length)\n\n const finalClassName = `${className}${value ? `${isHyphen ? '-' : ''}${value}${unit}` : ''}${\n secValue ? `/${secValue}${secUnit}` : ''\n }`\n\n return {\n className: value === isValueType ? className : finalClassName,\n cssRules: rules,\n value: null,\n prefix\n }\n }\n\n return null\n }\n\n public processAlias(className: string, prefix: string = ''): ProcessedStyle | null {\n const alias = this.aliases[className]\n\n if (!alias) return null\n\n const aliasClasses = alias.split(' ')\n const combinedRules: string[] = []\n\n aliasClasses.forEach((aliasClass) => {\n const [rprefix, rtype] = aliasClass.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n const parts = this.parse(aliasClass)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n const result = this.processShorthand(type, value!, unit, undefined, secValue, secUnit)\n\n const shouldClasses = this.processCustomClass(type, value, unit, prefix, secValue, secUnit)\n if (shouldClasses) {\n const { cssRules } = shouldClasses\n combinedRules.push(cssRules as string)\n\n return\n }\n\n if (result) {\n const value = result.value !== null ? `: ${result.value}` : ''\n if (Array.isArray(result.cssRules)) {\n result.cssRules.forEach((rule) => {\n combinedRules.push(`${this.toKebabCase(rule)}${value}`)\n })\n } else {\n combinedRules.push(`${result.cssRules}${value}`)\n }\n }\n })\n\n return {\n className,\n cssRules: combinedRules.join('; '),\n value: null,\n prefix\n }\n }\n\n public process(classNames: string | string[]): ProcessedStyle[] {\n const classList = Array.isArray(classNames) ? classNames : classNames.split(/\\s+/)\n\n const results: ProcessedStyle[] = []\n\n classList.forEach((className) => {\n if (!className) return this\n // process prefix and actual class name\n const [rprefix, rtype] = className.split(':')\n const getType = rtype || rprefix\n const getPrefix = rtype ? rprefix : undefined\n\n // process class name aliases\n const aliasResult = this.processAlias(getType, getPrefix)\n if (aliasResult) {\n const { className: aliasClassName, cssRules } = aliasResult\n\n results.push({\n className: aliasClassName,\n cssRules,\n value: null,\n prefix: getPrefix\n })\n\n return\n }\n\n const parts = this.parse(className)\n const parsed = parts ? parts : [getPrefix, getType, '', '']\n if (!parsed) return this\n\n const [prefix, type, value, unit, secValue, secUnit] = parsed\n\n const isHyphen = !className.includes((type || '') + (value || ''))\n\n const classFromClasses =\n this.getParentClass(`${type}${isHyphen ? '-' : ''}${value}`).length > 0\n ? `${type}${isHyphen ? '-' : ''}${value}`\n : type\n\n const shouldClasses = this.processCustomClass(\n classFromClasses,\n value,\n unit,\n prefix,\n secValue,\n secUnit,\n isHyphen\n )\n\n if (shouldClasses) {\n const { className, cssRules, prefix } = shouldClasses\n\n results.push({\n className,\n cssRules,\n value: null,\n prefix\n })\n\n return\n }\n\n const result = this.processShorthand(type, value!, unit, prefix, secValue, secUnit, isHyphen)\n\n if (result) {\n const { className, cssRules, value: ruleValue, prefix: rulePrefix } = result\n\n results.push({\n className,\n cssRules,\n value: ruleValue,\n prefix: rulePrefix\n })\n }\n })\n\n return results\n }\n}\n\nexport default TenoxUI\n"],"names":["TenoxUI","property","values","classes","aliases","__spreadValues","key","str","match","prefix","letter","classRegistry","classNames","classObj","className","safelist","styleAttribute","propertyTypes","a","b","classPatterns","typePrefixes","nestedBracketPattern","nestedParenPattern","nestedBracePattern","prefixPattern","typePattern","separator","valuePattern","unitPattern","secondaryPattern","classNameRegEx","type","value","unit","secValue","secUnit","finalValue","group","replaceWithValueRegistry","text","valueRegistry","val","cleanValue","secondValue","secondUnit","isHyphen","properties","pattern","extractedFor","matchValue","finalCleanValue","finalSecValue","cssRules","item","prop","valuesGroup","groupValue","template","processedValue","newValue","finalRegProperty","inputValue","inputUnit","inputSecValue","inputSecUnit","defaultValue","s","computedValue","fullMatch","innerContent","replacementValue","cssProperty","rules","isValueType","finalClassName","alias","aliasClasses","combinedRules","aliasClass","rprefix","rtype","getType","getPrefix","parts","parsed","result","shouldClasses","rule","classList","results","aliasResult","aliasClassName","classFromClasses","ruleValue","rulePrefix"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenoxui/moxie",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Very lightweight utility-first CSS engine for style generation",
5
5
  "author": "NOuSantx <nousantx@gmail.com>",
6
6
  "license": "MIT",