@shwfed/config 2.9.13 → 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 (156) hide show
  1. package/dist/mcp.mjs +5020 -3637
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-DZ_H-YRf.js → FieldGroup.vue_vue_type_script_setup_true_lang-CuFusz5A.js} +1 -1
  4. package/dist/preview/assets/{badge-DoNuZh0A.js → badge-D5FPHSix.js} +1 -1
  5. package/dist/preview/assets/{config-DTEJOYqA.js → config-BHPiQ1lB.js} +1 -1
  6. package/dist/preview/assets/{config-C6Cm7DWx.js → config-BWC-Zw21.js} +1 -1
  7. package/dist/preview/assets/{config-YGBoSq6x.js → config-Bg94Z7XN.js} +1 -1
  8. package/dist/preview/assets/{config-CLsjWZz2.js → config-BqSL4UAL.js} +1 -1
  9. package/dist/preview/assets/{config-ugF_BOWz.js → config-CeRBpZbE.js} +1 -1
  10. package/dist/preview/assets/{config-BDDuqAht.js → config-CfjcFb_E.js} +1 -1
  11. package/dist/preview/assets/{config-Bhc_Vu67.js → config-DNUKa3lN.js} +1 -1
  12. package/dist/preview/assets/{config-D4rFsdGO.js → config-DVjZmomc.js} +1 -1
  13. package/dist/preview/assets/{config-tdZMdIN3.js → config-Djv6EQBY.js} +1 -1
  14. package/dist/preview/assets/{config-CIYui2J_.js → config-PNpa6ENz.js} +1 -1
  15. package/dist/preview/assets/{config-Cla0Qngs.js → config-ucxtM3wX.js} +1 -1
  16. package/dist/preview/assets/{config-BrNZsgV0.js → config-urZuasV7.js} +1 -1
  17. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CzzwZ7bp.css → index-BnJ5p1Mx.css} +1 -1
  20. package/dist/preview/assets/{index-C3FdepLE.js → index-DCRQGu0g.js} +1 -1
  21. package/dist/preview/assets/index-yvElpEK3.js +743 -0
  22. package/dist/preview/assets/{item-DecwNzYq.js → item-CTkdtkvl.js} +1 -1
  23. package/dist/preview/assets/{runtime-DtP98Km5.js → runtime-3rajYvjp.js} +1 -1
  24. package/dist/preview/assets/{runtime-C8Ufkmiw.js → runtime-4A3oiig9.js} +1 -1
  25. package/dist/preview/assets/{runtime-blb90Fhv.js → runtime-BOGZFWxF.js} +1 -1
  26. package/dist/preview/assets/{runtime-BK7KNEyN.js → runtime-BqroTX7H.js} +1 -1
  27. package/dist/preview/assets/{runtime-DSUjc0Pk.js → runtime-CBBae0-H.js} +1 -1
  28. package/dist/preview/assets/{runtime-CYpXd7Pq.js → runtime-CBuV3vwL.js} +1 -1
  29. package/dist/preview/assets/{runtime-CjPtRd-T.js → runtime-CI8yzwXd.js} +1 -1
  30. package/dist/preview/assets/{runtime-C5hqSHRW.js → runtime-CcyhgOum.js} +1 -1
  31. package/dist/preview/assets/{runtime-C3dmOj9s.js → runtime-CkQ-mNoH.js} +1 -1
  32. package/dist/preview/assets/{runtime-DZ_AwduQ.js → runtime-DmxKfudS.js} +1 -1
  33. package/dist/preview/assets/{schema-meta-DWUHNP8E.js → schema-meta-BFzIzGiN.js} +1 -1
  34. package/dist/preview/index.html +2 -2
  35. package/dist/runtime/components/actions/components/triggers-field.vue +12 -12
  36. package/dist/runtime/components/config/use-editor.js +1 -1
  37. package/dist/runtime/components/config/utils/validation-error.d.ts +1 -1
  38. package/dist/runtime/components/config/utils/validation-error.js +40 -7
  39. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.markdown/runtime.vue +3 -3
  40. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.text/runtime.vue +6 -5
  41. package/dist/runtime/components/form/fields/2026-04-22/com.shwfed.form.field.textarea/runtime.vue +6 -5
  42. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.combobox.single/runtime.vue +10 -8
  43. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.date/runtime.vue +8 -6
  44. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/runtime.vue +10 -8
  45. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetime/runtime.vue +8 -6
  46. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/runtime.vue +10 -8
  47. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.time/runtime.vue +7 -5
  48. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/runtime.vue +8 -6
  49. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.number/runtime.vue +7 -6
  50. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.numberrange/runtime.vue +9 -7
  51. package/dist/runtime/components/form/fields/2026-04-28/com.shwfed.form.field.switch/runtime.vue +4 -3
  52. package/dist/runtime/components/form/fields/2026-04-29/com.shwfed.form.field.combobox.single/runtime.vue +8 -6
  53. package/dist/runtime/components/form/fields/2026-05-12/com.shwfed.form.field.upload/runtime.vue +5 -4
  54. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.combobox.single.remote/runtime.vue +12 -10
  55. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/runtime.vue +5 -4
  56. package/dist/runtime/components/form/fields/2026-05-17/com.shwfed.form.field.checkbox.group/runtime.vue +9 -7
  57. package/dist/runtime/components/form/fields/2026-05-17/com.shwfed.form.field.radio.group/runtime.vue +9 -7
  58. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/runtime.vue +13 -15
  59. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.month/runtime.vue +8 -6
  60. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/runtime.vue +10 -8
  61. package/dist/runtime/components/form/fields/2026-05-25/com.shwfed.form.field.combobox.multi/runtime.vue +10 -8
  62. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/runtime.vue +13 -14
  63. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/runtime.vue +13 -14
  64. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/runtime.vue +14 -12
  65. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/runtime.vue +14 -12
  66. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.vue +13 -14
  67. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.vue +13 -14
  68. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/runtime.vue +13 -15
  69. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/runtime.vue +15 -16
  70. package/dist/runtime/components/form/fields/2026-06-09/com.shwfed.form.field.upload/runtime.vue +8 -7
  71. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/config.d.vue.ts +175 -0
  72. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/config.vue +782 -0
  73. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/config.vue.d.ts +175 -0
  74. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/runtime.d.vue.ts +8 -0
  75. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/runtime.vue +413 -0
  76. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/runtime.vue.d.ts +8 -0
  77. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/schema.d.ts +214 -0
  78. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/schema.js +191 -0
  79. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/config.d.vue.ts +175 -0
  80. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/config.vue +782 -0
  81. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/config.vue.d.ts +175 -0
  82. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/runtime.d.vue.ts +8 -0
  83. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/runtime.vue +426 -0
  84. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/runtime.vue.d.ts +8 -0
  85. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/schema.d.ts +214 -0
  86. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/schema.js +191 -0
  87. package/dist/runtime/components/form/fields/2026-06-14/combobox-migrate.d.ts +18 -0
  88. package/dist/runtime/components/form/fields/2026-06-14/combobox-migrate.js +36 -0
  89. package/dist/runtime/components/form/utils/state.d.ts +11 -0
  90. package/dist/runtime/components/form/utils/state.js +5 -0
  91. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  92. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +16 -3
  93. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/runtime.vue +5 -1
  94. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +5 -1
  95. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +17 -3
  96. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue +5 -1
  97. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.vue +5 -1
  98. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  99. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/runtime.vue +5 -1
  100. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/runtime.vue +5 -1
  101. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  102. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/runtime.vue +5 -1
  103. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  104. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/runtime.vue +5 -1
  105. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  106. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  107. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  108. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  109. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  110. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  111. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +179 -0
  112. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +942 -0
  113. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +179 -0
  114. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.d.vue.ts +9 -0
  115. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +499 -0
  116. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue.d.ts +9 -0
  117. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +223 -0
  118. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +276 -0
  119. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +179 -0
  120. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +942 -0
  121. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +179 -0
  122. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.d.vue.ts +9 -0
  123. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +438 -0
  124. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue.d.ts +9 -0
  125. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +223 -0
  126. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +276 -0
  127. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +123 -0
  128. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +646 -0
  129. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +123 -0
  130. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.d.vue.ts +9 -0
  131. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +500 -0
  132. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue.d.ts +9 -0
  133. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +83 -0
  134. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +179 -0
  135. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +121 -0
  136. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +577 -0
  137. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +121 -0
  138. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.d.vue.ts +9 -0
  139. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +465 -0
  140. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue.d.ts +9 -0
  141. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +80 -0
  142. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +171 -0
  143. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.d.ts +18 -0
  144. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.js +36 -0
  145. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.d.ts +35 -0
  146. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.js +31 -0
  147. package/dist/runtime/components/table/index.d.vue.ts +2 -0
  148. package/dist/runtime/components/table/index.vue +24 -0
  149. package/dist/runtime/components/table/index.vue.d.ts +2 -0
  150. package/dist/runtime/components/table/utils/shared.d.ts +1 -0
  151. package/dist/runtime/components/table/utils/shared.js +7 -13
  152. package/dist/runtime/components/ui/input-group/InputGroupNumberField.vue +1 -1
  153. package/dist/runtime/share/expression.js +1 -0
  154. package/package.json +1 -1
  155. package/dist/preview/assets/index-B-QhiviS.js +0 -1
  156. package/dist/preview/assets/index-CWMhB7z4.js +0 -735
@@ -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-CWMhB7z4.js";import W from"./index-C3FdepLE.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-CWMhB7z4.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CgNXv26P.js";import{d as n,c,b as a,o as f,aT as i}from"./index-CWMhB7z4.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-CWMhB7z4.js";import{_ as H}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.js";import{_ as b}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.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-CWMhB7z4.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.js";import{_ as M}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.js";import{_ as C}from"./definition.vue_vue_type_script_setup_true_lang-CgNXv26P.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-CWMhB7z4.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,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-CWMhB7z4.js"></script>
14
- <link rel="stylesheet" crossorigin href="./assets/index-CzzwZ7bp.css">
13
+ <script type="module" crossorigin src="./assets/index-yvElpEK3.js"></script>
14
+ <link rel="stylesheet" crossorigin href="./assets/index-BnJ5p1Mx.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="app"></div>
@@ -78,10 +78,10 @@ function addTrigger(option) {
78
78
  function updateParams(index, params) {
79
79
  emit("update:triggers", props.triggers.map((t, i) => i === index ? { ...t, params } : t));
80
80
  }
81
- const collapsed = ref(/* @__PURE__ */ new Set());
82
- function toggleCollapsed(key) {
83
- if (collapsed.value.has(key)) collapsed.value.delete(key);
84
- else collapsed.value.add(key);
81
+ const expanded = ref(/* @__PURE__ */ new Set());
82
+ function toggleExpanded(key) {
83
+ if (expanded.value.has(key)) expanded.value.delete(key);
84
+ else expanded.value.add(key);
85
85
  }
86
86
  function opConfigFor(trigger) {
87
87
  if (!trigger.compatibilityDate) return void 0;
@@ -200,12 +200,12 @@ function rowConfig(rowKey) {
200
200
  >
201
201
  <button
202
202
  type="button"
203
- :aria-expanded="!collapsed.has(row.key)"
204
- :aria-label="collapsed.has(row.key) ? '\u5C55\u5F00\u53C2\u6570' : '\u6298\u53E0\u53C2\u6570'"
205
- @click="toggleCollapsed(row.key)"
203
+ :aria-expanded="expanded.has(row.key)"
204
+ :aria-label="expanded.has(row.key) ? '\u6298\u53E0\u53C2\u6570' : '\u5C55\u5F00\u53C2\u6570'"
205
+ @click="toggleExpanded(row.key)"
206
206
  >
207
207
  <Icon
208
- :icon="collapsed.has(row.key) ? 'fluent:chevron-right-20-regular' : 'fluent:chevron-down-20-regular'"
208
+ :icon="expanded.has(row.key) ? 'fluent:chevron-down-20-regular' : 'fluent:chevron-right-20-regular'"
209
209
  />
210
210
  </button>
211
211
  </InputGroupButton>
@@ -228,12 +228,12 @@ function rowConfig(rowKey) {
228
228
  <!-- Parameterized op: its own `config.vue`, bound to the trigger's
229
229
  `params`. Param-less ops and dangling rows render nothing here.
230
230
  `v-show` (not `v-if`) so the editor stays mounted while collapsed —
231
- its draft state and continuous validation keep running. The
232
- row-scope wrapper provides this row's step roster (earlier rows'
233
- outputs) to the param editor's ExpressionEditors. -->
231
+ its draft state and continuous validation keep running. Rows start
232
+ collapsed; the row-scope wrapper provides this row's step roster
233
+ (earlier rows' outputs) to the param editor's ExpressionEditors. -->
234
234
  <div
235
235
  v-if="opConfigFor(row.trigger)"
236
- v-show="!collapsed.has(row.key)"
236
+ v-show="expanded.has(row.key)"
237
237
  class="mt-2 rounded-md border border-zinc-200 bg-zinc-50/50 p-3"
238
238
  >
239
239
  <TriggerRowScope :roster="stepRosterFor(index)">
@@ -389,7 +389,7 @@ export function useConfigEditor(model, options = {}) {
389
389
  validationError.value = formatValidationError(err, (i) => {
390
390
  const b = topSlotEditor.blocks.value[i];
391
391
  return b ? topSlotEditor.getBlockLabel(b) : void 0;
392
- });
392
+ }, draft.value);
393
393
  }
394
394
  }
395
395
  function reset() {
@@ -1 +1 @@
1
- export declare function formatValidationError(err: unknown, blockLabelAt: (index: number) => string | undefined): string;
1
+ export declare function formatValidationError(err: unknown, blockLabelAt: (index: number) => string | undefined, rootData?: unknown): string;
@@ -3,9 +3,43 @@ function isDiscriminatorMiss(issue) {
3
3
  const last = issue.path[issue.path.length - 1];
4
4
  return (last === "type" || last === "compatibilityDate") && issue.message.startsWith('Expected "');
5
5
  }
6
- function blockIndexOf(path) {
7
- if (path[0] === "slot" && path[1] === "blocks" && typeof path[2] === "number") return path[2];
8
- return null;
6
+ function isObject(v) {
7
+ return typeof v === "object" && v !== null;
8
+ }
9
+ function localeText(v) {
10
+ if (!Array.isArray(v)) return void 0;
11
+ for (const item of v) {
12
+ if (isObject(item) && typeof item.message === "string" && item.message.trim()) {
13
+ return item.message.trim();
14
+ }
15
+ }
16
+ return void 0;
17
+ }
18
+ function nodeLabel(node) {
19
+ if (!isObject(node)) return void 0;
20
+ return localeText(node.label) ?? localeText(node.title) ?? (typeof node.displayName === "string" && node.displayName.trim() ? node.displayName.trim() : void 0) ?? (typeof node.type === "string" ? node.type : void 0);
21
+ }
22
+ function describePath(path, rootData, blockLabelAt) {
23
+ const segs = [];
24
+ let node = rootData;
25
+ let labeledTopBlock = false;
26
+ for (let i = 0; i < path.length; i++) {
27
+ const seg = path[i];
28
+ node = isObject(node) ? node[seg] : void 0;
29
+ const isLeaf = i === path.length - 1;
30
+ if (typeof seg === "number") {
31
+ const isTopBlock = !labeledTopBlock && path[i - 1] === "blocks" && path[i - 2] === "slot";
32
+ if (isTopBlock) {
33
+ labeledTopBlock = true;
34
+ segs.push(blockLabelAt(seg) ?? nodeLabel(node) ?? `#${seg}`);
35
+ } else {
36
+ segs.push(nodeLabel(node) ?? `#${seg}`);
37
+ }
38
+ } else if (isLeaf) {
39
+ segs.push(String(seg));
40
+ }
41
+ }
42
+ return segs;
9
43
  }
10
44
  function fallback(err) {
11
45
  if (err instanceof Error) return err.message;
@@ -15,7 +49,7 @@ function fallback(err) {
15
49
  return String(err);
16
50
  }
17
51
  }
18
- export function formatValidationError(err, blockLabelAt) {
52
+ export function formatValidationError(err, blockLabelAt, rootData) {
19
53
  if (!ParseResult.isParseError(err)) return fallback(err);
20
54
  try {
21
55
  const issues = ParseResult.ArrayFormatter.formatErrorSync(err);
@@ -23,9 +57,8 @@ export function formatValidationError(err, blockLabelAt) {
23
57
  const picked = real.length > 0 ? real : issues;
24
58
  const first = picked[0];
25
59
  if (!first) return fallback(err);
26
- const index = blockIndexOf(first.path);
27
- const label = index === null ? void 0 : blockLabelAt(index);
28
- const prefix = label ? `\u300C${label}\u300D\uFF1A` : "";
60
+ const segs = describePath(first.path, rootData, blockLabelAt);
61
+ const prefix = segs.length > 0 ? `\u300C${segs.join(" \u203A ")}\u300D\uFF1A` : "";
29
62
  const suffix = picked.length > 1 ? `\uFF08\u8FD8\u6709 ${picked.length - 1} \u4E2A\u95EE\u9898\uFF09` : "";
30
63
  return `${prefix}${first.message}${suffix}`;
31
64
  } catch {
@@ -6,20 +6,20 @@ import { celBindings, injectCELContext } from "../../../../../utils/cel-context"
6
6
  import { getLocalizedText } from "../../../../../share/locale";
7
7
  import { Markdown } from "../../../../ui/markdown";
8
8
  import { interpolateMarkdown } from "../../../../table/utils/runtime";
9
- import { useFormState } from "../../../utils/state";
9
+ import { useFormScope } from "../../../utils/state";
10
10
  defineOptions({ name: "ShwfedMarkdownFieldRuntime" });
11
11
  const props = defineProps({
12
12
  fieldId: { type: String, required: true },
13
13
  config: { type: null, required: true }
14
14
  });
15
15
  const { locale } = useI18n();
16
- const { state } = useFormState();
16
+ const formScope = useFormScope();
17
17
  const inherited = injectCELContext();
18
18
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
19
19
  const source = computed(() => {
20
20
  const template = getLocalizedText(props.config.content, locale.value) ?? "";
21
21
  if (!template) return "";
22
- return interpolateMarkdown(template, $cel, { form: state.value ?? {} });
22
+ return interpolateMarkdown(template, $cel, { form: formScope.state.value ?? {} });
23
23
  });
24
24
  </script>
25
25
 
@@ -13,14 +13,14 @@ import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
13
13
  import { useFieldValue } from "../../../utils/field-value";
14
14
  import { useFieldValidation } from "../../../utils/validation";
15
15
  import { useFormReadonly } from "../../../utils/readonly";
16
- import { useFormState } from "../../../utils/state";
16
+ import { useFormScope } from "../../../utils/state";
17
17
  defineOptions({ name: "ShwfedTextFieldRuntime" });
18
18
  const props = defineProps({
19
19
  fieldId: { type: String, required: true },
20
20
  config: { type: null, required: true }
21
21
  });
22
22
  const { locale } = useI18n();
23
- const { state } = useFormState();
23
+ const formScope = useFormScope();
24
24
  const inherited = injectCELContext();
25
25
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
26
26
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -33,7 +33,7 @@ const tooltipText = computed(
33
33
  function evalBool(expression, label) {
34
34
  if (!expression) return false;
35
35
  try {
36
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
36
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
37
37
  } catch (err) {
38
38
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
39
39
  return false;
@@ -90,9 +90,10 @@ function handleClear() {
90
90
  </FieldLabel>
91
91
  <div
92
92
  v-if="effectiveReadonly"
93
- class="min-h-9 py-1.5 text-sm text-zinc-700"
93
+ class="min-h-9 py-1.5 text-sm"
94
+ :class="draft ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
94
95
  >
95
- {{ draft || "\u2014" }}
96
+ {{ draft || "-" }}
96
97
  </div>
97
98
  <InputGroup
98
99
  v-else
@@ -12,14 +12,14 @@ import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
12
12
  import { useFieldValue } from "../../../utils/field-value";
13
13
  import { useFieldValidation } from "../../../utils/validation";
14
14
  import { useFormReadonly } from "../../../utils/readonly";
15
- import { useFormState } from "../../../utils/state";
15
+ import { useFormScope } from "../../../utils/state";
16
16
  defineOptions({ name: "ShwfedTextareaFieldRuntime" });
17
17
  const props = defineProps({
18
18
  fieldId: { type: String, required: true },
19
19
  config: { type: null, required: true }
20
20
  });
21
21
  const { locale } = useI18n();
22
- const { state } = useFormState();
22
+ const formScope = useFormScope();
23
23
  const inherited = injectCELContext();
24
24
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
25
25
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -33,7 +33,7 @@ const maxLength = computed(() => props.config.maxLength);
33
33
  function evalBool(expression, label) {
34
34
  if (!expression) return false;
35
35
  try {
36
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
36
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
37
37
  } catch (err) {
38
38
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
39
39
  return false;
@@ -85,9 +85,10 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
85
85
  </FieldLabel>
86
86
  <div
87
87
  v-if="effectiveReadonly"
88
- class="min-h-9 py-1.5 text-sm whitespace-pre-wrap text-zinc-700"
88
+ class="min-h-9 py-1.5 text-sm whitespace-pre-wrap"
89
+ :class="draft ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
89
90
  >
90
- {{ draft || "\u2014" }}
91
+ {{ draft || "-" }}
91
92
  </div>
92
93
  <InputGroup v-else>
93
94
  <InputGroupTextarea
@@ -21,7 +21,7 @@ import { Markdown } from "../../../../ui/markdown";
21
21
  import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
22
22
  import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
23
23
  import { useFormReadonly } from "../../../utils/readonly";
24
- import { useFormState } from "../../../utils/state";
24
+ import { useFormScope, useFormState } from "../../../utils/state";
25
25
  defineOptions({ name: "ShwfedComboboxSingleFieldRuntime" });
26
26
  const props = defineProps({
27
27
  fieldId: { type: String, required: true },
@@ -47,7 +47,8 @@ const { locale, t } = useI18n({
47
47
  }
48
48
  }
49
49
  });
50
- const { state, getAt, setAt } = useFormState();
50
+ const { getAt, setAt } = useFormState();
51
+ const formScope = useFormScope();
51
52
  const inherited = injectCELContext();
52
53
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
53
54
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -60,7 +61,7 @@ const tooltipText = computed(
60
61
  function evalBool(expression, label) {
61
62
  if (!expression) return false;
62
63
  try {
63
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
64
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
64
65
  } catch (err) {
65
66
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
66
67
  return false;
@@ -74,7 +75,7 @@ const isReadonly = computed(
74
75
  const effectiveReadonly = computed(() => isReadonly.value || props.config.derived?.mode === "formula");
75
76
  function valueOf(option) {
76
77
  try {
77
- return Effect.runSync($cel(props.config.optionValue, { form: state.value ?? {}, option }));
78
+ return Effect.runSync($cel(props.config.optionValue, { form: formScope.state.value ?? {}, option }));
78
79
  } catch (err) {
79
80
  console.error(`[shwfed-form] failed to evaluate optionValue for ${props.fieldId}:`, err);
80
81
  return void 0;
@@ -83,12 +84,12 @@ function valueOf(option) {
83
84
  function labelOf(option) {
84
85
  const tpl = getLocalizedText(props.config.optionLabel, locale.value) ?? "";
85
86
  if (!tpl) return "";
86
- return interpolateMarkdown(tpl, $cel, { form: state.value ?? {}, option });
87
+ return interpolateMarkdown(tpl, $cel, { form: formScope.state.value ?? {}, option });
87
88
  }
88
89
  const entries = computed(() => {
89
90
  let raw;
90
91
  try {
91
- raw = Effect.runSync($cel(props.config.options, { form: state.value ?? {} }));
92
+ raw = Effect.runSync($cel(props.config.options, { form: formScope.state.value ?? {} }));
92
93
  } catch (err) {
93
94
  console.error(`[shwfed-form] failed to evaluate options for ${props.fieldId}:`, err);
94
95
  return [];
@@ -175,9 +176,10 @@ function handleClear() {
175
176
  </FieldLabel>
176
177
  <div
177
178
  v-if="effectiveReadonly"
178
- class="min-h-9 py-1.5 text-sm text-zinc-700"
179
+ class="min-h-9 py-1.5 text-sm"
180
+ :class="selectedLabel ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
179
181
  >
180
- {{ selectedLabel || "\u2014" }}
182
+ {{ selectedLabel || "-" }}
181
183
  </div>
182
184
  <Popover
183
185
  v-else
@@ -12,14 +12,15 @@ import { Markdown } from "../../../../ui/markdown";
12
12
  import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
13
13
  import { useFieldValidation } from "../../../utils/validation";
14
14
  import { useFormReadonly } from "../../../utils/readonly";
15
- import { useFormState } from "../../../utils/state";
15
+ import { useFormScope, useFormState } from "../../../utils/state";
16
16
  defineOptions({ name: "ShwfedDateFieldRuntime" });
17
17
  const props = defineProps({
18
18
  fieldId: { type: String, required: true },
19
19
  config: { type: null, required: true }
20
20
  });
21
21
  const { locale } = useI18n();
22
- const { state, getAt, setAt } = useFormState();
22
+ const { getAt, setAt } = useFormState();
23
+ const formScope = useFormScope();
23
24
  const inherited = injectCELContext();
24
25
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
25
26
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -32,7 +33,7 @@ const tooltipText = computed(
32
33
  function evalBool(expression, label) {
33
34
  if (!expression) return false;
34
35
  try {
35
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
36
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
36
37
  } catch (err) {
37
38
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
38
39
  return false;
@@ -54,7 +55,7 @@ const shortcuts = computed(() => {
54
55
  name: preset.label,
55
56
  value: () => {
56
57
  try {
57
- const d = Effect.runSync($cel(preset.value, { form: state.value ?? {} }));
58
+ const d = Effect.runSync($cel(preset.value, { form: formScope.state.value ?? {} }));
58
59
  return formatDate(d, resolvedValueFormat.value);
59
60
  } catch (err) {
60
61
  console.error(`[shwfed-form] failed to evaluate preset "${preset.value}" for ${props.fieldId}:`, err);
@@ -115,9 +116,10 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
115
116
  </FieldLabel>
116
117
  <div
117
118
  v-if="effectiveReadonly"
118
- class="min-h-9 py-1.5 text-sm text-zinc-700"
119
+ class="min-h-9 py-1.5 text-sm"
120
+ :class="model ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
119
121
  >
120
- {{ model || "\u2014" }}
122
+ {{ model || "-" }}
121
123
  </div>
122
124
  <DatePicker
123
125
  v-else
@@ -12,14 +12,15 @@ import { Markdown } from "../../../../ui/markdown";
12
12
  import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
13
13
  import { useFieldValidation } from "../../../utils/validation";
14
14
  import { useFormReadonly } from "../../../utils/readonly";
15
- import { useFormState } from "../../../utils/state";
15
+ import { useFormScope, useFormState } from "../../../utils/state";
16
16
  defineOptions({ name: "ShwfedDateRangeFieldRuntime" });
17
17
  const props = defineProps({
18
18
  fieldId: { type: String, required: true },
19
19
  config: { type: null, required: true }
20
20
  });
21
21
  const { locale } = useI18n();
22
- const { state, getAt, setAt } = useFormState();
22
+ const { getAt, setAt } = useFormState();
23
+ const formScope = useFormScope();
23
24
  const inherited = injectCELContext();
24
25
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
25
26
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -35,7 +36,7 @@ const tooltipText = computed(
35
36
  function evalBool(expression, label) {
36
37
  if (!expression) return false;
37
38
  try {
38
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
39
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
39
40
  } catch (err) {
40
41
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
41
42
  return false;
@@ -57,8 +58,8 @@ const shortcuts = computed(() => {
57
58
  name: preset.label,
58
59
  value: () => {
59
60
  try {
60
- const start = Effect.runSync($cel(preset.start, { form: state.value ?? {} }));
61
- const end = Effect.runSync($cel(preset.end, { form: state.value ?? {} }));
61
+ const start = Effect.runSync($cel(preset.start, { form: formScope.state.value ?? {} }));
62
+ const end = Effect.runSync($cel(preset.end, { form: formScope.state.value ?? {} }));
62
63
  return [
63
64
  formatDate(start, resolvedValueFormat.value),
64
65
  formatDate(end, resolvedValueFormat.value)
@@ -113,7 +114,7 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
113
114
  });
114
115
  const readonlyText = computed(() => {
115
116
  const v = model.value;
116
- if (!v) return "\u2014";
117
+ if (!v) return null;
117
118
  return `${v[0]} ~ ${v[1]}`;
118
119
  });
119
120
  </script>
@@ -145,9 +146,10 @@ const readonlyText = computed(() => {
145
146
  </FieldLabel>
146
147
  <div
147
148
  v-if="effectiveReadonly"
148
- class="min-h-9 py-1.5 text-sm text-zinc-700"
149
+ class="min-h-9 py-1.5 text-sm"
150
+ :class="readonlyText ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
149
151
  >
150
- {{ readonlyText }}
152
+ {{ readonlyText || "-" }}
151
153
  </div>
152
154
  <DateRangePicker
153
155
  v-else
@@ -12,14 +12,15 @@ import { Markdown } from "../../../../ui/markdown";
12
12
  import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
13
13
  import { useFieldValidation } from "../../../utils/validation";
14
14
  import { useFormReadonly } from "../../../utils/readonly";
15
- import { useFormState } from "../../../utils/state";
15
+ import { useFormScope, useFormState } from "../../../utils/state";
16
16
  defineOptions({ name: "ShwfedDateTimeFieldRuntime" });
17
17
  const props = defineProps({
18
18
  fieldId: { type: String, required: true },
19
19
  config: { type: null, required: true }
20
20
  });
21
21
  const { locale } = useI18n();
22
- const { state, getAt, setAt } = useFormState();
22
+ const { getAt, setAt } = useFormState();
23
+ const formScope = useFormScope();
23
24
  const inherited = injectCELContext();
24
25
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
25
26
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -32,7 +33,7 @@ const tooltipText = computed(
32
33
  function evalBool(expression, label) {
33
34
  if (!expression) return false;
34
35
  try {
35
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
36
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
36
37
  } catch (err) {
37
38
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
38
39
  return false;
@@ -54,7 +55,7 @@ const shortcuts = computed(() => {
54
55
  name: preset.label,
55
56
  value: () => {
56
57
  try {
57
- const d = Effect.runSync($cel(preset.value, { form: state.value ?? {} }));
58
+ const d = Effect.runSync($cel(preset.value, { form: formScope.state.value ?? {} }));
58
59
  return formatDate(d, resolvedValueFormat.value);
59
60
  } catch (err) {
60
61
  console.error(`[shwfed-form] failed to evaluate preset "${preset.value}" for ${props.fieldId}:`, err);
@@ -115,9 +116,10 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
115
116
  </FieldLabel>
116
117
  <div
117
118
  v-if="effectiveReadonly"
118
- class="min-h-9 py-1.5 text-sm text-zinc-700"
119
+ class="min-h-9 py-1.5 text-sm"
120
+ :class="model ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
119
121
  >
120
- {{ model || "\u2014" }}
122
+ {{ model || "-" }}
121
123
  </div>
122
124
  <DatePicker
123
125
  v-else
@@ -12,14 +12,15 @@ import { Markdown } from "../../../../ui/markdown";
12
12
  import { DEFAULT_FIELD_ORIENTATION } from "../../../utils/common";
13
13
  import { useFieldValidation } from "../../../utils/validation";
14
14
  import { useFormReadonly } from "../../../utils/readonly";
15
- import { useFormState } from "../../../utils/state";
15
+ import { useFormScope, useFormState } from "../../../utils/state";
16
16
  defineOptions({ name: "ShwfedDateTimeRangeFieldRuntime" });
17
17
  const props = defineProps({
18
18
  fieldId: { type: String, required: true },
19
19
  config: { type: null, required: true }
20
20
  });
21
21
  const { locale } = useI18n();
22
- const { state, getAt, setAt } = useFormState();
22
+ const { getAt, setAt } = useFormState();
23
+ const formScope = useFormScope();
23
24
  const inherited = injectCELContext();
24
25
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
25
26
  const labelText = computed(() => getLocalizedText(props.config.label, locale.value));
@@ -35,7 +36,7 @@ const tooltipText = computed(
35
36
  function evalBool(expression, label) {
36
37
  if (!expression) return false;
37
38
  try {
38
- return Effect.runSync($cel(expression, { form: state.value ?? {} }));
39
+ return Effect.runSync($cel(expression, { form: formScope.state.value ?? {} }));
39
40
  } catch (err) {
40
41
  console.error(`[shwfed-form] failed to evaluate ${label} for ${props.fieldId}:`, err);
41
42
  return false;
@@ -57,8 +58,8 @@ const shortcuts = computed(() => {
57
58
  name: preset.label,
58
59
  value: () => {
59
60
  try {
60
- const start = Effect.runSync($cel(preset.start, { form: state.value ?? {} }));
61
- const end = Effect.runSync($cel(preset.end, { form: state.value ?? {} }));
61
+ const start = Effect.runSync($cel(preset.start, { form: formScope.state.value ?? {} }));
62
+ const end = Effect.runSync($cel(preset.end, { form: formScope.state.value ?? {} }));
62
63
  return [
63
64
  formatDate(start, resolvedValueFormat.value),
64
65
  formatDate(end, resolvedValueFormat.value)
@@ -113,7 +114,7 @@ const { isRequired, errors, warnings, visible } = useFieldValidation({
113
114
  });
114
115
  const readonlyText = computed(() => {
115
116
  const v = model.value;
116
- if (!v) return "\u2014";
117
+ if (!v) return null;
117
118
  return `${v[0]} ~ ${v[1]}`;
118
119
  });
119
120
  </script>
@@ -145,9 +146,10 @@ const readonlyText = computed(() => {
145
146
  </FieldLabel>
146
147
  <div
147
148
  v-if="effectiveReadonly"
148
- class="min-h-9 py-1.5 text-sm text-zinc-700"
149
+ class="min-h-9 py-1.5 text-sm"
150
+ :class="readonlyText ? 'text-zinc-700' : 'font-mono text-zinc-300 select-none'"
149
151
  >
150
- {{ readonlyText }}
152
+ {{ readonlyText || "-" }}
151
153
  </div>
152
154
  <DateRangePicker
153
155
  v-else