@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,192 +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 GeoCoder from "../../thirdparty/mapbox/GeoCoder.svelte";
|
|
8
|
-
import Map from "../../thirdparty/mapbox/Map.svelte";
|
|
9
|
-
import MapMarker from "../../thirdparty/mapbox/MapMarker.svelte";
|
|
10
|
-
import { controls } from "@beyonk/svelte-mapbox";
|
|
11
|
-
|
|
12
|
-
export let form;
|
|
13
|
-
export let field;
|
|
14
|
-
|
|
15
|
-
const { GeolocateControl } = controls;
|
|
16
|
-
|
|
17
|
-
const internal = writable();
|
|
18
|
-
let dependencies = form?.dependencies;
|
|
19
|
-
let mapboxAccessToken = dependencies?.map?.mapboxAccessToken;
|
|
20
|
-
let mapboxStylesheetUrl = dependencies?.map?.mapboxStylesheetUrl;
|
|
21
|
-
let geocoderResult;
|
|
22
|
-
let browserLocation;
|
|
23
|
-
let center;
|
|
24
|
-
let mapComponent;
|
|
25
|
-
|
|
26
|
-
$: state_key = $field.state?.state_key;
|
|
27
|
-
$: label = $field.spec?.title;
|
|
28
|
-
$: hide_label = $field.spec?.hide_label;
|
|
29
|
-
$: isValid = !$field.state?.validation || $field.state?.validation?.valid;
|
|
30
|
-
$: validationMessage = $field.state?.validation?.message;
|
|
31
|
-
$: geolocateDisabled = $field.spec?.params?.hide_geolocate_button;
|
|
32
|
-
$: auto_set_location = $field.spec?.params?.auto_set_location;
|
|
33
|
-
|
|
34
|
-
function setValueCoords(lat, lng) {
|
|
35
|
-
if (lat && lng) {
|
|
36
|
-
let _clone = _.cloneDeep($internal) || {};
|
|
37
|
-
_.set(_clone, "lat", lat);
|
|
38
|
-
_.set(_clone, "lng", lng);
|
|
39
|
-
$internal = _clone;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function handleMapClick(e) {
|
|
44
|
-
setValueCoords(e?.detail?.lat, e?.detail?.lng);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function setCurrentPosition(o) {
|
|
48
|
-
let { latitude, longitude } = o?.coords || {};
|
|
49
|
-
if (!latitude || !longitude) return;
|
|
50
|
-
browserLocation = {
|
|
51
|
-
lat: latitude,
|
|
52
|
-
lng: longitude,
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
setValueCoords(latitude, longitude);
|
|
56
|
-
mapComponent.flyTo({ center: [longitude, latitude] });
|
|
57
|
-
center = [longitude, latitude];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function resetValues() {
|
|
61
|
-
let _clone = _.cloneDeep($internal) || {};
|
|
62
|
-
_.set(_clone, "lat", _clone?.initial_value?.lat ?? null);
|
|
63
|
-
_.set(_clone, "lng", _clone?.initial_value?.lng ?? null);
|
|
64
|
-
$internal = _clone;
|
|
65
|
-
center = [$internal.initial_value?.lng ?? 18.5, $internal.initial_value?.lat ?? -34.0];
|
|
66
|
-
mapComponent.flyTo({ center });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function handleGeolocate(o) {
|
|
70
|
-
let { latitude, longitude } = o?.detail?.coords || {};
|
|
71
|
-
setValueCoords(latitude, longitude);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
onMount(() => {
|
|
75
|
-
// set field values that aren't set yet
|
|
76
|
-
let f = _.cloneDeep($field);
|
|
77
|
-
let initial_value = f?.data?.base ?? null;
|
|
78
|
-
let initial_data = {
|
|
79
|
-
...f?.data,
|
|
80
|
-
base: initial_value,
|
|
81
|
-
};
|
|
82
|
-
let initial_state_internal = {
|
|
83
|
-
...f?.state?.internal,
|
|
84
|
-
lat: initial_value?.lat ?? null,
|
|
85
|
-
lng: initial_value?.lng ?? null,
|
|
86
|
-
initial_value: _.cloneDeep(initial_value),
|
|
87
|
-
};
|
|
88
|
-
_.set(f, "data", initial_data);
|
|
89
|
-
_.set(f, "state.internal", initial_state_internal);
|
|
90
|
-
if (!deepEqual(f, $field)) $field = f;
|
|
91
|
-
|
|
92
|
-
syncStoreToStore(
|
|
93
|
-
field,
|
|
94
|
-
internal,
|
|
95
|
-
(a, b) => {
|
|
96
|
-
let _clone = _.cloneDeep(a.state?.internal) || {};
|
|
97
|
-
|
|
98
|
-
// get parts from data
|
|
99
|
-
_clone.lat = a?.data?.base?.lat;
|
|
100
|
-
_clone.lng = a?.data?.base?.lng;
|
|
101
|
-
|
|
102
|
-
// set field state if changed
|
|
103
|
-
if (!deepEqual(a?.state?.internal, _clone)) {
|
|
104
|
-
$field.state.internal = _clone;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return _clone;
|
|
108
|
-
},
|
|
109
|
-
(a, b) => {
|
|
110
|
-
let _clone = _.cloneDeep(a) || {};
|
|
111
|
-
// update the state
|
|
112
|
-
_.set(_clone, "state.internal", _.cloneDeep(b));
|
|
113
|
-
// update the data
|
|
114
|
-
_.set(_clone, "data.base.lat", b?.lat);
|
|
115
|
-
_.set(_clone, "data.base.lng", b?.lng);
|
|
116
|
-
_.set(_clone, "data.base.latlng", `${b?.lat},${b?.lng}`);
|
|
117
|
-
return _clone;
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
|
|
121
|
-
if (auto_set_location) {
|
|
122
|
-
navigator.geolocation.getCurrentPosition(setCurrentPosition);
|
|
123
|
-
} else {
|
|
124
|
-
setTimeout(resetValues, 0);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
</script>
|
|
128
|
-
|
|
129
|
-
{#if $internal}
|
|
130
|
-
<div class="flex flex-col w-full text-surface-900 my-2">
|
|
131
|
-
<label for="input_{state_key}" class="block text-label {hide_label ? 'hidden' : ''}">
|
|
132
|
-
{label}
|
|
133
|
-
</label>
|
|
134
|
-
<div>
|
|
135
|
-
<button
|
|
136
|
-
type="button"
|
|
137
|
-
on:click={resetValues}
|
|
138
|
-
class="text-sm text-surface-300 hover:underline hover:text-surface-500"
|
|
139
|
-
>
|
|
140
|
-
<i class="fa-regular fa-undo" /> Reset
|
|
141
|
-
</button>
|
|
142
|
-
</div>
|
|
143
|
-
<div class="relative mt-2 rounded-md">
|
|
144
|
-
<div class="w-full h-72">
|
|
145
|
-
<Map
|
|
146
|
-
{center}
|
|
147
|
-
zoom={14}
|
|
148
|
-
on:click={handleMapClick}
|
|
149
|
-
{geocoderResult}
|
|
150
|
-
{mapboxAccessToken}
|
|
151
|
-
{mapboxStylesheetUrl}
|
|
152
|
-
bind:mapComponent
|
|
153
|
-
>
|
|
154
|
-
<div class="absolute left-2 top-2">
|
|
155
|
-
<GeoCoder onResult={(r) => (geocoderResult = r)} {mapboxAccessToken} />
|
|
156
|
-
</div>
|
|
157
|
-
{#if !geolocateDisabled}
|
|
158
|
-
<GeolocateControl position="top-right" on:geolocate={(o) => handleGeolocate(o)} />
|
|
159
|
-
{/if}
|
|
160
|
-
{#if browserLocation}
|
|
161
|
-
<MapMarker lat={browserLocation.lat} lng={browserLocation.lng}>
|
|
162
|
-
<div class="relative w-0">
|
|
163
|
-
<div
|
|
164
|
-
class="bg-surface-0 p-4 rounded-xl rounded-bl-none shadow-2xl border absolute bottom-0 whitespace-nowrap"
|
|
165
|
-
>
|
|
166
|
-
<i class="fa-solid fa-user text-4xl" />
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
</MapMarker>
|
|
170
|
-
{/if}
|
|
171
|
-
{#if $internal?.lat && $internal?.lng}
|
|
172
|
-
<MapMarker lat={$internal?.lat} lng={$internal?.lng}>
|
|
173
|
-
<div class="relative w-0">
|
|
174
|
-
<div
|
|
175
|
-
class="bg-surface-0 p-4 rounded-xl rounded-bl-none shadow-2xl border absolute bottom-0 whitespace-nowrap"
|
|
176
|
-
>
|
|
177
|
-
lat: {$internal?.lat?.toString()?.substring(0, 6)} <br />
|
|
178
|
-
lng: {$internal?.lng?.toString()?.substring(0, 6)}
|
|
179
|
-
</div>
|
|
180
|
-
</div>
|
|
181
|
-
</MapMarker>
|
|
182
|
-
{/if}
|
|
183
|
-
</Map>
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
{#if validationMessage}
|
|
187
|
-
<p class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
|
|
188
|
-
{validationMessage}
|
|
189
|
-
</p>
|
|
190
|
-
{/if}
|
|
191
|
-
</div>
|
|
192
|
-
{/if}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} MapProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} MapEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} MapSlots */
|
|
4
|
-
export default class Map extends SvelteComponent<{
|
|
5
|
-
form: any;
|
|
6
|
-
field: any;
|
|
7
|
-
}, {
|
|
8
|
-
[evt: string]: CustomEvent<any>;
|
|
9
|
-
}, {}> {
|
|
10
|
-
}
|
|
11
|
-
export type MapProps = typeof __propDef.props;
|
|
12
|
-
export type MapEvents = typeof __propDef.events;
|
|
13
|
-
export type MapSlots = 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,77 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { merge, startCase } from "lodash-es";
|
|
3
|
-
import { onMount } from "svelte";
|
|
4
|
-
|
|
5
|
-
import { Checkbox } from "@stubber/ui/checkbox";
|
|
6
|
-
import { Label } from "@stubber/ui/label";
|
|
7
|
-
|
|
8
|
-
export let field;
|
|
9
|
-
|
|
10
|
-
$: state_key = $field.state?.state_key;
|
|
11
|
-
$: label = $field.spec?.title;
|
|
12
|
-
$: hide_label = $field.spec?.hide_label;
|
|
13
|
-
$: isValid = !$field.state?.validation || $field.state?.validation?.valid;
|
|
14
|
-
$: validationMessage = $field.state?.validation?.message;
|
|
15
|
-
$: options = $field.spec?.params?.options; // options is an object with a label property, value property (optional) and checked property
|
|
16
|
-
|
|
17
|
-
// $: console.log("field", $field);
|
|
18
|
-
|
|
19
|
-
// $: console.log("options", options);
|
|
20
|
-
onMount(() => {
|
|
21
|
-
/// merge all options into data.base
|
|
22
|
-
field.update((f) => {
|
|
23
|
-
if (!f.data) {
|
|
24
|
-
f.data = {};
|
|
25
|
-
}
|
|
26
|
-
if (!f.data.base) {
|
|
27
|
-
f.data.base = {};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const merged_base = merge({}, options, f.data.base);
|
|
31
|
-
// ensure all options have a checked property
|
|
32
|
-
|
|
33
|
-
Object.entries(merged_base).forEach(([key, item]) => {
|
|
34
|
-
if (typeof item === "object" && item.checked === undefined) {
|
|
35
|
-
item.checked = false;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
f.data.base = merged_base;
|
|
40
|
-
return f;
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
//: boolean | "indeterminate" | undefined
|
|
45
|
-
const on_change = (new_value, key) => {
|
|
46
|
-
field.update((f) => {
|
|
47
|
-
if (!f.data.base[key]) {
|
|
48
|
-
f.data.base[key] = {};
|
|
49
|
-
}
|
|
50
|
-
f.data.base[key].checked = new_value;
|
|
51
|
-
return f;
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
</script>
|
|
55
|
-
|
|
56
|
-
<div class="flex flex-col w-full {!isValid ? `text-danger-500` : `text-surface-900`}">
|
|
57
|
-
<Label class="block pb-2 {hide_label ? 'hidden' : ''}">
|
|
58
|
-
{label}
|
|
59
|
-
</Label>
|
|
60
|
-
{#each Object.entries(options) as [key, item] (key)}
|
|
61
|
-
<div class="flex space-x-3 relative mt-2">
|
|
62
|
-
<Checkbox
|
|
63
|
-
id="input_{state_key}_{key}"
|
|
64
|
-
name={key}
|
|
65
|
-
checked={$field.data?.base?.[key]?.checked || false}
|
|
66
|
-
onCheckedChange={(new_value) => on_change(new_value, key)}
|
|
67
|
-
/>
|
|
68
|
-
|
|
69
|
-
<Label for="input_{state_key}_${key}" class=" {hide_label ? 'hidden' : ''}">
|
|
70
|
-
{item.label || startCase(key)}
|
|
71
|
-
</Label>
|
|
72
|
-
</div>
|
|
73
|
-
{/each}
|
|
74
|
-
{#if validationMessage}
|
|
75
|
-
<Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
|
|
76
|
-
{/if}
|
|
77
|
-
</div>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} MulticheckboxProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} MulticheckboxEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} MulticheckboxSlots */
|
|
4
|
-
export default class Multicheckbox extends SvelteComponent<{
|
|
5
|
-
field: any;
|
|
6
|
-
}, {
|
|
7
|
-
[evt: string]: CustomEvent<any>;
|
|
8
|
-
}, {}> {
|
|
9
|
-
}
|
|
10
|
-
export type MulticheckboxProps = typeof __propDef.props;
|
|
11
|
-
export type MulticheckboxEvents = typeof __propDef.events;
|
|
12
|
-
export type MulticheckboxSlots = 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,86 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import * as utils from "../../utils/index.js";
|
|
3
|
-
import Field from "../../Field.svelte";
|
|
4
|
-
|
|
5
|
-
export let form;
|
|
6
|
-
export let field;
|
|
7
|
-
|
|
8
|
-
let current_page_index = 0;
|
|
9
|
-
|
|
10
|
-
$: state_key = $field.state?.state_key;
|
|
11
|
-
$: fields = utils.getFieldsToRender($field.spec?.fields);
|
|
12
|
-
$: isValid = !$field.state?.validation || $field.state?.validation?.valid;
|
|
13
|
-
$: validationMessage = $field.state?.validation?.message;
|
|
14
|
-
$: allChildrenConditionsChecked = Object.values($form?.state || {})
|
|
15
|
-
?.filter((s) => s.parent_field_state_key === state_key)
|
|
16
|
-
?.reduce((acc, child_state) => {
|
|
17
|
-
if (!child_state?.conditions_checked) acc = false;
|
|
18
|
-
return acc;
|
|
19
|
-
}, true);
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
{#if fields?.length}
|
|
23
|
-
<div class={!allChildrenConditionsChecked ? "invisible absolute" : ""}>
|
|
24
|
-
<div class="border border-surface-200">
|
|
25
|
-
<div class="p-2 py-3 overflow-x-auto whitespace-nowrap">
|
|
26
|
-
<div class="flex items-center">
|
|
27
|
-
{#each fields as p, i}
|
|
28
|
-
<button
|
|
29
|
-
type="button"
|
|
30
|
-
on:click={() => (current_page_index = i)}
|
|
31
|
-
class="flex items-center mr-4 {current_page_index === i
|
|
32
|
-
? 'text-surface-900'
|
|
33
|
-
: 'text-surface-500'}"
|
|
34
|
-
>
|
|
35
|
-
<span
|
|
36
|
-
class="mr-1 flex items-center justify-center w-6 h-6 rounded-full {current_page_index ===
|
|
37
|
-
i
|
|
38
|
-
? 'bg-primary-500 text-surface-0'
|
|
39
|
-
: 'bg-surface-100 text-surface-700'}"
|
|
40
|
-
>
|
|
41
|
-
{i + 1}
|
|
42
|
-
</span>
|
|
43
|
-
</button>
|
|
44
|
-
{/each}
|
|
45
|
-
</div>
|
|
46
|
-
</div>
|
|
47
|
-
{#if fields}
|
|
48
|
-
{#each fields as initial_field_spec, index (initial_field_spec.__key)}
|
|
49
|
-
<div
|
|
50
|
-
class="p-6 border-y border-surface-200 {current_page_index !== index
|
|
51
|
-
? 'invisible absolute'
|
|
52
|
-
: ''}"
|
|
53
|
-
>
|
|
54
|
-
<Field {form} {initial_field_spec} parent_field={field} />
|
|
55
|
-
</div>
|
|
56
|
-
{/each}
|
|
57
|
-
{/if}
|
|
58
|
-
<div class="flex items-center justify-between text-sm p-2">
|
|
59
|
-
<button
|
|
60
|
-
type="button"
|
|
61
|
-
class="bg-surface-300 px-4 py-1 rounded text-surface-0 {current_page_index === 0
|
|
62
|
-
? 'invisible'
|
|
63
|
-
: ''}"
|
|
64
|
-
on:click={() => (current_page_index = current_page_index - 1)}
|
|
65
|
-
>
|
|
66
|
-
Back
|
|
67
|
-
</button>
|
|
68
|
-
<button
|
|
69
|
-
type="button"
|
|
70
|
-
class="bg-surface-300 px-4 py-1 rounded text-surface-0 {current_page_index >=
|
|
71
|
-
fields.length - 1
|
|
72
|
-
? 'invisible'
|
|
73
|
-
: ''}"
|
|
74
|
-
on:click={() => (current_page_index = current_page_index + 1)}
|
|
75
|
-
>
|
|
76
|
-
Next
|
|
77
|
-
</button>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
{#if validationMessage}
|
|
81
|
-
<p class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
|
|
82
|
-
{validationMessage}
|
|
83
|
-
</p>
|
|
84
|
-
{/if}
|
|
85
|
-
</div>
|
|
86
|
-
{/if}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} MultistepProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} MultistepEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} MultistepSlots */
|
|
4
|
-
export default class Multistep extends SvelteComponent<{
|
|
5
|
-
form: any;
|
|
6
|
-
field: any;
|
|
7
|
-
}, {
|
|
8
|
-
[evt: string]: CustomEvent<any>;
|
|
9
|
-
}, {}> {
|
|
10
|
-
}
|
|
11
|
-
export type MultistepProps = typeof __propDef.props;
|
|
12
|
-
export type MultistepEvents = typeof __propDef.events;
|
|
13
|
-
export type MultistepSlots = 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,92 +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 { Textarea } from "@stubber/ui/textarea";
|
|
9
|
-
import { Label } from "@stubber/ui/label";
|
|
10
|
-
import { Button } from "@stubber/ui/button";
|
|
11
|
-
|
|
12
|
-
export let field;
|
|
13
|
-
|
|
14
|
-
const internal = writable();
|
|
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
|
-
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
|
-
_.set(_clone, "data.base", b?.raw);
|
|
60
|
-
return _clone;
|
|
61
|
-
},
|
|
62
|
-
null,
|
|
63
|
-
300
|
|
64
|
-
);
|
|
65
|
-
});
|
|
66
|
-
</script>
|
|
67
|
-
|
|
68
|
-
{#if $internal}
|
|
69
|
-
<div class="flex flex-col w-full text-surface-900 my-2">
|
|
70
|
-
<Label for="input_{state_key}" class=" {hide_label ? 'hidden' : ''}">
|
|
71
|
-
{label}
|
|
72
|
-
</Label>
|
|
73
|
-
<div class="relative mt-2">
|
|
74
|
-
<Textarea
|
|
75
|
-
on:keydown={(e) => {
|
|
76
|
-
if (e.key === "Enter") {
|
|
77
|
-
e.stopPropagation();
|
|
78
|
-
}
|
|
79
|
-
}}
|
|
80
|
-
rows="3"
|
|
81
|
-
id="input_{state_key}"
|
|
82
|
-
placeholder={label}
|
|
83
|
-
class="block w-full {!isValid ? 'ring-danger-500' : 'ring-surface-300 '} "
|
|
84
|
-
name={state_key}
|
|
85
|
-
bind:value={$internal.raw}
|
|
86
|
-
/>
|
|
87
|
-
</div>
|
|
88
|
-
{#if validationMessage}
|
|
89
|
-
<Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
|
|
90
|
-
{/if}
|
|
91
|
-
</div>
|
|
92
|
-
{/if}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} NoteProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} NoteEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} NoteSlots */
|
|
4
|
-
export default class Note extends SvelteComponent<{
|
|
5
|
-
field: any;
|
|
6
|
-
}, {
|
|
7
|
-
[evt: string]: CustomEvent<any>;
|
|
8
|
-
}, {}> {
|
|
9
|
-
}
|
|
10
|
-
export type NoteProps = typeof __propDef.props;
|
|
11
|
-
export type NoteEvents = typeof __propDef.events;
|
|
12
|
-
export type NoteSlots = 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,119 +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
|
-
$: min_setting = $field.spec.params.min ?? false;
|
|
21
|
-
$: max_setting = $field.spec.params.max ?? false;
|
|
22
|
-
$: step_setting = $field.spec.params.step ?? 1;
|
|
23
|
-
$: has_step = $field.spec.params.step ?? false;
|
|
24
|
-
|
|
25
|
-
onMount(() => {
|
|
26
|
-
// set field values that aren't set yet
|
|
27
|
-
let f = _.cloneDeep($field);
|
|
28
|
-
let initial_value = f?.data?.base ?? "";
|
|
29
|
-
let initial_data = {
|
|
30
|
-
...f?.data,
|
|
31
|
-
base: initial_value,
|
|
32
|
-
};
|
|
33
|
-
let initial_state_internal = {
|
|
34
|
-
...f?.state?.internal,
|
|
35
|
-
raw: initial_value,
|
|
36
|
-
};
|
|
37
|
-
_.set(f, "data", initial_data);
|
|
38
|
-
_.set(f, "state.internal", initial_state_internal);
|
|
39
|
-
if (!deepEqual(f, $field)) $field = f;
|
|
40
|
-
|
|
41
|
-
syncStoreToStore(
|
|
42
|
-
field,
|
|
43
|
-
internal,
|
|
44
|
-
(a, b) => {
|
|
45
|
-
let _clone = _.cloneDeep(a.state?.internal) || {};
|
|
46
|
-
|
|
47
|
-
// get parts from data
|
|
48
|
-
_clone.raw = a?.data?.base;
|
|
49
|
-
|
|
50
|
-
// set field state if changed
|
|
51
|
-
if (!deepEqual(a?.state?.internal, _clone)) {
|
|
52
|
-
$field.state.internal = _clone;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return _clone;
|
|
56
|
-
},
|
|
57
|
-
(a, b) => {
|
|
58
|
-
let _clone = _.cloneDeep(a) || {};
|
|
59
|
-
|
|
60
|
-
let raw = b.raw;
|
|
61
|
-
|
|
62
|
-
// check if raw is valid
|
|
63
|
-
if (max_setting != false && raw > max_setting) {
|
|
64
|
-
raw = max_setting;
|
|
65
|
-
}
|
|
66
|
-
if (min_setting != false && raw < min_setting) {
|
|
67
|
-
raw = min_setting;
|
|
68
|
-
}
|
|
69
|
-
if (has_step) {
|
|
70
|
-
raw = Math.round(raw / step_setting) * step_setting;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// if raw is different to b.raw, update internal
|
|
74
|
-
if (raw !== b.raw) $internal.raw = raw;
|
|
75
|
-
|
|
76
|
-
b.raw = raw;
|
|
77
|
-
|
|
78
|
-
// update the state
|
|
79
|
-
_.set(_clone, "state.internal", _.cloneDeep(b));
|
|
80
|
-
// update the data
|
|
81
|
-
_.set(_clone, "data.base", raw);
|
|
82
|
-
return _clone;
|
|
83
|
-
},
|
|
84
|
-
null,
|
|
85
|
-
300
|
|
86
|
-
);
|
|
87
|
-
});
|
|
88
|
-
</script>
|
|
89
|
-
|
|
90
|
-
{#if $internal}
|
|
91
|
-
<div class="flex flex-col w-full text-surface-900 my-2">
|
|
92
|
-
<Label for="input_{state_key}" class="block py-2{hide_label ? 'hidden' : ''}">
|
|
93
|
-
{label}
|
|
94
|
-
</Label>
|
|
95
|
-
<div class="relative rounded-md">
|
|
96
|
-
<Input
|
|
97
|
-
on:keydown={(e) => {
|
|
98
|
-
if (e.key === "Enter") {
|
|
99
|
-
e.preventDefault();
|
|
100
|
-
}
|
|
101
|
-
}}
|
|
102
|
-
type="number"
|
|
103
|
-
id="input_{state_key}"
|
|
104
|
-
placeholder={label}
|
|
105
|
-
class="block w-full {!isValid
|
|
106
|
-
? 'ring-danger-500'
|
|
107
|
-
: 'ring-surface-300 focus:ring-primary-400'} "
|
|
108
|
-
name={state_key}
|
|
109
|
-
min={min_setting}
|
|
110
|
-
max={max_setting}
|
|
111
|
-
step={step_setting}
|
|
112
|
-
bind:value={$internal.raw}
|
|
113
|
-
/>
|
|
114
|
-
</div>
|
|
115
|
-
{#if validationMessage}
|
|
116
|
-
<Label class={!isValid ? `text-danger-500` : `text-success-500`}>{validationMessage}</Label>
|
|
117
|
-
{/if}
|
|
118
|
-
</div>
|
|
119
|
-
{/if}
|