@codady/coax 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @since Last modified: 2026-1-4 16:0:48
2
+ * @since Last modified: 2026-1-8 16:55:44
3
3
  * @name Coax event management system.
4
- * @version 0.0.1
4
+ * @version 0.0.2
5
5
  * @author AXUI development team <3217728223@qq.com>
6
6
  * @description Coax is a custom web component that enables syntax highlighting for various programming languages inside your HTML documents.
7
7
  * @see {@link https://coax.axui.cn|Official website}
@@ -12,4 +12,4 @@
12
12
  * @copyright This software supports the MIT License, allowing free learning and commercial use, but please retain the terms 'coax', 'Coax' and 'COAX' within the software.
13
13
  * @license MIT license
14
14
  */
15
- !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";class Coax extends HTMLElement{static languages=new Map;rawCode;constructor(){super(),this.attachShadow({mode:"open"}),this.rawCode=this.textContent?.replace(/^\s*\n|\n\s*$/g,"")||""}static register(e,{rules:n,theme:t={},internalCss:a="",cssPrefix:r=""}){this.languages.set(e,{rules:n,theme:t,internalCss:a,cssPrefix:r}),document.querySelectorAll("ax-code").forEach(n=>{n.getAttribute("lang")===e&&n.render()})}connectedCallback(){this.render()}static get observedAttributes(){return["lang","height","max-height"]}attributeChangedCallback(){this.render()}render(){const e=this.getAttribute("lang")||"js",n=Coax.languages.get(e),t=n?.cssPrefix||e,a=this.getAttribute("height"),r=this.getAttribute("max-height");let s="",o="";if(n){const e=new RegExp(n.rules.map(e=>`(${e.reg.source})`).join("|"),"g");s=this.rawCode.replace(/[&<>]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;"}[e])).replace(e,(e,...a)=>{const r=a.findIndex(e=>void 0!==e);return-1!==r&&n.rules[r]?`<span class="ax-${t}-${n.rules[r].name}">${e}</span>`:e}),o=n.rules.map(e=>`\n .ax-${t}-${e.name} { color: var(--ax-${t}-${e.name}); }\n `).join("\n")}else s=this.rawCode;const i=n?.theme?Object.entries(n.theme).map(([e,n])=>`--ax-${t}-${e}: ${n};`).join("\n"):"";this.shadowRoot.innerHTML=`\n <style>\n :host { \n ${i} \n\n font-size: var(--ax-code-fs,14px);\n display: block; \n padding: var(--ax-code-p,1em);\n box-sizing:border-box;\n line-height: var(--ax-code-lh,1.5);\n background-color:var(--ax-code-bg,rgba(0,0,0,0.02));\n color:var(--ax-code-c,#333);\n border:var(--ax-code-bw,1px) solid var(--ax-code-bc,rgba(0,0,0,0.08));\n height:${a||"var(--ax-code-h,auto)"};\n max-height:${r||"var(--ax-code-mh,500px)"};\n overflow:auto;\n transition: border-color 0.3s ease,color 0.3s ease; \n border-radius: var(--ax-code-r,9px);\n }\n pre,code{\n font-family:"Consolas", "Monaco", "Andale Mono", "Ubuntu Mono", "monospace", "microsoft yahei", "Microsoft JhengHei", "Yu Mincho", "simsun";\n margin:0;\n padding:0;\n }\n \n \n \n ${o}\n \n \n ${n?.internalCss||""}\n </style>\n <pre><code>${s}</code></pre>`}}customElements.define("ax-code",Coax),Coax.register("html",{rules:[{name:"comment",reg:/&lt;!--[\s\S]*?--&gt;/},{name:"doctype",reg:/&lt;!DOCTYPE[\s\S]*?&gt;/i},{name:"tag",reg:/&lt;\/?[a-zA-Z0-9]+/},{name:"attr",reg:/[a-zA-Z-]+(?=\s*=\s*)/},{name:"string",reg:/(['"])(?:\\.|[^\\])*?\1/},{name:"bracket",reg:/\/?&gt;/}]}),Coax.register("css",{rules:[{name:"comment",reg:/\/\*[\s\S]*?\*\//},{name:"value",reg:/(?:'|")(?:\\.|[^\\'"\b])*?(?:'|")/},{name:"func",reg:/[a-z-]+\(?=/},{name:"property",reg:/[a-z-]+(?=\s*:)/},{name:"selector",reg:/[.#a-z0-9, \n\t>:+()_-]+(?=\s*\{)/i},{name:"unit",reg:/(?<=\d)(px|em|rem|%|vh|vw|ms|s|deg)/},{name:"number",reg:/\b\d+(\.\d+)?\b/},{name:"punct",reg:/[{}();:]/}],theme:{type:"#61afef",keyword:"#d19a66",string:"#98c379",op:"#abb2bf"},internalCss:"\n .ax-css-string { color: var(--ax-code-string); }\n .ax-css-string::first-letter { color: var(--ax-code-c); }\n "}),Coax.register("js",{rules:[{name:"comment",reg:/\/\/[^\n]*|\/\*[\s\S]*?\*\//},{name:"string",reg:/(?:'|"|`)(?:\\.|[^\\'"\b])*?(?:'|"|`)/},{name:"keyword",reg:/\b(async|await|break|case|catch|class|const|continue|default|delete|do|else|export|extends|finally|for|function|if|import|in|instanceof|new|return|super|switch|this|throw|try|typeof|var|while|with|yield|let|static)\b/},{name:"builtin",reg:/\b(console|window|document|Math|JSON|true|false|null|undefined|Object|Array|Promise)\b/},{name:"number",reg:/\b\d+\b/},{name:"func",reg:/\b[a-zA-Z_]\w*(?=\s*\()/},{name:"op",reg:/[+\-*/%=<>!&|^~]+/}]}),Coax.register("ts",{rules:[{name:"comment",reg:/\/\/[^\n]*|\/\*[\s\S]*?\*\//},{name:"string",reg:/(?:'|"|`)(?:\\.|[^\\'"\b])*?(?:'|"|`)/},{name:"decorator",reg:/@[a-zA-Z_]\w*/},{name:"keyword",reg:/\b(abstract|as|async|await|break|case|catch|class|const|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|package|private|protected|public|readonly|return|set|static|super|switch|this|throw|try|type|typeof|var|while|with|yield)\b/},{name:"builtin",reg:/\b(any|boolean|never|number|string|symbol|unknown|void|undefined|null|boolean|true|false|console|window|document)\b/},{name:"type",reg:/\b[A-Z]\w*\b/},{name:"number",reg:/\b\d+\b/},{name:"func",reg:/\b[a-zA-Z_]\w*(?=\s*\()/},{name:"op",reg:/(\?\.|![:\.]|[+\-*/%=<>!&|^~]+)/}]})});
15
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";const getDataType=e=>{let t,n=Object.prototype.toString.call(e).slice(8,-1);return t="Function"===n&&/^\s*class\s+/.test(e.toString())?"Class":"Object"===n&&Object.getPrototypeOf(e)!==Object.prototype?"Instance":n,t},getEl=(e,t=document.body)=>{let n=getDataType(e),r=getDataType(t),o=r.includes("HTML")||"ShadowRoot"===r?t:document.querySelector(t),a=o&&o instanceof HTMLTemplateElement?o.content:o,i=null;if(e)if(n.includes("HTML"))i=e;else if("String"===n)try{i=(a||document).querySelector(e.trim())}catch{i=null}return i},createEl=(e,t,n)=>{let r=(e=e||"div").toUpperCase().trim(),o=document.createElement(r),a=getDataType(t);if(t&&"Object"===a)for(let e in t)t.hasOwnProperty(e)&&o.setAttribute(e,"string"==typeof t[e]?t[e]:JSON.stringify(t[e]));return((e,t)=>{if(""===t||null==t)return!1;let n=getDataType(t);if("TEMPLATE"===r)e.innerHTML=t.toString();else if("Array"===n&&t.length>0)for(let n of t){if(getDataType(n).includes("HTML"))e.appendChild(n);else{let t=createEl(n.name,n.attrs,n.content);t&&e.appendChild(t)}}else if(n.includes("HTML"))e.appendChild(t);else if("String"===n&&t.trim().startsWith("#")&&t.trim().length>1){let n=getEl(t);if(!n)return;"TEMPLATE"===n.nodeName?e.appendChild(n.content.cloneNode(!0)):e.insertAdjacentHTML("beforeEnd",n.innerHTML)}else e.insertAdjacentHTML("beforeEnd",t)})(o,n),o},isEmpty=e=>{let t,n=getDataType(e);return t=!e||("Object"===n?0===Object.keys(e).length:"Array"===n?""===e.join(""):"Function"===n?"{}"===e.toString().replace(/\s+/g,"").match(/{.*}/g)[0]:"Symbol"===n?"()"===e.toString().replace(/\s+/g,"").match(/\(.*\)/g)[0]:"Set"===n||"Map"===n?0===e.size:"Date"===n?isNaN(e.getTime()):"RegExp"===n?""===e.source:"ArrayBuffer"===n?0===e.byteLength:"NodeList"===n||"HTMLCollection"===n||"length"in e&&"number"==typeof e.length?0===e.length:"size"in e&&"number"==typeof e.size?0===e.size:"Error"===n||e instanceof Error?""===e.message:!(!n.includes("Array")||!["Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","Float32Array","Float64Array"].includes(n))&&0===e.length),t},e="rep",t="ax",trim$1=(e,t="")=>{if("string"!=typeof e)return"";switch(t){case"start":return e.trimStart();case"end":return e.trimEnd();case"both":return e.trim();case"global":return e.replace(/[\s\r\n]+/g,"");default:return e.trim().replace(/[\s\r\n]+/g," ")}},parseClasses$1=e=>{let t,n=[];return Array.isArray(e)?n=e.filter(e=>e&&"string"==typeof e):(t=(e=trim$1(e)).includes(",")?",":" ",n=e.split(t)),n.map(e=>trim$1(e,"global")).filter(Boolean)},createTools=n=>{const r=createEl("span",{class:`${t}-box-tools`}),renderFn=t=>{const n={},r=t.extendable?`<i ${e}="arrow"></i>`:"",o=(t.icon?`<i ${e}="icon">${t.icon}</i>`:"")+(t.disk?`<i ${e}="disk"><img src="${t.disk}"/></i>`:"")+(t.cube?`<i ${e}="cube"><img src="${t.cube}"/></i>`:"")+(t.image?`<i ${e}="image"><img src="${t.image}"/></i>`:"")+(t.label?`<i ${e}="label">${t.label}</i>`:"")+r;t.title&&(n.title=t.title),t.focusable&&(n.tabindex=1),t.wrapEl=createEl(t.nodeName||"span",Object.assign(n,t.attrs),o),t.iconEl=t.wrapEl.querySelector(`[${e}="icon"]`),t.cubeEl=t.wrapEl.querySelector(`[${e}="cube"]`),t.diskEl=t.wrapEl.querySelector(`[${e}="disk"]`),t.imageEl=t.wrapEl.querySelector(`[${e}="image"]`),t.labelEl=t.wrapEl.querySelector(`[${e}="label"]`),!isEmpty(t.classes)&&((e,t)=>{const n=getEl(e),r=parseClasses$1(t);n&&0!==r.length&&r.forEach(e=>{n.classList.add(e)})})(t.wrapEl,t.classes),!isEmpty(t.styles)&&(t.wrapEl.style.cssText+=t.styles)};for(let e of n)renderFn(e),r.appendChild(e.wrapEl),e?.action?.(e);return r},trim=(e,t="")=>{if("string"!=typeof e)return"";switch(t){case"start":return e.trimStart();case"end":return e.trimEnd();case"both":return e.trim();case"global":return e.replace(/[\s\r\n]+/g,"");default:return e.trim().replace(/[\s\r\n]+/g," ")}},wrap=(e,t,n=!1,r)=>{const o=r?.size||"1em",a=r?.color||"currentColor",i=r?.thickness||2,s=r?.classes?(e=>{let t,n=[];return Array.isArray(e)?n=e.filter(e=>e&&"string"==typeof e):(t=(e=trim(e)).includes(",")?",":" ",n=e.split(t)),n.map(e=>trim(e,"global")).filter(Boolean)})(r.classes).join(" "):"",l=t.name.replace(/([A-Z])/g,"-$1").toLowerCase();return`<svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${o}" viewBox="0 0 24 24" fill="none" stroke="${a}"\n stroke-width="${i}" stroke-linecap="round" stroke-linejoin="round" class="${l} ${s}">\n ${n?((e="")=>`\n <style>\n :where([dir="rtl"]) .icax-${e},\n :where(:dir(rtl)) .icax-${e} {\n transform: scaleX(-1);\n transform-origin: center;\n }\n </style>\n`)(l.split("-")[1]):""}\n ${e}\n </svg>`},icaxCopy=e=>wrap('<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>',icaxCopy,!1,e),icaxCheck=e=>wrap('<polyline points="20 6 9 17 4 12"></polyline>',icaxCheck,!1,e);class Coax extends HTMLElement{static languages=new Map;static tools=[];source;_renderQueued=!1;baseStylesEl;themeStylesEl;dynamicStylesEl;highlightedCodeEl;headerEl;nameEl;toolsEl;alias;constructor(){super(),this.attachShadow({mode:"open"}),this.source=this.textContent?.replace(/^\s*\n|\n\s*$/g,"")||"",this.lang="plain",this.alias="Plain Text",this.shadowRoot.innerHTML=`\n <style id="base-styles">\n :host { \n --border-width:1px;\n --border-style:solid;\n --radius:9px;\n --height:auto;\n --max-height:500px;\n --radius:9px;\n --padding:1em;\n --font-size:16px;\n --line-height:1.8;\n --background:rgb(247, 247, 247);\n --border-color:rgb(224, 224, 224);\n --color-code:rgb(51, 51, 51);\n --color-index:rgb(153, 153, 153);\n --color-stripe:rgb(224, 224, 224);\n --color-hover:rgb(224, 224, 224);\n } \n :host([scheme="dark"]){\n --background: #282c34;\n --border-color: transparent;\n --color-code: #abb2bf;\n --color-index:rgb(153, 153, 153);\n --color-stripe:rgb(66, 66, 66);\n --color-hover:rgb(66, 66, 66);\n }\n @media (prefers-color-scheme: dark) {\n :host{\n --background: #282c34;\n --border-color: transparent;\n --color-code: #abb2bf;\n --color-index:rgb(153, 153, 153);\n --color-stripe:rgb(66, 66, 66);\n --color-hover:rgb(66, 66, 66);\n }\n }\n :host {\n font-size: var(--${t}-code-font-size,var(--font-size));\n display: block; \n box-sizing:border-box;\n background:var(--${t}-code-background-color,var(--background));\n color:var(--${t}-code-color,var(--color-code));\n border:var(--${t}-code-border-width,var(--border-width)) var(--${t}-code-border-style,var(--border-style)) var(--${t}-code-border-color,var(--border-color));\n overflow:auto;\n transition: border-color 0.3s ease,color 0.3s ease; \n border-radius: var(--${t}-code-radius,var(--radius));\n }\n #code-header{\n line-height:calc(var(--${t}-code-line-height,var(--line-height))*1.5);\n padding-inline-start:var(--${t}-code-padding,var(--padding));\n display:flex;\n \n >:first-child{\n flex:auto;\n }\n }\n #code-body{\n padding: var(--${t}-code-padding,var(--padding)) 0;\n height:var(--${t}-code-height,var(--height));\n max-height:var(--${t}-code-max-height,var(--max-height));\n }\n pre,code{\n font-family:"Consolas", "Monaco", "Andale Mono", "Ubuntu Mono", "monospace";\n margin:0; padding:0;\n }\n code>div{\n display:flex;\n padding:0 var(--${t}-code-padding,var(--padding));\n line-height: var(--${t}-code-line-height,var(--line-height));\n box-sizing:border-box;\n \n >div{\n flex:auto;\n }\n }\n :host([indexed]) code>div:before{\n display:inline-flex;\n color:var(--color-index);\n content: attr(data-index);\n min-width:var(--${t}-code-index-width,2em);\n margin-inline-end:var(--${t}-code-padding,8px);\n }\n :host([hoverable]) code>div:hover{\n background-color:var(--color-hover);\n }\n :host([striped]) code>div:nth-child(odd){\n background-color:var(--color-stripe);\n }\n :host([wrapped]) code>div{\n white-space: pre-wrap;\n }\n :host([unnamed]) #code-name{\n display:none;\n }\n .${t}-box-tools{\n >*{\n font-size:14px;\n display:inline-flex;\n align-items:center;\n justify-content:center;\n height:2em;\n line-height:2em;\n aspect-ratio:1/1;\n margin-inline-end:8px;\n transition:all 200ms ease;\n border-radius:6px;\n &:hover{\n cursor:pointer;\n background-color:rgba(0,0,0,.04);\n }\n }\n [rep=icon]{\n display:inline-flex;\n align-items:center;\n justify-content:center;\n }\n }\n [disabled]{\n pointer-event:none;\n }\n </style>\n <style id="dynamic-styles"></style>\n <style id="theme-styles"></style>\n <div id="code-header"><span id="code-name">${this.alias}</span><div id="code-tools"></div></div>\n <div id="code-body">\n <pre><code id="highlight-code"></code></pre>\n </div>\n `,this.baseStylesEl=getEl("#base-styles",this.shadowRoot),this.themeStylesEl=getEl("#theme-styles",this.shadowRoot),this.dynamicStylesEl=getEl("#dynamic-styles",this.shadowRoot),this.headerEl=getEl("#code-header",this.shadowRoot),this.nameEl=getEl("#code-name",this.shadowRoot),this.toolsEl=getEl("#code-tools",this.shadowRoot),this.highlightedCodeEl=getEl("#highlight-code",this.shadowRoot)}static register(e,t){this.languages.set(e,{...t})}static addTools(e){Coax.tools=e}mountTools(e){requestAnimationFrame(()=>{this.toolsEl.innerHTML="";let t=e.map(e=>(e.action=e.action.bind(this),e));this.toolsEl.appendChild(createTools(t))})}connectedCallback(){this.render()}static get observedAttributes(){return["lang","height","max-height","tools"]}attributeChangedCallback(e,t,n){if(t!==n)if("height"===e||"max-height"===e)this.updateStyleByRegExp(e,n);else if("lang"===e)this.lang=n,this.render();else if("unnamed"===e)this.nameEl.innerHTML=null===n?this.alias||this.lang:"",this.nameEl.innerHTML="";else if("tools"===e){n||(this.toolsEl.innerHTML="");const e=parseClasses$1(n),t=Coax.tools.filter(t=>e.includes(t.name));if(!t.length)return;this.mountTools(t)}}updateStyleByRegExp(e,t){const n=new RegExp(`;\\n\\s*${e}:\\s*[^;]+;`,"g");this.baseStylesEl.textContent=this.baseStylesEl.textContent.replace(n,`;\n${e}: ${t};`)}getCssPrefix(e){return(e?.cssPrefix||this.lang).replace(/[^a-zA-Z0-9_-]/g,"\\$&")}highlight(e){const n=Coax.languages.get(this.lang),r=this.highlightedCodeEl.children.length,o=e.split("\n").map((e,o)=>{let a=e;if(n){const r=this.getCssPrefix(n),o=new RegExp(n.rules.map(e=>`(${e.pattern.source})`).join("|"),"g");a=e.replace(o,(e,...o)=>{const a=o.findIndex(e=>void 0!==e);return-1!==a&&n.rules[a]?`<span class="${t}-${r}-${n.rules[a].token}">${e}</span>`:e})}const i=createEl("div",{"data-index":r+o});return i.innerHTML=`<div>${a}</div>`,i});this.highlightedCodeEl.append(...o)}injectThemeStyles(){const e=Coax.languages.get(this.lang);if(!e)return;let n=this.getCssPrefix(e),r=e.rules.map(e=>`\n .${t}-${n}-${e.token} { color: var(--${t}-${n}-${e.token}${e.color?","+e.color:""});}`).join("\n"),o="",a="";o+=':host([scheme="dark"]){',o+=e.rules.map(e=>"\n "+(e.color?`\n .${t}-${n}-${e.token} {color: var(--${t}-${n}-${e.token},${e.dark});}`:"")).join("\n"),o+="}",a="@media (prefers-color-scheme: dark){\n :host{\n ",a+=e.rules.map(e=>`\n ${e.color?`\n .${t}-${n}-${e.token} { color: var(--${t}-${n}-${e.token},${e.dark}); }`:""} `).join("\n"),a+="}",this.dynamicStylesEl.textContent=r+o+a,e?.themeStyles&&(this.themeStylesEl.textContent=e.themeStyles),this.updateName(e)}updateName(e){this.hasAttribute("unnamed")||(this.alias=e.alias||this.lang,this.nameEl.innerHTML=this.alias)}render(){this._renderQueued||(this._renderQueued=!0,requestAnimationFrame(()=>{this.highlightedCodeEl.innerHTML="",this.highlight(this.source),this.injectThemeStyles(),this._renderQueued=!1}))}replaceCode(e){this.source=e,this.highlightedCodeEl.innerHTML="",this.highlight(e)}appendCode(e){this.source+=`\n${e}`,this.highlight(e)}}Coax.register("css",{rules:[{token:"comment",pattern:/\/\*[\s\S]*?\*\//,color:"#6a737d",dark:"#8b949e"},{token:"value",pattern:/(?:'|")(?:\\.|[^\\'"\b])*?(?:'|")/,color:"#61afef",dark:"#a5d6ff"},{token:"func",pattern:/[a-z-]+\(?=/,color:"#e36209",dark:"#ffa657"},{token:"property",pattern:/[a-z-]+(?=\s*:)/,color:"#005cc5",dark:"#79c0ff"},{token:"selector",pattern:/[.#a-z0-9, \n\t>:+()_-]+(?=\s*\{)/i,color:"#6f42c1",dark:"#d2a8ff"},{token:"unit",pattern:/(?<=\d)(px|em|rem|%|vh|vw|ms|s|deg)/,color:"#d73a49",dark:"#ff7b72"},{token:"number",pattern:/\b\d+(\.\d+)?\b/,color:"#005cc5",dark:"#79c0ff"},{token:"punct",pattern:/[{}();:]/,color:"#24292e",dark:"#c9d1d9"}]}),Coax.register("html",{rules:[{token:"comment",pattern:/&lt;!--[\s\S]*?--&gt;/,color:"#6a737d",dark:"#8b949e"},{token:"doctype",pattern:/&lt;!DOCTYPE[\s\S]*?&gt;/i,color:"#005cc5",dark:"#56b6c2"},{token:"tag",pattern:/&lt;\/?[a-zA-Z0-9]+/,color:"#22863a",dark:"#abb2bf"},{token:"attr",pattern:/[a-zA-Z-]+(?=\s*=\s*)/,color:"#6f42c1",dark:"#e06c75"},{token:"string",pattern:/(['"])(?:\\.|[^\\])*?\1/,color:"#032f62",dark:"#f39c12"},{token:"bracket",pattern:/\/?&gt;/,color:"#24292e",dark:"#f1f1f1"}]}),Coax.register("js",{alias:"Javascript",rules:[{token:"comment",pattern:/\/\/[^\n]*|\/\*[\s\S]*?\*\//,color:"#6a737d",dark:"#8b949e"},{token:"string",pattern:/(?:'|"|`)(?:\\.|[^\\'"\b])*?(?:'|"|`)/,color:"#032f62",dark:"#61afef"},{token:"keyword",pattern:/\b(async|await|break|case|catch|class|const|continue|default|delete|do|else|export|extends|finally|for|function|if|import|in|instanceof|new|return|super|switch|this|throw|try|typeof|var|while|with|yield|let|static)\b/,color:"#e06c75",dark:"#d73a49"},{token:"builtin",pattern:/\b(console|window|document|Math|JSON|true|false|null|undefined|Object|Array|Promise)\b/,color:"#56b6c2",dark:"#61afef"},{token:"number",pattern:/\b\d+\b/,color:"#61afef",dark:"#d19a66"},{token:"func",pattern:/\b[a-zA-Z_]\w*(?=\s*\()/,color:"#e5c07b",dark:"#98c379"},{token:"op",pattern:/[+\-*/%=<>!&|^~]+/,color:"#d73a49",dark:"#e06c75"}]}),Coax.register("ts",{rules:[{token:"comment",pattern:/\/\/[^\n]*|\/\*[\s\S]*?\*\//,color:"#6a737d",dark:"#8b949e"},{token:"string",pattern:/(?:'|"|`)(?:\\.|[^\\'"\b])*?(?:'|"|`)/,color:"#032f62",dark:"#61afef"},{token:"decorator",pattern:/@[a-zA-Z_]\w*/,color:"#d19a66",dark:"#e5c07b"},{token:"keyword",pattern:/\b(abstract|as|async|await|break|case|catch|class|const|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|package|private|protected|public|readonly|return|set|static|super|switch|this|throw|try|type|typeof|var|while|with|yield)\b/,color:"#e06c75",dark:"#d73a49"},{token:"builtin",pattern:/\b(any|boolean|never|number|string|symbol|unknown|void|undefined|null|boolean|true|false|console|window|document)\b/,color:"#56b6c2",dark:"#61afef"},{token:"type",pattern:/\b[A-Z]\w*\b/,color:"#22863a",dark:"#8b949e"},{token:"number",pattern:/\b\d+\b/,color:"#61afef",dark:"#d19a66"},{token:"func",pattern:/\b[a-zA-Z_]\w*(?=\s*\()/,color:"#e5c07b",dark:"#98c379"},{token:"op",pattern:/(\?\.|![:\.]|[+\-*/%=<>!&|^~]+)/,color:"#d73a49",dark:"#e06c75"}]}),Coax.addTools([{name:"copy",icon:icaxCopy(),action:function(e){e.wrapEl.onclick=()=>{navigator.clipboard.writeText(this.source).then(()=>{e.iconEl.innerHTML=icaxCheck(),e.iconEl.toggleAttribute("disabled",!0),setTimeout(()=>{e.iconEl.removeAttribute("disabled"),e.iconEl.innerHTML=icaxCopy()},2e3)}).catch(e=>{})}}}]),customElements.define(`${t}-code`,Coax)});
@@ -7,24 +7,7 @@
7
7
  <title>Coax 代码高亮插件</title>
8
8
  <style>
9
9
  /* 白天模式变量 */
10
- :root {
11
- --ax-css-selector: #6f42c1;
12
- /* 紫色:选择器最显眼 */
13
- --ax-css-property: #005cc5;
14
- /* 蓝色:属性名 */
15
- --ax-css-string: #22863a;
16
- /* 绿色:内容字符串 */
17
- --ax-css-unit: #d73a49;
18
- /* 红色:单位(如 px, rem) */
19
- --ax-css-number: #005cc5;
20
- /* 蓝色:数值 */
21
- --ax-css-func: #e36209;
22
- /* 橙色:函数如 var(), rgba() */
23
- --ax-css-comment: #6a737d;
24
- /* 灰色:注释 */
25
- --ax-css-punct: #24292e;
26
- /* 深灰:符号 */
27
- }
10
+ :root {}
28
11
  </style>
29
12
 
30
13
  </head>
@@ -56,6 +39,7 @@
56
39
  <script src="../dist/coax.umd.js" type='text/javascript'></script>
57
40
  <script type='text/javascript'>
58
41
 
42
+
59
43
  </script>
60
44
  </body>
61
45
 
@@ -8,29 +8,14 @@
8
8
  <style>
9
9
  /* 白天模式变量 */
10
10
  :root {
11
- --ax-js-keyword: #d73a49;
12
- /* 鲜红色:用于 if, const, return */
13
- --ax-js-string: #032f62;
14
- /* 藏青色:字符串内容 */
15
- --ax-js-func: #6f42c1;
16
- /* 靓紫色:函数名调用 */
17
- --ax-js-builtin: #e36209;
18
- /* 亮橙色:console, Math, true */
19
- --ax-js-number: #005cc5;
20
- /* 蓝色:数字 */
21
- --ax-js-op: #d73a49;
22
- /* 红色:操作符,突出逻辑 */
23
- --ax-js-comment: #6a737d;
24
- /* 灰色:注释 */
25
- --ax-js-punct: #24292e;
26
- /* 深灰色:标点符号 */
11
+
27
12
  }
28
13
  </style>
29
14
 
30
15
  </head>
31
16
 
32
17
  <body>
33
- <ax-code lang="js">
18
+ <ax-code lang="js" tools="copy" indexed striped hoverable wrapped>
34
19
  <code>
35
20
  /**
36
21
  * Simple animation function
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Coax 代码高亮插件</title>
8
+ <style>
9
+ /* 白天模式变量 */
10
+ :root {}
11
+ </style>
12
+
13
+ </head>
14
+
15
+ <body>
16
+ <ax-code>
17
+ <code>
18
+ /* Main Layout Style */
19
+ .container > .header:hover {
20
+ display: flex;
21
+ width: 100%;
22
+ max-width: 1200px;
23
+ padding: 20px 1.5rem;
24
+ background-color: var(--primary-bg, #fff);
25
+ transition: all 300ms ease-in-out;
26
+ transform: rotate(5deg);
27
+ }
28
+
29
+ @media (max-width: 768px) {
30
+ .container {
31
+ grid-template-columns: 1fr;
32
+ }
33
+ }
34
+ </code>
35
+ </ax-code>
36
+
37
+
38
+
39
+ <script src="../dist/coax.umd.js" type='text/javascript'></script>
40
+ <script type='text/javascript'>
41
+
42
+
43
+
44
+ </script>
45
+ </body>
46
+
47
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codady/coax",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -10,6 +10,20 @@
10
10
  "main": "./src/Coax.js",
11
11
  "type": "module",
12
12
  "types": "./src/coax.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/coax.esm.js",
16
+ "require": "./dist/coax.cjs.js",
17
+ "browser": "./dist/coax.umd.js",
18
+ "default": "./dist/coax.esm.js",
19
+ "types": "./types/coax.d.ts"
20
+ },
21
+ "./src/*": {
22
+ "import": "./src/*.js",
23
+ "require": "./src/*.js",
24
+ "types": "./src/*.ts"
25
+ }
26
+ },
13
27
  "directories": {
14
28
  "doc": "docs"
15
29
  },
@@ -69,6 +83,8 @@
69
83
  },
70
84
  "homepage": "https://www.axui.cn",
71
85
  "dependencies": {
86
+ "@codady/icax": "^0.0.5",
87
+ "@codady/utils": "^0.0.25",
72
88
  "simple-git": "^3.27.0"
73
89
  }
74
- }
90
+ }