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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) 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 +799 -799
  273. package/dist/index.js +31 -12
  274. package/dist/layered.css +802 -802
  275. package/dist/layered.css.map +1 -1
  276. package/package.json +5 -5
  277. package/dist/index.cjs.map +0 -1
  278. package/dist/index.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_useIsomorphicLayoutEffect = require('../../_lib/useIsomorphicLayoutEffect.cjs');
4
+ let react = require("react");
5
+
6
+ //#region src/components/Modal/useTransitionPresence.ts
7
+ const MODAL_TRANSITION_DURATION_MS = 400;
8
+ /**
9
+ * アニメーション終了時の状態遷移。
10
+ * 途中で open/close が切り替わって state が既に進んでいた場合は何もしない
11
+ */
12
+ function settle(state) {
13
+ if (state === "entering") return "entered";
14
+ if (state === "exiting") return "exited";
15
+ return state;
16
+ }
17
+ /**
18
+ * CSS transition によるモーダルの開閉アニメーションを管理する。
19
+ * exit アニメーションが終わるまで DOM をマウントしたままにする
20
+ *
21
+ * @param isOpen モーダルを開くべきか
22
+ * @param enabled アニメーションを行うか(false なら即座にマウント・アンマウント)
23
+ * @param backgroundRef 背景要素。マウント直後の layout flush に使う
24
+ * @param dialogRef transform をアニメーションさせる要素(ダイアログ)
25
+ */
26
+ function useTransitionPresence(isOpen, enabled, backgroundRef, dialogRef) {
27
+ const [state, setState] = (0, react.useState)("exited");
28
+ require_useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
29
+ if (!enabled) setState(isOpen ? "entered" : "exited");
30
+ else if (isOpen) {
31
+ if (backgroundRef.current) backgroundRef.current.offsetHeight;
32
+ setState((s) => s === "exited" || s === "exiting" ? "entering" : s);
33
+ } else setState((s) => s === "exited" ? s : "exiting");
34
+ }, [
35
+ isOpen,
36
+ enabled,
37
+ backgroundRef
38
+ ]);
39
+ const isAnimating = state === "entering" || state === "exiting";
40
+ (0, react.useEffect)(() => {
41
+ if (!isAnimating) return;
42
+ const timer = setTimeout(() => setState(settle), 400 + 100);
43
+ return () => clearTimeout(timer);
44
+ }, [isAnimating, state]);
45
+ const handleTransitionEnd = (0, react.useCallback)((e) => {
46
+ if (e.target === dialogRef.current && e.propertyName === "transform") setState(settle);
47
+ }, [dialogRef]);
48
+ return {
49
+ isPresent: enabled ? isOpen || state !== "exited" : isOpen,
50
+ animationState: state,
51
+ handleTransitionEnd
52
+ };
53
+ }
54
+
55
+ //#endregion
56
+ exports.useTransitionPresence = useTransitionPresence;
57
+ //# sourceMappingURL=useTransitionPresence.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTransitionPresence.cjs","names":["useCallback","useEffect","useState","RefObject","TransitionEvent","useIsomorphicLayoutEffect","MODAL_TRANSITION_DURATION_MS","AnimationState","settle","state","useTransitionPresence","isOpen","enabled","backgroundRef","HTMLElement","dialogRef","setState","current","offsetHeight","s","isAnimating","timer","setTimeout","clearTimeout","handleTransitionEnd","e","isDialogSlide","target","propertyName","isPresent","animationState"],"sources":["../../../src/components/Modal/useTransitionPresence.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useState,\n RefObject,\n TransitionEvent,\n} from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\n\n// index.css の transition-duration と一致させること\nexport const MODAL_TRANSITION_DURATION_MS = 400\n\ntype AnimationState = 'exited' | 'entering' | 'entered' | 'exiting'\n\n/**\n * アニメーション終了時の状態遷移。\n * 途中で open/close が切り替わって state が既に進んでいた場合は何もしない\n */\nfunction settle(state: AnimationState): AnimationState {\n if (state === 'entering') return 'entered'\n if (state === 'exiting') return 'exited'\n return state\n}\n\n/**\n * CSS transition によるモーダルの開閉アニメーションを管理する。\n * exit アニメーションが終わるまで DOM をマウントしたままにする\n *\n * @param isOpen モーダルを開くべきか\n * @param enabled アニメーションを行うか(false なら即座にマウント・アンマウント)\n * @param backgroundRef 背景要素。マウント直後の layout flush に使う\n * @param dialogRef transform をアニメーションさせる要素(ダイアログ)\n */\nexport function useTransitionPresence(\n isOpen: boolean,\n enabled: boolean,\n backgroundRef: RefObject<HTMLElement>,\n dialogRef: RefObject<HTMLElement>,\n) {\n // 開いた状態で初回マウントされた場合もアニメーションさせるため常に 'exited' から始める。\n // enabled でない場合は下の layout effect が描画前に 'entered' へ進める\n const [state, setState] = useState<AnimationState>('exited')\n\n useIsomorphicLayoutEffect(() => {\n if (!enabled) {\n setState(isOpen ? 'entered' : 'exited')\n } else if (isOpen) {\n // 閉じた状態のスタイルを確定させ、enter の transition が発火するようにする。\n // dialogRef は子コンポーネントの passive effect で張られるためこの時点では\n // まだ古い/null のことがあり、同じ commit で同期的に張られる背景要素を読む\n if (backgroundRef.current) void backgroundRef.current.offsetHeight\n setState((s) => (s === 'exited' || s === 'exiting' ? 'entering' : s))\n } else {\n setState((s) => (s === 'exited' ? s : 'exiting'))\n }\n }, [isOpen, enabled, backgroundRef])\n\n // safety net: transitionend が来なくても(トランジションのキャンセル、\n // reduced-motion、バックグラウンドタブ等)モーダルが永遠に残らないようにする\n const isAnimating = state === 'entering' || state === 'exiting'\n useEffect(() => {\n if (!isAnimating) return\n // transitionend と同時刻に発火して競合しないよう少し遅らせる\n const timer = setTimeout(\n () => setState(settle),\n MODAL_TRANSITION_DURATION_MS + 100,\n )\n return () => clearTimeout(timer)\n }, [isAnimating, state])\n\n // 背景 div に付ける。ダイアログの transform の transitionend だけが\n // 開閉アニメーションの終了を意味する(他のトランジションもバブルしてくるため絞り込む)。\n // propertyName は index.css がアニメーションさせるプロパティと一致させること。\n // なお enter 完了直後の close では、完了済み enter の transitionend が\n // 'exiting' へ遷移した後に届いて exit アニメーションが省略される可能性が\n // 理論上あるが、サブフレーム幅のレースで実害は見た目のみのため許容している\n const handleTransitionEnd = useCallback(\n (e: TransitionEvent<HTMLElement>) => {\n const isDialogSlide =\n e.target === dialogRef.current && e.propertyName === 'transform'\n if (isDialogSlide) {\n setState(settle)\n }\n },\n [dialogRef],\n )\n\n return {\n // enabled でないときは isOpen だけで即座にマウント・アンマウントする\n // (state 経由にすると close 時に開いたツリーを丸ごと 1 回余計に描画する)\n isPresent: enabled ? isOpen || state !== 'exited' : isOpen,\n animationState: state,\n handleTransitionEnd,\n }\n}\n"],"mappings":";;;;;;AAUA,MAAaM,+BAA+B;;;;;AAQ5C,SAASE,OAAOC,OAAuC;CACrD,IAAIA,UAAU,YAAY,OAAO;CACjC,IAAIA,UAAU,WAAW,OAAO;CAChC,OAAOA;;;;;;;;;;;AAYT,SAAgBC,sBACdC,QACAC,SACAC,eACAE,WACA;CAGA,MAAM,CAACN,OAAOO,gCAAqC,SAAS;CAE5DX,kEAAgC;EAC9B,IAAI,CAACO,SACHI,SAASL,SAAS,YAAY,SAAS;OAClC,IAAIA,QAAQ;GAIjB,IAAIE,cAAcI,SAAS,AAAKJ,cAAcI,QAAQC;GACtDF,UAAUG,MAAOA,MAAM,YAAYA,MAAM,YAAY,aAAaA,EAAG;SAErEH,UAAUG,MAAOA,MAAM,WAAWA,IAAI,UAAW;IAElD;EAACR;EAAQC;EAASC;EAAc,CAAC;CAIpC,MAAMO,cAAcX,UAAU,cAAcA,UAAU;CACtDR,2BAAgB;EACd,IAAI,CAACmB,aAAa;EAElB,MAAMC,QAAQC,iBACNN,SAASR,OAAO,QACS,IAChC;EACD,aAAae,aAAaF,MAAM;IAC/B,CAACD,aAAaX,MAAM,CAAC;CAQxB,MAAMe,8CACHC,MAAoC;EAGnC,IADEA,EAAEE,WAAWZ,UAAUE,WAAWQ,EAAEG,iBAAiB,aAErDZ,SAASR,OAAO;IAGpB,CAACO,UACH,CAAC;CAED,OAAO;EAGLc,WAAWjB,UAAUD,UAAUF,UAAU,WAAWE;EACpDmB,gBAAgBrB;EAChBe;EACD"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { useIsomorphicLayoutEffect } from "../../_lib/useIsomorphicLayoutEffect.js";
3
+ import { useCallback, useEffect, useState } from "react";
4
+
5
+ //#region src/components/Modal/useTransitionPresence.ts
6
+ const MODAL_TRANSITION_DURATION_MS = 400;
7
+ /**
8
+ * アニメーション終了時の状態遷移。
9
+ * 途中で open/close が切り替わって state が既に進んでいた場合は何もしない
10
+ */
11
+ function settle(state) {
12
+ if (state === "entering") return "entered";
13
+ if (state === "exiting") return "exited";
14
+ return state;
15
+ }
16
+ /**
17
+ * CSS transition によるモーダルの開閉アニメーションを管理する。
18
+ * exit アニメーションが終わるまで DOM をマウントしたままにする
19
+ *
20
+ * @param isOpen モーダルを開くべきか
21
+ * @param enabled アニメーションを行うか(false なら即座にマウント・アンマウント)
22
+ * @param backgroundRef 背景要素。マウント直後の layout flush に使う
23
+ * @param dialogRef transform をアニメーションさせる要素(ダイアログ)
24
+ */
25
+ function useTransitionPresence(isOpen, enabled, backgroundRef, dialogRef) {
26
+ const [state, setState] = useState("exited");
27
+ useIsomorphicLayoutEffect(() => {
28
+ if (!enabled) setState(isOpen ? "entered" : "exited");
29
+ else if (isOpen) {
30
+ if (backgroundRef.current) backgroundRef.current.offsetHeight;
31
+ setState((s) => s === "exited" || s === "exiting" ? "entering" : s);
32
+ } else setState((s) => s === "exited" ? s : "exiting");
33
+ }, [
34
+ isOpen,
35
+ enabled,
36
+ backgroundRef
37
+ ]);
38
+ const isAnimating = state === "entering" || state === "exiting";
39
+ useEffect(() => {
40
+ if (!isAnimating) return;
41
+ const timer = setTimeout(() => setState(settle), 400 + 100);
42
+ return () => clearTimeout(timer);
43
+ }, [isAnimating, state]);
44
+ const handleTransitionEnd = useCallback((e) => {
45
+ if (e.target === dialogRef.current && e.propertyName === "transform") setState(settle);
46
+ }, [dialogRef]);
47
+ return {
48
+ isPresent: enabled ? isOpen || state !== "exited" : isOpen,
49
+ animationState: state,
50
+ handleTransitionEnd
51
+ };
52
+ }
53
+
54
+ //#endregion
55
+ export { useTransitionPresence };
56
+ //# sourceMappingURL=useTransitionPresence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTransitionPresence.js","names":["useCallback","useEffect","useState","RefObject","TransitionEvent","useIsomorphicLayoutEffect","MODAL_TRANSITION_DURATION_MS","AnimationState","settle","state","useTransitionPresence","isOpen","enabled","backgroundRef","HTMLElement","dialogRef","setState","current","offsetHeight","s","isAnimating","timer","setTimeout","clearTimeout","handleTransitionEnd","e","isDialogSlide","target","propertyName","isPresent","animationState"],"sources":["../../../src/components/Modal/useTransitionPresence.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useState,\n RefObject,\n TransitionEvent,\n} from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\n\n// index.css の transition-duration と一致させること\nexport const MODAL_TRANSITION_DURATION_MS = 400\n\ntype AnimationState = 'exited' | 'entering' | 'entered' | 'exiting'\n\n/**\n * アニメーション終了時の状態遷移。\n * 途中で open/close が切り替わって state が既に進んでいた場合は何もしない\n */\nfunction settle(state: AnimationState): AnimationState {\n if (state === 'entering') return 'entered'\n if (state === 'exiting') return 'exited'\n return state\n}\n\n/**\n * CSS transition によるモーダルの開閉アニメーションを管理する。\n * exit アニメーションが終わるまで DOM をマウントしたままにする\n *\n * @param isOpen モーダルを開くべきか\n * @param enabled アニメーションを行うか(false なら即座にマウント・アンマウント)\n * @param backgroundRef 背景要素。マウント直後の layout flush に使う\n * @param dialogRef transform をアニメーションさせる要素(ダイアログ)\n */\nexport function useTransitionPresence(\n isOpen: boolean,\n enabled: boolean,\n backgroundRef: RefObject<HTMLElement>,\n dialogRef: RefObject<HTMLElement>,\n) {\n // 開いた状態で初回マウントされた場合もアニメーションさせるため常に 'exited' から始める。\n // enabled でない場合は下の layout effect が描画前に 'entered' へ進める\n const [state, setState] = useState<AnimationState>('exited')\n\n useIsomorphicLayoutEffect(() => {\n if (!enabled) {\n setState(isOpen ? 'entered' : 'exited')\n } else if (isOpen) {\n // 閉じた状態のスタイルを確定させ、enter の transition が発火するようにする。\n // dialogRef は子コンポーネントの passive effect で張られるためこの時点では\n // まだ古い/null のことがあり、同じ commit で同期的に張られる背景要素を読む\n if (backgroundRef.current) void backgroundRef.current.offsetHeight\n setState((s) => (s === 'exited' || s === 'exiting' ? 'entering' : s))\n } else {\n setState((s) => (s === 'exited' ? s : 'exiting'))\n }\n }, [isOpen, enabled, backgroundRef])\n\n // safety net: transitionend が来なくても(トランジションのキャンセル、\n // reduced-motion、バックグラウンドタブ等)モーダルが永遠に残らないようにする\n const isAnimating = state === 'entering' || state === 'exiting'\n useEffect(() => {\n if (!isAnimating) return\n // transitionend と同時刻に発火して競合しないよう少し遅らせる\n const timer = setTimeout(\n () => setState(settle),\n MODAL_TRANSITION_DURATION_MS + 100,\n )\n return () => clearTimeout(timer)\n }, [isAnimating, state])\n\n // 背景 div に付ける。ダイアログの transform の transitionend だけが\n // 開閉アニメーションの終了を意味する(他のトランジションもバブルしてくるため絞り込む)。\n // propertyName は index.css がアニメーションさせるプロパティと一致させること。\n // なお enter 完了直後の close では、完了済み enter の transitionend が\n // 'exiting' へ遷移した後に届いて exit アニメーションが省略される可能性が\n // 理論上あるが、サブフレーム幅のレースで実害は見た目のみのため許容している\n const handleTransitionEnd = useCallback(\n (e: TransitionEvent<HTMLElement>) => {\n const isDialogSlide =\n e.target === dialogRef.current && e.propertyName === 'transform'\n if (isDialogSlide) {\n setState(settle)\n }\n },\n [dialogRef],\n )\n\n return {\n // enabled でないときは isOpen だけで即座にマウント・アンマウントする\n // (state 経由にすると close 時に開いたツリーを丸ごと 1 回余計に描画する)\n isPresent: enabled ? isOpen || state !== 'exited' : isOpen,\n animationState: state,\n handleTransitionEnd,\n }\n}\n"],"mappings":";;;;;AAUA,MAAaM,+BAA+B;;;;;AAQ5C,SAASE,OAAOC,OAAuC;CACrD,IAAIA,UAAU,YAAY,OAAO;CACjC,IAAIA,UAAU,WAAW,OAAO;CAChC,OAAOA;;;;;;;;;;;AAYT,SAAgBC,sBACdC,QACAC,SACAC,eACAE,WACA;CAGA,MAAM,CAACN,OAAOO,YAAYd,SAAyB,SAAS;CAE5DG,gCAAgC;EAC9B,IAAI,CAACO,SACHI,SAASL,SAAS,YAAY,SAAS;OAClC,IAAIA,QAAQ;GAIjB,IAAIE,cAAcI,SAAS,AAAKJ,cAAcI,QAAQC;GACtDF,UAAUG,MAAOA,MAAM,YAAYA,MAAM,YAAY,aAAaA,EAAG;SAErEH,UAAUG,MAAOA,MAAM,WAAWA,IAAI,UAAW;IAElD;EAACR;EAAQC;EAASC;EAAc,CAAC;CAIpC,MAAMO,cAAcX,UAAU,cAAcA,UAAU;CACtDR,gBAAgB;EACd,IAAI,CAACmB,aAAa;EAElB,MAAMC,QAAQC,iBACNN,SAASR,OAAO,QACS,IAChC;EACD,aAAae,aAAaF,MAAM;IAC/B,CAACD,aAAaX,MAAM,CAAC;CAQxB,MAAMe,sBAAsBxB,aACzByB,MAAoC;EAGnC,IADEA,EAAEE,WAAWZ,UAAUE,WAAWQ,EAAEG,iBAAiB,aAErDZ,SAASR,OAAO;IAGpB,CAACO,UACH,CAAC;CAED,OAAO;EAGLc,WAAWjB,UAAUD,UAAUF,UAAU,WAAWE;EACpDmB,gBAAgBrB;EAChBe;EACD"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ let react = require("react");
4
+
5
+ //#region src/components/MultiSelect/context.ts
6
+ const MultiSelectGroupContext = (0, react.createContext)({
7
+ name: void 0,
8
+ selected: [],
9
+ disabled: false,
10
+ readonly: false,
11
+ invalid: false,
12
+ onChange() {
13
+ throw new Error("Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?");
14
+ }
15
+ });
16
+
17
+ //#endregion
18
+ exports.MultiSelectGroupContext = MultiSelectGroupContext;
19
+ //# sourceMappingURL=context.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.cjs","names":["createContext","MultiSelectGroupContext","name","selected","disabled","readonly","invalid","onChange","value","undefined","Error"],"sources":["../../../src/components/MultiSelect/context.ts"],"sourcesContent":["import { createContext } from 'react'\n\ntype MultiSelectGroupContext = {\n name: string\n selected: string[]\n disabled: boolean\n readonly: boolean\n invalid: boolean\n onChange: ({ value, selected }: { value: string; selected: boolean }) => void\n}\n\nexport const MultiSelectGroupContext = createContext<MultiSelectGroupContext>({\n name: undefined as never,\n selected: [],\n disabled: false,\n readonly: false,\n invalid: false,\n onChange() {\n throw new Error(\n 'Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?',\n )\n },\n})\n"],"mappings":";;;;;AAWA,MAAaC,mDAAiE;CAC5EC,MAAMO;CACNN,UAAU,EAAE;CACZC,UAAU;CACVC,UAAU;CACVC,SAAS;CACTC,WAAW;EACT,MAAM,IAAIG,MACR,gGACD;;CAEJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { createContext } from "react";
3
+
4
+ //#region src/components/MultiSelect/context.ts
5
+ const MultiSelectGroupContext = createContext({
6
+ name: void 0,
7
+ selected: [],
8
+ disabled: false,
9
+ readonly: false,
10
+ invalid: false,
11
+ onChange() {
12
+ throw new Error("Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?");
13
+ }
14
+ });
15
+
16
+ //#endregion
17
+ export { MultiSelectGroupContext };
18
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":["createContext","MultiSelectGroupContext","name","selected","disabled","readonly","invalid","onChange","value","undefined","Error"],"sources":["../../../src/components/MultiSelect/context.ts"],"sourcesContent":["import { createContext } from 'react'\n\ntype MultiSelectGroupContext = {\n name: string\n selected: string[]\n disabled: boolean\n readonly: boolean\n invalid: boolean\n onChange: ({ value, selected }: { value: string; selected: boolean }) => void\n}\n\nexport const MultiSelectGroupContext = createContext<MultiSelectGroupContext>({\n name: undefined as never,\n selected: [],\n disabled: false,\n readonly: false,\n invalid: false,\n onChange() {\n throw new Error(\n 'Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?',\n )\n },\n})\n"],"mappings":";;;;AAWA,MAAaC,0BAA0BD,cAAuC;CAC5EE,MAAMO;CACNN,UAAU,EAAE;CACZC,UAAU;CACVC,UAAU;CACVC,SAAS;CACTC,WAAW;EACT,MAAM,IAAIG,MACR,gGACD;;CAEJ,CAAC"}
@@ -0,0 +1,97 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_useClassNames = require('../../_lib/useClassNames.cjs');
4
+ const require_context = require('./context.cjs');
5
+ const require_index = require('../Icon/index.cjs');
6
+ require('./index.cjs');
7
+ let react = require("react");
8
+ react = require_runtime.__toESM(react);
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let warning = require("warning");
11
+ warning = require_runtime.__toESM(warning);
12
+
13
+ //#region src/components/MultiSelect/index.tsx
14
+ const MultiSelect = (0, react.forwardRef)(function MultiSelectInner({ value, disabled = false, onChange, variant = "default", className, children }, ref) {
15
+ const { name, selected, disabled: parentDisabled, readonly, invalid, onChange: parentOnChange } = (0, react.useContext)(require_context.MultiSelectGroupContext);
16
+ (0, warning.default)(name !== void 0, `"name" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`);
17
+ const isSelected = selected.includes(value);
18
+ const isDisabled = disabled || parentDisabled || readonly;
19
+ const handleChange = (0, react.useCallback)((event) => {
20
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
21
+ if (onChange) onChange({
22
+ value,
23
+ selected: event.currentTarget.checked
24
+ });
25
+ parentOnChange({
26
+ value,
27
+ selected: event.currentTarget.checked
28
+ });
29
+ }, [
30
+ onChange,
31
+ parentOnChange,
32
+ value
33
+ ]);
34
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
35
+ "aria-disabled": isDisabled,
36
+ className: require_useClassNames.useClassNames("charcoal-multi-select", className),
37
+ children: [
38
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39
+ className: "charcoal-multi-select-input",
40
+ name,
41
+ value,
42
+ type: "checkbox",
43
+ checked: isSelected,
44
+ disabled: isDisabled,
45
+ onChange: handleChange,
46
+ "data-overlay": variant === "overlay",
47
+ "aria-invalid": invalid,
48
+ ref
49
+ }),
50
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
51
+ className: "charcoal-multi-select-overlay",
52
+ "data-overlay": variant === "overlay",
53
+ "aria-invalid": invalid,
54
+ "aria-hidden": true,
55
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
56
+ name: "24/Check",
57
+ fixedSize: 16
58
+ })
59
+ }),
60
+ Boolean(children) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
61
+ className: "charcoal-multi-select-label",
62
+ children
63
+ })
64
+ ]
65
+ });
66
+ });
67
+ var MultiSelect_default = (0, react.memo)(MultiSelect);
68
+ function MultiSelectGroup({ className, style, name, label, selected, onChange, disabled = false, readonly = false, invalid = false, children }) {
69
+ const handleChange = (0, react.useCallback)((payload) => {
70
+ const index = selected.indexOf(payload.value);
71
+ if (payload.selected) {
72
+ if (index < 0) onChange([...selected, payload.value]);
73
+ } else if (index >= 0) onChange([...selected.slice(0, index), ...selected.slice(index + 1)]);
74
+ }, [onChange, selected]);
75
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_context.MultiSelectGroupContext.Provider, {
76
+ value: {
77
+ name,
78
+ selected: Array.from(new Set(selected)),
79
+ disabled,
80
+ readonly,
81
+ invalid,
82
+ onChange: handleChange
83
+ },
84
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
85
+ className,
86
+ style,
87
+ "aria-label": label,
88
+ "data-testid": "SelectGroup",
89
+ children
90
+ })
91
+ });
92
+ }
93
+
94
+ //#endregion
95
+ exports.MultiSelectGroup = MultiSelectGroup;
96
+ exports.default = MultiSelect_default;
97
+ //# sourceMappingURL=index2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.cjs","names":["ChangeEvent","useCallback","useContext","forwardRef","memo","React","warning","MultiSelectGroupContext","Icon","useClassNames","MultiSelectProps","PropsWithChildren","value","disabled","variant","className","onChange","payload","selected","MultiSelect","HTMLInputElement","MultiSelectInner","children","ref","name","parentDisabled","readonly","invalid","parentOnChange","undefined","isSelected","includes","isDisabled","handleChange","event","currentTarget","checked","classNames","Boolean","MultiSelectGroupProps","style","CSSProperties","label","MultiSelectGroup","index","indexOf","slice","Array","from","Set"],"sources":["../../../src/components/MultiSelect/index.tsx"],"sourcesContent":["import { ChangeEvent, useCallback, useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport warning from 'warning'\n\nimport { MultiSelectGroupContext } from './context'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type MultiSelectProps = React.PropsWithChildren<{\n value: string\n disabled?: boolean\n variant?: 'default' | 'overlay'\n className?: string\n onChange?: (payload: { value: string; selected: boolean }) => void\n}>\n\nconst MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n function MultiSelectInner(\n {\n value,\n disabled = false,\n onChange,\n variant = 'default',\n className,\n children,\n },\n ref,\n ) {\n const {\n name,\n selected,\n disabled: parentDisabled,\n readonly,\n invalid,\n onChange: parentOnChange,\n } = useContext(MultiSelectGroupContext)\n\n warning(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n name !== undefined,\n `\"name\" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`,\n )\n\n const isSelected = selected.includes(value)\n const isDisabled = disabled || parentDisabled || readonly\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!(event.currentTarget instanceof HTMLInputElement)) {\n return\n }\n if (onChange) onChange({ value, selected: event.currentTarget.checked })\n parentOnChange({ value, selected: event.currentTarget.checked })\n },\n [onChange, parentOnChange, value],\n )\n const classNames = useClassNames('charcoal-multi-select', className)\n return (\n <label aria-disabled={isDisabled} className={classNames}>\n <input\n className=\"charcoal-multi-select-input\"\n name={name}\n value={value}\n type=\"checkbox\"\n checked={isSelected}\n disabled={isDisabled}\n onChange={handleChange}\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n ref={ref}\n />\n <div\n className=\"charcoal-multi-select-overlay\"\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n aria-hidden\n >\n <Icon name=\"24/Check\" fixedSize={16} />\n </div>\n {Boolean(children) && (\n <div className=\"charcoal-multi-select-label\">{children}</div>\n )}\n </label>\n )\n },\n)\n\nexport default memo(MultiSelect)\n\nexport type MultiSelectGroupProps = React.PropsWithChildren<{\n className?: string\n style?: React.CSSProperties\n name: string\n label: string\n selected: string[]\n onChange: (selected: string[]) => void\n disabled?: boolean\n readonly?: boolean\n invalid?: boolean\n}>\n\nexport function MultiSelectGroup({\n className,\n style,\n name,\n label,\n selected,\n onChange,\n disabled = false,\n readonly = false,\n invalid = false,\n children,\n}: MultiSelectGroupProps) {\n const handleChange = useCallback(\n (payload: { value: string; selected: boolean }) => {\n const index = selected.indexOf(payload.value)\n\n if (payload.selected) {\n if (index < 0) {\n onChange([...selected, payload.value])\n }\n } else {\n if (index >= 0) {\n onChange([...selected.slice(0, index), ...selected.slice(index + 1)])\n }\n }\n },\n [onChange, selected],\n )\n\n return (\n <MultiSelectGroupContext.Provider\n value={{\n name,\n selected: Array.from(new Set(selected)),\n disabled,\n readonly,\n invalid,\n onChange: handleChange,\n }}\n >\n <div\n className={className}\n style={style}\n aria-label={label}\n data-testid=\"SelectGroup\"\n >\n {children}\n </div>\n </MultiSelectGroupContext.Provider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAMmB,oCACJ,SAASE,iBACP,EACET,OACAC,WAAW,OACXG,UACAF,UAAU,WACVC,WACAO,YAEFC,KACA;CACA,MAAM,EACJC,MACAN,UACAL,UAAUY,gBACVC,UACAC,SACAX,UAAUY,yCACGrB,wCAAwB;CAEvCD,qBAEEkB,SAASK,QACT,iGACD;CAED,MAAMC,aAAaZ,SAASa,SAASnB,MAAM;CAC3C,MAAMoB,aAAanB,YAAYY,kBAAkBC;CAEjD,MAAMO,uCACHC,UAAyC;EACxC,IAAI,EAAEA,MAAMC,yBAAyBf,mBACnC;EAEF,IAAIJ,UAAUA,SAAS;GAAEJ;GAAOM,UAAUgB,MAAMC,cAAcC;GAAS,CAAC;EACxER,eAAe;GAAEhB;GAAOM,UAAUgB,MAAMC,cAAcC;GAAS,CAAC;IAElE;EAACpB;EAAUY;EAAgBhB;EAC7B,CAAC;CAED,OACE,4CAAC,SAAD;EAAO,iBAAeoB;EAAY,WAFjBvB,oCAAc,yBAAyBM,UAED;YAAvD;GACE,2CAAC,SAAD;IACE,WAAU;IACJS;IACCZ;IACP,MAAK;IACL,SAASkB;IACT,UAAUE;IACV,UAAUC;IACV,gBAAcnB,YAAY;IAC1B,gBAAca;IACTJ;IAAI;GAEX,2CAAC,OAAD;IACE,WAAU;IACV,gBAAcT,YAAY;IAC1B,gBAAca;IACd;cAEA,2CAAC,uBAAD;KAAM,MAAK;KAAW,WAAW;KAAG;IACjC;GACJW,QAAQhB,SAAS,IAChB,2CAAC,OAAD;IAAK,WAAU;IAA+BA;IAC/C;GACK;;EAGb;AAED,0CAAoBH,YAAY;AAchC,SAAgBwB,iBAAiB,EAC/B5B,WACAyB,OACAhB,MACAkB,OACAxB,UACAF,UACAH,WAAW,OACXa,WAAW,OACXC,UAAU,OACVL,YACwB;CACxB,MAAMW,uCACHhB,YAAkD;EACjD,MAAM2B,QAAQ1B,SAAS2B,QAAQ5B,QAAQL,MAAM;EAE7C,IAAIK,QAAQC,UACV;OAAI0B,QAAQ,GACV5B,SAAS,CAAC,GAAGE,UAAUD,QAAQL,MAAM,CAAC;SAGxC,IAAIgC,SAAS,GACX5B,SAAS,CAAC,GAAGE,SAAS4B,MAAM,GAAGF,MAAM,EAAE,GAAG1B,SAAS4B,MAAMF,QAAQ,EAAE,CAAC,CAAC;IAI3E,CAAC5B,UAAUE,SACb,CAAC;CAED,OACE,2CAAC,wCAAwB,UAAzB;EACE,OAAO;GACLM;GACAN,UAAU6B,MAAMC,KAAK,IAAIC,IAAI/B,SAAS,CAAC;GACvCL;GACAa;GACAC;GACAX,UAAUiB;GACX;YAED,2CAAC,OAAD;GACalB;GACJyB;GACP,cAAYE;GACZ,eAAY;GAEXpB;GACE;EAC4B"}
@@ -0,0 +1,93 @@
1
+ "use client";
2
+ import { useClassNames } from "../../_lib/useClassNames.js";
3
+ import { MultiSelectGroupContext } from "./context.js";
4
+ import Icon from "../Icon/index.js";
5
+ /* empty css */
6
+ import { forwardRef, memo, useCallback, useContext } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import warning from "warning";
9
+
10
+ //#region src/components/MultiSelect/index.tsx
11
+ const MultiSelect = forwardRef(function MultiSelectInner({ value, disabled = false, onChange, variant = "default", className, children }, ref) {
12
+ const { name, selected, disabled: parentDisabled, readonly, invalid, onChange: parentOnChange } = useContext(MultiSelectGroupContext);
13
+ warning(name !== void 0, `"name" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`);
14
+ const isSelected = selected.includes(value);
15
+ const isDisabled = disabled || parentDisabled || readonly;
16
+ const handleChange = useCallback((event) => {
17
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
18
+ if (onChange) onChange({
19
+ value,
20
+ selected: event.currentTarget.checked
21
+ });
22
+ parentOnChange({
23
+ value,
24
+ selected: event.currentTarget.checked
25
+ });
26
+ }, [
27
+ onChange,
28
+ parentOnChange,
29
+ value
30
+ ]);
31
+ return /* @__PURE__ */ jsxs("label", {
32
+ "aria-disabled": isDisabled,
33
+ className: useClassNames("charcoal-multi-select", className),
34
+ children: [
35
+ /* @__PURE__ */ jsx("input", {
36
+ className: "charcoal-multi-select-input",
37
+ name,
38
+ value,
39
+ type: "checkbox",
40
+ checked: isSelected,
41
+ disabled: isDisabled,
42
+ onChange: handleChange,
43
+ "data-overlay": variant === "overlay",
44
+ "aria-invalid": invalid,
45
+ ref
46
+ }),
47
+ /* @__PURE__ */ jsx("div", {
48
+ className: "charcoal-multi-select-overlay",
49
+ "data-overlay": variant === "overlay",
50
+ "aria-invalid": invalid,
51
+ "aria-hidden": true,
52
+ children: /* @__PURE__ */ jsx(Icon, {
53
+ name: "24/Check",
54
+ fixedSize: 16
55
+ })
56
+ }),
57
+ Boolean(children) && /* @__PURE__ */ jsx("div", {
58
+ className: "charcoal-multi-select-label",
59
+ children
60
+ })
61
+ ]
62
+ });
63
+ });
64
+ var MultiSelect_default = memo(MultiSelect);
65
+ function MultiSelectGroup({ className, style, name, label, selected, onChange, disabled = false, readonly = false, invalid = false, children }) {
66
+ const handleChange = useCallback((payload) => {
67
+ const index = selected.indexOf(payload.value);
68
+ if (payload.selected) {
69
+ if (index < 0) onChange([...selected, payload.value]);
70
+ } else if (index >= 0) onChange([...selected.slice(0, index), ...selected.slice(index + 1)]);
71
+ }, [onChange, selected]);
72
+ return /* @__PURE__ */ jsx(MultiSelectGroupContext.Provider, {
73
+ value: {
74
+ name,
75
+ selected: Array.from(new Set(selected)),
76
+ disabled,
77
+ readonly,
78
+ invalid,
79
+ onChange: handleChange
80
+ },
81
+ children: /* @__PURE__ */ jsx("div", {
82
+ className,
83
+ style,
84
+ "aria-label": label,
85
+ "data-testid": "SelectGroup",
86
+ children
87
+ })
88
+ });
89
+ }
90
+
91
+ //#endregion
92
+ export { MultiSelectGroup, MultiSelect_default as default };
93
+ //# sourceMappingURL=index2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.js","names":["ChangeEvent","useCallback","useContext","forwardRef","memo","React","warning","MultiSelectGroupContext","Icon","useClassNames","MultiSelectProps","PropsWithChildren","value","disabled","variant","className","onChange","payload","selected","MultiSelect","HTMLInputElement","MultiSelectInner","children","ref","name","parentDisabled","readonly","invalid","parentOnChange","undefined","isSelected","includes","isDisabled","handleChange","event","currentTarget","checked","classNames","Boolean","MultiSelectGroupProps","style","CSSProperties","label","MultiSelectGroup","index","indexOf","slice","Array","from","Set"],"sources":["../../../src/components/MultiSelect/index.tsx"],"sourcesContent":["import { ChangeEvent, useCallback, useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport warning from 'warning'\n\nimport { MultiSelectGroupContext } from './context'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type MultiSelectProps = React.PropsWithChildren<{\n value: string\n disabled?: boolean\n variant?: 'default' | 'overlay'\n className?: string\n onChange?: (payload: { value: string; selected: boolean }) => void\n}>\n\nconst MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n function MultiSelectInner(\n {\n value,\n disabled = false,\n onChange,\n variant = 'default',\n className,\n children,\n },\n ref,\n ) {\n const {\n name,\n selected,\n disabled: parentDisabled,\n readonly,\n invalid,\n onChange: parentOnChange,\n } = useContext(MultiSelectGroupContext)\n\n warning(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n name !== undefined,\n `\"name\" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`,\n )\n\n const isSelected = selected.includes(value)\n const isDisabled = disabled || parentDisabled || readonly\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!(event.currentTarget instanceof HTMLInputElement)) {\n return\n }\n if (onChange) onChange({ value, selected: event.currentTarget.checked })\n parentOnChange({ value, selected: event.currentTarget.checked })\n },\n [onChange, parentOnChange, value],\n )\n const classNames = useClassNames('charcoal-multi-select', className)\n return (\n <label aria-disabled={isDisabled} className={classNames}>\n <input\n className=\"charcoal-multi-select-input\"\n name={name}\n value={value}\n type=\"checkbox\"\n checked={isSelected}\n disabled={isDisabled}\n onChange={handleChange}\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n ref={ref}\n />\n <div\n className=\"charcoal-multi-select-overlay\"\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n aria-hidden\n >\n <Icon name=\"24/Check\" fixedSize={16} />\n </div>\n {Boolean(children) && (\n <div className=\"charcoal-multi-select-label\">{children}</div>\n )}\n </label>\n )\n },\n)\n\nexport default memo(MultiSelect)\n\nexport type MultiSelectGroupProps = React.PropsWithChildren<{\n className?: string\n style?: React.CSSProperties\n name: string\n label: string\n selected: string[]\n onChange: (selected: string[]) => void\n disabled?: boolean\n readonly?: boolean\n invalid?: boolean\n}>\n\nexport function MultiSelectGroup({\n className,\n style,\n name,\n label,\n selected,\n onChange,\n disabled = false,\n readonly = false,\n invalid = false,\n children,\n}: MultiSelectGroupProps) {\n const handleChange = useCallback(\n (payload: { value: string; selected: boolean }) => {\n const index = selected.indexOf(payload.value)\n\n if (payload.selected) {\n if (index < 0) {\n onChange([...selected, payload.value])\n }\n } else {\n if (index >= 0) {\n onChange([...selected.slice(0, index), ...selected.slice(index + 1)])\n }\n }\n },\n [onChange, selected],\n )\n\n return (\n <MultiSelectGroupContext.Provider\n value={{\n name,\n selected: Array.from(new Set(selected)),\n disabled,\n readonly,\n invalid,\n onChange: handleChange,\n }}\n >\n <div\n className={className}\n style={style}\n aria-label={label}\n data-testid=\"SelectGroup\"\n >\n {children}\n </div>\n </MultiSelectGroupContext.Provider>\n )\n}\n"],"mappings":";;;;;;;;;;AAiBA,MAAMmB,cAAchB,WAClB,SAASkB,iBACP,EACET,OACAC,WAAW,OACXG,UACAF,UAAU,WACVC,WACAO,YAEFC,KACA;CACA,MAAM,EACJC,MACAN,UACAL,UAAUY,gBACVC,UACAC,SACAX,UAAUY,mBACR1B,WAAWK,wBAAwB;CAEvCD,QAEEkB,SAASK,QACT,iGACD;CAED,MAAMC,aAAaZ,SAASa,SAASnB,MAAM;CAC3C,MAAMoB,aAAanB,YAAYY,kBAAkBC;CAEjD,MAAMO,eAAehC,aAClBiC,UAAyC;EACxC,IAAI,EAAEA,MAAMC,yBAAyBf,mBACnC;EAEF,IAAIJ,UAAUA,SAAS;GAAEJ;GAAOM,UAAUgB,MAAMC,cAAcC;GAAS,CAAC;EACxER,eAAe;GAAEhB;GAAOM,UAAUgB,MAAMC,cAAcC;GAAS,CAAC;IAElE;EAACpB;EAAUY;EAAgBhB;EAC7B,CAAC;CAED,OACE,qBAAC,SAAD;EAAO,iBAAeoB;EAAY,WAFjBvB,cAAc,yBAAyBM,UAED;YAAvD;GACE,oBAAC,SAAD;IACE,WAAU;IACJS;IACCZ;IACP,MAAK;IACL,SAASkB;IACT,UAAUE;IACV,UAAUC;IACV,gBAAcnB,YAAY;IAC1B,gBAAca;IACTJ;IAAI;GAEX,oBAAC,OAAD;IACE,WAAU;IACV,gBAAcT,YAAY;IAC1B,gBAAca;IACd;cAEA,oBAAC,MAAD;KAAM,MAAK;KAAW,WAAW;KAAG;IACjC;GACJW,QAAQhB,SAAS,IAChB,oBAAC,OAAD;IAAK,WAAU;IAA+BA;IAC/C;GACK;;EAGb;AAED,0BAAelB,KAAKe,YAAY;AAchC,SAAgBwB,iBAAiB,EAC/B5B,WACAyB,OACAhB,MACAkB,OACAxB,UACAF,UACAH,WAAW,OACXa,WAAW,OACXC,UAAU,OACVL,YACwB;CACxB,MAAMW,eAAehC,aAClBgB,YAAkD;EACjD,MAAM2B,QAAQ1B,SAAS2B,QAAQ5B,QAAQL,MAAM;EAE7C,IAAIK,QAAQC,UACV;OAAI0B,QAAQ,GACV5B,SAAS,CAAC,GAAGE,UAAUD,QAAQL,MAAM,CAAC;SAGxC,IAAIgC,SAAS,GACX5B,SAAS,CAAC,GAAGE,SAAS4B,MAAM,GAAGF,MAAM,EAAE,GAAG1B,SAAS4B,MAAMF,QAAQ,EAAE,CAAC,CAAC;IAI3E,CAAC5B,UAAUE,SACb,CAAC;CAED,OACE,oBAAC,wBAAwB,UAAzB;EACE,OAAO;GACLM;GACAN,UAAU6B,MAAMC,KAAK,IAAIC,IAAI/B,SAAS,CAAC;GACvCL;GACAa;GACAC;GACAX,UAAUiB;GACX;YAED,oBAAC,OAAD;GACalB;GACJyB;GACP,cAAYE;GACZ,eAAY;GAEXpB;GACE;EAC4B"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ let react = require("react");
4
+
5
+ //#region src/components/Pagination/PaginationContext.ts
6
+ const PaginationContext = (0, react.createContext)(null);
7
+ function usePaginationContext() {
8
+ const context = (0, react.useContext)(PaginationContext);
9
+ if (context == null) throw new Error("Pagination components must be used within a Pagination component");
10
+ return context;
11
+ }
12
+
13
+ //#endregion
14
+ exports.PaginationContext = PaginationContext;
15
+ exports.usePaginationContext = usePaginationContext;
16
+ //# sourceMappingURL=PaginationContext.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationContext.cjs","names":["createContext","useContext","Size","PageRangeDisplayed","LinkComponentProps","href","className","children","React","ReactNode","PaginationContextValue","ElementType","page","pageCount","size","isLinkMode","makeUrl","LinkComponent","T","makeClickHandler","value","linkProps","Omit","ComponentPropsWithoutRef","PaginationContext","usePaginationContext","context","Error"],"sources":["../../../src/components/Pagination/PaginationContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nexport type Size = 'S' | 'M'\n\nexport type PageRangeDisplayed = 5 | 7\n\nexport type LinkComponentProps = {\n href: string\n className?: string\n children?: React.ReactNode\n}\n\nexport type PaginationContextValue<T extends React.ElementType = 'a'> = {\n page: number\n pageCount: number\n size: Size\n isLinkMode: boolean\n makeUrl?: (page: number) => string\n LinkComponent: T\n makeClickHandler: (value: number) => () => void\n linkProps?: Omit<React.ComponentPropsWithoutRef<T>, 'href' | 'children'>\n}\n\nexport const PaginationContext = createContext<PaginationContextValue<\n React.ElementType<LinkComponentProps>\n> | null>(null)\n\nexport function usePaginationContext<\n T extends React.ElementType = 'a',\n>(): PaginationContextValue<T> {\n const context = useContext(PaginationContext)\n if (context == null) {\n throw new Error(\n 'Pagination components must be used within a Pagination component',\n )\n }\n return context as PaginationContextValue<T>\n}\n"],"mappings":";;;;;AAuBA,MAAawB,6CAEH,KAAK;AAEf,SAAgBC,uBAEe;CAC7B,MAAMC,gCAAqBF,kBAAkB;CAC7C,IAAIE,WAAW,MACb,MAAM,IAAIC,MACR,mEACD;CAEH,OAAOD"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { createContext, useContext } from "react";
3
+
4
+ //#region src/components/Pagination/PaginationContext.ts
5
+ const PaginationContext = createContext(null);
6
+ function usePaginationContext() {
7
+ const context = useContext(PaginationContext);
8
+ if (context == null) throw new Error("Pagination components must be used within a Pagination component");
9
+ return context;
10
+ }
11
+
12
+ //#endregion
13
+ export { PaginationContext, usePaginationContext };
14
+ //# sourceMappingURL=PaginationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationContext.js","names":["createContext","useContext","Size","PageRangeDisplayed","LinkComponentProps","href","className","children","React","ReactNode","PaginationContextValue","ElementType","page","pageCount","size","isLinkMode","makeUrl","LinkComponent","T","makeClickHandler","value","linkProps","Omit","ComponentPropsWithoutRef","PaginationContext","usePaginationContext","context","Error"],"sources":["../../../src/components/Pagination/PaginationContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nexport type Size = 'S' | 'M'\n\nexport type PageRangeDisplayed = 5 | 7\n\nexport type LinkComponentProps = {\n href: string\n className?: string\n children?: React.ReactNode\n}\n\nexport type PaginationContextValue<T extends React.ElementType = 'a'> = {\n page: number\n pageCount: number\n size: Size\n isLinkMode: boolean\n makeUrl?: (page: number) => string\n LinkComponent: T\n makeClickHandler: (value: number) => () => void\n linkProps?: Omit<React.ComponentPropsWithoutRef<T>, 'href' | 'children'>\n}\n\nexport const PaginationContext = createContext<PaginationContextValue<\n React.ElementType<LinkComponentProps>\n> | null>(null)\n\nexport function usePaginationContext<\n T extends React.ElementType = 'a',\n>(): PaginationContextValue<T> {\n const context = useContext(PaginationContext)\n if (context == null) {\n throw new Error(\n 'Pagination components must be used within a Pagination component',\n )\n }\n return context as PaginationContextValue<T>\n}\n"],"mappings":";;;;AAuBA,MAAawB,oBAAoBxB,cAEvB,KAAK;AAEf,SAAgByB,uBAEe;CAC7B,MAAMC,UAAUzB,WAAWuB,kBAAkB;CAC7C,IAAIE,WAAW,MACb,MAAM,IAAIC,MACR,mEACD;CAEH,OAAOD"}
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ let react = require("react");
4
+ let warning = require("warning");
5
+ warning = require_runtime.__toESM(warning, 1);
6
+ let react_compiler_runtime = require("react-compiler-runtime");
7
+
8
+ //#region src/components/Pagination/helper.ts
9
+ function usePaginationWindow(page, pageCount, t0) {
10
+ "use memo";
11
+ const $ = (0, react_compiler_runtime.c)(8);
12
+ if ($[0] !== "ba14feb6736cfb4c0d0d38e25b9e21619705224ad19f5dc886004a78f422b93d") {
13
+ for (let $i = 0; $i < 8; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
14
+ $[0] = "ba14feb6736cfb4c0d0d38e25b9e21619705224ad19f5dc886004a78f422b93d";
15
+ }
16
+ const pageRangeDisplayed = t0 === void 0 ? 7 : t0;
17
+ if (process.env.NODE_ENV !== "production") {
18
+ (0, warning.default)((page | 0) === page, `\`page\` must be integer (${page})`);
19
+ (0, warning.default)((pageCount | 0) === pageCount, `\`pageCount\` must be integer (${pageCount})`);
20
+ (0, warning.default)(pageRangeDisplayed === 5 || pageRangeDisplayed === 7, `\`pageRangeDisplayed\` must be 5 or 7 (${pageRangeDisplayed})`);
21
+ }
22
+ const visibleLastPage = Math.min(pageCount, Math.max(page + Math.floor(pageRangeDisplayed / 2), pageRangeDisplayed));
23
+ let t1;
24
+ if (visibleLastPage <= pageRangeDisplayed) {
25
+ let t2;
26
+ if ($[1] !== visibleLastPage) {
27
+ t2 = Array.from({ length: 1 + visibleLastPage - 1 }, _temp);
28
+ $[1] = visibleLastPage;
29
+ $[2] = t2;
30
+ } else t2 = $[2];
31
+ t1 = t2;
32
+ } else {
33
+ const start = visibleLastPage - (pageRangeDisplayed - 1) + 2;
34
+ let t2;
35
+ if ($[3] !== start || $[4] !== visibleLastPage) {
36
+ let t3;
37
+ if ($[6] !== start) {
38
+ t3 = (__0, i_0) => start + i_0;
39
+ $[6] = start;
40
+ $[7] = t3;
41
+ } else t3 = $[7];
42
+ t2 = [
43
+ 1,
44
+ "...",
45
+ ...Array.from({ length: 1 + visibleLastPage - start }, t3)
46
+ ];
47
+ $[3] = start;
48
+ $[4] = visibleLastPage;
49
+ $[5] = t2;
50
+ } else t2 = $[5];
51
+ t1 = t2;
52
+ }
53
+ const window = t1;
54
+ (0, react.useDebugValue)(window);
55
+ return window;
56
+ }
57
+ function _temp(_, i) {
58
+ return 1 + i;
59
+ }
60
+
61
+ //#endregion
62
+ exports.usePaginationWindow = usePaginationWindow;
63
+ //# sourceMappingURL=helper.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.cjs","names":["useDebugValue","warning","PageRangeDisplayed","usePaginationWindow","page","pageCount","t0","$","_c","$i","Symbol","for","pageRangeDisplayed","undefined","process","env","NODE_ENV","visibleLastPage","Math","min","max","floor","t1","t2","Array","from","length","_temp","start","t3","__0","i_0","i","const","window","_"],"sources":["../../../src/components/Pagination/helper.ts"],"sourcesContent":["import { useDebugValue } from 'react'\nimport warning from 'warning'\nimport type { PageRangeDisplayed } from './PaginationContext'\n\nexport function usePaginationWindow(\n page: number,\n pageCount: number,\n pageRangeDisplayed: PageRangeDisplayed = 7,\n) {\n 'use memo'\n // ページャーのリンク生成例:\n //\n // < [ 1 ] [*2*] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] [ 2 ] [ 3 ] [*4*] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] ... [ 4 ] [*5*] [ 6 ] [ 7 ] [ 8 ] >\n //\n // < [ 1 ] ... [ 99 ] [*100*] [ 101 ] [ 102 ] [ 103 ] >\n //\n // < [ 1 ] ... [ 99 ] [ 100 ] [ 101 ] [ 102 ] [*103*]\n //\n // [*1*] [ 2 ] >\n //\n // デザインの意図: 前後移動時のカーソル移動を最小限にする。\n\n if (process.env.NODE_ENV !== 'production') {\n warning((page | 0) === page, `\\`page\\` must be integer (${page})`)\n warning(\n (pageCount | 0) === pageCount,\n `\\`pageCount\\` must be integer (${pageCount})`,\n )\n warning(\n pageRangeDisplayed === 5 || pageRangeDisplayed === 7,\n `\\`pageRangeDisplayed\\` must be 5 or 7 (${pageRangeDisplayed})`,\n )\n }\n\n const visibleFirstPage = 1\n const visibleLastPage = Math.min(\n pageCount,\n Math.max(page + Math.floor(pageRangeDisplayed / 2), pageRangeDisplayed),\n )\n\n const window = (() => {\n if (visibleLastPage <= pageRangeDisplayed) {\n // 表示範囲が1-7ページなら省略は無い。\n return Array.from(\n { length: 1 + visibleLastPage - visibleFirstPage },\n (_, i) => visibleFirstPage + i,\n )\n } else {\n const start = visibleLastPage - (pageRangeDisplayed - 1) + 2\n // 表示範囲が1-7ページを超えるなら、\n // - 1ページ目は固定で表示する\n // - 2ページ目から現在のページの直前までは省略する\n return [\n visibleFirstPage,\n '...' as const,\n ...Array.from(\n { length: 1 + visibleLastPage - start },\n (_, i) => start + i,\n ),\n ]\n }\n })()\n\n useDebugValue(window)\n\n return window\n}\n"],"mappings":";;;;;;;;AAIA,SAAOG,oBAAAC,MAAAC,WAAAC,IAAA;AAAA;CAAA,MAAAC,kCAAA,EAAA;CAAA,IAAAA,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,GAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,4BAAA;EAAAJ,EAAA,KAAA;;CAGL,MAAAK,qBAAAN,OAAAO,SAAA,IAAAP;CAmBA,IAAIQ,QAAOC,IAAIC,aAAc,cAAY;EACvCf,sBAASG,OAAO,OAAOA,MAAM,6BAA6BA,KAAI,GAAI;EAClEH,sBACGI,YAAY,OAAOA,WACpB,kCAAkCA,UAAS,GAC5C;EACDJ,qBACEW,uBAAuB,KAAKA,uBAAuB,GACnD,0CAA0CA,mBAAkB,GAC7D;;CAIH,MAAAK,kBAAwBC,KAAIC,IAC1Bd,WACAa,KAAIE,IAAKhB,OAAOc,KAAIG,MAAOT,qBAAqB,EAAE,EAAEA,mBACtD,CAAC;CAAA,IAAAU;CAGC,IAAIL,mBAAmBL,oBAAkB;EAAA,IAAAW;EAAA,IAAAhB,EAAA,OAAAU,iBAAA;GAEhCM,KAAAC,MAAKC,KACV,EAAAC,QAAU,IAAIT,kBAVK,GAU+B,EAClDU,MACD;GAAApB,EAAA,KAAAU;GAAAV,EAAA,KAAAgB;SAAAA,KAAAhB,EAAA;EAHDe,KAAOC;QAGN;EAED,MAAAK,QAAcX,mBAAmBL,qBAAqB,KAAK;EAAC,IAAAW;EAAA,IAAAhB,EAAA,OAAAqB,SAAArB,EAAA,OAAAU,iBAAA;GAAA,IAAAY;GAAA,IAAAtB,EAAA,OAAAqB,OAAA;IASxDC,MAAAC,KAAAC,QAAUH,QAAQI;IAACzB,EAAA,KAAAqB;IAAArB,EAAA,KAAAsB;UAAAA,KAAAtB,EAAA;GALhBgB,KAAA;IAlBc;IAoBnB;IAAc,GACXC,MAAKC,KACN,EAAAC,QAAU,IAAIT,kBAAkBW,OAAO,EACvCC,GACD;IACF;GAAAtB,EAAA,KAAAqB;GAAArB,EAAA,KAAAU;GAAAV,EAAA,KAAAgB;SAAAA,KAAAhB,EAAA;EAPDe,KAAOC;;CAZX,MAAAW,SAAeZ;CAuBftB,yBAAckC,OAAO;CAAA,OAEdA;;AAjEF,SAAAP,MAAAQ,GAAAH,GAAA;CAAA,OAkCoB,IAWUA"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { useDebugValue } from "react";
3
+ import warning from "warning";
4
+ import { c } from "react-compiler-runtime";
5
+
6
+ //#region src/components/Pagination/helper.ts
7
+ function usePaginationWindow(page, pageCount, t0) {
8
+ "use memo";
9
+ const $ = c(8);
10
+ if ($[0] !== "ba14feb6736cfb4c0d0d38e25b9e21619705224ad19f5dc886004a78f422b93d") {
11
+ for (let $i = 0; $i < 8; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
12
+ $[0] = "ba14feb6736cfb4c0d0d38e25b9e21619705224ad19f5dc886004a78f422b93d";
13
+ }
14
+ const pageRangeDisplayed = t0 === void 0 ? 7 : t0;
15
+ if (process.env.NODE_ENV !== "production") {
16
+ warning((page | 0) === page, `\`page\` must be integer (${page})`);
17
+ warning((pageCount | 0) === pageCount, `\`pageCount\` must be integer (${pageCount})`);
18
+ warning(pageRangeDisplayed === 5 || pageRangeDisplayed === 7, `\`pageRangeDisplayed\` must be 5 or 7 (${pageRangeDisplayed})`);
19
+ }
20
+ const visibleLastPage = Math.min(pageCount, Math.max(page + Math.floor(pageRangeDisplayed / 2), pageRangeDisplayed));
21
+ let t1;
22
+ if (visibleLastPage <= pageRangeDisplayed) {
23
+ let t2;
24
+ if ($[1] !== visibleLastPage) {
25
+ t2 = Array.from({ length: 1 + visibleLastPage - 1 }, _temp);
26
+ $[1] = visibleLastPage;
27
+ $[2] = t2;
28
+ } else t2 = $[2];
29
+ t1 = t2;
30
+ } else {
31
+ const start = visibleLastPage - (pageRangeDisplayed - 1) + 2;
32
+ let t2;
33
+ if ($[3] !== start || $[4] !== visibleLastPage) {
34
+ let t3;
35
+ if ($[6] !== start) {
36
+ t3 = (__0, i_0) => start + i_0;
37
+ $[6] = start;
38
+ $[7] = t3;
39
+ } else t3 = $[7];
40
+ t2 = [
41
+ 1,
42
+ "...",
43
+ ...Array.from({ length: 1 + visibleLastPage - start }, t3)
44
+ ];
45
+ $[3] = start;
46
+ $[4] = visibleLastPage;
47
+ $[5] = t2;
48
+ } else t2 = $[5];
49
+ t1 = t2;
50
+ }
51
+ const window = t1;
52
+ useDebugValue(window);
53
+ return window;
54
+ }
55
+ function _temp(_, i) {
56
+ return 1 + i;
57
+ }
58
+
59
+ //#endregion
60
+ export { usePaginationWindow };
61
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","names":["useDebugValue","warning","PageRangeDisplayed","usePaginationWindow","page","pageCount","t0","$","_c","$i","Symbol","for","pageRangeDisplayed","undefined","process","env","NODE_ENV","visibleLastPage","Math","min","max","floor","t1","t2","Array","from","length","_temp","start","t3","__0","i_0","i","const","window","_"],"sources":["../../../src/components/Pagination/helper.ts"],"sourcesContent":["import { useDebugValue } from 'react'\nimport warning from 'warning'\nimport type { PageRangeDisplayed } from './PaginationContext'\n\nexport function usePaginationWindow(\n page: number,\n pageCount: number,\n pageRangeDisplayed: PageRangeDisplayed = 7,\n) {\n 'use memo'\n // ページャーのリンク生成例:\n //\n // < [ 1 ] [*2*] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] [ 2 ] [ 3 ] [*4*] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] ... [ 4 ] [*5*] [ 6 ] [ 7 ] [ 8 ] >\n //\n // < [ 1 ] ... [ 99 ] [*100*] [ 101 ] [ 102 ] [ 103 ] >\n //\n // < [ 1 ] ... [ 99 ] [ 100 ] [ 101 ] [ 102 ] [*103*]\n //\n // [*1*] [ 2 ] >\n //\n // デザインの意図: 前後移動時のカーソル移動を最小限にする。\n\n if (process.env.NODE_ENV !== 'production') {\n warning((page | 0) === page, `\\`page\\` must be integer (${page})`)\n warning(\n (pageCount | 0) === pageCount,\n `\\`pageCount\\` must be integer (${pageCount})`,\n )\n warning(\n pageRangeDisplayed === 5 || pageRangeDisplayed === 7,\n `\\`pageRangeDisplayed\\` must be 5 or 7 (${pageRangeDisplayed})`,\n )\n }\n\n const visibleFirstPage = 1\n const visibleLastPage = Math.min(\n pageCount,\n Math.max(page + Math.floor(pageRangeDisplayed / 2), pageRangeDisplayed),\n )\n\n const window = (() => {\n if (visibleLastPage <= pageRangeDisplayed) {\n // 表示範囲が1-7ページなら省略は無い。\n return Array.from(\n { length: 1 + visibleLastPage - visibleFirstPage },\n (_, i) => visibleFirstPage + i,\n )\n } else {\n const start = visibleLastPage - (pageRangeDisplayed - 1) + 2\n // 表示範囲が1-7ページを超えるなら、\n // - 1ページ目は固定で表示する\n // - 2ページ目から現在のページの直前までは省略する\n return [\n visibleFirstPage,\n '...' as const,\n ...Array.from(\n { length: 1 + visibleLastPage - start },\n (_, i) => start + i,\n ),\n ]\n }\n })()\n\n useDebugValue(window)\n\n return window\n}\n"],"mappings":";;;;;;AAIA,SAAOG,oBAAAC,MAAAC,WAAAC,IAAA;AAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAD,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,GAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,4BAAA;EAAAJ,EAAA,KAAA;;CAGL,MAAAK,qBAAAN,OAAAO,SAAA,IAAAP;CAmBA,IAAIQ,QAAOC,IAAIC,aAAc,cAAY;EACvCf,SAASG,OAAO,OAAOA,MAAM,6BAA6BA,KAAI,GAAI;EAClEH,SACGI,YAAY,OAAOA,WACpB,kCAAkCA,UAAS,GAC5C;EACDJ,QACEW,uBAAuB,KAAKA,uBAAuB,GACnD,0CAA0CA,mBAAkB,GAC7D;;CAIH,MAAAK,kBAAwBC,KAAIC,IAC1Bd,WACAa,KAAIE,IAAKhB,OAAOc,KAAIG,MAAOT,qBAAqB,EAAE,EAAEA,mBACtD,CAAC;CAAA,IAAAU;CAGC,IAAIL,mBAAmBL,oBAAkB;EAAA,IAAAW;EAAA,IAAAhB,EAAA,OAAAU,iBAAA;GAEhCM,KAAAC,MAAKC,KACV,EAAAC,QAAU,IAAIT,kBAVK,GAU+B,EAClDU,MACD;GAAApB,EAAA,KAAAU;GAAAV,EAAA,KAAAgB;SAAAA,KAAAhB,EAAA;EAHDe,KAAOC;QAGN;EAED,MAAAK,QAAcX,mBAAmBL,qBAAqB,KAAK;EAAC,IAAAW;EAAA,IAAAhB,EAAA,OAAAqB,SAAArB,EAAA,OAAAU,iBAAA;GAAA,IAAAY;GAAA,IAAAtB,EAAA,OAAAqB,OAAA;IASxDC,MAAAC,KAAAC,QAAUH,QAAQI;IAACzB,EAAA,KAAAqB;IAAArB,EAAA,KAAAsB;UAAAA,KAAAtB,EAAA;GALhBgB,KAAA;IAlBc;IAoBnB;IAAc,GACXC,MAAKC,KACN,EAAAC,QAAU,IAAIT,kBAAkBW,OAAO,EACvCC,GACD;IACF;GAAAtB,EAAA,KAAAqB;GAAArB,EAAA,KAAAU;GAAAV,EAAA,KAAAgB;SAAAA,KAAAhB,EAAA;EAPDe,KAAOC;;CAZX,MAAAW,SAAeZ;CAuBftB,cAAckC,OAAO;CAAA,OAEdA;;AAjEF,SAAAP,MAAAQ,GAAAH,GAAA;CAAA,OAkCoB,IAWUA"}