@charcoal-ui/react 4.0.0-beta.3 → 4.0.0-beta.5
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.
- package/dist/_lib/useClassNames.d.ts +2 -2
- package/dist/_lib/useClassNames.d.ts.map +1 -1
- package/dist/components/Checkbox/CheckboxInput/index.d.ts +11 -0
- package/dist/components/Checkbox/CheckboxInput/index.d.ts.map +1 -0
- package/dist/components/Checkbox/CheckboxWithLabel.d.ts +9 -0
- package/dist/components/Checkbox/CheckboxWithLabel.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +12 -21
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Clickable/index.d.ts +10 -13
- package/dist/components/Clickable/index.d.ts.map +1 -1
- package/dist/components/DropdownSelector/Popover/index.d.ts +1 -2
- package/dist/components/DropdownSelector/Popover/index.d.ts.map +1 -1
- package/dist/components/DropdownSelector/index.d.ts.map +1 -1
- package/dist/components/FieldLabel/index.d.ts +1 -0
- package/dist/components/FieldLabel/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.d.ts +7 -5
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/LoadingSpinner/index.d.ts +1 -0
- package/dist/components/LoadingSpinner/index.d.ts.map +1 -1
- package/dist/components/Modal/Dialog/index.d.ts +6 -24
- package/dist/components/Modal/Dialog/index.d.ts.map +1 -1
- package/dist/components/Modal/ModalPlumbing.d.ts +10 -3
- package/dist/components/Modal/ModalPlumbing.d.ts.map +1 -1
- package/dist/components/Modal/index.d.ts +2 -2
- package/dist/components/Modal/index.d.ts.map +1 -1
- package/dist/components/Modal/useCustomModalOverlay.d.ts.map +1 -1
- package/dist/components/Radio/index.d.ts +6 -8
- package/dist/components/Radio/index.d.ts.map +1 -1
- package/dist/components/SegmentedControl/index.d.ts +1 -0
- package/dist/components/SegmentedControl/index.d.ts.map +1 -1
- package/dist/components/Switch/SwitchInput/index.d.ts +9 -0
- package/dist/components/Switch/SwitchInput/index.d.ts.map +1 -0
- package/dist/components/Switch/SwitchWithLabel.d.ts +9 -0
- package/dist/components/Switch/SwitchWithLabel.d.ts.map +1 -0
- package/dist/components/Switch/index.d.ts +4 -15
- package/dist/components/Switch/index.d.ts.map +1 -1
- package/dist/components/TagItem/index.d.ts +14 -15
- package/dist/components/TagItem/index.d.ts.map +1 -1
- package/dist/components/TextArea/index.d.ts +28 -18
- package/dist/components/TextArea/index.d.ts.map +1 -1
- package/dist/components/TextField/index.d.ts +32 -19
- package/dist/components/TextField/index.d.ts.map +1 -1
- package/dist/core/CharcoalProvider.d.ts +1 -1
- package/dist/core/CharcoalProvider.d.ts.map +1 -1
- package/dist/index.cjs.js +456 -1079
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +790 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +454 -1075
- package/dist/index.esm.js.map +1 -1
- package/dist/styled.d.ts +4 -4
- package/package.json +17 -19
- package/src/_lib/useClassNames.ts +3 -9
- package/src/components/Checkbox/CheckboxInput/__snapshots__/index.story.storyshot +77 -0
- package/src/components/Checkbox/CheckboxInput/index.css +111 -0
- package/src/components/Checkbox/CheckboxInput/index.story.tsx +51 -0
- package/src/components/Checkbox/CheckboxInput/index.tsx +47 -0
- package/src/components/Checkbox/CheckboxWithLabel.tsx +24 -0
- package/src/components/Checkbox/__snapshots__/index.story.storyshot +103 -538
- package/src/components/Checkbox/index.css +21 -0
- package/src/components/Checkbox/index.story.tsx +48 -78
- package/src/components/Checkbox/index.tsx +32 -162
- package/src/components/Clickable/__snapshots__/index.story.storyshot +2 -78
- package/src/components/Clickable/index.css +41 -0
- package/src/components/Clickable/index.story.tsx +1 -1
- package/src/components/Clickable/index.tsx +25 -85
- package/src/components/DropdownSelector/ListItem/__snapshots__/index.story.storyshot +10 -135
- package/src/components/DropdownSelector/Popover/index.tsx +1 -2
- package/src/components/DropdownSelector/__snapshots__/index.story.storyshot +308 -1014
- package/src/components/DropdownSelector/index.tsx +9 -38
- package/src/components/FieldLabel/index.css +35 -0
- package/src/components/FieldLabel/index.tsx +15 -105
- package/src/components/IconButton/__snapshots__/index.story.storyshot +18 -296
- package/src/components/IconButton/index.css +118 -0
- package/src/components/IconButton/index.story.tsx +16 -39
- package/src/components/IconButton/index.tsx +41 -118
- package/src/components/LoadingSpinner/__snapshots__/LoadingSpinnerIcon.story.storyshot +2 -17
- package/src/components/LoadingSpinner/__snapshots__/index.story.storyshot +79 -29
- package/src/components/LoadingSpinner/index.css +42 -0
- package/src/components/LoadingSpinner/index.story.tsx +18 -7
- package/src/components/LoadingSpinner/index.tsx +26 -52
- package/src/components/Modal/Dialog/index.css +44 -0
- package/src/components/Modal/Dialog/index.tsx +13 -57
- package/src/components/Modal/ModalPlumbing.css +40 -0
- package/src/components/Modal/ModalPlumbing.tsx +22 -61
- package/src/components/Modal/__snapshots__/index.story.storyshot +459 -1881
- package/src/components/Modal/index.css +36 -0
- package/src/components/Modal/index.tsx +27 -74
- package/src/components/Modal/useCustomModalOverlay.tsx +5 -4
- package/src/components/Radio/__snapshots__/index.story.storyshot +51 -776
- package/src/components/Radio/index.css +97 -0
- package/src/components/Radio/index.story.tsx +20 -30
- package/src/components/Radio/index.test.tsx +0 -1
- package/src/components/Radio/index.tsx +60 -170
- package/src/components/SegmentedControl/__snapshots__/index.story.storyshot +30 -260
- package/src/components/SegmentedControl/index.css +50 -0
- package/src/components/SegmentedControl/index.tsx +20 -89
- package/src/components/Switch/SwitchInput/index.css +82 -0
- package/src/components/Switch/SwitchInput/index.tsx +40 -0
- package/src/components/Switch/SwitchWithLabel.tsx +24 -0
- package/src/components/Switch/__snapshots__/index.story.storyshot +34 -538
- package/src/components/Switch/index.css +23 -0
- package/src/components/Switch/index.story.tsx +15 -18
- package/src/components/Switch/index.tsx +43 -140
- package/src/components/TagItem/__snapshots__/index.story.storyshot +212 -1063
- package/src/components/TagItem/index.css +140 -0
- package/src/components/TagItem/index.story.tsx +44 -161
- package/src/components/TagItem/index.tsx +76 -220
- package/src/components/TextArea/TextArea.story.tsx +62 -24
- package/src/components/TextArea/__snapshots__/TextArea.story.storyshot +1024 -792
- package/src/components/TextArea/index.tsx +68 -89
- package/src/components/TextField/TextField.story.tsx +77 -67
- package/src/components/TextField/__snapshots__/TextField.story.storyshot +1152 -1274
- package/src/components/TextField/index.tsx +77 -103
- package/src/components/a11y.test.tsx +1 -1
- package/src/core/CharcoalProvider.tsx +1 -1
- package/src/index.ts +0 -7
- package/src/type.d.ts +6 -0
- package/dist/components/Button/index.story.d.ts +0 -22
- package/dist/components/Button/index.story.d.ts.map +0 -1
- package/dist/components/Button/index.test.d.ts +0 -2
- package/dist/components/Button/index.test.d.ts.map +0 -1
- package/dist/components/Checkbox/index.story.d.ts +0 -8
- package/dist/components/Checkbox/index.story.d.ts.map +0 -1
- package/dist/components/Clickable/index.story.d.ts +0 -6
- package/dist/components/Clickable/index.story.d.ts.map +0 -1
- package/dist/components/DropdownSelector/ListItem/index.story.d.ts +0 -9
- package/dist/components/DropdownSelector/ListItem/index.story.d.ts.map +0 -1
- package/dist/components/DropdownSelector/MenuList/index.story.d.ts +0 -8
- package/dist/components/DropdownSelector/MenuList/index.story.d.ts.map +0 -1
- package/dist/components/DropdownSelector/Popover/index.story.d.ts +0 -5
- package/dist/components/DropdownSelector/Popover/index.story.d.ts.map +0 -1
- package/dist/components/DropdownSelector/index.story.d.ts +0 -19
- package/dist/components/DropdownSelector/index.story.d.ts.map +0 -1
- package/dist/components/Icon/index.story.d.ts +0 -6
- package/dist/components/Icon/index.story.d.ts.map +0 -1
- package/dist/components/IconButton/index.story.d.ts +0 -9
- package/dist/components/IconButton/index.story.d.ts.map +0 -1
- package/dist/components/LoadingSpinner/LoadingSpinnerIcon.story.d.ts +0 -8
- package/dist/components/LoadingSpinner/LoadingSpinnerIcon.story.d.ts.map +0 -1
- package/dist/components/LoadingSpinner/index.story.d.ts +0 -6
- package/dist/components/LoadingSpinner/index.story.d.ts.map +0 -1
- package/dist/components/Modal/index.story.d.ts +0 -21
- package/dist/components/Modal/index.story.d.ts.map +0 -1
- package/dist/components/MultiSelect/context.d.ts +0 -14
- package/dist/components/MultiSelect/context.d.ts.map +0 -1
- package/dist/components/MultiSelect/index.d.ts +0 -36
- package/dist/components/MultiSelect/index.d.ts.map +0 -1
- package/dist/components/MultiSelect/index.story.d.ts +0 -82
- package/dist/components/MultiSelect/index.story.d.ts.map +0 -1
- package/dist/components/MultiSelect/index.test.d.ts +0 -2
- package/dist/components/MultiSelect/index.test.d.ts.map +0 -1
- package/dist/components/Radio/index.story.d.ts +0 -26
- package/dist/components/Radio/index.story.d.ts.map +0 -1
- package/dist/components/Radio/index.test.d.ts +0 -2
- package/dist/components/Radio/index.test.d.ts.map +0 -1
- package/dist/components/SegmentedControl/index.story.d.ts +0 -7
- package/dist/components/SegmentedControl/index.story.d.ts.map +0 -1
- package/dist/components/Switch/index.story.d.ts +0 -9
- package/dist/components/Switch/index.story.d.ts.map +0 -1
- package/dist/components/TagItem/index.story.d.ts +0 -16
- package/dist/components/TagItem/index.story.d.ts.map +0 -1
- package/dist/components/TextArea/TextArea.story.d.ts +0 -9
- package/dist/components/TextArea/TextArea.story.d.ts.map +0 -1
- package/dist/components/TextField/TextField.story.d.ts +0 -22
- package/dist/components/TextField/TextField.story.d.ts.map +0 -1
- package/dist/components/a11y.test.d.ts +0 -2
- package/dist/components/a11y.test.d.ts.map +0 -1
- package/src/components/LoadingSpinner/LoadingSpinnerIcon.story.tsx +0 -13
- package/src/components/MultiSelect/__snapshots__/index.story.storyshot +0 -1066
- package/src/components/MultiSelect/context.ts +0 -23
- package/src/components/MultiSelect/index.story.tsx +0 -216
- package/src/components/MultiSelect/index.test.tsx +0 -263
- package/src/components/MultiSelect/index.tsx +0 -281
|
@@ -1,70 +1,56 @@
|
|
|
1
|
-
import { useTextField } from '@react-aria/textfield'
|
|
2
1
|
import { useVisuallyHidden } from '@react-aria/visually-hidden'
|
|
3
2
|
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react'
|
|
4
3
|
import styled, { css } from 'styled-components'
|
|
5
|
-
import
|
|
4
|
+
import FieldLabel from '../FieldLabel'
|
|
6
5
|
import { countCodePointsInString, mergeRefs } from '../../_lib'
|
|
7
|
-
import {
|
|
8
|
-
import { AssistiveText, TextFieldLabel } from '../TextField'
|
|
6
|
+
import { AssistiveText } from '../TextField'
|
|
9
7
|
import { useFocusWithClick } from '../TextField/useFocusWithClick'
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
readonly value?: string
|
|
30
|
-
readonly onChange?: (value: string) => void
|
|
31
|
-
|
|
32
|
-
// react-ariaの型定義のせいでHTMLTextAreaElementにできない
|
|
33
|
-
readonly onKeyDown?: (event: React.KeyboardEvent<Element>) => void
|
|
34
|
-
readonly onFocus?: (event: React.FocusEvent<Element>) => void
|
|
35
|
-
readonly onBlur?: (event: React.FocusEvent<Element>) => void
|
|
36
|
-
|
|
37
|
-
readonly showCount?: boolean
|
|
38
|
-
readonly showLabel?: boolean
|
|
39
|
-
readonly assistiveText?: string
|
|
40
|
-
readonly invalid?: boolean
|
|
41
|
-
}
|
|
8
|
+
import { useId } from '@react-aria/utils'
|
|
9
|
+
|
|
10
|
+
export type TextAreaProps = {
|
|
11
|
+
value?: string
|
|
12
|
+
onChange?: (value: string) => void
|
|
13
|
+
|
|
14
|
+
showCount?: boolean
|
|
15
|
+
showLabel?: boolean
|
|
16
|
+
assistiveText?: string
|
|
17
|
+
invalid?: boolean
|
|
18
|
+
|
|
19
|
+
label?: string
|
|
20
|
+
requiredText?: string
|
|
21
|
+
disabled?: boolean
|
|
22
|
+
subLabel?: React.ReactNode
|
|
23
|
+
autoHeight?: boolean
|
|
24
|
+
|
|
25
|
+
getCount?: (value: string) => number
|
|
26
|
+
} & Omit<React.ComponentPropsWithoutRef<'textarea'>, 'onChange'>
|
|
42
27
|
|
|
43
28
|
const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
44
|
-
function TextAreaInner(
|
|
45
|
-
|
|
29
|
+
function TextAreaInner(
|
|
30
|
+
{
|
|
31
|
+
onChange,
|
|
46
32
|
className,
|
|
33
|
+
value,
|
|
47
34
|
showCount = false,
|
|
48
35
|
showLabel = false,
|
|
49
|
-
label,
|
|
36
|
+
label = '',
|
|
50
37
|
requiredText,
|
|
51
38
|
subLabel,
|
|
52
39
|
disabled = false,
|
|
53
40
|
required,
|
|
54
|
-
invalid = false,
|
|
55
41
|
assistiveText,
|
|
56
42
|
maxLength,
|
|
57
43
|
autoHeight = false,
|
|
58
44
|
rows: initialRows = 4,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
45
|
+
getCount = countCodePointsInString,
|
|
46
|
+
...props
|
|
47
|
+
},
|
|
48
|
+
forwardRef
|
|
49
|
+
) {
|
|
62
50
|
const { visuallyHiddenProps } = useVisuallyHidden()
|
|
63
51
|
const textareaRef = useRef<HTMLTextAreaElement>(null)
|
|
64
|
-
const
|
|
65
|
-
const [count, setCount] = useState(
|
|
66
|
-
countCodePointsInString(props.value ?? '')
|
|
67
|
-
)
|
|
52
|
+
const textAreaRef = useRef<HTMLTextAreaElement>(null)
|
|
53
|
+
const [count, setCount] = useState(getCount(value ?? ''))
|
|
68
54
|
const [rows, setRows] = useState(initialRows)
|
|
69
55
|
|
|
70
56
|
const syncHeight = useCallback(
|
|
@@ -75,10 +61,11 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
75
61
|
[initialRows]
|
|
76
62
|
)
|
|
77
63
|
|
|
78
|
-
const nonControlled =
|
|
64
|
+
const nonControlled = value === undefined
|
|
79
65
|
const handleChange = useCallback(
|
|
80
|
-
(
|
|
81
|
-
const
|
|
66
|
+
(e: React.ChangeEvent<HTMLTextAreaElement>) => {
|
|
67
|
+
const value = e.target.value
|
|
68
|
+
const count = getCount(value)
|
|
82
69
|
if (maxLength !== undefined && count > maxLength) {
|
|
83
70
|
return
|
|
84
71
|
}
|
|
@@ -90,31 +77,12 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
90
77
|
}
|
|
91
78
|
onChange?.(value)
|
|
92
79
|
},
|
|
93
|
-
[autoHeight, maxLength, nonControlled, onChange, syncHeight]
|
|
80
|
+
[autoHeight, getCount, maxLength, nonControlled, onChange, syncHeight]
|
|
94
81
|
)
|
|
95
82
|
|
|
96
83
|
useEffect(() => {
|
|
97
|
-
setCount(
|
|
98
|
-
}, [
|
|
99
|
-
|
|
100
|
-
const {
|
|
101
|
-
inputProps: ariaInputProps,
|
|
102
|
-
labelProps,
|
|
103
|
-
descriptionProps,
|
|
104
|
-
errorMessageProps,
|
|
105
|
-
} = useTextField(
|
|
106
|
-
{
|
|
107
|
-
inputElementType: 'textarea',
|
|
108
|
-
isDisabled: disabled,
|
|
109
|
-
isRequired: required,
|
|
110
|
-
validationState: invalid ? 'invalid' : 'valid',
|
|
111
|
-
description: !invalid && assistiveText,
|
|
112
|
-
errorMessage: invalid && assistiveText,
|
|
113
|
-
onChange: handleChange,
|
|
114
|
-
...props,
|
|
115
|
-
},
|
|
116
|
-
ariaRef
|
|
117
|
-
)
|
|
84
|
+
setCount(getCount(value ?? ''))
|
|
85
|
+
}, [getCount, value])
|
|
118
86
|
|
|
119
87
|
useEffect(() => {
|
|
120
88
|
if (autoHeight && textareaRef.current !== null) {
|
|
@@ -124,31 +92,44 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
124
92
|
|
|
125
93
|
const containerRef = useRef(null)
|
|
126
94
|
|
|
127
|
-
useFocusWithClick(containerRef,
|
|
95
|
+
useFocusWithClick(containerRef, textAreaRef)
|
|
128
96
|
|
|
129
|
-
const
|
|
97
|
+
const textAreaId = useId(props.id)
|
|
98
|
+
const describedbyId = useId()
|
|
99
|
+
const labelledbyId = useId()
|
|
100
|
+
|
|
101
|
+
const showAssistiveText =
|
|
102
|
+
assistiveText != null && assistiveText.length !== 0
|
|
130
103
|
|
|
131
104
|
return (
|
|
132
105
|
<TextFieldRoot className={className} isDisabled={disabled}>
|
|
133
|
-
<
|
|
106
|
+
<FieldLabel
|
|
107
|
+
htmlFor={textAreaId}
|
|
108
|
+
id={labelledbyId}
|
|
134
109
|
label={label}
|
|
135
|
-
requiredText={requiredText}
|
|
136
110
|
required={required}
|
|
111
|
+
requiredText={requiredText}
|
|
137
112
|
subLabel={subLabel}
|
|
138
|
-
{...labelProps}
|
|
139
113
|
{...(!showLabel ? visuallyHiddenProps : {})}
|
|
140
114
|
/>
|
|
141
115
|
<StyledTextareaContainer
|
|
116
|
+
aria-disabled={disabled === true ? 'true' : undefined}
|
|
117
|
+
invalid={props.invalid === true}
|
|
142
118
|
ref={containerRef}
|
|
143
|
-
invalid={invalid}
|
|
144
119
|
rows={showCount ? rows + 1 : rows}
|
|
145
|
-
aria-disabled={disabled === true ? 'true' : undefined}
|
|
146
120
|
>
|
|
147
121
|
<StyledTextarea
|
|
148
|
-
|
|
149
|
-
|
|
122
|
+
aria-describedby={showAssistiveText ? describedbyId : undefined}
|
|
123
|
+
aria-invalid={props.invalid}
|
|
124
|
+
aria-labelledby={labelledbyId}
|
|
125
|
+
id={textAreaId}
|
|
126
|
+
maxLength={maxLength}
|
|
150
127
|
noBottomPadding={showCount}
|
|
151
|
-
{
|
|
128
|
+
onChange={handleChange}
|
|
129
|
+
ref={mergeRefs(forwardRef, textAreaRef)}
|
|
130
|
+
rows={rows}
|
|
131
|
+
value={value}
|
|
132
|
+
{...props}
|
|
152
133
|
/>
|
|
153
134
|
{showCount && (
|
|
154
135
|
<MultiLineCounter>
|
|
@@ -156,11 +137,8 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
156
137
|
</MultiLineCounter>
|
|
157
138
|
)}
|
|
158
139
|
</StyledTextareaContainer>
|
|
159
|
-
{
|
|
160
|
-
<AssistiveText
|
|
161
|
-
invalid={invalid}
|
|
162
|
-
{...(invalid ? errorMessageProps : descriptionProps)}
|
|
163
|
-
>
|
|
140
|
+
{showAssistiveText && (
|
|
141
|
+
<AssistiveText invalid={props.invalid === true} id={describedbyId}>
|
|
164
142
|
{assistiveText}
|
|
165
143
|
</AssistiveText>
|
|
166
144
|
)}
|
|
@@ -172,8 +150,9 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
|
|
|
172
150
|
export default TextArea
|
|
173
151
|
|
|
174
152
|
const TextFieldRoot = styled.div<{ isDisabled: boolean }>`
|
|
175
|
-
display:
|
|
176
|
-
|
|
153
|
+
display: grid;
|
|
154
|
+
grid-template-columns: 1fr;
|
|
155
|
+
grid-gap: 4px;
|
|
177
156
|
|
|
178
157
|
${(p) => p.isDisabled && { opacity: p.theme.elementEffect.disabled.opacity }}
|
|
179
158
|
`
|
|
@@ -1,83 +1,94 @@
|
|
|
1
1
|
import styled from 'styled-components'
|
|
2
2
|
import Clickable from '../Clickable'
|
|
3
3
|
import TextField from '.'
|
|
4
|
-
import {
|
|
5
|
-
import IconButton from '../IconButton'
|
|
6
|
-
import { useCallback, useState } from 'react'
|
|
4
|
+
import { useState } from 'react'
|
|
7
5
|
import { Meta, StoryObj } from '@storybook/react'
|
|
8
6
|
|
|
9
7
|
export default {
|
|
10
8
|
title: 'TextField',
|
|
11
9
|
component: TextField,
|
|
12
|
-
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'centered',
|
|
12
|
+
},
|
|
13
|
+
} as Meta<typeof TextField>
|
|
14
|
+
|
|
15
|
+
export const Default: StoryObj<typeof TextField> = {
|
|
13
16
|
args: {
|
|
14
17
|
showLabel: false,
|
|
15
18
|
assistiveText: '',
|
|
16
19
|
disabled: false,
|
|
17
20
|
required: false,
|
|
18
21
|
invalid: false,
|
|
22
|
+
readOnly: false,
|
|
19
23
|
label: 'Label',
|
|
20
24
|
requiredText: '*必須',
|
|
21
25
|
subLabel: <Clickable>Text Link</Clickable>,
|
|
22
26
|
placeholder: 'TextField',
|
|
23
27
|
},
|
|
24
|
-
render
|
|
25
|
-
return
|
|
26
|
-
<Container>
|
|
27
|
-
<TextField {...args} />
|
|
28
|
-
</Container>
|
|
29
|
-
)
|
|
28
|
+
render(args) {
|
|
29
|
+
return <TextField {...args} />
|
|
30
30
|
},
|
|
31
|
-
}
|
|
31
|
+
}
|
|
32
32
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
export const Label: StoryObj<typeof TextField> = {
|
|
34
|
+
render() {
|
|
35
|
+
return <TextField showLabel label="Label" />
|
|
36
|
+
},
|
|
37
|
+
}
|
|
37
38
|
|
|
38
|
-
export const
|
|
39
|
+
export const Placeholder: StoryObj<typeof TextField> = {
|
|
40
|
+
render() {
|
|
41
|
+
return <TextField label="Label" placeholder="Placeholder" />
|
|
42
|
+
},
|
|
43
|
+
}
|
|
39
44
|
|
|
40
|
-
export const
|
|
41
|
-
render
|
|
42
|
-
|
|
45
|
+
export const RequiredText: StoryObj<typeof TextField> = {
|
|
46
|
+
render() {
|
|
47
|
+
return <TextField label="Label" showLabel required requiredText="*必須" />
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const AssistiveText: StoryObj<typeof TextField> = {
|
|
52
|
+
render() {
|
|
53
|
+
return <TextField label="Label" assistiveText="説明が入ります" />
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const SubLabel: StoryObj<typeof TextField> = {
|
|
58
|
+
render() {
|
|
43
59
|
return (
|
|
44
|
-
<
|
|
45
|
-
<TextField
|
|
46
|
-
{...args}
|
|
47
|
-
type="number"
|
|
48
|
-
value={count.toString()}
|
|
49
|
-
onChange={(value) => setCount(parseInt(value))}
|
|
50
|
-
onWheel={(e) => {
|
|
51
|
-
e.currentTarget.blur()
|
|
52
|
-
e.stopPropagation()
|
|
53
|
-
}}
|
|
54
|
-
/>
|
|
55
|
-
</Container>
|
|
60
|
+
<TextField label="Label" subLabel={<Clickable>Text Link</Clickable>} />
|
|
56
61
|
)
|
|
57
62
|
},
|
|
58
63
|
}
|
|
59
64
|
|
|
60
|
-
export const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
assistiveText: 'Assistive text',
|
|
64
|
-
required: true,
|
|
65
|
+
export const ShowCount = {
|
|
66
|
+
render() {
|
|
67
|
+
return <TextField label="Label" showCount maxLength={100} />
|
|
65
68
|
},
|
|
66
69
|
}
|
|
67
70
|
|
|
68
|
-
export const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
maxLength: 100,
|
|
71
|
+
export const Disabled: StoryObj<typeof TextField> = {
|
|
72
|
+
render() {
|
|
73
|
+
return <TextField label="Label" disabled />
|
|
72
74
|
},
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
export const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
export const Invalid: StoryObj<typeof TextField> = {
|
|
78
|
+
render() {
|
|
79
|
+
return <TextField label="Label" invalid assistiveText="エラーメッセージ" />
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export const ReadOnly: StoryObj<typeof TextField> = {
|
|
84
|
+
render() {
|
|
85
|
+
return <TextField label="Label" readOnly value="読み取り専用" />
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export const Affix: StoryObj<typeof TextField> = {
|
|
90
|
+
render() {
|
|
91
|
+
return <TextField label="Label" prefix="/home/john/" suffix=".png" />
|
|
81
92
|
},
|
|
82
93
|
}
|
|
83
94
|
|
|
@@ -87,35 +98,34 @@ const PrefixIconWrap = styled.div`
|
|
|
87
98
|
color: ${({ theme }) => theme.color.text3};
|
|
88
99
|
`
|
|
89
100
|
|
|
90
|
-
export const
|
|
91
|
-
render
|
|
92
|
-
const [value, setValue] = useState('')
|
|
93
|
-
const handleChange = useCallback((value: string) => {
|
|
94
|
-
setValue(value)
|
|
95
|
-
}, [])
|
|
96
|
-
const handleClear = useCallback(() => {
|
|
97
|
-
setValue('')
|
|
98
|
-
}, [])
|
|
101
|
+
export const Prefix: StoryObj<typeof TextField> = {
|
|
102
|
+
render() {
|
|
99
103
|
return (
|
|
100
104
|
<TextField
|
|
101
|
-
{...args}
|
|
102
105
|
label="Label"
|
|
103
|
-
placeholder="作品を検索"
|
|
104
|
-
value={value}
|
|
105
|
-
onChange={handleChange}
|
|
106
106
|
prefix={
|
|
107
107
|
<PrefixIconWrap>
|
|
108
108
|
<pixiv-icon name="16/Search" />
|
|
109
109
|
</PrefixIconWrap>
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
/>
|
|
112
|
+
)
|
|
113
|
+
},
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export const Number: StoryObj<typeof TextField> = {
|
|
117
|
+
render: function Render(args) {
|
|
118
|
+
const [count, setCount] = useState(0)
|
|
119
|
+
return (
|
|
120
|
+
<TextField
|
|
121
|
+
{...args}
|
|
122
|
+
type="number"
|
|
123
|
+
value={count.toString()}
|
|
124
|
+
onChange={(value) => setCount(parseInt(value))}
|
|
125
|
+
onWheel={(e) => {
|
|
126
|
+
e.currentTarget.blur()
|
|
127
|
+
e.stopPropagation()
|
|
128
|
+
}}
|
|
119
129
|
/>
|
|
120
130
|
)
|
|
121
131
|
},
|