@effect-app/vue-components 4.0.0-beta.26 → 4.0.0-beta.261

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 (198) hide show
  1. package/README.md +13 -9
  2. package/dist/reset.css +39 -38
  3. package/dist/types/components/CommandButton.vue.d.ts +24 -5
  4. package/dist/types/components/OmegaForm/InputProps.d.ts +1 -1
  5. package/dist/types/components/OmegaForm/OmegaArray.vue.d.ts +1 -1
  6. package/dist/types/components/OmegaForm/OmegaAutoGen.vue.d.ts +2 -2
  7. package/dist/types/components/OmegaForm/OmegaErrorsInternal.vue.d.ts +1 -1
  8. package/dist/types/components/OmegaForm/OmegaFormInput.vue.d.ts +1 -1
  9. package/dist/types/components/OmegaForm/OmegaInput.vue.d.ts +1 -1
  10. package/dist/types/components/OmegaForm/OmegaInternalInput.vue.d.ts +2 -1
  11. package/dist/types/components/OmegaForm/OmegaTaggedUnion.vue.d.ts +2 -2
  12. package/dist/types/components/OmegaForm/OmegaTaggedUnionInternal.vue.d.ts +3 -3
  13. package/dist/types/components/OmegaForm/OmegaWrapper.vue.d.ts +1 -1
  14. package/dist/types/components/OmegaForm/createUseFormWithCustomInput.d.ts +2 -2
  15. package/dist/types/components/OmegaForm/errors.d.ts +33 -0
  16. package/dist/types/components/OmegaForm/getOmegaStore.d.ts +1 -1
  17. package/dist/types/components/OmegaForm/hocs.d.ts +3 -0
  18. package/dist/types/components/OmegaForm/index.d.ts +13 -3
  19. package/dist/types/components/OmegaForm/inputs.d.ts +4 -0
  20. package/dist/types/components/OmegaForm/meta/checks.d.ts +4 -0
  21. package/dist/types/components/OmegaForm/meta/createMeta.d.ts +33 -0
  22. package/dist/types/components/OmegaForm/meta/defaults.d.ts +21 -0
  23. package/dist/types/components/OmegaForm/meta/redacted.d.ts +2 -0
  24. package/dist/types/components/OmegaForm/meta/types.d.ts +56 -0
  25. package/dist/types/components/OmegaForm/meta/walker.d.ts +18 -0
  26. package/dist/types/components/OmegaForm/persistency.d.ts +58 -0
  27. package/dist/types/components/OmegaForm/submit.d.ts +60 -0
  28. package/dist/types/components/OmegaForm/types.d.ts +289 -0
  29. package/dist/types/components/OmegaForm/useOmegaForm.d.ts +7 -213
  30. package/dist/types/components/OmegaForm/validation/localized.d.ts +10 -0
  31. package/dist/types/index.d.ts +0 -1
  32. package/dist/types/utils/index.d.ts +8 -8
  33. package/dist/vue-components.es.js +29 -44
  34. package/dist/vue-components10.es.js +5 -0
  35. package/dist/vue-components11.es.js +20 -0
  36. package/dist/vue-components12.es.js +49 -0
  37. package/dist/vue-components13.es.js +128 -0
  38. package/dist/vue-components14.es.js +65 -0
  39. package/dist/vue-components15.es.js +114 -0
  40. package/dist/vue-components16.es.js +22 -0
  41. package/dist/vue-components17.es.js +5 -0
  42. package/dist/vue-components18.es.js +80 -0
  43. package/dist/vue-components19.es.js +93 -0
  44. package/dist/vue-components2.es.js +11 -0
  45. package/dist/vue-components20.es.js +73 -0
  46. package/dist/vue-components21.es.js +12 -0
  47. package/dist/vue-components22.es.js +56 -0
  48. package/dist/vue-components23.es.js +5 -0
  49. package/dist/vue-components24.es.js +44 -0
  50. package/dist/vue-components25.es.js +5 -0
  51. package/dist/vue-components26.es.js +84 -0
  52. package/dist/vue-components28.es.js +8 -0
  53. package/dist/vue-components29.es.js +9 -0
  54. package/dist/vue-components3.es.js +98 -0
  55. package/dist/vue-components30.es.js +269 -0
  56. package/dist/vue-components32.es.js +8 -0
  57. package/dist/vue-components33.es.js +73 -0
  58. package/dist/vue-components34.es.js +5 -0
  59. package/dist/vue-components35.es.js +52 -0
  60. package/dist/vue-components36.es.js +5 -0
  61. package/dist/vue-components37.es.js +24 -0
  62. package/dist/vue-components38.es.js +5 -0
  63. package/dist/vue-components39.es.js +59 -0
  64. package/dist/vue-components4.es.js +5 -0
  65. package/dist/vue-components40.es.js +5 -0
  66. package/dist/vue-components41.es.js +12 -0
  67. package/dist/vue-components42.es.js +22 -0
  68. package/dist/vue-components44.es.js +9 -0
  69. package/dist/vue-components45.es.js +4 -0
  70. package/dist/vue-components46.es.js +38 -0
  71. package/dist/vue-components47.es.js +27 -0
  72. package/dist/vue-components48.es.js +28 -0
  73. package/dist/vue-components49.es.js +7 -0
  74. package/dist/vue-components5.es.js +24 -0
  75. package/dist/vue-components50.es.js +18 -0
  76. package/dist/vue-components51.es.js +36 -0
  77. package/dist/vue-components52.es.js +18 -0
  78. package/dist/vue-components53.es.js +21 -0
  79. package/dist/vue-components54.es.js +30 -0
  80. package/dist/vue-components55.es.js +7 -0
  81. package/dist/vue-components56.es.js +9 -0
  82. package/dist/vue-components57.es.js +38 -0
  83. package/dist/vue-components58.es.js +25 -0
  84. package/dist/vue-components59.es.js +128 -0
  85. package/dist/vue-components6.es.js +13 -0
  86. package/dist/vue-components60.es.js +24 -0
  87. package/dist/vue-components61.es.js +21 -0
  88. package/dist/vue-components62.es.js +9 -0
  89. package/dist/vue-components63.es.js +19 -0
  90. package/dist/vue-components64.es.js +5 -0
  91. package/dist/vue-components65.es.js +29 -0
  92. package/dist/vue-components66.es.js +5 -0
  93. package/dist/vue-components67.es.js +43 -0
  94. package/dist/vue-components68.es.js +100 -0
  95. package/dist/vue-components69.es.js +33 -0
  96. package/dist/vue-components7.es.js +13 -0
  97. package/dist/vue-components70.es.js +19 -0
  98. package/dist/vue-components71.es.js +48 -0
  99. package/dist/vue-components8.es.js +35 -0
  100. package/dist/vue-components9.es.js +47 -0
  101. package/package.json +30 -30
  102. package/src/components/CommandButton.vue +96 -16
  103. package/src/components/OmegaForm/InputProps.ts +1 -1
  104. package/src/components/OmegaForm/OmegaArray.vue +8 -9
  105. package/src/components/OmegaForm/OmegaAutoGen.vue +3 -2
  106. package/src/components/OmegaForm/OmegaErrorsInternal.vue +1 -1
  107. package/src/components/OmegaForm/OmegaFormInput.vue +1 -1
  108. package/src/components/OmegaForm/OmegaInput.vue +15 -38
  109. package/src/components/OmegaForm/OmegaInputVuetify.vue +5 -2
  110. package/src/components/OmegaForm/OmegaInternalInput.vue +17 -5
  111. package/src/components/OmegaForm/OmegaTaggedUnion.vue +10 -3
  112. package/src/components/OmegaForm/OmegaTaggedUnionInternal.vue +6 -6
  113. package/src/components/OmegaForm/OmegaWrapper.vue +1 -1
  114. package/src/components/OmegaForm/blockDialog.ts +18 -6
  115. package/src/components/OmegaForm/createUseFormWithCustomInput.ts +2 -1
  116. package/src/components/OmegaForm/errors.ts +136 -0
  117. package/src/components/OmegaForm/getOmegaStore.ts +1 -1
  118. package/src/components/OmegaForm/hocs.ts +19 -0
  119. package/src/components/OmegaForm/index.ts +16 -4
  120. package/src/components/OmegaForm/inputs.ts +22 -0
  121. package/src/components/OmegaForm/meta/checks.ts +82 -0
  122. package/src/components/OmegaForm/meta/createMeta.ts +140 -0
  123. package/src/components/OmegaForm/meta/defaults.ts +261 -0
  124. package/src/components/OmegaForm/meta/redacted.ts +66 -0
  125. package/src/components/OmegaForm/meta/types.ts +78 -0
  126. package/src/components/OmegaForm/meta/walker.ts +248 -0
  127. package/src/components/OmegaForm/persistency.ts +247 -0
  128. package/src/components/OmegaForm/submit.ts +131 -0
  129. package/src/components/OmegaForm/types.ts +759 -0
  130. package/src/components/OmegaForm/useOmegaForm.ts +99 -893
  131. package/src/components/OmegaForm/useRegisterField.ts +1 -1
  132. package/src/components/OmegaForm/validation/localized.ts +203 -0
  133. package/src/index.ts +0 -1
  134. package/src/reset.css +39 -38
  135. package/src/utils/index.ts +11 -8
  136. package/dist/types/components/OmegaForm/OmegaFormStuff.d.ts +0 -159
  137. package/dist/types/constants/index.d.ts +0 -1
  138. package/dist/vue-components.es10.js +0 -239
  139. package/dist/vue-components.es11.js +0 -32
  140. package/dist/vue-components.es12.js +0 -503
  141. package/dist/vue-components.es13.js +0 -49
  142. package/dist/vue-components.es14.js +0 -4
  143. package/dist/vue-components.es15.js +0 -4
  144. package/dist/vue-components.es16.js +0 -6
  145. package/dist/vue-components.es17.js +0 -13
  146. package/dist/vue-components.es18.js +0 -57
  147. package/dist/vue-components.es19.js +0 -56
  148. package/dist/vue-components.es2.js +0 -30
  149. package/dist/vue-components.es20.js +0 -8
  150. package/dist/vue-components.es21.js +0 -8
  151. package/dist/vue-components.es22.js +0 -5
  152. package/dist/vue-components.es23.js +0 -5
  153. package/dist/vue-components.es24.js +0 -4
  154. package/dist/vue-components.es25.js +0 -4
  155. package/dist/vue-components.es26.js +0 -4
  156. package/dist/vue-components.es27.js +0 -4
  157. package/dist/vue-components.es28.js +0 -19
  158. package/dist/vue-components.es29.js +0 -13
  159. package/dist/vue-components.es3.js +0 -17
  160. package/dist/vue-components.es30.js +0 -194
  161. package/dist/vue-components.es32.js +0 -31
  162. package/dist/vue-components.es33.js +0 -6
  163. package/dist/vue-components.es34.js +0 -4
  164. package/dist/vue-components.es35.js +0 -4
  165. package/dist/vue-components.es36.js +0 -113
  166. package/dist/vue-components.es38.js +0 -9
  167. package/dist/vue-components.es39.js +0 -34
  168. package/dist/vue-components.es4.js +0 -52
  169. package/dist/vue-components.es41.js +0 -6
  170. package/dist/vue-components.es42.js +0 -25
  171. package/dist/vue-components.es43.js +0 -7
  172. package/dist/vue-components.es44.js +0 -23
  173. package/dist/vue-components.es45.js +0 -32
  174. package/dist/vue-components.es46.js +0 -24
  175. package/dist/vue-components.es47.js +0 -14
  176. package/dist/vue-components.es48.js +0 -7
  177. package/dist/vue-components.es49.js +0 -21
  178. package/dist/vue-components.es5.js +0 -52
  179. package/dist/vue-components.es50.js +0 -11
  180. package/dist/vue-components.es51.js +0 -33
  181. package/dist/vue-components.es52.js +0 -50
  182. package/dist/vue-components.es53.js +0 -28
  183. package/dist/vue-components.es54.js +0 -13
  184. package/dist/vue-components.es55.js +0 -67
  185. package/dist/vue-components.es56.js +0 -58
  186. package/dist/vue-components.es57.js +0 -19
  187. package/dist/vue-components.es58.js +0 -35
  188. package/dist/vue-components.es59.js +0 -31
  189. package/dist/vue-components.es6.js +0 -69
  190. package/dist/vue-components.es60.js +0 -44
  191. package/dist/vue-components.es61.js +0 -4
  192. package/dist/vue-components.es62.js +0 -46
  193. package/dist/vue-components.es63.js +0 -4
  194. package/dist/vue-components.es7.js +0 -83
  195. package/dist/vue-components.es8.js +0 -63
  196. package/dist/vue-components.es9.js +0 -21
  197. package/src/components/OmegaForm/OmegaFormStuff.ts +0 -1276
  198. package/src/constants/index.ts +0 -1
@@ -0,0 +1,100 @@
1
+ import { useIntl as e } from "./vue-components6.es.js";
2
+ import { generateMetaFromSchema as t, unwrapDeclaration as n } from "./vue-components14.es.js";
3
+ import { defaultsValueFromSchema as r, fillNestedDefaults as i } from "./vue-components15.es.js";
4
+ import { toFormSchema as a } from "./vue-components16.es.js";
5
+ import { usePersistency as o } from "./vue-components18.es.js";
6
+ import { annotateLiteralUnionMessages as s, toLocalizedStandardSchemaV1 as c } from "./vue-components19.es.js";
7
+ import { eHoc as l, makeFieldMap as u } from "./vue-components20.es.js";
8
+ import { fHoc as d } from "./vue-components21.es.js";
9
+ import f from "./vue-components23.es.js";
10
+ import p from "./vue-components25.es.js";
11
+ import m from "./vue-components29.es.js";
12
+ import h from "./vue-components36.es.js";
13
+ import g from "./vue-components40.es.js";
14
+ import _ from "./vue-components44.es.js";
15
+ import { makeSubmitHandlers as v, wrapOnSubmit as y } from "./vue-components67.es.js";
16
+ import { watch as b } from "vue";
17
+ import * as x from "effect-app/Schema";
18
+ import { revalidateLogic as S, useForm as C } from "@tanstack/vue-form";
19
+ import * as w from "effect-app/Context";
20
+ import { makeRunPromise as T } from "@effect-app/vue/runtime";
21
+ //#region src/components/OmegaForm/useOmegaForm.ts
22
+ var E = Symbol("OmegaForm"), D = T(w.empty()), O = (w, T, E) => {
23
+ if (!w) throw Error("Schema is required");
24
+ let { trans: O } = e(), k = a(w), A = s(k, O), j = n(k.ast), M = (e) => i(j, e), N = c(A, O), P = {
25
+ ...N,
26
+ "~standard": {
27
+ ...N["~standard"],
28
+ validate: (e) => N["~standard"].validate(M(e))
29
+ }
30
+ }, F = x.decodeUnknownEffectConcurrently(k), I = (e) => F(M(e)), { meta: L, unionMeta: R } = t(k), z = { form: void 0 }, B = o({
31
+ meta: L,
32
+ persistency: E?.persistency,
33
+ preventWindowExit: E?.preventWindowExit,
34
+ defaultValuesPriority: E?.defaultValuesPriority,
35
+ tanstackDefaultValues: T?.defaultValues,
36
+ schemaDefaultValues: () => r(w),
37
+ getForm: () => z.form
38
+ }), V = C({
39
+ ...T,
40
+ validationLogic: S(),
41
+ validators: {
42
+ onDynamic: P,
43
+ ...T?.validators
44
+ },
45
+ onSubmit: y(T?.onSubmit, I, D),
46
+ defaultValues: B.defaultValues.value
47
+ });
48
+ z.form = V;
49
+ let H = () => {
50
+ let e = V.state.values, t = i(j, e);
51
+ if (t === e || !t || typeof t != "object") return;
52
+ let n = e, r = t;
53
+ for (let e of Object.keys(r)) if (r[e] !== n[e]) {
54
+ let t = e;
55
+ V.setFieldValue(t, r[e], {
56
+ dontUpdateMeta: !0,
57
+ dontValidate: !0
58
+ });
59
+ }
60
+ }, U = () => {
61
+ Object.keys(L).forEach((e) => {
62
+ V.setFieldValue(e, void 0);
63
+ });
64
+ };
65
+ if (E?.preventWindowExit === "prevent-and-reset") {
66
+ let e = V.useStore((e) => e.isSubmitting), t = V.useStore((e) => e.submissionAttempts), n = V.useStore((e) => e.canSubmit), r = V.useStore((e) => e.values);
67
+ b([e, t], ([e, t], [i]) => {
68
+ i && !e && t > 0 && n.value && V.reset(r.value);
69
+ });
70
+ }
71
+ let { handleSubmit: W, handleSubmitEffect: G } = v(V), { fieldMap: K, registerField: q } = u(), J = Object.assign(V, {
72
+ i18nNamespace: E?.i18nNamespace,
73
+ ignorePreventCloseEvents: E?.ignorePreventCloseEvents,
74
+ meta: L,
75
+ unionMeta: R,
76
+ clear: U,
77
+ normalizeNullableStructs: H,
78
+ handleSubmit: W,
79
+ handleSubmitEffect: G,
80
+ registerField: q
81
+ }), Y = {
82
+ form: J,
83
+ fieldMap: K
84
+ };
85
+ return Object.assign(J, {
86
+ _paths: void 0,
87
+ _keys: void 0,
88
+ _schema: w,
89
+ errorContext: Y,
90
+ Form: d(J)(_),
91
+ Input: d(J)(E?.input ?? h),
92
+ TaggedUnion: d(J)(g),
93
+ Field: V.Field,
94
+ Errors: l(Y)(m),
95
+ Array: d(J)(f),
96
+ AutoGen: d(J)(p)
97
+ });
98
+ };
99
+ //#endregion
100
+ export { E as OmegaFormKey, O as useOmegaForm };
@@ -0,0 +1,33 @@
1
+ import e from "./vue-components36.es.js";
2
+ import { useOmegaForm as t } from "./vue-components68.es.js";
3
+ import { h as n } from "vue";
4
+ //#region src/components/OmegaForm/createUseFormWithCustomInput.ts
5
+ var r = (r) => (...i) => {
6
+ let [a, o, s] = i, c = {
7
+ name: "WrappedInput",
8
+ inheritAttrs: !1,
9
+ setup(t, { attrs: i, slots: a }) {
10
+ return () => n(e, {
11
+ ...t,
12
+ ...i
13
+ }, {
14
+ default: ({ field: e, state: t, ...o }) => n(r, {
15
+ ...Object.fromEntries(Object.entries(i).filter(([e]) => !Object.prototype.hasOwnProperty.call(o, e) && e !== "form")),
16
+ field: e,
17
+ state: t,
18
+ inputProps: o
19
+ }, {
20
+ ...a.label && { label: (e) => a.label(e) },
21
+ ...a.default && { default: (e) => a.default(e) }
22
+ }),
23
+ ...a.label && { label: (e) => a.label(e) }
24
+ });
25
+ }
26
+ };
27
+ return t(a, o, {
28
+ ...s,
29
+ input: c
30
+ });
31
+ };
32
+ //#endregion
33
+ export { r as createUseFormWithCustomInput };
@@ -0,0 +1,13 @@
1
+ import { onMounted as e, onUnmounted as t } from "vue";
2
+ //#region src/components/OmegaForm/onMountedWithCleanup.ts
3
+ function n(n) {
4
+ let r;
5
+ e(() => {
6
+ let e = n();
7
+ e && (r = e);
8
+ }), t(() => {
9
+ r && r();
10
+ });
11
+ }
12
+ //#endregion
13
+ export { n as onMountedWithCleanup };
@@ -0,0 +1,19 @@
1
+ import "./vue-components8.es.js";
2
+ import "./vue-components11.es.js";
3
+ import "./vue-components14.es.js";
4
+ import "./vue-components15.es.js";
5
+ import "./vue-components16.es.js";
6
+ import "./vue-components18.es.js";
7
+ import "./vue-components19.es.js";
8
+ import "./vue-components20.es.js";
9
+ import "./vue-components34.es.js";
10
+ import "./vue-components36.es.js";
11
+ import "./vue-components38.es.js";
12
+ import "./vue-components40.es.js";
13
+ import "./vue-components67.es.js";
14
+ import "./vue-components68.es.js";
15
+ import "./vue-components69.es.js";
16
+ //#region src/components/OmegaForm/index.ts
17
+ var e = (e) => e;
18
+ //#endregion
19
+ export { e as duplicateSchema };
@@ -0,0 +1,48 @@
1
+ import { __exportAll as e } from "./vue-components2.es.js";
2
+ import t from "./vue-components4.es.js";
3
+ import { useOnClose as n, usePreventClose as r } from "./vue-components8.es.js";
4
+ import i from "./vue-components10.es.js";
5
+ import { getInputType as a } from "./vue-components11.es.js";
6
+ import { createMeta as o, generateMetaFromSchema as s, isNullableOrUndefined as c, metadataFromAst as l } from "./vue-components14.es.js";
7
+ import { defaultsValueFromSchema as u } from "./vue-components15.es.js";
8
+ import { toFormSchema as d } from "./vue-components16.es.js";
9
+ import { deepMerge as f } from "./vue-components18.es.js";
10
+ import { makeStandardSchemaV1Hooks as p, toLocalizedStandardSchemaV1 as m } from "./vue-components19.es.js";
11
+ import { useErrorLabel as h } from "./vue-components20.es.js";
12
+ import g from "./vue-components34.es.js";
13
+ import _ from "./vue-components36.es.js";
14
+ import v from "./vue-components38.es.js";
15
+ import y from "./vue-components40.es.js";
16
+ import { FormErrors as b } from "./vue-components67.es.js";
17
+ import { OmegaFormKey as x, useOmegaForm as S } from "./vue-components68.es.js";
18
+ import { createUseFormWithCustomInput as C } from "./vue-components69.es.js";
19
+ import { duplicateSchema as w } from "./vue-components70.es.js";
20
+ //#region src/components/index.ts
21
+ var T = /* @__PURE__ */ e({
22
+ CommandButton: () => t,
23
+ Dialog: () => i,
24
+ FormErrors: () => b,
25
+ OmegaFormKey: () => x,
26
+ OmegaInput: () => _,
27
+ OmegaTaggedUnion: () => y,
28
+ OmegaTaggedUnionInternal: () => v,
29
+ OmegaVuetifyInput: () => g,
30
+ createMeta: () => o,
31
+ createUseFormWithCustomInput: () => C,
32
+ deepMerge: () => f,
33
+ defaultsValueFromSchema: () => u,
34
+ duplicateSchema: () => w,
35
+ generateMetaFromSchema: () => s,
36
+ getInputType: () => a,
37
+ isNullableOrUndefined: () => c,
38
+ makeStandardSchemaV1Hooks: () => p,
39
+ metadataFromAst: () => l,
40
+ toFormSchema: () => d,
41
+ toLocalizedStandardSchemaV1: () => m,
42
+ useErrorLabel: () => h,
43
+ useOmegaForm: () => S,
44
+ useOnClose: () => n,
45
+ usePreventClose: () => r
46
+ });
47
+ //#endregion
48
+ export { T as components_exports };
@@ -0,0 +1,35 @@
1
+ import e from "./vue-components5.es.js";
2
+ import { useIntl as t } from "./vue-components6.es.js";
3
+ import { onMountedWithCleanup as n } from "./vue-components7.es.js";
4
+ import { inject as r, provide as i } from "vue";
5
+ //#region src/components/OmegaForm/blockDialog.ts
6
+ var a = () => e(), o = Symbol("DialogBus"), s = () => r(o, null), c = () => {
7
+ let e = a();
8
+ return i(o, e), e;
9
+ }, l = (e) => {
10
+ let r = s();
11
+ if (!r) return;
12
+ let { formatMessage: i, trans: a } = t(), o = e(), c = "There are unsaved changes. Are you sure you want to close?";
13
+ n(() => {
14
+ let e = (e) => {
15
+ if (o.value) {
16
+ let t = i ? i({
17
+ id: "form.unsaved_changes_confirm",
18
+ defaultMessage: c
19
+ }) : a?.("form.unsaved_changes_confirm") ?? c;
20
+ confirm(t) || (e.prevent = !0);
21
+ }
22
+ };
23
+ return r.on("dialog-closing", e), () => r.off("dialog-closing", e);
24
+ });
25
+ }, u = (e) => {
26
+ let t = s();
27
+ return t ||= c(), () => {
28
+ let n = {};
29
+ t.emit("dialog-closing", n), n.prevent ? typeof n.prevent == "object" && "then" in n.prevent && n.prevent.then((t) => {
30
+ t && e();
31
+ }).catch(console.error) : e();
32
+ };
33
+ };
34
+ //#endregion
35
+ export { u as useOnClose, l as usePreventClose };
@@ -0,0 +1,47 @@
1
+ import { onMountedWithCleanup as e } from "./vue-components7.es.js";
2
+ import { useOnClose as t } from "./vue-components8.es.js";
3
+ import { computed as n, createBlock as r, createSlots as i, defineComponent as a, guardReactiveProps as o, mergeModels as s, normalizeProps as c, openBlock as l, renderList as u, renderSlot as d, resolveComponent as f, unref as p, useModel as m, useSlots as h, withCtx as g } from "vue";
4
+ //#region src/components/Dialog.vue?vue&type=script&setup=true&lang.ts
5
+ var _ = /* @__PURE__ */ a({
6
+ __name: "Dialog",
7
+ props: /* @__PURE__ */ s({ persistent: { type: Boolean } }, {
8
+ modelValue: {
9
+ type: Boolean,
10
+ default: !1
11
+ },
12
+ modelModifiers: {}
13
+ }),
14
+ emits: ["update:modelValue"],
15
+ setup(a) {
16
+ let s = a, _ = m(a, "modelValue"), v = h(), y = n(() => {
17
+ let { default: e, ...t } = v;
18
+ return t;
19
+ }), b = t(() => _.value = !1);
20
+ return e(() => {
21
+ let e = (e) => {
22
+ _.value && !s.persistent && e.code === "Escape" && b();
23
+ };
24
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
25
+ }), (e, t) => {
26
+ let n = f("v-dialog");
27
+ return l(), r(n, {
28
+ modelValue: _.value,
29
+ "onUpdate:modelValue": t[0] ||= (e) => _.value = e,
30
+ persistent: "",
31
+ "onClick:outside": p(b)
32
+ }, i({
33
+ default: g(({ isActive: t }) => [d(e.$slots, "default", {
34
+ open: _.value,
35
+ cancel: p(b),
36
+ isActive: t
37
+ })]),
38
+ _: 2
39
+ }, [u(y.value, (t, n) => ({
40
+ name: n,
41
+ fn: g((t) => [d(e.$slots, n, c(o(t)))])
42
+ }))]), 1032, ["modelValue", "onClick:outside"]);
43
+ };
44
+ }
45
+ });
46
+ //#endregion
47
+ export { _ as default };
package/package.json CHANGED
@@ -1,39 +1,39 @@
1
1
  {
2
2
  "name": "@effect-app/vue-components",
3
- "version": "4.0.0-beta.26",
3
+ "version": "4.0.0-beta.261",
4
4
  "peerDependencies": {
5
5
  "@mdi/js": "^7.4.47",
6
- "effect": "^4.0.0-beta.36",
7
- "intl-messageformat": "^11.1.2",
6
+ "effect": "^4.0.0-beta.74",
7
+ "intl-messageformat": "^11.2.4",
8
8
  "mdi-js": "^1.0.1",
9
9
  "primeflex": "^4.0.0",
10
10
  "primeicons": "^7.0.0",
11
- "primevue": "^4.5.4",
12
- "vue": "^3.5.29",
13
- "vuetify": "^4.0.1"
11
+ "primevue": "^4.5.5",
12
+ "vue": "^3.5.34",
13
+ "vuetify": "^4.0.6"
14
14
  },
15
15
  "devDependencies": {
16
- "@storybook/vue3": "^10.2.15",
17
- "@storybook/vue3-vite": "^10.2.15",
18
- "@types/node": "^25.3.3",
19
- "@vitejs/plugin-vue": "^6.0.4",
20
- "@vue/test-utils": "^2.4.6",
21
- "@vueuse/core": "^14.2.1",
22
- "dprint": "^0.52.0",
23
- "jsdom": "^28.1.0",
16
+ "@storybook/vue3": "^10.3.6",
17
+ "@storybook/vue3-vite": "^10.3.6",
18
+ "@types/node": "^25.6.0",
19
+ "@vitejs/plugin-vue": "^6.0.6",
20
+ "@vue/test-utils": "^2.4.10",
21
+ "@vueuse/core": "^14.3.0",
22
+ "jsdom": "^29.1.1",
24
23
  "rimraf": "^6.1.3",
25
- "sass": "^1.97.3",
26
- "storybook": "^10.2.15",
27
- "typescript": "~5.9.3",
28
- "vite": "^7.3.1",
29
- "vite-plugin-css-injected-by-js": "^4.0.1",
24
+ "sass": "^1.99.0",
25
+ "storybook": "^10.3.6",
26
+ "storybook-vue3-router": "^7.0.0",
27
+ "typescript": "~6.0.3",
28
+ "vite": "^8.0.10",
29
+ "vite-plugin-css-injected-by-js": "^5.0.1",
30
30
  "vitepress": "^1.6.4",
31
- "vitest": "^4.0.18",
32
- "vue-router": "^5.0.3",
31
+ "vitest": "^4.1.5",
32
+ "vue-router": "^5.0.6",
33
33
  "vue-toastification": "^2.0.0-rc.5",
34
- "vue-tsc": "^3.2.5",
35
- "vuetify": "^4.0.1",
36
- "@effect-app/eslint-shared-config": "0.5.7-beta.2"
34
+ "vue-tsc": "^3.2.8",
35
+ "vuetify": "^4.0.6",
36
+ "@effect-app/eslint-shared-config": "0.6.0-beta.30"
37
37
  },
38
38
  "files": [
39
39
  "src",
@@ -52,13 +52,13 @@
52
52
  }
53
53
  },
54
54
  "dependencies": {
55
- "@opentelemetry/api": "^1.9.0",
56
- "@tanstack/vue-form": "^1.23.5",
55
+ "@opentelemetry/api": "^1.9.1",
56
+ "@tanstack/vue-form": "^1.32.0",
57
57
  "highlight.js": "^11.11.1",
58
58
  "mitt": "^3.0.1",
59
59
  "vue3-highlightjs": "^1.0.5",
60
- "@effect-app/vue": "4.0.0-beta.26",
61
- "effect-app": "4.0.0-beta.26"
60
+ "@effect-app/vue": "4.0.0-beta.261",
61
+ "effect-app": "4.0.0-beta.261"
62
62
  },
63
63
  "scripts": {
64
64
  "check": "vue-tsc",
@@ -67,10 +67,10 @@
67
67
  "docs:dev": "vitepress dev docs",
68
68
  "docs:build": "vitepress build docs",
69
69
  "docs:serve": "vitepress serve docs",
70
- "lint": "NODE_OPTIONS=--max-old-space-size=8192 eslint src stories .storybook",
70
+ "lint": "oxlint --quiet --type-aware src stories && NODE_OPTIONS=--max-old-space-size=8192 ESLINT_TS=1 eslint --quiet src stories .storybook && pnpm exec dprint check --config ../../dprint.jsonc .",
71
71
  "ncu": "ncu",
72
72
  "clean": "rm -rf dist",
73
- "lint-fix": "pnpm lint --fix",
73
+ "lint-fix": "oxlint --quiet --type-aware --fix src stories && NODE_OPTIONS=--max-old-space-size=8192 ESLINT_TS=1 eslint --quiet --fix src stories .storybook && pnpm exec dprint fmt --config ../../dprint.jsonc .",
74
74
  "storybook": "storybook dev -p 6006",
75
75
  "build-storybook": "storybook build",
76
76
  "test": "vitest",
@@ -1,9 +1,11 @@
1
1
  <script
2
2
  setup
3
3
  lang="ts"
4
- generic="I = never"
4
+ generic="I = never, RA = unknown, RE = unknown"
5
5
  >
6
- import type { CommandBase } from "@effect-app/vue"
6
+ import type { CommandBase, Progress } from "@effect-app/vue/makeClient"
7
+ import * as Option from "effect-app/Option"
8
+ import type * as AsyncResult from "effect/unstable/reactivity/AsyncResult"
7
9
  import { computed } from "vue"
8
10
  import type { VBtn } from "vuetify/components"
9
11
 
@@ -14,38 +16,89 @@ const props = defineProps<
14
16
  & (
15
17
  | {
16
18
  input: NoInfer<I>
17
- command: CommandBase<I>
19
+ optionalInput?: undefined
20
+ command: CommandBase<I, any, RA, RE>
18
21
  empty?: boolean
19
22
  }
20
23
  | {
21
- command: CommandBase
24
+ optionalInput: Option.Option<NoInfer<I>>
22
25
  input?: undefined
26
+ command: CommandBase<I, any, RA, RE>
27
+ empty?: boolean
28
+ }
29
+ | {
30
+ command: CommandBase<any, any, RA, RE>
31
+ input?: undefined
32
+ optionalInput?: undefined
23
33
  empty?: boolean
24
34
  }
25
35
  )
26
36
  & {
27
37
  disabled?: ButtonProps["disabled"]
28
38
  title?: string // why isn't it part of VBtnProps??
39
+ mapProgress?: (result: AsyncResult.AsyncResult<RA, RE>) => Progress | undefined
29
40
  }
30
41
  & ButtonProps
31
42
  >()
32
43
 
33
- const isDisabled = computed(() => props.command.blocked || props.disabled)
44
+ const resolvedInput = computed<{ _tag: "ready"; value: I } | { _tag: "missing" } | { _tag: "void" }>(() => {
45
+ if ("optionalInput" in props && props.optionalInput !== undefined) {
46
+ return Option.isSome(props.optionalInput)
47
+ ? { _tag: "ready", value: props.optionalInput.value }
48
+ : { _tag: "missing" }
49
+ }
50
+ if ("input" in props && props.input !== undefined) {
51
+ return { _tag: "ready", value: props.input as I }
52
+ }
53
+ return { _tag: "void" }
54
+ })
34
55
 
35
- const handleClick = () => {
36
- // Block execution if button is disabled
37
- if (isDisabled.value) {
38
- return
56
+ const isDisabled = computed(() =>
57
+ props.command.blocked
58
+ || props.disabled
59
+ || resolvedInput.value._tag === "missing"
60
+ )
61
+
62
+ const resolvedProgress = computed(() => {
63
+ if (props.mapProgress) {
64
+ const result = props.command.result
65
+ return result !== undefined ? props.mapProgress(result) : undefined
39
66
  }
67
+ return props.command.progress
68
+ })
40
69
 
41
- const input = ("input" in props && props.input
42
- ? props.input
43
- : undefined) as unknown as I
44
- ;(props.command.handle as any)(input)
70
+ const progressText = computed(() => {
71
+ const p = resolvedProgress.value
72
+ if (p === undefined) return undefined
73
+ return typeof p === "string" ? p : p.text
74
+ })
75
+
76
+ const progressPercentage = computed(() => {
77
+ const p = resolvedProgress.value
78
+ return typeof p === "object" && p !== null ? p.percentage : undefined
79
+ })
80
+
81
+ const handleClick = () => {
82
+ if (isDisabled.value) return
83
+ const ri = resolvedInput.value
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ const handle = props.command.handle as any
86
+ if (ri._tag === "ready") handle(ri.value)
87
+ else if (ri._tag === "void") handle(undefined)
88
+ // _tag === "missing" can't reach here — guarded by isDisabled
45
89
  }
46
90
  </script>
47
91
  <script lang="ts">
48
- /** Command Button is an easy way to connect commands and have it execute on click, while keeping track of disabled/loading states automatically */
92
+ /**
93
+ * CommandButton connects a command to a button and tracks disabled / loading state.
94
+ *
95
+ * Input variants:
96
+ * - `input`: pass a validated value; button enabled when command + disabled allow it.
97
+ * - `optionalInput`: pass an `Option<I>`. `Some` → enabled, click fires with the value.
98
+ * `None` → disabled. Use this when the input is gated by a `computed` instead of
99
+ * a `v-if` on the button itself.
100
+ * - neither: command takes no input.
101
+ */
49
102
  export default {
50
103
  name: "CommandButton"
51
104
  }
@@ -55,27 +108,54 @@ export default {
55
108
  v-if="command.allowed && !empty"
56
109
  v-bind="$attrs"
57
110
  :loading="command.waiting"
111
+ :disabled="isDisabled"
58
112
  :aria-disabled="isDisabled"
59
113
  :title="title ?? command.action"
60
114
  :class="{ 'v-btn--disabled': isDisabled }"
61
115
  @click="handleClick"
62
116
  >
117
+ <template
118
+ v-if="progressText !== undefined"
119
+ #loader
120
+ >
121
+ <v-progress-circular
122
+ :indeterminate="progressPercentage === undefined"
123
+ :model-value="progressPercentage"
124
+ size="20"
125
+ width="2"
126
+ />
127
+ <span class="ml-2">{{ progressText }}</span>
128
+ </template>
63
129
  <slot
64
130
  :loading="command.waiting"
65
131
  :disabled="isDisabled"
66
132
  :label="command.label"
67
133
  :title="title ?? command.action"
68
134
  >
69
- <span>{{ command.label }}</span>
135
+ {{ command.label }}
70
136
  </slot>
71
137
  </v-btn>
72
138
  <v-btn
73
139
  v-else-if="command.allowed"
74
140
  v-bind="$attrs"
75
141
  :loading="command.waiting"
142
+ :disabled="isDisabled"
76
143
  :aria-disabled="isDisabled"
77
144
  :title="title ?? command.action"
78
145
  :class="{ 'v-btn--disabled': isDisabled }"
79
146
  @click="handleClick"
80
- />
147
+ >
148
+ <template
149
+ v-if="progressText !== undefined"
150
+ #loader
151
+ >
152
+ <v-progress-circular
153
+ :indeterminate="progressPercentage === undefined"
154
+ :model-value="progressPercentage"
155
+ size="20"
156
+ width="2"
157
+ />
158
+ <span class="ml-2">{{ progressText }}</span>
159
+ </template>
160
+ </v-btn>
81
161
  </template>
@@ -43,7 +43,7 @@ export type InputProps<From extends Record<PropertyKey, any>, TName extends Deep
43
43
  inputClass: string | undefined | null
44
44
  }
45
45
  field: OmegaFieldInternalApi<From, TName>
46
- /** be sure to use this state and not `field.state` as it is not reactive */
46
+ /** reactive field state, sourced from `field.state` (the Field slot's own `state` prop is a stale snapshot since @tanstack/vue-form 1.32) */
47
47
  state: OmegaFieldInternalApi<From, TName>["state"]
48
48
  }
49
49
 
@@ -3,24 +3,23 @@
3
3
  :is="form.Field"
4
4
  :name="name"
5
5
  >
6
- <template #default="{ field, state }">
6
+ <!-- `field.state` is reactive; the Field slot's `state` prop is a stale snapshot since @tanstack/vue-form 1.32 -->
7
+ <template #default="{ field }">
7
8
  <slot
8
9
  name="pre-array"
9
- v-bind="{ field, state }"
10
+ v-bind="{ field, state: field.state }"
10
11
  />
11
12
  <component
12
13
  :is="form.Field"
13
14
  v-for="(_, i) of items"
14
15
  :key="`${name}[${Number(i)}]`"
15
- :name="// eslint-disable-next-line
16
- `${name}[${Number(i)}]` as DeepKeys<From>
17
- "
16
+ :name="`${name}[${Number(i)}]` as DeepKeys<From>"
18
17
  >
19
- <template #default="{ field: subField, state: subState }">
18
+ <template #default="{ field: subField }">
20
19
  <slot
21
20
  v-bind="{
22
21
  subField,
23
- subState,
22
+ subState: subField.state,
24
23
  index: Number(i),
25
24
  field
26
25
  }"
@@ -29,7 +28,7 @@
29
28
  </component>
30
29
  <slot
31
30
  name="post-array"
32
- v-bind="{ field, state }"
31
+ v-bind="{ field, state: field.state }"
33
32
  />
34
33
  <!-- TODO: legacy slot, remove this slot -->
35
34
  <slot
@@ -46,7 +45,7 @@
46
45
  >
47
46
  import { type DeepKeys } from "@tanstack/vue-form"
48
47
  import { computed, onMounted, provide } from "vue"
49
- import { type OmegaArrayProps } from "./OmegaFormStuff"
48
+ import { type OmegaArrayProps } from "./types"
50
49
 
51
50
  const props = defineProps<OmegaArrayProps<From, To, Name>>()
52
51
 
@@ -20,9 +20,10 @@
20
20
  Name extends DeepKeys<From>"
21
21
  >
22
22
  import { type DeepKeys } from "@tanstack/vue-form"
23
- import { Order } from "effect-app"
23
+ import * as Order from "effect/Order"
24
24
  import { computed } from "vue"
25
- import { type FieldMeta, type FieldPath, type OmegaAutoGenMeta, type OmegaInputProps } from "./OmegaFormStuff"
25
+ import { type FieldMeta } from "./meta/types"
26
+ import { type FieldPath, type OmegaAutoGenMeta, type OmegaInputProps } from "./types"
26
27
 
27
28
  type NewMeta = OmegaAutoGenMeta<From, To, Name>
28
29
 
@@ -102,7 +102,7 @@
102
102
  import type { StandardSchemaV1Issue } from "@tanstack/vue-form"
103
103
  import { computed, getCurrentInstance } from "vue"
104
104
  import { useIntl } from "../../utils"
105
- import { type OmegaError } from "./OmegaFormStuff"
105
+ import { type OmegaError } from "./types"
106
106
 
107
107
  const instance = getCurrentInstance()
108
108
  const vuetified = instance?.appContext.components["VAlert"]
@@ -17,8 +17,8 @@
17
17
  import { type DeepKeys } from "@tanstack/vue-form"
18
18
  import { inject } from "vue"
19
19
  import type { MergedInputProps } from "./InputProps"
20
- import type { BaseProps, DefaultTypeProps, OmegaInputProps } from "./OmegaFormStuff"
21
20
  import OmegaInput from "./OmegaInput.vue"
21
+ import type { BaseProps, DefaultTypeProps, OmegaInputProps } from "./types"
22
22
  import { OmegaFormKey } from "./useOmegaForm"
23
23
 
24
24
  const form = inject(OmegaFormKey) as unknown as OmegaInputProps<