@directus-labs/experimental-m2a-interface
Version:
Add a matrix button selector to the built-in M2A interface
2 lines (1 loc) • 8.06 kB
JavaScript
import{defineInterface as e}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as a,onMounted as l,watch as i,nextTick as o,resolveComponent as r,openBlock as c,createElementBlock as d,Fragment as u,createElementVNode as s,unref as v,createBlock as p,withCtx as f,createTextVNode as m,toDisplayString as h,createCommentVNode as b,Teleport as y,createVNode as g,renderList as x}from"vue";const w={key:0,class:"btn-matrix"},k={class:"grid"};var _=t({__name:"interface",props:{value:{},target:{default:"below"},enableSearch:{type:Boolean,default:!1},searchPlaceholder:{default:"Search..."}},setup(e){const t=e;console.log(t);const _=n(),{targetBuilder:S}=function(e,{onFound:a}){const i=n();return l((()=>{var n,l,o;const r="above"==t.target?"previousElementSibling":"nextElementSibling";i.value=null==(o=null==(l=null==(n=e.value)?void 0:n.closest(".field"))?void 0:l[r])?void 0:o.querySelector(".m2a-builder"),i.value&&a()})),{targetBuilder:i}}(_,{onFound:()=>{var e,t;null==(t=null==(e=_.value)?void 0:e.closest(".field"))||t.remove()}}),{label:B,buttonMatrix:M,triggerClick:C}=function(e){const t=n(""),a=n([]);let l;return i((()=>e.value),(async function(){var n,a;const i=null==(n=e.value)?void 0:n.querySelector(".actions>.v-menu");if(l=null==i?void 0:i.querySelector(".v-button button"),!l)return;t.value=null!=(a=l.innerText)?a:"";const s=20;let v,p=0;do{await u(p?50:0),p++,l.click(),await o(),v=r()}while(!v&&p<s);if(!v)return;f=i,f.style.visibility="hidden",f.style.display="block",f.style.position="absolute",c(v),d(v);var f}),{once:!0}),{label:t,buttonMatrix:a,triggerClick:async function(e){null==l||l.click(),await o();const t=document.querySelector(".v-menu-popper.active");if(!t)return;const n=null==t?void 0:t.querySelectorAll(".v-list-item.link.clickable"),a=null==n?void 0:n[e];a&&a.click();await o(),t.style.visibility="hidden",document.body.click()}};function r(){const e=document.querySelector("#menu-outlet .v-menu-popper.active:not([data-hacked])");if(e)return e.dataset.hacked="hacked",e.id,e}function c(e){var t;null==(t=e.querySelectorAll(".v-list-item.link.clickable"))||t.forEach((e=>{var t,n,l;const i=e.innerText,o=null!=(l=null==(n=null==(t=e.querySelector(".v-icon [data-icon]"))?void 0:t.dataset)?void 0:n.icon)?l:"database";a.value.push({label:i,icon:o})}))}async function d(e){e.style.visibility="hidden",await u(150),document.body.click()}function u(e){return new Promise((t=>setTimeout(t,e)))}}(S),A=n(""),V=a((()=>{if(!A.value)return M.value;const e=A.value.toLowerCase();return M.value.filter((t=>t.label.toLowerCase().includes(e)))}));return(e,n)=>{const a=r("v-notice"),l=r("v-divider"),i=r("v-icon"),o=r("v-input"),H=r("v-text-overflow"),q=r("v-button");return c(),d(u,null,[s("div",{ref_key:"el",ref:_},[v(S)?b("v-if",!0):(c(),p(a,{key:0,type:"warning",icon:"vertical_align_"+("above"==e.target?"top":"bottom")},{default:f((()=>[m("No Builder (M2A) field found "+h(e.target)+" this field!",1)])),_:1},8,["icon"]))],512),v(S)?(c(),p(y,{key:0,to:v(S)},[v(M).length?(c(),d("div",w,[v(B)?(c(),p(l,{key:0,"inline-title":"",class:"label"},{default:f((()=>[m(h(v(B)),1)])),_:1})):b("v-if",!0),t.enableSearch?(c(),p(o,{key:1,modelValue:A.value,"onUpdate:modelValue":n[0]||(n[0]=e=>A.value=e),placeholder:t.searchPlaceholder,class:"search-input"},{prepend:f((()=>[g(i,{name:"search"})])),_:1},8,["modelValue","placeholder"])):b("v-if",!0),s("div",k,[(c(!0),d(u,null,x(V.value,((e,t)=>(c(),p(q,{onClick:e=>v(C)(t),secondary:"","full-width":""},{default:f((()=>[g(i,{name:e.icon},null,8,["name"]),g(H,{text:e.label},null,8,["text"])])),_:2},1032,["onClick"])))),256))])])):b("v-if",!0)],8,["to"])):b("v-if",!0)],64)}}}),S=[],B=[];!function(e,t){if(e&&"undefined"!=typeof document){var n,a=!0===t.prepend?"prepend":"append",l=!0===t.singleTag,i="string"==typeof t.container?document.querySelector(t.container):document.getElementsByTagName("head")[0];if(l){var o=S.indexOf(i);-1===o&&(o=S.push(i)-1,B[o]={}),n=B[o]&&B[o][a]?B[o][a]:B[o][a]=r()}else n=r();65279===e.charCodeAt(0)&&(e=e.substring(1)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(document.createTextNode(e))}function r(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),t.attributes)for(var n=Object.keys(t.attributes),l=0;l<n.length;l++)e.setAttribute(n[l],t.attributes[n[l]]);var o="prepend"===a?"afterbegin":"beforeend";return i.insertAdjacentElement(o,e),e}}("\n.m2a-builder:has(.btn-matrix) .actions {\n margin-top: 0px;\n}\n.m2a-builder:has(.btn-matrix) .actions:has(.v-menu + .v-menu) {\n margin-top: 8px;\n}\n.btn-matrix[data-v-10713ed0] {\n margin-top: 8px;\n}\n.label[data-v-10713ed0] {\n margin-bottom: 8px;\n}\n.grid[data-v-10713ed0] {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 8px;\n}\n.v-button[data-v-10713ed0] .content {\n --v-icon-color: var(--theme--foreground-subdued);\n gap: 6px;\n\n flex-direction: column;\n}\n.v-button[data-v-10713ed0] {\n --v-button-height: 100px;\n}\n.v-text-overflow[data-v-10713ed0] {\n width: 100%;\n}\n.v-divider[data-v-10713ed0] .type-text {\n color: var(--theme--foreground-subdued);\n}\n.search-input[data-v-10713ed0] {\n margin-bottom: 12px;\n}\n",{});var M=e({id:"directus-labs-experimental-m2a-interface",name:"Builder (M2A) Button Matrix",icon:"grid_view",description:"Add a matrix button selector to the built-in M2A interface",component:((e,t)=>{const n=e.__vccOpts||e;for(const[e,a]of t)n[e]=a;return n})(_,[["__scopeId","data-v-10713ed0"],["__file","interface.vue"]]),types:["alias"],localTypes:["presentation"],group:"presentation",options:[{field:"target",name:"Target Builder (M2A) field placement",type:"string",meta:{width:"full",interface:"select-dropdown",options:{choices:[{text:"Above this field",value:"above",icon:"vertical_align_top"},{text:"Below this field",value:"below",icon:"vertical_align_bottom"}]}},schema:{default_value:"below"}},{field:"info",type:"alias",meta:{width:"full",interface:"presentation-notice",conditions:[{rule:{_and:[{target:{_eq:"below"}}]},options:{text:C({targetPlacedBelow:!0})}}],options:{icon:!1,text:C({targetPlacedBelow:!1})}}},{field:"enableSearch",name:"Enable Search",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"searchPlaceholder",name:"Search Placeholder",type:"string",meta:{width:"half",interface:"input",hidden:!0,conditions:[{rule:{enableSearch:{_eq:!0}},hidden:!1}]},schema:{default_value:"Search..."}}]});function C({targetPlacedBelow:e}){return`${`<svg style="vertical-align:middle" width="120" height="50" viewBox="0 0 120 50" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M114 1H6C3.23858 1 1 3.23858 1 6V16C1 18.7614 3.23858 21 6 21H114C116.761 21 119 18.7614 119 16V6C119 3.23858 116.761 1 114 1Z" stroke="var(--theme--primary)" stroke-opacity="${e?"1":"0.25"}" stroke-width="2"/><path d="M114 29H6C3.23858 29 1 31.2386 1 34V44C1 46.7614 3.23858 49 6 49H114C116.761 49 119 46.7614 119 44V34C119 31.2386 116.761 29 114 29Z" stroke="var(--theme--primary)" stroke-opacity="${e?"0.25":"1"}" stroke-width="2"/><path opacity="${e?"0.5":"1"}" d="M20 37H10V38.2691H20V37ZM10 40.7778H20V39.5087H10V40.7778Z" fill="var(--theme--primary)"/><path opacity="${e?"1":"0.5"}" d="M20 9H10V10.2691H20V9ZM10 12.7778H20V11.5087H10V12.7778Z" fill="var(--theme--primary)"/><text opacity="${e?"1":"0.5"}" fill="var(--theme--primary)" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="10" font-weight="500" letter-spacing="0em"><tspan x="28" y="14.6364">${e?"Button Matrix":"Builder (M2A)"}</tspan></text><text opacity="${e?"0.5":"1"}" fill="var(--theme--primary)" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="10" font-weight="500" letter-spacing="0em"><tspan x="28" y="42.6364">${e?"Builder (M2A)":"Button Matrix"}</tspan></text></svg>`}${`<span style="padding-left: 12px">Place this field directly ${e?"above":"below"} the Builder (M2A) field!</span>`}`}export{M as default};