mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 02:11:05 +00:00
feat: support size prop for input components
- DatePickerInput, NumberInput, Select, PasswordInput, TextInput
This commit is contained in:
parent
9dd9c09362
commit
331dc4a656
9 changed files with 60 additions and 11 deletions
|
@ -8,6 +8,12 @@ const patterns = {
|
||||||
"Regular (d{1,2}/d{1,2}/d{4})": "d{1,2}/d{1,2}/d{4}",
|
"Regular (d{1,2}/d{1,2}/d{4})": "d{1,2}/d{1,2}/d{4}",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const sizes = {
|
||||||
|
"Extra large size (xl)": "xl",
|
||||||
|
"Default size": undefined,
|
||||||
|
"Small size (sm)": "sm",
|
||||||
|
};
|
||||||
|
|
||||||
export const Default = () => ({
|
export const Default = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
|
@ -19,6 +25,7 @@ export const Default = () => ({
|
||||||
datePickerInput: {
|
datePickerInput: {
|
||||||
id: "date-picker-input-id",
|
id: "date-picker-input-id",
|
||||||
name: "date-picker-input-name",
|
name: "date-picker-input-name",
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
labelText: text(
|
labelText: text(
|
||||||
"Label text (labelText in <DatePickerInput>)",
|
"Label text (labelText in <DatePickerInput>)",
|
||||||
"Date Picker label"
|
"Date Picker label"
|
||||||
|
@ -63,6 +70,7 @@ export const Single = () => ({
|
||||||
},
|
},
|
||||||
datePickerInput: {
|
datePickerInput: {
|
||||||
id: "date-picker-input-id",
|
id: "date-picker-input-id",
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
labelText: text(
|
labelText: text(
|
||||||
"Label text (labelText in <DatePickerInput>)",
|
"Label text (labelText in <DatePickerInput>)",
|
||||||
"Date Picker label"
|
"Date Picker label"
|
||||||
|
@ -105,6 +113,7 @@ export const Range = () => ({
|
||||||
},
|
},
|
||||||
datePickerInput: {
|
datePickerInput: {
|
||||||
id: "date-picker-input-id",
|
id: "date-picker-input-id",
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
labelText: text(
|
labelText: text(
|
||||||
"Label text (labelText in <DatePickerInput>)",
|
"Label text (labelText in <DatePickerInput>)",
|
||||||
"Date Picker label"
|
"Date Picker label"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let type = "text";
|
export let type = "text";
|
||||||
export let placeholder = "";
|
export let placeholder = "";
|
||||||
export let pattern = "\\d{1,2}\\/\\d{1,2}\\/\\d{4}";
|
export let pattern = "\\d{1,2}\\/\\d{1,2}\\/\\d{4}";
|
||||||
|
@ -51,7 +52,15 @@
|
||||||
<input
|
<input
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-invalid={invalid || undefined}
|
data-invalid={invalid || undefined}
|
||||||
|
value={!$range ? $inputValue : undefined}
|
||||||
|
{id}
|
||||||
|
{name}
|
||||||
|
{placeholder}
|
||||||
|
{type}
|
||||||
|
{pattern}
|
||||||
|
{disabled}
|
||||||
class:bx--date-picker__input={true}
|
class:bx--date-picker__input={true}
|
||||||
|
class={size && `bx--date-picker__input--${size}`}
|
||||||
on:input
|
on:input
|
||||||
on:input={({ target }) => {
|
on:input={({ target }) => {
|
||||||
updateValue({ type: 'input', value: target.value });
|
updateValue({ type: 'input', value: target.value });
|
||||||
|
@ -68,14 +77,7 @@
|
||||||
on:blur
|
on:blur
|
||||||
on:blur={({ relatedTarget }) => {
|
on:blur={({ relatedTarget }) => {
|
||||||
blurInput(relatedTarget);
|
blurInput(relatedTarget);
|
||||||
}}
|
}} />
|
||||||
{id}
|
|
||||||
{name}
|
|
||||||
{placeholder}
|
|
||||||
{type}
|
|
||||||
{pattern}
|
|
||||||
{disabled}
|
|
||||||
value={!$range ? $inputValue : undefined} />
|
|
||||||
{#if $hasCalendar}
|
{#if $hasCalendar}
|
||||||
<Calendar16
|
<Calendar16
|
||||||
role="img"
|
role="img"
|
||||||
|
|
|
@ -1,11 +1,24 @@
|
||||||
import { withKnobs, text, boolean, number } from "@storybook/addon-knobs";
|
import {
|
||||||
|
withKnobs,
|
||||||
|
text,
|
||||||
|
boolean,
|
||||||
|
number,
|
||||||
|
select,
|
||||||
|
} from "@storybook/addon-knobs";
|
||||||
import Component from "./NumberInput.Story.svelte";
|
import Component from "./NumberInput.Story.svelte";
|
||||||
|
|
||||||
export default { title: "NumberInput", decorators: [withKnobs] };
|
export default { title: "NumberInput", decorators: [withKnobs] };
|
||||||
|
|
||||||
|
const sizes = {
|
||||||
|
"Extra large size (xl)": "xl",
|
||||||
|
"Default size": undefined,
|
||||||
|
"Small size (sm)": "sm",
|
||||||
|
};
|
||||||
|
|
||||||
export const Default = () => ({
|
export const Default = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
id: text("NumberInput id", "number-input-id"),
|
id: text("NumberInput id", "number-input-id"),
|
||||||
name: text("NumberInput name", "number-input-name"),
|
name: text("NumberInput name", "number-input-name"),
|
||||||
label: text("Label (label)", "Number Input label"),
|
label: text("Label (label)", "Number Input label"),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let value = "";
|
export let value = "";
|
||||||
export let step = 1;
|
export let step = 1;
|
||||||
export let max = undefined;
|
export let max = undefined;
|
||||||
|
@ -76,7 +77,8 @@
|
||||||
class:bx--number--readonly={readonly}
|
class:bx--number--readonly={readonly}
|
||||||
class:bx--number--light={light}
|
class:bx--number--light={light}
|
||||||
class:bx--number--nolabel={hideLabel}
|
class:bx--number--nolabel={hideLabel}
|
||||||
class:bx--number--mobile={mobile}>
|
class:bx--number--mobile={mobile}
|
||||||
|
class={size && `bx--number--${size}`}>
|
||||||
{#if mobile}
|
{#if mobile}
|
||||||
{#if label}
|
{#if label}
|
||||||
<label
|
<label
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
import { withKnobs, text, boolean } from "@storybook/addon-knobs";
|
import { withKnobs, text, boolean, select } from "@storybook/addon-knobs";
|
||||||
import Component from "./Select.Story.svelte";
|
import Component from "./Select.Story.svelte";
|
||||||
|
|
||||||
export default { title: "Select", decorators: [withKnobs] };
|
export default { title: "Select", decorators: [withKnobs] };
|
||||||
|
|
||||||
|
const sizes = {
|
||||||
|
"Extra large size (xl)": "xl",
|
||||||
|
"Default size": undefined,
|
||||||
|
"Small size (sm)": "sm",
|
||||||
|
};
|
||||||
|
|
||||||
export const Default = () => ({
|
export const Default = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
select: {
|
select: {
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
light: boolean("Light variant (light in <Select>)", false),
|
light: boolean("Light variant (light in <Select>)", false),
|
||||||
inline: boolean(
|
inline: boolean(
|
||||||
"Put control in-line with label (inline in <Select>)",
|
"Put control in-line with label (inline in <Select>)",
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let selected = undefined;
|
export let selected = undefined;
|
||||||
export let inline = false;
|
export let inline = false;
|
||||||
export let light = false;
|
export let light = false;
|
||||||
|
@ -68,6 +69,7 @@
|
||||||
{id}
|
{id}
|
||||||
{name}
|
{name}
|
||||||
class:bx--select-input={true}
|
class:bx--select-input={true}
|
||||||
|
class={size && `bx--select-input--${size}`}
|
||||||
on:change={({ target }) => {
|
on:change={({ target }) => {
|
||||||
selectedValue.set(target.value);
|
selectedValue.set(target.value);
|
||||||
}}
|
}}
|
||||||
|
@ -105,6 +107,7 @@
|
||||||
disabled={disabled || undefined}
|
disabled={disabled || undefined}
|
||||||
aria-invalid={invalid || undefined}
|
aria-invalid={invalid || undefined}
|
||||||
class:bx--select-input={true}
|
class:bx--select-input={true}
|
||||||
|
class={size && `bx--select-input--${size}`}
|
||||||
on:change={({ target }) => {
|
on:change={({ target }) => {
|
||||||
selectedValue.set(target.value);
|
selectedValue.set(target.value);
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let type = "password";
|
export let type = "password";
|
||||||
export let value = "";
|
export let value = "";
|
||||||
export let hidePasswordLabel = "Hide password";
|
export let hidePasswordLabel = "Hide password";
|
||||||
|
@ -70,6 +71,7 @@
|
||||||
class:bx--password-input={true}
|
class:bx--password-input={true}
|
||||||
class:bx--text-input--light={light}
|
class:bx--text-input--light={light}
|
||||||
class:bx--text-input--invalid={invalid}
|
class:bx--text-input--invalid={invalid}
|
||||||
|
class={size && `bx--text-input--${size}`}
|
||||||
on:change
|
on:change
|
||||||
on:input
|
on:input
|
||||||
on:input={({ target }) => {
|
on:input={({ target }) => {
|
||||||
|
|
|
@ -3,9 +3,16 @@ import Component from "./TextInput.Story.svelte";
|
||||||
|
|
||||||
export default { title: "TextInput", decorators: [withKnobs] };
|
export default { title: "TextInput", decorators: [withKnobs] };
|
||||||
|
|
||||||
|
const sizes = {
|
||||||
|
"Extra large size (xl)": "xl",
|
||||||
|
"Default size": undefined,
|
||||||
|
"Small size (sm)": "sm",
|
||||||
|
};
|
||||||
|
|
||||||
export const Default = () => ({
|
export const Default = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
disabled: boolean("Disabled (disabled)", false),
|
disabled: boolean("Disabled (disabled)", false),
|
||||||
light: boolean("Light variant (light)", false),
|
light: boolean("Light variant (light)", false),
|
||||||
hideLabel: boolean("No label (hideLabel)", false),
|
hideLabel: boolean("No label (hideLabel)", false),
|
||||||
|
@ -25,6 +32,7 @@ export const TogglePasswordVisibility = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
story: "password-visibility",
|
story: "password-visibility",
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
disabled: boolean("Disabled (disabled)", false),
|
disabled: boolean("Disabled (disabled)", false),
|
||||||
light: boolean("Light variant (light)", false),
|
light: boolean("Light variant (light)", false),
|
||||||
hideLabel: boolean("No label (hideLabel)", false),
|
hideLabel: boolean("No label (hideLabel)", false),
|
||||||
|
@ -62,6 +70,7 @@ export const ControlledTogglePasswordVisibility = () => ({
|
||||||
Component,
|
Component,
|
||||||
props: {
|
props: {
|
||||||
story: "controlled",
|
story: "controlled",
|
||||||
|
size: select("Field size (size)", sizes, undefined) || undefined,
|
||||||
disabled: boolean("Disabled (disabled)", false),
|
disabled: boolean("Disabled (disabled)", false),
|
||||||
light: boolean("Light variant (light)", false),
|
light: boolean("Light variant (light)", false),
|
||||||
hideLabel: boolean("No label (hideLabel)", false),
|
hideLabel: boolean("No label (hideLabel)", false),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let type = "";
|
export let type = "";
|
||||||
export let value = "";
|
export let value = "";
|
||||||
export let placeholder = "";
|
export let placeholder = "";
|
||||||
|
@ -62,6 +63,7 @@
|
||||||
class:bx--text-input={true}
|
class:bx--text-input={true}
|
||||||
class:bx--text-input--light={light}
|
class:bx--text-input--light={light}
|
||||||
class:bx--text-input--invalid={invalid}
|
class:bx--text-input--invalid={invalid}
|
||||||
|
class={size && `bx--text-input--${size}`}
|
||||||
on:change
|
on:change
|
||||||
on:input
|
on:input
|
||||||
on:input={({ target }) => {
|
on:input={({ target }) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue