mlform 0.1.7 → 0.1.8

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 (218) hide show
  1. package/README.md +39 -12
  2. package/dist/builtins-DegwhFGA.js +3507 -0
  3. package/dist/builtins-ml-9qB2MOxt.js +51 -0
  4. package/dist/{design-system-CrrSGfFB.js → design-system-Dxx1Sh7r.js} +284 -268
  5. package/dist/errors-B3H1wRwj.js +8 -0
  6. package/dist/kit-CuRF6dhL.js +1847 -0
  7. package/dist/mlform/behaviors.mjs +32 -0
  8. package/dist/mlform/builtins-ml.mjs +3 -0
  9. package/dist/mlform/design-system.mjs +1 -1
  10. package/dist/mlform/kit.mjs +3 -3
  11. package/dist/mlform/presentation.mjs +2 -0
  12. package/dist/mlform/primitives.mjs +2 -2
  13. package/dist/mlform/runtime.mjs +5 -0
  14. package/dist/mlform/schema.mjs +102 -0
  15. package/dist/mlform/transport.mjs +2 -2
  16. package/dist/mlform.mjs +8 -4
  17. package/dist/presentation-CkQuYheR.js +200 -0
  18. package/dist/{primitives-BqjFDDhL.js → primitives-Duag8Lj0.js} +1367 -1312
  19. package/dist/runtime-DMjDVo0H.js +1824 -0
  20. package/dist/strings-CWwrrYzz.js +4 -0
  21. package/dist/{transport-A1RsnZhD.js → transport-CtVX8ZUT.js} +311 -336
  22. package/dist/types/src/behaviors/index.d.ts +3 -0
  23. package/dist/types/src/builtins-ml/index.d.ts +5 -0
  24. package/dist/types/src/design-system/runtime/fingerprint.d.ts +8 -0
  25. package/dist/types/src/design-system/runtime/host-observer.d.ts +1 -0
  26. package/dist/types/src/design-system/runtime/hydration-state.d.ts +13 -0
  27. package/dist/types/src/design-system/runtime/inherited-scheme.d.ts +5 -0
  28. package/dist/types/src/design-system/runtime/media.d.ts +19 -0
  29. package/dist/types/src/index.d.ts +10 -4
  30. package/dist/types/src/kit/accordion-root-styles.d.ts +1 -0
  31. package/dist/types/src/kit/accordion-root.d.ts +24 -0
  32. package/dist/types/src/kit/accordion.d.ts +2 -0
  33. package/dist/types/src/kit/constants.d.ts +29 -0
  34. package/dist/types/src/kit/defaults.d.ts +2 -2
  35. package/dist/types/src/kit/index.d.ts +6 -1
  36. package/dist/types/src/kit/layout-helpers.d.ts +29 -0
  37. package/dist/types/src/kit/layout-node-render.d.ts +18 -0
  38. package/dist/types/src/kit/layout-node-resolver.d.ts +3 -0
  39. package/dist/types/src/kit/layout-types.d.ts +124 -0
  40. package/dist/types/src/kit/layout-utils.d.ts +9 -0
  41. package/dist/types/src/kit/layout.d.ts +8 -0
  42. package/dist/types/src/kit/mount-types.d.ts +54 -0
  43. package/dist/types/src/kit/panel-nav.d.ts +9 -0
  44. package/dist/types/src/{questionnaire/primitives/components → kit}/step-indicator.d.ts +3 -3
  45. package/dist/types/src/kit/tabs-root-styles.d.ts +1 -0
  46. package/dist/types/src/kit/tabs-root.d.ts +24 -0
  47. package/dist/types/src/kit/tabs.d.ts +2 -0
  48. package/dist/types/src/kit/types.d.ts +4 -51
  49. package/dist/types/src/kit/view-layout-state.d.ts +14 -0
  50. package/dist/types/src/kit/view-navigation.d.ts +8 -0
  51. package/dist/types/src/kit/view-snapshot-cache.d.ts +14 -0
  52. package/dist/types/src/kit/view-snapshot.d.ts +15 -0
  53. package/dist/types/src/kit/view-types.d.ts +172 -0
  54. package/dist/types/src/kit/view.d.ts +8 -0
  55. package/dist/types/src/kit/wizard-constants.d.ts +19 -0
  56. package/dist/types/src/kit/wizard-root-styles.d.ts +1 -0
  57. package/dist/types/src/kit/wizard-root.d.ts +23 -0
  58. package/dist/types/src/kit/wizard.d.ts +2 -0
  59. package/dist/types/src/packs/default.d.ts +2 -0
  60. package/dist/types/src/packs/index.d.ts +3 -0
  61. package/dist/types/src/packs/ml.d.ts +2 -0
  62. package/dist/types/src/packs/shared.d.ts +25 -0
  63. package/dist/types/src/presentation/define-explanation-kind.d.ts +11 -0
  64. package/dist/types/src/presentation/define-field-kind.d.ts +18 -0
  65. package/dist/types/src/presentation/define-report-kind.d.ts +15 -0
  66. package/dist/types/src/presentation/index.d.ts +10 -0
  67. package/dist/types/src/presentation/register-kind.d.ts +6 -0
  68. package/dist/types/src/presentation/registry.d.ts +15 -0
  69. package/dist/types/src/presentation/types/explanation.d.ts +32 -0
  70. package/dist/types/src/presentation/types/field.d.ts +36 -0
  71. package/dist/types/src/presentation/types/report.d.ts +41 -0
  72. package/dist/types/src/primitives/base-explanation-element.d.ts +2 -1
  73. package/dist/types/src/primitives/base-field-element.d.ts +2 -1
  74. package/dist/types/src/primitives/base-report-element.d.ts +2 -1
  75. package/dist/types/src/primitives/components/explanation-panel.d.ts +4 -2
  76. package/dist/types/src/primitives/components/field-frame-feedback.d.ts +9 -0
  77. package/dist/types/src/primitives/components/field-frame-styles.d.ts +1 -0
  78. package/dist/types/src/primitives/components/field-frame.d.ts +5 -3
  79. package/dist/types/src/primitives/components/form-errors.d.ts +1 -1
  80. package/dist/types/src/primitives/components/form-root-presenters.d.ts +17 -0
  81. package/dist/types/src/primitives/components/form-root-state.d.ts +19 -0
  82. package/dist/types/src/primitives/components/form-root-styles.d.ts +1 -0
  83. package/dist/types/src/primitives/components/form-root-templates.d.ts +42 -0
  84. package/dist/types/src/primitives/components/form-root.d.ts +4 -2
  85. package/dist/types/src/primitives/components/presentation.d.ts +1 -1
  86. package/dist/types/src/primitives/components/report-frame.d.ts +4 -2
  87. package/dist/types/src/primitives/components/submit-button.d.ts +1 -1
  88. package/dist/types/src/primitives/constants.d.ts +1 -1
  89. package/dist/types/src/primitives/fields/series-field-helpers.d.ts +23 -0
  90. package/dist/types/src/primitives/fields/series-field-styles.d.ts +1 -0
  91. package/dist/types/src/primitives/mount-form.d.ts +1 -1
  92. package/dist/types/src/primitives/presentation.d.ts +8 -0
  93. package/dist/types/src/primitives/types.d.ts +4 -1
  94. package/dist/types/src/{engine → runtime}/builtins/index.d.ts +1 -3
  95. package/dist/types/src/{engine → runtime}/builtins/reports/classifier.d.ts +1 -1
  96. package/dist/types/src/{engine → runtime}/builtins/shared.d.ts +2 -0
  97. package/dist/types/src/runtime/declarative/presentation.d.ts +61 -0
  98. package/dist/types/src/runtime/fields/state-calculations.d.ts +25 -0
  99. package/dist/types/src/runtime/fields/state.d.ts +2 -0
  100. package/dist/types/src/runtime/form.d.ts +1 -0
  101. package/dist/types/src/runtime/index.d.ts +16 -0
  102. package/dist/types/src/runtime/registry/index.d.ts +5 -0
  103. package/dist/types/src/runtime/runtime-behaviors.d.ts +23 -0
  104. package/dist/types/src/runtime/runtime-controller.d.ts +34 -0
  105. package/dist/types/src/runtime/runtime-refresh.d.ts +14 -0
  106. package/dist/types/src/runtime/runtime-values.d.ts +19 -0
  107. package/dist/types/src/runtime/submission/create-submitter.d.ts +2 -0
  108. package/dist/types/src/runtime/submission/error-flow.d.ts +19 -0
  109. package/dist/types/src/runtime/submission/field-updates.d.ts +14 -0
  110. package/dist/types/src/runtime/submission/report-updates.d.ts +16 -0
  111. package/dist/types/src/runtime/submission/stream-progress.d.ts +4 -0
  112. package/dist/types/src/runtime/submission/submitter.d.ts +2 -0
  113. package/dist/types/src/runtime/submission/types.d.ts +60 -0
  114. package/dist/types/src/runtime/types/behavior.d.ts +32 -0
  115. package/dist/types/src/runtime/types/explanation.d.ts +22 -0
  116. package/dist/types/src/runtime/types/field.d.ts +24 -0
  117. package/dist/types/src/{engine → runtime}/types/form.d.ts +8 -11
  118. package/dist/types/src/runtime/types/index.d.ts +9 -0
  119. package/dist/types/src/runtime/types/registry.d.ts +6 -0
  120. package/dist/types/src/runtime/types/report.d.ts +23 -0
  121. package/dist/types/src/{engine → runtime}/utils.d.ts +2 -2
  122. package/dist/types/src/{engine/validation/field.d.ts → runtime/validation/field-state.d.ts} +3 -19
  123. package/dist/types/src/runtime/validation/field-validator.d.ts +18 -0
  124. package/dist/types/src/runtime/validation/field.d.ts +2 -0
  125. package/dist/types/src/schema/index.d.ts +7 -0
  126. package/dist/types/src/schema/normalize.d.ts +2 -0
  127. package/dist/types/src/schema/registry.d.ts +9 -0
  128. package/dist/types/src/schema/types/explanation.d.ts +43 -0
  129. package/dist/types/src/{engine → schema}/types/field.d.ts +3 -45
  130. package/dist/types/src/schema/types/form.d.ts +13 -0
  131. package/dist/types/src/schema/types/report.d.ts +43 -0
  132. package/dist/types/src/shared/index.d.ts +2 -0
  133. package/dist/types/src/shared/object.d.ts +1 -0
  134. package/dist/types/src/shared/strings.d.ts +1 -0
  135. package/dist/types/src/transport/composition/fanout-helpers.d.ts +2 -0
  136. package/dist/types/src/transport/composition/fanout.d.ts +1 -2
  137. package/dist/types/src/transport/composition/index.d.ts +1 -0
  138. package/dist/types/src/transport/composition/quorum-fanout.d.ts +2 -0
  139. package/dist/types/src/transport/internal-core.d.ts +21 -0
  140. package/dist/types/src/transport/internal-errors.d.ts +21 -0
  141. package/dist/types/src/transport/internal-request.d.ts +21 -0
  142. package/dist/types/src/transport/internal-routing.d.ts +25 -0
  143. package/dist/types/src/transport/internal-sse.d.ts +14 -0
  144. package/dist/types/src/transport/internal-stream.d.ts +13 -0
  145. package/dist/types/src/transport/internal.d.ts +6 -110
  146. package/dist/types/src/transport/types/options-http.d.ts +85 -0
  147. package/dist/types/src/transport/types/options-middleware.d.ts +96 -0
  148. package/dist/types/src/transport/types/options-routing.d.ts +82 -0
  149. package/dist/types/src/transport/types/options.d.ts +3 -258
  150. package/package.json +20 -8
  151. package/dist/engine-CEy1IX7y.js +0 -5367
  152. package/dist/kit-DrrbtxI2.js +0 -76
  153. package/dist/mlform/engine.mjs +0 -3
  154. package/dist/mlform/questionnaire.mjs +0 -640
  155. package/dist/types/src/engine/index.d.ts +0 -11
  156. package/dist/types/src/engine/registry/index.d.ts +0 -26
  157. package/dist/types/src/engine/submission/submitter.d.ts +0 -40
  158. package/dist/types/src/engine/types/explanation.d.ts +0 -109
  159. package/dist/types/src/engine/types/index.d.ts +0 -9
  160. package/dist/types/src/engine/types/report.d.ts +0 -87
  161. package/dist/types/src/questionnaire/constants.d.ts +0 -31
  162. package/dist/types/src/questionnaire/defaults.d.ts +0 -8
  163. package/dist/types/src/questionnaire/engine/controller.d.ts +0 -12
  164. package/dist/types/src/questionnaire/engine/schema.d.ts +0 -9
  165. package/dist/types/src/questionnaire/errors.d.ts +0 -3
  166. package/dist/types/src/questionnaire/index.d.ts +0 -6
  167. package/dist/types/src/questionnaire/mount.d.ts +0 -3
  168. package/dist/types/src/questionnaire/primitives/components/questionnaire-root.d.ts +0 -23
  169. package/dist/types/src/questionnaire/primitives/register.d.ts +0 -0
  170. package/dist/types/src/questionnaire/types.d.ts +0 -69
  171. package/dist/types/src/{engine/declarative → presentation/types}/presentation.d.ts +0 -0
  172. package/dist/types/src/{engine → runtime}/builtins/fields/boolean.d.ts +0 -0
  173. package/dist/types/src/{engine → runtime}/builtins/fields/category.d.ts +0 -0
  174. package/dist/types/src/{engine → runtime}/builtins/fields/date.d.ts +0 -0
  175. package/dist/types/src/{engine → runtime}/builtins/fields/long-text.d.ts +0 -0
  176. package/dist/types/src/{engine → runtime}/builtins/fields/mapped-category.d.ts +0 -0
  177. package/dist/types/src/{engine → runtime}/builtins/fields/multi-choice.d.ts +0 -0
  178. package/dist/types/src/{engine → runtime}/builtins/fields/number.d.ts +0 -0
  179. package/dist/types/src/{engine → runtime}/builtins/fields/rating.d.ts +0 -0
  180. package/dist/types/src/{engine → runtime}/builtins/fields/series.d.ts +0 -0
  181. package/dist/types/src/{engine → runtime}/builtins/fields/single-choice.d.ts +0 -0
  182. package/dist/types/src/{engine → runtime}/builtins/fields/text.d.ts +0 -0
  183. package/dist/types/src/{engine → runtime}/builtins/reports/regressor.d.ts +0 -0
  184. package/dist/types/src/{engine → runtime}/comparison.d.ts +0 -0
  185. package/dist/types/src/{engine → runtime}/constants.d.ts +0 -0
  186. package/dist/types/src/{engine/form.d.ts → runtime/create-runtime.d.ts} +0 -0
  187. package/dist/types/src/{engine → runtime}/declarative/explanation.d.ts +0 -0
  188. package/dist/types/src/{engine → runtime}/declarative/field.d.ts +0 -0
  189. package/dist/types/src/{engine → runtime}/declarative/report.d.ts +0 -0
  190. package/dist/types/src/{engine → runtime}/equality.d.ts +0 -0
  191. package/dist/types/src/{engine → runtime}/errors.d.ts +0 -0
  192. package/dist/types/src/{engine → runtime}/explanations/controller.d.ts +0 -0
  193. package/dist/types/src/{engine → runtime}/explanations/index.d.ts +0 -0
  194. package/dist/types/src/{engine → runtime}/fields/controller.d.ts +0 -0
  195. package/dist/types/src/{engine → runtime}/fields/index.d.ts +0 -0
  196. package/dist/types/src/{engine → runtime}/paths.d.ts +0 -0
  197. package/dist/types/src/{engine → runtime}/reports/controller.d.ts +0 -0
  198. package/dist/types/src/{engine → runtime}/reports/index.d.ts +0 -0
  199. package/dist/types/src/{engine → runtime}/schema/index.d.ts +0 -0
  200. package/dist/types/src/{engine → runtime}/state/engine.d.ts +0 -0
  201. package/dist/types/src/{engine → runtime}/state/index.d.ts +0 -0
  202. package/dist/types/src/{engine → runtime}/state/snapshots.d.ts +0 -0
  203. package/dist/types/src/{engine → runtime}/state/store.d.ts +0 -0
  204. package/dist/types/src/{engine → runtime}/submission/abort.d.ts +0 -0
  205. package/dist/types/src/{engine → runtime}/submission/explanations.d.ts +0 -0
  206. package/dist/types/src/{engine → runtime}/submission/index.d.ts +0 -0
  207. package/dist/types/src/{engine → runtime}/submission/lifecycle.d.ts +0 -0
  208. package/dist/types/src/{engine → runtime}/submission/pipeline.d.ts +0 -0
  209. package/dist/types/src/{engine → runtime}/submission/reports.d.ts +0 -0
  210. package/dist/types/src/{engine → runtime}/submission/request.d.ts +0 -0
  211. package/dist/types/src/{engine → runtime}/submission/result.d.ts +0 -0
  212. package/dist/types/src/{engine → runtime}/types/pipeline.d.ts +0 -0
  213. package/dist/types/src/{engine → runtime}/types/transport.d.ts +0 -0
  214. package/dist/types/src/{engine → runtime}/validation/conditions.d.ts +0 -0
  215. package/dist/types/src/{engine → runtime}/validation/form.d.ts +0 -0
  216. package/dist/types/src/{engine → runtime}/validation/index.d.ts +0 -0
  217. package/dist/types/src/{engine → runtime}/values.d.ts +0 -0
  218. package/dist/types/src/{engine → schema}/types/registry.d.ts +1 -1
@@ -1,76 +0,0 @@
1
- import { f as e, h as t, r as n } from "./design-system-CrrSGfFB.js";
2
- import { D as r, l as i, t as a } from "./engine-CEy1IX7y.js";
3
- import { f as o, r as s, t as c } from "./primitives-BqjFDDhL.js";
4
- //#region src/kit/defaults.ts
5
- var l = { ...o }, u = {
6
- mode: "auto",
7
- theme: "neutral",
8
- recipe: "default"
9
- }, d = (e) => {
10
- if (!e) return i();
11
- let t = r();
12
- for (let n of e.listFields()) t.registerField(n);
13
- for (let n of e.listReports()) t.registerReport(n);
14
- for (let n of e.listExplanations()) t.registerExplanation(n);
15
- return t;
16
- }, f = (e) => e?.clone() ?? s(), p = (e) => e?.clone() ?? t.clone(), m = (e = {}) => ({
17
- ...l,
18
- ...e
19
- }), h = (t = {}) => e(u, t), g = { invalidDesignSystemSnapshot: "replaceDesignSystem requires an explicit mode, theme, and recipe." }, _ = Symbol("mlform.kit.mounted"), v = (e) => {
20
- if (!e.mode || !e.theme || !e.recipe) throw TypeError(g.invalidDesignSystemSnapshot);
21
- }, y = (e, t) => {
22
- let r = e;
23
- r[_]?.unmount();
24
- let i = d(t.registry), o = f(t.primitiveRegistry), s = p(t.designSystemRegistry), l = m(t.labels), u = h(t.designSystem), g = a({
25
- schema: t.schema,
26
- registry: i,
27
- transport: t.transport,
28
- initialValues: t.initialValues,
29
- validators: t.validators,
30
- hooks: t.hooks,
31
- hookFailurePolicy: t.hookFailurePolicy,
32
- inactiveFieldPolicy: t.inactiveFieldPolicy,
33
- listenerErrorPolicy: t.listenerErrorPolicy,
34
- onListenerError: t.onListenerError
35
- }), y = c(e, g, {
36
- registry: o,
37
- layout: t.layout,
38
- containerStrategy: t.containerStrategy,
39
- formLabel: l.form,
40
- reportsLabel: l.reports,
41
- submitLabel: l.submit,
42
- validatingLabel: l.validating,
43
- submittingLabel: l.submitting,
44
- reportPane: t.reportPane,
45
- text: t.primitiveText,
46
- reportTransport: t.reportTransport
47
- }), b = n(y.host, {
48
- config: u,
49
- registry: s,
50
- onChange: t.onDesignSystemChange
51
- }), x = !1, S = Object.freeze({
52
- form: g,
53
- host: y.host,
54
- engineRegistry: i,
55
- primitiveRegistry: o,
56
- designSystemRegistry: s,
57
- designSystem: b,
58
- updateDesignSystem(e) {
59
- b.update(e);
60
- },
61
- replaceDesignSystem(e) {
62
- v(e), b.replace(e);
63
- },
64
- resetDesignSystem() {
65
- b.reset();
66
- },
67
- unmount() {
68
- x || (x = !0, r[_] === S && delete r[_], g.abortSubmit("unmount"), b.disconnect(), y.unmount());
69
- }
70
- });
71
- return r[_] = S, S;
72
- }, b = (e) => {
73
- e.unmount();
74
- };
75
- //#endregion
76
- export { l as i, b as n, u as r, y as t };
@@ -1,3 +0,0 @@
1
- import { K as e, q as t } from "../transport-A1RsnZhD.js";
2
- import { A as n, C as r, D as i, E as a, F as o, I as s, L as c, M as l, N as u, O as d, P as f, R as p, T as m, _ as h, a as g, b as _, c as v, d as y, f as b, g as x, h as S, i as C, j as w, k as T, l as E, m as D, n as O, o as k, p as A, r as j, s as M, t as N, u as P, v as F, w as I, x as L, y as R, z } from "../engine-CEy1IX7y.js";
3
- export { f as EngineError, a as EngineRegistry, o as RegistryError, s as ReportPayloadError, c as SubmissionAbortedError, p as SubmitError, e as TransportError, z as ValidationError, m as booleanFieldDefinition, I as categoryFieldDefinition, y as classifierReportDefinition, E as createBuiltinRegistry, C as createExplanationController, N as createForm, i as createRegistry, R as dateFieldDefinition, g as defaultEquality, d as defineExplanationDefinition, u as defineExplanationKind, T as defineFieldDefinition, l as defineFieldKind, n as defineReportDefinition, w as defineReportKind, j as executeExplanations, O as executeFormPipeline, _ as identity, L as isPromiseLike, F as longTextFieldDefinition, r as mappedCategoryFieldDefinition, h as multiChoiceFieldDefinition, x as numberFieldDefinition, S as ratingFieldDefinition, P as regressorReportDefinition, A as seriesFieldDefinition, k as shallowArrayEquality, M as shallowEquality, v as shallowObjectEquality, b as singleChoiceFieldDefinition, D as textFieldDefinition, t as transportErrorCodes };
@@ -1,640 +0,0 @@
1
- import { f as e, h as t, r as n } from "../design-system-CrrSGfFB.js";
2
- import { D as r, L as i, S as a, l as o, t as s } from "../engine-CEy1IX7y.js";
3
- import { _ as c, b as l, d as u, g as d, h as f, m as p, o as m, p as h, r as g, u as _, v, x as y, y as b } from "../primitives-BqjFDDhL.js";
4
- //#region src/questionnaire/constants.ts
5
- var x = {
6
- questionnaire: "mlf-questionnaire",
7
- stepIndicator: "mlf-step-indicator"
8
- }, S = {
9
- stepChange: "mlf-step-change",
10
- stepValidationError: "mlf-step-validation-error",
11
- submitStart: "mlf-q-submit-start",
12
- submitAbort: "mlf-q-submit-abort",
13
- submitSuccess: "mlf-q-submit-success",
14
- submitError: "mlf-q-submit-error"
15
- }, C = {
16
- prev: "Previous",
17
- next: "Next",
18
- submit: "Submit",
19
- validating: "Validating...",
20
- submitting: "Submitting..."
21
- }, w = Object.freeze({
22
- stepLabel: (e, t) => `Step ${e} of ${t}`,
23
- prevLabel: "Previous",
24
- nextLabel: "Next",
25
- submitLabel: "Submit",
26
- validatingLabel: "Validating...",
27
- submittingLabel: "Submitting..."
28
- }), T = (e) => e ? Object.freeze({
29
- ...w,
30
- ...e
31
- }) : w, E = class extends v {
32
- static styles = y`
33
- :host {
34
- display: block;
35
- min-width: 0;
36
- }
37
-
38
- *,
39
- *::before,
40
- *::after {
41
- box-sizing: border-box;
42
- }
43
-
44
- .indicator {
45
- display: grid;
46
- gap: 0.5rem;
47
- }
48
-
49
- .header {
50
- display: flex;
51
- align-items: center;
52
- justify-content: space-between;
53
- gap: 1rem;
54
- }
55
-
56
- .step-label {
57
- font-size: var(--mlf-font-size-sm, 0.84rem);
58
- font-weight: 600;
59
- letter-spacing: 0.05em;
60
- text-transform: uppercase;
61
- color: var(--mlf-color-text-muted, #475569);
62
- }
63
-
64
- .step-fraction {
65
- font-size: var(--mlf-font-size-sm, 0.84rem);
66
- font-weight: 700;
67
- color: var(--mlf-color-accent, #1e40af);
68
- }
69
-
70
- .track {
71
- height: 4px;
72
- border-radius: 999px;
73
- background: var(--mlf-color-border, #e2e8f0);
74
- overflow: hidden;
75
- }
76
-
77
- .fill {
78
- height: 100%;
79
- border-radius: 999px;
80
- background: var(--mlf-color-accent, #1e40af);
81
- transition: width 0.3s ease;
82
- }
83
-
84
- .dots {
85
- display: flex;
86
- gap: 0.4rem;
87
- flex-wrap: wrap;
88
- }
89
-
90
- .dot {
91
- width: 8px;
92
- height: 8px;
93
- border-radius: 50%;
94
- background: var(--mlf-color-border, #e2e8f0);
95
- transition:
96
- background-color 0.2s ease,
97
- transform 0.2s ease;
98
- }
99
-
100
- .dot.active {
101
- background: var(--mlf-color-accent, #1e40af);
102
- transform: scale(1.25);
103
- }
104
-
105
- .dot.done {
106
- background: color-mix(in srgb, var(--mlf-color-accent, #1e40af) 50%, transparent);
107
- }
108
- `;
109
- #e = 1;
110
- get current() {
111
- return this.#e;
112
- }
113
- set current(e) {
114
- this.#e = e;
115
- }
116
- #t = 1;
117
- get total() {
118
- return this.#t;
119
- }
120
- set total(e) {
121
- this.#t = e;
122
- }
123
- #n = "Step";
124
- get label() {
125
- return this.#n;
126
- }
127
- set label(e) {
128
- this.#n = e;
129
- }
130
- render() {
131
- let e = this.total > 0 ? Math.round(this.current / this.total * 100) : 0;
132
- return l`
133
- <div
134
- class="indicator"
135
- role="status"
136
- aria-label=${`${this.label} ${this.current} of ${this.total}`}
137
- >
138
- <div class="header">
139
- <span class="step-label">${this.label}</span>
140
- <span class="step-fraction">${this.current} / ${this.total}</span>
141
- </div>
142
- <div class="track" aria-hidden="true">
143
- <div class="fill" style="width: ${e}%"></div>
144
- </div>
145
- <div class="dots" aria-hidden="true">
146
- ${Array.from({ length: this.total }, (e, t) => l`<div class=${t + 1 < this.current ? "dot done" : t + 1 === this.current ? "dot active" : "dot"}></div>`)}
147
- </div>
148
- </div>
149
- `;
150
- }
151
- };
152
- u([d({ type: Number })], E.prototype, "current", null), u([d({ type: Number })], E.prototype, "total", null), u([d({ type: String })], E.prototype, "label", null), E = u([c(x.stepIndicator)], E);
153
- //#endregion
154
- //#region src/questionnaire/primitives/components/questionnaire-root.ts
155
- var D = class extends v {
156
- static styles = y`
157
- :host {
158
- display: block;
159
- flex: 1 1 auto;
160
- align-self: stretch;
161
- inline-size: 100%;
162
- block-size: 100%;
163
- color: var(--mlf-shell-color, var(--mlf-color-text, #0f172a));
164
- background: var(--mlf-shell-bg, var(--mlf-color-bg, #f5f7fa));
165
- font-family: var(--mlf-font-family-body);
166
- min-width: 0;
167
- min-height: 0;
168
- }
169
-
170
- *,
171
- *::before,
172
- *::after {
173
- box-sizing: border-box;
174
- }
175
-
176
- .root {
177
- display: grid;
178
- grid-template-rows: 1fr;
179
- gap: var(--mlf-shell-gap, 1rem);
180
- inline-size: 100%;
181
- block-size: 100%;
182
- min-width: 0;
183
- min-height: 0;
184
- }
185
-
186
- .panel {
187
- display: flex;
188
- flex-direction: column;
189
- min-width: 0;
190
- min-height: 0;
191
- overflow: hidden;
192
- border-radius: var(--mlf-panel-radius, 12px);
193
- border: var(--mlf-border-width, 1px) solid
194
- var(--mlf-panel-border, var(--mlf-color-border, #e2e8f0));
195
- background: var(--mlf-panel-bg, var(--mlf-color-surface, #ffffff));
196
- box-shadow:
197
- 0 2px 4px var(--mlf-panel-shadow-soft, rgba(0, 0, 0, 0.04)),
198
- 0 8px 16px var(--mlf-panel-shadow, rgba(0, 0, 0, 0.04));
199
- }
200
-
201
- /* Fixed header — never scrolls */
202
- .pane-header {
203
- flex: 0 0 auto;
204
- display: grid;
205
- gap: 0.85rem;
206
- padding: 1rem 1.5rem;
207
- border-bottom: var(--mlf-border-width, 1px) solid
208
- var(--mlf-panel-border, var(--mlf-color-border, #e2e8f0));
209
- background: var(--mlf-panel-header-bg, rgba(255, 255, 255, 0.6));
210
- backdrop-filter: blur(var(--mlf-header-blur, 3px));
211
- -webkit-backdrop-filter: blur(var(--mlf-header-blur, 3px));
212
- }
213
-
214
- .step-title {
215
- margin: 0;
216
- font-size: 1.1rem;
217
- font-weight: 700;
218
- color: var(--mlf-pane-title-color, var(--mlf-color-text, #0f172a));
219
- line-height: 1.3;
220
- }
221
-
222
- .step-description {
223
- margin: 0;
224
- font-size: var(--mlf-font-size-sm, 0.84rem);
225
- color: var(--mlf-color-text-muted, #475569);
226
- line-height: 1.5;
227
- }
228
-
229
- /* Scrollable middle — grows to fill available space */
230
- .pane-body {
231
- flex: 1 1 auto;
232
- display: grid;
233
- align-content: start;
234
- gap: 1rem;
235
- padding: 1rem 1rem 1.25rem;
236
- overflow-y: auto;
237
- overflow-x: hidden;
238
- overscroll-behavior: contain;
239
- scrollbar-color: color-mix(in srgb, var(--mlf-color-text-muted, #475569) 55%, transparent)
240
- transparent;
241
- }
242
-
243
- .pane-body::-webkit-scrollbar {
244
- width: 8px;
245
- }
246
-
247
- .pane-body::-webkit-scrollbar-thumb {
248
- background: color-mix(in srgb, var(--mlf-color-text-muted, #475569) 50%, transparent);
249
- border-radius: 999px;
250
- }
251
-
252
- .collection {
253
- display: grid;
254
- gap: var(--mlf-section-gap, 1rem);
255
- }
256
-
257
- /* Fixed footer — never scrolls */
258
- .actions {
259
- flex: 0 0 var(--mlf-q-footer-height, 4.5rem);
260
- display: flex;
261
- align-items: center;
262
- justify-content: space-between;
263
- gap: 1rem;
264
- padding: 0.75rem 1.5rem;
265
- border-top: var(--mlf-border-width, 1px) solid
266
- var(--mlf-panel-border, var(--mlf-color-border, #e2e8f0));
267
- background: var(--mlf-panel-footer-bg, var(--mlf-color-bg-light, #f5f7fa));
268
- }
269
-
270
- .btn {
271
- display: inline-flex;
272
- align-items: center;
273
- justify-content: center;
274
- gap: 0.5rem;
275
- min-height: 2.5rem;
276
- padding: 0.5rem 1.25rem;
277
- border: var(--mlf-border-width, 1px) solid transparent;
278
- border-radius: var(--mlf-input-radius, 12px);
279
- font: inherit;
280
- font-size: 0.95rem;
281
- font-weight: 600;
282
- cursor: pointer;
283
- transition:
284
- background-color 0.2s ease,
285
- border-color 0.2s ease,
286
- opacity 0.2s ease;
287
- }
288
-
289
- .btn:disabled {
290
- cursor: not-allowed;
291
- opacity: 0.55;
292
- }
293
-
294
- .btn-prev {
295
- background: transparent;
296
- border-color: var(--mlf-input-border, var(--mlf-color-border, #e2e8f0));
297
- color: var(--mlf-color-text-muted, #475569);
298
- }
299
-
300
- .btn-prev:hover:not(:disabled) {
301
- background: color-mix(in srgb, var(--mlf-color-text-muted, #475569) 8%, transparent);
302
- }
303
-
304
- .btn-next,
305
- .btn-submit {
306
- background: var(--mlf-submit-bg, var(--mlf-color-accent, #1e40af));
307
- border-color: var(--mlf-submit-bg, var(--mlf-color-accent, #1e40af));
308
- color: var(--mlf-submit-color, #ffffff);
309
- }
310
-
311
- .btn-next:hover:not(:disabled),
312
- .btn-submit:hover:not(:disabled) {
313
- opacity: 0.88;
314
- }
315
-
316
- .btn-next:focus-visible,
317
- .btn-submit:focus-visible,
318
- .btn-prev:focus-visible {
319
- outline: none;
320
- box-shadow: 0 0 0 3px var(--mlf-input-shadow-focus, rgba(29, 78, 216, 0.18));
321
- }
322
-
323
- .spacer {
324
- flex: 1 1 auto;
325
- }
326
- `;
327
- #e;
328
- get controller() {
329
- return this.#e;
330
- }
331
- set controller(e) {
332
- this.#e = e;
333
- }
334
- #t;
335
- get registry() {
336
- return this.#t;
337
- }
338
- set registry(e) {
339
- this.#t = e;
340
- }
341
- #n = w;
342
- get text() {
343
- return this.#n;
344
- }
345
- set text(e) {
346
- this.#n = e;
347
- }
348
- #r = h;
349
- get primitiveText() {
350
- return this.#r;
351
- }
352
- set primitiveText(e) {
353
- this.#r = e;
354
- }
355
- #i = null;
356
- get qState() {
357
- return this.#i;
358
- }
359
- set qState(e) {
360
- this.#i = e;
361
- }
362
- #a = "idle";
363
- get formStatus() {
364
- return this.#a;
365
- }
366
- set formStatus(e) {
367
- this.#a = e;
368
- }
369
- #o = new _(this, (e) => {
370
- this.qState = e?.state ?? null, e && this.#f(e.form);
371
- });
372
- #s = null;
373
- #c;
374
- willUpdate(e) {
375
- e.has("controller") && this.#o.bind(this.controller);
376
- }
377
- disconnectedCallback() {
378
- this.#s?.(), this.#s = null, this.#c = void 0, super.disconnectedCallback();
379
- }
380
- render() {
381
- let e = this.controller, t = this.qState;
382
- if (!e || !t) return l``;
383
- let { currentStep: n, stepProgress: r, canGoPrev: i, isLastStep: a } = t, o = e.form, s = this.text, c = this.formStatus, u = c === "submitting" || c === "validating", d = n.fieldIds.map((e) => o.getField(e)).filter((e) => e !== void 0 && e.state.visible), f = a ? c === "validating" ? s.validatingLabel : c === "submitting" ? s.submittingLabel : s.submitLabel : s.nextLabel;
384
- return l`
385
- <div class="root">
386
- <section class="panel" part="questionnaire-panel">
387
- <header class="pane-header">
388
- <mlf-step-indicator
389
- .current=${r.current}
390
- .total=${r.total}
391
- .label=${s.stepLabel(r.current, r.total).split(" ")[0] ?? "Step"}
392
- ></mlf-step-indicator>
393
-
394
- <h1 class="step-title">${n.title}</h1>
395
-
396
- ${n.description ? l`<p class="step-description">${n.description}</p>` : b}
397
- </header>
398
-
399
- <div class="pane-body">
400
- <div class="collection" part="field-list">
401
- ${m(d, (e) => e.id, (e) => l`
402
- <mlf-field-frame
403
- .controller=${e}
404
- .registry=${this.registry}
405
- .text=${this.primitiveText}
406
- ></mlf-field-frame>
407
- `)}
408
- </div>
409
- </div>
410
-
411
- <div class="actions" part="actions">
412
- <button
413
- type="button"
414
- class="btn btn-prev"
415
- ?disabled=${!i || u}
416
- @click=${this.#u}
417
- >
418
- ${s.prevLabel}
419
- </button>
420
-
421
- <span class="spacer"></span>
422
-
423
- <button
424
- type="button"
425
- class=${a ? "btn btn-submit" : "btn btn-next"}
426
- ?disabled=${u}
427
- @click=${a ? this.#d : this.#l}
428
- >
429
- ${f}
430
- </button>
431
- </div>
432
- </section>
433
- </div>
434
- `;
435
- }
436
- #l = async () => {
437
- let e = this.controller;
438
- e && (await e.next() ? this.dispatchEvent(new CustomEvent(S.stepChange, {
439
- detail: { state: e.state },
440
- bubbles: !0,
441
- composed: !0
442
- })) : this.dispatchEvent(new CustomEvent(S.stepValidationError, {
443
- detail: { state: e.state },
444
- bubbles: !0,
445
- composed: !0
446
- })));
447
- };
448
- #u = () => {
449
- let e = this.controller;
450
- e && (e.prev(), this.dispatchEvent(new CustomEvent(S.stepChange, {
451
- detail: { state: e.state },
452
- bubbles: !0,
453
- composed: !0
454
- })));
455
- };
456
- #d = async () => {
457
- let e = this.controller;
458
- if (e) {
459
- if (!await e.next()) {
460
- this.dispatchEvent(new CustomEvent(S.stepValidationError, {
461
- detail: { state: e.state },
462
- bubbles: !0,
463
- composed: !0
464
- }));
465
- return;
466
- }
467
- this.dispatchEvent(new CustomEvent(S.submitStart, {
468
- detail: {
469
- form: e.form,
470
- state: e.form.state
471
- },
472
- bubbles: !0,
473
- composed: !0
474
- }));
475
- try {
476
- let t = await e.form.submit();
477
- this.dispatchEvent(new CustomEvent(S.submitSuccess, {
478
- detail: {
479
- form: e.form,
480
- state: e.form.state,
481
- result: t
482
- },
483
- bubbles: !0,
484
- composed: !0
485
- }));
486
- } catch (t) {
487
- this.dispatchEvent(new CustomEvent(t instanceof i ? S.submitAbort : S.submitError, {
488
- detail: {
489
- form: e.form,
490
- state: e.form.state,
491
- error: t
492
- },
493
- bubbles: !0,
494
- composed: !0
495
- }));
496
- }
497
- }
498
- };
499
- #f(e) {
500
- this.#c !== e && (this.#s?.(), this.#s = null, this.#c = e, this.formStatus = e.state.status, this.#s = e.subscribeSelector(() => e.state.status, (e) => {
501
- this.formStatus = e;
502
- }));
503
- }
504
- };
505
- u([d({ attribute: !1 })], D.prototype, "controller", null), u([d({ attribute: !1 })], D.prototype, "registry", null), u([d({ attribute: !1 })], D.prototype, "text", null), u([d({ attribute: !1 })], D.prototype, "primitiveText", null), u([f()], D.prototype, "qState", null), u([f()], D.prototype, "formStatus", null), D = u([c(x.questionnaire)], D);
506
- //#endregion
507
- //#region src/questionnaire/defaults.ts
508
- var O = {
509
- mode: "auto",
510
- theme: "neutral",
511
- recipe: "default"
512
- }, k = (e) => {
513
- if (!e) return o();
514
- let t = r();
515
- for (let n of e.listFields()) t.registerField(n);
516
- for (let n of e.listReports()) t.registerReport(n);
517
- for (let n of e.listExplanations()) t.registerExplanation(n);
518
- return t;
519
- }, A = (e) => e?.clone() ?? g(), j = (e) => e?.clone() ?? t.clone(), M = (t) => e(O, t ?? {}), N = class {
520
- #e;
521
- #t;
522
- #n = 0;
523
- #r = /* @__PURE__ */ new Set();
524
- constructor(e, t) {
525
- this.#e = e, this.#t = t;
526
- }
527
- get steps() {
528
- return this.#t;
529
- }
530
- get form() {
531
- return this.#e;
532
- }
533
- get state() {
534
- return this.#a();
535
- }
536
- async next() {
537
- let e = this.#t[this.#n];
538
- if (!e) return !1;
539
- let t = e.fieldIds.map((e) => this.#e.getField(e)).filter((e) => e !== void 0 && e.state.visible);
540
- return (await Promise.all(t.map((e) => e.validate()))).some((e) => e.errors.length > 0) ? !1 : (this.#n < this.#t.length - 1 && (this.#n++, this.#i()), !0);
541
- }
542
- prev() {
543
- this.#n > 0 && (this.#n--, this.#i());
544
- }
545
- subscribe(e) {
546
- return this.#r.add(e), () => {
547
- this.#r.delete(e);
548
- };
549
- }
550
- #i() {
551
- let e = this.#a();
552
- for (let t of this.#r) t(e);
553
- }
554
- #a() {
555
- let e = this.#t.length, t = this.#n, n = this.#t[t];
556
- if (!n) throw Error("QuestionnaireController: invalid step index.");
557
- return {
558
- stepIndex: t,
559
- canGoNext: t < e - 1,
560
- canGoPrev: t > 0,
561
- isLastStep: t === e - 1,
562
- stepProgress: {
563
- current: t + 1,
564
- total: e
565
- },
566
- currentStep: n
567
- };
568
- }
569
- }, P = class extends Error {
570
- constructor(e) {
571
- super(e), this.name = "QuestionnaireError";
572
- }
573
- }, F = (e, t, n, r) => {
574
- let i = a(e ?? t) || `step-${n + 1}`;
575
- if (e) {
576
- if (r.has(i)) throw new P(`Duplicate step id "${i}".`);
577
- return r.add(i), i;
578
- }
579
- let o = i, s = 2;
580
- for (; r.has(o);) o = `${i}-${s}`, s++;
581
- return r.add(o), o;
582
- }, I = (e, t) => {
583
- if (!e.steps || e.steps.length === 0) throw new P("Questionnaire must have at least one step.");
584
- let n = [], r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Map();
585
- return {
586
- steps: e.steps.map((e, t) => {
587
- let o = F(e.id, e.title, t, r);
588
- if (!e.fields || e.fields.length === 0) throw new P(`Step "${e.title}" must have at least one field.`);
589
- let s = e.fields.map((e) => {
590
- let t = `${o}-${a(e.label) || "field"}`, r = i.get(t) ?? 0;
591
- i.set(t, r + 1);
592
- let s = r === 0 ? t : `${t}-${r + 1}`;
593
- return n.push({
594
- ...e,
595
- id: s
596
- }), s;
597
- });
598
- return {
599
- id: o,
600
- title: e.title,
601
- description: e.description,
602
- fieldIds: s
603
- };
604
- }),
605
- formSchema: { fields: n }
606
- };
607
- }, L = (e) => e, R = Symbol("mlform.questionnaire.mounted"), z = (e, t) => {
608
- let r = e;
609
- r[R]?.unmount();
610
- let i = k(t.registry), a = A(t.primitiveRegistry), o = j(t.designSystemRegistry), c = M(t.designSystem), { steps: l, formSchema: u } = I(t.schema, i), d = s({
611
- schema: u,
612
- registry: i,
613
- transport: t.transport,
614
- initialValues: t.initialValues,
615
- validators: t.validators,
616
- hooks: t.hooks,
617
- inactiveFieldPolicy: t.inactiveFieldPolicy,
618
- listenerErrorPolicy: t.listenerErrorPolicy,
619
- onListenerError: t.onListenerError
620
- }), f = new N(d, l), m = document.createElement(x.questionnaire);
621
- m.controller = f, m.registry = a, m.text = T(t.text), m.primitiveText = p(t.primitiveText), e.replaceChildren(m);
622
- let h = n(m, {
623
- config: c,
624
- registry: o,
625
- onChange: t.onDesignSystemChange
626
- }), g = !1, _ = Object.freeze({
627
- controller: f,
628
- form: d,
629
- host: m,
630
- designSystem: h,
631
- unmount() {
632
- g || (g = !0, r[R] === _ && delete r[R], d.abortSubmit("unmount"), h.disconnect(), m.remove());
633
- }
634
- });
635
- return r[R] = _, _;
636
- }, B = (e) => {
637
- e.unmount();
638
- };
639
- //#endregion
640
- export { N as QuestionnaireController, P as QuestionnaireError, L as createQuestionnaireSchema, z as mountQuestionnaire, I as normalizeQuestionnaireSchema, C as questionnaireDefaultLabels, S as questionnaireEventNames, w as questionnaireStaticText, x as questionnaireTagNames, T as resolveQuestionnaireText, B as unmountQuestionnaire };