@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
2 lines (1 loc) • 16.6 kB
JavaScript
(function(N,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("lodash-es")):typeof define=="function"&&define.amd?define(["exports","vue","lodash-es"],c):(N=typeof globalThis<"u"?globalThis:N||self,c(N["list-nav"]={},N.Vue,N.LodashES))})(this,function(N,c,P){"use strict";const j={},$={};function A(r){const{properties:e,title:t,ignore:s}=r,a=s&&Array.isArray(s),o=Object.keys(e).reduce((n,m)=>((!a||!s.find(y=>y===m))&&(n[m]=e[m].type==="object"&&e[m].properties?A(e[m]):P.cloneDeep(e[m].default)),n),{});if(t&&(!a||!s.find(n=>n==="id"))){const n=t.toLowerCase().replace(/-/g,"_");o.id=`${n}_${Math.random().toString().slice(2,6)}`}return o}function _(r){const{properties:e,title:t,required:s}=r;if(s&&Array.isArray(s)){const a=s.reduce((o,n)=>(o[n]=e[n].type==="object"&&e[n].properties?A(e[n]):P.cloneDeep(e[n].default),o),{});if(t&&s.find(o=>o==="id")){const o=t.toLowerCase().replace(/-/g,"_");a.id=`${o}_${Math.random().toString().slice(2,6)}`}return a}return{type:t}}function B(r,e={},t){const s=j[r];if(s){let a=_(s);const o=$[r];return a=o?o({getSchemaByType:B},a,e,t):a,a}return null}function z(r,e){const t=A(e);return Object.keys(t).reduce((s,a)=>(Object.prototype.hasOwnProperty.call(r,a)&&(s[a]&&P.isPlainObject(s[a])&&P.isPlainObject(r[a]||!r[a])?Object.assign(s[a],r[a]||{}):s[a]=r[a]),s),t),t}function E(r,e){return Object.keys(r).filter(s=>r[s]!=null).reduce((s,a)=>{if(e.has(a)){const o=e.get(a);if(typeof o=="string")s[o]=r[a];else{const n=o(a,r[a],r);Object.assign(s,n)}}else s[a]=r[a];return s},{})}function W(r,e,t=new Map){const s=z(r,e);return E(s,t)}function U(r={}){function e(l,i,p,u){if(typeof p=="number")return u[l].length===p;if(typeof p=="object"){const d=Object.keys(p)[0],g=p[d];if(d==="not")return Number(u[l].length)!==Number(g);if(d==="moreThan")return Number(u[l].length)>=Number(g);if(d==="lessThan")return Number(u[l].length)<=Number(g)}return!1}function t(l,i,p,u){return u[l]&&u[l].propertyValue&&String(u[l].propertyValue.value)===String(p)}const s=new Map([["length",e],["getProperty",t]]);Object.keys(r).reduce((l,i)=>(l.set(i,r[i]),l),s);function a(l,i){const p=l;return typeof i=="number"?[{target:p,operator:"length",param:null,value:Number(i)}]:typeof i=="boolean"?[{target:p,operator:"getProperty",param:l,value:!!i}]:typeof i=="object"?Object.keys(i).map(u=>{if(u==="length")return{target:p,operator:"length",param:null,value:i[u]};const d=u,g=i[u];return{target:p,operator:"getProperty",param:d,value:g}}):[]}function o(l){return Object.keys(l).reduce((p,u)=>{const d=a(u,l[u]);return p.push(...d),p},[])}function n(l,i){if(s.has(l.operator)){const p=s.get(l.operator);return p&&p(l.target,l.param,l.value,i)||!1}return!1}function m(l,i){return o(l).reduce((d,g)=>d&&n(g,i),!0)}function y(l,i){const p=Object.keys(l),u=p.includes("allOf"),d=p.includes("anyOf"),g=u||d,C=(g?l[g?u?"allOf":"anyOf":"allOf"]:[l]).map(O=>m(O,i));return u?!C.includes(!1):C.includes(!0)}return{parseValueSchema:y}}const D={button:{type:"button",name:"按钮"},"response-toolbar":{type:"response-toolbar",name:"工具栏"},"response-toolbar-item":{type:"response-toolbar-item",name:"按钮"},"content-container":{type:"content-container",name:"容器"},"input-group":{type:"input-group",name:"文本"},textarea:{type:"textarea",name:"多行文本"},lookup:{type:"lookup",name:"帮助"},"number-spinner":{type:"number-spinner",name:"数值"},"date-picker":{type:"date-picker",name:"日期"},switch:{type:"switch",name:"开关"},"radio-group":{type:"radio-group",name:"单选组"},"check-box":{type:"check-box",name:"复选框"},"check-group":{type:"check-group",name:"复选框组"},"combo-list":{type:"combo-list",name:"下拉列表"},"response-form":{type:"response-form",name:"卡片面板"},"response-layout":{type:"response-layout",name:"布局容器",icon:"response-layout-3"},"response-layout-item":{type:"response-layout-item",name:"布局",icon:"response-layout-1"},"tree-grid":{type:"tree-grid",name:"树表格"},"tree-grid-column":{type:"tree-grid-column",name:"树表格列"},"data-grid":{type:"data-grid",name:"表格"},"data-grid-column":{type:"data-grid-column",name:"表格列"},module:{type:"Module",name:"模块"},component:{type:"component",name:"组件"},tabs:{type:"tabs",name:"标签页"},"tab-page":{type:"tab-page",name:"标签页项",dependentParentControl:"Tab"},"tab-toolbar-item":{type:"tab-toolbar-item",name:"标签页工具栏按钮"},"html-template":{type:"html-template",name:"模板容器"},"time-picker":{type:"time-picker",name:"时间选择"},section:{type:"section",name:"分组面板"},"section-toolbar":{type:"section-toolbar",name:"分组面板工具栏"},"section-toolbar-item":{type:"section-toolbar-item",name:"分组面板按钮"},splitter:{type:"splitter",name:"分栏面板"},"splitter-pane":{type:"splitter-pane",name:"分栏面板项",dependentParentControl:"Splitter"},"component-ref":{type:"component-ref",name:"组件引用节点"},uploader:{type:"uploader",name:"附件上传"},"page-header":{type:"page-header",name:"页头"},"page-footer":{type:"page-footer",name:"页脚"},"tab-toolbar":{type:"tab-toolbar",name:"标签页工具栏"},fieldset:{type:"fieldset",name:"分组"},"query-solution":{type:"query-solution",name:"筛选方案"},drawer:{type:"drawer",name:"抽屉"},"external-container":{type:"external-container",name:"外部容器",icon:"content-container"},"list-nav":{type:"list-nav",name:"列表导航"},"filter-bar":{type:"filter-bar",name:"筛选条"}},G={},J={};U();function Q(r,e,t=new Map,s=(n,m,y,l)=>m,a={},o=n=>n){return j[e.title]=e,$[e.title]=s,G[e.title]=a,J[e.title]=o,(n={},m=!0)=>{if(!m)return E(n,t);const y=W(n,e,t),l=Object.keys(r).reduce((i,p)=>(i[p]=r[p].default,i),{});return Object.assign(l,y)}}function X(r,e){return{customClass:e.class,customStyle:e.style}}const Y=new Map([["appearance",X]]);function Z(r,e,t){return e}const H={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://farris-design.gitee.io/list-nav.schema.json",title:"list-nav",description:"A Farris Container Component",type:"object",properties:{id:{description:"The unique identifier for a list-nav",type:"string"},type:{description:"The type string of list-nav component",type:"string",default:"list-nav"},appearance:{description:"",type:"object",properties:{class:{type:"string"},style:{type:"string"}},default:{}},contents:{description:"",type:"array",default:[]},size:{description:"",type:"object",properties:{width:{type:"number"},height:{type:"number"}},default:null},visible:{description:"",type:"boolean",default:!0}},required:["id","type","contents"]},R={title:"list-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:"string",readonly:!0}}}}},k={position:{Type:String,default:"left"},title:{Type:String,default:""},size:{Type:Number||String,default:218},collapsible:{Type:Boolean,default:!0},folded:{Type:Boolean,default:!1},disabled:{Type:Boolean,default:!1},draggable:{Type:Boolean,default:!1}},w=Q(k,H,Y,Z,R),S=c.defineComponent({name:"FListNav",props:k,emits:["collapse"],setup(r,e){const t=c.ref(r.position),s=c.ref(r.title),a=c.ref(r.folded),o=c.ref(!1);function n(y){y&&y.stopPropagation(),!r.disabled&&(o.value=!0,a.value=!a.value,e.emit("collapse",a.value))}const m=c.computed(()=>{const y={},l=["top","bottom"].indexOf(t.value)>-1?"height":"width";return y[l]=a.value?"0px":r.size+"px",y});return()=>c.createVNode("div",{class:`f-list-nav f-list-nav-${t.value}`},[c.createVNode("div",{class:"f-list-nav-in",style:m.value},[c.createVNode("div",{class:"f-list-nav-main"},[e.slots.navHeader&&c.createVNode("div",{class:"f-list-nav-header"},[e.slots.navHeader()]),!e.slots.navHeader&&s.value&&c.createVNode("div",{class:"f-list-nav-header"},[c.createVNode("div",{class:"f-list-nav-title"},[s.value])]),e.slots.navContent&&c.createVNode("div",{class:"f-list-nav-content"},[e.slots.navContent()]),e.slots.navFooter&&c.createVNode("div",{class:"f-list-nav-footer"},[e.slots.navFooter()])]),r.collapsible&&c.createVNode("div",{class:["f-list-nav-toggle-sidebar",{disabled:r.disabled,active:a.value,"splitter-pane-collapse-animate":o.value}],onClick:y=>n(y)},[c.createVNode("span",{class:"triangle"},null)])])])}});function K(r,e,t){var F;const s=t&&t.getStyles&&t.getStyles()||"",a=t&&t.getDesignerClass&&t.getDesignerClass()||"",o=c.ref();function n(){return(e==null?void 0:e.schema.componentType)==="frame"?!1:t&&t.checkCanMoveComponent?t.checkCanMoveComponent():!0}function m(){return!1}function y(){return(e==null?void 0:e.schema.componentType)==="frame"?!1:t&&t.checkCanDeleteComponent?t.checkCanDeleteComponent():!0}function l(){return(e==null?void 0:e.schema.componentType)==="frame"?!0:t&&t.hideNestedPaddingInDesginerView?t.hideNestedPaddingInDesginerView():!1}function i(f){if(!f||!f.value)return null;if(f.value.schema&&f.value.schema.type==="component")return f.value;const h=c.ref(f==null?void 0:f.value.parent),v=i(h);return v||null}function p(f=e){var T;if(t!=null&&t.getDraggableDesignItemElement)return t.getDraggableDesignItemElement(f);const{componentInstance:h,designerItemElementRef:v}=f;if(!h||!h.value)return null;const{getCustomButtons:b}=h.value;return h.value.canMove||b&&((T=b())!=null&&T.length)?v:p(f.parent)}function u(f){return!!t&&t.canAccepts(f)}function d(){return(e==null?void 0:e.schema.label)||(e==null?void 0:e.schema.title)||(e==null?void 0:e.schema.name)}function g(){}function M(f,h){var v;!f||!h||(t!=null&&t.onAcceptMovedChildElement&&t.onAcceptMovedChildElement(f,h),(v=e==null?void 0:e.setupContext)==null||v.emit("dragEnd"))}function L(f,h){const{componentType:v}=f;let b=B(v,f,h);t&&t.onResolveNewComponentSchema&&(b=t.onResolveNewComponentSchema(f,b));const T=v.toLowerCase().replace(/-/g,"_");return b&&!b.id&&b.type===v&&(b.id=`${T}_${Math.random().toString().slice(2,6)}`),b}function C(f){f&&t!=null&&t.onChildElementMovedOut&&t.onChildElementMovedOut(f)}function V(...f){if(t&&t.getPropsConfig)return t.getPropsConfig(...f)}function O(f){if(!f)return;const h=e==null?void 0:e.schema,{formSchemaUtils:v}=f;if(h&&v.getExpressions().length){const b=v.getExpressions().findIndex(T=>T.target===h.id);b>-1&&v.getExpressions().splice(b,1)}}function ae(f){t&&t.onRemoveComponent&&t.onRemoveComponent(),O(f),e!=null&&e.schema.contents&&e.schema.contents.map(h=>{let v=h.id;h.type==="component-ref"&&(v=h.component);const b=r.value.querySelectorAll(`#${v}-design-item`);b!=null&&b.length&&Array.from(b).map(T=>{var q;(q=T==null?void 0:T.componentInstance)!=null&&q.value.onRemoveComponent&&T.componentInstance.value.onRemoveComponent(f)})})}function oe(){if(t&&t.getCustomButtons)return t.getCustomButtons()}function re(f){if(t&&t.onPropertyChanged)return t.onPropertyChanged(f)}return o.value={canMove:n(),canSelectParent:m(),canDelete:y(),canNested:!l(),contents:e==null?void 0:e.schema.contents,elementRef:r,parent:(F=e==null?void 0:e.parent)==null?void 0:F.componentInstance,schema:e==null?void 0:e.schema,styles:s,designerClass:a,canAccepts:u,getBelongedComponentInstance:i,getDraggableDesignItemElement:p,getDraggingDisplayText:d,getPropConfig:V,getDragScopeElement:g,onAcceptMovedChildElement:M,onChildElementMovedOut:C,addNewChildComponentSchema:L,triggerBelongedComponentToMoveWhenMoved:!!t&&t.triggerBelongedComponentToMoveWhenMoved||c.ref(!1),triggerBelongedComponentToDeleteWhenDeleted:!!t&&t.triggerBelongedComponentToDeleteWhenDeleted||c.ref(!1),onRemoveComponent:ae,getCustomButtons:oe,onPropertyChanged:re},o}function I(){function r(e,t){var n;if(!e)return!1;const s=((n=e.targetContainer)==null?void 0:n.componentInstance)&&e.targetContainer.componentInstance.value;if(!s)return!1;const a=s.schema.type,o=t==null?void 0:t.formSchemaUtils.getComponentById(s.belongedComponentId);return!((e.componentCategory==="input"||e.componentType==="form-group")&&![D["response-layout-item"].type,D["response-form"].type,D.fieldset.type].includes(a)||(e.componentType===D.tabs.type||e.componentType===D.section.type)&&((o==null?void 0:o.componentType)!=="frame"||![D["content-container"].type,D["splitter-pane"].type,D["response-layout-item"].type].includes(a))||e.componentType===D["query-solution"].type||e.componentType===D.fieldset.type&&a!==D["response-form"].type)}return{basalDragulaRuleForContainer:r}}class x{getTemplateRule(e,t){const s=t==null?void 0:t.formSchemaUtils,a=s==null?void 0:s.getFormTemplateRule(),o={canAccept:!0,canDelete:!0,canMove:!0};if(!a)return o;const n=this.getComponentContext(e),{componentClassList:m}=n;return m.forEach(y=>{if(!y||!a[y])return;const{canMove:l,canDelete:i,canAccept:p}=a[y];o.canMove=o.canMove&&this.resolveRuleValue(l,n),o.canDelete=o.canDelete&&this.resolveRuleValue(i,n),o.canAccept=o.canAccept&&this.resolveRuleValue(p,n)}),o}resolveRuleValue(e,t){return typeof e=="boolean"?e:this.parseRuleValueSchema(e,t)}parseRuleValueSchema(e,t){const s=e.invalidContext||[];let a=!0;for(const o of s){if(o.firstLevelChild){if(o.firstLevelChild.class){const{firstLevelChildClassList:n}=t;if(n&&!n.includes(o.firstLevelChild.class)){a=!1;continue}}if(o.firstLevelChild.type){const{firstLevelChildSchema:n}=t;if(!n||n.type!==o.firstLevelChild.type){a=!1;continue}}}if(o.secondLevelChild){if(o.secondLevelChild.class){const{secondLevelChildClassList:n}=t;if(n&&!n.includes(o.secondLevelChild.class)){a=!1;continue}}if(o.secondLevelChild.type){const{secondLevelChildSchema:n}=t;if(!n||n.type!==o.secondLevelChild.type){a=!1;continue}}}if(o.parent){if(o.parent.class){const{parentClassList:n}=t;if(n&&!n.includes(o.parent.class)){a=!1;continue}}if(o.parent.type){const{parentSchema:n}=t;if(n&&n.type!==o.parent.type){a=!1;continue}}}a=!0;break}return!a}getComponentContext(e){var M,L,C,V;const t=e.schema,s=t.appearance&&t.appearance.class||"",a=s.split(" ")||[],o=t.contents||[],n=o.length?o[0]:null,m=n&&n.appearance?n.appearance.class:"",y=m?m.split(" "):[],l=(M=n==null?void 0:n.contents)!=null&&M.length?n==null?void 0:n.contents[0]:null,i=l&&l.appearance?l.appearance.class:"",p=i?i.split(" "):[],u=t.type==="component"?(C=(L=e.parent)==null?void 0:L.parent)==null?void 0:C.schema:(V=e.parent)==null?void 0:V.schema,d=u&&u.appearance&&u.appearance.class||"",g=d?d.split(" "):[];return{componentClass:s,componentClassList:a,childContents:o,firstLevelChildSchema:n,firstLevelChildClass:m,firstLevelChildClassList:y,secondLevelChildSchema:l,secondLevelChildClass:i,secondLevelChildClassList:p,parentSchema:u,parentClass:d,parentClassList:g}}}function ee(r,e){const t=new x,{canMove:s,canAccept:a,canDelete:o}=t.getTemplateRule(r,e);function n(p){return I().basalDragulaRuleForContainer(p,e)?a:!1}function m(){return"display: flex;flex-direction:column;height:100%"}function y(){return s}function l(){return o}function i(){return!s&&!o}return{canAccepts:n,getStyles:m,checkCanMoveComponent:y,checkCanDeleteComponent:l,hideNestedPaddingInDesginerView:i}}const te=c.defineComponent({name:"FListNavDesign",props:k,emits:[],setup(r,e){const t=c.ref(),s=c.inject("designer-host-service"),a=c.inject("design-item-context"),o=ee(a,s),n=K(t,a,o);n.value.canMove=!1,n.value.canNested=!1;const m=c.ref(r.position),y=c.ref(r.title),l=c.ref(!1),i=c.ref(!1),p=c.computed(()=>{const u={},d=["top","bottom"].indexOf(m.value)>-1?"height":"width";return u[d]=l.value?"0px":r.size+"px",u});return c.onMounted(()=>{t.value.componentInstance=n}),e.expose(n.value),()=>c.createVNode("div",{class:`f-list-nav f-list-nav-${m.value}`},[c.createVNode("div",{class:"f-list-nav-in",style:p.value},[c.createVNode("div",{class:"f-list-nav-main"},[e.slots.navHeader&&c.createVNode("div",{class:"f-list-nav-header"},[e.slots.navHeader()]),!e.slots.navHeader&&y.value&&c.createVNode("div",{class:"f-list-nav-header"},[c.createVNode("div",{class:"f-list-nav-title"},[y.value])]),e.slots.navContent&&c.createVNode("div",{class:"f-list-nav-content"},[e.slots.navContent()]),e.slots.navFooter&&c.createVNode("div",{class:"f-list-nav-footer"},[e.slots.navFooter()])]),r.collapsible&&c.createVNode("div",{class:["f-list-nav-toggle-sidebar",{disabled:r.disabled,active:l.value,"splitter-pane-collapse-animate":i.value}]},[c.createVNode("span",{class:"triangle"},null)])])])}}),ne={install(r){r.component(S.name,S)},register(r,e,t,s){r["list-nav"]=S,e["list-nav"]=w},registerDesigner(r,e,t){r["list-nav"]=te,e["list-nav"]=w}};N.FListNav=S,N.default=ne,N.listNavProps=k,N.propsResolver=w,Object.defineProperties(N,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});