@stubber/form-fields 1.7.10 → 2.0.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/select-field.svelte +6 -3
  3. package/dist/{fields2 → form-fields}/utils.d.ts +1 -0
  4. package/dist/{fields2 → form-fields}/utils.js +9 -1
  5. package/dist/utils/input_regex_mask.d.ts +3 -0
  6. package/dist/utils/input_regex_mask.js +25 -0
  7. package/package.json +4 -8
  8. package/dist/Field.svelte +0 -36
  9. package/dist/Field.svelte.d.ts +0 -33
  10. package/dist/Form.svelte +0 -34
  11. package/dist/Form.svelte.d.ts +0 -31
  12. package/dist/NullFieldWrapper.svelte +0 -6
  13. package/dist/NullFieldWrapper.svelte.d.ts +0 -27
  14. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte +0 -74
  15. package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte.d.ts +0 -31
  16. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte +0 -8
  17. package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte.d.ts +0 -27
  18. package/dist/fields/components/AgGrid.svelte +0 -46
  19. package/dist/fields/components/AgGrid.svelte.d.ts +0 -20
  20. package/dist/fields/components/Arraybuilder.svelte +0 -98
  21. package/dist/fields/components/Arraybuilder.svelte.d.ts +0 -27
  22. package/dist/fields/components/Checkbox.svelte +0 -89
  23. package/dist/fields/components/Checkbox.svelte.d.ts +0 -25
  24. package/dist/fields/components/CheckboxAutocomplete.svelte +0 -95
  25. package/dist/fields/components/CheckboxAutocomplete.svelte.d.ts +0 -25
  26. package/dist/fields/components/Code.svelte +0 -133
  27. package/dist/fields/components/Code.svelte.d.ts +0 -18
  28. package/dist/fields/components/Contactselector.svelte +0 -71
  29. package/dist/fields/components/Contactselector.svelte.d.ts +0 -27
  30. package/dist/fields/components/Currency.svelte +0 -264
  31. package/dist/fields/components/Currency.svelte.d.ts +0 -25
  32. package/dist/fields/components/Dataindication.svelte +0 -31
  33. package/dist/fields/components/Dataindication.svelte.d.ts +0 -25
  34. package/dist/fields/components/Date.svelte +0 -97
  35. package/dist/fields/components/Date.svelte.d.ts +0 -25
  36. package/dist/fields/components/Datetime.svelte +0 -97
  37. package/dist/fields/components/Datetime.svelte.d.ts +0 -25
  38. package/dist/fields/components/Email.svelte +0 -125
  39. package/dist/fields/components/Email.svelte.d.ts +0 -25
  40. package/dist/fields/components/Fieldbuilder.svelte +0 -343
  41. package/dist/fields/components/Fieldbuilder.svelte.d.ts +0 -27
  42. package/dist/fields/components/Fieldsbuilder.svelte +0 -122
  43. package/dist/fields/components/Fieldsbuilder.svelte.d.ts +0 -27
  44. package/dist/fields/components/File.svelte +0 -231
  45. package/dist/fields/components/File.svelte.d.ts +0 -27
  46. package/dist/fields/components/Heading.svelte +0 -17
  47. package/dist/fields/components/Heading.svelte.d.ts +0 -25
  48. package/dist/fields/components/Hidden.svelte +0 -7
  49. package/dist/fields/components/Hidden.svelte.d.ts +0 -25
  50. package/dist/fields/components/Hiddenlocation.svelte +0 -28
  51. package/dist/fields/components/Hiddenlocation.svelte.d.ts +0 -25
  52. package/dist/fields/components/Html.svelte +0 -13
  53. package/dist/fields/components/Html.svelte.d.ts +0 -25
  54. package/dist/fields/components/Jsoneditor.svelte +0 -133
  55. package/dist/fields/components/Jsoneditor.svelte.d.ts +0 -25
  56. package/dist/fields/components/Map.svelte +0 -192
  57. package/dist/fields/components/Map.svelte.d.ts +0 -27
  58. package/dist/fields/components/Multicheckbox.svelte +0 -77
  59. package/dist/fields/components/Multicheckbox.svelte.d.ts +0 -25
  60. package/dist/fields/components/Multistep.svelte +0 -86
  61. package/dist/fields/components/Multistep.svelte.d.ts +0 -27
  62. package/dist/fields/components/Note.svelte +0 -92
  63. package/dist/fields/components/Note.svelte.d.ts +0 -25
  64. package/dist/fields/components/Number.svelte +0 -119
  65. package/dist/fields/components/Number.svelte.d.ts +0 -25
  66. package/dist/fields/components/Objectbuilder.svelte +0 -154
  67. package/dist/fields/components/Objectbuilder.svelte.d.ts +0 -27
  68. package/dist/fields/components/Qrcodescanner.svelte +0 -196
  69. package/dist/fields/components/Qrcodescanner.svelte.d.ts +0 -25
  70. package/dist/fields/components/Radio.svelte +0 -117
  71. package/dist/fields/components/Radio.svelte.d.ts +0 -25
  72. package/dist/fields/components/Renderfield.svelte +0 -58
  73. package/dist/fields/components/Renderfield.svelte.d.ts +0 -27
  74. package/dist/fields/components/Screenrecorder.svelte +0 -276
  75. package/dist/fields/components/Screenrecorder.svelte.d.ts +0 -27
  76. package/dist/fields/components/Screenshot.svelte +0 -269
  77. package/dist/fields/components/Screenshot.svelte.d.ts +0 -27
  78. package/dist/fields/components/Scrollandreaddisplay.svelte +0 -122
  79. package/dist/fields/components/Scrollandreaddisplay.svelte.d.ts +0 -25
  80. package/dist/fields/components/Section.svelte +0 -87
  81. package/dist/fields/components/Section.svelte.d.ts +0 -27
  82. package/dist/fields/components/Select.svelte +0 -161
  83. package/dist/fields/components/Select.svelte.d.ts +0 -31
  84. package/dist/fields/components/Selectresource.svelte +0 -57
  85. package/dist/fields/components/Selectresource.svelte.d.ts +0 -27
  86. package/dist/fields/components/Signature.svelte +0 -152
  87. package/dist/fields/components/Signature.svelte.d.ts +0 -27
  88. package/dist/fields/components/Slider.svelte +0 -101
  89. package/dist/fields/components/Slider.svelte.d.ts +0 -25
  90. package/dist/fields/components/SmartText.svelte +0 -351
  91. package/dist/fields/components/SmartText.svelte.d.ts +0 -25
  92. package/dist/fields/components/Telephone.svelte +0 -156
  93. package/dist/fields/components/Telephone.svelte.d.ts +0 -25
  94. package/dist/fields/components/Text.svelte +0 -107
  95. package/dist/fields/components/Text.svelte.d.ts +0 -25
  96. package/dist/fields/components/Voicenote.svelte +0 -267
  97. package/dist/fields/components/Voicenote.svelte.d.ts +0 -27
  98. package/dist/fields/components/index.d.ts +0 -84
  99. package/dist/fields/components/index.js +0 -85
  100. package/dist/fields/definitions/all.json +0 -38
  101. package/dist/fields/definitions/arraybuilder.json +0 -39
  102. package/dist/fields/definitions/checkbox.json +0 -44
  103. package/dist/fields/definitions/code.json +0 -15
  104. package/dist/fields/definitions/contactselector.json +0 -15
  105. package/dist/fields/definitions/currency.json +0 -42
  106. package/dist/fields/definitions/dataindication.json +0 -16
  107. package/dist/fields/definitions/date.json +0 -16
  108. package/dist/fields/definitions/datetime.json +0 -15
  109. package/dist/fields/definitions/email.json +0 -16
  110. package/dist/fields/definitions/fieldbuilder.json +0 -64
  111. package/dist/fields/definitions/fieldsbuilder.json +0 -38
  112. package/dist/fields/definitions/file.json +0 -42
  113. package/dist/fields/definitions/grid.json +0 -47
  114. package/dist/fields/definitions/heading.json +0 -38
  115. package/dist/fields/definitions/hidden.json +0 -89
  116. package/dist/fields/definitions/hiddenlocation.json +0 -15
  117. package/dist/fields/definitions/html.json +0 -34
  118. package/dist/fields/definitions/index.d.ts +0 -90
  119. package/dist/fields/definitions/index.js +0 -99
  120. package/dist/fields/definitions/jsoneditor.json +0 -33
  121. package/dist/fields/definitions/map.json +0 -36
  122. package/dist/fields/definitions/multicheckbox.json +0 -47
  123. package/dist/fields/definitions/multistep.json +0 -35
  124. package/dist/fields/definitions/note.json +0 -16
  125. package/dist/fields/definitions/number.json +0 -42
  126. package/dist/fields/definitions/objectbuilder.json +0 -39
  127. package/dist/fields/definitions/placeholder.json +0 -15
  128. package/dist/fields/definitions/qrcodescanner.json +0 -16
  129. package/dist/fields/definitions/radio.json +0 -47
  130. package/dist/fields/definitions/renderfield.json +0 -36
  131. package/dist/fields/definitions/richtext.json +0 -16
  132. package/dist/fields/definitions/screenrecorder.json +0 -42
  133. package/dist/fields/definitions/screenshot.json +0 -42
  134. package/dist/fields/definitions/scrollandreaddisplay.json +0 -49
  135. package/dist/fields/definitions/section.json +0 -50
  136. package/dist/fields/definitions/select.json +0 -47
  137. package/dist/fields/definitions/selectresource.json +0 -48
  138. package/dist/fields/definitions/signature.json +0 -16
  139. package/dist/fields/definitions/slider.json +0 -78
  140. package/dist/fields/definitions/smarttext.json +0 -101
  141. package/dist/fields/definitions/telephone.json +0 -16
  142. package/dist/fields/definitions/text.json +0 -35
  143. package/dist/fields/definitions/validfieldtype.json +0 -220
  144. package/dist/fields/definitions/voicenote.json +0 -43
  145. package/dist/index.d.ts +0 -2
  146. package/dist/index.js +0 -3
  147. package/dist/thirdparty/mapbox/GeoCoder.svelte +0 -10
  148. package/dist/thirdparty/mapbox/GeoCoder.svelte.d.ts +0 -27
  149. package/dist/thirdparty/mapbox/Map.svelte +0 -30
  150. package/dist/thirdparty/mapbox/Map.svelte.d.ts +0 -22
  151. package/dist/thirdparty/mapbox/MapMarker.svelte +0 -13
  152. package/dist/thirdparty/mapbox/MapMarker.svelte.d.ts +0 -33
  153. package/dist/utils/createField.d.ts +0 -6
  154. package/dist/utils/createField.js +0 -33
  155. package/dist/utils/createForm.d.ts +0 -1
  156. package/dist/utils/createForm.js +0 -501
  157. package/dist/utils/index.d.ts +0 -18
  158. package/dist/utils/index.js +0 -126
  159. package/dist/utils/syncing.d.ts +0 -11
  160. package/dist/utils/syncing.js +0 -134
  161. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte +0 -0
  162. /package/dist/{fields2 → form-fields}/FieldExprToggle.svelte.d.ts +0 -0
  163. /package/dist/{fields2 → form-fields}/FieldLabel.svelte +0 -0
  164. /package/dist/{fields2 → form-fields}/FieldLabel.svelte.d.ts +0 -0
  165. /package/dist/{fields2 → form-fields}/FieldMessage.svelte +0 -0
  166. /package/dist/{fields2 → form-fields}/FieldMessage.svelte.d.ts +0 -0
  167. /package/dist/{fields2 → form-fields}/Form.svelte +0 -0
  168. /package/dist/{fields2 → form-fields}/Form.svelte.d.ts +0 -0
  169. /package/dist/{fields2 → form-fields}/fileserver.d.ts +0 -0
  170. /package/dist/{fields2 → form-fields}/fileserver.js +0 -0
  171. /package/dist/{fields2 → form-fields}/form-field.svelte +0 -0
  172. /package/dist/{fields2 → form-fields}/form-field.svelte.d.ts +0 -0
  173. /package/dist/{fields2 → form-fields}/index.d.ts +0 -0
  174. /package/dist/{fields2 → form-fields}/index.js +0 -0
  175. /package/dist/{fields2 → form-fields}/interfaces.d.ts +0 -0
  176. /package/dist/{fields2 → form-fields}/interfaces.js +0 -0
  177. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte +0 -0
  178. /package/dist/{fields2 → form-fields}/sub/array-builder-field.svelte.d.ts +0 -0
  179. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte +0 -0
  180. /package/dist/{fields2 → form-fields}/sub/checkbox-autocomplete.svelte.d.ts +0 -0
  181. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte +0 -0
  182. /package/dist/{fields2 → form-fields}/sub/checkbox-field.svelte.d.ts +0 -0
  183. /package/dist/{fields2 → form-fields}/sub/code-field.svelte +0 -0
  184. /package/dist/{fields2 → form-fields}/sub/code-field.svelte.d.ts +0 -0
  185. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte +0 -0
  186. /package/dist/{fields2 → form-fields}/sub/contact-selector-field.svelte.d.ts +0 -0
  187. /package/dist/{fields2 → form-fields}/sub/currency-field.svelte.d.ts +0 -0
  188. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte +0 -0
  189. /package/dist/{fields2 → form-fields}/sub/data-indication-field.svelte.d.ts +0 -0
  190. /package/dist/{fields2 → form-fields}/sub/date-field.svelte +0 -0
  191. /package/dist/{fields2 → form-fields}/sub/date-field.svelte.d.ts +0 -0
  192. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte +0 -0
  193. /package/dist/{fields2 → form-fields}/sub/date-time-field.svelte.d.ts +0 -0
  194. /package/dist/{fields2 → form-fields}/sub/email-field.svelte +0 -0
  195. /package/dist/{fields2 → form-fields}/sub/email-field.svelte.d.ts +0 -0
  196. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte +0 -0
  197. /package/dist/{fields2 → form-fields}/sub/field-builder-field.svelte.d.ts +0 -0
  198. /package/dist/{fields2 → form-fields}/sub/file-field.svelte +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,25 +0,0 @@
1
- /** @typedef {typeof __propDef.props} TelephoneProps */
2
- /** @typedef {typeof __propDef.events} TelephoneEvents */
3
- /** @typedef {typeof __propDef.slots} TelephoneSlots */
4
- export default class Telephone extends SvelteComponent<{
5
- field: any;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type TelephoneProps = typeof __propDef.props;
11
- export type TelephoneEvents = typeof __propDef.events;
12
- export type TelephoneSlots = 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,107 +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 { Input } from "@stubber/ui/input";
9
- import { Label } from "@stubber/ui/label";
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
- $: parse_string = $field.spec?.params?.parse_string;
21
-
22
- onMount(() => {
23
- // set field values that aren't set yet
24
- let f = _.cloneDeep($field);
25
- let initial_value = f?.data?.base ?? "";
26
- let initial_data = {
27
- ...f?.data,
28
- base: initial_value,
29
- };
30
- let initial_state_internal = {
31
- ...f?.state?.internal,
32
- raw: initial_value,
33
- };
34
- _.set(f, "data", initial_data);
35
- _.set(f, "state.internal", initial_state_internal);
36
- if (!deepEqual(f, $field)) $field = f;
37
-
38
- syncStoreToStore(
39
- field,
40
- internal,
41
- (a, b) => {
42
- let _clone = _.cloneDeep(a.state?.internal) || {};
43
-
44
- // get parts from data
45
- _clone.raw = a?.data?.base;
46
-
47
- // set field state if changed
48
- if (!deepEqual(a?.state?.internal, _clone)) {
49
- $field.state.internal = _clone;
50
- }
51
-
52
- return _clone;
53
- },
54
- (a, b) => {
55
- let _clone = _.cloneDeep(a) || {};
56
- // update the state
57
- _.set(_clone, "state.internal", _.cloneDeep(b));
58
- // update the data
59
- const final_value = parse_string ? parse_string_value(b?.raw) : b?.raw;
60
- _.set(_clone, "data.base", final_value);
61
- return _clone;
62
- },
63
- null,
64
- 300
65
- );
66
- });
67
-
68
- function parse_string_value(value) {
69
- if (value === "true") return true;
70
- if (value === "false") return false;
71
-
72
- // convert to number if possible
73
- if (!isNaN(value) && value !== "") {
74
- return Number(value);
75
- }
76
-
77
- return value;
78
- }
79
- </script>
80
-
81
- {#if $internal}
82
- <div class="flex flex-col w-full my-2">
83
- <Label for="input_{state_key}" class="block py-2 {hide_label ? 'hidden' : ''}">
84
- {label}
85
- </Label>
86
- <div class="relative rounded-md">
87
- <Input
88
- on:keydown={(e) => {
89
- if (e.key === "Enter") {
90
- e.preventDefault();
91
- }
92
- }}
93
- type="text"
94
- id="input_{state_key}"
95
- placeholder={label}
96
- class="block w-full {!isValid ? 'ring-danger-500' : 'ring-surface-300 '}"
97
- name={state_key}
98
- bind:value={$internal.raw}
99
- />
100
- </div>
101
- {#if validationMessage}
102
- <Label class="mt-1.5 {!isValid ? `text-danger-500` : `text-success-500`}"
103
- >{validationMessage}</Label
104
- >
105
- {/if}
106
- </div>
107
- {/if}
@@ -1,25 +0,0 @@
1
- /** @typedef {typeof __propDef.props} TextProps */
2
- /** @typedef {typeof __propDef.events} TextEvents */
3
- /** @typedef {typeof __propDef.slots} TextSlots */
4
- export default class Text extends SvelteComponent<{
5
- field: any;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type TextProps = typeof __propDef.props;
11
- export type TextEvents = typeof __propDef.events;
12
- export type TextSlots = 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,267 +0,0 @@
1
- <script>
2
- import { onMount } from "svelte";
3
- import { Button } from "@stubber/ui/button";
4
- import _ from "lodash-es";
5
- import { deepEqual } from "fast-equals";
6
- import { writable } from "svelte/store";
7
- import { syncStoreToStore } from "../../utils/syncing";
8
-
9
- import { Label } from "@stubber/ui/label";
10
-
11
- export let form;
12
- export let field;
13
-
14
- const internal = writable({});
15
-
16
- let isRecording;
17
- let media = [];
18
- let mediaRecorder = null;
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
- $: max_files = isNaN(parseInt($field.spec?.params?.max_files))
26
- ? Infinity
27
- : parseInt($field.spec?.params?.max_files);
28
- $: limit_remaining =
29
- max_files - ($internal?.selected_files?.length ?? 0) - ($internal?.uploaded_files?.length ?? 0);
30
-
31
- onMount(() => {
32
- // set field values that aren't set yet
33
- let f = _.cloneDeep($field);
34
- let initial_value = _.isArray(f?.data?.base) ? f?.data?.base : [];
35
- let initial_data = {
36
- ...f?.data,
37
- base: initial_value,
38
- };
39
- let initial_state_internal = {
40
- selected_files: [],
41
- uploaded_files: initial_value,
42
- failed_files: [],
43
- };
44
-
45
- _.set(f, "data", initial_data);
46
- _.set(f, "state.internal", initial_state_internal);
47
- if (!deepEqual(f, $field)) $field = f;
48
-
49
- syncStoreToStore(
50
- field,
51
- internal,
52
- (a, b) => {
53
- let _clone = _.cloneDeep(a.state?.internal) || {};
54
-
55
- // get parts from data
56
- let files = _.isArray(a?.data?.base) ? a?.data?.base : [];
57
- _clone.uploaded_files = files;
58
-
59
- // set field state if changed
60
- if (!deepEqual(a?.state?.internal, _clone)) {
61
- $field.state.internal = _clone;
62
- }
63
- return _clone;
64
- },
65
- (a, b) => {
66
- let _clone = _.cloneDeep(a) || {};
67
- // update the state
68
- _.set(_clone, "state.internal", _.cloneDeep(b));
69
- // update the data
70
- _.set(_clone, "data.base", b?.uploaded_files);
71
- return _clone;
72
- }
73
- );
74
- });
75
-
76
- async function initializeMediaRecorder() {
77
- const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
78
- mediaRecorder = new MediaRecorder(stream);
79
- mediaRecorder.ondataavailable = (e) => media.push(e.data);
80
- mediaRecorder.onstop = function () {
81
- let id = Math.random().toString(36).substring(7);
82
- let filename = `${$field.spec?.name}_${id}.ogg`;
83
- let blob = new Blob(media, { type: "audio/ogg; codecs=opus" });
84
- let file = new File([blob], filename, { type: "audio/ogg; codecs=opus" });
85
- uploadFile(file, blob, filename);
86
- media = [];
87
- mediaRecorder = null;
88
- };
89
- }
90
-
91
- async function startRecording() {
92
- if (limit_remaining <= 0) {
93
- alert("You have reached the maximum number of files allowed");
94
- return;
95
- }
96
- await initializeMediaRecorder();
97
- mediaRecorder.start();
98
- }
99
-
100
- function stopRecording() {
101
- mediaRecorder.stop();
102
- }
103
-
104
- function toggleRecording() {
105
- isRecording = !isRecording;
106
- if (isRecording) {
107
- startRecording();
108
- } else {
109
- stopRecording();
110
- }
111
- }
112
-
113
- async function uploadFile(file, blob, filename) {
114
- let comparison = _.cloneDeep($internal);
115
- let f_id = Math.random().toString(36).substring(7);
116
- comparison.selected_files = comparison.selected_files || [];
117
- comparison.selected_files.push({
118
- blob,
119
- file,
120
- filename,
121
- f_id,
122
- });
123
- if (!deepEqual(comparison, $internal)) {
124
- $internal = comparison;
125
- }
126
-
127
- let upload_res = await form.uploadFiles([file]);
128
- let { uploaded_files } = upload_res || {};
129
-
130
- let comparison2 = _.cloneDeep($internal);
131
- if (_.isArray(uploaded_files)) {
132
- uploaded_files.forEach((a) => {
133
- a.f_id = f_id;
134
- form.appendAttachment(a);
135
- comparison2.uploaded_files.push(a);
136
- });
137
- }
138
-
139
- if (!uploaded_files?.length) {
140
- comparison2.failed_files.push({
141
- file,
142
- filename,
143
- f_id,
144
- });
145
- }
146
-
147
- comparison2.selected_files = comparison2.selected_files.filter((f) => {
148
- return f.f_id !== f_id;
149
- });
150
-
151
- if (!deepEqual(comparison2, $internal)) {
152
- $internal = comparison2;
153
- }
154
- }
155
-
156
- function removeFile(item) {
157
- let name = item?.file?.filename ?? item?.file?.name;
158
- let comparison = _.cloneDeep($internal);
159
- comparison.selected_files = comparison.selected_files?.filter((f) => f.f_id !== item.file.f_id);
160
- comparison.failed_files = comparison.failed_files?.filter((f) => f.f_id !== item.file.f_id);
161
- comparison.uploaded_files = comparison.uploaded_files?.filter((f) => f.f_id !== item.file.f_id);
162
-
163
- if (!deepEqual(comparison, $internal)) {
164
- $internal = comparison;
165
- }
166
-
167
- if (item?.is_uploaded) {
168
- form.removeAttachment(item?.file);
169
- }
170
- }
171
-
172
- async function fileToBlob(file) {
173
- return new Blob([new Uint8Array(await file.arrayBuffer())], { type: file.type });
174
- }
175
-
176
- let fileList = [];
177
- $: formatFileList($internal);
178
- async function formatFileList(i) {
179
- let { uploaded_files, selected_files, failed_files } = i;
180
- let r = [];
181
- for (let item of uploaded_files || []) {
182
- r.push({
183
- file: item,
184
- filename: item.filename,
185
- is_uploaded: true,
186
- });
187
- }
188
- for (let item of selected_files || []) {
189
- r.push({
190
- ...item,
191
- is_selected: true,
192
- });
193
- }
194
- for (let item of failed_files || []) {
195
- r.push({
196
- ...item,
197
- is_failed: true,
198
- blob: await fileToBlob(item.file),
199
- });
200
- }
201
- fileList = r;
202
- }
203
-
204
- $: buttonLabel = isRecording ? "Stop recording" : "Start recording";
205
- </script>
206
-
207
- {#if $internal}
208
- <div class="flex flex-col w-full text-surface-900">
209
- <Label for="input_{state_key}" class="block py-2 {hide_label ? 'hidden' : ''}">
210
- {label}
211
- </Label>
212
- <div>
213
- <Button variant={isRecording ? "destructive" : "default"} on:click={toggleRecording}>
214
- {#if isRecording}
215
- <i class="fa-solid fa-microphone-slash" />
216
- {:else}
217
- <i class="fa-solid fa-microphone" />
218
- {/if}
219
- {buttonLabel}
220
- </Button>
221
- {#each fileList as item}
222
- <div class="w-full flex flex-row items-center">
223
- {#if item.is_uploaded}
224
- <div class="px-2">
225
- <i class="fa fa-check text-success-500" />
226
- </div>
227
- {:else if item.is_failed}
228
- <div class="px-2 space-x-2 flex items-center text-danger-400">
229
- <i class="fa-regular fa-triangle-exclamation" />
230
- <p class="hidden md:block text-fluid-md">Failed</p>
231
- </div>
232
- {:else}
233
- <div class="px-2 space-x-2 flex items-center text-surface-500">
234
- <p class="hidden md:block text-fluid-md">uploading...</p>
235
- <i class="fa fa-pulse fa-spinner" />
236
- </div>
237
- {/if}
238
- {#if item?.blob}
239
- <div class="shrink p-2">
240
- <div class="overflow-hidden">
241
- <audio controls src={window.URL.createObjectURL(item.blob)} />
242
- </div>
243
- </div>
244
- {:else}
245
- <div class="w-full shrink py-1 pl-2 truncate border border-surface-200 rounded-sm">
246
- <p class="text-surface-800 text-fluid-md">
247
- {item?.filename}
248
- </p>
249
- </div>
250
- {/if}
251
- <button
252
- type="button"
253
- class="shrink-0 fa-solid fa-2xs fa-x bg-surface-0 rounded-full border border-surface-0 hover:border-warning-500 hover:text-warning-500"
254
- on:click={() => {
255
- removeFile(item);
256
- }}
257
- />
258
- </div>
259
- {/each}
260
- </div>
261
- </div>
262
- {#if validationMessage}
263
- <p class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
264
- {validationMessage}
265
- </p>
266
- {/if}
267
- {/if}
@@ -1,27 +0,0 @@
1
- /** @typedef {typeof __propDef.props} VoicenoteProps */
2
- /** @typedef {typeof __propDef.events} VoicenoteEvents */
3
- /** @typedef {typeof __propDef.slots} VoicenoteSlots */
4
- export default class Voicenote extends SvelteComponent<{
5
- form: any;
6
- field: any;
7
- }, {
8
- [evt: string]: CustomEvent<any>;
9
- }, {}> {
10
- }
11
- export type VoicenoteProps = typeof __propDef.props;
12
- export type VoicenoteEvents = typeof __propDef.events;
13
- export type VoicenoteSlots = 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,84 +0,0 @@
1
- export namespace components {
2
- export { Arraybuilder as arraybuilder };
3
- export { Checkbox as checkbox };
4
- export { CheckboxAutocomplete as checkbox_autocomplete };
5
- export { Code as code };
6
- export { Contactselector as contactselector };
7
- export { Currency as currency };
8
- export { Dataindication as dataindication };
9
- export { Date as date };
10
- export { Datetime as datetime };
11
- export { Email as email };
12
- export { Fieldbuilder as fieldbuilder };
13
- export { Fieldsbuilder as fieldsbuilder };
14
- export { FileField as file };
15
- export { Heading as heading };
16
- export { Hidden as hidden };
17
- export { Hiddenlocation as hiddenlocation };
18
- export { Html as html };
19
- export { Jsoneditor as jsoneditor };
20
- export { Map as map };
21
- export { Multicheckbox as multicheckbox };
22
- export { Multistep as multistep };
23
- export { Note as note };
24
- export { Number as number };
25
- export { Objectbuilder as objectbuilder };
26
- export { Qrcodescanner as qrcodescanner };
27
- export { Radio as radio };
28
- export { Renderfield as renderfield };
29
- export { Note as richtext };
30
- export { Screenrecorder as screenrecorder };
31
- export { Screenshot as screenshot };
32
- export { Scrollandreaddisplay as scrollandreaddisplay };
33
- export { Section as section };
34
- export { Select as select };
35
- export { Selectresource as selectresource };
36
- export { Signature as signature };
37
- export { Slider as slider };
38
- export { Telephone as telephone };
39
- export { Text as text };
40
- export { Voicenote as voicenote };
41
- export { AgGrid as grid };
42
- export { SmartText as smart_text };
43
- export { Text as _placeholder };
44
- }
45
- import Arraybuilder from "./Arraybuilder.svelte";
46
- import Checkbox from "./Checkbox.svelte";
47
- import CheckboxAutocomplete from "./CheckboxAutocomplete.svelte";
48
- import Code from "./Code.svelte";
49
- import Contactselector from "./Contactselector.svelte";
50
- import Currency from "./Currency.svelte";
51
- import Dataindication from "./Dataindication.svelte";
52
- import Date from "./Date.svelte";
53
- import Datetime from "./Datetime.svelte";
54
- import Email from "./Email.svelte";
55
- import Fieldbuilder from "./Fieldbuilder.svelte";
56
- import Fieldsbuilder from "./Fieldsbuilder.svelte";
57
- import FileField from "./File.svelte";
58
- import Heading from "./Heading.svelte";
59
- import Hidden from "./Hidden.svelte";
60
- import Hiddenlocation from "./Hiddenlocation.svelte";
61
- import Html from "./Html.svelte";
62
- import Jsoneditor from "./Jsoneditor.svelte";
63
- import Map from "./Map.svelte";
64
- import Multicheckbox from "./Multicheckbox.svelte";
65
- import Multistep from "./Multistep.svelte";
66
- import Note from "./Note.svelte";
67
- import Number from "./Number.svelte";
68
- import Objectbuilder from "./Objectbuilder.svelte";
69
- import Qrcodescanner from "./Qrcodescanner.svelte";
70
- import Radio from "./Radio.svelte";
71
- import Renderfield from "./Renderfield.svelte";
72
- import Screenrecorder from "./Screenrecorder.svelte";
73
- import Screenshot from "./Screenshot.svelte";
74
- import Scrollandreaddisplay from "./Scrollandreaddisplay.svelte";
75
- import Section from "./Section.svelte";
76
- import Select from "./Select.svelte";
77
- import Selectresource from "./Selectresource.svelte";
78
- import Signature from "./Signature.svelte";
79
- import Slider from "./Slider.svelte";
80
- import Telephone from "./Telephone.svelte";
81
- import Text from "./Text.svelte";
82
- import Voicenote from "./Voicenote.svelte";
83
- import AgGrid from "./AgGrid.svelte";
84
- import SmartText from "./SmartText.svelte";
@@ -1,85 +0,0 @@
1
- import AgGrid from "./AgGrid.svelte";
2
- import Arraybuilder from "./Arraybuilder.svelte";
3
- import Checkbox from "./Checkbox.svelte";
4
- import Contactselector from "./Contactselector.svelte";
5
- import Currency from "./Currency.svelte";
6
- import Dataindication from "./Dataindication.svelte";
7
- import Date from "./Date.svelte";
8
- import Datetime from "./Datetime.svelte";
9
- import Email from "./Email.svelte";
10
- import Fieldbuilder from "./Fieldbuilder.svelte";
11
- import Fieldsbuilder from "./Fieldsbuilder.svelte";
12
- import FileField from "./File.svelte";
13
- import Heading from "./Heading.svelte";
14
- import Hidden from "./Hidden.svelte";
15
- import Hiddenlocation from "./Hiddenlocation.svelte";
16
- import Html from "./Html.svelte";
17
- import Jsoneditor from "./Jsoneditor.svelte";
18
- import Map from "./Map.svelte";
19
- import Multicheckbox from "./Multicheckbox.svelte";
20
- import Multistep from "./Multistep.svelte";
21
- import Note from "./Note.svelte";
22
- import Number from "./Number.svelte";
23
- import Objectbuilder from "./Objectbuilder.svelte";
24
- import Qrcodescanner from "./Qrcodescanner.svelte";
25
- import Radio from "./Radio.svelte";
26
- import Renderfield from "./Renderfield.svelte";
27
- import Screenrecorder from "./Screenrecorder.svelte";
28
- import Screenshot from "./Screenshot.svelte";
29
- import Scrollandreaddisplay from "./Scrollandreaddisplay.svelte";
30
- import Section from "./Section.svelte";
31
- import Select from "./Select.svelte";
32
- import Selectresource from "./Selectresource.svelte";
33
- import Signature from "./Signature.svelte";
34
- import Slider from "./Slider.svelte";
35
- import Telephone from "./Telephone.svelte";
36
- import Text from "./Text.svelte";
37
- import Voicenote from "./Voicenote.svelte";
38
- import SmartText from "./SmartText.svelte";
39
- import CheckboxAutocomplete from "./CheckboxAutocomplete.svelte";
40
- import Code from "./Code.svelte";
41
-
42
- export const components = {
43
- arraybuilder: Arraybuilder,
44
- checkbox: Checkbox,
45
- checkbox_autocomplete: CheckboxAutocomplete,
46
- code: Code,
47
- contactselector: Contactselector,
48
- currency: Currency,
49
- dataindication: Dataindication,
50
- date: Date,
51
- datetime: Datetime,
52
- email: Email,
53
- fieldbuilder: Fieldbuilder,
54
- fieldsbuilder: Fieldsbuilder,
55
- file: FileField,
56
- heading: Heading,
57
- hidden: Hidden,
58
- hiddenlocation: Hiddenlocation,
59
- html: Html,
60
- jsoneditor: Jsoneditor,
61
- map: Map,
62
- multicheckbox: Multicheckbox,
63
- multistep: Multistep,
64
- note: Note,
65
- number: Number,
66
- objectbuilder: Objectbuilder,
67
- qrcodescanner: Qrcodescanner,
68
- radio: Radio,
69
- renderfield: Renderfield,
70
- richtext: Note,
71
- screenrecorder: Screenrecorder,
72
- screenshot: Screenshot,
73
- scrollandreaddisplay: Scrollandreaddisplay,
74
- section: Section,
75
- select: Select,
76
- selectresource: Selectresource,
77
- signature: Signature,
78
- slider: Slider,
79
- telephone: Telephone,
80
- text: Text,
81
- voicenote: Voicenote,
82
- grid: AgGrid,
83
- smart_text: SmartText,
84
- _placeholder: Text,
85
- };
@@ -1,38 +0,0 @@
1
- {
2
- "fieldtype": "_all",
3
- "description": "Applies to all fields",
4
- "settings_form": {
5
- "fields": {
6
- "all_params": {
7
- "fieldtype": "section",
8
- "hide_label": true,
9
- "details": {
10
- "keyname": "spec"
11
- },
12
- "fields": {
13
- "name": {
14
- "title": "Field name",
15
- "fieldtype": "renderfield",
16
- "params": {
17
- "dynamic_fieldspec": {
18
- "fieldtype": "$boolean(form.data.spec_name_editable) ? 'text' : 'dataindication'"
19
- }
20
- }
21
- },
22
- "fieldtype": {
23
- "title": "Fieldtype",
24
- "fieldtype": "renderfield",
25
- "params": {
26
- "dynamic_fieldspec": {
27
- "fieldtype": "$boolean(form.data.spec_fieldtype_editable) ? 'select' : 'dataindication'",
28
- "params": {
29
- "options": "form.data.fieldtype_options"
30
- }
31
- }
32
- }
33
- }
34
- }
35
- }
36
- }
37
- }
38
- }