diff --git a/src/lib/components/alert.svelte b/src/lib/components/alert.svelte
index f83488a7f..bf06d2c28 100644
--- a/src/lib/components/alert.svelte
+++ b/src/lib/components/alert.svelte
@@ -3,16 +3,9 @@
import type { Buttons } from '../stores/notifications';
export let dismissible = false;
- export let type: '' | 'info' | 'success' | 'warning' | 'error' = 'info';
+ export let type: 'info' | 'success' | 'warning' | 'error' = 'info';
export let buttons: Buttons[] = [];
- let icon = {
- success: 'icon-check-circle',
- warning: 'icon-exclamation',
- error: 'icon-exclamation-circle',
- info: 'icon-info'
- };
-
const dispatch = createEventDispatcher();
@@ -31,7 +24,12 @@
{#if $$slots.title}
diff --git a/src/lib/components/modal.svelte b/src/lib/components/modal.svelte
index 3a1263411..137463f0f 100644
--- a/src/lib/components/modal.svelte
+++ b/src/lib/components/modal.svelte
@@ -1,5 +1,6 @@
-
+
{#if type}
-
+
{/if}
diff --git a/src/lib/elements/forms/inputCheckbox.svelte b/src/lib/elements/forms/inputCheckbox.svelte
index 6e9e3c75a..cecc2a441 100644
--- a/src/lib/elements/forms/inputCheckbox.svelte
+++ b/src/lib/elements/forms/inputCheckbox.svelte
@@ -7,23 +7,21 @@
export let value = false;
export let required = false;
export let disabled = false;
- export let errorMessage = 'An error occurred';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
let element: HTMLInputElement;
+ let error: string;
const handleInvalid = (event: Event) => {
- errorMessage = element.validationMessage;
- if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
- }
event.preventDefault();
- showHelper = true;
+ if (element.validity.valueMissing) {
+ error = 'This field is required';
+ return;
+ }
+ error = element.validationMessage;
};
$: if (value) {
- showHelper = false;
+ error = null;
}
@@ -31,15 +29,15 @@
+ bind:this={element}
+ bind:checked={value}
+ on:invalid={handleInvalid} />
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputCustomId.svelte b/src/lib/elements/forms/inputCustomId.svelte
index 2d30b8da4..09d43093e 100644
--- a/src/lib/elements/forms/inputCustomId.svelte
+++ b/src/lib/elements/forms/inputCustomId.svelte
@@ -7,9 +7,11 @@
export let placeholder = '';
export let required = false;
export let autofocus = false;
+
let element: HTMLInputElement;
let unique = true;
let bench = '';
+
const toggle = async () => {
unique = !unique;
if (unique) {
diff --git a/src/lib/elements/forms/inputEmail.svelte b/src/lib/elements/forms/inputEmail.svelte
index 9b07303d7..1358a5202 100644
--- a/src/lib/elements/forms/inputEmail.svelte
+++ b/src/lib/elements/forms/inputEmail.svelte
@@ -11,11 +11,9 @@
export let disabled = false;
export let autofocus = false;
export let autocomplete = false;
- export let errorMessage = 'An error occurred';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
let element: HTMLInputElement;
+ let error: string;
onMount(() => {
if (element && autofocus) {
@@ -25,18 +23,19 @@
const handleInvalid = (event: Event) => {
event.preventDefault();
- errorMessage = element.validationMessage;
if (element.validity.typeMismatch) {
- errorMessage = 'Your email should be formatted as: name@example.com';
+ error = 'Your email should be formatted as: name@example.com';
+ return;
}
if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
+ error = 'This field is required';
+ return;
}
- showHelper = true;
+ error = element.validationMessage;
};
$: if (value) {
- showHelper = false;
+ error = null;
}
@@ -44,18 +43,18 @@
+ bind:this={element}
+ on:invalid={handleInvalid} />
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputFile.svelte b/src/lib/elements/forms/inputFile.svelte
index 545523e77..bb1431cd4 100644
--- a/src/lib/elements/forms/inputFile.svelte
+++ b/src/lib/elements/forms/inputFile.svelte
@@ -12,6 +12,6 @@
-
+
diff --git a/src/lib/elements/forms/inputNumber.svelte b/src/lib/elements/forms/inputNumber.svelte
index acf1453e6..1aab304d5 100644
--- a/src/lib/elements/forms/inputNumber.svelte
+++ b/src/lib/elements/forms/inputNumber.svelte
@@ -12,11 +12,9 @@
export let autofocus = false;
export let maxlength: number = null;
export let minlength: number = null;
- export let errorMessage = 'An error occurred';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
let element: HTMLInputElement;
+ let error: string;
onMount(() => {
if (element && autofocus) {
@@ -27,16 +25,16 @@
const handleInvalid = (event: Event) => {
event.preventDefault();
- errorMessage = element.validationMessage;
if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
+ error = 'This field is required';
+ return;
}
- showHelper = true;
+ error = element.validationMessage;
};
$: if (value) {
- showHelper = false;
+ error = null;
}
@@ -44,7 +42,6 @@
+ bind:this={element}
+ on:invalid={handleInvalid} />
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputPassword.svelte b/src/lib/elements/forms/inputPassword.svelte
index 452834751..d1e0aa1fd 100644
--- a/src/lib/elements/forms/inputPassword.svelte
+++ b/src/lib/elements/forms/inputPassword.svelte
@@ -13,13 +13,11 @@
export let meter = false;
export let autocomplete = false;
export let showPasswordButton = false;
- export let errorMessage = 'An error occurred';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
export let minlength = 8;
export let maxlength: number = null;
let element: HTMLInputElement;
+ let error: string;
let showInPlainText = false;
onMount(() => {
@@ -30,21 +28,22 @@
const handleInvalid = (event: Event) => {
event.preventDefault();
- errorMessage = element.validationMessage;
- console.log(element.validity);
+
if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
+ error = 'This field is required';
+ return;
}
if (element.validity.tooShort) {
- errorMessage = 'Password should contain at least 8 characters';
+ error = 'Password should contain at least 8 characters';
+ return;
}
- showHelper = true;
+ error = element.validationMessage;
};
- $: if (value) {
- showHelper = false;
- }
$: strength = value ? value.length * 10 : 0;
+ $: if (value) {
+ error = null;
+ }
@@ -52,32 +51,32 @@
{#if showInPlainText}
+ bind:this={element}
+ on:invalid={handleInvalid} />
{:else}
+ bind:this={element}
+ on:invalid={handleInvalid} />
{/if}
{#if meter}
@@ -104,7 +103,7 @@
{/if}
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputPhone.svelte b/src/lib/elements/forms/inputPhone.svelte
index 5fa512e5b..47e331e79 100644
--- a/src/lib/elements/forms/inputPhone.svelte
+++ b/src/lib/elements/forms/inputPhone.svelte
@@ -12,11 +12,11 @@
export let autofocus = false;
export let autocomplete = false;
export let maxlength: number = null;
- export let errorMessage = 'Allowed characters: leading ‘+’ and maximum of 15 digits';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
+
+ const pattern = String.raw`^\+?[1-9]\d{1,14}$`;
let element: HTMLInputElement;
+ let error: string;
onMount(() => {
if (element && autofocus) {
@@ -26,15 +26,21 @@
const handleInvalid = (event: Event) => {
event.preventDefault();
- errorMessage = element.validationMessage;
- if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
+
+ if (element.validity.patternMismatch) {
+ error = "Allowed characters: leading '+' and maximum of 15 digits";
+ return;
}
- showHelper = true;
+ if (element.validity.valueMissing) {
+ error = 'This field is required';
+ return;
+ }
+
+ error = element.validationMessage;
};
$: if (value) {
- showHelper = false;
+ error = null;
}
@@ -42,19 +48,20 @@
+ bind:this={element}
+ on:invalid={handleInvalid} />
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputRadio.svelte b/src/lib/elements/forms/inputRadio.svelte
index 681885ac1..ac1734e0d 100644
--- a/src/lib/elements/forms/inputRadio.svelte
+++ b/src/lib/elements/forms/inputRadio.svelte
@@ -9,41 +9,40 @@
export let name: string;
export let required = false;
export let disabled = false;
- export let errorMessage = 'An error occurred';
- export let errorType: false | 'success' | 'warning' | 'error' = 'warning';
- export let showHelper = false;
let element: HTMLInputElement;
+ let error: string;
const handleInvalid = (event: Event) => {
event.preventDefault();
- errorMessage = element.validationMessage;
+
if (element.validity.valueMissing) {
- errorMessage = 'This field is required';
+ error = 'This field is required';
+ return;
}
- showHelper = true;
+ error = element.validationMessage;
};
$: if (value) {
- showHelper = false;
+ error = null;
}
+ bind:group
+ bind:this={element}
+ on:invalid={handleInvalid} />
- {#if showHelper}
- {errorMessage}
+ {#if error}
+ {error}
{/if}
diff --git a/src/lib/elements/forms/inputSearch.svelte b/src/lib/elements/forms/inputSearch.svelte
index 5b3651c40..e1806d3d7 100644
--- a/src/lib/elements/forms/inputSearch.svelte
+++ b/src/lib/elements/forms/inputSearch.svelte
@@ -40,16 +40,11 @@
{required}
type="search"
class="input-text"
- on:input={valueChange}
- bind:this={element} />
+ bind:this={element}
+ on:input={valueChange} />
{#if isWithEndButton && value}
-