@sakura-ui/sakura-ui 0.2.0 → 0.3.0
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/README.md +16 -6
- package/package.json +21 -15
- package/packages/core/package.json +26 -15
- package/packages/core/src/components/Button.tsx +33 -32
- package/packages/core/src/components/Card.tsx +29 -17
- package/packages/core/src/components/Code.tsx +6 -4
- package/packages/core/src/components/Faq.tsx +13 -7
- package/packages/core/src/components/Heading.tsx +42 -32
- package/packages/core/src/components/Icon.tsx +43 -13
- package/packages/core/src/components/IconButton.tsx +54 -43
- package/packages/core/src/components/LangSelector.tsx +135 -0
- package/packages/core/src/components/Link.tsx +38 -66
- package/packages/core/src/components/LinkCard.tsx +91 -0
- package/packages/core/src/components/List.tsx +14 -12
- package/packages/core/src/components/MenuButton.tsx +112 -0
- package/packages/core/src/components/NavigationItem.tsx +41 -0
- package/packages/core/src/components/OverflowContainer.tsx +24 -0
- package/packages/core/src/components/PopoverMenu.tsx +81 -0
- package/packages/core/src/components/Pre.tsx +6 -4
- package/packages/core/src/components/Table.tsx +31 -25
- package/packages/core/src/components/buttonStyle.ts +42 -31
- package/packages/core/src/components/index.ts +13 -25
- package/packages/core/src/icons/Close.tsx +21 -0
- package/packages/core/src/icons/CloseMobile.tsx +43 -0
- package/packages/core/src/icons/KeyboardArrowDown.tsx +24 -0
- package/packages/core/src/icons/Language.tsx +25 -0
- package/packages/core/src/icons/LanguageMobile.tsx +40 -0
- package/packages/core/src/icons/Menu.tsx +24 -0
- package/packages/core/src/icons/MenuMobile.tsx +40 -0
- package/packages/core/src/icons/index.ts +8 -0
- package/packages/core/src/icons/props.ts +5 -0
- package/packages/core/src/index.ts +9 -28
- package/packages/core/src/type.d.ts +1 -0
- package/packages/core/tests/Button.test.tsx +20 -10
- package/packages/core/tests/Card.test.tsx +16 -11
- package/packages/core/tests/IconButton.test.tsx +57 -0
- package/packages/core/tests/Link.test.tsx +60 -0
- package/packages/core/tests/vitest.setup.ts +1 -0
- package/packages/core/tsconfig.node.json +3 -2
- package/packages/forms/.turbo/turbo-build.log +22 -0
- package/packages/forms/dist/index.cjs.js +199 -120
- package/packages/forms/dist/index.es.js +890 -1023
- package/packages/forms/dist/types/components/Checkbox.d.ts +9 -4
- package/packages/forms/dist/types/components/Checkbox.d.ts.map +1 -1
- package/packages/forms/dist/types/components/FieldsetControl.d.ts +14 -9
- package/packages/forms/dist/types/components/FieldsetControl.d.ts.map +1 -1
- package/packages/forms/dist/types/components/FileInput.d.ts +10 -3
- package/packages/forms/dist/types/components/FileInput.d.ts.map +1 -1
- package/packages/forms/dist/types/components/Input.d.ts +9 -4
- package/packages/forms/dist/types/components/Input.d.ts.map +1 -1
- package/packages/forms/dist/types/components/LabelControl.d.ts +13 -8
- package/packages/forms/dist/types/components/LabelControl.d.ts.map +1 -1
- package/packages/forms/dist/types/components/Radio.d.ts +9 -4
- package/packages/forms/dist/types/components/Radio.d.ts.map +1 -1
- package/packages/forms/dist/types/components/Select.d.ts +9 -4
- package/packages/forms/dist/types/components/Select.d.ts.map +1 -1
- package/packages/forms/dist/types/components/Textarea.d.ts +8 -3
- package/packages/forms/dist/types/components/Textarea.d.ts.map +1 -1
- package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts +16 -11
- package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts.map +1 -1
- package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts +17 -12
- package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts.map +1 -1
- package/packages/forms/dist/types/components/index.d.ts +8 -8
- package/packages/forms/dist/types/components/index.d.ts.map +1 -1
- package/packages/forms/dist/types/components/inputStyle.d.ts +1 -1
- package/packages/forms/dist/types/components/inputStyle.d.ts.map +1 -1
- package/packages/forms/dist/types/index.d.ts +0 -1
- package/packages/forms/dist/types/index.d.ts.map +1 -1
- package/packages/forms/node_modules/.bin/autoprefixer +2 -2
- package/packages/forms/node_modules/.bin/tailwind +2 -2
- package/packages/forms/node_modules/.bin/tailwindcss +2 -2
- package/packages/forms/node_modules/.bin/ts-node +4 -4
- package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
- package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
- package/packages/forms/node_modules/.bin/ts-node-script +4 -4
- package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
- package/packages/forms/node_modules/.bin/ts-script +4 -4
- package/packages/forms/node_modules/.bin/tsc +17 -0
- package/packages/forms/node_modules/.bin/tsserver +17 -0
- package/packages/forms/node_modules/.vite/vitest/results.json +1 -0
- package/packages/forms/package.json +17 -14
- package/packages/forms/src/components/Checkbox.tsx +76 -80
- package/packages/forms/src/components/FieldsetControl.tsx +21 -28
- package/packages/forms/src/components/FileInput.tsx +87 -63
- package/packages/forms/src/components/Input.tsx +29 -31
- package/packages/forms/src/components/LabelControl.tsx +19 -25
- package/packages/forms/src/components/Radio.tsx +66 -69
- package/packages/forms/src/components/Select.tsx +65 -65
- package/packages/forms/src/components/Textarea.tsx +49 -54
- package/packages/forms/src/components/controlled/CheckboxGroup.tsx +15 -17
- package/packages/forms/src/components/controlled/RadioGroup.tsx +16 -18
- package/packages/forms/src/components/index.ts +8 -8
- package/packages/forms/src/components/inputStyle.ts +7 -8
- package/packages/forms/src/index.ts +0 -11
- package/packages/forms/tests/Checkbox.test.tsx +44 -0
- package/packages/forms/tests/FieldsetControl.test.tsx +62 -11
- package/packages/forms/tests/FileInput.test.tsx +25 -0
- package/packages/forms/tests/Input.test.tsx +12 -83
- package/packages/forms/tests/LabelControl.test.tsx +82 -20
- package/packages/forms/tests/Radio.test.tsx +23 -78
- package/packages/forms/tests/Select.test.tsx +30 -0
- package/packages/forms/tests/Textarea.test.tsx +25 -0
- package/packages/forms/tests/vitest.setup.ts +1 -0
- package/packages/forms/tsconfig.node.json +3 -2
- package/packages/helper/.turbo/turbo-build.log +23 -0
- package/packages/helper/dist/index.cjs.js +78 -0
- package/packages/helper/dist/index.es.js +119 -0
- package/packages/helper/dist/types/calc.d.ts +2 -0
- package/packages/helper/dist/types/calc.d.ts.map +1 -0
- package/packages/{forms/dist/types/utils/class.d.ts → helper/dist/types/cx.d.ts} +1 -1
- package/packages/helper/dist/types/cx.d.ts.map +1 -0
- package/packages/helper/dist/types/index.d.ts +6 -0
- package/packages/helper/dist/types/index.d.ts.map +1 -0
- package/packages/helper/dist/types/querySelector.d.ts +2 -0
- package/packages/helper/dist/types/querySelector.d.ts.map +1 -0
- package/packages/helper/dist/types/styles.d.ts +22 -0
- package/packages/helper/dist/types/styles.d.ts.map +1 -0
- package/packages/helper/dist/types/treefy.d.ts +8 -0
- package/packages/helper/dist/types/treefy.d.ts.map +1 -0
- package/packages/helper/package.json +40 -0
- package/packages/helper/src/calc.ts +1 -0
- package/packages/helper/src/index.ts +5 -0
- package/packages/helper/src/querySelector.ts +20 -0
- package/packages/helper/src/styles.ts +116 -0
- package/packages/helper/src/treefy.ts +22 -0
- package/packages/helper/tsconfig.json +13 -0
- package/packages/helper/tsconfig.node.json +6 -0
- package/packages/helper/vite.config.ts +26 -0
- package/packages/markdown/.turbo/turbo-build.log +22 -0
- package/packages/markdown/README.md +129 -0
- package/packages/markdown/dist/index.cjs.js +175 -0
- package/packages/markdown/dist/index.es.js +17098 -0
- package/packages/markdown/dist/types/components/Markdown.d.ts +15 -0
- package/packages/markdown/dist/types/components/Markdown.d.ts.map +1 -0
- package/packages/markdown/dist/types/components/index.d.ts +2 -0
- package/packages/markdown/dist/types/components/index.d.ts.map +1 -0
- package/packages/markdown/dist/types/index.d.ts +2 -0
- package/packages/markdown/dist/types/index.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/attr.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/attr.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/card.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/card.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/cell.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/cell.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/faq.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/faq.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/grid.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/grid.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/headings.d.ts +9 -0
- package/packages/markdown/dist/types/plugins/headings.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/helper.d.ts +9 -0
- package/packages/markdown/dist/types/plugins/helper.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/index.d.ts +9 -0
- package/packages/markdown/dist/types/plugins/index.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/linkButton.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/linkButton.d.ts.map +1 -0
- package/packages/markdown/dist/types/plugins/youtube.d.ts +3 -0
- package/packages/markdown/dist/types/plugins/youtube.d.ts.map +1 -0
- package/packages/markdown/node_modules/.bin/autoprefixer +17 -0
- package/packages/markdown/node_modules/.bin/tailwind +17 -0
- package/packages/markdown/node_modules/.bin/tailwindcss +17 -0
- package/packages/markdown/node_modules/.bin/ts-node +17 -0
- package/packages/markdown/node_modules/.bin/ts-node-cwd +17 -0
- package/packages/markdown/node_modules/.bin/ts-node-esm +17 -0
- package/packages/markdown/node_modules/.bin/ts-node-script +17 -0
- package/packages/markdown/node_modules/.bin/ts-node-transpile-only +17 -0
- package/packages/markdown/node_modules/.bin/ts-script +17 -0
- package/packages/markdown/node_modules/.bin/tsc +17 -0
- package/packages/markdown/node_modules/.bin/tsserver +17 -0
- package/packages/markdown/package.json +83 -0
- package/packages/markdown/src/components/Markdown.tsx +361 -0
- package/packages/markdown/src/components/index.ts +1 -0
- package/packages/markdown/src/global.d.ts +9 -0
- package/packages/markdown/src/index.ts +1 -0
- package/packages/markdown/src/plugins/attr.ts +19 -0
- package/packages/markdown/src/plugins/card.ts +57 -0
- package/packages/markdown/src/plugins/cell.ts +47 -0
- package/packages/markdown/src/plugins/faq.ts +40 -0
- package/packages/markdown/src/plugins/grid.ts +51 -0
- package/packages/markdown/src/plugins/headings.ts +35 -0
- package/packages/markdown/src/plugins/helper.ts +27 -0
- package/packages/markdown/src/plugins/index.ts +8 -0
- package/packages/markdown/src/plugins/linkButton.ts +25 -0
- package/packages/markdown/src/plugins/youtube.ts +48 -0
- package/packages/markdown/tsconfig.json +13 -0
- package/packages/markdown/tsconfig.node.json +7 -0
- package/packages/markdown/vite.config.ts +30 -0
- package/packages/tailwind-theme-plugin/.turbo/turbo-build.log +22 -0
- package/packages/tailwind-theme-plugin/dist/index.cjs.js +1 -1
- package/packages/tailwind-theme-plugin/dist/index.es.js +5354 -6111
- package/packages/tailwind-theme-plugin/dist/types/index.d.ts +1 -1
- package/packages/tailwind-theme-plugin/dist/types/index.d.ts.map +1 -1
- package/packages/tailwind-theme-plugin/node_modules/.bin/autoprefixer +2 -2
- package/packages/tailwind-theme-plugin/node_modules/.bin/tailwind +2 -2
- package/packages/tailwind-theme-plugin/node_modules/.bin/tailwindcss +2 -2
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-cwd +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-esm +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-script +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-transpile-only +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/ts-script +4 -4
- package/packages/tailwind-theme-plugin/node_modules/.bin/tsc +17 -0
- package/packages/tailwind-theme-plugin/node_modules/.bin/tsserver +17 -0
- package/packages/tailwind-theme-plugin/package.json +6 -6
- package/packages/tailwind-theme-plugin/src/index.ts +226 -291
- package/packages/core/src/libs/forward-ref.ts +0 -44
- package/packages/core/src/types/component.ts +0 -83
- package/packages/forms/dist/types/utils/class.d.ts.map +0 -1
- package/packages/forms/node_modules/.bin/acorn +0 -17
- package/packages/forms/node_modules/.bin/browserslist +0 -17
- package/packages/forms/node_modules/.bin/eslint +0 -17
- package/packages/forms/node_modules/.bin/vitest +0 -17
- package/packages/forms/src/utils/class.ts +0 -2
- package/packages/tailwind-theme-plugin/node_modules/.bin/browserslist +0 -17
- /package/packages/{core/src/libs → helper/src}/cx.ts +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { describe,
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
3
|
import { render, screen } from '@testing-library/react'
|
|
4
4
|
|
|
5
|
-
import { FieldsetControl } from '../src'
|
|
5
|
+
import { FieldsetControl, Input } from '../src'
|
|
6
6
|
|
|
7
7
|
describe('FieldsetControl', () => {
|
|
8
|
-
|
|
8
|
+
it('should render a fieldset with a label text', async () => {
|
|
9
9
|
render(<FieldsetControl labelText="test" />)
|
|
10
10
|
|
|
11
11
|
const fieldset = screen.getByRole('group')
|
|
@@ -15,34 +15,55 @@ describe('FieldsetControl', () => {
|
|
|
15
15
|
expect(screen.getByText('test')).toBeInTheDocument()
|
|
16
16
|
})
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
it('should render a fieldset with a helper text and error text', async () => {
|
|
19
19
|
render(
|
|
20
20
|
<FieldsetControl
|
|
21
21
|
labelText="test"
|
|
22
22
|
helperText="helper"
|
|
23
23
|
errorMessage="error"
|
|
24
|
-
|
|
24
|
+
isInvalid
|
|
25
|
+
>
|
|
26
|
+
<Input />
|
|
27
|
+
</FieldsetControl>
|
|
25
28
|
)
|
|
26
29
|
|
|
27
30
|
expect(screen.getByText('helper')).toBeInTheDocument()
|
|
28
|
-
expect(screen.
|
|
31
|
+
expect(screen.getByText('error')).toBeInTheDocument()
|
|
32
|
+
|
|
33
|
+
const input = screen.getByRole('textbox')
|
|
34
|
+
|
|
35
|
+
expect(input).toBeInTheDocument()
|
|
36
|
+
|
|
37
|
+
expect(input).toHaveAttribute('aria-describedby', 'helper-text-:r1:')
|
|
38
|
+
expect(input).toHaveAttribute('aria-errormessage', 'error-message-:r1:')
|
|
39
|
+
|
|
40
|
+
expect(input).toBeInvalid()
|
|
41
|
+
expect(input).toHaveAttribute('aria-invalid', 'true')
|
|
29
42
|
})
|
|
30
43
|
|
|
31
|
-
|
|
44
|
+
it('should render a fieldset with a helper text', async () => {
|
|
32
45
|
render(
|
|
33
46
|
<FieldsetControl
|
|
34
47
|
labelText="test"
|
|
35
48
|
helperText="helper"
|
|
36
49
|
errorMessage="error"
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
>
|
|
51
|
+
<Input />
|
|
52
|
+
</FieldsetControl>
|
|
39
53
|
)
|
|
40
54
|
|
|
41
55
|
expect(screen.getByText('helper')).toBeInTheDocument()
|
|
42
|
-
expect(screen.
|
|
56
|
+
expect(screen.queryByText('error')).toBeNull()
|
|
57
|
+
|
|
58
|
+
const input = screen.getByRole('textbox')
|
|
59
|
+
|
|
60
|
+
expect(input).toBeInTheDocument()
|
|
61
|
+
|
|
62
|
+
expect(input).toBeValid()
|
|
63
|
+
expect(input).toHaveAttribute('aria-invalid', 'false')
|
|
43
64
|
})
|
|
44
65
|
|
|
45
|
-
|
|
66
|
+
it('should display an asterisk only when isRequired prop is true', async () => {
|
|
46
67
|
render(<FieldsetControl labelText="test" />)
|
|
47
68
|
|
|
48
69
|
expect(screen.queryByText('*')).toBeNull()
|
|
@@ -51,4 +72,34 @@ describe('FieldsetControl', () => {
|
|
|
51
72
|
|
|
52
73
|
expect(screen.getByText('*')).toBeInTheDocument()
|
|
53
74
|
})
|
|
75
|
+
|
|
76
|
+
it('should render an input with required attribute and correct label text', async () => {
|
|
77
|
+
render(
|
|
78
|
+
<FieldsetControl labelText="test" isRequired>
|
|
79
|
+
<Input defaultValue="test value" />
|
|
80
|
+
</FieldsetControl>
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
const input = screen.getByRole('textbox')
|
|
84
|
+
|
|
85
|
+
expect(input).toBeInTheDocument()
|
|
86
|
+
|
|
87
|
+
expect(input).toBeValid()
|
|
88
|
+
expect(input).toBeRequired()
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('should render an input as invalid when required but has no value', async () => {
|
|
92
|
+
render(
|
|
93
|
+
<FieldsetControl labelText="test" isRequired>
|
|
94
|
+
<Input />
|
|
95
|
+
</FieldsetControl>
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
const input = screen.getByRole('textbox')
|
|
99
|
+
|
|
100
|
+
expect(input).toBeInTheDocument()
|
|
101
|
+
|
|
102
|
+
expect(input).toBeInvalid()
|
|
103
|
+
expect(input).toBeRequired()
|
|
104
|
+
})
|
|
54
105
|
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
|
+
import { render, screen } from '@testing-library/react'
|
|
4
|
+
|
|
5
|
+
import { FileInput } from '../src'
|
|
6
|
+
|
|
7
|
+
describe('FileInput', () => {
|
|
8
|
+
it('should render a file input with a label text', async () => {
|
|
9
|
+
render(<FileInput />)
|
|
10
|
+
|
|
11
|
+
const input = screen.getByRole('button')
|
|
12
|
+
|
|
13
|
+
expect(input).toBeInTheDocument()
|
|
14
|
+
|
|
15
|
+
expect(screen.getByLabelText('File Upload')).toBeInTheDocument()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('should pass an object to the ref property', async () => {
|
|
19
|
+
const ref = vi.fn()
|
|
20
|
+
|
|
21
|
+
render(<FileInput ref={ref} />)
|
|
22
|
+
|
|
23
|
+
expect(ref).toHaveBeenCalledTimes(1)
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -1,96 +1,25 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { describe,
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
3
|
import { render, screen } from '@testing-library/react'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Input } from '../src'
|
|
6
6
|
|
|
7
|
-
describe('
|
|
8
|
-
|
|
9
|
-
render(
|
|
10
|
-
<LabelControl labelText="test">
|
|
11
|
-
<Input />
|
|
12
|
-
</LabelControl>
|
|
13
|
-
)
|
|
7
|
+
describe('Input', () => {
|
|
8
|
+
it('should render a input with a value text', async () => {
|
|
9
|
+
render(<Input value="test" />)
|
|
14
10
|
|
|
15
|
-
const
|
|
11
|
+
const input = screen.getByRole('textbox')
|
|
16
12
|
|
|
17
|
-
expect(
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test('renders Text component vol2', async () => {
|
|
21
|
-
render(
|
|
22
|
-
<LabelControl labelText="test" helperText="helper" errorMessage="error">
|
|
23
|
-
<Input />
|
|
24
|
-
</LabelControl>
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
const text = screen.getByLabelText(/test/)
|
|
28
|
-
|
|
29
|
-
expect(text).toBeInTheDocument()
|
|
30
|
-
|
|
31
|
-
expect(text).toHaveAttribute('aria-describedby', 'helper-text-:r1:')
|
|
32
|
-
expect(text).toHaveAttribute('aria-errormessage', 'error-message-:r1:')
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
test('renders Text component vol3', async () => {
|
|
36
|
-
render(
|
|
37
|
-
<LabelControl labelText="test">
|
|
38
|
-
<Input />
|
|
39
|
-
</LabelControl>
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
const text = screen.getByLabelText(/test/)
|
|
43
|
-
|
|
44
|
-
expect(text).toBeInTheDocument()
|
|
45
|
-
|
|
46
|
-
expect(text).toBeValid()
|
|
47
|
-
expect(text).toHaveAttribute('aria-invalid', 'false')
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
test('renders Text component vol4', async () => {
|
|
51
|
-
render(
|
|
52
|
-
<LabelControl labelText="test" isInvalid>
|
|
53
|
-
<Input />
|
|
54
|
-
</LabelControl>
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
const text = screen.getByLabelText(/test/)
|
|
58
|
-
|
|
59
|
-
expect(text).toBeInTheDocument()
|
|
60
|
-
|
|
61
|
-
expect(text).toBeInvalid()
|
|
62
|
-
expect(text).toHaveAttribute('aria-invalid', 'true')
|
|
63
|
-
expect(text).not.toBeRequired()
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
test('renders Text component vol5', async () => {
|
|
67
|
-
render(
|
|
68
|
-
<LabelControl labelText="test" isRequired>
|
|
69
|
-
<Input defaultValue="test value" />
|
|
70
|
-
</LabelControl>
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
screen.getByLabelText
|
|
74
|
-
const text = screen.getByLabelText(/test/)
|
|
13
|
+
expect(input).toBeInTheDocument()
|
|
75
14
|
|
|
76
|
-
expect(
|
|
77
|
-
|
|
78
|
-
expect(text).toBeValid()
|
|
79
|
-
expect(text).toBeRequired()
|
|
15
|
+
expect(screen.getByDisplayValue('test')).toBeInTheDocument()
|
|
80
16
|
})
|
|
81
17
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
<LabelControl labelText="test" isRequired>
|
|
85
|
-
<Input />
|
|
86
|
-
</LabelControl>
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
const text = screen.getByLabelText(/test/)
|
|
18
|
+
it('should pass an object to the ref property', async () => {
|
|
19
|
+
const ref = vi.fn()
|
|
90
20
|
|
|
91
|
-
|
|
21
|
+
render(<Input ref={ref} />)
|
|
92
22
|
|
|
93
|
-
expect(
|
|
94
|
-
expect(text).toBeRequired()
|
|
23
|
+
expect(ref).toHaveBeenCalledTimes(1)
|
|
95
24
|
})
|
|
96
25
|
})
|
|
@@ -1,44 +1,62 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { describe, test, expect } from 'vitest'
|
|
2
|
+
import { describe, test, it, expect } from 'vitest'
|
|
3
3
|
import { render, screen } from '@testing-library/react'
|
|
4
4
|
|
|
5
|
-
import { LabelControl, Select, Input, Textarea } from '../src'
|
|
5
|
+
import { LabelControl, Select, Input, Textarea, FileInput } from '../src'
|
|
6
6
|
|
|
7
7
|
describe('LabelControl', () => {
|
|
8
|
-
|
|
8
|
+
it('should render a label with a label text', async () => {
|
|
9
9
|
render(<LabelControl labelText="test" data-testid="label" />)
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const label = screen.getByTestId('label')
|
|
12
12
|
|
|
13
|
-
expect(
|
|
13
|
+
expect(label).toBeInTheDocument()
|
|
14
14
|
|
|
15
15
|
expect(screen.getByText('test')).toBeInTheDocument()
|
|
16
16
|
})
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
render(
|
|
20
|
-
<LabelControl labelText="test" helperText="helper" errorMessage="error" />
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
expect(screen.getByText('helper')).toBeInTheDocument()
|
|
24
|
-
expect(screen.queryByText('error')).toBeNull()
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
test('renders LabelControl component vol3', async () => {
|
|
18
|
+
it('should render a fieldset with a helper text and error text', async () => {
|
|
28
19
|
render(
|
|
29
20
|
<LabelControl
|
|
30
21
|
labelText="test"
|
|
31
22
|
helperText="helper"
|
|
32
23
|
errorMessage="error"
|
|
33
24
|
isInvalid
|
|
34
|
-
|
|
25
|
+
>
|
|
26
|
+
<Input />
|
|
27
|
+
</LabelControl>
|
|
35
28
|
)
|
|
36
29
|
|
|
37
30
|
expect(screen.getByText('helper')).toBeInTheDocument()
|
|
38
31
|
expect(screen.getByText('error')).toBeInTheDocument()
|
|
32
|
+
|
|
33
|
+
const input = screen.getByLabelText(/test/)
|
|
34
|
+
|
|
35
|
+
expect(input).toBeInTheDocument()
|
|
36
|
+
|
|
37
|
+
expect(input).toHaveAttribute('aria-describedby', 'helper-text-:r1:')
|
|
38
|
+
expect(input).toHaveAttribute('aria-errormessage', 'error-message-:r1:')
|
|
39
|
+
|
|
40
|
+
expect(input).toBeInvalid()
|
|
41
|
+
expect(input).toHaveAttribute('aria-invalid', 'true')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should render a fieldset with a helper text', async () => {
|
|
45
|
+
render(
|
|
46
|
+
<LabelControl labelText="test">
|
|
47
|
+
<Input />
|
|
48
|
+
</LabelControl>
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
const input = screen.getByLabelText(/test/)
|
|
52
|
+
|
|
53
|
+
expect(input).toBeInTheDocument()
|
|
54
|
+
|
|
55
|
+
expect(input).toBeValid()
|
|
56
|
+
expect(input).toHaveAttribute('aria-invalid', 'false')
|
|
39
57
|
})
|
|
40
58
|
|
|
41
|
-
|
|
59
|
+
it('should display an asterisk only when isRequired prop is true', async () => {
|
|
42
60
|
render(<LabelControl labelText="test" />)
|
|
43
61
|
|
|
44
62
|
expect(screen.queryByText('*')).toBeNull()
|
|
@@ -48,6 +66,36 @@ describe('LabelControl', () => {
|
|
|
48
66
|
expect(screen.getByText('*')).toBeInTheDocument()
|
|
49
67
|
})
|
|
50
68
|
|
|
69
|
+
it('should render an input with required attribute and correct label text', async () => {
|
|
70
|
+
render(
|
|
71
|
+
<LabelControl labelText="test" isRequired>
|
|
72
|
+
<Input defaultValue="test value" />
|
|
73
|
+
</LabelControl>
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
const input = screen.getByLabelText(/test/)
|
|
77
|
+
|
|
78
|
+
expect(input).toBeInTheDocument()
|
|
79
|
+
|
|
80
|
+
expect(input).toBeValid()
|
|
81
|
+
expect(input).toBeRequired()
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('should render an input as invalid when required but has no value', async () => {
|
|
85
|
+
render(
|
|
86
|
+
<LabelControl labelText="test" isRequired>
|
|
87
|
+
<Input />
|
|
88
|
+
</LabelControl>
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const input = screen.getByLabelText(/test/)
|
|
92
|
+
|
|
93
|
+
expect(input).toBeInTheDocument()
|
|
94
|
+
|
|
95
|
+
expect(input).toBeInvalid()
|
|
96
|
+
expect(input).toBeRequired()
|
|
97
|
+
})
|
|
98
|
+
|
|
51
99
|
test('Test the relationship between the label and input elements.', async () => {
|
|
52
100
|
render(
|
|
53
101
|
<>
|
|
@@ -60,6 +108,9 @@ describe('LabelControl', () => {
|
|
|
60
108
|
<Input defaultValue="1" />
|
|
61
109
|
</LabelControl>
|
|
62
110
|
<LabelControl labelText="test3">
|
|
111
|
+
<FileInput />
|
|
112
|
+
</LabelControl>
|
|
113
|
+
<LabelControl labelText="test4">
|
|
63
114
|
<Textarea defaultValue="1" />
|
|
64
115
|
</LabelControl>
|
|
65
116
|
</>
|
|
@@ -75,7 +126,11 @@ describe('LabelControl', () => {
|
|
|
75
126
|
expect(text).toHaveValue('1')
|
|
76
127
|
expect(text).toHaveAttribute('id')
|
|
77
128
|
|
|
78
|
-
const
|
|
129
|
+
const file = screen.getByLabelText(/test3/)
|
|
130
|
+
expect(file).toBeInTheDocument()
|
|
131
|
+
expect(file).toHaveAttribute('id')
|
|
132
|
+
|
|
133
|
+
const textarea = screen.getByLabelText(/test4/)
|
|
79
134
|
expect(textarea).toBeInTheDocument()
|
|
80
135
|
expect(textarea).toHaveValue('1')
|
|
81
136
|
expect(textarea).toHaveAttribute('id')
|
|
@@ -93,6 +148,9 @@ describe('LabelControl', () => {
|
|
|
93
148
|
<Input defaultValue="1" />
|
|
94
149
|
</LabelControl>
|
|
95
150
|
<LabelControl labelText="test3" htmlFor="id3">
|
|
151
|
+
<FileInput />
|
|
152
|
+
</LabelControl>
|
|
153
|
+
<LabelControl labelText="test4" htmlFor="id4">
|
|
96
154
|
<Textarea defaultValue="1" />
|
|
97
155
|
</LabelControl>
|
|
98
156
|
</>
|
|
@@ -108,9 +166,13 @@ describe('LabelControl', () => {
|
|
|
108
166
|
expect(input).toHaveValue('1')
|
|
109
167
|
expect(input).toHaveAttribute('id', 'id2')
|
|
110
168
|
|
|
111
|
-
const
|
|
169
|
+
const file = screen.getByLabelText(/test3/)
|
|
170
|
+
expect(file).toBeInTheDocument()
|
|
171
|
+
expect(file).toHaveAttribute('id', 'id3')
|
|
172
|
+
|
|
173
|
+
const textarea = screen.getByLabelText(/test4/)
|
|
112
174
|
expect(textarea).toBeInTheDocument()
|
|
113
175
|
expect(textarea).toHaveValue('1')
|
|
114
|
-
expect(textarea).toHaveAttribute('id', '
|
|
176
|
+
expect(textarea).toHaveAttribute('id', 'id4')
|
|
115
177
|
})
|
|
116
178
|
})
|
|
@@ -1,99 +1,44 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { describe,
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
3
|
import { render, screen } from '@testing-library/react'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Radio } from '../src'
|
|
6
6
|
|
|
7
|
-
describe('
|
|
8
|
-
|
|
9
|
-
render(
|
|
10
|
-
<FieldsetControl labelText="test">
|
|
11
|
-
<Radio />
|
|
12
|
-
</FieldsetControl>
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
const elem = screen.getByRole('radio')
|
|
16
|
-
|
|
17
|
-
expect(elem).toBeInTheDocument()
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test('renders Text component vol2', async () => {
|
|
21
|
-
render(
|
|
22
|
-
<FieldsetControl
|
|
23
|
-
labelText="test"
|
|
24
|
-
helperText="helper"
|
|
25
|
-
errorMessage="error"
|
|
26
|
-
>
|
|
27
|
-
<Radio />
|
|
28
|
-
</FieldsetControl>
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
const elem = screen.getByRole('radio')
|
|
32
|
-
|
|
33
|
-
expect(elem).toBeInTheDocument()
|
|
34
|
-
|
|
35
|
-
expect(elem).toHaveAttribute('aria-describedby', 'helper-text-:r1:')
|
|
36
|
-
expect(elem).toHaveAttribute('aria-errormessage', 'error-message-:r1:')
|
|
37
|
-
})
|
|
7
|
+
describe('Radio', () => {
|
|
8
|
+
it('should render a radio with a value text', async () => {
|
|
9
|
+
render(<Radio id="test" value="test" />)
|
|
38
10
|
|
|
39
|
-
|
|
40
|
-
render(
|
|
41
|
-
<FieldsetControl labelText="test">
|
|
42
|
-
<Radio />
|
|
43
|
-
</FieldsetControl>
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
const elem = screen.getByRole('radio')
|
|
11
|
+
const radio = screen.getByRole('radio')
|
|
47
12
|
|
|
48
|
-
expect(
|
|
13
|
+
expect(radio).toBeInTheDocument()
|
|
49
14
|
|
|
50
|
-
expect(
|
|
51
|
-
expect(elem).toHaveAttribute('aria-invalid', 'false')
|
|
15
|
+
expect(screen.getByDisplayValue('test')).toBeInTheDocument()
|
|
52
16
|
})
|
|
53
17
|
|
|
54
|
-
|
|
18
|
+
it('should render two radios with verify checked states', async () => {
|
|
55
19
|
render(
|
|
56
|
-
|
|
57
|
-
<Radio />
|
|
58
|
-
|
|
20
|
+
<>
|
|
21
|
+
<Radio id="test" value="test1" data-testid="checked" checked />
|
|
22
|
+
<Radio id="test" value="test2" data-testid="not_checked" />
|
|
23
|
+
</>
|
|
59
24
|
)
|
|
60
25
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
expect(elem).toBeInTheDocument()
|
|
64
|
-
|
|
65
|
-
expect(elem).toBeInvalid()
|
|
66
|
-
expect(elem).toHaveAttribute('aria-invalid', 'true')
|
|
67
|
-
expect(elem).not.toBeRequired()
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
test('renders Text component vol5', async () => {
|
|
71
|
-
render(
|
|
72
|
-
<FieldsetControl labelText="test" isRequired>
|
|
73
|
-
<Radio defaultChecked={true} />
|
|
74
|
-
</FieldsetControl>
|
|
75
|
-
)
|
|
26
|
+
const checked = screen.getByTestId('checked')
|
|
76
27
|
|
|
77
|
-
|
|
28
|
+
expect(checked).toBeInTheDocument()
|
|
29
|
+
expect(checked).toBeChecked()
|
|
78
30
|
|
|
79
|
-
|
|
31
|
+
const notChecked = screen.getByTestId('not_checked')
|
|
80
32
|
|
|
81
|
-
expect(
|
|
82
|
-
expect(
|
|
33
|
+
expect(notChecked).toBeInTheDocument()
|
|
34
|
+
expect(notChecked).not.toBeChecked()
|
|
83
35
|
})
|
|
84
36
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
<FieldsetControl labelText="test" isRequired>
|
|
88
|
-
<Radio />
|
|
89
|
-
</FieldsetControl>
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
const elem = screen.getByRole('radio')
|
|
37
|
+
it('should pass an object to the ref property', async () => {
|
|
38
|
+
const ref = vi.fn()
|
|
93
39
|
|
|
94
|
-
|
|
40
|
+
render(<Radio ref={ref} />)
|
|
95
41
|
|
|
96
|
-
expect(
|
|
97
|
-
expect(elem).toBeRequired()
|
|
42
|
+
expect(ref).toHaveBeenCalledTimes(1)
|
|
98
43
|
})
|
|
99
44
|
})
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
|
+
import { render, screen } from '@testing-library/react'
|
|
4
|
+
|
|
5
|
+
import { Select } from '../src'
|
|
6
|
+
|
|
7
|
+
describe('Select', () => {
|
|
8
|
+
it('should render a select with a value text', async () => {
|
|
9
|
+
render(
|
|
10
|
+
<Select value="dog">
|
|
11
|
+
<option value="cat">Cat</option>
|
|
12
|
+
<option value="dog">Dog</option>
|
|
13
|
+
</Select>
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
const select = screen.getByRole('combobox')
|
|
17
|
+
|
|
18
|
+
expect(select).toBeInTheDocument()
|
|
19
|
+
|
|
20
|
+
expect(screen.getByDisplayValue('Dog')).toBeInTheDocument()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('should pass an object to the ref property', async () => {
|
|
24
|
+
const ref = vi.fn()
|
|
25
|
+
|
|
26
|
+
render(<Select ref={ref} />)
|
|
27
|
+
|
|
28
|
+
expect(ref).toHaveBeenCalledTimes(1)
|
|
29
|
+
})
|
|
30
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
|
+
import { render, screen } from '@testing-library/react'
|
|
4
|
+
|
|
5
|
+
import { Textarea } from '../src'
|
|
6
|
+
|
|
7
|
+
describe('Textarea', () => {
|
|
8
|
+
it('should render a textarea with a value text', async () => {
|
|
9
|
+
render(<Textarea value="test" />)
|
|
10
|
+
|
|
11
|
+
const input = screen.getByRole('textbox')
|
|
12
|
+
|
|
13
|
+
expect(input).toBeInTheDocument()
|
|
14
|
+
|
|
15
|
+
expect(screen.getByDisplayValue('test')).toBeInTheDocument()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('should pass an object to the ref property', async () => {
|
|
19
|
+
const ref = vi.fn()
|
|
20
|
+
|
|
21
|
+
render(<Textarea ref={ref} />)
|
|
22
|
+
|
|
23
|
+
expect(ref).toHaveBeenCalledTimes(1)
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @sakura-ui/helper@0.0.5 prebuild /Users/t.fujita/Documents/Repos/sakura-ui/packages/helper
|
|
4
|
+
> rimraf dist
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
> @sakura-ui/helper@0.0.5 build /Users/t.fujita/Documents/Repos/sakura-ui/packages/helper
|
|
8
|
+
> run-p build:*
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
> @sakura-ui/helper@0.0.5 build:scripts /Users/t.fujita/Documents/Repos/sakura-ui/packages/helper
|
|
12
|
+
> vite build
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
> @sakura-ui/helper@0.0.5 build:types /Users/t.fujita/Documents/Repos/sakura-ui/packages/helper
|
|
16
|
+
> tsc && tsc-alias
|
|
17
|
+
|
|
18
|
+
[33mThe CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m
|
|
19
|
+
[36mvite v6.0.3 [32mbuilding for production...[36m[39m
|
|
20
|
+
[2K[1Gtransforming (1) [2msrc/index.ts[22m[2K[1G[32m✓[39m 6 modules transformed.
|
|
21
|
+
[2K[1Grendering chunks (1)...[2K[1G[2K[1Gcomputing gzip size (0)...[2K[1Gcomputing gzip size (1)...[2K[1G[2mdist/[22m[36mindex.es.js [39m[1m[2m2.92 kB[22m[1m[22m[2m │ gzip: 1.00 kB[22m
|
|
22
|
+
[2K[1Grendering chunks (1)...[2K[1G[2K[1Gcomputing gzip size (1)...[2K[1G[2mdist/[22m[36mindex.cjs.js [39m[1m[2m2.75 kB[22m[1m[22m[2m │ gzip: 1.00 kB[22m
|
|
23
|
+
[32m✓ built in 68ms[39m
|