@sakura-ui/sakura-ui 0.1.21 → 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.
Files changed (264) hide show
  1. package/README.md +16 -6
  2. package/package.json +26 -20
  3. package/packages/core/package.json +30 -18
  4. package/packages/core/src/components/Button.tsx +33 -32
  5. package/packages/core/src/components/Card.tsx +38 -20
  6. package/packages/core/src/components/Code.tsx +6 -4
  7. package/packages/core/src/components/Faq.tsx +13 -7
  8. package/packages/core/src/components/Heading.tsx +42 -32
  9. package/packages/core/src/components/Icon.tsx +43 -13
  10. package/packages/core/src/components/IconButton.tsx +56 -45
  11. package/packages/core/src/components/LangSelector.tsx +135 -0
  12. package/packages/core/src/components/Link.tsx +38 -65
  13. package/packages/core/src/components/LinkCard.tsx +91 -0
  14. package/packages/core/src/components/List.tsx +14 -12
  15. package/packages/core/src/components/MenuButton.tsx +112 -0
  16. package/packages/core/src/components/NavigationItem.tsx +41 -0
  17. package/packages/core/src/components/OverflowContainer.tsx +24 -0
  18. package/packages/core/src/components/PopoverMenu.tsx +81 -0
  19. package/packages/core/src/components/Pre.tsx +6 -4
  20. package/packages/core/src/components/Table.tsx +35 -28
  21. package/packages/core/src/components/buttonStyle.ts +55 -38
  22. package/packages/core/src/components/index.ts +13 -28
  23. package/packages/core/src/icons/Close.tsx +21 -0
  24. package/packages/core/src/icons/CloseMobile.tsx +43 -0
  25. package/packages/core/src/icons/KeyboardArrowDown.tsx +24 -0
  26. package/packages/core/src/icons/Language.tsx +25 -0
  27. package/packages/core/src/icons/LanguageMobile.tsx +40 -0
  28. package/packages/core/src/icons/Menu.tsx +24 -0
  29. package/packages/core/src/icons/MenuMobile.tsx +40 -0
  30. package/packages/core/src/icons/index.ts +8 -0
  31. package/packages/core/src/icons/props.ts +5 -0
  32. package/packages/core/src/index.ts +9 -29
  33. package/packages/core/src/type.d.ts +1 -0
  34. package/packages/core/tests/Button.test.tsx +40 -0
  35. package/packages/core/tests/Card.test.tsx +36 -8
  36. package/packages/core/tests/IconButton.test.tsx +57 -0
  37. package/packages/core/tests/Link.test.tsx +60 -0
  38. package/packages/core/tests/vitest.setup.ts +2 -0
  39. package/packages/core/tsconfig.node.json +3 -2
  40. package/packages/core/vite.config.ts +3 -2
  41. package/packages/forms/.turbo/turbo-build.log +22 -0
  42. package/packages/forms/dist/index.cjs.js +242 -152
  43. package/packages/forms/dist/index.es.js +947 -1010
  44. package/packages/forms/dist/types/components/Checkbox.d.ts +10 -3
  45. package/packages/forms/dist/types/components/Checkbox.d.ts.map +1 -1
  46. package/packages/forms/dist/types/components/FieldsetControl.d.ts +14 -9
  47. package/packages/forms/dist/types/components/FieldsetControl.d.ts.map +1 -1
  48. package/packages/forms/dist/types/components/FileInput.d.ts +10 -3
  49. package/packages/forms/dist/types/components/FileInput.d.ts.map +1 -1
  50. package/packages/forms/dist/types/components/Input.d.ts +10 -3
  51. package/packages/forms/dist/types/components/Input.d.ts.map +1 -1
  52. package/packages/forms/dist/types/components/LabelControl.d.ts +13 -8
  53. package/packages/forms/dist/types/components/LabelControl.d.ts.map +1 -1
  54. package/packages/forms/dist/types/components/Radio.d.ts +10 -3
  55. package/packages/forms/dist/types/components/Radio.d.ts.map +1 -1
  56. package/packages/forms/dist/types/components/Select.d.ts +10 -3
  57. package/packages/forms/dist/types/components/Select.d.ts.map +1 -1
  58. package/packages/forms/dist/types/components/Textarea.d.ts +8 -3
  59. package/packages/forms/dist/types/components/Textarea.d.ts.map +1 -1
  60. package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts +18 -11
  61. package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts.map +1 -1
  62. package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts +19 -12
  63. package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts.map +1 -1
  64. package/packages/forms/dist/types/components/controlled/index.d.ts +0 -2
  65. package/packages/forms/dist/types/components/controlled/index.d.ts.map +1 -1
  66. package/packages/forms/dist/types/components/index.d.ts +8 -8
  67. package/packages/forms/dist/types/components/index.d.ts.map +1 -1
  68. package/packages/forms/dist/types/components/inputStyle.d.ts +13 -0
  69. package/packages/forms/dist/types/components/inputStyle.d.ts.map +1 -0
  70. package/packages/forms/dist/types/index.d.ts +1 -2
  71. package/packages/forms/dist/types/index.d.ts.map +1 -1
  72. package/packages/forms/node_modules/.bin/autoprefixer +2 -2
  73. package/packages/forms/node_modules/.bin/tailwind +2 -2
  74. package/packages/forms/node_modules/.bin/tailwindcss +2 -2
  75. package/packages/forms/node_modules/.bin/ts-node +4 -4
  76. package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
  77. package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
  78. package/packages/forms/node_modules/.bin/ts-node-script +4 -4
  79. package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
  80. package/packages/forms/node_modules/.bin/ts-script +4 -4
  81. package/packages/forms/node_modules/.bin/tsc +17 -0
  82. package/packages/forms/node_modules/.bin/tsserver +17 -0
  83. package/packages/forms/node_modules/.vite/vitest/results.json +1 -0
  84. package/packages/forms/package.json +21 -17
  85. package/packages/forms/src/components/Checkbox.tsx +82 -64
  86. package/packages/forms/src/components/FieldsetControl.tsx +21 -28
  87. package/packages/forms/src/components/FileInput.tsx +88 -62
  88. package/packages/forms/src/components/Input.tsx +35 -41
  89. package/packages/forms/src/components/LabelControl.tsx +19 -25
  90. package/packages/forms/src/components/Radio.tsx +73 -61
  91. package/packages/forms/src/components/Select.tsx +71 -61
  92. package/packages/forms/src/components/Textarea.tsx +50 -54
  93. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +25 -19
  94. package/packages/forms/src/components/controlled/RadioGroup.tsx +22 -20
  95. package/packages/forms/src/components/controlled/index.ts +0 -2
  96. package/packages/forms/src/components/index.ts +8 -8
  97. package/packages/forms/src/components/inputStyle.ts +82 -0
  98. package/packages/forms/src/index.ts +1 -17
  99. package/packages/forms/tests/Checkbox.test.tsx +44 -0
  100. package/packages/forms/tests/FieldsetControl.test.tsx +63 -12
  101. package/packages/forms/tests/FileInput.test.tsx +25 -0
  102. package/packages/forms/tests/Input.test.tsx +13 -84
  103. package/packages/forms/tests/LabelControl.test.tsx +83 -21
  104. package/packages/forms/tests/Radio.test.tsx +24 -79
  105. package/packages/forms/tests/Select.test.tsx +30 -0
  106. package/packages/forms/tests/Textarea.test.tsx +25 -0
  107. package/packages/forms/tests/vitest.setup.ts +2 -0
  108. package/packages/forms/tsconfig.node.json +3 -2
  109. package/packages/forms/vite.config.ts +3 -2
  110. package/packages/helper/.turbo/turbo-build.log +23 -0
  111. package/packages/helper/dist/index.cjs.js +78 -0
  112. package/packages/helper/dist/index.es.js +119 -0
  113. package/packages/helper/dist/types/calc.d.ts +2 -0
  114. package/packages/helper/dist/types/calc.d.ts.map +1 -0
  115. package/packages/{forms/dist/types/utils/class.d.ts → helper/dist/types/cx.d.ts} +1 -1
  116. package/packages/helper/dist/types/cx.d.ts.map +1 -0
  117. package/packages/helper/dist/types/index.d.ts +6 -0
  118. package/packages/helper/dist/types/index.d.ts.map +1 -0
  119. package/packages/helper/dist/types/querySelector.d.ts +2 -0
  120. package/packages/helper/dist/types/querySelector.d.ts.map +1 -0
  121. package/packages/helper/dist/types/styles.d.ts +22 -0
  122. package/packages/helper/dist/types/styles.d.ts.map +1 -0
  123. package/packages/helper/dist/types/treefy.d.ts +8 -0
  124. package/packages/helper/dist/types/treefy.d.ts.map +1 -0
  125. package/packages/{config → helper}/package.json +13 -19
  126. package/packages/helper/src/calc.ts +1 -0
  127. package/packages/{core/src/libs → helper/src}/cx.ts +1 -0
  128. package/packages/helper/src/index.ts +5 -0
  129. package/packages/helper/src/querySelector.ts +20 -0
  130. package/packages/helper/src/styles.ts +116 -0
  131. package/packages/helper/src/treefy.ts +22 -0
  132. package/packages/helper/vite.config.ts +26 -0
  133. package/packages/markdown/.turbo/turbo-build.log +22 -0
  134. package/packages/markdown/README.md +129 -0
  135. package/packages/markdown/dist/index.cjs.js +175 -0
  136. package/packages/markdown/dist/index.es.js +17098 -0
  137. package/packages/markdown/dist/types/components/Markdown.d.ts +15 -0
  138. package/packages/markdown/dist/types/components/Markdown.d.ts.map +1 -0
  139. package/packages/markdown/dist/types/components/index.d.ts +2 -0
  140. package/packages/markdown/dist/types/components/index.d.ts.map +1 -0
  141. package/packages/markdown/dist/types/index.d.ts +2 -0
  142. package/packages/markdown/dist/types/index.d.ts.map +1 -0
  143. package/packages/markdown/dist/types/plugins/attr.d.ts +3 -0
  144. package/packages/markdown/dist/types/plugins/attr.d.ts.map +1 -0
  145. package/packages/markdown/dist/types/plugins/card.d.ts +3 -0
  146. package/packages/markdown/dist/types/plugins/card.d.ts.map +1 -0
  147. package/packages/markdown/dist/types/plugins/cell.d.ts +3 -0
  148. package/packages/markdown/dist/types/plugins/cell.d.ts.map +1 -0
  149. package/packages/markdown/dist/types/plugins/faq.d.ts +3 -0
  150. package/packages/markdown/dist/types/plugins/faq.d.ts.map +1 -0
  151. package/packages/markdown/dist/types/plugins/grid.d.ts +3 -0
  152. package/packages/markdown/dist/types/plugins/grid.d.ts.map +1 -0
  153. package/packages/markdown/dist/types/plugins/headings.d.ts +9 -0
  154. package/packages/markdown/dist/types/plugins/headings.d.ts.map +1 -0
  155. package/packages/markdown/dist/types/plugins/helper.d.ts +9 -0
  156. package/packages/markdown/dist/types/plugins/helper.d.ts.map +1 -0
  157. package/packages/markdown/dist/types/plugins/index.d.ts +9 -0
  158. package/packages/markdown/dist/types/plugins/index.d.ts.map +1 -0
  159. package/packages/markdown/dist/types/plugins/linkButton.d.ts +3 -0
  160. package/packages/markdown/dist/types/plugins/linkButton.d.ts.map +1 -0
  161. package/packages/markdown/dist/types/plugins/youtube.d.ts +3 -0
  162. package/packages/markdown/dist/types/plugins/youtube.d.ts.map +1 -0
  163. package/packages/markdown/node_modules/.bin/autoprefixer +17 -0
  164. package/packages/markdown/node_modules/.bin/tailwind +17 -0
  165. package/packages/markdown/node_modules/.bin/tailwindcss +17 -0
  166. package/packages/markdown/node_modules/.bin/ts-node +17 -0
  167. package/packages/markdown/node_modules/.bin/ts-node-cwd +17 -0
  168. package/packages/markdown/node_modules/.bin/ts-node-esm +17 -0
  169. package/packages/markdown/node_modules/.bin/ts-node-script +17 -0
  170. package/packages/markdown/node_modules/.bin/ts-node-transpile-only +17 -0
  171. package/packages/markdown/node_modules/.bin/ts-script +17 -0
  172. package/packages/markdown/node_modules/.bin/tsc +17 -0
  173. package/packages/markdown/node_modules/.bin/tsserver +17 -0
  174. package/packages/markdown/package.json +83 -0
  175. package/packages/markdown/src/components/Markdown.tsx +361 -0
  176. package/packages/markdown/src/components/index.ts +1 -0
  177. package/packages/markdown/src/global.d.ts +9 -0
  178. package/packages/markdown/src/index.ts +1 -0
  179. package/packages/markdown/src/plugins/attr.ts +19 -0
  180. package/packages/markdown/src/plugins/card.ts +57 -0
  181. package/packages/markdown/src/plugins/cell.ts +47 -0
  182. package/packages/markdown/src/plugins/faq.ts +40 -0
  183. package/packages/markdown/src/plugins/grid.ts +51 -0
  184. package/packages/markdown/src/plugins/headings.ts +35 -0
  185. package/packages/markdown/src/plugins/helper.ts +27 -0
  186. package/packages/markdown/src/plugins/index.ts +8 -0
  187. package/packages/markdown/src/plugins/linkButton.ts +25 -0
  188. package/packages/markdown/src/plugins/youtube.ts +48 -0
  189. package/packages/markdown/tsconfig.json +13 -0
  190. package/packages/markdown/tsconfig.node.json +7 -0
  191. package/packages/{config → markdown}/vite.config.ts +6 -2
  192. package/packages/tailwind-theme-plugin/.turbo/turbo-build.log +22 -0
  193. package/packages/tailwind-theme-plugin/dist/index.cjs.js +1 -1
  194. package/packages/tailwind-theme-plugin/dist/index.es.js +5358 -6115
  195. package/packages/tailwind-theme-plugin/dist/types/index.d.ts +1 -1
  196. package/packages/tailwind-theme-plugin/dist/types/index.d.ts.map +1 -1
  197. package/packages/tailwind-theme-plugin/node_modules/.bin/autoprefixer +4 -4
  198. package/packages/tailwind-theme-plugin/node_modules/.bin/tailwind +4 -4
  199. package/packages/tailwind-theme-plugin/node_modules/.bin/tailwindcss +4 -4
  200. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node +4 -4
  201. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-cwd +4 -4
  202. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-esm +4 -4
  203. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-script +4 -4
  204. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-transpile-only +4 -4
  205. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-script +4 -4
  206. package/packages/tailwind-theme-plugin/node_modules/.bin/tsc +17 -0
  207. package/packages/tailwind-theme-plugin/node_modules/.bin/tsserver +17 -0
  208. package/packages/tailwind-theme-plugin/package.json +10 -7
  209. package/packages/tailwind-theme-plugin/src/index.ts +232 -297
  210. package/packages/tailwind-theme-plugin/vite.config.ts +1 -1
  211. package/packages/config/src/index.ts +0 -347
  212. package/packages/config/tests/index.test.ts +0 -13
  213. package/packages/core/.eslintrc.json +0 -25
  214. package/packages/core/src/components/InfoCard.tsx +0 -50
  215. package/packages/core/src/libs/forward-ref.ts +0 -41
  216. package/packages/core/src/types/component.ts +0 -82
  217. package/packages/forms/coverage/clover.xml +0 -209
  218. package/packages/forms/coverage/coverage-final.json +0 -18
  219. package/packages/forms/coverage/lcov-report/base.css +0 -224
  220. package/packages/forms/coverage/lcov-report/block-navigation.js +0 -87
  221. package/packages/forms/coverage/lcov-report/favicon.png +0 -0
  222. package/packages/forms/coverage/lcov-report/index.html +0 -161
  223. package/packages/forms/coverage/lcov-report/prettify.css +0 -1
  224. package/packages/forms/coverage/lcov-report/prettify.js +0 -2
  225. package/packages/forms/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  226. package/packages/forms/coverage/lcov-report/sorter.js +0 -196
  227. package/packages/forms/coverage/lcov-report/src/components/Checkbox.tsx.html +0 -295
  228. package/packages/forms/coverage/lcov-report/src/components/FieldsetControl.tsx.html +0 -295
  229. package/packages/forms/coverage/lcov-report/src/components/LabelControl.tsx.html +0 -289
  230. package/packages/forms/coverage/lcov-report/src/components/Radio.tsx.html +0 -262
  231. package/packages/forms/coverage/lcov-report/src/components/Select.tsx.html +0 -259
  232. package/packages/forms/coverage/lcov-report/src/components/Text.tsx.html +0 -220
  233. package/packages/forms/coverage/lcov-report/src/components/Textarea.tsx.html +0 -229
  234. package/packages/forms/coverage/lcov-report/src/components/context.ts.html +0 -136
  235. package/packages/forms/coverage/lcov-report/src/components/controlled/CheckboxGroup.tsx.html +0 -244
  236. package/packages/forms/coverage/lcov-report/src/components/controlled/RadioGroup.tsx.html +0 -265
  237. package/packages/forms/coverage/lcov-report/src/components/controlled/SelectControl.tsx.html +0 -205
  238. package/packages/forms/coverage/lcov-report/src/components/controlled/TextControl.tsx.html +0 -202
  239. package/packages/forms/coverage/lcov-report/src/components/controlled/TextareaControl.tsx.html +0 -205
  240. package/packages/forms/coverage/lcov-report/src/components/controlled/index.html +0 -191
  241. package/packages/forms/coverage/lcov-report/src/components/controlled/index.ts.html +0 -100
  242. package/packages/forms/coverage/lcov-report/src/components/index.html +0 -236
  243. package/packages/forms/coverage/lcov-report/src/components/index.ts.html +0 -106
  244. package/packages/forms/coverage/lcov-report/src/index.html +0 -116
  245. package/packages/forms/coverage/lcov-report/src/index.ts.html +0 -136
  246. package/packages/forms/coverage/lcov-report/src/utils/index.html +0 -116
  247. package/packages/forms/coverage/lcov-report/src/utils/index.ts.html +0 -88
  248. package/packages/forms/coverage/lcov.info +0 -434
  249. package/packages/forms/dist/types/components/controlled/SelectControl.d.ts +0 -10
  250. package/packages/forms/dist/types/components/controlled/SelectControl.d.ts.map +0 -1
  251. package/packages/forms/dist/types/components/controlled/TextareaControl.d.ts +0 -10
  252. package/packages/forms/dist/types/components/controlled/TextareaControl.d.ts.map +0 -1
  253. package/packages/forms/dist/types/utils/class.d.ts.map +0 -1
  254. package/packages/forms/jest.config.ts +0 -11
  255. package/packages/forms/node_modules/.bin/browserslist +0 -17
  256. package/packages/forms/node_modules/.bin/eslint +0 -17
  257. package/packages/forms/node_modules/.bin/vitest +0 -17
  258. package/packages/forms/node_modules/.vitest/results.json +0 -1
  259. package/packages/forms/src/components/controlled/SelectControl.tsx +0 -42
  260. package/packages/forms/src/components/controlled/TextareaControl.tsx +0 -42
  261. package/packages/forms/src/utils/class.ts +0 -1
  262. package/packages/tailwind-theme-plugin/node_modules/.bin/browserslist +0 -17
  263. /package/packages/{config → helper}/tsconfig.json +0 -0
  264. /package/packages/{config → helper}/tsconfig.node.json +0 -0
@@ -0,0 +1,112 @@
1
+ import React from 'react'
2
+ import { cx, mod, focusableSelector, Style } from '@sakura-ui/helper'
3
+ import { Menu, MenuMobile, Close, CloseMobile } from '@/icons'
4
+
5
+ export namespace MenuButton {
6
+ export interface Props extends React.ComponentPropsWithRef<'button'> {}
7
+ }
8
+
9
+ export const MenuButton = ({
10
+ className,
11
+ children,
12
+ onChange,
13
+ ...rest
14
+ }: MenuButton.Props) => {
15
+ // leading 16px * 1.375(snug) + padding top 12px + padding bottom 12px + border * 2 = 48px
16
+ const styleMenuItem = `
17
+ w-fit
18
+ py-[1px]
19
+ sm:py-3
20
+ text-base
21
+ leading-snug
22
+ ${Style.clickable}
23
+ ${Style.hoverUnderline}
24
+ ${Style.focusRoundedWithBg}
25
+ `
26
+
27
+ const dialogRef = React.useRef<HTMLDialogElement>(null)
28
+
29
+ React.useEffect(() => {
30
+ document.body.style.overflow = 'auto'
31
+ }, [])
32
+
33
+ const open = () => {
34
+ dialogRef.current?.showModal()
35
+ document.body.style.overflow = 'hidden'
36
+ }
37
+ const close = () => {
38
+ dialogRef.current?.close()
39
+ }
40
+
41
+ const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {
42
+ // Focus trap
43
+ if (e.key === 'Tab') {
44
+ e.preventDefault()
45
+
46
+ const focusables: HTMLElement[] = Array.from(
47
+ dialogRef.current?.querySelectorAll(focusableSelector) || []
48
+ )
49
+ if (focusables.length === 0) return
50
+
51
+ const tabIndex = focusables.findIndex(
52
+ (el) => el === document.activeElement
53
+ )
54
+ // If there is no focused element, focus the first element
55
+ if (tabIndex === -1) {
56
+ focusables[0].focus()
57
+ return
58
+ }
59
+ const nextIndex = mod(tabIndex + (e.shiftKey ? -1 : 1), focusables.length)
60
+ focusables[nextIndex].focus()
61
+
62
+ return
63
+ }
64
+ if (e.key === 'Escape') {
65
+ e.preventDefault()
66
+
67
+ close()
68
+ }
69
+ }
70
+
71
+ const handleOnClose = (_: React.KeyboardEvent<HTMLDialogElement>) => {
72
+ document.body.style.overflow = 'auto'
73
+ }
74
+
75
+ const handleOnClick = (e: React.MouseEvent<HTMLElement>) => {
76
+ if ((e.target as HTMLElement).nodeName === 'DIALOG') {
77
+ close()
78
+ }
79
+ }
80
+
81
+ return (
82
+ <div className={className}>
83
+ <dialog
84
+ ref={dialogRef}
85
+ className="peer"
86
+ onKeyDown={handleKeyDown}
87
+ onClick={handleOnClick}
88
+ onClose={handleOnClose}
89
+ >
90
+ {children}
91
+ </dialog>
92
+ <button
93
+ className={cx(styleMenuItem, 'flex items-center peer-open:hidden')}
94
+ onClick={open}
95
+ {...rest}
96
+ >
97
+ <MenuMobile size={44} className="inline-block sm:hidden" />
98
+ <Menu size={22} className="hidden sm:inline-block mr-1" />
99
+ <span className="hidden sm:inline">Menu</span>
100
+ </button>
101
+ <button
102
+ className={cx(styleMenuItem, 'peer-open:flex items-center hidden')}
103
+ onClick={close}
104
+ {...rest}
105
+ >
106
+ <CloseMobile size={44} className="inline-block sm:hidden" />
107
+ <Close size={22} className="hidden sm:inline-block mr-1" />
108
+ <span className="hidden sm:inline">Close</span>
109
+ </button>
110
+ </div>
111
+ )
112
+ }
@@ -0,0 +1,41 @@
1
+ import React, { type ComponentProps } from 'react'
2
+ import { cx, Style } from '@sakura-ui/helper'
3
+
4
+ export namespace NavigationItem {
5
+ export interface Props<T extends React.ElementType> {
6
+ as?: T
7
+ }
8
+ }
9
+
10
+ export const NavigationItem = <T extends React.ElementType = 'a'>(
11
+ props: NavigationItem.Props<T> &
12
+ Omit<React.ComponentProps<T>, keyof NavigationItem.Props<T>>
13
+ ) => {
14
+ const { as, className, children, ...rest } = props
15
+
16
+ const Component = as || 'a'
17
+
18
+ // leading 16px * 1.375(snug) + padding top 12px + padding bottom 12px + border * 2 = 48px
19
+ const style = `
20
+ inline-block
21
+ w-fit
22
+ py-3
23
+ text-base
24
+ leading-snug
25
+ ${Style.clickable}
26
+ ${Style.hoverUnderline}
27
+ ${Style.focusRectWithBg}
28
+ `
29
+
30
+ return (
31
+ <Component
32
+ className={cx(style, className)}
33
+ rel="noopener noreferrer"
34
+ {...rest}
35
+ >
36
+ {children}
37
+ </Component>
38
+ )
39
+ }
40
+
41
+ NavigationItem.displayName = 'NavigationItem'
@@ -0,0 +1,24 @@
1
+ import React from 'react'
2
+ import { cx } from '@sakura-ui/helper'
3
+
4
+ export namespace OverflowContainer {
5
+ export interface Props extends React.ComponentPropsWithoutRef<'div'> {}
6
+ }
7
+
8
+ export const OverflowContainer = (props: OverflowContainer.Props) => {
9
+ const { className, children, ...restProps } = props
10
+
11
+ const style = `
12
+ w-full
13
+ overflow-x-auto
14
+ whitespace-nowrap
15
+ print:overflow-visible
16
+ print:whitespace-normal
17
+ `
18
+
19
+ return (
20
+ <div className={cx(style, className)} {...restProps}>
21
+ {children}
22
+ </div>
23
+ )
24
+ }
@@ -0,0 +1,81 @@
1
+ import React from 'react'
2
+ import { cx, Style } from '@sakura-ui/helper'
3
+ import { Icon } from './Icon'
4
+
5
+ export const PopoverMenu = React.forwardRef<
6
+ HTMLUListElement,
7
+ React.ComponentProps<'ul'>
8
+ >((props, ref) => {
9
+ const { className, children, ...rest } = props
10
+ const stylePopover = `
11
+ min-w-fit
12
+ w-auto
13
+ py-2
14
+ bg-white
15
+ shadow-1
16
+ rounded-lg
17
+ border
18
+ border-solid-grey-420
19
+ has-[>:nth-child(7)]:rounded-r-none
20
+ `
21
+
22
+ const style = `
23
+ font-normal
24
+ whitespace-nowrap
25
+ ${stylePopover}
26
+ `
27
+
28
+ return (
29
+ <ul ref={ref} role="menu" className={cx(className, style)} {...rest}>
30
+ {children}
31
+ </ul>
32
+ )
33
+ })
34
+
35
+ PopoverMenu.displayName = 'PopoverMenu'
36
+
37
+ export const PopoverMenuItem = React.forwardRef<
38
+ HTMLAnchorElement,
39
+ React.ComponentProps<'a'>
40
+ >((props, ref) => {
41
+ const { className, children, ...rest } = props
42
+
43
+ const style = `
44
+ py-1.5 pl-1.5 pr-4
45
+ flex
46
+ items-center
47
+ gap-x-1.5
48
+ hover:bg-solid-grey-50
49
+ ${Style.focusRectCondensedWithBg}
50
+ `
51
+
52
+ const styleSelected = `
53
+ !text-blue-1000
54
+ !bg-blue-100
55
+ font-bold
56
+ `
57
+
58
+ const current = rest['aria-current'] ?? false
59
+
60
+ return (
61
+ <li role="presentation">
62
+ <a
63
+ aria-current={current}
64
+ ref={ref}
65
+ role="menuitem"
66
+ className={cx(style, current && styleSelected)}
67
+ {...rest}
68
+ >
69
+ <Icon
70
+ opticalSize={20}
71
+ className={`flex-none ${!current && 'invisible'}`}
72
+ >
73
+ check
74
+ </Icon>
75
+ <span className={Style.hoverUnderline}>{children}</span>
76
+ </a>
77
+ </li>
78
+ )
79
+ })
80
+
81
+ PopoverMenuItem.displayName = 'PopoverMenuItem'
@@ -1,14 +1,16 @@
1
1
  import React from 'react'
2
- import { cx } from '../libs/cx'
2
+ import { cx } from '@sakura-ui/helper'
3
3
 
4
- export interface PreProps extends React.ComponentPropsWithoutRef<'pre'> {}
4
+ export namespace Pre {
5
+ export interface Props extends React.ComponentPropsWithoutRef<'pre'> {}
6
+ }
5
7
 
6
- export const Pre = (props: PreProps) => {
8
+ export const Pre = (props: Pre.Props) => {
7
9
  const { className, children, ...restProps } = props
8
10
 
9
11
  const style = `
10
12
  p-4
11
- bg-sumi-50
13
+ bg-solid-gray-50
12
14
  rounded-lg
13
15
  whitespace-pre-wrap
14
16
  overflow-y-scroll
@@ -1,38 +1,34 @@
1
1
  import React from 'react'
2
- import { cx } from '../libs/cx'
2
+ import { cx } from '@sakura-ui/helper'
3
3
 
4
- export interface TableProps extends React.ComponentPropsWithoutRef<'table'> {}
4
+ export namespace Table {
5
+ export interface Props extends React.ComponentPropsWithoutRef<'table'> {}
6
+ }
5
7
 
6
8
  const styleBorder = `
7
9
  border
8
10
  border-collapse
9
- border-[#cccccc]
11
+ border-solid-grey-420
10
12
  `
11
13
 
12
- export const Table = (props: TableProps) => {
14
+ export const Table = (props: Table.Props) => {
13
15
  const { className, children, ...restProps } = props
14
16
 
15
- // If there is no break-all setting, the table will protrude when using a smartphone
16
- const style = `
17
- w-full
18
- table-auto
19
- break-all
20
- `
21
-
22
17
  return (
23
- <table className={cx(style, styleBorder, className)} {...restProps}>
18
+ <table className={cx(styleBorder, className)} {...restProps}>
24
19
  {children}
25
20
  </table>
26
21
  )
27
22
  }
28
23
 
29
- export interface CaptionProps
30
- extends React.ComponentPropsWithoutRef<'caption'> {}
24
+ export namespace Caption {
25
+ export interface Props extends React.ComponentPropsWithoutRef<'caption'> {}
26
+ }
31
27
 
32
- export const Caption = (props: CaptionProps) => {
28
+ export const Caption = (props: Caption.Props) => {
33
29
  const { className, children, ...restProps } = props
34
30
 
35
- const style = `text-left`
31
+ const style = 'text-left'
36
32
  return (
37
33
  <caption className={cx(style, className)} {...restProps}>
38
34
  {children}
@@ -40,9 +36,11 @@ export const Caption = (props: CaptionProps) => {
40
36
  )
41
37
  }
42
38
 
43
- export interface TheadProps extends React.ComponentPropsWithoutRef<'thead'> {}
39
+ export namespace Thead {
40
+ export interface Props extends React.ComponentPropsWithoutRef<'thead'> {}
41
+ }
44
42
 
45
- export const Thead = (props: TheadProps) => {
43
+ export const Thead = (props: Thead.Props) => {
46
44
  const { className, children, ...restProps } = props
47
45
 
48
46
  return (
@@ -52,9 +50,11 @@ export const Thead = (props: TheadProps) => {
52
50
  )
53
51
  }
54
52
 
55
- export interface TbodyProps extends React.ComponentPropsWithoutRef<'tbody'> {}
53
+ export namespace Tbody {
54
+ export interface Props extends React.ComponentPropsWithoutRef<'tbody'> {}
55
+ }
56
56
 
57
- export const Tbody = (props: TbodyProps) => {
57
+ export const Tbody = (props: Tbody.Props) => {
58
58
  const { className, children, ...restProps } = props
59
59
 
60
60
  return (
@@ -64,15 +64,17 @@ export const Tbody = (props: TbodyProps) => {
64
64
  )
65
65
  }
66
66
 
67
- export interface ThProps extends React.ComponentPropsWithoutRef<'th'> {}
67
+ export namespace Th {
68
+ export interface Props extends React.ComponentPropsWithoutRef<'th'> {}
69
+ }
68
70
 
69
- export const Th = (props: ThProps) => {
71
+ export const Th = (props: Th.Props) => {
70
72
  const { className, children, ...restProps } = props
71
73
 
72
74
  const style = `
73
75
  p-2
74
76
  bg-[#f8f8fb]
75
- text-base
77
+ text-label
76
78
  text-left
77
79
  `
78
80
  return (
@@ -82,12 +84,14 @@ export const Th = (props: ThProps) => {
82
84
  )
83
85
  }
84
86
 
85
- export interface TrProps extends React.ComponentPropsWithoutRef<'tr'> {}
87
+ export namespace Tr {
88
+ export interface Props extends React.ComponentPropsWithoutRef<'tr'> {}
89
+ }
86
90
 
87
- export const Tr = (props: TrProps) => {
91
+ export const Tr = (props: Tr.Props) => {
88
92
  const { className, children, ...restProps } = props
89
93
 
90
- const style = ``
94
+ const style = ''
91
95
 
92
96
  return (
93
97
  <tr className={cx(style, styleBorder, className)} {...restProps}>
@@ -96,13 +100,16 @@ export const Tr = (props: TrProps) => {
96
100
  )
97
101
  }
98
102
 
99
- export interface TdProps extends React.ComponentPropsWithoutRef<'td'> {}
103
+ export namespace Td {
104
+ export interface Props extends React.ComponentPropsWithoutRef<'td'> {}
105
+ }
100
106
 
101
- export const Td = (props: TdProps) => {
107
+ export const Td = (props: Td.Props) => {
102
108
  const { className, children, ...restProps } = props
103
109
 
104
110
  const style = `
105
111
  p-2
112
+ text-label
106
113
  `
107
114
 
108
115
  return (
@@ -1,4 +1,10 @@
1
- export type ButtonVariant = 'primary' | 'secondary' | 'tertiary'
1
+ import { Style } from '@sakura-ui/helper'
2
+
3
+ // Deprecated, replace to ButtonVariantV2
4
+ export type ButtonVariantV1 = 'primary' | 'secondary' | 'tertiary'
5
+ export type ButtonVariantV2 = 'solid-fill' | 'outline' | 'text'
6
+ export type ButtonVariant = ButtonVariantV1 | ButtonVariantV2
7
+
2
8
  export type ButtonSize = 'lg' | 'md' | 'sm' | 'xs'
3
9
 
4
10
  export const base = `
@@ -12,79 +18,90 @@ export const base = `
12
18
  outline-offset-2
13
19
  border
14
20
  border-solid
15
- border-sea-800
16
- active:border-sea-1200
17
- hover:border-sea-900
18
- focus:outline
19
- focus:outline-2
20
- focus:outline-wood-600
21
- disabled:border-sumi-500
21
+ border-blue-900
22
+ hover:border-blue-1000
23
+ active:border-blue-1200
24
+ disabled:border-solid-gray-500
22
25
  disabled:cursor-not-allowed
23
26
  `
24
27
 
25
- const primary = `
26
- text-white-1000
27
- bg-sea-800
28
- active:bg-sea-1200
29
- hover:bg-sea-900
30
- disabled:bg-sumi-500
31
- disabled:text-white-1000
28
+ const solidFill = `
29
+ text-white
30
+ bg-blue-900
31
+ hover:bg-blue-1000
32
+ active:bg-blue-1200
33
+ disabled:bg-solid-gray-500
34
+ disabled:text-white
35
+ ${Style.hoverUnderline}
36
+ ${Style.focusRounded}
32
37
  `
33
38
 
34
- const secondary = `
35
- text-sea-800
39
+ const outline = `
40
+ text-blue-900
41
+ hover:text-blue-1000
42
+ active:text-blue-1200
36
43
  bg-transparent
37
- active:bg-sea-200
38
- hover:bg-sea-100
39
- active:text-sea-1200
40
- hover:text-sea-900
41
- disabled:text-sumi-500
44
+ hover:bg-blue-200
45
+ active:bg-blue-300
42
46
  disabled:bg-transparent
47
+ disabled:text-solid-gray-500
48
+ ${Style.hoverUnderline}
49
+ ${Style.focusRounded}
43
50
  `
44
51
 
45
- const tertiary = `
46
- bg-transparent
47
- text-blue-900
48
- underline
49
- hover:bg-blue-200
50
- hover:text-blue-1000
51
- active:bg-blue-300
52
- active:text-blue-1200
53
- disabled:bg-transparent
54
- disabled:text-solid-grey-420
55
- `
52
+ const text = `
53
+ bg-transparent
54
+ text-blue-900
55
+ hover:text-blue-1000
56
+ active:text-blue-1200
57
+ hover:bg-blue-200
58
+ active:bg-blue-300
59
+ disabled:bg-transparent
60
+ disabled:text-solid-gray-500
61
+ ${Style.underlineNoDeco}
62
+ ${Style.focusRoundedWithBg}
63
+ `
56
64
 
57
65
  const styles: { [key in ButtonVariant]: string } = {
58
- primary: primary,
59
- secondary: secondary,
60
- tertiary: tertiary
66
+ primary: solidFill,
67
+ secondary: outline,
68
+ tertiary: text,
69
+ 'solid-fill': solidFill,
70
+ outline: outline,
71
+ text: text
61
72
  }
62
73
 
63
74
  const params: { [key in ButtonSize]: string } = {
75
+ // 16(p-4) * 2 + 22(text-button * leading-snug) + boader * 2 = 56px
64
76
  lg: `
65
77
  p-4
66
78
  text-button
79
+ leading-snug
67
80
  rounded-lg
68
81
  `,
82
+ // 12(py-3) * 2 + 22(text-button * leading-snug) + boader * 2 = 48px
69
83
  md: `
70
84
  px-4
71
85
  py-3
72
86
  text-button
87
+ leading-snug
73
88
  rounded-lg
74
89
  `,
90
+ // 6(py-1.5) * 2 + 22(text-button * leading-snug) + boader * 2 = 36px
75
91
  sm: `
76
92
  px-3
77
93
  py-1.5
78
94
  my-1
79
95
  text-button
96
+ leading-snug
80
97
  rounded-md
81
98
  `,
99
+ // 6(py-1.5) * 2 + 14(text-button-sm) + boader * 2 = 28p
82
100
  xs: `
83
101
  px-2
84
- py-[7px]
102
+ py-1.5
85
103
  my-2
86
104
  text-button-sm
87
- !leading-[14px]
88
105
  rounded
89
106
  `
90
107
  }
@@ -1,32 +1,17 @@
1
- export { Button, type ButtonProps } from './Button'
1
+ export { Button } from './Button'
2
+ export { MenuButton } from './MenuButton'
2
3
  export { Card, CardImg, CardHeader, CardBody, CardFooter } from './Card'
3
- export type {
4
- CardProps,
5
- CardImgProps,
6
- CardHeaderProps,
7
- CardBodyProps,
8
- CardFooterProps
9
- } from './Card'
10
- export { Code, type CodeProps } from './Code'
4
+ export { LinkCard, LinkCardHeader } from './LinkCard'
5
+ export { Code } from './Code'
11
6
  export { Faq, Question, Answer } from './Faq'
12
- export type { FaqProps, QuestionProps, AnswerProps } from './Faq'
13
7
  export { H1, H2, H3, H4, H5, H6 } from './Heading'
14
- export type { HeadingProps } from './Heading'
15
- export { Icon, type IconProps } from './Icon'
16
- export { IconButton, type IconButtonProps } from './IconButton'
17
- export { Link, type LinkProps } from './Link'
18
- export { Ol, Ul, type OlProps, type UlProps } from './List'
19
- export { Pre, type PreProps } from './Pre'
8
+ export { Icon } from './Icon'
9
+ export { IconButton } from './IconButton'
10
+ export { Link } from './Link'
11
+ export { Ol, Ul } from './List'
12
+ export { NavigationItem } from './NavigationItem'
13
+ export { Pre } from './Pre'
20
14
  export { Table, Caption, Thead, Tbody, Th, Tr, Td } from './Table'
21
- export type {
22
- TableProps,
23
- CaptionProps,
24
- TheadProps,
25
- TbodyProps,
26
- ThProps,
27
- TrProps,
28
- TdProps
29
- } from './Table'
30
-
31
- /** @deprecated use Card instead */
32
- export { InfoCard } from './InfoCard'
15
+ export { OverflowContainer } from './OverflowContainer'
16
+ export { LangSelector } from './LangSelector'
17
+ export { PopoverMenu, PopoverMenuItem } from './PopoverMenu'
@@ -0,0 +1,21 @@
1
+ import type { IconProps } from './props'
2
+
3
+ export const Close = (props: IconProps) => {
4
+ const { size, className, ...rest } = props
5
+ return (
6
+ <svg
7
+ aria-hidden={true}
8
+ className={className}
9
+ fill="none"
10
+ height={size}
11
+ viewBox={`0 0 ${size} ${size}`}
12
+ width={size}
13
+ {...rest}
14
+ >
15
+ <path
16
+ d="M6.39961 18.6496L5.34961 17.5996L10.9496 11.9996L5.34961 6.39961L6.39961 5.34961L11.9996 10.9496L17.5996 5.34961L18.6496 6.39961L13.0496 11.9996L18.6496 17.5996L17.5996 18.6496L11.9996 13.0496L6.39961 18.6496Z"
17
+ fill="currentColor"
18
+ />
19
+ </svg>
20
+ )
21
+ }
@@ -0,0 +1,43 @@
1
+ import type { IconProps } from './props'
2
+
3
+ export const CloseMobile = (props: IconProps) => {
4
+ const { size, className, ...rest } = props
5
+ return (
6
+ <svg
7
+ role="img"
8
+ aria-label={`${rest['aria-label'] ?? 'Language'}`}
9
+ className={className}
10
+ fill="none"
11
+ height={size}
12
+ viewBox={`0 0 ${size} ${size}`}
13
+ width={size}
14
+ {...rest}
15
+ >
16
+ <title>Close</title>
17
+ <path
18
+ d="M37.0023 38.8911H32.8164V31.1197H37.0023V32.121H33.941V34.3415H36.8149V35.3319H33.941V37.8789H37.0023V38.8911Z"
19
+ fill="currentColor"
20
+ />
21
+ <path
22
+ d="M31.4644 36.7904C31.4644 37.2548 31.3568 37.6503 31.1416 37.9768C30.9264 38.3034 30.6175 38.5573 30.2148 38.7387C29.8122 38.9129 29.3332 39 28.7779 39C28.5071 39 28.2468 38.9818 27.9969 38.9455C27.747 38.9165 27.5145 38.873 27.2993 38.8149C27.0841 38.7569 26.8932 38.6843 26.7266 38.5972V37.487C27.0042 37.6177 27.3305 37.7374 27.7054 37.8462C28.0802 37.9478 28.462 37.9986 28.8508 37.9986C29.184 37.9986 29.4616 37.9514 29.6838 37.8571C29.9059 37.7628 30.0725 37.6322 30.1836 37.4653C30.2947 37.2984 30.3502 37.1025 30.3502 36.8775C30.3502 36.6381 30.2912 36.4385 30.1732 36.2789C30.0621 36.112 29.8851 35.9596 29.6421 35.8217C29.4061 35.6766 29.0868 35.5242 28.6842 35.3646C28.4065 35.2558 28.1531 35.136 27.924 35.0054C27.7019 34.8675 27.504 34.7079 27.3305 34.5265C27.1639 34.3451 27.0355 34.1347 26.9452 33.8952C26.855 33.6558 26.8099 33.3764 26.8099 33.0571C26.8099 32.629 26.9105 32.2626 27.1118 31.9578C27.3201 31.653 27.6047 31.4208 27.9657 31.2612C28.3267 31.0943 28.7466 31.0109 29.2256 31.0109C29.6282 31.0109 29.9996 31.0544 30.3398 31.1415C30.6869 31.2213 31.0166 31.3338 31.329 31.4789L30.975 32.4476C30.6903 32.3242 30.4023 32.2227 30.1107 32.1428C29.8191 32.063 29.5137 32.0231 29.1944 32.0231C28.9167 32.0231 28.6842 32.0666 28.4967 32.1537C28.3093 32.2408 28.167 32.3605 28.0698 32.5129C27.9796 32.6653 27.9344 32.8431 27.9344 33.0462C27.9344 33.2857 27.9865 33.4852 28.0906 33.6449C28.1948 33.8045 28.3614 33.9533 28.5904 34.0911C28.8195 34.2217 29.1215 34.3669 29.4964 34.5265C29.9129 34.6934 30.2669 34.8748 30.5585 35.0707C30.857 35.2666 31.0826 35.5025 31.2353 35.7782C31.388 36.0467 31.4644 36.3841 31.4644 36.7904Z"
23
+ fill="currentColor"
24
+ />
25
+ <path
26
+ d="M25.6862 34.9946C25.6862 35.5968 25.6133 36.1447 25.4675 36.6381C25.3287 37.1243 25.1135 37.5451 24.8219 37.9007C24.5373 38.2562 24.1763 38.5283 23.739 38.717C23.3086 38.9057 22.8053 39 22.2292 39C21.6391 39 21.1254 38.9057 20.6881 38.717C20.2577 38.5211 19.8967 38.249 19.6052 37.9007C19.3205 37.5451 19.1088 37.1206 18.97 36.6272C18.8311 36.1338 18.7617 35.5859 18.7617 34.9837C18.7617 34.1855 18.8867 33.4889 19.1366 32.8939C19.3865 32.2989 19.7683 31.8345 20.282 31.5007C20.8026 31.1669 21.4552 31 22.2396 31C23.0032 31 23.6384 31.1669 24.1451 31.5007C24.6588 31.8272 25.0441 32.2916 25.3009 32.8939C25.5578 33.4889 25.6862 34.1891 25.6862 34.9946ZM19.9488 34.9946C19.9488 35.6186 20.0286 36.1555 20.1883 36.6054C20.3479 37.0481 20.5978 37.3927 20.938 37.6394C21.2781 37.8789 21.7085 37.9986 22.2292 37.9986C22.7567 37.9986 23.1871 37.8789 23.5203 37.6394C23.8536 37.3927 24.1 37.0481 24.2596 36.6054C24.4193 36.1555 24.4991 35.6186 24.4991 34.9946C24.4991 34.0585 24.3187 33.3292 23.9577 32.8068C23.6036 32.2771 23.0309 32.0122 22.2396 32.0122C21.712 32.0122 21.2781 32.132 20.938 32.3714C20.5978 32.6109 20.3479 32.9519 20.1883 33.3946C20.0286 33.8372 19.9488 34.3705 19.9488 34.9946Z"
27
+ fill="currentColor"
28
+ />
29
+ <path
30
+ d="M13.8516 38.8911V31.1197H14.9761V37.8789H18.152V38.8911H13.8516Z"
31
+ fill="currentColor"
32
+ />
33
+ <path
34
+ d="M10.5403 32.0231C10.1724 32.0231 9.84268 32.092 9.55112 32.2299C9.25957 32.3605 9.00966 32.5564 8.80141 32.8177C8.60009 33.0789 8.4439 33.3945 8.33283 33.7646C8.2287 34.1347 8.17664 34.5519 8.17664 35.0163C8.17664 35.6258 8.26341 36.1555 8.43696 36.6054C8.61051 37.048 8.87082 37.3891 9.21792 37.6285C9.56501 37.868 10.0023 37.9877 10.5299 37.9877C10.8492 37.9877 11.1547 37.9587 11.4462 37.9007C11.7447 37.8353 12.0467 37.7519 12.3522 37.6503V38.6626C12.0606 38.7787 11.7621 38.8621 11.4567 38.9129C11.1512 38.9709 10.7972 39 10.3946 39C9.6379 39 9.00619 38.8367 8.49944 38.5102C7.99962 38.1836 7.62477 37.7192 7.37486 37.117C7.12495 36.5147 7 35.8109 7 35.0054C7 34.4177 7.07636 33.8807 7.22908 33.3945C7.38874 32.9011 7.61782 32.4766 7.91632 32.1211C8.21482 31.7655 8.58274 31.4934 9.02007 31.3047C9.46435 31.1088 9.97458 31.0109 10.5507 31.0109C10.9256 31.0109 11.2935 31.0544 11.6545 31.1415C12.0155 31.2213 12.3417 31.3374 12.6333 31.4898L12.2168 32.4694C11.9738 32.3533 11.71 32.2517 11.4254 32.1646C11.1477 32.0703 10.8527 32.0231 10.5403 32.0231Z"
35
+ fill="currentColor"
36
+ />
37
+ <path
38
+ d="M12.8947 26L11 24.1053L20.1053 15L11 5.89474L12.8947 4L22 13.1053L31.1053 4L33 5.89474L23.8947 15L33 24.1053L31.1053 26L22 16.8947L12.8947 26Z"
39
+ fill="currentColor"
40
+ />
41
+ </svg>
42
+ )
43
+ }