@mohsinonxrm/pptb-commandbar-studio 0.9.0-beta.2 → 0.10.0-beta.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/CHANGELOG.md +242 -2
- package/README.md +16 -14
- package/SECURITY.md +4 -4
- package/dist/assets/BulkPublishModal-9_XxYmS2.js +2 -0
- package/dist/assets/CommandEditorPanel-BtBG8540.js +1 -0
- package/dist/assets/CommandPalette-C2YXN_gD.js +1 -0
- package/dist/assets/CompareView-Beq5V68_.js +11 -0
- package/dist/assets/CrmParameterEditor-DfZv5BuF.js +1 -0
- package/dist/assets/EditorDrawer-D0K8zHVK.js +2 -0
- package/dist/assets/HideInsteadOfDeleteModal-C4AKxh50.js +1 -0
- package/dist/assets/IconPickerModal-B9UeIP7Z.js +1 -0
- package/dist/assets/ImportXmlModal-Cf75oVpN.js +1 -0
- package/dist/assets/{MonacoEditor-DweI16yt.js → MonacoEditor-B3J81C8F.js} +2 -2
- package/dist/assets/NewButtonModal-DhGNLWEW.js +1 -0
- package/dist/assets/NewGroupModal-CMLOZ15C.js +1 -0
- package/dist/assets/NewTabModal-N7FF7DT1.js +1 -0
- package/dist/assets/RuleEditorPanel-C9CcMM1s.js +1 -0
- package/dist/assets/ScriptView-B0ILfTWe.js +1 -0
- package/dist/assets/TabDisplayRulesPanel-DVMEaWWv.js +1 -0
- package/dist/assets/TitleTranslationsView-C68zJcNK.js +1 -0
- package/dist/assets/TranslationsView-BZXsG_LU.js +1 -0
- package/dist/assets/WebResourceBrowser-DEXq2SCy.js +1 -0
- package/dist/assets/XmlView-DEUwTHCt.js +2 -0
- package/dist/assets/crmParameters-Dxz06tk4.js +1 -0
- package/dist/assets/{dnd-iy5K5XAJ.js → dnd-C19d6Mn0.js} +1 -1
- package/dist/assets/fluent-ui-BThr2m8u.js +59 -0
- package/dist/assets/index-Df9NSpg6.js +136 -0
- package/dist/assets/index-browser-Bmt9T2GD.js +2 -0
- package/dist/assets/languages-CGjPBPNA.js +1 -0
- package/dist/assets/{monaco-cQE5XS3B.js → monaco-DzBcrxae.js} +1 -1
- package/dist/assets/monacoSetup-BRltj-y7.js +1 -0
- package/dist/assets/publishService-CKoTOngS.js +36 -0
- package/dist/assets/ribbonXsdCheck-CJBpxpVm.js +1923 -0
- package/dist/assets/{server.browser-DTeSoizu.js → server.browser-BokSAg1N.js} +1 -1
- package/dist/assets/useReplaceWebResourceConfirm-BUfgdCRQ.js +1 -0
- package/dist/assets/{useStableKeys-49o4VnxU.js → useStableKeys-EsghhjoV.js} +1 -1
- package/dist/assets/xmlValidator-Dki8Hf7Y.js +3 -0
- package/dist/assets/xmllint-CcuGSrO9.wasm +0 -0
- package/dist/assets/xmllint-browser-C85XrDSU.js +4 -0
- package/dist/index.html +3 -3
- package/package.json +2 -1
- package/dist/assets/BulkPublishModal-DjdSDcWe.js +0 -36
- package/dist/assets/CommandEditorPanel-DYsxUTOk.js +0 -1
- package/dist/assets/CommandPalette-DihgRpHI.js +0 -1
- package/dist/assets/CompareView-CdQo0D6e.js +0 -7
- package/dist/assets/CrmParameterEditor-DO6Rt764.js +0 -1
- package/dist/assets/EditorDrawer-Cid60F3b.js +0 -2
- package/dist/assets/HideInsteadOfDeleteModal-Bk_foggy.js +0 -1
- package/dist/assets/IconPickerModal-CW_pvpVS.js +0 -1
- package/dist/assets/ImportXmlModal-BcszuTi-.js +0 -1
- package/dist/assets/NewButtonModal-C2fAUuZI.js +0 -1
- package/dist/assets/NewGroupModal-BDr4DPBs.js +0 -1
- package/dist/assets/NewTabModal-CYc1fc2A.js +0 -1
- package/dist/assets/RuleEditorPanel-BxGrJYo4.js +0 -1
- package/dist/assets/ScriptView-tkdIK4sg.js +0 -1
- package/dist/assets/TabDisplayRulesPanel-S_AxUWfB.js +0 -1
- package/dist/assets/TranslationsView-DZIGE2pC.js +0 -1
- package/dist/assets/WebResourceBrowser-Dc3kBMvH.js +0 -1
- package/dist/assets/XmlView-B0weY9hR.js +0 -2
- package/dist/assets/crmParameters-rgfZhhzN.js +0 -1
- package/dist/assets/fluent-ui-CQyNN9H3.js +0 -59
- package/dist/assets/index-DRTwBo4g.js +0 -136
- package/dist/assets/monacoSetup-BIq1zGyP.js +0 -1
- package/dist/assets/ruleKinds-BKTUiZ1-.js +0 -1
- package/dist/assets/useReplaceWebResourceConfirm-BhU1AM5L.js +0 -1
- package/dist/assets/xmlValidator-CnbyWxHe.js +0 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{f0 as Kr}from"./fluent-ui-BThr2m8u.js";function cn($,m){for(var F=0;F<m.length;F++){const B=m[F];if(typeof B!="string"&&!Array.isArray(B)){for(const v in B)if(v!=="default"&&!(v in $)){const R=Object.getOwnPropertyDescriptor(B,v);R&&Object.defineProperty($,v,R.get?R:{enumerable:!0,get:()=>B[v]})}}}return Object.freeze(Object.defineProperty($,Symbol.toStringTag,{value:"Module"}))}var he={},Re={};var Gr;function fn(){if(Gr)return Re;Gr=1;var $=Kr();function m(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,l=1;l<arguments.length;l++)n+="&args[]="+encodeURIComponent(arguments[l]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var F=Object.prototype.hasOwnProperty,B=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,v={},R={};function Ae(e){return F.call(R,e)?!0:F.call(v,e)?!1:B.test(e)?R[e]=!0:(v[e]=!0,!1)}function N(e,n,l,s,f,i,p){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=f,this.mustUseProperty=l,this.propertyName=e,this.type=n,this.sanitizeURL=i,this.removeEmptyString=p}var S={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){S[e]=new N(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];S[n]=new N(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){S[e]=new N(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){S[e]=new N(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){S[e]=new N(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){S[e]=new N(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){S[e]=new N(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){S[e]=new N(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){S[e]=new N(e,5,!1,e.toLowerCase(),null,!1,!1)});var g=/[\-:]([a-z])/g;function _e(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(g,_e);S[n]=new N(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(g,_e);S[n]=new N(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(g,_e);S[n]=new N(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){S[e]=new N(e,1,!1,e.toLowerCase(),null,!1,!1)}),S.xlinkHref=new N("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){S[e]=new N(e,1,!1,e.toLowerCase(),null,!0,!0)});var z={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sr=["Webkit","ms","Moz","O"];Object.keys(z).forEach(function(e){sr.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),z[n]=z[e]})});var gt=/["'&<>]/;function O(e){if(typeof e=="boolean"||typeof e=="number")return""+e;e=""+e;var n=gt.exec(e);if(n){var l="",s,f=0;for(s=n.index;s<e.length;s++){switch(e.charCodeAt(s)){case 34:n=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";break;default:continue}f!==s&&(l+=e.substring(f,s)),f=s+1,l+=n}e=f!==s?l+e.substring(f,s):l}return e}var vt=/([A-Z])/g,L=/^ms-/,b=Array.isArray;function U(e,n){return{insertionMode:e,selectedValue:n}}function He(e,n,l){switch(n){case"select":return U(1,l.value!=null?l.value:l.defaultValue);case"svg":return U(2,null);case"math":return U(3,null);case"foreignObject":return U(1,null);case"table":return U(4,null);case"thead":case"tbody":case"tfoot":return U(5,null);case"colgroup":return U(7,null);case"tr":return U(6,null)}return 4<=e.insertionMode||e.insertionMode===0?U(1,null):e}var me=new Map;function St(e,n,l){if(typeof l!="object")throw Error(m(62));n=!0;for(var s in l)if(F.call(l,s)){var f=l[s];if(f!=null&&typeof f!="boolean"&&f!==""){if(s.indexOf("--")===0){var i=O(s);f=O((""+f).trim())}else{i=s;var p=me.get(i);p!==void 0||(p=O(i.replace(vt,"-$1").toLowerCase().replace(L,"-ms-")),me.set(i,p)),i=p,f=typeof f=="number"?f===0||F.call(z,s)?""+f:f+"px":O((""+f).trim())}n?(n=!1,e.push(' style="',i,":",f)):e.push(";",i,":",f)}}n||e.push('"')}function j(e,n,l,s){switch(l){case"style":St(e,n,s);return;case"defaultValue":case"defaultChecked":case"innerHTML":case"suppressContentEditableWarning":case"suppressHydrationWarning":return}if(!(2<l.length)||l[0]!=="o"&&l[0]!=="O"||l[1]!=="n"&&l[1]!=="N"){if(n=S.hasOwnProperty(l)?S[l]:null,n!==null){switch(typeof s){case"function":case"symbol":return;case"boolean":if(!n.acceptsBooleans)return}switch(l=n.attributeName,n.type){case 3:s&&e.push(" ",l,'=""');break;case 4:s===!0?e.push(" ",l,'=""'):s!==!1&&e.push(" ",l,'="',O(s),'"');break;case 5:isNaN(s)||e.push(" ",l,'="',O(s),'"');break;case 6:!isNaN(s)&&1<=s&&e.push(" ",l,'="',O(s),'"');break;default:n.sanitizeURL&&(s=""+s),e.push(" ",l,'="',O(s),'"')}}else if(Ae(l)){switch(typeof s){case"function":case"symbol":return;case"boolean":if(n=l.toLowerCase().slice(0,5),n!=="data-"&&n!=="aria-")return}e.push(" ",l,'="',O(s),'"')}}}function D(e,n,l){if(n!=null){if(l!=null)throw Error(m(60));if(typeof n!="object"||!("__html"in n))throw Error(m(61));n=n.__html,n!=null&&e.push(""+n)}}function ir(e){var n="";return $.Children.forEach(e,function(l){l!=null&&(n+=l)}),n}function Ue(e,n,l,s){e.push(X(l));var f=l=null,i;for(i in n)if(F.call(n,i)){var p=n[i];if(p!=null)switch(i){case"children":l=p;break;case"dangerouslySetInnerHTML":f=p;break;default:j(e,s,i,p)}}return e.push(">"),D(e,f,l),typeof l=="string"?(e.push(O(l)),null):l}var We=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,xt=new Map;function X(e){var n=xt.get(e);if(n===void 0){if(!We.test(e))throw Error(m(65,e));n="<"+e,xt.set(e,n)}return n}function ar(e,n,l,s,f){switch(n){case"select":e.push(X("select"));var i=null,p=null;for(C in l)if(F.call(l,C)){var y=l[C];if(y!=null)switch(C){case"children":i=y;break;case"dangerouslySetInnerHTML":p=y;break;case"defaultValue":case"value":break;default:j(e,s,C,y)}}return e.push(">"),D(e,p,i),i;case"option":p=f.selectedValue,e.push(X("option"));var x=y=null,w=null,C=null;for(i in l)if(F.call(l,i)){var M=l[i];if(M!=null)switch(i){case"children":y=M;break;case"selected":w=M;break;case"dangerouslySetInnerHTML":C=M;break;case"value":x=M;default:j(e,s,i,M)}}if(p!=null)if(l=x!==null?""+x:ir(y),b(p)){for(s=0;s<p.length;s++)if(""+p[s]===l){e.push(' selected=""');break}}else""+p===l&&e.push(' selected=""');else w&&e.push(' selected=""');return e.push(">"),D(e,C,y),y;case"textarea":e.push(X("textarea")),C=p=i=null;for(y in l)if(F.call(l,y)&&(x=l[y],x!=null))switch(y){case"children":C=x;break;case"value":i=x;break;case"defaultValue":p=x;break;case"dangerouslySetInnerHTML":throw Error(m(91));default:j(e,s,y,x)}if(i===null&&p!==null&&(i=p),e.push(">"),C!=null){if(i!=null)throw Error(m(92));if(b(C)&&1<C.length)throw Error(m(93));i=""+C}return typeof i=="string"&&i[0]===`
|
|
2
2
|
`&&e.push(`
|
|
3
3
|
`),i!==null&&e.push(O(""+i)),null;case"input":e.push(X("input")),x=C=y=i=null;for(p in l)if(F.call(l,p)&&(w=l[p],w!=null))switch(p){case"children":case"dangerouslySetInnerHTML":throw Error(m(399,"input"));case"defaultChecked":x=w;break;case"defaultValue":y=w;break;case"checked":C=w;break;case"value":i=w;break;default:j(e,s,p,w)}return C!==null?j(e,s,"checked",C):x!==null&&j(e,s,"checked",x),i!==null?j(e,s,"value",i):y!==null&&j(e,s,"value",y),e.push("/>"),null;case"menuitem":e.push(X("menuitem"));for(var K in l)if(F.call(l,K)&&(i=l[K],i!=null))switch(K){case"children":case"dangerouslySetInnerHTML":throw Error(m(400));default:j(e,s,K,i)}return e.push(">"),null;case"title":e.push(X("title")),i=null;for(M in l)if(F.call(l,M)&&(p=l[M],p!=null))switch(M){case"children":i=p;break;case"dangerouslySetInnerHTML":throw Error(m(434));default:j(e,s,M,p)}return e.push(">"),i;case"listing":case"pre":e.push(X(n)),p=i=null;for(x in l)if(F.call(l,x)&&(y=l[x],y!=null))switch(x){case"children":i=y;break;case"dangerouslySetInnerHTML":p=y;break;default:j(e,s,x,y)}if(e.push(">"),p!=null){if(i!=null)throw Error(m(60));if(typeof p!="object"||!("__html"in p))throw Error(m(61));l=p.__html,l!=null&&(typeof l=="string"&&0<l.length&&l[0]===`
|
|
4
4
|
`?e.push(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r,j as e,D as g,f as x,g as m,h,n as j,t as f,c as l,o as y,k as o}from"./fluent-ui-BThr2m8u.js";import{d as b,V as k}from"./index-Df9NSpg6.js";function w(){const[n,t]=r.useState(null),c=r.useRef(null),d=b(a=>a.connectionVersion),s=r.useCallback(a=>{c.current?.(a),c.current=null,t(null)},[]),p=r.useCallback(a=>new Promise(i=>{c.current?.("cancel"),c.current=i,t({name:a.name,managed:a.managed})}),[]);r.useEffect(()=>()=>s("cancel"),[d,s]);const u=e.jsx(g,{open:n!==null,onOpenChange:(a,i)=>!i.open&&s("cancel"),children:e.jsx(x,{style:{maxWidth:520},children:e.jsxs(m,{children:[e.jsx(h,{children:n?.managed?"Use the existing web resource?":"Replace the existing web resource?"}),e.jsxs(j,{style:{display:"flex",flexDirection:"column",gap:f.spacingVerticalS},children:[n?.managed?e.jsxs(l,{children:["A managed web resource named ",e.jsx("strong",{children:n.name})," already exists. It can't be replaced: keep it as it is, or rename the file and upload it again."]}):e.jsxs(l,{children:["A web resource named ",e.jsx("strong",{children:n?.name})," already exists. Replacing it changes its content everywhere it is used (other ribbons, forms, apps)."]}),e.jsx(k,{prefix:"In"})]}),e.jsxs(y,{children:[e.jsx(o,{appearance:"secondary",onClick:()=>s("cancel"),children:"Cancel"}),e.jsx(o,{appearance:n?.managed?"primary":"secondary",onClick:()=>s("keep"),children:"Keep existing"}),!n?.managed&&e.jsx(o,{appearance:"primary",onClick:()=>s("replace"),children:"Replace"})]})]})})});return{onExisting:p,dialog:u}}export{w as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as d}from"./fluent-ui-
|
|
1
|
+
import{r as d}from"./fluent-ui-BThr2m8u.js";import{g as y}from"./dnd-C19d6Mn0.js";let c=0;const g=(n,t)=>Array.from({length:t},()=>`${n}#${++c}`);function p(n,t){const[e,a]=d.useState(null),f=d.useMemo(()=>g(n,t.length),[n,t]),l=!!e&&e.scope===n&&e.keys.length===t.length&&(e.items===t||e.pending);e?.pending&&a({...e,items:l?t:e.items,pending:!1});const r=l?e.keys:f,o=s=>a({scope:n,items:t,pending:!0,keys:s});return{keys:r,add:()=>o([...r,...g(n,1)]),remove:s=>o(r.filter((u,i)=>i!==s)),move:(s,u)=>o(y(r,s,u)),update:()=>o(r)}}export{p as u};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{aU as v,aV as le,aW as ce,aX as z,aY as ue,aZ as me,an as de,a_ as fe,a$ as pe}from"./index-Df9NSpg6.js";import{C as ge,i as he}from"./crmParameters-Dxz06tk4.js";const be=/^[a-zA-Z_$][a-zA-Z_$0-9.]*$/,ye=/^[a-zA-Z_][a-zA-Z_0-9]*$/,$e=/^[+-]?\d+$/,Ae=/^[+-]?(\d+(\.\d*)?|\.\d+)$/,K=/^(true|false|1|0)$/,J={JavaScriptFunction:["FunctionName","Library"],Url:["Address"],CustomRule:["FunctionName","Library"],CommandClientTypeRule:["Type"],CrmClientTypeRule:["Type"],CrmOfflineAccessStateRule:["State"],CrmOutlookClientTypeRule:["Type"],CrmOutlookClientVersionRule:["Major"],DeviceTypeRule:["Type"],EntityPrivilegeRule:["PrivilegeType","PrivilegeDepth"],EntityPropertyRule:["PropertyName","PropertyValue"],FeatureControlRule:["FeatureControlBit","ExpectedValue"],FormEntityContextRule:["EntityName"],FormStateRule:["State"],FormTypeRule:["Type"],MiscellaneousPrivilegeRule:["PrivilegeName"],OptionSetRule:["OptionSet","StateCode","ObjectTypeCode"],OrganizationSettingRule:["Setting"],OutlookItemTrackingRule:["TrackedInCrm"],OutlookRenderTypeRule:["Type"],OutlookVersionRule:["Version"],PageRule:["Address"],RecordPrivilegeRule:["PrivilegeType"],RelationshipTypeRule:["AppliesTo"],SkuRule:["Sku"],ValueRule:["Field","Value"],BoolParameter:["Value"],CrmParameter:["Value"],DecimalParameter:["Value"],IntParameter:["Value"],StringParameter:["Value"]},Re=new Set(["ValueRule.Value","StringParameter.Value"]),Se={SelectionCountRule:["Minimum","Maximum"],CrmOutlookClientVersionRule:["Major","Minor","Build","Revision"],IntParameter:["Value"],Url:["WinMode"]},Ie={DecimalParameter:["Value"]},we={BoolParameter:["Value"],Url:["PassParams"],OutlookItemTrackingRule:["TrackedInCrm"],EntityPropertyRule:["PropertyValue"],FeatureControlRule:["ExpectedValue"],RelationshipTypeRule:["AllowCustomRelationship","AllowSystemRelationship"]},Ne=["Default","InvertResult"],Ee=new Set(["BoolParameter","CrmParameter","DecimalParameter","IntParameter","StringParameter"]),O=i=>Array.from(i.children);function U(i,l,h){const u=[],f=i.tagName;for(const p of J[f]??[]){const m=i.getAttribute(p);(m===null||!m.trim()&&!Re.has(`${f}.${p}`))&&u.push(`${l}: ${f} has no ${p}`)}const b=(p,m,r)=>{for(const d of p??[]){const R=i.getAttribute(d);R===null||R===""&&J[f]?.includes(d)||m.test(R.trim())||u.push(`${l}: ${f} ${d}="${R}" is not ${r}`)}};if(b(Se[f],$e,"a whole number"),b(Ie[f],Ae,"a number"),b(we[f],K,"true or false"),h&&b(Ne,K,"true or false"),f==="JavaScriptFunction"||f==="CustomRule"){const p=i.getAttribute("FunctionName");p?.trim()&&!be.test(p)&&u.push(`${l}: FunctionName "${p}" isn't a JavaScript function name (letters, digits, _, $ and dots)`)}if((f==="JavaScriptFunction"||f==="CustomRule")&&/^\$webresource:\s*$/i.test(i.getAttribute("Library")??"")&&u.push(`${l}: ${f} Library names no web resource`),f==="EntityRule"){const p=i.getAttribute("Context");p!==null&&!ye.test(p)&&u.push(`${l}: EntityRule Context "${p}" isn't valid`)}f==="Url"&&/^(https?:\/\/|\$webresource:)$/i.test(i.getAttribute("Address")?.trim()??"")&&u.push(`${l}: Url has no address`);for(const p of O(i).filter(m=>Ee.has(m.tagName)))f==="Url"&&!p.getAttribute("Name")?.trim()&&u.push(`${l}: a ${p.tagName} of the Url has no Name`),f!=="Url"&&p.hasAttribute("Name")&&u.push(`${l}: a ${p.tagName} of ${f} can't have a Name`),u.push(...U(p,l,!1));return u}function Te(i){const l=i.getAttribute("Id")??"";if(i.tagName==="CommandDefinition"){const b=`Command ${l}`,p=O(i).find(m=>m.tagName==="Actions");return O(p??i).filter(m=>m.tagName==="JavaScriptFunction"||m.tagName==="Url").flatMap(m=>U(m,b,!1))}if(i.tagName!=="EnableRule"&&i.tagName!=="DisplayRule")return[];const h=`${i.tagName==="EnableRule"?"Enable":"Display"} rule ${l}`,u=O(i);if(u.length===0)return[`${h} has no steps — add one, or remove the rule from its commands`];const f=[];for(const b of u){if(b.tagName!=="OrRule"){f.push(...U(b,h,!0));continue}const p=O(b).filter(m=>m.tagName==="Or");p.length<2&&f.push(`${h}: an OrRule needs at least 2 alternatives (it has ${p.length})`);for(const m of p){const r=O(m);r.length===0&&f.push(`${h}: an alternative of its OrRule has no steps`);for(const d of r)d.tagName==="OrRule"?f.push(`${h}: an OrRule can't contain another OrRule`):f.push(...U(d,h,!0))}}return f}const Ce=["Mscrm.HideOnModern","Mscrm.ShowOnlyOnModern"];function E(i,l){const h=i.indexOf(l);return h<0?void 0:`Line ${i.slice(0,h).split(/\r?\n/).length}`}function qe(i,l,h){const u=[],b=new DOMParser().parseFromString(i,"application/xml"),p=b.querySelector("parsererror");if(p){const r=(p.textContent??"").replace(/This page contains the following errors:/i,"").replace(/Below is a rendering of the page up to the first error\.?/i,"").trim()||"Unknown",d=r.match(/line\s+(\d+)/i);return u.push({message:`XML parse error: ${r}`,lineHint:d?`Line ${d[1]}`:void 0}),u}const m=new Set([]);return b.querySelectorAll("[Id]").forEach(r=>{const d=r.getAttribute("Id")??"";if(/\s/.test(d)){const R=E(i,`Id="${d}"`);u.push({message:`Element ID "${d}" contains invalid whitespace characters`,elementId:d,lineHint:R})}}),b.querySelectorAll("[LabelText]").forEach(r=>{const d=r.getAttribute("LabelText")??"",R=d.match(/^\$LocLabels:(.+)$/);if(R&&m.size>0&&!m.has(R[1])){const A=r.getAttribute("Id")??"",S=E(i,A?`Id="${A}"`:`LabelText="${d}"`);u.push({message:`Button label reference "$LocLabels:${R[1]}" has no matching LocLabel entry`,elementId:A||void 0,lineHint:S})}}),(i.includes("& ")||i.includes(`&
|
|
2
|
+
`))&&u.push({message:'URL may contain an unescaped "&" — all ampersands in XML must be written as &',lineHint:E(i,"& ")??E(i,`&
|
|
3
|
+
`)}),b.querySelectorAll("Group").forEach(r=>{const d=[];r.querySelectorAll(":scope > Controls > Button, :scope > Controls > FlyoutAnchor, :scope > Controls > SplitButton").forEach(R=>{const A=parseInt(R.getAttribute("Sequence")??"0",10);if(d.includes(A)){const S=r.getAttribute("Id")??"?";u.push({message:`Two elements share Sequence "${A}" in group "${S}"`,elementId:S,lineHint:E(i,`Sequence="${A}"`)})}d.push(A)})}),u.push(...Le(b,i)),u}const Y=new Set(["BoolParameter","CrmParameter","DecimalParameter","IntParameter","StringParameter"]);function y(i){return Array.from(i.children)}function oe(i,l){return l==="enable"?fe.has(i):pe.has(i)}function Le(i,l){const h=[],u=(m,r,d)=>h.push({message:m,elementId:d,lineHint:E(l,r)}),f=(m,r,d)=>h.push({message:m,elementId:d,lineHint:E(l,r),severity:"warning"}),b=i.querySelector("RibbonDiffXml > RuleDefinitions"),p=[{tag:"EnableRule",label:"Enable",container:"enable"},{tag:"DisplayRule",label:"Display",container:"display"}];for(const{tag:m,label:r,container:d}of p)b?.querySelectorAll(`:scope > ${m}s > ${m}`).forEach(R=>{const A=R.getAttribute("Id")??"",S=y(R);S.length===0&&u(`${r} rule "${A}" has no steps — the schema requires at least one`,`Id="${A}"`,A);const M=I=>{oe(I.tagName,d)&&f(`${r} rule "${A}" contains ${I.tagName}, which RibbonTypes.xsd only allows in ${d==="enable"?"display":"enable"} rules`,`<${I.tagName}`,A)};for(const I of S){if(I.tagName!=="OrRule"){M(I);continue}const T=y(I);T.filter(w=>w.tagName==="Or").length<2&&u(`OrRule in ${r.toLowerCase()} rule "${A}" needs at least 2 <Or> children (found ${T.filter(w=>w.tagName==="Or").length})`,"<OrRule",A);for(const w of T){const C=y(w);C.length===0&&u(`Empty <Or> in rule "${A}"`,"<Or",A);for(const L of C)L.tagName==="OrRule"?u(`Rule "${A}": an <Or> cannot contain another OrRule`,"<OrRule",A):M(L)}}});return b||i.querySelectorAll("OrRule").forEach(m=>{const r=m.querySelectorAll(":scope > Or").length;r<2&&u(`OrRule requires at least 2 <Or> children (found ${r})`,"<OrRule")}),i.querySelectorAll("JavaScriptFunction, CustomRule").forEach(m=>{for(const r of y(m)){if(!Y.has(r.tagName))continue;r.hasAttribute("Name")&&u(`${r.tagName} inside <${m.tagName}> must not have a Name attribute (only <Url> parameters are named)`,`<${r.tagName} Name=`);const d=r.getAttribute("Value")??"";r.tagName==="CrmParameter"&&!ge.has(d)&&u(`CrmParameter Value "${d}" is not a valid CrmParameterValue`,`Value="${d}"`)}}),i.querySelectorAll("Url").forEach(m=>{for(const r of y(m)){if(!Y.has(r.tagName))continue;r.getAttribute("Name")||u(`${r.tagName} inside <Url> requires a Name (the query-string key)`,`<${r.tagName}`);const d=r.getAttribute("Value")??"";r.tagName==="CrmParameter"&&!he(d)&&u(`CrmParameter Value "${d}" is not allowed in a <Url> action (CrmNamedParameterValue)`,`Value="${d}"`)}}),i.querySelector("RibbonDiffXml > Scalings")&&u('<Scalings> is not allowed in RibbonDiffXml — scaling changes are CustomActions with Location="{tabId}.Scaling._children"',"<Scalings"),i.querySelectorAll("CustomAction > CommandUIDefinition > Tab").forEach(m=>{const r=m.getAttribute("Id")??"",d=y(m).map(S=>S.tagName),R=d.indexOf("Scaling"),A=d.indexOf("Groups");(R<0||A>=0&&R>A)&&u(`Tab "${r}" needs a <Scaling Id> element before <Groups>`,`Id="${r}"`,r)}),i.querySelectorAll("TabDisplayRule > DisplayRules").forEach(()=>{u("TabDisplayRule rules must be direct children — remove the <DisplayRules> wrapper","<TabDisplayRule")}),h}const ve=["LabelText","ToolTipTitle","ToolTipDescription","Alt","Title","Description"],Oe=new Set(["powerFx","customApi"]),Pe={powerFx:"Power Fx",customApi:"Custom API"};function ke(i){return[...new Set(i.actions.map(l=>l.kind).filter(l=>Oe.has(l)))]}const Q=/^\$LocLabels:(.+)$/,ae=/^\$webresource:([^?#]+)/i,Z=new Set(["ModernImage","Image16by16","Image32by32"]),ee=new Set(["Tab","Group"]),se=new Set(["main_system_library.js"]),Me=new Set(["FlyoutAnchor","SplitButton"]),De=new Set(["Button","FlyoutAnchor","SplitButton","TextBox","ComboBox","CheckBox"]),te=/^(.+)\.Scaling\._children$/,ne=i=>/^(Mscrm|Microsoft)\./.test(i);function ie(i){const l=[],h=[],u=new DOMParser;for(const f of Object.keys(i))for(const[b,p]of i[f]){const m=u.parseFromString(p,"application/xml");if(m.querySelector("parsererror")){h.push({severity:"error",code:"xml-parse",message:`${f} element ${b} is not well-formed XML`,elementId:b});continue}l.push({part:f,key:`${f}:${b}`,el:m.documentElement})}return{elements:l,errors:h}}function N(i){return[i,...Array.from(i.getElementsByTagName("*"))]}function re(i){return typeof i=="string"?de(i):i}function Ue(i){let l;try{l=re(i)}catch{return[]}const h=new Map;for(const{el:u}of ie(l).elements)for(const f of N(u))for(const b of Array.from(f.attributes)){const p=ae.exec(b.value.trim())?.[1],m=p?.toLowerCase();p&&m&&!se.has(m)&&!h.has(m)&&h.set(m,p)}return[...h.values()]}const q=i=>{const l=i.trim();return l&&!l.includes(".")?`Mscrm.Templates.${l}`:l};function Ve(i,l={}){let h;try{h=re(i)}catch(e){return[{severity:"error",code:"xml-parse",message:e instanceof Error?e.message:String(e)}]}const{elements:u,errors:f}=ie(h),b=l.changedKeys?new Set(l.changedKeys):null,p=e=>!b||b.has(e),m=new Set(l.newKeys??[]),r=(e,n,t,a,o=!1)=>{const s=(Array.isArray(n)?n:[n]).some(p);f.push({severity:o||!s?"warning":"error",code:e,message:s?t:`${t} (already in the published customizations)`,elementId:a})},d=u.filter(e=>e.part==="customActions"),R=u.filter(e=>e.part==="commandDefinitions");for(const{part:e,key:n,el:t}of u)if(!(e!=="commandDefinitions"&&e!=="enableRules"&&e!=="displayRules"))for(const a of Te(t))r("schema",n,a,t.getAttribute("Id")??void 0);const A=new Map((l.commands??[]).map(e=>[e.id,e]));for(const{key:e,el:n}of R){const t=n.getAttribute("Id")??"",a=A.get(t);if(!a||!p(e))continue;const o=ke(a);o.length!==0&&r("dropped-action",e,`Command ${t} has a ${o.map(s=>Pe[s]??s).join(" / ")} action — classic ribbon commands can't run it, so it would be dropped; remove the action`,t)}const S=new Set;for(const{el:e}of d)if(e.tagName==="CustomAction")for(const n of Array.from(e.getElementsByTagName("*")))n.getAttribute("Command")===v&&S.add(n.getAttribute("Id")??"");for(const{key:e,el:n}of d){if(n.tagName!=="HideCustomAction")continue;const t=n.getAttribute("Location")??"";!S.has(t)&&!le({id:t,commandId:v})||r("open-record-hidden",e,`${t} is hidden, but it carries the record open override (${v}) — Unified Interface may then open records as usual or fail to open them; unhide it, or turn the override off`,t,!0)}for(const{key:e,el:n}of R){if(n.getAttribute("Id")!==v)continue;const t=y(n).filter(o=>o.tagName==="DisplayRules").flatMap(o=>y(o).map(s=>s.getAttribute("Id")??s.tagName));if(t.length===0)continue;const a=t.includes("Mscrm.HideOnModern")?Ce.filter(o=>t.includes(o)):[];r("open-record-hidden",e,`${v} has display rules (${t.join(", ")})${a.length>0?` — ${a.join(" + ")} hide its button`:""}: where they hide the "Open record" button, the record open override may stop working; the button must stay shown`,v,!0)}for(const{key:e,el:n}of d)for(const t of Array.from(n.getElementsByTagName("*"))){if(!Me.has(t.tagName)||y(t).some(o=>o.tagName==="Menu"))continue;const a=t.getAttribute("Id")??"";if(ce(t.getAttribute("PopulateDynamically"))){t.getAttribute("PopulateQueryCommand")?.trim()||r("menu-missing",e,`${t.tagName} ${a} is populated dynamically but has no PopulateQueryCommand — its drop-down may stay empty`,a,!0);continue}r("menu-missing",e,`${t.tagName} ${a} has no <Menu> — it would publish as an empty drop-down`,a)}const M=new Set(l.menuControlsIds??[]);for(const{key:e,el:n}of d){const t=n.getAttribute("Location")??"",a=t.endsWith("._children")&&M.has(t.slice(0,-10));for(const o of Array.from(n.getElementsByTagName("*"))){const s=a||!!o.parentElement?.closest("Menu");for(const c of ve){const $=o.getAttribute(c);if(!$?.startsWith("$LocLabels:"))continue;const g=$.slice(11);g.length<=z||r("label-id-length",e,`${o.tagName} ${o.getAttribute("Id")??""} uses label ${g} (${g.length} characters)`+(s?`: a menu item's label id may have at most ${z} characters, or the publish fails after the import — give the control a shorter id`:`: label ids over ${z} characters fail inside menus; consider a shorter control id`),o.getAttribute("Id")??void 0,!s)}}}if(l.known?.commandIds){const e=new Set([...h.commandDefinitions.keys(),...l.known.commandIds]);for(const{key:n,el:t}of d)for(const a of Array.from(t.getElementsByTagName("*")))if(!ee.has(a.tagName))for(const o of["Command","PopulateQueryCommand"]){const s=a.getAttribute(o);if(!s||e.has(s))continue;const c=a.getAttribute("Id")??"";r("undefined-command",n,`${a.tagName} ${c} uses ${o==="Command"?"command":"PopulateQueryCommand"} ${s}, which is defined neither in the customizations nor in the loaded ribbon`,c,ne(s))}}const I={EnableRule:l.known?.enableRuleIds?new Set([...h.enableRules.keys(),...l.known.enableRuleIds,...ue]):null,DisplayRule:l.known?.displayRuleIds?new Set([...h.displayRules.keys(),...l.known.displayRuleIds]):null};for(const{key:e,el:n}of R){const t=n.getAttribute("Id")??"",a=y(n).filter(o=>o.tagName==="EnableRules"||o.tagName==="DisplayRules").flatMap(y);for(const o of a){const s=I[o.tagName],c=o.getAttribute("Id");!s||!c||s.has(c)||r("undefined-rule",e,`Command ${t} uses ${o.tagName==="EnableRule"?"enable":"display"} rule ${c}, which is defined neither in the customizations nor in the loaded ribbon`,t,ne(c))}}for(const{part:e,key:n,el:t}of u){if(e!=="enableRules"&&e!=="displayRules")continue;const a=e==="enableRules"?"enable":"display",o=t.getAttribute("Id")??"",s=y(t).flatMap(c=>c.tagName==="OrRule"?y(c).filter($=>$.tagName==="Or").flatMap(y):[c]);for(const c of s)oe(c.tagName,a)&&r("rule-placement",n,`${a==="enable"?"Enable":"Display"} rule ${o} contains ${c.tagName}, which the ribbon schema only allows in ${a==="enable"?"display":"enable"} rules`,o,!0)}const T=new Set;for(const e of Object.values(l.loadedAttributes??{}))for(const n of Object.values(e))Q.test(n)&&T.add(n);for(const{key:e,el:n}of u)if(n.tagName!=="LocLabel")for(const t of N(n))for(const a of Array.from(t.attributes)){const o=Q.exec(a.value)?.[1];if(!o||h.locLabels.has(o))continue;const s=t.getAttribute("Id")??void 0;s&&l.loadedAttributes?.[s]?.[a.name]===a.value||T.has(a.value)||r("loclabel-missing",e,`${[t.tagName,s,a.name].filter(Boolean).join(" ")} references $LocLabels:${o}, which has no <LocLabel> in these customizations — the text won't resolve unless another solution defines the label`,s,!0)}const w=new Map;for(const{key:e,el:n}of d){const t=n.getAttribute("Location")??"",a=n.getAttribute("Sequence");if(n.tagName!=="CustomAction"||!t.endsWith("._children")||!a)continue;const o=`${t}|${a}`;w.set(o,[...w.get(o)??[],{key:e,id:n.getAttribute("Id")??e}])}for(const[e,n]of w){if(n.length<2||!n.some(o=>p(o.key)))continue;const[t,a]=e.split("|");r("duplicate-sequence",n.map(o=>o.key),`${n.map(o=>o.id).join(" and ")} have the same Sequence (${a}) in ${t} — their order isn't defined; give one another Sequence`,n[0].id,!0)}for(const{key:e,el:n}of u)for(const t of N(n))for(const a of Array.from(t.attributes)){if(a.name!=="Library"&&!Z.has(a.name))continue;const o=/^\/?WebResources\/(.+)$/i.exec(a.value.trim())?.[1];o&&r("webresource-path",e,`${t.tagName} ${t.getAttribute("Id")??""} ${a.name} is the path ${a.value} — use $webresource:${o}, the only form that makes the solution depend on the web resource`.replace(/\s+/g," "),t.getAttribute("Id")??void 0,!0)}if(l.webResources){const e=new Set;for(const{el:n}of u)for(const t of N(n))for(const a of Array.from(t.attributes)){const o=ae.exec(a.value.trim())?.[1],s=o?.toLowerCase();if(!o||!s||se.has(s)||e.has(s))continue;const c=l.webResources[s];if(!c)continue;const $=t.getAttribute("Id")??void 0;c.exists?!c.inSolution&&!c.managed&&(e.add(s),f.push({severity:"warning",code:"webresource-not-in-solution",message:`Web resource ${o} isn't in the selected solution — the ribbon won't import into another environment without it`,elementId:$})):(e.add(s),f.push({severity:"warning",code:"webresource-missing",message:`Web resource ${o} (${t.tagName} ${a.name}) doesn't exist in this environment — ${Z.has(a.name)?"the button will show no icon":"the action or rule that loads it will fail when it runs"}`,elementId:$}))}}const C=new Map,L=e=>{let n=C.get(e);return n||C.set(e,n=new Map),n};for(const[e,n]of Object.entries(l.tabScaling??{})){for(const t of n.maxSizes)L(e).set(t.id,{...t,tag:"MaxSize"});for(const t of n.scales)L(e).set(t.id,{...t,tag:"Scale"})}const V=new Map(Object.entries(l.groupTemplates??{}).map(([e,n])=>[e,q(n)])),j=new Map(Object.entries(l.templateLayouts??{})),x=new Map(Object.entries(l.templateAliases??{}).map(([e,n])=>[q(e),n]));for(const{part:e,el:n}of u)if(e==="templates")for(const t of N(n).filter(a=>a.tagName==="GroupTemplate")){const a=y(t).filter(s=>s.tagName==="Layout").map(s=>s.getAttribute("Title")??"");j.set(t.getAttribute("Id")??"",a);const o=N(t).map(s=>s.getAttribute("TemplateAlias")??"").filter(Boolean);x.set(q(t.getAttribute("Id")??""),[...new Set(o)])}const G=[];for(const{key:e,el:n}of d){for(const s of Array.from(n.getElementsByTagName("Group"))){const c=s.getAttribute("Template");c&&V.set(s.getAttribute("Id")??"",q(c))}const t=[],a=te.exec(n.getAttribute("Location")??"")?.[1],o=y(n).find(s=>s.tagName==="CommandUIDefinition");if(a&&o)for(const s of y(o))t.push([a,s]);for(const s of Array.from(n.getElementsByTagName("Tab")))for(const c of y(s).filter($=>$.tagName==="Scaling"))for(const $ of y(c))t.push([s.getAttribute("Id")??"",$]);for(const[s,c]of t){if(c.tagName!=="MaxSize"&&c.tagName!=="Scale")continue;const $={id:c.getAttribute("Id")??"",tag:c.tagName,groupId:c.getAttribute("GroupId")??"",size:c.getAttribute("Size")??"",sequence:parseInt(c.getAttribute("Sequence")??"",10),key:e};L(s).set($.id,$),G.push($)}}for(const[e,n]of C){const t=new Map;for(const a of n.values())Number.isNaN(a.sequence)||t.set(a.sequence,[...t.get(a.sequence)??[],a]);for(const[a,o]of t){const s=[...new Set(o.flatMap(g=>g.key?[g.key]:[]))];if(o.length<2||s.length===0)continue;const c=o.find(g=>g.key&&g.tag==="MaxSize"&&g.id===`${g.groupId}.MaxSize`),$=c?`move group ${c.groupId} to another position (its MaxSize takes the group's Sequence; #66 picks a free one automatically)`:"give each step its own Sequence";r("scaling-collision",s,`Scaling of tab ${e}: ${o.map(g=>`${g.tag} ${g.id}`).join(" and ")} have the same Sequence ${a} — Unified Interface then drops every custom control of the entity; ${$}`,o.find(g=>g.key)?.id)}}for(const e of G){const n=V.get(e.groupId),t=n?j.get(n):void 0;!t?.length||t.includes(e.size)||r("scaling-size",e.key??[],`${e.tag} ${e.id} has Size "${e.size}", which isn't a layout of template ${n} used by group ${e.groupId} (${t.join(", ")})`,e.id,!0)}const H=(e,n,t)=>{const a=e.getAttribute("TemplateAlias"),o=V.get(n),s=o?x.get(o):void 0;if(!a||!s?.length||s.includes(a))return;const c=e.getAttribute("Id")??"";r("template-alias",t,`${e.tagName} ${c} has TemplateAlias "${a}", which template ${o} of group ${n} doesn't have (${s.join(", ")}): the classic ribbon won't lay it out`,c,!0)};for(const{key:e,el:n}of d){const t=y(n).find(o=>o.tagName==="CommandUIDefinition");if(!t)continue;const a=/^(.+)\.Controls\._children$/.exec(n.getAttribute("Location")??"")?.[1];if(a)for(const o of y(t))H(o,a,e);for(const o of Array.from(t.getElementsByTagName("Group"))){const s=y(o).find(c=>c.tagName==="Controls");for(const c of s?y(s):[])H(c,o.getAttribute("Id")??"",e)}}const W=new Set(l.known?.elementIds??[]),D=new Map;for(const{key:e,el:n}of d){if(!(n.getAttribute("Location")??"").endsWith("._children"))continue;const t=y(n).find(o=>o.tagName==="CommandUIDefinition"),a=t?y(t)[0]:void 0;if(!(!a||a.tagName==="MaxSize"||a.tagName==="Scale"))for(const o of N(a)){const s=o.getAttribute("Id");if(!s||o.closest("Scaling"))continue;const c=D.get(s)??[];c.includes(e)||D.set(s,[...c,e])}}for(const[e,n]of D)n.length>1?r("duplicate-id",n,`Id ${e} is added by more than one CustomAction (${n.map(t=>t.replace(/^customActions:ca:/,"")).join(", ")})`,e):m.has(n[0])&&W.has(e)&&r("duplicate-id",n,`Id ${e} is added as a new element, but the ribbon already has an element with this id`,e);if(l.places){const{entityLogicalName:e,tabByCollection:n}=l.places,t=new Set(["Mscrm.Tabs",`Mscrm.SubGrid.${e}.ContextualTabs`]);for(const{key:a,el:o}of d){const s=o.getAttribute("Location")??"",c=/^(.+)\._children$/.exec(s)?.[1];if(!c||te.test(s)||!p(a))continue;const $=y(o).find(k=>k.tagName==="CommandUIDefinition"),g=$?y($)[0]:void 0,P=g?.getAttribute("Id")??"";if(!g||!P||!(De.has(g.tagName)||ee.has(g.tagName)))continue;const B=c.split("{!EntityLogicalName}").join(e),F=n[B];if(F!==void 0){me(F)&&r("orphan-location",a,`${g.tagName} ${P} is added to ${c}, on the tab ${F}: Unified Interface doesn't show that tab and the ribbon doesn't return what is added there, so it won't show anywhere — add it to the entity's main tab instead`,P,!0);continue}const X=k=>k.replace(/\.(Controls|Groups)$/,"");t.has(B)||[c,B,X(c),X(B)].some(k=>D.has(k))||r("orphan-location",a,`${g.tagName} ${P} is added at ${s}, but this entity's ribbon has no ${c} — it won't show anywhere (check the Location, or move it to an existing group)`,P,!0)}}const _=l.publisherPrefix?.trim().toLowerCase();if(_&&m.size>0){const e=new Set([...W,...l.known?.commandIds??[],...l.known?.enableRuleIds??[],...l.known?.displayRuleIds??[]]),n=o=>{const s=o.split(".");for(let c=s.length;c>0;c--)if(e.has(s.slice(0,c).join(".")))return!0;return!1},t=o=>{const s=o.toLowerCase();return s.startsWith(`${_}.`)||s.startsWith(`${_}_`)},a=new Set;for(const{part:o,key:s,el:c}of u)if(!(!m.has(s)||o==="templates"||o==="tabDisplayRules"))for(const $ of N(c)){if($!==c&&$.closest("Actions, EnableRules, DisplayRules, EnableRule, DisplayRule"))continue;const g=$.getAttribute("Id")??$.getAttribute("HideActionId");!g||a.has(g)||t(g)||n(g)||(a.add(g),f.push({severity:"warning",code:"id-prefix",message:`${$.tagName} id ${g} doesn't start with the publisher prefix "${_}." — ids without it can collide with other solutions`,elementId:g}))}}return f}export{Ve as a,qe as v,Ue as w};
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
(function(){"use strict";var Z=(()=>{var fr=typeof document<"u"?document.currentScript?.src:void 0;return(async function(q={}){var j,f=q,z,T,ar=new Promise((r,e)=>{z=r,T=e});f.preRun=function(){f.inputFiles.forEach(function(r){var e="/"+r.fileName,t=e.substring(0,e.lastIndexOf("/"));if(1<t.length&&Cr("/",t.substring(1)),t=r.contents,r={},r.flags=r.flags||577,e=W(e,r.flags,r.mode),typeof t=="string"){var n=new Uint8Array(mr(t)+1);t=vr(t,n,0,n.length),or(e,n,0,t,void 0,r.ua)}else if(ArrayBuffer.isView(t))or(e,t,0,t.byteLength,void 0,r.ua);else throw Error("Unsupported data type");nr(e)})};var M={...f},R=[],$="./this.program",v="",sr;typeof document<"u"&&document.currentScript&&(v=document.currentScript.src),fr&&(v=fr),v.startsWith("blob:")?v="":v=v.slice(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1),sr=async r=>{if(r=await fetch(r,{credentials:"same-origin"}),r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)};var Sr=f.print||console.log.bind(console),U=f.printErr||console.error.bind(console);Object.assign(f,M),M=null,f.arguments&&(R=f.arguments),f.thisProgram&&($=f.thisProgram);var Q=f.wasmBinary,L,lr=!1,E,O,b,d,p,N;function xr(){var r=L.buffer;f.HEAP8=E=new Int8Array(r),f.HEAP16=b=new Int16Array(r),f.HEAPU8=O=new Uint8Array(r),f.HEAPU16=new Uint16Array(r),f.HEAP32=d=new Int32Array(r),f.HEAPU32=p=new Uint32Array(r),f.HEAPF32=new Float32Array(r),f.HEAPF64=new Float64Array(r),f.HEAP64=N=new BigInt64Array(r),f.HEAPU64=new BigUint64Array(r)}f.wasmMemory?L=f.wasmMemory:L=new WebAssembly.Memory({initial:(f.INITIAL_MEMORY||16777216)/65536,maximum:65536}),xr();var P=0,K=null;function hr(){P++,f.monitorRunDependencies?.(P)}function rr(){if(P--,f.monitorRunDependencies?.(P),P==0&&K){var r=K;K=null,r()}}var wr;async function me(r){if(!Q)try{var e=await sr(r);return new Uint8Array(e)}catch{}if(r==wr&&Q)r=new Uint8Array(Q);else throw"both async and sync fetching of the wasm failed";return r}async function ve(r,e){try{var t=await me(r);return await WebAssembly.instantiate(t,e)}catch(n){throw U(`failed to asynchronously prepare wasm: ${n}`),r=n,f.onAbort?.(r),r="Aborted("+r+")",U(r),lr=!0,r=new WebAssembly.RuntimeError(r+". Build with -sASSERTIONS for more info."),T(r),r}}async function pe(r){var e=wr;if(!Q&&typeof WebAssembly.instantiateStreaming=="function")try{var t=fetch(e,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(t,r)}catch(n){U(`wasm streaming compile failed: ${n}`),U("falling back to ArrayBuffer instantiation")}return ve(e,r)}class Nr{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`,this.status=e}}var Pr=r=>{for(;0<r.length;)r.shift()(f)},Hr=[],Ur=[],de=()=>{var r=f.preRun.shift();Ur.unshift(r)},Lr=f.noExitRuntime||!1,Or=(r,e)=>{for(var t=0,n=r.length-1;0<=n;n--){var o=r[n];o==="."?r.splice(n,1):o===".."?(r.splice(n,1),t++):t&&(r.splice(n,1),t--)}if(e)for(;t;t--)r.unshift("..");return r},_=r=>{var e=r.charAt(0)==="/",t=r.slice(-1)==="/";return(r=Or(r.split("/").filter(n=>!!n),!e).join("/"))||e||(r="."),r&&t&&(r+="/"),(e?"/":"")+r},_r=r=>{var e=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1);return r=e[0],e=e[1],!r&&!e?".":(e&&=e.slice(0,-1),r+e)},ye=()=>r=>crypto.getRandomValues(r),Gr=r=>{(Gr=ye())(r)},Wr=(...r)=>{for(var e="",t=!1,n=r.length-1;-1<=n&&!t;n--){if(t=0<=n?r[n]:"/",typeof t!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!t)return"";e=t+"/"+e,t=t.charAt(0)==="/"}return e=Or(e.split("/").filter(o=>!!o),!t).join("/"),(t?"/":"")+e||"."},jr=typeof TextDecoder<"u"?new TextDecoder:void 0,J=(r,e=0)=>{e>>>=0;for(var t=e+NaN,n=e;r[n]&&!(n>=t);)++n;if(16<n-e&&r.buffer&&jr)return jr.decode(r.subarray(e,n));for(t="";e<n;){var o=r[e++];if(o&128){var i=r[e++]&63;if((o&224)==192)t+=String.fromCharCode((o&31)<<6|i);else{var u=r[e++]&63;o=(o&240)==224?(o&15)<<12|i<<6|u:(o&7)<<18|i<<12|u<<6|r[e++]&63,65536>o?t+=String.fromCharCode(o):(o-=65536,t+=String.fromCharCode(55296|o>>10,56320|o&1023))}}else t+=String.fromCharCode(o)}return t},cr=[],mr=r=>{for(var e=0,t=0;t<r.length;++t){var n=r.charCodeAt(t);127>=n?e++:2047>=n?e+=2:55296<=n&&57343>=n?(e+=4,++t):e+=3}return e},vr=(r,e,t,n)=>{if(t>>>=0,!(0<n))return 0;var o=t;n=t+n-1;for(var i=0;i<r.length;++i){var u=r.charCodeAt(i);if(55296<=u&&57343>=u){var s=r.charCodeAt(++i);u=65536+((u&1023)<<10)|s&1023}if(127>=u){if(t>=n)break;e[t++>>>0]=u}else{if(2047>=u){if(t+1>=n)break;e[t++>>>0]=192|u>>6}else{if(65535>=u){if(t+2>=n)break;e[t++>>>0]=224|u>>12}else{if(t+3>=n)break;e[t++>>>0]=240|u>>18,e[t++>>>0]=128|u>>12&63}e[t++>>>0]=128|u>>6&63}e[t++>>>0]=128|u&63}}return e[t>>>0]=0,t-o},zr=[];function Tr(r,e){zr[r]={input:[],output:[],P:e},Ar(r,ge)}var ge={open(r){var e=zr[r.node.W];if(!e)throw new a(43);r.D=e,r.seekable=!1},close(r){r.D.P.$(r.D)},$(r){r.D.P.$(r.D)},read(r,e,t,n){if(!r.D||!r.D.P.la)throw new a(60);for(var o=0,i=0;i<n;i++){try{var u=r.D.P.la(r.D)}catch{throw new a(29)}if(u===void 0&&o===0)throw new a(6);if(u==null)break;o++,e[t+i]=u}return o&&(r.node.R=Date.now()),o},write(r,e,t,n){if(!r.D||!r.D.P.ga)throw new a(60);try{for(var o=0;o<n;o++)r.D.P.ga(r.D,e[t+o])}catch{throw new a(29)}return n&&(r.node.I=r.node.H=Date.now()),o}},Ae={la(){r:{if(!cr.length){var r=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(r=window.prompt("Input: "),r!==null&&(r+=`
|
|
2
|
+
`)),!r){var e=null;break r}e=Array(mr(r)+1),r=vr(r,e,0,e.length),e.length=r,cr=e}e=cr.shift()}return e},ga(r,e){e===null||e===10?(Sr(J(r.output)),r.output=[]):e!=0&&r.output.push(e)},$(r){0<r.output?.length&&(Sr(J(r.output)),r.output=[])},za(){return{Ja:25856,La:5,Ia:191,Ka:35387,Ha:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},Aa(){return 0},Ba(){return[24,80]}},Ee={ga(r,e){e===null||e===10?(U(J(r.output)),r.output=[]):e!=0&&r.output.push(e)},$(r){0<r.output?.length&&(U(J(r.output)),r.output=[])}},$r=r=>{r=65536*Math.ceil(r/65536);var e=He(65536,r);return e&&O.fill(0,e,e+r),e},l={K:null,O(){return l.createNode(null,"/",16895,0)},createNode(r,e,t,n){if((t&61440)===24576||(t&61440)===4096)throw new a(63);return l.K||(l.K={dir:{node:{N:l.C.N,L:l.C.L,T:l.C.T,aa:l.C.aa,qa:l.C.qa,da:l.C.da,ra:l.C.ra,ha:l.C.ha,ca:l.C.ca},stream:{J:l.B.J}},file:{node:{N:l.C.N,L:l.C.L},stream:{J:l.B.J,read:l.B.read,write:l.B.write,U:l.B.U,ba:l.B.ba}},link:{node:{N:l.C.N,L:l.C.L,X:l.C.X},stream:{}},ja:{node:{N:l.C.N,L:l.C.L},stream:Re}}),t=Zr(r,e,t,n),A(t.mode)?(t.C=l.K.dir.node,t.B=l.K.dir.stream,t.A={}):(t.mode&61440)===32768?(t.C=l.K.file.node,t.B=l.K.file.stream,t.F=0,t.A=null):(t.mode&61440)===40960?(t.C=l.K.link.node,t.B=l.K.link.stream):(t.mode&61440)===8192&&(t.C=l.K.ja.node,t.B=l.K.ja.stream),t.R=t.I=t.H=Date.now(),r&&(r.A[e]=t,r.R=r.I=r.H=t.R),t},Oa(r){return r.A?r.A.subarray?r.A.subarray(0,r.F):new Uint8Array(r.A):new Uint8Array(0)},C:{N(r){var e={};return e.va=(r.mode&61440)===8192?r.id:1,e.xa=r.id,e.mode=r.mode,e.Ea=1,e.uid=0,e.wa=0,e.W=r.W,A(r.mode)?e.size=4096:(r.mode&61440)===32768?e.size=r.F:(r.mode&61440)===40960?e.size=r.link.length:e.size=0,e.R=new Date(r.R),e.I=new Date(r.I),e.H=new Date(r.H),e.sa=4096,e.ta=Math.ceil(e.size/e.sa),e},L(r,e){for(var t of["mode","atime","mtime","ctime"])e[t]!=null&&(r[t]=e[t]);e.size!==void 0&&(e=e.size,r.F!=e&&(e==0?(r.A=null,r.F=0):(t=r.A,r.A=new Uint8Array(e),t&&r.A.set(t.subarray(0,Math.min(e,r.F))),r.F=e)))},T(){throw l.ka},aa(r,e,t,n){return l.createNode(r,e,t,n)},qa(r,e,t){try{var n=G(e,t)}catch{}if(n){if(A(r.mode))for(var o in n.A)throw new a(55);Yr(n)}delete r.parent.A[r.name],e.A[t]=r,r.name=t,e.H=e.I=r.parent.H=r.parent.I=Date.now()},da(r,e){delete r.A[e],r.H=r.I=Date.now()},ra(r,e){var t=G(r,e),n;for(n in t.A)throw new a(55);delete r.A[e],r.H=r.I=Date.now()},ha(r){return[".","..",...Object.keys(r.A)]},ca(r,e,t){return r=l.createNode(r,e,41471,0),r.link=t,r},X(r){if((r.mode&61440)!==40960)throw new a(28);return r.link}},B:{read(r,e,t,n,o){var i=r.node.A;if(o>=r.node.F)return 0;if(r=Math.min(r.node.F-o,n),8<r&&i.subarray)e.set(i.subarray(o,o+r),t);else for(n=0;n<r;n++)e[t+n]=i[o+n];return r},write(r,e,t,n,o,i){if(e.buffer===E.buffer&&(i=!1),!n)return 0;if(r=r.node,r.I=r.H=Date.now(),e.subarray&&(!r.A||r.A.subarray)){if(i)return r.A=e.subarray(t,t+n),r.F=n;if(r.F===0&&o===0)return r.A=e.slice(t,t+n),r.F=n;if(o+n<=r.F)return r.A.set(e.subarray(t,t+n),o),n}i=o+n;var u=r.A?r.A.length:0;if(u>=i||(i=Math.max(i,u*(1048576>u?2:1.125)>>>0),u!=0&&(i=Math.max(i,256)),u=r.A,r.A=new Uint8Array(i),0<r.F&&r.A.set(u.subarray(0,r.F),0)),r.A.subarray&&e.subarray)r.A.set(e.subarray(t,t+n),o);else for(i=0;i<n;i++)r.A[o+i]=e[t+i];return r.F=Math.max(r.F,o+n),n},J(r,e,t){if(t===1?e+=r.position:t===2&&(r.node.mode&61440)===32768&&(e+=r.node.F),0>e)throw new a(28);return e},U(r,e,t,n,o){if((r.node.mode&61440)!==32768)throw new a(43);if(r=r.node.A,o&2||!r||r.buffer!==E.buffer){if(n=!0,o=$r(e),!o)throw new a(48);r&&((0<t||t+e<r.length)&&(r.subarray?r=r.subarray(t,t+e):r=Array.prototype.slice.call(r,t,t+e)),E.set(r,o>>>0))}else n=!1,o=r.byteOffset;return{pa:o,ia:n}},ba(r,e,t,n){return l.B.write(r,e,0,n,t,!1),0}}},Be=async r=>(r=await sr(r),new Uint8Array(r)),Ce=f.preloadPlugins||[],De=(r,e,t,n)=>{typeof Browser<"u"&&Browser.Pa();var o=!1;return Ce.forEach(i=>{!o&&i.canHandle(e)&&(i.handle(r,e,t,n),o=!0)}),o},Kr=(r,e,t,n,o,i,u,s,w,h)=>{function c(y){function g(ir){h?.(),s||Dr(r,e,ir,n,o,w),i?.(),rr()}De(y,m,g,()=>{u?.(),rr()})||g(y)}var m=e?Wr(_(r+"/"+e)):r;hr(),typeof t=="string"?Be(t).then(c,u):c(t)},pr=(r,e)=>{var t=0;return r&&(t|=365),e&&(t|=146),t},dr=null,Jr={},H=[],Fe=1,S=null,yr=!1,Xr=!0,Vr={},a=class{name="ErrnoError";constructor(r){this.G=r}},ke=class{Y={};node=null;get flags(){return this.Y.flags}set flags(r){this.Y.flags=r}get position(){return this.Y.position}set position(r){this.Y.position=r}},Me=class{C={};B={};V=null;constructor(r,e,t,n){r||=this,this.parent=r,this.O=r.O,this.id=Fe++,this.name=e,this.mode=t,this.W=n,this.R=this.I=this.H=Date.now()}get read(){return(this.mode&365)===365}set read(r){r?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(r){r?this.mode|=146:this.mode&=-147}get Ca(){return A(this.mode)}get ma(){return(this.mode&61440)===8192}};function x(r,e={}){if(!r)throw new a(44);e.ea??(e.ea=!0),r.charAt(0)==="/"||(r="//"+r);var t=0;r:for(;40>t;t++){r=r.split("/").filter(s=>!!s);for(var n=dr,o="/",i=0;i<r.length;i++){var u=i===r.length-1;if(u&&e.parent)break;if(r[i]!==".")if(r[i]==="..")o=_r(o),n=n.parent;else{o=_(o+"/"+r[i]);try{n=G(n,r[i])}catch(s){if(s?.G===44&&u&&e.Fa)return{path:o};throw s}if(!n.V||u&&!e.ea||(n=n.V.root),(n.mode&61440)===40960&&(!u||e.Z)){if(!n.C.X)throw new a(52);n=n.C.X(n),n.charAt(0)==="/"||(n=_r(o)+"/"+n),r=n+"/"+r.slice(i+1).join("/");continue r}}}return{path:o,node:n}}throw new a(32)}function X(r){for(var e;;){if(r===r.parent)return r=r.O.oa,e?r[r.length-1]!=="/"?`${r}/${e}`:r+e:r;e=e?`${r.name}/${e}`:r.name,r=r.parent}}function gr(r,e){for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(r+t>>>0)%S.length}function Yr(r){var e=gr(r.parent.id,r.name);if(S[e]===r)S[e]=r.S;else for(e=S[e];e;){if(e.S===r){e.S=r.S;break}e=e.S}}function G(r,e){var t=A(r.mode)?(t=V(r,"x"))?t:r.C.T?0:2:54;if(t)throw new a(t);for(t=S[gr(r.id,e)];t;t=t.S){var n=t.name;if(t.parent.id===r.id&&n===e)return t}return r.C.T(r,e)}function Zr(r,e,t,n){return r=new Me(r,e,t,n),e=gr(r.parent.id,r.name),r.S=S[e],S[e]=r}function A(r){return(r&61440)===16384}function qr(r){var e=["r","w","rw"][r&3];return r&512&&(e+="w"),e}function V(r,e){if(Xr)return 0;if(!e.includes("r")||r.mode&292){if(e.includes("w")&&!(r.mode&146)||e.includes("x")&&!(r.mode&73))return 2}else return 2;return 0}function Qr(r,e){if(!A(r.mode))return 54;try{return G(r,e),20}catch{}return V(r,"wx")}function br(r){if(!r)throw new a(63);return r}function B(r){if(r=H[r],!r)throw new a(8);return r}function re(r,e=-1){if(r=Object.assign(new ke,r),e==-1)r:{for(e=0;4096>=e;e++)if(!H[e])break r;throw new a(33)}return r.M=e,H[e]=r}function ee(r,e=-1){return r=re(r,e),r.B?.Na?.(r),r}function te(r,e){var t=void 0,n=t?null:r;t??=r.C.L,br(t),t(n,e)}var Re={open(r){r.B=Jr[r.node.W].B,r.B.open?.(r)},J(){throw new a(70)}};function Ar(r,e){Jr[r]={B:e}}function ne(r,e){var t=e==="/";if(t&&dr)throw new a(10);if(!t&&e){var n=x(e,{ea:!1});if(e=n.path,n=n.node,n.V)throw new a(10);if(!A(n.mode))throw new a(54)}e={type:r,Qa:{},oa:e,Da:[]},r=r.O(e),r.O=e,e.root=r,t?dr=r:n&&(n.V=e,n.O&&n.O.Da.push(e))}function er(r,e,t){var n=x(r,{parent:!0}).node;if(r=r&&r.match(/([^\/]+|\/)\/*$/)[1],!r)throw new a(28);if(r==="."||r==="..")throw new a(20);var o=Qr(n,r);if(o)throw new a(o);if(!n.C.aa)throw new a(63);return n.C.aa(n,r,e,t)}function oe(r,e=438){return er(r,e&4095|32768,0)}function D(r){return er(r,16895,0)}function tr(r,e,t){return typeof t>"u"&&(t=e,e=438),er(r,e|8192,t)}function Er(r,e){if(!Wr(r))throw new a(44);var t=x(e,{parent:!0}).node;if(!t)throw new a(44);e=e&&e.match(/([^\/]+|\/)\/*$/)[1];var n=Qr(t,e);if(n)throw new a(n);if(!t.C.ca)throw new a(63);t.C.ca(t,e,r)}function ie(r){var e=x(r,{parent:!0}).node;if(!e)throw new a(44);r=r&&r.match(/([^\/]+|\/)\/*$/)[1];var t=G(e,r);r:{try{var n=G(e,r)}catch(i){n=i.G;break r}var o=V(e,"wx");n=o||(A(n.mode)?31:0)}if(n)throw new a(n);if(!e.C.da)throw new a(63);if(t.V)throw new a(10);e.C.da(e,r),Yr(t)}function Br(r,e){r=typeof r=="string"?x(r,{Z:!0}).node:r,te(r,{mode:e&4095|r.mode&-4096,H:Date.now(),Ma:void 0})}function W(r,e,t=438){if(r==="")throw new a(44);if(typeof e=="string"){var n={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(typeof n>"u")throw Error(`Unknown file open mode: ${e}`);e=n}if(t=e&64?t&4095|32768:0,typeof r=="object")n=r;else{var o=r.endsWith("/");r=x(r,{Z:!(e&131072),Fa:!0}),n=r.node,r=r.path}var i=!1;if(e&64)if(n){if(e&128)throw new a(20)}else{if(o)throw new a(31);n=er(r,t|511,0),i=!0}if(!n)throw new a(44);if((n.mode&61440)===8192&&(e&=-513),e&65536&&!A(n.mode))throw new a(54);if(!i&&(o=n?(n.mode&61440)===40960?32:A(n.mode)&&(qr(e)!=="r"||e&576)?31:V(n,qr(e)):44))throw new a(o);if(e&512&&!i){if(o=n,o=typeof o=="string"?x(o,{Z:!0}).node:o,A(o.mode))throw new a(31);if((o.mode&61440)!==32768)throw new a(28);var u=V(o,"w");if(u)throw new a(u);te(o,{size:0,timestamp:Date.now()})}return e&=-131713,o=re({node:n,path:X(n),flags:e,seekable:!0,position:0,B:n.B,Ga:[],error:!1}),o.B.open&&o.B.open(o),i&&Br(n,t&511),!f.logReadFiles||e&1||r in Vr||(Vr[r]=1),o}function nr(r){if(r.M===null)throw new a(8);r.fa&&(r.fa=null);try{r.B.close&&r.B.close(r)}catch(e){throw e}finally{H[r.M]=null}r.M=null}function ue(r,e,t){if(r.M===null)throw new a(8);if(!r.seekable||!r.B.J)throw new a(70);if(t!=0&&t!=1&&t!=2)throw new a(28);r.position=r.B.J(r,e,t),r.Ga=[]}function or(r,e,t,n,o,i){if(0>n||0>o)throw new a(28);if(r.M===null)throw new a(8);if((r.flags&2097155)===0)throw new a(8);if(A(r.node.mode))throw new a(31);if(!r.B.write)throw new a(28);r.seekable&&r.flags&1024&&ue(r,0,2);var u=typeof o<"u";if(!u)o=r.position;else if(!r.seekable)throw new a(70);return e=r.B.write(r,e,t,n,o,i),u||(r.position+=e),e}function Cr(r,e){for(r=typeof r=="string"?r:X(r),e=e.split("/").reverse();e.length;){var t=e.pop();if(t){var n=_(r+"/"+t);try{D(n)}catch(o){if(o.G!=20)throw o}r=n}}return n}function Ie(r,e,t,n){return r=_((typeof r=="string"?r:X(r))+"/"+e),oe(r,pr(t,n))}function Dr(r,e,t,n,o,i){var u=e;if(r&&(r=typeof r=="string"?r:X(r),u=e?_(r+"/"+e):r),r=pr(n,o),u=oe(u,r),t){if(typeof t=="string"){for(e=Array(t.length),n=0,o=t.length;n<o;++n)e[n]=t.charCodeAt(n);t=e}Br(u,r|146),e=W(u,577),or(e,t,0,t.length,0,i),nr(e),Br(u,r)}}function F(r,e,t,n){r=_((typeof r=="string"?r:X(r))+"/"+e),e=pr(!!t,!!n),F.na??(F.na=64);var o=F.na++<<8|0;return Ar(o,{open(i){i.seekable=!1},close(){n?.buffer?.length&&n(10)},read(i,u,s,w){for(var h=0,c=0;c<w;c++){try{var m=t()}catch{throw new a(29)}if(m===void 0&&h===0)throw new a(6);if(m==null)break;h++,u[s+c]=m}return h&&(i.node.R=Date.now()),h},write(i,u,s,w){for(var h=0;h<w;h++)try{n(u[s+h])}catch{throw new a(29)}return w&&(i.node.I=i.node.H=Date.now()),h}}),tr(r,e,o)}function Fr(r){if(!(r.ma||r.Ca||r.link||r.A)){if(typeof XMLHttpRequest<"u")throw Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{r.A=(void 0)(r.url),r.F=r.A.length}catch{throw new a(29)}}}function fe(r,e,t,n,o){function i(w,h,c,m,y){if(w=w.node.A,y>=w.length)return 0;if(m=Math.min(w.length-y,m),w.slice)for(var g=0;g<m;g++)h[c+g]=w[y+g];else for(g=0;g<m;g++)h[c+g]=w.get(y+g);return m}if(typeof XMLHttpRequest<"u")throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";t={ma:!1,url:t};var u=Ie(r,e,n,o);t.A?u.A=t.A:t.url&&(u.A=null,u.url=t.url),Object.defineProperties(u,{F:{get:function(){return this.A.length}}});var s={};return Object.keys(u.B).forEach(w=>{var h=u.B[w];s[w]=(...c)=>(Fr(u),h(...c))}),s.read=(w,h,c,m,y)=>(Fr(u),i(w,h,c,m,y)),s.U=(w,h,c)=>{Fr(u);var m=$r(h);if(!m)throw new a(48);return i(w,E,m,h,c),{pa:m,ia:!0}},u.B=s,u}var C={},ae=r=>(r>>>=0)?J(O,r):"",Y=void 0,I=()=>{var r=d[+Y>>>2>>>0];return Y+=4,r},kr={},se=()=>{if(!Mr){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:$||"./this.program"},e;for(e in kr)kr[e]===void 0?delete r[e]:r[e]=kr[e];var t=[];for(e in r)t.push(`${e}=${r[e]}`);Mr=t}return Mr},Mr,le=r=>{if(!Lr){Pe(),yr=!1,Ne(0);for(var e of H)e&&nr(e)}throw Lr||(f.onExit?.(r),lr=!0),new Nr(r)};S=Array(4096),ne(l,"/"),D("/tmp"),D("/home"),D("/home/web_user"),(function(){D("/dev"),Ar(259,{read:()=>0,write:(n,o,i,u)=>u,J:()=>0}),tr("/dev/null",259),Tr(1280,Ae),Tr(1536,Ee),tr("/dev/tty",1280),tr("/dev/tty1",1536);var r=new Uint8Array(1024),e=0,t=()=>(e===0&&(Gr(r),e=r.byteLength),r[--e]);F("/dev","random",t),F("/dev","urandom",t),D("/dev/shm"),D("/dev/shm/tmp")})(),(function(){D("/proc");var r=D("/proc/self");D("/proc/self/fd"),ne({O(){var e=Zr(r,"fd",16895,73);return e.B={J:l.B.J},e.C={T(t,n){t=+n;var o=B(t);return t={parent:null,O:{oa:"fake"},C:{X:()=>o.path},id:t+1},t.parent=t},ha(){return Array.from(H.entries()).filter(([,t])=>t).map(([t])=>t.toString())}},e}},"/proc/self/fd")})(),f.FS_createPath=Cr,f.FS_createDataFile=Dr,f.FS_createPreloadedFile=Kr,f.FS_unlink=ie,f.FS_createLazyFile=fe,f.FS_createDevice=F,l.ka=new a(44),l.ka.stack="<generic error, no stack>";var Se={k:function(r){try{var e=B(r);return ee(e).M}catch(t){if(typeof C>"u"||t.name!=="ErrnoError")throw t;return-t.G}},f:function(r,e,t){Y=t>>>0;try{var n=B(r);switch(e){case 0:var o=I();if(0>o)break;for(;H[o];)o++;return ee(n,o).M;case 1:case 2:return 0;case 3:return n.flags;case 4:return o=I(),n.flags|=o,0;case 12:return o=I(),b[o+0>>>1>>>0]=2,0;case 13:case 14:return 0}return-28}catch(i){if(typeof C>"u"||i.name!=="ErrnoError")throw i;return-i.G}},j:function(r,e,t){Y=t>>>0;try{var n=B(r);switch(e){case 21509:return n.D?0:-59;case 21505:if(!n.D)return-59;if(n.D.P.za){r=[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var o=I();d[o>>>2>>>0]=25856,d[o+4>>>2>>>0]=5,d[o+8>>>2>>>0]=191,d[o+12>>>2>>>0]=35387;for(var i=0;32>i;i++)E[o+i+17>>>0]=r[i]||0}return 0;case 21510:case 21511:case 21512:return n.D?0:-59;case 21506:case 21507:case 21508:if(!n.D)return-59;if(n.D.P.Aa)for(o=I(),r=[],i=0;32>i;i++)r.push(E[o+i+17>>>0]);return 0;case 21519:return n.D?(o=I(),d[o>>>2>>>0]=0):-59;case 21520:return n.D?-28:-59;case 21531:if(o=I(),!n.B.ya)throw new a(59);return n.B.ya(n,e,o);case 21523:return n.D?(n.D.P.Ba&&(i=[24,80],o=I(),b[o>>>1>>>0]=i[0],b[o+2>>>1>>>0]=i[1]),0):-59;case 21524:return n.D?0:-59;case 21515:return n.D?0:-59;default:return-28}}catch(u){if(typeof C>"u"||u.name!=="ErrnoError")throw u;return-u.G}},g:function(r,e,t,n){e>>>=0,Y=n>>>=0;try{e=ae(e);var o=e;if(o.charAt(0)==="/")e=o;else{var i=r===-100?"/":B(r).path;if(o.length==0)throw new a(44);e=i+"/"+o}var u=n?I():0;return W(e,t,u).M}catch(s){if(typeof C>"u"||s.name!=="ErrnoError")throw s;return-s.G}},m:function(r,e){r>>>=0,e>>>=0;try{r=ae(r);var t=x(r,{Z:!0}).node,n=br(t.C.N)(t);d[e>>>2>>>0]=n.va,d[e+4>>>2>>>0]=n.mode,p[e+8>>>2>>>0]=n.Ea,d[e+12>>>2>>>0]=n.uid,d[e+16>>>2>>>0]=n.wa,d[e+20>>>2>>>0]=n.W,N[e+24>>>3]=BigInt(n.size),d[e+32>>>2>>>0]=4096,d[e+36>>>2>>>0]=n.ta;var o=n.R.getTime(),i=n.I.getTime(),u=n.H.getTime();return N[e+40>>>3]=BigInt(Math.floor(o/1e3)),p[e+48>>>2>>>0]=o%1e3*1e6,N[e+56>>>3]=BigInt(Math.floor(i/1e3)),p[e+64>>>2>>>0]=i%1e3*1e6,N[e+72>>>3]=BigInt(Math.floor(u/1e3)),p[e+80>>>2>>>0]=u%1e3*1e6,N[e+88>>>3]=BigInt(n.xa),0}catch(s){if(typeof C>"u"||s.name!=="ErrnoError")throw s;return-s.G}},n:function(r,e,t,n,o,i,u){r>>>=0,o=-9007199254740992>o||9007199254740992<o?NaN:Number(o),i>>>=0,u>>>=0;try{if(isNaN(o))return 61;var s=B(n);if((e&2)!==0&&(t&2)===0&&(s.flags&2097155)!==2)throw new a(2);if((s.flags&2097155)===1)throw new a(2);if(!s.B.U)throw new a(43);if(!r)throw new a(28);var w=s.B.U(s,r,o,e,t),h=w.pa;return d[i>>>2>>>0]=w.ia,p[u>>>2>>>0]=h,0}catch(c){if(typeof C>"u"||c.name!=="ErrnoError")throw c;return-c.G}},o:function(r,e,t,n,o,i){r>>>=0,e>>>=0,i=-9007199254740992>i||9007199254740992<i?NaN:Number(i);try{var u=B(o);if(t&2){if((u.node.mode&61440)!==32768)throw new a(43);n&2||u.B.ba&&u.B.ba(u,O.slice(r,r+e),i,e,n)}}catch(s){if(typeof C>"u"||s.name!=="ErrnoError")throw s;return-s.G}},h:()=>Date.now(),l:function(r){r>>>=0;var e=O.length;if(4294901760<r)return!1;for(var t=1;4>=t;t*=2){var n=e*(1+.2/t);n=Math.min(n,r+100663296);r:{n=(Math.min(4294901760,65536*Math.ceil(Math.max(r,n)/65536))-L.buffer.byteLength+65535)/65536|0;try{L.grow(n),xr();var o=1;break r}catch{}o=void 0}if(o)return!0}return!1},q:function(r,e){r>>>=0,e>>>=0;var t=0;return se().forEach((n,o)=>{var i=e+t;for(o=p[r+4*o>>>2>>>0]=i,i=0;i<n.length;++i)E[o++>>>0]=n.charCodeAt(i);E[o>>>0]=0,t+=n.length+1}),0},i:function(r,e){r>>>=0,e>>>=0;var t=se();p[r>>>2>>>0]=t.length;var n=0;return t.forEach(o=>n+=o.length+1),p[e>>>2>>>0]=n,0},d:le,c:function(r){try{var e=B(r);return nr(e),0}catch(t){if(typeof C>"u"||t.name!=="ErrnoError")throw t;return t.G}},e:function(r,e,t,n){e>>>=0,t>>>=0,n>>>=0;try{r:{var o=B(r);r=e;for(var i,u=e=0;u<t;u++){var s=p[r>>>2>>>0],w=p[r+4>>>2>>>0];r+=8;var h=o,c=s,m=w,y=i,g=E;if(0>m||0>y)throw new a(28);if(h.M===null)throw new a(8);if((h.flags&2097155)===1)throw new a(8);if(A(h.node.mode))throw new a(31);if(!h.B.read)throw new a(28);var ir=typeof y<"u";if(!ir)y=h.position;else if(!h.seekable)throw new a(70);var we=h.B.read(h,g,c,m,y);ir||(h.position+=we);var ur=we;if(0>ur){var ce=-1;break r}if(e+=ur,ur<w)break;typeof i<"u"&&(i+=ur)}ce=e}return p[n>>>2>>>0]=ce,0}catch(Ir){if(typeof C>"u"||Ir.name!=="ErrnoError")throw Ir;return Ir.G}},p:function(r,e,t,n){e=-9007199254740992>e||9007199254740992<e?NaN:Number(e),n>>>=0;try{if(isNaN(e))return 61;var o=B(r);return ue(o,e,t),N[n>>>3]=BigInt(o.position),o.fa&&e===0&&t===0&&(o.fa=null),0}catch(i){if(typeof C>"u"||i.name!=="ErrnoError")throw i;return i.G}},b:function(r,e,t,n){e>>>=0,t>>>=0,n>>>=0;try{r:{var o=B(r);r=e;for(var i,u=e=0;u<t;u++){var s=p[r>>>2>>>0],w=p[r+4>>>2>>>0];r+=8;var h=or(o,E,s,w,i);if(0>h){var c=-1;break r}if(e+=h,h<w)break;typeof i<"u"&&(i+=h)}c=e}return p[n>>>2>>>0]=c,0}catch(m){if(typeof C>"u"||m.name!=="ErrnoError")throw m;return m.G}},a:L},k=await(async function(){function r(n){return k=n.exports,k=Ue(),rr(),k}hr();var e={a:Se};if(f.instantiateWasm)return new Promise(n=>{f.instantiateWasm(e,(o,i)=>{r(o),n(o.exports)})});wr??=f.locateFile?f.locateFile("xmllint.wasm",v):v+"xmllint.wasm";try{var t=await pe(e);return r(t.instance)}catch(n){return T(n),Promise.reject(n)}})(),xe=f._main=k.s,Ne=k.u,Pe=k.v,He=k.w,he=k.x;function Ue(){var r=k;return r=Object.assign({},r),r.w=(e=>(t,n)=>e(t,n)>>>0)(r.w),r.x=(e=>t=>e(t)>>>0)(r.x),r.emscripten_stack_get_current=(e=>()=>e()>>>0)(r.emscripten_stack_get_current),r}f.addRunDependency=hr,f.removeRunDependency=rr,f.FS_createPreloadedFile=Kr,f.FS_unlink=r=>ie(r),f.FS_createPath=Cr,f.FS_createDevice=F,f.FS_createDataFile=(r,e,t,n,o,i)=>{Dr(r,e,t,n,o,i)},f.FS_createLazyFile=fe;function Le(r=[]){r.unshift($);var e=r.length,t=he(4*(e+1)),n=t;r.forEach(i=>{var u=p,s=n>>>2>>>0,w=mr(i)+1,h=he(w);vr(i,O,h,w),u[s]=h,n+=4}),p[n>>>2>>>0]=0;try{var o=xe(e,t);le(o,!0)}catch(i){if(!(i instanceof Nr||i=="unwind"))throw i}}function Rr(r=R){function e(){if(f.calledRun=!0,!lr){if(!f.noFSInit&&!yr){var t,n;yr=!0,t??=f.stdin,n??=f.stdout,o??=f.stderr,t?F("/dev","stdin",t):Er("/dev/tty","/dev/stdin"),n?F("/dev","stdout",null,n):Er("/dev/tty","/dev/stdout"),o?F("/dev","stderr",null,o):Er("/dev/tty1","/dev/stderr"),W("/dev/stdin",0),W("/dev/stdout",1),W("/dev/stderr",1)}if(k.r(),Xr=!1,z(f),f.onRuntimeInitialized?.(),f.noInitialRun||Le(r),f.postRun)for(typeof f.postRun=="function"&&(f.postRun=[f.postRun]);f.postRun.length;){var o=f.postRun.shift();Hr.unshift(o)}Pr(Hr)}}if(0<P)K=Rr;else{if(f.preRun)for(typeof f.preRun=="function"&&(f.preRun=[f.preRun]);f.preRun.length;)de();Pr(Ur),0<P?K=Rr:f.setStatus?(f.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>f.setStatus(""),1),e()},1)):e()}}if(f.preInit)for(typeof f.preInit=="function"&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();return Rr(),j=ar,j})})();typeof exports=="object"&&typeof module=="object"?(module.exports=Z,module.exports.default=Z):typeof define=="function"&&define.amd&&define([],()=>Z),(function(){const q="xmllint-wasm";let j="",f="";function z(M){M[q]=!0,postMessage(M)}function T(M){z({exitCode:M,stdout:j,stderr:f})}function ar(M){var R=M.data;if(!R||R[q]!==!0)return;const $=new WebAssembly.Memory({initial:R.initialMemory,maximum:R.maxMemory});Z({inputFiles:R.inputFiles,arguments:R.args,print(v){j+=v+`
|
|
3
|
+
`},printErr(v){f+=v+`
|
|
4
|
+
`},onExit:T,onAbort(v){z({exitCode:-1,stdout:"",stderr:"WASM Abort: "+v})},wasmMemory:$,locateFile(v){return v!=="xmllint.wasm"?v:new URL(""+new URL("xmllint-CcuGSrO9.wasm",self.location.href).href,self.location.href).href}})}addEventListener("message",ar)})()})();
|
package/dist/index.html
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Command Bar Studio</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
-
<link rel="modulepreload" crossorigin href="./assets/fluent-ui-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-Df9NSpg6.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="./assets/fluent-ui-BThr2m8u.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-PPVm8Dsz.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="./assets/dnd-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="./assets/dnd-C19d6Mn0.js">
|
|
11
11
|
<link rel="stylesheet" crossorigin href="./assets/index-D5GCH8nj.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mohsinonxrm/pptb-commandbar-studio",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0-beta.1",
|
|
4
4
|
"displayName": "Command Bar Studio",
|
|
5
5
|
"description": "Visual designer for Dataverse classic ribbon / command bar customizations — the spiritual successor to Ribbon Workbench, built for Power Platform ToolBox",
|
|
6
6
|
"author": "Mohsin On xRM",
|
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
"monaco-editor": "^0.57.0",
|
|
86
86
|
"react": "^18.3.1",
|
|
87
87
|
"react-dom": "^18.3.1",
|
|
88
|
+
"xmllint-wasm": "5.3.0",
|
|
88
89
|
"zustand": "^5.0.5"
|
|
89
90
|
},
|
|
90
91
|
"devDependencies": {
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import{r as $,j as n,a6 as se,a7 as te,a8 as ke,c as D,B as Ge,F as Ne,ar as Bn,m as Vn,t as I,W as re,dY as Sn,k as ce,ao as us,a9 as hs,e3 as ms,e4 as ve,e5 as Re,e6 as Se,eP as ps,d as $n,eQ as bs,dO as gs,ec as fs,dX as ys,e0 as xs,N as ws,cH as Cs,aq as js,am as vs,al as Rs,ap as Ss,ai as $s,at as Is}from"./fluent-ui-CQyNN9H3.js";import{p as $e,g as ks,e as Ns,d as Ps,m as _e,f as Ts,h as As,j as Es,k as Ds,n as Ls,l as Qe,o as zs,q as Ms,r as Os,s as Us,t as Ye,v as Xs,w as Bs,x as Vs,y as In,z as qs,A as Ws,B as He,C as Fs,D as _s,E as qn,F as en,G as Pe,H as Hs,J as Ks,K as kn,L as Gs,M as Ke,N as Ys,O as Nn,P as B,Q as Js,R as Wn,S as W,T as Fn,U as Zs,V as Je,W as Qs,b as Pn,a as X,X as et,Y as Ie,Z as nt,_ as st,$ as tt,a0 as it,a1 as Tn}from"./index-DRTwBo4g.js";import{M as ot}from"./MonacoEditor-DweI16yt.js";import{w as at,v as _n}from"./xmlValidator-CnbyWxHe.js";import"./preload-helper-PPVm8Dsz.js";import"./dnd-iy5K5XAJ.js";import"./ruleKinds-BKTUiZ1-.js";import"./crmParameters-rgfZhhzN.js";let An=0;async function nn(e){const s=typeof window<"u"?window.toolboxAPI:void 0;An++===0&&await En(()=>s?.preventClose?.());try{return await e()}finally{--An===0&&await En(()=>s?.releasePreventClose?.())}}const lt=2e3;async function En(e){let s;try{await Promise.race([e(),new Promise(i=>s=setTimeout(i,lt))])}catch{}finally{clearTimeout(s)}}function pe(e,s){const i=e.match(new RegExp(`\\s${s}="([^"]*)"`));return i?i[1]:null}function Dn(e,s,i){const o=e.indexOf(i,s);return e.slice(s,o===-1?void 0:o).match(/<result\s[^>]*>/g)??[]}function Ln(e){const s=e.find(i=>pe(i,"result")!=="success");if(s){const i=pe(s,"errorcode")??"",o=pe(s,"errortext")??"unknown error";return{ok:!1,message:`Dataverse rejected the ribbon (${i}): ${o}`}}return null}function rt(e,s){if(!e)return{ok:!1,message:"The import job returned no result data, so the ribbon import could not be verified."};if(s.kind==="application"){const a=e.search(/<ribbon\s[^>]*processed="true"/);return a===-1?{ok:!1,message:"Import completed, but Dataverse did not process the application ribbon."}:Ln(Dn(e,a,"</ribbon>"))??{ok:!0,message:"Application ribbon imported."}}const i=new Set(s.names.filter(Boolean).map(a=>a.toLowerCase())),o=/<entityRibbon\s[^>]*>/g;let l;for(;l=o.exec(e);){const a=(pe(l[0],"id")??"").toLowerCase();if(i.has(a))return pe(l[0],"processed")!=="true"?{ok:!1,message:`Dataverse did not process the ribbon for ${a}.`}:Ln(Dn(e,l.index,"</entityRibbon>"))??{ok:!0,message:`Ribbon for ${a} imported.`}}return{ok:!1,message:`Import completed, but Dataverse did not apply a ribbon for ${s.names.join(" / ")} (no entityRibbon result in the import job). Nothing was changed.`}}const K=window.dataverseAPI;async function ct(e,s,i){return await i("The import"),K.execute({operationName:"ImportSolution",operationType:"action",parameters:{CustomizationFile:e,ImportJobId:s,OverwriteUnmanagedCustomizations:!0,PublishWorkflows:!1}})}async function dt(e,s){await s("Publishing");const i=e.map(o=>`<entity>${B(o)}</entity>`).join("");return K.execute({operationName:"PublishXml",operationType:"action",parameters:{ParameterXml:`<importexportxml><entities>${i}</entities></importexportxml>`}})}function zn(e){const s=e.data?.progress;return!!(typeof s=="object"&&s!==null&&s.completed===!0||typeof e.progress=="number"&&e.progress>=100||typeof s=="number"&&s>=100||e.completedon||e.data?.completedon||e.statuscode===30)}async function Hn(e){const s=e.entity?.logicalName??"{!EntityLogicalName}",i={deletedContainerIds:e.plan.deletedContainerIds??[],movedButtons:e.plan.movedButtons??[],editedLocLabelIds:e.plan.editedLocLabelIds??[],editedTabIds:e.plan.editedTabIds??[],resequencedTabs:e.plan.resequencedTabs??[],resequencedGroups:e.plan.resequencedGroups??[]},o=e.locLabels.filter(r=>i.editedLocLabelIds.includes(r.id)),l=e.languageCode??1033;for(const r of e.plan.renamedLabels??[]){const h=o.find(S=>S.id===r.id)??e.locLabels.find(S=>S.id===r.id),j=[{languageCode:l,description:r.text},...(h?.titles??[]).filter(S=>S.languageCode!==l)],R=o.findIndex(S=>S.id===r.id);R>=0?o[R]={id:r.id,titles:j}:o.push({id:r.id,titles:j})}let a=o.length?$e(`<RibbonDiffXml><LocLabels>${o.map(ks).join("")}</LocLabels></RibbonDiffXml>`):Ns();for(const r of e.locations){const h=Ps({current:r.current,baseline:r.baseline,commands:e.commands,enableRules:e.enableRules,displayRules:e.displayRules,locLabels:e.locLabels,entityLogicalName:s,location:r.current.location,languageCode:e.languageCode});a=_e(a,$e(h))}const c=[],u=[];for(const r of e.locations)for(const h of r.current.tabs){if(!i.editedTabIds.includes(h.id))continue;if(h.tabDisplayRules.length>0){const R=Ts(h,e.entity===null);R&&u.push(R)}const j=new Set(h.tabDisplayRules.map(R=>R.tabCommand));for(const R of r.baseline.tabs.find(S=>S.id===h.id)?.tabDisplayRules??[])j.has(R.tabCommand)||c.push(R.tabCommand)}u.length>0&&(a=_e(a,$e(`<RibbonDiffXml><RuleDefinitions><TabDisplayRules>${u.join("")}</TabDisplayRules></RuleDefinitions></RibbonDiffXml>`)));const y=[...e.commands.filter(r=>e.plan.editedCommandIds.includes(r.id)).map(As)],T={enable:e.enableRules.filter(r=>e.plan.editedEnableRuleIds.includes(r.id)).map(Ds),display:e.displayRules.filter(r=>e.plan.editedDisplayRuleIds.includes(r.id)).map(Es)};(y.length||T.enable.length||T.display.length)&&(a=_e(a,$e(`<RibbonDiffXml><CommandDefinitions>${y.join("")}</CommandDefinitions><RuleDefinitions><DisplayRules>${T.display.join("")}</DisplayRules><EnableRules>${T.enable.join("")}</EnableRules></RuleDefinitions></RibbonDiffXml>`)));const P=(r,h)=>{for(const j of Array.from(r.keys()))h.includes(j)||r.delete(j)},k=e.locations.flatMap(r=>r.current.tabs.filter(h=>!r.baseline.tabs.some(j=>j.id===h.id)).map(Ls));P(a.commandDefinitions,[...e.plan.editedCommandIds,...k]),P(a.enableRules,e.plan.editedEnableRuleIds),P(a.displayRules,e.plan.editedDisplayRuleIds);const m=await Qe(e.entity?.logicalName??null),v=zs(m),b=e.plan.deletedButtonIds.filter(r=>!v.has(r));if(b.length>0)throw new Error(`Can't delete ${b.join(", ")}: not defined in this table's unmanaged customizations (it comes from a managed solution or the platform). Undo the delete and hide the button instead.`);const x=Ms(m),g=i.deletedContainerIds.filter(r=>!x.has(r));if(g.length>0)throw new Error(`Can't delete ${g.join(", ")}: not added by this table's unmanaged customizations (it comes from a managed solution or the platform). Undo the delete.`);const p=i.movedButtons.filter(r=>!v.has(r.id)).map(r=>r.id);if(p.length>0)throw new Error(`Can't move ${p.join(", ")}: not defined in this table's unmanaged customizations. Undo the move.`);const q=Os(m),G=(e.plan.uncustomisedCommandIds??[]).filter(r=>m.commandDefinitions.has(r)&&!Us(r,q));if(G.length>0)throw new Error(`Can't uncustomise ${G.join(", ")}: it is your own command (your customizations' buttons use it and no other solution defines it), so removing it would leave those buttons without a command. Undo the uncustomise.`);const Y=new Set;for(const r of e.locations)for(const h of r.current.tabs)for(const j of h.groups)for(const R of Ye(j))for(const S of Xs(R))Y.add(S);const U=e.plan.uncustomisedCommandIds??[],V=new Set,J=new Set;for(const r of e.commands)if(!(!Y.has(r.id)||U.includes(r.id))){r.enableRules.forEach(h=>V.add(h)),r.displayRules.forEach(h=>J.add(h));for(const h of r.rawRuleRefs??[]){const j=/^\s*<(EnableRule|DisplayRule)\b[^>]*?\sId="([^"]+)"/.exec(h.xml);j&&(j[1]==="EnableRule"?V:J).add(j[2])}}let C=Bs(m,a,{retainedCommandIds:Y,editedCommandIds:e.plan.editedCommandIds,editedEnableRuleIds:e.plan.editedEnableRuleIds,editedDisplayRuleIds:e.plan.editedDisplayRuleIds,deletedControlIds:e.plan.deletedButtonIds,unhiddenControlIds:e.plan.unhiddenButtonIds,deletedContainerIds:i.deletedContainerIds,movedControls:i.movedButtons,resequencedContainers:[...i.resequencedTabs,...i.resequencedGroups],removedTabCommands:c,uncustomisedCommandIds:U,retainedEnableRuleIds:V,retainedDisplayRuleIds:J});for(const r of e.plan.renamedLabels??[])r.newLabel&&(C=Vs(C,r.containerId,`$LocLabels:${r.id}`));const d=new Set([...In(m),...In(C)].map(r=>r.id)),N={};for(const r of e.locations)for(const[h,j]of Object.entries(r.baseline.scalingByTab??{}))N[h]={maxSizes:j.maxSizes.filter(R=>!d.has(R.id)).map(R=>R.sequence),scales:j.scales.filter(R=>!d.has(R.id)).map(R=>R.sequence)};const A=qs(C,N);if(A.problems.length>0)throw new Error(`Not published: ${A.problems.join("; ")}.`);return C=A.parts,{scalingChanges:A.changes,xml:Fs(C),parts:C,elementCount:He(C),preservedCount:He(m),changedCount:He(a),changedKeys:Ws(m,C),newKeys:Object.keys(C).flatMap(r=>Array.from(C[r].keys()).filter(h=>!m[r].has(h)).map(h=>`${r}:${h}`)),layerDefinitionIds:{commandIds:Array.from(m.commandDefinitions.keys()),enableRuleIds:Array.from(m.enableRules.keys()),displayRuleIds:Array.from(m.displayRules.keys())},layer:m}}function Kn(e,s){const i=[],o={},l={},a={},c={},u=new Set,y=new Set,T=new Set;for(const{current:m,baseline:v}of e.locations)for(const b of[v,m])for(const x of b.tabs)for(const g of x.groups)for(const p of Ye(g))for(const q of p.menu?.sections??[])T.add(q.controlsId);for(const{current:m,baseline:v}of e.locations){Object.assign(a,v.templateLayouts);for(const b of v.tabs){i.push(b.id),b.label&&(c[b.id]={Title:b.label});for(const x of b.groups){u.add(x.id),i.push(x.id),x.label&&(c[x.id]={Title:x.label,Label:x.label});for(const g of Ye(x))i.push(g.id),g.source&&(c[g.id]=g.source.attributes)}}for(const b of m.tabs)for(const x of b.groups)y.add(x.id);for(const b of[v,m])for(const x of b.tabs)for(const g of x.groups)g.template&&(l[g.id]=g.template)}const P=m=>u.has(m.groupId)&&!y.has(m.groupId);for(const{baseline:m}of e.locations)for(const[v,b]of Object.entries(m.scalingByTab??{}))o[v]={...b,maxSizes:b.maxSizes.filter(x=>!P(x)),scales:b.scales.filter(x=>!P(x))};const k=(m,v)=>{if(!m)return;const b=new Set(v??[]);return m.map(x=>x.id).filter(x=>!b.has(x))};return{changedKeys:s.changedKeys,newKeys:s.newKeys,commands:e.commands,known:{commandIds:k(e.baselineCommands,s.layerDefinitionIds?.commandIds),enableRuleIds:k(e.baselineEnableRules,s.layerDefinitionIds?.enableRuleIds),displayRuleIds:k(e.baselineDisplayRules,s.layerDefinitionIds?.displayRuleIds),elementIds:i},loadedAttributes:c,publisherPrefix:e.publisherPrefix,tabScaling:o,groupTemplates:l,templateLayouts:a,menuControlsIds:T,...e.entity?{places:{entityLogicalName:e.entity.logicalName,tabByCollection:Object.fromEntries(_s(e.locations.map(m=>m.baseline),e.entity.logicalName))}}:{}}}function ut(e,s){return new Promise((i,o)=>{const l=setTimeout(()=>o(new Error(`it didn't finish within ${Math.round(s/1e3)} s`)),s);e.then(a=>{clearTimeout(l),i(a)},a=>{clearTimeout(l),o(a)})})}async function Mn(e,s={}){const i=await Hn(e),o=Kn(e,i),l=[],a=at(i.parts);if(s.lookupWebResources&&a.length>0)try{o.webResources=await s.lookupWebResources(a)}catch(c){l.push({severity:"warning",code:"webresource-lookup",message:`Couldn't check the ${a.length} referenced web resource(s): ${c instanceof Error?c.message:String(c)}`})}return{findings:[..._n(i.parts,o),...l],xml:i.xml}}async function ht(e,s,i={}){const o=i.attempts??3,l=i.contentKeys??[];let a={missing:[],unexpected:[],differing:[]};for(let u=0;u<o;u++){u>0&&await new Promise(y=>setTimeout(y,i.delayMs??5e3));try{a=Wn(s,await Qe(e),{contentKeys:l})}catch(y){return{ok:!1,missing:[],unexpected:[],differing:[],message:`Couldn't read the published ribbon layer to verify it (${y instanceof Error?y.message:String(y)}).`}}if(a.missing.length===0&&a.unexpected.length===0&&a.differing.length===0){const y=l.length;return{ok:!0,...a,message:"Verified: the published ribbon layer has every element that was imported"+(y>0?`, and the ${y} element(s) this publish changed have the imported content.`:".")}}}const c=u=>u.slice(0,5).join(", ")+(u.length>5?", …":"");return{ok:!1,...a,message:"The published ribbon layer doesn't match what was imported"+(a.missing.length?`; missing: ${c(a.missing)}`:"")+(a.unexpected.length?`; unexpected: ${c(a.unexpected)}`:"")+(a.differing.length?`; different content: ${c(a.differing)}`:"")+". Reload the table and check before publishing again."}}class Ze extends Error{constructor(s,i,o=!1){const l=o?"another solution import ran in the environment meanwhile, and what it changed may not be published yet":Gn(i);super(o?`${s}'s ribbon customizations may have changed in Dataverse since you started publishing: ${l}. Importing could overwrite that change, so nothing was imported. Publish again: the table is published first, so the change is kept.`:`${s}'s ribbon customizations changed in Dataverse since you started publishing (${l}): other ribbon changes for it were published meanwhile, from another session, tool or solution import. Importing would overwrite that change, so nothing was imported. Reload the table to get the change, then publish again.`),this.scopeLabel=s,this.changes=i,this.importRan=o,this.name="RibbonLayerChangedError",this.summary=l}scopeLabel;changes;importRan;summary}function Gn(e){const s=i=>i.slice(0,5).join(", ")+(i.length>5?", …":"");return[e.unexpected.length?`added: ${s(e.unexpected)}`:"",e.missing.length?`removed: ${s(e.missing)}`:"",e.differing.length?`changed: ${s(e.differing)}`:""].filter(Boolean).join("; ")}function mt(e){const s=e instanceof Error?e.message:String(e);return/there is (?:another|a previous) \[(\w+)\] running/i.exec(s)?.[1]??null}const pt=e=>Object.keys(e).flatMap(s=>Array.from(e[s].keys()).map(i=>`${s}:${i}`));function Yn(e,s){const i=[],o=[],l=[];for(const a of Object.keys(e)){for(const[c,u]of e[a]){const y=s[a].get(c);y===void 0?i.push(`${a}:${c}`):y!==u&&l.push(`${a}:${c}`)}for(const c of s[a].keys())e[a].has(c)||o.push(`${a}:${c}`)}return{missing:i,unexpected:o,differing:l}}const Jn=e=>e.missing.length+e.unexpected.length+e.differing.length>0;async function bt(e,s,i,o){const l=o.kind==="imported"?o.attempts??3:1;let a={missing:[],unexpected:[],differing:[]};for(let c=0;c<l;c++){c>0&&o.kind==="imported"&&await new Promise(y=>setTimeout(y,o.delayMs??5e3));const u=await Qe(e);if(a=o.kind==="read"?Yn(i,u):Wn(i,u,{contentKeys:pt(i)}),!Jn(a))return}throw new Ze(s,a)}function On(e,s){return nn(()=>gt(e,s)).finally(()=>qn({afterPublish:!0}))}async function gt(e,s){const i=e.guard??en(),o=Pe.getState(),l=e.entity?e.entity.logicalName:"Application ribbon",a={onProgress:s,...e.busy},c=e.entity===null;if(c&&!e.ribbonCustomizationIds?.length)throw new Error("The selected solution does not contain Application Ribbons. Add it in make.powerapps.com (Solutions → your solution → Add existing → Application Ribbons) and reload the solution.");const u=async(d="Publishing customizations…")=>{s?.(d),await Nn("Publish",async()=>{c?(await i("Publishing"),await K.execute({operationName:"PublishXml",operationType:"action",parameters:{ParameterXml:"<importexportxml><ribbons><ribbon></ribbon></ribbons></importexportxml>"}})):await dt([e.entity.logicalName],i)},a)},y=e.languageCode??await Hs(),T=async d=>{s?.(`Reading existing ribbon customizations for ${l}…`),d&&o.logInfo("publish",`Reading unmanaged ribbon layer for ${l}.`);const N=await Hn({...e,languageCode:y}),A=_n(N.parts,Kn({...e,publisherPrefix:e.solution.publisherPrefix},N)),r=A.filter(h=>h.severity==="error");if(d||r.length>0){o.logInfo("publish",`RibbonDiffXml for ${l}: ${N.preservedCount} existing element(s) preserved, ${N.changedCount} element(s) from this session, ${N.elementCount} total.`);for(const h of N.scalingChanges)o.logWarn("publish",Ys(h));for(const h of A)h.severity==="warning"&&o.logWarn("publish",h.message)}if(r.length>0){for(const h of r)o.logError("publish",h.message);throw new Error(`The pre-publish check found ${r.length} error(s), so nothing was imported: `+r.map(h=>h.message).join("; "))}return N},P=e.publishCustomizations!==!1?await T(!1):null;s?.("Checking that no other solution operation is running…"),await Ks(a);const k=await xt(e.solution);let m=!1;const v=d=>(P&&!m&&d instanceof Error&&(d.message+=` (${l} was published first, so customizations imported elsewhere for it and not yet published are now published.)`),d);if(P){o.logInfo("publish",`Publishing ${l} first, so ribbon changes imported elsewhere but not yet published are kept.`);try{await u(`Publishing ${l} first (keeps changes imported elsewhere but not published)…`)}catch(d){throw d instanceof Error&&(d.message=`Publishing ${l} first failed, so nothing was imported: ${d.message}`),d}}let b;try{b=await T(!0)}catch(d){throw P&&d instanceof Error&&!d.message.startsWith("The pre-publish check")&&(d.message=`${l}'s customizations changed when it was published first (changes imported elsewhere and not yet published): ${d.message} Reload the table to get them, then publish again.`),v(d)}if(P){const d=Yn(P.layer,b.layer);Jn(d)&&o.logInfo("publish",`Publishing ${l} first published ribbon changes imported elsewhere (${Gn(d)}); they are kept.`)}const x=e.entity?.schemaName||e.entity?.logicalName||"",g=c?kn({applicationRibbonDiffXml:b.xml}):kn({entities:[{schemaName:x,localizedName:e.entity?.displayName||x,ribbonDiffXml:b.xml}]}),p=c?[{type:50,schemaName:":RibbonDiffXml",behavior:0}]:[{type:1,schemaName:e.entity.logicalName,behavior:2}],q=jt({...e.solution,languageCode:y,rootComponents:p,details:k});s?.("Packaging solution ZIP…");const G=Gs({"customizations.xml":Ke(g),"solution.xml":Ke(q),"[Content_Types].xml":Ke('<?xml version="1.0" encoding="utf-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml"/></Types>')});let Y="";for(let d=0;d<G.length;d++)Y+=String.fromCharCode(G[d]);const U=btoa(Y),V=async(d,N)=>{s?.(`Importing ${l} ribbon${d}…`);const A=crypto.randomUUID();o.logInfo("publish",`Importing solution${d} (import job ${A})…`);let r=!1;await Nn("Import",async()=>{if(await i("Importing"),r)throw new Ze(l,{missing:[],unexpected:[],differing:[]},!0);await bt(e.entity?.logicalName??null,l,N.layer,N.as);try{await ct(U,A,i)}catch(_){throw Js(_)&&mt(_)?.toLowerCase()==="import"&&(r=!0),_}m=!0},a);const h=150,j=2e3;let R=await K.getImportJobStatus(A),S=0;for(;!zn(R)&&S<h;)await new Promise(_=>setTimeout(_,j)),R=await K.getImportJobStatus(A),S++,S%10===0&&s?.(`Still importing… (${S*2}s elapsed)`);if(!zn(R))throw new Error(`Solution import did not complete within ${h*j/1e3} seconds. Check Solutions › History for import job ${A}.`);s?.("Verifying the import…");const F=await K.retrieve("importjob",A,["data"]),Z=rt(F.data,c?{kind:"application"}:{kind:"entity",names:[x,e.entity.logicalName]});if(!Z.ok)throw o.logError("publish",Z.message),new Error(Z.message);return o.logInfo("publish",Z.message),A};let J;try{J=await V("",{layer:b.layer,as:{kind:"read"}})}catch(d){throw v(d)}let C;if(e.publishCustomizations!==!1){await u();{o.logInfo("publish","Refreshing Unified Interface command-bar metadata (second import of the same package)…");try{await V(" (refreshing Unified Interface metadata)",{layer:b.parts,as:{kind:"imported",delayMs:e.verifyDelayMs}}),await u()}catch(d){if(d instanceof Ze)C={ok:!1,...d.changes,message:`Your changes were imported and published, but ${l}'s ribbon customizations changed in Dataverse after that (${d.summary}): other changes were published meanwhile. They weren't imported a second time to refresh Unified Interface's command-bar metadata, since that would overwrite the other change, so new or changed buttons may not appear in the app until the table's ribbon is published again. Reload the table to see the other change.`},o.logWarn("publish",C.message);else throw new Error(`Your changes were imported and published, but refreshing Unified Interface's command-bar metadata failed (${d instanceof Error?d.message:String(d)}). New or changed buttons may not appear in the app until you publish again.`)}}C||(s?.("Verifying the published ribbon…"),C=await ht(e.entity?.logicalName??null,b.parts,{delayMs:e.verifyDelayMs,contentKeys:b.changedKeys}),C.ok?o.logInfo("publish",C.message):o.logWarn("publish",C.message))}else o.logWarn("publish","Imported without publishing. New or changed buttons appear in Unified Interface only after you publish from Command Bar Studio (which re-imports once to refresh the command-bar metadata).");return s?.(e.publishCustomizations!==!1?`${l} ribbon published.`:`${l} ribbon imported (not published).`),{elementCount:b.elementCount,preservedCount:b.preservedCount,importJobId:J,verification:C,parts:b.parts,changedKeys:b.changedKeys}}function ft(e,s){return nn(()=>yt(e,s)).finally(()=>qn({afterPublish:!0}))}async function yt(e,s){const i=s?.guard??en(),o=Pe.getState(),l=s?.pollIntervalMs??2e3,a=s?.timeoutMs??600*1e3;e?.("Starting asynchronous publish (PublishAllXmlAsync)..."),o.logInfo("publish","Calling PublishAllXmlAsync action."),await i("Publishing");const u=(await K.execute({operationName:"PublishAllXmlAsync",operationType:"action"}))?.AsyncOperationId;if(!u)throw new Error("PublishAllXmlAsync did not return AsyncOperationId.");o.logInfo("publish",`PublishAllXmlAsync job id: ${u}`),e?.("Async publish job started. Waiting for completion...");const y=Date.now();let T=0,P;for(;Date.now()-y<a;){T+=1;const k=await K.retrieve("asyncoperation",u,["asyncoperationid","statecode","statuscode","name","message","friendlymessage","completedon"]);if(P=k.statuscode,k.statecode===3||!!k.completedon){if(typeof k.statuscode=="number"&&k.statuscode!==30){const v=k.friendlymessage||k.message||`statuscode=${k.statuscode}`;throw new Error(`Asynchronous publish failed: ${v}`)}return e?.("Asynchronous publish completed successfully."),o.logInfo("publish",`PublishAllXmlAsync completed in ${T} poll(s).`),{asyncOperationId:u,statusCode:k.statuscode}}e?.(`Waiting for async publish job... (poll ${T})`),await new Promise(v=>setTimeout(v,l))}throw new Error(`Asynchronous publish timed out after ${Math.round(a/1e3)} seconds (last status: ${P??"unknown"}).`)}const Zn=[["AddressTypeCode","addresstypecode"],["City","city"],["County","county"],["Country","country"],["Fax","fax"],["FreightTermsCode","freighttermscode"],["Latitude","latitude"],["Line1","line1"],["Line2","line2"],["Line3","line3"],["Longitude","longitude"],["Name","name"],["PostalCode","postalcode"],["PostOfficeBox","postofficebox"],["PrimaryContactName","primarycontactname"],["ShippingMethodCode","shippingmethodcode"],["StateOrProvince","stateorprovince"],["Telephone1","telephone1"],["Telephone2","telephone2"],["Telephone3","telephone3"],["UPSZone","upszone"],["UTCOffset","utcoffset"],["UTCConversionTimeZoneCode","utcconversiontimezonecode"]];async function xt(e){let s;try{s=(await K.queryData(`solutions?$select=description&$expand=publisherid&$filter=uniquename eq '${e.uniqueName.replace(/'/g,"''")}'`)).value?.[0]}catch(c){throw new Error(`Couldn't read solution ${e.uniqueName} and its publisher (${c instanceof Error?c.message:String(c)}), so nothing was imported: an import without them would clear the publisher's details.`)}const i=s?.publisherid;if(!s||!i)throw new Error(`Couldn't read solution ${e.uniqueName} and its publisher, so nothing was imported: an import without them would clear the publisher's details.`);const o=i.customizationoptionvalueprefix;if(typeof o!="number")throw new Error(`Couldn't read the option-value prefix of publisher ${e.publisherUniqueName}, so nothing was imported: a wrong one would change the publisher.`);const l=c=>typeof c=="string"?c:"",a=[1,2].map(c=>Object.fromEntries(Zn.map(([,u])=>[u,i[`address${c}_${u}`]]).filter(([,u])=>u!=null&&u!==""))).map((c,u)=>({number:u+1,...c}));return{solutionDescription:l(s.description),publisherDescription:l(i.description),publisherEmail:l(i.emailaddress),publisherWebsite:l(i.supportingwebsiteurl),publisherOptionValuePrefix:o,publisherAddresses:a.filter(c=>Object.keys(c).length>1)}}const wt=e=>B(e).replace(/\r/g,"
").replace(/\n/g,"
").replace(/\t/g,"	"),Un=(e,s)=>e?`<Descriptions>
|
|
2
|
-
<Description description="${wt(e)}" languagecode="${s}"/>
|
|
3
|
-
</Descriptions>`:"<Descriptions/>",Ct=e=>e.length===0?"<Addresses/>":`<Addresses>${e.map(s=>`
|
|
4
|
-
<Address>
|
|
5
|
-
<AddressNumber>${s.number}</AddressNumber>${Zn.filter(([,i])=>i in s).map(([i,o])=>`
|
|
6
|
-
<${i}>${B(String(s[o]))}</${i}>`).join("")}
|
|
7
|
-
</Address>`).join("")}
|
|
8
|
-
</Addresses>`;function jt(e){const s=e.publisherUniqueName?.trim()||"DefaultPublisher",i=e.publisherName?.trim()||s,o=e.publisherPrefix?.trim()||"new",l=e.languageCode||1033,a=e.friendlyName?.trim()||e.uniqueName,c=e.rootComponents.length===0?"<RootComponents/>":`<RootComponents>
|
|
9
|
-
${e.rootComponents.map(u=>{const y=[`type="${u.type}"`];return u.schemaName&&y.push(`schemaName="${B(u.schemaName)}"`),u.id&&y.push(`id="{${B(u.id)}}"`),y.push(`behavior="${u.behavior}"`),`<RootComponent ${y.join(" ")} />`}).join(`
|
|
10
|
-
`)}
|
|
11
|
-
</RootComponents>`;return`<?xml version="1.0" encoding="utf-8"?>
|
|
12
|
-
<ImportExportXml version="9.1.0.0" SolutionPackageVersion="9.1" languagecode="${l}" generatedBy="CommandBarStudio">
|
|
13
|
-
<SolutionManifest>
|
|
14
|
-
<UniqueName>${B(e.uniqueName)}</UniqueName>
|
|
15
|
-
<LocalizedNames>
|
|
16
|
-
<LocalizedName description="${B(a)}" languagecode="${l}"/>
|
|
17
|
-
</LocalizedNames>
|
|
18
|
-
${Un(e.details.solutionDescription,l)}
|
|
19
|
-
<Version>${B(e.version)}</Version>
|
|
20
|
-
<Managed>0</Managed>
|
|
21
|
-
<Publisher>
|
|
22
|
-
<UniqueName>${B(s)}</UniqueName>
|
|
23
|
-
<LocalizedNames>
|
|
24
|
-
<LocalizedName description="${B(i)}" languagecode="${l}"/>
|
|
25
|
-
</LocalizedNames>
|
|
26
|
-
${Un(e.details.publisherDescription,l)}
|
|
27
|
-
<EMailAddress>${B(e.details.publisherEmail)}</EMailAddress>
|
|
28
|
-
<SupportingWebsiteUrl>${B(e.details.publisherWebsite)}</SupportingWebsiteUrl>
|
|
29
|
-
<CustomizationPrefix>${B(o)}</CustomizationPrefix>
|
|
30
|
-
<CustomizationOptionValuePrefix>${e.details.publisherOptionValuePrefix}</CustomizationOptionValuePrefix>
|
|
31
|
-
${Ct(e.details.publisherAddresses)}
|
|
32
|
-
</Publisher>
|
|
33
|
-
${c}
|
|
34
|
-
<MissingDependencies/>
|
|
35
|
-
</SolutionManifest>
|
|
36
|
-
</ImportExportXml>`}const vt=Vn({root:{display:"flex",flexDirection:"column",gap:I.spacingVerticalS},box:{display:"grid",gridTemplateColumns:"auto 1fr",columnGap:I.spacingHorizontalM,rowGap:I.spacingVerticalXS,padding:`${I.spacingVerticalS} ${I.spacingHorizontalM}`,backgroundColor:I.colorNeutralBackground3,borderRadius:I.borderRadiusMedium},label:{color:I.colorNeutralForeground3},value:{display:"flex",flexWrap:"wrap",alignItems:"center",columnGap:I.spacingHorizontalS,minWidth:0},secondary:{color:I.colorNeutralForeground3,wordBreak:"break-all"}});function Rt({rows:e,confirmWord:s,onConfirmationChange:i,disabled:o}){const l=vt(),[a,c]=$.useState({status:"loading"}),[u,y]=$.useState(""),T=W(p=>p.environment),P=W(p=>p.connectionUrl),k=W(p=>p.connectionVersion);$.useEffect(()=>{let p=!0;return c({status:"loading"}),Fn().then(q=>p&&c({status:"ready",connection:q})).catch(()=>p&&c({status:"ready",connection:null})),()=>{p=!1}},[T,P,k]);const m=a.status==="ready"?a.connection:null,v=Zs(m?.environment),b=a.status==="ready"&&Je(m?.environment),x=a.status==="ready"&&(!b||Qs(u,s)),g=m?.environment;return $.useEffect(()=>{i(x,g)},[x,g,i]),n.jsxs("div",{className:l.root,children:[v&&n.jsx(se,{intent:"warning",children:n.jsxs(te,{children:[n.jsx(ke,{children:"Production environment"}),"This changes the live environment."]})}),n.jsxs("div",{className:l.box,children:[n.jsx(D,{className:l.label,children:"Environment"}),n.jsx("div",{className:l.value,children:a.status==="loading"?n.jsx(D,{children:"Reading the connection…"}):m?n.jsxs(n.Fragment,{children:[n.jsx(D,{weight:"semibold",children:m.name}),m.environment&&n.jsx(Ge,{size:"medium",appearance:v?"filled":"tint",color:v?"warning":"informative",children:m.environment}),n.jsx(D,{size:200,className:l.secondary,children:m.url})]}):n.jsx(D,{children:"Unknown (the tool has no connection)"})}),e.map(p=>n.jsxs("div",{style:{display:"contents"},children:[n.jsx(D,{className:l.label,children:p.label}),n.jsx("div",{className:l.value,children:p.value})]},p.label))]}),b&&n.jsx(Ne,{label:n.jsxs(n.Fragment,{children:["Type ",n.jsx("strong",{children:s})," to confirm"]}),hint:"Required on a Production environment.",children:n.jsx(Bn,{value:u,onChange:(p,q)=>y(q.value),disabled:o,autoComplete:"off","aria-label":`Type ${s} to confirm`})})]})}const Qn=Vn({content:{display:"flex",flexDirection:"column",gap:I.spacingVerticalM},changes:{listStyleType:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:I.spacingVerticalXS},change:{display:"flex",alignItems:"flex-start",gap:I.spacingHorizontalS},changeIcon:{flexShrink:0,fontSize:"16px",marginTop:"2px",color:I.colorNeutralForeground3},changeText:{flex:1,minWidth:0,overflowWrap:"anywhere"},badge:{flexShrink:0},list:{margin:`${I.spacingVerticalXS} 0 0`,paddingLeft:"20px"},options:{display:"flex",flexDirection:"column",gap:I.spacingVerticalS},timing:{color:I.colorNeutralForeground3},progressList:{display:"flex",flexDirection:"column",gap:I.spacingVerticalXS},progressRow:{display:"flex",alignItems:"center",gap:I.spacingHorizontalS},xmlHeader:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:I.spacingHorizontalS},xml:{height:"360px",border:`1px solid ${I.colorNeutralStroke2}`,borderRadius:I.borderRadiusMedium,overflow:"hidden"}}),St={pending:"Waiting",publishing:"Publishing…",success:"Done",error:"Failed"},$t={pending:"subtle",publishing:"informative",success:"success",error:"danger"},It={new:{text:"New",color:"success",icon:n.jsx(Is,{})},change:{text:"Change",color:"brand",icon:n.jsx($s,{})},move:{text:"Move",color:"informative",icon:n.jsx(Ss,{})},show:{text:"Show",color:"informative",icon:n.jsx(Rs,{})},hide:{text:"Hide",color:"warning",icon:n.jsx(vs,{})},delete:{text:"Delete",color:"danger",icon:n.jsx(js,{})}},Xn=({findings:e,showScope:s})=>{const i=Qn();return n.jsx("ul",{className:i.list,children:e.map((o,l)=>n.jsxs("li",{children:[s&&n.jsxs("strong",{children:[o.scope,": "]}),o.message]},l))})},de=(e,s,i=`${s}s`)=>`${e} ${e===1?s:i}`,kt=3e4,Mt=()=>{const e=Qn(),s=Pn(t=>t.bulkPublishOpen),i=Pn(t=>t.closeBulkPublish),o=X(t=>t.ribbons),l=X(t=>t.baseline),a=X(t=>t.commands),c=X(t=>t.displayRules),u=X(t=>t.enableRules),y=X(t=>t.baselineCommands),T=X(t=>t.baselineEnableRules),P=X(t=>t.baselineDisplayRules),k=X(t=>t.locLabels),m=X(t=>t.baseLanguageCode),v=X(t=>t.baseLanguageUnknown),b=X(t=>t.setLayerSnapshot),x=X(t=>t.markPublished),g=W(t=>t.activeSolution),p=W(t=>t.activeEntity),q=W(t=>t.connectionUrl),G=W(t=>t.publisherPrefix),Y=W(t=>t.solutionRibbonComponentIds),{entityPlan:U,appPlan:V,solutionSupportsAppRibbon:J,includeApplicationRibbon:C,scopes:d,unsupported:N,warnings:A,changes:r}=et(),[h,j]=$.useState(!1),[R,S]=$.useState({}),[F,Z]=$.useState(!1),[_,es]=$.useState(!1),[ue,Te]=$.useState("targeted"),[sn,be]=$.useState(!1),Ae=ue==="allAsync"&&!sn,Ee=W(t=>t.connectionName||t.connectionUrl||"this environment"),[tn,De]=$.useState({confirmed:!1}),ns=re.useCallback((t,f)=>De({confirmed:t,environment:f}),[]),on=tn.confirmed,[ss,an]=$.useState(0),[ln,ie]=$.useState(""),[Le,rn]=$.useState(""),[ge,cn]=$.useState(g?.version??"1.0.0.0"),[ze,fe]=$.useState([]),[dn,un]=$.useState([]),[ts,is]=$.useState(0),[os,ye]=$.useState([]),[xe,Me]=$.useState("summary"),[as,Oe]=$.useState([]),hn=re.useMemo(()=>{const f=(ge||g?.version||"1.0.0.0").split(".").map(L=>Number.parseInt(L,10)||0);for(;f.length<4;)f.push(0);return f[3]+=1,f.slice(0,4).join(".")},[g?.version,ge]);re.useEffect(()=>{cn(g?.version??"1.0.0.0")},[g?.version]);const ls=p&&U?.hasChanges?p.logicalName:"application ribbon",[oe,we]=$.useState("idle"),[Ue,Xe]=$.useState([]),[mn,Be]=$.useState([]),[pn,Ve]=$.useState(""),H=s&&!!g&&N.length===0&&d.length>0,bn=g?.id,gn=g?.publisherPrefix||G,fn=re.useCallback(async()=>{const t={commands:a,enableRules:u,displayRules:c,locLabels:k,baselineCommands:y,baselineEnableRules:T,baselineDisplayRules:P,publisherPrefix:gn,languageCode:m},f={lookupWebResources:z=>tt(z,bn)},L=[],le=[];if(p&&U?.hasChanges){const z=await Mn({...t,entity:{logicalName:p.logicalName,schemaName:p.schemaName},locations:Ie.map(M=>({current:o[M],baseline:l[M]})),plan:U},f);L.push(...z.findings.map(M=>({...M,scope:p.logicalName}))),le.push({scope:p.logicalName,xml:z.xml})}if(C){const z=await Mn({...t,entity:null,locations:[{current:o.Application,baseline:l.Application}],plan:V},f);L.push(...z.findings.map(M=>({...M,scope:"Application ribbon"}))),le.push({scope:"Application ribbon",xml:z.xml})}return{findings:L,xml:le}},[p,U,V,C,o,l,a,u,c,k,y,T,P,gn,bn,m]);re.useEffect(()=>{if(!H||h||F)return;let t=!1;return we("running"),Ve(""),ut(fn(),kt).then(({findings:f,xml:L})=>{t||(Xe(f),Be(L),we("done"))}).catch(f=>{t||(Xe([]),Be([]),Ve(f instanceof Error?f.message:String(f)),we("failed"))}),()=>{t=!0}},[H,h,F,fn]);const Q=Ue.filter(t=>t.severity==="error"),yn=Ue.filter(t=>t.severity==="warning"),xn=new Set(Ue.map(t=>t.scope)).size>1,wn=H&&(oe==="running"||Q.length>0),rs=()=>nn(async()=>{if(!g||N.length>0||d.length===0||wn||!on||v||Ae)return;j(!0);const t=en(),f=W.getState().connectionVersion,L=()=>W.getState().connectionVersion!==f,le=await Fn().catch(()=>null);if(L()){j(!1);return}if(Je(le?.environment)&&!Je(tn.environment)){De({confirmed:!1}),an(w=>w+1),j(!1),Pe.getState().logWarn("publish",`${le?.name??"The connection"} is a Production environment now: type the confirmation to publish.`);return}ie(""),fe([]),ye([]),un(d),is(r.length),S(Object.fromEntries(d.map(w=>[w,"pending"])));let z=!1;const M=[],We={},ne=[],je=[],Fe=Pe.getState(),me=w=>w instanceof Error?w.message:String(w);Le.trim()&&Fe.logInfo("publish",`Publish comment: ${Le.trim()}`);const Rn={commands:a,enableRules:u,displayRules:c,locLabels:k,baselineCommands:y,baselineEnableRules:T,baselineDisplayRules:P,publishCustomizations:!0,languageCode:m,solution:{uniqueName:g.uniqueName,friendlyName:g.friendlyName,version:_?hn:ge,publisherUniqueName:g.publisherUniqueName,publisherName:g.publisherName,publisherPrefix:g.publisherPrefix||G,publisherOptionValuePrefix:g.publisherOptionValuePrefix}};if(p&&U?.hasChanges){const w=p.logicalName;S(E=>({...E,[w]:"publishing"}));try{const E=await On({...Rn,guard:t,entity:{logicalName:p.logicalName,schemaName:p.schemaName,displayName:p.displayName},locations:Ie.map(O=>({current:o[O],baseline:l[O]})),plan:U},O=>ie(O));M.push(...Ie),We.entity=E.parts,it(q,p.logicalName,E.changedKeys),E.verification&&je.push({scope:w,result:E.verification}),S(O=>({...O,[w]:"success"}))}catch(E){z=!0,ne.push({scope:w,message:me(E)}),Fe.logError("publish",`Ribbon publish failed (${w}): ${me(E)}`),S(O=>({...O,[w]:"error"}))}}else p&&M.push(...Ie);if(C&&!L()){const w="Application ribbon";S(E=>({...E,[w]:"publishing"}));try{const E=await On({...Rn,guard:t,entity:null,locations:[{current:o.Application,baseline:l.Application}],ribbonCustomizationIds:Y??[],plan:V},O=>ie(O));M.push("Application"),We.application=E.parts,E.verification&&je.push({scope:w,result:E.verification}),S(O=>({...O,[w]:"success"}))}catch(E){z=!0,ne.push({scope:w,message:me(E)}),Fe.logError("publish",`Application ribbon publish failed: ${me(E)}`),S(O=>({...O,[w]:"error"}))}}else V.hasChanges||M.push("Application");if(!z&&ue==="allAsync")try{await ft(w=>ie(w),{guard:t})}catch(w){z=!0,ne.push({scope:"Publish all customizations",message:me(w)})}if(L()){C&&!ne.some(w=>w.scope==="Application ribbon")&&ne.push({scope:"Application ribbon",message:"Not published: the tool's connection changed during the publish."}),ye(je),fe(ne),Z(!1),j(!1);return}if(x(M,We),p&&M.includes("HomepageGrid")&&U?.hasChanges){const w=await Tn(p.logicalName);w&&b("entity",w)}if(M.includes("Application")&&C){const w=await Tn(null);w&&b("application",w)}z||ie("Done."),ye(je),fe(ne),Z(!z),j(!1)}),Cn=()=>{j(!1),S({}),un([]),Z(!1),ie(""),fe([]),ye([]),we("idle"),Xe([]),Be([]),Ve(""),Me("summary"),Oe([]),De({confirmed:!1}),Te("targeted"),be(!1),rn(""),an(t=>t+1),i()},qe=V.hasChanges&&!J,Ce=N.length+(H?Q.length:0),jn=H?yn.length+(oe==="failed"?1:0):0;re.useEffect(()=>{Ce>0&&Oe(t=>t.includes("problems")?t:["problems",...t])},[Ce]);const ae=g?v?{intent:"error",title:"Reload the table first",text:"The organization's base language couldn't be read when the table loaded, so labels are shown in English. Publishing now could write English texts as the base language's titles."}:N.length>0?{intent:"error",title:`${de(N.length,"change")} can't be published yet`,text:`Undo ${N.length===1?"it":"them"} to publish the rest. Problems below says what each one is.`}:H&&Q.length>0?{intent:"error",title:`The check found ${de(Q.length,"problem")}`,text:`In what this publish would import. Fix ${Q.length===1?"it":"them"}, then open Publish again; Problems below lists ${Q.length===1?"it":"them"}.`}:d.length===0?qe?{intent:"warning",title:"The application ribbon can't be published from this solution",text:n.jsxs(n.Fragment,{children:["It doesn't include the Application Ribbons component. In make.powerapps.com open the solution, choose"," ",n.jsx("strong",{children:"Add existing → Application Ribbons"}),", then reload here."]})}:{intent:"info",title:"Nothing to publish",text:"Every change on this table is already published."}:Ae?{intent:"warning",title:"Confirm publishing everything",text:`Tick the confirmation under Options to publish every unpublished customization in ${Ee}.`,action:n.jsx(ce,{size:"small",onClick:()=>{Te("targeted"),be(!1)},children:"Only these ribbons"})}:null:{intent:"warning",title:"Choose a solution",text:"Publishing imports into a solution: choose one in the top bar first."},he=p?.displayName||p?.logicalName,vn=!!p&&!!U?.hasChanges,cs=vn&&C?`Publish ${he} and the application ribbon`:!vn&&C?"Publish the application ribbon":he?`Publish ${he}`:"Publish",ds=h?"Publishing…":r.length>0?`Publish ${de(r.length,"change")}`:"Publish",ee=!h&&!F;return n.jsx(nt,{open:s,onOpenChange:t=>!t&&!h&&Cn(),size:xe==="xml"?"large":"medium",title:xe==="xml"?"What Publish imports":cs,startActions:ee?xe==="summary"?n.jsx(ce,{appearance:"subtle",icon:n.jsx(ws,{}),onClick:()=>Me("xml"),children:"View XML"}):n.jsx(ce,{appearance:"subtle",icon:n.jsx(Cs,{}),onClick:()=>Me("summary"),children:"Back to summary"}):void 0,actions:n.jsxs(n.Fragment,{children:[n.jsx(ce,{appearance:"secondary",onClick:Cn,disabled:h,children:F?"Close":"Cancel"}),!F&&n.jsx(ce,{appearance:"primary",onClick:()=>{rs()},disabled:h||!g||d.length===0||N.length>0||wn||!on||v||Ae,children:ds})]}),children:xe==="xml"&&ee?n.jsxs("div",{className:e.content,children:[n.jsx(D,{children:"The complete RibbonDiffXml each import writes: your solution's layer as it is now, with your changes merged in."}),H&&oe==="running"?n.jsx(Sn,{size:"tiny",labelPosition:"after",label:"Building the XML…"}):mn.length===0?n.jsx(se,{intent:"info",layout:"multiline",children:n.jsx(te,{children:H&&oe==="failed"?`The XML couldn't be built: ${pn}`:"The XML is built once there is something to publish and nothing blocks it."})}):mn.map(t=>n.jsxs("div",{className:e.options,children:[n.jsxs("div",{className:e.xmlHeader,children:[n.jsx(D,{weight:"semibold",children:t.scope}),n.jsx(ce,{size:"small",appearance:"subtle",icon:n.jsx(us,{}),onClick:()=>{st(t.xml)},children:"Copy"})]}),n.jsx("div",{className:e.xml,children:n.jsx(ot,{language:"xml",value:t.xml,readOnly:!0})})]},t.scope))]}):n.jsxs("div",{className:e.content,children:[ee&&ae&&n.jsxs(se,{intent:ae.intent,layout:"multiline",children:[n.jsxs(te,{children:[n.jsx(ke,{children:ae.title}),ae.text]}),ae.action&&n.jsx(hs,{children:ae.action})]}),ee&&r.length>0&&n.jsxs("div",{className:e.options,children:[n.jsxs(D,{weight:"semibold",children:[de(r.length,"change")," to publish"]}),n.jsx("ul",{className:e.changes,"aria-label":"Changes to publish",children:r.map((t,f)=>{const L=It[t.kind];return n.jsxs("li",{className:e.change,children:[n.jsx("span",{className:e.changeIcon,"aria-hidden":"true",children:L.icon}),n.jsxs(D,{className:e.changeText,children:[t.action," ",n.jsx("strong",{children:t.name}),t.detail?` ${t.detail}`:""]}),n.jsx(Ge,{appearance:"tint",color:L.color,size:"medium",className:e.badge,children:L.text})]},f)})})]}),ee&&H&&oe==="running"&&n.jsx(Sn,{size:"tiny",labelPosition:"after",label:"Checking what this publish would import…"}),ee&&n.jsx(Rt,{rows:[{label:"Solution",value:g?n.jsx(D,{weight:"semibold",children:g.friendlyName||g.uniqueName}):n.jsx(D,{children:"None selected"})}],confirmWord:ls,onConfirmationChange:ns},ss),ee&&n.jsxs(ms,{multiple:!0,collapsible:!0,openItems:as,onToggle:(t,f)=>Oe(f.openItems),children:[Ce>0&&n.jsxs(ve,{value:"problems",children:[n.jsxs(Re,{children:["Problems · ",Ce]}),n.jsxs(Se,{children:[N.length>0&&n.jsxs(n.Fragment,{children:[n.jsx(D,{block:!0,children:"These changes can't be published yet; undo them:"}),n.jsx("ul",{className:e.list,children:N.map(t=>n.jsx("li",{children:t},t))})]}),H&&Q.length>0&&n.jsx(Xn,{findings:Q,showScope:xn})]})]}),jn>0&&n.jsxs(ve,{value:"warnings",children:[n.jsxs(Re,{children:["Warnings · ",jn]}),n.jsxs(Se,{children:[n.jsx(D,{block:!0,children:"You can still publish."}),oe==="failed"&&n.jsxs(D,{block:!0,children:["The check before publishing couldn't complete (",pn,"). Publishing runs it again before anything is imported."]}),n.jsx(Xn,{findings:yn,showScope:xn})]})]}),n.jsxs(ve,{value:"info",children:[n.jsxs(Re,{children:["Good to know ·"," ",A.length+1+(qe&&d.length>0?1:0)]}),n.jsx(Se,{children:n.jsxs("ul",{className:e.list,children:[n.jsx("li",{children:"Publishing writes this table's complete ribbon customization: what is already published, plus your changes. Ribbon changes imported elsewhere but not published are published first, so they are kept. Each ribbon is imported twice so Unified Interface picks up the change."}),qe&&d.length>0&&n.jsxs("li",{children:["Your application ribbon changes stay pending: this solution doesn't include the Application Ribbons component. In make.powerapps.com open the solution, choose"," ",n.jsx("strong",{children:"Add existing → Application Ribbons"}),", then reload here."]}),A.map(t=>n.jsx("li",{children:t},t))]})})]}),n.jsxs(ve,{value:"options",children:[n.jsx(Re,{children:"Options"}),n.jsxs(Se,{className:e.options,children:[n.jsx(Ne,{label:"Also publish",children:n.jsxs(ps,{value:ue==="targeted"?"Only these ribbons":"Every unpublished customization",selectedOptions:[ue],onOptionSelect:(t,f)=>{(f.optionValue==="targeted"||f.optionValue==="allAsync")&&(Te(f.optionValue),be(!1))},children:[n.jsx($n,{value:"targeted",children:"Only these ribbons"}),n.jsx($n,{value:"allAsync",children:"Every unpublished customization"})]})}),ue==="allAsync"&&n.jsx(se,{intent:"warning",layout:"multiline",children:n.jsxs(te,{children:[n.jsxs(D,{block:!0,children:["This publishes ",n.jsx("strong",{children:"every"})," ","unpublished customization in"," ",n.jsx("strong",{children:Ee}),", not only these ribbons: forms, views, tables and other people's work in progress included."]}),n.jsx(bs,{checked:sn,onChange:(t,f)=>be(f.checked===!0),label:`Publish all unpublished customizations in ${Ee}`})]})}),n.jsx(gs,{label:"Increment solution version",checked:_,onChange:(t,f)=>es(f.checked===!0)}),n.jsx(Ne,{label:"Solution version",children:n.jsx(Bn,{value:_?hn:ge,onChange:(t,f)=>cn(f.value),disabled:_})}),n.jsx(Ne,{label:"Publish comment",hint:"Written to the Console log with this publish; it isn't stored in Dataverse.",children:n.jsx(fs,{resize:"vertical",value:Le,onChange:(t,f)=>rn(f.value)})})]})]})]}),ee&&d.length>0&&n.jsx(ys,{className:e.timing,children:"Publishing takes 1–4 minutes. Users may need to refresh to see the change."}),ze.length>0&&n.jsx(se,{intent:"error",layout:"multiline",children:n.jsxs(te,{children:[n.jsxs(ke,{children:["Publish failed (",de(ze.length,"error"),")"]}),n.jsx("ul",{className:e.list,children:ze.map((t,f)=>n.jsxs("li",{style:{fontFamily:I.fontFamilyMonospace},children:[n.jsxs("strong",{children:[t.scope,":"]})," ",t.message]},f))}),n.jsxs("div",{style:{marginTop:I.spacingVerticalS},children:["Full details are in the ",n.jsx("strong",{children:"Console"})," tab of the bottom panel."]})]})}),F&&n.jsx(se,{intent:"success",layout:"multiline",children:n.jsxs(te,{children:[n.jsxs(ke,{children:["Published ",de(ts,"change"),he&&dn.includes(p?.logicalName??"")?` to ${he}`:""]}),"Unified Interface can take up to about 25 minutes to show it. To see it sooner, run ",n.jsx("strong",{children:"Regenerate ribbon metadata"})," in Command Checker, or hard-refresh the page (Ctrl+F5)."]})}),os.map(t=>n.jsx(se,{intent:t.result.ok?"success":"warning",layout:"multiline",children:n.jsxs(te,{children:[n.jsxs("strong",{children:[t.scope,":"]})," ",t.result.message]})},t.scope)),(h||F)&&n.jsxs("div",{className:e.progressList,children:[dn.map(t=>{const f=R[t]??"pending";return n.jsxs("div",{className:e.progressRow,children:[n.jsx(Ge,{appearance:"filled",color:$t[f],size:"medium",className:e.badge,children:St[f]}),n.jsx(D,{children:t}),f==="publishing"&&n.jsx(xs,{thickness:"large",style:{flex:1}})]},t)}),ln&&!F&&n.jsx(D,{className:e.timing,children:ln})]})]})})};export{Mt as BulkPublishModal,Mt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as I,j as s,m as ce,c as v,M as Q,K as q,k as b,at as U,Q as Y,R as Z,X as E,dX as X,e9 as ue,F as C,as as J,I as me,dB as pe,dC as be,cD as he,cB as xe,T as ge,aq as fe,ar as F,e7 as K,N as je,ai as we,dO as ye,a6 as Ce,a7 as ve,t as r}from"./fluent-ui-CQyNN9H3.js";import{D as Re,c as Ne,S as Se,v as ke,f as De,C as Ae,g as Te}from"./dnd-iy5K5XAJ.js";import{b as j,a as x,ak as Ie,aG as Ee,u as Be,c as Me,aH as $e,aI as _e,an as We,aD as Fe,aJ as Oe}from"./index-DRTwBo4g.js";import{C as G}from"./CrmParameterEditor-DO6Rt764.js";import{u as Pe}from"./useStableKeys-49o4VnxU.js";import"./preload-helper-PPVm8Dsz.js";import"./crmParameters-rgfZhhzN.js";const ee=ce({body:{display:"flex",flexDirection:"column",gap:r.spacingVerticalM},actionCard:{border:`1px solid ${r.colorNeutralStroke2}`,borderRadius:r.borderRadiusMedium,backgroundColor:r.colorNeutralBackground1,padding:r.spacingVerticalM,display:"flex",flexDirection:"column",gap:r.spacingVerticalS},actionHeader:{display:"flex",alignItems:"center",gap:r.spacingHorizontalXS,minWidth:0},actionTitle:{flex:1,minWidth:0},dragHandle:{cursor:"grab",touchAction:"none"},row:{display:"flex",flexWrap:"wrap",gap:r.spacingHorizontalS,alignItems:"flex-end"},library:{display:"flex",gap:r.spacingHorizontalXS,alignItems:"center"},grow:{flex:1,minWidth:0},ruleTags:{flexWrap:"wrap"},muted:{color:r.colorNeutralForeground3},usesList:{listStyleType:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:r.spacingVerticalXS},use:{border:`1px solid ${r.colorNeutralStroke2}`,borderRadius:r.borderRadiusMedium,padding:`${r.spacingVerticalXS} ${r.spacingHorizontalS}`,display:"flex",flexDirection:"column",minWidth:0},fields:{border:"none",margin:0,padding:0,minWidth:0,display:"flex",flexDirection:"column",gap:r.spacingVerticalS,"&:disabled .fui-Input, &:disabled .fui-Select__select, &:disabled .fui-Dropdown, &:disabled .fui-Combobox":{backgroundColor:r.colorNeutralBackground3,borderTopColor:r.colorTransparentStroke,borderRightColor:r.colorTransparentStroke,borderBottomColor:r.colorTransparentStroke,borderLeftColor:r.colorTransparentStroke,color:r.colorNeutralForeground1,cursor:"default"},"&:disabled .fui-Input::after, &:disabled .fui-Dropdown::after, &:disabled .fui-Combobox::after":{display:"none"},"&:disabled input, &:disabled .fui-Dropdown__button":{color:r.colorNeutralForeground1,cursor:"default"},"&:disabled .fui-Select__icon, &:disabled .fui-Dropdown__expandIcon, &:disabled .fui-Combobox__expandIcon":{display:"none"},"&:disabled .fui-Button":{color:r.colorNeutralForegroundDisabled,borderTopColor:r.colorNeutralStrokeDisabled,borderRightColor:r.colorNeutralStrokeDisabled,borderBottomColor:r.colorNeutralStrokeDisabled,borderLeftColor:r.colorNeutralStrokeDisabled,cursor:"not-allowed"}}}),Le=[],ze=n=>{const d=n.trim();return d.startsWith("$webresource:")?d.slice(13).trim():d};function Ve(n){switch(n.kind){case"javascript":return"Run JavaScript";case"url":return"Open a URL";case"powerFx":return"Power Fx (not supported)";case"customApi":return"Custom API (not supported)";case"outlookCommand":return"Outlook command";case"raw":return n.tagName;default:return"Action"}}function He({id:n,index:d,count:u,title:R,readOnly:g,onMove:N,onRemove:B,children:w}){const y=ee(),{attributes:M,listeners:D,setNodeRef:S,setActivatorNodeRef:A,transform:T,transition:$}=De({id:n,disabled:g});return s.jsxs("section",{ref:S,style:{transform:Ae.Transform.toString(T),transition:$},className:y.actionCard,"aria-label":`Action ${d+1}: ${R}`,children:[s.jsxs("div",{className:y.actionHeader,children:[!g&&u>1&&s.jsx(b,{ref:A,appearance:"subtle",size:"small",className:y.dragHandle,icon:s.jsx(pe,{}),"aria-label":"Drag to reorder action",...M,...D}),s.jsx(v,{weight:"semibold",className:y.actionTitle,truncate:!0,wrap:!1,children:R}),!g&&u>1&&s.jsxs(Q,{children:[s.jsx(q,{disableButtonEnhancement:!0,children:s.jsx(b,{appearance:"subtle",size:"small",icon:s.jsx(be,{}),"aria-label":"More for this action"})}),s.jsx(Y,{children:s.jsxs(Z,{children:[s.jsx(E,{icon:s.jsx(he,{}),disabled:d===0,onClick:()=>N(d,d-1),children:"Move up"}),s.jsx(E,{icon:s.jsx(xe,{}),disabled:d===u-1,onClick:()=>N(d,d+1),children:"Move down"})]})})]}),!g&&s.jsx(ge,{content:"Remove action",relationship:"label",children:s.jsx(b,{appearance:"subtle",size:"small",icon:s.jsx(fe,{}),onClick:B})})]}),w]})}const Ye=()=>{const n=ee(),d=j(e=>e.commandEditorOpen),u=j(e=>e.commandEditorId),R=j(e=>e.closeCommandEditor),g=j(e=>e.openRuleEditor),N=j(e=>e.openScriptView),B=j(e=>e.openWebResourceBrowser),w=j(e=>e.commandEditorTab),y=x(e=>e.commands),M=x(e=>e.upsertCommand),D=x(e=>e.ribbons),S=x(e=>e.locLabels),A=x(e=>e.displayRules),T=x(e=>e.enableRules),$=x(e=>e.upsertEnableRule),se=x(e=>e.upsertDisplayRule),_=Ie(),[ae,O]=I.useState(""),[re,P]=I.useState(""),l=y.find(e=>e.id===u),m=Pe(`actions:${l?.id??""}`,l?.actions??Le),f=Ee(Be(l?.id));I.useEffect(()=>{d&&u&&!l&&R()},[d,u,l,R]);const L=I.useMemo(()=>u?Me(D,u):[],[D,u]);if(!l)return null;const k=e=>{M({...l,...e})},h=(e,a)=>{const t=[...l.actions];t[e]=a,k({actions:t}),m.update()},ne=e=>{k({actions:l.actions.filter((a,t)=>t!==e)}),m.remove(e)},z=(e,a)=>{a<0||a>=l.actions.length||e===a||(k({actions:Te(l.actions,e,a)}),m.move(e,a))},oe=e=>{e.over&&z(m.keys.indexOf(String(e.active.id)),m.keys.indexOf(String(e.over.id)))},V=e=>{const a=e==="javascript"?{kind:"javascript",library:"",functionName:"",params:[]}:{kind:"url",address:"https://",params:[]};k({actions:[...l.actions,a]}),m.add()},le=(e,a)=>{if(e.kind==="javascript"){const t=ze(e.library);return s.jsxs(s.Fragment,{children:[s.jsxs("fieldset",{disabled:f,className:n.fields,children:[s.jsx(C,{label:"Library",hint:"A JavaScript web resource, like $webresource:publisher_/scripts/file.js.",children:s.jsxs("div",{className:n.library,children:[s.jsx(F,{className:n.grow,value:e.library,onChange:(o,c)=>h(a,{...e,library:c.value.replace(/^(\s*\$webresource:\s*)+/i,"$webresource:")}),placeholder:"$webresource:publisher_/scripts/file.js"}),s.jsx(b,{onClick:()=>{Fe.set(o=>{h(a,{...e,library:`$webresource:${o.name}`})}),B()},children:"Browse…"})]})}),s.jsx(C,{label:"Function",hint:"The function's full name, including its namespace.",children:s.jsx(F,{value:e.functionName,onChange:(o,c)=>h(a,{...e,functionName:c.value}),placeholder:"Contoso.Account.approve"})}),s.jsx(K,{weight:"semibold",children:"Parameters, in order"}),s.jsx(G,{params:e.params,onChange:o=>h(a,{...e,params:o}),urlMode:!1})]}),s.jsxs("div",{className:n.row,children:[s.jsx(b,{size:"small",icon:s.jsx(je,{}),disabled:!t,onClick:()=>N(t,!1),children:"View script"}),!f&&s.jsx(b,{size:"small",icon:s.jsx(we,{}),disabled:!t,onClick:()=>N(t,!0),children:"Edit script"})]})]})}if(e.kind==="url"){const t=e.address.trim().startsWith("https://");return s.jsxs("fieldset",{disabled:f,className:n.fields,children:[s.jsx(C,{label:"Address",validationState:t?"none":"error",validationMessage:t?void 0:"The address must start with https://",children:s.jsx(F,{value:e.address,onChange:(o,c)=>h(a,{...e,address:c.value}),placeholder:"https://"})}),s.jsx(C,{label:"Open in",children:s.jsxs(J,{value:String(e.winMode??0),onChange:(o,c)=>h(a,{...e,winMode:parseInt(c.value)}),children:[s.jsx("option",{value:"0",children:"Navigate (0)"}),s.jsx("option",{value:"1",children:"Dialog (1)"}),s.jsx("option",{value:"2",children:"Popup (2)"})]})}),s.jsx(C,{hint:"Adds the record's details to the address: typename, type, id, orgname and the user's languages.",children:s.jsx(ye,{label:"Pass parameters",checked:!!e.passParams,onChange:(o,c)=>h(a,{...e,passParams:c.checked?!0:void 0})})}),s.jsx(K,{weight:"semibold",children:"Query string parameters"}),s.jsx(G,{params:e.params,onChange:o=>h(a,{...e,params:o}),urlMode:!0})]})}return e.kind==="powerFx"||e.kind==="customApi"?s.jsx(Ce,{intent:"error",children:s.jsxs(ve,{children:["Classic ribbon commands can't run"," ",e.kind==="powerFx"?"Power Fx":"Custom API"," actions, so this command can't be published while it has one. Remove it and use a JavaScript function instead (for example, call the API with"," ",s.jsx("code",{children:"Xrm.WebApi.online.execute"}),"), or build the command with modern commanding in the app designer."]})}):e.kind==="outlookCommand"||e.kind==="raw"?s.jsx(v,{size:200,className:n.muted,children:e.kind==="outlookCommand"?`ActionType="${e.actionType}"${e.data?` Data="${e.data}"`:""}`:e.xml}):null},te=()=>s.jsxs(s.Fragment,{children:[s.jsx(Re,{collisionDetection:Ne,onDragEnd:oe,children:s.jsx(Se,{items:m.keys,strategy:ke,children:l.actions.map((e,a)=>s.jsx(He,{id:m.keys[a],index:a,count:l.actions.length,title:Ve(e),readOnly:f,onMove:z,onRemove:()=>ne(a),children:le(e,a)},m.keys[a]))})}),l.actions.length===0&&s.jsx(v,{className:n.muted,children:"No actions yet. The button does nothing when it's clicked."}),!f&&s.jsx("div",{children:s.jsxs(Q,{children:[s.jsx(q,{disableButtonEnhancement:!0,children:s.jsx(b,{icon:s.jsx(U,{}),children:"Add action"})}),s.jsx(Y,{children:s.jsxs(Z,{children:[s.jsx(E,{onClick:()=>V("javascript"),children:"Run JavaScript"}),s.jsx(E,{onClick:()=>V("url"),children:"Open a URL"})]})})]})}),s.jsx(X,{className:n.muted,children:"Every user's browser gets the command's definition, even when the button is hidden. Don't put secrets in function names or parameters."})]}),H=e=>{const a=e==="enable"?l.enableRules:l.displayRules,t=(e==="enable"?T:A).map(i=>i.id).filter(i=>!a.includes(i)),o=e==="enable"?ae:re,c=i=>k(e==="enable"?{enableRules:i}:{displayRules:i}),de=()=>{const i=new Set([...T.map(W=>W.id),...A.map(W=>W.id)]),p=Oe("New",e==="enable"?"Enable":"Display",i);e==="enable"?$({id:p,steps:[]}):se({id:p,steps:[]}),c([...a,p]),g(p,e)};return s.jsxs(s.Fragment,{children:[a.length>0?s.jsx(ue,{className:n.ruleTags,"aria-label":e==="enable"?"Enable rules":"Display rules",children:a.map(i=>s.jsx(_e,{ruleId:i,kind:e,onOpen:()=>g(i,e),onRemove:f?void 0:()=>c(a.filter(p=>p!==i))},i))}):s.jsxs(v,{className:n.muted,children:["No ",e," rules, so the button is always"," ",e==="enable"?"enabled":"shown","."]}),!f&&s.jsxs("div",{className:n.row,children:[s.jsx(C,{label:`Add an existing ${e} rule`,style:{flex:"1 1 260px",minWidth:0},children:s.jsxs(J,{style:{width:"100%",maxWidth:"100%",minWidth:0},value:o,onChange:(i,p)=>e==="enable"?O(p.value):P(p.value),children:[s.jsx("option",{value:"",children:"Select a rule…"}),t.map(i=>s.jsx("option",{value:i,children:i},i))]})}),s.jsx(b,{disabled:!o,onClick:()=>{o&&(c([...a,o]),e==="enable"?O(""):P(""))},children:"Add"}),s.jsxs(b,{appearance:"subtle",icon:s.jsx(U,{}),onClick:de,children:["New ",e," rule"]})]}),e==="enable"&&s.jsx(me,{size:"small",info:"Disabled buttons are hidden in the modern command bar (Unified Interface). In the classic ribbon, they stay visible but do nothing when clicked.",children:"What a failing enable rule does"})]})},ie=()=>L.length===0?s.jsx(v,{className:n.muted,children:"No button uses this command."}):s.jsx("ul",{className:n.usesList,"aria-label":"Buttons using this command",children:L.map(({location:e,tab:a,group:t,button:o})=>s.jsxs("li",{className:n.use,children:[s.jsx(v,{weight:"semibold",truncate:!0,wrap:!1,children:_(o.label,S,void 0,o.source?.labelToken)||o.id}),s.jsx(X,{className:n.muted,children:[We[e].label,_(a.label,S)||a.id,_(t.label,S)||t.id].join(" › ")})]},`${e}:${a.id}:${t.id}:${o.id}`))});return s.jsxs("div",{className:n.body,children:[s.jsx($e,{commandId:l.id,hideBadge:!0}),w==="actions"&&te(),w==="enable"&&H("enable"),w==="display"&&H("display"),w==="usedBy"&&ie()]})};export{Ye as CommandEditorPanel,Ye as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as k,j as s,D as ie,f as re,dP as ce,dX as m,B as de,c as ne,e as ue,m as pe,t as n}from"./fluent-ui-CQyNN9H3.js";import{b as c,a as d,ak as me,S as he,al as be,a2 as S,am as fe,aa as ge,t as xe,an as ke}from"./index-DRTwBo4g.js";import"./preload-helper-PPVm8Dsz.js";import"./dnd-iy5K5XAJ.js";const we=pe({surface:{width:"calc(100vw - 32px)",maxWidth:"640px",padding:0,alignSelf:"flex-start",marginTop:"10vh",overflow:"hidden",display:"flex",flexDirection:"column",maxHeight:"calc(80vh)"},search:{padding:n.spacingVerticalM,borderBottom:`1px solid ${n.colorNeutralStroke2}`},searchBox:{width:"100%",maxWidth:"none"},results:{overflowY:"auto",padding:`${n.spacingVerticalXS} 0`,minHeight:0,flex:1},groupLabel:{display:"block",padding:`${n.spacingVerticalS} ${n.spacingHorizontalM} ${n.spacingVerticalXXS}`,color:n.colorNeutralForeground3,fontWeight:n.fontWeightSemibold},item:{display:"flex",alignItems:"center",gap:n.spacingHorizontalS,padding:`${n.spacingVerticalS} ${n.spacingHorizontalM}`,cursor:"pointer",minWidth:0},itemActive:{backgroundColor:n.colorNeutralBackground1Selected,boxShadow:`inset 2px 0 0 ${n.colorBrandStroke1}`},kind:{flexShrink:0,minWidth:"72px",justifyContent:"center"},itemText:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},itemLabel:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},itemSub:{color:n.colorNeutralForeground3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},more:{display:"block",padding:`${n.spacingVerticalXXS} ${n.spacingHorizontalM}`,color:n.colorNeutralForeground3},empty:{display:"block",padding:n.spacingVerticalL,textAlign:"center",color:n.colorNeutralForeground3},footer:{display:"flex",flexWrap:"wrap",gap:n.spacingHorizontalL,padding:`${n.spacingVerticalS} ${n.spacingHorizontalM}`,borderTop:`1px solid ${n.colorNeutralStroke2}`,color:n.colorNeutralForeground3}}),ye={action:"Action",button:"Button",command:"Command",enable:"Enable rule",display:"Display rule",table:"Table"},ve=[{kinds:["action"],title:"Actions",limit:1/0},{kinds:["button"],title:"Buttons",limit:20},{kinds:["command"],title:"Commands",limit:30},{kinds:["enable","display"],title:"Rules",limit:30},{kinds:["table"],title:"Tables",limit:30}],D=l=>`palette-${l.replace(/[^\w-]/g,"_")}`,je=()=>{const l=we(),C=c(e=>e.commandPaletteOpen),se=c(e=>e.setCommandPaletteOpen),R=c(e=>e.openBulkPublish),T=c(e=>e.openXmlDrawer),w=c(e=>e.openImportXml),E=c(e=>e.openCommandEditor),X=c(e=>e.openRuleEditor),O=c(e=>e.openNewGroup),A=c(e=>e.openNewButton),V=c(e=>e.openLocalizationEditor),W=d(e=>e.undo),z=d(e=>e.redo),H=d(e=>e.past.length>0),P=d(e=>e.future.length>0),F=d(e=>e.commands),G=d(e=>e.displayRules),U=d(e=>e.enableRules),j=d(e=>e.ribbons),N=d(e=>e.locLabels),$=me(),_=he(e=>e.entities),q=be(e=>e.requestEntitySwitch),I=S(e=>e.location),K=S(e=>e.tabId),Y=S(e=>e.selectedButtonId),L=S(e=>e.selectedGroupId),Q=S(e=>e.selectButtonInContext),[x,Z]=k.useState(""),[le,h]=k.useState(0),J=k.useRef(null),ee=()=>{se(!1),Z(""),h(0)},y=x.startsWith("/")?"actions":x.startsWith("@")?"tables":"all",M=(y==="all"?x:x.slice(1)).trim().toLowerCase(),te=k.useMemo(()=>{if(!C)return[];const e=[],t=j[I].tabs.find(o=>o.id===K),i=L??t?.groups[0]?.id??null,u=fe(t?.groups.find(o=>o.id===L),Y),p=(o,r,a,f)=>e.push({id:`act-${o}`,label:r,subtitle:a,kind:"action",run:f});p("publish","Publish…","Review and publish your changes",R),p("view-xml","View XML","The XML of your changes",()=>T(I)),p("import-xml","Import XML…","Import RibbonDiffXml from the clipboard",()=>{const o="Couldn't read the clipboard here: paste the XML into the editor (Ctrl+V).",r=navigator.clipboard?.readText?.();if(!r)return w("",o);r.then(a=>a.trim().startsWith("<")?w(a):w("","The clipboard doesn't hold XML: paste the XML into the editor."),()=>w("",o))}),t&&p("new-group","New group…","In the current tab",O),i&&p("new-button","New button…","In the selected or first group",()=>A(i)),u&&!ge(u.kind)&&(u.origin===void 0||u.origin==="unmanaged")&&p("translations","Translations…","The selected button's text",()=>V(u.id)),H&&p("undo","Undo","Ctrl+Z",W),P&&p("redo","Redo","Ctrl+Y",z);for(const[o,r]of Object.entries(j))for(const a of r.tabs)for(const f of a.groups)for(const g of xe(f))e.push({id:`btn-${o}-${g.id}`,label:$(g.label,N,void 0,g.source?.labelToken)||g.id,subtitle:[ke[o].label,$(a.label,N,void 0,a.source?.titleToken)||a.id,$(f.label,N,void 0,f.source?.titleToken)||f.id].join(" › "),keywords:`${g.label} ${g.id}`,kind:"button",run:()=>Q(o,a.id,f.id,g.id)});for(const o of F)e.push({id:`cmd-${o.id}`,label:o.id,subtitle:`${o.actions.length} action${o.actions.length===1?"":"s"}`,kind:"command",run:()=>E(o.id)});for(const[o,r]of[[U,"enable"],[G,"display"]])for(const a of o)e.push({id:`${r}-${a.id}`,label:a.id,subtitle:`${a.steps.length} step${a.steps.length===1?"":"s"}`,kind:r,run:()=>X(a.id,r)});for(const o of _)e.push({id:`ent-${o.logicalName}`,label:o.displayName,subtitle:o.logicalName,kind:"table",run:()=>q(o)});return e},[C,j,I,K,L,Y,H,P,F,U,G,_,N,$,R,T,w,O,A,V,E,X,W,z,Q,q]),B=k.useMemo(()=>{const e=t=>!M||[t.label,t.subtitle??"",t.keywords??""].some(i=>i.toLowerCase().includes(M));return ve.filter(t=>y==="all"||y==="actions"&&t.kinds.includes("action")||y==="tables"&&t.kinds.includes("table")).map(t=>{const i=te.filter(u=>t.kinds.includes(u.kind)&&e(u));return{...t,shown:i.slice(0,t.limit),more:Math.max(0,i.length-t.limit)}}).filter(t=>t.shown.length>0)},[te,M,y]),v=B.flatMap(e=>e.shown),b=v[Math.min(le,v.length-1)];k.useEffect(()=>{b&&J.current?.querySelector(`#${D(b.id)}`)?.scrollIntoView?.({block:"nearest"})},[b]);const oe=e=>{e&&(ee(),e.run())},ae=e=>{e.key==="ArrowDown"?(e.preventDefault(),h(t=>Math.min(t+1,v.length-1))):e.key==="ArrowUp"?(e.preventDefault(),h(t=>Math.max(t-1,0))):e.key==="Home"?(e.preventDefault(),h(0)):e.key==="End"?(e.preventDefault(),h(v.length-1)):e.key==="Enter"&&(e.preventDefault(),oe(b))};return s.jsx(ie,{open:C,onOpenChange:(e,t)=>!t.open&&ee(),children:s.jsxs(re,{className:l.surface,"aria-label":"Command palette",children:[s.jsx("div",{className:l.search,children:s.jsx(ce,{className:l.searchBox,size:"large",autoFocus:!0,placeholder:"Search buttons, commands, rules and tables",value:x,onChange:(e,t)=>{Z(t.value),h(0)},input:{role:"combobox","aria-label":"Search","aria-expanded":!0,"aria-controls":"palette-results","aria-activedescendant":b?D(b.id):void 0,"aria-autocomplete":"list",onKeyDown:ae}})}),s.jsxs("div",{ref:J,id:"palette-results",role:"listbox","aria-label":"Results",className:l.results,children:[B.map(e=>s.jsxs("div",{role:"group","aria-label":e.title,children:[s.jsx(m,{className:l.groupLabel,role:"presentation",children:e.title}),e.shown.map(t=>{const i=t===b;return s.jsxs("div",{id:D(t.id),role:"option","aria-selected":i,className:ue(l.item,i&&l.itemActive),onClick:()=>oe(t),onMouseMove:()=>h(v.indexOf(t)),children:[s.jsx(de,{className:l.kind,appearance:"tint",size:"medium",color:t.kind==="action"?"brand":"informative",children:ye[t.kind]}),s.jsxs("span",{className:l.itemText,children:[s.jsx(ne,{className:l.itemLabel,children:t.label}),t.subtitle&&s.jsx(m,{className:l.itemSub,children:t.subtitle})]})]},t.id)}),e.more>0&&s.jsxs(m,{className:l.more,role:"presentation",children:[e.more," more: keep typing to narrow it down."]})]},e.title)),B.length===0&&s.jsxs(ne,{className:l.empty,role:"presentation",children:["Nothing matches “",x,"”."]})]}),s.jsxs("div",{className:l.footer,"aria-hidden":"true",children:[s.jsx(m,{children:"↑ ↓ move"}),s.jsx(m,{children:"Enter choose"}),s.jsx(m,{children:"Esc close"}),s.jsx(m,{children:"/ actions only"}),s.jsx(m,{children:"@ tables only"})]})]})})};export{je as CommandPalette,je as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./monacoSetup-BIq1zGyP.js","./monaco-cQE5XS3B.js","./fluent-ui-CQyNN9H3.js","./preload-helper-PPVm8Dsz.js","./monaco-DQA8g3bM.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as E}from"./preload-helper-PPVm8Dsz.js";import{W as m,r as S,j as e,c as y,dv as P,t as l,k as z,dX as A,B as w,dZ as X,d_ as D,dY as $,m as F}from"./fluent-ui-CQyNN9H3.js";import{b as V,a as k,aO as C,d as W,aP as H}from"./index-DRTwBo4g.js";import"./dnd-iy5K5XAJ.js";const I=m.lazy(()=>E(()=>import("./monacoSetup-BIq1zGyP.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url).then(()=>E(()=>import("./monaco-cQE5XS3B.js").then(t=>t.i),__vite__mapDeps([1,2,3,4]),import.meta.url)).then(t=>({default:t.DiffEditor}))),U=["HomepageGrid","SubGrid","Form","Application"],G=F({root:{flex:1,display:"flex",flexDirection:"column",gap:l.spacingVerticalS,minHeight:"320px"},unchanged:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:l.spacingVerticalM,textAlign:"center",color:l.colorNeutralForeground3},bar:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:l.spacingHorizontalS},spacer:{flex:1},muted:{color:l.colorNeutralForeground3},editor:{flex:1,minHeight:"240px",border:`1px solid ${l.colorNeutralStroke2}`,borderRadius:l.borderRadiusMedium,overflow:"hidden",position:"relative"},loading:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}});function q(t,n){const d=t.split(`
|
|
3
|
-
`),s=n.split(`
|
|
4
|
-
`);let i=0,c=0;const b=new Set(d),x=new Set(s);for(const h of s)b.has(h)||i++;for(const h of d)x.has(h)||c++;return{added:i,removed:c}}function j(t,n,d=!1){return U.map(s=>{const i=d?n[s]:t.ribbons[s];try{return`<!-- ${s} -->
|
|
5
|
-
`+W({location:s,current:i,baseline:n[s],commands:t.commands,displayRules:t.displayRules,enableRules:t.enableRules,locLabels:t.locLabels,entityLogicalName:i.entityLogicalName})}catch(c){return`<!-- ${s}: Error generating XML: ${String(c)} -->`}}).join(`
|
|
6
|
-
|
|
7
|
-
`)}const Q=({historyIndex:t})=>{const n=G(),d=V(a=>a.themeMode),s=t!==void 0,[i,c]=m.useState(!0),[b,x]=m.useState(!1),h=k(a=>!s&&a.mutationsSincePublish===0&&!H(a)),r=k(),o=s?r.past[t]:void 0,v=S.useMemo(()=>s?o?j(o.snapshot,r.baseline):"":j(r,r.baseline,!0),[s,o]),u=s?r.past[t+1]?.snapshot??C(r):C(r),L=S.useMemo(()=>s&&!o?"":j(u,r.baseline),[s,o,u.ribbons,u.commands,u.displayRules,u.enableRules,u.locLabels,r.baseline]),{added:M,removed:N}=q(v,L),R=m.useRef(null),O=m.useCallback(a=>{R.current=a,a.updateOptions({renderSideBySide:i});const p=[a.getOriginalEditor(),a.getModifiedEditor()];let g=0;const T=()=>{g||(g=requestAnimationFrame(()=>{g=0;for(const f of p)f.render(!0)}))},B=p.flatMap(f=>{const _=f.onDidChangeModelTokens;return _?[_.call(f,T)]:[]});a.onDidDispose(()=>{cancelAnimationFrame(g);for(const f of B)f.dispose()})},[]);return m.useEffect(()=>{R.current?.updateOptions({renderSideBySide:i})},[i]),s&&!o?e.jsx("div",{className:n.unchanged,children:e.jsx(y,{children:"This change was undone, so there's nothing to show."})}):!s&&!b&&h?e.jsxs("div",{className:n.unchanged,children:[e.jsx(P,{fontSize:40,color:l.colorPaletteGreenForeground1,"aria-hidden":"true"}),e.jsx(y,{size:500,weight:"semibold",children:"No changes since the last publish"}),e.jsx(y,{children:"What you see matches what's published for this table."}),e.jsx(z,{onClick:()=>x(!0),children:"Show the full XML anyway"})]}):e.jsxs("div",{className:n.root,children:[e.jsx(A,{className:n.muted,children:s?`${[o.op,o.target].filter(Boolean).join(" ")}${o.detail?` (${o.detail})`:""}: the XML before it (left) and after it (right).`:"The published XML (left) and the XML with your changes (right)."}),e.jsxs("div",{className:n.bar,children:[e.jsxs(w,{appearance:"tint",color:M?"success":"informative",children:["+",M," lines"]}),e.jsxs(w,{appearance:"tint",color:N?"danger":"informative",children:["-",N," lines"]}),e.jsx("div",{className:n.spacer}),e.jsxs(X,{size:"small",selectedValue:i?"side":"unified",onTabSelect:(a,p)=>c(p.value==="side"),"aria-label":"Diff layout",children:[e.jsx(D,{value:"side",children:"Side by side"}),e.jsx(D,{value:"unified",children:"Unified"})]})]}),e.jsx("div",{className:n.editor,children:e.jsx(S.Suspense,{fallback:e.jsx("div",{className:n.loading,children:e.jsx($,{size:"small",label:"Loading the diff…"})}),children:e.jsx(I,{original:v,modified:L,language:"xml",theme:d==="dark"?"vs-dark":"vs",height:"100%",onMount:O,options:{readOnly:!0,renderSideBySide:i,lineNumbers:"on",minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:"on"}})})})]})};export{Q as CompareView,Q as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,F as h,as as P,ar as S,dO as j,T as p,k as v,cD as b,cB as f,l as y,at as I,m as k,W as g,t as u}from"./fluent-ui-CQyNN9H3.js";import{U as N}from"./crmParameters-rgfZhhzN.js";const R=k({root:{display:"flex",flexDirection:"column",gap:u.spacingVerticalXS,minWidth:0},param:{display:"flex",flexWrap:"wrap",minWidth:0,gap:u.spacingHorizontalS,alignItems:"flex-end",padding:u.spacingVerticalXS,border:`1px solid ${u.colorNeutralStroke2}`,borderRadius:u.borderRadiusMedium},typeSelect:{flex:"0 1 170px",minWidth:"130px"},nameField:{flex:"0 1 150px",minWidth:"110px"},valueField:{flex:"1 1 160px",minWidth:0,"& .fui-Select, & .fui-Input, & select":{width:"100%",minWidth:0}},actions:{display:"flex",gap:u.spacingHorizontalXS,flexShrink:0},addButton:{alignSelf:"flex-start"}}),A=[{label:"Context",values:["PrimaryControl","PrimaryControlId","SelectedControl","CommandProperties"]},{label:"Record",values:["PrimaryEntityTypeCode","PrimaryEntityTypeName","FirstPrimaryItemId","PrimaryItemIds"]},{label:"Selection context",values:["SelectedEntityTypeCode","SelectedEntityTypeName","FirstSelectedItemId"]},{label:"Grid selection",values:["SelectedControlSelectedItemCount","SelectedControlSelectedItemIds","SelectedControlSelectedItemReferences","SelectedControlAllItemCount","SelectedControlAllItemIds","SelectedControlAllItemReferences","SelectedControlUnselectedItemCount","SelectedControlUnselectedItemIds","SelectedControlUnselectedItemReferences"]},{label:"Org/User",values:["OrgName","OrgLcid","UserLcid"]}];function F({value:r,integer:c,onChange:x}){const[i,s]=g.useState(String(r));return g.useEffect(()=>s(Number.isFinite(r)?String(r):""),[r]),e.jsx(S,{type:"number",value:i,onChange:(C,d)=>{s(d.value);const m=Number(d.value);d.value.trim()!==""&&Number.isFinite(m)&&(!c||Number.isInteger(m))&&!/e/i.test(String(m))&&x(m)},onBlur:()=>s(Number.isFinite(r)?String(r):"")})}const E=({params:r,onChange:c,urlMode:x=!1})=>{const i=R(),s=(l,t)=>{const a=[...r];a[l]=t,c(a)},C=l=>{c(r.filter((t,a)=>a!==l))},d=(l,t)=>{const a=[...r],n=l+t;n<0||n>=a.length||([a[l],a[n]]=[a[n],a[l]],c(a))},m=()=>{c([...r,{kind:"CrmParameter",value:"PrimaryControl"}])};return e.jsxs("div",{className:i.root,children:[r.map((l,t)=>e.jsxs("div",{className:i.param,children:[e.jsx(h,{label:"Type",size:"small",className:i.typeSelect,children:e.jsxs(P,{value:l.kind,onChange:(a,n)=>{const o=n.value;o==="CrmParameter"?s(t,{kind:o,value:"PrimaryControl"}):o==="BoolParameter"?s(t,{kind:o,value:!1}):o==="IntParameter"||o==="DecimalParameter"?s(t,{kind:o,value:0}):s(t,{kind:"StringParameter",value:""})},children:[e.jsx("option",{value:"CrmParameter",children:"From the context"}),e.jsx("option",{value:"StringParameter",children:"Text"}),e.jsx("option",{value:"BoolParameter",children:"True or false"}),e.jsx("option",{value:"IntParameter",children:"Whole number"}),e.jsx("option",{value:"DecimalParameter",children:"Decimal number"})]})}),x&&e.jsx(h,{label:"Name",size:"small",className:i.nameField,validationState:l.kind==="CrmParameter"&&!l.name?"error":"none",validationMessage:l.kind==="CrmParameter"&&!l.name?"Needs a name: it's the query string key.":void 0,children:e.jsx(S,{value:l.name??"",onChange:(a,n)=>s(t,{...l,name:n.value||void 0}),placeholder:"key"})}),e.jsx(h,{label:"Value",size:"small",className:i.valueField,children:l.kind==="CrmParameter"?e.jsx(P,{value:l.value,onChange:(a,n)=>s(t,{...l,value:n.value}),children:A.map(a=>e.jsx("optgroup",{label:a.label,children:a.values.filter(n=>!x||!N.has(n)).map(n=>e.jsx("option",{value:n,children:n},n))},a.label))}):l.kind==="BoolParameter"?e.jsx(j,{checked:l.value,onChange:(a,n)=>s(t,{...l,value:n.checked}),label:l.value?"True":"False"}):l.kind==="StringParameter"?e.jsx(S,{value:String(l.value),onChange:(a,n)=>s(t,{...l,value:n.value})}):e.jsx(F,{value:l.value,integer:l.kind==="IntParameter",onChange:a=>s(t,{...l,value:a})})}),e.jsxs("div",{className:i.actions,children:[e.jsx(p,{content:`Move parameter ${t+1} up`,relationship:"label",children:e.jsx(v,{appearance:"subtle",size:"small",icon:e.jsx(b,{}),onClick:()=>d(t,-1),disabled:t===0})}),e.jsx(p,{content:`Move parameter ${t+1} down`,relationship:"label",children:e.jsx(v,{appearance:"subtle",size:"small",icon:e.jsx(f,{}),onClick:()=>d(t,1),disabled:t===r.length-1})}),e.jsx(p,{content:`Remove parameter ${t+1}`,relationship:"label",children:e.jsx(v,{appearance:"subtle",size:"small",icon:e.jsx(y,{}),onClick:()=>C(t)})})]})]},t)),e.jsx(v,{className:i.addButton,appearance:"secondary",size:"small",icon:e.jsx(I,{}),onClick:m,children:"Add parameter"})]})};export{E as C};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CommandEditorPanel-DYsxUTOk.js","./fluent-ui-CQyNN9H3.js","./dnd-iy5K5XAJ.js","./index-DRTwBo4g.js","./preload-helper-PPVm8Dsz.js","./index-D5GCH8nj.css","./CrmParameterEditor-DO6Rt764.js","./crmParameters-rgfZhhzN.js","./useStableKeys-49o4VnxU.js","./RuleEditorPanel-BxGrJYo4.js","./ruleKinds-BKTUiZ1-.js","./ScriptView-tkdIK4sg.js","./MonacoEditor-DweI16yt.js","./TabDisplayRulesPanel-S_AxUWfB.js","./XmlView-B0weY9hR.js","./CompareView-CdQo0D6e.js","./TranslationsView-DZIGE2pC.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as y}from"./preload-helper-PPVm8Dsz.js";import{r as u,j as e,F as N,ar as V,k as j,m as E,t as l,T as w,ai as C,B as L,dZ as z,d_ as R,dX as v,ac as B,eK as P,eL as A,z as H,E as S,cH as F,l as O,eM as W,eN as X,dY as $,e as I,eO as M}from"./fluent-ui-CQyNN9H3.js";import{u as U,a as x,b as g,I as D,c as K,i as Y}from"./index-DRTwBo4g.js";import"./dnd-iy5K5XAJ.js";const Z=E({rename:{display:"flex",alignItems:"flex-start",gap:l.spacingHorizontalS,marginTop:l.spacingVerticalXS},field:{flex:1,minWidth:0},input:{fontFamily:l.fontFamilyMonospace},buttons:{display:"flex",gap:l.spacingHorizontalXS,marginTop:"22px"}});function q(s,i,m,p){if(!s.trim())return"Enter an ID.";if(/\s/.test(s))return"An ID can't contain spaces.";if(s!==i&&m.some(c=>c.toLowerCase()===s.toLowerCase()))return`Another ${p} already has this ID.`}function T({label:s,current:i,ids:m,what:p,hint:c,onRename:f,onDone:h}){const r=Z(),[a,b]=u.useState(i),o=q(a,i,m,p),n=()=>{const d=a.trim();!o&&d!==i&&f(d),h()};return e.jsxs("div",{className:r.rename,children:[e.jsx(N,{className:r.field,label:s,validationState:o?"error":"none",validationMessage:o,hint:o?void 0:c,children:e.jsx(V,{className:r.input,value:a,autoFocus:!0,onChange:(d,t)=>b(t.value),onKeyDown:d=>{d.key==="Enter"&&n(),d.key==="Escape"&&(d.stopPropagation(),h())}})}),e.jsxs("div",{className:r.buttons,children:[e.jsx(j,{appearance:"primary",disabled:!!o||a.trim()===i,onClick:n,children:"Rename"}),e.jsx(j,{onClick:h,children:"Cancel"})]})]})}const G=E({idRow:{display:"flex",alignItems:"center",gap:l.spacingHorizontalS,minWidth:0,marginTop:l.spacingVerticalXS},id:{flex:1,minWidth:0},badge:{flexShrink:0},tabs:{marginTop:l.spacingVerticalS,marginLeft:`calc(-1 * ${l.spacingHorizontalM})`}}),J={custom:{text:"Yours",color:"success"},customising:{text:"Your copy",color:"brand"},customised:{text:"Your copy",color:"brand"},oob:{text:"Read-only",color:"informative"},uncustomising:{text:"Read-only",color:"informative"},reloadRequired:{text:"Read-only",color:"informative"}};function Q({commandId:s}){const i=G(),m=U(s)?.provenance,p=x(t=>t.commands.find(_=>_.id===s)),c=x(t=>K(t.ribbons,s).length),f=g(t=>t.commandEditorTab),h=g(t=>t.setCommandEditorTab),r=x(t=>t.commands).map(t=>t.id),a=x(t=>t.renameCommandId),b=g(t=>t.openCommandEditor),[o,n]=u.useState(!1),d=m&&J[m];return e.jsxs(e.Fragment,{children:[o?e.jsx(T,{label:"Command ID",current:s,ids:r,what:"command",hint:"Usually publisher.Table.Button.Command. Its buttons follow the new ID.",onRename:t=>a(s,t)&&b(t),onDone:()=>n(!1)}):e.jsxs("div",{className:i.idRow,children:[e.jsx("div",{className:i.id,children:e.jsx(D,{label:"Command ID",value:s,hideLabel:!0,action:m==="custom"&&e.jsx(w,{content:"Rename command ID",relationship:"label",children:e.jsx(j,{appearance:"subtle",icon:e.jsx(C,{}),onClick:()=>n(!0)})})})}),d&&e.jsx(L,{appearance:"tint",color:d.color,size:"medium",className:i.badge,children:d.text})]}),e.jsxs(z,{className:i.tabs,selectedValue:f,onTabSelect:(t,_)=>h(_.value),children:[e.jsx(R,{value:"actions",children:"Actions"}),e.jsxs(R,{value:"enable",children:["Enable rules (",p?.enableRules.length??0,")"]}),e.jsxs(R,{value:"display",children:["Display rules (",p?.displayRules.length??0,")"]}),e.jsxs(R,{value:"usedBy",children:["Used by (",c,")"]})]})]})}const ee=E({idRow:{display:"flex",alignItems:"center",gap:l.spacingHorizontalS,minWidth:0,marginTop:l.spacingVerticalXS},id:{flex:1,minWidth:0},usedBy:{color:l.colorNeutralForeground3}});function ae({ruleId:s,kind:i}){const m=ee(),p=x(n=>i==="enable"?n.enableRules:n.displayRules),c=x(n=>n.commands.filter(d=>(i==="enable"?d.enableRules:d.displayRules).includes(s)).length),f=x(n=>n.renameEnableRuleId),h=x(n=>n.renameDisplayRuleId),r=g(n=>n.openRuleEditor),[a,b]=u.useState(!1),o=n=>{(i==="enable"?f(s,n):h(s,n))&&r(n,i)};return e.jsxs(e.Fragment,{children:[a?e.jsx(T,{label:"Rule ID",current:s,ids:p.map(n=>n.id),what:"rule",hint:"The commands that use it follow the new ID.",onRename:o,onDone:()=>b(!1)}):e.jsx("div",{className:m.idRow,children:e.jsx("div",{className:m.id,children:e.jsx(D,{label:"Rule ID",value:s,hideLabel:!0,action:!Y(s)&&e.jsx(w,{content:"Rename rule ID",relationship:"label",children:e.jsx(j,{appearance:"subtle",icon:e.jsx(C,{}),onClick:()=>b(!0)})})})})}),e.jsxs(v,{className:m.usedBy,children:["Used by ",c," command",c===1?"":"s"]})]})}const se=u.lazy(()=>y(()=>import("./CommandEditorPanel-DYsxUTOk.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url)),ne=u.lazy(()=>y(()=>import("./RuleEditorPanel-BxGrJYo4.js"),__vite__mapDeps([9,1,3,4,2,5,10,6,7,8]),import.meta.url)),ie=u.lazy(()=>y(()=>import("./ScriptView-tkdIK4sg.js"),__vite__mapDeps([11,1,3,4,2,5,12]),import.meta.url)),te=u.lazy(()=>y(()=>import("./TabDisplayRulesPanel-S_AxUWfB.js"),__vite__mapDeps([13,1,3,4,2,5,8]),import.meta.url)),oe=u.lazy(()=>y(()=>import("./XmlView-B0weY9hR.js"),__vite__mapDeps([14,1,3,4,2,5,12]),import.meta.url)),le=u.lazy(()=>y(()=>import("./CompareView-CdQo0D6e.js"),__vite__mapDeps([15,4,1,3,2,5]),import.meta.url)),re=u.lazy(()=>y(()=>import("./TranslationsView-DZIGE2pC.js"),__vite__mapDeps([16,1,3,4,2,5]),import.meta.url)),de=E({drawer:{width:"720px",maxWidth:"90vw"},wide:{width:"960px"},fill:{display:"flex",flexDirection:"column"},navigation:{justifyContent:"space-between"},title:{display:"flex",flexDirection:"column",gap:l.spacingVerticalXXS,minWidth:0},trail:{color:l.colorNeutralForeground3},idRow:{display:"flex",alignItems:"center",gap:l.spacingHorizontalS,minWidth:0,marginTop:l.spacingVerticalXS},id:{flex:1,minWidth:0},footer:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:l.spacingHorizontalM},hint:{color:l.colorNeutralForeground3}});function k(s){return s.kind==="command"?"Edit command":s.kind==="rule"?`Edit ${s.ruleKind} rule`:s.kind==="tabRules"?"Tab display rules":s.kind==="xml"?"XML of your changes":s.kind==="translations"?"Translations":s.kind==="diff"?s.id==="compare"?"Compare with published":"What this change did":s.editable?"Edit script":"View script"}function xe(){const s=de(),i=g(o=>o.editorStack),m=g(o=>o.editorBack),p=g(o=>o.closeEditor),c=i.length>0,[f,h]=u.useState(i);c&&i!==f&&h(i);const r=c?i:f,a=r[r.length-1],b=r[r.length-2];return u.useEffect(()=>c?(x.getState().beginEditSession(),()=>x.getState().endEditSession()):void 0,[c]),e.jsxs(B,{position:"end",open:c,onOpenChange:(o,n)=>!n.open&&p(),className:I(s.drawer,(a?.kind==="xml"||a?.kind==="diff")&&s.wide),"aria-label":a?k(a):"Editor",children:[e.jsxs(P,{children:[e.jsx(A,{children:e.jsxs(H,{className:s.navigation,children:[b?e.jsx(S,{appearance:"subtle",icon:e.jsx(F,{}),onClick:m,children:k(b)}):e.jsx("span",{}),e.jsx(S,{appearance:"subtle",icon:e.jsx(O,{}),"aria-label":"Close",onClick:p})]})}),a&&e.jsx(W,{children:e.jsxs("span",{className:s.title,children:[r.length>2&&e.jsxs(v,{className:s.trail,children:[r.slice(0,-1).map(k).join(" › ")," ›"]}),k(a)]})}),a?.kind==="command"&&e.jsx(Q,{commandId:a.id},a.id),a?.kind==="rule"&&e.jsx(ae,{ruleId:a.id,kind:a.ruleKind},a.id),(a?.kind==="script"||a?.kind==="tabRules"||a?.kind==="translations")&&e.jsx("div",{className:s.idRow,children:e.jsx("div",{className:s.id,children:e.jsx(D,{label:a.kind==="tabRules"?"Tab ID":a.kind==="translations"?"Button ID":"Web resource",value:a.id,hideLabel:!0})})})]}),e.jsx(X,{className:I((a?.kind==="script"||a?.kind==="xml"||a?.kind==="diff")&&s.fill),children:e.jsxs(u.Suspense,{fallback:e.jsx($,{size:"small",label:"Loading…"}),children:[a?.kind==="command"&&e.jsx(se,{}),a?.kind==="rule"&&e.jsx(ne,{}),a?.kind==="tabRules"&&e.jsx(te,{location:a.location,tabId:a.id}),a?.kind==="script"&&e.jsx(ie,{name:a.id,editable:a.editable},a.id),a?.kind==="xml"&&e.jsx(oe,{location:a.id},a.id),a?.kind==="translations"&&e.jsx(re,{buttonId:a.id},a.id),a?.kind==="diff"&&e.jsx(le,{historyIndex:a.historyIndex},`${a.id}:${a.historyIndex??""}`)]})}),e.jsxs(M,{className:s.footer,children:[e.jsx(v,{className:s.hint,children:a?.kind==="script"?a.editable?"Save writes the script to Dataverse · Undo doesn't revert it":"":a?.kind==="xml"||a?.kind==="diff"?"":"Changes apply as you edit · Ctrl Z to undo"}),e.jsx(j,{appearance:"primary",onClick:p,children:"Done"})]})]})}export{xe as EditorDrawer,xe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as c}from"./fluent-ui-CQyNN9H3.js";import{b as s,a as n,ak as b,aE as m,aF as p,am as f}from"./index-DRTwBo4g.js";import"./preload-helper-PPVm8Dsz.js";import"./dnd-iy5K5XAJ.js";const O=()=>{const o=s(e=>e.hideInsteadOfDelete),a=s(e=>e.closeHideInsteadOfDelete),i=s(e=>e.announce),t=n(e=>o?f(e.ribbons[o.location].tabs.find(d=>d.id===o.tabId)?.groups.find(d=>d.id===o.groupId),o.buttonId):void 0),l=n(e=>o?e.baseline[o.location]:void 0),r=n(e=>e.locLabels),u=b();return!o||!t||!l?null:c.jsx(m,{open:!0,buttonLabel:u(t.label,r,void 0,t.source?.labelToken),buttonId:t.id,commandId:t.commandId,deleteBlockedReason:p(t,l),onConfirmHide:()=>{n.getState().hideOobButton(o.location,o.tabId,o.groupId,o.buttonId),i("Button hidden"),a()},onConfirmDisplayRule:()=>{n.getState().hideWithDisplayRules(t.commandId)&&i("Button hidden"),a()},onCancel:a})};export{O as HideInsteadOfDeleteModal,O as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as o,r as t,dD as se,W as ne,dZ as Ie,d_ as V,a6 as te,a7 as ie,dP as le,eP as We,d as $e,eR as ce,T as Te,k as C,e as U,c as M,dX as z,dY as Ne,F as Be,ar as Ee,p as Le,m as Pe,t as a}from"./fluent-ui-CQyNN9H3.js";import{u as Fe}from"./useReplaceWebResourceConfirm-BhU1AM5L.js";import{b as de,a as De,a2 as $,S as ue,ao as ge,Z as Ge,ap as pe,aq as H,ar as Ve,as as he,at as Ue,G as O,au as Me,av as ze,aw as He,ax as Oe,ay as _e,F as _}from"./index-DRTwBo4g.js";import"./preload-helper-PPVm8Dsz.js";import"./dnd-iy5K5XAJ.js";function Xe({text:s}){return o.jsx(o.Fragment,{children:s.split(/(?=[A-Z])/).map((h,c)=>o.jsxs(t.Fragment,{children:[c>0&&o.jsx("wbr",{}),h]},c))})}const Ze=[{category:"Actions",keywords:["Add","Delete","Edit","Save","Copy","Paste","Undo","Redo","Send","Print","Refresh"]},{category:"Communication",keywords:["Mail","Chat","Phone","Call","Message"]},{category:"Navigation",keywords:["Arrow","Chevron","Navigation","Home","Back","Forward"]},{category:"System",keywords:["Settings","Info","Warning","Dismiss","Question","Checkmark","Error"]},{category:"Security",keywords:["Lock","Shield","Key","Fingerprint"]},{category:"People",keywords:["Person","People","Contact","User"]},{category:"Business",keywords:["Building","Briefcase","Money","Credit","Cart","Tag","Receipt"]},{category:"Files",keywords:["Document","Folder","Attach","Upload","Download","File"]},{category:"Web",keywords:["Globe","Link","Open","Browser","World"]},{category:"Time",keywords:["Calendar","Clock","Timer","History"]},{category:"Rating",keywords:["Star","Heart","Thumb"]},{category:"View",keywords:["Eye","Zoom","View","Window","Preview"]},{category:"Layout",keywords:["Grid","List","Table","Panel","Column","Row"]},{category:"Development",keywords:["Code","Bug","Branch","Wrench","Tool","Terminal"]},{category:"Media",keywords:["Play","Pause","Stop","Video","Audio","Camera"]},{category:"Analytics",keywords:["Chart","Data","Poll","Graph","Trend"]}],qe=["Add","Delete","Edit","Save","Copy","Cut","ClipboardPaste","Share","Mail","Chat","Phone","Search","Filter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","ChevronDown","ChevronUp","Navigation","Home","Settings","Info","Warning","Checkmark","Dismiss","QuestionCircle","LockClosed","LockOpen","Shield","Person","People","PersonAdd","Building","Briefcase","Money","CreditCard","Cart","Tag","Document","DocumentBulletList","Folder","FolderOpen","Attach","ArrowDownload","ArrowUpload","Globe","Link","Open","Calendar","Clock","Timer","Star","Heart","ThumbLike","ThumbDislike","Eye","EyeOff","ZoomIn","ZoomOut","Maximize","Minimize","Grid","List","Table","TableSimple","Code","Bug","Play","Pause","Stop","Refresh","ArrowSync","ArrowUndo","ArrowRedo","Printer","Send","Rocket","Sparkle","Trophy","Lightbulb","Bot","DataBar","ChartMultiple","Poll"];function Ye(s){for(const h of Ze)if(h.keywords.some(c=>s.includes(c)))return h.category;return"General"}const me=qe.map(s=>({name:s,category:Ye(s)})),Qe=["All",...Array.from(new Set(me.map(s=>s.category))).sort()],Ke=Pe({content:{display:"flex",flexDirection:"column",gap:a.spacingVerticalS,height:"min(560px, calc(100vh - 240px))",minHeight:"320px",overflowY:"hidden"},toolbar:{display:"flex",alignItems:"center",gap:a.spacingHorizontalS,flexWrap:"wrap",flexShrink:0},search:{flex:"1 1 220px",minWidth:0},category:{minWidth:"160px"},variant:{display:"flex",gap:a.spacingHorizontalXS},iconGrid:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(88px, 1fr))",gap:a.spacingHorizontalXS,overflowY:"auto",flex:1,minHeight:0,padding:a.spacingHorizontalXXS},iconTile:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:a.spacingVerticalXS,minHeight:"72px",height:"auto",padding:a.spacingVerticalS,fontWeight:a.fontWeightRegular},iconTileSelected:{backgroundColor:a.colorBrandBackground2,border:`1px solid ${a.colorBrandStroke1}`},iconLabel:{fontSize:a.fontSizeBase200,textAlign:"center",lineHeight:a.lineHeightBase200,overflowWrap:"anywhere"},muted:{color:a.colorNeutralForeground3},selection:{display:"flex",alignItems:"center",gap:a.spacingHorizontalS,padding:`${a.spacingVerticalXS} ${a.spacingHorizontalS}`,backgroundColor:a.colorNeutralBackground3,borderRadius:a.borderRadiusMedium,flexShrink:0,minWidth:0},selectionText:{minWidth:0,display:"flex",flexDirection:"column"},resourceList:{listStyleType:"none",margin:0,padding:a.spacingHorizontalXXS,flex:1,minHeight:0,overflowY:"auto",display:"flex",flexDirection:"column",gap:a.spacingVerticalXXS},resourceRow:{width:"100%",justifyContent:"flex-start",fontFamily:a.fontFamilyMonospace,fontWeight:a.fontWeightRegular,fontSize:a.fontSizeBase200,textAlign:"start",overflowWrap:"anywhere"},dropZone:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:a.spacingVerticalM,padding:a.spacingVerticalL,textAlign:"center",border:`2px dashed ${a.colorNeutralStroke2}`,borderRadius:a.borderRadiusMedium,color:a.colorNeutralForeground3},dropZoneActive:{border:`2px dashed ${a.colorBrandStroke1}`,backgroundColor:a.colorBrandBackground2}}),X=300,so=()=>{const s=Ke(),h=Fe(),c=de(e=>e.iconPickerOpen),A=de(e=>e.closeIconPicker),Z=De(e=>e.setButtonProp),R=$(e=>e.selectedButtonId),I=$(e=>e.selectedGroupId),q=$(e=>e.tabId),Y=$(e=>e.location),T=ue(e=>e.publisherPrefix),v=ue(e=>e.activeSolution),[Q,d]=t.useState(null),[K,W]=t.useState(null),[g,J]=t.useState("fluent"),[N,fe]=t.useState(""),[w,Se]=t.useState("All"),[m,ee]=t.useState("regular"),[l,be]=t.useState(null),[f,B]=t.useState(""),[x,E]=t.useState([]),[we,oe]=t.useState(!1),[L,xe]=t.useState(""),[S,y]=t.useState(!1),[ye,P]=t.useState(!1),re=t.useRef(null),Ce=se({axis:"grid-linear"}),ve=se({axis:"vertical"});ne.useEffect(()=>{c||(d(null),W(null))},[c]),ne.useEffect(()=>{!c||g!=="webresource"||(oe(!0),ge("svg").then(e=>E(e)).catch(()=>E([])).finally(()=>oe(!1)))},[c,g]);const k=t.useMemo(()=>{const e=L.toLowerCase();return x.filter(r=>!e||r.name.toLowerCase().includes(e))},[L,x]),F=t.useMemo(()=>{const e=N.toLowerCase();return me.filter(r=>(w==="All"||r.category===w)&&(e===""||r.name.toLowerCase().includes(e)))},[N,w]),ke=async()=>{if(!l||!R||!I)return;const e=_(),r=O.getState();if(d(null),!v||v.isManaged){d("Select an unmanaged solution first — the icon is added to it as an SVG web resource.");return}y(!0);try{const n=await Me(l,m,T,ze,{busy:{onProgress:i=>r.logInfo("webresource",i)},guard:e});n.publishError&&r.logWarn("webresource",`Publishing icon web resource ${n.name} failed: ${n.publishError}. Pick the icon again or publish customizations before using the button.`),Z(Y,q,I,R,{icon:H(l),image16:`$webresource:${n.name}`,image32:`$webresource:${n.name}`}),r.logInfo("webresource",`${n.created?"Uploaded":"Reusing"} icon web resource ${n.name} (solution ${v.uniqueName}).`),A()}catch(n){const i=n instanceof Error?n.message:String(n);r.logError("webresource",`Fluent icon "${l}" could not be added as a web resource: ${i}`),d(`Could not add the icon as a web resource: ${i}`)}finally{y(!1)}},je=async()=>{if(!f||!R||!I)return;const e=he(f),r=_(),n=O.getState();d(null),W(null);const i=e.startsWith("$webresource:")?e.slice(13).trim():null;let p=null;if(i){y(!0);try{const b=x.find(D=>D.name===i),u=await He(i,b,r);u.solutionUniqueName&&n.logInfo("webresource",`Added web resource ${i} to solution ${u.solutionUniqueName}.`),p=u.solutionWarning??null}catch(b){const u=b instanceof Error?b.message:String(b);if(/^No web resource named /.test(u)){d(u);return}p=`The icon was set, but ${i} could not be added to the solution: ${u}`,n.logError("webresource",p)}finally{y(!1)}}if(Z(Y,q,I,R,{image16:e,image32:e}),p){W(p);return}A()},Ae=async e=>{const r=_();if(!v||v.isManaged){d("Select an unmanaged solution first — the SVG is added to it as a web resource.");return}d(null),y(!0);try{const n=await new Promise((u,D)=>{const j=new FileReader;j.onerror=()=>D(j.error??new Error("Failed to read SVG")),j.onload=()=>{const G=String(j.result??"");u(G.includes(",")?G.split(",")[1]??"":G)},j.readAsDataURL(e)}),i=`${T||"new"}_/icons/${e.name}`,p=await Oe(i,n,11,{displayName:e.name,guard:r,onExisting:h.onExisting});W([p.solutionWarning,p.publishWarning].filter(Boolean).join(" ")||null),B(`$webresource:${i}`),J("webresource");const b=await ge("svg");E(b)}catch(n){if(n instanceof _e)return;const i=n instanceof Error?n.message:String(n);O.getState().logError("webresource",`SVG upload failed: ${i}`),d(`Upload failed: ${i}`)}finally{y(!1)}},ae=e=>{if(e){if(!/\.svg$/i.test(e.name)){d(`${e.name} isn't an SVG file.`);return}Ae(e)}},Re=f.startsWith("$webresource:")?f.slice(13):f;return o.jsxs(o.Fragment,{children:[h.dialog,o.jsxs(Ge,{open:c,onOpenChange:e=>!e&&A(),title:"Choose an icon",size:"large",contentClassName:s.content,startActions:o.jsx(Ue,{prefix:"Saves to"}),actions:o.jsxs(o.Fragment,{children:[o.jsx(C,{onClick:A,children:"Cancel"}),g==="fluent"&&o.jsx(C,{appearance:"primary",disabled:!l||S,onClick:()=>{ke()},children:S?"Adding icon…":`Use ${l??"icon"}`}),g==="webresource"&&o.jsx(C,{appearance:"primary",disabled:!f||S,onClick:()=>{je()},children:S?"Adding icon…":"Use web resource"})]}),children:[o.jsxs(Ie,{selectedValue:g,onTabSelect:(e,r)=>J(r.value),children:[o.jsx(V,{value:"fluent",children:"Fluent icons"}),o.jsx(V,{value:"webresource",children:"Web resources"}),o.jsx(V,{value:"upload",children:"Upload SVG"})]}),Q&&o.jsx(te,{intent:"error",children:o.jsx(ie,{children:Q})}),K&&o.jsx(te,{intent:"warning",children:o.jsxs(ie,{children:["Icon applied. ",K]})}),g==="fluent"&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:s.toolbar,children:[o.jsx(le,{className:s.search,placeholder:"Search icons","aria-label":"Search icons",value:N,onChange:(e,r)=>fe(r.value)}),o.jsx(We,{className:s.category,"aria-label":"Category",value:w==="All"?"All categories":w,selectedOptions:[w],onOptionSelect:(e,r)=>Se(String(r.optionValue??"All")),children:Qe.map(e=>o.jsx($e,{value:e,text:e==="All"?"All categories":e,children:e==="All"?"All categories":e},e))}),o.jsxs("div",{className:s.variant,role:"group","aria-label":"Icon style",children:[o.jsx(ce,{checked:m==="regular",onClick:()=>ee("regular"),children:"Regular"}),o.jsx(ce,{checked:m==="filled",onClick:()=>ee("filled"),children:"Filled"})]})]}),o.jsxs("div",{className:s.iconGrid,role:"group","aria-label":`${F.length} icons`,...Ce,children:[F.map(e=>{const r=l===e.name;return o.jsx(Te,{content:`${e.name} · ${e.category}`,relationship:"description",children:o.jsxs(C,{appearance:"subtle","aria-pressed":r,className:U(s.iconTile,r&&s.iconTileSelected),onClick:()=>be(e.name),children:[o.jsx(pe,{name:H(e.name),size:24,variant:m}),o.jsx("span",{className:s.iconLabel,children:o.jsx(Xe,{text:e.name})})]})},e.name)}),F.length===0&&o.jsx(M,{className:s.muted,children:"No icon matches."})]}),l&&o.jsxs("div",{className:s.selection,role:"status",children:[o.jsx(pe,{name:H(l),size:24,variant:m}),o.jsxs("span",{className:s.selectionText,children:[o.jsxs(M,{weight:"semibold",children:[l," ·"," ",m==="regular"?"Regular":"Filled"]}),o.jsxs(z,{className:s.muted,children:["Added to your solution as"," ",Ve(T||"new",l,m)]})]})]})]}),g==="webresource"&&o.jsxs(o.Fragment,{children:[o.jsx(le,{placeholder:"Search SVG web resources","aria-label":"Search SVG web resources",value:L,onChange:(e,r)=>xe(r.value)}),we?o.jsx(Ne,{size:"small",label:"Loading web resources…"}):o.jsxs(o.Fragment,{children:[o.jsx(z,{className:s.muted,role:"status",children:k.length>X?`Showing ${X} of ${k.length.toLocaleString()} SVG web resources. Search to find others.`:k.length===x.length?`${x.length.toLocaleString()} SVG web resources`:`${k.length} of ${x.length.toLocaleString()} SVG web resources`}),o.jsx("ul",{className:s.resourceList,"aria-label":"SVG web resources",...ve,children:k.slice(0,X).map(e=>{const r=`$webresource:${e.name}`,n=f===r;return o.jsx("li",{children:o.jsx(C,{appearance:"subtle","aria-pressed":n,className:U(s.resourceRow,n&&s.iconTileSelected),onClick:()=>B(r),children:e.name})},e.id)})})]}),o.jsx(Be,{label:"Web resource",hint:"Image16 and Image32 are both set to it. SVG works at every size.",children:o.jsx(Ee,{placeholder:"publisher_/icons/icon.svg",value:Re,onChange:(e,r)=>B(r.value?he(r.value):"")})})]}),g==="upload"&&o.jsxs("div",{className:U(s.dropZone,ye&&s.dropZoneActive),onDragOver:e=>{e.preventDefault(),P(!0)},onDragLeave:()=>P(!1),onDrop:e=>{e.preventDefault(),P(!1),ae(e.dataTransfer.files?.[0])},children:[o.jsx(Le,{fontSize:48}),o.jsx(M,{children:"Drop an SVG file here"}),o.jsx(z,{children:"It's uploaded as a web resource in your solution, then listed under Web resources to use."}),o.jsx("input",{ref:re,type:"file",accept:".svg",hidden:!0,disabled:S,onChange:e=>{const r=e.target.files?.[0];e.target.value="",ae(r)}}),o.jsx(C,{appearance:"primary",disabled:S,onClick:()=>re.current?.click(),children:S?"Uploading…":"Choose SVG…"})]})]})]})};export{so as IconPickerModal,so as default};
|