mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-16 02:41:05 +00:00
Merge pull request #211 from IBM/text-input
feat: support size prop for input components
This commit is contained in:
commit
7be03658b8
11 changed files with 66 additions and 16 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,11 @@
|
||||||
<script>
|
<script>
|
||||||
export let size = undefined; // "sm" | "xl"
|
export let size = undefined; // "sm" | "xl"
|
||||||
export let type = "default"; // "default" | "inline"
|
export let type = "default"; // "default" | "inline"
|
||||||
|
export let open = false;
|
||||||
|
export let light = false;
|
||||||
export let disabled = false;
|
export let disabled = false;
|
||||||
export let invalid = false;
|
export let invalid = false;
|
||||||
export let invalidText = "";
|
export let invalidText = "";
|
||||||
export let light = false;
|
|
||||||
export let open = false;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
@ -17,8 +17,9 @@
|
||||||
class:bx--list-box--disabled={disabled}
|
class:bx--list-box--disabled={disabled}
|
||||||
class:bx--list-box--expanded={open}
|
class:bx--list-box--expanded={open}
|
||||||
class:bx--list-box--light={light}
|
class:bx--list-box--light={light}
|
||||||
class={size && `bx--list-box--${size}`}
|
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
|
class="{size && `bx--list-box--${size}`}
|
||||||
|
{$$restProps.class}"
|
||||||
on:keydown
|
on:keydown
|
||||||
on:keydown={e => {
|
on:keydown={e => {
|
||||||
if (e.key === 'Escape') {
|
if (e.key === 'Escape') {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<script>
|
<script>
|
||||||
export const translationIds = { close: "close", open: "open" };
|
|
||||||
export let disabled = false;
|
export let disabled = false;
|
||||||
export let id = "ccs-" + Math.random().toString(36);
|
|
||||||
export let role = "combobox";
|
export let role = "combobox";
|
||||||
export let tabindex = "-1";
|
export let tabindex = "-1";
|
||||||
|
export const translationIds = { close: "close", open: "open" };
|
||||||
export let translateWithId = id => defaultTranslations[id];
|
export let translateWithId = id => defaultTranslations[id];
|
||||||
|
export let id = "ccs-" + Math.random().toString(36);
|
||||||
export let ref = null;
|
export let ref = null;
|
||||||
|
|
||||||
import { getContext } from "svelte";
|
import { getContext } from "svelte";
|
||||||
|
|
|
@ -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