@sakura-ui/sakura-ui 0.1.10 → 0.1.12

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.
Files changed (122) hide show
  1. package/README.md +8 -32
  2. package/package.json +8 -8
  3. package/packages/config/package.json +9 -9
  4. package/packages/config/src/index.ts +1 -1
  5. package/packages/config/tsconfig.json +1 -1
  6. package/packages/config/vite.config.ts +1 -1
  7. package/packages/core/package.json +13 -13
  8. package/packages/core/src/components/Button.tsx +27 -24
  9. package/packages/core/src/components/Card.tsx +2 -2
  10. package/packages/core/src/components/Code.tsx +2 -2
  11. package/packages/core/src/components/Heading.tsx +7 -12
  12. package/packages/core/src/components/Icon.tsx +8 -3
  13. package/packages/core/src/components/IconButton.tsx +41 -29
  14. package/packages/core/src/components/InfoCard.tsx +5 -2
  15. package/packages/core/src/components/Link.tsx +27 -24
  16. package/packages/core/src/components/List.tsx +4 -4
  17. package/packages/core/src/components/Pre.tsx +2 -2
  18. package/packages/core/src/components/Table.tsx +17 -14
  19. package/packages/core/tsconfig.node.json +1 -1
  20. package/packages/core/vite.config.ts +1 -1
  21. package/packages/forms/dist/components/Checkbox.d.ts +2 -2
  22. package/packages/forms/dist/components/Checkbox.d.ts.map +1 -1
  23. package/packages/forms/dist/components/Checkbox.js +43 -0
  24. package/packages/forms/dist/components/Checkbox.js.map +1 -0
  25. package/packages/forms/dist/components/FieldsetControl.d.ts +2 -2
  26. package/packages/forms/dist/components/FieldsetControl.d.ts.map +1 -1
  27. package/packages/forms/dist/components/FieldsetControl.js +20 -0
  28. package/packages/forms/dist/components/FieldsetControl.js.map +1 -0
  29. package/packages/forms/dist/components/Input.d.ts +2 -2
  30. package/packages/forms/dist/components/Input.d.ts.map +1 -1
  31. package/packages/forms/dist/components/Input.js +27 -0
  32. package/packages/forms/dist/components/Input.js.map +1 -0
  33. package/packages/forms/dist/components/LabelControl.d.ts +2 -2
  34. package/packages/forms/dist/components/LabelControl.d.ts.map +1 -1
  35. package/packages/forms/dist/components/LabelControl.js +18 -0
  36. package/packages/forms/dist/components/LabelControl.js.map +1 -0
  37. package/packages/forms/dist/components/Radio.d.ts +2 -2
  38. package/packages/forms/dist/components/Radio.d.ts.map +1 -1
  39. package/packages/forms/dist/components/Radio.js +43 -0
  40. package/packages/forms/dist/components/Radio.js.map +1 -0
  41. package/packages/forms/dist/components/Select.d.ts +2 -2
  42. package/packages/forms/dist/components/Select.d.ts.map +1 -1
  43. package/packages/forms/dist/components/Select.js +39 -0
  44. package/packages/forms/dist/components/Select.js.map +1 -0
  45. package/packages/forms/dist/components/Textarea.d.ts +2 -2
  46. package/packages/forms/dist/components/Textarea.d.ts.map +1 -1
  47. package/packages/forms/dist/components/Textarea.js +34 -0
  48. package/packages/forms/dist/components/Textarea.js.map +1 -0
  49. package/packages/forms/dist/components/context.js +8 -0
  50. package/packages/forms/dist/components/context.js.map +1 -0
  51. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts +2 -2
  52. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts.map +1 -1
  53. package/packages/forms/dist/components/controlled/CheckboxGroup.js +12 -0
  54. package/packages/forms/dist/components/controlled/CheckboxGroup.js.map +1 -0
  55. package/packages/forms/dist/components/controlled/InputItem.js +2 -0
  56. package/packages/forms/dist/components/controlled/InputItem.js.map +1 -0
  57. package/packages/forms/dist/components/controlled/RadioGroup.d.ts +2 -2
  58. package/packages/forms/dist/components/controlled/RadioGroup.d.ts.map +1 -1
  59. package/packages/forms/dist/components/controlled/RadioGroup.js +12 -0
  60. package/packages/forms/dist/components/controlled/RadioGroup.js.map +1 -0
  61. package/packages/forms/dist/components/controlled/SelectControl.d.ts +2 -2
  62. package/packages/forms/dist/components/controlled/SelectControl.d.ts.map +1 -1
  63. package/packages/forms/dist/components/controlled/SelectControl.js +10 -0
  64. package/packages/forms/dist/components/controlled/SelectControl.js.map +1 -0
  65. package/packages/forms/dist/components/controlled/TextareaControl.d.ts +2 -2
  66. package/packages/forms/dist/components/controlled/TextareaControl.d.ts.map +1 -1
  67. package/packages/forms/dist/components/controlled/TextareaControl.js +10 -0
  68. package/packages/forms/dist/components/controlled/TextareaControl.js.map +1 -0
  69. package/packages/forms/dist/components/controlled/index.d.ts +0 -1
  70. package/packages/forms/dist/components/controlled/index.d.ts.map +1 -1
  71. package/packages/forms/dist/components/controlled/index.js +5 -0
  72. package/packages/forms/dist/components/controlled/index.js.map +1 -0
  73. package/packages/forms/dist/components/index.js +8 -0
  74. package/packages/forms/dist/components/index.js.map +1 -0
  75. package/packages/forms/dist/index.cjs.js +79 -79
  76. package/packages/forms/dist/index.cjs.js.map +1 -1
  77. package/packages/forms/dist/index.d.ts +1 -1
  78. package/packages/forms/dist/index.d.ts.map +1 -1
  79. package/packages/forms/dist/index.es.js +500 -493
  80. package/packages/forms/dist/index.es.js.map +1 -1
  81. package/packages/forms/dist/index.js +3 -0
  82. package/packages/forms/dist/index.js.map +1 -0
  83. package/packages/forms/dist/utils/class.js +2 -0
  84. package/packages/forms/dist/utils/class.js.map +1 -0
  85. package/packages/forms/node_modules/.bin/autoprefixer +4 -4
  86. package/packages/forms/node_modules/.bin/jest +4 -4
  87. package/packages/forms/node_modules/.bin/npm-run-all +2 -2
  88. package/packages/forms/node_modules/.bin/run-p +2 -2
  89. package/packages/forms/node_modules/.bin/run-s +2 -2
  90. package/packages/forms/node_modules/.bin/tailwind +2 -2
  91. package/packages/forms/node_modules/.bin/tailwindcss +2 -2
  92. package/packages/forms/node_modules/.bin/ts-jest +4 -4
  93. package/packages/forms/node_modules/.bin/ts-node +4 -4
  94. package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
  95. package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
  96. package/packages/forms/node_modules/.bin/ts-node-script +4 -4
  97. package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
  98. package/packages/forms/node_modules/.bin/ts-script +4 -4
  99. package/packages/forms/node_modules/.bin/tsc +4 -4
  100. package/packages/forms/node_modules/.bin/tsc-alias +4 -4
  101. package/packages/forms/node_modules/.bin/tsserver +4 -4
  102. package/packages/forms/node_modules/.bin/vite +4 -4
  103. package/packages/forms/package.json +16 -16
  104. package/packages/forms/src/components/Checkbox.tsx +62 -59
  105. package/packages/forms/src/components/FieldsetControl.tsx +62 -55
  106. package/packages/forms/src/components/Input.tsx +38 -35
  107. package/packages/forms/src/components/LabelControl.tsx +56 -52
  108. package/packages/forms/src/components/Radio.tsx +8 -3
  109. package/packages/forms/src/components/Select.tsx +57 -56
  110. package/packages/forms/src/components/Textarea.tsx +55 -30
  111. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +37 -37
  112. package/packages/forms/src/components/controlled/RadioGroup.tsx +5 -3
  113. package/packages/forms/src/components/controlled/SelectControl.tsx +28 -27
  114. package/packages/forms/src/components/controlled/TextareaControl.tsx +28 -27
  115. package/packages/forms/src/components/controlled/index.ts +0 -1
  116. package/packages/forms/src/index.ts +0 -1
  117. package/packages/forms/tsconfig.node.json +1 -1
  118. package/packages/forms/vite.config.ts +1 -1
  119. package/packages/forms/dist/components/controlled/InputControl.d.ts +0 -10
  120. package/packages/forms/dist/components/controlled/InputControl.d.ts.map +0 -1
  121. package/packages/forms/node_modules/.bin/browserslist +0 -17
  122. package/packages/forms/src/components/controlled/InputControl.tsx +0 -39
package/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # Sakura UI
2
2
  Sakura UI - UI components built with Tailwind CSS for React. Sakura UI is an unofficial implementation of the Digital Agency Design System. The specifications for each UI component have been implemented with reference to the Digital Agency Design System.
3
3
 
4
- - [Design System 1.2.1](https://www.figma.com/community/file/1172530831489802410)
4
+ - [Design System 1.2.2](https://www.figma.com/community/file/1172530831489802410)
5
+
6
+ ## Sample page
7
+
8
+ - [UI Catalog](https://glassonion1.github.io/sakura-ui/)
5
9
 
6
10
  ## Install
7
11
  ```
@@ -41,7 +45,7 @@ Add fonts from CDN.
41
45
  rel="stylesheet"
42
46
  />
43
47
  <link
44
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined"
48
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght@100;200;300;400;500;600;700&display=swap"
45
49
  rel="stylesheet"
46
50
  />
47
51
  ...head
@@ -105,42 +109,14 @@ export default App
105
109
  - Code
106
110
  - Pre
107
111
  - Button
112
+ - Icon
108
113
  - IconButton
109
114
 
110
115
  ## Form components
111
116
  - Radio
112
117
  - Checkbox
113
118
  - Select
114
- - Text
119
+ - Input
115
120
  - Textarea
116
121
  - LabelControl
117
122
  - FieldsetControl
118
-
119
- ## UI Samples
120
-
121
- ### Heading
122
- ![Heading](https://user-images.githubusercontent.com/1037944/227953097-5c35de72-b4a2-4ec3-95bf-a65ccbb5744e.png)
123
-
124
- ### List
125
- ![List](https://user-images.githubusercontent.com/1037944/227954257-418f55a0-69fe-4f97-85cd-e46e03ebada6.png)
126
-
127
- ### Button
128
- ![Button](https://user-images.githubusercontent.com/1037944/227955904-8c5f3466-d7c0-426d-b7b2-af58f13d84d5.png)
129
-
130
- ### Icon button
131
- ![Icon button](https://user-images.githubusercontent.com/1037944/227956130-142160f6-263f-48d4-83d3-3ba9479c14f2.png)
132
-
133
- ### Select
134
- ![Select](https://user-images.githubusercontent.com/1037944/227956833-29d1201d-e9ea-4124-b4c3-f14c937a9079.png)
135
-
136
- ### Radio button
137
- ![Radio](https://user-images.githubusercontent.com/1037944/227956968-2c0519ba-0e8c-424e-9949-722a6ab6fcba.png)
138
-
139
- ### Checkbox
140
- ![Checkbox](https://user-images.githubusercontent.com/1037944/227957113-a75370eb-b1ed-4010-b30f-bc44db1846a5.png)
141
-
142
- ### Textbox
143
- ![Textbox](https://user-images.githubusercontent.com/1037944/227957734-7aeabd51-f2ae-441b-94ae-b5ebb1536811.png)
144
-
145
- ### Textarea
146
- ![Textarea](https://user-images.githubusercontent.com/1037944/227957968-627a2808-7f5a-4106-8824-9622d5ab7c1a.png)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakura-ui/sakura-ui",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "keywords": [],
5
5
  "author": "glassonion1",
6
6
  "homepage": "https://github.com/glassonion1/sakura-ui",
@@ -12,17 +12,17 @@
12
12
  "files": [
13
13
  "packages"
14
14
  ],
15
+ "scripts": {
16
+ "build": "pnpm --parallel --filter \"./**\" build"
17
+ },
15
18
  "dependencies": {
16
- "@sakura-ui/config": "0.1.1",
17
- "@sakura-ui/core": "0.1.3",
18
- "@sakura-ui/forms": "0.1.1"
19
+ "@sakura-ui/config": "workspace:*",
20
+ "@sakura-ui/core": "workspace:*",
21
+ "@sakura-ui/forms": "workspace:*"
19
22
  },
20
23
  "peerDependencies": {
21
24
  "react": "^18.2.0",
22
25
  "react-dom": "^18.2.0",
23
26
  "tailwindcss": "^3.2.7"
24
- },
25
- "scripts": {
26
- "build": "pnpm --parallel --filter \"./**\" build"
27
27
  }
28
- }
28
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakura-ui/config",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "main": "dist/index.cjs.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -19,7 +19,7 @@
19
19
  "scripts": {
20
20
  "build": "run-p build:*",
21
21
  "build:scripts": "vite build",
22
- "build:types": "tsc --emitDeclarationOnly",
22
+ "build:types": "tsc",
23
23
  "test": "jest"
24
24
  },
25
25
  "keywords": [],
@@ -35,16 +35,16 @@
35
35
  "tailwindcss": "^3.2.7"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/jest": "^29.5.1",
39
- "@types/node": "^18.16.15",
38
+ "@types/jest": "^29.5.2",
39
+ "@types/node": "^18.16.19",
40
40
  "autoprefixer": "^10.4.14",
41
- "jest": "^29.5.0",
41
+ "jest": "^29.6.1",
42
42
  "npm-run-all": "^4.1.5",
43
- "postcss": "^8.4.23",
43
+ "postcss": "^8.4.25",
44
44
  "tailwindcss": "^3.3.2",
45
- "ts-jest": "^29.1.0",
45
+ "ts-jest": "^29.1.1",
46
46
  "ts-node": "^10.9.1",
47
- "typescript": "^5.0.4",
48
- "vite": "^4.3.9"
47
+ "typescript": "^5.1.6",
48
+ "vite": "^4.4.2"
49
49
  }
50
50
  }
@@ -5,7 +5,7 @@ const sakuraPlugin = plugin(
5
5
  addBase({
6
6
  '@font-face': {
7
7
  fontFamily: 'Material Symbols Outlined',
8
- fontWheight: '300',
8
+ fontWeight: '300',
9
9
  fontStyle: 'normal'
10
10
  }
11
11
  })
@@ -3,7 +3,7 @@
3
3
  "target": "ESNext",
4
4
  "module": "ESNext",
5
5
  "lib": ["ESNext", "DOM"],
6
- "moduleResolution": "Bundler",
6
+ "moduleResolution": "node",
7
7
  "useDefineForClassFields": true,
8
8
  "strict": true,
9
9
  "resolveJsonModule": true,
@@ -13,7 +13,7 @@ export default defineConfig({
13
13
  lib: {
14
14
  entry: resolve(__dirname, 'src', 'index.ts'),
15
15
  formats: ['es', 'cjs'],
16
- fileName: (ext) => `index.${ext}.js`
16
+ fileName: (ext: string) => `index.${ext}.js`
17
17
  },
18
18
  rollupOptions: {
19
19
  external: [...Object.keys(peerDependencies)]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakura-ui/core",
3
- "version": "0.1.3",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,7 +21,7 @@
21
21
  "dev": "vite",
22
22
  "build": "run-p build:*",
23
23
  "build:scripts": "vite build",
24
- "build:types": "tsc --emitDeclarationOnly && tsc-alias",
24
+ "build:types": "tsc && tsc-alias",
25
25
  "test": "jest"
26
26
  },
27
27
  "keywords": [],
@@ -39,22 +39,22 @@
39
39
  "tailwindcss": "^3.2.7"
40
40
  },
41
41
  "devDependencies": {
42
- "@types/jest": "^29.5.1",
43
- "@types/node": "^18.16.15",
44
- "@types/react": "^18.2.7",
45
- "@types/react-dom": "^18.2.4",
46
- "@vitejs/plugin-react-swc": "^3.3.1",
42
+ "@types/jest": "^29.5.2",
43
+ "@types/node": "^18.16.19",
44
+ "@types/react": "^18.2.14",
45
+ "@types/react-dom": "^18.2.6",
46
+ "@vitejs/plugin-react-swc": "^3.3.2",
47
47
  "autoprefixer": "^10.4.14",
48
- "jest": "^29.5.0",
48
+ "jest": "^29.6.1",
49
49
  "npm-run-all": "^4.1.5",
50
- "postcss": "^8.4.23",
50
+ "postcss": "^8.4.25",
51
51
  "react": "^18.2.0",
52
52
  "react-dom": "^18.2.0",
53
53
  "tailwindcss": "^3.3.2",
54
- "ts-jest": "^29.1.0",
54
+ "ts-jest": "^29.1.1",
55
55
  "ts-node": "^10.9.1",
56
- "tsc-alias": "^1.8.6",
57
- "typescript": "^5.0.4",
58
- "vite": "^4.3.9"
56
+ "tsc-alias": "^1.8.7",
57
+ "typescript": "^5.1.6",
58
+ "vite": "^4.4.2"
59
59
  }
60
60
  }
@@ -1,19 +1,21 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface ButtonProps extends React.ComponentPropsWithoutRef<'button'> {
4
+ export interface ButtonProps extends React.ComponentPropsWithRef<'button'> {
5
5
  variant?: 'primary' | 'secondary'
6
6
  textAlign?: 'left' | 'right' | 'center'
7
7
  }
8
8
 
9
- export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
10
- (props, ref) => {
11
- // Make sure that there is no problem even if className is specified on the side that uses the component
12
- const { className, children, textAlign, variant, ...restProps } = props
9
+ export const Button: React.ElementType<ButtonProps> = React.forwardRef<
10
+ HTMLButtonElement,
11
+ ButtonProps
12
+ >((props, ref) => {
13
+ // Make sure that there is no problem even if className is specified on the side that uses the component
14
+ const { className, children, textAlign, variant, ...restProps } = props
13
15
 
14
- const align = textAlign ?? 'center'
16
+ const align = textAlign ?? 'center'
15
17
 
16
- const style = `
18
+ const style = `
17
19
  inline-block
18
20
  p-4
19
21
  text-button
@@ -31,7 +33,7 @@ export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
31
33
  disabled:cursor-not-allowed
32
34
  `
33
35
 
34
- const primary = `
36
+ const primary = `
35
37
  text-white-1000
36
38
  bg-sea-600
37
39
  hover:enabled:bg-sea-700
@@ -39,7 +41,7 @@ export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
39
41
  disabled:bg-sumi-500
40
42
  disabled:text-white-1000
41
43
  `
42
- const secondary = `
44
+ const secondary = `
43
45
  text-sea-600
44
46
  bg-transparent
45
47
  hover:enabled:bg-sea-100
@@ -47,19 +49,20 @@ export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
47
49
  disabled:text-sumi-500
48
50
  `
49
51
 
50
- const styles = {
51
- primary: primary,
52
- secondary: secondary
53
- }
54
-
55
- return (
56
- <button
57
- className={cx(style, styles[variant ?? 'primary'], className)}
58
- {...restProps}
59
- ref={ref}
60
- >
61
- {children}
62
- </button>
63
- )
52
+ const styles = {
53
+ primary: primary,
54
+ secondary: secondary
64
55
  }
65
- ) as React.ElementType
56
+
57
+ return (
58
+ <button
59
+ className={cx(style, styles[variant ?? 'primary'], className)}
60
+ {...restProps}
61
+ ref={ref}
62
+ >
63
+ {children}
64
+ </button>
65
+ )
66
+ })
67
+
68
+ Button.displayName = 'Button'
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface CardProps extends React.ComponentProps<'section'> {}
4
+ export interface CardProps extends React.ComponentPropsWithoutRef<'section'> {}
5
5
 
6
- export const Card = (props: CardProps) => {
6
+ export const Card: React.ElementType<CardProps> = (props: CardProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface CodeProps extends React.ComponentProps<'code'> {}
4
+ export interface CodeProps extends React.ComponentPropsWithoutRef<'code'> {}
5
5
 
6
- export const Code = (props: CodeProps) => {
6
+ export const Code: React.ElementType<CodeProps> = (props: CodeProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface HeadingProps extends React.ComponentProps<'h1'> {}
4
+ export interface HeadingProps extends React.ComponentPropsWithoutRef<'h1'> {}
5
5
 
6
- export const H1 = (props: HeadingProps) => {
6
+ export const H1: React.ElementType<HeadingProps> = (props: HeadingProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -20,8 +20,7 @@ export const H1 = (props: HeadingProps) => {
20
20
  )
21
21
  }
22
22
 
23
- export const H2 = (props: HeadingProps) => {
24
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
23
+ export const H2: React.ElementType<HeadingProps> = (props: HeadingProps) => {
25
24
  const { className, children, ...restProps } = props
26
25
 
27
26
  const style = `
@@ -38,8 +37,7 @@ export const H2 = (props: HeadingProps) => {
38
37
  )
39
38
  }
40
39
 
41
- export const H3 = (props: HeadingProps) => {
42
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
40
+ export const H3: React.ElementType<HeadingProps> = (props: HeadingProps) => {
43
41
  const { className, children, ...restProps } = props
44
42
 
45
43
  const style = `
@@ -56,8 +54,7 @@ export const H3 = (props: HeadingProps) => {
56
54
  )
57
55
  }
58
56
 
59
- export const H4 = (props: HeadingProps) => {
60
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
57
+ export const H4: React.ElementType<HeadingProps> = (props: HeadingProps) => {
61
58
  const { className, children, ...restProps } = props
62
59
 
63
60
  const style = `
@@ -74,8 +71,7 @@ export const H4 = (props: HeadingProps) => {
74
71
  )
75
72
  }
76
73
 
77
- export const H5 = (props: HeadingProps) => {
78
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
74
+ export const H5: React.ElementType<HeadingProps> = (props: HeadingProps) => {
79
75
  const { className, children, ...restProps } = props
80
76
 
81
77
  const style = `
@@ -92,8 +88,7 @@ export const H5 = (props: HeadingProps) => {
92
88
  )
93
89
  }
94
90
 
95
- export const H6 = (props: HeadingProps) => {
96
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
91
+ export const H6: React.ElementType<HeadingProps> = (props: HeadingProps) => {
97
92
  const { className, children, ...restProps } = props
98
93
 
99
94
  const style = `
@@ -1,11 +1,14 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface IconProps extends React.ComponentProps<'span'> {
4
+ export interface IconProps extends React.ComponentPropsWithRef<'span'> {
5
5
  icon: string
6
6
  }
7
7
 
8
- export const Icon = React.forwardRef<HTMLElement, IconProps>((props, ref) => {
8
+ export const Icon: React.ElementType<IconProps> = React.forwardRef<
9
+ HTMLElement,
10
+ IconProps
11
+ >((props, ref) => {
9
12
  const { className, icon, ...restProps } = props
10
13
 
11
14
  const style = `
@@ -24,4 +27,6 @@ export const Icon = React.forwardRef<HTMLElement, IconProps>((props, ref) => {
24
27
  {icon}
25
28
  </span>
26
29
  )
27
- }) as React.ElementType
30
+ })
31
+
32
+ Icon.displayName = 'Icon'
@@ -1,27 +1,38 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface IconButtonProps extends React.ComponentProps<'button'> {
4
+ export interface IconButtonProps extends React.ComponentPropsWithRef<'button'> {
5
5
  variant?: 'primary' | 'secondary'
6
6
  iconLayout?: 'left' | 'right'
7
+ rounded?: string
7
8
  icon: string
8
9
  }
9
10
 
10
- export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
11
- (props, ref) => {
12
- const { className, children, variant, icon, iconLayout, ...restProps } =
13
- props
11
+ export const IconButton: React.ElementType<IconButtonProps> = React.forwardRef<
12
+ HTMLButtonElement,
13
+ IconButtonProps
14
+ >((props, ref) => {
15
+ const {
16
+ className,
17
+ children,
18
+ variant,
19
+ icon,
20
+ iconLayout,
21
+ rounded,
22
+ ...restProps
23
+ } = props
14
24
 
15
- const layout = iconLayout ?? 'left'
25
+ const layout = iconLayout ?? 'left'
16
26
 
17
- const align = 'center'
27
+ const align = 'center'
18
28
 
19
- const style = `
29
+ const style = `
30
+ ${rounded === 'full' ? 'aspect-square' : ''}
20
31
  inline-block
21
32
  p-4
22
33
  text-button
23
34
  text-${align}
24
- rounded-lg
35
+ rounded-${rounded ? rounded : 'lg'}
25
36
  cursor-pointer
26
37
  whitespace-nowrap
27
38
  border
@@ -34,7 +45,7 @@ export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
34
45
  disabled:cursor-not-allowed
35
46
  `
36
47
 
37
- const primary = `
48
+ const primary = `
38
49
  text-white-1000
39
50
  bg-sea-600
40
51
  hover:enabled:bg-sea-700
@@ -42,19 +53,19 @@ export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
42
53
  disabled:bg-sumi-500
43
54
  disabled:text-white-1000
44
55
  `
45
- const secondary = `
56
+ const secondary = `
46
57
  text-sea-600
47
58
  hover:enabled:bg-sea-100
48
59
  active:enabled:bg-sea-200
49
60
  disabled:text-sumi-500
50
61
  `
51
62
 
52
- const styles = {
53
- primary: primary,
54
- secondary: secondary
55
- }
63
+ const styles = {
64
+ primary: primary,
65
+ secondary: secondary
66
+ }
56
67
 
57
- const iconStyle = `
68
+ const iconStyle = `
58
69
  inline-block
59
70
  align-middle
60
71
  font-icon
@@ -65,16 +76,17 @@ export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
65
76
  mb-1
66
77
  `
67
78
 
68
- return (
69
- <button
70
- className={cx(style, styles[variant ?? 'primary'], className)}
71
- {...restProps}
72
- ref={ref}
73
- >
74
- {layout == 'left' && <span className={cx(iconStyle)}>{icon}</span>}
75
- {children && <span className="mx-1 inline-block">{children}</span>}
76
- {layout == 'right' && <span className={cx(iconStyle)}>{icon}</span>}
77
- </button>
78
- )
79
- }
80
- ) as React.ElementType
79
+ return (
80
+ <button
81
+ className={cx(style, styles[variant ?? 'primary'], className)}
82
+ {...restProps}
83
+ ref={ref}
84
+ >
85
+ {layout == 'left' && <span className={cx(iconStyle)}>{icon}</span>}
86
+ {children && <span className="mx-1 inline-block">{children}</span>}
87
+ {layout == 'right' && <span className={cx(iconStyle)}>{icon}</span>}
88
+ </button>
89
+ )
90
+ })
91
+
92
+ IconButton.displayName = 'IconButton'
@@ -1,11 +1,14 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface InfoCardProps extends React.ComponentProps<'section'> {
4
+ export interface InfoCardProps
5
+ extends React.ComponentPropsWithoutRef<'section'> {
5
6
  title?: string
6
7
  }
7
8
 
8
- export const InfoCard = (props: InfoCardProps) => {
9
+ export const InfoCard: React.ElementType<InfoCardProps> = (
10
+ props: InfoCardProps
11
+ ) => {
9
12
  const { className, children, title, ...restProps } = props
10
13
 
11
14
  const style = `
@@ -28,15 +28,17 @@ const getFileType = (url: string) => {
28
28
  return null
29
29
  }
30
30
 
31
- export interface LinkProps extends React.ComponentProps<'a'> {}
31
+ export interface LinkProps extends React.ComponentPropsWithRef<'a'> {}
32
32
 
33
- export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
34
- (props, ref) => {
35
- const { className, children, ...restProps } = props
36
- const href = props.href ?? ''
37
- const fileType = getFileType(href)
33
+ export const Link: React.ElementType<LinkProps> = React.forwardRef<
34
+ HTMLAnchorElement,
35
+ LinkProps
36
+ >((props, ref) => {
37
+ const { className, children, ...restProps } = props
38
+ const href = props.href ?? ''
39
+ const fileType = getFileType(href)
38
40
 
39
- const style = `
41
+ const style = `
40
42
  rounded-sm
41
43
  cursor-pointer
42
44
  text-sea-600
@@ -51,26 +53,27 @@ export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
51
53
  disabled:border-sumi-500
52
54
  `
53
55
 
54
- if (href.startsWith('http')) {
55
- return (
56
- <a
57
- className={cx(style, className)}
58
- href={href}
59
- target="_blank"
60
- rel="noopener noreferrer"
61
- {...restProps}
62
- ref={ref}
63
- >
64
- {children}
65
- {fileType ? `(${fileType})` : null}
66
- </a>
67
- )
68
- }
56
+ if (href.startsWith('http')) {
69
57
  return (
70
- <a className={cx(style, className)} href={href} {...restProps} ref={ref}>
58
+ <a
59
+ className={cx(style, className)}
60
+ href={href}
61
+ target="_blank"
62
+ rel="noopener noreferrer"
63
+ {...restProps}
64
+ ref={ref}
65
+ >
71
66
  {children}
72
67
  {fileType ? `(${fileType})` : null}
73
68
  </a>
74
69
  )
75
70
  }
76
- ) as React.ElementType
71
+ return (
72
+ <a className={cx(style, className)} href={href} {...restProps} ref={ref}>
73
+ {children}
74
+ {fileType ? `(${fileType})` : null}
75
+ </a>
76
+ )
77
+ })
78
+
79
+ Link.displayName = 'Link'
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface UlProps extends React.ComponentProps<'ul'> {}
4
+ export interface UlProps extends React.ComponentPropsWithoutRef<'ul'> {}
5
5
 
6
- export const Ul = (props: UlProps) => {
6
+ export const Ul: React.ElementType<UlProps> = (props: UlProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -20,9 +20,9 @@ export const Ul = (props: UlProps) => {
20
20
  )
21
21
  }
22
22
 
23
- export interface OlProps extends React.ComponentProps<'ol'> {}
23
+ export interface OlProps extends React.ComponentPropsWithoutRef<'ol'> {}
24
24
 
25
- export const Ol = (props: OlProps) => {
25
+ export const Ol: React.ElementType<OlProps> = (props: OlProps) => {
26
26
  const { className, children, ...restProps } = props
27
27
 
28
28
  const style = `
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface PreProps extends React.ComponentProps<'pre'> {}
4
+ export interface PreProps extends React.ComponentPropsWithoutRef<'pre'> {}
5
5
 
6
- export const Pre = (props: PreProps) => {
6
+ export const Pre: React.ElementType<PreProps> = (props: PreProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `