@shwfed/config 2.3.19 → 2.3.21

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 (33) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/preview/assets/{config-BERbwRqR.js → config--_6I2ueu.js} +1 -1
  3. package/dist/preview/assets/{config-BZrnB31E.js → config-BH2Cgm6Z.js} +1 -1
  4. package/dist/preview/assets/{config-RIqYuUkC.js → config-BdEFFxuI.js} +1 -1
  5. package/dist/preview/assets/{config-CrffMahT.js → config-BkTFAoSA.js} +1 -1
  6. package/dist/preview/assets/{config-BQDXm2N4.js → config-Bo9NgVie.js} +1 -1
  7. package/dist/preview/assets/{config-B8qIrXw4.js → config-CIxAb4Oe.js} +1 -1
  8. package/dist/preview/assets/{config-BfiDa6j3.js → config-D-6Tgeq0.js} +1 -1
  9. package/dist/preview/assets/{config-BmzbCaL9.js → config-MKO1-4J8.js} +1 -1
  10. package/dist/preview/assets/{config-CI4d63Pa.js → config-__RnmfhP.js} +1 -1
  11. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js → definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js} +1 -1
  12. package/dist/preview/assets/{index-X6To2gmZ.js → index-Bfdy_BZY.js} +83 -83
  13. package/dist/preview/assets/index-CzcHfDck.js +1 -0
  14. package/dist/preview/assets/{runtime-ZprvETkX.js → runtime-BKO8_nF6.js} +1 -1
  15. package/dist/preview/assets/{runtime-CQPoA4Wr.js → runtime-Be9JgLOm.js} +1 -1
  16. package/dist/preview/assets/{runtime-CpsOFZJU.js → runtime-BrUg4LS5.js} +1 -1
  17. package/dist/preview/assets/{runtime-CKWbV48T.js → runtime-BsM6WFl4.js} +1 -1
  18. package/dist/preview/assets/{runtime-DLe-_bzP.js → runtime-C-k7G8_4.js} +1 -1
  19. package/dist/preview/assets/runtime-Cec8NzXu.js +1 -0
  20. package/dist/preview/assets/{runtime-BQsuM5NY.js → runtime-Cqi_SqJY.js} +1 -1
  21. package/dist/preview/assets/runtime-H9vie18v.js +1 -0
  22. package/dist/preview/assets/{runtime-DY65pO8M.js → runtime-w4O6Z5Ly.js} +1 -1
  23. package/dist/preview/index.html +1 -1
  24. package/dist/runtime/components/actions/buttons/2026-05-11/com.shwfed.actions.button.modal.layout/runtime.vue +4 -1
  25. package/dist/runtime/components/actions/buttons/2026-05-24/com.shwfed.actions.button.state.write/runtime.vue +2 -1
  26. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/row.vue +1 -1
  27. package/dist/runtime/components/form/utils/state.d.ts +25 -1
  28. package/dist/runtime/components/form/utils/state.js +4 -1
  29. package/dist/runtime/components/table/row-provider.vue +1 -1
  30. package/package.json +1 -1
  31. package/dist/preview/assets/index-CT6yD2gM.js +0 -1
  32. package/dist/preview/assets/runtime-DyCSllvl.js +0 -1
  33. package/dist/preview/assets/runtime-pkc99x6z.js +0 -1
@@ -0,0 +1 @@
1
+ import{aL as e}from"./index-Bfdy_BZY.js";import{aM as r,aN as s,aO as t}from"./index-Bfdy_BZY.js";export{r as TableConfig,s as createTableConfig,e as default,t as getColumnTechnicalKey};
@@ -1 +1 @@
1
- import{d as i,ao as f,aq as r,ar as d,e as m,u,ak as l,al as p,am as _,o as g}from"./index-X6To2gmZ.js";import{_ as h}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const x=i({name:"ShwfedNavigationActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=e,o=_(),c=(n,a)=>l(n,{...p(o),...a}),s=f(()=>r(c(t.config.url),n=>d(()=>{window.open(n,t.config.mode)})));return(n,a)=>(g(),m(h,{"action-id":e.buttonId,effect:u(s)},null,8,["action-id","effect"]))}});export{x as default};
1
+ import{d as i,ao as f,aq as r,ar as d,e as m,u,ak as l,al as p,am as _,o as g}from"./index-Bfdy_BZY.js";import{_ as h}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const x=i({name:"ShwfedNavigationActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=e,o=_(),c=(n,a)=>l(n,{...p(o),...a}),s=f(()=>r(c(t.config.url),n=>d(()=>{window.open(n,t.config.mode)})));return(n,a)=>(g(),m(h,{"action-id":e.buttonId,effect:u(s)},null,8,["action-id","effect"]))}});export{x as default};
@@ -1 +1 @@
1
- import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";import{d as n,e as a,u as c,o as f,ap as i}from"./index-X6To2gmZ.js";const p=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=i;return(r,s)=>(f(),a(o,{"action-id":e.buttonId,effect:c(t)},null,8,["action-id","effect"]))}});export{p as default};
1
+ import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";import{d as n,e as a,u as c,o as f,ap as i}from"./index-Bfdy_BZY.js";const p=n({name:"ShwfedPrototypeActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const t=i;return(r,s)=>(f(),a(o,{"action-id":e.buttonId,effect:c(t)},null,8,["action-id","effect"]))}});export{p as default};
@@ -1 +1 @@
1
- import{d as u,ae as l,e as i,u as p,$ as m,o as d,k as f,ag as _,ah as k,ak as g,al as w,am as x}from"./index-X6To2gmZ.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(n){const s=n,{locale:o}=l(),t=x(),c=(e,a)=>g(e,{...w(t),...a}),r=m(()=>{const e=_(s.config.content,o.value)??"";return k(e,c)});return(e,a)=>(d(),i(p(f),{"data-slot":"buttons-markdown",source:r.value,class:"prose prose-sm prose-zinc px-1"},null,8,["source"]))}});export{B as default};
1
+ import{d as u,ae as l,e as i,u as p,$ as m,o as d,k as f,ag as _,ah as k,ak as g,al as w,am as x}from"./index-Bfdy_BZY.js";const B=u({name:"ShwfedMarkdownItemRuntime",__name:"runtime",props:{config:{}},setup(n){const s=n,{locale:o}=l(),t=x(),c=(e,a)=>g(e,{...w(t),...a}),r=m(()=>{const e=_(s.config.content,o.value)??"";return k(e,c)});return(e,a)=>(d(),i(p(f),{"data-slot":"buttons-markdown",source:r.value,class:"prose prose-sm prose-zinc px-1"},null,8,["source"]))}});export{B as default};
@@ -1 +1 @@
1
- import{d as r,ao as f,aj as u,e as p,u as g,ak as m,al as l,am as d,an as x,o as E}from"./index-X6To2gmZ.js";import{_}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const k=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,t=d(),c=(s,o)=>m(s,{...l(t),...o}),i=x(),a=f(()=>u(e.config.expression,c,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:i,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}}));return(s,o)=>(E(),p(_,{"action-id":n.buttonId,effect:g(a)},null,8,["action-id","effect"]))}});export{k as default};
1
+ import{d as r,ao as f,aj as u,e as p,u as g,ak as m,al as l,am as d,an as x,o as E}from"./index-Bfdy_BZY.js";import{_}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const k=r({name:"ShwfedHttpRequestActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(n){const e=n,t=d(),c=(s,o)=>m(s,{...l(t),...o}),i=x(),a=f(()=>u(e.config.expression,c,{messageExpression:e.config.messageExpression,resultExpression:e.config.resultExpression,channel:i,triggers:{success:e.config.onSuccess,warning:e.config.onWarning,error:e.config.onError,info:e.config.onInfo}}));return(s,o)=>(E(),p(_,{"action-id":n.buttonId,effect:g(a)},null,8,["action-id","effect"]))}});export{k as default};
@@ -1 +1 @@
1
- import{d as _,ao as B,af as E,ar as r,aA as m,aB as S,aC as j,e as k,u as v,ak as x,al as C,an as L,am as b,o as R}from"./index-X6To2gmZ.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const O=_({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=b(),t=(e,n)=>x(e,{...C(g),...n}),l=L(),p=new Set(["success","error","warning","info"]);function f(e){const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=e.name,document.body.appendChild(o),o.click(),o.remove(),URL.revokeObjectURL(n)}const y=B(()=>E(function*(){const{template:e,messageExpression:n,resultExpression:o}=c.config,u=yield*t(e.request);if(!e.download){const s=yield*u.file();return yield*r(()=>f(s)),yield*m(l,c.config.onSuccess)}const a={json:yield*u.json()},i=o===void 0?"success":yield*S(t(o,a),s=>p.has(s)?s:"success");if(n!==void 0){const s=yield*t(n,a);yield*r(()=>j[i](s))}if(i==="success"||i==="info"){const h=yield*(yield*t(e.download,a)).file();yield*r(()=>f(h))}const w={success:c.config.onSuccess,warning:c.config.onWarning,error:c.config.onError,info:c.config.onInfo};return yield*m(l,w[i])}));return(e,n)=>(R(),k(T,{"action-id":d.buttonId,effect:v(y)},null,8,["action-id","effect"]))}});export{O as default};
1
+ import{d as _,ao as B,af as E,ar as r,aB as m,aC as S,aD as j,e as k,u as v,ak as x,al as C,an as L,am as b,o as R}from"./index-Bfdy_BZY.js";import{_ as T}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const q=_({name:"ShwfedHttpDownloadActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(d){const c=d,g=b(),t=(e,n)=>x(e,{...C(g),...n}),l=L(),p=new Set(["success","error","warning","info"]);function f(e){const n=URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=e.name,document.body.appendChild(o),o.click(),o.remove(),URL.revokeObjectURL(n)}const y=B(()=>E(function*(){const{template:e,messageExpression:n,resultExpression:o}=c.config,u=yield*t(e.request);if(!e.download){const s=yield*u.file();return yield*r(()=>f(s)),yield*m(l,c.config.onSuccess)}const a={json:yield*u.json()},i=o===void 0?"success":yield*S(t(o,a),s=>p.has(s)?s:"success");if(n!==void 0){const s=yield*t(n,a);yield*r(()=>j[i](s))}if(i==="success"||i==="info"){const h=yield*(yield*t(e.download,a)).file();yield*r(()=>f(h))}const w={success:c.config.onSuccess,warning:c.config.onWarning,error:c.config.onError,info:c.config.onInfo};return yield*m(l,w[i])}));return(e,n)=>(R(),k(T,{"action-id":d.buttonId,effect:v(y)},null,8,["action-id","effect"]))}});export{q as default};
@@ -0,0 +1 @@
1
+ import{d as l,aE as g,ao as A,aq as y,aB as _,e as h,u as S,ak as b,al as k,an as j,aF as B,o as C,am as E}from"./index-Bfdy_BZY.js";import{_ as F}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const I=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(r){const s=r,i=E(),f=(e,t)=>b(e,{...k(i),...t}),n=g(),o=n.kind==="form"&&n.parent?n.parent:n,u=j(),m=B((e,t,a)=>{if(Array.isArray(e[t])&&Array.isArray(a))return e[t]=a,!0});function c(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e,t){return c(e)&&c(t)?m({...t},e):t}const d=A(()=>y(f(s.config.expression),e=>{for(const t of Object.keys(e)){const a=p(o.getAt(t),e[t]);o.setAt(t,a)}return _(u,s.config.onSuccess)}));return(e,t)=>(C(),h(F,{"action-id":r.buttonId,effect:S(d)},null,8,["action-id","effect"]))}});export{I as default};
@@ -1 +1 @@
1
- import{d as f,ae as u,af as l,ag as g,ah as m,ai as p,aj as d,e as x,u as E,ak as _,al as h,am as k,an as w,o as C}from"./index-X6To2gmZ.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const R=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const n=s,{locale:c}=u(),a=k(),t=(e,o)=>_(e,{...h(a),...o}),i=w(),r=l(function*(){const e=g(n.config.markdown,c.value)??"",o=m(e,t);(yield*p({content:o,icon:n.config.icon,color:n.config.color}))||(yield*d(n.config.expression,t,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:i,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(C(),x(I,{"action-id":s.buttonId,effect:E(r)},null,8,["action-id","effect"]))}});export{R as default};
1
+ import{d as f,ae as u,af as l,ag as g,ah as m,ai as p,aj as d,e as x,u as E,ak as _,al as h,am as k,an as w,o as C}from"./index-Bfdy_BZY.js";import{_ as I}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const R=f({name:"ShwfedHttpRequestConfirmActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(s){const n=s,{locale:c}=u(),a=k(),t=(e,o)=>_(e,{...h(a),...o}),i=w(),r=l(function*(){const e=g(n.config.markdown,c.value)??"",o=m(e,t);(yield*p({content:o,icon:n.config.icon,color:n.config.color}))||(yield*d(n.config.expression,t,{messageExpression:n.config.messageExpression,resultExpression:n.config.resultExpression,channel:i,triggers:{success:n.config.onSuccess,warning:n.config.onWarning,error:n.config.onError,info:n.config.onInfo}}))});return(e,o)=>(C(),x(I,{"action-id":s.buttonId,effect:E(r)},null,8,["action-id","effect"]))}});export{R as default};
@@ -0,0 +1 @@
1
+ import{d as i,ae as x,as as p,af as M,ag as c,at as T,au as N,e as b,w as d,u,a0 as k,a1 as w,an as L,ar as S,o as A,f as I,av as z,g as r,aw as F,ax as H,a7 as V,am as $,ay as f,az as m,aA as j}from"./index-Bfdy_BZY.js";import{_ as K}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";const O=i({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(a){const n=a,{locale:l}=x(),v=e=>{},g=$(),s=w(f,void 0),h=L(),o=k(null),C=p(n.buttonId,{close:()=>S(()=>{o.value?.()})},h),y=i({name:"ModalBoundaryBridge",setup(e,{slots:t}){return H(g),m(j,C),s&&m(f,s),()=>t.default?.()}}),E=(e,t)=>V()?.(e,t),_=M(function*(){const e=c(n.config.modalTitle,l.value)??c(n.buttonTitle,l.value)??"",{modal:t,close:B}=yield*T({title:e,width:n.config.modalWidth});o.value=()=>N(B()),yield*t,o.value=null});return(e,t)=>(A(),b(K,{"action-id":a.buttonId,effect:u(_)},{default:d(()=>[I("div",{style:z(a.config.modalMinHeight?`min-height: ${a.config.modalMinHeight}`:void 0)},[r(u(y),null,{default:d(()=>[r(F,{"slot-value":a.config.slot,configure:v,"find-entry":E},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{O as default};
@@ -1 +1 @@
1
- import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";import{d as s,ao as c,aA as i,e as r,u as f,an as u,o as m}from"./index-X6To2gmZ.js";const g=s({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const n=e,t=u(),a=c(()=>i(t,n.config.triggers));return(p,d)=>(m(),r(o,{"action-id":e.buttonId,effect:f(a)},null,8,["action-id","effect"]))}});export{g as default};
1
+ import{_ as o}from"./definition.vue_vue_type_script_setup_true_lang-DeVEbdbZ.js";import{d as s,ao as c,aB as i,e as r,u as f,an as u,o as m}from"./index-Bfdy_BZY.js";const g=s({name:"ShwfedEventDispatchActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(e){const n=e,t=u(),a=c(()=>i(t,n.config.triggers));return(p,d)=>(m(),r(o,{"action-id":e.buttonId,effect:f(a)},null,8,["action-id","effect"]))}});export{g as default};
@@ -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-X6To2gmZ.js"></script>
13
+ <script type="module" crossorigin src="./assets/index-Bfdy_BZY.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-DomLsyPH.css">
15
15
  </head>
16
16
  <body>
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { defineComponent, provide, ref } from "vue";
2
+ import { defineComponent, inject, provide, ref } from "vue";
3
3
  import { Effect } from "effect";
4
4
  import { useI18n } from "vue-i18n";
5
5
  import { openModal } from "../../../../../composables/useOverlay";
@@ -11,6 +11,7 @@ import {
11
11
  createEventChannel,
12
12
  useEventChannel
13
13
  } from "../../../../../share/event-bus";
14
+ import { FORM_STATE_KEY } from "../../../../form/utils/state";
14
15
  import ShwfedActionDefinition from "../../../components/definition.vue";
15
16
  import ShwfedSlotRenderer from "../../../../../share/slot-renderer.vue";
16
17
  defineOptions({ name: "ShwfedModalLayoutActionRuntime" });
@@ -23,6 +24,7 @@ const { locale } = useI18n();
23
24
  const configure = (_env) => {
24
25
  };
25
26
  const inheritedCelContext = injectCELContext();
27
+ const inheritedFormState = inject(FORM_STATE_KEY, void 0);
26
28
  const outerEventChannel = useEventChannel();
27
29
  const currentClose = ref(null);
28
30
  const eventChannelNode = createEventChannel(
@@ -37,6 +39,7 @@ const ModalBoundaryBridge = defineComponent({
37
39
  setup(_, { slots }) {
38
40
  provideCELContext(inheritedCelContext);
39
41
  provide(EVENT_CHANNEL_KEY, eventChannelNode);
42
+ if (inheritedFormState) provide(FORM_STATE_KEY, inheritedFormState);
40
43
  return () => slots.default?.();
41
44
  }
42
45
  });
@@ -13,7 +13,8 @@ const props = defineProps({
13
13
  });
14
14
  const inherited = injectCELContext();
15
15
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
16
- const formState = useFormState();
16
+ const nearestFormState = useFormState();
17
+ const formState = nearestFormState.kind === "form" && nearestFormState.parent ? nearestFormState.parent : nearestFormState;
17
18
  const channel = useEventChannel();
18
19
  const mergeObjects = createDefu((obj, key, value) => {
19
20
  if (Array.isArray(obj[key]) && Array.isArray(value)) {
@@ -11,7 +11,7 @@ const props = defineProps({
11
11
  unit: { type: Object, required: true },
12
12
  index: { type: Number, required: true }
13
13
  });
14
- const formState = provideFormState(state);
14
+ const formState = provideFormState(state, "row");
15
15
  provideCELContext({
16
16
  item: {
17
17
  type: "dyn",
@@ -8,7 +8,31 @@ export type FormState = Record<string, unknown>;
8
8
  * bag intercepts this before delegating.
9
9
  */
10
10
  export declare const SELF_BINDING: ".";
11
+ /**
12
+ * What kind of scope a bag represents.
13
+ *
14
+ * - `'form'`: a `<Form>` host — the user-facing record being edited.
15
+ * - `'row'`: a single record inside an array slot (a table row provider, a
16
+ * list-field row). Functionally a form bag with array-position context.
17
+ *
18
+ * Used by `state.write` to resolve "commit out of the form I'm in": it skips
19
+ * the nearest bag when it's `'form'`-kind, so a submit button living inside
20
+ * a modal-opened sub-form writes through to the row/outer form that opened
21
+ * it, not back into the about-to-close inner form. `'row'`-kind bags are
22
+ * never skipped — a row-level action button writing to its own row is the
23
+ * intended semantics (per-row "fill defaults / recalc this row").
24
+ */
25
+ export type FormStateBagKind = 'form' | 'row';
11
26
  export type FormStateBag = {
27
+ kind: FormStateBagKind;
28
+ /**
29
+ * The bag one scope up the inject chain, or `undefined` at the root. Set
30
+ * by `provideFormState` from whatever it inherits at provide time. Lets
31
+ * `state.write` walk past a `'form'`-kind nearest without a second
32
+ * inject — Vue exposes only the nearest, so the chain has to be threaded
33
+ * through the bags themselves.
34
+ */
35
+ parent: FormStateBag | undefined;
12
36
  state: Ref<unknown>;
13
37
  getAt: (path: string) => unknown;
14
38
  /**
@@ -41,5 +65,5 @@ export type FormStateBag = {
41
65
  markDirty: (path: string) => void;
42
66
  };
43
67
  export declare const FORM_STATE_KEY: InjectionKey<FormStateBag>;
44
- export declare function provideFormState(state: Ref<unknown>): FormStateBag;
68
+ export declare function provideFormState(state: Ref<unknown>, kind?: FormStateBagKind): FormStateBag;
45
69
  export declare function useFormState(): FormStateBag;
@@ -2,7 +2,8 @@ import { getProperty, setProperty } from "dot-prop";
2
2
  import { inject, provide, ref } from "vue";
3
3
  export const SELF_BINDING = ".";
4
4
  export const FORM_STATE_KEY = Symbol("shwfed-form-state");
5
- export function provideFormState(state) {
5
+ export function provideFormState(state, kind = "form") {
6
+ const parent = inject(FORM_STATE_KEY, void 0);
6
7
  const dirty = ref(/* @__PURE__ */ new Set());
7
8
  function write(path, value) {
8
9
  const normalized = value === void 0 ? null : value;
@@ -18,6 +19,8 @@ export function provideFormState(state) {
18
19
  if (!dirty.value.has(path)) dirty.value = new Set(dirty.value).add(path);
19
20
  }
20
21
  const bag = {
22
+ kind,
23
+ parent,
21
24
  state,
22
25
  getAt: (path) => path === SELF_BINDING ? state.value : getProperty(state.value, path),
23
26
  setAt: (path, value) => {
@@ -39,7 +39,7 @@ provideCELContext({
39
39
  });
40
40
  const inherited = injectCELContext();
41
41
  const $cel = (expression, context) => _rawCel(expression, { ...celBindings(inherited), ...context });
42
- const formState = provideFormState(rowRef);
42
+ const formState = provideFormState(rowRef, "row");
43
43
  useDerived({
44
44
  fields: () => props.derivedColumns,
45
45
  evaluate: (expression) => $cel(expression),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/config",
3
- "version": "2.3.19",
3
+ "version": "2.3.21",
4
4
  "description": "Configurable UI for SHWFED",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -1 +0,0 @@
1
- import{aK as e}from"./index-X6To2gmZ.js";import{aL as r,aM as s,aN as t}from"./index-X6To2gmZ.js";export{r as TableConfig,s as createTableConfig,e as default,t as getColumnTechnicalKey};
@@ -1 +0,0 @@
1
- import{d as l,aD as p,ao as A,aq as g,aA as y,e as _,u as h,ak as b,al as S,an as j,aE as k,o as C,am as B}from"./index-X6To2gmZ.js";import{_ as E}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const D=l({name:"ShwfedStateWriteActionRuntime",__name:"runtime",props:{buttonId:{},config:{}},setup(a){const s=a,o=B(),i=(e,t)=>b(e,{...S(o),...t}),r=p(),f=j(),u=k((e,t,n)=>{if(Array.isArray(e[t])&&Array.isArray(n))return e[t]=n,!0});function c(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function m(e,t){return c(e)&&c(t)?u({...t},e):t}const d=A(()=>g(i(s.config.expression),e=>{for(const t of Object.keys(e)){const n=m(r.getAt(t),e[t]);r.setAt(t,n)}return y(f,s.config.onSuccess)}));return(e,t)=>(C(),_(E,{"action-id":a.buttonId,effect:h(d)},null,8,["action-id","effect"]))}});export{D as default};
@@ -1 +0,0 @@
1
- import{d as s,ae as B,as as E,af as _,ag as i,at as x,au as p,e as M,w as c,u as d,a0 as N,an as b,ar as k,o as w,f as L,av as T,g as u,aw as I,ax as z,a7 as H,am as S,ay as V,az as $}from"./index-X6To2gmZ.js";import{_ as A}from"./definition.vue_vue_type_script_setup_true_lang-DP6_YUR7.js";const K=s({name:"ShwfedModalLayoutActionRuntime",__name:"runtime",props:{buttonId:{},config:{},buttonTitle:{}},setup(t){const a=t,{locale:l}=B(),f=e=>{},r=S(),m=b(),o=N(null),v=E(a.buttonId,{close:()=>k(()=>{o.value?.()})},m),g=s({name:"ModalBoundaryBridge",setup(e,{slots:n}){return z(r),V($,v),()=>n.default?.()}}),h=(e,n)=>H()?.(e,n),C=_(function*(){const e=i(a.config.modalTitle,l.value)??i(a.buttonTitle,l.value)??"",{modal:n,close:y}=yield*x({title:e,width:a.config.modalWidth});o.value=()=>p(y()),yield*n,o.value=null});return(e,n)=>(w(),M(A,{"action-id":t.buttonId,effect:d(C)},{default:c(()=>[L("div",{style:T(t.config.modalMinHeight?`min-height: ${t.config.modalMinHeight}`:void 0)},[u(d(g),null,{default:c(()=>[u(I,{"slot-value":t.config.slot,configure:f,"find-entry":h},null,8,["slot-value"])]),_:1})],4)]),_:1},8,["action-id","effect"]))}});export{K as default};