@stubber/form-fields 2.2.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +63 -25
  2. package/dist/form-fields/Autocomplete.svelte +261 -0
  3. package/dist/form-fields/Autocomplete.svelte.d.ts +43 -0
  4. package/dist/form-fields/CollapsibleSection.svelte +127 -0
  5. package/dist/form-fields/CollapsibleSection.svelte.d.ts +26 -0
  6. package/dist/form-fields/FieldLabel.svelte +18 -3
  7. package/dist/form-fields/FieldLabel.svelte.d.ts +1 -0
  8. package/dist/form-fields/FieldMessage.svelte +20 -9
  9. package/dist/form-fields/Form.svelte +19 -2
  10. package/dist/form-fields/Form.svelte.d.ts +2 -0
  11. package/dist/form-fields/UploadStatus.svelte +76 -0
  12. package/dist/form-fields/UploadStatus.svelte.d.ts +18 -0
  13. package/dist/form-fields/fields/_field-builder-reorder.svelte +35 -0
  14. package/dist/form-fields/fields/_field-builder-reorder.svelte.d.ts +22 -0
  15. package/dist/form-fields/{sub → fields}/array-builder-field.svelte +104 -38
  16. package/dist/form-fields/fields/checkbox-autocomplete.svelte +153 -0
  17. package/dist/form-fields/fields/checkbox-field.svelte +69 -0
  18. package/dist/form-fields/{sub → fields}/contact-selector-field.svelte +9 -6
  19. package/dist/form-fields/{sub → fields}/currency-field.svelte +108 -70
  20. package/dist/form-fields/fields/data-indication-field.svelte +39 -0
  21. package/dist/form-fields/fields/date-field.svelte +31 -0
  22. package/dist/form-fields/fields/date-time-field.svelte +31 -0
  23. package/dist/form-fields/{sub → fields}/email-field.svelte +25 -11
  24. package/dist/form-fields/fields/field-builder-field.svelte +568 -0
  25. package/dist/form-fields/fields/file-field.svelte +284 -0
  26. package/dist/form-fields/{sub → fields}/file-field.svelte.d.ts +2 -0
  27. package/dist/form-fields/fields/grid-field.svelte +152 -0
  28. package/dist/form-fields/{sub → fields}/heading-field.svelte +7 -4
  29. package/dist/form-fields/{sub → fields}/html-field.svelte +6 -4
  30. package/dist/form-fields/{sub → fields}/map-field.svelte +122 -78
  31. package/dist/form-fields/{sub → fields}/multi-checkbox-field.svelte +35 -20
  32. package/dist/form-fields/fields/multistep-field.svelte +135 -0
  33. package/dist/form-fields/fields/note-field.svelte +35 -0
  34. package/dist/form-fields/{sub → fields}/number-field.svelte +29 -14
  35. package/dist/form-fields/fields/object-builder-field.svelte +176 -0
  36. package/dist/form-fields/fields/qr-code-scanner-field.svelte +203 -0
  37. package/dist/form-fields/fields/radio-field.svelte +82 -0
  38. package/dist/form-fields/{sub → fields}/radio-field.svelte.d.ts +1 -1
  39. package/dist/form-fields/fields/screenrecorder-field.svelte +255 -0
  40. package/dist/form-fields/{sub → fields}/screenshot-field.svelte +101 -40
  41. package/dist/form-fields/{sub → fields}/scroll-and-read-display-field.svelte +43 -27
  42. package/dist/form-fields/fields/section-field.svelte +73 -0
  43. package/dist/form-fields/fields/select-field.svelte +104 -0
  44. package/dist/form-fields/{sub → fields}/signature-field.svelte +78 -22
  45. package/dist/form-fields/fields/slider-field.svelte +53 -0
  46. package/dist/form-fields/{sub → fields}/smart-text-field.svelte +62 -82
  47. package/dist/form-fields/fields/telephone-field.svelte +108 -0
  48. package/dist/form-fields/{sub → fields}/telephone-field.svelte.d.ts +1 -1
  49. package/dist/form-fields/{sub → fields}/text-field.svelte +28 -11
  50. package/dist/form-fields/{sub → fields}/voicenote-field.svelte +117 -46
  51. package/dist/form-fields/file_creation_options.d.ts +1 -1
  52. package/dist/form-fields/form-field.svelte +8 -1
  53. package/dist/form-fields/icons/ChevronDownIcon.svelte +21 -0
  54. package/dist/form-fields/icons/ChevronDownIcon.svelte.d.ts +20 -0
  55. package/dist/form-fields/icons/QrCodeScannerIcon.svelte +25 -0
  56. package/dist/form-fields/icons/QrCodeScannerIcon.svelte.d.ts +19 -0
  57. package/dist/form-fields/icons/ScreenRecordingIcon.svelte +21 -0
  58. package/dist/form-fields/icons/ScreenRecordingIcon.svelte.d.ts +19 -0
  59. package/dist/form-fields/icons/ScreenshotIcon.svelte +22 -0
  60. package/dist/form-fields/icons/ScreenshotIcon.svelte.d.ts +19 -0
  61. package/dist/form-fields/index.d.ts +5 -1
  62. package/dist/form-fields/index.js +3 -1
  63. package/dist/form-fields/interfaces.d.ts +63 -63
  64. package/dist/form-fields/interfaces.js +42 -39
  65. package/dist/form-fields/intl-tel-input.css +1 -0
  66. package/dist/form-fields/styles.d.ts +17 -0
  67. package/dist/form-fields/styles.js +4 -0
  68. package/package.json +2 -4
  69. package/dist/form-fields/sub/checkbox-autocomplete.svelte +0 -56
  70. package/dist/form-fields/sub/checkbox-field.svelte +0 -42
  71. package/dist/form-fields/sub/data-indication-field.svelte +0 -19
  72. package/dist/form-fields/sub/date-field.svelte +0 -31
  73. package/dist/form-fields/sub/date-time-field.svelte +0 -31
  74. package/dist/form-fields/sub/field-builder-field.svelte +0 -657
  75. package/dist/form-fields/sub/file-field.svelte +0 -159
  76. package/dist/form-fields/sub/grid-field.svelte +0 -69
  77. package/dist/form-fields/sub/multistep-field.svelte +0 -70
  78. package/dist/form-fields/sub/note-field.svelte +0 -18
  79. package/dist/form-fields/sub/object-builder-field.svelte +0 -134
  80. package/dist/form-fields/sub/qr-code-scanner-field.svelte +0 -84
  81. package/dist/form-fields/sub/radio-field.svelte +0 -69
  82. package/dist/form-fields/sub/screenrecorder-field.svelte +0 -178
  83. package/dist/form-fields/sub/section-field.svelte +0 -50
  84. package/dist/form-fields/sub/select-field.svelte +0 -150
  85. package/dist/form-fields/sub/slider-field.svelte +0 -28
  86. package/dist/form-fields/sub/telephone-field.svelte +0 -64
  87. /package/dist/form-fields/{sub → fields}/array-builder-field.svelte.d.ts +0 -0
  88. /package/dist/form-fields/{sub → fields}/checkbox-autocomplete.svelte.d.ts +0 -0
  89. /package/dist/form-fields/{sub → fields}/checkbox-field.svelte.d.ts +0 -0
  90. /package/dist/form-fields/{sub → fields}/code-field.svelte +0 -0
  91. /package/dist/form-fields/{sub → fields}/code-field.svelte.d.ts +0 -0
  92. /package/dist/form-fields/{sub → fields}/contact-selector-field.svelte.d.ts +0 -0
  93. /package/dist/form-fields/{sub → fields}/currency-field.svelte.d.ts +0 -0
  94. /package/dist/form-fields/{sub → fields}/data-indication-field.svelte.d.ts +0 -0
  95. /package/dist/form-fields/{sub → fields}/date-field.svelte.d.ts +0 -0
  96. /package/dist/form-fields/{sub → fields}/date-time-field.svelte.d.ts +0 -0
  97. /package/dist/form-fields/{sub → fields}/email-field.svelte.d.ts +0 -0
  98. /package/dist/form-fields/{sub → fields}/field-builder-field.svelte.d.ts +0 -0
  99. /package/dist/form-fields/{sub → fields}/grid-field.svelte.d.ts +0 -0
  100. /package/dist/form-fields/{sub → fields}/heading-field.svelte.d.ts +0 -0
  101. /package/dist/form-fields/{sub → fields}/hidden-field.svelte +0 -0
  102. /package/dist/form-fields/{sub → fields}/hidden-field.svelte.d.ts +0 -0
  103. /package/dist/form-fields/{sub → fields}/hidden-location-field.svelte +0 -0
  104. /package/dist/form-fields/{sub → fields}/hidden-location-field.svelte.d.ts +0 -0
  105. /package/dist/form-fields/{sub → fields}/html-field.svelte.d.ts +0 -0
  106. /package/dist/form-fields/{sub → fields}/jsoneditor-field.svelte +0 -0
  107. /package/dist/form-fields/{sub → fields}/jsoneditor-field.svelte.d.ts +0 -0
  108. /package/dist/form-fields/{sub → fields}/map-field.svelte.d.ts +0 -0
  109. /package/dist/form-fields/{sub → fields}/multi-checkbox-field.svelte.d.ts +0 -0
  110. /package/dist/form-fields/{sub → fields}/multistep-field.svelte.d.ts +0 -0
  111. /package/dist/form-fields/{sub → fields}/note-field.svelte.d.ts +0 -0
  112. /package/dist/form-fields/{sub → fields}/number-field.svelte.d.ts +0 -0
  113. /package/dist/form-fields/{sub → fields}/object-builder-field.svelte.d.ts +0 -0
  114. /package/dist/form-fields/{sub → fields}/qr-code-scanner-field.svelte.d.ts +0 -0
  115. /package/dist/form-fields/{sub → fields}/screenrecorder-field.svelte.d.ts +0 -0
  116. /package/dist/form-fields/{sub → fields}/screenshot-field.svelte.d.ts +0 -0
  117. /package/dist/form-fields/{sub → fields}/scroll-and-read-display-field.svelte.d.ts +0 -0
  118. /package/dist/form-fields/{sub → fields}/section-field.svelte.d.ts +0 -0
  119. /package/dist/form-fields/{sub → fields}/select-field.svelte.d.ts +0 -0
  120. /package/dist/form-fields/{sub → fields}/selectresource-field.svelte +0 -0
  121. /package/dist/form-fields/{sub → fields}/selectresource-field.svelte.d.ts +0 -0
  122. /package/dist/form-fields/{sub → fields}/signature-field.svelte.d.ts +0 -0
  123. /package/dist/form-fields/{sub → fields}/slider-field.svelte.d.ts +0 -0
  124. /package/dist/form-fields/{sub → fields}/smart-text-field.svelte.d.ts +0 -0
  125. /package/dist/form-fields/{sub → fields}/text-field.svelte.d.ts +0 -0
  126. /package/dist/form-fields/{sub → fields}/voicenote-field.svelte.d.ts +0 -0
@@ -44,18 +44,19 @@ export const currency_field_param_spec = {
44
44
  };
45
45
  </script>
46
46
 
47
- <script>import { Button } from "@stubber/ui/button";
48
- import * as Command from "@stubber/ui/command";
49
- import * as Popover from "@stubber/ui/popover";
50
- import getSymbolFromCurrency from "currency-symbol-map";
47
+ <script>import getSymbolFromCurrency from "currency-symbol-map";
51
48
  import currency from "currency.js";
52
49
  import { get } from "lodash-es";
50
+ import { getContext } from "svelte";
53
51
  import { get as get_store_value } from "svelte/store";
52
+ import Autocomplete, {} from "../Autocomplete.svelte";
54
53
  import FieldLabel from "../FieldLabel.svelte";
55
54
  import FieldMessage from "../FieldMessage.svelte";
55
+ import { STYLES_CONTEXT, classNames } from "../styles";
56
56
  import { set_value_details } from "../utils";
57
57
  import { inputRegexMask } from "../../utils/input_regex_mask";
58
58
  export let fieldStore;
59
+ const styles = getContext(STYLES_CONTEXT);
59
60
  $: params = $fieldStore.params;
60
61
  const currencyRegex = /^([0-9]+(\.?[0-9]?[0-9]?)?)$/;
61
62
  const currencyName = new Intl.DisplayNames("en-US", {
@@ -125,74 +126,111 @@ const on_input = (e) => {
125
126
  $fieldStore.value = current_details.amount ? current_details.amount.toFixed(2).toString() : "";
126
127
  set_value_details($fieldStore, "details", current_details);
127
128
  };
128
- let open = false;
129
- $: selectedValue = currency_list.find((c) => c.value === current_details?.currencycode)?.value || "Select Currency...";
129
+ $: currency_options = currency_list.map((item) => ({
130
+ label: item.value,
131
+ value: item.value,
132
+ key: item.value,
133
+ searchText: `${item.value} ${item.name} ${item.symbol}`,
134
+ currency: item
135
+ }));
136
+ function select_currency(option) {
137
+ const item = option.currency;
138
+ if (!item) return;
139
+ current_details = {
140
+ ...current_details,
141
+ currencycode: item.value,
142
+ currencysymbol: item.symbol
143
+ };
144
+ set_value_details($fieldStore, "details", current_details);
145
+ }
130
146
  </script>
131
147
 
132
- <FieldLabel {fieldStore} />
133
- <div
134
- class="flex h-9 w-full min-w-0 flex-row items-center gap-2 rounded-md border border-input bg-background px-3 py-1 text-base outline-none ring-offset-background transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid]:border-destructive aria-[invalid]:ring-destructive/50 aria-[invalid]:focus-visible:ring-destructive/50 md:text-sm dark:bg-input/30"
135
- >
136
- <!-- currency indicator front left -->
137
- <div class="pointer-events-none text-gray-500">
138
- {#if current_details?.currencysymbol}
139
- {current_details.currencysymbol}
140
- {:else if params?.currency}
141
- {getSymbolFromCurrency(params.currency) || params.currency}
142
- {:else}
143
- $
148
+ <div class="currency-field">
149
+ <FieldLabel {fieldStore} />
150
+ <div
151
+ class={classNames("currency-input", $styles.input)}
152
+ aria-invalid={$fieldStore.validation_result?.type === "error" ? true : undefined}
153
+ >
154
+ <!-- currency indicator front left -->
155
+ <span class="currency-symbol" aria-hidden="true">
156
+ {#if current_details?.currencysymbol}
157
+ {current_details.currencysymbol}
158
+ {:else if params?.currency}
159
+ {getSymbolFromCurrency(params.currency) || params.currency}
160
+ {:else}
161
+ $
162
+ {/if}
163
+ </span>
164
+ <input
165
+ id={$fieldStore.id}
166
+ class="currency-amount"
167
+ data-variant="embedded"
168
+ use:inputRegexMask={currencyRegex}
169
+ value={initial_ui_value}
170
+ inputmode="decimal"
171
+ aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
172
+ aria-describedby="message-{$fieldStore.id}"
173
+ on:input={on_input}
174
+ />
175
+
176
+ <!-- currency selector back right -->
177
+ {#if currency_list.length > 1 && !params?.currency}
178
+ <Autocomplete
179
+ id="{$fieldStore.id}-currency"
180
+ options={currency_options}
181
+ value={current_details.currencycode}
182
+ variant="embedded"
183
+ ariaLabel="Currency"
184
+ emptyMessage="No currency found."
185
+ on:select={(event) => select_currency(event.detail)}
186
+ >
187
+ <svelte:fragment slot="option" let:option>
188
+ {option.currency.value} - {option.currency.name} ({option.currency.symbol})
189
+ </svelte:fragment>
190
+ </Autocomplete>
144
191
  {/if}
145
192
  </div>
146
- <input
147
- class="w-full bg-transparent focus-within:outline-none"
148
- use:inputRegexMask={currencyRegex}
149
- value={initial_ui_value}
150
- inputmode="decimal"
151
- aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
152
- on:input={on_input}
153
- />
154
-
155
- <!-- currency selector back right -->
156
- {#if currency_list.length > 1 && !params?.currency}
157
- <Popover.Root bind:open let:ids>
158
- <Popover.Trigger asChild let:builder>
159
- <Button
160
- builders={[builder]}
161
- variant="outline"
162
- role="combobox"
163
- aria-expanded={open}
164
- class="w-28 justify-between border-none bg-transparent px-1"
165
- >
166
- {selectedValue}
167
- <i class="fas fa-sort ml-2 h-4 w-4 shrink-0 opacity-50" />
168
- </Button>
169
- </Popover.Trigger>
170
- <Popover.Content class="max-h-[50vh] overflow-y-scroll p-0">
171
- <Command.Root>
172
- <Command.Input placeholder="Search currencies..." />
173
- <Command.Empty>No currency found.</Command.Empty>
174
- <Command.Group>
175
- {#each currency_list as c}
176
- <Command.Item
177
- value={c.value}
178
- onSelect={(currentValue) => {
179
- current_details = {
180
- ...current_details,
181
- currencycode: currentValue,
182
- currencysymbol: getSymbolFromCurrency(currentValue) || "",
183
- };
184
- set_value_details($fieldStore, "details", current_details);
185
- open = false;
186
- }}
187
- class={selectedValue === c.value ? "bg-primary-100" : ""}
188
- >
189
- {c.value} - {c.name} ({c.symbol})
190
- </Command.Item>
191
- {/each}
192
- </Command.Group>
193
- </Command.Root>
194
- </Popover.Content>
195
- </Popover.Root>
196
- {/if}
193
+ <FieldMessage {fieldStore} />
197
194
  </div>
198
- <FieldMessage {fieldStore} />
195
+
196
+ <style>
197
+ .currency-field {
198
+ display: flex;
199
+ flex-direction: column;
200
+ min-width: 0;
201
+ width: 100%;
202
+ }
203
+
204
+ .currency-input {
205
+ box-sizing: border-box;
206
+ display: flex;
207
+ width: 100%;
208
+ min-width: 0;
209
+ align-items: center;
210
+ }
211
+
212
+ .currency-symbol {
213
+ flex: none;
214
+ padding-right: 0.5rem;
215
+ }
216
+
217
+ .currency-amount {
218
+ min-width: 0;
219
+ flex: 1;
220
+ border: none;
221
+ background: transparent;
222
+ color: inherit;
223
+ }
224
+
225
+ .currency-amount:focus {
226
+ outline: none;
227
+ }
228
+
229
+ .currency-amount:-webkit-autofill,
230
+ .currency-amount:-webkit-autofill:hover,
231
+ .currency-amount:-webkit-autofill:focus {
232
+ -webkit-background-clip: text;
233
+ background-clip: text;
234
+ -webkit-text-fill-color: currentColor;
235
+ }
236
+ </style>
@@ -0,0 +1,39 @@
1
+ <script context="module"></script>
2
+
3
+ <script>import { isString } from "lodash-es";
4
+ import { getContext } from "svelte";
5
+ import FieldLabel from "../FieldLabel.svelte";
6
+ import FieldMessage from "../FieldMessage.svelte";
7
+ import { STYLES_CONTEXT } from "../styles";
8
+ export let fieldStore;
9
+ const styles = getContext(STYLES_CONTEXT);
10
+ let value;
11
+ $: {
12
+ const new_value = $fieldStore.value;
13
+ const is_string = isString(new_value);
14
+ value = is_string ? new_value : JSON.stringify(new_value, null, 2);
15
+ }
16
+ </script>
17
+
18
+ <div class="data-indication-field">
19
+ <FieldLabel {fieldStore} />
20
+ <output
21
+ id={$fieldStore.id}
22
+ class="data-indication-output"
23
+ aria-describedby="message-{$fieldStore.id}"
24
+ >
25
+ <pre class="data-indication-content">{value ?? ""}</pre>
26
+ </output>
27
+ <FieldMessage {fieldStore} />
28
+ </div>
29
+
30
+ <style>
31
+ .data-indication-field {
32
+ min-width: 0;
33
+ }
34
+
35
+ .data-indication-output {
36
+ display: block;
37
+ overflow: auto;
38
+ }
39
+ </style>
@@ -0,0 +1,31 @@
1
+ <script context="module"></script>
2
+
3
+ <script>import { getContext } from "svelte";
4
+ import FieldLabel from "../FieldLabel.svelte";
5
+ import FieldMessage from "../FieldMessage.svelte";
6
+ import { STYLES_CONTEXT, classNames } from "../styles";
7
+ export let fieldStore;
8
+ const styles = getContext(STYLES_CONTEXT);
9
+ </script>
10
+
11
+ <div class="date-field">
12
+ <FieldLabel {fieldStore} />
13
+ <input
14
+ id={$fieldStore.id}
15
+ bind:value={$fieldStore.value}
16
+ type="date"
17
+ class={classNames("date-input", $styles.input)}
18
+ class:date-input-empty={!$fieldStore.value}
19
+ aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
20
+ aria-describedby="message-{$fieldStore.id}"
21
+ />
22
+ <FieldMessage {fieldStore} />
23
+ </div>
24
+
25
+ <style>
26
+ .date-field,
27
+ .date-input {
28
+ box-sizing: border-box;
29
+ width: 100%;
30
+ }
31
+ </style>
@@ -0,0 +1,31 @@
1
+ <script context="module"></script>
2
+
3
+ <script>import { getContext } from "svelte";
4
+ import FieldLabel from "../FieldLabel.svelte";
5
+ import FieldMessage from "../FieldMessage.svelte";
6
+ import { STYLES_CONTEXT, classNames } from "../styles";
7
+ export let fieldStore;
8
+ const styles = getContext(STYLES_CONTEXT);
9
+ </script>
10
+
11
+ <div class="date-time-field">
12
+ <FieldLabel {fieldStore} />
13
+ <input
14
+ id={$fieldStore.id}
15
+ bind:value={$fieldStore.value}
16
+ type="datetime-local"
17
+ class={classNames("date-time-input", $styles.input)}
18
+ class:date-time-input-empty={!$fieldStore.value}
19
+ aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
20
+ aria-describedby="message-{$fieldStore.id}"
21
+ />
22
+ <FieldMessage {fieldStore} />
23
+ </div>
24
+
25
+ <style>
26
+ .date-time-field,
27
+ .date-time-input {
28
+ box-sizing: border-box;
29
+ width: 100%;
30
+ }
31
+ </style>
@@ -1,12 +1,14 @@
1
1
  <script context="module"></script>
2
2
 
3
- <script>import { Input } from "@stubber/ui/input";
3
+ <script>import { getContext } from "svelte";
4
4
  import FieldLabel from "../FieldLabel.svelte";
5
5
  import FieldMessage from "../FieldMessage.svelte";
6
+ import { STYLES_CONTEXT, classNames } from "../styles";
6
7
  import { set_value_details } from "../utils";
7
8
  export let fieldStore;
8
9
  const field = $fieldStore;
9
10
  const formStore = field.formStore;
11
+ const styles = getContext(STYLES_CONTEXT);
10
12
  $: value = $fieldStore.value;
11
13
  $: {
12
14
  const regex = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
@@ -28,13 +30,25 @@ function on_input(event) {
28
30
  }
29
31
  </script>
30
32
 
31
- <FieldLabel {fieldStore} />
32
- <Input
33
- id={$fieldStore.id}
34
- {value}
35
- placeholder={$fieldStore.label}
36
- on:input={on_input}
37
- aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
38
- aria-describedby="message-{$fieldStore.id}"
39
- />
40
- <FieldMessage {fieldStore} />
33
+ <div class="email-field">
34
+ <FieldLabel {fieldStore} />
35
+ <input
36
+ class={classNames("email-input", $styles.input)}
37
+ id={$fieldStore.id}
38
+ type="email"
39
+ value={value ?? ""}
40
+ placeholder={$fieldStore.label}
41
+ on:input={on_input}
42
+ aria-invalid={$fieldStore.validation_result?.type == "error" ? true : undefined}
43
+ aria-describedby="message-{$fieldStore.id}"
44
+ />
45
+ <FieldMessage {fieldStore} />
46
+ </div>
47
+
48
+ <style>
49
+ .email-field,
50
+ .email-input {
51
+ box-sizing: border-box;
52
+ width: 100%;
53
+ }
54
+ </style>