@stubber/form-fields 1.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/README.md +303 -0
- package/dist/Field.svelte +36 -0
- package/dist/Field.svelte.d.ts +31 -0
- package/dist/Form.svelte +34 -0
- package/dist/Form.svelte.d.ts +29 -0
- package/dist/NullFieldWrapper.svelte +6 -0
- package/dist/NullFieldWrapper.svelte.d.ts +25 -0
- package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte +69 -0
- package/dist/fields/component_parts/arraybuilder/FieldWrapper.svelte.d.ts +29 -0
- package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte +8 -0
- package/dist/fields/component_parts/fieldbuilder/FieldWrapper.svelte.d.ts +25 -0
- package/dist/fields/components/AgGrid.svelte +53 -0
- package/dist/fields/components/AgGrid.svelte.d.ts +18 -0
- package/dist/fields/components/Arraybuilder.svelte +101 -0
- package/dist/fields/components/Arraybuilder.svelte.d.ts +25 -0
- package/dist/fields/components/Checkbox.svelte +100 -0
- package/dist/fields/components/Checkbox.svelte.d.ts +23 -0
- package/dist/fields/components/CheckboxAutocomplete.svelte +92 -0
- package/dist/fields/components/CheckboxAutocomplete.svelte.d.ts +23 -0
- package/dist/fields/components/Contactselector.svelte +348 -0
- package/dist/fields/components/Contactselector.svelte.d.ts +25 -0
- package/dist/fields/components/Currency.svelte +258 -0
- package/dist/fields/components/Currency.svelte.d.ts +23 -0
- package/dist/fields/components/Dataindication.svelte +35 -0
- package/dist/fields/components/Dataindication.svelte.d.ts +23 -0
- package/dist/fields/components/Date.svelte +94 -0
- package/dist/fields/components/Date.svelte.d.ts +23 -0
- package/dist/fields/components/Datetime.svelte +94 -0
- package/dist/fields/components/Datetime.svelte.d.ts +23 -0
- package/dist/fields/components/Email.svelte +124 -0
- package/dist/fields/components/Email.svelte.d.ts +23 -0
- package/dist/fields/components/Fieldbuilder.svelte +340 -0
- package/dist/fields/components/Fieldbuilder.svelte.d.ts +25 -0
- package/dist/fields/components/Fieldsbuilder.svelte +122 -0
- package/dist/fields/components/Fieldsbuilder.svelte.d.ts +25 -0
- package/dist/fields/components/File.svelte +230 -0
- package/dist/fields/components/File.svelte.d.ts +25 -0
- package/dist/fields/components/Heading.svelte +17 -0
- package/dist/fields/components/Heading.svelte.d.ts +23 -0
- package/dist/fields/components/Hidden.svelte +7 -0
- package/dist/fields/components/Hidden.svelte.d.ts +23 -0
- package/dist/fields/components/Hiddenlocation.svelte +28 -0
- package/dist/fields/components/Hiddenlocation.svelte.d.ts +23 -0
- package/dist/fields/components/Html.svelte +13 -0
- package/dist/fields/components/Html.svelte.d.ts +23 -0
- package/dist/fields/components/Jsoneditor.svelte +94 -0
- package/dist/fields/components/Jsoneditor.svelte.d.ts +23 -0
- package/dist/fields/components/Map.svelte +192 -0
- package/dist/fields/components/Map.svelte.d.ts +25 -0
- package/dist/fields/components/Multicheckbox.svelte +119 -0
- package/dist/fields/components/Multicheckbox.svelte.d.ts +23 -0
- package/dist/fields/components/Multistep.svelte +86 -0
- package/dist/fields/components/Multistep.svelte.d.ts +25 -0
- package/dist/fields/components/Note.svelte +92 -0
- package/dist/fields/components/Note.svelte.d.ts +23 -0
- package/dist/fields/components/Number.svelte +118 -0
- package/dist/fields/components/Number.svelte.d.ts +23 -0
- package/dist/fields/components/Objectbuilder.svelte +152 -0
- package/dist/fields/components/Objectbuilder.svelte.d.ts +25 -0
- package/dist/fields/components/Qrcodescanner.svelte +198 -0
- package/dist/fields/components/Qrcodescanner.svelte.d.ts +23 -0
- package/dist/fields/components/Radio.svelte +116 -0
- package/dist/fields/components/Radio.svelte.d.ts +23 -0
- package/dist/fields/components/Renderfield.svelte +58 -0
- package/dist/fields/components/Renderfield.svelte.d.ts +25 -0
- package/dist/fields/components/Screenrecorder.svelte +277 -0
- package/dist/fields/components/Screenrecorder.svelte.d.ts +25 -0
- package/dist/fields/components/Screenshot.svelte +270 -0
- package/dist/fields/components/Screenshot.svelte.d.ts +25 -0
- package/dist/fields/components/Scrollandreaddisplay.svelte +122 -0
- package/dist/fields/components/Scrollandreaddisplay.svelte.d.ts +23 -0
- package/dist/fields/components/Section.svelte +64 -0
- package/dist/fields/components/Section.svelte.d.ts +25 -0
- package/dist/fields/components/Select.svelte +229 -0
- package/dist/fields/components/Select.svelte.d.ts +23 -0
- package/dist/fields/components/Selectresource.svelte +291 -0
- package/dist/fields/components/Selectresource.svelte.d.ts +25 -0
- package/dist/fields/components/Signature.svelte +153 -0
- package/dist/fields/components/Signature.svelte.d.ts +25 -0
- package/dist/fields/components/Slider.svelte +101 -0
- package/dist/fields/components/Slider.svelte.d.ts +23 -0
- package/dist/fields/components/SmartText.svelte +330 -0
- package/dist/fields/components/SmartText.svelte.d.ts +23 -0
- package/dist/fields/components/Telephone.svelte +153 -0
- package/dist/fields/components/Telephone.svelte.d.ts +23 -0
- package/dist/fields/components/Text.svelte +106 -0
- package/dist/fields/components/Text.svelte.d.ts +23 -0
- package/dist/fields/components/Voicenote.svelte +268 -0
- package/dist/fields/components/Voicenote.svelte.d.ts +25 -0
- package/dist/fields/components/index.d.ts +81 -0
- package/dist/fields/components/index.js +82 -0
- package/dist/fields/definitions/_all.json +38 -0
- package/dist/fields/definitions/_valid_fieldtype.json +220 -0
- package/dist/fields/definitions/arraybuilder.json +39 -0
- package/dist/fields/definitions/checkbox.json +44 -0
- package/dist/fields/definitions/contactselector.json +15 -0
- package/dist/fields/definitions/currency.json +42 -0
- package/dist/fields/definitions/dataindication.json +16 -0
- package/dist/fields/definitions/date.json +16 -0
- package/dist/fields/definitions/datetime.json +15 -0
- package/dist/fields/definitions/email.json +16 -0
- package/dist/fields/definitions/fieldbuilder.json +64 -0
- package/dist/fields/definitions/fieldsbuilder.json +38 -0
- package/dist/fields/definitions/file.json +42 -0
- package/dist/fields/definitions/grid.json +47 -0
- package/dist/fields/definitions/heading.json +38 -0
- package/dist/fields/definitions/hidden.json +89 -0
- package/dist/fields/definitions/hiddenlocation.json +15 -0
- package/dist/fields/definitions/html.json +34 -0
- package/dist/fields/definitions/index.d.ts +86 -0
- package/dist/fields/definitions/index.js +96 -0
- package/dist/fields/definitions/jsoneditor.json +33 -0
- package/dist/fields/definitions/map.json +36 -0
- package/dist/fields/definitions/multicheckbox.json +47 -0
- package/dist/fields/definitions/multistep.json +35 -0
- package/dist/fields/definitions/note.json +16 -0
- package/dist/fields/definitions/number.json +42 -0
- package/dist/fields/definitions/objectbuilder.json +39 -0
- package/dist/fields/definitions/qrcodescanner.json +16 -0
- package/dist/fields/definitions/radio.json +47 -0
- package/dist/fields/definitions/renderfield.json +36 -0
- package/dist/fields/definitions/richtext.json +16 -0
- package/dist/fields/definitions/screenrecorder.json +42 -0
- package/dist/fields/definitions/screenshot.json +42 -0
- package/dist/fields/definitions/scrollandreaddisplay.json +49 -0
- package/dist/fields/definitions/section.json +50 -0
- package/dist/fields/definitions/select.json +47 -0
- package/dist/fields/definitions/selectresource.json +48 -0
- package/dist/fields/definitions/signature.json +16 -0
- package/dist/fields/definitions/slider.json +78 -0
- package/dist/fields/definitions/smart_text.json +101 -0
- package/dist/fields/definitions/telephone.json +16 -0
- package/dist/fields/definitions/text.json +35 -0
- package/dist/fields/definitions/voicenote.json +43 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/thirdparty/mapbox/GeoCoder.svelte +10 -0
- package/dist/thirdparty/mapbox/GeoCoder.svelte.d.ts +25 -0
- package/dist/thirdparty/mapbox/Map.svelte +30 -0
- package/dist/thirdparty/mapbox/Map.svelte.d.ts +20 -0
- package/dist/thirdparty/mapbox/MapMarker.svelte +13 -0
- package/dist/thirdparty/mapbox/MapMarker.svelte.d.ts +31 -0
- package/dist/utils/createField.d.ts +6 -0
- package/dist/utils/createField.js +33 -0
- package/dist/utils/createForm.d.ts +1 -0
- package/dist/utils/createForm.js +501 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.js +126 -0
- package/dist/utils/syncing.d.ts +11 -0
- package/dist/utils/syncing.js +134 -0
- package/package.json +78 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import _ from "lodash-es";
|
|
3
|
+
import FieldWrapper from "../component_parts/arraybuilder/FieldWrapper.svelte";
|
|
4
|
+
import Field from "../../Field.svelte";
|
|
5
|
+
import { onMount } from "svelte";
|
|
6
|
+
import { deepEqual } from "fast-equals";
|
|
7
|
+
|
|
8
|
+
export let form;
|
|
9
|
+
export let field;
|
|
10
|
+
|
|
11
|
+
$: state_key = $field.state?.state_key;
|
|
12
|
+
$: label = $field.spec?.title;
|
|
13
|
+
$: hide_label = $field.spec?.hide_label;
|
|
14
|
+
$: isValid = !$field.state?.validation || $field.state?.validation?.valid;
|
|
15
|
+
$: validationMessage = $field.state?.validation?.message;
|
|
16
|
+
$: new_entry = {
|
|
17
|
+
...$field.spec?.params?.new_entry_field,
|
|
18
|
+
hide_label: true,
|
|
19
|
+
title: $field.spec?.params?.new_entry_field?.title || "New Entry",
|
|
20
|
+
details: {
|
|
21
|
+
...$field.spec?.params?.new_entry_field?.details,
|
|
22
|
+
datapath: "",
|
|
23
|
+
keyname: "",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
onMount(() => {
|
|
28
|
+
// set field values that aren't set yet
|
|
29
|
+
let f = _.cloneDeep($field);
|
|
30
|
+
let initial_value = _.isArray(f?.data?.base) ? f?.data?.base : [];
|
|
31
|
+
let initial_data = _.merge(
|
|
32
|
+
{
|
|
33
|
+
base: initial_value,
|
|
34
|
+
},
|
|
35
|
+
f?.data
|
|
36
|
+
);
|
|
37
|
+
_.set(f, "data", initial_data);
|
|
38
|
+
if (!deepEqual(f, $field)) $field = f;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
function addEntry() {
|
|
42
|
+
field.update((f) => {
|
|
43
|
+
let new_data_base = _.cloneDeep($field?.data?.base);
|
|
44
|
+
if (!_.isArray(new_data_base)) new_data_base = [];
|
|
45
|
+
new_data_base.push(null);
|
|
46
|
+
_.set(f, `data.base`, new_data_base);
|
|
47
|
+
return f;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let rendered_fields;
|
|
52
|
+
$: updateRenderedFields($field?.data?.base, new_entry);
|
|
53
|
+
function updateRenderedFields(d, e) {
|
|
54
|
+
let update = [];
|
|
55
|
+
|
|
56
|
+
if (!_.isArray(d)) return;
|
|
57
|
+
|
|
58
|
+
d?.forEach((element, i) => {
|
|
59
|
+
update.push(
|
|
60
|
+
_.merge({}, _.cloneDeep(e), {
|
|
61
|
+
__order: i,
|
|
62
|
+
__key: i.toString(),
|
|
63
|
+
without_value_details: true,
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (!deepEqual(rendered_fields, update)) {
|
|
69
|
+
rendered_fields = _.cloneDeep(update);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
{#if new_entry}
|
|
75
|
+
<div class="flex flex-col w-full text-surface-900">
|
|
76
|
+
<label for="input_{state_key}" class="block text-label {hide_label ? 'hidden' : ''}">
|
|
77
|
+
{label}
|
|
78
|
+
</label>
|
|
79
|
+
<div class="relative mt-2 rounded-md">
|
|
80
|
+
{#if rendered_fields}
|
|
81
|
+
{#each rendered_fields as initial_field_spec (initial_field_spec?.__key)}
|
|
82
|
+
<Field {form} {initial_field_spec} parent_field={field} field_wrapper={FieldWrapper} />
|
|
83
|
+
{/each}
|
|
84
|
+
{/if}
|
|
85
|
+
<div>
|
|
86
|
+
<button
|
|
87
|
+
type="button"
|
|
88
|
+
on:click={() => addEntry()}
|
|
89
|
+
class="text-xl w-8 h-8 border border-dashed bg-surface-0 border-primary-300 hover:bg-primary-500 hover:text-surface-0 hover:border-0 active:bg-primary-500 active:text-surface-0 active:border-0 rounded text-primary-500"
|
|
90
|
+
>
|
|
91
|
+
<i class="fa-regular fa-plus" />
|
|
92
|
+
</button>
|
|
93
|
+
</div>
|
|
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}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} ArraybuilderProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} ArraybuilderEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} ArraybuilderSlots */
|
|
4
|
+
export default class Arraybuilder extends SvelteComponentTyped<{
|
|
5
|
+
form: any;
|
|
6
|
+
field: any;
|
|
7
|
+
}, {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
}, {}> {
|
|
10
|
+
}
|
|
11
|
+
export type ArraybuilderProps = typeof __propDef.props;
|
|
12
|
+
export type ArraybuilderEvents = typeof __propDef.events;
|
|
13
|
+
export type ArraybuilderSlots = typeof __propDef.slots;
|
|
14
|
+
import { SvelteComponentTyped } 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
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { syncStoreToStore } from "../../utils/syncing";
|
|
3
|
+
import { deepEqual } from "fast-equals";
|
|
4
|
+
import _ from "lodash-es";
|
|
5
|
+
import { onMount, onDestroy } 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
|
+
$: checkedvalue =
|
|
16
|
+
$field.spec?.params?.checkedvalue !== undefined ? $field.spec?.params?.checkedvalue : true;
|
|
17
|
+
$: uncheckedvalue =
|
|
18
|
+
$field.spec?.params?.uncheckedvalue !== undefined ? $field.spec?.params?.uncheckedvalue : false;
|
|
19
|
+
$: isValid = !$field.state?.validation || $field.state?.validation?.valid;
|
|
20
|
+
$: validationMessage = $field.state?.validation?.message;
|
|
21
|
+
|
|
22
|
+
let store_sync_sub;
|
|
23
|
+
|
|
24
|
+
onMount(() => {
|
|
25
|
+
// set field values that aren't set yet
|
|
26
|
+
let f = _.cloneDeep($field);
|
|
27
|
+
let checked = deepEqual(f?.data?.base, checkedvalue);
|
|
28
|
+
let initial_data = {
|
|
29
|
+
...f?.data,
|
|
30
|
+
base: checked ? checkedvalue : uncheckedvalue,
|
|
31
|
+
};
|
|
32
|
+
if (!f?.spec?.without_value_details) initial_data.base_label = label;
|
|
33
|
+
let initial_state_internal = {
|
|
34
|
+
...f?.state?.internal,
|
|
35
|
+
checked,
|
|
36
|
+
};
|
|
37
|
+
_.set(f, "data", initial_data);
|
|
38
|
+
_.set(f, "state.internal", initial_state_internal);
|
|
39
|
+
if (!deepEqual(f, $field)) $field = f;
|
|
40
|
+
|
|
41
|
+
store_sync_sub = syncStoreToStore(
|
|
42
|
+
field,
|
|
43
|
+
internal,
|
|
44
|
+
(a, b) => {
|
|
45
|
+
let _clone = _.cloneDeep(a?.state?.internal) || {};
|
|
46
|
+
|
|
47
|
+
// get parts from data
|
|
48
|
+
_clone.checked = deepEqual(a?.data?.base, checkedvalue);
|
|
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
|
+
// update the state
|
|
60
|
+
_.set(_clone, "state.internal", _.cloneDeep(b));
|
|
61
|
+
// update the data
|
|
62
|
+
_.set(_clone, "data.base", b?.checked ? checkedvalue : uncheckedvalue);
|
|
63
|
+
|
|
64
|
+
return _clone;
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
onDestroy(() => {
|
|
70
|
+
store_sync_sub?.destroy();
|
|
71
|
+
});
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
{#if $internal}
|
|
75
|
+
<div class="flex flex-col w-full {!isValid ? `text-danger-500` : `text-surface-900`}">
|
|
76
|
+
<div class="flex space-x-3 relative mt-2 items-center">
|
|
77
|
+
<label for="input_{state_key}" class="block text-label {hide_label ? 'hidden' : ''}">
|
|
78
|
+
{label}
|
|
79
|
+
</label>
|
|
80
|
+
<input
|
|
81
|
+
on:keydown={(e) => {
|
|
82
|
+
if (e.key === "Enter") {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
}
|
|
85
|
+
}}
|
|
86
|
+
type="checkbox"
|
|
87
|
+
id="input_{state_key}"
|
|
88
|
+
placeholder={label}
|
|
89
|
+
class="block w-5 h-5 rounded-md text-label focus:outline-primary-400"
|
|
90
|
+
name={state_key}
|
|
91
|
+
bind:checked={$internal.checked}
|
|
92
|
+
/>
|
|
93
|
+
</div>
|
|
94
|
+
{#if validationMessage}
|
|
95
|
+
<p class="text-label {!isValid ? `text-danger-500` : `text-success-500`}">
|
|
96
|
+
{validationMessage}
|
|
97
|
+
</p>
|
|
98
|
+
{/if}
|
|
99
|
+
</div>
|
|
100
|
+
{/if}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} CheckboxProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} CheckboxEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} CheckboxSlots */
|
|
4
|
+
export default class Checkbox extends SvelteComponentTyped<{
|
|
5
|
+
field: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type CheckboxProps = typeof __propDef.props;
|
|
11
|
+
export type CheckboxEvents = typeof __propDef.events;
|
|
12
|
+
export type CheckboxSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
field: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import _ from "lodash-es";
|
|
3
|
+
import Checkbox from "./Checkbox.svelte";
|
|
4
|
+
import SmartText from "./SmartText.svelte";
|
|
5
|
+
import * as utils from "../../utils/index.js";
|
|
6
|
+
let clickOutside = utils.clickOutside;
|
|
7
|
+
|
|
8
|
+
export let field;
|
|
9
|
+
|
|
10
|
+
$field.spec.without_value_details = true;
|
|
11
|
+
|
|
12
|
+
$field.spec.params = $field.spec?.params || {};
|
|
13
|
+
$field.spec.params = {
|
|
14
|
+
...$field.spec.params,
|
|
15
|
+
code_language: "handlebars",
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// this field picks the best field to render based on the data
|
|
19
|
+
let selected_option = typeof $field.data.base === "boolean" ? "Checkbox" : "Smart Text";
|
|
20
|
+
|
|
21
|
+
let menu_open = false;
|
|
22
|
+
|
|
23
|
+
const open_menu = () => {
|
|
24
|
+
menu_open = !menu_open;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const options = ["Checkbox", "Smart Text"];
|
|
28
|
+
|
|
29
|
+
function select_option(option) {
|
|
30
|
+
selected_option = option;
|
|
31
|
+
switch (selected_option) {
|
|
32
|
+
case "Checkbox":
|
|
33
|
+
$field.data.base = false;
|
|
34
|
+
break;
|
|
35
|
+
case "Smart Text":
|
|
36
|
+
$field.data.base = "";
|
|
37
|
+
break;
|
|
38
|
+
default:
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
menu_open = false;
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
<div>
|
|
47
|
+
<div class="flex gap-1 items-center">
|
|
48
|
+
<div
|
|
49
|
+
class="relative"
|
|
50
|
+
use:clickOutside={() => {
|
|
51
|
+
if (menu_open) {
|
|
52
|
+
menu_open = false;
|
|
53
|
+
}
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
56
|
+
<button
|
|
57
|
+
type="button"
|
|
58
|
+
on:click={open_menu}
|
|
59
|
+
class="flex items-center justify-center border border-dashed bg-surface-0 border-surface-300 hover:bg-surface-500 hover:text-surface-0 active:bg-surface-600 active:text-surface-0 rounded text-surface-500"
|
|
60
|
+
>
|
|
61
|
+
<i class="fa-regular fa-chevron-down" />
|
|
62
|
+
</button>
|
|
63
|
+
{#if menu_open}
|
|
64
|
+
<div
|
|
65
|
+
class="absolute z-10 left-0 top-6 w-48 bg-white shadow-lg rounded-md ring-1 ring-surface-300"
|
|
66
|
+
>
|
|
67
|
+
<div class="p-2">
|
|
68
|
+
{#each options as option}
|
|
69
|
+
<div class="flex items-center gap-1">
|
|
70
|
+
<input
|
|
71
|
+
id="fieldtype_radio_{option}"
|
|
72
|
+
type="radio"
|
|
73
|
+
name="fieldtype"
|
|
74
|
+
checked={option === selected_option}
|
|
75
|
+
on:change={() => {
|
|
76
|
+
select_option(option);
|
|
77
|
+
}}
|
|
78
|
+
/>
|
|
79
|
+
<label for="fieldtype_radio_{option}">{option}</label>
|
|
80
|
+
</div>
|
|
81
|
+
{/each}
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
{/if}
|
|
85
|
+
</div>
|
|
86
|
+
{#if selected_option === "Checkbox"}
|
|
87
|
+
<Checkbox {field} />
|
|
88
|
+
{:else}
|
|
89
|
+
<SmartText {field} />
|
|
90
|
+
{/if}
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} CheckboxAutocompleteProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} CheckboxAutocompleteEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} CheckboxAutocompleteSlots */
|
|
4
|
+
export default class CheckboxAutocomplete extends SvelteComponentTyped<{
|
|
5
|
+
field: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type CheckboxAutocompleteProps = typeof __propDef.props;
|
|
11
|
+
export type CheckboxAutocompleteEvents = typeof __propDef.events;
|
|
12
|
+
export type CheckboxAutocompleteSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
field: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|