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