@retailcrm/embed-ui 0.9.7 → 0.9.9
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/AGENTS.md +128 -0
- package/ARCHITECTURE.md +143 -0
- package/CHANGELOG.md +14 -0
- package/Makefile +24 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +2485 -0
- package/coverage/coverage-final.json +114 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +716 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/index.cjs +4 -0
- package/dist/index.mjs +4 -0
- package/dist/meta.json +1 -1
- package/index.d.ts +1 -1
- package/package.json +7 -5
- package/skills/commit-workflow/SKILL.md +77 -0
- package/skills/local-ci-simulation/SKILL.md +46 -0
- package/skills/local-ci-simulation/agents/openai.yaml +4 -0
- package/skills/sync-remote-host-registry/SKILL.md +62 -0
- package/skills/yarn-lock-conflict-resolution/SKILL.md +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
|
|
Binary file
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var addSorting = (function() {
|
|
3
|
+
'use strict';
|
|
4
|
+
var cols,
|
|
5
|
+
currentSort = {
|
|
6
|
+
index: 0,
|
|
7
|
+
desc: false
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// returns the summary table element
|
|
11
|
+
function getTable() {
|
|
12
|
+
return document.querySelector('.coverage-summary');
|
|
13
|
+
}
|
|
14
|
+
// returns the thead element of the summary table
|
|
15
|
+
function getTableHeader() {
|
|
16
|
+
return getTable().querySelector('thead tr');
|
|
17
|
+
}
|
|
18
|
+
// returns the tbody element of the summary table
|
|
19
|
+
function getTableBody() {
|
|
20
|
+
return getTable().querySelector('tbody');
|
|
21
|
+
}
|
|
22
|
+
// returns the th element for nth column
|
|
23
|
+
function getNthColumn(n) {
|
|
24
|
+
return getTableHeader().querySelectorAll('th')[n];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function onFilterInput() {
|
|
28
|
+
const searchValue = document.getElementById('fileSearch').value;
|
|
29
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
30
|
+
|
|
31
|
+
// Try to create a RegExp from the searchValue. If it fails (invalid regex),
|
|
32
|
+
// it will be treated as a plain text search
|
|
33
|
+
let searchRegex;
|
|
34
|
+
try {
|
|
35
|
+
searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive
|
|
36
|
+
} catch (error) {
|
|
37
|
+
searchRegex = null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (let i = 0; i < rows.length; i++) {
|
|
41
|
+
const row = rows[i];
|
|
42
|
+
let isMatch = false;
|
|
43
|
+
|
|
44
|
+
if (searchRegex) {
|
|
45
|
+
// If a valid regex was created, use it for matching
|
|
46
|
+
isMatch = searchRegex.test(row.textContent);
|
|
47
|
+
} else {
|
|
48
|
+
// Otherwise, fall back to the original plain text search
|
|
49
|
+
isMatch = row.textContent
|
|
50
|
+
.toLowerCase()
|
|
51
|
+
.includes(searchValue.toLowerCase());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
row.style.display = isMatch ? '' : 'none';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// loads the search box
|
|
59
|
+
function addSearchBox() {
|
|
60
|
+
var template = document.getElementById('filterTemplate');
|
|
61
|
+
var templateClone = template.content.cloneNode(true);
|
|
62
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
63
|
+
template.parentElement.appendChild(templateClone);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// loads all columns
|
|
67
|
+
function loadColumns() {
|
|
68
|
+
var colNodes = getTableHeader().querySelectorAll('th'),
|
|
69
|
+
colNode,
|
|
70
|
+
cols = [],
|
|
71
|
+
col,
|
|
72
|
+
i;
|
|
73
|
+
|
|
74
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
|
75
|
+
colNode = colNodes[i];
|
|
76
|
+
col = {
|
|
77
|
+
key: colNode.getAttribute('data-col'),
|
|
78
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
|
79
|
+
type: colNode.getAttribute('data-type') || 'string'
|
|
80
|
+
};
|
|
81
|
+
cols.push(col);
|
|
82
|
+
if (col.sortable) {
|
|
83
|
+
col.defaultDescSort = col.type === 'number';
|
|
84
|
+
colNode.innerHTML =
|
|
85
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return cols;
|
|
89
|
+
}
|
|
90
|
+
// attaches a data attribute to every tr element with an object
|
|
91
|
+
// of data values keyed by column name
|
|
92
|
+
function loadRowData(tableRow) {
|
|
93
|
+
var tableCols = tableRow.querySelectorAll('td'),
|
|
94
|
+
colNode,
|
|
95
|
+
col,
|
|
96
|
+
data = {},
|
|
97
|
+
i,
|
|
98
|
+
val;
|
|
99
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
|
100
|
+
colNode = tableCols[i];
|
|
101
|
+
col = cols[i];
|
|
102
|
+
val = colNode.getAttribute('data-value');
|
|
103
|
+
if (col.type === 'number') {
|
|
104
|
+
val = Number(val);
|
|
105
|
+
}
|
|
106
|
+
data[col.key] = val;
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
110
|
+
// loads all row data
|
|
111
|
+
function loadData() {
|
|
112
|
+
var rows = getTableBody().querySelectorAll('tr'),
|
|
113
|
+
i;
|
|
114
|
+
|
|
115
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
116
|
+
rows[i].data = loadRowData(rows[i]);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// sorts the table using the data for the ith column
|
|
120
|
+
function sortByIndex(index, desc) {
|
|
121
|
+
var key = cols[index].key,
|
|
122
|
+
sorter = function(a, b) {
|
|
123
|
+
a = a.data[key];
|
|
124
|
+
b = b.data[key];
|
|
125
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
126
|
+
},
|
|
127
|
+
finalSorter = sorter,
|
|
128
|
+
tableBody = document.querySelector('.coverage-summary tbody'),
|
|
129
|
+
rowNodes = tableBody.querySelectorAll('tr'),
|
|
130
|
+
rows = [],
|
|
131
|
+
i;
|
|
132
|
+
|
|
133
|
+
if (desc) {
|
|
134
|
+
finalSorter = function(a, b) {
|
|
135
|
+
return -1 * sorter(a, b);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
|
140
|
+
rows.push(rowNodes[i]);
|
|
141
|
+
tableBody.removeChild(rowNodes[i]);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
rows.sort(finalSorter);
|
|
145
|
+
|
|
146
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
147
|
+
tableBody.appendChild(rows[i]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// removes sort indicators for current column being sorted
|
|
151
|
+
function removeSortIndicators() {
|
|
152
|
+
var col = getNthColumn(currentSort.index),
|
|
153
|
+
cls = col.className;
|
|
154
|
+
|
|
155
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
156
|
+
col.className = cls;
|
|
157
|
+
}
|
|
158
|
+
// adds sort indicators for current column being sorted
|
|
159
|
+
function addSortIndicators() {
|
|
160
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
|
161
|
+
? ' sorted-desc'
|
|
162
|
+
: ' sorted';
|
|
163
|
+
}
|
|
164
|
+
// adds event listeners for all sorter widgets
|
|
165
|
+
function enableUI() {
|
|
166
|
+
var i,
|
|
167
|
+
el,
|
|
168
|
+
ithSorter = function ithSorter(i) {
|
|
169
|
+
var col = cols[i];
|
|
170
|
+
|
|
171
|
+
return function() {
|
|
172
|
+
var desc = col.defaultDescSort;
|
|
173
|
+
|
|
174
|
+
if (currentSort.index === i) {
|
|
175
|
+
desc = !currentSort.desc;
|
|
176
|
+
}
|
|
177
|
+
sortByIndex(i, desc);
|
|
178
|
+
removeSortIndicators();
|
|
179
|
+
currentSort.index = i;
|
|
180
|
+
currentSort.desc = desc;
|
|
181
|
+
addSortIndicators();
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
for (i = 0; i < cols.length; i += 1) {
|
|
185
|
+
if (cols[i].sortable) {
|
|
186
|
+
// add the click event handler on the th so users
|
|
187
|
+
// dont have to click on those tiny arrows
|
|
188
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
189
|
+
if (el.addEventListener) {
|
|
190
|
+
el.addEventListener('click', ithSorter(i));
|
|
191
|
+
} else {
|
|
192
|
+
el.attachEvent('onclick', ithSorter(i));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// adds sorting functionality to the UI
|
|
198
|
+
return function() {
|
|
199
|
+
if (!getTable()) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
cols = loadColumns();
|
|
203
|
+
loadData();
|
|
204
|
+
addSearchBox();
|
|
205
|
+
addSortIndicators();
|
|
206
|
+
enableUI();
|
|
207
|
+
};
|
|
208
|
+
})();
|
|
209
|
+
|
|
210
|
+
window.addEventListener('load', addSorting);
|
package/dist/index.cjs
CHANGED
|
@@ -82,6 +82,8 @@ const createRoot = async (channel) => {
|
|
|
82
82
|
"UiImage",
|
|
83
83
|
"UiLink",
|
|
84
84
|
"UiLoader",
|
|
85
|
+
"UiMenuItem",
|
|
86
|
+
"UiMenuItemGroup",
|
|
85
87
|
"UiModalSidebar",
|
|
86
88
|
"UiModalWindow",
|
|
87
89
|
"UiModalWindowSurface",
|
|
@@ -90,6 +92,8 @@ const createRoot = async (channel) => {
|
|
|
90
92
|
"UiPopperTarget",
|
|
91
93
|
"UiRadio",
|
|
92
94
|
"UiScrollBox",
|
|
95
|
+
"UiSelectPopper",
|
|
96
|
+
"UiSelectTrigger",
|
|
93
97
|
"UiTag",
|
|
94
98
|
"UiTextbox",
|
|
95
99
|
"UiToolbarButton",
|
package/dist/index.mjs
CHANGED
|
@@ -81,6 +81,8 @@ const createRoot = async (channel) => {
|
|
|
81
81
|
"UiImage",
|
|
82
82
|
"UiLink",
|
|
83
83
|
"UiLoader",
|
|
84
|
+
"UiMenuItem",
|
|
85
|
+
"UiMenuItemGroup",
|
|
84
86
|
"UiModalSidebar",
|
|
85
87
|
"UiModalWindow",
|
|
86
88
|
"UiModalWindowSurface",
|
|
@@ -89,6 +91,8 @@ const createRoot = async (channel) => {
|
|
|
89
91
|
"UiPopperTarget",
|
|
90
92
|
"UiRadio",
|
|
91
93
|
"UiScrollBox",
|
|
94
|
+
"UiSelectPopper",
|
|
95
|
+
"UiSelectTrigger",
|
|
92
96
|
"UiTag",
|
|
93
97
|
"UiTextbox",
|
|
94
98
|
"UiToolbarButton",
|
package/dist/meta.json
CHANGED
|
@@ -888,7 +888,7 @@
|
|
|
888
888
|
"description": {
|
|
889
889
|
"en-GB": "The order ID in the external source system",
|
|
890
890
|
"es-ES": "El ID del pedido en el sistema de origen externo",
|
|
891
|
-
"ru-RU": "
|
|
891
|
+
"ru-RU": "Идентификатор заказа во внешней системе источника"
|
|
892
892
|
},
|
|
893
893
|
"readonly": true
|
|
894
894
|
},
|
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retailcrm/embed-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.9",
|
|
5
5
|
"description": "API and components for creating RetailCRM UI extensions",
|
|
6
6
|
"repository": "git@github.com:retailcrm/embed-ui.git",
|
|
7
7
|
"author": "RetailDriverLLC <integration@retailcrm.ru>",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"build:code": "vite build",
|
|
29
29
|
"build:meta": "npx tsx scripts/build.meta.ts",
|
|
30
30
|
"eslint": "eslint .",
|
|
31
|
-
"test": "vitest --run"
|
|
31
|
+
"test": "vitest --run",
|
|
32
|
+
"test:coverage": "vitest --run --coverage"
|
|
32
33
|
},
|
|
33
34
|
"peerDependencies": {
|
|
34
35
|
"pinia": "^2.2",
|
|
@@ -40,20 +41,21 @@
|
|
|
40
41
|
"@omnicajs/symfony-router": "^1.0.0",
|
|
41
42
|
"@omnicajs/vue-remote": "^0.2.8",
|
|
42
43
|
"@remote-ui/rpc": "^1.4.5",
|
|
43
|
-
"@retailcrm/embed-ui-v1-contexts": "^0.9.
|
|
44
|
-
"@retailcrm/embed-ui-v1-types": "^0.9.
|
|
44
|
+
"@retailcrm/embed-ui-v1-contexts": "^0.9.9",
|
|
45
|
+
"@retailcrm/embed-ui-v1-types": "^0.9.9"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@eslint/eslintrc": "^3.3.3",
|
|
48
49
|
"@eslint/js": "^9.39.1",
|
|
49
50
|
"@modulify/git-toolkit": "^0.0.2",
|
|
50
51
|
"@modulify/pkg": "^1.0.1",
|
|
51
|
-
"@retailcrm/embed-ui-v1-testing": "^0.9.
|
|
52
|
+
"@retailcrm/embed-ui-v1-testing": "^0.9.9",
|
|
52
53
|
"@types/git-semver-tags": "^7.0.0",
|
|
53
54
|
"@types/node": "^22.19.2",
|
|
54
55
|
"@types/semver": "^7.7.1",
|
|
55
56
|
"@types/yargs": "^17.0.35",
|
|
56
57
|
"@vitejs/plugin-vue": "^6.0.2",
|
|
58
|
+
"@vitest/coverage-istanbul": "4.0.15",
|
|
57
59
|
"@vue/language-server": "^3.1.8",
|
|
58
60
|
"@vue/test-utils": "^2.4.6",
|
|
59
61
|
"chalk": "^5.3.0",
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit-workflow
|
|
3
|
+
description: Use this skill when creating commits in this repository. It standardizes commit splitting, Conventional Commit type/scope selection, and English commit messages with workspace-folder scopes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Commit Workflow
|
|
7
|
+
|
|
8
|
+
## When To Use
|
|
9
|
+
Use this skill when the user asks to:
|
|
10
|
+
- create one or more commits;
|
|
11
|
+
- split changes into multiple commits;
|
|
12
|
+
- choose commit message types/scopes;
|
|
13
|
+
- validate commit format before committing.
|
|
14
|
+
|
|
15
|
+
## Source Of Truth
|
|
16
|
+
- `AGENTS.md`
|
|
17
|
+
- root `package.json` (`workspaces: ["packages/*"]`)
|
|
18
|
+
- actual workspace folders under `packages/`
|
|
19
|
+
|
|
20
|
+
## Required Rules
|
|
21
|
+
- Commit format: Conventional Commits.
|
|
22
|
+
- Commit message language: English.
|
|
23
|
+
- Allowed types: `feat`, `fix`, `build`, `ci`, `perf`, `docs`, `refactor`, `style`, `test`, `chore`.
|
|
24
|
+
- Scope rule for workspace changes: use workspace folder name (not npm package name).
|
|
25
|
+
- Current workspace scopes:
|
|
26
|
+
- `v1-components`
|
|
27
|
+
- `v1-contexts`
|
|
28
|
+
- `v1-testing`
|
|
29
|
+
- `v1-types`
|
|
30
|
+
- For root/global repository changes, scope may be omitted.
|
|
31
|
+
- Split commits by logical intent.
|
|
32
|
+
- If one change affects multiple workspaces, split by workspace unless user explicitly asks to combine.
|
|
33
|
+
- Keep subject concise and factual.
|
|
34
|
+
- Start subject description with an uppercase letter.
|
|
35
|
+
- Mention affected component(s) or area in subject description when applicable.
|
|
36
|
+
- Subject should describe completed change in past tense.
|
|
37
|
+
- Prefer passive voice for changelog-friendly phrasing.
|
|
38
|
+
- Do not amend/rewrite history unless explicitly requested.
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
1. Inspect pending changes:
|
|
42
|
+
```bash
|
|
43
|
+
git status --short
|
|
44
|
+
git diff
|
|
45
|
+
```
|
|
46
|
+
2. Map changed files to workspace folders (`packages/<workspace>/...`) or root/global files.
|
|
47
|
+
3. Group changes into commit batches by logical intent and workspace boundary.
|
|
48
|
+
4. Choose commit header:
|
|
49
|
+
```text
|
|
50
|
+
<type>(<workspace-scope>): <short english summary>
|
|
51
|
+
```
|
|
52
|
+
or for global changes:
|
|
53
|
+
```text
|
|
54
|
+
<type>: <short english summary>
|
|
55
|
+
```
|
|
56
|
+
5. Stage only files for the current batch:
|
|
57
|
+
```bash
|
|
58
|
+
git add <files>
|
|
59
|
+
```
|
|
60
|
+
6. Create commit (non-interactive):
|
|
61
|
+
```bash
|
|
62
|
+
git commit -m "<type>(<scope>): <summary>"
|
|
63
|
+
```
|
|
64
|
+
7. Verify result:
|
|
65
|
+
```bash
|
|
66
|
+
git show --name-status --oneline -n 1
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Practical Patterns
|
|
70
|
+
- Workspace feature:
|
|
71
|
+
`feat(v1-components): UiSelect searchable select option groups added`
|
|
72
|
+
- Workspace fix:
|
|
73
|
+
`fix(v1-contexts): OrderContext missing order id handling corrected`
|
|
74
|
+
- Global docs update:
|
|
75
|
+
`docs: AGENTS repository agent instructions updated`
|
|
76
|
+
- Root tooling/config change:
|
|
77
|
+
`chore: Root yarn workspace build flow updated`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: local-ci-simulation
|
|
3
|
+
description: Simulate GitHub Actions CI locally for this repository by mapping workflow jobs to terminal commands, running phases step-by-step, isolating failing stages, and reporting exact root causes with fix suggestions. Use when CI is red, when validating a fix before push, or when user asks for phased local CI verification. Always propose full simulation first and run it only after explicit user confirmation because it is resource-intensive.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Local Ci Simulation
|
|
7
|
+
|
|
8
|
+
## Core Policy
|
|
9
|
+
- Offer full local CI simulation before running it.
|
|
10
|
+
- Start full simulation only after explicit user confirmation.
|
|
11
|
+
- Prefer lightweight targeted checks first when user has not requested full run.
|
|
12
|
+
- Preserve command order from workflow files and report exact failing phase.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
1. Inspect `.github/workflows/tests.yml` and `.github/workflows/release.yml`.
|
|
16
|
+
2. Build a phase list that mirrors CI jobs and step order.
|
|
17
|
+
3. Ask whether to run:
|
|
18
|
+
- focused mode: failing phase only;
|
|
19
|
+
- full mode: all heavy phases sequentially.
|
|
20
|
+
4. Run selected phases and stop at first failing command unless user asks to continue.
|
|
21
|
+
5. Distinguish non-fatal warnings from fatal errors.
|
|
22
|
+
6. Report:
|
|
23
|
+
- failing phase name;
|
|
24
|
+
- command;
|
|
25
|
+
- key error lines;
|
|
26
|
+
- minimal fix;
|
|
27
|
+
- post-fix recheck commands.
|
|
28
|
+
|
|
29
|
+
## Repo Command Map
|
|
30
|
+
Use these commands as default simulation phases for this repository:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
make .yarnrc.yml
|
|
34
|
+
yarn install
|
|
35
|
+
yarn workspaces foreach -A --topological-dev run build
|
|
36
|
+
yarn eslint
|
|
37
|
+
yarn test
|
|
38
|
+
yarn test:coverage
|
|
39
|
+
yarn vitest run -c packages/v1-contexts/vitest.config.ts --typecheck.only --typecheck.checker tsc --typecheck.tsconfig packages/v1-contexts/tsconfig.json
|
|
40
|
+
yarn workspace @retailcrm/embed-ui-v1-components run storybook:build
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Practical Notes
|
|
44
|
+
- Re-run the exact failing command after applying a fix.
|
|
45
|
+
- Run dependent follow-up checks for confidence (`eslint`, `test`, relevant build/storybook step).
|
|
46
|
+
- Mention when output is truncated and provide the most diagnostic lines.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Local CI Simulation"
|
|
3
|
+
short_description: "Simulate CI phases locally and isolate failing steps"
|
|
4
|
+
default_prompt: "Analyze CI workflows, propose focused vs full local simulation, and run heavy full simulation only after explicit user confirmation."
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sync-remote-host-registry
|
|
3
|
+
description: Use this skill when updating remote-to-host component registries (for example createRoot component lists) to keep them aligned with the actual render graph instead of naive host export parity.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sync Remote Host Registry
|
|
7
|
+
|
|
8
|
+
## When To Use
|
|
9
|
+
Use this skill when:
|
|
10
|
+
- updating `createRoot(..., { components: [...] })` lists;
|
|
11
|
+
- updating Storybook provider/receiver setups for remote rendering;
|
|
12
|
+
- checking whether a host component should be added to or removed from a remote render registry.
|
|
13
|
+
|
|
14
|
+
## Source Of Truth
|
|
15
|
+
- `src/index.ts` (`createRoot` in root package)
|
|
16
|
+
- `packages/v1-components/src/host.ts`
|
|
17
|
+
- `packages/v1-components/src/remote.ts`
|
|
18
|
+
- `packages/v1-components/src/remote/components/**/*`
|
|
19
|
+
- `packages/v1-components/storybook/endpoint.ts`
|
|
20
|
+
- `packages/v1-components/storybook/stories/UiSelect.stories.ts`
|
|
21
|
+
- `packages/v1-components/storybook/stories/UiSelect.remote.ts`
|
|
22
|
+
|
|
23
|
+
## Core Model
|
|
24
|
+
- `host.ts` is the catalog of available host implementations.
|
|
25
|
+
- `remote.ts` is the public remote API surface.
|
|
26
|
+
- Registries like `createRoot(...components)` must include host components that are schema-reachable from remote rendering flow.
|
|
27
|
+
- Non-1:1 mapping is valid:
|
|
28
|
+
- one remote component may render through multiple host primitives;
|
|
29
|
+
- host-only components can exist and must not be added if remote flow never emits them.
|
|
30
|
+
|
|
31
|
+
## Practical Rules
|
|
32
|
+
- Do not assume parity with `host.ts`.
|
|
33
|
+
- Include a host component if remote rendering can emit its schema in this runtime path.
|
|
34
|
+
- Exclude host-only components that are not emitted by remote instructions in this runtime path.
|
|
35
|
+
- For Storybook remote stories, provider can stay minimal and story-specific.
|
|
36
|
+
- For product/runtime `src/index.ts`, registry should cover all host schemas used by runtime remote render graph.
|
|
37
|
+
|
|
38
|
+
## Workflow
|
|
39
|
+
1. Inspect current registry and target area:
|
|
40
|
+
```bash
|
|
41
|
+
nl -ba src/index.ts | sed -n '68,120p'
|
|
42
|
+
```
|
|
43
|
+
2. Inspect host export catalog:
|
|
44
|
+
```bash
|
|
45
|
+
nl -ba packages/v1-components/src/host.ts | sed -n '1,120p'
|
|
46
|
+
```
|
|
47
|
+
3. Inspect remote public surface:
|
|
48
|
+
```bash
|
|
49
|
+
nl -ba packages/v1-components/src/remote.ts | sed -n '1,120p'
|
|
50
|
+
```
|
|
51
|
+
4. Inspect composite remote components (especially non-1:1 cases) and their internal parts.
|
|
52
|
+
5. Update registry by render-graph reachability, not by export parity.
|
|
53
|
+
6. Validate:
|
|
54
|
+
```bash
|
|
55
|
+
yarn eslint src/index.ts
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Review Checklist
|
|
59
|
+
- Every newly added registry item is justified by remote render flow.
|
|
60
|
+
- Removed items are proven host-only for this runtime path.
|
|
61
|
+
- Composite components (like select) are checked through their internal remote parts.
|
|
62
|
+
- Storybook-specific minimal providers are not blindly copied into runtime and vice versa.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yarn-lock-conflict-resolution
|
|
3
|
+
description: Use this skill when resolving merge/rebase conflicts in yarn.lock. It standardizes taking yarn.lock from the target branch, reconciling it with yarn install, and reusing a successful resolution across repeated conflict rounds.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Yarn.lock Conflict Resolution
|
|
7
|
+
|
|
8
|
+
## When To Use
|
|
9
|
+
Use this skill when:
|
|
10
|
+
- `yarn.lock` has merge/rebase conflicts;
|
|
11
|
+
- conflict resolution should be repeatable and low-risk;
|
|
12
|
+
- the same conflict appears in multiple rounds of one rebase/merge sequence.
|
|
13
|
+
|
|
14
|
+
## Source Of Truth Policy
|
|
15
|
+
- Rebase: take `yarn.lock` from the branch you rebase onto.
|
|
16
|
+
- Merge: take `yarn.lock` from `HEAD` (current target branch).
|
|
17
|
+
- After taking baseline, run `yarn install` to reconcile lock metadata with current manifests.
|
|
18
|
+
|
|
19
|
+
## Required Rules
|
|
20
|
+
- Do not manually resolve conflict markers inside `yarn.lock`.
|
|
21
|
+
- Replace `yarn.lock` completely from the selected baseline.
|
|
22
|
+
- Reuse previous successful resolution for repeated rounds in the same sequence.
|
|
23
|
+
- If dependency updates were intentional in the rebased commit, replay dependency commands after conflict resolution.
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
1. Ensure conflict exists:
|
|
27
|
+
```bash
|
|
28
|
+
git status --short
|
|
29
|
+
```
|
|
30
|
+
2. (Optional) Ensure Yarn config exists:
|
|
31
|
+
```bash
|
|
32
|
+
make .yarnrc.yml
|
|
33
|
+
```
|
|
34
|
+
3. Resolve first conflict round for rebase:
|
|
35
|
+
```bash
|
|
36
|
+
ONTO=$(cat .git/rebase-merge/onto 2>/dev/null || cat .git/rebase-apply/onto)
|
|
37
|
+
git show "$ONTO:yarn.lock" > yarn.lock
|
|
38
|
+
yarn install
|
|
39
|
+
git add yarn.lock
|
|
40
|
+
cp yarn.lock .git/yarn-lock-resolution-base
|
|
41
|
+
```
|
|
42
|
+
4. Resolve first conflict round for merge:
|
|
43
|
+
```bash
|
|
44
|
+
git show "HEAD:yarn.lock" > yarn.lock
|
|
45
|
+
yarn install
|
|
46
|
+
git add yarn.lock
|
|
47
|
+
cp yarn.lock .git/yarn-lock-resolution-base
|
|
48
|
+
```
|
|
49
|
+
5. Resolve repeated rounds in the same sequence:
|
|
50
|
+
```bash
|
|
51
|
+
cp .git/yarn-lock-resolution-base yarn.lock
|
|
52
|
+
yarn install
|
|
53
|
+
git add yarn.lock
|
|
54
|
+
cp yarn.lock .git/yarn-lock-resolution-base
|
|
55
|
+
```
|
|
56
|
+
6. Continue operation:
|
|
57
|
+
```bash
|
|
58
|
+
git rebase --continue
|
|
59
|
+
# or
|
|
60
|
+
git merge --continue
|
|
61
|
+
```
|
|
62
|
+
7. Cleanup after finish:
|
|
63
|
+
```bash
|
|
64
|
+
rm -f .git/yarn-lock-resolution-base
|
|
65
|
+
```
|
|
66
|
+
8. If dependency updates must be replayed, run original dependency command and commit lockfile update with an English Conventional Commit message, for example:
|
|
67
|
+
```bash
|
|
68
|
+
yarn up <packages>
|
|
69
|
+
git add yarn.lock
|
|
70
|
+
git commit -m "chore: refresh yarn.lock"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Validation
|
|
74
|
+
- `git status --short` has no unresolved conflicts for `yarn.lock`.
|
|
75
|
+
- `yarn.lock` is staged before `--continue`.
|
|
76
|
+
- Resolution follows source-of-truth policy above.
|