rowvia 0.3.3 → 0.3.5

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.
Files changed (45) hide show
  1. package/dist/fields.css +1 -1
  2. package/dist/fields.es.js +1167 -1104
  3. package/dist/fields.umd.cjs +1 -1
  4. package/dist/rowvia.css +1 -1
  5. package/dist/rowvia.es.js +5834 -4698
  6. package/dist/rowvia.umd.cjs +71 -55
  7. package/dist/types/components/scrollbars.d.ts +11 -3
  8. package/dist/types/components/table-cell-content.d.ts +9 -0
  9. package/dist/types/components/table-groups.d.ts +32 -0
  10. package/dist/types/components/table-headers.d.ts +11 -0
  11. package/dist/types/components/table-inline-editor.d.ts +13 -0
  12. package/dist/types/components/table-popup.d.ts +3 -0
  13. package/dist/types/components/table-presentation.d.ts +14 -0
  14. package/dist/types/components/table-text-editor.d.ts +29 -0
  15. package/dist/types/conditions/index.d.ts +12 -0
  16. package/dist/types/contracts/work-item.d.ts +1 -1
  17. package/dist/types/fields/internal/anchored-popup.d.ts +23 -0
  18. package/dist/types/fields/popup.d.ts +7 -9
  19. package/dist/types/fields/types.d.ts +3 -0
  20. package/dist/types/index.d.ts +1 -0
  21. package/dist/types/vue/DualPanePicker.d.ts +211 -0
  22. package/dist/types/vue/controls.d.ts +3961 -0
  23. package/dist/types/vue/index.d.ts +6 -0
  24. package/dist/types/vue/registry.d.ts +10 -0
  25. package/dist/types/vue-conditions/ConditionGroup.d.ts +120 -0
  26. package/dist/types/vue-conditions/ConditionRow.d.ts +94 -0
  27. package/dist/types/vue-conditions/ConditionValue.d.ts +56 -0
  28. package/dist/types/vue-conditions/controls.d.ts +12 -0
  29. package/dist/types/vue-conditions/index.d.ts +6 -0
  30. package/dist/types/work-items/index.d.ts +13 -1
  31. package/dist/types/work-items/tool-field-picker.d.ts +14 -0
  32. package/dist/types/work-items/tool-filter.d.ts +14 -0
  33. package/dist/types/work-items/tool-icons.d.ts +1 -0
  34. package/dist/types/work-items/tool-panel.d.ts +17 -0
  35. package/dist/types/work-items/tool-state.d.ts +21 -0
  36. package/dist/types/work-items/toolbar.d.ts +10 -2
  37. package/dist/types/work-items/views/rule-panels.d.ts +2 -0
  38. package/dist/types/work-items/workflow-detail-types.d.ts +20 -0
  39. package/dist/types/work-items/workflow-field-popups.d.ts +4 -0
  40. package/dist/types/work-items/workflow-legend.d.ts +16 -0
  41. package/dist/types/work-items/workflow-presentation.d.ts +3 -0
  42. package/dist/vue.css +1 -0
  43. package/dist/vue.es.js +631 -0
  44. package/dist/vue.umd.cjs +1 -0
  45. package/package.json +27 -7
@@ -0,0 +1 @@
1
+ (function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("vue"),require("rowvia/fields")):typeof define=="function"&&define.amd?define(["exports","vue","rowvia/fields"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.RowviaVue={},s.Vue,s.RowviaFields))})(this,function(s,n,ze){"use strict";const le=Symbol("rowvia.fieldRegistry");function He(e){n.provide(le,e)}function we(e){const l=e??n.inject(le,void 0);let i;return()=>typeof l=="function"?l():l??i??(i=ze.createFieldRegistry())}const _=e=>typeof e=="string"?e===""?"string:":e:typeof e+":"+(typeof e=="object"?JSON.stringify(e):String(e)),j=e=>JSON.stringify(e),De=e=>e===""||e===!0;function Y(e){if(Array.isArray(e.children))return e.children.filter(n.isVNode);if(e.children&&typeof e.children=="object"&&"default"in e.children){const l=e.children.default();return(Array.isArray(l)?l:[l]).flatMap(i=>n.isVNode(i)?[i]:typeof i=="string"||typeof i=="number"?[n.createTextVNode(String(i))]:[])}return[]}function Z(e){return e.map(l=>typeof l.type=="object"&&/Avatar|Icon/.test(l.type.name??"")?"":typeof l.children=="string"?l.children:Z(Y(l))).join("").trim()}function Re(e){return e.flatMap(l=>{var A,w,R;const i=typeof l.type=="object"?l.type.name:l.type;return["RowviaOption","RowviaRadio","RowviaCheckbox","option"].includes(String(i))?[{value:((A=l.props)==null?void 0:A.value)??Z(Y(l)),label:String(((w=l.props)==null?void 0:w.label)??(typeof l.children=="string"?l.children:Z(Y(l)))),disabled:De((R=l.props)==null?void 0:R.disabled)}]:Re(Y(l))})}function Se(e){return e.map(l=>{if(l&&typeof l=="object"){const i=l;return{value:i.value??i.id,label:String(i.label??i.name??i.value??i.id),description:i.description,color:i.color,disabled:!!i.disabled,children:i.children?Se(i.children):void 0}}return{value:l,label:String(l)}})}function ke(e){function l(I,o,h=!1){return n.defineComponent({name:I,inheritAttrs:!1,props:{modelValue:null,value:null,checked:{type:Boolean,default:void 0},modelModifiers:{type:Object,default:()=>({})},type:String,disabled:Boolean,readonly:Boolean,loading:Boolean,required:Boolean,multiple:Boolean,pathMode:Boolean,checkStrictly:Boolean,options:Array,data:Array,placeholder:[String,Array],label:String,min:[Number,String],max:[Number,String],step:[Number,String],precision:Number,maxLength:[Number,String],maxlength:[Number,String],maxRows:[Number,String],maxSelections:[Number,String],showTime:[Boolean,Object],valueFormat:String,autoSize:[Boolean,Object],allowClear:Boolean,allowSearch:Boolean,showPlaceholder:Boolean,accept:String,maxFiles:[Number,String],maxBytes:[Number,String]},emits:{"update:modelValue":a=>!0,"update:checked":a=>!0,input:(a,O)=>!0,change:(a,O)=>!0,blur:a=>!0,focus:a=>!0,"press-enter":a=>!0,search:a=>!0,clear:()=>!0},setup(a,{attrs:O,slots:r,emit:N,expose:ma}){const de=we(e),E=n.ref();let L,u,D,ae="",J="",te=[],ue="",se=[],me=!1;const $=new Map,fe=()=>a.modelValue!==void 0?a.modelValue:a.checked!==void 0?a.checked:a.value,T=()=>o==="native"?a.type==="checkbox"?"switch":a.type==="number"||a.modelModifiers.number?"number":a.type==="date"?"date":a.type==="datetime-local"?"dateTime":["url","email","tel"].includes(a.type??"")?a.type==="tel"?"phone":a.type:"text":o==="person"?a.multiple?"multiPerson":"person":o==="select"?a.multiple?"multiSelect":"select":o==="cascadeSingle"?a.checkStrictly?a.multiple?"multiSelect":"select":a.multiple?"cascadeMulti":"cascadeSingle":o,F=()=>["select","multiSelect","person","multiPerson","radio","cascadeSingle","cascadeMulti"].includes(T());function Ce(){if(a.maxSelections!=null)return Number(a.maxSelections)}function Ve(){if(a.maxRows!=null)return Number(a.maxRows);if(a.autoSize&&typeof a.autoSize=="object"&&a.autoSize.maxRows)return a.autoSize.maxRows}function Ne(){const t=te.filter(d=>d.color).map(d=>[_(d.value),d.color]);return t.length?Object.fromEntries(t):void 0}function Te(t){if(o==="cascadeSingle"&&a.checkStrictly){const d=(k,m=[],f=[])=>k.flatMap(C=>{const B=[...m,C.value],K=_(a.pathMode?B:C.value);return $.set(K,a.pathMode?B:C.value),[{id:K,label:[...f,C.label].join(" / "),disabled:C.disabled},...d(C.children??[],B,[...f,C.label])]});return d(t)}return t.map(d=>{const k=_(d.value);return $.set(k,d.value),{id:k,label:d.label,description:d.description,color:d.color,disabled:d.disabled,children:d.children?Te(d.children):void 0}})}function ye(t,d=te,k=[]){for(const m of d){const f=[...k,m.value];if(j(m.value)===j(t))return f;const C=ye(t,m.children??[],f);if(C.length)return C}return[]}function he(t){if(T()==="switch")return Array.isArray(t)?t.some(d=>j(d)===j(a.value)):!!t;if(!F())return t;if(o==="cascadeSingle"&&a.checkStrictly)return a.multiple?Array.isArray(t)?t.map(_):[]:t==null?"":_(t);if(T()==="cascadeSingle"||T()==="cascadeMulti"){const d=a.pathMode?t:a.multiple?Array.isArray(t)?t.map(m=>ye(m)):[]:ye(t),k=m=>m.map(_);return a.multiple?Array.isArray(d)?d.map(m=>k(Array.isArray(m)?m:[])):[]:k(Array.isArray(d)?d:[])}return Array.isArray(t)?t.map(_):t==null||t===""&&!$.has(_(""))?"":_(t)}function fa(t){var d,k;if(T()==="switch"&&Array.isArray(fe())){const m=fe();return t?[...m.filter(f=>j(f)!==j(a.value)),a.value]:m.filter(f=>j(f)!==j(a.value))}if(F()){const m=f=>Array.isArray(f)?f.map(m):$.has(String(f))?$.get(String(f)):h?"":void 0;t=m(t),(T()==="cascadeSingle"||T()==="cascadeMulti")&&!a.pathMode&&(t=a.multiple?t.map(f=>f[f.length-1]):t[t.length-1])}if(a.modelModifiers.trim&&typeof t=="string"&&(t=t.trim()),a.modelModifiers.number&&typeof t=="string"&&t!==""&&!Number.isNaN(Number(t))&&(t=Number(t)),T()==="number"&&t===null)return h?"":void 0;if(["date","dateTime","dateRange"].includes(T())&&((d=a.valueFormat)!=null&&d.includes("Z"))){const m=f=>typeof f=="string"&&f&&!Number.isNaN(Date.parse(f))?new Date(f).toISOString():f;t=Array.isArray(t)?t.map(m):m(t)}if(["date","dateTime","dateRange"].includes(T())&&((k=a.valueFormat)!=null&&k.includes(" "))){const m=f=>typeof f=="string"?f.replace("T"," "):f;t=Array.isArray(t)?t.map(m):m(t)}return t}function Oe(){var t,d;se.forEach(k=>k()),se=[],D==null||D.destroy(),D=void 0,(t=u==null?void 0:u.destroy)==null||t.call(u),L==null||L.destroy(),u=void 0,L=void 0,(d=E.value)==null||d.replaceChildren()}function be(t,d,k){if(!F()&&T()!=="switch"&&!T().startsWith("date"))return k;const m=new Event(t,{bubbles:!0});return Object.defineProperty(m,"target",{value:{value:d,checked:(u==null?void 0:u.read())===!0}}),m}function ge(){var Ie,je,Be,Me,_e,Ee,Le,Fe,Ge;if(!E.value||me)return;$.clear();const t=T(),d=(Be=(je=(Ie=E.value.closest("label"))==null?void 0:Ie.querySelector(":scope > span:not(.rowvia-control)"))==null?void 0:je.textContent)==null?void 0:Be.trim(),m={key:"value",label:a.label||String(O["aria-label"]??ue??"")||String(O.title??"")||d||String(a.placeholder??"")||((Ee=(_e=(Me=E.value.closest(".arco-form-item"))==null?void 0:Me.querySelector(".arco-form-item-label"))==null?void 0:_e.textContent)==null?void 0:Ee.trim())||"字段",control:t,editable:!a.disabled&&!a.readonly,required:a.required,placeholder:Array.isArray(a.placeholder)?a.placeholder.join(" / "):a.placeholder,maxLength:a.maxLength!==void 0||a.maxlength!==void 0?Number(a.maxLength??a.maxlength):void 0,choices:Te(te.filter(c=>!(c.value===""&&c.disabled))),...Ce()!==void 0?{maxSelections:Ce()}:{},...Ve()!==void 0?{maxRows:Ve()}:{},...t==="attachment"?{attachmentOptions:{accept:a.accept,maxFiles:a.maxFiles==null?void 0:Number(a.maxFiles),maxBytes:a.maxBytes==null?void 0:Number(a.maxBytes)}}:{},...Ne()?{colors:Ne()}:{},numberOptions:{min:a.min==null?void 0:Number(a.min),max:a.max==null?void 0:Number(a.max),step:a.step==null?void 0:Number(a.step),decimals:a.precision},dateOptions:{showTime:!!a.showTime||t==="dateTime",showRange:t==="dateRange",showSeconds:(Le=a.valueFormat)==null?void 0:Le.includes("ss")}},f=j([m,a.loading,a.type,a.allowClear]),C=fe(),B=j(C)??"";if(u&&f===ae&&B===J)return;if(u&&f===ae&&!F()&&!["switch","date","dateTime","dateRange"].includes(t)){const c=q();c&&(c.value=C==null?"":String(C)),J=B;return}const K=E.value.contains(document.activeElement);if(Oe(),ae=f,J=B,L=de().create({field:m,value:he(C),readonly:a.disabled||a.readonly||a.loading,layout:["text","number","textarea","url","email","phone"].includes(t)?"compact":"form"}),u=L.createEditor(),E.value.append(u.element),a.showPlaceholder&&a.placeholder&&F()){const c=u.element.querySelector(".fc-choice-placeholder");c&&(c.textContent=Array.isArray(a.placeholder)?a.placeholder.join(" / "):String(a.placeholder))}if((a.disabled||a.readonly||a.loading)&&(F()||t.startsWith("date"))){(Fe=u.destroy)==null||Fe.call(u),L.destroy(),L=de().create({field:m,value:he(C),readonly:!0});const c=L.render();u={...c,read:()=>he(C)},E.value.replaceChildren(c.element)}const U=u.inputRoot??u.element,W=(c,x,p,qe=!1)=>{c.addEventListener(x,p,qe),se.push(()=>c.removeEventListener(x,p,qe))},Pe=c=>{if(a.disabled||a.readonly||a.loading||c.isComposing)return;if(F()&&c.type==="input"){N("search",c.target.value??"");return}if(F()&&c.type==="change"&&c.target instanceof HTMLInputElement&&!["radio","checkbox"].includes(c.target.type))return;const x=fa(u.read()),p=j(x)??"";p!==J&&(J=p,N("update:modelValue",x),t==="switch"&&N("update:checked",!!u.read())),c.type==="input"&&N("input",h?be("input",x,c):x,c),c.type==="change"&&(N("change",h?be("change",x,c):x,c),h&&(F()||t==="switch"||t.startsWith("date"))&&N("input",be("input",x,c),c),(x===void 0||x===""||Array.isArray(x)&&!x.length)&&N("clear"),t.startsWith("date")&&queueMicrotask(()=>{me||(ae="",ge())}))};W(U,"input",Pe),W(U,"change",Pe),W(U,"compositionend",c=>{var x;(x=c.target)==null||x.dispatchEvent(new Event("input",{bubbles:!0}))}),W(U,"keydown",c=>{c.key==="Enter"&&!c.isComposing&&(N("press-enter",c),I==="RowviaInputSearch"&&N("search",String((u==null?void 0:u.read())??"")))}),W(U,"focusin",c=>N("focus",c)),W(U,"focusout",c=>N("blur",c));const M=q(),ve=u.element.querySelector("select");if(ve&&O.id!=null&&(ve.id=String(O.id)),M){for(const c of["id","name","autocomplete","inputmode","spellcheck","rows","aria-label","aria-describedby","data-test","autofocus","minlength","pattern","form"])O[c]!=null&&!(c==="id"&&ve)&&M.setAttribute(c,String(O[c]));M instanceof HTMLInputElement&&["password","search","url","email","tel"].includes(a.type??"")&&(M.type=a.type),a.readonly&&(M.readOnly=!0),M instanceof HTMLTextAreaElement&&a.autoSize&&typeof a.autoSize=="object"&&(M.rows=a.autoSize.minRows??1,M.style.minHeight=`${(a.autoSize.minRows??1)*22+12}px`,a.autoSize.maxRows&&(M.style.maxHeight=`${a.autoSize.maxRows*22+12}px`,M.style.overflowY="auto"))}if(a.allowClear&&["text","textarea","number"].includes(t)&&!a.disabled&&!a.readonly){D=de().create({field:{key:"clear",label:"清空",control:"detail"},value:null,readonly:!1,onAction:()=>{const x=q();x&&(x.value="",x.dispatchEvent(new Event("input",{bubbles:!0})),x.dispatchEvent(new Event("change",{bubbles:!0})),x.focus())}});const c=D.render();c.element.classList.add("rowvia-control-clear"),E.value.append(c.element)}K&&!a.disabled&&((Ge=u.focus)==null||Ge.call(u))}function q(){const t=u==null?void 0:u.element;return t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?t:t==null?void 0:t.querySelector("input:not([hidden]),textarea")}return ma({focus:()=>{var t;return(t=u==null?void 0:u.focus)==null?void 0:t.call(u)},blur:()=>{var t;return(t=q())==null?void 0:t.blur()},select:()=>{var t;return(t=q())==null?void 0:t.select()},setSelectionRange:(t,d)=>{var k;return(k=q())==null?void 0:k.setSelectionRange(t,d)},get style(){var t;return(t=q())==null?void 0:t.style},get scrollHeight(){var t;return((t=q())==null?void 0:t.scrollHeight)??0}}),n.onMounted(ge),n.onUpdated(ge),n.onBeforeUnmount(()=>{me=!0,Oe()}),()=>{var k,m,f,C,B;const t=((k=r.default)==null?void 0:k.call(r))??[];te=a.options?Se(a.options):Re(t),ue=T()==="switch"?Z(t):"";const d={...O};for(const K of["id","name","autocomplete","inputmode","spellcheck","rows","aria-label","aria-describedby","data-test","autofocus","minlength","pattern","form"])delete d[K];return n.h("span",{...d,class:["rowvia-control rowvia-field-scope",O.class,{"rowvia-control--toggle":T()==="switch"}],"aria-busy":a.loading||void 0,"data-option-value":T()==="switch"?String(a.value??""):void 0},[(m=r.prepend)==null?void 0:m.call(r),(f=r.prefix)==null?void 0:f.call(r),n.h("span",{ref:E,class:"rowvia-control-host"}),T()==="switch"&&ue?n.h("span",{class:"rowvia-control-caption"},t):null,(C=r.suffix)==null?void 0:C.call(r),(B=r.append)==null?void 0:B.call(r)])}}})}const i=l("RowviaInput","text"),A=l("RowviaInputSearch","text"),w=l("RowviaTextarea","textarea"),R=l("RowviaInputNumber","number"),b=l("RowviaPerson","person"),g=l("RowviaSelect","select"),v=l("RowviaCascader","cascadeSingle"),V=l("RowviaRadioGroup","radio"),S=l("RowviaCheckboxGroup","multiSelect"),P=l("RowviaCheckbox","switch"),G=l("RowviaSwitch","switch"),H=l("RowviaDatePicker","date"),z=l("RowviaRangePicker","dateRange"),ie=l("RowviaNativeInput","native",!0),oe=l("RowviaNativeSelect","select",!0),ce=l("RowviaNativeTextarea","textarea",!0),re=n.defineComponent({name:"RowviaOption",props:["value","label","disabled"],setup:()=>()=>null}),y=n.defineComponent({name:"RowviaRadio",props:["value","disabled"],setup:()=>()=>null}),X=n.defineComponent({name:"RowviaOptgroup",setup:()=>()=>null}),ee=n.defineComponent({name:"RowviaAutoComplete",inheritAttrs:!1,props:{modelValue:String,data:Array,disabled:Boolean,placeholder:String},emits:{"update:modelValue":I=>!0},setup:(I,{attrs:o,emit:h})=>()=>n.h("span",{class:"rowvia-autocomplete"},[n.h(i,{...o,modelValue:I.modelValue,disabled:I.disabled,placeholder:I.placeholder,"onUpdate:modelValue":a=>h("update:modelValue",a)}),n.h(g,{options:I.data,disabled:I.disabled,label:"预设状态",placeholder:"选择预设","onUpdate:modelValue":a=>h("update:modelValue",a??"")})])});return{RowviaInput:i,RowviaInputSearch:A,RowviaTextarea:w,RowviaInputNumber:R,RowviaPerson:b,RowviaSelect:g,RowviaCascader:v,RowviaRadioGroup:V,RowviaCheckboxGroup:S,RowviaCheckbox:P,RowviaSwitch:G,RowviaDatePicker:H,RowviaRangePicker:z,RowviaNativeInput:ie,RowviaNativeSelect:oe,RowviaNativeTextarea:ce,RowviaOption:re,RowviaRadio:y,RowviaOptgroup:X,RowviaAutoComplete:ee}}const{RowviaInput:$e,RowviaInputSearch:xe,RowviaTextarea:Ke,RowviaInputNumber:Ue,RowviaPerson:We,RowviaSelect:Je,RowviaCascader:pe,RowviaRadioGroup:Ye,RowviaCheckboxGroup:Ze,RowviaCheckbox:Qe,RowviaSwitch:Xe,RowviaDatePicker:ea,RowviaRangePicker:aa,RowviaNativeInput:ta,RowviaNativeSelect:la,RowviaNativeTextarea:na,RowviaOption:ia,RowviaRadio:oa,RowviaOptgroup:ca,RowviaAutoComplete:ra}=ke();function Q(e,l,i,A,w={}){if(e)return n.h(e,{...w,options:i,modelValue:l,"onUpdate:modelValue":A});const R=!!w.multiple,b={...w};return delete b.type,delete b.size,n.h("select",{...b,value:R?void 0:String(i.findIndex(g=>Object.is(g.value,l))),onChange:g=>{var V;const v=g.target;A(R?[...v.selectedOptions].map(S=>i[Number(S.value)].value):(V=i[Number(v.value)])==null?void 0:V.value)}},[!R&&!i.some(g=>Object.is(g.value,l))?n.h("option",{value:"-1",disabled:!0},String(w.placeholder??"请选择")):null,...i.map((g,v)=>n.h("option",{key:v,value:String(v),disabled:g.disabled,selected:R&&Array.isArray(l)?l.includes(g.value):void 0},g.label))])}const da=n.defineComponent({name:"RowviaConditionGroup",props:{items:{type:Array,required:!0},combinator:{type:String,required:!0},combinators:{type:Array,default:()=>[{value:"and",label:"和"},{value:"or",label:"或"}]},controls:{type:Object,default:()=>({})},depth:{type:Number,default:0},maxDepth:{type:Number,default:2},compact:Boolean,showHeader:{type:Boolean,default:!0},removable:Boolean,canAddCondition:{type:Boolean,default:!0},classes:{type:Object,default:()=>({})},labels:{type:Object,default:()=>({})}},emits:{"update:combinator":e=>!0,addCondition:()=>!0,addGroup:()=>!0,remove:()=>!0},setup(e,{slots:l,emit:i}){return()=>{var A,w;return n.h("div",{class:"rv-condition-group"},[e.showHeader?n.h("div",{class:e.classes.header??"rv-condition-group__header",style:{display:"flex",alignItems:"center",gap:"8px"}},[Q(e.controls.radioGroup??e.controls.select,e.combinator,e.combinators,R=>i("update:combinator",String(R)),{type:"button",size:"small","aria-label":"条件组关系"}),(A=l.header)==null?void 0:A.call(l),e.removable?n.h("button",{type:"button",class:e.classes.remove,"data-condition-action":"remove-group",onClick:()=>i("remove")},e.labels.remove??"删除组"):null]):null,...e.items.map((R,b)=>{var g,v;return e.classes.row?n.h("div",{key:b,class:e.classes.row},(g=l.default)==null?void 0:g.call(l,{node:R,index:b})):n.h(n.Fragment,{key:b},(v=l.default)==null?void 0:v.call(l,{node:R,index:b}))}),!e.items.length&&e.labels.empty!==""?n.h("div",{class:e.classes.empty??"rv-condition-group__empty"},e.labels.empty??"暂无条件"):null,n.h("div",{class:e.classes.actions??"rv-condition-group__actions",style:{display:"flex",alignItems:"center",gap:"4px"}},[n.h("button",{type:"button",class:e.classes.button,disabled:!e.canAddCondition,"data-condition-action":"add-condition",onClick:()=>i("addCondition")},e.labels.addCondition??"添加条件"),!e.compact&&e.depth<e.maxDepth?n.h("button",{type:"button",class:e.classes.button,"data-condition-action":"add-group",onClick:()=>i("addGroup")},e.labels.addGroup??"添加子组"):(w=l.limit)==null?void 0:w.call(l)])])}}});function ne(e,l,i){const A=Array.isArray(e)?[...e]:[void 0,void 0];return A[l]=i,A}const Ae=n.defineComponent({name:"RowviaConditionValue",inheritAttrs:!1,props:{modelValue:null,kind:{type:String,default:"text"},controls:{type:Object,default:()=>({})},options:{type:Array,default:()=>[]},multiple:Boolean,controlProps:{type:Object,default:()=>({})}},emits:{"update:modelValue":e=>!0},setup(e,{attrs:l,slots:i,emit:A}){const w=b=>A("update:modelValue",b);function R(b,g,v,V){const S=b==="number"?e.controls.number:b==="date"?e.controls.date:e.controls.input;return S?n.h(S,{...V,modelValue:g,"onUpdate:modelValue":v}):n.h("input",{...V,type:b,value:g??"",onInput:P=>{const G=P.target;P.isComposing||v(b==="number"?G.value===""?void 0:G.valueAsNumber:G.value)},onCompositionend:P=>v(P.target.value)})}return()=>{if(i.default)return i.default({value:e.modelValue,update:w});const b={...l,...e.controlProps};if(e.kind==="options"||e.kind==="boolean")return Q(e.controls.select,e.modelValue,e.kind==="boolean"?[{value:!0,label:"是"},{value:!1,label:"否"}]:e.options,w,{...b,multiple:e.multiple});if(e.kind==="date-range"&&e.controls.dateRange)return n.h(e.controls.dateRange,{...b,modelValue:e.modelValue,"onUpdate:modelValue":w});if(e.kind==="number-range"||e.kind==="date-range"){const g=Array.isArray(e.modelValue)?e.modelValue:[],v=e.kind==="number-range"?"number":"date";return n.h("div",{...l,style:[{display:"flex",alignItems:"center",gap:"8px"},l.style]},[R(v,g[0],V=>w(ne(e.modelValue,0,V)),{...e.controlProps,placeholder:"最小值",style:{minWidth:0,flex:1}}),n.h("span","至"),R(v,g[1],V=>w(ne(e.modelValue,1,V)),{...e.controlProps,placeholder:"最大值",style:{minWidth:0,flex:1}})])}return R(e.kind,e.modelValue,w,b)}}}),ua=n.defineComponent({name:"RowviaConditionRow",props:{field:String,operator:String,value:null,fields:{type:Array,default:()=>[]},operators:{type:Array,default:()=>[]},controls:{type:Object,default:()=>({})},noValue:Boolean,disabled:Boolean,valueKind:{type:String,default:"text"},classes:{type:Object,default:()=>({})},fieldProps:{type:Object,default:()=>({})},operatorProps:{type:Object,default:()=>({})}},emits:{"update:field":e=>!0,"update:operator":e=>!0,"update:value":e=>!0,remove:()=>!0},setup(e,{slots:l,emit:i}){return()=>{var A,w,R,b,g,v,V;return n.h("div",{class:"rv-condition-row",style:{display:"flex",alignItems:"center",gap:"8px"}},[((A=l.field)==null?void 0:A.call(l,{value:e.field,update:S=>i("update:field",S)}))??Q(e.controls.select,e.field,e.fields,S=>i("update:field",String(S??"")),{class:e.classes.field,placeholder:"选择字段",...e.fieldProps}),((w=l.operator)==null?void 0:w.call(l,{value:e.operator,update:S=>i("update:operator",S)}))??Q(e.controls.select,e.operator,e.operators,S=>i("update:operator",String(S??"")),{class:e.classes.operator,placeholder:"运算符",disabled:e.disabled,...e.operatorProps}),e.noValue||(R=e.operators.find(S=>S.value===e.operator))!=null&&R.noValue?(b=l["no-value"])==null?void 0:b.call(l):((g=l.value)==null?void 0:g.call(l,{value:e.value,update:S=>i("update:value",S)}))??n.h(Ae,{class:e.classes.value,kind:e.valueKind,modelValue:e.value,controls:e.controls,"onUpdate:modelValue":S=>i("update:value",S)}),(v=l.after)==null?void 0:v.call(l),((V=l.remove)==null?void 0:V.call(l,{remove:()=>i("remove")}))??n.h("button",{type:"button",class:e.classes.remove,"aria-label":"删除条件","data-condition-action":"remove",onClick:()=>i("remove")},"×")])}}}),sa=n.defineComponent({name:"DualPanePicker",props:{modelValue:{type:Array,required:!0},items:{type:Array,required:!0},disabled:Boolean,disabledKeys:{type:Array,default:()=>[]},checkedKeys:{type:Array,default:()=>[]},excludedKeys:{type:Array,default:()=>[]},searchable:{type:Boolean,default:!0},searchPlaceholder:{type:String,default:"搜索"},searchAriaLabel:{type:String,default:""},groupLabel:{type:String,default:""},selectAll:{type:Boolean,default:!0},clearable:{type:Boolean,default:!0},totalText:{type:String,default:"总计"},selectedText:{type:String,default:"已选择"},selectAllText:{type:String,default:"全选"},unselectAllText:{type:String,default:"取消全选"},clearText:{type:String,default:"清空"},removeText:{type:String,default:"移除"},disabledHint:{type:String,default:"不可选"},emptyText:{type:String,default:"暂无内容"},selectedEmptyText:{type:String,default:"暂无数据"},height:{type:String,default:"420px"}},emits:{"update:modelValue":e=>!0},setup(e,{emit:l,slots:i}){const A=n.ref(""),w=n.computed(()=>new Map(e.items.map(o=>[o.key,o]))),R=n.computed(()=>new Set(e.modelValue)),b=n.computed(()=>new Set(e.excludedKeys)),g=n.computed(()=>e.modelValue.map(o=>w.value.get(o)??{key:o,label:o})),v=n.computed(()=>{const o=A.value.trim().toLowerCase();return e.items.filter(h=>!b.value.has(h.key)).filter(h=>!o||`${h.label} ${h.sublabel??""} ${h.key}`.toLowerCase().includes(o))}),V=n.computed(()=>v.value.filter(H)),S=n.computed(()=>V.value.length>0&&V.value.every(o=>R.value.has(o.key)));function P(o){return R.value.has(o)||e.checkedKeys.includes(o)}function G(o){return!!o.disabled||e.disabledKeys.includes(o.key)}function H(o){return!e.disabled&&!G(o)}function z(o){l("update:modelValue",[...new Set(o)])}function ie(o){H(o)&&z(P(o.key)?e.modelValue.filter(h=>h!==o.key):[...e.modelValue,o.key])}function oe(o){e.disabled||e.disabledKeys.includes(o)||z(e.modelValue.filter(h=>h!==o))}function ce(){e.disabled||z(e.modelValue.filter(o=>e.disabledKeys.includes(o)))}function re(){if(e.disabled)return;const o=V.value.map(h=>h.key);if(S.value){const h=new Set(o);z(e.modelValue.filter(a=>!h.has(a)))}else z([...e.modelValue,...o])}const y=o=>`dual-pane-picker__${o}`,X=o=>o.avatarText||o.avatarColor?n.h("span",{class:y("avatar"),style:{background:o.avatarColor||"#8f5cf7"}},(o.avatarText??o.label).slice(0,1)):null,ee=o=>n.h("span",{class:y("body")},[n.h("span",{class:y("name")},o.label),o.sublabel?n.h("small",{class:y("sub")},o.sublabel):null]),I=(o,h)=>n.h("button",{type:"button",class:y("link"),disabled:e.disabled,onClick:h},o);return()=>{var o,h,a,O;return n.h("div",{class:["dual-pane-picker",{"dual-pane-picker--disabled":e.disabled}],style:{height:e.height}},[n.h("section",{class:[y("pane"),y("pane--left")]},[e.searchable?n.h(xe,{modelValue:A.value,"onUpdate:modelValue":r=>{A.value=r},class:y("search"),placeholder:e.searchPlaceholder,"aria-label":e.searchAriaLabel||e.searchPlaceholder,disabled:e.disabled}):null,n.h("div",{class:y("head")},[n.h("span",{class:y("count")},((o=i.total)==null?void 0:o.call(i,{count:v.value.length}))??`${e.totalText}:${v.value.length}`),e.selectAll&&V.value.length?I(S.value?e.unselectAllText:e.selectAllText,re):null]),n.h("div",{class:y("list"),role:"listbox","aria-multiselectable":"true"},[e.groupLabel?n.h("p",{class:y("group")},e.groupLabel):null,...v.value.map(r=>{var N;return n.h("button",{key:r.key,type:"button",role:"option",class:[y("item"),{"is-selected":P(r.key)}],"aria-selected":P(r.key),disabled:!H(r),onClick:()=>ie(r)},((N=i.item)==null?void 0:N.call(i,{item:r,selected:P(r.key),disabled:!H(r)}))??[n.h("span",{class:[y("check"),{"is-checked":P(r.key)}],"aria-hidden":"true"}),X(r),ee(r),G(r)?n.h("small",{class:y("tag")},e.disabledHint):null])}),v.value.length?null:n.h("p",{class:y("empty")},((h=i.empty)==null?void 0:h.call(i,{side:"candidate"}))??e.emptyText)])]),n.h("section",{class:[y("pane"),y("pane--right")]},[n.h("div",{class:y("head")},[n.h("span",{class:y("count")},((a=i["selected-count"])==null?void 0:a.call(i,{count:e.modelValue.length}))??`${e.selectedText}:${e.modelValue.length}`),e.clearable&&e.modelValue.length?I(e.clearText,ce):null]),n.h("div",{class:y("list")},[...g.value.map(r=>{var N;return n.h("button",{key:r.key,type:"button",class:[y("item"),y("item--selected")],"aria-label":`${e.removeText} ${r.label}`,disabled:e.disabled||e.disabledKeys.includes(r.key),onClick:()=>oe(r.key)},((N=i["selected-item"])==null?void 0:N.call(i,{item:r,disabled:e.disabled||e.disabledKeys.includes(r.key)}))??[X(r),ee(r),!e.disabled&&!e.disabledKeys.includes(r.key)?n.h("span",{class:y("remove"),"aria-hidden":"true"},"×"):null])}),e.modelValue.length?null:n.h("p",{class:y("empty")},((O=i["selected-empty"])==null?void 0:O.call(i,{side:"selected"}))??e.selectedEmptyText)])])])}}});s.DualPanePicker=sa,s.RowviaAutoComplete=ra,s.RowviaCascader=pe,s.RowviaCheckbox=Qe,s.RowviaCheckboxGroup=Ze,s.RowviaConditionGroup=da,s.RowviaConditionRow=ua,s.RowviaConditionValue=Ae,s.RowviaDatePicker=ea,s.RowviaInput=$e,s.RowviaInputNumber=Ue,s.RowviaInputSearch=xe,s.RowviaNativeInput=ta,s.RowviaNativeSelect=la,s.RowviaNativeTextarea=na,s.RowviaOptgroup=ca,s.RowviaOption=ia,s.RowviaPerson=We,s.RowviaRadio=oa,s.RowviaRadioGroup=Ye,s.RowviaRangePicker=aa,s.RowviaSelect=Je,s.RowviaSwitch=Xe,s.RowviaTextarea=Ke,s.createRowviaControls=ke,s.provideRowviaFieldRegistry=He,s.rowviaFieldRegistryKey=le,s.updateConditionRange=ne,s.useRowviaFieldRegistry=we,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,26 +1,31 @@
1
1
  {
2
2
  "name": "rowvia",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "零运行时依赖的 TypeScript 数据表格、甘特图与人员排期组件库",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
8
8
  "build": "npm run build:demo && npm run build:lib",
9
9
  "build:demo": "vite build",
10
- "build:lib": "vite build --config vite.lib.config.ts && vite build --config vite.fields.config.ts && npm run build:types",
10
+ "build:lib": "vite build --config vite.lib.config.ts && vite build --config vite.fields.config.ts && vite build --config vite.vue.config.ts && npm run build:types",
11
11
  "preview": "vite preview",
12
12
  "typecheck": "tsc --noEmit",
13
- "test": "esbuild src/index.ts --bundle --format=esm --outfile=dist-test/rowvia.mjs --loader:.ts=ts --log-level=error && node test/smoke.mjs && node test/gantt.mjs && node test/personnel.mjs && node test/work-items.mjs && node test/fields.mjs && node test/field-controls.mjs && node test/form-surface.mjs && node test/field-interactions.mjs && node test/node-flow.mjs && node test/workflow-detail.mjs && node test/detail-comments.mjs && node test/detail-history.mjs && node test/refactor.mjs",
13
+ "test": "esbuild src/index.ts --bundle --format=esm --outfile=dist-test/rowvia.mjs --loader:.ts=ts --log-level=error && node test/smoke.mjs && node test/gantt.mjs && node test/personnel.mjs && node test/work-items.mjs && node test/fields.mjs && node test/field-controls.mjs && node test/form-surface.mjs && node test/field-interactions.mjs && node test/node-flow.mjs && node test/workflow-detail.mjs && node test/detail-comments.mjs && node test/detail-history.mjs && node test/refactor.mjs && node test/header-context-menu.mjs && node --test test/table-presentation.mjs && node test/work-item-presentation.mjs",
14
+ "test:header-context-menu": "esbuild src/index.ts --bundle --format=esm --outfile=dist-test/rowvia.mjs --loader:.ts=ts --log-level=error && node test/header-context-menu.mjs",
14
15
  "test:work-items": "node test/work-items.mjs",
15
16
  "test:node-flow": "node test/node-flow.mjs",
16
17
  "test:workflow-detail": "node test/workflow-detail.mjs",
17
18
  "test:form-surface": "node test/form-surface.mjs",
18
19
  "build:types": "tsc -p tsconfig.build.json && node scripts/clean-types.mjs",
19
- "prepublishOnly": "npm run test:architecture && npm run lint && npm test && npm run build:lib && npm run test:pages",
20
+ "prepublishOnly": "npm run test:architecture && npm run lint && npm test && npm run test:vue && npm run build:lib && npm run test:pages && npm run test:package",
20
21
  "test:pages": "node test/pages.mjs",
21
22
  "lint": "eslint .",
22
23
  "test:architecture": "node scripts/check-dependencies.mjs",
23
- "check": "npm run test:architecture && npm run typecheck && npm run lint && npm test && npm run build && npm run test:pages",
24
+ "check": "npm run test:architecture && npm run typecheck && npm run lint && npm test && npm run test:vue && npm run build && npm run test:pages && npm run test:package",
25
+ "test:vue": "node test/vue.mjs",
26
+ "test:package": "node test/package-entrypoints.mjs",
27
+ "test:table-presentation": "node --test test/table-presentation.mjs",
28
+ "test:work-item-presentation": "node test/work-item-presentation.mjs",
24
29
  "test:comments": "node test/detail-comments.mjs",
25
30
  "test:history": "node test/detail-history.mjs"
26
31
  },
@@ -32,7 +37,16 @@
32
37
  "jsdom": "^30.1.0",
33
38
  "typescript": "^5.6.0",
34
39
  "typescript-eslint": "^8.70.1",
35
- "vite": "^5.4.0"
40
+ "vite": "^5.4.0",
41
+ "vue": "^3.5.13"
42
+ },
43
+ "peerDependencies": {
44
+ "vue": "^3.5.13"
45
+ },
46
+ "peerDependenciesMeta": {
47
+ "vue": {
48
+ "optional": true
49
+ }
36
50
  },
37
51
  "main": "./dist/rowvia.umd.cjs",
38
52
  "module": "./dist/rowvia.es.js",
@@ -52,7 +66,13 @@
52
66
  "import": "./dist/fields.es.js",
53
67
  "require": "./dist/fields.umd.cjs"
54
68
  },
55
- "./fields/style.css": "./dist/fields.css"
69
+ "./fields/style.css": "./dist/fields.css",
70
+ "./vue": {
71
+ "types": "./dist/types/vue/index.d.ts",
72
+ "import": "./dist/vue.es.js",
73
+ "require": "./dist/vue.umd.cjs"
74
+ },
75
+ "./vue/style.css": "./dist/vue.css"
56
76
  },
57
77
  "files": [
58
78
  "dist"