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