@chenzy-design/core 0.2.1 → 0.4.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 (283) hide show
  1. package/dist/ai-chat-dialogue.d.ts +300 -0
  2. package/dist/ai-chat-dialogue.d.ts.map +1 -0
  3. package/dist/ai-chat-dialogue.js +699 -0
  4. package/dist/ai-chat-dialogue.js.map +1 -0
  5. package/dist/ai-chat-dialogue.test.d.ts +2 -0
  6. package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue.test.js +338 -0
  8. package/dist/ai-chat-dialogue.test.js.map +1 -0
  9. package/dist/ai-chat-input.d.ts +191 -0
  10. package/dist/ai-chat-input.d.ts.map +1 -0
  11. package/dist/ai-chat-input.js +274 -0
  12. package/dist/ai-chat-input.js.map +1 -0
  13. package/dist/ai-chat-input.test.d.ts +2 -0
  14. package/dist/ai-chat-input.test.d.ts.map +1 -0
  15. package/dist/ai-chat-input.test.js +339 -0
  16. package/dist/ai-chat-input.test.js.map +1 -0
  17. package/dist/audio-player.d.ts +154 -0
  18. package/dist/audio-player.d.ts.map +1 -0
  19. package/dist/audio-player.js +254 -0
  20. package/dist/audio-player.js.map +1 -0
  21. package/dist/audio-player.test.d.ts +2 -0
  22. package/dist/audio-player.test.d.ts.map +1 -0
  23. package/dist/audio-player.test.js +275 -0
  24. package/dist/audio-player.test.js.map +1 -0
  25. package/dist/back-top.d.ts +4 -1
  26. package/dist/back-top.d.ts.map +1 -1
  27. package/dist/back-top.js +5 -2
  28. package/dist/back-top.js.map +1 -1
  29. package/dist/back-top.test.js +3 -2
  30. package/dist/back-top.test.js.map +1 -1
  31. package/dist/calendar.d.ts +132 -44
  32. package/dist/calendar.d.ts.map +1 -1
  33. package/dist/calendar.js +413 -70
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/calendar.test.js +160 -76
  36. package/dist/calendar.test.js.map +1 -1
  37. package/dist/chat.d.ts +172 -0
  38. package/dist/chat.d.ts.map +1 -0
  39. package/dist/chat.js +210 -0
  40. package/dist/chat.js.map +1 -0
  41. package/dist/chat.test.d.ts +2 -0
  42. package/dist/chat.test.d.ts.map +1 -0
  43. package/dist/chat.test.js +181 -0
  44. package/dist/chat.test.js.map +1 -0
  45. package/dist/code-highlight.d.ts +30 -0
  46. package/dist/code-highlight.d.ts.map +1 -0
  47. package/dist/code-highlight.js +37 -0
  48. package/dist/code-highlight.js.map +1 -0
  49. package/dist/code-highlight.test.d.ts +2 -0
  50. package/dist/code-highlight.test.d.ts.map +1 -0
  51. package/dist/code-highlight.test.js +36 -0
  52. package/dist/code-highlight.test.js.map +1 -0
  53. package/dist/collapsible.d.ts +41 -0
  54. package/dist/collapsible.d.ts.map +1 -0
  55. package/dist/collapsible.js +33 -0
  56. package/dist/collapsible.js.map +1 -0
  57. package/dist/collapsible.test.d.ts +2 -0
  58. package/dist/collapsible.test.d.ts.map +1 -0
  59. package/dist/collapsible.test.js +57 -0
  60. package/dist/collapsible.test.js.map +1 -0
  61. package/dist/color-value.d.ts +60 -0
  62. package/dist/color-value.d.ts.map +1 -0
  63. package/dist/color-value.js +165 -0
  64. package/dist/color-value.js.map +1 -0
  65. package/dist/color-value.test.d.ts +2 -0
  66. package/dist/color-value.test.d.ts.map +1 -0
  67. package/dist/color-value.test.js +104 -0
  68. package/dist/color-value.test.js.map +1 -0
  69. package/dist/config-provider.d.ts +76 -37
  70. package/dist/config-provider.d.ts.map +1 -1
  71. package/dist/config-provider.js +107 -32
  72. package/dist/config-provider.js.map +1 -1
  73. package/dist/config-provider.test.js +123 -60
  74. package/dist/config-provider.test.js.map +1 -1
  75. package/dist/cropper.d.ts +164 -0
  76. package/dist/cropper.d.ts.map +1 -0
  77. package/dist/cropper.js +841 -0
  78. package/dist/cropper.js.map +1 -0
  79. package/dist/cropper.test.d.ts +2 -0
  80. package/dist/cropper.test.d.ts.map +1 -0
  81. package/dist/cropper.test.js +259 -0
  82. package/dist/cropper.test.js.map +1 -0
  83. package/dist/drag-move.d.ts +119 -0
  84. package/dist/drag-move.d.ts.map +1 -0
  85. package/dist/drag-move.js +237 -0
  86. package/dist/drag-move.js.map +1 -0
  87. package/dist/drag-move.test.d.ts +2 -0
  88. package/dist/drag-move.test.d.ts.map +1 -0
  89. package/dist/drag-move.test.js +304 -0
  90. package/dist/drag-move.test.js.map +1 -0
  91. package/dist/editable.d.ts +24 -4
  92. package/dist/editable.d.ts.map +1 -1
  93. package/dist/editable.js +18 -0
  94. package/dist/editable.js.map +1 -1
  95. package/dist/editable.test.js +55 -2
  96. package/dist/editable.test.js.map +1 -1
  97. package/dist/ellipsis.d.ts +13 -0
  98. package/dist/ellipsis.d.ts.map +1 -1
  99. package/dist/ellipsis.js +36 -0
  100. package/dist/ellipsis.js.map +1 -1
  101. package/dist/ellipsis.test.js +37 -1
  102. package/dist/ellipsis.test.js.map +1 -1
  103. package/dist/form-path.d.ts +19 -0
  104. package/dist/form-path.d.ts.map +1 -0
  105. package/dist/form-path.js +97 -0
  106. package/dist/form-path.js.map +1 -0
  107. package/dist/form-path.test.d.ts +2 -0
  108. package/dist/form-path.test.d.ts.map +1 -0
  109. package/dist/form-path.test.js +57 -0
  110. package/dist/form-path.test.js.map +1 -0
  111. package/dist/form-validate.d.ts +13 -0
  112. package/dist/form-validate.d.ts.map +1 -0
  113. package/dist/form-validate.js +204 -0
  114. package/dist/form-validate.js.map +1 -0
  115. package/dist/form.d.ts +91 -18
  116. package/dist/form.d.ts.map +1 -1
  117. package/dist/form.js +170 -115
  118. package/dist/form.js.map +1 -1
  119. package/dist/form.test.js +349 -76
  120. package/dist/form.test.js.map +1 -1
  121. package/dist/highlight.d.ts +42 -32
  122. package/dist/highlight.d.ts.map +1 -1
  123. package/dist/highlight.js +67 -41
  124. package/dist/highlight.js.map +1 -1
  125. package/dist/highlight.test.js +73 -32
  126. package/dist/highlight.test.js.map +1 -1
  127. package/dist/hotkeys.d.ts +151 -0
  128. package/dist/hotkeys.d.ts.map +1 -0
  129. package/dist/hotkeys.js +188 -0
  130. package/dist/hotkeys.js.map +1 -0
  131. package/dist/hotkeys.test.d.ts +2 -0
  132. package/dist/hotkeys.test.d.ts.map +1 -0
  133. package/dist/hotkeys.test.js +170 -0
  134. package/dist/hotkeys.test.js.map +1 -0
  135. package/dist/index.d.ts +33 -17
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +32 -13
  138. package/dist/index.js.map +1 -1
  139. package/dist/input.d.ts +34 -0
  140. package/dist/input.d.ts.map +1 -0
  141. package/dist/input.js +54 -0
  142. package/dist/input.js.map +1 -0
  143. package/dist/input.test.d.ts +2 -0
  144. package/dist/input.test.d.ts.map +1 -0
  145. package/dist/input.test.js +56 -0
  146. package/dist/input.test.js.map +1 -0
  147. package/dist/markdown-render.d.ts +49 -0
  148. package/dist/markdown-render.d.ts.map +1 -0
  149. package/dist/markdown-render.js +61 -0
  150. package/dist/markdown-render.js.map +1 -0
  151. package/dist/markdown-render.test.d.ts +2 -0
  152. package/dist/markdown-render.test.d.ts.map +1 -0
  153. package/dist/markdown-render.test.js +106 -0
  154. package/dist/markdown-render.test.js.map +1 -0
  155. package/dist/notification.d.ts +40 -31
  156. package/dist/notification.d.ts.map +1 -1
  157. package/dist/notification.js +86 -70
  158. package/dist/notification.js.map +1 -1
  159. package/dist/notification.test.js +62 -39
  160. package/dist/notification.test.js.map +1 -1
  161. package/dist/numeral.d.ts +32 -0
  162. package/dist/numeral.d.ts.map +1 -0
  163. package/dist/numeral.js +67 -0
  164. package/dist/numeral.js.map +1 -0
  165. package/dist/numeral.test.d.ts +2 -0
  166. package/dist/numeral.test.d.ts.map +1 -0
  167. package/dist/numeral.test.js +59 -0
  168. package/dist/numeral.test.js.map +1 -0
  169. package/dist/overflow-list.d.ts +9 -40
  170. package/dist/overflow-list.d.ts.map +1 -1
  171. package/dist/overflow-list.js +9 -70
  172. package/dist/overflow-list.js.map +1 -1
  173. package/dist/overflow-list.test.js +1 -122
  174. package/dist/overflow-list.test.js.map +1 -1
  175. package/dist/pagination.d.ts +17 -0
  176. package/dist/pagination.d.ts.map +1 -1
  177. package/dist/pagination.js +48 -0
  178. package/dist/pagination.js.map +1 -1
  179. package/dist/pagination.test.js +40 -1
  180. package/dist/pagination.test.js.map +1 -1
  181. package/dist/pincode.d.ts +79 -0
  182. package/dist/pincode.d.ts.map +1 -0
  183. package/dist/pincode.js +119 -0
  184. package/dist/pincode.js.map +1 -0
  185. package/dist/pincode.test.d.ts +2 -0
  186. package/dist/pincode.test.d.ts.map +1 -0
  187. package/dist/pincode.test.js +151 -0
  188. package/dist/pincode.test.js.map +1 -0
  189. package/dist/progress.d.ts +32 -30
  190. package/dist/progress.d.ts.map +1 -1
  191. package/dist/progress.js +257 -64
  192. package/dist/progress.js.map +1 -1
  193. package/dist/progress.test.js +50 -47
  194. package/dist/progress.test.js.map +1 -1
  195. package/dist/resizable.d.ts +200 -0
  196. package/dist/resizable.d.ts.map +1 -0
  197. package/dist/resizable.js +329 -0
  198. package/dist/resizable.js.map +1 -0
  199. package/dist/resizable.test.d.ts +2 -0
  200. package/dist/resizable.test.d.ts.map +1 -0
  201. package/dist/resizable.test.js +302 -0
  202. package/dist/resizable.test.js.map +1 -0
  203. package/dist/scroll-list.d.ts +69 -62
  204. package/dist/scroll-list.d.ts.map +1 -1
  205. package/dist/scroll-list.js +103 -144
  206. package/dist/scroll-list.js.map +1 -1
  207. package/dist/scroll-list.test.js +100 -110
  208. package/dist/scroll-list.test.js.map +1 -1
  209. package/dist/sidebar.d.ts +46 -0
  210. package/dist/sidebar.d.ts.map +1 -0
  211. package/dist/sidebar.js +65 -0
  212. package/dist/sidebar.js.map +1 -0
  213. package/dist/sidebar.test.d.ts +2 -0
  214. package/dist/sidebar.test.d.ts.map +1 -0
  215. package/dist/sidebar.test.js +88 -0
  216. package/dist/sidebar.test.js.map +1 -0
  217. package/dist/spin.d.ts +5 -5
  218. package/dist/spin.d.ts.map +1 -1
  219. package/dist/spin.js +13 -39
  220. package/dist/spin.js.map +1 -1
  221. package/dist/spin.test.js +2 -26
  222. package/dist/spin.test.js.map +1 -1
  223. package/dist/toast.d.ts +33 -30
  224. package/dist/toast.d.ts.map +1 -1
  225. package/dist/toast.js +77 -72
  226. package/dist/toast.js.map +1 -1
  227. package/dist/toast.test.js +63 -37
  228. package/dist/toast.test.js.map +1 -1
  229. package/dist/tree.d.ts +22 -5
  230. package/dist/tree.d.ts.map +1 -1
  231. package/dist/tree.js +61 -9
  232. package/dist/tree.js.map +1 -1
  233. package/dist/tree.test.js +72 -1
  234. package/dist/tree.test.js.map +1 -1
  235. package/dist/user-guide.d.ts +73 -0
  236. package/dist/user-guide.d.ts.map +1 -0
  237. package/dist/user-guide.js +95 -0
  238. package/dist/user-guide.js.map +1 -0
  239. package/dist/user-guide.test.d.ts +2 -0
  240. package/dist/user-guide.test.d.ts.map +1 -0
  241. package/dist/user-guide.test.js +109 -0
  242. package/dist/user-guide.test.js.map +1 -0
  243. package/dist/video-player.d.ts +196 -0
  244. package/dist/video-player.d.ts.map +1 -0
  245. package/dist/video-player.js +461 -0
  246. package/dist/video-player.js.map +1 -0
  247. package/dist/video-player.test.d.ts +2 -0
  248. package/dist/video-player.test.d.ts.map +1 -0
  249. package/dist/video-player.test.js +435 -0
  250. package/dist/video-player.test.js.map +1 -0
  251. package/package.json +17 -1
  252. package/dist/banner.d.ts +0 -19
  253. package/dist/banner.d.ts.map +0 -1
  254. package/dist/banner.js +0 -20
  255. package/dist/banner.js.map +0 -1
  256. package/dist/banner.test.d.ts +0 -2
  257. package/dist/banner.test.d.ts.map +0 -1
  258. package/dist/banner.test.js +0 -29
  259. package/dist/banner.test.js.map +0 -1
  260. package/dist/breakpoints.d.ts +0 -30
  261. package/dist/breakpoints.d.ts.map +0 -1
  262. package/dist/breakpoints.js +0 -45
  263. package/dist/breakpoints.js.map +0 -1
  264. package/dist/breakpoints.test.d.ts +0 -2
  265. package/dist/breakpoints.test.d.ts.map +0 -1
  266. package/dist/breakpoints.test.js +0 -46
  267. package/dist/breakpoints.test.js.map +0 -1
  268. package/dist/lottie-icon.d.ts +0 -88
  269. package/dist/lottie-icon.d.ts.map +0 -1
  270. package/dist/lottie-icon.js +0 -84
  271. package/dist/lottie-icon.js.map +0 -1
  272. package/dist/lottie-icon.test.d.ts +0 -2
  273. package/dist/lottie-icon.test.d.ts.map +0 -1
  274. package/dist/lottie-icon.test.js +0 -88
  275. package/dist/lottie-icon.test.js.map +0 -1
  276. package/dist/sider.d.ts +0 -26
  277. package/dist/sider.d.ts.map +0 -1
  278. package/dist/sider.js +0 -55
  279. package/dist/sider.js.map +0 -1
  280. package/dist/sider.test.d.ts +0 -2
  281. package/dist/sider.test.d.ts.map +0 -1
  282. package/dist/sider.test.js +0 -29
  283. package/dist/sider.test.js.map +0 -1
package/dist/form.js CHANGED
@@ -2,22 +2,38 @@
2
2
  * createForm — framework-agnostic form state machine + validation engine.
3
3
  * No DOM, no framework deps. See specs/components/input/Form.spec.md.
4
4
  *
5
- * Scope (foundational subset): values/errors/touched/dirty, field registry,
6
- * sync + async rules (required/min/max/minLength/maxLength/pattern/type/validator),
7
- * async race-token discard, validate/resetFields/submit, fine-grained subscribe.
8
- * Deferred: nested-path arrays beyond simple dot paths, dependencies graph.
5
+ * Scope: nested-path values (`users[0].name` via lodash paths, Semi-aligned) /
6
+ * errors / touched / dirty, field registry, sync + async rules run through
7
+ * async-validator (with a `warningOnly` soft-warning superset layered on top),
8
+ * async race-token discard, validate/reset/submitForm, fine-grained subscribe,
9
+ * dependencies graph.
9
10
  */
10
11
  import { useId } from './id.js';
11
- const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
12
- const URL_RE = /^https?:\/\/[^\s]+$/;
12
+ import { pathGet, pathSet, pathHas, pathRemove } from './form-path.js';
13
+ import { runFieldRules } from './form-validate.js';
13
14
  /** the canonical "value is empty" predicate shared by required-rules and allowEmpty. */
14
15
  function isEmptyValue(v) {
15
16
  return v === undefined || v === null || v === '';
16
17
  }
18
+ /** deep clone a plain values tree so `initial` and live `values` never alias. */
19
+ function clone(v) {
20
+ if (typeof structuredClone === 'function') {
21
+ try {
22
+ return structuredClone(v);
23
+ }
24
+ catch {
25
+ /* value has non-cloneable members (e.g. functions) → fall through */
26
+ }
27
+ }
28
+ return JSON.parse(JSON.stringify(v));
29
+ }
17
30
  const DEFAULT_TRIGGER = ['blur', 'change'];
18
31
  export function createForm(options = {}) {
19
32
  const resolve = options.resolveMessage ?? ((d) => d.text ?? d.key);
20
- const initial = { ...(options.initialValues ?? {}) };
33
+ // the initial values tree (nested; Semi-aligned). Reassigned (immutably) when a
34
+ // field registers its own `initialValue` at a nested path. Deep-cloned into
35
+ // `state.values` so mutating one never leaks into the other.
36
+ let initialTree = clone(options.initialValues ?? {});
21
37
  const defaultTrigger = Array.isArray(options.validateTrigger)
22
38
  ? options.validateTrigger
23
39
  : options.validateTrigger
@@ -29,10 +45,10 @@ export function createForm(options = {}) {
29
45
  // per-field async race token: only the latest validation may write the error
30
46
  const tokens = new Map();
31
47
  // reverse dependency graph: dep field name → set of fields that depend on it.
32
- // setFieldValue(dep) connects to re-validating the dependents.
48
+ // setValue(dep) connects to re-validating the dependents.
33
49
  const dependents = new Map();
34
50
  const state = {
35
- values: { ...initial },
51
+ values: clone(initialTree),
36
52
  errors: {},
37
53
  warnings: {},
38
54
  touched: {},
@@ -49,113 +65,71 @@ export function createForm(options = {}) {
49
65
  return fields.get(name)?.label ?? name;
50
66
  }
51
67
  /**
52
- * snapshot of values honoring `allowEmpty` (spec §4 L70). With the default
53
- * `allowEmpty:false`, keys whose value is empty are omitted from the payload.
68
+ * snapshot of values honoring `allowEmpty` (spec §4 L70), rebuilt as a NESTED
69
+ * tree from each registered field's path (Semi-aligned): a `users[0].name`
70
+ * field lands at `{ users: [{ name }] }`, not a flat `'users[0].name'` key.
71
+ *
72
+ * With the default `allowEmpty:false`, fields whose value is empty are omitted.
73
+ * Registered fields are collected by their path; any remaining top-level keys
74
+ * that no field registered (e.g. values set via `setValues` without a Field)
75
+ * pass through verbatim so nothing is silently dropped.
54
76
  */
55
77
  function collectValues() {
56
- const out = {};
57
- for (const [k, raw] of Object.entries(state.values)) {
78
+ let out = {};
79
+ const seenTop = new Set();
80
+ for (const [name, cfg] of fields) {
81
+ const raw = pathGet(state.values, name);
58
82
  // a registered field's `transform` runs over the raw value (pure, no
59
- // state write-back per red line #2). Unregistered keys pass through.
60
- const transform = fields.get(k)?.transform;
61
- const v = transform ? transform(raw, state.values) : raw;
83
+ // state write-back per red line #2).
84
+ const v = cfg.transform ? cfg.transform(raw, state.values) : raw;
62
85
  // `allowEmpty` is decided on the *transformed* value: a transform may turn
63
86
  // an empty input into a real value (or vice versa).
64
- if (allowEmpty || !isEmptyValue(v))
65
- out[k] = v;
87
+ if (allowEmpty || !isEmptyValue(v)) {
88
+ out = pathSet(out, name, v);
89
+ seenTop.add(topSegment(name));
90
+ }
91
+ }
92
+ // pass through top-level keys not owned by any registered field (unregistered
93
+ // values written directly). Registered subtrees already rebuilt above.
94
+ for (const [k, raw] of Object.entries(state.values)) {
95
+ if (seenTop.has(k))
96
+ continue;
97
+ if (fieldsCoverTop(k))
98
+ continue;
99
+ if (allowEmpty || !isEmptyValue(raw))
100
+ out[k] = raw;
66
101
  }
67
102
  return out;
68
103
  }
104
+ /** first path segment of a field name (`users[0].name` → `users`). */
105
+ function topSegment(name) {
106
+ const m = /^[^.[\]]+/.exec(name);
107
+ return m ? m[0] : name;
108
+ }
109
+ /** whether any registered field lives under top-level key `k`. */
110
+ function fieldsCoverTop(k) {
111
+ for (const name of fields.keys())
112
+ if (topSegment(name) === k)
113
+ return true;
114
+ return false;
115
+ }
69
116
  /**
70
- * run all rules for a field. Returns the first blocking error and the first
71
- * warning (from a `warningOnly` rule), if any. A failing `warningOnly` rule
72
- * records a warning but does NOT halt evaluation — later rules still run, so a
73
- * real error can still win. A failing normal rule short-circuits with an error.
117
+ * run a field's rules through the async-validator-backed engine (blocking rules
118
+ * + a `warningOnly` soft-warning layer). Returns the first blocking error and
119
+ * the first warning, honoring `stopValidateWithError`.
74
120
  */
75
121
  async function runRules(name, value) {
76
122
  const cfg = fields.get(name);
77
- if (!cfg?.rules)
123
+ if (!cfg?.rules || cfg.rules.length === 0)
78
124
  return {};
79
- const label = labelOf(name);
80
- let warning;
81
- // first blocking error seen. With stopValidateWithError we return on it
82
- // immediately; otherwise we keep scanning (so warnings accumulate and the
83
- // semantics of "run all rules" hold) but still surface this first one.
84
- let firstError;
85
- // route a failed rule's message: warningOnly → record warning & continue;
86
- // otherwise capture it as the blocking error. Returns a result object only
87
- // when evaluation must halt (stopValidateWithError + a blocking error).
88
- const fail = (rule, d) => {
89
- const text = rule.message ?? resolve(d);
90
- if (rule.warningOnly) {
91
- if (warning === undefined)
92
- warning = text;
93
- return undefined; // keep scanning subsequent rules
94
- }
95
- if (firstError === undefined)
96
- firstError = text;
97
- if (stopWithError)
98
- return { error: firstError, warning };
99
- return undefined; // keep scanning subsequent rules
100
- };
101
- for (const rule of cfg.rules) {
102
- const isEmpty = isEmptyValue(value);
103
- if (rule.required && isEmpty) {
104
- const r = fail(rule, { key: 'Form.required', params: { label } });
105
- if (r)
106
- return r;
107
- continue;
108
- }
109
- if (isEmpty)
110
- continue; // other rules skip empty values
111
- let descriptor;
112
- if (rule.type === 'email' && !EMAIL_RE.test(String(value))) {
113
- descriptor = { key: 'Form.typeError', params: { label } };
114
- }
115
- else if (rule.type === 'url' && !URL_RE.test(String(value))) {
116
- descriptor = { key: 'Form.typeError', params: { label } };
117
- }
118
- else if (rule.type === 'number' && Number.isNaN(Number(value))) {
119
- descriptor = { key: 'Form.typeError', params: { label } };
120
- }
121
- else if (rule.minLength !== undefined && String(value).length < rule.minLength) {
122
- descriptor = { key: 'Form.minLength', params: { min: rule.minLength } };
123
- }
124
- else if (rule.maxLength !== undefined && String(value).length > rule.maxLength) {
125
- descriptor = { key: 'Form.maxLength', params: { max: rule.maxLength } };
126
- }
127
- else if (rule.min !== undefined && Number(value) < rule.min) {
128
- descriptor = { key: 'Form.min', params: { min: rule.min } };
129
- }
130
- else if (rule.max !== undefined && Number(value) > rule.max) {
131
- descriptor = { key: 'Form.max', params: { max: rule.max } };
132
- }
133
- else if (rule.pattern && !rule.pattern.test(String(value))) {
134
- descriptor = { key: 'Form.pattern', params: { label } };
135
- }
136
- if (descriptor) {
137
- const r = fail(rule, descriptor);
138
- if (r)
139
- return r;
140
- continue;
141
- }
142
- if (rule.validator) {
143
- const v = await rule.validator(value, state.values);
144
- if (v) {
145
- const r = fail(rule, { text: v, key: '' });
146
- if (r)
147
- return r;
148
- }
149
- }
150
- }
151
- return { error: firstError, warning };
125
+ return runFieldRules(name, value, state.values, cfg.rules, labelOf(name), resolve, stopWithError);
152
126
  }
153
127
  async function validateField(name) {
154
128
  const token = useId('v');
155
129
  tokens.set(name, token);
156
130
  state.validating = { ...state.validating, [name]: true };
157
131
  emit();
158
- const { error, warning } = await runRules(name, state.values[name]);
132
+ const { error, warning } = await runRules(name, pathGet(state.values, name));
159
133
  // race guard: a newer validation superseded this one → discard
160
134
  if (tokens.get(name) !== token)
161
135
  return state.errors[name];
@@ -166,7 +140,7 @@ export function createForm(options = {}) {
166
140
  return error;
167
141
  }
168
142
  return {
169
- getState: () => state,
143
+ getFormState: () => state,
170
144
  subscribe(listener) {
171
145
  listeners.add(listener);
172
146
  return () => listeners.delete(listener);
@@ -180,9 +154,9 @@ export function createForm(options = {}) {
180
154
  dependents.set(dep, (set = new Set()));
181
155
  set.add(name);
182
156
  }
183
- if (config.initialValue !== undefined && state.values[name] === undefined) {
184
- state.values = { ...state.values, [name]: config.initialValue };
185
- initial[name] = config.initialValue;
157
+ if (config.initialValue !== undefined && pathGet(state.values, name) === undefined) {
158
+ state.values = pathSet(state.values, name, config.initialValue);
159
+ initialTree = pathSet(initialTree, name, config.initialValue);
186
160
  emit();
187
161
  }
188
162
  return () => {
@@ -198,9 +172,11 @@ export function createForm(options = {}) {
198
172
  return defaultTrigger;
199
173
  return Array.isArray(t) ? t : [t];
200
174
  },
201
- getFieldValue: (name) => state.values[name],
202
- setFieldValue(name, value, opts) {
203
- state.values = { ...state.values, [name]: value };
175
+ getValue: (name) => (name === undefined ? clone(state.values) : pathGet(state.values, name)),
176
+ setValue(name, value, opts) {
177
+ // immutable nested write: rebuild the branch along `name`'s path so Svelte
178
+ // subscribers see a fresh root reference (never mutate in place).
179
+ state.values = pathSet(state.values, name, value);
204
180
  emit();
205
181
  if (opts?.validate)
206
182
  void validateField(name);
@@ -216,37 +192,116 @@ export function createForm(options = {}) {
216
192
  void validateField(dep);
217
193
  }
218
194
  },
219
- setFieldsValue(values) {
220
- state.values = { ...state.values, ...values };
195
+ setValues(values, config) {
196
+ // isOverride:true replaces the whole (nested) values tree; default merges at
197
+ // the top level (nested subtrees are replaced wholesale, matching Semi's
198
+ // per-field setValue when a subtree object is supplied). Field subscribers
199
+ // re-read on emit. Clone the incoming tree so callers can't alias state.
200
+ state.values = config?.isOverride
201
+ ? clone(values)
202
+ : { ...state.values, ...clone(values) };
221
203
  emit();
222
204
  },
223
- setFieldTouched(name, touched = true) {
205
+ setTouched(name, touched = true) {
224
206
  state.touched = { ...state.touched, [name]: touched };
225
207
  emit();
226
208
  },
227
- getFieldError: (name) => state.errors[name],
209
+ getTouched: (name) => state.touched[name] === true,
210
+ setError(name, error) {
211
+ state.errors = { ...state.errors, [name]: error };
212
+ emit();
213
+ },
214
+ getError: (name) => name === undefined ? { ...state.errors } : state.errors[name],
228
215
  getFieldWarning: (name) => state.warnings[name],
216
+ getFieldExist: (name) => fields.has(name),
217
+ getInitValue: (name) => (name === undefined ? clone(initialTree) : pathGet(initialTree, name)),
218
+ getInitValues: () => clone(initialTree),
229
219
  validateField,
230
- async validate(names) {
231
- const targets = names ?? [...fields.keys()];
220
+ async validate(namesOrOptions) {
221
+ // normalize the two call shapes: string[] | { fields?, silent? }.
222
+ const opts = Array.isArray(namesOrOptions)
223
+ ? { fields: namesOrOptions }
224
+ : (namesOrOptions ?? {});
225
+ const targets = opts.fields ?? [...fields.keys()];
226
+ // Form-level validator (Semi): when set, it REPLACES per-field rules on
227
+ // validate/submit. Runs against collected values; returns { field: msg }.
228
+ const formValidator = options.validator ?? options.validateFields;
229
+ if (opts.silent) {
230
+ // Silent: compute the result without touching state (no emit / touched / error UI).
231
+ if (formValidator) {
232
+ const errs = (await formValidator(collectValues())) || {};
233
+ return Object.values(errs).every((e) => !e);
234
+ }
235
+ const results = await Promise.all(targets.map((n) => runRules(n, pathGet(state.values, n)).then((r) => r.error)));
236
+ return results.every((e) => !e);
237
+ }
238
+ if (formValidator) {
239
+ const errs = (await formValidator(collectValues())) || {};
240
+ // surface form-level errors on the targeted fields; clear the rest.
241
+ const next = { ...state.errors };
242
+ for (const n of targets)
243
+ next[n] = errs[n];
244
+ state.errors = next;
245
+ emit();
246
+ return targets.every((n) => !errs[n]);
247
+ }
232
248
  const results = await Promise.all(targets.map((n) => validateField(n)));
233
249
  return results.every((e) => !e);
234
250
  },
235
- resetFields() {
236
- state.values = { ...initial };
251
+ reset(fields) {
252
+ if (fields && fields.length > 0) {
253
+ // partial reset: only the targeted fields fall back to their initial
254
+ // value (or drop when there is none) and lose error/warning/touched/
255
+ // validating state; everything else is left untouched. Values are read/
256
+ // written by nested path so `users[0].name` resets its leaf, not a flat key.
257
+ let values = state.values;
258
+ const errors = { ...state.errors };
259
+ const warnings = { ...state.warnings };
260
+ const touched = { ...state.touched };
261
+ const validating = { ...state.validating };
262
+ for (const f of fields) {
263
+ if (pathHas(initialTree, f))
264
+ values = pathSet(values, f, pathGet(initialTree, f));
265
+ else
266
+ values = pathRemove(values, f);
267
+ delete errors[f];
268
+ delete warnings[f];
269
+ delete touched[f];
270
+ delete validating[f];
271
+ }
272
+ state.values = values;
273
+ state.errors = errors;
274
+ state.warnings = warnings;
275
+ state.touched = touched;
276
+ state.validating = validating;
277
+ emit();
278
+ return;
279
+ }
280
+ state.values = clone(initialTree);
237
281
  state.errors = {};
238
282
  state.warnings = {};
239
283
  state.touched = {};
240
284
  state.validating = {};
241
285
  emit();
242
286
  },
243
- getFieldsValue: () => collectValues(),
244
- async submit() {
287
+ getValues: () => collectValues(),
288
+ async submitForm() {
245
289
  state.submitting = true;
246
290
  state.submitCount += 1;
247
291
  emit();
248
292
  const targets = [...fields.keys()];
249
- await Promise.all(targets.map((n) => validateField(n)));
293
+ const formValidator = options.validator ?? options.validateFields;
294
+ if (formValidator) {
295
+ // Form-level validator replaces per-field rules on submit (Semi semantics).
296
+ const errs = ((await formValidator(collectValues())) || {});
297
+ const next = { ...state.errors };
298
+ for (const n of targets)
299
+ next[n] = errs[n];
300
+ state.errors = next;
301
+ }
302
+ else {
303
+ await Promise.all(targets.map((n) => validateField(n)));
304
+ }
250
305
  const valid = targets.every((n) => !state.errors[n]);
251
306
  state.submitting = false;
252
307
  emit();
package/dist/form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAwGhC,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAC9C,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAiCrC,wFAAwF;AACxF,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,eAAe,GAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,UAAU,UAAU,CAAC,UAAuB,EAAE;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,OAAO,GAAe,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;IACjE,MAAM,cAAc,GAAsB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAC9E,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,OAAO,CAAC,eAAe;YACvB,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;YAC3B,CAAC,CAAC,eAAe,CAAC;IACtB,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,6EAA6E;IAC7E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAElD,MAAM,KAAK,GAAc;QACvB,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE;QACtB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,CAAC;KACf,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,SAAS,IAAI;QACX,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,OAAO,CAAC,IAAY;QAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,SAAS,aAAa;QACpB,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;YAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,2EAA2E;YAC3E,oDAAoD;YACpD,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,UAAU,QAAQ,CACrB,IAAY,EACZ,KAAc;QAEd,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,EAAE,KAAK;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,OAA2B,CAAC;QAChC,wEAAwE;QACxE,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,UAA8B,CAAC;QAEnC,0EAA0E;QAC1E,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,IAAI,GAAG,CACX,IAAU,EACV,CAAoB,EACsD,EAAE;YAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,GAAG,IAAI,CAAC;gBAC1C,OAAO,SAAS,CAAC,CAAC,iCAAiC;YACrD,CAAC;YACD,IAAI,UAAU,KAAK,SAAS;gBAAE,UAAU,GAAG,IAAI,CAAC;YAChD,IAAI,aAAa;gBAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACzD,OAAO,SAAS,CAAC,CAAC,iCAAiC;QACrD,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,OAAO;gBAAE,SAAS,CAAC,gCAAgC;YAEvD,IAAI,UAAyC,CAAC;YAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3D,UAAU,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC9D,UAAU,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjE,UAAU,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjF,UAAU,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1E,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjF,UAAU,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1E,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9D,UAAU,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9D,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9D,UAAU,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9D,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7D,UAAU,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1D,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACjC,IAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,EAAE,CAAC;oBACN,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI,CAAC;wBAAE,OAAO,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,IAAY;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QACzD,IAAI,EAAE,CAAC;QAEP,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,+DAA+D;QAC/D,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1D,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QAC1D,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACxD,IAAI,EAAE,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzB,2EAA2E;YAC3E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC5C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG;oBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1E,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;gBACpC,IAAI,EAAE,CAAC;YACT,CAAC;YACD,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE;oBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjF,CAAC,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,IAAI;YAClB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YACpC,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,cAAc,CAAC;YAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI;YAC7B,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;YAClD,IAAI,EAAE,CAAC;YACP,IAAI,IAAI,EAAE,QAAQ;gBAAE,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;YAC7C,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,oEAAoE;YACpE,gEAAgE;YAChE,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI;oBAC3B,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChE,IAAI,MAAM;oBAAE,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,cAAc,CAAC,MAAM;YACnB,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YAC9C,IAAI,EAAE,CAAC;QACT,CAAC;QACD,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;YAClC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;YACtD,IAAI,EAAE,CAAC;QACT,CAAC;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC/C,aAAa;QACb,KAAK,CAAC,QAAQ,CAAC,KAAK;YAClB,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,WAAW;YACT,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAClB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YACtB,IAAI,EAAE,CAAC;QACT,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE;QACrC,KAAK,CAAC,MAAM;YACV,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YACzB,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}