@shwfed/config 2.3.17 → 2.3.19

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 (80) hide show
  1. package/dist/mcp.mjs +1171 -601
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{config-CAUy5OIr.js → config-B8qIrXw4.js} +1 -1
  4. package/dist/preview/assets/{config-B_D_DLrg.js → config-BERbwRqR.js} +1 -1
  5. package/dist/preview/assets/{config-CDcbWHz1.js → config-BQDXm2N4.js} +1 -1
  6. package/dist/preview/assets/{config-CAzy2oY1.js → config-BZrnB31E.js} +1 -1
  7. package/dist/preview/assets/{config-lCt8xg5R.js → config-BfiDa6j3.js} +1 -1
  8. package/dist/preview/assets/{config-DkE2KJox.js → config-BmzbCaL9.js} +1 -1
  9. package/dist/preview/assets/config-CI4d63Pa.js +1 -0
  10. package/dist/preview/assets/{config-D9wKVRfv.js → config-CrffMahT.js} +1 -1
  11. package/dist/preview/assets/{config-DReApS3g.js → config-RIqYuUkC.js} +1 -1
  12. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-CvzBdDHI.js → definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js} +1 -1
  13. package/dist/preview/assets/index-CT6yD2gM.js +1 -0
  14. package/dist/preview/assets/{index-BUyz4nJb.css → index-DomLsyPH.css} +1 -1
  15. package/dist/preview/assets/index-X6To2gmZ.js +643 -0
  16. package/dist/preview/assets/{runtime-CNI--nfZ.js → runtime-BQsuM5NY.js} +1 -1
  17. package/dist/preview/assets/{runtime-eRS_ur88.js → runtime-CKWbV48T.js} +1 -1
  18. package/dist/preview/assets/{runtime-Dg8BS7Rt.js → runtime-CQPoA4Wr.js} +1 -1
  19. package/dist/preview/assets/runtime-CpsOFZJU.js +1 -0
  20. package/dist/preview/assets/{runtime-C7iG_6_s.js → runtime-DLe-_bzP.js} +1 -1
  21. package/dist/preview/assets/runtime-DY65pO8M.js +1 -0
  22. package/dist/preview/assets/runtime-DyCSllvl.js +1 -0
  23. package/dist/preview/assets/runtime-ZprvETkX.js +1 -0
  24. package/dist/preview/assets/runtime-pkc99x6z.js +1 -0
  25. package/dist/preview/index.html +2 -2
  26. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/config.d.vue.ts +27 -0
  27. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/config.vue +68 -0
  28. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/config.vue.d.ts +27 -0
  29. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/runtime.d.vue.ts +8 -0
  30. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/runtime.vue +52 -0
  31. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/runtime.vue.d.ts +8 -0
  32. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/schema.d.ts +18 -0
  33. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/schema.js +35 -0
  34. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/config.d.vue.ts +107 -0
  35. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/config.vue +493 -0
  36. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/config.vue.d.ts +107 -0
  37. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/runtime.d.vue.ts +8 -0
  38. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/runtime.vue +123 -0
  39. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/runtime.vue.d.ts +8 -0
  40. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/schema.d.ts +79 -0
  41. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/schema.js +78 -0
  42. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +125 -0
  43. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue +645 -0
  44. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +125 -0
  45. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/runtime.d.vue.ts +8 -0
  46. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/runtime.vue +155 -0
  47. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/runtime.vue.d.ts +8 -0
  48. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/schema.d.ts +90 -0
  49. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/schema.js +100 -0
  50. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +109 -0
  51. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue +426 -0
  52. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +109 -0
  53. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.d.vue.ts +9 -0
  54. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue +337 -0
  55. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue.d.ts +9 -0
  56. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.d.ts +85 -0
  57. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.js +146 -0
  58. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +137 -0
  59. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue +586 -0
  60. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +137 -0
  61. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.d.vue.ts +9 -0
  62. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.vue +268 -0
  63. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.vue.d.ts +9 -0
  64. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.d.ts +126 -0
  65. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/schema.js +124 -0
  66. package/dist/runtime/components/table/config.vue +3 -0
  67. package/dist/runtime/components/table/index.vue +2 -0
  68. package/dist/runtime/components/table/utils/shared-fetch.d.ts +30 -0
  69. package/dist/runtime/components/table/utils/shared-fetch.js +42 -0
  70. package/dist/runtime/components/ui/calendar/Calendar.vue +9 -4
  71. package/dist/runtime/components/ui/date-range-picker/DateRangePickerMonthPanel.vue +4 -1
  72. package/dist/runtime/components/ui/date-range-picker/DateRangePickerYearPanel.vue +4 -1
  73. package/dist/runtime/components/ui/range-calendar/RangeCalendar.vue +3 -1
  74. package/package.json +1 -1
  75. package/dist/preview/assets/index-DOUzPsqV.js +0 -639
  76. package/dist/preview/assets/index-DUZhCCDY.js +0 -1
  77. package/dist/preview/assets/runtime-CEymLc8o.js +0 -1
  78. package/dist/preview/assets/runtime-CWwZuZQ7.js +0 -1
  79. package/dist/preview/assets/runtime-Dj39BqNd.js +0 -1
  80. package/dist/preview/assets/runtime-TUjKxXEj.js +0 -1
@@ -1 +1 @@
1
- import{d as f,ad as u,ae as l,af as g,ag as d,ah as m,ai as p,e as x,u as E,aj as _,ak as h,al as k,am as w,o as C}from"./index-DOUzPsqV.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-CvzBdDHI.js";const R=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const n=s,{locale:c}=u(),a=k(),t=(e,o)=>_(e,{...h(a),...o}),i=w(),r=l(function*(){const e=g(n.config.markdown,c.value)??"",o=d(e,t);(yield*m({content:o,icon:n.config.icon,color:n.config.color}))||(yield*p(n.config.expression,t,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:i,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(C(),x(I,{"action-id":s.buttonId,effect:E(r)},null,8,["action-id","effect"]))}});export{R as default};
1
+ import{d as f,ae as u,af as l,ag as g,ah as m,ai as p,aj as d,e as x,u as E,ak as _,al as h,am as k,an as w,o as C}from"./index-X6To2gmZ.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const R=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const n=s,{locale:c}=u(),a=k(),t=(e,o)=>_(e,{...h(a),...o}),i=w(),r=l(function*(){const e=g(n.config.markdown,c.value)??"",o=m(e,t);(yield*p({content:o,icon:n.config.icon,color:n.config.color}))||(yield*d(n.config.expression,t,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:i,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(C(),x(I,{"action-id":s.buttonId,effect:E(r)},null,8,["action-id","effect"]))}});export{R as default};
@@ -1 +1 @@
1
- import{d as r,an as f,ai as u,e as p,u as g,aj as m,ak as l,al as d,am as x,o as E}from"./index-DOUzPsqV.js";import{_}from"./definition.vue_vue_type_script_setup_true_lang-CvzBdDHI.js";const k=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,t=d(),c=(s,o)=>m(s,{...l(t),...o}),i=x(),a=f(()=>u(e.config.expression,c,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:i,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}}));return(s,o)=>(E(),p(_,{"action-id":n.buttonId,effect:g(a)},null,8,["action-id","effect"]))}});export{k as default};
1
+ import{d as r,ao as f,aj as u,e as p,u as g,ak as m,al as l,am as d,an as x,o as E}from"./index-X6To2gmZ.js";import{_}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const k=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,t=d(),c=(s,o)=>m(s,{...l(t),...o}),i=x(),a=f(()=>u(e.config.expression,c,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:i,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}}));return(s,o)=>(E(),p(_,{"action-id":n.buttonId,effect:g(a)},null,8,["action-id","effect"]))}});export{k as default};
@@ -1 +1 @@
1
- import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-CvzBdDHI.js";import{d as n,e as a,u as c,o as f,ao as i}from"./index-DOUzPsqV.js";const _=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=i;return(r,s)=>(f(),a(o,{"action-id":e.buttonId,effect:c(t)},null,8,["action-id","effect"]))}});export{_ as default};
1
+ import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";import{d as n,e as a,u as c,o as f,ap as i}from"./index-X6To2gmZ.js";const p=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=i;return(r,s)=>(f(),a(o,{"action-id":e.buttonId,effect:c(t)},null,8,["action-id","effect"]))}});export{p as default};
@@ -0,0 +1 @@
1
+ import{d as u,ae as l,e as i,u as p,$ as m,o as d,k as f,ag as _,ah as k,ak as g,al as w,am as x}from"./index-X6To2gmZ.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(n){const s=n,{locale:o}=l(),t=x(),c=(e,a)=>g(e,{...w(t),...a}),r=m(()=>{const e=_(s.config.content,o.value)??"";return k(e,c)});return(e,a)=>(d(),i(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 _,an as j,ae as B,aq as r,az as m,aA as E,aB as S,e as k,u as v,aj as x,ak as L,am as b,o as C,al as R}from"./index-DOUzPsqV.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-CvzBdDHI.js";const I=_({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=R(),t=(e,n)=>x(e,{...L(g),...n}),l=b(),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=j(()=>B(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*E(t(o,a),s=>p.has(s)?s:"success");if(n!==void 0){const s=yield*t(n,a);yield*r(()=>S[i](s))}if(i==="success"||i==="info"){const h=yield*(yield*t(e.download,a)).file();yield*r(()=>f(h))}const w={success:c.config.onSuccess,warning:c.config.onWarning,error:c.config.onError,info:c.config.onInfo};return yield*m(l,w[i])}));return(e,n)=>(C(),k(T,{"action-id":d.buttonId,effect:v(y)},null,8,["action-id","effect"]))}});export{I as default};
1
+ import{d as _,ao as B,af as E,ar as r,aA as m,aB as S,aC as j,e as k,u as v,ak as x,al as C,an as L,am as b,o as R}from"./index-X6To2gmZ.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const O=_({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=b(),t=(e,n)=>x(e,{...C(g),...n}),l=L(),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=B(()=>E(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*S(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 h=yield*(yield*t(e.download,a)).file();yield*r(()=>f(h))}const w={success:c.config.onSuccess,warning:c.config.onWarning,error:c.config.onError,info:c.config.onInfo};return yield*m(l,w[i])}));return(e,n)=>(R(),k(T,{"action-id":d.buttonId,effect:v(y)},null,8,["action-id","effect"]))}});export{O as default};
@@ -0,0 +1 @@
1
+ import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";import{d as s,ao as c,aA as i,e as r,u as f,an as u,o as m}from"./index-X6To2gmZ.js";const g=s({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const n=e,t=u(),a=c(()=>i(t,n.config.triggers));return(p,d)=>(m(),r(o,{"action-id":e.buttonId,effect:f(a)},null,8,["action-id","effect"]))}});export{g as default};
@@ -0,0 +1 @@
1
+ import{d as l,aD as p,ao as A,aq as g,aA as y,e as _,u as h,ak as b,al as S,an as j,aE as k,o as C,am as B}from"./index-X6To2gmZ.js";import{_ as E}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const D=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(a){const s=a,o=B(),i=(e,t)=>b(e,{...S(o),...t}),r=p(),f=j(),u=k((e,t,n)=>{if(Array.isArray(e[t])&&Array.isArray(n))return e[t]=n,!0});function c(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function m(e,t){return c(e)&&c(t)?u({...t},e):t}const d=A(()=>g(i(s.config.expression),e=>{for(const t of Object.keys(e)){const n=m(r.getAt(t),e[t]);r.setAt(t,n)}return y(f,s.config.onSuccess)}));return(e,t)=>(C(),_(E,{"action-id":a.buttonId,effect:h(d)},null,8,["action-id","effect"]))}});export{D as default};
@@ -0,0 +1 @@
1
+ import{d as i,ao as f,aq as r,ar as d,e as m,u,ak as l,al as p,am as _,o as g}from"./index-X6To2gmZ.js";import{_ as h}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const x=i({name:"ShwfedNavigationActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=e,o=_(),c=(n,a)=>l(n,{...p(o),...a}),s=f(()=>r(c(t.config.url),n=>d(()=>{window.open(n,t.config.mode)})));return(n,a)=>(g(),m(h,{"action-id":e.buttonId,effect:u(s)},null,8,["action-id","effect"]))}});export{x as default};
@@ -0,0 +1 @@
1
+ import{d as s,ae as B,as as E,af as _,ag as i,at as x,au as p,e as M,w as c,u as d,a0 as N,an as b,ar as k,o as w,f as L,av as T,g as u,aw as I,ax as z,a7 as H,am as S,ay as V,az as $}from"./index-X6To2gmZ.js";import{_ as A}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const K=s({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(t){const a=t,{locale:l}=B(),f=e=>{},r=S(),m=b(),o=N(null),v=E(a.buttonId,{close:()=>k(()=>{o.value?.()})},m),g=s({name:"ModalBoundaryBridge",setup(e,{slots:n}){return z(r),V($,v),()=>n.default?.()}}),h=(e,n)=>H()?.(e,n),C=_(function*(){const e=i(a.config.modalTitle,l.value)??i(a.buttonTitle,l.value)??"",{modal:n,close:y}=yield*x({title:e,width:a.config.modalWidth});o.value=()=>p(y()),yield*n,o.value=null});return(e,n)=>(w(),M(A,{"action-id":t.buttonId,effect:d(C)},{default:c(()=>[L("div",{style:T(t.config.modalMinHeight?`min-height: ${t.config.modalMinHeight}`:void 0)},[u(d(g),null,{default:c(()=>[u(I,{"slot-value":t.config.slot,configure:f,"find-entry":h},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{K as default};
@@ -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-DOUzPsqV.js"></script>
14
- <link rel="stylesheet" crossorigin href="./assets/index-BUyz4nJb.css">
13
+ <script type="module" crossorigin src="./assets/index-X6To2gmZ.js"></script>
14
+ <link rel="stylesheet" crossorigin href="./assets/index-DomLsyPH.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="app"></div>
@@ -0,0 +1,27 @@
1
+ import { type Value } from './schema.js';
2
+ type __VLS_ModelProps = {
3
+ modelValue: Value;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ "update:modelValue": (value: {
7
+ readonly type: "com.shwfed.actions.button.state.write";
8
+ readonly compatibilityDate: "2026-05-24";
9
+ readonly expression: string;
10
+ readonly onSuccess?: readonly {
11
+ readonly target: string;
12
+ readonly operation: string;
13
+ }[] | undefined;
14
+ }) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
16
+ "onUpdate:modelValue"?: ((value: {
17
+ readonly type: "com.shwfed.actions.button.state.write";
18
+ readonly compatibilityDate: "2026-05-24";
19
+ readonly expression: string;
20
+ readonly onSuccess?: readonly {
21
+ readonly target: string;
22
+ readonly operation: string;
23
+ }[] | undefined;
24
+ }) => any) | undefined;
25
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const _default: typeof __VLS_export;
27
+ export default _default;
@@ -0,0 +1,68 @@
1
+ <script setup>
2
+ import { Field, FieldLabel } from "../../../../ui/field";
3
+ import { ExpressionEditor } from "../../../../ui/expression-editor";
4
+ import { Markdown } from "../../../../ui/markdown";
5
+ import { getStructFieldDescription, getStructFieldTitle } from "../../../schema";
6
+ import TriggersField from "../../../components/triggers-field.vue";
7
+ import { schema } from "./schema";
8
+ defineOptions({ name: "ShwfedStateWriteActionConfig" });
9
+ const value = defineModel({ type: null, ...{ required: true } });
10
+ const actionSchema = schema(() => {
11
+ });
12
+ const fieldTitle = (f) => getStructFieldTitle(actionSchema, f) ?? f;
13
+ const fieldDescription = (f) => getStructFieldDescription(actionSchema, f);
14
+ function updateTriggers(next) {
15
+ const draft = { ...value.value };
16
+ if (next.length === 0) Reflect.deleteProperty(draft, "onSuccess");
17
+ else draft.onSuccess = next;
18
+ value.value = draft;
19
+ }
20
+ </script>
21
+
22
+ <template>
23
+ <div class="flex flex-col gap-3">
24
+ <Field orientation="vertical">
25
+ <FieldLabel class="text-xs text-zinc-500">
26
+ <template
27
+ v-if="fieldDescription('expression')"
28
+ #tooltip
29
+ >
30
+ <Markdown
31
+ :source="fieldDescription('expression')"
32
+ block
33
+ class="prose prose-sm prose-zinc"
34
+ />
35
+ </template>
36
+ {{ fieldTitle("expression") }}
37
+ </FieldLabel>
38
+ <ExpressionEditor
39
+ :model-value="value.expression"
40
+ multiline
41
+ placeholder="例:{ invoices: rows, totalAmount: rows.map(r, r.amount).sum() }"
42
+ result-type="map"
43
+ class="min-h-16"
44
+ @update:model-value="(v) => value = { ...value, expression: v }"
45
+ />
46
+ </Field>
47
+
48
+ <Field orientation="vertical">
49
+ <FieldLabel class="text-xs text-zinc-500">
50
+ <template
51
+ v-if="fieldDescription('onSuccess')"
52
+ #tooltip
53
+ >
54
+ <Markdown
55
+ :source="fieldDescription('onSuccess')"
56
+ block
57
+ class="prose prose-sm prose-zinc"
58
+ />
59
+ </template>
60
+ {{ fieldTitle("onSuccess") }}
61
+ </FieldLabel>
62
+ <TriggersField
63
+ :triggers="value.onSuccess ?? []"
64
+ @update:triggers="updateTriggers"
65
+ />
66
+ </Field>
67
+ </div>
68
+ </template>
@@ -0,0 +1,27 @@
1
+ import { type Value } from './schema.js';
2
+ type __VLS_ModelProps = {
3
+ modelValue: Value;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ "update:modelValue": (value: {
7
+ readonly type: "com.shwfed.actions.button.state.write";
8
+ readonly compatibilityDate: "2026-05-24";
9
+ readonly expression: string;
10
+ readonly onSuccess?: readonly {
11
+ readonly target: string;
12
+ readonly operation: string;
13
+ }[] | undefined;
14
+ }) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
16
+ "onUpdate:modelValue"?: ((value: {
17
+ readonly type: "com.shwfed.actions.button.state.write";
18
+ readonly compatibilityDate: "2026-05-24";
19
+ readonly expression: string;
20
+ readonly onSuccess?: readonly {
21
+ readonly target: string;
22
+ readonly operation: string;
23
+ }[] | undefined;
24
+ }) => any) | undefined;
25
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const _default: typeof __VLS_export;
27
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import type { Value } from './schema.js';
2
+ type __VLS_Props = {
3
+ buttonId: string;
4
+ config: Value;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,52 @@
1
+ <script setup>
2
+ import { Effect } from "effect";
3
+ import { createDefu } from "defu";
4
+ import { cel as _rawCel } from "../../../../../utils/cel";
5
+ import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
6
+ import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
7
+ import { useFormState } from "../../../../form/utils/state";
8
+ import ShwfedActionDefinition from "../../../components/definition.vue";
9
+ defineOptions({ name: "ShwfedStateWriteActionRuntime" });
10
+ const props = defineProps({
11
+ buttonId: { type: String, required: true },
12
+ config: { type: null, required: true }
13
+ });
14
+ const inherited = injectCELContext();
15
+ const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
16
+ const formState = useFormState();
17
+ const channel = useEventChannel();
18
+ const mergeObjects = createDefu((obj, key, value) => {
19
+ if (Array.isArray(obj[key]) && Array.isArray(value)) {
20
+ obj[key] = value;
21
+ return true;
22
+ }
23
+ });
24
+ function isPlainObject(v) {
25
+ return typeof v === "object" && v !== null && !Array.isArray(v);
26
+ }
27
+ function mergeAtKey(current, next) {
28
+ if (isPlainObject(current) && isPlainObject(next)) {
29
+ return mergeObjects({ ...next }, current);
30
+ }
31
+ return next;
32
+ }
33
+ const effect = Effect.suspend(
34
+ () => Effect.flatMap(
35
+ $cel(props.config.expression),
36
+ (result) => {
37
+ for (const key of Object.keys(result)) {
38
+ const merged = mergeAtKey(formState.getAt(key), result[key]);
39
+ formState.setAt(key, merged);
40
+ }
41
+ return dispatchTriggers(channel, props.config.onSuccess);
42
+ }
43
+ )
44
+ );
45
+ </script>
46
+
47
+ <template>
48
+ <ShwfedActionDefinition
49
+ :action-id="buttonId"
50
+ :effect="effect"
51
+ />
52
+ </template>
@@ -0,0 +1,8 @@
1
+ import type { Value } from './schema.js';
2
+ type __VLS_Props = {
3
+ buttonId: string;
4
+ config: Value;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,18 @@
1
+ import { Schema } from 'effect';
2
+ import type { Environment } from '../../../../../vendor/cel-js/lib/index.js';
3
+ export declare const type: "com.shwfed.actions.button.state.write";
4
+ export declare const compatibilityDate: "2026-05-24";
5
+ export declare const metadata: {
6
+ readonly name: "写入表单状态";
7
+ readonly icon: "fluent:document-edit-20-regular";
8
+ };
9
+ export declare function schema(configure: (env: Environment) => void): Schema.Struct<{
10
+ type: Schema.Literal<["com.shwfed.actions.button.state.write"]>;
11
+ compatibilityDate: Schema.Literal<["2026-05-24"]>;
12
+ expression: Schema.Schema<string, string, never>;
13
+ onSuccess: Schema.optional<Schema.Array$<Schema.Struct<{
14
+ target: Schema.refine<string, typeof Schema.String>;
15
+ operation: Schema.SchemaClass<string, string, never>;
16
+ }>>>;
17
+ }>;
18
+ export type Value = Schema.Schema.Type<ReturnType<typeof schema>>;
@@ -0,0 +1,35 @@
1
+ import { Schema } from "effect";
2
+ import { Expression } from "../../../../../share/expression.js";
3
+ import { Triggers } from "../../../../../share/event-bus.js";
4
+ import { md } from "../../../../../share/markdown.js";
5
+ export const type = "com.shwfed.actions.button.state.write";
6
+ export const compatibilityDate = "2026-05-24";
7
+ export const metadata = {
8
+ name: "\u5199\u5165\u8868\u5355\u72B6\u6001",
9
+ icon: "fluent:document-edit-20-regular"
10
+ };
11
+ export function schema(configure) {
12
+ const CelRecord = Expression({
13
+ configure,
14
+ resultType: (t) => t === "dyn" || t.startsWith("map")
15
+ });
16
+ return Schema.Struct({
17
+ type: Schema.Literal(type),
18
+ compatibilityDate: Schema.Literal(compatibilityDate),
19
+ expression: CelRecord.annotations({
20
+ title: "\u5199\u5165\u503C",
21
+ description: md`
22
+ 点击后求值,返回一个 \`map\`。其每个顶层键都会被写入到最近祖先的表单状态中:
23
+ 对象值与当前值深合并(数组整体替换),其他类型直接替换。
24
+ 返回 \`{}\` 表示不进行任何写入。
25
+ `
26
+ }),
27
+ onSuccess: Schema.optional(Triggers.annotations({
28
+ title: "\u5199\u5165\u540E",
29
+ description: "\u5199\u5165\u5B8C\u6210\u540E\u6267\u884C\u7684\u64CD\u4F5C"
30
+ }))
31
+ }).annotations({
32
+ title: "StateWriteAction",
33
+ description: "\u70B9\u51FB\u540E\u5C06 CEL \u8868\u8FBE\u5F0F\u7684\u7ED3\u679C\u5199\u56DE\u6700\u8FD1\u7956\u5148\u7684\u8868\u5355\u72B6\u6001"
34
+ });
35
+ }
@@ -0,0 +1,107 @@
1
+ import { type Value } from './schema.js';
2
+ type __VLS_ModelProps = {
3
+ modelValue: Value;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ "update:modelValue": (value: {
7
+ readonly label?: readonly [{
8
+ readonly locale: "zh";
9
+ readonly message: string;
10
+ }, ...{
11
+ readonly locale: "en" | "ja" | "ko";
12
+ readonly message: string;
13
+ }[]] | undefined;
14
+ readonly disabled?: string | undefined;
15
+ readonly type: "com.shwfed.form.field.month";
16
+ readonly id: string;
17
+ readonly hidden?: string | undefined;
18
+ readonly tooltip?: readonly [{
19
+ readonly locale: "zh";
20
+ readonly message: string;
21
+ }, ...{
22
+ readonly locale: "en" | "ja" | "ko";
23
+ readonly message: string;
24
+ }[]] | undefined;
25
+ readonly displayName?: string | undefined;
26
+ readonly compatibilityDate: "2026-05-24";
27
+ readonly orientation?: "vertical" | "floating" | undefined;
28
+ readonly placeholder?: readonly [{
29
+ readonly locale: "zh";
30
+ readonly message: string;
31
+ }, ...{
32
+ readonly locale: "en" | "ja" | "ko";
33
+ readonly message: string;
34
+ }[]] | undefined;
35
+ readonly readonly?: string | undefined;
36
+ readonly binding?: string | undefined;
37
+ readonly derived?: {
38
+ readonly mode: "formula" | "prefill";
39
+ readonly expression: string;
40
+ } | undefined;
41
+ readonly format?: string | undefined;
42
+ readonly valueFormat?: string | undefined;
43
+ readonly presets?: readonly {
44
+ readonly label: readonly [{
45
+ readonly locale: "zh";
46
+ readonly message: string;
47
+ }, ...{
48
+ readonly locale: "en" | "ja" | "ko";
49
+ readonly message: string;
50
+ }[]];
51
+ readonly id: string;
52
+ readonly value: string;
53
+ }[] | undefined;
54
+ }) => any;
55
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
56
+ "onUpdate:modelValue"?: ((value: {
57
+ readonly label?: readonly [{
58
+ readonly locale: "zh";
59
+ readonly message: string;
60
+ }, ...{
61
+ readonly locale: "en" | "ja" | "ko";
62
+ readonly message: string;
63
+ }[]] | undefined;
64
+ readonly disabled?: string | undefined;
65
+ readonly type: "com.shwfed.form.field.month";
66
+ readonly id: string;
67
+ readonly hidden?: string | undefined;
68
+ readonly tooltip?: readonly [{
69
+ readonly locale: "zh";
70
+ readonly message: string;
71
+ }, ...{
72
+ readonly locale: "en" | "ja" | "ko";
73
+ readonly message: string;
74
+ }[]] | undefined;
75
+ readonly displayName?: string | undefined;
76
+ readonly compatibilityDate: "2026-05-24";
77
+ readonly orientation?: "vertical" | "floating" | undefined;
78
+ readonly placeholder?: readonly [{
79
+ readonly locale: "zh";
80
+ readonly message: string;
81
+ }, ...{
82
+ readonly locale: "en" | "ja" | "ko";
83
+ readonly message: string;
84
+ }[]] | undefined;
85
+ readonly readonly?: string | undefined;
86
+ readonly binding?: string | undefined;
87
+ readonly derived?: {
88
+ readonly mode: "formula" | "prefill";
89
+ readonly expression: string;
90
+ } | undefined;
91
+ readonly format?: string | undefined;
92
+ readonly valueFormat?: string | undefined;
93
+ readonly presets?: readonly {
94
+ readonly label: readonly [{
95
+ readonly locale: "zh";
96
+ readonly message: string;
97
+ }, ...{
98
+ readonly locale: "en" | "ja" | "ko";
99
+ readonly message: string;
100
+ }[]];
101
+ readonly id: string;
102
+ readonly value: string;
103
+ }[] | undefined;
104
+ }) => any) | undefined;
105
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
106
+ declare const _default: typeof __VLS_export;
107
+ export default _default;