@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,27 +0,0 @@
1
- /** @typedef {typeof __propDef.props} SignatureProps */
2
- /** @typedef {typeof __propDef.events} SignatureEvents */
3
- /** @typedef {typeof __propDef.slots} SignatureSlots */
4
- export default class Signature extends SvelteComponent<{
5
- form: any;
6
- field: any;
7
- }, {
8
- [evt: string]: CustomEvent<any>;
9
- }, {}> {
10
- }
11
- export type SignatureProps = typeof __propDef.props;
12
- export type SignatureEvents = typeof __propDef.events;
13
- export type SignatureSlots = 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,101 +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
- export let field;
9
-
10
- const internal = writable();
11
-
12
- $: state_key = $field.state?.state_key;
13
- $: label = $field.spec?.title;
14
- $: hide_label = $field.spec?.hide_label;
15
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
16
- $: validationMessage = $field.state?.validation?.message;
17
- $: min = $field.spec?.params?.min ?? 0;
18
- $: max = $field.spec?.params?.max ?? 100;
19
- $: step = $field.spec?.params?.step ?? 1;
20
-
21
- onMount(() => {
22
- // set field values that aren't set yet
23
- let f = _.cloneDeep($field);
24
- let initial_value = f?.data?.base ?? "";
25
- let initial_data = {
26
- ...f?.data,
27
- base: initial_value,
28
- };
29
- let initial_state_internal = {
30
- ...f?.state?.internal,
31
- raw: initial_value,
32
- };
33
- _.set(f, "data", initial_data);
34
- _.set(f, "state.internal", initial_state_internal);
35
- if (!deepEqual(f, $field)) $field = f;
36
-
37
- syncStoreToStore(
38
- field,
39
- internal,
40
- (a, b) => {
41
- let _clone = _.cloneDeep(a.state?.internal) || {};
42
-
43
- // get parts from data
44
- _clone.raw = a?.data?.base;
45
-
46
- // set field state if changed
47
- if (!deepEqual(a?.state?.internal, _clone)) {
48
- $field.state.internal = _clone;
49
- }
50
-
51
- return _clone;
52
- },
53
- (a, b) => {
54
- let _clone = _.cloneDeep(a) || {};
55
- // update the state
56
- _.set(_clone, "state.internal", _.cloneDeep(b));
57
- // update the data
58
- _.set(_clone, "data.base", b?.raw);
59
- return _clone;
60
- },
61
- null,
62
- 300
63
- );
64
- });
65
- </script>
66
-
67
- {#if $internal}
68
- <div class="flex flex-col w-full text-surface-900">
69
- <label for="input_{state_key}" class="block text-label {hide_label ? 'hidden' : ''}">
70
- {label}
71
- </label>
72
- <div class="relative">
73
- <div class="flex justify-between items-end text-sm text-surface-300">
74
- <div>{min}</div>
75
- <div class="text-md text-surface-700">{$internal.raw}</div>
76
- <div>{max}</div>
77
- </div>
78
- <input
79
- on:keydown={(e) => {
80
- if (e.key === "Enter") {
81
- e.preventDefault();
82
- }
83
- }}
84
- {min}
85
- {max}
86
- {step}
87
- type="range"
88
- id="input_{state_key}"
89
- placeholder={label}
90
- class="block w-full text-field rounded-md border-0 mb-2 focus:outline-none"
91
- name={state_key}
92
- bind:value={$internal.raw}
93
- />
94
- </div>
95
- {#if validationMessage}
96
- <p class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
97
- {validationMessage}
98
- </p>
99
- {/if}
100
- </div>
101
- {/if}
@@ -1,25 +0,0 @@
1
- /** @typedef {typeof __propDef.props} SliderProps */
2
- /** @typedef {typeof __propDef.events} SliderEvents */
3
- /** @typedef {typeof __propDef.slots} SliderSlots */
4
- export default class Slider extends SvelteComponent<{
5
- field: any;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type SliderProps = typeof __propDef.props;
11
- export type SliderEvents = typeof __propDef.events;
12
- export type SliderSlots = 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,351 +0,0 @@
1
- <script>
2
- import { syncStoreToStore } from "../../utils/syncing";
3
- import {
4
- acceptCompletion,
5
- autocompletion,
6
- completionKeymap,
7
- startCompletion,
8
- } from "@codemirror/autocomplete";
9
- import { defaultKeymap, history, historyKeymap } from "@codemirror/commands";
10
- import { EditorState, StateField } from "@codemirror/state";
11
- import {
12
- Decoration,
13
- EditorView,
14
- MatchDecorator,
15
- ViewPlugin,
16
- keymap,
17
- placeholder,
18
- } from "@codemirror/view";
19
- import { deepEqual } from "fast-equals";
20
- import _ from "lodash-es";
21
- import { onDestroy, onMount } from "svelte";
22
- import { writable } from "svelte/store";
23
-
24
- import { Label } from "@stubber/ui/label";
25
-
26
- export let field;
27
-
28
- const internal = writable();
29
-
30
- $: state_key = $field.state?.state_key;
31
- $: label = $field.spec?.title;
32
- $: hide_label = $field.spec?.hide_label;
33
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
34
- $: validationMessage = $field.state?.validation?.message;
35
- $: parse_string = $field.spec?.params?.parse_string;
36
- $: auto_completions = $field.spec?.params?.auto_completions || [];
37
- $: code_language = $field.spec?.params?.code_language;
38
-
39
- let store_sync_sub;
40
-
41
- onMount(() => {
42
- // set field values that aren't set yet
43
- let f = _.cloneDeep($field);
44
- let initial_value = f?.data?.base ?? "";
45
- let initial_data = {
46
- ...f?.data,
47
- base: initial_value,
48
- };
49
- let initial_state_internal = {
50
- ...f?.state?.internal,
51
- raw: initial_value,
52
- };
53
- _.set(f, "data", initial_data);
54
- _.set(f, "state.internal", initial_state_internal);
55
- if (!deepEqual(f, $field)) $field = f;
56
-
57
- store_sync_sub = syncStoreToStore(
58
- field,
59
- internal,
60
- (a, b) => {
61
- let _clone = _.cloneDeep(a.state?.internal) || {};
62
-
63
- // get parts from data
64
- _clone.raw = a?.data?.base;
65
-
66
- // set field state if changed
67
- if (!deepEqual(a?.state?.internal, _clone)) {
68
- $field.state.internal = _clone;
69
-
70
- // update the editor content if it's different
71
- if (editor_view?.state.doc.toString() !== _clone.raw) {
72
- editor_view?.dispatch({
73
- changes: {
74
- from: 0,
75
- to: editor_view.state.doc.length,
76
- insert: _clone.raw,
77
- },
78
- });
79
- }
80
- }
81
-
82
- return _clone;
83
- },
84
- (a, b) => {
85
- let _clone = _.cloneDeep(a) || {};
86
- // update the state
87
- _.set(_clone, "state.internal", _.cloneDeep(b));
88
- // update the data
89
- const final_value = parse_string ? parse_string_value(b?.raw) : b?.raw;
90
- _.set(_clone, "data.base", final_value);
91
- return _clone;
92
- },
93
- null,
94
- 300
95
- );
96
- });
97
-
98
- onDestroy(() => {
99
- store_sync_sub?.destroy();
100
- });
101
-
102
- function parse_string_value(value) {
103
- if (value === "true") return true;
104
- if (value === "false") return false;
105
-
106
- // convert to number if possible
107
- if (!isNaN(value) && value !== "") {
108
- return Number(value);
109
- }
110
-
111
- return value;
112
- }
113
-
114
- // --------------------------------- CodeMirror Setup ---------------------------------
115
- function myCompletions(context) {
116
- /*
117
- "auto_completions": [
118
- {
119
- "match_before": "\{",
120
- "options": [
121
- {
122
- "label": "{{customer_name}}"
123
- },
124
- {
125
- "label": "{{stub.data.payment_amount}}"
126
- },
127
- {
128
- "label": "{{stub.subject}}"
129
- },
130
- {
131
- "label": "{{#sugartime 'now'}}{{/sugartime}}"
132
- },
133
- {
134
- "label": "{{#currency stub.data.cost}}{{/currency}}",
135
- "apply": "{{#currency "
136
- }
137
- ],
138
- }
139
- ],
140
- */
141
-
142
- // go through the completions and find the first one that matches the before
143
- // i.e. if match_before is \{, it means the completion should be shown when the user types {
144
- for (let completion of auto_completions) {
145
- if (!completion.match_before) continue;
146
-
147
- let before = context.matchBefore(new RegExp(completion.match_before));
148
- if (!before) continue;
149
- return {
150
- from: before.from,
151
- options: completion.options,
152
- validFor: /^.*$/,
153
- };
154
- }
155
-
156
- // use lodash to find the first auto_completion that has explicit set to true
157
- let explicit_completions = _.find(auto_completions, { explicit: true });
158
- // if the panel was explicitly opened, show the explicit completions
159
- if (explicit_completions && context.explicit) {
160
- return {
161
- from: context.pos,
162
- options: explicit_completions.options,
163
- validFor: /^.*$/,
164
- };
165
- }
166
-
167
- return null;
168
- }
169
-
170
- // right now, this is the only supported decoration by setting the code_language to 'handlebars'
171
- // in future, we could do away with this and use an actual language package for handlebars and our custom syntax
172
- function fake_handlebars_lang() {
173
- // Define a decorator for {{...}} and ~~ pattern
174
- const curly_decorator = new MatchDecorator({
175
- regexp: /(\{\{[^}]*\}\})|(~~[^\s]*)/g,
176
- decoration: Decoration.mark({ class: "curly-braces-highlight" }),
177
- });
178
-
179
- // Create the extension to add decorations
180
- return ViewPlugin.fromClass(
181
- class {
182
- curlies;
183
- blocks;
184
- constructor(view) {
185
- this.curlies = curly_decorator.createDeco(view);
186
- }
187
- update(update) {
188
- this.curlies = curly_decorator.updateDeco(update, this.curlies);
189
- }
190
- },
191
- {
192
- decorations: (instance) => instance.curlies,
193
- }
194
- );
195
- }
196
-
197
- // Define a state field to sync the doc with the internal svelte store
198
- const contentField = StateField.define({
199
- create() {
200
- return "";
201
- },
202
- update(value, transaction) {
203
- if (transaction.docChanged) {
204
- $internal.raw = transaction.newDoc.toString();
205
- return transaction.newDoc.toString();
206
- }
207
- return value;
208
- },
209
- });
210
-
211
- let editor_parent;
212
- /**
213
- * @type {EditorView}
214
- */
215
- let editor_view;
216
-
217
- $: is_string = typeof $internal?.raw === "string";
218
-
219
- const custom_completion_keymap = completionKeymap
220
- .filter((binding) => binding.key != "Enter")
221
- .concat([
222
- {
223
- key: "Enter",
224
- run: () => {
225
- return false;
226
- },
227
- },
228
- {
229
- key: "Tab",
230
- run: acceptCompletion,
231
- },
232
- {
233
- key: "Ctrl-Space",
234
- run: startCompletion,
235
- stopPropagation: true,
236
- },
237
- ]);
238
-
239
- $: {
240
- // check if internal.raw is not a string
241
- if (is_string) {
242
- if (editor_parent && !editor_view) {
243
- const extensions = [
244
- history({ newGroupDelay: 150 }),
245
- EditorView.lineWrapping,
246
- contentField,
247
- autocompletion({ override: [myCompletions], defaultKeymap: false }),
248
- placeholder(label),
249
- EditorView.contentAttributes.of({
250
- spellcheck: "true",
251
- }),
252
- keymap.of([...defaultKeymap, ...historyKeymap, ...custom_completion_keymap]),
253
- ];
254
-
255
- if (code_language === "handlebars") {
256
- // see https://codemirror.net/try/?example=Markdown%20code%20block%20highlighting for a better future implementation
257
- // we'd need a proper implementation of handlebars as a language package though
258
- extensions.push(fake_handlebars_lang());
259
- }
260
-
261
- editor_view = new EditorView({
262
- state: EditorState.create({
263
- doc: $internal.raw,
264
- extensions,
265
- }),
266
- parent: editor_parent,
267
- });
268
- }
269
- }
270
- }
271
- // --------------------------------- CodeMirror Setup ---------------------------------
272
- </script>
273
-
274
- {#if $internal && is_string}
275
- <div class="flex flex-col w-full text-surface-900 my-2">
276
- <Label for="input_{state_key}" class="block py-2 {hide_label ? 'hidden' : ''}">
277
- {label}
278
- </Label>
279
- <div
280
- bind:this={editor_parent}
281
- class=" stubber-cm text-sm {isValid ? 'stubber-valid' : 'stubber-invalid'}"
282
- />
283
- {#if validationMessage}
284
- <Label class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
285
- {validationMessage}
286
- </Label>
287
- {/if}
288
- </div>
289
- {:else}
290
- <div class="flex flex-col w-full text-surface-900">
291
- <Label for="input_{state_key}" class="block {hide_label ? 'hidden' : ''}">
292
- {label}
293
- </Label>
294
- <p class="text-surface-400">The value of this field is not a string.</p>
295
- </div>
296
- {/if}
297
-
298
- <style>
299
- .stubber-cm :global(.cm-editor) {
300
- /* Base styles */
301
- background-color: rgba(255, 255, 255, 0.85);
302
- border-radius: 0.375rem;
303
- --tw-border-opacity: 1;
304
- border-color: hsl(var(--input) / var(--tw-border-opacity, 1));
305
- border-width: 1px;
306
- border-style: solid;
307
- width: 100%;
308
- color: rgb(31 41 51);
309
-
310
- /* Top inset shadow only */
311
- box-shadow: inset 0px 16px 16px -16px rgba(0, 0, 0, 0.1333);
312
- }
313
-
314
- .stubber-cm :global(.cm-editor.cm-focused) {
315
- outline: none;
316
- border-width: 1px;
317
- border-color: hsl(var(--input) / var(--tw-border-opacity, 1));
318
- }
319
-
320
- .stubber-cm.stubber-valid :global(.cm-editor.cm-focused) {
321
- border-color: rgb(170, 170, 170, 0.5);
322
- }
323
-
324
- .stubber-cm.stubber-invalid :global(.cm-editor) {
325
- border-color: rgb(225 45 57);
326
- }
327
-
328
- .stubber-cm :global(.cm-editor .cm-scroller) {
329
- font-family: inherit;
330
- line-height: inherit;
331
- }
332
-
333
- .stubber-cm :global(.cm-editor .cm-content) {
334
- padding: 0;
335
- padding-top: 0.5rem;
336
- padding-bottom: 0.5rem;
337
- }
338
-
339
- .stubber-cm :global(.cm-editor .cm-line) {
340
- padding: 0;
341
- padding-left: 0.75rem;
342
- }
343
-
344
- .stubber-cm :global(.cm-editor .cm-placeholder) {
345
- color: hsl(var(--muted-foreground) / var(--tw-text-opacity, 1));
346
- }
347
-
348
- .stubber-cm :global(.curly-braces-highlight) {
349
- color: rgb(9 103 210);
350
- }
351
- </style>
@@ -1,25 +0,0 @@
1
- /** @typedef {typeof __propDef.props} SmartTextProps */
2
- /** @typedef {typeof __propDef.events} SmartTextEvents */
3
- /** @typedef {typeof __propDef.slots} SmartTextSlots */
4
- export default class SmartText extends SvelteComponent<{
5
- field: any;
6
- }, {
7
- [evt: string]: CustomEvent<any>;
8
- }, {}> {
9
- }
10
- export type SmartTextProps = typeof __propDef.props;
11
- export type SmartTextEvents = typeof __propDef.events;
12
- export type SmartTextSlots = 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,156 +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
- import intlTelInput from "intl-tel-input";
8
- import "intl-tel-input/build/css/intlTelInput.css";
9
-
10
- import { Label } from "@stubber/ui/label";
11
-
12
- export let field;
13
-
14
- const internal = writable();
15
- let input;
16
- let iti;
17
-
18
- $: state_key = $field.state?.state_key;
19
- $: label = $field.spec?.title;
20
- $: hide_label = $field.spec?.hide_label;
21
- $: isValid = !$field.state?.validation || $field.state?.validation?.valid;
22
- $: validationMessage = $field.state?.validation?.message;
23
-
24
- function handleCountryChange() {
25
- $internal.selected_country = iti.getSelectedCountryData();
26
- }
27
-
28
- $: onRawChange($internal?.raw);
29
- function onRawChange(r) {
30
- // update fieldStateStore.data.is_valid_number
31
- if (!iti) return;
32
- let _clone = _.cloneDeep($internal) || {};
33
- _.set(_clone, "formatted", iti.getNumber());
34
- _.set(_clone, "is_valid_number", iti.isValidNumber());
35
- $internal = _clone;
36
- }
37
-
38
- onMount(() => {
39
- // set field values that aren't set yet
40
- let f = _.cloneDeep($field);
41
- let formatted = f?.data?.base ?? "";
42
- let raw = formatted;
43
- let is_valid_number = false;
44
- let selected_country = {};
45
- let initial_data = {
46
- ...f?.data,
47
- base: formatted,
48
- };
49
- if (!f?.spec?.without_value_details) {
50
- initial_data.base_details = {
51
- is_valid_number,
52
- selected_country,
53
- };
54
- }
55
- let initial_state_internal = {
56
- ...f?.state?.internal,
57
- raw,
58
- formatted,
59
- is_valid_number,
60
- selected_country,
61
- };
62
- _.set(f, "data", initial_data);
63
- _.set(f, "state.internal", initial_state_internal);
64
- if (!deepEqual(f, $field)) $field = f;
65
-
66
- syncStoreToStore(
67
- field,
68
- internal,
69
- (a, b) => {
70
- let _clone = _.cloneDeep(a.state?.internal) || {};
71
-
72
- // get parts from data
73
- _clone.raw = a?.data?.base;
74
- _clone.formatted = a?.data?.base;
75
- if (!a?.spec?.without_value_details) {
76
- _clone.selected_country = a?.data?.base_details?.selected_country;
77
- _clone.is_valid_number = a?.data?.base_details?.is_valid_number;
78
- }
79
-
80
- // set field state if changed
81
- if (!deepEqual(a?.state?.internal, _clone)) {
82
- $field.state.internal = _clone;
83
- }
84
-
85
- return _clone;
86
- },
87
- (a, b) => {
88
- let _clone = _.cloneDeep(a) || {};
89
- // update the state
90
- _.set(_clone, "state.internal", _.cloneDeep(b));
91
- // update the data
92
- _.set(_clone, "data.base", b?.formatted);
93
- if (!a?.spec?.without_value_details) {
94
- _.set(_clone, "data.base_details.is_valid_number", b?.is_valid_number);
95
- _.set(_clone, "data.base_details.selected_country", b?.selected_country);
96
- }
97
- return _clone;
98
- },
99
- null,
100
- 300
101
- );
102
- });
103
-
104
- $: if (input) setupInput(); // setup the input as soon as it's available
105
- function setupInput() {
106
- iti = intlTelInput(input, {
107
- initialCountry: "auto",
108
- geoIpLookup: (callback) => {
109
- fetch("https://ipapi.co/json")
110
- .then((res) => res.json())
111
- .then((data) => callback(data.country_code))
112
- .catch(() => callback("us"));
113
- },
114
- utilsScript: "https://cdn.jsdelivr.net/npm/intl-tel-input@18.1.1/build/js/utils.js",
115
- });
116
-
117
- //override width bc base style is not responsive
118
- let itis = document.querySelectorAll(".iti");
119
- itis.forEach((iti) => {
120
- iti.style["width"] = "100%";
121
- });
122
-
123
- // listen for countrychange
124
- input.addEventListener("countrychange", handleCountryChange);
125
-
126
- // set initial country
127
- handleCountryChange();
128
- }
129
- </script>
130
-
131
- {#if $internal}
132
- <div class="flex flex-col w-full text-surface-900 my-2">
133
- <Label for="input_{state_key}" class="block {hide_label ? 'hidden' : ''}">
134
- {label}
135
- </Label>
136
- <div
137
- class="w-full bg-surface-100 flex space-x-4 focus:outline-primary-400 relative mt-2 rounded-md"
138
- >
139
- <input
140
- bind:this={input}
141
- bind:value={$internal.raw}
142
- type="tel"
143
- id="input_{state_key}"
144
- class="w-full pl-12 border-input bg-white bg-opacity-[15] ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring h-10 rounded-md border py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 {!isValid
145
- ? 'ring-danger-500'
146
- : 'ring-surface-300'}"
147
- style="box-shadow: inset 0px 16px 16px -16px rgba(0, 0, 0, 0.1333);"
148
- />
149
- </div>
150
- {#if validationMessage}
151
- <div class="mt-1">
152
- <Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
153
- </div>
154
- {/if}
155
- </div>
156
- {/if}