@charcoal-ui/react 4.0.0-beta.6 → 4.0.0-beta.8

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 (94) hide show
  1. package/dist/_lib/createDivComponent.d.ts +4 -0
  2. package/dist/_lib/createDivComponent.d.ts.map +1 -0
  3. package/dist/components/DropdownSelector/Divider/index.d.ts +3 -0
  4. package/dist/components/DropdownSelector/Divider/index.d.ts.map +1 -0
  5. package/dist/components/DropdownSelector/DropdownMenuItem/index.d.ts +8 -0
  6. package/dist/components/DropdownSelector/DropdownMenuItem/index.d.ts.map +1 -0
  7. package/dist/components/DropdownSelector/DropdownPopover.d.ts.map +1 -1
  8. package/dist/components/DropdownSelector/ListItem/index.d.ts +5 -13
  9. package/dist/components/DropdownSelector/ListItem/index.d.ts.map +1 -1
  10. package/dist/components/DropdownSelector/MenuItem/index.d.ts +10 -3
  11. package/dist/components/DropdownSelector/MenuItem/index.d.ts.map +1 -1
  12. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts +1 -1
  13. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts.map +1 -1
  14. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts +1 -3
  15. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts.map +1 -1
  16. package/dist/components/DropdownSelector/MenuList/index.d.ts +1 -4
  17. package/dist/components/DropdownSelector/MenuList/index.d.ts.map +1 -1
  18. package/dist/components/DropdownSelector/Popover/index.d.ts +1 -0
  19. package/dist/components/DropdownSelector/Popover/index.d.ts.map +1 -1
  20. package/dist/components/DropdownSelector/index.d.ts +3 -1
  21. package/dist/components/DropdownSelector/index.d.ts.map +1 -1
  22. package/dist/components/Modal/ModalPlumbing.d.ts.map +1 -1
  23. package/dist/components/Radio/RadioGroup/index.d.ts +20 -0
  24. package/dist/components/Radio/RadioGroup/index.d.ts.map +1 -0
  25. package/dist/components/Radio/RadioGroupContext.d.ts +11 -0
  26. package/dist/components/Radio/RadioGroupContext.d.ts.map +1 -0
  27. package/dist/components/Radio/RadioInput/index.d.ts +10 -0
  28. package/dist/components/Radio/RadioInput/index.d.ts.map +1 -0
  29. package/dist/components/Radio/index.d.ts +1 -12
  30. package/dist/components/Radio/index.d.ts.map +1 -1
  31. package/dist/components/TextArea/index.d.ts +1 -0
  32. package/dist/components/TextArea/index.d.ts.map +1 -1
  33. package/dist/components/TextField/AssistiveText/index.d.ts +5 -0
  34. package/dist/components/TextField/AssistiveText/index.d.ts.map +1 -0
  35. package/dist/components/TextField/index.d.ts +1 -3
  36. package/dist/components/TextField/index.d.ts.map +1 -1
  37. package/dist/index.cjs.js +308 -347
  38. package/dist/index.cjs.js.map +1 -1
  39. package/dist/index.css +330 -22
  40. package/dist/index.css.map +1 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.esm.js +257 -296
  44. package/dist/index.esm.js.map +1 -1
  45. package/package.json +8 -8
  46. package/src/_lib/createDivComponent.tsx +11 -0
  47. package/src/components/DropdownSelector/Divider/index.css +11 -0
  48. package/src/components/DropdownSelector/Divider/index.tsx +5 -0
  49. package/src/components/DropdownSelector/DropdownMenuItem/index.css +20 -0
  50. package/src/components/DropdownSelector/DropdownMenuItem/index.tsx +34 -0
  51. package/src/components/DropdownSelector/DropdownPopover.tsx +16 -9
  52. package/src/components/DropdownSelector/ListItem/__snapshots__/index.story.storyshot +35 -94
  53. package/src/components/DropdownSelector/ListItem/index.css +24 -0
  54. package/src/components/DropdownSelector/ListItem/index.tsx +14 -53
  55. package/src/components/DropdownSelector/MenuItem/index.tsx +17 -12
  56. package/src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx +2 -2
  57. package/src/components/DropdownSelector/MenuItemGroup/index.css +19 -0
  58. package/src/components/DropdownSelector/MenuItemGroup/index.tsx +6 -28
  59. package/src/components/DropdownSelector/MenuList/__snapshots__/index.story.storyshot +159 -413
  60. package/src/components/DropdownSelector/MenuList/index.css +4 -0
  61. package/src/components/DropdownSelector/MenuList/index.tsx +4 -12
  62. package/src/components/DropdownSelector/Popover/index.css +11 -0
  63. package/src/components/DropdownSelector/Popover/index.tsx +6 -15
  64. package/src/components/DropdownSelector/__snapshots__/index.story.storyshot +397 -1187
  65. package/src/components/DropdownSelector/index.css +84 -0
  66. package/src/components/DropdownSelector/index.story.tsx +0 -4
  67. package/src/components/DropdownSelector/index.tsx +41 -103
  68. package/src/components/Modal/ModalPlumbing.tsx +2 -11
  69. package/src/components/Modal/__snapshots__/index.story.storyshot +58 -410
  70. package/src/components/Radio/RadioGroup/index.css +5 -0
  71. package/src/components/Radio/RadioGroup/index.tsx +80 -0
  72. package/src/components/Radio/RadioGroupContext.ts +23 -0
  73. package/src/components/Radio/RadioInput/index.css +82 -0
  74. package/src/components/Radio/RadioInput/index.tsx +41 -0
  75. package/src/components/Radio/__snapshots__/index.story.storyshot +36 -30
  76. package/src/components/Radio/index.css +2 -81
  77. package/src/components/Radio/index.story.tsx +16 -6
  78. package/src/components/Radio/index.test.tsx +2 -1
  79. package/src/components/Radio/index.tsx +7 -89
  80. package/src/components/TextArea/__snapshots__/TextArea.story.storyshot +141 -813
  81. package/src/components/TextArea/index.css +78 -0
  82. package/src/components/TextArea/index.tsx +26 -96
  83. package/src/components/TextField/AssistiveText/index.css +10 -0
  84. package/src/components/TextField/AssistiveText/index.tsx +6 -0
  85. package/src/components/TextField/__snapshots__/TextField.story.storyshot +109 -1059
  86. package/src/components/TextField/index.css +87 -0
  87. package/src/components/TextField/index.tsx +24 -117
  88. package/src/index.ts +2 -6
  89. package/dist/components/DropdownSelector/Divider.d.ts +0 -7
  90. package/dist/components/DropdownSelector/Divider.d.ts.map +0 -1
  91. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts +0 -7
  92. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts.map +0 -1
  93. package/src/components/DropdownSelector/Divider.tsx +0 -16
  94. package/src/components/DropdownSelector/DropdownMenuItem.tsx +0 -43
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@charcoal-ui/react",
3
- "version": "4.0.0-beta.6",
3
+ "version": "4.0.0-beta.8",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -28,7 +28,7 @@
28
28
  "clean": "rimraf dist .tsbuildinfo"
29
29
  },
30
30
  "devDependencies": {
31
- "@charcoal-ui/esbuild-plugin-styled-components": "^4.0.0-beta.6",
31
+ "@charcoal-ui/esbuild-plugin-styled-components": "^4.0.0-beta.8",
32
32
  "@react-types/switch": "^3.1.2",
33
33
  "@storybook/addon-actions": "^8.0.5",
34
34
  "@storybook/react": "^8.0.5",
@@ -57,11 +57,11 @@
57
57
  "typescript": "^4.9.5"
58
58
  },
59
59
  "dependencies": {
60
- "@charcoal-ui/foundation": "^4.0.0-beta.6",
61
- "@charcoal-ui/icons": "^4.0.0-beta.6",
62
- "@charcoal-ui/styled": "^4.0.0-beta.6",
63
- "@charcoal-ui/theme": "^4.0.0-beta.6",
64
- "@charcoal-ui/utils": "^4.0.0-beta.6",
60
+ "@charcoal-ui/foundation": "^4.0.0-beta.8",
61
+ "@charcoal-ui/icons": "^4.0.0-beta.8",
62
+ "@charcoal-ui/styled": "^4.0.0-beta.8",
63
+ "@charcoal-ui/theme": "^4.0.0-beta.8",
64
+ "@charcoal-ui/utils": "^4.0.0-beta.8",
65
65
  "@react-aria/button": "^3.9.1",
66
66
  "@react-aria/checkbox": "^3.13.0",
67
67
  "@react-aria/dialog": "^3.5.10",
@@ -94,5 +94,5 @@
94
94
  "url": "https://github.com/pixiv/charcoal.git",
95
95
  "directory": "packages/react"
96
96
  },
97
- "gitHead": "0257ebd0246caa24f928a58887cb439b79c4f246"
97
+ "gitHead": "4b5d1ba9e43b6703957c7c53e6e59c8f0d7b8589"
98
98
  }
@@ -0,0 +1,11 @@
1
+ import { forwardRef } from 'react'
2
+ import { useClassNames } from './useClassNames'
3
+
4
+ export function createDivComponent(mainClassName: string) {
5
+ return forwardRef<HTMLDivElement, React.ComponentPropsWithRef<'div'>>(
6
+ function DivComponent({ className, ...props }, ref) {
7
+ const classNames = useClassNames(mainClassName, className)
8
+ return <div className={classNames} ref={ref} {...props} />
9
+ }
10
+ )
11
+ }
@@ -0,0 +1,11 @@
1
+ .charcoal-menu-group-divider {
2
+ display: flex;
3
+ }
4
+
5
+ .charcoal-menu-group-divider::before {
6
+ content: '';
7
+ display: block;
8
+ width: 100%;
9
+ height: 1px;
10
+ background: #00000014;
11
+ }
@@ -0,0 +1,5 @@
1
+ import './index.css'
2
+
3
+ export function Divider() {
4
+ return <div role="separator" className="charcoal-menu-group-divider" />
5
+ }
@@ -0,0 +1,20 @@
1
+ .charcoal-dropdown-selector-menu-item {
2
+ font-size: 14px;
3
+ line-height: 22px;
4
+ color: var(--charcoal-text2);
5
+ padding: 9px 0;
6
+
7
+ display: flex;
8
+ align-items: center;
9
+ width: 100%;
10
+ margin-left: 20px;
11
+ }
12
+
13
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
14
+ margin-left: 0px;
15
+ }
16
+
17
+ .charcoal-dropdown-selector-menu-item-icon {
18
+ color: var(--charcoal-text2);
19
+ padding-right: 4px;
20
+ }
@@ -0,0 +1,34 @@
1
+ import './index.css'
2
+
3
+ import MenuItem, { MenuItemProps } from '../MenuItem'
4
+ import { MenuListContext } from '../MenuList/MenuListContext'
5
+ import { useContext } from 'react'
6
+ import Icon from '../../Icon'
7
+
8
+ export type DropdownMenuItemProps = Omit<MenuItemProps, 'as'>
9
+
10
+ /**
11
+ * DropdownSelectorの選択肢として使うMenuItem
12
+ */
13
+ export default function DropdownMenuItem(props: DropdownMenuItemProps) {
14
+ const { value: ctxValue } = useContext(MenuListContext)
15
+ const isSelected = props.value === ctxValue
16
+ const { children, ...rest } = props
17
+
18
+ return (
19
+ <MenuItem {...rest} aria-selected={isSelected}>
20
+ {isSelected && (
21
+ <Icon
22
+ className="charcoal-dropdown-selector-menu-item-icon"
23
+ name="16/Check"
24
+ />
25
+ )}
26
+ <span
27
+ className="charcoal-dropdown-selector-menu-item"
28
+ data-selected={isSelected}
29
+ >
30
+ {props.children}
31
+ </span>
32
+ </MenuItem>
33
+ )
34
+ }
@@ -19,15 +19,22 @@ export function DropdownPopover({ children, ...props }: DropdownPopoverProps) {
19
19
  }, [props.triggerRef, props.isOpen])
20
20
 
21
21
  useEffect(() => {
22
- if (props.isOpen && props.value !== undefined) {
23
- // windowのスクロールを維持したまま選択肢をPopoverの中心に表示する
24
- const windowScrollY = window.scrollY
25
- const windowScrollX = window.scrollX
26
- const selectedElement = document.querySelector(
27
- `[data-key="${props.value.toString()}"]`
28
- ) as HTMLElement | undefined
29
- selectedElement?.focus()
30
- window.scrollTo(windowScrollX, windowScrollY)
22
+ if (props.isOpen) {
23
+ if (props.value !== undefined && props.value !== '') {
24
+ // windowのスクロールを維持したまま選択肢をPopoverの中心に表示する
25
+ const windowScrollY = window.scrollY
26
+ const windowScrollX = window.scrollX
27
+ const selectedElement = document.querySelector(
28
+ `[data-key="${props.value.toString()}"]`
29
+ ) as HTMLElement | undefined
30
+ selectedElement?.focus()
31
+ window.scrollTo(windowScrollX, windowScrollY)
32
+ } else {
33
+ const el = ref.current?.querySelector("[role='option']")
34
+ if (el instanceof HTMLElement) {
35
+ el.focus()
36
+ }
37
+ }
31
38
  }
32
39
  }, [props.value, props.isOpen])
33
40
 
@@ -2,40 +2,6 @@
2
2
 
3
3
  exports[`Storybook Tests react/internals/ListItem Basic 1`] = `
4
4
  .c0 {
5
- list-style: none;
6
- }
7
-
8
- .c1 {
9
- display: -webkit-box;
10
- display: -webkit-flex;
11
- display: -ms-flexbox;
12
- display: flex;
13
- -webkit-align-items: center;
14
- -webkit-box-align: center;
15
- -ms-flex-align: center;
16
- align-items: center;
17
- min-height: 40px;
18
- cursor: pointer;
19
- outline: none;
20
- padding-right: 16px;
21
- padding-left: 16px;
22
- -webkit-transition: background-color 0.2s;
23
- transition: background-color 0.2s;
24
- }
25
-
26
- .c1:disabled,
27
- .c1[aria-disabled]:not([aria-disabled='false']) {
28
- opacity: 0.32;
29
- cursor: default;
30
- }
31
-
32
- .c1:hover:not(disabled):not([aria-disabled='true']),
33
- .c1:focus:not(disabled):not([aria-disabled='true']),
34
- .c1:focus-within:not(disabled):not([aria-disabled='true']) {
35
- background-color: var(--charcoal-surface3);
36
- }
37
-
38
- .c2 {
39
5
  color: red;
40
6
  }
41
7
 
@@ -43,77 +9,52 @@ exports[`Storybook Tests react/internals/ListItem Basic 1`] = `
43
9
  data-dark={false}
44
10
  >
45
11
  <li
46
- className="c0"
47
- role="option"
12
+ className="charcoal-list-item"
48
13
  >
49
- <div
50
- className="c1"
51
- >
52
- Item
53
- </div>
14
+ Item
54
15
  </li>
55
16
  <li
56
- className="c0"
57
- role="option"
17
+ className="charcoal-list-item"
58
18
  >
59
- <div
60
- className="c1"
61
- >
62
- <pixiv-icon
63
- name="16/Add"
64
- />
65
- Add
66
- </div>
19
+ <pixiv-icon
20
+ name="16/Add"
21
+ />
22
+ Add
67
23
  </li>
68
- <li
69
- className="c0"
70
- role="option"
24
+ <a
25
+ className="charcoal-list-item"
26
+ href="#"
71
27
  >
72
- <a
73
- className="c1"
74
- href="#"
75
- >
76
- Normal Link
77
- </a>
78
- </li>
79
- <li
80
- className="c0"
81
- role="option"
28
+ Normal Link
29
+ </a>
30
+ <a
31
+ className="c0 charcoal-list-item"
32
+ href="#"
82
33
  >
83
- <a
84
- className="c2 c1"
85
- href="#"
86
- >
87
- Custom Link
88
- </a>
89
- </li>
34
+ Custom Link
35
+ </a>
90
36
  <li
91
- className="c0"
92
- role="option"
37
+ className="charcoal-list-item"
38
+ onClick={[Function]}
93
39
  >
40
+ Switch
94
41
  <div
95
- className="c1"
96
- onClick={[Function]}
97
- >
98
- Switch
99
- <div
100
- style={
101
- Object {
102
- "marginLeft": "auto",
103
- }
42
+ style={
43
+ Object {
44
+ "marginLeft": "auto",
104
45
  }
105
- >
106
- <input
107
- checked={false}
108
- className="charcoal-switch-input"
109
- id="test-id"
110
- label="hello"
111
- name="hello"
112
- onChange={[Function]}
113
- role="switch"
114
- type="checkbox"
115
- />
116
- </div>
46
+ }
47
+ >
48
+ <input
49
+ checked={false}
50
+ className="charcoal-switch-input"
51
+ id="test-id"
52
+ label="hello"
53
+ name="hello"
54
+ onChange={[Function]}
55
+ role="switch"
56
+ type="checkbox"
57
+ />
117
58
  </div>
118
59
  </li>
119
60
  </div>
@@ -0,0 +1,24 @@
1
+ .charcoal-list-item {
2
+ list-style: none;
3
+ display: flex;
4
+ align-items: center;
5
+ min-height: 40px;
6
+ cursor: pointer;
7
+ outline: none;
8
+
9
+ padding-right: 16px;
10
+ padding-left: 16px;
11
+
12
+ transition: background-color 0.2s;
13
+ }
14
+
15
+ .charcoal-list-item:not([aria-disabled='true']):hover,
16
+ .charcoal-list-item:not([aria-disabled='true']):focus,
17
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
18
+ background-color: var(--charcoal-surface3);
19
+ }
20
+
21
+ .charcoal-list-item[aria-disabled='true'] {
22
+ opacity: 0.32;
23
+ cursor: default;
24
+ }
@@ -1,64 +1,25 @@
1
- import { ReactNode } from 'react'
2
- import styled from 'styled-components'
1
+ import './index.css'
2
+
3
+ import { ForwardedRef, forwardRef, ReactNode, useMemo } from 'react'
4
+ import { useClassNames } from '../../../_lib/useClassNames'
3
5
 
4
6
  export type CustomJSXElement =
5
7
  | keyof JSX.IntrinsicElements
6
8
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
9
  | React.JSXElementConstructor<any>
8
10
 
9
- export type ListItemProps<T extends CustomJSXElement = 'div'> = {
11
+ export type ListItemProps<T extends React.ElementType = 'li'> = {
10
12
  children?: ReactNode
11
13
  as?: T
12
- } & Omit<React.ComponentProps<T>, 'children'>
14
+ } & Omit<React.ComponentPropsWithRef<T>, 'children' | 'as'>
13
15
 
14
- /**
15
- * リストのある要素を示すコンポーネント
16
- *
17
- * asを用いて拡張することができる
18
- * @example
19
- * ```
20
- * <ListItem as="a" href="#">Link</ListItem>
21
- * <ListItem as={NextLink} href="#">NextLink</ListItem>
22
- * ```
23
- */
24
- export default function ListItem<T extends CustomJSXElement = 'div'>(
25
- props: ListItemProps<T>
16
+ const ListItem = forwardRef(function ListItem<T extends React.ElementType>(
17
+ { as, className, ...props }: ListItemProps<T>,
18
+ ref: ForwardedRef<HTMLLIElement>
26
19
  ) {
27
- const { children, ...rest } = props
28
- return (
29
- <StyledLi role="option">
30
- <ItemDiv {...rest}>{props.children}</ItemDiv>
31
- </StyledLi>
32
- )
33
- }
34
-
35
- const StyledLi = styled.li`
36
- list-style: none;
37
- `
38
-
39
- const ItemDiv = styled.div`
40
- display: flex;
41
- align-items: center;
42
- min-height: 40px;
43
- cursor: pointer;
44
- outline: none;
45
-
46
- padding-right: 16px;
47
- padding-left: 16px;
48
-
49
- transition: background-color 0.2s;
50
-
51
- &:disabled,
52
- &[aria-disabled]:not([aria-disabled='false']) {
53
- opacity: 0.32;
54
- cursor: default;
55
- }
20
+ const Component = useMemo(() => as ?? 'li', [as])
21
+ const classNames = useClassNames('charcoal-list-item', className)
22
+ return <Component className={classNames} ref={ref} {...props}></Component>
23
+ }) as <T extends React.ElementType = 'li'>(p: ListItemProps<T>) => JSX.Element
56
24
 
57
- :hover,
58
- :focus,
59
- :focus-within {
60
- &:not(disabled):not([aria-disabled='true']) {
61
- background-color: var(--charcoal-surface3);
62
- }
63
- }
64
- `
25
+ export default ListItem
@@ -1,7 +1,8 @@
1
- import ListItem, { CustomJSXElement, ListItemProps } from '../ListItem'
1
+ import { ForwardedRef, forwardRef } from 'react'
2
+ import ListItem, { ListItemProps } from '../ListItem'
2
3
  import { useMenuItemHandleKeyDown } from './internals/useMenuItemHandleKeyDown'
3
4
 
4
- export type MenuItemProps<T extends CustomJSXElement = never> = {
5
+ export type MenuItemProps<T extends React.ElementType = 'li'> = {
5
6
  value?: string
6
7
  disabled?: boolean
7
8
  } & ListItemProps<T>
@@ -10,22 +11,26 @@ export type MenuItemProps<T extends CustomJSXElement = never> = {
10
11
  * 上下キーでフォーカス移動でき、エンターキーで選択できるリストの項目
11
12
  * 基本的に`<MenuList>`, `<MenuGroup>`と合わせて使用する
12
13
  */
13
- export default function MenuItem<T extends CustomJSXElement>(
14
- props: MenuItemProps<T>
14
+ const MenuItem = forwardRef(function MenuItem<
15
+ T extends React.ElementType = 'li'
16
+ >(
17
+ { className, value, disabled, ...props }: MenuItemProps<T>,
18
+ ref: ForwardedRef<HTMLLIElement>
15
19
  ) {
16
- const { children, as, ...rest } = props
17
- const [handleKeyDown, setContextValue] = useMenuItemHandleKeyDown(props.value)
20
+ const [handleKeyDown, setContextValue] = useMenuItemHandleKeyDown(value)
18
21
  return (
19
22
  <ListItem
20
- {...rest}
21
- as={as as CustomJSXElement}
22
- data-key={props.value}
23
+ {...props}
24
+ ref={ref}
25
+ data-key={value}
23
26
  onKeyDown={handleKeyDown}
24
- onClick={props.disabled === true ? undefined : setContextValue}
27
+ onClick={disabled === true ? undefined : setContextValue}
25
28
  tabIndex={-1}
26
- aria-disabled={props.disabled}
29
+ aria-disabled={disabled}
30
+ role="option"
27
31
  >
28
32
  {props.children}
29
33
  </ListItem>
30
34
  )
31
- }
35
+ })
36
+ export default MenuItem
@@ -11,14 +11,14 @@ import { MenuListContext } from '../../MenuList/MenuListContext'
11
11
  */
12
12
  export function useMenuItemHandleKeyDown(
13
13
  value?: string
14
- ): [(e: React.KeyboardEvent<HTMLDivElement>) => void, () => void] {
14
+ ): [(e: React.KeyboardEvent<HTMLElement>) => void, () => void] {
15
15
  const { setValue, root, propsArray } = useContext(MenuListContext)
16
16
  const setContextValue = useCallback(() => {
17
17
  if (value !== undefined) setValue(value)
18
18
  }, [value, setValue])
19
19
 
20
20
  const handleKeyDown = useCallback(
21
- (e: React.KeyboardEvent<HTMLDivElement>) => {
21
+ (e: React.KeyboardEvent<HTMLElement>) => {
22
22
  if (e.key === 'Enter') {
23
23
  setContextValue()
24
24
  } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
@@ -0,0 +1,19 @@
1
+ .charcoal-menu-item-group {
2
+ display: block;
3
+ }
4
+
5
+ .charcoal-menu-item-group > span {
6
+ display: block;
7
+ color: var(--charcoal-text3);
8
+ font-size: 12px;
9
+ font-weight: bold;
10
+ padding: 12px 0 8px 16px;
11
+ }
12
+
13
+ .charcoal-menu-item-group > ul {
14
+ padding-left: 0;
15
+ margin: 0;
16
+ box-sizing: border-box;
17
+ list-style: none;
18
+ overflow: hidden;
19
+ }
@@ -1,4 +1,5 @@
1
- import styled from 'styled-components'
1
+ import './index.css'
2
+
2
3
  import MenuItem from '../MenuItem'
3
4
  import { Divider } from '../Divider'
4
5
 
@@ -9,34 +10,11 @@ export type MenuItemGroupProps = {
9
10
  children: MenuItemGroupChild | MenuItemGroupChild[]
10
11
  }
11
12
 
12
- /**
13
- * 項目のリストを分類する見出しをつけるコンテナ要素
14
- */
15
13
  export default function MenuItemGroup(props: MenuItemGroupProps) {
16
14
  return (
17
- <StyledLi role="presentation">
18
- <TextSpan>{props.text}</TextSpan>
19
- <StyledUl role="group">{props.children}</StyledUl>
20
- </StyledLi>
15
+ <li className="charcoal-menu-item-group" role="presentation">
16
+ <span>{props.text}</span>
17
+ <ul role="group">{props.children}</ul>
18
+ </li>
21
19
  )
22
20
  }
23
-
24
- const TextSpan = styled.span`
25
- display: block;
26
- color: var(--charcoal-text3);
27
- font-size: 12px;
28
- font-weight: bold;
29
- padding: 12px 0 8px 16px;
30
- `
31
-
32
- const StyledUl = styled.ul`
33
- padding-left: 0;
34
- margin: 0;
35
- box-sizing: border-box;
36
- list-style: none;
37
- overflow: hidden;
38
- `
39
-
40
- const StyledLi = styled.li`
41
- display: block;
42
- `