mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 10:21:05 +00:00
fix(password-input): support invalid state when used in a FluidForm
(#1371)
* fix(password-input): support invalid state when used in a `FluidForm` * docs(fluid-form): add example "Invalid state"
This commit is contained in:
parent
83c11fd460
commit
6a3614bf55
3 changed files with 79 additions and 39 deletions
|
@ -1,15 +1,18 @@
|
||||||
<script>
|
<script>
|
||||||
import { FluidForm, FormGroup, TextInput, PasswordInput, Button,} from "carbon-components-svelte";
|
import {
|
||||||
|
FluidForm,
|
||||||
|
TextInput,
|
||||||
|
PasswordInput,
|
||||||
|
} from "carbon-components-svelte";
|
||||||
import Preview from "../../components/Preview.svelte";
|
import Preview from "../../components/Preview.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
### Fluid form
|
### Fluid form
|
||||||
|
|
||||||
|
Note that the `inline` input variants cannot be used within a `FluidForm`.
|
||||||
|
|
||||||
<FluidForm>
|
<FluidForm>
|
||||||
<TextInput
|
<TextInput labelText="User name" placeholder="Enter user name..." required />
|
||||||
labelText="User name"
|
|
||||||
placeholder="Enter user name..."
|
|
||||||
required />
|
|
||||||
<PasswordInput
|
<PasswordInput
|
||||||
required
|
required
|
||||||
type="password"
|
type="password"
|
||||||
|
@ -17,3 +20,7 @@
|
||||||
placeholder="Enter password..."
|
placeholder="Enter password..."
|
||||||
/>
|
/>
|
||||||
</FluidForm>
|
</FluidForm>
|
||||||
|
|
||||||
|
### Invalid state
|
||||||
|
|
||||||
|
<FileSource src="/framed/FluidForm/FluidFormInvalid" />
|
25
docs/src/pages/framed/FluidForm/FluidFormInvalid.svelte
Normal file
25
docs/src/pages/framed/FluidForm/FluidFormInvalid.svelte
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
FluidForm,
|
||||||
|
TextInput,
|
||||||
|
PasswordInput,
|
||||||
|
} from "carbon-components-svelte";
|
||||||
|
|
||||||
|
let password = "";
|
||||||
|
let invalid = false;
|
||||||
|
|
||||||
|
$: invalid = !/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/.test(password);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<FluidForm>
|
||||||
|
<TextInput labelText="User name" placeholder="Enter user name..." required />
|
||||||
|
<PasswordInput
|
||||||
|
bind:value="{password}"
|
||||||
|
invalid="{invalid}"
|
||||||
|
invalidText="Your password must be at least 6 characters as well as contain at least one uppercase, one lowercase, and one number."
|
||||||
|
required
|
||||||
|
type="password"
|
||||||
|
labelText="Password"
|
||||||
|
placeholder="Enter password..."
|
||||||
|
/>
|
||||||
|
</FluidForm>
|
|
@ -192,39 +192,47 @@
|
||||||
on:blur
|
on:blur
|
||||||
on:paste
|
on:paste
|
||||||
/>
|
/>
|
||||||
<button
|
{#if isFluid && invalid}
|
||||||
type="button"
|
<hr class="bx--text-input__divider" />
|
||||||
disabled="{disabled}"
|
<div class="bx--form-requirement" id="{errorId}">
|
||||||
class:bx--text-input--password__visibility__toggle="{true}"
|
{invalidText}
|
||||||
class:bx--btn="{true}"
|
</div>
|
||||||
class:bx--btn--icon-only="{true}"
|
{/if}
|
||||||
class:bx--btn--disabled="{disabled}"
|
{#if !(isFluid && invalid)}
|
||||||
class:bx--tooltip__trigger="{true}"
|
<button
|
||||||
class:bx--tooltip--a11y="{true}"
|
type="button"
|
||||||
class:bx--tooltip--top="{tooltipPosition === 'top'}"
|
disabled="{disabled}"
|
||||||
class:bx--tooltip--right="{tooltipPosition === 'right'}"
|
class:bx--text-input--password__visibility__toggle="{true}"
|
||||||
class:bx--tooltip--bottom="{tooltipPosition === 'bottom'}"
|
class:bx--btn="{true}"
|
||||||
class:bx--tooltip--left="{tooltipPosition === 'left'}"
|
class:bx--btn--icon-only="{true}"
|
||||||
class:bx--tooltip--align-start="{tooltipAlignment === 'start'}"
|
class:bx--btn--disabled="{disabled}"
|
||||||
class:bx--tooltip--align-center="{tooltipAlignment === 'center'}"
|
class:bx--tooltip__trigger="{true}"
|
||||||
class:bx--tooltip--align-end="{tooltipAlignment === 'end'}"
|
class:bx--tooltip--a11y="{true}"
|
||||||
on:click="{() => {
|
class:bx--tooltip--top="{tooltipPosition === 'top'}"
|
||||||
type = type === 'password' ? 'text' : 'password';
|
class:bx--tooltip--right="{tooltipPosition === 'right'}"
|
||||||
}}"
|
class:bx--tooltip--bottom="{tooltipPosition === 'bottom'}"
|
||||||
>
|
class:bx--tooltip--left="{tooltipPosition === 'left'}"
|
||||||
{#if !disabled}
|
class:bx--tooltip--align-start="{tooltipAlignment === 'start'}"
|
||||||
<span class:bx--assistive-text="{true}">
|
class:bx--tooltip--align-center="{tooltipAlignment === 'center'}"
|
||||||
{#if type === "text"}
|
class:bx--tooltip--align-end="{tooltipAlignment === 'end'}"
|
||||||
{hidePasswordLabel}
|
on:click="{() => {
|
||||||
{:else}{showPasswordLabel}{/if}
|
type = type === 'password' ? 'text' : 'password';
|
||||||
</span>
|
}}"
|
||||||
{/if}
|
>
|
||||||
{#if type === "text"}
|
{#if !disabled}
|
||||||
<ViewOff class="bx--icon-visibility-off" />
|
<span class:bx--assistive-text="{true}">
|
||||||
{:else}
|
{#if type === "text"}
|
||||||
<View class="bx--icon-visibility-on" />
|
{hidePasswordLabel}
|
||||||
{/if}
|
{:else}{showPasswordLabel}{/if}
|
||||||
</button>
|
</span>
|
||||||
|
{/if}
|
||||||
|
{#if type === "text"}
|
||||||
|
<ViewOff class="bx--icon-visibility-off" />
|
||||||
|
{:else}
|
||||||
|
<View class="bx--icon-visibility-on" />
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if !isFluid && invalid}
|
{#if !isFluid && invalid}
|
||||||
<div class:bx--form-requirement="{true}" id="{errorId}">
|
<div class:bx--form-requirement="{true}" id="{errorId}">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue