@stubber/form-fields 1.7.8 → 1.8.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 (254) hide show
  1. package/dist/{fields2 → form-fields}/sub/currency-field.svelte +2 -3
  2. package/dist/{fields2 → form-fields}/sub/file-field.svelte +17 -25
  3. package/dist/{fields2 → form-fields}/sub/select-field.svelte +6 -3
  4. package/dist/{fields2 → form-fields}/utils.d.ts +1 -0
  5. package/dist/{fields2 → form-fields}/utils.js +9 -1
  6. package/dist/utils/input_regex_mask.d.ts +3 -0
  7. package/dist/utils/input_regex_mask.js +25 -0
  8. package/package.json +4 -8
  9. package/dist/Field.svelte +0 -36
  10. package/dist/Field.svelte.d.ts +0 -33
  11. package/dist/Form.svelte +0 -34
  12. package/dist/Form.svelte.d.ts +0 -31
  13. package/dist/NullFieldWrapper.svelte +0 -6
  14. package/dist/NullFieldWrapper.svelte.d.ts +0 -27
  15. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte +0 -74
  16. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte.d.ts +0 -31
  17. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte +0 -8
  18. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte.d.ts +0 -27
  19. package/dist/fields/components/AgGrid.svelte +0 -46
  20. package/dist/fields/components/AgGrid.svelte.d.ts +0 -20
  21. package/dist/fields/components/Arraybuilder.svelte +0 -98
  22. package/dist/fields/components/Arraybuilder.svelte.d.ts +0 -27
  23. package/dist/fields/components/Checkbox.svelte +0 -89
  24. package/dist/fields/components/Checkbox.svelte.d.ts +0 -25
  25. package/dist/fields/components/CheckboxAutocomplete.svelte +0 -95
  26. package/dist/fields/components/CheckboxAutocomplete.svelte.d.ts +0 -25
  27. package/dist/fields/components/Code.svelte +0 -133
  28. package/dist/fields/components/Code.svelte.d.ts +0 -18
  29. package/dist/fields/components/Contactselector.svelte +0 -71
  30. package/dist/fields/components/Contactselector.svelte.d.ts +0 -27
  31. package/dist/fields/components/Currency.svelte +0 -264
  32. package/dist/fields/components/Currency.svelte.d.ts +0 -25
  33. package/dist/fields/components/Dataindication.svelte +0 -31
  34. package/dist/fields/components/Dataindication.svelte.d.ts +0 -25
  35. package/dist/fields/components/Date.svelte +0 -97
  36. package/dist/fields/components/Date.svelte.d.ts +0 -25
  37. package/dist/fields/components/Datetime.svelte +0 -97
  38. package/dist/fields/components/Datetime.svelte.d.ts +0 -25
  39. package/dist/fields/components/Email.svelte +0 -125
  40. package/dist/fields/components/Email.svelte.d.ts +0 -25
  41. package/dist/fields/components/Fieldbuilder.svelte +0 -343
  42. package/dist/fields/components/Fieldbuilder.svelte.d.ts +0 -27
  43. package/dist/fields/components/Fieldsbuilder.svelte +0 -122
  44. package/dist/fields/components/Fieldsbuilder.svelte.d.ts +0 -27
  45. package/dist/fields/components/File.svelte +0 -231
  46. package/dist/fields/components/File.svelte.d.ts +0 -27
  47. package/dist/fields/components/Heading.svelte +0 -17
  48. package/dist/fields/components/Heading.svelte.d.ts +0 -25
  49. package/dist/fields/components/Hidden.svelte +0 -7
  50. package/dist/fields/components/Hidden.svelte.d.ts +0 -25
  51. package/dist/fields/components/Hiddenlocation.svelte +0 -28
  52. package/dist/fields/components/Hiddenlocation.svelte.d.ts +0 -25
  53. package/dist/fields/components/Html.svelte +0 -13
  54. package/dist/fields/components/Html.svelte.d.ts +0 -25
  55. package/dist/fields/components/Jsoneditor.svelte +0 -133
  56. package/dist/fields/components/Jsoneditor.svelte.d.ts +0 -25
  57. package/dist/fields/components/Map.svelte +0 -192
  58. package/dist/fields/components/Map.svelte.d.ts +0 -27
  59. package/dist/fields/components/Multicheckbox.svelte +0 -77
  60. package/dist/fields/components/Multicheckbox.svelte.d.ts +0 -25
  61. package/dist/fields/components/Multistep.svelte +0 -86
  62. package/dist/fields/components/Multistep.svelte.d.ts +0 -27
  63. package/dist/fields/components/Note.svelte +0 -92
  64. package/dist/fields/components/Note.svelte.d.ts +0 -25
  65. package/dist/fields/components/Number.svelte +0 -119
  66. package/dist/fields/components/Number.svelte.d.ts +0 -25
  67. package/dist/fields/components/Objectbuilder.svelte +0 -154
  68. package/dist/fields/components/Objectbuilder.svelte.d.ts +0 -27
  69. package/dist/fields/components/Qrcodescanner.svelte +0 -196
  70. package/dist/fields/components/Qrcodescanner.svelte.d.ts +0 -25
  71. package/dist/fields/components/Radio.svelte +0 -117
  72. package/dist/fields/components/Radio.svelte.d.ts +0 -25
  73. package/dist/fields/components/Renderfield.svelte +0 -58
  74. package/dist/fields/components/Renderfield.svelte.d.ts +0 -27
  75. package/dist/fields/components/Screenrecorder.svelte +0 -276
  76. package/dist/fields/components/Screenrecorder.svelte.d.ts +0 -27
  77. package/dist/fields/components/Screenshot.svelte +0 -269
  78. package/dist/fields/components/Screenshot.svelte.d.ts +0 -27
  79. package/dist/fields/components/Scrollandreaddisplay.svelte +0 -122
  80. package/dist/fields/components/Scrollandreaddisplay.svelte.d.ts +0 -25
  81. package/dist/fields/components/Section.svelte +0 -87
  82. package/dist/fields/components/Section.svelte.d.ts +0 -27
  83. package/dist/fields/components/Select.svelte +0 -161
  84. package/dist/fields/components/Select.svelte.d.ts +0 -31
  85. package/dist/fields/components/Selectresource.svelte +0 -57
  86. package/dist/fields/components/Selectresource.svelte.d.ts +0 -27
  87. package/dist/fields/components/Signature.svelte +0 -152
  88. package/dist/fields/components/Signature.svelte.d.ts +0 -27
  89. package/dist/fields/components/Slider.svelte +0 -101
  90. package/dist/fields/components/Slider.svelte.d.ts +0 -25
  91. package/dist/fields/components/SmartText.svelte +0 -351
  92. package/dist/fields/components/SmartText.svelte.d.ts +0 -25
  93. package/dist/fields/components/Telephone.svelte +0 -156
  94. package/dist/fields/components/Telephone.svelte.d.ts +0 -25
  95. package/dist/fields/components/Text.svelte +0 -107
  96. package/dist/fields/components/Text.svelte.d.ts +0 -25
  97. package/dist/fields/components/Voicenote.svelte +0 -267
  98. package/dist/fields/components/Voicenote.svelte.d.ts +0 -27
  99. package/dist/fields/components/index.d.ts +0 -84
  100. package/dist/fields/components/index.js +0 -85
  101. package/dist/fields/definitions/all.json +0 -38
  102. package/dist/fields/definitions/arraybuilder.json +0 -39
  103. package/dist/fields/definitions/checkbox.json +0 -44
  104. package/dist/fields/definitions/code.json +0 -15
  105. package/dist/fields/definitions/contactselector.json +0 -15
  106. package/dist/fields/definitions/currency.json +0 -42
  107. package/dist/fields/definitions/dataindication.json +0 -16
  108. package/dist/fields/definitions/date.json +0 -16
  109. package/dist/fields/definitions/datetime.json +0 -15
  110. package/dist/fields/definitions/email.json +0 -16
  111. package/dist/fields/definitions/fieldbuilder.json +0 -64
  112. package/dist/fields/definitions/fieldsbuilder.json +0 -38
  113. package/dist/fields/definitions/file.json +0 -42
  114. package/dist/fields/definitions/grid.json +0 -47
  115. package/dist/fields/definitions/heading.json +0 -38
  116. package/dist/fields/definitions/hidden.json +0 -89
  117. package/dist/fields/definitions/hiddenlocation.json +0 -15
  118. package/dist/fields/definitions/html.json +0 -34
  119. package/dist/fields/definitions/index.d.ts +0 -90
  120. package/dist/fields/definitions/index.js +0 -99
  121. package/dist/fields/definitions/jsoneditor.json +0 -33
  122. package/dist/fields/definitions/map.json +0 -36
  123. package/dist/fields/definitions/multicheckbox.json +0 -47
  124. package/dist/fields/definitions/multistep.json +0 -35
  125. package/dist/fields/definitions/note.json +0 -16
  126. package/dist/fields/definitions/number.json +0 -42
  127. package/dist/fields/definitions/objectbuilder.json +0 -39
  128. package/dist/fields/definitions/placeholder.json +0 -15
  129. package/dist/fields/definitions/qrcodescanner.json +0 -16
  130. package/dist/fields/definitions/radio.json +0 -47
  131. package/dist/fields/definitions/renderfield.json +0 -36
  132. package/dist/fields/definitions/richtext.json +0 -16
  133. package/dist/fields/definitions/screenrecorder.json +0 -42
  134. package/dist/fields/definitions/screenshot.json +0 -42
  135. package/dist/fields/definitions/scrollandreaddisplay.json +0 -49
  136. package/dist/fields/definitions/section.json +0 -50
  137. package/dist/fields/definitions/select.json +0 -47
  138. package/dist/fields/definitions/selectresource.json +0 -48
  139. package/dist/fields/definitions/signature.json +0 -16
  140. package/dist/fields/definitions/slider.json +0 -78
  141. package/dist/fields/definitions/smarttext.json +0 -101
  142. package/dist/fields/definitions/telephone.json +0 -16
  143. package/dist/fields/definitions/text.json +0 -35
  144. package/dist/fields/definitions/validfieldtype.json +0 -220
  145. package/dist/fields/definitions/voicenote.json +0 -43
  146. package/dist/index.d.ts +0 -2
  147. package/dist/index.js +0 -3
  148. package/dist/thirdparty/mapbox/GeoCoder.svelte +0 -10
  149. package/dist/thirdparty/mapbox/GeoCoder.svelte.d.ts +0 -27
  150. package/dist/thirdparty/mapbox/Map.svelte +0 -30
  151. package/dist/thirdparty/mapbox/Map.svelte.d.ts +0 -22
  152. package/dist/thirdparty/mapbox/MapMarker.svelte +0 -13
  153. package/dist/thirdparty/mapbox/MapMarker.svelte.d.ts +0 -33
  154. package/dist/utils/createField.d.ts +0 -6
  155. package/dist/utils/createField.js +0 -33
  156. package/dist/utils/createForm.d.ts +0 -1
  157. package/dist/utils/createForm.js +0 -501
  158. package/dist/utils/index.d.ts +0 -18
  159. package/dist/utils/index.js +0 -126
  160. package/dist/utils/syncing.d.ts +0 -11
  161. package/dist/utils/syncing.js +0 -134
  162. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte +0 -0
  163. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte.d.ts +0 -0
  164. /package/dist/{fields2 → form-fields}/FieldLabel.svelte +0 -0
  165. /package/dist/{fields2 → form-fields}/FieldLabel.svelte.d.ts +0 -0
  166. /package/dist/{fields2 → form-fields}/FieldMessage.svelte +0 -0
  167. /package/dist/{fields2 → form-fields}/FieldMessage.svelte.d.ts +0 -0
  168. /package/dist/{fields2 → form-fields}/Form.svelte +0 -0
  169. /package/dist/{fields2 → form-fields}/Form.svelte.d.ts +0 -0
  170. /package/dist/{fields2 → form-fields}/fileserver.d.ts +0 -0
  171. /package/dist/{fields2 → form-fields}/fileserver.js +0 -0
  172. /package/dist/{fields2 → form-fields}/form-field.svelte +0 -0
  173. /package/dist/{fields2 → form-fields}/form-field.svelte.d.ts +0 -0
  174. /package/dist/{fields2 → form-fields}/index.d.ts +0 -0
  175. /package/dist/{fields2 → form-fields}/index.js +0 -0
  176. /package/dist/{fields2 → form-fields}/interfaces.d.ts +0 -0
  177. /package/dist/{fields2 → form-fields}/interfaces.js +0 -0
  178. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte +0 -0
  179. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte.d.ts +0 -0
  180. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte +0 -0
  181. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte.d.ts +0 -0
  182. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte +0 -0
  183. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte.d.ts +0 -0
  184. /package/dist/{fields2 → form-fields}/sub/code-field.svelte +0 -0
  185. /package/dist/{fields2 → form-fields}/sub/code-field.svelte.d.ts +0 -0
  186. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte +0 -0
  187. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte.d.ts +0 -0
  188. /package/dist/{fields2 → form-fields}/sub/currency-field.svelte.d.ts +0 -0
  189. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte +0 -0
  190. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte.d.ts +0 -0
  191. /package/dist/{fields2 → form-fields}/sub/date-field.svelte +0 -0
  192. /package/dist/{fields2 → form-fields}/sub/date-field.svelte.d.ts +0 -0
  193. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte +0 -0
  194. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte.d.ts +0 -0
  195. /package/dist/{fields2 → form-fields}/sub/email-field.svelte +0 -0
  196. /package/dist/{fields2 → form-fields}/sub/email-field.svelte.d.ts +0 -0
  197. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte +0 -0
  198. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte.d.ts +0 -0
  199. /package/dist/{fields2 → form-fields}/sub/file-field.svelte.d.ts +0 -0
  200. /package/dist/{fields2 → form-fields}/sub/grid-field.svelte +0 -0
  201. /package/dist/{fields2 → form-fields}/sub/grid-field.svelte.d.ts +0 -0
  202. /package/dist/{fields2 → form-fields}/sub/heading-field.svelte +0 -0
  203. /package/dist/{fields2 → form-fields}/sub/heading-field.svelte.d.ts +0 -0
  204. /package/dist/{fields2 → form-fields}/sub/hidden-field.svelte +0 -0
  205. /package/dist/{fields2 → form-fields}/sub/hidden-field.svelte.d.ts +0 -0
  206. /package/dist/{fields2 → form-fields}/sub/hidden-location-field.svelte +0 -0
  207. /package/dist/{fields2 → form-fields}/sub/hidden-location-field.svelte.d.ts +0 -0
  208. /package/dist/{fields2 → form-fields}/sub/html-field.svelte +0 -0
  209. /package/dist/{fields2 → form-fields}/sub/html-field.svelte.d.ts +0 -0
  210. /package/dist/{fields2 → form-fields}/sub/json-editor-bound.svelte +0 -0
  211. /package/dist/{fields2 → form-fields}/sub/json-editor-bound.svelte.d.ts +0 -0
  212. /package/dist/{fields2 → form-fields}/sub/jsoneditor-field.svelte +0 -0
  213. /package/dist/{fields2 → form-fields}/sub/jsoneditor-field.svelte.d.ts +0 -0
  214. /package/dist/{fields2 → form-fields}/sub/map-field.svelte +0 -0
  215. /package/dist/{fields2 → form-fields}/sub/map-field.svelte.d.ts +0 -0
  216. /package/dist/{fields2 → form-fields}/sub/multi-checkbox-field.svelte +0 -0
  217. /package/dist/{fields2 → form-fields}/sub/multi-checkbox-field.svelte.d.ts +0 -0
  218. /package/dist/{fields2 → form-fields}/sub/multistep-field.svelte +0 -0
  219. /package/dist/{fields2 → form-fields}/sub/multistep-field.svelte.d.ts +0 -0
  220. /package/dist/{fields2 → form-fields}/sub/note-field.svelte +0 -0
  221. /package/dist/{fields2 → form-fields}/sub/note-field.svelte.d.ts +0 -0
  222. /package/dist/{fields2 → form-fields}/sub/number-field.svelte +0 -0
  223. /package/dist/{fields2 → form-fields}/sub/number-field.svelte.d.ts +0 -0
  224. /package/dist/{fields2 → form-fields}/sub/object-builder-field.svelte +0 -0
  225. /package/dist/{fields2 → form-fields}/sub/object-builder-field.svelte.d.ts +0 -0
  226. /package/dist/{fields2 → form-fields}/sub/qr-code-scanner-field.svelte +0 -0
  227. /package/dist/{fields2 → form-fields}/sub/qr-code-scanner-field.svelte.d.ts +0 -0
  228. /package/dist/{fields2 → form-fields}/sub/radio-field.svelte +0 -0
  229. /package/dist/{fields2 → form-fields}/sub/radio-field.svelte.d.ts +0 -0
  230. /package/dist/{fields2 → form-fields}/sub/screenrecorder-field.svelte +0 -0
  231. /package/dist/{fields2 → form-fields}/sub/screenrecorder-field.svelte.d.ts +0 -0
  232. /package/dist/{fields2 → form-fields}/sub/screenshot-field.svelte +0 -0
  233. /package/dist/{fields2 → form-fields}/sub/screenshot-field.svelte.d.ts +0 -0
  234. /package/dist/{fields2 → form-fields}/sub/scroll-and-read-display-field.svelte +0 -0
  235. /package/dist/{fields2 → form-fields}/sub/scroll-and-read-display-field.svelte.d.ts +0 -0
  236. /package/dist/{fields2 → form-fields}/sub/section-field.svelte +0 -0
  237. /package/dist/{fields2 → form-fields}/sub/section-field.svelte.d.ts +0 -0
  238. /package/dist/{fields2 → form-fields}/sub/select-field.svelte.d.ts +0 -0
  239. /package/dist/{fields2 → form-fields}/sub/selectresource-field.svelte +0 -0
  240. /package/dist/{fields2 → form-fields}/sub/selectresource-field.svelte.d.ts +0 -0
  241. /package/dist/{fields2 → form-fields}/sub/signature-field.svelte +0 -0
  242. /package/dist/{fields2 → form-fields}/sub/signature-field.svelte.d.ts +0 -0
  243. /package/dist/{fields2 → form-fields}/sub/slider-field.svelte +0 -0
  244. /package/dist/{fields2 → form-fields}/sub/slider-field.svelte.d.ts +0 -0
  245. /package/dist/{fields2 → form-fields}/sub/smart-text-field.svelte +0 -0
  246. /package/dist/{fields2 → form-fields}/sub/smart-text-field.svelte.d.ts +0 -0
  247. /package/dist/{fields2 → form-fields}/sub/telephone-field.svelte +0 -0
  248. /package/dist/{fields2 → form-fields}/sub/telephone-field.svelte.d.ts +0 -0
  249. /package/dist/{fields2 → form-fields}/sub/text-field.svelte +0 -0
  250. /package/dist/{fields2 → form-fields}/sub/text-field.svelte.d.ts +0 -0
  251. /package/dist/{fields2 → form-fields}/sub/voicenote-field.svelte +0 -0
  252. /package/dist/{fields2 → form-fields}/sub/voicenote-field.svelte.d.ts +0 -0
  253. /package/dist/{fields2 → form-fields}/validations/validate_field.d.ts +0 -0
  254. /package/dist/{fields2 → form-fields}/validations/validate_field.js +0 -0
@@ -1,125 +0,0 @@
1
- <script>
2
- import { syncStoreToStore } from "../../utils/syncing";
3
- import { deepEqual } from "fast-equals";
4
- import _ from "lodash-es";
5
- import { onMount } from "svelte";
6
- import { writable } from "svelte/store";
7
-
8
- import { Label } from "@stubber/ui/label";
9
- import { Input } from "@stubber/ui/input";
10
-
11
- export let field;
12
-
13
- const internal = writable();
14
-
15
- $: state_key = $field.state?.state_key;
16
- $: label = $field.spec?.title;
17
- $: hide_label = $field.spec?.hide_label;
18
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
19
- $: validationMessage = $field.state?.validation?.message;
20
-
21
- $: onRawChange($internal?.raw);
22
- function onRawChange(r) {
23
- let _clone = _.cloneDeep($internal) || {};
24
- let formatted = r?.toLowerCase()?.trim();
25
-
26
- // use regex to check valid email address and to get the username and domain parts
27
- let regex =
28
- /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
29
- let is_valid_email = regex.test(formatted);
30
- let username = is_valid_email ? formatted.split("@")[0] : null;
31
- let domain = is_valid_email ? formatted.split("@")[1] : null;
32
- _.set(_clone, "formatted", formatted);
33
- _.set(_clone, "is_valid_email", is_valid_email);
34
- _.set(_clone, "username", username);
35
- _.set(_clone, "domain", domain);
36
- $internal = _clone;
37
- }
38
-
39
- onMount(() => {
40
- // set field values that aren't set yet
41
- let f = _.cloneDeep($field);
42
- let raw = f?.data?.base ?? "";
43
- let formatted = raw?.toLowerCase()?.trim();
44
- let initial_data = {
45
- ...f?.data,
46
- base: formatted,
47
- };
48
- let initial_state_internal = {
49
- ...f?.state?.internal,
50
- raw,
51
- formatted,
52
- };
53
- _.set(f, "data", initial_data);
54
- _.set(f, "state.internal", initial_state_internal);
55
- if (!deepEqual(f, $field)) $field = f;
56
-
57
- syncStoreToStore(
58
- field,
59
- internal,
60
- (a, b) => {
61
- let _clone = _.cloneDeep(a.state?.internal) || {};
62
-
63
- // get parts from data
64
- _clone.formatted = a?.data?.base;
65
- _clone.raw = _clone.formatted;
66
- if (!a?.spec?.without_value_details) {
67
- _clone.is_valid_email = a?.data?.base_details?.is_valid_email ?? _clone?.is_valid_email;
68
- _clone.username = a?.data?.base_details?.username ?? _clone?.username;
69
- _clone.domain = a?.data?.base_details?.domain ?? _clone?.domain;
70
- }
71
-
72
- // set field state if changed
73
- if (!deepEqual(a?.state?.internal, _clone)) {
74
- $field.state.internal = _clone;
75
- }
76
-
77
- return _clone;
78
- },
79
- (a, b) => {
80
- let _clone = _.cloneDeep(a) || {};
81
- // update the state
82
- _.set(_clone, "state.internal", _.cloneDeep(b));
83
- // update the data
84
- _.set(_clone, "data.base", b?.formatted);
85
- if (!a?.spec?.without_value_details) {
86
- _.set(_clone, "data.base_details.is_valid_email", b?.is_valid_email);
87
- _.set(_clone, "data.base_details.domain", b?.domain);
88
- _.set(_clone, "data.base_details.username", b?.username);
89
- _.set(_clone, "data.base_details.raw", b?.raw);
90
- }
91
- return _clone;
92
- },
93
- null,
94
- 300
95
- );
96
- });
97
- </script>
98
-
99
- {#if $internal}
100
- <div class="flex flex-col w-full text-surface-900 my-2">
101
- <Label for="input_{state_key}" class="block py-2 {hide_label ? 'hidden' : ''}">
102
- {label}
103
- </Label>
104
- <div class="relative rounded-md">
105
- <Input
106
- on:keydown={(e) => {
107
- if (e.key === "Enter") {
108
- e.preventDefault();
109
- }
110
- }}
111
- type="text"
112
- id="input_{state_key}"
113
- placeholder={label}
114
- class="block w-full {!isValid ? 'ring-danger-500' : 'ring-surface-300'}"
115
- name={state_key}
116
- bind:value={$internal.raw}
117
- />
118
- </div>
119
- {#if validationMessage}
120
- <Label class=" {!isValid ? `text-danger-500` : `text-success-500`}">
121
- {validationMessage}
122
- </Label>
123
- {/if}
124
- </div>
125
- {/if}
@@ -1,25 +0,0 @@
1
- /** @typedef {typeof __propDef.props} EmailProps */
2
- /** @typedef {typeof __propDef.events} EmailEvents */
3
- /** @typedef {typeof __propDef.slots} EmailSlots */
4
- export default class Email extends SvelteComponent<{
5
- field: any;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type EmailProps = typeof __propDef.props;
11
- export type EmailEvents = typeof __propDef.events;
12
- export type EmailSlots = typeof __propDef.slots;
13
- import { SvelteComponent } from "svelte";
14
- declare const __propDef: {
15
- props: {
16
- field: any;
17
- };
18
- events: {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- exports?: undefined;
23
- bindings?: undefined;
24
- };
25
- export {};
@@ -1,343 +0,0 @@
1
- <script>
2
- import { Form } from "../..";
3
- import _ from "lodash-es";
4
- import { selectableFieldtypes, definitions } from "../definitions/index.js";
5
- import { syncStoreToStore } from "../../utils/syncing";
6
- import { writable } from "svelte/store";
7
- import { onMount, getContext } from "svelte";
8
- import { deepEqual } from "fast-equals";
9
- import FieldWrapper from "../component_parts/fieldbuilder/FieldWrapper.svelte";
10
- import * as utils from "../../utils/index.js";
11
-
12
- import { Checkbox } from "@stubber/ui/checkbox";
13
- import { Label } from "@stubber/ui/label";
14
- import { Button } from "@stubber/ui/button";
15
- import * as Accordion from "@stubber/ui/accordion";
16
-
17
- export let form;
18
- export let field;
19
-
20
- $: state_key = $field.state?.state_key;
21
- $: label = $field.spec?.title;
22
- $: hide_label = $field.spec?.hide_label;
23
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
24
- $: validationMessage = $field.state?.validation?.message;
25
- $: spec_fieldtype_editable = $field.spec?.params?.spec_fieldtype_editable ?? true;
26
- $: spec_name_editable = $field.spec?.params?.spec_name_editable ?? true;
27
- $: spec_fieldtype = $field.spec?.params?.spec_fieldtype;
28
- $: spec_name = $field.spec?.params?.spec_name;
29
-
30
- let views = {
31
- demo: !$field.spec?.params?.hide_demo && !$field.spec?.params?.demo_collapsed,
32
- settings: true,
33
- };
34
- let dependencies = form.dependencies;
35
- let default_field_wrapper = getContext("stubber-form-fields-default-wrapper");
36
-
37
- let all_form = writable();
38
- let initial_all_form;
39
- $: updateInitialAllForm(spec_fieldtype, spec_name, spec_fieldtype_editable, spec_name_editable);
40
- function updateInitialAllForm(ft, n, fte, ne) {
41
- let update_all_form = _.cloneDeep(initial_all_form || {});
42
- _.set(update_all_form, "spec.fields.name", {
43
- fieldtype: "dataindication",
44
- });
45
- _.set(update_all_form, "spec.fields.fieldtype", {
46
- fieldtype: "dataindication",
47
- });
48
- if (ne) {
49
- _.set(update_all_form, "spec.fields.name.fieldtype", "text");
50
- }
51
- if (fte) {
52
- _.set(update_all_form, "spec.fields.fieldtype.fieldtype", "select");
53
- _.set(update_all_form, "spec.fields.fieldtype.params.options", selectableFieldtypes);
54
- }
55
- if (!deepEqual(initial_all_form, update_all_form)) {
56
- let fieldtype = $field?.data?.base?.fieldtype ?? ft;
57
- if (!fte) fieldtype = ft ?? fieldtype ?? "text";
58
- let name = $field?.data?.base?.name ?? n;
59
- if (!ne) name = n ?? name ?? "field";
60
- _.set(update_all_form, "data.name", name);
61
- _.set(update_all_form, "data.fieldtype", fieldtype);
62
- initial_all_form = _.cloneDeep(update_all_form);
63
- }
64
- }
65
-
66
- let settings_form = writable();
67
- let initial_settings_form;
68
- $: updateInitialSettingsForm($all_form);
69
- function updateInitialSettingsForm(af) {
70
- let fieldtype = af?.data?.fieldtype;
71
- let name = af?.data?.name;
72
- if (!definitions[fieldtype]?.settings_form) return;
73
-
74
- let update_settings_form = _.cloneDeep(initial_settings_form || {});
75
-
76
- let settings_form_spec = _.cloneDeep(definitions[fieldtype]?.settings_form);
77
- let valid_fieldtype_settings_form = _.cloneDeep(definitions?._valid_fieldtype?.settings_form);
78
- let spec = _.merge({}, settings_form_spec, valid_fieldtype_settings_form);
79
- _.set(update_settings_form, "spec", spec);
80
-
81
- if (!deepEqual(initial_settings_form, update_settings_form)) {
82
- let data = _.cloneDeep(_.cloneDeep($settings_form?.data));
83
- _.set(data, "spec.fieldtype", fieldtype);
84
- _.set(data, "spec.name", name);
85
- _.set(update_settings_form, "data", data);
86
- initial_settings_form = _.cloneDeep(update_settings_form);
87
- }
88
- }
89
-
90
- let advanced_form = writable();
91
- let initial_advanced_form = {
92
- spec: {
93
- fields: {
94
- spec: {
95
- fieldtype: "jsoneditor",
96
- },
97
- },
98
- },
99
- data: {
100
- spec: $field?.data?.base,
101
- },
102
- };
103
-
104
- let demo_data_form = writable();
105
- let demo_form = writable();
106
- let initial_demo_form;
107
- $: debounceUpdateInitialDemoForm($settings_form?.data?.spec);
108
- const debounceUpdateInitialDemoForm = utils.debounce(updateInitialDemoForm, 100);
109
- function updateInitialDemoForm(s) {
110
- let fieldname = s?.name ?? "";
111
- let spec = _.cloneDeep(s);
112
- _.unset(spec, "conditions");
113
- let update = {
114
- spec: {
115
- fields: {
116
- [fieldname]: spec,
117
- },
118
- },
119
- };
120
-
121
- if (!deepEqual(initial_demo_form, update)) initial_demo_form = update;
122
- }
123
-
124
- onMount(() => {
125
- // set field values that aren't set yet
126
- let f = _.cloneDeep($field);
127
- let initial_value = !_.isObject(f?.data?.base) ? {} : f?.data?.base;
128
- let initial_data = {
129
- ...f?.data,
130
- base: initial_value,
131
- };
132
- _.set(f, "data", initial_data);
133
- if (!deepEqual(f, $field)) $field = f;
134
-
135
- syncStoreToStore(
136
- field,
137
- all_form,
138
- (a, b) => {
139
- let _clone = _.cloneDeep(b) || {};
140
- let spec = _.cloneDeep(a?.data?.base);
141
-
142
- // lowercase and remove all whitespace and replace with _
143
- let name = a?.data?.base?.name?.toLowerCase().replace(/\s/g, "_");
144
- let fieldtype = a?.data?.base?.fieldtype?.toLowerCase().replace(/\s/g, "_");
145
- if (name !== a?.data?.base?.name) $field.data.base.name = name;
146
- if (fieldtype !== a?.data?.base?.fieldtype) $field.data.base.fieldtype = fieldtype;
147
-
148
- _.set(_clone, "data.name", name);
149
- _.set(_clone, "data.fieldtype", fieldtype);
150
- return _clone;
151
- },
152
- (a, b) => {
153
- let _clone = _.cloneDeep(a) || {};
154
- _.set(_clone, "data.base.name", b?.data?.name);
155
- _.set(_clone, "data.base.fieldtype", b?.data?.fieldtype);
156
- return _clone;
157
- }
158
- );
159
-
160
- syncStoreToStore(
161
- field,
162
- settings_form,
163
- (a, b) => {
164
- let _clone = _.cloneDeep(b) || {};
165
- let spec = _.cloneDeep(a?.data?.base);
166
- spec.__key = spec.name;
167
- _.set(_clone, "data.spec", spec);
168
- return _clone;
169
- },
170
- (a, b) => {
171
- let _clone = _.cloneDeep(a) || {};
172
- let spec = _.cloneDeep(b?.data?.spec);
173
- spec.__key = spec.name;
174
- _.set(_clone, "data.base", spec);
175
- return _clone;
176
- }
177
- );
178
-
179
- syncStoreToStore(
180
- field,
181
- advanced_form,
182
- (a, b) => {
183
- let _clone = _.cloneDeep(b) || {};
184
- let spec = _.cloneDeep(a?.data?.base);
185
- spec.__key = spec.name;
186
- _.set(_clone, "data.spec", spec);
187
- return _clone;
188
- },
189
- (a, b) => {
190
- let _clone = _.cloneDeep(a) || {};
191
- let spec = _.cloneDeep(b?.data?.spec);
192
- spec.__key = spec.name;
193
- if (spec.__key !== b?.data?.spec?.__key) {
194
- $advanced_form.data.spec.__key = spec.__key;
195
- }
196
- _.set(_clone, "data.base", spec);
197
- return _clone;
198
- }
199
- );
200
-
201
- syncStoreToStore(
202
- demo_form,
203
- demo_data_form,
204
- (a, b) => {
205
- let _clone = _.cloneDeep(b) || {};
206
- _.set(_clone, "data.data", a?.data);
207
- return _clone;
208
- },
209
- (a, b) => {
210
- return a;
211
- }
212
- );
213
- });
214
- </script>
215
-
216
- <div class="flex flex-col w-full text-surface-900 my-2">
217
- <Label for="input_{state_key}" class="block text-label {hide_label ? 'hidden' : ''}">
218
- {label}
219
- </Label>
220
- <div class>
221
- <div class="bg-white">
222
- {#if $field?.data?.base?.name}
223
- <div class="text-xs text-surface-700 p-1 border-b">
224
- {$field.data.base.name}
225
- </div>
226
- {/if}
227
- <div class="flex items-center justify-start">
228
- {#if !$field?.spec?.params?.hide_demo}
229
- <button type="button" on:click={() => (views.demo = !views.demo)}>
230
- <div class="p-2 hover:bg-surface-100 rounded-sm">
231
- <div class="text-sm italic text-surface-500 flex justify-between items-center">
232
- <i class="fa-regular fa-input-pipe {views.demo ? 'text-primary-500' : ''}" />
233
- </div>
234
- </div>
235
- </button>
236
- {/if}
237
- <button type="button" on:click={() => (views.settings = !views.settings)}>
238
- <div class="p-2 hover:bg-surface-100 rounded-sm">
239
- <div class="text-sm italic text-surface-500 flex justify-between items-center">
240
- <i class="fa-regular fa-gear {views.settings ? 'text-primary-500' : ''}" />
241
- </div>
242
- </div>
243
- </button>
244
- <button type="button" on:click={() => (views.demo_data = !views.demo_data)}>
245
- <div class="p-2 hover:bg-surface-100 rounded-sm">
246
- <div class="text-sm italic text-surface-500 flex justify-between items-center">
247
- <i class="fa-regular fa-database {views.demo_data ? 'text-primary-500' : ''}" />
248
- </div>
249
- </div>
250
- </button>
251
- <button type="button" on:click={() => (views.advanced = !views.advanced)}>
252
- <div class="p-2 hover:bg-surface-100 rounded-sm">
253
- <div class="text-sm italic text-surface-500 flex justify-between items-center">
254
- <i class="fa-regular fa-brackets-curly {views.advanced ? 'text-primary-500' : ''}" />
255
- </div>
256
- </div>
257
- </button>
258
- </div>
259
- </div>
260
- {#if initial_demo_form}
261
- <div
262
- class="{views.demo && !$field.spec?.params?.hide_demo
263
- ? 'p-2'
264
- : 'invisible absolute'} min-h-[100px]"
265
- >
266
- {#if !$settings_form?.data?.spec?.name || !$settings_form?.data?.spec?.fieldtype}
267
- <div class="text-surface-500 text-xs italic">
268
- Cannot show field without a field name and field type
269
- </div>
270
- {:else}
271
- <div class="p-2">
272
- <Form
273
- bind:form={demo_form}
274
- initial_form={initial_demo_form}
275
- {dependencies}
276
- field_wrapper={default_field_wrapper}
277
- />
278
- </div>
279
- {/if}
280
- </div>
281
- {:else}
282
- <div class="p-2 text-sm text-surface-500 italic min-h-[100px]">Initializing...</div>
283
- {/if}
284
- <div class={views.settings ? "border-t p-2" : "invisible absolute"}>
285
- <div class="text-surface-500 text-xs pb-2 italic">
286
- <button type="button" on:click={() => (views.settings = false)}
287
- ><i class="fa-regular fa-circle-xmark text-sm" /></button
288
- > Field Settings
289
- </div>
290
- <div class="p-2">
291
- {#if initial_all_form}
292
- <Form
293
- bind:form={all_form}
294
- initial_form={initial_all_form}
295
- {dependencies}
296
- field_wrapper={FieldWrapper}
297
- />
298
- {/if}
299
- {#if initial_settings_form}
300
- <Form
301
- bind:form={settings_form}
302
- initial_form={initial_settings_form}
303
- {dependencies}
304
- field_wrapper={FieldWrapper}
305
- />
306
- {/if}
307
- </div>
308
- </div>
309
- <div class={views.demo_data ? "border-t p-2" : "invisible absolute"}>
310
- <div class="text-surface-500 text-xs pb-2 italic">
311
- <button type="button" on:click={() => (views.demo_data = false)}
312
- ><i class="fa-regular fa-circle-xmark text-sm" /></button
313
- > Demo Field Data
314
- </div>
315
- {#if initial_demo_form}
316
- <Form
317
- bind:form={demo_data_form}
318
- initial_form={{
319
- spec: {
320
- fields: {
321
- data: { fieldtype: "jsoneditor", hide_label: true, params: { readonly: true } },
322
- },
323
- },
324
- }}
325
- {dependencies}
326
- />
327
- {/if}
328
- </div>
329
- <div class={views.advanced ? "border-t p-2" : "invisible absolute"}>
330
- <div class="text-surface-500 text-xs pb-2 italic">
331
- <button type="button" on:click={() => (views.advanced = false)}
332
- ><i class="fa-regular fa-circle-xmark text-sm" /></button
333
- > Advanced Field Settings
334
- </div>
335
- {#if initial_advanced_form}
336
- <Form bind:form={advanced_form} initial_form={initial_advanced_form} {dependencies} />
337
- {/if}
338
- </div>
339
- </div>
340
- {#if validationMessage}
341
- <Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
342
- {/if}
343
- </div>
@@ -1,27 +0,0 @@
1
- /** @typedef {typeof __propDef.props} FieldbuilderProps */
2
- /** @typedef {typeof __propDef.events} FieldbuilderEvents */
3
- /** @typedef {typeof __propDef.slots} FieldbuilderSlots */
4
- export default class Fieldbuilder extends SvelteComponent<{
5
- form: any;
6
- field: any;
7
- }, {
8
- [evt: string]: CustomEvent<any>;
9
- }, {}> {
10
- }
11
- export type FieldbuilderProps = typeof __propDef.props;
12
- export type FieldbuilderEvents = typeof __propDef.events;
13
- export type FieldbuilderSlots = typeof __propDef.slots;
14
- import { SvelteComponent } from "svelte";
15
- declare const __propDef: {
16
- props: {
17
- form: any;
18
- field: any;
19
- };
20
- events: {
21
- [evt: string]: CustomEvent<any>;
22
- };
23
- slots: {};
24
- exports?: undefined;
25
- bindings?: undefined;
26
- };
27
- export {};
@@ -1,122 +0,0 @@
1
- <script>
2
- import { Form } from "../..";
3
- import _ from "lodash-es";
4
- import { syncStoreToStore } from "../../utils/syncing";
5
- import { writable } from "svelte/store";
6
- import { onMount } from "svelte";
7
- import { deepEqual } from "fast-equals";
8
-
9
- import { Label } from "@stubber/ui/label";
10
-
11
- export let form;
12
- export let field;
13
-
14
- let dependencies = form.dependencies;
15
-
16
- $: state_key = $field.state?.state_key;
17
- $: label = $field.spec?.title;
18
- $: hide_label = $field.spec?.hide_label;
19
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
20
- $: validationMessage = $field.state?.validation?.message;
21
-
22
- let settings_form = writable();
23
-
24
- let initial_form;
25
-
26
- onMount(() => {
27
- // set field values that aren't set yet
28
- let f = _.cloneDeep($field);
29
- let initial_value = f?.data?.base ?? {};
30
- let initial_data = _.merge(
31
- {
32
- base: initial_value,
33
- },
34
- f?.data
35
- );
36
- _.set(f, "data", initial_data);
37
- if (!deepEqual(f, $field)) $field = f;
38
-
39
- initial_form = {
40
- spec: {
41
- fields: {
42
- fields: {
43
- fieldtype: "arraybuilder",
44
- hide_label: true,
45
- params: {
46
- new_entry_field: {
47
- fieldtype: "fieldbuilder",
48
- params: {
49
- spec_fieldtype_editable: true,
50
- spec_name_editable: true,
51
- hide_demo: f.spec?.params?.hide_demo,
52
- demo_collapsed: f.spec?.params?.demo_collapsed,
53
- },
54
- },
55
- },
56
- },
57
- },
58
- },
59
- data: {
60
- fields: _.cloneDeep(
61
- Object.entries(initial_value)
62
- .sort((a, b) => a[1]?.__order - b[1]?.__order)
63
- .map((e) => {
64
- return {
65
- ...e[1],
66
- name: e[0],
67
- __key: e[0],
68
- };
69
- })
70
- ),
71
- },
72
- };
73
-
74
- syncStoreToStore(
75
- field,
76
- settings_form,
77
- (a, b) => {
78
- let _clone = _.cloneDeep(b) || {};
79
-
80
- let fields = Object.entries(a?.data?.base)
81
- .sort((a, b) => a[1]?.__order - b[1]?.__order)
82
- .map((e) => {
83
- return {
84
- ...e[1],
85
- name: e[0],
86
- __key: e[0],
87
- };
88
- });
89
-
90
- _.set(_clone, "data.fields", fields);
91
-
92
- return _clone;
93
- },
94
- (a, b) => {
95
- let _clone = _.cloneDeep(a) || {};
96
-
97
- let base = b.data.fields.reduce((acc, curr, index) => {
98
- acc[curr.name] = {
99
- ...curr,
100
- __order: index,
101
- };
102
- return acc;
103
- }, {});
104
-
105
- _.set(_clone, "data.base", base);
106
- return _clone;
107
- }
108
- );
109
- });
110
- </script>
111
-
112
- <div class="flex flex-col w-full text-surface-900 my-2">
113
- <Label for="input_{state_key}" class="block {hide_label ? 'hidden' : ''}">
114
- {label}
115
- </Label>
116
- {#if initial_form}
117
- <Form bind:form={settings_form} {initial_form} {dependencies} />
118
- {/if}
119
- {#if validationMessage}
120
- <Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
121
- {/if}
122
- </div>
@@ -1,27 +0,0 @@
1
- /** @typedef {typeof __propDef.props} FieldsbuilderProps */
2
- /** @typedef {typeof __propDef.events} FieldsbuilderEvents */
3
- /** @typedef {typeof __propDef.slots} FieldsbuilderSlots */
4
- export default class Fieldsbuilder extends SvelteComponent<{
5
- form: any;
6
- field: any;
7
- }, {
8
- [evt: string]: CustomEvent<any>;
9
- }, {}> {
10
- }
11
- export type FieldsbuilderProps = typeof __propDef.props;
12
- export type FieldsbuilderEvents = typeof __propDef.events;
13
- export type FieldsbuilderSlots = typeof __propDef.slots;
14
- import { SvelteComponent } from "svelte";
15
- declare const __propDef: {
16
- props: {
17
- form: any;
18
- field: any;
19
- };
20
- events: {
21
- [evt: string]: CustomEvent<any>;
22
- };
23
- slots: {};
24
- exports?: undefined;
25
- bindings?: undefined;
26
- };
27
- export {};