@shwfed/config 2.7.7 → 2.8.0
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.
- package/dist/mcp.mjs +128 -55
- package/dist/module.json +1 -1
- package/dist/preview/assets/{badge-B0tiCpa_.js → badge-BI1mdo92.js} +1 -1
- package/dist/preview/assets/{config-jDPbLgBr.js → config-BNF2r9jW.js} +1 -1
- package/dist/preview/assets/{config-CGvnv-5x.js → config-BxuGYvER.js} +1 -1
- package/dist/preview/assets/{config-GCvXe12z.js → config-Cy5w3JWQ.js} +1 -1
- package/dist/preview/assets/{config-BG9TRQcv.js → config-DqUnpWZk.js} +1 -1
- package/dist/preview/assets/{config-C-XJ-8Rs.js → config-Du5SuNSb.js} +1 -1
- package/dist/preview/assets/{config-Dafqx9xC.js → config-DuzQXHvg.js} +1 -1
- package/dist/preview/assets/{config-Bfb2sH6S.js → config-OrJljNWU.js} +1 -1
- package/dist/preview/assets/{config-DqMRy1WL.js → config-XgVqueyq.js} +1 -1
- package/dist/preview/assets/{config-DDPihojt.js → config-ggyCcWNZ.js} +1 -1
- package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-DBXfCj4Q.js → definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js} +1 -1
- package/dist/preview/assets/{index-D7jDE3kp.js → index-BvLLQuQr.js} +1 -1
- package/dist/preview/assets/{index-B0PL01fm.css → index-DsMR5NfK.css} +1 -1
- package/dist/preview/assets/{index-CHzOsSTW.js → index-Yv78vz4W.js} +168 -168
- package/dist/preview/assets/index-yrBKwEfk.js +1 -0
- package/dist/preview/assets/{item-DV-Garrg.js → item-DMtXi_cx.js} +1 -1
- package/dist/preview/assets/{runtime-DKtlQWwc.js → runtime-2S3Yr051.js} +1 -1
- package/dist/preview/assets/{runtime-UmLaEUGf.js → runtime-BUPuX-Gq.js} +1 -1
- package/dist/preview/assets/{runtime-BovPWken.js → runtime-C4jFTZ4Z.js} +1 -1
- package/dist/preview/assets/{runtime-DA77AmOP.js → runtime-CA58Mif7.js} +1 -1
- package/dist/preview/assets/{runtime-BxBBFFHA.js → runtime-CWqQzWuc.js} +1 -1
- package/dist/preview/assets/{runtime-D-LBi56N.js → runtime-CjJBU_e1.js} +1 -1
- package/dist/preview/assets/{runtime-DHTqFEQI.js → runtime-DeUmGsM_.js} +1 -1
- package/dist/preview/assets/{runtime-CwmJ9MLQ.js → runtime-DnXoWy2A.js} +1 -1
- package/dist/preview/assets/{runtime-Cyjx6haa.js → runtime-wVZ1xP8L.js} +1 -1
- package/dist/preview/index.html +2 -2
- package/dist/runtime/components/block-layout-editor/index.vue +1 -4
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +2 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +2 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +2 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +2 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +2 -0
- package/dist/runtime/components/config/blocks/2026-05-17/com.shwfed.block.chart.xy/config.vue +5 -0
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/config.vue +2 -0
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.d.ts +5 -0
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.js +8 -3
- package/dist/runtime/components/form/config.vue +24 -16
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/runtime.vue +12 -1
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/schema.d.ts +8 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/schema.js +3 -3
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.d.vue.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue +15 -25
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue.d.ts +2 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/runtime.vue +11 -2
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/schema.d.ts +1 -1
- package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/schema.js +4 -4
- package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/config.d.vue.ts +2 -0
- package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/config.vue.d.ts +2 -0
- package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.d.ts +2 -0
- package/dist/runtime/components/form/index.vue +5 -1
- package/dist/runtime/components/form/schema.d.ts +1 -1
- package/dist/runtime/components/form/schema.js +6 -1
- package/dist/runtime/components/form/utils/form-vars.js +2 -0
- package/dist/runtime/components/form/utils/schema-meta.d.ts +2 -0
- package/dist/runtime/components/form/utils/schema-meta.js +24 -0
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/config.vue +30 -36
- package/dist/runtime/components/table/index.d.vue.ts +2 -0
- package/dist/runtime/components/table/index.vue +8 -0
- package/dist/runtime/components/table/index.vue.d.ts +2 -0
- package/dist/runtime/components/table/schema.d.ts +4 -0
- package/dist/runtime/components/table/schema.js +4 -0
- package/dist/runtime/components/ui/expression-editor/ExpressionEditor.d.vue.ts +4 -3
- package/dist/runtime/components/ui/expression-editor/ExpressionEditor.vue +135 -111
- package/dist/runtime/components/ui/expression-editor/ExpressionEditor.vue.d.ts +4 -3
- package/dist/runtime/share/expression.d.ts +23 -0
- package/dist/runtime/share/expression.js +37 -17
- package/dist/runtime/share/use-persisted-query.d.ts +21 -0
- package/dist/runtime/share/use-persisted-query.js +33 -0
- package/dist/runtime/vendor/cel-js/CLAUDE.md +2 -2
- package/dist/runtime/vendor/cel-js/PROMPT.md +15 -6
- package/dist/runtime/vendor/cel-js/lib/macros.js +66 -14
- package/package.json +1 -1
- package/dist/preview/assets/index-CSfKAdi7.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b2 as e}from"./index-Yv78vz4W.js";import{b3 as f,b4 as r,b5 as s}from"./index-Yv78vz4W.js";export{f as TableConfig,r as createTableConfig,e as default,s as getColumnTechnicalKey};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as q,u as B,o as O,w as y,a as M,c as E,n as T,b as V,r as x,e as o,g as z,f as A,h as s,i as J,j as L,p as P,l as U,k as W,m as D,q as g,s as G,t as h,v as H}from"./index-
|
|
1
|
+
import{d as q,u as B,o as O,w as y,a as M,c as E,n as T,b as V,r as x,e as o,g as z,f as A,h as s,i as J,j as L,p as P,l as U,k as W,m as D,q as g,s as G,t as h,v as H}from"./index-Yv78vz4W.js";import K from"./index-BvLLQuQr.js";const X=q({name:"ShwfedBlockAnimatedNumberItem",__name:"item",props:{item:{}},setup(b){const n=b,j=G(),a=x(void 0),m=x(0);function u(){return D(j)}function S(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()!==""){const t=Number(e);return Number.isFinite(t)?t:0}return 0}const d=o(()=>a.value===void 0?g():H(a.value));function v(e){if(!e)return"";try{const t=h(s(e,{...u(),json:d.value}));return t==null?"":String(t)}catch{return""}}const w=o(()=>v(n.item.prefix)),_=o(()=>v(n.item.suffix));function C(e){if(e)try{const t=h(s(e,{...u(),json:d.value}));return t==null?void 0:typeof t=="string"||typeof t=="object"?t:String(t)}catch{return}}const F=o(()=>C(n.item.style));async function r(){const e=n.item.dataSource,t=u(),N=z(function*(){let i=g();e.request&&(i=yield*A(yield*s(e.request,t)));const k=yield*s(e.value,{...t,json:i});return{json:J(i),value:k}});try{const i=await L(P(N,U));a.value=i.json,m.value=S(i.value)}catch(i){console.warn("[shwfed-animated-number] fetch failed",i)}}const l=o(()=>(n.item.pollingInterval??0)>0),I=o(()=>Math.max(1,n.item.pollingInterval??1)*1e3),c=W(),{pause:p,resume:f}=B(()=>{r()},I,{immediate:!1});return O(()=>{r(),l.value&&c.value&&f()}),y(c,e=>{l.value&&(e?(r(),f()):p())}),y(()=>[n.item.dataSource.request??"",n.item.dataSource.value,n.item.pollingInterval??0].join("|"),()=>{r(),l.value&&c.value?f():p()}),(e,t)=>(M(),E(V(K),{value:m.value,prefix:w.value,suffix:_.value,style:T(F.value)},null,8,["value","prefix","suffix","style"]))}});export{X as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as l,G as u,g,aE as m,M as d,aF as p,aG as x,aH as E,c as _,b as h,h as k,m as w,aI as C,s as I,aJ as b,a as v}from"./index-
|
|
1
|
+
import{d as l,G as u,g,aE as m,M as d,aF as p,aG as x,aH as E,c as _,b as h,h as k,m as w,aI as C,s as I,aJ as b,a as v}from"./index-Yv78vz4W.js";import{_ as y}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";const R=l({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const n=s,{locale:i}=u(),a=I(),t=(e,o)=>k(e,{...w(a),...o}),r=b(),c=C(),f=g(function*(){if(c&&!(yield*m(()=>c())))return;const e=d(n.config.markdown,i.value)??"",o=p(e,t);(yield*x({content:o,icon:n.config.icon,color:n.config.color}))||(yield*E(n.config.expression,t,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:r,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(v(),_(y,{"action-id":s.buttonId,effect:h(f)},null,8,["action-id","effect"]))}});export{R as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as u,G as i,c as l,b as p,e as m,a as d,J as f,M as _,aF as k,h as w,m as x,s as g}from"./index-
|
|
1
|
+
import{d as u,G as i,c as l,b as p,e as m,a as d,J as f,M as _,aF as k,h as w,m as x,s as g}from"./index-Yv78vz4W.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(n){const o=n,{locale:t}=i(),a=g(),c=(e,s)=>w(e,{...x(a),...s}),r=m(()=>{const e=_(o.config.content,t.value)??"";return k(e,c)});return(e,s)=>(d(),l(p(f),{"data-slot":"buttons-markdown",source:r.value,class:"prose prose-sm prose-zinc px-1"},null,8,["source"]))}});export{B as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as u,aK as p,aE as m,aL as a,aM as g,aH as d,c as l,b as x,h as E,m as _,aI as h,s as C,aJ as I,a as b}from"./index-
|
|
1
|
+
import{d as u,aK as p,aE as m,aL as a,aM as g,aH as d,c as l,b as x,h as E,m as _,aI as h,s as C,aJ as I,a as b}from"./index-Yv78vz4W.js";import{_ as v}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";const R=u({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(t){const e=t,c=C(),i=(n,s)=>E(n,{..._(c),...s}),r=I(),o=h(),f=p(()=>{const n=o?m(()=>o()):a(!0);return g(n,s=>s?d(e.config.expression,i,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:r,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}}):a(void 0))});return(n,s)=>(b(),l(v,{"action-id":t.buttonId,effect:x(f)},null,8,["action-id","effect"]))}});export{R as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as _,aK as E,g as S,aQ as r,aV as m,aW as b,aX as j,c as v,b as x,h as B,m as L,aJ as k,s as C,a as R}from"./index-
|
|
1
|
+
import{d as _,aK as E,g as S,aQ as r,aV as m,aW as b,aX as j,c as v,b as x,h as B,m as L,aJ as k,s as C,a as R}from"./index-Yv78vz4W.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";const q=_({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=C(),t=(e,n)=>B(e,{...L(g),...n}),l=k(),p=new Set(["success","error","warning","info"]);function f(e){const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=e.name,document.body.appendChild(o),o.click(),o.remove(),URL.revokeObjectURL(n)}const y=E(()=>S(function*(){const{template:e,messageExpression:n,resultExpression:o}=c.config,u=yield*t(e.request);if(!e.download){const s=yield*u.file();return yield*r(()=>f(s)),yield*m(l,c.config.onSuccess)}const a={json:yield*u.json()},i=o===void 0?"success":yield*b(t(o,a),s=>p.has(s)?s:"success");if(n!==void 0){const s=yield*t(n,a);yield*r(()=>j[i](s))}if(i==="success"||i==="info"){const w=yield*(yield*t(e.download,a)).file();yield*r(()=>f(w))}const h={success:c.config.onSuccess,warning:c.config.onWarning,error:c.config.onError,info:c.config.onInfo};return yield*m(l,h[i])}));return(e,n)=>(R(),v(T,{"action-id":d.buttonId,effect:x(y)},null,8,["action-id","effect"]))}});export{q as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as l,aY as g,aK as A,aM as y,aV as h,c as _,b,h as S,m as j,aJ as k,aZ as C,a as B,s as O}from"./index-
|
|
1
|
+
import{d as l,aY as g,aK as A,aM as y,aV as h,c as _,b,h as S,m as j,aJ as k,aZ as C,a as B,s as O}from"./index-Yv78vz4W.js";import{_ as x}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";const I=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(r){const s=r,i=O(),f=(e,t)=>S(e,{...j(i),...t}),n=g(),c=n.kind==="form"&&n.parent?n.parent:n,u=k(),m=C((e,t,a)=>{if(Array.isArray(e[t])&&Array.isArray(a))return e[t]=a,!0});function o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e,t){return o(e)&&o(t)?m({...t},e):t}const d=A(()=>y(f(s.config.expression),e=>{for(const t of Object.keys(e)){const a=p(c.getAt(t),e[t]);c.setAt(t,a)}return h(u,s.config.onSuccess)}));return(e,t)=>(B(),_(x,{"action-id":r.buttonId,effect:b(d)},null,8,["action-id","effect"]))}});export{I as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as i,G as x,aO as M,g as T,M as c,aP as p,t as S,c as b,H as d,b as u,r as N,y as k,aJ as I,aQ as L,a as H,S as w,n as A,I as r,aR as F,aS as R,ax as V,s as $,aT as f,D as m,aU as j}from"./index-
|
|
1
|
+
import{d as i,G as x,aO as M,g as T,M as c,aP as p,t as S,c as b,H as d,b as u,r as N,y as k,aJ as I,aQ as L,a as H,S as w,n as A,I as r,aR as F,aS as R,ax as V,s as $,aT as f,D as m,aU as j}from"./index-Yv78vz4W.js";import{_ as z}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";const Y=i({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(n){const a=n,{locale:l}=x(),v=e=>{},g=$(),s=k(f,void 0),h=I(),o=N(null),C=M(a.buttonId,{close:()=>L(()=>{o.value?.()})},h),y=i({name:"ModalBoundaryBridge",setup(e,{slots:t}){return R(g),m(j,C),s&&m(f,s),()=>t.default?.()}}),E=(e,t)=>V()?.(e,t),_=T(function*(){const e=c(a.config.modalTitle,l.value)??c(a.buttonTitle,l.value)??"",{modal:t,close:B}=yield*p({title:e,width:a.config.modalWidth});o.value=()=>S(B()),yield*t,o.value=null});return(e,t)=>(H(),b(z,{"action-id":n.buttonId,effect:u(_)},{default:d(()=>[w("div",{style:A(n.config.modalMinHeight?`min-height: ${n.config.modalMinHeight}`:void 0)},[r(u(y),null,{default:d(()=>[r(F,{"slot-value":n.config.slot,configure:v,"find-entry":E},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{Y as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as n}from"./definition.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import{_ as n}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";import{d as o,c as a,b as c,a as f,aN as i}from"./index-Yv78vz4W.js";const _=o({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(t){const e=i;return(r,s)=>(f(),a(n,{"action-id":t.buttonId,effect:c(e)},null,8,["action-id","effect"]))}});export{_ as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as c}from"./definition.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import{_ as c}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";import{d as s,aK as o,aV as i,c as r,b as f,aJ as u,a as m}from"./index-Yv78vz4W.js";const g=s({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const n=e,t=u(),a=o(()=>i(t,n.config.triggers));return(p,d)=>(m(),r(c,{"action-id":e.buttonId,effect:f(a)},null,8,["action-id","effect"]))}});export{g as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as f,aK as u,aM as l,aE as d,c as m,b as w,h as p,m as h,s as _,a as g}from"./index-
|
|
1
|
+
import{d as f,aK as u,aM as l,aE as d,c as m,b as w,h as p,m as h,s as _,a as g}from"./index-Yv78vz4W.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-lEhYVEcN.js";function v(){return{resolve:e=>({href:new URL(e,window.location.href).href})}}function x(e,t){return window.location.assign(e),Promise.resolve()}const B=f({name:"ShwfedNavigationActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=e,i=v(),a=_(),r=(n,o)=>p(n,{...h(a),...o});function c(n){try{return new URL(n,window.location.href).origin!==window.location.origin}catch{return!1}}const s=u(()=>l(r(t.config.url),n=>d(async()=>{const o=c(n);if(t.config.mode==="_blank"){window.open(o?n:i.resolve(n).href,"_blank");return}await x(n)})));return(n,o)=>(g(),m(b,{"action-id":e.buttonId,effect:w(s)},null,8,["action-id","effect"]))}});export{B as default};
|
package/dist/preview/index.html
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
`--primary`, the primary button variant renders as transparent. */
|
|
11
11
|
body { --primary: #009689; }
|
|
12
12
|
</style>
|
|
13
|
-
<script type="module" crossorigin src="./assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
13
|
+
<script type="module" crossorigin src="./assets/index-Yv78vz4W.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="./assets/index-DsMR5NfK.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="app"></div>
|
|
@@ -195,9 +195,8 @@ function recenter() {
|
|
|
195
195
|
const frame = activeFrame.value;
|
|
196
196
|
const frameW = frame.cols * stepPx.value;
|
|
197
197
|
const frameH = frame.rows * stepPx.value;
|
|
198
|
-
const rightInset = inlineItem.value ? inlinePaneWidth.value : 0;
|
|
199
198
|
coordinate.value = {
|
|
200
|
-
x: Math.round((rect.width -
|
|
199
|
+
x: Math.round((rect.width - frameW) / 2),
|
|
201
200
|
y: Math.round((rect.height - frameH) / 2)
|
|
202
201
|
};
|
|
203
202
|
}
|
|
@@ -823,7 +822,6 @@ function requestDrill(itemId) {
|
|
|
823
822
|
function closeInline() {
|
|
824
823
|
setSelection([]);
|
|
825
824
|
}
|
|
826
|
-
watch(() => inlineItemId.value !== null, () => recenterSoon());
|
|
827
825
|
let paneResize = null;
|
|
828
826
|
function beginPaneResize(e) {
|
|
829
827
|
if (e.button !== 0) return;
|
|
@@ -841,7 +839,6 @@ useEventListener("mousemove", (e) => {
|
|
|
841
839
|
useEventListener("mouseup", () => {
|
|
842
840
|
if (!paneResize) return;
|
|
843
841
|
paneResize = null;
|
|
844
|
-
recenterSoon();
|
|
845
842
|
});
|
|
846
843
|
</script>
|
|
847
844
|
|
package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts
CHANGED
|
@@ -156,6 +156,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
156
156
|
readonly pageSizes?: readonly number[] | undefined;
|
|
157
157
|
readonly pageIndex?: number | undefined;
|
|
158
158
|
} | undefined;
|
|
159
|
+
readonly persistQuery?: boolean | undefined;
|
|
159
160
|
readonly initialState?: {
|
|
160
161
|
readonly expanded?: boolean | {
|
|
161
162
|
readonly [x: string]: boolean;
|
|
@@ -336,6 +337,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
336
337
|
readonly pageSizes?: readonly number[] | undefined;
|
|
337
338
|
readonly pageIndex?: number | undefined;
|
|
338
339
|
} | undefined;
|
|
340
|
+
readonly persistQuery?: boolean | undefined;
|
|
339
341
|
readonly initialState?: {
|
|
340
342
|
readonly expanded?: boolean | {
|
|
341
343
|
readonly [x: string]: boolean;
|
package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts
CHANGED
|
@@ -156,6 +156,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
156
156
|
readonly pageSizes?: readonly number[] | undefined;
|
|
157
157
|
readonly pageIndex?: number | undefined;
|
|
158
158
|
} | undefined;
|
|
159
|
+
readonly persistQuery?: boolean | undefined;
|
|
159
160
|
readonly initialState?: {
|
|
160
161
|
readonly expanded?: boolean | {
|
|
161
162
|
readonly [x: string]: boolean;
|
|
@@ -336,6 +337,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
336
337
|
readonly pageSizes?: readonly number[] | undefined;
|
|
337
338
|
readonly pageIndex?: number | undefined;
|
|
338
339
|
} | undefined;
|
|
340
|
+
readonly persistQuery?: boolean | undefined;
|
|
339
341
|
readonly initialState?: {
|
|
340
342
|
readonly expanded?: boolean | {
|
|
341
343
|
readonly [x: string]: boolean;
|
package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts
CHANGED
|
@@ -151,6 +151,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
151
151
|
readonly pageSizes?: readonly number[] | undefined;
|
|
152
152
|
readonly pageIndex?: number | undefined;
|
|
153
153
|
} | undefined;
|
|
154
|
+
readonly persistQuery?: boolean | undefined;
|
|
154
155
|
readonly initialState?: {
|
|
155
156
|
readonly expanded?: boolean | {
|
|
156
157
|
readonly [x: string]: boolean;
|
|
@@ -331,6 +332,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
331
332
|
readonly pageSizes?: readonly number[] | undefined;
|
|
332
333
|
readonly pageIndex?: number | undefined;
|
|
333
334
|
} | undefined;
|
|
335
|
+
readonly persistQuery?: boolean | undefined;
|
|
334
336
|
readonly initialState?: {
|
|
335
337
|
readonly expanded?: boolean | {
|
|
336
338
|
readonly [x: string]: boolean;
|
package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts
CHANGED
|
@@ -151,6 +151,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
151
151
|
readonly pageSizes?: readonly number[] | undefined;
|
|
152
152
|
readonly pageIndex?: number | undefined;
|
|
153
153
|
} | undefined;
|
|
154
|
+
readonly persistQuery?: boolean | undefined;
|
|
154
155
|
readonly initialState?: {
|
|
155
156
|
readonly expanded?: boolean | {
|
|
156
157
|
readonly [x: string]: boolean;
|
|
@@ -331,6 +332,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
331
332
|
readonly pageSizes?: readonly number[] | undefined;
|
|
332
333
|
readonly pageIndex?: number | undefined;
|
|
333
334
|
} | undefined;
|
|
335
|
+
readonly persistQuery?: boolean | undefined;
|
|
334
336
|
readonly initialState?: {
|
|
335
337
|
readonly expanded?: boolean | {
|
|
336
338
|
readonly [x: string]: boolean;
|
|
@@ -166,6 +166,7 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
|
|
|
166
166
|
readonly pageSizes?: readonly number[] | undefined;
|
|
167
167
|
readonly pageIndex?: number | undefined;
|
|
168
168
|
} | undefined;
|
|
169
|
+
readonly persistQuery?: boolean | undefined;
|
|
169
170
|
readonly initialState?: {
|
|
170
171
|
readonly expanded?: boolean | {
|
|
171
172
|
readonly [x: string]: boolean;
|
|
@@ -447,6 +448,7 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
|
|
|
447
448
|
message: Schema.SchemaClass<string, string, never>;
|
|
448
449
|
}>]>>;
|
|
449
450
|
}>>;
|
|
451
|
+
persistQuery: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
|
|
450
452
|
initialState: Schema.optional<Schema.Struct<{
|
|
451
453
|
columnVisibility: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Boolean>>;
|
|
452
454
|
columnOrder: Schema.optional<Schema.Array$<typeof Schema.String>>;
|
package/dist/runtime/components/config/blocks/2026-05-17/com.shwfed.block.chart.xy/config.vue
CHANGED
|
@@ -384,6 +384,7 @@ function removeY(i) {
|
|
|
384
384
|
:model-value="block.x"
|
|
385
385
|
result-type="list"
|
|
386
386
|
:extra-vars="dataSourceVars"
|
|
387
|
+
unlisted-vars-are-dyn
|
|
387
388
|
placeholder="返回列表,如 range(0, 12)"
|
|
388
389
|
@update:model-value="setX"
|
|
389
390
|
/>
|
|
@@ -440,6 +441,7 @@ function removeY(i) {
|
|
|
440
441
|
:model-value="s.value"
|
|
441
442
|
result-type="list"
|
|
442
443
|
:extra-vars="dataSourceVars"
|
|
444
|
+
unlisted-vars-are-dyn
|
|
443
445
|
:placeholder="`\u7B2C ${i + 1} \u4E2A\u7CFB\u5217\uFF0C\u5982 source1.map(r, r.value)`"
|
|
444
446
|
@update:model-value="(v) => setYValue(i, v)"
|
|
445
447
|
/>
|
|
@@ -576,6 +578,7 @@ function removeY(i) {
|
|
|
576
578
|
:model-value="s.dash ?? ''"
|
|
577
579
|
result-type="list"
|
|
578
580
|
:extra-vars="dataSourceVars"
|
|
581
|
+
unlisted-vars-are-dyn
|
|
579
582
|
placeholder="留空为实线,如 [4, 4]"
|
|
580
583
|
@update:model-value="(v) => setYDash(i, v)"
|
|
581
584
|
/>
|
|
@@ -653,6 +656,7 @@ function removeY(i) {
|
|
|
653
656
|
:model-value="s.width ?? ''"
|
|
654
657
|
result-type="number"
|
|
655
658
|
:extra-vars="dataSourceVars"
|
|
659
|
+
unlisted-vars-are-dyn
|
|
656
660
|
placeholder="留空自动,如 24"
|
|
657
661
|
@update:model-value="(v) => setYWidth(i, v)"
|
|
658
662
|
/>
|
|
@@ -680,6 +684,7 @@ function removeY(i) {
|
|
|
680
684
|
:model-value="s.size ?? ''"
|
|
681
685
|
result-type="list"
|
|
682
686
|
:extra-vars="dataSourceVars"
|
|
687
|
+
unlisted-vars-are-dyn
|
|
683
688
|
placeholder="留空用默认大小,如 source1.map(r, r.weight)"
|
|
684
689
|
@update:model-value="(v) => setYSize(i, v)"
|
|
685
690
|
/>
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
badgeSchema,
|
|
30
30
|
getStructFieldDescription,
|
|
31
31
|
getStructFieldTitle,
|
|
32
|
+
JSON_VAR,
|
|
32
33
|
schema
|
|
33
34
|
} from "./schema";
|
|
34
35
|
defineOptions({ name: "ShwfedBlockCardConfig" });
|
|
@@ -419,6 +420,7 @@ if (breadcrumbExt) {
|
|
|
419
420
|
:model-value="badge.show ?? ''"
|
|
420
421
|
placeholder="例:json.?data.?total.orValue(0) != 0"
|
|
421
422
|
result-type="bool"
|
|
423
|
+
:extra-vars="{ json: JSON_VAR }"
|
|
422
424
|
multiline
|
|
423
425
|
class="min-h-12"
|
|
424
426
|
@update:model-value="(v) => setBadgeShow(v)"
|
|
@@ -19,6 +19,11 @@ export declare const metadata: {
|
|
|
19
19
|
readonly max: number;
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
+
export declare const JSON_VAR: {
|
|
23
|
+
readonly type: "optional<dyn>";
|
|
24
|
+
readonly label: "HTTP 响应体";
|
|
25
|
+
readonly description: "HTTP 响应体(配置了请求时为已解析 JSON,否则为 none)";
|
|
26
|
+
};
|
|
22
27
|
export declare const BADGE_VARIANTS: readonly ["default", "secondary", "destructive", "outline"];
|
|
23
28
|
/**
|
|
24
29
|
* The card's top-right badge: an optional HTTP datasource whose response feeds
|
|
@@ -10,10 +10,15 @@ export const metadata = {
|
|
|
10
10
|
w: { initial: 12, min: 4, max: Infinity },
|
|
11
11
|
h: { initial: 6, min: 4, max: Infinity }
|
|
12
12
|
};
|
|
13
|
+
export const JSON_VAR = {
|
|
14
|
+
type: "optional<dyn>",
|
|
15
|
+
label: "HTTP \u54CD\u5E94\u4F53",
|
|
16
|
+
description: "HTTP \u54CD\u5E94\u4F53\uFF08\u914D\u7F6E\u4E86\u8BF7\u6C42\u65F6\u4E3A\u5DF2\u89E3\u6790 JSON\uFF0C\u5426\u5219\u4E3A none\uFF09"
|
|
17
|
+
};
|
|
13
18
|
function registerJson(env) {
|
|
14
|
-
env.registerVariable("json",
|
|
15
|
-
label:
|
|
16
|
-
description:
|
|
19
|
+
env.registerVariable("json", JSON_VAR.type, {
|
|
20
|
+
label: JSON_VAR.label,
|
|
21
|
+
description: JSON_VAR.description
|
|
17
22
|
});
|
|
18
23
|
}
|
|
19
24
|
export const BADGE_VARIANTS = ["default", "secondary", "destructive", "outline"];
|
|
@@ -9,6 +9,8 @@ import { Textarea } from "../ui/textarea";
|
|
|
9
9
|
import { provideEventAncestor } from "../../share/event-bus";
|
|
10
10
|
import {
|
|
11
11
|
FormConfig,
|
|
12
|
+
getNestedStructFieldDescription,
|
|
13
|
+
getNestedStructFieldTitle,
|
|
12
14
|
getStructFieldDescription,
|
|
13
15
|
getStructFieldTitle,
|
|
14
16
|
metadata as formMetadata
|
|
@@ -25,6 +27,8 @@ const configure = props.configure ?? (() => {
|
|
|
25
27
|
const formConfigSchema = FormConfig(configure);
|
|
26
28
|
const generalFieldTitle = (f) => getStructFieldTitle(formConfigSchema, f) ?? f;
|
|
27
29
|
const generalFieldDescription = (f) => getStructFieldDescription(formConfigSchema, f);
|
|
30
|
+
const initialFieldTitle = (f) => getNestedStructFieldTitle(formConfigSchema, "initial", f) ?? f;
|
|
31
|
+
const initialFieldDescription = (f) => getNestedStructFieldDescription(formConfigSchema, "initial", f);
|
|
28
32
|
provideCELContext(buildFormCelScope(configure));
|
|
29
33
|
const formEventAncestor = computed(() => {
|
|
30
34
|
const id = config.value.id;
|
|
@@ -124,45 +128,49 @@ function updateStyle(value) {
|
|
|
124
128
|
<Field orientation="vertical">
|
|
125
129
|
<FieldLabel class="text-xs text-zinc-500">
|
|
126
130
|
<template
|
|
127
|
-
v-if="
|
|
131
|
+
v-if="initialFieldDescription('request')"
|
|
128
132
|
#tooltip
|
|
129
133
|
>
|
|
130
134
|
<Markdown
|
|
131
|
-
:source="
|
|
135
|
+
:source="initialFieldDescription('request')"
|
|
132
136
|
block
|
|
133
137
|
class="prose prose-sm prose-zinc"
|
|
134
138
|
/>
|
|
135
139
|
</template>
|
|
136
|
-
{{
|
|
140
|
+
{{ initialFieldTitle("request") }}
|
|
137
141
|
</FieldLabel>
|
|
138
142
|
<ExpressionEditor
|
|
139
|
-
:model-value="config.initial?.
|
|
140
|
-
placeholder="如
|
|
141
|
-
result-type="
|
|
142
|
-
:extra-vars="{ json: { type: 'optional<dyn>', label: 'HTTP \u54CD\u5E94\u4F53', description: '\u300C\u8BF7\u6C42\u300D\u7684\u54CD\u5E94\u4F53\uFF08\u5DF2\u89E3\u6790 JSON\uFF09\uFF1B\u672A\u914D\u7F6E\u8BF7\u6C42\u65F6\u4E3A none' } }"
|
|
143
|
+
:model-value="config.initial?.request ?? ''"
|
|
144
|
+
placeholder="如 http.get('https://api.example.com/record/1')"
|
|
145
|
+
result-type="HttpRequest"
|
|
143
146
|
multiline
|
|
144
147
|
class="min-h-20"
|
|
145
|
-
@update:model-value="(v) => setInitialField('
|
|
148
|
+
@update:model-value="(v) => setInitialField('request', v)"
|
|
146
149
|
/>
|
|
147
150
|
</Field>
|
|
148
151
|
|
|
149
152
|
<Field orientation="vertical">
|
|
150
153
|
<FieldLabel class="text-xs text-zinc-500">
|
|
151
|
-
<template
|
|
154
|
+
<template
|
|
155
|
+
v-if="initialFieldDescription('data')"
|
|
156
|
+
#tooltip
|
|
157
|
+
>
|
|
152
158
|
<Markdown
|
|
153
|
-
source="
|
|
159
|
+
:source="initialFieldDescription('data')"
|
|
154
160
|
block
|
|
155
161
|
class="prose prose-sm prose-zinc"
|
|
156
162
|
/>
|
|
157
163
|
</template>
|
|
158
|
-
{{
|
|
164
|
+
{{ initialFieldTitle("data") }}
|
|
159
165
|
</FieldLabel>
|
|
160
166
|
<ExpressionEditor
|
|
161
|
-
:model-value="config.initial?.
|
|
162
|
-
placeholder="如
|
|
163
|
-
result-type="
|
|
164
|
-
|
|
165
|
-
|
|
167
|
+
:model-value="config.initial?.data ?? ''"
|
|
168
|
+
placeholder="如 { 'name': '', 'age': 0 }"
|
|
169
|
+
result-type="dyn"
|
|
170
|
+
:extra-vars="{ json: { type: 'optional<dyn>', label: 'HTTP \u54CD\u5E94\u4F53', description: '\u300C\u8BF7\u6C42\u300D\u7684\u54CD\u5E94\u4F53\uFF08\u5DF2\u89E3\u6790 JSON\uFF09\uFF1B\u672A\u914D\u7F6E\u8BF7\u6C42\u65F6\u4E3A none' } }"
|
|
171
|
+
multiline
|
|
172
|
+
class="min-h-20"
|
|
173
|
+
@update:model-value="(v) => setInitialField('data', v)"
|
|
166
174
|
/>
|
|
167
175
|
</Field>
|
|
168
176
|
|
package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/runtime.vue
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { computed } from "vue";
|
|
3
3
|
import { useI18n } from "vue-i18n";
|
|
4
|
+
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
5
|
+
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
4
6
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
5
7
|
import { Markdown } from "../../../../ui/markdown";
|
|
8
|
+
import { interpolateMarkdown } from "../../../../table/utils/runtime";
|
|
9
|
+
import { useFormState } from "../../../utils/state";
|
|
6
10
|
defineOptions({ name: "ShwfedMarkdownFieldRuntime" });
|
|
7
11
|
const props = defineProps({
|
|
8
12
|
fieldId: { type: String, required: true },
|
|
9
13
|
config: { type: null, required: true }
|
|
10
14
|
});
|
|
11
15
|
const { locale } = useI18n();
|
|
12
|
-
const
|
|
16
|
+
const { state } = useFormState();
|
|
17
|
+
const inherited = injectCELContext();
|
|
18
|
+
const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
|
|
19
|
+
const source = computed(() => {
|
|
20
|
+
const template = getLocalizedText(props.config.content, locale.value) ?? "";
|
|
21
|
+
if (!template) return "";
|
|
22
|
+
return interpolateMarkdown(template, $cel, { form: state.value ?? {} });
|
|
23
|
+
});
|
|
13
24
|
</script>
|
|
14
25
|
|
|
15
26
|
<template>
|
package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/schema.d.ts
CHANGED
|
@@ -17,13 +17,19 @@ export declare const metadata: {
|
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
19
|
export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
|
|
20
|
-
content: Schema.
|
|
20
|
+
content: Schema.refine<readonly [{
|
|
21
|
+
readonly locale: "zh";
|
|
22
|
+
readonly message: string;
|
|
23
|
+
}, ...{
|
|
24
|
+
readonly locale: "en" | "ja" | "ko";
|
|
25
|
+
readonly message: string;
|
|
26
|
+
}[]], Schema.TupleType<readonly [Schema.Struct<{
|
|
21
27
|
locale: Schema.Literal<["zh"]>;
|
|
22
28
|
message: Schema.SchemaClass<string, string, never>;
|
|
23
29
|
}>], [Schema.Struct<{
|
|
24
30
|
locale: Schema.Literal<["ja", "en", "ko"]>;
|
|
25
31
|
message: Schema.SchemaClass<string, string, never>;
|
|
26
|
-
}>]
|
|
32
|
+
}>]>>;
|
|
27
33
|
id: Schema.refine<string, typeof Schema.String>;
|
|
28
34
|
displayName: Schema.optional<Schema.SchemaClass<string, string, never>>;
|
|
29
35
|
hidden: Schema.optional<Schema.Schema<string, string, never>>;
|
package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/schema.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import {
|
|
2
|
+
import { LocaleMarkdown } from "../../../../../share/expression.js";
|
|
3
3
|
import { commonFieldFields } from "../../../utils/common.js";
|
|
4
4
|
export const type = "com.shwfed.form.field.markdown";
|
|
5
5
|
export const compatibilityDate = "2026-04-22";
|
|
@@ -14,9 +14,9 @@ export function schema(configure) {
|
|
|
14
14
|
type: Schema.Literal(type),
|
|
15
15
|
compatibilityDate: Schema.Literal(compatibilityDate),
|
|
16
16
|
...commonFieldFields(configure),
|
|
17
|
-
content:
|
|
17
|
+
content: LocaleMarkdown({ configure }).annotations({
|
|
18
18
|
title: "\u5185\u5BB9",
|
|
19
|
-
description: "\u6E32\u67D3\u4E3A Markdown \u7684\u591A\u8BED\u8A00\u6587\u672C"
|
|
19
|
+
description: "\u6E32\u67D3\u4E3A Markdown \u7684\u591A\u8BED\u8A00\u6587\u672C\uFF0C\u652F\u6301 `{{ \u8868\u8FBE\u5F0F }}` \u63D2\u503C"
|
|
20
20
|
})
|
|
21
21
|
}).annotations({
|
|
22
22
|
title: "MarkdownField",
|
|
@@ -24,7 +24,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
24
24
|
}[]] | undefined;
|
|
25
25
|
readonly required?: string | undefined;
|
|
26
26
|
readonly displayName?: string | undefined;
|
|
27
|
-
readonly rows?: number | undefined;
|
|
28
27
|
readonly compatibilityDate: "2026-04-22";
|
|
29
28
|
readonly orientation?: "vertical" | "floating" | undefined;
|
|
30
29
|
readonly placeholder?: readonly [{
|
|
@@ -51,6 +50,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
51
50
|
readonly warning?: boolean | undefined;
|
|
52
51
|
readonly when: string;
|
|
53
52
|
}[] | undefined;
|
|
53
|
+
readonly maxLength?: number | undefined;
|
|
54
54
|
}) => any;
|
|
55
55
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
56
56
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -74,7 +74,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
74
74
|
}[]] | undefined;
|
|
75
75
|
readonly required?: string | undefined;
|
|
76
76
|
readonly displayName?: string | undefined;
|
|
77
|
-
readonly rows?: number | undefined;
|
|
78
77
|
readonly compatibilityDate: "2026-04-22";
|
|
79
78
|
readonly orientation?: "vertical" | "floating" | undefined;
|
|
80
79
|
readonly placeholder?: readonly [{
|
|
@@ -101,6 +100,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
101
100
|
readonly warning?: boolean | undefined;
|
|
102
101
|
readonly when: string;
|
|
103
102
|
}[] | undefined;
|
|
103
|
+
readonly maxLength?: number | undefined;
|
|
104
104
|
}) => any) | undefined;
|
|
105
105
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
106
106
|
declare const _default: typeof __VLS_export;
|
package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/config.vue
CHANGED
|
@@ -4,7 +4,7 @@ import { Field, FieldLabel } from "../../../../ui/field";
|
|
|
4
4
|
import { ExpressionEditor } from "../../../../ui/expression-editor";
|
|
5
5
|
import DerivedValueEditor from "../../../DerivedValueEditor.vue";
|
|
6
6
|
import ValidationRulesField from "../../../ValidationRulesField.vue";
|
|
7
|
-
import { InputGroup, InputGroupInput } from "../../../../ui/input-group";
|
|
7
|
+
import { InputGroup, InputGroupInput, InputGroupNumberField } from "../../../../ui/input-group";
|
|
8
8
|
import { Locale as LocaleField } from "../../../../ui/locale";
|
|
9
9
|
import { Markdown } from "../../../../ui/markdown";
|
|
10
10
|
import {
|
|
@@ -35,22 +35,14 @@ const pathText = computed({
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const n = Number(trimmed);
|
|
47
|
-
if (!Number.isFinite(n) || !Number.isInteger(n) || n <= 0) {
|
|
48
|
-
value.value = { ...value.value, rows: void 0 };
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
value.value = { ...value.value, rows: n };
|
|
38
|
+
function setMaxLength(v) {
|
|
39
|
+
if (v === void 0 || !(v > 0)) {
|
|
40
|
+
const { maxLength: _omit, ...rest } = value.value;
|
|
41
|
+
value.value = rest;
|
|
42
|
+
} else {
|
|
43
|
+
value.value = { ...value.value, maxLength: Math.round(v) };
|
|
52
44
|
}
|
|
53
|
-
}
|
|
45
|
+
}
|
|
54
46
|
</script>
|
|
55
47
|
|
|
56
48
|
<template>
|
|
@@ -203,24 +195,22 @@ const rowsText = computed({
|
|
|
203
195
|
<Field orientation="vertical">
|
|
204
196
|
<FieldLabel class="text-xs text-zinc-500">
|
|
205
197
|
<template
|
|
206
|
-
v-if="fieldDescription('
|
|
198
|
+
v-if="fieldDescription('maxLength')"
|
|
207
199
|
#tooltip
|
|
208
200
|
>
|
|
209
201
|
<Markdown
|
|
210
|
-
:source="fieldDescription('
|
|
202
|
+
:source="fieldDescription('maxLength')"
|
|
211
203
|
block
|
|
212
204
|
class="prose prose-sm prose-zinc"
|
|
213
205
|
/>
|
|
214
206
|
</template>
|
|
215
|
-
{{ fieldTitle("
|
|
207
|
+
{{ fieldTitle("maxLength") }}
|
|
216
208
|
</FieldLabel>
|
|
217
209
|
<InputGroup>
|
|
218
|
-
<
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
step="1"
|
|
223
|
-
placeholder="例:4"
|
|
210
|
+
<InputGroupNumberField
|
|
211
|
+
:model-value="value.maxLength"
|
|
212
|
+
:min="1"
|
|
213
|
+
@update:model-value="setMaxLength"
|
|
224
214
|
/>
|
|
225
215
|
</InputGroup>
|
|
226
216
|
</Field>
|
|
@@ -24,7 +24,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
24
24
|
}[]] | undefined;
|
|
25
25
|
readonly required?: string | undefined;
|
|
26
26
|
readonly displayName?: string | undefined;
|
|
27
|
-
readonly rows?: number | undefined;
|
|
28
27
|
readonly compatibilityDate: "2026-04-22";
|
|
29
28
|
readonly orientation?: "vertical" | "floating" | undefined;
|
|
30
29
|
readonly placeholder?: readonly [{
|
|
@@ -51,6 +50,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
51
50
|
readonly warning?: boolean | undefined;
|
|
52
51
|
readonly when: string;
|
|
53
52
|
}[] | undefined;
|
|
53
|
+
readonly maxLength?: number | undefined;
|
|
54
54
|
}) => any;
|
|
55
55
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
56
56
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -74,7 +74,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
74
74
|
}[]] | undefined;
|
|
75
75
|
readonly required?: string | undefined;
|
|
76
76
|
readonly displayName?: string | undefined;
|
|
77
|
-
readonly rows?: number | undefined;
|
|
78
77
|
readonly compatibilityDate: "2026-04-22";
|
|
79
78
|
readonly orientation?: "vertical" | "floating" | undefined;
|
|
80
79
|
readonly placeholder?: readonly [{
|
|
@@ -101,6 +100,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
101
100
|
readonly warning?: boolean | undefined;
|
|
102
101
|
readonly when: string;
|
|
103
102
|
}[] | undefined;
|
|
103
|
+
readonly maxLength?: number | undefined;
|
|
104
104
|
}) => any) | undefined;
|
|
105
105
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
106
106
|
declare const _default: typeof __VLS_export;
|
package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/runtime.vue
CHANGED
|
@@ -6,7 +6,7 @@ import { cel as _rawCel } from "../../../../../utils/cel";
|
|
|
6
6
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
7
7
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
8
8
|
import { Field, FieldLabel, FieldMessages } from "../../../../ui/field";
|
|
9
|
-
import { InputGroup, InputGroupTextarea } from "../../../../ui/input-group";
|
|
9
|
+
import { InputGroup, InputGroupAddon, InputGroupText, InputGroupTextarea } from "../../../../ui/input-group";
|
|
10
10
|
import { Markdown } from "../../../../ui/markdown";
|
|
11
11
|
import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
|
|
12
12
|
import { useFieldValue } from "../../../utils/field-value";
|
|
@@ -29,6 +29,7 @@ const placeholderText = computed(
|
|
|
29
29
|
const tooltipText = computed(
|
|
30
30
|
() => props.config.tooltip ? getLocalizedText(props.config.tooltip, locale.value) : void 0
|
|
31
31
|
);
|
|
32
|
+
const maxLength = computed(() => props.config.maxLength);
|
|
32
33
|
function evalBool(expression, label) {
|
|
33
34
|
if (!expression) return false;
|
|
34
35
|
try {
|
|
@@ -94,9 +95,17 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
|
|
|
94
95
|
v-model="draft"
|
|
95
96
|
:placeholder="placeholderText"
|
|
96
97
|
:disabled="isDisabled"
|
|
97
|
-
:
|
|
98
|
+
:maxlength="maxLength"
|
|
98
99
|
@blur="commit"
|
|
99
100
|
/>
|
|
101
|
+
<InputGroupAddon
|
|
102
|
+
v-if="maxLength != null"
|
|
103
|
+
align="block-end"
|
|
104
|
+
>
|
|
105
|
+
<InputGroupText class="tabular-nums">
|
|
106
|
+
{{ draft.length }} / {{ maxLength }}
|
|
107
|
+
</InputGroupText>
|
|
108
|
+
</InputGroupAddon>
|
|
100
109
|
</InputGroup>
|
|
101
110
|
<FieldMessages
|
|
102
111
|
v-if="visible"
|