@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
2 lines (1 loc) • 10.9 kB
JavaScript
(function(N,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("vue"),require("lodash-es")):typeof define=="function"&&define.amd?define(["exports","vue","lodash-es"],r):(N=typeof globalThis<"u"?globalThis:N||self,r(N.nav={},N.Vue,N.LodashES))})(this,function(N,r,T){"use strict";const S={},R={};function V(t){const{properties:e,title:i,ignore:o}=t,c=o&&Array.isArray(o),l=Object.keys(e).reduce((f,m)=>((!c||!o.find(y=>y===m))&&(f[m]=e[m].type==="object"&&e[m].properties?V(e[m]):T.cloneDeep(e[m].default)),f),{});if(i&&(!c||!o.find(f=>f==="id"))){const f=i.toLowerCase().replace(/-/g,"_");l.id=`${f}_${Math.random().toString().slice(2,6)}`}return l}function F(t){const{properties:e,title:i,required:o}=t;if(o&&Array.isArray(o)){const c=o.reduce((l,f)=>(l[f]=e[f].type==="object"&&e[f].properties?V(e[f]):T.cloneDeep(e[f].default),l),{});if(i&&o.find(l=>l==="id")){const l=i.toLowerCase().replace(/-/g,"_");c.id=`${l}_${Math.random().toString().slice(2,6)}`}return c}return{type:i}}function A(t,e={},i){const o=S[t];if(o){let c=F(o);const l=R[t];return c=l?l({getSchemaByType:A},c,e,i):c,c}return null}function L(t,e){const i=V(e);return Object.keys(i).reduce((o,c)=>(Object.prototype.hasOwnProperty.call(t,c)&&(o[c]&&T.isPlainObject(o[c])&&T.isPlainObject(t[c]||!t[c])?Object.assign(o[c],t[c]||{}):o[c]=t[c]),o),i),i}function B(t,e){return Object.keys(t).filter(o=>t[o]!=null).reduce((o,c)=>{if(e.has(c)){const l=e.get(c);if(typeof l=="string")o[l]=t[c];else{const f=l(c,t[c],t);Object.assign(o,f)}}else o[c]=t[c];return o},{})}function E(t,e,i=new Map){const o=L(t,e);return B(o,i)}function z(t={}){function e(s,n,a,p){if(typeof a=="number")return p[s].length===a;if(typeof a=="object"){const u=Object.keys(a)[0],d=a[u];if(u==="not")return Number(p[s].length)!==Number(d);if(u==="moreThan")return Number(p[s].length)>=Number(d);if(u==="lessThan")return Number(p[s].length)<=Number(d)}return!1}function i(s,n,a,p){return p[s]&&p[s].propertyValue&&String(p[s].propertyValue.value)===String(a)}const o=new Map([["length",e],["getProperty",i]]);Object.keys(t).reduce((s,n)=>(s.set(n,t[n]),s),o);function c(s,n){const a=s;return typeof n=="number"?[{target:a,operator:"length",param:null,value:Number(n)}]:typeof n=="boolean"?[{target:a,operator:"getProperty",param:s,value:!!n}]:typeof n=="object"?Object.keys(n).map(p=>{if(p==="length")return{target:a,operator:"length",param:null,value:n[p]};const u=p,d=n[p];return{target:a,operator:"getProperty",param:u,value:d}}):[]}function l(s){return Object.keys(s).reduce((a,p)=>{const u=c(p,s[p]);return a.push(...u),a},[])}function f(s,n){if(o.has(s.operator)){const a=o.get(s.operator);return a&&a(s.target,s.param,s.value,n)||!1}return!1}function m(s,n){return l(s).reduce((u,d)=>u&&f(d,n),!0)}function y(s,n){const a=Object.keys(s),p=a.includes("allOf"),u=a.includes("anyOf"),d=p||u,j=(d?s[d?p?"allOf":"anyOf":"allOf"]:[s]).map($=>m($,n));return p?!j.includes(!1):j.includes(!0)}return{parseValueSchema:y}}const W={},H={};z();function G(t,e,i=new Map,o=(f,m,y,s)=>m,c={},l=f=>f){return S[e.title]=e,R[e.title]=o,W[e.title]=c,H[e.title]=l,(f={},m=!0)=>{if(!m)return B(f,i);const y=E(f,e,i),s=Object.keys(t).reduce((n,a)=>(n[a]=t[a].default,n),{});return Object.assign(s,y)}}function J(t,e){return{customClass:e.class,customStyle:e.style}}const Q=new Map([["appearance",J]]),U={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://farris-design.gitee.io/nav.schema.json",title:"nav",description:"A Farris Component",type:"object",properties:{id:{description:"The unique identifier for a nav",type:"string"},type:{description:"The type string of nav component",type:"string",default:"nav"},appearance:{description:"",type:"object",properties:{class:{type:"string"},style:{type:"string"}},default:{}},binding:{description:"",type:"object",default:{}},editable:{description:"",type:"boolean",default:!0},enableLinkLabel:{description:"",type:"boolean",default:!1},label:{description:"",type:"string",default:""},lableWidth:{description:"",type:"number"},placeholder:{description:"",type:"string",default:""},readonly:{description:"",type:"boolean",default:!1},required:{description:"",type:"boolean",default:!1},tabindex:{description:"",type:"number",default:-1},textAlign:{description:"",type:"string",enum:["left","middle","right"],default:"left"},visible:{description:"",type:"boolean",default:!0},onBlur:{description:"",type:"string",default:""},onClickLinkLabel:{description:"",type:"sting",default:""}},required:["id","type"]};function X(t,e,i){return e}const Y={title:"nav",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:[]}}}},behavior:{description:"Basic Infomation",title:"行为",properties:{editable:{description:"",title:"允许编辑",type:"boolean"},readonly:{description:"",title:"只读",type:"string"},required:{description:"",title:"必填",type:"boolean"},visible:{description:"",title:"可见",type:"boolean"},placeholder:{description:"",title:"提示文本",type:"string"},tabindex:{description:"",title:"tab索引",type:"number"},textAlign:{description:"",title:"对齐方式",type:"enum",editor:{type:"combo-list",textField:"name",valueField:"value",data:[{value:"left",name:"左对齐"},{value:"center",name:"居中"},{value:"right",name:"右对齐"}]}}}}}},k={maxNum:{Type:Number,default:99},navData:{Type:Array,default:[{id:"1",text:"全部"},{id:"2",text:"已回复",disable:!0},{id:"3",text:"待回复",num:200},{id:"4",text:"@我",num:33}]},horizontal:{Type:Boolean,default:!0},activeNavId:{Type:String,default:"1"},navPicking:{Type:Function,default:t=>Promise}},O=G(k,U,Q,X,Y),M=r.defineComponent({name:"FNav",props:k,emits:["nav","update:activeNavId"],setup(t,e){const i=r.ref(t.activeNavId),o=r.ref(t.navData),c=r.ref(t.horizontal);r.ref(t.navPicking),r.watch(()=>t.activeNavId,(n,a)=>{n!==a&&(i.value=n)});const l=r.computed({get(){return o.value},set(n){o.value=n,y()}}),f=r.computed({get(){return i.value},set(n){if(i.value=n,i.value&&l&&l.value.length){const a=l.value.find(p=>p.id===i.value);a&&e.emit("nav",a)}}}),m=r.computed({set(n){c.value=n},get(){return c.value}});function y(){if(l.value&&l.value.length&&!i.value){const n=l.value.find(a=>!a.disable);n&&(i.value=n.id)}}function s(n){n.disable||n.id===i.value||(i.value=n.id,e.emit("update:activeNavId",n.id),e.emit("nav",n))}return()=>{var n;return r.createVNode("div",{class:["farris-nav",{"farris-nav-vertical":!m.value}]},[(n=l.value)==null?void 0:n.map(a=>r.createVNode("div",{class:["farris-nav-item",{active:a.id===f.value},{disabled:a.disable}],onClick:()=>s(a)},[r.createVNode("div",{class:"farris-nav-item-link"},[r.createVNode("span",{class:"farris-nav-item-link-text"},[typeof a.text=="function"?a.text():a.text,a.num&&r.createVNode("div",{class:"farris-nav-item-tag"},[a.num<=t.maxNum&&r.createVNode("span",{class:"tag-text"},[a.num]),a.num>t.maxNum&&r.createVNode("span",{class:"tag-text"},[t.maxNum,r.createTextVNode("+")])])])])]))])}}});function Z(t,e,i){var w;const o="",c="",l=r.ref();function f(){return(e==null?void 0:e.schema.componentType)!=="frame"}function m(){return!1}function y(){return(e==null?void 0:e.schema.componentType)!=="frame"}function s(){return(e==null?void 0:e.schema.componentType)==="frame"}function n(v){if(!v||!v.value)return null;if(v.value.schema&&v.value.schema.type==="component")return v.value;const h=r.ref(v==null?void 0:v.value.parent),g=n(h);return g||null}function a(v=e){var D;const{componentInstance:h,designerItemElementRef:g}=v;if(!h||!h.value)return null;const{getCustomButtons:b}=h.value;return h.value.canMove||b&&((D=b())!=null&&D.length)?g:a(v.parent)}function p(v){return!!i}function u(){return(e==null?void 0:e.schema.label)||(e==null?void 0:e.schema.title)||(e==null?void 0:e.schema.name)}function d(){}function P(v,h){var g;!v||!h||(g=e==null?void 0:e.setupContext)==null||g.emit("dragEnd")}function _(v,h){const{componentType:g}=v;let b=A(g,v,h);const D=g.toLowerCase().replace(/-/g,"_");return b&&!b.id&&b.type===g&&(b.id=`${D}_${Math.random().toString().slice(2,6)}`),b}function j(v){}function q(...v){}function $(){e!=null&&e.schema.contents&&e.schema.contents.map(v=>{let h=v.id;v.type==="component-ref"&&(h=v.component);const g=t.value.querySelectorAll(`#${h}-design-item`);g!=null&&g.length&&Array.from(g).map(b=>{var D;(D=b==null?void 0:b.componentInstance)!=null&&D.value.onRemoveComponent&&b.componentInstance.value.onRemoveComponent()})})}function K(){}function I(v){}return l.value={canMove:f(),canSelectParent:m(),canDelete:y(),canNested:!s(),contents:e==null?void 0:e.schema.contents,elementRef:t,parent:(w=e==null?void 0:e.parent)==null?void 0:w.componentInstance,schema:e==null?void 0:e.schema,styles:o,designerClass:c,canAccepts:p,getBelongedComponentInstance:n,getDraggableDesignItemElement:a,getDraggingDisplayText:u,getPropConfig:q,getDragScopeElement:d,onAcceptMovedChildElement:P,onChildElementMovedOut:j,addNewChildComponentSchema:_,triggerBelongedComponentToMoveWhenMoved:r.ref(!1),triggerBelongedComponentToDeleteWhenDeleted:r.ref(!1),onRemoveComponent:$,getCustomButtons:K,onPropertyChanged:I},l}const x=r.defineComponent({name:"FNavDesign",props:k,emits:["nav"],setup(t,e){const i=r.ref(t.activeNavId),o=r.ref(t.navData),c=r.ref(t.horizontal);r.ref(t.navPicking);const l=r.ref(),f=r.inject("design-item-context"),m=Z(l,f);r.onMounted(()=>{l.value.componentInstance=m}),e.expose(m.value);const y=r.computed({get(){return o.value},set(u){o.value=u,a()}}),s=r.computed({get(){return i.value},set(u){if(i.value=u,i.value&&y&&y.value.length){const d=y.value.find(P=>P.id===i.value);d&&e.emit("nav",d)}}}),n=r.computed({set(u){c.value=u},get(){return c.value}});function a(){if(y.value&&y.value.length&&!i.value){const u=y.value.find(d=>!d.disable);u&&(i.value=u.id)}}function p(u){u.disable||u.id===i.value||(i.value=u.id,e.emit("nav",u))}return()=>{var u;return r.createVNode("div",{ref:l,class:["farris-nav",{"farris-nav-vertical":!n.value}]},[(u=y.value)==null?void 0:u.map(d=>r.createVNode("div",{class:["farris-nav-item",{active:d.id===s.value},{disabled:d.disable}],onClick:()=>p(d)},[r.createVNode("div",{class:"farris-nav-item-link"},[r.createVNode("span",{class:"farris-nav-item-link-text"},[d.text,d.num&&r.createVNode("div",{class:"farris-nav-item-tag"},[d.num<=t.maxNum&&r.createVNode("span",{class:"tag-text"},[d.num]),d.num>t.maxNum&&r.createVNode("span",{class:"tag-text"},[t.maxNum,r.createTextVNode("+")])])])])]))])}}}),C={install(t){t.component(M.name,M)},register(t,e,i,o){t.nav=M,e.nav=O},registerDesigner(t,e,i){t.nav=x,e.nav=O}};N.FNav=M,N.default=C,N.navProps=k,N.propsResolver=O,Object.defineProperties(N,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});