@effect-app/vue-components 2.11.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,34 +1,194 @@
1
- import { defineComponent as m, createElementBlock as d, openBlock as u, withModifiers as f, createElementVNode as l, unref as s, renderSlot as a } from "vue";
2
- import { useStore as b } from "@tanstack/vue-form";
3
- import { usePreventClose as p } from "./vue-components.es11.js";
4
- import { getOmegaStore as c } from "./vue-components.es53.js";
5
- const S = ["disabled"], V = /* @__PURE__ */ m({
6
- __name: "OmegaWrapper",
1
+ import { defineComponent as k, resolveComponent as b, createElementBlock as v, openBlock as a, createBlock as n, createCommentVNode as u, resolveDynamicComponent as g, mergeProps as o, createSlots as d, withCtx as r, renderSlot as m, normalizeProps as s, guardReactiveProps as P, unref as C, Fragment as V, renderList as U } from "vue";
2
+ import { getInputType as c } from "./vue-components.es12.js";
3
+ const w = /* @__PURE__ */ k({
4
+ inheritAttrs: !1,
5
+ __name: "OmegaInputVuetify",
7
6
  props: {
8
- form: {},
9
- disabled: { type: Boolean },
10
- subscribe: {}
7
+ inputProps: {},
8
+ field: {},
9
+ state: {}
11
10
  },
12
- setup(o) {
13
- const e = o, i = b(
14
- e.form.store,
15
- (t) => t.isSubmitting
16
- ), n = c(
17
- e.form,
18
- e.subscribe
19
- );
20
- return e.form.ignorePreventCloseEvents || p(() => e.form.useStore((t) => t.isDirty)), (t, r) => (u(), d("form", {
21
- novalidate: "",
22
- onSubmit: r[0] || (r[0] = f((v) => o.form.handleSubmit(), ["prevent", "stop"]))
23
- }, [
24
- l("fieldset", {
25
- disabled: s(i) || o.disabled
11
+ emits: ["focus", "blur"],
12
+ setup(e) {
13
+ return (l, i) => {
14
+ const y = b("v-text-field"), p = b("v-textarea"), f = b("v-radio"), h = b("v-radio-group"), q = b("v-select"), $ = b("v-autocomplete");
15
+ return a(), v("div", {
16
+ class: "omega-input",
17
+ onFocusout: i[4] || (i[4] = (t) => l.$emit("blur", t)),
18
+ onFocusin: i[5] || (i[5] = (t) => l.$emit("focus", t))
26
19
  }, [
27
- a(t.$slots, "default", { subscribedValues: s(n) }, void 0, !0)
28
- ], 8, S)
29
- ], 32));
20
+ e.inputProps.type === "boolean" || e.inputProps.type === "switch" ? (a(), n(g(e.inputProps.type === "boolean" ? "v-checkbox" : "v-switch"), o({
21
+ key: 0,
22
+ id: e.inputProps.id,
23
+ name: e.field.name,
24
+ label: e.inputProps.label,
25
+ "error-messages": e.inputProps.errorMessages,
26
+ error: e.inputProps.error,
27
+ ripple: ""
28
+ }, l.$attrs, {
29
+ "model-value": e.state.value,
30
+ onChange: i[0] || (i[0] = (t) => e.field.handleChange(t.target.checked))
31
+ }), d({ _: 2 }, [
32
+ l.$slots.label ? {
33
+ name: "label",
34
+ fn: r(() => [
35
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
36
+ ]),
37
+ key: "0"
38
+ } : void 0
39
+ ]), 1040, ["id", "name", "label", "error-messages", "error", "model-value"])) : u("", !0),
40
+ e.inputProps.type === "email" || e.inputProps.type === "string" || e.inputProps.type === "password" || e.inputProps.type === "date" ? (a(), n(y, o({
41
+ key: 1,
42
+ id: e.inputProps.id,
43
+ required: e.inputProps.required,
44
+ "min-length": e.inputProps.minLength,
45
+ "max-length": e.inputProps.maxLength,
46
+ type: C(c)(e.inputProps.type),
47
+ name: e.field.name,
48
+ label: e.inputProps.label,
49
+ "error-messages": e.inputProps.errorMessages,
50
+ error: e.inputProps.error
51
+ }, l.$attrs, {
52
+ "model-value": e.state.value,
53
+ "onUpdate:modelValue": e.field.handleChange
54
+ }), d({ _: 2 }, [
55
+ l.$slots.label ? {
56
+ name: "label",
57
+ fn: r(() => [
58
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
59
+ ]),
60
+ key: "0"
61
+ } : void 0
62
+ ]), 1040, ["id", "required", "min-length", "max-length", "type", "name", "label", "error-messages", "error", "model-value", "onUpdate:modelValue"])) : u("", !0),
63
+ e.inputProps.type === "text" ? (a(), n(p, o({
64
+ key: 2,
65
+ id: e.inputProps.id,
66
+ required: e.inputProps.required,
67
+ "min-length": e.inputProps.minLength,
68
+ "max-length": e.inputProps.maxLength,
69
+ name: e.field.name,
70
+ label: e.inputProps.label,
71
+ "error-messages": e.inputProps.errorMessages,
72
+ error: e.inputProps.error
73
+ }, l.$attrs, {
74
+ "model-value": e.state.value,
75
+ "onUpdate:modelValue": e.field.handleChange
76
+ }), d({ _: 2 }, [
77
+ l.$slots.label ? {
78
+ name: "label",
79
+ fn: r(() => [
80
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
81
+ ]),
82
+ key: "0"
83
+ } : void 0
84
+ ]), 1040, ["id", "required", "min-length", "max-length", "name", "label", "error-messages", "error", "model-value", "onUpdate:modelValue"])) : u("", !0),
85
+ e.inputProps.type === "number" || e.inputProps.type === "range" ? (a(), n(g(e.inputProps.type === "range" ? "v-slider" : "v-text-field"), o({
86
+ key: 3,
87
+ id: e.inputProps.id,
88
+ required: e.inputProps.required,
89
+ min: e.inputProps.min,
90
+ max: e.inputProps.max,
91
+ type: e.inputProps.type,
92
+ name: e.field.name,
93
+ label: e.inputProps.label,
94
+ "error-messages": e.inputProps.errorMessages,
95
+ error: e.inputProps.error
96
+ }, l.$attrs, {
97
+ "model-value": e.state.value,
98
+ "onUpdate:modelValue": i[1] || (i[1] = (t) => {
99
+ t || t === 0 ? e.field.handleChange(Number(t)) : e.field.handleChange(void 0);
100
+ })
101
+ }), d({ _: 2 }, [
102
+ l.$slots.label ? {
103
+ name: "label",
104
+ fn: r(() => [
105
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
106
+ ]),
107
+ key: "0"
108
+ } : void 0
109
+ ]), 1040, ["id", "required", "min", "max", "type", "name", "label", "error-messages", "error", "model-value"])) : u("", !0),
110
+ e.inputProps.type === "radio" ? (a(), n(h, o({
111
+ key: 4,
112
+ id: e.inputProps.id,
113
+ name: e.field.name,
114
+ label: e.inputProps.label,
115
+ "error-messages": e.inputProps.errorMessages,
116
+ error: e.inputProps.error
117
+ }, l.$attrs, {
118
+ "model-value": e.state.value,
119
+ "onUpdate:modelValue": e.field.handleChange
120
+ }), d({
121
+ default: r(() => [
122
+ (a(!0), v(V, null, U(e.inputProps.options, (t) => (a(), n(f, {
123
+ key: t.value,
124
+ label: t.title,
125
+ value: t.value
126
+ }, null, 8, ["label", "value"]))), 128))
127
+ ]),
128
+ _: 2
129
+ }, [
130
+ l.$slots.label ? {
131
+ name: "label",
132
+ fn: r(() => [
133
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
134
+ ]),
135
+ key: "0"
136
+ } : void 0
137
+ ]), 1040, ["id", "name", "label", "error-messages", "error", "model-value", "onUpdate:modelValue"])) : u("", !0),
138
+ e.inputProps.type === "select" || e.inputProps.type === "multiple" ? (a(), n(q, o({
139
+ key: 5,
140
+ id: e.inputProps.id,
141
+ clearable: e.inputProps.type === "select",
142
+ required: e.inputProps.required,
143
+ multiple: e.inputProps.type === "multiple",
144
+ chips: e.inputProps.type === "multiple",
145
+ name: e.field.name,
146
+ label: e.inputProps.label,
147
+ items: e.inputProps.options,
148
+ "error-messages": e.inputProps.errorMessages,
149
+ error: e.inputProps.error
150
+ }, l.$attrs, {
151
+ "model-value": e.state.value,
152
+ onClear: i[2] || (i[2] = (t) => e.field.handleChange(void 0)),
153
+ "onUpdate:modelValue": e.field.handleChange
154
+ }), d({ _: 2 }, [
155
+ l.$slots.label ? {
156
+ name: "label",
157
+ fn: r(() => [
158
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
159
+ ]),
160
+ key: "0"
161
+ } : void 0
162
+ ]), 1040, ["id", "clearable", "required", "multiple", "chips", "name", "label", "items", "error-messages", "error", "model-value", "onUpdate:modelValue"])) : u("", !0),
163
+ e.inputProps.type === "autocomplete" || e.inputProps.type === "autocompletemultiple" ? (a(), n($, o({
164
+ key: 6,
165
+ id: e.inputProps.id,
166
+ clearable: e.inputProps.type === "autocomplete",
167
+ multiple: e.inputProps.type === "autocompletemultiple",
168
+ required: e.inputProps.required,
169
+ name: e.field.name,
170
+ label: e.inputProps.label,
171
+ items: e.inputProps.options,
172
+ "error-messages": e.inputProps.errorMessages,
173
+ error: e.inputProps.error,
174
+ chips: e.inputProps.type === "autocompletemultiple"
175
+ }, l.$attrs, {
176
+ "model-value": e.state.value,
177
+ onClear: i[3] || (i[3] = (t) => e.field.handleChange(void 0)),
178
+ "onUpdate:modelValue": e.field.handleChange
179
+ }), d({ _: 2 }, [
180
+ l.$slots.label ? {
181
+ name: "label",
182
+ fn: r(() => [
183
+ m(l.$slots, "label", s(P({ required: e.inputProps.required, id: e.inputProps.id, label: e.inputProps.label })))
184
+ ]),
185
+ key: "0"
186
+ } : void 0
187
+ ]), 1040, ["id", "clearable", "multiple", "required", "name", "label", "items", "error-messages", "error", "chips", "model-value", "onUpdate:modelValue"])) : u("", !0)
188
+ ], 32);
189
+ };
30
190
  }
31
191
  });
32
192
  export {
33
- V as default
193
+ w as default
34
194
  };
@@ -1,5 +1,5 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var i=document.createElement("style");if(i.appendChild(document.createTextNode(".omega-input .v-input__details:has(.v-messages:empty){grid-template-rows:0fr;transition:all .2s}.omega-input .v-messages:empty{min-height:0}.omega-input .v-input__details:has(.v-messages){transition:all .2s;overflow:hidden;min-height:0;display:grid;grid-template-rows:1fr}.omega-input .v-messages{transition:all .2s}.omega-input .v-messages>*{transition-duration:0s!important}.omega-input [role=alert]:has(.v-messages:empty){padding:0}.omega-input .v-btn{cursor:pointer;width:auto;appearance:none;box-shadow:none;display:block;min-width:auto;height:auto;padding:.5em .5em .5em 1em}")),document.head.appendChild(i),window.customElements){const e=window.customElements.define;window.customElements.define=function(s,t){const n=t.prototype.connectedCallback;return t.prototype.connectedCallback=function(){if(n&&n.call(this),this.shadowRoot){const a=document.createElement("style");a.appendChild(document.createTextNode(".omega-input .v-input__details:has(.v-messages:empty){grid-template-rows:0fr;transition:all .2s}.omega-input .v-messages:empty{min-height:0}.omega-input .v-input__details:has(.v-messages){transition:all .2s;overflow:hidden;min-height:0;display:grid;grid-template-rows:1fr}.omega-input .v-messages{transition:all .2s}.omega-input .v-messages>*{transition-duration:0s!important}.omega-input [role=alert]:has(.v-messages:empty){padding:0}.omega-input .v-btn{cursor:pointer;width:auto;appearance:none;box-shadow:none;display:block;min-width:auto;height:auto;padding:.5em .5em .5em 1em}")),this.shadowRoot.appendChild(a)}},e.call(window.customElements,s,t)}}}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
- import o from "./vue-components.es30.js";
2
+ import o from "./vue-components.es38.js";
3
3
 
4
4
  export {
5
5
  o as default
@@ -1,9 +1,9 @@
1
- import { defineComponent as M, computed as o, useAttrs as $, inject as k, createBlock as m, openBlock as i, resolveDynamicComponent as A, withCtx as s, createCommentVNode as S, mergeProps as w, unref as I, createSlots as P, renderSlot as u, normalizeProps as f, guardReactiveProps as c } from "vue";
1
+ import { defineComponent as F, computed as l, useAttrs as A, inject as M, createBlock as i, openBlock as f, resolveDynamicComponent as S, withCtx as u, createCommentVNode as w, mergeProps as I, unref as L, createSlots as P, renderSlot as c, normalizeProps as d, guardReactiveProps as v } from "vue";
2
2
  import { useIntl as j } from "./vue-components.es3.js";
3
3
  import { generateInputStandardSchemaFromFieldMeta as B } from "./vue-components.es12.js";
4
4
  import E from "./vue-components.es7.js";
5
5
  import { useErrorLabel as N } from "./vue-components.es10.js";
6
- const V = /* @__PURE__ */ M({
6
+ const V = /* @__PURE__ */ F({
7
7
  inheritAttrs: !1,
8
8
  __name: "OmegaInput",
9
9
  props: {
@@ -13,49 +13,52 @@ const V = /* @__PURE__ */ M({
13
13
  name: {},
14
14
  inputClass: {}
15
15
  },
16
- setup(r) {
17
- const e = r, l = o(() => e.name), d = $(), p = o(() => {
16
+ setup(a) {
17
+ const e = a, n = l(() => e.name), p = A(), g = l(() => {
18
18
  if (e.inputClass !== null)
19
- return e.inputClass !== void 0 ? e.inputClass : d.class;
20
- }), v = k(
19
+ return e.inputClass !== void 0 ? e.inputClass : p.class;
20
+ }), s = M(
21
21
  "getMetaFromArray",
22
22
  null
23
- ), a = o(() => {
24
- const t = v?.value?.(e.name);
25
- return t || e.form.meta[l.value];
26
- }), { trans: g } = j(), C = o(() => {
27
- if (!a.value)
23
+ ), o = l(() => s?.value && s.value(e.name) ? s.value(n.value) : e.form.meta[n.value]), $ = l(() => {
24
+ const t = o.value;
25
+ if (!t) return n.value;
26
+ const r = t;
27
+ return `${n.value}-${r.type}-${r.minLength ?? ""}-${r.maxLength ?? ""}-${r.minimum ?? ""}-${r.maximum ?? ""}`;
28
+ }), { trans: C } = j(), b = l(() => {
29
+ if (!o.value)
28
30
  throw console.log(e.name, Object.keys(e.form.meta), e.form.meta), new Error("Meta is undefined");
29
- return B(a.value, g);
30
- }), b = N(e.form);
31
- return (t, h) => (i(), m(A(r.form.Field), {
32
- name: r.name,
31
+ return B(o.value, C);
32
+ }), h = N(e.form);
33
+ return (t, r) => (f(), i(S(a.form.Field), {
34
+ key: $.value,
35
+ name: a.name,
33
36
  validators: {
34
- onChange: C.value,
35
- ...r.validators
37
+ onChange: b.value,
38
+ ...a.validators
36
39
  }
37
40
  }, {
38
- default: s(({ field: y, state: F }) => [
39
- a.value ? (i(), m(E, w({ key: 0 }, { ...t.$attrs, ...t.$props, inputClass: p.value }, {
41
+ default: u(({ field: y, state: k }) => [
42
+ o.value ? (f(), i(E, I({ key: 0 }, { ...t.$attrs, ...t.$props, inputClass: g.value }, {
40
43
  field: y,
41
- state: F,
42
- register: r.form.registerField,
43
- label: r.label ?? I(b)(l.value),
44
- meta: a.value
44
+ state: k,
45
+ register: a.form.registerField,
46
+ label: a.label ?? L(h)(n.value),
47
+ meta: o.value
45
48
  }), P({
46
- default: s((n) => [
47
- u(t.$slots, "default", f(c(n)))
49
+ default: u((m) => [
50
+ c(t.$slots, "default", d(v(m)))
48
51
  ]),
49
52
  _: 2
50
53
  }, [
51
54
  t.$slots.label ? {
52
55
  name: "label",
53
- fn: s((n) => [
54
- u(t.$slots, "label", f(c(n)))
56
+ fn: u((m) => [
57
+ c(t.$slots, "label", d(v(m)))
55
58
  ]),
56
59
  key: "0"
57
60
  } : void 0
58
- ]), 1040, ["field", "state", "register", "label", "meta"])) : S("", !0)
61
+ ]), 1040, ["field", "state", "register", "label", "meta"])) : w("", !0)
59
62
  ]),
60
63
  _: 3
61
64
  }, 8, ["name", "validators"]));
@@ -1,7 +1,7 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var i=document.createElement("style");if(i.appendChild(document.createTextNode(".omega-input .v-input__details:has(.v-messages:empty){grid-template-rows:0fr;transition:all .2s}.omega-input .v-messages:empty{min-height:0}.omega-input .v-input__details:has(.v-messages){transition:all .2s;overflow:hidden;min-height:0;display:grid;grid-template-rows:1fr}.omega-input .v-messages{transition:all .2s}.omega-input .v-messages>*{transition-duration:0s!important}.omega-input [role=alert]:has(.v-messages:empty){padding:0}.omega-input .v-btn{cursor:pointer;width:auto;appearance:none;box-shadow:none;display:block;min-width:auto;height:auto;padding:.5em .5em .5em 1em}")),document.head.appendChild(i),window.customElements){const e=window.customElements.define;window.customElements.define=function(s,t){const n=t.prototype.connectedCallback;return t.prototype.connectedCallback=function(){if(n&&n.call(this),this.shadowRoot){const a=document.createElement("style");a.appendChild(document.createTextNode(".omega-input .v-input__details:has(.v-messages:empty){grid-template-rows:0fr;transition:all .2s}.omega-input .v-messages:empty{min-height:0}.omega-input .v-input__details:has(.v-messages){transition:all .2s;overflow:hidden;min-height:0;display:grid;grid-template-rows:1fr}.omega-input .v-messages{transition:all .2s}.omega-input .v-messages>*{transition-duration:0s!important}.omega-input [role=alert]:has(.v-messages:empty){padding:0}.omega-input .v-btn{cursor:pointer;width:auto;appearance:none;box-shadow:none;display:block;min-width:auto;height:auto;padding:.5em .5em .5em 1em}")),this.shadowRoot.appendChild(a)}},e.call(window.customElements,s,t)}}}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
2
  import { defineComponent as $, computed as n, getCurrentInstance as N, useAttrs as S, useSlots as k, useId as q, renderSlot as u, normalizeProps as s, guardReactiveProps as d, createElementVNode as B, normalizeClass as w, createBlock as I, createCommentVNode as L, unref as A, openBlock as F, mergeProps as O, createSlots as R, withCtx as V } from "vue";
3
3
  import { useStore as z } from "@tanstack/vue-form";
4
- import T from "./vue-components.es30.js";
4
+ import T from "./vue-components.es38.js";
5
5
 
6
6
  const H = /* @__PURE__ */ $({
7
7
  inheritAttrs: !1,
@@ -1,4 +1,4 @@
1
- import { defineComponent as M, ref as C, computed as s, watch as b, provide as k, createBlock as F, openBlock as O, unref as f, withCtx as i, renderSlot as o, createVNode as c, createCommentVNode as S, normalizeProps as g, guardReactiveProps as d, createSlots as V, renderList as w } from "vue";
1
+ import { defineComponent as M, ref as C, computed as s, watch as b, provide as k, createBlock as F, openBlock as O, unref as f, withCtx as c, renderSlot as o, createVNode as i, createCommentVNode as S, normalizeProps as g, guardReactiveProps as d, createSlots as V, renderList as w } from "vue";
2
2
  import A from "./vue-components.es9.js";
3
3
  const N = /* @__PURE__ */ M({
4
4
  __name: "OmegaTaggedUnion",
@@ -10,28 +10,28 @@ const N = /* @__PURE__ */ M({
10
10
  label: {}
11
11
  },
12
12
  setup(t) {
13
- const n = t, m = C(null), v = s(() => n.name ? `${n.name}._tag` : "_tag"), $ = n.form.useStore((e) => e.values);
13
+ const n = t, r = C(null), v = s(() => n.name ? `${n.name}._tag` : "_tag"), $ = n.form.useStore((e) => e.values);
14
14
  b(
15
- () => v.value.split(".").reduce((r, a) => r?.[a], $.value),
15
+ () => v.value.split(".").reduce((l, a) => l?.[a], $.value),
16
16
  (e) => {
17
- m.value = e ?? null;
17
+ r.value = e ?? null;
18
18
  },
19
19
  { immediate: !0 }
20
20
  );
21
21
  const y = s(() => {
22
- const e = m.value;
22
+ const e = r.value;
23
23
  return (a) => {
24
24
  if (!e) return null;
25
- const l = n.form.unionMeta[e];
26
- return l ? l[a] ?? null : null;
25
+ const m = n.form.unionMeta[e];
26
+ return m ? m[a] ?? null : null;
27
27
  };
28
28
  });
29
- return k("getMetaFromArray", y), (e, r) => (O(), F(f(t.form).Field, {
29
+ return k("getMetaFromArray", y), (e, l) => (O(), F(f(t.form).Field, {
30
30
  name: t.name ? `${t.name}._tag` : "_tag"
31
31
  }, {
32
- default: i((a) => [
32
+ default: c((a) => [
33
33
  o(e.$slots, "OmegaCustomInput", g(d(a)), () => [
34
- c(f(t.form).Input, {
34
+ i(f(t.form).Input, {
35
35
  name: t.name ? `${t.name}._tag` : "_tag",
36
36
  label: t.label,
37
37
  type: t.type ?? "select",
@@ -39,15 +39,15 @@ const N = /* @__PURE__ */ M({
39
39
  }, null, 8, ["name", "label", "type", "options"])
40
40
  ]),
41
41
  o(e.$slots, "default"),
42
- c(A, {
42
+ i(A, {
43
43
  field: a.field,
44
44
  state: a.state.value,
45
45
  name: t.name,
46
46
  form: t.form
47
47
  }, V({ _: 2 }, [
48
- w(e.$slots, (l, u) => ({
48
+ w(e.$slots, (m, u) => ({
49
49
  name: u,
50
- fn: i((h) => [
50
+ fn: c((h) => [
51
51
  o(e.$slots, u, g(d(h)))
52
52
  ])
53
53
  }))
@@ -1,5 +1,5 @@
1
- import { defineComponent as s, watch as m, nextTick as i, renderSlot as o, createCommentVNode as r, normalizeProps as f, mergeProps as u } from "vue";
2
- const g = /* @__PURE__ */ s({
1
+ import { defineComponent as m, watch as r, renderSlot as s, createCommentVNode as o, normalizeProps as i, mergeProps as f } from "vue";
2
+ const d = /* @__PURE__ */ m({
3
3
  __name: "OmegaTaggedUnionInternal",
4
4
  props: {
5
5
  state: {},
@@ -8,20 +8,14 @@ const g = /* @__PURE__ */ s({
8
8
  form: {}
9
9
  },
10
10
  setup(e) {
11
- const a = e;
12
- return m(() => a.state, (t, n) => {
13
- t === null && a.field.setValue(null), t !== n && t && i(() => {
14
- const l = {
15
- ...a.form.unionDefaultValues?.[t] ?? {},
16
- _tag: t
17
- };
18
- a.form.reset(l), setTimeout(() => {
19
- a.field.validate("change");
20
- }, 0);
21
- });
22
- }, { immediate: !0 }), (t, n) => e.state ? o(t.$slots, `${e.name ? `${e.name}.` : ""}${e.state}`, f(u({ key: 0 }, { field: e.field, state: e.state }))) : r("", !0);
11
+ const a = e, l = a.form.useStore(({ values: t }) => t);
12
+ return r(() => a.state, (t, n) => {
13
+ t === null && a.field.setValue(null), t !== n && (a.form.reset(l.value), setTimeout(() => {
14
+ a.field.validate("change");
15
+ }, 0));
16
+ }, { immediate: !0 }), (t, n) => e.state ? s(t.$slots, `${e.name ? `${e.name}.` : ""}${e.state}`, i(f({ key: 0 }, { field: e.field, state: e.state }))) : o("", !0);
23
17
  }
24
18
  });
25
19
  export {
26
- g as default
20
+ d as default
27
21
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/vue-components",
3
- "version": "2.11.4",
3
+ "version": "3.0.0",
4
4
  "peerDependencies": {
5
5
  "@mdi/js": "^7.4.47",
6
6
  "effect": "^3.19.3",
@@ -356,7 +356,6 @@ export const createMeta = <T = any>(
356
356
 
357
357
  if (property?._tag === "TypeLiteral" && "propertySignatures" in property) {
358
358
  return createMeta<T>({
359
- parent, // Pass parent to maintain the key prefix for nested structures
360
359
  meta,
361
360
  propertySignatures: property.propertySignatures
362
361
  })
@@ -405,13 +404,7 @@ export const createMeta = <T = any>(
405
404
  property: p.type,
406
405
  meta: { required: isRequired, nullableOrUndefined }
407
406
  })
408
- // If parentMeta is a MetaRecord (nested structure from ExtendedClass), merge it
409
- // Otherwise assign as single FieldMeta
410
- if (parentMeta && typeof parentMeta === "object" && !("type" in parentMeta)) {
411
- Object.assign(acc, parentMeta)
412
- } else {
413
- acc[key as NestedKeyOf<T>] = parentMeta as FieldMeta
414
- }
407
+ acc[key as NestedKeyOf<T>] = parentMeta as FieldMeta
415
408
  }
416
409
 
417
410
  // Process each non-null type and merge their metadata
@@ -708,17 +701,11 @@ const flattenMeta = <T>(meta: MetaRecord<T> | FieldMeta, parentKey: string = "")
708
701
 
709
702
  const metadataFromAst = <From, To>(
710
703
  schema: S.Schema<To, From, never>
711
- ): {
712
- meta: MetaRecord<To>
713
- defaultValues: Record<string, any>
714
- unionMeta: Record<string, MetaRecord<To>>
715
- unionDefaultValues: Record<string, Record<string, any>>
716
- } => {
704
+ ): { meta: MetaRecord<To>; defaultValues: Record<string, any>; unionMeta: Record<string, MetaRecord<To>> } => {
717
705
  const ast = schema.ast
718
706
  const newMeta: MetaRecord<To> = {}
719
707
  const defaultValues: Record<string, any> = {}
720
708
  const unionMeta: Record<string, MetaRecord<To>> = {}
721
- const unionDefaultValues: Record<string, Record<string, any>> = {}
722
709
 
723
710
  if (ast._tag === "Transformation" || ast._tag === "Refinement") {
724
711
  return metadataFromAst(S.make(ast.from))
@@ -763,9 +750,6 @@ const metadataFromAst = <From, To>(
763
750
  // Store per-tag metadata for reactive lookup
764
751
  if (tagValue) {
765
752
  unionMeta[tagValue] = flattenMeta<To>(memberMeta)
766
- // Create default values for this tag's schema
767
- const memberSchema = S.make(memberType)
768
- unionDefaultValues[tagValue] = defaultsValueFromSchema(memberSchema as any)
769
753
  }
770
754
 
771
755
  // Merge into result (for backward compatibility)
@@ -782,7 +766,7 @@ const metadataFromAst = <From, To>(
782
766
  } as FieldMeta
783
767
  }
784
768
 
785
- return { meta: newMeta, defaultValues, unionMeta, unionDefaultValues }
769
+ return { meta: newMeta, defaultValues, unionMeta }
786
770
  }
787
771
  }
788
772
 
@@ -792,7 +776,7 @@ const metadataFromAst = <From, To>(
792
776
  })
793
777
 
794
778
  if (Object.values(meta).every((value) => value && "type" in value)) {
795
- return { meta: meta as MetaRecord<To>, defaultValues, unionMeta, unionDefaultValues }
779
+ return { meta: meta as MetaRecord<To>, defaultValues, unionMeta }
796
780
  }
797
781
 
798
782
  const flattenObject = (
@@ -812,7 +796,7 @@ const metadataFromAst = <From, To>(
812
796
  flattenObject(meta)
813
797
  }
814
798
 
815
- return { meta: newMeta, defaultValues, unionMeta, unionDefaultValues }
799
+ return { meta: newMeta, defaultValues, unionMeta }
816
800
  }
817
801
 
818
802
  export const duplicateSchema = <From, To>(
@@ -827,11 +811,10 @@ export const generateMetaFromSchema = <From, To>(
827
811
  schema: S.Schema<To, From, never>
828
812
  meta: MetaRecord<To>
829
813
  unionMeta: Record<string, MetaRecord<To>>
830
- unionDefaultValues: Record<string, Record<string, any>>
831
814
  } => {
832
- const { meta, unionDefaultValues, unionMeta } = metadataFromAst(schema)
815
+ const { meta, unionMeta } = metadataFromAst(schema)
833
816
 
834
- return { schema, meta, unionMeta, unionDefaultValues }
817
+ return { schema, meta, unionMeta }
835
818
  }
836
819
 
837
820
  export const generateInputStandardSchemaFromFieldMeta = (
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <component
3
3
  :is="form.Field"
4
+ :key="fieldKey"
4
5
  :name="name"
5
6
  :validators="{
6
7
  onChange: schema,
@@ -75,12 +76,22 @@ const getMetaFromArray = inject<Ref<(name: string) => FieldMeta | null> | null>(
75
76
  )
76
77
 
77
78
  const meta = computed(() => {
78
- const fromArray = getMetaFromArray?.value?.(props.name as DeepKeys<From>)
79
- if (fromArray) {
80
- return fromArray
79
+ if (getMetaFromArray?.value && getMetaFromArray.value(props.name as DeepKeys<From>)) {
80
+ return getMetaFromArray.value(propsName.value)
81
81
  }
82
- const formMeta = props.form.meta[propsName.value]
83
- return formMeta
82
+ return props.form.meta[propsName.value]
83
+ })
84
+
85
+ // Key to force Field re-mount when meta type changes (for TaggedUnion support)
86
+ const fieldKey = computed(() => {
87
+ const m = meta.value
88
+ if (!m) return propsName.value
89
+ // Include type and key constraints in the key so Field re-mounts when validation rules change
90
+ // Cast to any since not all FieldMeta variants have these properties
91
+ const fm = m as any
92
+ return `${propsName.value}-${fm.type}-${fm.minLength ?? ""}-${fm.maxLength ?? ""}-${fm.minimum ?? ""}-${
93
+ fm.maximum ?? ""
94
+ }`
84
95
  })
85
96
 
86
97
  // Call useIntl during setup to avoid issues when computed re-evaluates
@@ -34,7 +34,6 @@ watch(
34
34
  },
35
35
  (newTag) => {
36
36
  currentTag.value = newTag ?? null
37
- return undefined
38
37
  },
39
38
  { immediate: true }
40
39
  )
@@ -12,7 +12,7 @@
12
12
  generic="From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>, Name extends DeepKeys<From>"
13
13
  >
14
14
  import { type DeepKeys, type DeepValue } from "@tanstack/vue-form"
15
- import { nextTick, watch } from "vue"
15
+ import { watch } from "vue"
16
16
  import { type OmegaFieldInternalApi } from "./InputProps"
17
17
  import { type useOmegaForm } from "./useOmegaForm"
18
18
 
@@ -23,27 +23,19 @@ const props = defineProps<{
23
23
  form: ReturnType<typeof useOmegaForm<From, To>>
24
24
  }>()
25
25
 
26
+ const values = props.form.useStore(({ values }) => values)
27
+
26
28
  // Watch for _tag changes
27
29
  watch(() => props.state, (newTag, oldTag) => {
28
30
  if (newTag === null) {
29
31
  props.field.setValue(null as DeepValue<From, Name>)
30
32
  }
31
33
 
32
- if (newTag !== oldTag && newTag) {
33
- // Use nextTick to avoid cleanup conflicts during reactive updates
34
- nextTick(() => {
35
- // Get default values for the new tag to ensure correct types
36
- const tagDefaults = (props.form as any).unionDefaultValues?.[newTag as string] ?? {}
37
- // Merge: keep _tag from current values, but use tag defaults for other fields
38
- const resetValues = {
39
- ...tagDefaults,
40
- _tag: newTag
41
- }
42
- props.form.reset(resetValues as any)
43
- setTimeout(() => {
44
- props.field.validate("change")
45
- }, 0)
46
- })
34
+ if (newTag !== oldTag) {
35
+ props.form.reset(values.value)
36
+ setTimeout(() => {
37
+ props.field.validate("change")
38
+ }, 0)
47
39
  }
48
40
  }, { immediate: true })
49
41
  </script>