@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
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { useClassNames } from "../../_lib/useClassNames.js";
3
+ /* empty css */
4
+ import { forwardRef, memo, useImperativeHandle, useRef } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+
7
+ //#region src/components/LoadingSpinner/index.tsx
8
+ const LoadingSpinner = forwardRef(function LoadingSpinnerInner({ size = 48, padding = 16, transparent = false, ...props }, ref) {
9
+ const classNames = useClassNames("charcoal-loading-spinner", props.className);
10
+ return /* @__PURE__ */ jsx("div", {
11
+ role: "progressbar",
12
+ style: {
13
+ "--charcoal-loading-spinner-size": `${size}px`,
14
+ "--charcoal-loading-spinner-padding": `${padding}px`
15
+ },
16
+ "data-transparent": transparent,
17
+ className: classNames,
18
+ ref,
19
+ children: /* @__PURE__ */ jsx(LoadingSpinnerIcon, {})
20
+ });
21
+ });
22
+ var LoadingSpinner_default = memo(LoadingSpinner);
23
+ const LoadingSpinnerIcon = forwardRef(function LoadingSpinnerIcon({ once = false }, ref) {
24
+ const iconRef = useRef(null);
25
+ useImperativeHandle(ref, () => ({ restart: () => {
26
+ if (!iconRef.current) return;
27
+ iconRef.current.dataset.resetAnimation = "true";
28
+ iconRef.current.offsetWidth;
29
+ delete iconRef.current.dataset.resetAnimation;
30
+ } }));
31
+ return /* @__PURE__ */ jsx("div", {
32
+ role: "presentation",
33
+ ref: iconRef,
34
+ "data-once": once,
35
+ className: "charcoal-loading-spinner-icon"
36
+ });
37
+ });
38
+
39
+ //#endregion
40
+ export { LoadingSpinnerIcon, LoadingSpinner_default as default };
41
+ //# sourceMappingURL=index2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.js","names":["forwardRef","useImperativeHandle","useRef","memo","useClassNames","LoadingSpinnerProps","size","padding","transparent","className","LoadingSpinner","HTMLDivElement","LoadingSpinnerInner","props","ref","classNames","Props","once","LoadingSpinnerIconHandler","restart","LoadingSpinnerIcon","iconRef","current","dataset","resetAnimation","offsetWidth"],"sources":["../../../src/components/LoadingSpinner/index.tsx"],"sourcesContent":["import { forwardRef, useImperativeHandle, useRef, memo } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\n\nexport type LoadingSpinnerProps = {\n readonly size?: number\n readonly padding?: number\n readonly transparent?: boolean\n readonly className?: string\n}\n\nconst LoadingSpinner = forwardRef<HTMLDivElement, LoadingSpinnerProps>(\n function LoadingSpinnerInner(\n { size = 48, padding = 16, transparent = false, ...props },\n ref,\n ) {\n const classNames = useClassNames(\n 'charcoal-loading-spinner',\n props.className,\n )\n\n return (\n <div\n role=\"progressbar\"\n style={{\n '--charcoal-loading-spinner-size': `${size}px`,\n '--charcoal-loading-spinner-padding': `${padding}px`,\n }}\n data-transparent={transparent}\n className={classNames}\n ref={ref}\n >\n <LoadingSpinnerIcon />\n </div>\n )\n },\n)\n\nexport default memo(LoadingSpinner)\n\ntype Props = {\n once?: boolean\n}\n\nexport interface LoadingSpinnerIconHandler {\n restart(): void\n}\n\nexport const LoadingSpinnerIcon = forwardRef<LoadingSpinnerIconHandler, Props>(\n function LoadingSpinnerIcon({ once = false }, ref) {\n const iconRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => ({\n restart: () => {\n if (!iconRef.current) {\n return\n }\n iconRef.current.dataset.resetAnimation = 'true'\n // Force reflow hack!\n void iconRef.current.offsetWidth\n delete iconRef.current.dataset.resetAnimation\n },\n }))\n\n return (\n <div\n role=\"presentation\"\n ref={iconRef}\n data-once={once}\n className=\"charcoal-loading-spinner-icon\"\n />\n )\n },\n)\n"],"mappings":";;;;;;;AAYA,MAAMU,iBAAiBV,WACrB,SAASY,oBACP,EAAEN,OAAO,IAAIC,UAAU,IAAIC,cAAc,OAAO,GAAGK,SACnDC,KACA;CACA,MAAMC,aAAaX,cACjB,4BACAS,MAAMJ,UACP;CAED,OACE,oBAAC,OAAD;EACE,MAAK;EACL,OAAO;GACL,mCAAmC,GAAGH,KAAI;GAC1C,sCAAsC,GAAGC,QAAO;GACjD;EACD,oBAAkBC;EAClB,WAAWO;EACND;YAEL,oBAAC,oBAAD,EAAmB;EACf;EAGX;AAED,6BAAeX,KAAKO,eAAe;AAUnC,MAAaU,qBAAqBpB,WAChC,SAASoB,mBAAmB,EAAEH,OAAO,SAASH,KAAK;CACjD,MAAMO,UAAUnB,OAAuB,KAAK;CAE5CD,oBAAoBa,YAAY,EAC9BK,eAAe;EACb,IAAI,CAACE,QAAQC,SACX;EAEFD,QAAQC,QAAQC,QAAQC,iBAAiB;EAEzC,AAAKH,QAAQC,QAAQG;EACrB,OAAOJ,QAAQC,QAAQC,QAAQC;IAElC,EAAE;CAEH,OACE,oBAAC,OAAD;EACE,MAAK;EACL,KAAKH;EACL,aAAWJ;EACX,WAAU;EACV;EAGP"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
3
+ const require_useClassNames = require('../../../_lib/useClassNames.cjs');
4
+ const require_useForwardedRef = require('../../../_lib/useForwardedRef.cjs');
5
+ require('./index.cjs');
6
+ let react = require("react");
7
+ react = require_runtime.__toESM(react);
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ let react_aria_useDialog = require("react-aria/useDialog");
10
+
11
+ //#region src/components/Modal/Dialog/index.tsx
12
+ const Dialog = (0, react.forwardRef)(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {
13
+ const ref = require_useForwardedRef.useForwardedRef(forwardRef);
14
+ const { dialogProps } = (0, react_aria_useDialog.useDialog)({ role: "dialog" }, ref);
15
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
+ className: require_useClassNames.useClassNames("charcoal-modal-dialog", className),
17
+ role: dialogProps.role,
18
+ "data-bottom-sheet": bottomSheet,
19
+ tabIndex: dialogProps.tabIndex,
20
+ "aria-labelledby": dialogProps["aria-labelledby"],
21
+ onBlur: dialogProps.onBlur,
22
+ "data-size": size,
23
+ ref,
24
+ ...props
25
+ });
26
+ });
27
+
28
+ //#endregion
29
+ exports.Dialog = Dialog;
30
+ //# sourceMappingURL=index2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.cjs","names":["forwardRef","React","useDialog","useForwardedRef","Size","BottomSheet","useClassNames","Dialog","HTMLDivElement","ComponentPropsWithoutRef","size","bottomSheet","className","props","ref","dialogProps","role","classNames","tabIndex","onBlur"],"sources":["../../../../src/components/Modal/Dialog/index.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport * as React from 'react'\nimport { useDialog } from 'react-aria/useDialog'\nimport { useForwardedRef } from '../../../_lib/useForwardedRef'\nimport { Size, BottomSheet } from '..'\n\nimport './index.css'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport const Dialog = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<'div'> & {\n size: Size\n bottomSheet: BottomSheet\n }\n>(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {\n const ref = useForwardedRef(forwardRef)\n const { dialogProps } = useDialog(\n {\n role: 'dialog',\n },\n ref,\n )\n\n const classNames = useClassNames('charcoal-modal-dialog', className)\n return (\n <div\n className={classNames}\n role={dialogProps.role}\n data-bottom-sheet={bottomSheet}\n tabIndex={dialogProps.tabIndex}\n aria-labelledby={dialogProps['aria-labelledby']}\n onBlur={dialogProps.onBlur}\n data-size={size}\n ref={ref}\n {...props}\n />\n )\n})\n"],"mappings":";;;;;;;;;;;AASA,MAAaO,+BAMX,SAASA,OAAO,EAAEG,MAAMC,aAAaC,WAAW,GAAGC,SAASb,YAAY;CACxE,MAAMc,MAAMX,wCAAgBH,WAAW;CACvC,MAAM,EAAEe,oDACN,EACEC,MAAM,UACP,EACDF,IACD;CAGD,OACE,2CAAC,OAAD;EACE,WAHeR,oCAAc,yBAAyBM,UAGjC;EACrB,MAAMG,YAAYC;EAClB,qBAAmBL;EACnB,UAAUI,YAAYG;EACtB,mBAAiBH,YAAY;EAC7B,QAAQA,YAAYI;EACpB,aAAWT;EACNI;EACL,GAAID;EACJ;EAEJ"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { useClassNames } from "../../../_lib/useClassNames.js";
3
+ import { useForwardedRef } from "../../../_lib/useForwardedRef.js";
4
+ /* empty css */
5
+ import { forwardRef } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { useDialog } from "react-aria/useDialog";
8
+
9
+ //#region src/components/Modal/Dialog/index.tsx
10
+ const Dialog = forwardRef(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {
11
+ const ref = useForwardedRef(forwardRef);
12
+ const { dialogProps } = useDialog({ role: "dialog" }, ref);
13
+ return /* @__PURE__ */ jsx("div", {
14
+ className: useClassNames("charcoal-modal-dialog", className),
15
+ role: dialogProps.role,
16
+ "data-bottom-sheet": bottomSheet,
17
+ tabIndex: dialogProps.tabIndex,
18
+ "aria-labelledby": dialogProps["aria-labelledby"],
19
+ onBlur: dialogProps.onBlur,
20
+ "data-size": size,
21
+ ref,
22
+ ...props
23
+ });
24
+ });
25
+
26
+ //#endregion
27
+ export { Dialog };
28
+ //# sourceMappingURL=index2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.js","names":["forwardRef","React","useDialog","useForwardedRef","Size","BottomSheet","useClassNames","Dialog","HTMLDivElement","ComponentPropsWithoutRef","size","bottomSheet","className","props","ref","dialogProps","role","classNames","tabIndex","onBlur"],"sources":["../../../../src/components/Modal/Dialog/index.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport * as React from 'react'\nimport { useDialog } from 'react-aria/useDialog'\nimport { useForwardedRef } from '../../../_lib/useForwardedRef'\nimport { Size, BottomSheet } from '..'\n\nimport './index.css'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport const Dialog = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<'div'> & {\n size: Size\n bottomSheet: BottomSheet\n }\n>(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {\n const ref = useForwardedRef(forwardRef)\n const { dialogProps } = useDialog(\n {\n role: 'dialog',\n },\n ref,\n )\n\n const classNames = useClassNames('charcoal-modal-dialog', className)\n return (\n <div\n className={classNames}\n role={dialogProps.role}\n data-bottom-sheet={bottomSheet}\n tabIndex={dialogProps.tabIndex}\n aria-labelledby={dialogProps['aria-labelledby']}\n onBlur={dialogProps.onBlur}\n data-size={size}\n ref={ref}\n {...props}\n />\n )\n})\n"],"mappings":";;;;;;;;;AASA,MAAaO,SAASP,WAMpB,SAASO,OAAO,EAAEG,MAAMC,aAAaC,WAAW,GAAGC,SAASb,YAAY;CACxE,MAAMc,MAAMX,gBAAgBH,WAAW;CACvC,MAAM,EAAEe,gBAAgBb,UACtB,EACEc,MAAM,UACP,EACDF,IACD;CAGD,OACE,oBAAC,OAAD;EACE,WAHeR,cAAc,yBAAyBM,UAGjC;EACrB,MAAMG,YAAYC;EAClB,qBAAmBL;EACnB,UAAUI,YAAYG;EACtB,mBAAiBH,YAAY;EAC7B,QAAQA,YAAYI;EACpB,aAAWT;EACNI;EACL,GAAID;EACJ;EAEJ"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ let react = require("react");
4
+ react = require_runtime.__toESM(react);
5
+
6
+ //#region src/components/Modal/ModalBackgroundContext.tsx
7
+ /**
8
+ * ModalBackgroundのElementが入ったコンテキスト
9
+ */
10
+ const ModalBackgroundContext = react.createContext(null);
11
+
12
+ //#endregion
13
+ exports.ModalBackgroundContext = ModalBackgroundContext;
14
+ //# sourceMappingURL=ModalBackgroundContext.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalBackgroundContext.cjs","names":["React","ModalBackgroundContext","createContext","HTMLElement"],"sources":["../../../src/components/Modal/ModalBackgroundContext.tsx"],"sourcesContent":["import * as React from 'react'\n\n/**\n * ModalBackgroundのElementが入ったコンテキスト\n */\nexport const ModalBackgroundContext = React.createContext<HTMLElement | null>(\n null,\n)\n"],"mappings":";;;;;;;;;AAKA,MAAaC,yBAAyBD,MAAME,cAC1C,KACD"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import * as React$1 from "react";
3
+
4
+ //#region src/components/Modal/ModalBackgroundContext.tsx
5
+ /**
6
+ * ModalBackgroundのElementが入ったコンテキスト
7
+ */
8
+ const ModalBackgroundContext = React$1.createContext(null);
9
+
10
+ //#endregion
11
+ export { ModalBackgroundContext };
12
+ //# sourceMappingURL=ModalBackgroundContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalBackgroundContext.js","names":["React","ModalBackgroundContext","createContext","HTMLElement"],"sources":["../../../src/components/Modal/ModalBackgroundContext.tsx"],"sourcesContent":["import * as React from 'react'\n\n/**\n * ModalBackgroundのElementが入ったコンテキスト\n */\nexport const ModalBackgroundContext = React.createContext<HTMLElement | null>(\n null,\n)\n"],"mappings":";;;;;;;AAKA,MAAaC,yBAAyBD,QAAME,cAC1C,KACD"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_createDivComponent = require('../../_lib/createDivComponent.cjs');
4
+ const require_index = require('./index2.cjs');
5
+ require('./ModalPlumbing.cjs');
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+
9
+ //#region src/components/Modal/ModalPlumbing.tsx
10
+ function ModalHeader() {
11
+ const modalCtx = (0, react.useContext)(require_index.ModalContext);
12
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13
+ className: "charcoal-modal-header-root",
14
+ "data-bottom-sheet": modalCtx.bottomSheet,
15
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
+ className: "charcoal-modal-header-title",
17
+ children: modalCtx.title
18
+ })
19
+ });
20
+ }
21
+ const ModalAlign = require_createDivComponent.createDivComponent("charcoal-modal-align");
22
+ const ModalBody = require_createDivComponent.createDivComponent("charcoal-modal-body");
23
+ const ModalButtons = require_createDivComponent.createDivComponent("charcoal-modal-buttons");
24
+
25
+ //#endregion
26
+ exports.ModalAlign = ModalAlign;
27
+ exports.ModalBody = ModalBody;
28
+ exports.ModalButtons = ModalButtons;
29
+ exports.ModalHeader = ModalHeader;
30
+ //# sourceMappingURL=ModalPlumbing2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalPlumbing2.cjs","names":["ModalContext","useContext","createDivComponent","ModalHeader","modalCtx","bottomSheet","title","ModalAlign","ModalBody","ModalButtons"],"sources":["../../../src/components/Modal/ModalPlumbing.tsx"],"sourcesContent":["import { ModalContext } from '.'\nimport { useContext } from 'react'\n\nimport './ModalPlumbing.css'\nimport { createDivComponent } from '../../_lib/createDivComponent'\n\nexport function ModalHeader() {\n const modalCtx = useContext(ModalContext)\n return (\n <div\n className=\"charcoal-modal-header-root\"\n data-bottom-sheet={modalCtx.bottomSheet}\n >\n <div className=\"charcoal-modal-header-title\">{modalCtx.title}</div>\n </div>\n )\n}\n\nexport const ModalAlign = createDivComponent('charcoal-modal-align')\n\nexport const ModalBody = createDivComponent('charcoal-modal-body')\n\nexport const ModalButtons = createDivComponent('charcoal-modal-buttons')\n"],"mappings":";;;;;;;;;AAMA,SAAgBG,cAAc;CAC5B,MAAMC,iCAAsBJ,2BAAa;CACzC,OACE,2CAAC,OAAD;EACE,WAAU;EACV,qBAAmBI,SAASC;YAE5B,2CAAC,OAAD;GAAK,WAAU;aAA+BD,SAASE;GAAW;EAC9D;;AAIV,MAAaC,aAAaL,8CAAmB,uBAAuB;AAEpE,MAAaM,YAAYN,8CAAmB,sBAAsB;AAElE,MAAaO,eAAeP,8CAAmB,yBAAyB"}
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { createDivComponent } from "../../_lib/createDivComponent.js";
3
+ import { ModalContext } from "./index2.js";
4
+ /* empty css */
5
+ import { useContext } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/components/Modal/ModalPlumbing.tsx
9
+ function ModalHeader() {
10
+ const modalCtx = useContext(ModalContext);
11
+ return /* @__PURE__ */ jsx("div", {
12
+ className: "charcoal-modal-header-root",
13
+ "data-bottom-sheet": modalCtx.bottomSheet,
14
+ children: /* @__PURE__ */ jsx("div", {
15
+ className: "charcoal-modal-header-title",
16
+ children: modalCtx.title
17
+ })
18
+ });
19
+ }
20
+ const ModalAlign = createDivComponent("charcoal-modal-align");
21
+ const ModalBody = createDivComponent("charcoal-modal-body");
22
+ const ModalButtons = createDivComponent("charcoal-modal-buttons");
23
+
24
+ //#endregion
25
+ export { ModalAlign, ModalBody, ModalButtons, ModalHeader };
26
+ //# sourceMappingURL=ModalPlumbing2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalPlumbing2.js","names":["ModalContext","useContext","createDivComponent","ModalHeader","modalCtx","bottomSheet","title","ModalAlign","ModalBody","ModalButtons"],"sources":["../../../src/components/Modal/ModalPlumbing.tsx"],"sourcesContent":["import { ModalContext } from '.'\nimport { useContext } from 'react'\n\nimport './ModalPlumbing.css'\nimport { createDivComponent } from '../../_lib/createDivComponent'\n\nexport function ModalHeader() {\n const modalCtx = useContext(ModalContext)\n return (\n <div\n className=\"charcoal-modal-header-root\"\n data-bottom-sheet={modalCtx.bottomSheet}\n >\n <div className=\"charcoal-modal-header-title\">{modalCtx.title}</div>\n </div>\n )\n}\n\nexport const ModalAlign = createDivComponent('charcoal-modal-align')\n\nexport const ModalBody = createDivComponent('charcoal-modal-body')\n\nexport const ModalButtons = createDivComponent('charcoal-modal-buttons')\n"],"mappings":";;;;;;;;AAMA,SAAgBG,cAAc;CAC5B,MAAMC,WAAWH,WAAWD,aAAa;CACzC,OACE,oBAAC,OAAD;EACE,WAAU;EACV,qBAAmBI,SAASC;YAE5B,oBAAC,OAAD;GAAK,WAAU;aAA+BD,SAASE;GAAW;EAC9D;;AAIV,MAAaC,aAAaL,mBAAmB,uBAAuB;AAEpE,MAAaM,YAAYN,mBAAmB,sBAAsB;AAElE,MAAaO,eAAeP,mBAAmB,yBAAyB"}
@@ -0,0 +1,121 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_index = require('../IconButton/index2.cjs');
4
+ const require_index$1 = require('./Dialog/index2.cjs');
5
+ const require_ModalBackgroundContext = require('./ModalBackgroundContext.cjs');
6
+ const require_useCustomModalOverlay = require('./useCustomModalOverlay.cjs');
7
+ const require_useTransitionPresence = require('./useTransitionPresence.cjs');
8
+ require('./index.cjs');
9
+ let react = require("react");
10
+ react = require_runtime.__toESM(react);
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
+ let react_aria_Overlay = require("react-aria/Overlay");
13
+ let react_aria_useObjectRef = require("react-aria/useObjectRef");
14
+
15
+ //#region src/components/Modal/index.tsx
16
+ const DEFAULT_Z_INDEX = 10;
17
+ /**
18
+ * モーダルコンポーネント。
19
+ *
20
+ * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する
21
+ * ```tsx
22
+ * import {
23
+ * OverlayProvider,
24
+ * Modal,
25
+ * ModalHeader,
26
+ * ModalBody,
27
+ * ModalButtons
28
+ * } from '@charcoal-ui/react'
29
+ *
30
+ * <OverlayProvider>
31
+ * <App>
32
+ * <Modal title="Title" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>
33
+ * <ModalHeader />
34
+ * <ModalBody>
35
+ * ...
36
+ * <ModalButtons>...</ModalButtons>
37
+ * </ModalBody>
38
+ * </Modal>
39
+ * </App>
40
+ * </OverlayProvider>
41
+ * ```
42
+ */
43
+ const Modal = (0, react.forwardRef)(function ModalInner({ children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props }, external) {
44
+ const { title, size = "M", bottomSheet = false, isDismissable, onClose, className, isOpen = false, closeButtonAriaLabel = "Close" } = props;
45
+ const ref = (0, react_aria_useObjectRef.useObjectRef)(external);
46
+ const { modalProps, underlayProps } = require_useCustomModalOverlay.useCharcoalModalOverlay({
47
+ ...props,
48
+ isKeyboardDismissDisabled: isDismissable === void 0 || isDismissable === false
49
+ }, {
50
+ onClose,
51
+ isOpen
52
+ }, ref);
53
+ const isMobile = (require_useCustomModalOverlay.useWindowWidth() ?? Infinity) < 744;
54
+ const transitionEnabled = isMobile && bottomSheet !== false;
55
+ const showDismiss = !isMobile || bottomSheet !== true;
56
+ const bgRef = react.useRef(null);
57
+ const { isPresent, animationState, handleTransitionEnd } = require_useTransitionPresence.useTransitionPresence(isOpen, transitionEnabled, bgRef, ref);
58
+ const handleClick = react.useCallback((e) => {
59
+ if (e.currentTarget === e.target) onClose();
60
+ }, [onClose]);
61
+ if (!isPresent) return null;
62
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_Overlay.Overlay, {
63
+ portalContainer,
64
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
65
+ className: "charcoal-modal-background",
66
+ ref: bgRef,
67
+ ...underlayProps,
68
+ style: { zIndex },
69
+ "data-bottom-sheet": bottomSheet,
70
+ "data-animation": transitionEnabled ? animationState : void 0,
71
+ onClick: handleClick,
72
+ onTransitionEnd: handleTransitionEnd,
73
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ModalBackgroundContext.ModalBackgroundContext.Provider, {
74
+ value: bgRef.current,
75
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.Dialog, {
76
+ ref,
77
+ ...modalProps,
78
+ size,
79
+ bottomSheet,
80
+ className,
81
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ModalContext.Provider, {
82
+ value: {
83
+ titleProps: {},
84
+ title,
85
+ close: onClose,
86
+ showDismiss,
87
+ bottomSheet
88
+ },
89
+ children: [children, isDismissable === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalCloseButton, {
90
+ "aria-label": closeButtonAriaLabel,
91
+ onClick: onClose
92
+ })]
93
+ })
94
+ })
95
+ })
96
+ })
97
+ });
98
+ });
99
+ var Modal_default = (0, react.memo)(Modal);
100
+ const ModalContext = react.createContext({
101
+ titleProps: {},
102
+ title: "",
103
+ close: void 0,
104
+ showDismiss: true,
105
+ bottomSheet: false
106
+ });
107
+ function ModalCloseButton(props) {
108
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
109
+ className: "charcoal-modal-close-button",
110
+ size: "S",
111
+ icon: "24/Close",
112
+ type: "button",
113
+ ...props
114
+ });
115
+ }
116
+
117
+ //#endregion
118
+ exports.ModalCloseButton = ModalCloseButton;
119
+ exports.ModalContext = ModalContext;
120
+ exports.default = Modal_default;
121
+ //# sourceMappingURL=index2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.cjs","names":["useContext","forwardRef","memo","React","AriaDialogProps","Button","ButtonProps","IconButton","IconButtonProps","Dialog","ModalBackgroundContext","CharcoalModalOverlayProps","useCharcoalModalOverlay","useWindowWidth","useTransitionPresence","Overlay","useObjectRef","BottomSheet","Size","ModalProps","children","ReactNode","zIndex","title","size","bottomSheet","isOpen","onClose","className","closeButtonAriaLabel","portalContainer","HTMLElement","DEFAULT_Z_INDEX","Modal","HTMLDivElement","ModalInner","props","external","isDismissable","ref","modalProps","underlayProps","isKeyboardDismissDisabled","undefined","isMobile","Infinity","transitionEnabled","showDismiss","bgRef","useRef","isPresent","animationState","handleTransitionEnd","handleClick","useCallback","e","MouseEvent","currentTarget","target","current","titleProps","close","ModalContext","createContext","HTMLAttributes","ModalCloseButton","Omit","ModalDismissButton"],"sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport type { AriaDialogProps } from 'react-aria/useDialog'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\nimport { useTransitionPresence } from './useTransitionPresence'\n\nimport './index.css'\n\nimport { Overlay } from 'react-aria/Overlay'\nimport { useObjectRef } from 'react-aria/useObjectRef'\n\nexport type BottomSheet = boolean | 'full'\nexport type Size = 'S' | 'M' | 'L'\n\nexport type ModalProps = CharcoalModalOverlayProps &\n AriaDialogProps & {\n children: React.ReactNode\n zIndex?: number\n title: string\n size?: Size\n bottomSheet?: BottomSheet\n isOpen: boolean\n onClose: () => void\n className?: string\n closeButtonAriaLabel?: string\n\n /**\n * https://github.com/adobe/react-spectrum/issues/3787\n * Next.jsで使用する際に発生するエラーの一時的な回避策でdocument.bodyを指定する必要がある\n */\n portalContainer?: HTMLElement\n }\n\nconst DEFAULT_Z_INDEX = 10\n\n/**\n * モーダルコンポーネント。\n *\n * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する\n * ```tsx\n * import {\n * OverlayProvider,\n * Modal,\n * ModalHeader,\n * ModalBody,\n * ModalButtons\n * } from '@charcoal-ui/react'\n *\n * <OverlayProvider>\n * <App>\n * <Modal title=\"Title\" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>\n * <ModalHeader />\n * <ModalBody>\n * ...\n * <ModalButtons>...</ModalButtons>\n * </ModalBody>\n * </Modal>\n * </App>\n * </OverlayProvider>\n * ```\n */\nconst Modal = forwardRef<HTMLDivElement, ModalProps>(function ModalInner(\n { children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props },\n external,\n) {\n const {\n title,\n size = 'M',\n bottomSheet = false,\n isDismissable,\n onClose,\n className,\n isOpen = false,\n closeButtonAriaLabel = 'Close',\n } = props\n\n const ref = useObjectRef<HTMLDivElement>(external)\n\n const { modalProps, underlayProps } = useCharcoalModalOverlay(\n {\n ...props,\n isKeyboardDismissDisabled:\n isDismissable === undefined || isDismissable === false,\n },\n {\n onClose,\n isOpen,\n },\n ref,\n )\n\n const isMobile = (useWindowWidth() ?? Infinity) < 744\n const transitionEnabled = isMobile && bottomSheet !== false\n const showDismiss = !isMobile || bottomSheet !== true\n\n const bgRef = React.useRef<HTMLDivElement>(null)\n\n const { isPresent, animationState, handleTransitionEnd } =\n useTransitionPresence(isOpen, transitionEnabled, bgRef, ref)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (e.currentTarget === e.target) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!isPresent) {\n return null\n }\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={{ zIndex }}\n data-bottom-sheet={bottomSheet}\n data-animation={transitionEnabled ? animationState : undefined}\n onClick={handleClick}\n onTransitionEnd={handleTransitionEnd}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n <Dialog\n ref={ref}\n {...modalProps}\n size={size}\n bottomSheet={bottomSheet}\n className={className}\n >\n <ModalContext.Provider\n value={{\n titleProps: {},\n title,\n close: onClose,\n showDismiss,\n bottomSheet,\n }}\n >\n {children}\n {isDismissable === true && (\n <ModalCloseButton\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n />\n )}\n </ModalContext.Provider>\n </Dialog>\n </ModalBackgroundContext.Provider>\n </div>\n </Overlay>\n )\n})\n\nexport default memo(Modal)\n\nexport const ModalContext = React.createContext<{\n /**\n * @deprecated\n */\n titleProps: React.HTMLAttributes<HTMLElement>\n title: string\n close?: () => void\n showDismiss: boolean\n bottomSheet: BottomSheet\n}>({\n titleProps: {},\n title: '',\n close: undefined,\n showDismiss: true,\n bottomSheet: false,\n})\n\nexport function ModalCloseButton(props: Omit<IconButtonProps, 'icon'>) {\n return (\n <IconButton\n className=\"charcoal-modal-close-button\"\n size=\"S\"\n icon=\"24/Close\"\n type=\"button\"\n {...props}\n />\n )\n}\n\nexport function ModalDismissButton({ children, ...props }: ButtonProps) {\n const { close, showDismiss } = useContext(ModalContext)\n\n if (!showDismiss) {\n return null\n }\n\n return (\n <Button {...props} onClick={close} fullWidth>\n {children}\n </Button>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyCA,MAAMgC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BxB,MAAMC,8BAA+C,SAASE,WAC5D,EAAEf,UAAUE,SAASU,iBAAiBF,iBAAiB,GAAGM,SAC1DC,UACA;CACA,MAAM,EACJd,OACAC,OAAO,KACPC,cAAc,OACda,eACAX,SACAC,WACAF,SAAS,OACTG,uBAAuB,YACrBO;CAEJ,MAAMG,gDAAmCF,SAAS;CAElD,MAAM,EAAEG,YAAYC,kBAAkB7B,sDACpC;EACE,GAAGwB;EACHM,2BACEJ,kBAAkBK,UAAaL,kBAAkB;EACpD,EACD;EACEX;EACAD;EACD,EACDa,IACD;CAED,MAAMK,YAAY/B,8CAAgB,IAAIgC,YAAY;CAClD,MAAMC,oBAAoBF,YAAYnB,gBAAgB;CACtD,MAAMsB,cAAc,CAACH,YAAYnB,gBAAgB;CAEjD,MAAMuB,QAAQ7C,MAAM8C,OAAuB,KAAK;CAEhD,MAAM,EAAEC,WAAWC,gBAAgBC,wBACjCtC,oDAAsBY,QAAQoB,mBAAmBE,OAAOT,IAAI;CAE9D,MAAMc,cAAclD,MAAMmD,aACvBC,MAAoD;EACnD,IAAIA,EAAEE,kBAAkBF,EAAEG,QACxB/B,SAAS;IAGb,CAACA,QACH,CAAC;CAED,IAAI,CAACuB,WACH,OAAO;CAGT,OACE,2CAAC,4BAAD;EAA0BpB;YACxB,2CAAC,OAAD;GACE,WAAU;GACV,KAAKkB;GACL,GAAIP;GACJ,OAAO,EAAEnB,QAAQ;GACjB,qBAAmBG;GACnB,kBAAgBqB,oBAAoBK,iBAAiBR;GACrD,SAASU;GACT,iBAAiBD;aAEjB,2CAAC,sDAAuB,UAAxB;IAAiC,OAAOJ,MAAMW;cAC5C,2CAAC,wBAAD;KACOpB;KACL,GAAIC;KACEhB;KACOC;KACFG;eAEX,4CAAC,aAAa,UAAd;MACE,OAAO;OACLgC,YAAY,EAAE;OACdrC;OACAsC,OAAOlC;OACPoB;OACAtB;OACD;gBAPH,CASGL,UACAkB,kBAAkB,QACjB,2CAAC,kBAAD;OACE,cAAYT;OACZ,SAASF;OAEZ,EACoB;;KACjB;IACuB;GAC9B;EACG;EAEZ;AAEF,oCAAoBM,MAAM;AAE1B,MAAa6B,eAAe3D,MAAM4D,cAS/B;CACDH,YAAY,EAAE;CACdrC,OAAO;CACPsC,OAAOlB;CACPI,aAAa;CACbtB,aAAa;CACd,CAAC;AAEF,SAAgBwC,iBAAiB7B,OAAsC;CACrE,OACE,2CAAC,uBAAD;EACE,WAAU;EACV,MAAK;EACL,MAAK;EACL,MAAK;EACL,GAAIA;EACJ"}
@@ -0,0 +1,118 @@
1
+ "use client";
2
+ import IconButton from "../IconButton/index2.js";
3
+ import { Dialog } from "./Dialog/index2.js";
4
+ import { ModalBackgroundContext } from "./ModalBackgroundContext.js";
5
+ import { useCharcoalModalOverlay, useWindowWidth } from "./useCustomModalOverlay.js";
6
+ import { useTransitionPresence } from "./useTransitionPresence.js";
7
+ /* empty css */
8
+ import * as React$1 from "react";
9
+ import { forwardRef, memo, useContext } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { Overlay } from "react-aria/Overlay";
12
+ import { useObjectRef } from "react-aria/useObjectRef";
13
+
14
+ //#region src/components/Modal/index.tsx
15
+ const DEFAULT_Z_INDEX = 10;
16
+ /**
17
+ * モーダルコンポーネント。
18
+ *
19
+ * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する
20
+ * ```tsx
21
+ * import {
22
+ * OverlayProvider,
23
+ * Modal,
24
+ * ModalHeader,
25
+ * ModalBody,
26
+ * ModalButtons
27
+ * } from '@charcoal-ui/react'
28
+ *
29
+ * <OverlayProvider>
30
+ * <App>
31
+ * <Modal title="Title" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>
32
+ * <ModalHeader />
33
+ * <ModalBody>
34
+ * ...
35
+ * <ModalButtons>...</ModalButtons>
36
+ * </ModalBody>
37
+ * </Modal>
38
+ * </App>
39
+ * </OverlayProvider>
40
+ * ```
41
+ */
42
+ const Modal = forwardRef(function ModalInner({ children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props }, external) {
43
+ const { title, size = "M", bottomSheet = false, isDismissable, onClose, className, isOpen = false, closeButtonAriaLabel = "Close" } = props;
44
+ const ref = useObjectRef(external);
45
+ const { modalProps, underlayProps } = useCharcoalModalOverlay({
46
+ ...props,
47
+ isKeyboardDismissDisabled: isDismissable === void 0 || isDismissable === false
48
+ }, {
49
+ onClose,
50
+ isOpen
51
+ }, ref);
52
+ const isMobile = (useWindowWidth() ?? Infinity) < 744;
53
+ const transitionEnabled = isMobile && bottomSheet !== false;
54
+ const showDismiss = !isMobile || bottomSheet !== true;
55
+ const bgRef = React$1.useRef(null);
56
+ const { isPresent, animationState, handleTransitionEnd } = useTransitionPresence(isOpen, transitionEnabled, bgRef, ref);
57
+ const handleClick = React$1.useCallback((e) => {
58
+ if (e.currentTarget === e.target) onClose();
59
+ }, [onClose]);
60
+ if (!isPresent) return null;
61
+ return /* @__PURE__ */ jsx(Overlay, {
62
+ portalContainer,
63
+ children: /* @__PURE__ */ jsx("div", {
64
+ className: "charcoal-modal-background",
65
+ ref: bgRef,
66
+ ...underlayProps,
67
+ style: { zIndex },
68
+ "data-bottom-sheet": bottomSheet,
69
+ "data-animation": transitionEnabled ? animationState : void 0,
70
+ onClick: handleClick,
71
+ onTransitionEnd: handleTransitionEnd,
72
+ children: /* @__PURE__ */ jsx(ModalBackgroundContext.Provider, {
73
+ value: bgRef.current,
74
+ children: /* @__PURE__ */ jsx(Dialog, {
75
+ ref,
76
+ ...modalProps,
77
+ size,
78
+ bottomSheet,
79
+ className,
80
+ children: /* @__PURE__ */ jsxs(ModalContext.Provider, {
81
+ value: {
82
+ titleProps: {},
83
+ title,
84
+ close: onClose,
85
+ showDismiss,
86
+ bottomSheet
87
+ },
88
+ children: [children, isDismissable === true && /* @__PURE__ */ jsx(ModalCloseButton, {
89
+ "aria-label": closeButtonAriaLabel,
90
+ onClick: onClose
91
+ })]
92
+ })
93
+ })
94
+ })
95
+ })
96
+ });
97
+ });
98
+ var Modal_default = memo(Modal);
99
+ const ModalContext = React$1.createContext({
100
+ titleProps: {},
101
+ title: "",
102
+ close: void 0,
103
+ showDismiss: true,
104
+ bottomSheet: false
105
+ });
106
+ function ModalCloseButton(props) {
107
+ return /* @__PURE__ */ jsx(IconButton, {
108
+ className: "charcoal-modal-close-button",
109
+ size: "S",
110
+ icon: "24/Close",
111
+ type: "button",
112
+ ...props
113
+ });
114
+ }
115
+
116
+ //#endregion
117
+ export { ModalCloseButton, ModalContext, Modal_default as default };
118
+ //# sourceMappingURL=index2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.js","names":["useContext","forwardRef","memo","React","AriaDialogProps","Button","ButtonProps","IconButton","IconButtonProps","Dialog","ModalBackgroundContext","CharcoalModalOverlayProps","useCharcoalModalOverlay","useWindowWidth","useTransitionPresence","Overlay","useObjectRef","BottomSheet","Size","ModalProps","children","ReactNode","zIndex","title","size","bottomSheet","isOpen","onClose","className","closeButtonAriaLabel","portalContainer","HTMLElement","DEFAULT_Z_INDEX","Modal","HTMLDivElement","ModalInner","props","external","isDismissable","ref","modalProps","underlayProps","isKeyboardDismissDisabled","undefined","isMobile","Infinity","transitionEnabled","showDismiss","bgRef","useRef","isPresent","animationState","handleTransitionEnd","handleClick","useCallback","e","MouseEvent","currentTarget","target","current","titleProps","close","ModalContext","createContext","HTMLAttributes","ModalCloseButton","Omit","ModalDismissButton"],"sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport type { AriaDialogProps } from 'react-aria/useDialog'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\nimport { useTransitionPresence } from './useTransitionPresence'\n\nimport './index.css'\n\nimport { Overlay } from 'react-aria/Overlay'\nimport { useObjectRef } from 'react-aria/useObjectRef'\n\nexport type BottomSheet = boolean | 'full'\nexport type Size = 'S' | 'M' | 'L'\n\nexport type ModalProps = CharcoalModalOverlayProps &\n AriaDialogProps & {\n children: React.ReactNode\n zIndex?: number\n title: string\n size?: Size\n bottomSheet?: BottomSheet\n isOpen: boolean\n onClose: () => void\n className?: string\n closeButtonAriaLabel?: string\n\n /**\n * https://github.com/adobe/react-spectrum/issues/3787\n * Next.jsで使用する際に発生するエラーの一時的な回避策でdocument.bodyを指定する必要がある\n */\n portalContainer?: HTMLElement\n }\n\nconst DEFAULT_Z_INDEX = 10\n\n/**\n * モーダルコンポーネント。\n *\n * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する\n * ```tsx\n * import {\n * OverlayProvider,\n * Modal,\n * ModalHeader,\n * ModalBody,\n * ModalButtons\n * } from '@charcoal-ui/react'\n *\n * <OverlayProvider>\n * <App>\n * <Modal title=\"Title\" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>\n * <ModalHeader />\n * <ModalBody>\n * ...\n * <ModalButtons>...</ModalButtons>\n * </ModalBody>\n * </Modal>\n * </App>\n * </OverlayProvider>\n * ```\n */\nconst Modal = forwardRef<HTMLDivElement, ModalProps>(function ModalInner(\n { children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props },\n external,\n) {\n const {\n title,\n size = 'M',\n bottomSheet = false,\n isDismissable,\n onClose,\n className,\n isOpen = false,\n closeButtonAriaLabel = 'Close',\n } = props\n\n const ref = useObjectRef<HTMLDivElement>(external)\n\n const { modalProps, underlayProps } = useCharcoalModalOverlay(\n {\n ...props,\n isKeyboardDismissDisabled:\n isDismissable === undefined || isDismissable === false,\n },\n {\n onClose,\n isOpen,\n },\n ref,\n )\n\n const isMobile = (useWindowWidth() ?? Infinity) < 744\n const transitionEnabled = isMobile && bottomSheet !== false\n const showDismiss = !isMobile || bottomSheet !== true\n\n const bgRef = React.useRef<HTMLDivElement>(null)\n\n const { isPresent, animationState, handleTransitionEnd } =\n useTransitionPresence(isOpen, transitionEnabled, bgRef, ref)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (e.currentTarget === e.target) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!isPresent) {\n return null\n }\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={{ zIndex }}\n data-bottom-sheet={bottomSheet}\n data-animation={transitionEnabled ? animationState : undefined}\n onClick={handleClick}\n onTransitionEnd={handleTransitionEnd}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n <Dialog\n ref={ref}\n {...modalProps}\n size={size}\n bottomSheet={bottomSheet}\n className={className}\n >\n <ModalContext.Provider\n value={{\n titleProps: {},\n title,\n close: onClose,\n showDismiss,\n bottomSheet,\n }}\n >\n {children}\n {isDismissable === true && (\n <ModalCloseButton\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n />\n )}\n </ModalContext.Provider>\n </Dialog>\n </ModalBackgroundContext.Provider>\n </div>\n </Overlay>\n )\n})\n\nexport default memo(Modal)\n\nexport const ModalContext = React.createContext<{\n /**\n * @deprecated\n */\n titleProps: React.HTMLAttributes<HTMLElement>\n title: string\n close?: () => void\n showDismiss: boolean\n bottomSheet: BottomSheet\n}>({\n titleProps: {},\n title: '',\n close: undefined,\n showDismiss: true,\n bottomSheet: false,\n})\n\nexport function ModalCloseButton(props: Omit<IconButtonProps, 'icon'>) {\n return (\n <IconButton\n className=\"charcoal-modal-close-button\"\n size=\"S\"\n icon=\"24/Close\"\n type=\"button\"\n {...props}\n />\n )\n}\n\nexport function ModalDismissButton({ children, ...props }: ButtonProps) {\n const { close, showDismiss } = useContext(ModalContext)\n\n if (!showDismiss) {\n return null\n }\n\n return (\n <Button {...props} onClick={close} fullWidth>\n {children}\n </Button>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAyCA,MAAMgC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BxB,MAAMC,QAAQhC,WAAuC,SAASkC,WAC5D,EAAEf,UAAUE,SAASU,iBAAiBF,iBAAiB,GAAGM,SAC1DC,UACA;CACA,MAAM,EACJd,OACAC,OAAO,KACPC,cAAc,OACda,eACAX,SACAC,WACAF,SAAS,OACTG,uBAAuB,YACrBO;CAEJ,MAAMG,MAAMvB,aAA6BqB,SAAS;CAElD,MAAM,EAAEG,YAAYC,kBAAkB7B,wBACpC;EACE,GAAGwB;EACHM,2BACEJ,kBAAkBK,UAAaL,kBAAkB;EACpD,EACD;EACEX;EACAD;EACD,EACDa,IACD;CAED,MAAMK,YAAY/B,gBAAgB,IAAIgC,YAAY;CAClD,MAAMC,oBAAoBF,YAAYnB,gBAAgB;CACtD,MAAMsB,cAAc,CAACH,YAAYnB,gBAAgB;CAEjD,MAAMuB,QAAQ7C,QAAM8C,OAAuB,KAAK;CAEhD,MAAM,EAAEC,WAAWC,gBAAgBC,wBACjCtC,sBAAsBY,QAAQoB,mBAAmBE,OAAOT,IAAI;CAE9D,MAAMc,cAAclD,QAAMmD,aACvBC,MAAoD;EACnD,IAAIA,EAAEE,kBAAkBF,EAAEG,QACxB/B,SAAS;IAGb,CAACA,QACH,CAAC;CAED,IAAI,CAACuB,WACH,OAAO;CAGT,OACE,oBAAC,SAAD;EAA0BpB;YACxB,oBAAC,OAAD;GACE,WAAU;GACV,KAAKkB;GACL,GAAIP;GACJ,OAAO,EAAEnB,QAAQ;GACjB,qBAAmBG;GACnB,kBAAgBqB,oBAAoBK,iBAAiBR;GACrD,SAASU;GACT,iBAAiBD;aAEjB,oBAAC,uBAAuB,UAAxB;IAAiC,OAAOJ,MAAMW;cAC5C,oBAAC,QAAD;KACOpB;KACL,GAAIC;KACEhB;KACOC;KACFG;eAEX,qBAAC,aAAa,UAAd;MACE,OAAO;OACLgC,YAAY,EAAE;OACdrC;OACAsC,OAAOlC;OACPoB;OACAtB;OACD;gBAPH,CASGL,UACAkB,kBAAkB,QACjB,oBAAC,kBAAD;OACE,cAAYT;OACZ,SAASF;OAEZ,EACoB;;KACjB;IACuB;GAC9B;EACG;EAEZ;AAEF,oBAAezB,KAAK+B,MAAM;AAE1B,MAAa6B,eAAe3D,QAAM4D,cAS/B;CACDH,YAAY,EAAE;CACdrC,OAAO;CACPsC,OAAOlB;CACPI,aAAa;CACbtB,aAAa;CACd,CAAC;AAEF,SAAgBwC,iBAAiB7B,OAAsC;CACrE,OACE,oBAAC,YAAD;EACE,WAAU;EACV,MAAK;EACL,MAAK;EACL,MAAK;EACL,GAAIA;EACJ"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_usePreventScroll = require('../DropdownSelector/Popover/usePreventScroll.cjs');
4
+ let react = require("react");
5
+ react = require_runtime.__toESM(react);
6
+ let react_aria_private_overlays_ariaHideOutside = require("react-aria/private/overlays/ariaHideOutside");
7
+ let react_aria_private_overlays_Overlay = require("react-aria/private/overlays/Overlay");
8
+ let react_aria_useOverlay = require("react-aria/useOverlay");
9
+
10
+ //#region src/components/Modal/useCustomModalOverlay.tsx
11
+ function useCharcoalModalOverlay(props, state, ref) {
12
+ const { overlayProps, underlayProps } = (0, react_aria_useOverlay.useOverlay)({
13
+ ...props,
14
+ isOpen: state.isOpen,
15
+ onClose: state.onClose,
16
+ shouldCloseOnInteractOutside: () => false
17
+ }, ref);
18
+ require_usePreventScroll.usePreventScroll(typeof document !== "undefined" ? document.body : null, state.isOpen, props.overflowClip);
19
+ (0, react_aria_private_overlays_Overlay.useOverlayFocusContain)();
20
+ react.useEffect(() => {
21
+ if (state.isOpen && ref.current) return (0, react_aria_private_overlays_ariaHideOutside.ariaHideOutside)([ref.current]);
22
+ }, [state.isOpen, ref]);
23
+ return {
24
+ modalProps: overlayProps,
25
+ underlayProps
26
+ };
27
+ }
28
+ function isWindowDefined() {
29
+ return typeof window !== "undefined";
30
+ }
31
+ function useWindowWidth() {
32
+ const [width, setWidth] = react.useState(isWindowDefined() ? window.innerWidth : null);
33
+ react.useEffect(() => {
34
+ const handleResize = () => {
35
+ setWidth(window.innerWidth);
36
+ };
37
+ window.addEventListener("resize", handleResize);
38
+ return () => {
39
+ window.removeEventListener("resize", handleResize);
40
+ };
41
+ });
42
+ return width;
43
+ }
44
+
45
+ //#endregion
46
+ exports.useCharcoalModalOverlay = useCharcoalModalOverlay;
47
+ exports.useWindowWidth = useWindowWidth;
48
+ //# sourceMappingURL=useCustomModalOverlay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomModalOverlay.cjs","names":["React","ariaHideOutside","useOverlayFocusContain","usePreventScroll","AriaModalOverlayProps","ModalOverlayAria","useOverlay","CharcoalModalOverlayProps","overflowClip","useCharcoalModalOverlay","props","state","isOpen","onClose","ref","RefObject","HTMLElement","overlayProps","underlayProps","shouldCloseOnInteractOutside","document","body","useEffect","current","modalProps","isWindowDefined","window","useWindowWidth","width","setWidth","useState","innerWidth","handleResize","addEventListener","removeEventListener"],"sources":["../../../src/components/Modal/useCustomModalOverlay.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside'\nimport { useOverlayFocusContain } from 'react-aria/private/overlays/Overlay'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\n\nimport {\n AriaModalOverlayProps,\n ModalOverlayAria,\n} from 'react-aria/useModalOverlay'\nimport { useOverlay } from 'react-aria/useOverlay'\n\n/**\n * We want to enable scrolling on the modal background,\n * but `useModalOverlay` (specifically, `useOverlay` within it) detects pointer events on the scrollbar.\n * Therefore, to prevent this issue, we need to override `shouldCloseOnInteractOutside` in `useModalOverlay`.\n */\nexport type CharcoalModalOverlayProps = AriaModalOverlayProps & {\n overflowClip?: boolean\n}\nexport function useCharcoalModalOverlay(\n props: CharcoalModalOverlayProps,\n state: { isOpen: boolean; onClose: () => void },\n ref: React.RefObject<HTMLElement | null>,\n): ModalOverlayAria {\n const { overlayProps, underlayProps } = useOverlay(\n {\n ...props,\n isOpen: state.isOpen,\n onClose: state.onClose,\n shouldCloseOnInteractOutside: () => false,\n },\n ref,\n )\n\n usePreventScroll(\n typeof document !== 'undefined' ? document.body : null,\n state.isOpen,\n props.overflowClip,\n )\n\n useOverlayFocusContain()\n\n React.useEffect(() => {\n if (state.isOpen && ref.current) {\n return ariaHideOutside([ref.current])\n }\n }, [state.isOpen, ref])\n\n return {\n modalProps: overlayProps,\n underlayProps,\n }\n}\n\nfunction isWindowDefined() {\n return typeof window !== 'undefined'\n}\n\nexport function useWindowWidth() {\n const [width, setWidth] = React.useState(\n isWindowDefined() ? window.innerWidth : null,\n )\n React.useEffect(() => {\n const handleResize = () => {\n setWidth(window.innerWidth)\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n })\n return width\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgBS,wBACdC,OACAC,OACAG,KACkB;CAClB,MAAM,EAAEG,cAAcC,wDACpB;EACE,GAAGR;EACHE,QAAQD,MAAMC;EACdC,SAASF,MAAME;EACfM,oCAAoC;EACrC,EACDL,IACD;CAEDX,0CACE,OAAOiB,aAAa,cAAcA,SAASC,OAAO,MAClDV,MAAMC,QACNF,MAAMF,aACP;CAEDN,iEAAwB;CAExBF,MAAMsB,gBAAgB;EACpB,IAAIX,MAAMC,UAAUE,IAAIS,SACtB,wEAAuB,CAACT,IAAIS,QAAQ,CAAC;IAEtC,CAACZ,MAAMC,QAAQE,IAAI,CAAC;CAEvB,OAAO;EACLU,YAAYP;EACZC;EACD;;AAGH,SAASO,kBAAkB;CACzB,OAAO,OAAOC,WAAW;;AAG3B,SAAgBC,iBAAiB;CAC/B,MAAM,CAACC,OAAOC,YAAY7B,MAAM8B,SAC9BL,iBAAiB,GAAGC,OAAOK,aAAa,KACzC;CACD/B,MAAMsB,gBAAgB;EACpB,MAAMU,qBAAqB;GACzBH,SAASH,OAAOK,WAAW;;EAE7BL,OAAOO,iBAAiB,UAAUD,aAAa;EAC/C,aAAa;GACXN,OAAOQ,oBAAoB,UAAUF,aAAa;;GAEpD;CACF,OAAOJ"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { usePreventScroll } from "../DropdownSelector/Popover/usePreventScroll.js";
3
+ import * as React$1 from "react";
4
+ import { ariaHideOutside } from "react-aria/private/overlays/ariaHideOutside";
5
+ import { useOverlayFocusContain } from "react-aria/private/overlays/Overlay";
6
+ import { useOverlay } from "react-aria/useOverlay";
7
+
8
+ //#region src/components/Modal/useCustomModalOverlay.tsx
9
+ function useCharcoalModalOverlay(props, state, ref) {
10
+ const { overlayProps, underlayProps } = useOverlay({
11
+ ...props,
12
+ isOpen: state.isOpen,
13
+ onClose: state.onClose,
14
+ shouldCloseOnInteractOutside: () => false
15
+ }, ref);
16
+ usePreventScroll(typeof document !== "undefined" ? document.body : null, state.isOpen, props.overflowClip);
17
+ useOverlayFocusContain();
18
+ React$1.useEffect(() => {
19
+ if (state.isOpen && ref.current) return ariaHideOutside([ref.current]);
20
+ }, [state.isOpen, ref]);
21
+ return {
22
+ modalProps: overlayProps,
23
+ underlayProps
24
+ };
25
+ }
26
+ function isWindowDefined() {
27
+ return typeof window !== "undefined";
28
+ }
29
+ function useWindowWidth() {
30
+ const [width, setWidth] = React$1.useState(isWindowDefined() ? window.innerWidth : null);
31
+ React$1.useEffect(() => {
32
+ const handleResize = () => {
33
+ setWidth(window.innerWidth);
34
+ };
35
+ window.addEventListener("resize", handleResize);
36
+ return () => {
37
+ window.removeEventListener("resize", handleResize);
38
+ };
39
+ });
40
+ return width;
41
+ }
42
+
43
+ //#endregion
44
+ export { useCharcoalModalOverlay, useWindowWidth };
45
+ //# sourceMappingURL=useCustomModalOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomModalOverlay.js","names":["React","ariaHideOutside","useOverlayFocusContain","usePreventScroll","AriaModalOverlayProps","ModalOverlayAria","useOverlay","CharcoalModalOverlayProps","overflowClip","useCharcoalModalOverlay","props","state","isOpen","onClose","ref","RefObject","HTMLElement","overlayProps","underlayProps","shouldCloseOnInteractOutside","document","body","useEffect","current","modalProps","isWindowDefined","window","useWindowWidth","width","setWidth","useState","innerWidth","handleResize","addEventListener","removeEventListener"],"sources":["../../../src/components/Modal/useCustomModalOverlay.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside'\nimport { useOverlayFocusContain } from 'react-aria/private/overlays/Overlay'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\n\nimport {\n AriaModalOverlayProps,\n ModalOverlayAria,\n} from 'react-aria/useModalOverlay'\nimport { useOverlay } from 'react-aria/useOverlay'\n\n/**\n * We want to enable scrolling on the modal background,\n * but `useModalOverlay` (specifically, `useOverlay` within it) detects pointer events on the scrollbar.\n * Therefore, to prevent this issue, we need to override `shouldCloseOnInteractOutside` in `useModalOverlay`.\n */\nexport type CharcoalModalOverlayProps = AriaModalOverlayProps & {\n overflowClip?: boolean\n}\nexport function useCharcoalModalOverlay(\n props: CharcoalModalOverlayProps,\n state: { isOpen: boolean; onClose: () => void },\n ref: React.RefObject<HTMLElement | null>,\n): ModalOverlayAria {\n const { overlayProps, underlayProps } = useOverlay(\n {\n ...props,\n isOpen: state.isOpen,\n onClose: state.onClose,\n shouldCloseOnInteractOutside: () => false,\n },\n ref,\n )\n\n usePreventScroll(\n typeof document !== 'undefined' ? document.body : null,\n state.isOpen,\n props.overflowClip,\n )\n\n useOverlayFocusContain()\n\n React.useEffect(() => {\n if (state.isOpen && ref.current) {\n return ariaHideOutside([ref.current])\n }\n }, [state.isOpen, ref])\n\n return {\n modalProps: overlayProps,\n underlayProps,\n }\n}\n\nfunction isWindowDefined() {\n return typeof window !== 'undefined'\n}\n\nexport function useWindowWidth() {\n const [width, setWidth] = React.useState(\n isWindowDefined() ? window.innerWidth : null,\n )\n React.useEffect(() => {\n const handleResize = () => {\n setWidth(window.innerWidth)\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n })\n return width\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgBS,wBACdC,OACAC,OACAG,KACkB;CAClB,MAAM,EAAEG,cAAcC,kBAAkBZ,WACtC;EACE,GAAGI;EACHE,QAAQD,MAAMC;EACdC,SAASF,MAAME;EACfM,oCAAoC;EACrC,EACDL,IACD;CAEDX,iBACE,OAAOiB,aAAa,cAAcA,SAASC,OAAO,MAClDV,MAAMC,QACNF,MAAMF,aACP;CAEDN,wBAAwB;CAExBF,QAAMsB,gBAAgB;EACpB,IAAIX,MAAMC,UAAUE,IAAIS,SACtB,OAAOtB,gBAAgB,CAACa,IAAIS,QAAQ,CAAC;IAEtC,CAACZ,MAAMC,QAAQE,IAAI,CAAC;CAEvB,OAAO;EACLU,YAAYP;EACZC;EACD;;AAGH,SAASO,kBAAkB;CACzB,OAAO,OAAOC,WAAW;;AAG3B,SAAgBC,iBAAiB;CAC/B,MAAM,CAACC,OAAOC,YAAY7B,QAAM8B,SAC9BL,iBAAiB,GAAGC,OAAOK,aAAa,KACzC;CACD/B,QAAMsB,gBAAgB;EACpB,MAAMU,qBAAqB;GACzBH,SAASH,OAAOK,WAAW;;EAE7BL,OAAOO,iBAAiB,UAAUD,aAAa;EAC/C,aAAa;GACXN,OAAOQ,oBAAoB,UAAUF,aAAa;;GAEpD;CACF,OAAOJ"}