@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/index.css CHANGED
@@ -1,8 +1,145 @@
1
- .charcoal-button {
1
+ .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;
376
- }
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
+ }
377
481
 
378
- .charcoal-radio-input:not(:disabled):hover {
379
- background-color: var(--charcoal-color-container-hover);
482
+ .charcoal-text-field-prefix {
483
+ display: flex;
484
+ align-items: center;
485
+ margin-right: 4px;
380
486
  }
381
487
 
382
- .charcoal-radio-input:not(:disabled):active {
383
- background-color: var(--charcoal-color-container-press);
488
+ .charcoal-text-field-suffix {
489
+ display: flex;
490
+ align-items: center;
491
+ gap: 8px;
492
+ margin-left: 4px;
384
493
  }
385
494
 
386
- .charcoal-radio-input:not(:disabled):focus {
387
- outline: none;
388
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
495
+ .charcoal-text-field-input-root {
496
+ flex: 1;
497
+ min-width: 0;
498
+ overflow: hidden;
389
499
  }
390
500
 
391
- .charcoal-radio-input:not(:disabled):focus-visible {
392
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
393
- }
501
+ .charcoal-text-field-input {
502
+ border: none;
503
+ box-sizing: border-box;
504
+ outline: none;
505
+ font-family: inherit;
394
506
 
395
- .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
396
- box-shadow: none;
397
- }
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);
398
517
 
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);
402
- }
518
+ /* Display box-shadow for iOS Safari */
519
+ -webkit-appearance: none;
520
+ -moz-appearance: none;
521
+ appearance: none;
522
+ background: transparent;
403
523
 
404
- .charcoal-radio-input:checked:not(:disabled):hover {
405
- background-color: var(--charcoal-color-container-primary-hover);
524
+ color: var(--charcoal-color-text-secondary-default);
406
525
  }
407
526
 
408
- .charcoal-radio-input:checked:not(:disabled):hover::after {
409
- background-color: var(--charcoal-color-icon-on-primary-hover);
410
- }
527
+ .charcoal-text-field-input::-moz-placeholder {
528
+ color: var(--charcoal-color-text-placeholder-default);
529
+ }
411
530
 
412
- .charcoal-radio-input:checked:not(:disabled):active {
413
- background-color: var(--charcoal-color-container-primary-press);
414
- }
531
+ .charcoal-text-field-input::placeholder {
532
+ color: var(--charcoal-color-text-placeholder-default);
533
+ }
415
534
 
416
- .charcoal-radio-input:checked:not(:disabled):active::after {
417
- background-color: var(--charcoal-color-icon-on-primary-press);
535
+ .charcoal-text-field-line-counter {
536
+ line-height: 22px;
537
+ font-size: 14px;
538
+ color: var(--charcoal-color-text-tertiary-default);
418
539
  }
419
- .charcoal-radio-group {
420
- display: grid;
421
- grid-template-columns: 1fr;
422
- grid-gap: 8px;
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;
547
+ }
548
+
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,447 +1211,261 @@ 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;
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;
976
1220
  }
977
1221
 
978
- .charcoal-modal-dialog[data-size='S'] {
979
- width: 336px;
1222
+ .charcoal-hint-text[data-context='page'] {
1223
+ justify-content: center;
1224
+ }
1225
+
1226
+ @media (min-width: 744px) {
1227
+
1228
+ .charcoal-hint-text[data-context='page'] {
1229
+ padding: 20px 40px
1230
+ }
1231
+ }
1232
+
1233
+ .charcoal-hint-text-icon {
1234
+ display: flex;
1235
+ align-items: center;
1236
+ color: var(--charcoal-color-icon-tertiary-default);
1237
+ height: 22px;
1238
+ margin: 0 4px 0 0;
980
1239
  }
981
1240
 
982
- .charcoal-modal-dialog[data-size='M'] {
983
- width: 440px;
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;
984
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;
985
1254
 
986
- .charcoal-modal-dialog[data-size='L'] {
987
- width: 648px;
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);
988
1260
  }
989
1261
 
990
- @media (max-width: 743px) {
991
- .charcoal-modal-dialog {
992
- max-width: 440px;
993
- width: calc(100% - 48px);
1262
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
1263
+ line-height: var(--charcoal-text-ellipsis-line-height);
994
1264
  }
995
1265
 
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;
1266
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
1267
+ line-height: inherit;
1002
1268
  }
1003
1269
 
1004
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
1005
- min-height: 100%;
1270
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1271
+ text-overflow: ellipsis;
1272
+ white-space: nowrap;
1006
1273
  }
1274
+ .charcoal-pagination {
1275
+ display: flex;
1276
+ justify-content: center;
1277
+ align-items: center;
1007
1278
  }
1008
1279
 
1009
- .charcoal-modal-dialog:focus {
1280
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1281
+ min-width: 32px;
1282
+ min-height: 32px;
1283
+ }
1284
+
1285
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1286
+ min-width: 40px;
1287
+ min-height: 40px;
1288
+ }
1289
+
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;
1010
1298
  outline: none;
1011
- }
1012
- .charcoal-modal-background {
1013
- overflow: auto;
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
+
1014
1308
  display: flex;
1015
- position: fixed;
1016
- top: 0;
1017
- left: 0;
1018
- width: 100%;
1019
- height: 100%;
1309
+ align-items: center;
1020
1310
  justify-content: center;
1021
- padding: 40px 0;
1022
- box-sizing: border-box;
1311
+ font-size: 14px;
1312
+ font-weight: 700;
1313
+ line-height: 22px;
1023
1314
 
1024
- background-color: var(--charcoal-color-background-overlay);
1025
- }
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);
1026
1321
 
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
- }
1322
+ color: var(--charcoal-color-text-tertiary-default);
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;
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);
1032
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 */
1033
1374
 
1034
- /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
1035
- transition は entering / exiting に限定し、開いたままテーマ切り替え等で
1036
- 色や transform が変わってもアニメーションしないようにする */
1037
- .charcoal-modal-background[data-animation] {
1038
- overflow: hidden;
1375
+ .charcoal-pagination-nav-button[data-hidden] {
1376
+ visibility: hidden;
1039
1377
  }
1040
1378
 
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
- }
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;
1385
+ }
1045
1386
 
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;
1387
+ .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1388
+ opacity: 1;
1389
+ }
1390
+ .charcoal-menu-item-group {
1391
+ display: block;
1052
1392
  }
1053
1393
 
1054
- .charcoal-modal-background[data-animation='entered'] {
1055
- overflow: auto;
1394
+ .charcoal-menu-item-group > span {
1395
+ display: block;
1396
+ color: var(--charcoal-color-text-tertiary-default);
1397
+ font-size: 12px;
1398
+ font-weight: bold;
1399
+ padding: 12px 0 8px 16px;
1056
1400
  }
1057
1401
 
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);
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;
1061
1408
  }
1409
+ .charcoal-segmented-control {
1410
+ display: inline-flex;
1411
+ align-items: center;
1062
1412
 
1063
- .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
1064
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
1065
- transform: translateY(100%);
1413
+ background-color: var(--charcoal-color-container-secondary-default-a);
1414
+ border-radius: 16px;
1066
1415
  }
1067
1416
 
1068
- .charcoal-modal-close-button {
1069
- position: absolute;
1070
- top: 8px;
1071
- right: 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
+ }
1072
1424
 
1073
- color: var(--charcoal-color-text-tertiary-default);
1074
- transition: 0.2s color;
1075
- }
1425
+ .charcoal-segmented-control[data-full-width='true'] {
1426
+ width: 100%;
1427
+ }
1076
1428
 
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;
1429
+ .charcoal-segmented-control-radio__label {
1430
+ position: relative;
1431
+ display: flex;
1432
+ align-items: center;
1086
1433
  justify-content: center;
1434
+ cursor: pointer;
1435
+ height: 32px;
1436
+
1437
+ padding-right: 16px;
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;
1087
1444
  }
1088
1445
 
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;
1446
+ .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1447
+ cursor: default;
1448
+ opacity: 0.32;
1093
1449
  }
1094
- }
1095
1450
 
1096
- .charcoal-modal-header-title {
1097
- color: var(--charcoal-color-text-default);
1098
- font-size: 16px;
1099
- line-height: 24px;
1100
- font-weight: bold;
1101
- display: flow-root;
1102
- }
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);
1454
+ }
1103
1455
 
1104
- .charcoal-modal-align {
1105
- padding-left: 16px;
1106
- padding-right: 16px;
1107
- }
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;
1460
+ }
1108
1461
 
1109
- .charcoal-modal-body {
1110
- padding-bottom: 40px;
1111
- }
1462
+ .charcoal-segmented-control-radio__input {
1463
+ position: absolute;
1112
1464
 
1113
- .charcoal-modal-buttons {
1114
- display: grid;
1115
- grid-auto-flow: row;
1116
- grid-row-gap: 8px;
1117
-
1118
- padding-top: 16px;
1119
- padding-left: 16px;
1120
- 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);
1133
- }
1134
-
1135
- .charcoal-loading-spinner[data-transparent='true'] {
1136
- background-color: var(--charcoal-color-container-default-a);
1137
- }
1138
-
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;
1147
- }
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
-
1159
- .charcoal-loading-spinner-icon[data-reset-animation] {
1160
- animation: none;
1161
- }
1162
-
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
- }
1172
-
1173
- .charcoal-dropdown-selector-root[aria-disabled='true'] {
1174
- cursor: default;
1175
- opacity: 0.32;
1176
- }
1177
-
1178
- .charcoal-dropdown-selector-button {
1179
- display: grid;
1180
- grid-template-columns: 1fr auto;
1181
- justify-content: space-between;
1182
- align-items: center;
1183
-
1184
- height: 40px;
1185
- width: 100%;
1186
- box-sizing: border-box;
1187
- border: none;
1188
- cursor: pointer;
1189
- gap: 4px;
1190
-
1191
- padding-right: 8px;
1192
- padding-left: 8px;
1193
- background-color: var(--charcoal-color-container-secondary-default-a);
1194
- border-radius: 4px;
1195
-
1196
- transition:
1197
- 0.2s box-shadow,
1198
- 0.2s background-color;
1199
- }
1200
-
1201
- .charcoal-dropdown-selector-button:disabled {
1202
- cursor: default;
1203
- }
1204
-
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
- }
1222
-
1223
- .charcoal-dropdown-selector-button:not(:disabled):focus:not(:focus-visible) {
1224
- box-shadow: none;
1225
- }
1226
-
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);
1230
- }
1231
-
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;
1241
- }
1242
-
1243
- .charcoal-ui-dropdown-selector-text[data-placeholder='true'] {
1244
- color: var(--charcoal-color-text-placeholder-default);
1245
- }
1246
-
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;
1264
- }
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
-
1273
- padding-right: 16px;
1274
- padding-left: 16px;
1275
-
1276
- transition: background-color 0.2s;
1277
- }
1278
-
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);
1283
- }
1284
-
1285
- .charcoal-list-item[aria-disabled='true'] {
1286
- opacity: 0.32;
1287
- cursor: default;
1288
- }
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
-
1295
- display: flex;
1296
- align-items: center;
1297
- width: 100%;
1298
- margin-left: 20px;
1299
- }
1300
-
1301
- .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1302
- margin-left: 0px;
1303
- }
1304
-
1305
- .charcoal-dropdown-selector-menu-item-icon {
1306
- color: var(--charcoal-color-text-secondary-default);
1307
- padding-right: 4px;
1308
- }
1309
-
1310
- .charcoal-dropdown-selector-menu-item-container {
1311
- display: flex;
1312
- align-items: center;
1313
- }
1314
-
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;
1324
- }
1325
-
1326
- .charcoal-dropdown-selector-menu-fullwidth {
1327
- width: 100%;
1328
- }
1329
- .charcoal-menu-item-group {
1330
- display: block;
1331
- }
1332
-
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;
1339
- }
1340
-
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;
1347
- }
1348
- .charcoal-segmented-control {
1349
- display: inline-flex;
1350
- align-items: center;
1351
-
1352
- background-color: var(--charcoal-color-container-secondary-default-a);
1353
- border-radius: 16px;
1354
- }
1355
-
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;
1362
- }
1363
-
1364
- .charcoal-segmented-control[data-full-width='true'] {
1365
- width: 100%;
1366
- }
1367
-
1368
- .charcoal-segmented-control-radio__label {
1369
- position: relative;
1370
- display: flex;
1371
- align-items: center;
1372
- justify-content: center;
1373
- cursor: pointer;
1374
- height: 32px;
1375
-
1376
- padding-right: 16px;
1377
- padding-left: 16px;
1378
- border-radius: 16px;
1379
- color: var(--charcoal-color-text-secondary-default);
1380
-
1381
- font-size: 14px;
1382
- line-height: 22px;
1383
- }
1384
-
1385
- .charcoal-segmented-control-radio__label[aria-disabled]:not([aria-disabled='false']) {
1386
- cursor: default;
1387
- opacity: 0.32;
1388
- }
1389
-
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);
1393
- }
1394
-
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;
1399
- }
1400
-
1401
- .charcoal-segmented-control-radio__input {
1402
- position: absolute;
1403
-
1404
- height: 0px;
1405
- width: 0px;
1406
- padding: 0;
1407
- margin: 0;
1465
+ height: 0px;
1466
+ width: 0px;
1467
+ padding: 0;
1468
+ margin: 0;
1408
1469
 
1409
1470
  -webkit-appearance: none;
1410
1471
 
@@ -1416,794 +1477,739 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1416
1477
  white-space: nowrap;
1417
1478
  opacity: 0;
1418
1479
  }
1419
- .charcoal-checkbox__label {
1420
- position: relative;
1421
- cursor: pointer;
1422
- display: flex;
1423
- gap: 4px;
1424
- }
1425
-
1426
- .charcoal-checkbox__label[aria-disabled='true'] {
1427
- cursor: default;
1428
- opacity: 0.32;
1429
- }
1430
-
1431
- .charcoal-checkbox__label[aria-disabled='true'] > input {
1432
- opacity: 1;
1433
- }
1480
+ .charcoal-carousel {
1481
+ --charcoal-carousel-gap: 0px;
1434
1482
 
1435
- .charcoal-checkbox__label_div {
1436
- flex: 1;
1437
- color: var(--charcoal-color-text-default);
1438
- font-size: 14px;
1439
- line-height: 20px;
1440
- }
1441
- .charcoal-checkbox-input {
1442
- -webkit-appearance: none;
1443
- -moz-appearance: none;
1444
- appearance: none;
1445
- display: flex;
1446
- cursor: pointer;
1447
- margin: 0;
1448
- width: 20px;
1449
- height: 20px;
1450
- border-radius: 4px;
1451
- transition:
1452
- 0.2s box-shadow,
1453
- 0.2s background-color;
1454
1483
  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;
1462
- }
1463
-
1464
- .charcoal-checkbox-input:checked {
1465
- background-color: var(--charcoal-color-container-primary-default);
1466
- }
1467
-
1468
- .charcoal-checkbox-input:checked::after {
1469
- 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
- );
1478
- }
1479
-
1480
- .charcoal-checkbox-input:not(:checked) {
1481
- border-width: 2px;
1482
- border-style: solid;
1483
- border-color: var(--charcoal-color-border-default);
1484
- }
1485
-
1486
- .charcoal-checkbox-input:not(:disabled):focus {
1487
- outline: none;
1488
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1489
- }
1490
- .charcoal-checkbox-input:not(:disabled):focus-visible {
1491
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1492
- }
1493
- .charcoal-checkbox-input:not(:disabled):focus:not(:focus-visible) {
1494
- box-shadow: none;
1495
- }
1496
-
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);
1502
- }
1503
-
1504
- .charcoal-checkbox-input[aria-invalid='true'],
1505
- .charcoal-checkbox-input[aria-invalid='true']:not(:disabled):focus {
1506
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1507
- }
1508
-
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;
1513
- }
1514
-
1515
- .charcoal-checkbox-input[data-rounded='true']:checked {
1516
- background-color: var(--charcoal-color-container-primary-default);
1517
- }
1518
-
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);
1524
- }
1525
-
1526
- .charcoal-checkbox-input[data-rounded='true']:not(:disabled):focus-visible {
1527
- box-shadow: 0 0 0 6px rgba(0, 150, 250, 0.32);
1528
- }
1529
-
1530
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
1531
- background-color: var(--charcoal-color-container-primary-hover);
1532
- }
1533
- .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
1534
- background-color: var(--charcoal-color-container-primary-press);
1535
- }
1536
-
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);
1484
+ display: block;
1542
1485
  }
1543
1486
 
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;
1554
- }
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: ;
1487
+ .charcoal-carousel[data-full-width='true'] {
1488
+ width: 100vw;
1489
+ margin-inline: calc(50% - 50vw);
1490
+ }
1561
1491
 
1562
- isolation: isolate;
1492
+ .charcoal-carousel__viewport {
1563
1493
  position: relative;
1564
-
1565
- -webkit-appearance: none;
1566
-
1567
- -moz-appearance: none;
1568
-
1569
- appearance: none;
1570
- outline: none;
1571
- border-style: none;
1572
-
1573
- display: inline-flex;
1574
- gap: 8px;
1575
- align-items: center;
1576
- justify-content: center;
1577
-
1578
- text-decoration: none;
1579
- cursor: pointer;
1580
- overflow: hidden;
1581
-
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;
1590
-
1591
- transition: 0.2s box-shadow;
1592
1494
  }
1593
1495
 
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
- }
1599
-
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
- }
1605
-
1606
- .charcoal-tag-item[data-state='inactive'] {
1607
- --charcoal-tag-item-color: var(--charcoal-color-text-secondary-default);
1608
- }
1609
-
1610
- .charcoal-tag-item[data-state='active'] {
1611
- --charcoal-tag-item-padding-left: 16px;
1612
- --charcoal-tag-item-padding-right: 8px;
1613
- }
1614
-
1615
- .charcoal-tag-item:disabled,
1616
- .charcoal-tag-item[aria-disabled]:not([aria-disabled='false']) {
1617
- opacity: 0.32;
1618
- cursor: default;
1619
- }
1620
-
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
- }
1496
+ /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1497
+ hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1626
1498
 
1627
- .charcoal-tag-item:not(:disabled):not([aria-disabled]):focus,
1628
- .charcoal-tag-item[aria-disabled='false']:focus {
1629
- outline: none;
1499
+ .charcoal-carousel__viewport[data-focus-visible] {
1630
1500
  box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1631
1501
  }
1632
1502
 
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;
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;
1515
+ }
1516
+ .charcoal-carousel__scroller::-webkit-scrollbar {
1517
+ display: none;
1636
1518
  }
1637
1519
 
1638
- .charcoal-tag-item__bg {
1639
- background-color: var(--charcoal-tag-item-bg);
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;
1640
1525
  }
1641
1526
 
1642
- .charcoal-tag-item__bg[data-bg-variant='image'] {
1643
- background-color: var(--charcoal-color-container-on-img-default);
1644
- }
1527
+ .charcoal-carousel[data-scroll-snap-type='proximity']
1528
+ .charcoal-carousel__scroller {
1529
+ scroll-snap-type: x proximity;
1530
+ }
1645
1531
 
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
- }
1532
+ .charcoal-carousel[data-scroll-snap-type='mandatory']
1533
+ .charcoal-carousel__scroller {
1534
+ scroll-snap-type: x mandatory;
1535
+ }
1659
1536
 
1660
- .charcoal-tag-item__bg[data-state='inactive'] {
1661
- background-color: var(--charcoal-color-container-secondary-default);
1662
- }
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;
1565
+ }
1663
1566
 
1664
- .charcoal-tag-item__label {
1665
- height: 100%;
1666
- display: flex;
1667
- flex-direction: column;
1668
- align-items: center;
1669
- justify-content: center;
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;
1670
1575
  }
1671
1576
 
1672
- .charcoal-tag-item__label[data-has-translate='true'] {
1673
- justify-content: space-between;
1674
- }
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;
1585
+ }
1675
1586
 
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;
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;
1680
1595
  }
1681
1596
 
1682
- .charcoal-tag-item__label__translated::before {
1683
- display: none;
1684
- }
1597
+ .charcoal-carousel__item {
1598
+ flex: 0 0 auto;
1599
+ min-width: 0;
1600
+ }
1685
1601
 
1686
- .charcoal-tag-item__label__text {
1687
- --charcoal-tag-item-text-font-size: 14px;
1688
- --charcoal-tag-item-text-line-height: 22px;
1602
+ .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
1603
+ flex: 0 0 100%;
1604
+ }
1689
1605
 
1690
- max-width: 152px;
1691
- overflow: hidden;
1692
- font-weight: bold;
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;
1610
+ }
1693
1611
 
1694
- color: inherit;
1695
- white-space: nowrap;
1696
- text-overflow: ellipsis;
1612
+ .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
1613
+ scroll-snap-align: start;
1697
1614
  }
1698
1615
 
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;
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;
1631
+ }
1632
+ .charcoal-carousel__navigation[data-visible='false'] {
1633
+ display: none;
1703
1634
  }
1704
1635
 
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;
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;
1708
1642
  }
1709
- .charcoal-hint-text {
1710
- background-color: var(--charcoal-color-container-secondary-default);
1711
- border-radius: 8px;
1712
- padding: 12px 16px;
1713
- display: flex;
1714
- align-items: flex-start;
1643
+
1644
+ .charcoal-carousel__navigation__item {
1645
+ pointer-events: auto;
1715
1646
  }
1716
1647
 
1717
- .charcoal-hint-text[data-context='page'] {
1718
- justify-content: center;
1719
- }
1648
+ /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
1649
+ 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
1650
+ position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1720
1651
 
1721
- @media (min-width: 744px) {
1652
+ .charcoal-carousel__navigation__item::after {
1653
+ content: '';
1654
+ position: absolute;
1655
+ top: 0;
1656
+ bottom: 0;
1657
+ width: 72px;
1658
+ }
1722
1659
 
1723
- .charcoal-hint-text[data-context='page'] {
1724
- padding: 20px 40px
1660
+ .charcoal-carousel__navigation__item[data-direction='prev'] {
1661
+ grid-column: 1;
1662
+ justify-self: center;
1725
1663
  }
1664
+
1665
+ .charcoal-carousel__navigation__item[data-direction='prev']::after {
1666
+ left: 0;
1726
1667
  }
1727
1668
 
1728
- .charcoal-hint-text-icon {
1729
- display: flex;
1730
- align-items: center;
1731
- color: var(--charcoal-color-icon-tertiary-default);
1732
- height: 22px;
1733
- margin: 0 4px 0 0;
1734
- }
1669
+ .charcoal-carousel__navigation__item[data-direction='next'] {
1670
+ grid-column: 3;
1671
+ justify-self: center;
1672
+ }
1735
1673
 
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;
1744
- }
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;
1674
+ .charcoal-carousel__navigation__item[data-direction='next']::after {
1675
+ right: 0;
1676
+ }
1749
1677
 
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);
1678
+ /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
1679
+ 高い詳細度で打ち消すため、ルートを前置する。 */
1680
+ .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
1681
+ opacity: 0;
1682
+ pointer-events: none;
1755
1683
  }
1756
1684
 
1757
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1758
- line-height: var(--charcoal-text-ellipsis-line-height);
1685
+ /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
1686
+ @media (hover: none) and (pointer: coarse) {
1687
+ .charcoal-carousel__navigation {
1688
+ display: none;
1759
1689
  }
1690
+ }
1760
1691
 
1761
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1762
- line-height: inherit;
1763
- }
1692
+ /* ── Indicator: JS Fallback ── */
1764
1693
 
1765
- .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1766
- text-overflow: ellipsis;
1767
- white-space: nowrap;
1768
- }
1769
- .charcoal-pagination {
1694
+ .charcoal-carousel__indicator {
1770
1695
  display: flex;
1771
1696
  justify-content: center;
1772
1697
  align-items: center;
1698
+ height: 40px;
1699
+ gap: 8px;
1773
1700
  }
1774
1701
 
1775
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1776
- min-width: 32px;
1777
- min-height: 32px;
1778
- }
1779
-
1780
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1781
- min-width: 40px;
1782
- min-height: 40px;
1702
+ .charcoal-carousel__indicator[data-visible='false'] {
1703
+ display: none;
1783
1704
  }
1784
1705
 
1785
- /* stylelint-disable no-descending-specificity */
1786
- .charcoal-pagination-button {
1787
- cursor: pointer;
1706
+ .charcoal-carousel__indicator__item {
1788
1707
  -webkit-appearance: none;
1789
1708
  -moz-appearance: none;
1790
1709
  appearance: none;
1710
+ box-sizing: border-box;
1711
+ width: 8px;
1712
+ height: 8px;
1791
1713
  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;
1800
-
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;
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;
1821
1719
  }
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;
1720
+
1721
+ .charcoal-carousel__indicator__item:hover {
1722
+ background-color: var(--charcoal-color-text-secondary-default);
1832
1723
  }
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);
1724
+
1725
+ .charcoal-carousel__indicator__item:focus-visible {
1726
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1727
+ outline-offset: 2px;
1837
1728
  }
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);
1729
+
1730
+ .charcoal-carousel__indicator__item[data-active='true'] {
1731
+ background-color: var(--charcoal-color-text-default);
1842
1732
  }
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);
1733
+
1734
+ /* ── CSS Scroll Markers (progressive enhancement) ── */
1735
+
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;
1847
1742
  }
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);
1743
+
1744
+ .charcoal-carousel__scroller {
1745
+ anchor-name: --charcoal-carousel;
1746
+ scroll-marker-group: after;
1851
1747
  }
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;
1748
+
1749
+ .charcoal-carousel__scroller::scroll-button(*) {
1750
+ content: none;
1751
+ }
1752
+
1753
+ .charcoal-carousel__scroller::scroll-marker-group {
1754
+ display: flex;
1755
+ justify-content: center;
1756
+ align-items: center;
1757
+ height: 40px;
1758
+ gap: 8px;
1759
+
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;
1855
1768
  }
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);
1769
+
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;
1860
1779
  }
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);
1780
+
1781
+ .charcoal-carousel__item::scroll-marker:hover {
1782
+ background-color: var(--charcoal-color-text-secondary-default);
1865
1783
  }
1866
- /* stylelint-enable no-descending-specificity */
1867
1784
 
1868
- .charcoal-pagination-nav-button[data-hidden] {
1869
- visibility: hidden;
1870
- }
1785
+ .charcoal-carousel__item::scroll-marker:focus {
1786
+ outline: 2px solid rgba(0, 150, 250, 0.56);
1787
+ outline-offset: 2px;
1788
+ }
1871
1789
 
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
- }
1790
+ .charcoal-carousel__item::scroll-marker:target-current {
1791
+ background-color: var(--charcoal-color-text-default);
1792
+ }
1879
1793
 
1880
- .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1881
- opacity: 1;
1794
+ .charcoal-carousel__indicator {
1795
+ display: none;
1882
1796
  }
1883
- .charcoal-carousel {
1884
- --charcoal-carousel-gap: 0px;
1797
+ }
1798
+ /* stylelint-enable property-no-unknown, selector-pseudo-element-no-unknown, selector-pseudo-class-no-unknown */
1799
+ .charcoal-text-field-assistive-text {
1800
+ font-size: 14px;
1801
+ line-height: 22px;
1802
+ margin: 0;
1803
+ color: var(--charcoal-color-text-secondary-default);
1804
+ }
1885
1805
 
1886
- position: relative;
1806
+ .charcoal-text-field-assistive-text[data-invalid='true'] {
1807
+ color: var(--charcoal-color-text-negative-default);
1808
+ }
1809
+ .charcoal-radio-input {
1810
+ -webkit-appearance: none;
1811
+ -moz-appearance: none;
1812
+ appearance: none;
1887
1813
  display: block;
1814
+ box-sizing: border-box;
1815
+
1816
+ margin: 0;
1817
+ padding: 6px;
1818
+
1819
+ width: 20px;
1820
+ height: 20px;
1821
+ cursor: pointer;
1822
+ border-radius: 999999px;
1823
+ background-color: var(--charcoal-color-container-default);
1824
+ transition:
1825
+ 0.2s background-color,
1826
+ 0.2s box-shadow;
1888
1827
  }
1889
1828
 
1890
- .charcoal-carousel[data-full-width='true'] {
1891
- width: 100vw;
1892
- margin-inline: calc(50% - 50vw);
1893
- }
1829
+ .charcoal-radio-input:checked {
1830
+ background-color: var(--charcoal-color-container-primary-default);
1831
+ }
1894
1832
 
1895
- .charcoal-carousel__viewport {
1896
- position: relative;
1833
+ .charcoal-radio-input:checked::after {
1834
+ content: '';
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;
1897
1844
  }
1898
1845
 
1899
- /* フォーカスリングは scroller ではなく viewport に描く。scroller に置くと
1900
- hasGradient の mask(mask-clip: border-box)で外側の box-shadow ごと消えるため。 */
1846
+ .charcoal-radio-input:not(:checked) {
1847
+ border-width: 2px;
1848
+ border-style: solid;
1849
+ border-color: var(--charcoal-color-border-default);
1850
+ }
1901
1851
 
1902
- .charcoal-carousel__viewport[data-focus-visible] {
1903
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1904
- }
1852
+ .charcoal-radio-input:disabled {
1853
+ cursor: default;
1854
+ }
1905
1855
 
1906
- /* スライド間隔は gap prop(--charcoal-carousel-gap)で注入する。
1907
- スライド寸法は sandbox 同様、利用者が children 側で持つ。 */
1908
- .charcoal-carousel__scroller {
1909
- position: relative;
1910
- 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;
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 {
1917
1865
  outline: none;
1866
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1918
1867
  }
1919
- .charcoal-carousel__scroller::-webkit-scrollbar {
1920
- display: none;
1921
- }
1922
1868
 
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;
1869
+ .charcoal-radio-input:not(:disabled):focus-visible {
1870
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1928
1871
  }
1929
1872
 
1930
- .charcoal-carousel[data-scroll-snap-type='proximity']
1931
- .charcoal-carousel__scroller {
1932
- scroll-snap-type: x proximity;
1873
+ .charcoal-radio-input:not(:disabled):focus:not(:focus-visible) {
1874
+ box-shadow: none;
1933
1875
  }
1934
1876
 
1935
- .charcoal-carousel[data-scroll-snap-type='mandatory']
1936
- .charcoal-carousel__scroller {
1937
- scroll-snap-type: x mandatory;
1877
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true'],
1878
+ .charcoal-radio-input:not(:disabled)[aria-invalid='true']:focus {
1879
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
1938
1880
  }
1939
1881
 
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;
1882
+ .charcoal-radio-input:checked:not(:disabled):hover {
1883
+ background-color: var(--charcoal-color-container-primary-hover);
1968
1884
  }
1969
1885
 
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;
1886
+ .charcoal-radio-input:checked:not(:disabled):hover::after {
1887
+ background-color: var(--charcoal-color-icon-on-primary-hover);
1978
1888
  }
1979
1889
 
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;
1890
+ .charcoal-radio-input:checked:not(:disabled):active {
1891
+ background-color: var(--charcoal-color-container-primary-press);
1988
1892
  }
1989
1893
 
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;
1894
+ .charcoal-radio-input:checked:not(:disabled):active::after {
1895
+ background-color: var(--charcoal-color-icon-on-primary-press);
1896
+ }
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);
1998
1903
  }
1999
1904
 
2000
- .charcoal-carousel__item {
2001
- flex: 0 0 auto;
2002
- min-width: 0;
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);
2003
1910
  }
2004
1911
 
2005
- .charcoal-carousel[data-size='S'] .charcoal-carousel__item {
2006
- flex: 0 0 100%;
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;
2007
1920
  }
2008
1921
 
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;
1922
+ .charcoal-field-label-root {
1923
+ display: inline-flex;
1924
+ align-items: center;
2013
1925
  }
2014
1926
 
2015
- .charcoal-carousel[data-scroll-snap-align='start'] .charcoal-carousel__item {
2016
- scroll-snap-align: start;
1927
+ .charcoal-field-label-root > .charcoal-field-label-required-text {
1928
+ margin-left: 4px;
1929
+ }
1930
+
1931
+ .charcoal-field-label-root > .charcoal-field-label-sub-label {
1932
+ margin-left: auto;
1933
+ }
1934
+ .charcoal-switch-input {
1935
+ cursor: pointer;
1936
+ -webkit-appearance: none;
1937
+ -moz-appearance: none;
1938
+ appearance: none;
1939
+ display: inline-flex;
1940
+ position: relative;
1941
+ box-sizing: border-box;
1942
+ width: 28px;
1943
+ border: 2px solid transparent;
1944
+
1945
+ transition-property: background-color, box-shadow;
1946
+ transition-duration: 0.2s;
1947
+
1948
+ outline: none;
1949
+ border-radius: 16px;
1950
+ height: 16px;
1951
+ margin: 0;
1952
+ background-color: var(--charcoal-color-container-neutral-default);
2017
1953
  }
2018
1954
 
2019
- /* ── Navigation Buttons (charcoal IconButton, variant=Overlay size=S) ── */
1955
+ .charcoal-switch-input:disabled,
1956
+ .charcoal-switch-input[readonly] {
1957
+ opacity: 0.32;
1958
+ cursor: default;
1959
+ }
2020
1960
 
2021
- /* マスクの透過域と同じ 72px 1fr 72px グリッド。各ボタンは 72px ゾーンの中央に置く。 */
2022
- .charcoal-carousel__navigation {
1961
+ .charcoal-switch-input::after {
1962
+ content: '';
2023
1963
  position: absolute;
2024
- inset: 0;
2025
- pointer-events: none;
2026
- display: grid;
2027
- grid-template-columns: 72px 1fr 72px;
2028
- align-items: center;
2029
- /* アイテム内のコンテンツより上にボタンを表示する */
2030
- z-index: 1;
2031
- /* sandbox 同様、通常は隠してカルーセル hover 時にフェードイン表示する。 */
2032
- opacity: 0;
2033
- transition: 0.4s opacity;
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);
2034
1973
  }
2035
- .charcoal-carousel__navigation[data-visible='false'] {
2036
- display: none;
2037
- }
2038
1974
 
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;
1975
+ .charcoal-switch-input:checked::after {
1976
+ transform: translateX(12px);
1977
+ transition: transform 0.2s;
2045
1978
  }
2046
1979
 
2047
- .charcoal-carousel__navigation__item {
2048
- pointer-events: auto;
1980
+ .charcoal-switch-input:checked {
1981
+ background-color: var(--charcoal-color-container-primary-default);
2049
1982
  }
2050
1983
 
2051
- /* ヒットエリアをグリッド端列(= mask のフェード帯と同じ 72px)全体へ広げる。
2052
- 擬似要素上のクリックは元の button に届くため、帯のどこを押してもページ送りになる。
2053
- position: absolute の基準は positioned な .charcoal-carousel__navigation(inset: 0)。 */
1984
+ .charcoal-switch-input:not(:disabled):hover {
1985
+ background-color: var(--charcoal-color-container-neutral-hover);
1986
+ }
2054
1987
 
2055
- .charcoal-carousel__navigation__item::after {
2056
- content: '';
2057
- position: absolute;
2058
- top: 0;
2059
- bottom: 0;
2060
- width: 72px;
2061
- }
1988
+ .charcoal-switch-input:not(:disabled):active {
1989
+ background-color: var(--charcoal-color-container-neutral-press);
1990
+ }
2062
1991
 
2063
- .charcoal-carousel__navigation__item[data-direction='prev'] {
2064
- grid-column: 1;
2065
- justify-self: center;
2066
- }
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
+ }
2067
2002
 
2068
- .charcoal-carousel__navigation__item[data-direction='prev']::after {
2069
- left: 0;
2070
- }
2003
+ .charcoal-switch-input:not(:disabled)::after:hover {
2004
+ background-color: var(--charcoal-color-icon-on-primary-hover);
2005
+ }
2071
2006
 
2072
- .charcoal-carousel__navigation__item[data-direction='next'] {
2073
- grid-column: 3;
2074
- justify-self: center;
2075
- }
2007
+ .charcoal-switch-input:not(:disabled)::after:active {
2008
+ background-color: var(--charcoal-color-icon-on-primary-press);
2009
+ }
2076
2010
 
2077
- .charcoal-carousel__navigation__item[data-direction='next']::after {
2078
- right: 0;
2079
- }
2011
+ .charcoal-switch-input:not(:disabled):checked:hover {
2012
+ background-color: var(--charcoal-color-container-primary-hover);
2013
+ }
2014
+
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;
2080
2028
 
2081
- /* スクロール端では非表示。IconButton の disabled スタイル(opacity:0.32)より
2082
- 高い詳細度で打ち消すため、ルートを前置する。 */
2083
- .charcoal-carousel .charcoal-carousel__navigation__item[data-hidden='true'] {
2084
- opacity: 0;
2085
- pointer-events: none;
2029
+ background-color: var(--charcoal-color-container-default);
2030
+ border-radius: 24px;
2086
2031
  }
2087
2032
 
2088
- /* タッチデバイスではナビゲーションボタンを出さず、スワイプ操作に委ねる。 */
2089
- @media (hover: none) and (pointer: coarse) {
2090
- .charcoal-carousel__navigation {
2091
- display: none;
2092
- }
2033
+ .charcoal-modal-dialog[data-size='S'] {
2034
+ width: 336px;
2093
2035
  }
2094
2036
 
2095
- /* ── Indicator: JS Fallback ── */
2037
+ .charcoal-modal-dialog[data-size='M'] {
2038
+ width: 440px;
2039
+ }
2096
2040
 
2097
- .charcoal-carousel__indicator {
2098
- display: flex;
2099
- justify-content: center;
2100
- align-items: center;
2101
- height: 40px;
2102
- gap: 8px;
2041
+ .charcoal-modal-dialog[data-size='L'] {
2042
+ width: 648px;
2103
2043
  }
2104
2044
 
2105
- .charcoal-carousel__indicator[data-visible='false'] {
2106
- display: none;
2045
+ @media (max-width: 743px) {
2046
+ .charcoal-modal-dialog {
2047
+ max-width: 440px;
2048
+ width: calc(100% - 48px);
2107
2049
  }
2108
2050
 
2109
- .charcoal-carousel__indicator__item {
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
+ }
2058
+
2059
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2060
+ min-height: 100%;
2061
+ }
2062
+ }
2063
+
2064
+ .charcoal-modal-dialog:focus {
2065
+ outline: none;
2066
+ }
2067
+ .charcoal-checkbox-input {
2110
2068
  -webkit-appearance: none;
2111
2069
  -moz-appearance: none;
2112
2070
  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);
2071
+ display: flex;
2120
2072
  cursor: pointer;
2121
- transition: 0.2s background-color;
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;
2122
2082
  }
2123
2083
 
2124
- .charcoal-carousel__indicator__item:hover {
2125
- background-color: var(--charcoal-color-text-secondary-default);
2126
- }
2084
+ .charcoal-checkbox-input:disabled,
2085
+ .charcoal-checkbox-input[readonly] {
2086
+ opacity: 0.32;
2087
+ cursor: default;
2088
+ }
2127
2089
 
2128
- .charcoal-carousel__indicator__item:focus-visible {
2129
- outline: 2px solid rgba(0, 150, 250, 0.56);
2130
- outline-offset: 2px;
2131
- }
2090
+ .charcoal-checkbox-input:checked {
2091
+ background-color: var(--charcoal-color-container-primary-default);
2092
+ }
2132
2093
 
2133
- .charcoal-carousel__indicator__item[data-active='true'] {
2134
- background-color: var(--charcoal-color-text-default);
2135
- }
2094
+ .charcoal-checkbox-input:checked::after {
2095
+ content: '';
2096
+ background-color: white;
2097
+ display: flex;
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
+ );
2104
+ }
2136
2105
 
2137
- /* ── CSS Scroll Markers (progressive enhancement) ── */
2106
+ .charcoal-checkbox-input:not(:checked) {
2107
+ border-width: 2px;
2108
+ border-style: solid;
2109
+ border-color: var(--charcoal-color-border-default);
2110
+ }
2138
2111
 
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
- }
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;
2121
+ }
2146
2122
 
2147
- .charcoal-carousel__scroller {
2148
- anchor-name: --charcoal-carousel;
2149
- scroll-marker-group: after;
2150
- }
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
+ }
2151
2129
 
2152
- .charcoal-carousel__scroller::scroll-button(*) {
2153
- content: none;
2154
- }
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
+ }
2155
2134
 
2156
- .charcoal-carousel__scroller::scroll-marker-group {
2157
- display: flex;
2158
- justify-content: center;
2159
- align-items: center;
2160
- height: 40px;
2161
- gap: 8px;
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;
2139
+ }
2162
2140
 
2163
- position: absolute;
2164
- position-anchor: --charcoal-carousel;
2165
- top: anchor(bottom);
2166
- justify-self: anchor-center;
2167
- }
2141
+ .charcoal-checkbox-input[data-rounded='true']:checked {
2142
+ background-color: var(--charcoal-color-container-primary-default);
2143
+ }
2168
2144
 
2169
- .charcoal-carousel[data-indicator='false'] .charcoal-carousel__scroller {
2170
- scroll-marker-group: none;
2171
- }
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
+ }
2172
2151
 
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
- }
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
+ }
2183
2155
 
2184
- .charcoal-carousel__item::scroll-marker:hover {
2185
- background-color: var(--charcoal-color-text-secondary-default);
2186
- }
2156
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):hover {
2157
+ background-color: var(--charcoal-color-container-primary-hover);
2158
+ }
2159
+ .charcoal-checkbox-input[data-rounded='true']:checked:not(:disabled):active {
2160
+ background-color: var(--charcoal-color-container-primary-press);
2161
+ }
2187
2162
 
2188
- .charcoal-carousel__item::scroll-marker:focus {
2189
- outline: 2px solid rgba(0, 150, 250, 0.56);
2190
- outline-offset: 2px;
2191
- }
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);
2168
+ }
2192
2169
 
2193
- .charcoal-carousel__item::scroll-marker:target-current {
2194
- background-color: var(--charcoal-color-text-default);
2195
- }
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;
2180
+ }
2181
+ .charcoal-list-item {
2182
+ list-style: none;
2183
+ display: flex;
2184
+ align-items: center;
2185
+ min-height: 40px;
2186
+ cursor: pointer;
2187
+ outline: none;
2196
2188
 
2197
- .charcoal-carousel__indicator {
2198
- display: none;
2199
- }
2189
+ padding-right: 16px;
2190
+ padding-left: 16px;
2191
+
2192
+ transition: background-color 0.2s;
2193
+ }
2194
+
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);
2199
+ }
2200
+
2201
+ .charcoal-list-item[aria-disabled='true'] {
2202
+ opacity: 0.32;
2203
+ cursor: default;
2204
+ }
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
- }