UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

2 lines (1 loc) 14.3 kB
(function(C,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("vue"),require("lodash-es"),require("../combo-list/index.umd.js"),require("../number-spinner/index.umd.js"),require("../common/index.umd.js"),require("../expression-editor/index.umd.js")):typeof define=="function"&&define.amd?define(["exports","vue","lodash-es","../combo-list/index.umd.js","../number-spinner/index.umd.js","../common/index.umd.js","../expression-editor/index.umd.js"],n):(C=typeof globalThis<"u"?globalThis:C||self,n(C["property-editor"]={},C.Vue,C.LodashES,C.comboList,C.numberSpinner,C.common,C.expressionEditor))})(this,function(C,n,T,w,S,F,R){"use strict";const A={},I={};function O(t){const{properties:l,title:p,ignore:c}=t,a=c&&Array.isArray(c),y=Object.keys(l).reduce((o,s)=>((!a||!c.find(d=>d===s))&&(o[s]=l[s].type==="object"&&l[s].properties?O(l[s]):T.cloneDeep(l[s].default)),o),{});if(p&&(!a||!c.find(o=>o==="id"))){const o=p.toLowerCase().replace(/-/g,"_");y.id=`${o}_${Math.random().toString().slice(2,6)}`}return y}function $(t,l){const p=O(l);return Object.keys(p).reduce((c,a)=>(Object.prototype.hasOwnProperty.call(t,a)&&(c[a]&&T.isPlainObject(c[a])&&T.isPlainObject(t[a]||!t[a])?Object.assign(c[a],t[a]||{}):c[a]=t[a]),c),p),p}function j(t,l){return Object.keys(t).filter(c=>t[c]!=null).reduce((c,a)=>{if(l.has(a)){const y=l.get(a);if(typeof y=="string")c[y]=t[a];else{const o=y(a,t[a],t);Object.assign(c,o)}}else c[a]=t[a];return c},{})}function L(t,l,p=new Map){const c=$(t,l);return j(c,p)}function k(t={}){function l(e,u,i,f){if(typeof i=="number")return f[e].length===i;if(typeof i=="object"){const m=Object.keys(i)[0],g=i[m];if(m==="not")return Number(f[e].length)!==Number(g);if(m==="moreThan")return Number(f[e].length)>=Number(g);if(m==="lessThan")return Number(f[e].length)<=Number(g)}return!1}function p(e,u,i,f){return f[e]&&f[e].propertyValue&&String(f[e].propertyValue.value)===String(i)}const c=new Map([["length",l],["getProperty",p]]);Object.keys(t).reduce((e,u)=>(e.set(u,t[u]),e),c);function a(e,u){const i=e;return typeof u=="number"?[{target:i,operator:"length",param:null,value:Number(u)}]:typeof u=="boolean"?[{target:i,operator:"getProperty",param:e,value:!!u}]:typeof u=="object"?Object.keys(u).map(f=>{if(f==="length")return{target:i,operator:"length",param:null,value:u[f]};const m=f,g=u[f];return{target:i,operator:"getProperty",param:m,value:g}}):[]}function y(e){return Object.keys(e).reduce((i,f)=>{const m=a(f,e[f]);return i.push(...m),i},[])}function o(e,u){if(c.has(e.operator)){const i=c.get(e.operator);return i&&i(e.target,e.param,e.value,u)||!1}return!1}function s(e,u){return y(e).reduce((m,g)=>m&&o(g,u),!0)}function d(e,u){const i=Object.keys(e),f=i.includes("allOf"),m=i.includes("anyOf"),g=f||m,h=(g?e[g?f?"allOf":"anyOf":"allOf"]:[e]).map(P=>s(P,u));return f?!h.includes(!1):h.includes(!0)}return{parseValueSchema:d}}const B={},q={};k();function U(t,l,p=new Map,c=(o,s,d,e)=>s,a={},y=o=>o){return A[l.title]=l,I[l.title]=c,B[l.title]=a,q[l.title]=y,(o={},s=!0)=>{if(!s)return j(o,p);const d=L(o,l,p),e=Object.keys(t).reduce((u,i)=>(u[i]=t[i].default,u),{});return Object.assign(e,d)}}function _(t,l){return{customClass:l.class,customStyle:l.style}}const D=new Map([["appearance",_]]);function Y(t,l,p){return l}const z={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://farris-design.gitee.io/property-editor.schema.json",title:"property-editor",description:"A Farris Component",type:"object",properties:{id:{description:"The unique identifier for property-editor",type:"string"},type:{description:"The type string of property-editor",type:"string",default:"property-editor"},appearance:{description:"",type:"object",properties:{class:{type:"string"},style:{type:"string"}},default:{}},binding:{description:"",type:"object",default:{}},disable:{type:"string",default:!1},editable:{description:"",type:"boolean",default:!0},placeholder:{description:"",type:"string",default:""},readonly:{description:"",type:"boolean",default:!1},require:{description:"",type:"boolean",default:!1},tabindex:{description:"",type:"number",default:-1},visible:{description:"",type:"boolean",default:!0},propertyTypes:{description:"",type:"Array",default:[]},constEnums:{description:"",type:"Array",default:[]},constType:{description:"",type:"String",default:""},variables:{description:"",type:"Array",default:[]},controlName:{description:"",type:"string",default:""},newVariablePrefix:{description:"",type:"string",default:""},newVariableType:{description:"",type:"string",default:""},stateMachines:{description:"",type:"Array",default:[]},expressionConfig:{description:"",type:"Object",default:{}}},required:["type"],ignore:["id"]},G={title:"property-editor",description:"A Farris Component",type:"object",categories:{basic:{description:"Basic Infomation",title:"基本信息",properties:{id:{description:"组件标识",title:"标识",type:"string",readonly:!0},type:{description:"组件类型",title:"控件类型",type:"select",editor:{type:"waiting for modification",enum:[]}}}}}},N={...{constType:{type:String,default:""},constEnums:{type:Array,default:[]}},...{variables:{type:Array,default:[]},controlName:{type:String,default:""},newVariablePrefix:{type:String,default:""},newVariableType:{type:String,default:""}},...{},...{stateMachines:{type:Array,default:[]}},...{expressionConfig:{type:Object,default:{}}},id:{Type:String,default:""},modelValue:{type:[Number,String,Boolean,Object]},propertyTypes:{type:Array,default:[]}},E=U(N,z,D,Y,G);function H(t,l,p){const c=n.ref(!1),a=n.ref(t.constType),y=n.ref(t.constEnums),{getPropertyValue:o,triggerValueChange:s}=p,d=o("Const"),e=n.computed(()=>r=>r===a.value);function u(r){s(r)}function i(r){u(r)}function f(r){if(!r||r.length<1)return;const b=r[0].id;u(b)}function m(){return n.createVNode(S.FNumberSpinner,{nullable:!0,readonly:c.value,modelValue:d.value,"onUpdate:modelValue":r=>d.value=r,onChange:i},null)}function g(){return n.createVNode(w.FComboList,{key:"const-combo-list",modelValue:d.value,"onUpdate:modelValue":r=>d.value=r,placeholder:"",viewType:"text",enableClear:!1,valueField:"id",textField:"name",data:y.value,editable:!1,readonly:c.value,onChange:f},null)}return()=>n.createVNode("div",{class:"f-property-editor-const-container"},[e.value("number")&&m(),e.value("enum")&&g()])}function J(t,l,p){const c=n.ref(t.newVariablePrefix),a=n.ref(t.newVariableType),y=n.ref(t.id),o=n.ref(t.controlName),s=n.ref(t.variables),{getPropertyValue:d}=p;function e(r){return r[0].toUpperCase()+r.slice(1)}function u(r){return r[0].toLowerCase()+r.slice(1)}function i(r){return r.replace(/[-_](.)/g,(b,h)=>h.toUpperCase())}function f(){const r=c.value?e(o.value):u(o.value),b=e(y.value);let h=`${c.value}${r}${b}`;h=i(h);const{guid:v}=F.useGuid();return{type:"Variable",path:h,field:v(),fullPath:h,isNewVariable:!0,newVariableType:a.value}}function m(r){return s.value.find(h=>h.path===r)}function g(){const r=d("Variable");return r.value||(r.value={type:"Variable",field:"",path:"",fullPath:""}),r}return{generateVariable:f,getVariableByPath:m,getVariableValue:g}}function Q(t,l,p){const c=n.ref(!1),a=n.ref(t.variables),y=n.ref(t.controlName),o=n.ref(!!y.value),{generateVariable:s,getVariableByPath:d,getVariableValue:e}=J(t,l,p),{triggerValueChange:u}=p,i=e(),f=n.ref(i.value.field),m=n.computed(()=>[{"form-control-select-show":o.value},{"form-control-select-hide":!o.value}]);function g(V){Object.assign(i.value,{field:V.field,path:V.path,fullPath:V.fullPath,isNewVariable:V.isNewVariable,newVariableType:V.isNewVariable&&V.newVariableType}),f.value=i.value.field,u(i.value)}function r(){const V=s(),x=d(V.path);x?g(x):(a.value.push(V),g(V))}const b=()=>(l.emit("beforeOpenVariables",a),Promise.resolve(!0));function h(V){if(!V||V.length<1)return;const x=V[0],ae={path:x.path,fullPath:x.fullPath,field:x.field,type:"Variable"};g(ae)}function v(){return n.createVNode(w.FComboList,{key:"variable-combo-list",class:m.value,modelValue:f.value,"onUpdate:modelValue":V=>f.value=V,placeholder:"",viewType:"text",enableClear:!1,valueField:"field",idField:"field",textField:"fullPath",data:a.value,beforeOpen:b,readonly:c.value,editable:!1,onChange:h},null)}function P(){return n.createVNode("div",{class:"f-property-editor-variable-add-button"},[n.createVNode("button",{title:"新增变量",class:"f-variable-button",onClick:r},[n.createVNode("span",{class:"f-icon f-icon-add",style:"margin:unset;"},null)])])}return()=>n.createVNode("div",{class:"f-property-editor-variable-container"},[v(),o.value&&P()])}function W(t,l,p){const c=/^(?:(!)?)viewModel\.stateMachine\['([^']+)'\]$/,{getPropertyValue:a}=p;function y(s){if(!(typeof s.value=="string"))return;const e=s.value.match(c);if(!e||e.length<3)return;const i={type:"StateMachine",status:e[1]!=="!",field:e[2]};s.value=i,p.triggerValueChange(i)}function o(){const s=a("StateMachine");return s.value?(y(s),s):(s.value={type:"StateMachine",field:"",status:!1},s)}return{getStateMachineValue:o}}function X(t,l,p){const c=n.ref(!1),a=n.ref(t.stateMachines),{getStateMachineValue:y}=W(t,l,p),{triggerValueChange:o}=p,s=y(),d=n.ref(s.value.field),e=n.ref(s.value.status);function u(){e.value=!e.value,s.value.status=e.value,o(s.value)}function i(g){if(!g||g.length<1)return;const r=g[0];s.value.field=r.id,o(s.value)}function f(){return n.createVNode("div",{class:"f-stateMachine-status",onClick:u},[e.value?"是":"非"])}function m(){return n.createVNode("div",{class:"f-stateMachine-combo-list"},[n.createVNode(w.FComboList,{key:"state-machine-combo-list",modelValue:d.value,"onUpdate:modelValue":g=>d.value=g,placeholder:"",viewType:"text",enableClear:!1,valueField:"id",textField:"name",data:a.value,editable:!1,readonly:c.value,onChange:i},null)])}return()=>n.createVNode("div",{class:"f-property-editor-stateMachine-container"},[f(),m()])}function Z(t,l,p){const c=n.ref(!1),{getPropertyValue:a,triggerValueChange:y}=p,o=a("Custom");function s(d){const e=d.target.value;y(e)}return()=>n.createVNode("div",{class:"f-property-editor-customize-container"},[n.withDirectives(n.createVNode("input",{class:"form-control",placeholder:"输入自定义内容","onUpdate:modelValue":d=>o.value=d,onChange:s,disabled:c.value},null),[[n.vModelText,o.value]])])}function K(t,l,p){const{getPropertyValue:c}=p,a=t.id,{expressionConfig:y={}}=t,{expressionInfo:o={value:"",targetId:"",targetType:"",expressionType:""}}=y,{targetId:s}=o;function d(){return s+"_"+a}function e(){return{type:"Expression",expressionId:d(),expressionInfo:o}}function u(){const i=c("Expression");return i.value?(i.value.expressionInfo=o,i):(i.value=e(),i)}return{getExpressionValue:u}}function ee(t,l,p){const c=n.ref(!1),{triggerValueChange:a}=p,{getExpressionValue:y}=K(t,l,p),o=y(),{expressionInfo:s}=o.value,d=n.ref(s.value),e=n.ref(s.message),u=n.ref(t.expressionConfig);function i({expression:m,message:g}){m&&(o.value.expressionInfo.value=m,g?o.value.expressionInfo.message=g:delete o.value.expressionInfo.message,a(o.value))}function f({expressionValue:m,notifyService:g}){return m?!0:(g.warning({message:"请先配置表达式",position:"top-center"}),!1)}return()=>n.createVNode("div",{class:"f-property-editor-expression-container"},[n.createVNode(R.FExpressionTextbox,n.mergeProps(u.value,{modelValue:d.value,"onUpdate:modelValue":m=>d.value=m,validateMessage:e.value,enableClear:!1,readonly:c.value,beforeSubmit:f,onSubmitModal:i}),null)])}function te(t,l,p){const c=n.ref(t.modelValue),a=new Map;a.set(p,n.ref(T.cloneDeep(c.value)));function y(d){l.emit("valueChange",T.cloneDeep(d))}function o(d){const e=a.get(d);if(e)return e;const u=n.ref();return a.set(d,u),u}function s(d,e){switch(d){case"Const":return e!==void 0;case"Variable":return e&&e.field;case"Custom":return e!==void 0;case"Expression":return e&&e.expressionInfo&&e.expressionInfo.value;case"StateMachine":return e&&e.field}}return{triggerValueChange:y,getPropertyValue:o,isPropertyValueValid:s}}const ne=[{id:"Const",name:"常量"},{id:"Variable",name:"变量"},{id:"Custom",name:"自定义"},{id:"StateMachine",name:"状态机"},{id:"Expression",name:"表达式"}];function re(t,l){const p=n.ref(t.constType),c=n.ref(t.constEnums),a=n.ref(t.propertyTypes),y=n.ref([]),o=n.ref();function s(){const r=a.value;return y.value=ne.filter(b=>r.includes(b.id)),y}function d(r){return typeof r!="string"?!1:/^(?:(!)?)viewModel\.stateMachine\['([^']+)'\]$/.test(r)}function e(r){const b=a.value,h=b.includes("Const")&&p.value==="enum"&&c.value.findIndex(P=>P.id===r)>-1,v=b.includes("Const")&&p.value==="number"&&typeof r=="number";return h||v}function u(r){return a.value.includes("Custom")&&typeof r=="string"}function i(r){if(r&&typeof r=="object")return r.type}function f(r){const b=new Map([["Const",e],["StateMachine",d],["Custom",u]]);for(const[h,v]of b.entries())if(v(r))return h}function m(){const r=t.modelValue,b=a.value[0],h=i(r),v=f(r);return h||v||b}function g(){return o.value||(o.value=m()),o}return{getAllowedPropertyTypeItems:s,getCurrentPropertyType:g}}const M=n.defineComponent({name:"FPropertyEditor",props:N,emits:["valueChange","beforeOpenVariables"],setup(t,l){const p=n.ref(!1),{getAllowedPropertyTypeItems:c,getCurrentPropertyType:a}=re(t),y=c(),o=a(),s=te(t,l,o.value),{getPropertyValue:d,triggerValueChange:e,isPropertyValueValid:u}=s,i=H(t,l,s),f=Q(t,l,s),m=Z(t,l,s),g=X(t,l,s),r=ee(t,l,s),b=n.computed(()=>V=>V===o.value);function h(){const V=d(o.value);u(o.value,V.value)&&e(V.value)}function v(){return n.createVNode("div",{class:"f-property-editor-left"},[n.createVNode(w.FComboList,{modelValue:o.value,"onUpdate:modelValue":V=>o.value=V,placeholder:"",enableClear:!1,valueField:"id",textField:"name",data:y.value,editable:!1,readonly:p.value,onChange:h},null)])}function P(){return n.createVNode("div",{class:"f-property-editor-right"},[b.value("Const")&&i(),b.value("Variable")&&f(),b.value("Custom")&&m(),b.value("StateMachine")&&g(),b.value("Expression")&&r()])}return()=>n.createVNode("div",{class:"f-property-editor-container clearfix"},[v(),P()])}}),oe={install(t){t.component(M.name,M)},register(t,l,p,c){t["property-editor"]=M,l["property-editor"]=E}};C.PropertyEditor=M,C.default=oe,C.propertyEditorProps=N,C.propsResolver=E,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});