@effect-app/vue-components 2.5.0 → 2.6.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,194 +1,34 @@
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",
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",
6
7
  props: {
7
- inputProps: {},
8
- field: {},
9
- state: {}
8
+ form: {},
9
+ disabled: { type: Boolean },
10
+ subscribe: {}
10
11
  },
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))
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
19
26
  }, [
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
- };
27
+ a(t.$slots, "default", { subscribedValues: s(n) }, void 0, !0)
28
+ ], 8, S)
29
+ ], 32));
190
30
  }
191
31
  });
192
32
  export {
193
- w as default
33
+ V as default
194
34
  };
@@ -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.es38.js";
2
+ import o from "./vue-components.es30.js";
3
3
 
4
4
  export {
5
5
  o as default
@@ -1,9 +1,9 @@
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 { defineComponent as N, computed as n, getCurrentInstance as S, useAttrs as k, useSlots as q, useId as B, renderSlot as m, normalizeProps as s, guardReactiveProps as d, createElementVNode as w, normalizeClass as I, createBlock as L, createCommentVNode as M, unref as A, openBlock as F, mergeProps as O, createSlots as R, withCtx as V } from "vue";
2
+ import { defineComponent as M, computed as n, getCurrentInstance as N, useAttrs as S, useSlots as k, useId as q, renderSlot as m, 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.es38.js";
4
+ import T from "./vue-components.es30.js";
5
5
 
6
- const H = /* @__PURE__ */ N({
6
+ const H = /* @__PURE__ */ M({
7
7
  inheritAttrs: !1,
8
8
  __name: "OmegaInternalInput",
9
9
  props: {
@@ -19,24 +19,24 @@ const H = /* @__PURE__ */ N({
19
19
  options: { default: void 0 }
20
20
  },
21
21
  setup(p) {
22
- const e = p, l = n(() => e.required ?? e?.meta?.required), f = S()?.appContext.components.VTextField, c = k(), g = q(), h = n(() => {
22
+ const e = p, l = n(() => e.required ?? e?.meta?.required), f = N()?.appContext.components.VTextField, c = S(), g = k(), v = n(() => {
23
23
  const { class: t, ...a } = c;
24
24
  return a;
25
- }), o = B(), v = e.field, y = z(v.store, (t) => t), b = n(() => e.type ? e.type : e.meta?.type === "string" ? e.meta.format === "email" ? "email" : "string" : e.meta?.type || "unknown");
25
+ }), o = q(), h = e.field, y = z(h.store, (t) => t), b = n(() => e.type ? e.type : e.meta?.type === "string" ? e.meta.format === "email" ? "email" : "string" : e.meta?.type || "unknown");
26
26
  e.register(n(() => ({ name: e.field.name, label: e.label, id: o })));
27
27
  const C = n(() => y.value.meta.errors ?? []), i = n(
28
28
  () => (
29
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
30
  C.value.map((t) => t?.message).filter(Boolean)
31
31
  )
32
- ), _ = (t) => t == null || t === !1 || t === "" || Number.isNaN(t), x = (t) => {
33
- _(t) && e.meta?.type !== "boolean" && e.meta?.nullableOrUndefined ? e.field.handleChange(
32
+ ), x = (t) => t == null || t === !1 || t === "" || Number.isNaN(t), _ = (t) => {
33
+ x(t) && e.meta?.type !== "boolean" && e.meta?.nullableOrUndefined ? e.field.handleChange(
34
34
  e.meta.nullableOrUndefined === "undefined" ? void 0 : null
35
35
  ) : e.field.handleChange(t), e.field.setMeta((a) => ({ ...a, errorMap: { ...a.errorMap, onSubmit: void 0 } }));
36
36
  }, P = (t) => {
37
37
  const a = {
38
38
  get(E, $, W) {
39
- return $ === "handleChange" ? x : Reflect.get(...arguments);
39
+ return $ === "handleChange" ? _ : Reflect.get(...arguments);
40
40
  }
41
41
  };
42
42
  return new Proxy(t, a);
@@ -46,8 +46,8 @@ const H = /* @__PURE__ */ N({
46
46
  required: l.value,
47
47
  minLength: e.meta?.type === "string" && e.meta?.minLength,
48
48
  maxLength: e.meta?.type === "string" && e.meta?.maxLength,
49
- max: e.meta?.type === "number" && e.meta?.maximum,
50
- min: e.meta?.type === "number" && e.meta?.minimum,
49
+ max: e.meta?.type === "number" && (e.meta?.maximum || e.meta?.exclusiveMaximum),
50
+ min: e.meta?.type === "number" && (e.meta?.minimum || e.meta?.exclusiveMinimum),
51
51
  errorMessages: i.value,
52
52
  error: !!i.value.length,
53
53
  type: b.value,
@@ -60,10 +60,10 @@ const H = /* @__PURE__ */ N({
60
60
  field: P(e.field)
61
61
  }));
62
62
  return (t, a) => m(t.$slots, "default", s(d({ ...r.value.inputProps, field: r.value.field, state: r.value.state })), () => [
63
- w("div", {
64
- class: I(t.$attrs.class)
63
+ B("div", {
64
+ class: w(t.$attrs.class)
65
65
  }, [
66
- A(f) ? (F(), L(T, s(O({ key: 0 }, { ...h.value, ...r.value, class: e.inputClass })), R({ _: 2 }, [
66
+ A(f) ? (F(), I(T, s(O({ key: 0 }, { ...v.value, ...r.value, class: e.inputClass })), R({ _: 2 }, [
67
67
  t.$slots.label ? {
68
68
  name: "label",
69
69
  fn: V((u) => [
@@ -71,7 +71,7 @@ const H = /* @__PURE__ */ N({
71
71
  ]),
72
72
  key: "0"
73
73
  } : void 0
74
- ]), 1040)) : M("", !0)
74
+ ]), 1040)) : L("", !0)
75
75
  ], 2)
76
76
  ]);
77
77
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/vue-components",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "peerDependencies": {
5
5
  "@mdi/js": "^7.4.47",
6
6
  "effect": "^3.18.0",
@@ -53,8 +53,8 @@
53
53
  "highlight.js": "^11.11.1",
54
54
  "mitt": "^3.0.1",
55
55
  "vue3-highlightjs": "^1.0.5",
56
- "@effect-app/vue": "2.92.2",
57
- "effect-app": "3.12.0"
56
+ "effect-app": "3.12.0",
57
+ "@effect-app/vue": "2.92.2"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "pnpm build:run",
@@ -772,7 +772,7 @@ export const generateInputStandardSchemaFromFieldMeta = (
772
772
  })
773
773
  }
774
774
 
775
- if (meta.maxLength) {
775
+ if (typeof meta.maxLength === "number") {
776
776
  schema = schema.pipe(S.maxLength(meta.maxLength)).annotations({
777
777
  message: () =>
778
778
  trans("validation.string.maxLength", {
@@ -780,7 +780,7 @@ export const generateInputStandardSchemaFromFieldMeta = (
780
780
  })
781
781
  })
782
782
  }
783
- if (meta.minLength) {
783
+ if (typeof meta.minLength === "number") {
784
784
  schema = schema.pipe(S.minLength(meta.minLength)).annotations({
785
785
  message: () =>
786
786
  trans("validation.string.minLength", {
@@ -800,16 +800,16 @@ export const generateInputStandardSchemaFromFieldMeta = (
800
800
  message: () => trans("validation.empty")
801
801
  })
802
802
  }
803
- if (meta.minimum) {
803
+ if (typeof meta.minimum === "number") {
804
804
  schema = schema.pipe(S.greaterThanOrEqualTo(meta.minimum)).annotations({
805
805
  message: () =>
806
- trans("validation.number.min", {
806
+ trans(meta.minimum === 0 ? "validation.number.positive" : "validation.number.min", {
807
807
  minimum: meta.minimum,
808
808
  isExclusive: true
809
809
  })
810
810
  })
811
811
  }
812
- if (meta.maximum) {
812
+ if (typeof meta.maximum === "number") {
813
813
  schema = schema.pipe(S.lessThanOrEqualTo(meta.maximum)).annotations({
814
814
  message: () =>
815
815
  trans("validation.number.max", {
@@ -818,16 +818,16 @@ export const generateInputStandardSchemaFromFieldMeta = (
818
818
  })
819
819
  })
820
820
  }
821
- if (meta.exclusiveMinimum) {
821
+ if (typeof meta.exclusiveMinimum === "number") {
822
822
  schema = schema.pipe(S.greaterThan(meta.exclusiveMinimum)).annotations({
823
823
  message: () =>
824
- trans("validation.number.min", {
824
+ trans(meta.exclusiveMinimum === 0 ? "validation.number.positive" : "validation.number.min", {
825
825
  minimum: meta.exclusiveMinimum,
826
826
  isExclusive: false
827
827
  })
828
828
  })
829
829
  }
830
- if (meta.exclusiveMaximum) {
830
+ if (typeof meta.exclusiveMaximum === "number") {
831
831
  schema = schema.pipe(S.lessThan(meta.exclusiveMaximum)).annotations({
832
832
  message: () =>
833
833
  trans("validation.number.max", {
@@ -154,8 +154,8 @@ const inputProps: ComputedRef<InputProps<From, Name>> = computed(() => ({
154
154
  required: isRequired.value,
155
155
  minLength: props.meta?.type === "string" && props.meta?.minLength,
156
156
  maxLength: props.meta?.type === "string" && props.meta?.maxLength,
157
- max: props.meta?.type === "number" && props.meta?.maximum,
158
- min: props.meta?.type === "number" && props.meta?.minimum,
157
+ max: props.meta?.type === "number" && (props.meta?.maximum || props.meta?.exclusiveMaximum),
158
+ min: props.meta?.type === "number" && (props.meta?.minimum || props.meta?.exclusiveMinimum),
159
159
  errorMessages: errors.value,
160
160
  error: !!errors.value.length,
161
161
  type: fieldType.value,
@@ -677,7 +677,8 @@ export const useOmegaForm = <
677
677
  // Normalize default values based on schema metadata
678
678
  // Convert empty strings to null/undefined for nullable fields
679
679
  // Also initialize missing nullable fields with null/undefined
680
- const normalizeDefaultValues = (values: Partial<From>): Partial<From> => {
680
+ const normalizeDefaultValues = (values?: Partial<From>): Partial<From> | undefined => {
681
+ if (!values) return undefined
681
682
  const normalized: any = { ...values }
682
683
 
683
684
  // Process all fields in the schema metadata
@@ -705,11 +706,22 @@ export const useOmegaForm = <
705
706
  return normalized
706
707
  }
707
708
 
709
+ // Extract default values from schema constructors (e.g., withDefaultConstructor)
710
+ const extractSchemaDefaults = (defaultValues: Partial<From> = {}) => {
711
+ try {
712
+ // Note: Partial schemas don't have .make() method yet (https://github.com/Effect-TS/effect/issues/4222)
713
+ if ("make" in schema && typeof (schema as any).make === "function") {
714
+ return (schema as any).make(defaultValues, { disableValidation: true })
715
+ }
716
+ } catch (error) {
717
+ console.warn("Could not extract schema constructor defaults:", error)
718
+ return {}
719
+ }
720
+ }
721
+
708
722
  const defaultValues = computed(() => {
709
723
  // Normalize tanstack default values at the beginning
710
- const normalizedTanstackDefaults = tanstackFormOptions?.defaultValues
711
- ? normalizeDefaultValues(tanstackFormOptions.defaultValues)
712
- : undefined
724
+ const normalizedTanstackDefaults = extractSchemaDefaults(normalizeDefaultValues(tanstackFormOptions?.defaultValues))
713
725
 
714
726
  if (
715
727
  normalizedTanstackDefaults
@@ -764,7 +776,7 @@ export const useOmegaForm = <
764
776
  }
765
777
 
766
778
  // to be sure we have a valid object at the end of the gathering process
767
- defValuesPatch ??= {}
779
+ defValuesPatch ??= extractSchemaDefaults({})
768
780
 
769
781
  if (!normalizedTanstackDefaults) {
770
782
  // we just return what we gathered from the query/storage
@@ -1,4 +0,0 @@
1
- import f from "./vue-components.es18.js";
2
- export {
3
- f as default
4
- };
@@ -1,34 +0,0 @@
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",
7
- props: {
8
- form: {},
9
- disabled: { type: Boolean },
10
- subscribe: {}
11
- },
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
26
- }, [
27
- a(t.$slots, "default", { subscribedValues: s(n) }, void 0, !0)
28
- ], 8, S)
29
- ], 32));
30
- }
31
- });
32
- export {
33
- V as default
34
- };