@effect-app/vue-components 2.6.2 → 2.7.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.
Files changed (35) hide show
  1. package/dist/types/components/OmegaForm/InputProps.d.ts +10 -4
  2. package/dist/types/components/OmegaForm/OmegaTaggedUnion.vue.d.ts +9 -13
  3. package/dist/types/components/OmegaForm/OmegaTaggedUnionInternal.vue.d.ts +2 -9
  4. package/dist/types/components/OmegaForm/useOmegaForm.d.ts +2 -1
  5. package/dist/vue-components.es10.js +203 -148
  6. package/dist/vue-components.es12.js +137 -115
  7. package/dist/vue-components.es22.js +1 -1
  8. package/dist/vue-components.es23.js +1 -1
  9. package/dist/vue-components.es36.js +1 -1
  10. package/dist/vue-components.es40.js +4 -23
  11. package/dist/vue-components.es41.js +23 -5
  12. package/dist/vue-components.es42.js +5 -21
  13. package/dist/vue-components.es43.js +16 -25
  14. package/dist/vue-components.es44.js +23 -15
  15. package/dist/vue-components.es45.js +17 -7
  16. package/dist/vue-components.es46.js +12 -5
  17. package/dist/vue-components.es47.js +5 -19
  18. package/dist/vue-components.es48.js +19 -9
  19. package/dist/vue-components.es49.js +9 -31
  20. package/dist/vue-components.es50.js +25 -42
  21. package/dist/vue-components.es51.js +38 -16
  22. package/dist/vue-components.es52.js +26 -11
  23. package/dist/vue-components.es53.js +11 -4
  24. package/dist/vue-components.es54.js +1 -1
  25. package/dist/vue-components.es56.js +1 -1
  26. package/dist/vue-components.es58.js +3 -3
  27. package/dist/vue-components.es59.js +1 -1
  28. package/dist/vue-components.es8.js +29 -36
  29. package/dist/vue-components.es9.js +7 -6
  30. package/package.json +3 -3
  31. package/src/components/OmegaForm/InputProps.ts +17 -8
  32. package/src/components/OmegaForm/OmegaFormStuff.ts +52 -0
  33. package/src/components/OmegaForm/OmegaTaggedUnion.vue +16 -35
  34. package/src/components/OmegaForm/OmegaTaggedUnionInternal.vue +2 -1
  35. package/src/components/OmegaForm/useOmegaForm.ts +123 -10
@@ -1,7 +1,14 @@
1
- var N;
2
- (function(E) {
3
- E[E.NONE = 0] = "NONE", E[E.SAMPLED = 1] = "SAMPLED";
4
- })(N || (N = {}));
1
+ import { NoopTracer as o } from "./vue-components.es44.js";
2
+ var p = (
3
+ /** @class */
4
+ (function() {
5
+ function r() {
6
+ }
7
+ return r.prototype.getTracer = function(e, n, t) {
8
+ return new o();
9
+ }, r;
10
+ })()
11
+ );
5
12
  export {
6
- N as TraceFlags
13
+ p as NoopTracerProvider
7
14
  };
@@ -1,21 +1,7 @@
1
- import { INVALID_TRACEID as r, INVALID_SPANID as t } from "./vue-components.es48.js";
2
- import { NonRecordingSpan as i } from "./vue-components.es49.js";
3
- var a = /^([0-9a-f]{32})$/i, o = /^[0-9a-f]{16}$/i;
4
- function I(n) {
5
- return a.test(n) && n !== r;
6
- }
7
- function e(n) {
8
- return o.test(n) && n !== t;
9
- }
10
- function A(n) {
11
- return I(n.traceId) && e(n.spanId);
12
- }
13
- function D(n) {
14
- return new i(n);
15
- }
1
+ var N;
2
+ (function(E) {
3
+ E[E.NONE = 0] = "NONE", E[E.SAMPLED = 1] = "SAMPLED";
4
+ })(N || (N = {}));
16
5
  export {
17
- A as isSpanContextValid,
18
- e as isValidSpanId,
19
- I as isValidTraceId,
20
- D as wrapSpanContext
6
+ N as TraceFlags
21
7
  };
@@ -1,11 +1,21 @@
1
- import { TraceFlags as I } from "./vue-components.es46.js";
2
- var a = "0000000000000000", r = "00000000000000000000000000000000", A = {
3
- traceId: r,
4
- spanId: a,
5
- traceFlags: I.NONE
6
- };
1
+ import { INVALID_TRACEID as r, INVALID_SPANID as t } from "./vue-components.es49.js";
2
+ import { NonRecordingSpan as i } from "./vue-components.es50.js";
3
+ var a = /^([0-9a-f]{32})$/i, o = /^[0-9a-f]{16}$/i;
4
+ function I(n) {
5
+ return a.test(n) && n !== r;
6
+ }
7
+ function e(n) {
8
+ return o.test(n) && n !== t;
9
+ }
10
+ function A(n) {
11
+ return I(n.traceId) && e(n.spanId);
12
+ }
13
+ function D(n) {
14
+ return new i(n);
15
+ }
7
16
  export {
8
- a as INVALID_SPANID,
9
- A as INVALID_SPAN_CONTEXT,
10
- r as INVALID_TRACEID
17
+ A as isSpanContextValid,
18
+ e as isValidSpanId,
19
+ I as isValidTraceId,
20
+ D as wrapSpanContext
11
21
  };
@@ -1,33 +1,11 @@
1
- import { INVALID_SPAN_CONTEXT as o } from "./vue-components.es48.js";
2
- var i = (
3
- /** @class */
4
- (function() {
5
- function t(n) {
6
- n === void 0 && (n = o), this._spanContext = n;
7
- }
8
- return t.prototype.spanContext = function() {
9
- return this._spanContext;
10
- }, t.prototype.setAttribute = function(n, e) {
11
- return this;
12
- }, t.prototype.setAttributes = function(n) {
13
- return this;
14
- }, t.prototype.addEvent = function(n, e) {
15
- return this;
16
- }, t.prototype.addLink = function(n) {
17
- return this;
18
- }, t.prototype.addLinks = function(n) {
19
- return this;
20
- }, t.prototype.setStatus = function(n) {
21
- return this;
22
- }, t.prototype.updateName = function(n) {
23
- return this;
24
- }, t.prototype.end = function(n) {
25
- }, t.prototype.isRecording = function() {
26
- return !1;
27
- }, t.prototype.recordException = function(n, e) {
28
- }, t;
29
- })()
30
- );
1
+ import { TraceFlags as I } from "./vue-components.es47.js";
2
+ var a = "0000000000000000", r = "00000000000000000000000000000000", A = {
3
+ traceId: r,
4
+ spanId: a,
5
+ traceFlags: I.NONE
6
+ };
31
7
  export {
32
- i as NonRecordingSpan
8
+ a as INVALID_SPANID,
9
+ A as INVALID_SPAN_CONTEXT,
10
+ r as INVALID_TRACEID
33
11
  };
@@ -1,50 +1,33 @@
1
- import { NoopContextManager as f } from "./vue-components.es59.js";
2
- import { registerGlobal as s, getGlobal as p, unregisterGlobal as g } from "./vue-components.es57.js";
3
- import { DiagAPI as u } from "./vue-components.es54.js";
4
- var y = function(t, e) {
5
- var a = typeof Symbol == "function" && t[Symbol.iterator];
6
- if (!a) return t;
7
- var n = a.call(t), o, r = [], i;
8
- try {
9
- for (; (e === void 0 || e-- > 0) && !(o = n.next()).done; ) r.push(o.value);
10
- } catch (c) {
11
- i = { error: c };
12
- } finally {
13
- try {
14
- o && !o.done && (a = n.return) && a.call(n);
15
- } finally {
16
- if (i) throw i.error;
17
- }
18
- }
19
- return r;
20
- }, d = function(t, e, a) {
21
- if (a || arguments.length === 2) for (var n = 0, o = e.length, r; n < o; n++)
22
- (r || !(n in e)) && (r || (r = Array.prototype.slice.call(e, 0, n)), r[n] = e[n]);
23
- return t.concat(r || Array.prototype.slice.call(e));
24
- }, l = "context", _ = new f(), A = (
1
+ import { INVALID_SPAN_CONTEXT as o } from "./vue-components.es49.js";
2
+ var i = (
25
3
  /** @class */
26
4
  (function() {
27
- function t() {
5
+ function t(n) {
6
+ n === void 0 && (n = o), this._spanContext = n;
28
7
  }
29
- return t.getInstance = function() {
30
- return this._instance || (this._instance = new t()), this._instance;
31
- }, t.prototype.setGlobalContextManager = function(e) {
32
- return s(l, e, u.instance());
33
- }, t.prototype.active = function() {
34
- return this._getContextManager().active();
35
- }, t.prototype.with = function(e, a, n) {
36
- for (var o, r = [], i = 3; i < arguments.length; i++)
37
- r[i - 3] = arguments[i];
38
- return (o = this._getContextManager()).with.apply(o, d([e, a, n], y(r), !1));
39
- }, t.prototype.bind = function(e, a) {
40
- return this._getContextManager().bind(e, a);
41
- }, t.prototype._getContextManager = function() {
42
- return p(l) || _;
43
- }, t.prototype.disable = function() {
44
- this._getContextManager().disable(), g(l, u.instance());
8
+ return t.prototype.spanContext = function() {
9
+ return this._spanContext;
10
+ }, t.prototype.setAttribute = function(n, e) {
11
+ return this;
12
+ }, t.prototype.setAttributes = function(n) {
13
+ return this;
14
+ }, t.prototype.addEvent = function(n, e) {
15
+ return this;
16
+ }, t.prototype.addLink = function(n) {
17
+ return this;
18
+ }, t.prototype.addLinks = function(n) {
19
+ return this;
20
+ }, t.prototype.setStatus = function(n) {
21
+ return this;
22
+ }, t.prototype.updateName = function(n) {
23
+ return this;
24
+ }, t.prototype.end = function(n) {
25
+ }, t.prototype.isRecording = function() {
26
+ return !1;
27
+ }, t.prototype.recordException = function(n, e) {
45
28
  }, t;
46
29
  })()
47
30
  );
48
31
  export {
49
- A as ContextAPI
32
+ i as NonRecordingSpan
50
33
  };
@@ -1,28 +1,50 @@
1
- import { registerGlobal as a, getGlobal as p, unregisterGlobal as s } from "./vue-components.es57.js";
2
- import { ProxyTracerProvider as i } from "./vue-components.es44.js";
3
- import { wrapSpanContext as c, isSpanContextValid as h } from "./vue-components.es47.js";
4
- import { deleteSpan as g, getSpan as S, getActiveSpan as x, getSpanContext as d, setSpan as f, setSpanContext as l } from "./vue-components.es58.js";
5
- import { DiagAPI as o } from "./vue-components.es54.js";
6
- var n = "trace", y = (
1
+ import { NoopContextManager as f } from "./vue-components.es59.js";
2
+ import { registerGlobal as s, getGlobal as p, unregisterGlobal as g } from "./vue-components.es57.js";
3
+ import { DiagAPI as u } from "./vue-components.es54.js";
4
+ var y = function(t, e) {
5
+ var a = typeof Symbol == "function" && t[Symbol.iterator];
6
+ if (!a) return t;
7
+ var n = a.call(t), o, r = [], i;
8
+ try {
9
+ for (; (e === void 0 || e-- > 0) && !(o = n.next()).done; ) r.push(o.value);
10
+ } catch (c) {
11
+ i = { error: c };
12
+ } finally {
13
+ try {
14
+ o && !o.done && (a = n.return) && a.call(n);
15
+ } finally {
16
+ if (i) throw i.error;
17
+ }
18
+ }
19
+ return r;
20
+ }, d = function(t, e, a) {
21
+ if (a || arguments.length === 2) for (var n = 0, o = e.length, r; n < o; n++)
22
+ (r || !(n in e)) && (r || (r = Array.prototype.slice.call(e, 0, n)), r[n] = e[n]);
23
+ return t.concat(r || Array.prototype.slice.call(e));
24
+ }, l = "context", _ = new f(), A = (
7
25
  /** @class */
8
26
  (function() {
9
27
  function t() {
10
- this._proxyTracerProvider = new i(), this.wrapSpanContext = c, this.isSpanContextValid = h, this.deleteSpan = g, this.getSpan = S, this.getActiveSpan = x, this.getSpanContext = d, this.setSpan = f, this.setSpanContext = l;
11
28
  }
12
29
  return t.getInstance = function() {
13
30
  return this._instance || (this._instance = new t()), this._instance;
14
- }, t.prototype.setGlobalTracerProvider = function(r) {
15
- var e = a(n, this._proxyTracerProvider, o.instance());
16
- return e && this._proxyTracerProvider.setDelegate(r), e;
17
- }, t.prototype.getTracerProvider = function() {
18
- return p(n) || this._proxyTracerProvider;
19
- }, t.prototype.getTracer = function(r, e) {
20
- return this.getTracerProvider().getTracer(r, e);
31
+ }, t.prototype.setGlobalContextManager = function(e) {
32
+ return s(l, e, u.instance());
33
+ }, t.prototype.active = function() {
34
+ return this._getContextManager().active();
35
+ }, t.prototype.with = function(e, a, n) {
36
+ for (var o, r = [], i = 3; i < arguments.length; i++)
37
+ r[i - 3] = arguments[i];
38
+ return (o = this._getContextManager()).with.apply(o, d([e, a, n], y(r), !1));
39
+ }, t.prototype.bind = function(e, a) {
40
+ return this._getContextManager().bind(e, a);
41
+ }, t.prototype._getContextManager = function() {
42
+ return p(l) || _;
21
43
  }, t.prototype.disable = function() {
22
- s(n, o.instance()), this._proxyTracerProvider = new i();
44
+ this._getContextManager().disable(), g(l, u.instance());
23
45
  }, t;
24
46
  })()
25
47
  );
26
48
  export {
27
- y as TraceAPI
49
+ A as ContextAPI
28
50
  };
@@ -1,13 +1,28 @@
1
- import { useStore as u } from "@tanstack/vue-form";
2
- import { computed as f } from "vue";
3
- function c(o, t) {
4
- return f(() => t ? u(o.store, (n) => {
5
- const r = {};
6
- for (const e of t)
7
- r[e] = n[e];
8
- return r;
9
- }).value : {});
10
- }
1
+ import { registerGlobal as a, getGlobal as p, unregisterGlobal as s } from "./vue-components.es57.js";
2
+ import { ProxyTracerProvider as i } from "./vue-components.es45.js";
3
+ import { wrapSpanContext as c, isSpanContextValid as h } from "./vue-components.es48.js";
4
+ import { deleteSpan as g, getSpan as S, getActiveSpan as x, getSpanContext as d, setSpan as f, setSpanContext as l } from "./vue-components.es58.js";
5
+ import { DiagAPI as o } from "./vue-components.es54.js";
6
+ var n = "trace", y = (
7
+ /** @class */
8
+ (function() {
9
+ function t() {
10
+ this._proxyTracerProvider = new i(), this.wrapSpanContext = c, this.isSpanContextValid = h, this.deleteSpan = g, this.getSpan = S, this.getActiveSpan = x, this.getSpanContext = d, this.setSpan = f, this.setSpanContext = l;
11
+ }
12
+ return t.getInstance = function() {
13
+ return this._instance || (this._instance = new t()), this._instance;
14
+ }, t.prototype.setGlobalTracerProvider = function(r) {
15
+ var e = a(n, this._proxyTracerProvider, o.instance());
16
+ return e && this._proxyTracerProvider.setDelegate(r), e;
17
+ }, t.prototype.getTracerProvider = function() {
18
+ return p(n) || this._proxyTracerProvider;
19
+ }, t.prototype.getTracer = function(r, e) {
20
+ return this.getTracerProvider().getTracer(r, e);
21
+ }, t.prototype.disable = function() {
22
+ s(n, o.instance()), this._proxyTracerProvider = new i();
23
+ }, t;
24
+ })()
25
+ );
11
26
  export {
12
- c as getOmegaStore
27
+ y as TraceAPI
13
28
  };
@@ -1,6 +1,13 @@
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";
3
-
1
+ import { useStore as u } from "@tanstack/vue-form";
2
+ import { computed as f } from "vue";
3
+ function c(o, t) {
4
+ return f(() => t ? u(o.store, (n) => {
5
+ const r = {};
6
+ for (const e of t)
7
+ r[e] = n[e];
8
+ return r;
9
+ }).value : {});
10
+ }
4
11
  export {
5
- o as default
12
+ c as getOmegaStore
6
13
  };
@@ -1,6 +1,6 @@
1
1
  import { DiagComponentLogger as m } from "./vue-components.es55.js";
2
2
  import { createLogLevelDiagLogger as y } from "./vue-components.es56.js";
3
- import { DiagLogLevel as d } from "./vue-components.es41.js";
3
+ import { DiagLogLevel as d } from "./vue-components.es42.js";
4
4
  import { unregisterGlobal as p, getGlobal as v, registerGlobal as w } from "./vue-components.es57.js";
5
5
  var b = function(i, n) {
6
6
  var r = typeof Symbol == "function" && i[Symbol.iterator];
@@ -1,4 +1,4 @@
1
- import { DiagLogLevel as r } from "./vue-components.es41.js";
1
+ import { DiagLogLevel as r } from "./vue-components.es42.js";
2
2
  function c(n, o) {
3
3
  n < r.NONE ? n = r.NONE : n > r.ALL && (n = r.ALL), o = o || {};
4
4
  function i(t, f) {
@@ -1,6 +1,6 @@
1
- import { createContextKey as o } from "./vue-components.es40.js";
2
- import { NonRecordingSpan as a } from "./vue-components.es49.js";
3
- import { ContextAPI as u } from "./vue-components.es50.js";
1
+ import { createContextKey as o } from "./vue-components.es41.js";
2
+ import { NonRecordingSpan as a } from "./vue-components.es50.js";
3
+ import { ContextAPI as u } from "./vue-components.es51.js";
4
4
  var n = o("OpenTelemetry Context Key SPAN");
5
5
  function r(e) {
6
6
  return e.getValue(n) || void 0;
@@ -1,4 +1,4 @@
1
- import { ROOT_CONTEXT as l } from "./vue-components.es40.js";
1
+ import { ROOT_CONTEXT as l } from "./vue-components.es41.js";
2
2
  var c = function(t, o) {
3
3
  var n = typeof Symbol == "function" && t[Symbol.iterator];
4
4
  if (!n) return t;
@@ -1,6 +1,6 @@
1
- import { defineComponent as d, onMounted as c, createElementBlock as p, openBlock as g, Fragment as v, createVNode as m, unref as i, withCtx as u, renderSlot as f, createCommentVNode as V, createSlots as b, renderList as y, normalizeProps as F, guardReactiveProps as $ } from "vue";
2
- import k from "./vue-components.es9.js";
3
- const B = /* @__PURE__ */ d({
1
+ import { defineComponent as s, createElementBlock as f, openBlock as d, Fragment as c, renderSlot as n, createVNode as a, unref as o, withCtx as r, createCommentVNode as g, createSlots as $, renderList as y, normalizeProps as b, guardReactiveProps as p } from "vue";
2
+ import C from "./vue-components.es9.js";
3
+ const F = /* @__PURE__ */ s({
4
4
  __name: "OmegaTaggedUnion",
5
5
  props: {
6
6
  name: {},
@@ -9,40 +9,33 @@ const B = /* @__PURE__ */ d({
9
9
  options: {},
10
10
  label: {}
11
11
  },
12
- setup(n) {
13
- const e = n;
14
- return c(() => {
15
- const t = e.form.getFieldValue(e.name), o = e.form.meta[e.name];
16
- if (t === void 0)
17
- if (o?.nullableOrUndefined === "null" || !o?.required)
18
- e.form.setFieldValue(e.name, null);
19
- else {
20
- const a = e.options.find((l) => l.value !== null);
21
- a && a.value && e.form.setFieldValue(e.name, {
22
- _tag: a.value
23
- });
24
- }
25
- }), (t, o) => (g(), p(v, null, [
26
- m(i(n.form).Input, {
27
- name: `${n.name}._tag`,
28
- label: n.label,
29
- type: n.type ?? "select",
30
- options: n.options
31
- }, null, 8, ["name", "label", "type", "options"]),
32
- m(i(n.form).Field, { name: n.name }, {
33
- default: u(({ field: a, state: l }) => [
34
- l.value ? f(t.$slots, "default", { key: 0 }) : V("", !0),
35
- m(k, {
36
- field: a,
37
- state: l.value
38
- }, b({ _: 2 }, [
39
- y(t.$slots, (C, r) => ({
40
- name: r,
41
- fn: u((s) => [
42
- f(t.$slots, r, F($(s)))
12
+ setup(e) {
13
+ return (t, k) => (d(), f(c, null, [
14
+ n(t.$slots, "OmegaCustomInput", {}, () => [
15
+ a(o(e.form).Input, {
16
+ name: e.name ? `${e.name}._tag` : "_tag",
17
+ label: e.label,
18
+ type: e.type ?? "select",
19
+ options: e.options
20
+ }, null, 8, ["name", "label", "type", "options"])
21
+ ]),
22
+ a(o(e.form).Field, {
23
+ name: e.name ?? ""
24
+ }, {
25
+ default: r(({ field: u, state: m }) => [
26
+ m.value ? n(t.$slots, "default", { key: 0 }) : g("", !0),
27
+ a(C, {
28
+ field: u,
29
+ state: m.value,
30
+ name: e.name
31
+ }, $({ _: 2 }, [
32
+ y(t.$slots, (v, l) => ({
33
+ name: l,
34
+ fn: r((i) => [
35
+ n(t.$slots, l, b(p(i)))
43
36
  ])
44
37
  }))
45
- ]), 1032, ["field", "state"])
38
+ ]), 1032, ["field", "state", "name"])
46
39
  ]),
47
40
  _: 3
48
41
  }, 8, ["name"])
@@ -50,5 +43,5 @@ const B = /* @__PURE__ */ d({
50
43
  }
51
44
  });
52
45
  export {
53
- B as default
46
+ F as default
54
47
  };
@@ -1,19 +1,20 @@
1
- import { defineComponent as l, watch as s, renderSlot as i, createCommentVNode as o, normalizeProps as r, mergeProps as d } from "vue";
2
- const m = /* @__PURE__ */ l({
1
+ import { defineComponent as l, watch as i, renderSlot as m, createCommentVNode as s, normalizeProps as o, mergeProps as r } from "vue";
2
+ const f = /* @__PURE__ */ l({
3
3
  __name: "OmegaTaggedUnionInternal",
4
4
  props: {
5
5
  state: {},
6
- field: {}
6
+ field: {},
7
+ name: {}
7
8
  },
8
9
  setup(e) {
9
10
  const a = e;
10
- return s(() => a.state?._tag, (t, n) => {
11
+ return i(() => a.state?._tag, (t, n) => {
11
12
  t === null && a.field.setValue(null), t !== n && setTimeout(() => {
12
13
  a.field.validate("change");
13
14
  }, 0);
14
- }), (t, n) => e.state?._tag ? i(t.$slots, e.state?._tag, r(d({ key: 0 }, { field: e.field, state: e.state }))) : o("", !0);
15
+ }), (t, n) => e.state?._tag ? m(t.$slots, `${e.name ? `${e.name}.` : ""}${e.state?._tag}`, o(r({ key: 0 }, { field: e.field, state: e.state }))) : s("", !0);
15
16
  }
16
17
  });
17
18
  export {
18
- m as default
19
+ f as default
19
20
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/vue-components",
3
- "version": "2.6.2",
3
+ "version": "2.7.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": "3.12.0",
57
- "@effect-app/vue": "2.92.2"
56
+ "@effect-app/vue": "2.92.2",
57
+ "effect-app": "3.12.0"
58
58
  },
59
59
  "scripts": {
60
60
  "build": "pnpm build:run",
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import type { DeepKeys, DeepValue, FieldApi, FieldAsyncValidateOrFn, FieldValidateAsyncFn, FieldValidateFn, FieldValidateOrFn, FormAsyncValidateOrFn, FormValidateOrFn, StandardSchemaV1 } from "@tanstack/vue-form"
3
+ import { type IsUnion } from "effect-app/utils"
3
4
 
4
5
  export type OmegaFieldInternalApi<From extends Record<PropertyKey, any>, TName extends DeepKeys<From>> = FieldApi<
5
6
  /* in out TParentData*/ From,
@@ -60,10 +61,13 @@ export type VuetifyInputProps<From extends Record<PropertyKey, any>, TName exten
60
61
  // Utility type to extract _tag literal values from a discriminated union
61
62
  // For a union like { _tag: "A", ... } | { _tag: "B", ... }, this returns "A" | "B"
62
63
  // For nullable unions like { _tag: "A" } | { _tag: "B" } | null, this still returns "A" | "B" (excluding null)
63
- export type ExtractTagValue<From extends Record<PropertyKey, any>, TName extends DeepKeys<From>> =
64
- DeepValue<From, TName> extends infer U ? U extends { _tag: infer Tag } ? Tag
65
- : never
64
+ export type ExtractTagValue<
65
+ From extends Record<PropertyKey, any>,
66
+ TName extends DeepKeys<From> | undefined
67
+ > = IsUnion<TName> extends true ? From extends { _tag: infer Tag } ? Tag : never
68
+ : DeepValue<From, TName> extends infer U ? U extends { _tag: infer Tag } ? Tag
66
69
  : never
70
+ : never
67
71
 
68
72
  // Utility type to extract a specific branch from a discriminated union based on _tag value
69
73
  // For union { _tag: "A", foo: string } | { _tag: "B", bar: number } and Tag="A", returns { _tag: "A", foo: string }
@@ -72,16 +76,21 @@ export type ExtractUnionBranch<T, Tag> = T extends { _tag: Tag } ? T
72
76
 
73
77
  // Option type for TaggedUnion component with strongly-typed value
74
78
  // The value can be either one of the _tag values OR null (for the placeholder)
75
- export type TaggedUnionOption<From extends Record<PropertyKey, any>, TName extends DeepKeys<From>> = {
79
+ export type TaggedUnionOption<From extends Record<PropertyKey, any>, TName extends DeepKeys<From> | undefined> = {
76
80
  readonly title: string
77
81
  readonly value: ExtractTagValue<From, TName> | null
78
82
  }
79
83
 
80
84
  // Options array must ALWAYS start with a null option (placeholder), followed by the actual options
81
- export type TaggedUnionOptionsArray<From extends Record<PropertyKey, any>, TName extends DeepKeys<From>> = readonly [
82
- { readonly title: string; readonly value: null },
83
- ...ReadonlyArray<{ readonly title: string; readonly value: ExtractTagValue<From, TName> }>
84
- ]
85
+ export type TaggedUnionOptionsArray<
86
+ From extends Record<PropertyKey, any>,
87
+ TName extends DeepKeys<From> | undefined
88
+ > =
89
+ | readonly [
90
+ { readonly title: string; readonly value: null },
91
+ ...ReadonlyArray<{ readonly title: string; readonly value: ExtractTagValue<From, TName> }>
92
+ ]
93
+ | ReadonlyArray<{ readonly title: string; readonly value: ExtractTagValue<From, TName> }>
85
94
 
86
95
  // Props for TaggedUnion component
87
96
  export type TaggedUnionProps<From extends Record<PropertyKey, any>, TName extends DeepKeys<From>> = {
@@ -695,6 +695,58 @@ const flattenMeta = <From, To>(
695
695
  return flattenMeta(S.make(ast.from))
696
696
  }
697
697
 
698
+ // Handle root-level Union types (discriminated unions)
699
+ if (ast._tag === "Union") {
700
+ const unionAst = ast as any
701
+ const types = unionAst.types || []
702
+
703
+ // Filter out null/undefined types and unwrap transformations
704
+ const nonNullTypes = types
705
+ .filter((t: any) => t._tag !== "UndefinedKeyword" && t !== S.Null.ast)
706
+ .map(getTransformationFrom)
707
+
708
+ // Check if this is a discriminated union (all members are structs)
709
+ const allStructs = nonNullTypes.every((t: any) => t._tag === "TypeLiteral" && "propertySignatures" in t)
710
+
711
+ if (allStructs && nonNullTypes.length > 0) {
712
+ // Extract discriminator values from each union member
713
+ const discriminatorValues: any[] = []
714
+
715
+ // Merge metadata from all union members
716
+ for (const memberType of nonNullTypes) {
717
+ if ("propertySignatures" in memberType) {
718
+ // Find the discriminator field (usually _tag)
719
+ const tagProp = memberType.propertySignatures.find(
720
+ (p: any) => p.name.toString() === "_tag"
721
+ )
722
+
723
+ if (tagProp && S.AST.isLiteral(tagProp.type)) {
724
+ discriminatorValues.push(tagProp.type.literal)
725
+ }
726
+
727
+ // Create metadata for this member's properties
728
+ const memberMeta = createMeta<To>({
729
+ propertySignatures: memberType.propertySignatures
730
+ })
731
+
732
+ // Merge into result
733
+ Object.assign(result, memberMeta)
734
+ }
735
+ }
736
+
737
+ // Create metadata for the discriminator field
738
+ if (discriminatorValues.length > 0) {
739
+ result["_tag" as DeepKeys<To>] = {
740
+ type: "select",
741
+ members: discriminatorValues,
742
+ required: true
743
+ } as FieldMeta
744
+ }
745
+
746
+ return result
747
+ }
748
+ }
749
+
698
750
  if ("propertySignatures" in ast) {
699
751
  const meta = createMeta<To>({
700
752
  propertySignatures: ast.propertySignatures