@charcoal-ui/react 6.0.0-rc.6 → 6.0.0-rc.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 (292) hide show
  1. package/dist/_lib/createDivComponent.cjs +20 -0
  2. package/dist/_lib/createDivComponent.cjs.map +1 -0
  3. package/dist/_lib/createDivComponent.js +19 -0
  4. package/dist/_lib/createDivComponent.js.map +1 -0
  5. package/dist/_lib/index.cjs +22 -0
  6. package/dist/_lib/index.cjs.map +1 -0
  7. package/dist/_lib/index.js +20 -0
  8. package/dist/_lib/index.js.map +1 -0
  9. package/dist/_lib/useClassNames.cjs +15 -0
  10. package/dist/_lib/useClassNames.cjs.map +1 -0
  11. package/dist/_lib/useClassNames.js +14 -0
  12. package/dist/_lib/useClassNames.js.map +1 -0
  13. package/dist/_lib/useForwardedRef.cjs +19 -0
  14. package/dist/_lib/useForwardedRef.cjs.map +1 -0
  15. package/dist/_lib/useForwardedRef.js +17 -0
  16. package/dist/_lib/useForwardedRef.js.map +1 -0
  17. package/dist/_lib/useIsomorphicLayoutEffect.cjs +13 -0
  18. package/dist/_lib/useIsomorphicLayoutEffect.cjs.map +1 -0
  19. package/dist/_lib/useIsomorphicLayoutEffect.js +12 -0
  20. package/dist/_lib/useIsomorphicLayoutEffect.js.map +1 -0
  21. package/dist/_virtual/_rolldown/runtime.cjs +30 -0
  22. package/dist/components/Button/index2.cjs +26 -0
  23. package/dist/components/Button/index2.cjs.map +1 -0
  24. package/dist/components/Button/index2.js +24 -0
  25. package/dist/components/Button/index2.js.map +1 -0
  26. package/dist/components/Carousel/CarouselItem.cjs +46 -0
  27. package/dist/components/Carousel/CarouselItem.cjs.map +1 -0
  28. package/dist/components/Carousel/CarouselItem.js +45 -0
  29. package/dist/components/Carousel/CarouselItem.js.map +1 -0
  30. package/dist/components/Carousel/carouselStore.cjs +38 -0
  31. package/dist/components/Carousel/carouselStore.cjs.map +1 -0
  32. package/dist/components/Carousel/carouselStore.js +37 -0
  33. package/dist/components/Carousel/carouselStore.js.map +1 -0
  34. package/dist/components/Carousel/index.d.ts +2 -0
  35. package/dist/components/Carousel/index.d.ts.map +1 -1
  36. package/dist/components/Carousel/index2.cjs +145 -0
  37. package/dist/components/Carousel/index2.cjs.map +1 -0
  38. package/dist/components/Carousel/index2.js +144 -0
  39. package/dist/components/Carousel/index2.js.map +1 -0
  40. package/dist/components/Carousel/intersectionObserver.cjs +46 -0
  41. package/dist/components/Carousel/intersectionObserver.cjs.map +1 -0
  42. package/dist/components/Carousel/intersectionObserver.js +45 -0
  43. package/dist/components/Carousel/intersectionObserver.js.map +1 -0
  44. package/dist/components/Carousel/resizeObserver.cjs +34 -0
  45. package/dist/components/Carousel/resizeObserver.cjs.map +1 -0
  46. package/dist/components/Carousel/resizeObserver.js +33 -0
  47. package/dist/components/Carousel/resizeObserver.js.map +1 -0
  48. package/dist/components/Carousel/store.cjs +24 -0
  49. package/dist/components/Carousel/store.cjs.map +1 -0
  50. package/dist/components/Carousel/store.js +23 -0
  51. package/dist/components/Carousel/store.js.map +1 -0
  52. package/dist/components/Carousel/useCarouselScroller.cjs +149 -0
  53. package/dist/components/Carousel/useCarouselScroller.cjs.map +1 -0
  54. package/dist/components/Carousel/useCarouselScroller.js +148 -0
  55. package/dist/components/Carousel/useCarouselScroller.js.map +1 -0
  56. package/dist/components/Checkbox/CheckboxInput/index2.cjs +29 -0
  57. package/dist/components/Checkbox/CheckboxInput/index2.cjs.map +1 -0
  58. package/dist/components/Checkbox/CheckboxInput/index2.js +28 -0
  59. package/dist/components/Checkbox/CheckboxInput/index2.js.map +1 -0
  60. package/dist/components/Checkbox/CheckboxWithLabel.cjs +23 -0
  61. package/dist/components/Checkbox/CheckboxWithLabel.cjs.map +1 -0
  62. package/dist/components/Checkbox/CheckboxWithLabel.js +21 -0
  63. package/dist/components/Checkbox/CheckboxWithLabel.js.map +1 -0
  64. package/dist/components/Checkbox/index2.cjs +34 -0
  65. package/dist/components/Checkbox/index2.cjs.map +1 -0
  66. package/dist/components/Checkbox/index2.js +33 -0
  67. package/dist/components/Checkbox/index2.js.map +1 -0
  68. package/dist/components/Clickable/index2.cjs +21 -0
  69. package/dist/components/Clickable/index2.cjs.map +1 -0
  70. package/dist/components/Clickable/index2.js +19 -0
  71. package/dist/components/Clickable/index2.js.map +1 -0
  72. package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs +44 -0
  73. package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs.map +1 -0
  74. package/dist/components/DropdownSelector/DropdownMenuItem/index2.js +43 -0
  75. package/dist/components/DropdownSelector/DropdownMenuItem/index2.js.map +1 -0
  76. package/dist/components/DropdownSelector/DropdownPopover.cjs +41 -0
  77. package/dist/components/DropdownSelector/DropdownPopover.cjs.map +1 -0
  78. package/dist/components/DropdownSelector/DropdownPopover.js +40 -0
  79. package/dist/components/DropdownSelector/DropdownPopover.js.map +1 -0
  80. package/dist/components/DropdownSelector/ListItem/index2.cjs +19 -0
  81. package/dist/components/DropdownSelector/ListItem/index2.cjs.map +1 -0
  82. package/dist/components/DropdownSelector/ListItem/index2.js +18 -0
  83. package/dist/components/DropdownSelector/ListItem/index2.js.map +1 -0
  84. package/dist/components/DropdownSelector/MenuItem/index.cjs +30 -0
  85. package/dist/components/DropdownSelector/MenuItem/index.cjs.map +1 -0
  86. package/dist/components/DropdownSelector/MenuItem/index.js +29 -0
  87. package/dist/components/DropdownSelector/MenuItem/index.js.map +1 -0
  88. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs +30 -0
  89. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs.map +1 -0
  90. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js +29 -0
  91. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js.map +1 -0
  92. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs +53 -0
  93. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs.map +1 -0
  94. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js +52 -0
  95. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js.map +1 -0
  96. package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs +20 -0
  97. package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs.map +1 -0
  98. package/dist/components/DropdownSelector/MenuItemGroup/index2.js +19 -0
  99. package/dist/components/DropdownSelector/MenuItemGroup/index2.js.map +1 -0
  100. package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs +15 -0
  101. package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs.map +1 -0
  102. package/dist/components/DropdownSelector/MenuList/MenuListContext.js +14 -0
  103. package/dist/components/DropdownSelector/MenuList/MenuListContext.js.map +1 -0
  104. package/dist/components/DropdownSelector/MenuList/index2.cjs +32 -0
  105. package/dist/components/DropdownSelector/MenuList/index2.cjs.map +1 -0
  106. package/dist/components/DropdownSelector/MenuList/index2.js +31 -0
  107. package/dist/components/DropdownSelector/MenuList/index2.js.map +1 -0
  108. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs +34 -0
  109. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs.map +1 -0
  110. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js +32 -0
  111. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js.map +1 -0
  112. package/dist/components/DropdownSelector/Popover/index2.cjs +71 -0
  113. package/dist/components/DropdownSelector/Popover/index2.cjs.map +1 -0
  114. package/dist/components/DropdownSelector/Popover/index2.js +70 -0
  115. package/dist/components/DropdownSelector/Popover/index2.js.map +1 -0
  116. package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs +27 -0
  117. package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs.map +1 -0
  118. package/dist/components/DropdownSelector/Popover/usePreventScroll.js +26 -0
  119. package/dist/components/DropdownSelector/Popover/usePreventScroll.js.map +1 -0
  120. package/dist/components/DropdownSelector/index2.cjs +113 -0
  121. package/dist/components/DropdownSelector/index2.cjs.map +1 -0
  122. package/dist/components/DropdownSelector/index2.js +111 -0
  123. package/dist/components/DropdownSelector/index2.js.map +1 -0
  124. package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs +34 -0
  125. package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs.map +1 -0
  126. package/dist/components/DropdownSelector/utils/findPreviewRecursive.js +32 -0
  127. package/dist/components/DropdownSelector/utils/findPreviewRecursive.js.map +1 -0
  128. package/dist/components/FieldLabel/index2.cjs +35 -0
  129. package/dist/components/FieldLabel/index2.cjs.map +1 -0
  130. package/dist/components/FieldLabel/index2.js +33 -0
  131. package/dist/components/FieldLabel/index2.js.map +1 -0
  132. package/dist/components/HintText/index2.cjs +25 -0
  133. package/dist/components/HintText/index2.cjs.map +1 -0
  134. package/dist/components/HintText/index2.js +24 -0
  135. package/dist/components/HintText/index2.js.map +1 -0
  136. package/dist/components/Icon/index.cjs +39 -0
  137. package/dist/components/Icon/index.cjs.map +1 -0
  138. package/dist/components/Icon/index.js +37 -0
  139. package/dist/components/Icon/index.js.map +1 -0
  140. package/dist/components/IconButton/index2.cjs +46 -0
  141. package/dist/components/IconButton/index2.cjs.map +1 -0
  142. package/dist/components/IconButton/index2.js +44 -0
  143. package/dist/components/IconButton/index2.js.map +1 -0
  144. package/dist/components/LoadingSpinner/index2.cjs +43 -0
  145. package/dist/components/LoadingSpinner/index2.cjs.map +1 -0
  146. package/dist/components/LoadingSpinner/index2.js +41 -0
  147. package/dist/components/LoadingSpinner/index2.js.map +1 -0
  148. package/dist/components/Modal/Dialog/index2.cjs +30 -0
  149. package/dist/components/Modal/Dialog/index2.cjs.map +1 -0
  150. package/dist/components/Modal/Dialog/index2.js +28 -0
  151. package/dist/components/Modal/Dialog/index2.js.map +1 -0
  152. package/dist/components/Modal/ModalBackgroundContext.cjs +14 -0
  153. package/dist/components/Modal/ModalBackgroundContext.cjs.map +1 -0
  154. package/dist/components/Modal/ModalBackgroundContext.js +12 -0
  155. package/dist/components/Modal/ModalBackgroundContext.js.map +1 -0
  156. package/dist/components/Modal/ModalPlumbing2.cjs +30 -0
  157. package/dist/components/Modal/ModalPlumbing2.cjs.map +1 -0
  158. package/dist/components/Modal/ModalPlumbing2.js +26 -0
  159. package/dist/components/Modal/ModalPlumbing2.js.map +1 -0
  160. package/dist/components/Modal/index2.cjs +121 -0
  161. package/dist/components/Modal/index2.cjs.map +1 -0
  162. package/dist/components/Modal/index2.js +118 -0
  163. package/dist/components/Modal/index2.js.map +1 -0
  164. package/dist/components/Modal/useCustomModalOverlay.cjs +48 -0
  165. package/dist/components/Modal/useCustomModalOverlay.cjs.map +1 -0
  166. package/dist/components/Modal/useCustomModalOverlay.js +45 -0
  167. package/dist/components/Modal/useCustomModalOverlay.js.map +1 -0
  168. package/dist/components/Modal/useTransitionPresence.cjs +57 -0
  169. package/dist/components/Modal/useTransitionPresence.cjs.map +1 -0
  170. package/dist/components/Modal/useTransitionPresence.js +56 -0
  171. package/dist/components/Modal/useTransitionPresence.js.map +1 -0
  172. package/dist/components/MultiSelect/context.cjs +19 -0
  173. package/dist/components/MultiSelect/context.cjs.map +1 -0
  174. package/dist/components/MultiSelect/context.js +18 -0
  175. package/dist/components/MultiSelect/context.js.map +1 -0
  176. package/dist/components/MultiSelect/index2.cjs +97 -0
  177. package/dist/components/MultiSelect/index2.cjs.map +1 -0
  178. package/dist/components/MultiSelect/index2.js +93 -0
  179. package/dist/components/MultiSelect/index2.js.map +1 -0
  180. package/dist/components/Pagination/PaginationContext.cjs +16 -0
  181. package/dist/components/Pagination/PaginationContext.cjs.map +1 -0
  182. package/dist/components/Pagination/PaginationContext.js +14 -0
  183. package/dist/components/Pagination/PaginationContext.js.map +1 -0
  184. package/dist/components/Pagination/helper.cjs +63 -0
  185. package/dist/components/Pagination/helper.cjs.map +1 -0
  186. package/dist/components/Pagination/helper.js +61 -0
  187. package/dist/components/Pagination/helper.js.map +1 -0
  188. package/dist/components/Pagination/index2.cjs +301 -0
  189. package/dist/components/Pagination/index2.cjs.map +1 -0
  190. package/dist/components/Pagination/index2.js +288 -0
  191. package/dist/components/Pagination/index2.js.map +1 -0
  192. package/dist/components/Radio/RadioGroup/index2.cjs +49 -0
  193. package/dist/components/Radio/RadioGroup/index2.cjs.map +1 -0
  194. package/dist/components/Radio/RadioGroup/index2.js +47 -0
  195. package/dist/components/Radio/RadioGroup/index2.js.map +1 -0
  196. package/dist/components/Radio/RadioGroupContext.cjs +20 -0
  197. package/dist/components/Radio/RadioGroupContext.cjs.map +1 -0
  198. package/dist/components/Radio/RadioGroupContext.js +18 -0
  199. package/dist/components/Radio/RadioGroupContext.js.map +1 -0
  200. package/dist/components/Radio/RadioInput/index2.cjs +27 -0
  201. package/dist/components/Radio/RadioInput/index2.cjs.map +1 -0
  202. package/dist/components/Radio/RadioInput/index2.js +26 -0
  203. package/dist/components/Radio/RadioInput/index2.js.map +1 -0
  204. package/dist/components/Radio/index2.cjs +42 -0
  205. package/dist/components/Radio/index2.cjs.map +1 -0
  206. package/dist/components/Radio/index2.js +39 -0
  207. package/dist/components/Radio/index2.js.map +1 -0
  208. package/dist/components/SegmentedControl/RadioGroupContext.cjs +24 -0
  209. package/dist/components/SegmentedControl/RadioGroupContext.cjs.map +1 -0
  210. package/dist/components/SegmentedControl/RadioGroupContext.js +21 -0
  211. package/dist/components/SegmentedControl/RadioGroupContext.js.map +1 -0
  212. package/dist/components/SegmentedControl/index2.cjs +72 -0
  213. package/dist/components/SegmentedControl/index2.cjs.map +1 -0
  214. package/dist/components/SegmentedControl/index2.js +70 -0
  215. package/dist/components/SegmentedControl/index2.js.map +1 -0
  216. package/dist/components/Switch/SwitchInput/index2.cjs +25 -0
  217. package/dist/components/Switch/SwitchInput/index2.cjs.map +1 -0
  218. package/dist/components/Switch/SwitchInput/index2.js +24 -0
  219. package/dist/components/Switch/SwitchInput/index2.js.map +1 -0
  220. package/dist/components/Switch/SwitchWithLabel.cjs +23 -0
  221. package/dist/components/Switch/SwitchWithLabel.cjs.map +1 -0
  222. package/dist/components/Switch/SwitchWithLabel.js +21 -0
  223. package/dist/components/Switch/SwitchWithLabel.js.map +1 -0
  224. package/dist/components/Switch/index2.cjs +37 -0
  225. package/dist/components/Switch/index2.cjs.map +1 -0
  226. package/dist/components/Switch/index2.js +36 -0
  227. package/dist/components/Switch/index2.js.map +1 -0
  228. package/dist/components/TagItem/index.d.ts.map +1 -1
  229. package/dist/components/TagItem/index2.cjs +57 -0
  230. package/dist/components/TagItem/index2.cjs.map +1 -0
  231. package/dist/components/TagItem/index2.js +55 -0
  232. package/dist/components/TagItem/index2.js.map +1 -0
  233. package/dist/components/TextArea/index2.cjs +134 -0
  234. package/dist/components/TextArea/index2.cjs.map +1 -0
  235. package/dist/components/TextArea/index2.js +133 -0
  236. package/dist/components/TextArea/index2.js.map +1 -0
  237. package/dist/components/TextEllipsis/helper.cjs +31 -0
  238. package/dist/components/TextEllipsis/helper.cjs.map +1 -0
  239. package/dist/components/TextEllipsis/helper.js +30 -0
  240. package/dist/components/TextEllipsis/helper.js.map +1 -0
  241. package/dist/components/TextEllipsis/index2.cjs +119 -0
  242. package/dist/components/TextEllipsis/index2.cjs.map +1 -0
  243. package/dist/components/TextEllipsis/index2.js +114 -0
  244. package/dist/components/TextEllipsis/index2.js.map +1 -0
  245. package/dist/components/TextField/AssistiveText/index2.cjs +10 -0
  246. package/dist/components/TextField/AssistiveText/index2.cjs.map +1 -0
  247. package/dist/components/TextField/AssistiveText/index2.js +10 -0
  248. package/dist/components/TextField/AssistiveText/index2.js.map +1 -0
  249. package/dist/components/TextField/index2.cjs +101 -0
  250. package/dist/components/TextField/index2.cjs.map +1 -0
  251. package/dist/components/TextField/index2.js +100 -0
  252. package/dist/components/TextField/index2.js.map +1 -0
  253. package/dist/components/TextField/useFocusWithClick.cjs +23 -0
  254. package/dist/components/TextField/useFocusWithClick.cjs.map +1 -0
  255. package/dist/components/TextField/useFocusWithClick.js +22 -0
  256. package/dist/components/TextField/useFocusWithClick.js.map +1 -0
  257. package/dist/core/CharcoalProvider.cjs +16 -0
  258. package/dist/core/CharcoalProvider.cjs.map +1 -0
  259. package/dist/core/CharcoalProvider.js +14 -0
  260. package/dist/core/CharcoalProvider.js.map +1 -0
  261. package/dist/core/OverlayProvider.js +4 -0
  262. package/dist/core/SSRProvider.cjs +15 -0
  263. package/dist/core/SSRProvider.cjs.map +1 -0
  264. package/dist/core/SSRProvider.js +14 -0
  265. package/dist/core/SSRProvider.js.map +1 -0
  266. package/dist/core/SetThemeScript.cjs +45 -0
  267. package/dist/core/SetThemeScript.cjs.map +1 -0
  268. package/dist/core/SetThemeScript.js +43 -0
  269. package/dist/core/SetThemeScript.js.map +1 -0
  270. package/dist/core/themeHelper.cjs +154 -0
  271. package/dist/core/themeHelper.cjs.map +1 -0
  272. package/dist/core/themeHelper.js +143 -0
  273. package/dist/core/themeHelper.js.map +1 -0
  274. package/dist/index.cjs +81 -12
  275. package/dist/index.css +1380 -1355
  276. package/dist/index.js +31 -12
  277. package/dist/layered.css +1376 -1351
  278. package/dist/layered.css.map +1 -1
  279. package/package.json +5 -5
  280. package/src/components/Carousel/MIGRATION.md +8 -8
  281. package/src/components/Carousel/__snapshots__/index.css.snap +4 -2
  282. package/src/components/Carousel/index.css +5 -2
  283. package/src/components/Carousel/index.story.tsx +14 -12
  284. package/src/components/Carousel/index.test.tsx +24 -0
  285. package/src/components/Carousel/index.tsx +17 -0
  286. package/src/components/TagItem/index.test.tsx +38 -0
  287. package/src/components/TagItem/index.tsx +1 -0
  288. package/src/components/TextArea/__snapshots__/index.css.snap +29 -8
  289. package/src/components/TextArea/index.css +30 -8
  290. package/src/components/TextArea/index.tsx +1 -1
  291. package/dist/index.cjs.map +0 -1
  292. package/dist/index.js.map +0 -1
@@ -7,9 +7,11 @@ import {
7
7
  memo,
8
8
  useCallback,
9
9
  useImperativeHandle,
10
+ useMemo,
10
11
  useRef,
11
12
  useState,
12
13
  useSyncExternalStore,
14
+ type CSSProperties,
13
15
  type ReactNode,
14
16
  } from 'react'
15
17
  import { mergeProps, useFocusRing, useKeyboard } from 'react-aria'
@@ -67,6 +69,8 @@ export type CarouselProps = Readonly<{
67
69
  onResize?: (width: number) => void
68
70
  onScrollStateChange?: (canScroll: boolean) => void
69
71
  defaultScroll?: { align?: ScrollAlign; offset?: number }
72
+ // スライド間隔。number は px、string は CSS 値をそのまま使う。未指定は間隔なし。
73
+ gap?: number | string
70
74
  // 1 直接子要素 = 1 スライド(react-sandbox 互換)。
71
75
  children: ReactNode
72
76
  }>
@@ -147,6 +151,7 @@ const Carousel = forwardRef<CarouselHandlerRef, CarouselProps>(function Render(
147
151
  onResize,
148
152
  onScrollStateChange,
149
153
  defaultScroll: { align = 'left', offset = 0 } = {},
154
+ gap,
150
155
  children,
151
156
  ...props
152
157
  }: CarouselProps,
@@ -213,10 +218,22 @@ const Carousel = forwardRef<CarouselHandlerRef, CarouselProps>(function Render(
213
218
  const { focusProps: rootFocusProps, isFocusVisible: rootFocusVisible } =
214
219
  useFocusRing({ within: true })
215
220
 
221
+ // gap 宣言自体は index.css 側に置き、ここでは CSS 変数の値だけを注入する。
222
+ const gapStyle = useMemo(
223
+ () =>
224
+ ({
225
+ ...(gap != null && {
226
+ '--charcoal-carousel-gap': typeof gap === 'number' ? `${gap}px` : gap,
227
+ }),
228
+ }) satisfies CSSProperties,
229
+ [gap],
230
+ )
231
+
216
232
  return (
217
233
  <div
218
234
  {...rootFocusProps}
219
235
  className={className}
236
+ style={gapStyle}
220
237
  data-size={size}
221
238
  data-has-gradient={hasGradient}
222
239
  data-full-width={fullWidth}
@@ -0,0 +1,38 @@
1
+ import { fireEvent, render, screen } from '@testing-library/react'
2
+ import { forwardRef } from 'react'
3
+ import TagItem from '.'
4
+
5
+ describe('TagItem', () => {
6
+ it('preserves link props on a custom link component', () => {
7
+ const NextLink = forwardRef<
8
+ HTMLAnchorElement,
9
+ React.ComponentPropsWithoutRef<'a'>
10
+ >(function NextLink({ children, ...props }, ref) {
11
+ return (
12
+ <a ref={ref} {...props}>
13
+ {children}
14
+ </a>
15
+ )
16
+ })
17
+
18
+ const onClick = vi.fn()
19
+
20
+ render(
21
+ <TagItem
22
+ component={NextLink}
23
+ href="/tags/girl"
24
+ label="#girl"
25
+ target="_blank"
26
+ onClick={onClick}
27
+ />,
28
+ )
29
+
30
+ const link = screen.getByRole('link')
31
+
32
+ expect(link).toHaveAttribute('href', '/tags/girl')
33
+ expect(link).toHaveAttribute('target', '_blank')
34
+
35
+ fireEvent.click(link)
36
+ expect(onClick).toHaveBeenCalledTimes(1)
37
+ })
38
+ })
@@ -61,6 +61,7 @@ const TagItem = forwardRef<HTMLAnchorElement, TagItemProps>(
61
61
 
62
62
  const { linkProps } = useLink(
63
63
  {
64
+ ...props,
64
65
  isDisabled: disabled,
65
66
  elementType: typeof Component === 'string' ? Component : 'a',
66
67
  },
@@ -30,6 +30,10 @@
30
30
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
31
31
  }
32
32
 
33
+ .charcoal-text-area-container:has([data-no-bottom-padding='true']) {
34
+ height: calc(22px * (var(--charcoal-text-area-rows) + 1) + 18px);
35
+ }
36
+
33
37
  .charcoal-text-area-container:not([aria-disabled='true']):hover {
34
38
  background-color: var(--charcoal-color-container-secondary-hover-a);
35
39
  }
@@ -47,13 +51,26 @@
47
51
  box-sizing: border-box;
48
52
 
49
53
  /* Prevent zooming for iOS Safari */
54
+ --charcoal-textarea-safari-prevent-zoom-scale: 0.875;
55
+ --charcoal-textarea-line-height: calc(
56
+ 22px / var(--charcoal-textarea-safari-prevent-zoom-scale)
57
+ );
58
+ --charcoal-textarea-padding-y: calc(
59
+ 8px / var(--charcoal-textarea-safari-prevent-zoom-scale)
60
+ );
61
+ --charcoal-textarea-padding-x: calc(
62
+ 9px / var(--charcoal-textarea-safari-prevent-zoom-scale)
63
+ );
50
64
  transform-origin: top left;
51
- transform: scale(0.875);
52
- width: calc(100% / 0.875);
53
- font-size: calc(14px / 0.875);
54
- line-height: calc(22px / 0.875);
55
- padding: calc(9px / 0.875) calc(8px / 0.875);
56
- height: calc(22px / 0.875 * var(--charcoal-text-area-rows) + 20px);
65
+ transform: scale(var(--charcoal-textarea-safari-prevent-zoom-scale));
66
+ width: calc(100% / var(--charcoal-textarea-safari-prevent-zoom-scale));
67
+ font-size: calc(14px / var(--charcoal-textarea-safari-prevent-zoom-scale));
68
+ line-height: var(--charcoal-textarea-line-height);
69
+ padding: var(--charcoal-textarea-padding-y) var(--charcoal-textarea-padding-x);
70
+ height: calc(
71
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
72
+ var(--charcoal-textarea-padding-y) * 2
73
+ );
57
74
 
58
75
  /* Display box-shadow for iOS Safari */
59
76
  appearance: none;
@@ -61,8 +78,12 @@
61
78
  }
62
79
 
63
80
  .charcoal-text-area-textarea[data-no-bottom-padding='true'] {
64
- padding: calc(9px / 0.875) calc(8px / 0.875) 0;
65
- height: calc(22px / 0.875 * (var(--charcoal-text-area-rows) - 1) + 9px);
81
+ padding: var(--charcoal-textarea-padding-y)
82
+ var(--charcoal-textarea-padding-x) 0;
83
+ height: calc(
84
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
85
+ var(--charcoal-textarea-padding-y)
86
+ );
66
87
  }
67
88
 
68
89
  .charcoal-text-area-textarea::placeholder {
@@ -32,6 +32,10 @@
32
32
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
33
33
  }
34
34
 
35
+ &:has([data-no-bottom-padding='true']) {
36
+ height: calc(22px * (var(--charcoal-text-area-rows) + 1) + 18px);
37
+ }
38
+
35
39
  &:not([aria-disabled='true']):hover {
36
40
  background-color: var(--charcoal-color-container-secondary-hover-a);
37
41
  }
@@ -50,13 +54,27 @@
50
54
  box-sizing: border-box;
51
55
 
52
56
  /* Prevent zooming for iOS Safari */
57
+ --charcoal-textarea-safari-prevent-zoom-scale: 0.875;
58
+ --charcoal-textarea-line-height: calc(
59
+ 22px / var(--charcoal-textarea-safari-prevent-zoom-scale)
60
+ );
61
+ --charcoal-textarea-padding-y: calc(
62
+ 8px / var(--charcoal-textarea-safari-prevent-zoom-scale)
63
+ );
64
+ --charcoal-textarea-padding-x: calc(
65
+ 9px / var(--charcoal-textarea-safari-prevent-zoom-scale)
66
+ );
67
+
53
68
  transform-origin: top left;
54
- transform: scale(0.875);
55
- width: calc(100% / 0.875);
56
- font-size: calc(14px / 0.875);
57
- line-height: calc(22px / 0.875);
58
- padding: calc(9px / 0.875) calc(8px / 0.875);
59
- height: calc(22px / 0.875 * var(--charcoal-text-area-rows) + 20px);
69
+ transform: scale(var(--charcoal-textarea-safari-prevent-zoom-scale));
70
+ width: calc(100% / var(--charcoal-textarea-safari-prevent-zoom-scale));
71
+ font-size: calc(14px / var(--charcoal-textarea-safari-prevent-zoom-scale));
72
+ line-height: var(--charcoal-textarea-line-height);
73
+ padding: var(--charcoal-textarea-padding-y) var(--charcoal-textarea-padding-x);
74
+ height: calc(
75
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
76
+ var(--charcoal-textarea-padding-y) * 2
77
+ );
60
78
 
61
79
  /* Display box-shadow for iOS Safari */
62
80
  appearance: none;
@@ -64,8 +82,12 @@
64
82
  background: none;
65
83
 
66
84
  &[data-no-bottom-padding='true'] {
67
- padding: calc(9px / 0.875) calc(8px / 0.875) 0;
68
- height: calc(22px / 0.875 * (var(--charcoal-text-area-rows) - 1) + 9px);
85
+ padding: var(--charcoal-textarea-padding-y)
86
+ var(--charcoal-textarea-padding-x) 0;
87
+ height: calc(
88
+ var(--charcoal-textarea-line-height) * var(--charcoal-text-area-rows) +
89
+ var(--charcoal-textarea-padding-y)
90
+ );
69
91
  }
70
92
 
71
93
  &::placeholder {
@@ -206,7 +206,7 @@ const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
206
206
  aria-invalid={invalid === true}
207
207
  ref={containerRef}
208
208
  style={{
209
- '--charcoal-text-area-rows': `${showCount ? rows + 1 : rows}`,
209
+ '--charcoal-text-area-rows': rows,
210
210
  }}
211
211
  >
212
212
  <textarea