@shwfed/config 2.10.0 → 2.10.1

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 (97) hide show
  1. package/dist/mcp.mjs +4125 -3183
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-CCaOWk_7.js → FieldGroup.vue_vue_type_script_setup_true_lang-CuFusz5A.js} +1 -1
  4. package/dist/preview/assets/{badge-D9_7atSJ.js → badge-D5FPHSix.js} +1 -1
  5. package/dist/preview/assets/{config-B2d8SiPi.js → config-BHPiQ1lB.js} +1 -1
  6. package/dist/preview/assets/{config-DYxMKhCU.js → config-BWC-Zw21.js} +1 -1
  7. package/dist/preview/assets/{config-CNKb25Qo.js → config-Bg94Z7XN.js} +1 -1
  8. package/dist/preview/assets/{config-CQrqVV1U.js → config-BqSL4UAL.js} +1 -1
  9. package/dist/preview/assets/{config-Bk2VSNeu.js → config-CeRBpZbE.js} +1 -1
  10. package/dist/preview/assets/{config-C9WPOoA7.js → config-CfjcFb_E.js} +1 -1
  11. package/dist/preview/assets/{config-DZlaJUlF.js → config-DNUKa3lN.js} +1 -1
  12. package/dist/preview/assets/{config-BLEovXei.js → config-DVjZmomc.js} +1 -1
  13. package/dist/preview/assets/{config-DyPl6K2G.js → config-Djv6EQBY.js} +1 -1
  14. package/dist/preview/assets/{config-DWA385pD.js → config-PNpa6ENz.js} +1 -1
  15. package/dist/preview/assets/{config-C8lCItmz.js → config-ucxtM3wX.js} +1 -1
  16. package/dist/preview/assets/{config-Bf5Vckj3.js → config-urZuasV7.js} +1 -1
  17. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js → definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js} +1 -1
  18. package/dist/preview/assets/index-BE9O1XgB.js +1 -0
  19. package/dist/preview/assets/{index-CXOEVGFP.js → index-DCRQGu0g.js} +1 -1
  20. package/dist/preview/assets/index-yvElpEK3.js +743 -0
  21. package/dist/preview/assets/{item-DCVX69_o.js → item-CTkdtkvl.js} +1 -1
  22. package/dist/preview/assets/{runtime-r1wbrr4k.js → runtime-3rajYvjp.js} +1 -1
  23. package/dist/preview/assets/{runtime-BNk4EliL.js → runtime-4A3oiig9.js} +1 -1
  24. package/dist/preview/assets/{runtime-Cbc5NH57.js → runtime-BOGZFWxF.js} +1 -1
  25. package/dist/preview/assets/{runtime-BO-KY3T_.js → runtime-BqroTX7H.js} +1 -1
  26. package/dist/preview/assets/{runtime-O6MNC3GA.js → runtime-CBBae0-H.js} +1 -1
  27. package/dist/preview/assets/{runtime-DEWGIyvr.js → runtime-CBuV3vwL.js} +1 -1
  28. package/dist/preview/assets/{runtime-DJ9ElxWB.js → runtime-CI8yzwXd.js} +1 -1
  29. package/dist/preview/assets/{runtime-DSfMvph3.js → runtime-CcyhgOum.js} +1 -1
  30. package/dist/preview/assets/{runtime-BD1A-g1h.js → runtime-CkQ-mNoH.js} +1 -1
  31. package/dist/preview/assets/{runtime-BsNSI1XP.js → runtime-DmxKfudS.js} +1 -1
  32. package/dist/preview/assets/{schema-meta-ovcuERKg.js → schema-meta-BFzIzGiN.js} +1 -1
  33. package/dist/preview/index.html +1 -1
  34. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  35. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +16 -3
  36. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/runtime.vue +5 -1
  37. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +5 -1
  38. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +17 -3
  39. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue +5 -1
  40. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.vue +5 -1
  41. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  42. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/runtime.vue +5 -1
  43. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/runtime.vue +5 -1
  44. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  45. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/runtime.vue +5 -1
  46. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  47. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/runtime.vue +5 -1
  48. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  49. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  50. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  51. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  52. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  53. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  54. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +179 -0
  55. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +942 -0
  56. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +179 -0
  57. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.d.vue.ts +9 -0
  58. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +499 -0
  59. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue.d.ts +9 -0
  60. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +223 -0
  61. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +276 -0
  62. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +179 -0
  63. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +942 -0
  64. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +179 -0
  65. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.d.vue.ts +9 -0
  66. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +438 -0
  67. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue.d.ts +9 -0
  68. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +223 -0
  69. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +276 -0
  70. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +123 -0
  71. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +646 -0
  72. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +123 -0
  73. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.d.vue.ts +9 -0
  74. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +500 -0
  75. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue.d.ts +9 -0
  76. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +83 -0
  77. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +179 -0
  78. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +121 -0
  79. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +577 -0
  80. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +121 -0
  81. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.d.vue.ts +9 -0
  82. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +465 -0
  83. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue.d.ts +9 -0
  84. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +80 -0
  85. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +171 -0
  86. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.d.ts +18 -0
  87. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.js +36 -0
  88. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.d.ts +35 -0
  89. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.js +31 -0
  90. package/dist/runtime/components/table/index.d.vue.ts +2 -0
  91. package/dist/runtime/components/table/index.vue +24 -0
  92. package/dist/runtime/components/table/index.vue.d.ts +2 -0
  93. package/dist/runtime/components/table/utils/shared.d.ts +1 -0
  94. package/dist/runtime/components/table/utils/shared.js +7 -13
  95. package/package.json +1 -1
  96. package/dist/preview/assets/index-7BE56IYF.js +0 -739
  97. package/dist/preview/assets/index-Bwv0Yz_L.js +0 -1
@@ -1 +1 @@
1
- import{d as O,v as M,x as k,y,o as q,c as E,z,b as A,A as x,B as i,C as J,D as L,E as s,F as T,G as V,H as D,I as G,J as H,K,L as g,M as P,N as b,O as U}from"./index-7BE56IYF.js";import W from"./index-CXOEVGFP.js";const X=O({name:"ShwfedBlockAnimatedNumberItem",__name:"item",props:{item:{}},setup(h){const n=h,j=P(),a=x(void 0),m=x(0);function u(){return K(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=i(()=>a.value===void 0?g():U(a.value));function v(e){if(!e)return"";try{const t=b(s(e,{...u(),json:d.value}));return t==null?"":String(t)}catch{return""}}const w=i(()=>v(n.item.prefix)),C=i(()=>v(n.item.suffix));function F(e){if(e)try{const t=b(s(e,{...u(),json:d.value}));return t==null?void 0:typeof t=="string"||typeof t=="object"?t:String(t)}catch{return}}const I=i(()=>F(n.item.style));async function r(){const e=n.item.dataSource,t=u(),_=J(function*(){let o=g();e.request&&(o=yield*L(yield*s(e.request,t)));const B=yield*s(e.value,{...t,json:o});return{json:T(o),value:B}});try{const o=await V(D(_,G));a.value=o.json,m.value=S(o.value)}catch(o){console.warn("[shwfed-animated-number] fetch failed",o)}}const l=i(()=>(n.item.pollingInterval??0)>0),N=i(()=>Math.max(1,n.item.pollingInterval??1)*1e3),c=H(),{pause:p,resume:f}=M(()=>{r()},N,{immediate:!1});return k(()=>{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)=>(q(),E(A(W),{value:m.value,prefix:w.value,suffix:C.value,style:z(I.value)},null,8,["value","prefix","suffix","style"]))}});export{X as default};
1
+ import{d as O,v as M,x as k,y,o as q,c as E,z,b as A,A as x,B as i,C as J,D as L,E as s,F as T,G as V,H as D,I as G,J as H,K,L as g,M as P,N as b,O as U}from"./index-yvElpEK3.js";import W from"./index-DCRQGu0g.js";const X=O({name:"ShwfedBlockAnimatedNumberItem",__name:"item",props:{item:{}},setup(h){const n=h,j=P(),a=x(void 0),m=x(0);function u(){return K(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=i(()=>a.value===void 0?g():U(a.value));function v(e){if(!e)return"";try{const t=b(s(e,{...u(),json:d.value}));return t==null?"":String(t)}catch{return""}}const w=i(()=>v(n.item.prefix)),C=i(()=>v(n.item.suffix));function F(e){if(e)try{const t=b(s(e,{...u(),json:d.value}));return t==null?void 0:typeof t=="string"||typeof t=="object"?t:String(t)}catch{return}}const I=i(()=>F(n.item.style));async function r(){const e=n.item.dataSource,t=u(),_=J(function*(){let o=g();e.request&&(o=yield*L(yield*s(e.request,t)));const B=yield*s(e.value,{...t,json:o});return{json:T(o),value:B}});try{const o=await V(D(_,G));a.value=o.json,m.value=S(o.value)}catch(o){console.warn("[shwfed-animated-number] fetch failed",o)}}const l=i(()=>(n.item.pollingInterval??0)>0),N=i(()=>Math.max(1,n.item.pollingInterval??1)*1e3),c=H(),{pause:p,resume:f}=M(()=>{r()},N,{immediate:!1});return k(()=>{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)=>(q(),E(A(W),{value:m.value,prefix:w.value,suffix:C.value,style:z(I.value)},null,8,["value","prefix","suffix","style"]))}});export{X as default};
@@ -1 +1 @@
1
- import{d as r,aR as f,aS as u,aM as g,aP as p,c as d,b as m,E as l,K as x,aQ as E,M as h,o as _}from"./index-7BE56IYF.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const B=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,i=h(),s=(t,c)=>l(t,{...x(i),...c}),o=E(),a=f(()=>u(g(o,e.config.before,s),()=>p(e.config.expression,s,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:o,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}})));return(t,c)=>(_(),d(b,{"action-id":n.buttonId,effect:m(a)},null,8,["action-id","effect"]))}});export{B as default};
1
+ import{d as r,aR as f,aS as u,aM as g,aP as p,c as d,b as m,E as l,K as x,aQ as E,M as h,o as _}from"./index-yvElpEK3.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const B=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,i=h(),s=(t,c)=>l(t,{...x(i),...c}),o=E(),a=f(()=>u(g(o,e.config.before,s),()=>p(e.config.expression,s,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:o,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}})));return(t,c)=>(_(),d(b,{"action-id":n.buttonId,effect:m(a)},null,8,["action-id","effect"]))}});export{B as default};
@@ -1 +1 @@
1
- import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";import{d as n,c,b as a,o as f,aT as i}from"./index-7BE56IYF.js";const _=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(t){const e=i;return(r,s)=>(f(),c(o,{"action-id":t.buttonId,effect:a(e)},null,8,["action-id","effect"]))}});export{_ as default};
1
+ import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";import{d as n,c,b as a,o as f,aT as i}from"./index-yvElpEK3.js";const _=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(t){const e=i;return(r,s)=>(f(),c(o,{"action-id":t.buttonId,effect:a(e)},null,8,["action-id","effect"]))}});export{_ as default};
@@ -1 +1 @@
1
- import{d as s,Y as M,aW as b,C as p,a1 as c,aX as x,N,c as T,w as d,b as u,A as k,Q as L,aQ as S,aY as w,o as A,j as I,z as V,a as r,aZ as Y,a_ as $,aD as j,M as z,a$ as f,V as m,b0 as F}from"./index-7BE56IYF.js";import{_ as H}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const R=s({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(n){const a=n,{locale:l}=M(),v=e=>{},h=z(),i=L(f,void 0),C=S(),o=k(null),g=b(a.buttonId,{close:()=>w(()=>{o.value?.()})},C),_=s({name:"ModalBoundaryBridge",setup(e,{slots:t}){return $(h),m(F,g),i&&m(f,i),()=>t.default?.()}}),E=(e,t)=>j()?.(e,t),y=p(function*(){const e=c(a.config.modalTitle,l.value)??c(a.buttonTitle,l.value)??"",{modal:t,close:B}=yield*x({title:e,width:a.config.modalWidth});o.value=()=>N(B()),yield*t,o.value=null});return(e,t)=>(A(),T(H,{"action-id":n.buttonId,effect:u(y)},{default:d(()=>[I("div",{style:V(n.config.modalMinHeight?`min-height: ${n.config.modalMinHeight}`:void 0)},[r(u(_),null,{default:d(()=>[r(Y,{"slot-value":n.config.slot,configure:v,"find-entry":E},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{R as default};
1
+ import{d as s,Y as M,aW as b,C as p,a1 as c,aX as x,N,c as T,w as d,b as u,A as k,Q as L,aQ as S,aY as w,o as A,j as I,z as V,a as r,aZ as Y,a_ as $,aD as j,M as z,a$ as f,V as m,b0 as F}from"./index-yvElpEK3.js";import{_ as H}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const R=s({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(n){const a=n,{locale:l}=M(),v=e=>{},h=z(),i=L(f,void 0),C=S(),o=k(null),g=b(a.buttonId,{close:()=>w(()=>{o.value?.()})},C),_=s({name:"ModalBoundaryBridge",setup(e,{slots:t}){return $(h),m(F,g),i&&m(f,i),()=>t.default?.()}}),E=(e,t)=>j()?.(e,t),y=p(function*(){const e=c(a.config.modalTitle,l.value)??c(a.buttonTitle,l.value)??"",{modal:t,close:B}=yield*x({title:e,width:a.config.modalWidth});o.value=()=>N(B()),yield*t,o.value=null});return(e,t)=>(A(),T(H,{"action-id":n.buttonId,effect:u(y)},{default:d(()=>[I("div",{style:V(n.config.modalMinHeight?`min-height: ${n.config.modalMinHeight}`:void 0)},[r(u(_),null,{default:d(()=>[r(Y,{"slot-value":n.config.slot,configure:v,"find-entry":E},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{R as default};
@@ -1 +1 @@
1
- import{d as r,aR as f,aM as d,c as u,b as m,aQ as p,o as l,E as g,K as h,M as _}from"./index-7BE56IYF.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const x=r({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const c=e,s=_(),a=(n,t)=>g(n,{...h(s),...t}),o=p(),i=f(()=>d(o,c.config.triggers,a));return(n,t)=>(l(),u(C,{"action-id":e.buttonId,effect:m(i)},null,8,["action-id","effect"]))}});export{x as default};
1
+ import{d as r,aR as f,aM as d,c as u,b as m,aQ as p,o as l,E as g,K as h,M as _}from"./index-yvElpEK3.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const x=r({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const c=e,s=_(),a=(n,t)=>g(n,{...h(s),...t}),o=p(),i=f(()=>d(o,c.config.triggers,a));return(n,t)=>(l(),u(C,{"action-id":e.buttonId,effect:m(i)},null,8,["action-id","effect"]))}});export{x as default};
@@ -1 +1 @@
1
- import{d as b,aR as E,C as _,aY as r,aM as m,b1 as S,b2 as j,c as v,b as x,E as B,K as C,aQ as L,M as R,o as k}from"./index-7BE56IYF.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const q=b({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=R(),t=(e,n)=>B(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=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,t)}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],t)}));return(e,n)=>(k(),v(T,{"action-id":d.buttonId,effect:x(y)},null,8,["action-id","effect"]))}});export{q as default};
1
+ import{d as b,aR as E,C as _,aY as r,aM as m,b1 as S,b2 as j,c as v,b as x,E as B,K as C,aQ as L,M as R,o as k}from"./index-yvElpEK3.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const q=b({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=R(),t=(e,n)=>B(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=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,t)}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],t)}));return(e,n)=>(k(),v(T,{"action-id":d.buttonId,effect:x(y)},null,8,["action-id","effect"]))}});export{q as default};
@@ -1 +1 @@
1
- import{d as f,aR as u,aU as l,aV as d,c as m,b as w,E as p,K as _,M as g,o as h}from"./index-7BE56IYF.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.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=g(),r=(n,o)=>p(n,{..._(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)=>(h(),m(b,{"action-id":e.buttonId,effect:w(s)},null,8,["action-id","effect"]))}});export{B as default};
1
+ import{d as f,aR as u,aU as l,aV as d,c as m,b as w,E as p,K as _,M as g,o as h}from"./index-yvElpEK3.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.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=g(),r=(n,o)=>p(n,{..._(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)=>(h(),m(b,{"action-id":e.buttonId,effect:w(s)},null,8,["action-id","effect"]))}});export{B as default};
@@ -1 +1 @@
1
- import{d as u,Y as i,c as l,b as p,B as m,o as d,h as f,a1 as _,aN as k,E as w,K as x,M as g}from"./index-7BE56IYF.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(s){const o=s,{locale:t}=i(),a=g(),c=(e,n)=>w(e,{...x(a),...n}),r=m(()=>{const e=_(o.config.content,t.value)??"";return k(e,c)});return(e,n)=>(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
+ import{d as u,Y as i,c as l,b as p,B as m,o as d,h as f,a1 as _,aN as k,E as w,K as x,M as g}from"./index-yvElpEK3.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(s){const o=s,{locale:t}=i(),a=g(),c=(e,n)=>w(e,{...x(a),...n}),r=m(()=>{const e=_(o.config.content,t.value)??"";return k(e,c)});return(e,n)=>(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 f,Y as g,C as l,aM as u,a1 as d,aN as p,aO as m,aP as x,c as E,b as _,E as h,K as C,aQ as w,M as b,o as k}from"./index-7BE56IYF.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const M=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(c){const n=c,{locale:i}=g(),a=b(),s=(e,o)=>h(e,{...C(a),...o}),t=w(),r=l(function*(){yield*u(t,n.config.before,s);const e=d(n.config.markdown,i.value)??"",o=p(e,s);(yield*m({content:o,icon:n.config.icon,color:n.config.color}))||(yield*x(n.config.expression,s,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:t,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(k(),E(I,{"action-id":c.buttonId,effect:_(r)},null,8,["action-id","effect"]))}});export{M as default};
1
+ import{d as f,Y as g,C as l,aM as u,a1 as d,aN as p,aO as m,aP as x,c as E,b as _,E as h,K as C,aQ as w,M as b,o as k}from"./index-yvElpEK3.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const M=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(c){const n=c,{locale:i}=g(),a=b(),s=(e,o)=>h(e,{...C(a),...o}),t=w(),r=l(function*(){yield*u(t,n.config.before,s);const e=d(n.config.markdown,i.value)??"",o=p(e,s);(yield*m({content:o,icon:n.config.icon,color:n.config.color}))||(yield*x(n.config.expression,s,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:t,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(k(),E(I,{"action-id":c.buttonId,effect:_(r)},null,8,["action-id","effect"]))}});export{M as default};
@@ -1 +1 @@
1
- import{d as l,b3 as g,aR as A,aU as y,aM as b,c as _,b as h,E as S,K as j,aQ as k,b4 as C,M as B,o as E}from"./index-7BE56IYF.js";import{_ as M}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const F=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const a=s,f=B(),c=(e,t)=>S(e,{...j(f),...t}),n=g(),o=n.kind==="form"&&n.parent?n.parent:n,u=k(),m=C((e,t,r)=>{if(Array.isArray(e[t])&&Array.isArray(r))return e[t]=r,!0});function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e,t){return i(e)&&i(t)?m({...t},e):t}const d=A(()=>y(c(a.config.expression),e=>{for(const t of Object.keys(e)){const r=p(o.getAt(t),e[t]);o.setAt(t,r)}return b(u,a.config.onSuccess,c)}));return(e,t)=>(E(),_(M,{"action-id":s.buttonId,effect:h(d)},null,8,["action-id","effect"]))}});export{F as default};
1
+ import{d as l,b3 as g,aR as A,aU as y,aM as b,c as _,b as h,E as S,K as j,aQ as k,b4 as C,M as B,o as E}from"./index-yvElpEK3.js";import{_ as M}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const F=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const a=s,f=B(),c=(e,t)=>S(e,{...j(f),...t}),n=g(),o=n.kind==="form"&&n.parent?n.parent:n,u=k(),m=C((e,t,r)=>{if(Array.isArray(e[t])&&Array.isArray(r))return e[t]=r,!0});function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e,t){return i(e)&&i(t)?m({...t},e):t}const d=A(()=>y(c(a.config.expression),e=>{for(const t of Object.keys(e)){const r=p(o.getAt(t),e[t]);o.setAt(t,r)}return b(u,a.config.onSuccess,c)}));return(e,t)=>(E(),_(M,{"action-id":s.buttonId,effect:h(d)},null,8,["action-id","effect"]))}});export{F as default};
@@ -1 +1 @@
1
- import{d as f,Y as u,aR as p,aS as d,aM as l,b5 as m,a1 as g,c as x,b as h,E,K as _,aQ as b,o as B,M as k}from"./index-7BE56IYF.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js";const I=f({name:"ShwfedHttpRequestBatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,{locale:a}=u(),c=k(),s=(t,o)=>E(t,{..._(c),...o}),i=b(),r=p(()=>d(l(i,e.config.before,s),()=>m(e.config.expression,s,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,continueOnError:e.config.continueOnError,markdown:g(e.config.markdown,a.value)??""})));return(t,o)=>(B(),x(C,{"action-id":n.buttonId,effect:h(r)},null,8,["action-id","effect"]))}});export{I as default};
1
+ import{d as f,Y as u,aR as p,aS as d,aM as l,b5 as m,a1 as g,c as x,b as h,E,K as _,aQ as b,o as B,M as k}from"./index-yvElpEK3.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js";const I=f({name:"ShwfedHttpRequestBatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,{locale:a}=u(),c=k(),s=(t,o)=>E(t,{..._(c),...o}),i=b(),r=p(()=>d(l(i,e.config.before,s),()=>m(e.config.expression,s,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,continueOnError:e.config.continueOnError,markdown:g(e.config.markdown,a.value)??""})));return(t,o)=>(B(),x(C,{"action-id":n.buttonId,effect:h(r)},null,8,["action-id","effect"]))}});export{I as default};
@@ -1 +1 @@
1
- import{p as o,q as l,r as p}from"./index-7BE56IYF.js";function i(n){switch(n._tag){case"TypeLiteral":return n;case"Transformation":return i(n.to);case"Refinement":return i(n.from);case"Suspend":return i(n.f());default:return null}}function d(n,t){const e=i(n.ast);return e?e.propertySignatures.find(r=>r.name===t)??null:null}function y(n){const t=n.type;if(t._tag==="Union"&&n.isOptional){const e=t.types.find(r=>r._tag!=="UndefinedKeyword");if(e)return e}return t}function c(n,t,e){const r=d(n,t);if(!r)return;const u=e(r);if(o(u))return u.value;const f=y(r),s=e(f);if(o(s))return s.value;if(f!==r.type){const a=e(r.type);if(o(a))return a.value}}function m(n,t){return c(n,t,l)}function v(n,t){return c(n,t,p)}export{v as a,m as g};
1
+ import{p as o,q as l,r as p}from"./index-yvElpEK3.js";function i(n){switch(n._tag){case"TypeLiteral":return n;case"Transformation":return i(n.to);case"Refinement":return i(n.from);case"Suspend":return i(n.f());default:return null}}function d(n,t){const e=i(n.ast);return e?e.propertySignatures.find(r=>r.name===t)??null:null}function y(n){const t=n.type;if(t._tag==="Union"&&n.isOptional){const e=t.types.find(r=>r._tag!=="UndefinedKeyword");if(e)return e}return t}function c(n,t,e){const r=d(n,t);if(!r)return;const u=e(r);if(o(u))return u.value;const f=y(r),s=e(f);if(o(s))return s.value;if(f!==r.type){const a=e(r.type);if(o(a))return a.value}}function m(n,t){return c(n,t,l)}function v(n,t){return c(n,t,p)}export{v as a,m as g};
@@ -10,7 +10,7 @@
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-7BE56IYF.js"></script>
13
+ <script type="module" crossorigin src="./assets/index-yvElpEK3.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-BnJ5p1Mx.css">
15
15
  </head>
16
16
  <body>
@@ -5,6 +5,7 @@ import { computed, nextTick, ref, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import {
10
11
  Command,
@@ -61,7 +62,10 @@ function evalBool(expression, label) {
61
62
  }
62
63
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
63
64
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
64
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
65
+ const formReadonly = useFormReadonly();
66
+ const isReadonly = computed(
67
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
68
+ );
65
69
  const effectiveReadonly = computed(
66
70
  () => isReadonly.value || props.column.derived?.mode === "formula"
67
71
  );
@@ -5,6 +5,7 @@ import { computed, nextTick } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupNumberField } from "../../../../ui/input-group";
10
11
  import { useFieldValue } from "../../../../form/utils/field-value";
@@ -40,7 +41,10 @@ function evalNumber(expression, label) {
40
41
  }
41
42
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
42
43
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
43
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
44
+ const formReadonly = useFormReadonly();
45
+ const isReadonly = computed(
46
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
47
+ );
44
48
  const effectiveReadonly = computed(
45
49
  () => isReadonly.value || props.column.derived?.mode === "formula"
46
50
  );
@@ -108,11 +112,20 @@ async function onBlur() {
108
112
  v-if="isHidden"
109
113
  class="block h-7 w-full"
110
114
  />
115
+ <!--
116
+ Readonly empty state mirrors the `text` column exactly: a centered,
117
+ faded, non-selectable `-` in `font-mono`, so a readonly grid reads
118
+ uniformly regardless of column type. A present value keeps the
119
+ left-aligned dark text.
120
+ -->
111
121
  <span
112
122
  v-else-if="effectiveReadonly"
113
- class="flex items-center h-7 w-full px-2 text-[0.75rem] text-zinc-700 truncate"
123
+ :class="[
124
+ 'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
125
+ draft !== void 0 ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
126
+ ]"
114
127
  >
115
- {{ draft ?? "\u2014" }}
128
+ {{ draft ?? "-" }}
116
129
  </span>
117
130
  <InputGroup
118
131
  v-else
@@ -4,6 +4,7 @@ import { computed } from "vue";
4
4
  import { useI18n } from "vue-i18n";
5
5
  import { cel as _rawCel } from "../../../../../utils/cel";
6
6
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
7
+ import { useFormReadonly } from "../../../../form/utils/readonly";
7
8
  import { getLocalizedText } from "../../../../../share/locale";
8
9
  import { Switch } from "../../../../ui/switch";
9
10
  import { useFieldValue } from "../../../../form/utils/field-value";
@@ -26,7 +27,10 @@ function evalBool(expression, label) {
26
27
  }
27
28
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
28
29
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
29
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
30
+ const formReadonly = useFormReadonly();
31
+ const isReadonly = computed(
32
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
33
+ );
30
34
  const effectiveReadonly = computed(
31
35
  () => isReadonly.value || props.column.derived?.mode === "formula"
32
36
  );
@@ -4,6 +4,7 @@ import { computed } from "vue";
4
4
  import { useI18n } from "vue-i18n";
5
5
  import { cel as _rawCel } from "../../../../../utils/cel";
6
6
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
7
+ import { useFormReadonly } from "../../../../form/utils/readonly";
7
8
  import { getLocalizedText } from "../../../../../share/locale";
8
9
  import { Switch } from "../../../../ui/switch";
9
10
  import { useFieldValue } from "../../../../form/utils/field-value";
@@ -26,7 +27,10 @@ function evalBool(expression, label) {
26
27
  }
27
28
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
28
29
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
29
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
30
+ const formReadonly = useFormReadonly();
31
+ const isReadonly = computed(
32
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
33
+ );
30
34
  const effectiveReadonly = computed(
31
35
  () => isReadonly.value || props.column.derived?.mode === "formula"
32
36
  );
@@ -5,6 +5,7 @@ import { useI18n } from "vue-i18n";
5
5
  import { Icon } from "@iconify/vue";
6
6
  import { cel as $cel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import {
10
11
  InputGroup,
@@ -35,7 +36,10 @@ function evalBool(expression, label) {
35
36
  }
36
37
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
37
38
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
38
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
39
+ const formReadonly = useFormReadonly();
40
+ const isReadonly = computed(
41
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
42
+ );
39
43
  const effectiveReadonly = computed(
40
44
  () => isReadonly.value || props.column.derived?.mode === "formula"
41
45
  );
@@ -89,11 +93,21 @@ function handleClear() {
89
93
  v-if="isHidden"
90
94
  class="block h-7 w-full"
91
95
  />
96
+ <!--
97
+ Readonly empty state mirrors the `text` column exactly: a centered,
98
+ faded, non-selectable `-` rendered in `font-mono`, so a readonly grid
99
+ reads uniformly regardless of which column type backs each cell. A
100
+ non-empty readonly value keeps the editable cell's left-aligned dark
101
+ text.
102
+ -->
92
103
  <span
93
104
  v-else-if="effectiveReadonly"
94
- class="flex items-center h-7 w-full px-2 text-[0.75rem] text-zinc-700 truncate"
105
+ :class="[
106
+ 'flex items-center h-7 w-full px-2 text-[0.75rem] truncate',
107
+ draft ? 'text-zinc-700' : 'justify-center font-mono text-zinc-300 select-none'
108
+ ]"
95
109
  >
96
- {{ draft || "\u2014" }}
110
+ {{ draft || "-" }}
97
111
  </span>
98
112
  <!--
99
113
  Idle border is faded to 30% so a whole grid of inputs reads as data, not
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { getLocalizedText } from "../../../../../share/locale";
13
14
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
14
15
  import {
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const isInteractive = computed(() => !!props.column.onChange);
77
81
  const pending = ref(false);
78
82
  const json = ref(null);
@@ -7,6 +7,7 @@ import { computed, nextTick, ref, watch } from "vue";
7
7
  import { useI18n } from "vue-i18n";
8
8
  import { cel as _rawCel } from "../../../../../utils/cel";
9
9
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
10
+ import { useFormReadonly } from "../../../../form/utils/readonly";
10
11
  import { getLocalizedText } from "../../../../../share/locale";
11
12
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
12
13
  import {
@@ -63,7 +64,10 @@ function evalBool(expression, label) {
63
64
  }
64
65
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
65
66
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
66
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
67
+ const formReadonly = useFormReadonly();
68
+ const isReadonly = computed(
69
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
70
+ );
67
71
  const isInteractive = computed(() => !!props.column.onChange);
68
72
  const pending = ref(false);
69
73
  function safeInterpolate(tpl) {
@@ -5,6 +5,7 @@ import { computed, ref, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import {
10
11
  Command,
@@ -61,7 +62,10 @@ function evalBool(expression, label) {
61
62
  }
62
63
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
63
64
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
64
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
65
+ const formReadonly = useFormReadonly();
66
+ const isReadonly = computed(
67
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
68
+ );
65
69
  const effectiveReadonly = computed(
66
70
  () => isReadonly.value || props.column.derived?.mode === "formula"
67
71
  );
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { getLocalizedText } from "../../../../../share/locale";
13
14
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
14
15
  import {
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const isInteractive = computed(() => !!props.column.onChange);
77
81
  const pending = ref(false);
78
82
  const json = ref(null);
@@ -7,6 +7,7 @@ import { computed, ref, watch } from "vue";
7
7
  import { useI18n } from "vue-i18n";
8
8
  import { cel as _rawCel } from "../../../../../utils/cel";
9
9
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
10
+ import { useFormReadonly } from "../../../../form/utils/readonly";
10
11
  import { getLocalizedText } from "../../../../../share/locale";
11
12
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
12
13
  import {
@@ -63,7 +64,10 @@ function evalBool(expression, label) {
63
64
  }
64
65
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
65
66
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
66
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
67
+ const formReadonly = useFormReadonly();
68
+ const isReadonly = computed(
69
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
70
+ );
67
71
  const isInteractive = computed(() => !!props.column.onChange);
68
72
  const pending = ref(false);
69
73
  function safeInterpolate(tpl) {
@@ -7,6 +7,7 @@ import { useI18n } from "vue-i18n";
7
7
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
8
8
  import { cel as _rawCel } from "../../../../../utils/cel";
9
9
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
10
+ import { useFormReadonly } from "../../../../form/utils/readonly";
10
11
  import { getLocalizedText } from "../../../../../share/locale";
11
12
  import {
12
13
  Command,
@@ -70,7 +71,10 @@ function evalBool(expression, label) {
70
71
  }
71
72
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
72
73
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
73
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
74
+ const formReadonly = useFormReadonly();
75
+ const isReadonly = computed(
76
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
77
+ );
74
78
  const effectiveReadonly = computed(
75
79
  () => isReadonly.value || props.column.derived?.mode === "formula"
76
80
  );
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { getLocalizedText } from "../../../../../share/locale";
13
14
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
14
15
  import {
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const isInteractive = computed(() => !!props.column.onChange);
77
81
  const pending = ref(false);
78
82
  function safeInterpolate(tpl, context) {
@@ -6,6 +6,7 @@ import { computed, nextTick, ref, watch } from "vue";
6
6
  import { useI18n } from "vue-i18n";
7
7
  import { cel as _rawCel } from "../../../../../utils/cel";
8
8
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
9
+ import { useFormReadonly } from "../../../../form/utils/readonly";
9
10
  import { getLocalizedText } from "../../../../../share/locale";
10
11
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
11
12
  import {
@@ -70,7 +71,10 @@ function evalBool(expression, label) {
70
71
  }
71
72
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
72
73
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
73
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
74
+ const formReadonly = useFormReadonly();
75
+ const isReadonly = computed(
76
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
77
+ );
74
78
  const effectiveReadonly = computed(
75
79
  () => isReadonly.value || props.column.derived?.mode === "formula"
76
80
  );
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { getLocalizedText } from "../../../../../share/locale";
13
14
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
14
15
  import {
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const isInteractive = computed(() => !!props.column.onChange);
77
81
  const pending = ref(false);
78
82
  function safeInterpolate(tpl, context) {
@@ -5,6 +5,7 @@ import { computed, ref, shallowRef, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import { fetchJsonOption } from "../../../../../share/request";
10
11
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
@@ -71,7 +72,10 @@ function evalBool(expression, label) {
71
72
  }
72
73
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
73
74
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
74
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
75
+ const formReadonly = useFormReadonly();
76
+ const isReadonly = computed(
77
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
78
+ );
75
79
  const effectiveReadonly = computed(
76
80
  () => isReadonly.value || props.column.derived?.mode === "formula"
77
81
  );
@@ -5,6 +5,7 @@ import { computed, ref, shallowRef, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { getLocalizedText } from "../../../../../share/locale";
9
10
  import { fetchJsonOption } from "../../../../../share/request";
10
11
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
@@ -71,7 +72,10 @@ function evalBool(expression, label) {
71
72
  }
72
73
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
73
74
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
74
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
75
+ const formReadonly = useFormReadonly();
76
+ const isReadonly = computed(
77
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
78
+ );
75
79
  const effectiveReadonly = computed(
76
80
  () => isReadonly.value || props.column.derived?.mode === "formula"
77
81
  );
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { publishSelection } from "../../../../../utils/selections-registry";
13
14
  import { getLocalizedText } from "../../../../../share/locale";
14
15
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
@@ -75,7 +76,10 @@ function evalBool(expression, label) {
75
76
  }
76
77
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
77
78
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
78
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
79
+ const formReadonly = useFormReadonly();
80
+ const isReadonly = computed(
81
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
82
+ );
79
83
  const isInteractive = computed(
80
84
  () => props.column.write.kind === "binding" || !!props.column.write.onChange
81
85
  );
@@ -9,6 +9,7 @@ import { useI18n } from "vue-i18n";
9
9
  import { asRequest, fetchJsonOption } from "../../../../../share/request";
10
10
  import { cel as _rawCel } from "../../../../../utils/cel";
11
11
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
12
+ import { useFormReadonly } from "../../../../form/utils/readonly";
12
13
  import { publishSelection } from "../../../../../utils/selections-registry";
13
14
  import { getLocalizedText } from "../../../../../share/locale";
14
15
  import { dispatchTriggers, useEventChannel } from "../../../../../share/event-bus";
@@ -75,7 +76,10 @@ function evalBool(expression, label) {
75
76
  }
76
77
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
77
78
  const isDisabledByConfig = computed(() => evalBool(props.column.disabled, "disabled"));
78
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
79
+ const formReadonly = useFormReadonly();
80
+ const isReadonly = computed(
81
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
82
+ );
79
83
  const isInteractive = computed(
80
84
  () => props.column.write.kind === "binding" || !!props.column.write.onChange
81
85
  );
@@ -5,6 +5,7 @@ import { computed, ref, shallowRef, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { publishSelection } from "../../../../../utils/selections-registry";
9
10
  import { getLocalizedText } from "../../../../../share/locale";
10
11
  import { fetchJsonOption } from "../../../../../share/request";
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const effectiveReadonly = computed(
77
81
  () => isReadonly.value || props.column.derived?.mode === "formula"
78
82
  );
@@ -5,6 +5,7 @@ import { computed, ref, shallowRef, watch } from "vue";
5
5
  import { useI18n } from "vue-i18n";
6
6
  import { cel as _rawCel } from "../../../../../utils/cel";
7
7
  import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
8
+ import { useFormReadonly } from "../../../../form/utils/readonly";
8
9
  import { publishSelection } from "../../../../../utils/selections-registry";
9
10
  import { getLocalizedText } from "../../../../../share/locale";
10
11
  import { fetchJsonOption } from "../../../../../share/request";
@@ -72,7 +73,10 @@ function evalBool(expression, label) {
72
73
  }
73
74
  const isHidden = computed(() => evalBool(props.column.hidden, "hidden"));
74
75
  const isDisabled = computed(() => evalBool(props.column.disabled, "disabled"));
75
- const isReadonly = computed(() => evalBool(props.column.readonly, "readonly"));
76
+ const formReadonly = useFormReadonly();
77
+ const isReadonly = computed(
78
+ () => props.column.readonly != null ? evalBool(props.column.readonly, "readonly") : formReadonly.value
79
+ );
76
80
  const effectiveReadonly = computed(
77
81
  () => isReadonly.value || props.column.derived?.mode === "formula"
78
82
  );