@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,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
- }