@charcoal-ui/react 6.0.0-rc.7 → 6.0.0-rc.9

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 (285) 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/index2.cjs +145 -0
  35. package/dist/components/Carousel/index2.cjs.map +1 -0
  36. package/dist/components/Carousel/index2.js +144 -0
  37. package/dist/components/Carousel/index2.js.map +1 -0
  38. package/dist/components/Carousel/intersectionObserver.cjs +46 -0
  39. package/dist/components/Carousel/intersectionObserver.cjs.map +1 -0
  40. package/dist/components/Carousel/intersectionObserver.js +45 -0
  41. package/dist/components/Carousel/intersectionObserver.js.map +1 -0
  42. package/dist/components/Carousel/resizeObserver.cjs +34 -0
  43. package/dist/components/Carousel/resizeObserver.cjs.map +1 -0
  44. package/dist/components/Carousel/resizeObserver.js +33 -0
  45. package/dist/components/Carousel/resizeObserver.js.map +1 -0
  46. package/dist/components/Carousel/store.cjs +24 -0
  47. package/dist/components/Carousel/store.cjs.map +1 -0
  48. package/dist/components/Carousel/store.js +23 -0
  49. package/dist/components/Carousel/store.js.map +1 -0
  50. package/dist/components/Carousel/useCarouselScroller.cjs +149 -0
  51. package/dist/components/Carousel/useCarouselScroller.cjs.map +1 -0
  52. package/dist/components/Carousel/useCarouselScroller.js +148 -0
  53. package/dist/components/Carousel/useCarouselScroller.js.map +1 -0
  54. package/dist/components/Checkbox/CheckboxInput/index2.cjs +29 -0
  55. package/dist/components/Checkbox/CheckboxInput/index2.cjs.map +1 -0
  56. package/dist/components/Checkbox/CheckboxInput/index2.js +28 -0
  57. package/dist/components/Checkbox/CheckboxInput/index2.js.map +1 -0
  58. package/dist/components/Checkbox/CheckboxWithLabel.cjs +23 -0
  59. package/dist/components/Checkbox/CheckboxWithLabel.cjs.map +1 -0
  60. package/dist/components/Checkbox/CheckboxWithLabel.js +21 -0
  61. package/dist/components/Checkbox/CheckboxWithLabel.js.map +1 -0
  62. package/dist/components/Checkbox/index2.cjs +34 -0
  63. package/dist/components/Checkbox/index2.cjs.map +1 -0
  64. package/dist/components/Checkbox/index2.js +33 -0
  65. package/dist/components/Checkbox/index2.js.map +1 -0
  66. package/dist/components/Clickable/index2.cjs +21 -0
  67. package/dist/components/Clickable/index2.cjs.map +1 -0
  68. package/dist/components/Clickable/index2.js +19 -0
  69. package/dist/components/Clickable/index2.js.map +1 -0
  70. package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs +44 -0
  71. package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs.map +1 -0
  72. package/dist/components/DropdownSelector/DropdownMenuItem/index2.js +43 -0
  73. package/dist/components/DropdownSelector/DropdownMenuItem/index2.js.map +1 -0
  74. package/dist/components/DropdownSelector/DropdownPopover.cjs +41 -0
  75. package/dist/components/DropdownSelector/DropdownPopover.cjs.map +1 -0
  76. package/dist/components/DropdownSelector/DropdownPopover.js +40 -0
  77. package/dist/components/DropdownSelector/DropdownPopover.js.map +1 -0
  78. package/dist/components/DropdownSelector/ListItem/index2.cjs +19 -0
  79. package/dist/components/DropdownSelector/ListItem/index2.cjs.map +1 -0
  80. package/dist/components/DropdownSelector/ListItem/index2.js +18 -0
  81. package/dist/components/DropdownSelector/ListItem/index2.js.map +1 -0
  82. package/dist/components/DropdownSelector/MenuItem/index.cjs +30 -0
  83. package/dist/components/DropdownSelector/MenuItem/index.cjs.map +1 -0
  84. package/dist/components/DropdownSelector/MenuItem/index.js +29 -0
  85. package/dist/components/DropdownSelector/MenuItem/index.js.map +1 -0
  86. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs +30 -0
  87. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs.map +1 -0
  88. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js +29 -0
  89. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js.map +1 -0
  90. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs +53 -0
  91. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs.map +1 -0
  92. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js +52 -0
  93. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js.map +1 -0
  94. package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs +20 -0
  95. package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs.map +1 -0
  96. package/dist/components/DropdownSelector/MenuItemGroup/index2.js +19 -0
  97. package/dist/components/DropdownSelector/MenuItemGroup/index2.js.map +1 -0
  98. package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs +15 -0
  99. package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs.map +1 -0
  100. package/dist/components/DropdownSelector/MenuList/MenuListContext.js +14 -0
  101. package/dist/components/DropdownSelector/MenuList/MenuListContext.js.map +1 -0
  102. package/dist/components/DropdownSelector/MenuList/index2.cjs +32 -0
  103. package/dist/components/DropdownSelector/MenuList/index2.cjs.map +1 -0
  104. package/dist/components/DropdownSelector/MenuList/index2.js +31 -0
  105. package/dist/components/DropdownSelector/MenuList/index2.js.map +1 -0
  106. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs +34 -0
  107. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs.map +1 -0
  108. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js +32 -0
  109. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js.map +1 -0
  110. package/dist/components/DropdownSelector/Popover/index2.cjs +71 -0
  111. package/dist/components/DropdownSelector/Popover/index2.cjs.map +1 -0
  112. package/dist/components/DropdownSelector/Popover/index2.js +70 -0
  113. package/dist/components/DropdownSelector/Popover/index2.js.map +1 -0
  114. package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs +27 -0
  115. package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs.map +1 -0
  116. package/dist/components/DropdownSelector/Popover/usePreventScroll.js +26 -0
  117. package/dist/components/DropdownSelector/Popover/usePreventScroll.js.map +1 -0
  118. package/dist/components/DropdownSelector/index2.cjs +113 -0
  119. package/dist/components/DropdownSelector/index2.cjs.map +1 -0
  120. package/dist/components/DropdownSelector/index2.js +111 -0
  121. package/dist/components/DropdownSelector/index2.js.map +1 -0
  122. package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs +34 -0
  123. package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs.map +1 -0
  124. package/dist/components/DropdownSelector/utils/findPreviewRecursive.js +32 -0
  125. package/dist/components/DropdownSelector/utils/findPreviewRecursive.js.map +1 -0
  126. package/dist/components/FieldLabel/index2.cjs +35 -0
  127. package/dist/components/FieldLabel/index2.cjs.map +1 -0
  128. package/dist/components/FieldLabel/index2.js +33 -0
  129. package/dist/components/FieldLabel/index2.js.map +1 -0
  130. package/dist/components/HintText/index2.cjs +25 -0
  131. package/dist/components/HintText/index2.cjs.map +1 -0
  132. package/dist/components/HintText/index2.js +24 -0
  133. package/dist/components/HintText/index2.js.map +1 -0
  134. package/dist/components/Icon/index.cjs +39 -0
  135. package/dist/components/Icon/index.cjs.map +1 -0
  136. package/dist/components/Icon/index.js +37 -0
  137. package/dist/components/Icon/index.js.map +1 -0
  138. package/dist/components/IconButton/index2.cjs +46 -0
  139. package/dist/components/IconButton/index2.cjs.map +1 -0
  140. package/dist/components/IconButton/index2.js +44 -0
  141. package/dist/components/IconButton/index2.js.map +1 -0
  142. package/dist/components/LoadingSpinner/index2.cjs +43 -0
  143. package/dist/components/LoadingSpinner/index2.cjs.map +1 -0
  144. package/dist/components/LoadingSpinner/index2.js +41 -0
  145. package/dist/components/LoadingSpinner/index2.js.map +1 -0
  146. package/dist/components/Modal/Dialog/index2.cjs +30 -0
  147. package/dist/components/Modal/Dialog/index2.cjs.map +1 -0
  148. package/dist/components/Modal/Dialog/index2.js +28 -0
  149. package/dist/components/Modal/Dialog/index2.js.map +1 -0
  150. package/dist/components/Modal/ModalBackgroundContext.cjs +14 -0
  151. package/dist/components/Modal/ModalBackgroundContext.cjs.map +1 -0
  152. package/dist/components/Modal/ModalBackgroundContext.js +12 -0
  153. package/dist/components/Modal/ModalBackgroundContext.js.map +1 -0
  154. package/dist/components/Modal/ModalPlumbing2.cjs +30 -0
  155. package/dist/components/Modal/ModalPlumbing2.cjs.map +1 -0
  156. package/dist/components/Modal/ModalPlumbing2.js +26 -0
  157. package/dist/components/Modal/ModalPlumbing2.js.map +1 -0
  158. package/dist/components/Modal/index2.cjs +121 -0
  159. package/dist/components/Modal/index2.cjs.map +1 -0
  160. package/dist/components/Modal/index2.js +118 -0
  161. package/dist/components/Modal/index2.js.map +1 -0
  162. package/dist/components/Modal/useCustomModalOverlay.cjs +48 -0
  163. package/dist/components/Modal/useCustomModalOverlay.cjs.map +1 -0
  164. package/dist/components/Modal/useCustomModalOverlay.js +45 -0
  165. package/dist/components/Modal/useCustomModalOverlay.js.map +1 -0
  166. package/dist/components/Modal/useTransitionPresence.cjs +57 -0
  167. package/dist/components/Modal/useTransitionPresence.cjs.map +1 -0
  168. package/dist/components/Modal/useTransitionPresence.js +56 -0
  169. package/dist/components/Modal/useTransitionPresence.js.map +1 -0
  170. package/dist/components/MultiSelect/context.cjs +19 -0
  171. package/dist/components/MultiSelect/context.cjs.map +1 -0
  172. package/dist/components/MultiSelect/context.js +18 -0
  173. package/dist/components/MultiSelect/context.js.map +1 -0
  174. package/dist/components/MultiSelect/index2.cjs +97 -0
  175. package/dist/components/MultiSelect/index2.cjs.map +1 -0
  176. package/dist/components/MultiSelect/index2.js +93 -0
  177. package/dist/components/MultiSelect/index2.js.map +1 -0
  178. package/dist/components/Pagination/PaginationContext.cjs +16 -0
  179. package/dist/components/Pagination/PaginationContext.cjs.map +1 -0
  180. package/dist/components/Pagination/PaginationContext.js +14 -0
  181. package/dist/components/Pagination/PaginationContext.js.map +1 -0
  182. package/dist/components/Pagination/helper.cjs +63 -0
  183. package/dist/components/Pagination/helper.cjs.map +1 -0
  184. package/dist/components/Pagination/helper.js +61 -0
  185. package/dist/components/Pagination/helper.js.map +1 -0
  186. package/dist/components/Pagination/index2.cjs +301 -0
  187. package/dist/components/Pagination/index2.cjs.map +1 -0
  188. package/dist/components/Pagination/index2.js +288 -0
  189. package/dist/components/Pagination/index2.js.map +1 -0
  190. package/dist/components/Radio/RadioGroup/index2.cjs +49 -0
  191. package/dist/components/Radio/RadioGroup/index2.cjs.map +1 -0
  192. package/dist/components/Radio/RadioGroup/index2.js +47 -0
  193. package/dist/components/Radio/RadioGroup/index2.js.map +1 -0
  194. package/dist/components/Radio/RadioGroupContext.cjs +20 -0
  195. package/dist/components/Radio/RadioGroupContext.cjs.map +1 -0
  196. package/dist/components/Radio/RadioGroupContext.js +18 -0
  197. package/dist/components/Radio/RadioGroupContext.js.map +1 -0
  198. package/dist/components/Radio/RadioInput/index2.cjs +27 -0
  199. package/dist/components/Radio/RadioInput/index2.cjs.map +1 -0
  200. package/dist/components/Radio/RadioInput/index2.js +26 -0
  201. package/dist/components/Radio/RadioInput/index2.js.map +1 -0
  202. package/dist/components/Radio/index2.cjs +42 -0
  203. package/dist/components/Radio/index2.cjs.map +1 -0
  204. package/dist/components/Radio/index2.js +39 -0
  205. package/dist/components/Radio/index2.js.map +1 -0
  206. package/dist/components/SegmentedControl/RadioGroupContext.cjs +24 -0
  207. package/dist/components/SegmentedControl/RadioGroupContext.cjs.map +1 -0
  208. package/dist/components/SegmentedControl/RadioGroupContext.js +21 -0
  209. package/dist/components/SegmentedControl/RadioGroupContext.js.map +1 -0
  210. package/dist/components/SegmentedControl/index2.cjs +72 -0
  211. package/dist/components/SegmentedControl/index2.cjs.map +1 -0
  212. package/dist/components/SegmentedControl/index2.js +70 -0
  213. package/dist/components/SegmentedControl/index2.js.map +1 -0
  214. package/dist/components/Switch/SwitchInput/index2.cjs +25 -0
  215. package/dist/components/Switch/SwitchInput/index2.cjs.map +1 -0
  216. package/dist/components/Switch/SwitchInput/index2.js +24 -0
  217. package/dist/components/Switch/SwitchInput/index2.js.map +1 -0
  218. package/dist/components/Switch/SwitchWithLabel.cjs +23 -0
  219. package/dist/components/Switch/SwitchWithLabel.cjs.map +1 -0
  220. package/dist/components/Switch/SwitchWithLabel.js +21 -0
  221. package/dist/components/Switch/SwitchWithLabel.js.map +1 -0
  222. package/dist/components/Switch/index2.cjs +37 -0
  223. package/dist/components/Switch/index2.cjs.map +1 -0
  224. package/dist/components/Switch/index2.js +36 -0
  225. package/dist/components/Switch/index2.js.map +1 -0
  226. package/dist/components/TagItem/index2.cjs +57 -0
  227. package/dist/components/TagItem/index2.cjs.map +1 -0
  228. package/dist/components/TagItem/index2.js +55 -0
  229. package/dist/components/TagItem/index2.js.map +1 -0
  230. package/dist/components/TextArea/index2.cjs +134 -0
  231. package/dist/components/TextArea/index2.cjs.map +1 -0
  232. package/dist/components/TextArea/index2.js +133 -0
  233. package/dist/components/TextArea/index2.js.map +1 -0
  234. package/dist/components/TextEllipsis/helper.cjs +31 -0
  235. package/dist/components/TextEllipsis/helper.cjs.map +1 -0
  236. package/dist/components/TextEllipsis/helper.js +30 -0
  237. package/dist/components/TextEllipsis/helper.js.map +1 -0
  238. package/dist/components/TextEllipsis/index2.cjs +119 -0
  239. package/dist/components/TextEllipsis/index2.cjs.map +1 -0
  240. package/dist/components/TextEllipsis/index2.js +114 -0
  241. package/dist/components/TextEllipsis/index2.js.map +1 -0
  242. package/dist/components/TextField/AssistiveText/index2.cjs +10 -0
  243. package/dist/components/TextField/AssistiveText/index2.cjs.map +1 -0
  244. package/dist/components/TextField/AssistiveText/index2.js +10 -0
  245. package/dist/components/TextField/AssistiveText/index2.js.map +1 -0
  246. package/dist/components/TextField/index2.cjs +101 -0
  247. package/dist/components/TextField/index2.cjs.map +1 -0
  248. package/dist/components/TextField/index2.js +100 -0
  249. package/dist/components/TextField/index2.js.map +1 -0
  250. package/dist/components/TextField/useFocusWithClick.cjs +23 -0
  251. package/dist/components/TextField/useFocusWithClick.cjs.map +1 -0
  252. package/dist/components/TextField/useFocusWithClick.js +22 -0
  253. package/dist/components/TextField/useFocusWithClick.js.map +1 -0
  254. package/dist/core/CharcoalProvider.cjs +16 -0
  255. package/dist/core/CharcoalProvider.cjs.map +1 -0
  256. package/dist/core/CharcoalProvider.js +14 -0
  257. package/dist/core/CharcoalProvider.js.map +1 -0
  258. package/dist/core/OverlayProvider.js +4 -0
  259. package/dist/core/SSRProvider.cjs +15 -0
  260. package/dist/core/SSRProvider.cjs.map +1 -0
  261. package/dist/core/SSRProvider.js +14 -0
  262. package/dist/core/SSRProvider.js.map +1 -0
  263. package/dist/core/SetThemeScript.cjs +45 -0
  264. package/dist/core/SetThemeScript.cjs.map +1 -0
  265. package/dist/core/SetThemeScript.js +43 -0
  266. package/dist/core/SetThemeScript.js.map +1 -0
  267. package/dist/core/themeHelper.cjs +154 -0
  268. package/dist/core/themeHelper.cjs.map +1 -0
  269. package/dist/core/themeHelper.js +143 -0
  270. package/dist/core/themeHelper.js.map +1 -0
  271. package/dist/index.cjs +81 -12
  272. package/dist/index.css +1536 -1530
  273. package/dist/index.js +31 -12
  274. package/dist/layered.css +1508 -1502
  275. package/dist/layered.css.map +1 -1
  276. package/package.json +5 -5
  277. package/src/__tests__/css-shorthand-safety.test.ts +150 -0
  278. package/src/components/Button/__snapshots__/index.css.snap +8 -3
  279. package/src/components/Button/index.css +8 -3
  280. package/src/components/LoadingSpinner/__snapshots__/index.css.snap +1 -2
  281. package/src/components/LoadingSpinner/index.css +1 -2
  282. package/src/components/Pagination/__snapshots__/index.css.snap +3 -1
  283. package/src/components/Pagination/index.css +3 -1
  284. package/dist/index.cjs.map +0 -1
  285. package/dist/index.js.map +0 -1
package/dist/layered.css CHANGED
@@ -1,8 +1,145 @@
1
- @layer charcoal {.charcoal-button {
1
+ @layer charcoal {.charcoal-focus-ring:is(
2
+ :not(:disabled):not([aria-disabled]),
3
+ [aria-disabled='false']
4
+ ):focus-visible {
5
+ outline: none;
6
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
7
+ transition: 0.2s box-shadow;
8
+ }
9
+ .charcoal-radio-group {
10
+ display: grid;
11
+ grid-template-columns: 1fr;
12
+ grid-gap: 8px;
13
+ }
14
+ .charcoal-icon-button {
15
+ cursor: pointer;
2
16
  -webkit-appearance: none;
3
17
  -moz-appearance: none;
4
18
  appearance: none;
5
19
  background: transparent;
20
+ padding: 0;
21
+ border-style: none;
22
+ outline: none;
23
+ color: inherit;
24
+ text-rendering: inherit;
25
+ letter-spacing: inherit;
26
+ word-spacing: inherit;
27
+ text-decoration: none;
28
+ font: inherit;
29
+ margin: 0;
30
+ overflow: visible;
31
+ text-transform: none;
32
+
33
+ -webkit-user-select: none;
34
+
35
+ -moz-user-select: none;
36
+
37
+ user-select: none;
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ border-radius: 999999px;
42
+ transition:
43
+ 0.2s background-color,
44
+ 0.2s box-shadow;
45
+ }
46
+
47
+ .charcoal-icon-button:disabled,
48
+ .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
49
+ cursor: default;
50
+ opacity: 0.32;
51
+ }
52
+
53
+ .charcoal-icon-button:focus {
54
+ outline: none;
55
+ }
56
+
57
+ .charcoal-icon-button::-moz-focus-inner {
58
+ border-style: none;
59
+ padding: 0;
60
+ }
61
+
62
+ .charcoal-icon-button[data-size='XS'] {
63
+ width: 20px;
64
+ height: 20px;
65
+ }
66
+
67
+ .charcoal-icon-button[data-size='S'] {
68
+ width: 32px;
69
+ height: 32px;
70
+ }
71
+
72
+ .charcoal-icon-button[data-size='M'] {
73
+ width: 40px;
74
+ height: 40px;
75
+ }
76
+
77
+ .charcoal-icon-button[data-variant='Default'] {
78
+ color: var(--charcoal-color-icon-tertiary-default);
79
+ background-color: transparent;
80
+ }
81
+
82
+ .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
83
+ .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
84
+ color: var(--charcoal-color-icon-tertiary-press);
85
+ background-color: var(--charcoal-color-container-press-a);
86
+ }
87
+
88
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
89
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
90
+ color: var(--charcoal-color-icon-tertiary-hover);
91
+ background-color: var(--charcoal-color-container-hover-a);
92
+ }
93
+
94
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
95
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
96
+ color: var(--charcoal-color-icon-tertiary-press);
97
+ background-color: var(--charcoal-color-container-press-a);
98
+ }
99
+
100
+ .charcoal-icon-button[data-variant='Overlay'] {
101
+ color: var(--charcoal-color-icon-on-on-img-default);
102
+ background-color: var(--charcoal-color-container-on-img-default);
103
+ }
104
+
105
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
106
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
107
+ color: var(--charcoal-color-icon-on-on-img-press);
108
+ background-color: var(--charcoal-color-container-on-img-press);
109
+ }
110
+
111
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
112
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
113
+ color: var(--charcoal-color-icon-on-on-img-hover);
114
+ background-color: var(--charcoal-color-container-on-img-hover);
115
+ }
116
+
117
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
118
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
119
+ color: var(--charcoal-color-icon-on-on-img-press);
120
+ background-color: var(--charcoal-color-container-on-img-press);
121
+ }
122
+
123
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
124
+ .charcoal-icon-button[aria-disabled='false']:focus {
125
+ outline: none;
126
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
127
+ }
128
+
129
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
130
+ .charcoal-icon-button[aria-disabled='false']:focus-visible {
131
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
132
+ }
133
+
134
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
135
+ .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
136
+ box-shadow: none;
137
+ }
138
+ .charcoal-button {
139
+ -webkit-appearance: none;
140
+ -moz-appearance: none;
141
+ appearance: none;
142
+ background-image: none;
6
143
  box-sizing: border-box;
7
144
  padding: 0 24px;
8
145
  border-style: none;
@@ -11,7 +148,9 @@
11
148
  letter-spacing: inherit;
12
149
  word-spacing: inherit;
13
150
  text-decoration: none;
14
- font: inherit;
151
+ font-family: inherit;
152
+ font-style: inherit;
153
+ font-variant: inherit;
15
154
  margin: 0;
16
155
  overflow: visible;
17
156
  text-transform: none;
@@ -30,7 +169,10 @@
30
169
  line-height: 22px;
31
170
  font-weight: bold;
32
171
  color: var(--charcoal-color-text-default);
33
- background-color: var(--charcoal-color-container-secondary-default-a);
172
+ background-color: var(
173
+ --charcoal-color-container-secondary-default-a,
174
+ transparent
175
+ );
34
176
  transition:
35
177
  0.2s color,
36
178
  0.2s background-color,
@@ -143,283 +285,280 @@
143
285
  .charcoal-button[data-full-width='true'] {
144
286
  width: 100%;
145
287
  }
146
- .charcoal-clickable {
288
+ .charcoal-radio__label {
289
+ display: grid;
290
+ grid-template-columns: auto 1fr;
291
+ grid-gap: 4px;
292
+ align-items: center;
147
293
  cursor: pointer;
294
+ }
148
295
 
149
- /* Reset button appearance */
150
- -webkit-appearance: none;
151
- -moz-appearance: none;
152
- appearance: none;
153
- background: transparent;
154
- padding: 0;
155
- border-style: none;
156
- outline: none;
157
- color: inherit;
158
- text-rendering: inherit;
159
- letter-spacing: inherit;
160
- word-spacing: inherit;
161
- text-decoration: none;
162
-
163
- /* Change the font styles in all browsers. */
164
- font: inherit;
165
-
166
- /* Remove the margin in Firefox and Safari. */
167
- margin: 0;
168
-
169
- /* Show the overflow in Edge. */
170
- overflow: visible;
296
+ .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
297
+ opacity: 0.32;
298
+ cursor: default;
299
+ }
171
300
 
172
- /* Remove the inheritance of text transform in Firefox. */
173
- text-transform: none;
301
+ .charcoal-radio__label_div {
302
+ font-size: 14px;
303
+ line-height: 22px;
304
+ color: var(--charcoal-color-text-default);
305
+ }
306
+ .charcoal-multi-select {
307
+ display: grid;
308
+ grid-template-columns: auto 1fr;
309
+ align-items: center;
310
+ position: relative;
311
+ cursor: pointer;
312
+ gap: 4px;
174
313
  }
175
314
 
176
- .charcoal-clickable:disabled,
177
- .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
315
+ .charcoal-multi-select:disabled,
316
+ .charcoal-multi-select[aria-disabled]:not([aria-disabled='false']) {
317
+ opacity: 0.32;
178
318
  cursor: default;
179
319
  }
180
320
 
181
- .charcoal-clickable:focus {
182
- outline: none;
321
+ .charcoal-multi-select-label {
322
+ display: flow-root;
323
+ align-items: center;
324
+ font-size: 14px;
325
+ line-height: 22px;
326
+ color: var(--charcoal-color-text-default);
327
+ }
328
+
329
+ .charcoal-multi-select-label::before {
330
+ display: block;
331
+ width: 0;
332
+ height: 0;
333
+ content: '';
334
+ margin-top: -4px;
183
335
  }
184
336
 
185
- .charcoal-clickable::-moz-focus-inner {
186
- border-style: none;
187
- padding: 0;
337
+ .charcoal-multi-select-label::after {
338
+ display: block;
339
+ width: 0;
340
+ height: 0;
341
+ content: '';
342
+ margin-bottom: -4px;
188
343
  }
189
- .charcoal-icon-button {
190
- cursor: pointer;
344
+
345
+ .charcoal-multi-select-input[type='checkbox'] {
191
346
  -webkit-appearance: none;
192
347
  -moz-appearance: none;
193
348
  appearance: none;
194
- background: transparent;
195
- padding: 0;
196
- border-style: none;
197
- outline: none;
198
- color: inherit;
199
- text-rendering: inherit;
200
- letter-spacing: inherit;
201
- word-spacing: inherit;
202
- text-decoration: none;
203
- font: inherit;
349
+ display: block;
350
+ width: 20px;
351
+ height: 20px;
204
352
  margin: 0;
205
- overflow: visible;
206
- text-transform: none;
207
-
208
- -webkit-user-select: none;
209
-
210
- -moz-user-select: none;
211
-
212
- user-select: none;
213
- display: flex;
214
- align-items: center;
215
- justify-content: center;
353
+ background-color: var(--charcoal-color-container-neutral-default);
216
354
  border-radius: 999999px;
217
355
  transition:
218
356
  0.2s background-color,
219
357
  0.2s box-shadow;
220
358
  }
221
359
 
222
- .charcoal-icon-button:disabled,
223
- .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
224
- cursor: default;
225
- opacity: 0.32;
360
+ .charcoal-multi-select-input[type='checkbox']:checked {
361
+ background-color: var(--charcoal-color-container-primary-default);
226
362
  }
227
363
 
228
- .charcoal-icon-button:focus {
364
+ .charcoal-multi-select-input[type='checkbox']:focus {
229
365
  outline: none;
366
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
230
367
  }
231
368
 
232
- .charcoal-icon-button::-moz-focus-inner {
233
- border-style: none;
234
- padding: 0;
369
+ .charcoal-multi-select-input[type='checkbox']:focus-visible {
370
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
235
371
  }
236
372
 
237
- .charcoal-icon-button[data-size='XS'] {
238
- width: 20px;
239
- height: 20px;
373
+ .charcoal-multi-select-input[type='checkbox']:focus:not(:focus-visible) {
374
+ box-shadow: none;
240
375
  }
241
376
 
242
- .charcoal-icon-button[data-size='S'] {
243
- width: 32px;
244
- height: 32px;
377
+ .charcoal-multi-select-input[type='checkbox']:hover:not(:disabled):not([aria-disabled]),
378
+ .charcoal-multi-select-input[type='checkbox']:hover[aria-disabled='false'] {
379
+ background-color: var(--charcoal-color-container-neutral-hover);
245
380
  }
246
381
 
247
- .charcoal-icon-button[data-size='M'] {
248
- width: 40px;
249
- height: 40px;
382
+ .charcoal-multi-select-input[type='checkbox']:active:not(:disabled):not([aria-disabled]),
383
+ .charcoal-multi-select-input[type='checkbox']:active[aria-disabled='false'] {
384
+ background-color: var(--charcoal-color-container-neutral-press);
250
385
  }
251
386
 
252
- .charcoal-icon-button[data-variant='Default'] {
253
- color: var(--charcoal-color-icon-tertiary-default);
254
- background-color: transparent;
387
+ .charcoal-multi-select-input[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]),
388
+ .charcoal-multi-select-input[type='checkbox']:checked:hover[aria-disabled='false'] {
389
+ background-color: var(--charcoal-color-container-primary-hover);
255
390
  }
256
391
 
257
- .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
258
- .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
259
- color: var(--charcoal-color-icon-tertiary-press);
260
- background-color: var(--charcoal-color-container-press-a);
261
- }
392
+ .charcoal-multi-select-input[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]),
393
+ .charcoal-multi-select-input[type='checkbox']:checked:active[aria-disabled='false'] {
394
+ background-color: var(--charcoal-color-container-primary-press);
395
+ }
262
396
 
263
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
264
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
265
- color: var(--charcoal-color-icon-tertiary-hover);
266
- background-color: var(--charcoal-color-container-hover-a);
267
- }
397
+ .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false']:not(:disabled):not(
398
+ [aria-disabled]
399
+ ) {
400
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
401
+ }
268
402
 
269
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
270
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
271
- color: var(--charcoal-color-icon-tertiary-press);
272
- background-color: var(--charcoal-color-container-press-a);
273
- }
403
+ .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false'][aria-disabled='false'] {
404
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
405
+ }
274
406
 
275
- .charcoal-icon-button[data-variant='Overlay'] {
276
- color: var(--charcoal-color-icon-on-on-img-default);
407
+ .charcoal-multi-select-input[type='checkbox'][data-overlay='true'] {
277
408
  background-color: var(--charcoal-color-container-on-img-default);
278
409
  }
279
410
 
280
- .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
281
- .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
282
- color: var(--charcoal-color-icon-on-on-img-press);
283
- background-color: var(--charcoal-color-container-on-img-press);
284
- }
285
-
286
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
287
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
288
- color: var(--charcoal-color-icon-on-on-img-hover);
289
- background-color: var(--charcoal-color-container-on-img-hover);
290
- }
291
-
292
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
293
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
294
- color: var(--charcoal-color-icon-on-on-img-press);
295
- background-color: var(--charcoal-color-container-on-img-press);
296
- }
411
+ .charcoal-multi-select-overlay {
412
+ position: absolute;
413
+ top: -2px;
414
+ left: -2px;
415
+ box-sizing: border-box;
416
+ display: flex;
417
+ align-items: center;
418
+ justify-content: center;
419
+ width: 24px;
420
+ height: 24px;
421
+ border-radius: 999999px;
422
+ color: var(--charcoal-color-icon-on-primary-default);
423
+ transition: 0.2s box-shadow;
424
+ }
297
425
 
298
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
299
- .charcoal-icon-button[aria-disabled='false']:focus {
300
- outline: none;
301
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
426
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true']:not(:disabled):not(
427
+ [aria-disabled]
428
+ ) {
429
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
302
430
  }
303
431
 
304
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
305
- .charcoal-icon-button[aria-disabled='false']:focus-visible {
306
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
432
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true'][aria-disabled='false'] {
433
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
307
434
  }
308
435
 
309
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
310
- .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
311
- box-shadow: none;
436
+ .charcoal-multi-select-overlay[data-overlay='true'] {
437
+ border-color: var(--charcoal-color-border-hud);
438
+ border-width: 2px;
439
+ border-style: solid;
312
440
  }
313
- .charcoal-radio__label {
441
+ .charcoal-text-field-root {
314
442
  display: grid;
315
- grid-template-columns: auto 1fr;
443
+ grid-template-columns: 1fr;
316
444
  grid-gap: 4px;
317
- align-items: center;
318
- cursor: pointer;
319
445
  }
320
446
 
321
- .charcoal-radio__label[aria-disabled]:not([aria-disabled='false']) {
447
+ .charcoal-text-field-root[aria-disabled='true'] {
322
448
  opacity: 0.32;
323
- cursor: default;
324
449
  }
325
450
 
326
- .charcoal-radio__label_div {
327
- font-size: 14px;
328
- line-height: 22px;
329
- color: var(--charcoal-color-text-default);
330
- }
331
- .charcoal-radio-input {
332
- -webkit-appearance: none;
333
- -moz-appearance: none;
334
- appearance: none;
335
- display: block;
336
- box-sizing: border-box;
337
-
338
- margin: 0;
339
- padding: 6px;
340
-
341
- width: 20px;
342
- height: 20px;
343
- cursor: pointer;
344
- border-radius: 999999px;
345
- background-color: var(--charcoal-color-container-default);
451
+ .charcoal-text-field-container {
452
+ display: flex;
453
+ height: 40px;
346
454
  transition:
347
455
  0.2s background-color,
348
456
  0.2s box-shadow;
457
+ color: var(--charcoal-color-text-secondary-default);
458
+ background-color: var(--charcoal-color-container-secondary-default-a);
459
+ border-radius: 4px;
460
+ padding: 0 8px;
461
+ line-height: 22px;
462
+ font-size: 14px;
349
463
  }
350
464
 
351
- .charcoal-radio-input:checked {
352
- background-color: var(--charcoal-color-container-primary-default);
353
- }
465
+ .charcoal-text-field-container[data-invalid='true'] {
466
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
467
+ }
354
468
 
355
- .charcoal-radio-input:checked::after {
356
- content: '';
357
- display: block;
358
- width: 8px;
359
- height: 8px;
360
- pointer-events: none;
361
- background-color: var(--charcoal-color-icon-on-primary-default);
362
- border-radius: 999999px;
363
- transition:
364
- 0.2s background-color,
365
- 0.2s box-shadow;
366
- }
469
+ .charcoal-text-field-container:not([aria-disabled='true']):hover {
470
+ background-color: var(--charcoal-color-container-secondary-hover-a);
471
+ }
367
472
 
368
- .charcoal-radio-input:not(:checked) {
369
- border-width: 2px;
370
- border-style: solid;
371
- border-color: var(--charcoal-color-border-default);
372
- }
473
+ .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
474
+ outline: none;
475
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
476
+ }
373
477
 
374
- .charcoal-radio-input:disabled {
375
- cursor: default;
478
+ .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
479
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
480
+ }
481
+
482
+ .charcoal-text-field-prefix {
483
+ display: flex;
484
+ align-items: center;
485
+ margin-right: 4px;
376
486
  }
377
487
 
378
- .charcoal-radio-input:not(:disabled):hover {
379
- background-color: var(--charcoal-color-container-hover);
488
+ .charcoal-text-field-suffix {
489
+ display: flex;
490
+ align-items: center;
491
+ gap: 8px;
492
+ margin-left: 4px;
380
493
  }
381
494
 
382
- .charcoal-radio-input:not(:disabled):active {
383
- background-color: var(--charcoal-color-container-press);
495
+ .charcoal-text-field-input-root {
496
+ flex: 1;
497
+ min-width: 0;
498
+ overflow: hidden;
384
499
  }
385
500
 
386
- .charcoal-radio-input:not(:disabled):focus {
501
+ .charcoal-text-field-input {
502
+ border: none;
503
+ box-sizing: border-box;
387
504
  outline: none;
388
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
389
- }
505
+ font-family: inherit;
390
506
 
391
- .charcoal-radio-input:not(:disabled):focus-visible {
392
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
393
- }
507
+ /* Prevent zooming for iOS Safari */
508
+ transform-origin: top left;
509
+ transform: scale(0.875);
510
+ width: calc(100% / 0.875);
511
+ height: calc(100% / 0.875);
512
+ font-size: calc(14px / 0.875);
513
+ line-height: calc(22px / 0.875);
514
+ padding-left: 0;
515
+ padding-right: 0;
516
+ border-radius: calc(4px / 0.875);
394
517
 
395
- .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
396
- box-shadow: none;
397
- }
518
+ /* Display box-shadow for iOS Safari */
519
+ -webkit-appearance: none;
520
+ -moz-appearance: none;
521
+ appearance: none;
522
+ background: transparent;
398
523
 
399
- .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
400
- .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
401
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
524
+ color: var(--charcoal-color-text-secondary-default);
402
525
  }
403
526
 
404
- .charcoal-radio-input:checked:not(:disabled):hover {
405
- background-color: var(--charcoal-color-container-primary-hover);
406
- }
527
+ .charcoal-text-field-input::-moz-placeholder {
528
+ color: var(--charcoal-color-text-placeholder-default);
529
+ }
407
530
 
408
- .charcoal-radio-input:checked:not(:disabled):hover::after {
409
- background-color: var(--charcoal-color-icon-on-primary-hover);
410
- }
531
+ .charcoal-text-field-input::placeholder {
532
+ color: var(--charcoal-color-text-placeholder-default);
533
+ }
411
534
 
412
- .charcoal-radio-input:checked:not(:disabled):active {
413
- background-color: var(--charcoal-color-container-primary-press);
535
+ .charcoal-text-field-line-counter {
536
+ line-height: 22px;
537
+ font-size: 14px;
538
+ color: var(--charcoal-color-text-tertiary-default);
539
+ }
540
+ .charcoal-switch__label {
541
+ display: inline-grid;
542
+ grid-template-columns: auto 1fr;
543
+ align-items: center;
544
+ cursor: pointer;
545
+ outline: 0;
546
+ gap: 4px;
414
547
  }
415
548
 
416
- .charcoal-radio-input:checked:not(:disabled):active::after {
417
- background-color: var(--charcoal-color-icon-on-primary-press);
418
- }
419
- .charcoal-radio-group {
420
- display: grid;
421
- grid-template-columns: 1fr;
422
- grid-gap: 8px;
549
+ .charcoal-switch__label[aria-disabled='true'] {
550
+ opacity: 0.32;
551
+ cursor: default;
552
+ }
553
+
554
+ .charcoal-switch__label[aria-disabled='true'] > input {
555
+ opacity: 1;
556
+ }
557
+
558
+ .charcoal-switch__label_div {
559
+ font-size: 14px;
560
+ line-height: 22px;
561
+ color: var(--charcoal-color-text-default);
423
562
  }
424
563
  .charcoal-icon {
425
564
  display: inline-flex;
@@ -464,393 +603,501 @@ pixiv-icon:not(:defined)[name^='Inline/'] {
464
603
  pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
465
604
  --pixiv-icon-scale: 2;
466
605
  }
467
- .charcoal-multi-select {
468
- display: grid;
469
- grid-template-columns: auto 1fr;
470
- align-items: center;
471
- position: relative;
606
+ .charcoal-clickable {
472
607
  cursor: pointer;
473
- gap: 4px;
474
- }
475
-
476
- .charcoal-multi-select:disabled,
477
- .charcoal-multi-select[aria-disabled]:not([aria-disabled='false']) {
478
- opacity: 0.32;
479
- cursor: default;
480
- }
481
-
482
- .charcoal-multi-select-label {
483
- display: flow-root;
484
- align-items: center;
485
- font-size: 14px;
486
- line-height: 22px;
487
- color: var(--charcoal-color-text-default);
488
- }
489
-
490
- .charcoal-multi-select-label::before {
491
- display: block;
492
- width: 0;
493
- height: 0;
494
- content: '';
495
- margin-top: -4px;
496
- }
497
-
498
- .charcoal-multi-select-label::after {
499
- display: block;
500
- width: 0;
501
- height: 0;
502
- content: '';
503
- margin-bottom: -4px;
504
- }
505
608
 
506
- .charcoal-multi-select-input[type='checkbox'] {
609
+ /* Reset button appearance */
507
610
  -webkit-appearance: none;
508
611
  -moz-appearance: none;
509
612
  appearance: none;
510
- display: block;
511
- width: 20px;
512
- height: 20px;
513
- margin: 0;
514
- background-color: var(--charcoal-color-container-neutral-default);
515
- border-radius: 999999px;
516
- transition:
517
- 0.2s background-color,
518
- 0.2s box-shadow;
519
- }
613
+ background: transparent;
614
+ padding: 0;
615
+ border-style: none;
616
+ outline: none;
617
+ color: inherit;
618
+ text-rendering: inherit;
619
+ letter-spacing: inherit;
620
+ word-spacing: inherit;
621
+ text-decoration: none;
520
622
 
521
- .charcoal-multi-select-input[type='checkbox']:checked {
522
- background-color: var(--charcoal-color-container-primary-default);
523
- }
623
+ /* Change the font styles in all browsers. */
624
+ font: inherit;
524
625
 
525
- .charcoal-multi-select-input[type='checkbox']:focus {
526
- outline: none;
527
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
528
- }
626
+ /* Remove the margin in Firefox and Safari. */
627
+ margin: 0;
529
628
 
530
- .charcoal-multi-select-input[type='checkbox']:focus-visible {
531
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
532
- }
629
+ /* Show the overflow in Edge. */
630
+ overflow: visible;
533
631
 
534
- .charcoal-multi-select-input[type='checkbox']:focus:not(:focus-visible) {
535
- box-shadow: none;
536
- }
632
+ /* Remove the inheritance of text transform in Firefox. */
633
+ text-transform: none;
634
+ }
537
635
 
538
- .charcoal-multi-select-input[type='checkbox']:hover:not(:disabled):not([aria-disabled]),
539
- .charcoal-multi-select-input[type='checkbox']:hover[aria-disabled='false'] {
540
- background-color: var(--charcoal-color-container-neutral-hover);
636
+ .charcoal-clickable:disabled,
637
+ .charcoal-clickable[aria-disabled]:not([aria-disabled='false']) {
638
+ cursor: default;
541
639
  }
542
640
 
543
- .charcoal-multi-select-input[type='checkbox']:active:not(:disabled):not([aria-disabled]),
544
- .charcoal-multi-select-input[type='checkbox']:active[aria-disabled='false'] {
545
- background-color: var(--charcoal-color-container-neutral-press);
641
+ .charcoal-clickable:focus {
642
+ outline: none;
546
643
  }
547
644
 
548
- .charcoal-multi-select-input[type='checkbox']:checked:hover:not(:disabled):not([aria-disabled]),
549
- .charcoal-multi-select-input[type='checkbox']:checked:hover[aria-disabled='false'] {
550
- background-color: var(--charcoal-color-container-primary-hover);
645
+ .charcoal-clickable::-moz-focus-inner {
646
+ border-style: none;
647
+ padding: 0;
551
648
  }
649
+ .charcoal-dropdown-selector-root {
650
+ display: grid;
651
+ grid-template-columns: 1fr;
652
+ grid-gap: 4px;
653
+ width: 100%;
654
+ }
552
655
 
553
- .charcoal-multi-select-input[type='checkbox']:checked:active:not(:disabled):not([aria-disabled]),
554
- .charcoal-multi-select-input[type='checkbox']:checked:active[aria-disabled='false'] {
555
- background-color: var(--charcoal-color-container-primary-press);
656
+ .charcoal-dropdown-selector-root[aria-disabled='true'] {
657
+ cursor: default;
658
+ opacity: 0.32;
556
659
  }
557
660
 
558
- .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false']:not(:disabled):not(
559
- [aria-disabled]
560
- ) {
561
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
562
- }
661
+ .charcoal-dropdown-selector-button {
662
+ display: grid;
663
+ grid-template-columns: 1fr auto;
664
+ justify-content: space-between;
665
+ align-items: center;
563
666
 
564
- .charcoal-multi-select-input[type='checkbox'][aria-invalid='true'][data-overlay='false'][aria-disabled='false'] {
565
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
566
- }
667
+ height: 40px;
668
+ width: 100%;
669
+ box-sizing: border-box;
670
+ border: none;
671
+ cursor: pointer;
672
+ gap: 4px;
567
673
 
568
- .charcoal-multi-select-input[type='checkbox'][data-overlay='true'] {
569
- background-color: var(--charcoal-color-container-on-img-default);
570
- }
674
+ padding-right: 8px;
675
+ padding-left: 8px;
676
+ background-color: var(--charcoal-color-container-secondary-default-a);
677
+ border-radius: 4px;
571
678
 
572
- .charcoal-multi-select-overlay {
573
- position: absolute;
574
- top: -2px;
575
- left: -2px;
576
- box-sizing: border-box;
577
- display: flex;
578
- align-items: center;
579
- justify-content: center;
580
- width: 24px;
581
- height: 24px;
582
- border-radius: 999999px;
583
- color: var(--charcoal-color-icon-on-primary-default);
584
- transition: 0.2s box-shadow;
679
+ transition:
680
+ 0.2s box-shadow,
681
+ 0.2s background-color;
585
682
  }
586
683
 
587
- .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true']:not(:disabled):not(
588
- [aria-disabled]
589
- ) {
590
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
684
+ .charcoal-dropdown-selector-button:disabled {
685
+ cursor: default;
591
686
  }
592
687
 
593
- .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true'][aria-disabled='false'] {
594
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
595
- }
688
+ .charcoal-dropdown-selector-button:not(:disabled):focus {
689
+ outline: none;
690
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
691
+ }
596
692
 
597
- .charcoal-multi-select-overlay[data-overlay='true'] {
598
- border-color: var(--charcoal-color-border-hud);
599
- border-width: 2px;
600
- border-style: solid;
601
- }
602
- .charcoal-switch__label {
603
- display: inline-grid;
604
- grid-template-columns: auto 1fr;
605
- align-items: center;
606
- cursor: pointer;
607
- outline: 0;
608
- gap: 4px;
609
- }
693
+ .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
694
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
695
+ }
610
696
 
611
- .charcoal-switch__label[aria-disabled='true'] {
612
- opacity: 0.32;
613
- cursor: default;
614
- }
697
+ .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
698
+ .charcoal-dropdown-selector-button:not(:disabled):active {
699
+ background-color: var(--charcoal-color-container-secondary-press-a);
700
+ }
615
701
 
616
- .charcoal-switch__label[aria-disabled='true'] > input {
617
- opacity: 1;
702
+ .charcoal-dropdown-selector-button:not(:disabled):hover {
703
+ background-color: var(--charcoal-color-container-secondary-hover-a);
618
704
  }
619
705
 
620
- .charcoal-switch__label_div {
706
+ .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
707
+ box-shadow: none;
708
+ }
709
+
710
+ .charcoal-dropdown-selector-button[aria-invalid='true'],
711
+ .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
712
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
713
+ }
714
+
715
+ .charcoal-ui-dropdown-selector-text {
716
+ text-align: left;
621
717
  font-size: 14px;
622
718
  line-height: 22px;
719
+ display: flow-root;
623
720
  color: var(--charcoal-color-text-default);
721
+ overflow: hidden;
722
+ text-overflow: ellipsis;
723
+ white-space: nowrap;
624
724
  }
625
- .charcoal-switch-input {
626
- cursor: pointer;
627
- -webkit-appearance: none;
628
- -moz-appearance: none;
629
- appearance: none;
630
- display: inline-flex;
631
- position: relative;
632
- box-sizing: border-box;
633
- width: 28px;
634
- border: 2px solid transparent;
635
725
 
636
- transition-property: background-color, box-shadow;
637
- transition-duration: 0.2s;
726
+ .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
727
+ color: var(--charcoal-color-text-placeholder-default);
728
+ }
638
729
 
639
- outline: none;
640
- border-radius: 16px;
641
- height: 16px;
642
- margin: 0;
643
- background-color: var(--charcoal-color-container-neutral-default);
730
+ .charcoal-ui-dropdown-selector-icon {
731
+ color: var(--charcoal-color-icon-secondary-default);
644
732
  }
645
-
646
- .charcoal-switch-input:disabled,
647
- .charcoal-switch-input[readonly] {
648
- opacity: 0.32;
649
- cursor: default;
733
+ .charcoal-modal-header-root {
734
+ height: 64px;
735
+ display: grid;
736
+ align-content: center;
737
+ justify-content: center;
650
738
  }
651
739
 
652
- .charcoal-switch-input::after {
653
- content: '';
654
- position: absolute;
655
- display: block;
656
- top: 0;
657
- left: 0;
658
- width: 12px;
659
- height: 12px;
660
- transform: translateX(0);
661
- transition: transform 0.2s;
662
- border-radius: 1024px;
663
- background-color: var(--charcoal-color-icon-on-primary-default);
740
+ @media (max-width: 743px) {
741
+ .charcoal-modal-header-root[data-bottom-sheet='true'],
742
+ .charcoal-modal-header-root[data-bottom-sheet='full'] {
743
+ height: 48px;
744
+ }
664
745
  }
665
746
 
666
- .charcoal-switch-input:checked::after {
667
- transform: translateX(12px);
668
- transition: transform 0.2s;
747
+ .charcoal-modal-header-title {
748
+ color: var(--charcoal-color-text-default);
749
+ font-size: 16px;
750
+ line-height: 24px;
751
+ font-weight: bold;
752
+ display: flow-root;
669
753
  }
670
754
 
671
- .charcoal-switch-input:checked {
672
- background-color: var(--charcoal-color-container-primary-default);
755
+ .charcoal-modal-align {
756
+ padding-left: 16px;
757
+ padding-right: 16px;
673
758
  }
674
759
 
675
- .charcoal-switch-input:not(:disabled):hover {
676
- background-color: var(--charcoal-color-container-neutral-hover);
760
+ .charcoal-modal-body {
761
+ padding-bottom: 40px;
677
762
  }
678
763
 
679
- .charcoal-switch-input:not(:disabled):active {
680
- background-color: var(--charcoal-color-container-neutral-press);
681
- }
764
+ .charcoal-modal-buttons {
765
+ display: grid;
766
+ grid-auto-flow: row;
767
+ grid-row-gap: 8px;
682
768
 
683
- .charcoal-switch-input:not(:disabled):focus {
684
- outline: none;
685
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
769
+ padding-top: 16px;
770
+ padding-left: 16px;
771
+ padding-right: 16px;
686
772
  }
687
- .charcoal-switch-input:not(:disabled):focus-visible {
688
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
773
+ .charcoal-modal-background {
774
+ overflow: auto;
775
+ display: flex;
776
+ position: fixed;
777
+ top: 0;
778
+ left: 0;
779
+ width: 100%;
780
+ height: 100%;
781
+ justify-content: center;
782
+ padding: 40px 0;
783
+ box-sizing: border-box;
784
+
785
+ background-color: var(--charcoal-color-background-overlay);
689
786
  }
690
- .charcoal-switch-input:not(:disabled):focus:not(:focus-visible) {
691
- box-shadow: none;
787
+
788
+ @media (max-width: 743px) {
789
+ .charcoal-modal-background[data-bottom-sheet='true'],
790
+ .charcoal-modal-background[data-bottom-sheet='full'] {
791
+ padding: 0;
792
+ }
793
+ }
794
+
795
+ /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
796
+ transition は entering / exiting に限定し、開いたままテーマ切り替え等で
797
+ 色や transform が変わってもアニメーションしないようにする */
798
+ .charcoal-modal-background[data-animation] {
799
+ overflow: hidden;
692
800
  }
693
801
 
694
- .charcoal-switch-input:not(:disabled)::after:hover {
695
- background-color: var(--charcoal-color-icon-on-primary-hover);
802
+ .charcoal-modal-background[data-animation='entering'],
803
+ .charcoal-modal-background[data-animation='exiting'] {
804
+ transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
696
805
  }
697
806
 
698
- .charcoal-switch-input:not(:disabled)::after:active {
699
- background-color: var(--charcoal-color-icon-on-primary-press);
807
+ /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
808
+ 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
809
+ .charcoal-modal-background[data-animation='exited'],
810
+ .charcoal-modal-background[data-animation='exiting'] {
811
+ background-color: transparent;
812
+ pointer-events: none;
700
813
  }
701
814
 
702
- .charcoal-switch-input:not(:disabled):checked:hover {
703
- background-color: var(--charcoal-color-container-primary-hover);
815
+ .charcoal-modal-background[data-animation='entered'] {
816
+ overflow: auto;
704
817
  }
705
818
 
706
- .charcoal-switch-input:not(:disabled):checked:active {
707
- background-color: var(--charcoal-color-container-primary-press);
819
+ .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
820
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
821
+ transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
708
822
  }
709
- .charcoal-text-field-root {
710
- display: grid;
711
- grid-template-columns: 1fr;
712
- grid-gap: 4px;
823
+
824
+ .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
825
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
826
+ transform: translateY(100%);
713
827
  }
714
828
 
715
- .charcoal-text-field-root[aria-disabled='true'] {
716
- opacity: 0.32;
717
- }
829
+ .charcoal-modal-close-button {
830
+ position: absolute;
831
+ top: 8px;
832
+ right: 8px;
718
833
 
719
- .charcoal-text-field-container {
720
- display: flex;
721
- height: 40px;
722
- transition:
723
- 0.2s background-color,
724
- 0.2s box-shadow;
725
- color: var(--charcoal-color-text-secondary-default);
726
- background-color: var(--charcoal-color-container-secondary-default-a);
727
- border-radius: 4px;
728
- padding: 0 8px;
729
- line-height: 22px;
730
- font-size: 14px;
834
+ color: var(--charcoal-color-text-tertiary-default);
835
+ transition: 0.2s color;
731
836
  }
732
837
 
733
- .charcoal-text-field-container[data-invalid='true'] {
734
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
735
- }
838
+ .charcoal-modal-title {
839
+ margin: 0;
840
+ font-weight: inherit;
841
+ font-size: inherit;
842
+ }
843
+ .charcoal-loading-spinner {
844
+ box-sizing: content-box;
845
+ margin: auto;
846
+ padding: 16px;
847
+ border-radius: 8px;
848
+ font-size: 48px;
849
+ width: 48px;
850
+ height: 48px;
851
+ opacity: 0.84;
852
+ color: var(--charcoal-color-icon-tertiary-default);
853
+ background-color: var(--charcoal-color-background-default);
854
+ }
736
855
 
737
- .charcoal-text-field-container:not([aria-disabled='true']):hover {
738
- background-color: var(--charcoal-color-container-secondary-hover-a);
856
+ .charcoal-loading-spinner[data-transparent='true'] {
857
+ background-color: var(--charcoal-color-container-default-a);
739
858
  }
740
859
 
741
- .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
742
- outline: none;
743
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
860
+ @keyframes charcoal-loading-spinner-icon-scale-out {
861
+ from {
862
+ transform: scale(0);
863
+ opacity: 1;
744
864
  }
745
-
746
- .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
747
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
865
+ to {
866
+ transform: scale(1);
867
+ opacity: 0;
748
868
  }
749
-
750
- .charcoal-text-field-prefix {
751
- display: flex;
752
- align-items: center;
753
- margin-right: 4px;
754
869
  }
755
870
 
756
- .charcoal-text-field-suffix {
757
- display: flex;
758
- align-items: center;
759
- gap: 8px;
760
- margin-left: 4px;
871
+ .charcoal-loading-spinner-icon {
872
+ width: 1em;
873
+ height: 1em;
874
+ border-radius: 1em;
875
+ background-color: currentColor;
876
+ animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
761
877
  }
762
878
 
763
- .charcoal-text-field-input-root {
764
- flex: 1;
765
- min-width: 0;
766
- overflow: hidden;
767
- }
879
+ .charcoal-loading-spinner-icon[data-reset-animation] {
880
+ animation: none;
881
+ }
768
882
 
769
- .charcoal-text-field-input {
770
- border: none;
771
- box-sizing: border-box;
772
- outline: none;
773
- font-family: inherit;
883
+ .charcoal-loading-spinner-icon[data-once='true'] {
884
+ animation-iteration-count: 1;
885
+ }
886
+ .charcoal-tag-item {
887
+ --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
888
+ --charcoal-tag-item-size: 40px;
889
+ --charcoal-tag-item-padding-left: 24px;
890
+ --charcoal-tag-item-padding-right: 24px;
891
+ --charcoal-tag-item-bg: ;
774
892
 
775
- /* Prevent zooming for iOS Safari */
776
- transform-origin: top left;
777
- transform: scale(0.875);
778
- width: calc(100% / 0.875);
779
- height: calc(100% / 0.875);
780
- font-size: calc(14px / 0.875);
781
- line-height: calc(22px / 0.875);
782
- padding-left: 0;
783
- padding-right: 0;
784
- border-radius: calc(4px / 0.875);
893
+ isolation: isolate;
894
+ position: relative;
785
895
 
786
- /* Display box-shadow for iOS Safari */
787
896
  -webkit-appearance: none;
897
+
788
898
  -moz-appearance: none;
899
+
789
900
  appearance: none;
790
- background: transparent;
901
+ outline: none;
902
+ border-style: none;
791
903
 
792
- color: var(--charcoal-color-text-secondary-default);
793
- }
904
+ display: inline-flex;
905
+ gap: 8px;
906
+ align-items: center;
907
+ justify-content: center;
794
908
 
795
- .charcoal-text-field-input::-moz-placeholder {
796
- color: var(--charcoal-color-text-placeholder-default);
797
- }
909
+ text-decoration: none;
910
+ cursor: pointer;
911
+ overflow: hidden;
798
912
 
799
- .charcoal-text-field-input::placeholder {
800
- color: var(--charcoal-color-text-placeholder-default);
801
- }
913
+ color: var(--charcoal-tag-item-color);
914
+ height: var(--charcoal-tag-item-size);
915
+ padding-top: 4px;
916
+ padding-bottom: 4px;
917
+ padding-left: var(--charcoal-tag-item-padding-left);
918
+ padding-right: var(--charcoal-tag-item-padding-right);
919
+ box-sizing: border-box;
920
+ border-radius: 4px;
802
921
 
803
- .charcoal-text-field-line-counter {
804
- line-height: 22px;
805
- font-size: 14px;
806
- color: var(--charcoal-color-text-tertiary-default);
922
+ transition: 0.2s box-shadow;
807
923
  }
808
- .charcoal-field-label {
809
- font-size: 14px;
810
- line-height: 22px;
811
- font-weight: bold;
812
- display: flow-root;
813
- color: var(--charcoal-color-text-default-text1);
924
+
925
+ .charcoal-tag-item[data-size='M'] {
926
+ --charcoal-tag-item-size: 40px;
927
+ --charcoal-tag-item-padding-left: 24px;
928
+ --charcoal-tag-item-padding-right: 24px;
929
+ }
930
+
931
+ .charcoal-tag-item[data-size='S'] {
932
+ --charcoal-tag-item-size: 32px;
933
+ --charcoal-tag-item-padding-left: 16px;
934
+ --charcoal-tag-item-padding-right: 16px;
935
+ }
936
+
937
+ .charcoal-tag-item[data-state='inactive'] {
938
+ --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
939
+ }
940
+
941
+ .charcoal-tag-item[data-state='active'] {
942
+ --charcoal-tag-item-padding-left: 16px;
943
+ --charcoal-tag-item-padding-right: 8px;
944
+ }
945
+
946
+ .charcoal-tag-item:disabled,
947
+ .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
948
+ opacity: 0.32;
949
+ cursor: default;
950
+ }
951
+
952
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
953
+ .charcoal-tag-item[aria-disabled='false']:focus-visible {
954
+ outline: none;
955
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
956
+ }
957
+
958
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
959
+ .charcoal-tag-item[aria-disabled='false']:focus {
960
+ outline: none;
961
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
962
+ }
963
+
964
+ .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
965
+ .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
966
+ box-shadow: none;
967
+ }
968
+
969
+ .charcoal-tag-item__bg {
970
+ background-color: var(--charcoal-tag-item-bg);
814
971
  }
815
972
 
816
- .charcoal-field-label-required-text {
817
- font-size: 14px;
818
- line-height: 22px;
819
- display: flow-root;
820
- color: var(--charcoal-color-text-secondary-default);
973
+ .charcoal-tag-item__bg[data-bg-variant='image'] {
974
+ background-color: var(--charcoal-color-container-on-img-default);
975
+ }
976
+
977
+ .charcoal-tag-item__bg[data-bg-variant='image']::before {
978
+ content: '';
979
+ position: absolute;
980
+ z-index: 1;
981
+ top: 0;
982
+ left: 0;
983
+ width: 100%;
984
+ height: 100%;
985
+ background-position: center;
986
+ background-size: cover;
987
+ background-image: var(--charcoal-tag-item-bg);
988
+ mix-blend-mode: overlay;
989
+ }
990
+
991
+ .charcoal-tag-item__bg[data-state='inactive'] {
992
+ background-color: var(--charcoal-color-container-secondary-default);
993
+ }
994
+
995
+ .charcoal-tag-item__label {
996
+ height: 100%;
997
+ display: flex;
998
+ flex-direction: column;
999
+ align-items: center;
1000
+ justify-content: center;
821
1001
  }
822
1002
 
823
- .charcoal-field-label-sub-label {
824
- font-size: 14px;
825
- line-height: 22px;
826
- display: flow-root;
827
- color: var(--charcoal-color-text-tertiary-default);
828
- transition:
829
- 0.2s color,
830
- 0.2s box-shadow;
1003
+ .charcoal-tag-item__label[data-has-translate='true'] {
1004
+ justify-content: space-between;
1005
+ }
1006
+
1007
+ .charcoal-tag-item__label__translated {
1008
+ --charcoal-tag-item-text-font-size: 12px;
1009
+ --charcoal-tag-item-text-line-height: 20px;
1010
+ font-weight: bold;
831
1011
  }
832
1012
 
833
- .charcoal-field-label-root {
834
- display: inline-flex;
835
- align-items: center;
1013
+ .charcoal-tag-item__label__translated::before {
1014
+ display: none;
1015
+ }
1016
+
1017
+ .charcoal-tag-item__label__text {
1018
+ --charcoal-tag-item-text-font-size: 14px;
1019
+ --charcoal-tag-item-text-line-height: 22px;
1020
+
1021
+ max-width: 152px;
1022
+ overflow: hidden;
1023
+ font-weight: bold;
1024
+
1025
+ color: inherit;
1026
+ white-space: nowrap;
1027
+ text-overflow: ellipsis;
836
1028
  }
837
1029
 
838
- .charcoal-field-label-root > .charcoal-field-label-required-text {
839
- margin-left: 4px;
1030
+ .charcoal-tag-item__label__text[data-has-translate='true'] {
1031
+ --charcoal-tag-item-text-font-size: 10px;
1032
+ --charcoal-tag-item-text-line-height: 14px;
1033
+ font-weight: normal;
840
1034
  }
841
1035
 
842
- .charcoal-field-label-root > .charcoal-field-label-sub-label {
843
- margin-left: auto;
1036
+ /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1037
+ .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1038
+ display: none;
1039
+ }
1040
+ .charcoal-checkbox__label {
1041
+ position: relative;
1042
+ cursor: pointer;
1043
+ display: flex;
1044
+ gap: 4px;
1045
+ }
1046
+
1047
+ .charcoal-checkbox__label[aria-disabled='true'] {
1048
+ cursor: default;
1049
+ opacity: 0.32;
844
1050
  }
845
- .charcoal-text-field-assistive-text {
1051
+
1052
+ .charcoal-checkbox__label[aria-disabled='true'] > input {
1053
+ opacity: 1;
1054
+ }
1055
+
1056
+ .charcoal-checkbox__label_div {
1057
+ flex: 1;
1058
+ color: var(--charcoal-color-text-default);
1059
+ font-size: 14px;
1060
+ line-height: 20px;
1061
+ }
1062
+ .charcoal-dropdown-selector-menu-item {
846
1063
  font-size: 14px;
847
1064
  line-height: 22px;
848
- margin: 0;
849
1065
  color: var(--charcoal-color-text-secondary-default);
1066
+ padding: 9px 0;
1067
+
1068
+ display: flex;
1069
+ align-items: center;
1070
+ width: 100%;
1071
+ margin-left: 20px;
1072
+ }
1073
+
1074
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1075
+ margin-left: 0px;
1076
+ }
1077
+
1078
+ .charcoal-dropdown-selector-menu-item-icon {
1079
+ color: var(--charcoal-color-text-secondary-default);
1080
+ padding-right: 4px;
850
1081
  }
851
1082
 
852
- .charcoal-text-field-assistive-text[data-invalid='true'] {
853
- color: var(--charcoal-color-text-negative-default);
1083
+ .charcoal-dropdown-selector-menu-item-container {
1084
+ display: flex;
1085
+ align-items: center;
1086
+ }
1087
+
1088
+ .charcoal-dropdown-selector-menu-secondary {
1089
+ font-size: 12px;
1090
+ line-height: 20px;
1091
+ color: var(--charcoal-color-text-tertiary-default);
1092
+ padding-bottom: 9px;
1093
+
1094
+ display: flex;
1095
+ align-items: center;
1096
+ margin-left: 20px;
1097
+ }
1098
+
1099
+ .charcoal-dropdown-selector-menu-fullwidth {
1100
+ width: 100%;
854
1101
  }
855
1102
  .charcoal-text-area-root {
856
1103
  display: grid;
@@ -964,1249 +1211,1008 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
964
1211
  font-size: 14px;
965
1212
  color: var(--charcoal-color-text-tertiary-default);
966
1213
  }
967
- .charcoal-modal-dialog {
968
- margin: auto;
969
- position: relative;
970
- height: -moz-fit-content;
971
- height: fit-content;
972
- width: 440px;
973
-
974
- background-color: var(--charcoal-color-container-default);
975
- border-radius: 24px;
976
- }
977
-
978
- .charcoal-modal-dialog[data-size='S'] {
979
- width: 336px;
980
- }
981
-
982
- .charcoal-modal-dialog[data-size='M'] {
983
- width: 440px;
984
- }
985
-
986
- .charcoal-modal-dialog[data-size='L'] {
987
- width: 648px;
1214
+ .charcoal-hint-text {
1215
+ background-color: var(--charcoal-color-container-secondary-default);
1216
+ border-radius: 8px;
1217
+ padding: 12px 16px;
1218
+ display: flex;
1219
+ align-items: flex-start;
988
1220
  }
989
1221
 
990
- @media (max-width: 743px) {
991
- .charcoal-modal-dialog {
992
- max-width: 440px;
993
- width: calc(100% - 48px);
1222
+ .charcoal-hint-text[data-context='page'] {
1223
+ justify-content: center;
994
1224
  }
995
1225
 
996
- .charcoal-modal-dialog[data-bottom-sheet='true'],
997
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
998
- max-width: unset;
999
- width: 100%;
1000
- border-radius: 0;
1001
- margin: auto 0 0 0;
1002
- }
1226
+ @media (min-width: 744px) {
1003
1227
 
1004
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
1005
- min-height: 100%;
1228
+ .charcoal-hint-text[data-context='page'] {
1229
+ padding: 20px 40px
1006
1230
  }
1007
- }
1231
+ }
1008
1232
 
1009
- .charcoal-modal-dialog:focus {
1010
- outline: none;
1011
- }
1012
- .charcoal-modal-background {
1013
- overflow: auto;
1233
+ .charcoal-hint-text-icon {
1014
1234
  display: flex;
1015
- position: fixed;
1016
- top: 0;
1017
- left: 0;
1018
- width: 100%;
1019
- height: 100%;
1020
- justify-content: center;
1021
- padding: 40px 0;
1022
- box-sizing: border-box;
1023
-
1024
- background-color: var(--charcoal-color-background-overlay);
1235
+ align-items: center;
1236
+ color: var(--charcoal-color-icon-tertiary-default);
1237
+ height: 22px;
1238
+ margin: 0 4px 0 0;
1025
1239
  }
1026
1240
 
1027
- @media (max-width: 743px) {
1028
- .charcoal-modal-background[data-bottom-sheet='true'],
1029
- .charcoal-modal-background[data-bottom-sheet='full'] {
1030
- padding: 0;
1031
- }
1032
- }
1241
+ .charcoal-hint-text-message {
1242
+ color: var(--charcoal-color-text-secondary-default);
1243
+ font-size: 14px;
1244
+ line-height: 22px;
1245
+ display: flow-root;
1246
+ margin: 0;
1247
+ min-width: 0;
1248
+ overflow-wrap: break-word;
1249
+ }
1250
+ .charcoal-text-ellipsis {
1251
+ /* Runtime variables overridden by the React component. */
1252
+ --charcoal-text-ellipsis-line-limit: 1;
1253
+ --charcoal-text-ellipsis-line-height: inherit;
1033
1254
 
1034
- /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
1035
- transition は entering / exiting に限定し、開いたままテーマ切り替え等で
1036
- 色や transform が変わってもアニメーションしないようにする */
1037
- .charcoal-modal-background[data-animation] {
1038
1255
  overflow: hidden;
1256
+ overflow-wrap: break-word;
1257
+ display: -webkit-box;
1258
+ -webkit-box-orient: vertical;
1259
+ -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1039
1260
  }
1040
1261
 
1041
- .charcoal-modal-background[data-animation='entering'],
1042
- .charcoal-modal-background[data-animation='exiting'] {
1043
- transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
1044
- }
1262
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
1263
+ line-height: var(--charcoal-text-ellipsis-line-height);
1264
+ }
1045
1265
 
1046
- /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
1047
- 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
1048
- .charcoal-modal-background[data-animation='exited'],
1049
- .charcoal-modal-background[data-animation='exiting'] {
1050
- background-color: transparent;
1051
- pointer-events: none;
1052
- }
1266
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
1267
+ line-height: inherit;
1268
+ }
1053
1269
 
1054
- .charcoal-modal-background[data-animation='entered'] {
1055
- overflow: auto;
1270
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1271
+ text-overflow: ellipsis;
1272
+ white-space: nowrap;
1273
+ }
1274
+ .charcoal-pagination {
1275
+ display: flex;
1276
+ justify-content: center;
1277
+ align-items: center;
1056
1278
  }
1057
1279
 
1058
- .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
1059
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
1060
- transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
1061
- }
1280
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1281
+ min-width: 32px;
1282
+ min-height: 32px;
1283
+ }
1062
1284
 
1063
- .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
1064
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
1065
- transform: translateY(100%);
1066
- }
1285
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1286
+ min-width: 40px;
1287
+ min-height: 40px;
1288
+ }
1067
1289
 
1068
- .charcoal-modal-close-button {
1069
- position: absolute;
1070
- top: 8px;
1071
- right: 8px;
1290
+ /* stylelint-disable no-descending-specificity */
1291
+ .charcoal-pagination-button {
1292
+ cursor: pointer;
1293
+ -webkit-appearance: none;
1294
+ -moz-appearance: none;
1295
+ appearance: none;
1296
+ padding: 0;
1297
+ border-style: none;
1298
+ outline: none;
1299
+ text-decoration: none;
1300
+ font-family: inherit;
1301
+ font-style: inherit;
1302
+ font-variant: inherit;
1303
+ margin: 0;
1304
+ -webkit-user-select: none;
1305
+ -moz-user-select: none;
1306
+ user-select: none;
1307
+
1308
+ display: flex;
1309
+ align-items: center;
1310
+ justify-content: center;
1311
+ font-size: 14px;
1312
+ font-weight: 700;
1313
+ line-height: 22px;
1314
+
1315
+ /* HACK:
1316
+ * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1317
+ * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1318
+ */
1319
+ /* stylelint-disable-next-line property-no-vendor-prefix */
1320
+ -webkit-transform: translateZ(0);
1072
1321
 
1073
1322
  color: var(--charcoal-color-text-tertiary-default);
1074
- transition: 0.2s color;
1323
+ background-color: var(--charcoal-color-container-default-a);
1324
+ border-radius: 20px;
1325
+ transition:
1326
+ 0.2s background-color,
1327
+ 0.2s box-shadow;
1075
1328
  }
1329
+ .charcoal-pagination-button:focus {
1330
+ outline: none;
1331
+ }
1332
+ .charcoal-pagination-button::-moz-focus-inner {
1333
+ border-style: none;
1334
+ padding: 0;
1335
+ }
1336
+ .charcoal-pagination-button[hidden] {
1337
+ visibility: hidden;
1338
+ display: block;
1339
+ }
1340
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1341
+ .charcoal-pagination-button[aria-disabled='false']:hover {
1342
+ color: var(--charcoal-color-text-tertiary-default);
1343
+ background-color: var(--charcoal-color-container-secondary-default);
1344
+ }
1345
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1346
+ .charcoal-pagination-button[aria-disabled='false']:active {
1347
+ color: var(--charcoal-color-text-tertiary-press);
1348
+ background-color: var(--charcoal-color-container-tertiary-press);
1349
+ }
1350
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1351
+ .charcoal-pagination-button[aria-disabled='false']:focus {
1352
+ outline: none;
1353
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1354
+ }
1355
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1356
+ .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1357
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1358
+ }
1359
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1360
+ .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1361
+ box-shadow: none;
1362
+ }
1363
+ .charcoal-pagination-button[aria-current] {
1364
+ cursor: default;
1365
+ background-color: var(--charcoal-color-container-hud-default);
1366
+ color: var(--charcoal-color-text-on-hud-default);
1367
+ }
1368
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1369
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1370
+ background-color: var(--charcoal-color-container-hud-default);
1371
+ color: var(--charcoal-color-text-on-hud-default);
1372
+ }
1373
+ /* stylelint-enable no-descending-specificity */
1076
1374
 
1077
- .charcoal-modal-title {
1078
- margin: 0;
1079
- font-weight: inherit;
1080
- font-size: inherit;
1081
- }
1082
- .charcoal-modal-header-root {
1083
- height: 64px;
1084
- display: grid;
1085
- align-content: center;
1086
- justify-content: center;
1375
+ .charcoal-pagination-nav-button[data-hidden] {
1376
+ visibility: hidden;
1087
1377
  }
1088
1378
 
1089
- @media (max-width: 743px) {
1090
- .charcoal-modal-header-root[data-bottom-sheet='true'],
1091
- .charcoal-modal-header-root[data-bottom-sheet='full'] {
1092
- height: 48px;
1379
+ .charcoal-pagination-spacer,
1380
+ .charcoal-pagination-spacer:hover,
1381
+ .charcoal-pagination-spacer:active {
1382
+ cursor: default;
1383
+ color: var(--charcoal-color-text-tertiary-default);
1384
+ background: none;
1093
1385
  }
1386
+
1387
+ .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1388
+ opacity: 1;
1389
+ }
1390
+ .charcoal-menu-item-group {
1391
+ display: block;
1094
1392
  }
1095
1393
 
1096
- .charcoal-modal-header-title {
1097
- color: var(--charcoal-color-text-default);
1098
- font-size: 16px;
1099
- line-height: 24px;
1394
+ .charcoal-menu-item-group > span {
1395
+ display: block;
1396
+ color: var(--charcoal-color-text-tertiary-default);
1397
+ font-size: 12px;
1100
1398
  font-weight: bold;
1101
- display: flow-root;
1399
+ padding: 12px 0 8px 16px;
1102
1400
  }
1103
1401
 
1104
- .charcoal-modal-align {
1105
- padding-left: 16px;
1106
- padding-right: 16px;
1402
+ .charcoal-menu-item-group > ul {
1403
+ padding-left: 0;
1404
+ margin: 0;
1405
+ box-sizing: border-box;
1406
+ list-style: none;
1407
+ overflow: hidden;
1107
1408
  }
1409
+ .charcoal-segmented-control {
1410
+ display: inline-flex;
1411
+ align-items: center;
1108
1412
 
1109
- .charcoal-modal-body {
1110
- padding-bottom: 40px;
1413
+ background-color: var(--charcoal-color-container-secondary-default-a);
1414
+ border-radius: 16px;
1111
1415
  }
1112
1416
 
1113
- .charcoal-modal-buttons {
1114
- display: grid;
1115
- grid-auto-flow: row;
1116
- grid-row-gap: 8px;
1417
+ .charcoal-segmented-control[data-uniform-segment-width='true'],
1418
+ .charcoal-segmented-control[data-full-width='true'] {
1419
+ display: inline-grid;
1420
+ grid-auto-columns: minmax(80px, 1fr);
1421
+ grid-auto-rows: 32px;
1422
+ grid-auto-flow: column;
1423
+ }
1424
+
1425
+ .charcoal-segmented-control[data-full-width='true'] {
1426
+ width: 100%;
1427
+ }
1428
+
1429
+ .charcoal-segmented-control-radio__label {
1430
+ position: relative;
1431
+ display: flex;
1432
+ align-items: center;
1433
+ justify-content: center;
1434
+ cursor: pointer;
1435
+ height: 32px;
1117
1436
 
1118
- padding-top: 16px;
1119
- padding-left: 16px;
1120
1437
  padding-right: 16px;
1121
- }
1122
- .charcoal-loading-spinner {
1123
- box-sizing: content-box;
1124
- margin: auto;
1125
- padding: 16px;
1126
- border-radius: 8px;
1127
- font-size: 48px;
1128
- width: 48px;
1129
- height: 48px;
1130
- opacity: 0.84;
1131
- color: var(--charcoal-color-icon-tertiary-default);
1132
- background-color: var(--charcoal-color-background-default);
1438
+ padding-left: 16px;
1439
+ border-radius: 16px;
1440
+ color: var(--charcoal-color-text-secondary-default);
1441
+
1442
+ font-size: 14px;
1443
+ line-height: 22px;
1133
1444
  }
1134
1445
 
1135
- .charcoal-loading-spinner[data-transparent='true'] {
1136
- background-color: var(--charcoal-color-container-default-a);
1446
+ .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1447
+ cursor: default;
1448
+ opacity: 0.32;
1137
1449
  }
1138
1450
 
1139
- @keyframes charcoal-loading-spinner-icon-scale-out {
1140
- from {
1141
- transform: scale(0);
1142
- opacity: 1;
1143
- }
1144
- to {
1145
- transform: scale(1);
1146
- opacity: 0;
1451
+ .charcoal-segmented-control-radio__label[data-checked='true'] {
1452
+ background-color: var(--charcoal-color-container-primary-default);
1453
+ color: var(--charcoal-color-text-on-primary-default);
1147
1454
  }
1148
- }
1149
-
1150
- .charcoal-loading-spinner-icon {
1151
- width: 1em;
1152
- height: 1em;
1153
- border-radius: 1em;
1154
- background-color: currentColor;
1155
- animation: charcoal-loading-spinner-icon-scale-out 1s both ease-out;
1156
- animation-iteration-count: infinite;
1157
- }
1158
1455
 
1159
- .charcoal-loading-spinner-icon[data-reset-animation] {
1160
- animation: none;
1456
+ .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
1457
+ .charcoal-segmented-control-radio__label[data-full-width='true'] {
1458
+ justify-content: center;
1459
+ white-space: nowrap;
1161
1460
  }
1162
1461
 
1163
- .charcoal-loading-spinner-icon[data-once='true'] {
1164
- animation-iteration-count: 1;
1165
- }
1166
- .charcoal-dropdown-selector-root {
1167
- display: grid;
1168
- grid-template-columns: 1fr;
1169
- grid-gap: 4px;
1170
- width: 100%;
1171
- }
1462
+ .charcoal-segmented-control-radio__input {
1463
+ position: absolute;
1172
1464
 
1173
- .charcoal-dropdown-selector-root[aria-disabled='true'] {
1174
- cursor: default;
1175
- opacity: 0.32;
1176
- }
1465
+ height: 0px;
1466
+ width: 0px;
1467
+ padding: 0;
1468
+ margin: 0;
1177
1469
 
1178
- .charcoal-dropdown-selector-button {
1179
- display: grid;
1180
- grid-template-columns: 1fr auto;
1181
- justify-content: space-between;
1182
- align-items: center;
1470
+ -webkit-appearance: none;
1183
1471
 
1184
- height: 40px;
1185
- width: 100%;
1186
- box-sizing: border-box;
1187
- border: none;
1188
- cursor: pointer;
1189
- gap: 4px;
1472
+ -moz-appearance: none;
1190
1473
 
1191
- padding-right: 8px;
1192
- padding-left: 8px;
1193
- background-color: var(--charcoal-color-container-secondary-default-a);
1194
- border-radius: 4px;
1474
+ appearance: none;
1475
+ box-sizing: border-box;
1476
+ overflow: hidden;
1477
+ white-space: nowrap;
1478
+ opacity: 0;
1479
+ }
1480
+ .charcoal-carousel {
1481
+ --charcoal-carousel-gap: 0px;
1195
1482
 
1196
- transition:
1197
- 0.2s box-shadow,
1198
- 0.2s background-color;
1483
+ position: relative;
1484
+ display: block;
1199
1485
  }
1200
1486
 
1201
- .charcoal-dropdown-selector-button:disabled {
1202
- cursor: default;
1487
+ .charcoal-carousel[data-full-width='true'] {
1488
+ width: 100vw;
1489
+ margin-inline: calc(50% - 50vw);
1203
1490
  }
1204
1491
 
1205
- .charcoal-dropdown-selector-button:not(:disabled):focus {
1206
- outline: none;
1207
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1208
- }
1209
-
1210
- .charcoal-dropdown-selector-button:not(:disabled):focus-visible {
1211
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1212
- }
1213
-
1214
- .charcoal-dropdown-selector-button:not(:disabled)[data-active='true'],
1215
- .charcoal-dropdown-selector-button:not(:disabled):active {
1216
- background-color: var(--charcoal-color-container-secondary-press-a);
1217
- }
1218
-
1219
- .charcoal-dropdown-selector-button:not(:disabled):hover {
1220
- background-color: var(--charcoal-color-container-secondary-hover-a);
1221
- }
1492
+ .charcoal-carousel__viewport {
1493
+ position: relative;
1494
+ }
1222
1495
 
1223
- .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
1224
- box-shadow: none;
1225
- }
1496
+ /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1497
+ hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1226
1498
 
1227
- .charcoal-dropdown-selector-button[aria-invalid='true'],
1228
- .charcoal-dropdown-selector-button:not(:disabled)[aria-invalid='true']:focus:not(:focus-visible) {
1229
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1499
+ .charcoal-carousel__viewport[data-focus-visible] {
1500
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1230
1501
  }
1231
1502
 
1232
- .charcoal-ui-dropdown-selector-text {
1233
- text-align: left;
1234
- font-size: 14px;
1235
- line-height: 22px;
1236
- display: flow-root;
1237
- color: var(--charcoal-color-text-default);
1238
- overflow: hidden;
1239
- text-overflow: ellipsis;
1240
- white-space: nowrap;
1503
+ /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1504
+ スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1505
+ .charcoal-carousel__scroller {
1506
+ position: relative;
1507
+ display: flex;
1508
+ gap: var(--charcoal-carousel-gap);
1509
+ overflow-x: auto;
1510
+ overflow-y: hidden;
1511
+ overscroll-behavior-x: contain;
1512
+ scroll-behavior: smooth;
1513
+ scrollbar-width: none;
1514
+ outline: none;
1241
1515
  }
1242
-
1243
- .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
1244
- color: var(--charcoal-color-text-placeholder-default);
1516
+ .charcoal-carousel__scroller::-webkit-scrollbar {
1517
+ display: none;
1245
1518
  }
1246
1519
 
1247
- .charcoal-ui-dropdown-selector-icon {
1248
- color: var(--charcoal-color-icon-secondary-default);
1249
- }
1250
- .charcoal-popover {
1251
- margin: 4px 0;
1252
- list-style: none;
1253
- overflow: auto;
1254
- max-height: inherit;
1255
- background-color: var(--charcoal-color-background-default);
1256
- border: solid 1px var(--charcoal-color-border-secondary);
1257
- border-radius: 8px;
1258
- padding-top: 8px;
1259
- padding-bottom: 8px;
1260
- }
1261
- .charcoal-menu-list {
1262
- padding: 0;
1263
- margin: 0;
1520
+ /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1521
+ align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1522
+ 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1523
+ .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1524
+ scroll-snap-type: none;
1264
1525
  }
1265
- .charcoal-list-item {
1266
- list-style: none;
1267
- display: flex;
1268
- align-items: center;
1269
- min-height: 40px;
1270
- cursor: pointer;
1271
- outline: none;
1272
1526
 
1273
- padding-right: 16px;
1274
- padding-left: 16px;
1527
+ .charcoal-carousel[data-scroll-snap-type='proximity']
1528
+ .charcoal-carousel__scroller {
1529
+ scroll-snap-type: x proximity;
1530
+ }
1275
1531
 
1276
- transition: background-color 0.2s;
1532
+ .charcoal-carousel[data-scroll-snap-type='mandatory']
1533
+ .charcoal-carousel__scroller {
1534
+ scroll-snap-type: x mandatory;
1277
1535
  }
1278
1536
 
1279
- .charcoal-list-item:not([aria-disabled='true']):hover,
1280
- .charcoal-list-item:not([aria-disabled='true']):focus,
1281
- .charcoal-list-item:not([aria-disabled='true']):focus-within {
1282
- background-color: var(--charcoal-color-container-secondary-default);
1537
+ /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1538
+ 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1539
+ 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1540
+ スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1541
+ 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1542
+ mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1543
+ .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1544
+ -webkit-mask-image:
1545
+ linear-gradient(to right, transparent, #000 72px),
1546
+ linear-gradient(to left, transparent, #000 72px);
1547
+ mask-image:
1548
+ linear-gradient(to right, transparent, #000 72px),
1549
+ linear-gradient(to left, transparent, #000 72px);
1550
+ /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1551
+ -webkit-mask-size: calc(100% + 72px) 100%;
1552
+ mask-size: calc(100% + 72px) 100%;
1553
+ -webkit-mask-repeat: no-repeat;
1554
+ mask-repeat: no-repeat;
1555
+ -webkit-mask-composite: source-in, xor;
1556
+ mask-composite: intersect;
1557
+ -webkit-mask-position:
1558
+ -72px 0,
1559
+ 0 0;
1560
+ mask-position:
1561
+ -72px 0,
1562
+ 0 0;
1563
+ /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1564
+ transition: 0.2s ease-in mask-position;
1283
1565
  }
1284
1566
 
1285
- .charcoal-list-item[aria-disabled='true'] {
1286
- opacity: 0.32;
1287
- cursor: default;
1567
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1568
+ .charcoal-carousel__scroller {
1569
+ -webkit-mask-position:
1570
+ 0 0,
1571
+ 0 0;
1572
+ mask-position:
1573
+ 0 0,
1574
+ 0 0;
1288
1575
  }
1289
- .charcoal-dropdown-selector-menu-item {
1290
- font-size: 14px;
1291
- line-height: 22px;
1292
- color: var(--charcoal-color-text-secondary-default);
1293
- padding: 9px 0;
1294
1576
 
1295
- display: flex;
1296
- align-items: center;
1297
- width: 100%;
1298
- margin-left: 20px;
1577
+ .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1578
+ .charcoal-carousel__scroller {
1579
+ -webkit-mask-position:
1580
+ -72px 0,
1581
+ -72px 0;
1582
+ mask-position:
1583
+ -72px 0,
1584
+ -72px 0;
1299
1585
  }
1300
1586
 
1301
- .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1302
- margin-left: 0px;
1587
+ .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1588
+ .charcoal-carousel__scroller {
1589
+ -webkit-mask-position:
1590
+ 0 0,
1591
+ -72px 0;
1592
+ mask-position:
1593
+ 0 0,
1594
+ -72px 0;
1303
1595
  }
1304
1596
 
1305
- .charcoal-dropdown-selector-menu-item-icon {
1306
- color: var(--charcoal-color-text-secondary-default);
1307
- padding-right: 4px;
1597
+ .charcoal-carousel__item {
1598
+ flex: 0 0 auto;
1599
+ min-width: 0;
1308
1600
  }
1309
1601
 
1310
- .charcoal-dropdown-selector-menu-item-container {
1311
- display: flex;
1312
- align-items: center;
1602
+ .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1603
+ flex: 0 0 100%;
1313
1604
  }
1314
1605
 
1315
- .charcoal-dropdown-selector-menu-secondary {
1316
- font-size: 12px;
1317
- line-height: 20px;
1318
- color: var(--charcoal-color-text-tertiary-default);
1319
- padding-bottom: 9px;
1320
-
1321
- display: flex;
1322
- align-items: center;
1323
- margin-left: 20px;
1606
+ /* scroll-snap-align は prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
1607
+ より後に置くことで no-descending-specificity を回避する。 */
1608
+ .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
1609
+ scroll-snap-align: center;
1324
1610
  }
1325
1611
 
1326
- .charcoal-dropdown-selector-menu-fullwidth {
1327
- width: 100%;
1328
- }
1329
- .charcoal-menu-item-group {
1330
- display: block;
1612
+ .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1613
+ scroll-snap-align: start;
1331
1614
  }
1332
1615
 
1333
- .charcoal-menu-item-group > span {
1334
- display: block;
1335
- color: var(--charcoal-color-text-tertiary-default);
1336
- font-size: 12px;
1337
- font-weight: bold;
1338
- padding: 12px 0 8px 16px;
1616
+ /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1617
+
1618
+ /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
1619
+ .charcoal-carousel__navigation {
1620
+ position: absolute;
1621
+ inset: 0;
1622
+ pointer-events: none;
1623
+ display: grid;
1624
+ grid-template-columns: 72px 1fr 72px;
1625
+ align-items: center;
1626
+ /* アイテム内のコンテンツより上にボタンを表示する */
1627
+ z-index: 1;
1628
+ /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
1629
+ opacity: 0;
1630
+ transition: 0.4s opacity;
1339
1631
  }
1632
+ .charcoal-carousel__navigation[data-visible='false'] {
1633
+ display: none;
1634
+ }
1340
1635
 
1341
- .charcoal-menu-item-group > ul {
1342
- padding-left: 0;
1343
- margin: 0;
1344
- box-sizing: border-box;
1345
- list-style: none;
1346
- overflow: hidden;
1636
+ /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
1637
+ カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
1638
+ 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
1639
+ .charcoal-carousel:hover .charcoal-carousel__navigation,
1640
+ .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
1641
+ opacity: 1;
1347
1642
  }
1348
- .charcoal-segmented-control {
1349
- display: inline-flex;
1350
- align-items: center;
1351
1643
 
1352
- background-color: var(--charcoal-color-container-secondary-default-a);
1353
- border-radius: 16px;
1644
+ .charcoal-carousel__navigation__item {
1645
+ pointer-events: auto;
1354
1646
  }
1355
1647
 
1356
- .charcoal-segmented-control[data-uniform-segment-width='true'],
1357
- .charcoal-segmented-control[data-full-width='true'] {
1358
- display: inline-grid;
1359
- grid-auto-columns: minmax(80px, 1fr);
1360
- grid-auto-rows: 32px;
1361
- grid-auto-flow: column;
1648
+ /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1649
+ 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1650
+ position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1651
+
1652
+ .charcoal-carousel__navigation__item::after {
1653
+ content: '';
1654
+ position: absolute;
1655
+ top: 0;
1656
+ bottom: 0;
1657
+ width: 72px;
1362
1658
  }
1363
1659
 
1364
- .charcoal-segmented-control[data-full-width='true'] {
1365
- width: 100%;
1660
+ .charcoal-carousel__navigation__item[data-direction='prev'] {
1661
+ grid-column: 1;
1662
+ justify-self: center;
1366
1663
  }
1367
1664
 
1368
- .charcoal-segmented-control-radio__label {
1369
- position: relative;
1665
+ .charcoal-carousel__navigation__item[data-direction='prev']::after {
1666
+ left: 0;
1667
+ }
1668
+
1669
+ .charcoal-carousel__navigation__item[data-direction='next'] {
1670
+ grid-column: 3;
1671
+ justify-self: center;
1672
+ }
1673
+
1674
+ .charcoal-carousel__navigation__item[data-direction='next']::after {
1675
+ right: 0;
1676
+ }
1677
+
1678
+ /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1679
+ 高い詳細度で打ち消すため、ルートを前置する。 */
1680
+ .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1681
+ opacity: 0;
1682
+ pointer-events: none;
1683
+ }
1684
+
1685
+ /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1686
+ @media (hover: none) and (pointer: coarse) {
1687
+ .charcoal-carousel__navigation {
1688
+ display: none;
1689
+ }
1690
+ }
1691
+
1692
+ /* ── Indicator: JS Fallback ── */
1693
+
1694
+ .charcoal-carousel__indicator {
1370
1695
  display: flex;
1371
- align-items: center;
1372
1696
  justify-content: center;
1373
- cursor: pointer;
1374
- height: 32px;
1697
+ align-items: center;
1698
+ height: 40px;
1699
+ gap: 8px;
1700
+ }
1375
1701
 
1376
- padding-right: 16px;
1377
- padding-left: 16px;
1378
- border-radius: 16px;
1379
- color: var(--charcoal-color-text-secondary-default);
1702
+ .charcoal-carousel__indicator[data-visible='false'] {
1703
+ display: none;
1704
+ }
1380
1705
 
1381
- font-size: 14px;
1382
- line-height: 22px;
1706
+ .charcoal-carousel__indicator__item {
1707
+ -webkit-appearance: none;
1708
+ -moz-appearance: none;
1709
+ appearance: none;
1710
+ box-sizing: border-box;
1711
+ width: 8px;
1712
+ height: 8px;
1713
+ padding: 0;
1714
+ border: 0;
1715
+ border-radius: 50%;
1716
+ background-color: var(--charcoal-color-text-tertiary-default);
1717
+ cursor: pointer;
1718
+ transition: 0.2s background-color;
1383
1719
  }
1384
1720
 
1385
- .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1386
- cursor: default;
1387
- opacity: 0.32;
1721
+ .charcoal-carousel__indicator__item:hover {
1722
+ background-color: var(--charcoal-color-text-secondary-default);
1388
1723
  }
1389
1724
 
1390
- .charcoal-segmented-control-radio__label[data-checked='true'] {
1391
- background-color: var(--charcoal-color-container-primary-default);
1392
- color: var(--charcoal-color-text-on-primary-default);
1725
+ .charcoal-carousel__indicator__item:focus-visible {
1726
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1727
+ outline-offset: 2px;
1393
1728
  }
1394
1729
 
1395
- .charcoal-segmented-control-radio__label[data-uniform-segment-width='true'],
1396
- .charcoal-segmented-control-radio__label[data-full-width='true'] {
1397
- justify-content: center;
1398
- white-space: nowrap;
1730
+ .charcoal-carousel__indicator__item[data-active='true'] {
1731
+ background-color: var(--charcoal-color-text-default);
1399
1732
  }
1400
1733
 
1401
- .charcoal-segmented-control-radio__input {
1402
- position: absolute;
1734
+ /* ── CSS Scroll Markers (progressive enhancement) ── */
1403
1735
 
1404
- height: 0px;
1405
- width: 0px;
1406
- padding: 0;
1407
- margin: 0;
1736
+ /* CSS Scroll Markers / Anchor Positioning は新しい仕様で、stylelint がプロパティ・
1737
+ 擬似要素・擬似クラスを未知と判定するため、この @supports ブロックでは該当ルールを無効化する。 */
1738
+ /* stylelint-disable property-no-unknown, selector-pseudo-element-no-unknown, selector-pseudo-class-no-unknown */
1739
+ @supports (scroll-marker-group: after) {
1740
+ .charcoal-carousel[data-indicator='true'] {
1741
+ padding-bottom: 40px;
1742
+ }
1408
1743
 
1409
- -webkit-appearance: none;
1744
+ .charcoal-carousel__scroller {
1745
+ anchor-name: --charcoal-carousel;
1746
+ scroll-marker-group: after;
1747
+ }
1410
1748
 
1411
- -moz-appearance: none;
1749
+ .charcoal-carousel__scroller::scroll-button(*) {
1750
+ content: none;
1751
+ }
1412
1752
 
1413
- appearance: none;
1414
- box-sizing: border-box;
1415
- overflow: hidden;
1416
- white-space: nowrap;
1417
- opacity: 0;
1418
- }
1419
- .charcoal-checkbox__label {
1420
- position: relative;
1421
- cursor: pointer;
1422
- display: flex;
1423
- gap: 4px;
1424
- }
1753
+ .charcoal-carousel__scroller::scroll-marker-group {
1754
+ display: flex;
1755
+ justify-content: center;
1756
+ align-items: center;
1757
+ height: 40px;
1758
+ gap: 8px;
1425
1759
 
1426
- .charcoal-checkbox__label[aria-disabled='true'] {
1427
- cursor: default;
1428
- opacity: 0.32;
1760
+ position: absolute;
1761
+ position-anchor: --charcoal-carousel;
1762
+ top: anchor(bottom);
1763
+ justify-self: anchor-center;
1764
+ }
1765
+
1766
+ .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
1767
+ scroll-marker-group: none;
1429
1768
  }
1430
1769
 
1431
- .charcoal-checkbox__label[aria-disabled='true'] > input {
1432
- opacity: 1;
1770
+ .charcoal-carousel__item::scroll-marker {
1771
+ content: '';
1772
+ width: 8px;
1773
+ height: 8px;
1774
+ border: 0;
1775
+ border-radius: 50%;
1776
+ background-color: var(--charcoal-color-text-tertiary-default);
1777
+ cursor: pointer;
1778
+ transition: 0.2s background-color;
1779
+ }
1780
+
1781
+ .charcoal-carousel__item::scroll-marker:hover {
1782
+ background-color: var(--charcoal-color-text-secondary-default);
1433
1783
  }
1434
1784
 
1435
- .charcoal-checkbox__label_div {
1436
- flex: 1;
1437
- color: var(--charcoal-color-text-default);
1785
+ .charcoal-carousel__item::scroll-marker:focus {
1786
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1787
+ outline-offset: 2px;
1788
+ }
1789
+
1790
+ .charcoal-carousel__item::scroll-marker:target-current {
1791
+ background-color: var(--charcoal-color-text-default);
1792
+ }
1793
+
1794
+ .charcoal-carousel__indicator {
1795
+ display: none;
1796
+ }
1797
+ }
1798
+ /* stylelint-enable property-no-unknown, selector-pseudo-element-no-unknown, selector-pseudo-class-no-unknown */
1799
+ .charcoal-text-field-assistive-text {
1438
1800
  font-size: 14px;
1439
- line-height: 20px;
1801
+ line-height: 22px;
1802
+ margin: 0;
1803
+ color: var(--charcoal-color-text-secondary-default);
1440
1804
  }
1441
- .charcoal-checkbox-input {
1805
+
1806
+ .charcoal-text-field-assistive-text[data-invalid='true'] {
1807
+ color: var(--charcoal-color-text-negative-default);
1808
+ }
1809
+ .charcoal-radio-input {
1442
1810
  -webkit-appearance: none;
1443
1811
  -moz-appearance: none;
1444
1812
  appearance: none;
1445
- display: flex;
1446
- cursor: pointer;
1813
+ display: block;
1814
+ box-sizing: border-box;
1815
+
1447
1816
  margin: 0;
1817
+ padding: 6px;
1818
+
1448
1819
  width: 20px;
1449
1820
  height: 20px;
1450
- border-radius: 4px;
1821
+ cursor: pointer;
1822
+ border-radius: 999999px;
1823
+ background-color: var(--charcoal-color-container-default);
1451
1824
  transition:
1452
- 0.2s box-shadow,
1453
- 0.2s background-color;
1454
- position: relative;
1455
- box-sizing: border-box;
1456
- }
1457
-
1458
- .charcoal-checkbox-input:disabled,
1459
- .charcoal-checkbox-input[readonly] {
1460
- opacity: 0.32;
1461
- cursor: default;
1825
+ 0.2s background-color,
1826
+ 0.2s box-shadow;
1462
1827
  }
1463
1828
 
1464
- .charcoal-checkbox-input:checked {
1829
+ .charcoal-radio-input:checked {
1465
1830
  background-color: var(--charcoal-color-container-primary-default);
1466
1831
  }
1467
1832
 
1468
- .charcoal-checkbox-input:checked::after {
1833
+ .charcoal-radio-input:checked::after {
1469
1834
  content: '';
1470
- background-color: white;
1471
- display: flex;
1472
- margin: auto;
1473
- width: 16px;
1474
- height: 16px;
1475
- clip-path: path(
1476
- 'M10.6 5a1.3 1.3 0 0 1 1.8 1.9l-5.7 5.6-3-2.9a1.3 1.3 0 1 1 2-1.9l1 1z'
1477
- );
1835
+ display: block;
1836
+ width: 8px;
1837
+ height: 8px;
1838
+ pointer-events: none;
1839
+ background-color: var(--charcoal-color-icon-on-primary-default);
1840
+ border-radius: 999999px;
1841
+ transition:
1842
+ 0.2s background-color,
1843
+ 0.2s box-shadow;
1478
1844
  }
1479
1845
 
1480
- .charcoal-checkbox-input:not(:checked) {
1846
+ .charcoal-radio-input:not(:checked) {
1481
1847
  border-width: 2px;
1482
1848
  border-style: solid;
1483
1849
  border-color: var(--charcoal-color-border-default);
1484
1850
  }
1485
1851
 
1486
- .charcoal-checkbox-input:not(:disabled):focus {
1852
+ .charcoal-radio-input:disabled {
1853
+ cursor: default;
1854
+ }
1855
+
1856
+ .charcoal-radio-input:not(:disabled):hover {
1857
+ background-color: var(--charcoal-color-container-hover);
1858
+ }
1859
+
1860
+ .charcoal-radio-input:not(:disabled):active {
1861
+ background-color: var(--charcoal-color-container-press);
1862
+ }
1863
+
1864
+ .charcoal-radio-input:not(:disabled):focus {
1487
1865
  outline: none;
1488
1866
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1489
1867
  }
1490
- .charcoal-checkbox-input:not(:disabled):focus-visible {
1868
+
1869
+ .charcoal-radio-input:not(:disabled):focus-visible {
1491
1870
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1492
1871
  }
1493
- .charcoal-checkbox-input:not(:disabled):focus:not(:focus-visible) {
1494
- box-shadow: none;
1495
- }
1496
1872
 
1497
- .charcoal-checkbox-input:checked:not(:disabled):hover {
1498
- background-color: var(--charcoal-color-container-primary-hover);
1499
- }
1500
- .charcoal-checkbox-input:checked:not(:disabled):active {
1501
- background-color: var(--charcoal-color-container-primary-press);
1873
+ .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
1874
+ box-shadow: none;
1502
1875
  }
1503
1876
 
1504
- .charcoal-checkbox-input[aria-invalid='true'],
1505
- .charcoal-checkbox-input[aria-invalid='true']:not(:disabled):focus {
1877
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
1878
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
1506
1879
  box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1507
1880
  }
1508
1881
 
1509
- .charcoal-checkbox-input[data-rounded='true'] {
1510
- border-radius: 10px;
1511
- background-color: var(--charcoal-color-container-secondary-default);
1512
- border: 2px solid transparent;
1882
+ .charcoal-radio-input:checked:not(:disabled):hover {
1883
+ background-color: var(--charcoal-color-container-primary-hover);
1513
1884
  }
1514
1885
 
1515
- .charcoal-checkbox-input[data-rounded='true']:checked {
1516
- background-color: var(--charcoal-color-container-primary-default);
1886
+ .charcoal-radio-input:checked:not(:disabled):hover::after {
1887
+ background-color: var(--charcoal-color-icon-on-primary-hover);
1517
1888
  }
1518
1889
 
1519
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):hover {
1520
- background-color: var(--charcoal-color-container-secondary-hover);
1521
- }
1522
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):active {
1523
- background-color: var(--charcoal-color-container-secondary-press);
1890
+ .charcoal-radio-input:checked:not(:disabled):active {
1891
+ background-color: var(--charcoal-color-container-primary-press);
1524
1892
  }
1525
1893
 
1526
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):focus-visible {
1527
- box-shadow: 0 0 0 6px rgba(0, 150, 250, 0.32);
1894
+ .charcoal-radio-input:checked:not(:disabled):active::after {
1895
+ background-color: var(--charcoal-color-icon-on-primary-press);
1528
1896
  }
1529
-
1530
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
1531
- background-color: var(--charcoal-color-container-primary-hover);
1897
+ .charcoal-field-label {
1898
+ font-size: 14px;
1899
+ line-height: 22px;
1900
+ font-weight: bold;
1901
+ display: flow-root;
1902
+ color: var(--charcoal-color-text-default-text1);
1532
1903
  }
1533
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
1534
- background-color: var(--charcoal-color-container-primary-press);
1904
+
1905
+ .charcoal-field-label-required-text {
1906
+ font-size: 14px;
1907
+ line-height: 22px;
1908
+ display: flow-root;
1909
+ color: var(--charcoal-color-text-secondary-default);
1535
1910
  }
1536
1911
 
1537
- .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true'],
1538
- .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true']:not(
1539
- :disabled
1540
- ):focus {
1541
- box-shadow: 0 0 0 6px rgba(255, 43, 0, 0.32);
1912
+ .charcoal-field-label-sub-label {
1913
+ font-size: 14px;
1914
+ line-height: 22px;
1915
+ display: flow-root;
1916
+ color: var(--charcoal-color-text-tertiary-default);
1917
+ transition:
1918
+ 0.2s color,
1919
+ 0.2s box-shadow;
1542
1920
  }
1543
1921
 
1544
- .charcoal-checkbox-input[data-rounded='true']::before {
1545
- content: '';
1546
- width: 24px;
1547
- height: 24px;
1548
- position: absolute;
1549
- top: -4px;
1550
- left: -4px;
1551
- border-radius: 12px;
1552
- border: 2px solid #fff;
1553
- box-sizing: border-box;
1922
+ .charcoal-field-label-root {
1923
+ display: inline-flex;
1924
+ align-items: center;
1554
1925
  }
1555
- .charcoal-tag-item {
1556
- --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1557
- --charcoal-tag-item-size: 40px;
1558
- --charcoal-tag-item-padding-left: 24px;
1559
- --charcoal-tag-item-padding-right: 24px;
1560
- --charcoal-tag-item-bg: ;
1561
1926
 
1562
- isolation: isolate;
1563
- position: relative;
1927
+ .charcoal-field-label-root > .charcoal-field-label-required-text {
1928
+ margin-left: 4px;
1929
+ }
1564
1930
 
1931
+ .charcoal-field-label-root > .charcoal-field-label-sub-label {
1932
+ margin-left: auto;
1933
+ }
1934
+ .charcoal-switch-input {
1935
+ cursor: pointer;
1565
1936
  -webkit-appearance: none;
1566
-
1567
1937
  -moz-appearance: none;
1568
-
1569
1938
  appearance: none;
1570
- outline: none;
1571
- border-style: none;
1572
-
1573
1939
  display: inline-flex;
1574
- gap: 8px;
1575
- align-items: center;
1576
- justify-content: center;
1940
+ position: relative;
1941
+ box-sizing: border-box;
1942
+ width: 28px;
1943
+ border: 2px solid transparent;
1577
1944
 
1578
- text-decoration: none;
1579
- cursor: pointer;
1580
- overflow: hidden;
1945
+ transition-property: background-color, box-shadow;
1946
+ transition-duration: 0.2s;
1581
1947
 
1582
- color: var(--charcoal-tag-item-color);
1583
- height: var(--charcoal-tag-item-size);
1584
- padding-top: 4px;
1585
- padding-bottom: 4px;
1586
- padding-left: var(--charcoal-tag-item-padding-left);
1587
- padding-right: var(--charcoal-tag-item-padding-right);
1588
- box-sizing: border-box;
1589
- border-radius: 4px;
1948
+ outline: none;
1949
+ border-radius: 16px;
1950
+ height: 16px;
1951
+ margin: 0;
1952
+ background-color: var(--charcoal-color-container-neutral-default);
1953
+ }
1590
1954
 
1591
- transition: 0.2s box-shadow;
1955
+ .charcoal-switch-input:disabled,
1956
+ .charcoal-switch-input[readonly] {
1957
+ opacity: 0.32;
1958
+ cursor: default;
1592
1959
  }
1593
1960
 
1594
- .charcoal-tag-item[data-size='M'] {
1595
- --charcoal-tag-item-size: 40px;
1596
- --charcoal-tag-item-padding-left: 24px;
1597
- --charcoal-tag-item-padding-right: 24px;
1598
- }
1961
+ .charcoal-switch-input::after {
1962
+ content: '';
1963
+ position: absolute;
1964
+ display: block;
1965
+ top: 0;
1966
+ left: 0;
1967
+ width: 12px;
1968
+ height: 12px;
1969
+ transform: translateX(0);
1970
+ transition: transform 0.2s;
1971
+ border-radius: 1024px;
1972
+ background-color: var(--charcoal-color-icon-on-primary-default);
1973
+ }
1599
1974
 
1600
- .charcoal-tag-item[data-size='S'] {
1601
- --charcoal-tag-item-size: 32px;
1602
- --charcoal-tag-item-padding-left: 16px;
1603
- --charcoal-tag-item-padding-right: 16px;
1604
- }
1975
+ .charcoal-switch-input:checked::after {
1976
+ transform: translateX(12px);
1977
+ transition: transform 0.2s;
1978
+ }
1605
1979
 
1606
- .charcoal-tag-item[data-state='inactive'] {
1607
- --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
1608
- }
1980
+ .charcoal-switch-input:checked {
1981
+ background-color: var(--charcoal-color-container-primary-default);
1982
+ }
1609
1983
 
1610
- .charcoal-tag-item[data-state='active'] {
1611
- --charcoal-tag-item-padding-left: 16px;
1612
- --charcoal-tag-item-padding-right: 8px;
1613
- }
1984
+ .charcoal-switch-input:not(:disabled):hover {
1985
+ background-color: var(--charcoal-color-container-neutral-hover);
1986
+ }
1614
1987
 
1615
- .charcoal-tag-item:disabled,
1616
- .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
1617
- opacity: 0.32;
1618
- cursor: default;
1619
- }
1988
+ .charcoal-switch-input:not(:disabled):active {
1989
+ background-color: var(--charcoal-color-container-neutral-press);
1990
+ }
1620
1991
 
1621
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus-visible,
1622
- .charcoal-tag-item[aria-disabled='false']:focus-visible {
1623
- outline: none;
1624
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1625
- }
1992
+ .charcoal-switch-input:not(:disabled):focus {
1993
+ outline: none;
1994
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1995
+ }
1996
+ .charcoal-switch-input:not(:disabled):focus-visible {
1997
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1998
+ }
1999
+ .charcoal-switch-input:not(:disabled):focus:not(:focus-visible) {
2000
+ box-shadow: none;
2001
+ }
1626
2002
 
1627
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
1628
- .charcoal-tag-item[aria-disabled='false']:focus {
1629
- outline: none;
1630
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1631
- }
1632
-
1633
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1634
- .charcoal-tag-item[aria-disabled='false']:focus:not(:focus-visible) {
1635
- box-shadow: none;
1636
- }
2003
+ .charcoal-switch-input:not(:disabled)::after:hover {
2004
+ background-color: var(--charcoal-color-icon-on-primary-hover);
2005
+ }
1637
2006
 
1638
- .charcoal-tag-item__bg {
1639
- background-color: var(--charcoal-tag-item-bg);
2007
+ .charcoal-switch-input:not(:disabled)::after:active {
2008
+ background-color: var(--charcoal-color-icon-on-primary-press);
1640
2009
  }
1641
2010
 
1642
- .charcoal-tag-item__bg[data-bg-variant='image'] {
1643
- background-color: var(--charcoal-color-container-on-img-default);
1644
- }
2011
+ .charcoal-switch-input:not(:disabled):checked:hover {
2012
+ background-color: var(--charcoal-color-container-primary-hover);
2013
+ }
1645
2014
 
1646
- .charcoal-tag-item__bg[data-bg-variant='image']::before {
1647
- content: '';
1648
- position: absolute;
1649
- z-index: 1;
1650
- top: 0;
1651
- left: 0;
1652
- width: 100%;
1653
- height: 100%;
1654
- background-position: center;
1655
- background-size: cover;
1656
- background-image: var(--charcoal-tag-item-bg);
1657
- mix-blend-mode: overlay;
1658
- }
2015
+ .charcoal-switch-input:not(:disabled):checked:active {
2016
+ background-color: var(--charcoal-color-container-primary-press);
2017
+ }
2018
+ .charcoal-menu-list {
2019
+ padding: 0;
2020
+ margin: 0;
2021
+ }
2022
+ .charcoal-modal-dialog {
2023
+ margin: auto;
2024
+ position: relative;
2025
+ height: -moz-fit-content;
2026
+ height: fit-content;
2027
+ width: 440px;
1659
2028
 
1660
- .charcoal-tag-item__bg[data-state='inactive'] {
1661
- background-color: var(--charcoal-color-container-secondary-default);
1662
- }
2029
+ background-color: var(--charcoal-color-container-default);
2030
+ border-radius: 24px;
2031
+ }
1663
2032
 
1664
- .charcoal-tag-item__label {
1665
- height: 100%;
1666
- display: flex;
1667
- flex-direction: column;
1668
- align-items: center;
1669
- justify-content: center;
2033
+ .charcoal-modal-dialog[data-size='S'] {
2034
+ width: 336px;
1670
2035
  }
1671
2036
 
1672
- .charcoal-tag-item__label[data-has-translate='true'] {
1673
- justify-content: space-between;
1674
- }
2037
+ .charcoal-modal-dialog[data-size='M'] {
2038
+ width: 440px;
2039
+ }
1675
2040
 
1676
- .charcoal-tag-item__label__translated {
1677
- --charcoal-tag-item-text-font-size: 12px;
1678
- --charcoal-tag-item-text-line-height: 20px;
1679
- font-weight: bold;
2041
+ .charcoal-modal-dialog[data-size='L'] {
2042
+ width: 648px;
1680
2043
  }
1681
2044
 
1682
- .charcoal-tag-item__label__translated::before {
1683
- display: none;
2045
+ @media (max-width: 743px) {
2046
+ .charcoal-modal-dialog {
2047
+ max-width: 440px;
2048
+ width: calc(100% - 48px);
1684
2049
  }
1685
2050
 
1686
- .charcoal-tag-item__label__text {
1687
- --charcoal-tag-item-text-font-size: 14px;
1688
- --charcoal-tag-item-text-line-height: 22px;
1689
-
1690
- max-width: 152px;
1691
- overflow: hidden;
1692
- font-weight: bold;
1693
-
1694
- color: inherit;
1695
- white-space: nowrap;
1696
- text-overflow: ellipsis;
1697
- }
2051
+ .charcoal-modal-dialog[data-bottom-sheet='true'],
2052
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2053
+ max-width: unset;
2054
+ width: 100%;
2055
+ border-radius: 0;
2056
+ margin: auto 0 0 0;
2057
+ }
1698
2058
 
1699
- .charcoal-tag-item__label__text[data-has-translate='true'] {
1700
- --charcoal-tag-item-text-font-size: 10px;
1701
- --charcoal-tag-item-text-line-height: 14px;
1702
- font-weight: normal;
2059
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2060
+ min-height: 100%;
1703
2061
  }
2062
+ }
1704
2063
 
1705
- /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1706
- .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1707
- display: none;
2064
+ .charcoal-modal-dialog:focus {
2065
+ outline: none;
1708
2066
  }
1709
- .charcoal-hint-text {
1710
- background-color: var(--charcoal-color-container-secondary-default);
1711
- border-radius: 8px;
1712
- padding: 12px 16px;
2067
+ .charcoal-checkbox-input {
2068
+ -webkit-appearance: none;
2069
+ -moz-appearance: none;
2070
+ appearance: none;
1713
2071
  display: flex;
1714
- align-items: flex-start;
2072
+ cursor: pointer;
2073
+ margin: 0;
2074
+ width: 20px;
2075
+ height: 20px;
2076
+ border-radius: 4px;
2077
+ transition:
2078
+ 0.2s box-shadow,
2079
+ 0.2s background-color;
2080
+ position: relative;
2081
+ box-sizing: border-box;
1715
2082
  }
1716
2083
 
1717
- .charcoal-hint-text[data-context='page'] {
1718
- justify-content: center;
1719
- }
1720
-
1721
- @media (min-width: 744px) {
2084
+ .charcoal-checkbox-input:disabled,
2085
+ .charcoal-checkbox-input[readonly] {
2086
+ opacity: 0.32;
2087
+ cursor: default;
2088
+ }
1722
2089
 
1723
- .charcoal-hint-text[data-context='page'] {
1724
- padding: 20px 40px
1725
- }
1726
- }
2090
+ .charcoal-checkbox-input:checked {
2091
+ background-color: var(--charcoal-color-container-primary-default);
2092
+ }
1727
2093
 
1728
- .charcoal-hint-text-icon {
2094
+ .charcoal-checkbox-input:checked::after {
2095
+ content: '';
2096
+ background-color: white;
1729
2097
  display: flex;
1730
- align-items: center;
1731
- color: var(--charcoal-color-icon-tertiary-default);
1732
- height: 22px;
1733
- margin: 0 4px 0 0;
2098
+ margin: auto;
2099
+ width: 16px;
2100
+ height: 16px;
2101
+ clip-path: path(
2102
+ 'M10.6 5a1.3 1.3 0 0 1 1.8 1.9l-5.7 5.6-3-2.9a1.3 1.3 0 1 1 2-1.9l1 1z'
2103
+ );
1734
2104
  }
1735
2105
 
1736
- .charcoal-hint-text-message {
1737
- color: var(--charcoal-color-text-secondary-default);
1738
- font-size: 14px;
1739
- line-height: 22px;
1740
- display: flow-root;
1741
- margin: 0;
1742
- min-width: 0;
1743
- overflow-wrap: break-word;
2106
+ .charcoal-checkbox-input:not(:checked) {
2107
+ border-width: 2px;
2108
+ border-style: solid;
2109
+ border-color: var(--charcoal-color-border-default);
1744
2110
  }
1745
- .charcoal-text-ellipsis {
1746
- /* Runtime variables overridden by the React component. */
1747
- --charcoal-text-ellipsis-line-limit: 1;
1748
- --charcoal-text-ellipsis-line-height: inherit;
1749
2111
 
1750
- overflow: hidden;
1751
- overflow-wrap: break-word;
1752
- display: -webkit-box;
1753
- -webkit-box-orient: vertical;
1754
- -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
2112
+ .charcoal-checkbox-input:not(:disabled):focus {
2113
+ outline: none;
2114
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2115
+ }
2116
+ .charcoal-checkbox-input:not(:disabled):focus-visible {
2117
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2118
+ }
2119
+ .charcoal-checkbox-input:not(:disabled):focus:not(:focus-visible) {
2120
+ box-shadow: none;
1755
2121
  }
1756
2122
 
1757
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1758
- line-height: var(--charcoal-text-ellipsis-line-height);
1759
- }
2123
+ .charcoal-checkbox-input:checked:not(:disabled):hover {
2124
+ background-color: var(--charcoal-color-container-primary-hover);
2125
+ }
2126
+ .charcoal-checkbox-input:checked:not(:disabled):active {
2127
+ background-color: var(--charcoal-color-container-primary-press);
2128
+ }
1760
2129
 
1761
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1762
- line-height: inherit;
1763
- }
2130
+ .charcoal-checkbox-input[aria-invalid='true'],
2131
+ .charcoal-checkbox-input[aria-invalid='true']:not(:disabled):focus {
2132
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
2133
+ }
1764
2134
 
1765
- .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1766
- text-overflow: ellipsis;
1767
- white-space: nowrap;
1768
- }
1769
- .charcoal-pagination {
1770
- display: flex;
1771
- justify-content: center;
1772
- align-items: center;
2135
+ .charcoal-checkbox-input[data-rounded='true'] {
2136
+ border-radius: 10px;
2137
+ background-color: var(--charcoal-color-container-secondary-default);
2138
+ border: 2px solid transparent;
1773
2139
  }
1774
2140
 
1775
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1776
- min-width: 32px;
1777
- min-height: 32px;
1778
- }
2141
+ .charcoal-checkbox-input[data-rounded='true']:checked {
2142
+ background-color: var(--charcoal-color-container-primary-default);
2143
+ }
1779
2144
 
1780
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1781
- min-width: 40px;
1782
- min-height: 40px;
1783
- }
2145
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):hover {
2146
+ background-color: var(--charcoal-color-container-secondary-hover);
2147
+ }
2148
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):active {
2149
+ background-color: var(--charcoal-color-container-secondary-press);
2150
+ }
1784
2151
 
1785
- /* stylelint-disable no-descending-specificity */
1786
- .charcoal-pagination-button {
1787
- cursor: pointer;
1788
- -webkit-appearance: none;
1789
- -moz-appearance: none;
1790
- appearance: none;
1791
- padding: 0;
1792
- border-style: none;
1793
- outline: none;
1794
- text-decoration: none;
1795
- font: inherit;
1796
- margin: 0;
1797
- -webkit-user-select: none;
1798
- -moz-user-select: none;
1799
- user-select: none;
2152
+ .charcoal-checkbox-input[data-rounded='true']:not(:disabled):focus-visible {
2153
+ box-shadow: 0 0 0 6px rgba(0, 150, 250, 0.32);
2154
+ }
1800
2155
 
1801
- display: flex;
1802
- align-items: center;
1803
- justify-content: center;
1804
- font-size: 14px;
1805
- font-weight: 700;
1806
- line-height: 22px;
1807
-
1808
- /* HACK:
1809
- * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1810
- * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1811
- */
1812
- /* stylelint-disable-next-line property-no-vendor-prefix */
1813
- -webkit-transform: translateZ(0);
1814
-
1815
- color: var(--charcoal-color-text-tertiary-default);
1816
- background-color: var(--charcoal-color-container-default-a);
1817
- border-radius: 20px;
1818
- transition:
1819
- 0.2s background-color,
1820
- 0.2s box-shadow;
2156
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
2157
+ background-color: var(--charcoal-color-container-primary-hover);
1821
2158
  }
1822
- .charcoal-pagination-button:focus {
1823
- outline: none;
1824
- }
1825
- .charcoal-pagination-button::-moz-focus-inner {
1826
- border-style: none;
1827
- padding: 0;
1828
- }
1829
- .charcoal-pagination-button[hidden] {
1830
- visibility: hidden;
1831
- display: block;
1832
- }
1833
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1834
- .charcoal-pagination-button[aria-disabled='false']:hover {
1835
- color: var(--charcoal-color-text-tertiary-default);
1836
- background-color: var(--charcoal-color-container-secondary-default);
1837
- }
1838
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1839
- .charcoal-pagination-button[aria-disabled='false']:active {
1840
- color: var(--charcoal-color-text-tertiary-press);
1841
- background-color: var(--charcoal-color-container-tertiary-press);
1842
- }
1843
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1844
- .charcoal-pagination-button[aria-disabled='false']:focus {
1845
- outline: none;
1846
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1847
- }
1848
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1849
- .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1850
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1851
- }
1852
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1853
- .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1854
- box-shadow: none;
1855
- }
1856
- .charcoal-pagination-button[aria-current] {
1857
- cursor: default;
1858
- background-color: var(--charcoal-color-container-hud-default);
1859
- color: var(--charcoal-color-text-on-hud-default);
1860
- }
1861
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1862
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1863
- background-color: var(--charcoal-color-container-hud-default);
1864
- color: var(--charcoal-color-text-on-hud-default);
1865
- }
1866
- /* stylelint-enable no-descending-specificity */
1867
-
1868
- .charcoal-pagination-nav-button[data-hidden] {
1869
- visibility: hidden;
2159
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
2160
+ background-color: var(--charcoal-color-container-primary-press);
1870
2161
  }
1871
2162
 
1872
- .charcoal-pagination-spacer,
1873
- .charcoal-pagination-spacer:hover,
1874
- .charcoal-pagination-spacer:active {
1875
- cursor: default;
1876
- color: var(--charcoal-color-text-tertiary-default);
1877
- background: none;
1878
- }
1879
-
1880
- .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1881
- opacity: 1;
1882
- }
1883
- .charcoal-carousel {
1884
- --charcoal-carousel-gap: 0px;
1885
-
1886
- position: relative;
1887
- display: block;
2163
+ .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true'],
2164
+ .charcoal-checkbox-input[data-rounded='true'][aria-invalid='true']:not(
2165
+ :disabled
2166
+ ):focus {
2167
+ box-shadow: 0 0 0 6px rgba(255, 43, 0, 0.32);
1888
2168
  }
1889
2169
 
1890
- .charcoal-carousel[data-full-width='true'] {
1891
- width: 100vw;
1892
- margin-inline: calc(50% - 50vw);
1893
- }
1894
-
1895
- .charcoal-carousel__viewport {
1896
- position: relative;
2170
+ .charcoal-checkbox-input[data-rounded='true']::before {
2171
+ content: '';
2172
+ width: 24px;
2173
+ height: 24px;
2174
+ position: absolute;
2175
+ top: -4px;
2176
+ left: -4px;
2177
+ border-radius: 12px;
2178
+ border: 2px solid #fff;
2179
+ box-sizing: border-box;
1897
2180
  }
1898
-
1899
- /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1900
- hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1901
-
1902
- .charcoal-carousel__viewport[data-focus-visible] {
1903
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1904
- }
1905
-
1906
- /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1907
- スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1908
- .charcoal-carousel__scroller {
1909
- position: relative;
2181
+ .charcoal-list-item {
2182
+ list-style: none;
1910
2183
  display: flex;
1911
- gap: var(--charcoal-carousel-gap);
1912
- overflow-x: auto;
1913
- overflow-y: hidden;
1914
- overscroll-behavior-x: contain;
1915
- scroll-behavior: smooth;
1916
- scrollbar-width: none;
1917
- outline: none;
1918
- }
1919
- .charcoal-carousel__scroller::-webkit-scrollbar {
1920
- display: none;
1921
- }
1922
-
1923
- /* スクロールスナップ type は prop(scrollSnap.type)で scroller に出し分ける。
1924
- align は基底 .charcoal-carousel__item の後(後述)に置く(no-descending-specificity 回避)。
1925
- 未指定時の既定(M=none / S=mandatory / align=center)は JS 側で data 属性に解決する。 */
1926
- .charcoal-carousel[data-scroll-snap-type='none'] .charcoal-carousel__scroller {
1927
- scroll-snap-type: none;
1928
- }
1929
-
1930
- .charcoal-carousel[data-scroll-snap-type='proximity']
1931
- .charcoal-carousel__scroller {
1932
- scroll-snap-type: x proximity;
1933
- }
1934
-
1935
- .charcoal-carousel[data-scroll-snap-type='mandatory']
1936
- .charcoal-carousel__scroller {
1937
- scroll-snap-type: x mandatory;
1938
- }
1939
-
1940
- /* グラデーション: mask で端のアイテム自体を透明へフェードさせる(下の背景色を
1941
- 問わない)。mask の色はアルファとしてだけ効く(#000=表示 / transparent=透過)。
1942
- 左フェード・右フェードの 2 レイヤーを intersect で合成し、はみ出して
1943
- スクロール可能な側のみ data-can-prev/next で 72px のフェード帯を枠内に置く。
1944
- 無効な側はフェード帯ごと枠外へスライドして隠す(mask-image と違い
1945
- mask-position は補間可能なので、切替が 0.2s のフェードになる)。 */
1946
- .charcoal-carousel[data-has-gradient='true'] .charcoal-carousel__scroller {
1947
- -webkit-mask-image:
1948
- linear-gradient(to right, transparent, #000 72px),
1949
- linear-gradient(to left, transparent, #000 72px);
1950
- mask-image:
1951
- linear-gradient(to right, transparent, #000 72px),
1952
- linear-gradient(to left, transparent, #000 72px);
1953
- /* 枠外へ 72px スライドしても反対側の端が欠けないよう、レイヤー幅に 72px 足す */
1954
- -webkit-mask-size: calc(100% + 72px) 100%;
1955
- mask-size: calc(100% + 72px) 100%;
1956
- -webkit-mask-repeat: no-repeat;
1957
- mask-repeat: no-repeat;
1958
- -webkit-mask-composite: source-in, xor;
1959
- mask-composite: intersect;
1960
- -webkit-mask-position:
1961
- -72px 0,
1962
- 0 0;
1963
- mask-position:
1964
- -72px 0,
1965
- 0 0;
1966
- /* 0.2s ease-in は react-sandbox の LeftGradient と同じ値 */
1967
- transition: 0.2s ease-in mask-position;
1968
- }
1969
-
1970
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true']
1971
- .charcoal-carousel__scroller {
1972
- -webkit-mask-position:
1973
- 0 0,
1974
- 0 0;
1975
- mask-position:
1976
- 0 0,
1977
- 0 0;
1978
- }
1979
-
1980
- .charcoal-carousel[data-has-gradient='true'][data-can-next='true']
1981
- .charcoal-carousel__scroller {
1982
- -webkit-mask-position:
1983
- -72px 0,
1984
- -72px 0;
1985
- mask-position:
1986
- -72px 0,
1987
- -72px 0;
1988
- }
1989
-
1990
- .charcoal-carousel[data-has-gradient='true'][data-can-prev='true'][data-can-next='true']
1991
- .charcoal-carousel__scroller {
1992
- -webkit-mask-position:
1993
- 0 0,
1994
- -72px 0;
1995
- mask-position:
1996
- 0 0,
1997
- -72px 0;
1998
- }
1999
-
2000
- .charcoal-carousel__item {
2001
- flex: 0 0 auto;
2002
- min-width: 0;
2003
- }
2004
-
2005
- .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
2006
- flex: 0 0 100%;
2007
- }
2008
-
2009
- /* scroll-snap-align は prop(scrollSnap.align)で出し分ける。基底 .charcoal-carousel__item
2010
- より後に置くことで no-descending-specificity を回避する。 */
2011
- .charcoal-carousel[data-scroll-snap-align='center'] .charcoal-carousel__item {
2012
- scroll-snap-align: center;
2013
- }
2014
-
2015
- .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
2016
- scroll-snap-align: start;
2017
- }
2018
-
2019
- /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
2020
-
2021
- /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
2022
- .charcoal-carousel__navigation {
2023
- position: absolute;
2024
- inset: 0;
2025
- pointer-events: none;
2026
- display: grid;
2027
- grid-template-columns: 72px 1fr 72px;
2028
2184
  align-items: center;
2029
- /* アイテム内のコンテンツより上にボタンを表示する */
2030
- z-index: 1;
2031
- /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
2032
- opacity: 0;
2033
- transition: 0.4s opacity;
2034
- }
2035
- .charcoal-carousel__navigation[data-visible='false'] {
2036
- display: none;
2037
- }
2038
-
2039
- /* hover で表示。キーボード操作でも到達できるよう、キーボード由来のフォーカスが
2040
- カルーセル内にある間も表示する(:focus-within だとクリックで残ったフォーカスでも
2041
- 表示され続けるため、react-aria が付与する data 属性で判定する)。 */
2042
- .charcoal-carousel:hover .charcoal-carousel__navigation,
2043
- .charcoal-carousel[data-focus-visible-within] .charcoal-carousel__navigation {
2044
- opacity: 1;
2045
- }
2046
-
2047
- .charcoal-carousel__navigation__item {
2048
- pointer-events: auto;
2049
- }
2050
-
2051
- /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
2052
- 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
2053
- position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
2054
-
2055
- .charcoal-carousel__navigation__item::after {
2056
- content: '';
2057
- position: absolute;
2058
- top: 0;
2059
- bottom: 0;
2060
- width: 72px;
2061
- }
2062
-
2063
- .charcoal-carousel__navigation__item[data-direction='prev'] {
2064
- grid-column: 1;
2065
- justify-self: center;
2066
- }
2067
-
2068
- .charcoal-carousel__navigation__item[data-direction='prev']::after {
2069
- left: 0;
2070
- }
2071
-
2072
- .charcoal-carousel__navigation__item[data-direction='next'] {
2073
- grid-column: 3;
2074
- justify-self: center;
2075
- }
2076
-
2077
- .charcoal-carousel__navigation__item[data-direction='next']::after {
2078
- right: 0;
2079
- }
2185
+ min-height: 40px;
2186
+ cursor: pointer;
2187
+ outline: none;
2080
2188
 
2081
- /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
2082
- 高い詳細度で打ち消すため、ルートを前置する。 */
2083
- .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
2084
- opacity: 0;
2085
- pointer-events: none;
2086
- }
2189
+ padding-right: 16px;
2190
+ padding-left: 16px;
2087
2191
 
2088
- /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
2089
- @media (hover: none) and (pointer: coarse) {
2090
- .charcoal-carousel__navigation {
2091
- display: none;
2092
- }
2192
+ transition: background-color 0.2s;
2093
2193
  }
2094
2194
 
2095
- /* ── Indicator: JS Fallback ── */
2096
-
2097
- .charcoal-carousel__indicator {
2098
- display: flex;
2099
- justify-content: center;
2100
- align-items: center;
2101
- height: 40px;
2102
- gap: 8px;
2195
+ .charcoal-list-item:not([aria-disabled='true']):hover,
2196
+ .charcoal-list-item:not([aria-disabled='true']):focus,
2197
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
2198
+ background-color: var(--charcoal-color-container-secondary-default);
2103
2199
  }
2104
2200
 
2105
- .charcoal-carousel__indicator[data-visible='false'] {
2106
- display: none;
2107
- }
2108
-
2109
- .charcoal-carousel__indicator__item {
2110
- -webkit-appearance: none;
2111
- -moz-appearance: none;
2112
- appearance: none;
2113
- box-sizing: border-box;
2114
- width: 8px;
2115
- height: 8px;
2116
- padding: 0;
2117
- border: 0;
2118
- border-radius: 50%;
2119
- background-color: var(--charcoal-color-text-tertiary-default);
2120
- cursor: pointer;
2121
- transition: 0.2s background-color;
2201
+ .charcoal-list-item[aria-disabled='true'] {
2202
+ opacity: 0.32;
2203
+ cursor: default;
2122
2204
  }
2123
-
2124
- .charcoal-carousel__indicator__item:hover {
2125
- background-color: var(--charcoal-color-text-secondary-default);
2126
- }
2127
-
2128
- .charcoal-carousel__indicator__item:focus-visible {
2129
- outline: 2px solid rgba(0, 150, 250, 0.56);
2130
- outline-offset: 2px;
2131
- }
2132
-
2133
- .charcoal-carousel__indicator__item[data-active='true'] {
2134
- background-color: var(--charcoal-color-text-default);
2135
- }
2136
-
2137
- /* ── CSS Scroll Markers (progressive enhancement) ── */
2138
-
2139
- /* CSS Scroll Markers / Anchor Positioning は新しい仕様で、stylelint がプロパティ・
2140
- 擬似要素・擬似クラスを未知と判定するため、この @supports ブロックでは該当ルールを無効化する。 */
2141
- /* stylelint-disable property-no-unknown, selector-pseudo-element-no-unknown, selector-pseudo-class-no-unknown */
2142
- @supports (scroll-marker-group: after) {
2143
- .charcoal-carousel[data-indicator='true'] {
2144
- padding-bottom: 40px;
2145
- }
2146
-
2147
- .charcoal-carousel__scroller {
2148
- anchor-name: --charcoal-carousel;
2149
- scroll-marker-group: after;
2150
- }
2151
-
2152
- .charcoal-carousel__scroller::scroll-button(*) {
2153
- content: none;
2154
- }
2155
-
2156
- .charcoal-carousel__scroller::scroll-marker-group {
2157
- display: flex;
2158
- justify-content: center;
2159
- align-items: center;
2160
- height: 40px;
2161
- gap: 8px;
2162
-
2163
- position: absolute;
2164
- position-anchor: --charcoal-carousel;
2165
- top: anchor(bottom);
2166
- justify-self: anchor-center;
2167
- }
2168
-
2169
- .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
2170
- scroll-marker-group: none;
2171
- }
2172
-
2173
- .charcoal-carousel__item::scroll-marker {
2174
- content: '';
2175
- width: 8px;
2176
- height: 8px;
2177
- border: 0;
2178
- border-radius: 50%;
2179
- background-color: var(--charcoal-color-text-tertiary-default);
2180
- cursor: pointer;
2181
- transition: 0.2s background-color;
2182
- }
2183
-
2184
- .charcoal-carousel__item::scroll-marker:hover {
2185
- background-color: var(--charcoal-color-text-secondary-default);
2186
- }
2187
-
2188
- .charcoal-carousel__item::scroll-marker:focus {
2189
- outline: 2px solid rgba(0, 150, 250, 0.56);
2190
- outline-offset: 2px;
2191
- }
2192
-
2193
- .charcoal-carousel__item::scroll-marker:target-current {
2194
- background-color: var(--charcoal-color-text-default);
2195
- }
2196
-
2197
- .charcoal-carousel__indicator {
2198
- display: none;
2199
- }
2205
+ .charcoal-popover {
2206
+ margin: 4px 0;
2207
+ list-style: none;
2208
+ overflow: auto;
2209
+ max-height: inherit;
2210
+ background-color: var(--charcoal-color-background-default);
2211
+ border: solid 1px var(--charcoal-color-border-secondary);
2212
+ border-radius: 8px;
2213
+ padding-top: 8px;
2214
+ padding-bottom: 8px;
2200
2215
  }
2201
- /* stylelint-enable property-no-unknown, selector-pseudo-element-no-unknown, selector-pseudo-class-no-unknown */
2202
- .charcoal-focus-ring:is(
2203
- :not(:disabled):not([aria-disabled]),
2204
- [aria-disabled='false']
2205
- ):focus-visible {
2206
- outline: none;
2207
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
2208
- transition: 0.2s box-shadow;
2209
- }
2210
2216
  }
2211
2217
 
2212
2218
  /*# sourceMappingURL=layered.css.map */