smarthr-ui 99.3.2 → 99.4.0

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 (475) hide show
  1. package/lib/_virtual/plugin.cjs +1 -1
  2. package/lib/_virtual/plugin.js +1 -1
  3. package/lib/components/AccordionPanel/AccordionPanel.cjs +1 -1
  4. package/lib/components/AccordionPanel/AccordionPanel.js +1 -1
  5. package/lib/components/AccordionPanel/AccordionPanelContent.cjs +1 -1
  6. package/lib/components/AccordionPanel/AccordionPanelContent.js +1 -1
  7. package/lib/components/AccordionPanel/AccordionPanelItem.cjs +1 -1
  8. package/lib/components/AccordionPanel/AccordionPanelItem.js +1 -1
  9. package/lib/components/AccordionPanel/AccordionPanelTrigger.cjs +1 -1
  10. package/lib/components/AccordionPanel/AccordionPanelTrigger.js +1 -1
  11. package/lib/components/AppHeader/components/common/AppLauncherFeatures.cjs +1 -1
  12. package/lib/components/AppHeader/components/common/AppLauncherFeatures.js +1 -1
  13. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.cjs +1 -1
  14. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.js +1 -1
  15. package/lib/components/AppHeader/components/common/CommonButton.cjs +1 -1
  16. package/lib/components/AppHeader/components/common/CommonButton.js +1 -1
  17. package/lib/components/AppHeader/components/desktop/AppLauncher.cjs +3 -3
  18. package/lib/components/AppHeader/components/desktop/AppLauncher.cjs.map +1 -1
  19. package/lib/components/AppHeader/components/desktop/AppLauncher.js +3 -3
  20. package/lib/components/AppHeader/components/desktop/AppLauncher.js.map +1 -1
  21. package/lib/components/AppHeader/components/desktop/DesktopHeader.cjs +1 -1
  22. package/lib/components/AppHeader/components/desktop/DesktopHeader.js +1 -1
  23. package/lib/components/AppHeader/components/desktop/Navigation.cjs +1 -1
  24. package/lib/components/AppHeader/components/desktop/Navigation.js +1 -1
  25. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.cjs +1 -1
  26. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.js +1 -1
  27. package/lib/components/AppHeader/components/desktop/UserInfo.cjs +1 -1
  28. package/lib/components/AppHeader/components/desktop/UserInfo.js +1 -1
  29. package/lib/components/AppHeader/components/mobile/AppLauncher.cjs +3 -3
  30. package/lib/components/AppHeader/components/mobile/AppLauncher.cjs.map +1 -1
  31. package/lib/components/AppHeader/components/mobile/AppLauncher.js +3 -3
  32. package/lib/components/AppHeader/components/mobile/AppLauncher.js.map +1 -1
  33. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.cjs +1 -1
  34. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.js +1 -1
  35. package/lib/components/AppHeader/components/mobile/LanguageSelector.cjs +1 -1
  36. package/lib/components/AppHeader/components/mobile/LanguageSelector.js +1 -1
  37. package/lib/components/AppHeader/components/mobile/Menu.cjs +1 -1
  38. package/lib/components/AppHeader/components/mobile/Menu.js +1 -1
  39. package/lib/components/AppHeader/components/mobile/MenuDialog.cjs +1 -1
  40. package/lib/components/AppHeader/components/mobile/MenuDialog.js +1 -1
  41. package/lib/components/AppHeader/components/mobile/MobileHeader.cjs +1 -1
  42. package/lib/components/AppHeader/components/mobile/MobileHeader.cjs.map +1 -1
  43. package/lib/components/AppHeader/components/mobile/MobileHeader.js +1 -1
  44. package/lib/components/AppHeader/components/mobile/MobileHeader.js.map +1 -1
  45. package/lib/components/AppHeader/components/mobile/Navigation.cjs +1 -1
  46. package/lib/components/AppHeader/components/mobile/Navigation.js +1 -1
  47. package/lib/components/AppHeader/components/mobile/NavigationItem.cjs +1 -1
  48. package/lib/components/AppHeader/components/mobile/NavigationItem.js +1 -1
  49. package/lib/components/AppHeader/components/mobile/ReleaseNote.cjs +1 -1
  50. package/lib/components/AppHeader/components/mobile/ReleaseNote.js +1 -1
  51. package/lib/components/AppHeader/components/mobile/TenantSelector.cjs +1 -1
  52. package/lib/components/AppHeader/components/mobile/TenantSelector.js +1 -1
  53. package/lib/components/AppHeader/components/mobile/UserInfo.cjs +1 -1
  54. package/lib/components/AppHeader/components/mobile/UserInfo.js +1 -1
  55. package/lib/components/AppHeader/hooks/useAppLauncher.cjs +10 -2
  56. package/lib/components/AppHeader/hooks/useAppLauncher.cjs.map +1 -1
  57. package/lib/components/AppHeader/hooks/useAppLauncher.d.ts +1 -0
  58. package/lib/components/AppHeader/hooks/useAppLauncher.js +10 -2
  59. package/lib/components/AppHeader/hooks/useAppLauncher.js.map +1 -1
  60. package/lib/components/AppNavi/AppNavi.cjs +1 -1
  61. package/lib/components/AppNavi/AppNavi.js +1 -1
  62. package/lib/components/AppNavi/AppNaviAnchor.cjs +1 -1
  63. package/lib/components/AppNavi/AppNaviAnchor.js +1 -1
  64. package/lib/components/AppNavi/AppNaviButton.cjs +1 -1
  65. package/lib/components/AppNavi/AppNaviButton.js +1 -1
  66. package/lib/components/AppNavi/AppNaviCustomTag.cjs +1 -1
  67. package/lib/components/AppNavi/AppNaviCustomTag.js +1 -1
  68. package/lib/components/AppNavi/AppNaviDropdown.cjs +1 -1
  69. package/lib/components/AppNavi/AppNaviDropdown.js +1 -1
  70. package/lib/components/AppNavi/AppNaviDropdownMenuButton.cjs +1 -1
  71. package/lib/components/AppNavi/AppNaviDropdownMenuButton.js +1 -1
  72. package/lib/components/AppNavi/itemClassNameGenerator.cjs +1 -1
  73. package/lib/components/AppNavi/itemClassNameGenerator.js +1 -1
  74. package/lib/components/Badge/Badge.cjs +1 -1
  75. package/lib/components/Badge/Badge.js +1 -1
  76. package/lib/components/BottomFixedArea/BottomFixedArea.cjs +1 -1
  77. package/lib/components/BottomFixedArea/BottomFixedArea.js +1 -1
  78. package/lib/components/Browser/Browser.cjs +1 -1
  79. package/lib/components/Browser/Browser.js +1 -1
  80. package/lib/components/Browser/BrowserColumn.cjs +1 -1
  81. package/lib/components/Browser/BrowserColumn.js +1 -1
  82. package/lib/components/Browser/BrowserItem.cjs +1 -1
  83. package/lib/components/Browser/BrowserItem.js +1 -1
  84. package/lib/components/Button/AnchorButton.cjs +1 -1
  85. package/lib/components/Button/AnchorButton.js +1 -1
  86. package/lib/components/Button/Button.cjs +1 -1
  87. package/lib/components/Button/Button.js +1 -1
  88. package/lib/components/Button/DisabledReason.cjs +1 -1
  89. package/lib/components/Button/DisabledReason.js +1 -1
  90. package/lib/components/Button/UnstyledButton.cjs +1 -1
  91. package/lib/components/Button/UnstyledButton.js +1 -1
  92. package/lib/components/Button/useButtonWrapper.cjs +1 -1
  93. package/lib/components/Button/useButtonWrapper.js +1 -1
  94. package/lib/components/Calendar/Calendar.cjs +1 -1
  95. package/lib/components/Calendar/Calendar.js +1 -1
  96. package/lib/components/Calendar/CalendarTable.cjs +1 -1
  97. package/lib/components/Calendar/CalendarTable.js +1 -1
  98. package/lib/components/Calendar/YearPicker.cjs +1 -1
  99. package/lib/components/Calendar/YearPicker.js +1 -1
  100. package/lib/components/Checkbox/Checkbox.cjs +1 -1
  101. package/lib/components/Checkbox/Checkbox.js +1 -1
  102. package/lib/components/Chip/Chip.cjs +1 -1
  103. package/lib/components/Chip/Chip.js +1 -1
  104. package/lib/components/Combobox/ItemButton.cjs +1 -1
  105. package/lib/components/Combobox/ItemButton.js +1 -1
  106. package/lib/components/Combobox/MultiCombobox/MultiCombobox.cjs +15 -5
  107. package/lib/components/Combobox/MultiCombobox/MultiCombobox.cjs.map +1 -1
  108. package/lib/components/Combobox/MultiCombobox/MultiCombobox.js +16 -6
  109. package/lib/components/Combobox/MultiCombobox/MultiCombobox.js.map +1 -1
  110. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.cjs +1 -1
  111. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.js +1 -1
  112. package/lib/components/Combobox/SingleCombobox/SingleCombobox.cjs +7 -3
  113. package/lib/components/Combobox/SingleCombobox/SingleCombobox.cjs.map +1 -1
  114. package/lib/components/Combobox/SingleCombobox/SingleCombobox.js +8 -4
  115. package/lib/components/Combobox/SingleCombobox/SingleCombobox.js.map +1 -1
  116. package/lib/components/Combobox/useListbox.cjs +8 -4
  117. package/lib/components/Combobox/useListbox.cjs.map +1 -1
  118. package/lib/components/Combobox/useListbox.js +8 -4
  119. package/lib/components/Combobox/useListbox.js.map +1 -1
  120. package/lib/components/DatePicker/DatePicker.cjs +7 -3
  121. package/lib/components/DatePicker/DatePicker.cjs.map +1 -1
  122. package/lib/components/DatePicker/DatePicker.js +7 -3
  123. package/lib/components/DatePicker/DatePicker.js.map +1 -1
  124. package/lib/components/DefinitionList/DefinitionList.cjs +1 -1
  125. package/lib/components/DefinitionList/DefinitionList.js +1 -1
  126. package/lib/components/DefinitionList/DefinitionListItem.cjs +8 -9
  127. package/lib/components/DefinitionList/DefinitionListItem.cjs.map +1 -1
  128. package/lib/components/DefinitionList/DefinitionListItem.js +8 -9
  129. package/lib/components/DefinitionList/DefinitionListItem.js.map +1 -1
  130. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.cjs +1 -1
  131. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.js +1 -1
  132. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.cjs +32 -4
  133. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.cjs.map +1 -1
  134. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.d.ts +1 -1
  135. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.js +29 -1
  136. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.js.map +1 -1
  137. package/lib/components/Dialog/ControlledStepFormDialog/StepFormDialogContentInner.cjs.map +1 -1
  138. package/lib/components/Dialog/ControlledStepFormDialog/StepFormDialogContentInner.d.ts +1 -2
  139. package/lib/components/Dialog/ControlledStepFormDialog/StepFormDialogContentInner.js.map +1 -1
  140. package/lib/components/Dialog/ControlledStepFormDialog/type.cjs +3 -0
  141. package/lib/components/Dialog/ControlledStepFormDialog/type.cjs.map +1 -0
  142. package/lib/components/Dialog/ControlledStepFormDialog/type.d.ts +25 -0
  143. package/lib/components/Dialog/ControlledStepFormDialog/type.js +2 -0
  144. package/lib/components/Dialog/ControlledStepFormDialog/type.js.map +1 -0
  145. package/lib/components/Dialog/DialogBody.cjs +1 -1
  146. package/lib/components/Dialog/DialogBody.js +1 -1
  147. package/lib/components/Dialog/DialogContentInner.cjs +1 -1
  148. package/lib/components/Dialog/DialogContentInner.js +1 -1
  149. package/lib/components/Dialog/DialogOverlap.cjs +1 -1
  150. package/lib/components/Dialog/DialogOverlap.js +1 -1
  151. package/lib/components/Dialog/FocusTrap.cjs +61 -44
  152. package/lib/components/Dialog/FocusTrap.cjs.map +1 -1
  153. package/lib/components/Dialog/FocusTrap.js +62 -45
  154. package/lib/components/Dialog/FocusTrap.js.map +1 -1
  155. package/lib/components/Dialog/ModelessDialog/ModelessDialog.cjs +1 -1
  156. package/lib/components/Dialog/ModelessDialog/ModelessDialog.js +1 -1
  157. package/lib/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.cjs +20 -10
  158. package/lib/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.cjs.map +1 -1
  159. package/lib/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.d.ts +1 -1
  160. package/lib/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.js +20 -10
  161. package/lib/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.js.map +1 -1
  162. package/lib/components/Dialog/dialogInnerStyle.cjs +1 -1
  163. package/lib/components/Dialog/dialogInnerStyle.js +1 -1
  164. package/lib/components/Disclosure/useDisclosure.cjs +6 -3
  165. package/lib/components/Disclosure/useDisclosure.cjs.map +1 -1
  166. package/lib/components/Disclosure/useDisclosure.js +6 -3
  167. package/lib/components/Disclosure/useDisclosure.js.map +1 -1
  168. package/lib/components/DropZone/DropZone.cjs +1 -1
  169. package/lib/components/DropZone/DropZone.js +1 -1
  170. package/lib/components/Dropdown/Dropdown.cjs +20 -9
  171. package/lib/components/Dropdown/Dropdown.cjs.map +1 -1
  172. package/lib/components/Dropdown/Dropdown.js +20 -9
  173. package/lib/components/Dropdown/Dropdown.js.map +1 -1
  174. package/lib/components/Dropdown/DropdownCloser.cjs +1 -1
  175. package/lib/components/Dropdown/DropdownCloser.js +1 -1
  176. package/lib/components/Dropdown/DropdownContentInner.cjs +79 -3
  177. package/lib/components/Dropdown/DropdownContentInner.cjs.map +1 -1
  178. package/lib/components/Dropdown/DropdownContentInner.js +81 -5
  179. package/lib/components/Dropdown/DropdownContentInner.js.map +1 -1
  180. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs +70 -3
  181. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs.map +1 -1
  182. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js +71 -4
  183. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js.map +1 -1
  184. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuGroup.cjs +1 -1
  185. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuGroup.js +1 -1
  186. package/lib/components/Dropdown/DropdownTrigger.cjs +1 -1
  187. package/lib/components/Dropdown/DropdownTrigger.js +1 -1
  188. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.cjs +1 -1
  189. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.js +1 -1
  190. package/lib/components/Dropdown/SortDropdown/SortDropdown.cjs +68 -14
  191. package/lib/components/Dropdown/SortDropdown/SortDropdown.cjs.map +1 -1
  192. package/lib/components/Dropdown/SortDropdown/SortDropdown.js +69 -15
  193. package/lib/components/Dropdown/SortDropdown/SortDropdown.js.map +1 -1
  194. package/lib/components/ErrorScreen/ErrorScreen.cjs +1 -1
  195. package/lib/components/ErrorScreen/ErrorScreen.js +1 -1
  196. package/lib/components/FileViewer/PDFViewer.cjs +27 -26
  197. package/lib/components/FileViewer/PDFViewer.cjs.map +1 -1
  198. package/lib/components/FileViewer/PDFViewer.js +28 -27
  199. package/lib/components/FileViewer/PDFViewer.js.map +1 -1
  200. package/lib/components/FileViewer/SearchController.cjs +1 -1
  201. package/lib/components/FileViewer/SearchController.js +1 -1
  202. package/lib/components/FloatArea/FloatArea.cjs +26 -85
  203. package/lib/components/FloatArea/FloatArea.cjs.map +1 -1
  204. package/lib/components/FloatArea/FloatArea.js +26 -85
  205. package/lib/components/FloatArea/FloatArea.js.map +1 -1
  206. package/lib/components/FormControl/FormControl.cjs +60 -41
  207. package/lib/components/FormControl/FormControl.cjs.map +1 -1
  208. package/lib/components/FormControl/FormControl.js +60 -41
  209. package/lib/components/FormControl/FormControl.js.map +1 -1
  210. package/lib/components/Header/AppLauncher/AppLauncher.cjs +5 -5
  211. package/lib/components/Header/AppLauncher/AppLauncher.cjs.map +1 -1
  212. package/lib/components/Header/AppLauncher/AppLauncher.js +5 -5
  213. package/lib/components/Header/AppLauncher/AppLauncher.js.map +1 -1
  214. package/lib/components/Header/Header.cjs +1 -1
  215. package/lib/components/Header/Header.js +1 -1
  216. package/lib/components/Header/HeaderDropdownMenuButton.cjs +1 -1
  217. package/lib/components/Header/HeaderDropdownMenuButton.js +1 -1
  218. package/lib/components/Header/HeaderLink.cjs +1 -1
  219. package/lib/components/Header/HeaderLink.js +1 -1
  220. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.cjs +1 -1
  221. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.js +1 -1
  222. package/lib/components/Heading/Heading.cjs +1 -1
  223. package/lib/components/Heading/Heading.js +1 -1
  224. package/lib/components/Heading/PageHeading/PageHeading.cjs +43 -27
  225. package/lib/components/Heading/PageHeading/PageHeading.cjs.map +1 -1
  226. package/lib/components/Heading/PageHeading/PageHeading.js +44 -28
  227. package/lib/components/Heading/PageHeading/PageHeading.js.map +1 -1
  228. package/lib/components/Icon/generateIcon.cjs +1 -1
  229. package/lib/components/Icon/generateIcon.js +1 -1
  230. package/lib/components/InformationPanel/InformationPanel.cjs +7 -7
  231. package/lib/components/InformationPanel/InformationPanel.cjs.map +1 -1
  232. package/lib/components/InformationPanel/InformationPanel.js +8 -8
  233. package/lib/components/InformationPanel/InformationPanel.js.map +1 -1
  234. package/lib/components/Input/CurrencyInput/CurrencyInput.cjs +17 -16
  235. package/lib/components/Input/CurrencyInput/CurrencyInput.cjs.map +1 -1
  236. package/lib/components/Input/CurrencyInput/CurrencyInput.js +18 -17
  237. package/lib/components/Input/CurrencyInput/CurrencyInput.js.map +1 -1
  238. package/lib/components/Input/Input.cjs +15 -16
  239. package/lib/components/Input/Input.cjs.map +1 -1
  240. package/lib/components/Input/Input.js +16 -17
  241. package/lib/components/Input/Input.js.map +1 -1
  242. package/lib/components/Input/InputWithTooltip/InputWithTooltip.cjs +3 -3
  243. package/lib/components/Input/InputWithTooltip/InputWithTooltip.cjs.map +1 -1
  244. package/lib/components/Input/InputWithTooltip/InputWithTooltip.js +3 -3
  245. package/lib/components/Input/InputWithTooltip/InputWithTooltip.js.map +1 -1
  246. package/lib/components/Input/SearchInput/SearchInput.cjs +10 -3
  247. package/lib/components/Input/SearchInput/SearchInput.cjs.map +1 -1
  248. package/lib/components/Input/SearchInput/SearchInput.js +10 -3
  249. package/lib/components/Input/SearchInput/SearchInput.js.map +1 -1
  250. package/lib/components/InputFile/style.cjs +1 -1
  251. package/lib/components/InputFile/style.js +1 -1
  252. package/lib/components/Layout/Center/Center.cjs +1 -1
  253. package/lib/components/Layout/Center/Center.js +1 -1
  254. package/lib/components/Layout/Cluster/Cluster.cjs +1 -1
  255. package/lib/components/Layout/Cluster/Cluster.js +1 -1
  256. package/lib/components/Layout/Container/Container.cjs +1 -1
  257. package/lib/components/Layout/Container/Container.js +1 -1
  258. package/lib/components/Layout/Reel/Reel.cjs +1 -1
  259. package/lib/components/Layout/Reel/Reel.js +1 -1
  260. package/lib/components/Layout/Sidebar/Sidebar.cjs +1 -1
  261. package/lib/components/Layout/Sidebar/Sidebar.js +1 -1
  262. package/lib/components/Layout/Stack/Stack.cjs +1 -1
  263. package/lib/components/Layout/Stack/Stack.js +1 -1
  264. package/lib/components/LineClamp/LineClamp.cjs +1 -1
  265. package/lib/components/LineClamp/LineClamp.js +1 -1
  266. package/lib/components/Loader/Loader.cjs +1 -1
  267. package/lib/components/Loader/Loader.js +1 -1
  268. package/lib/components/Loader/LoaderSpinner.cjs +1 -1
  269. package/lib/components/Loader/LoaderSpinner.js +1 -1
  270. package/lib/components/NotificationBar/NotificationBar.cjs +1 -1
  271. package/lib/components/NotificationBar/NotificationBar.js +1 -1
  272. package/lib/components/PageCounter/PageCounter.cjs +1 -1
  273. package/lib/components/PageCounter/PageCounter.js +1 -1
  274. package/lib/components/Pagination/Pagination.cjs +1 -1
  275. package/lib/components/Pagination/Pagination.js +1 -1
  276. package/lib/components/Panel/Groupbox/Groupbox.cjs +1 -1
  277. package/lib/components/Panel/Groupbox/Groupbox.js +1 -1
  278. package/lib/components/Panel/Panel.cjs +1 -1
  279. package/lib/components/Panel/Panel.js +1 -1
  280. package/lib/components/Picker/style.cjs +1 -1
  281. package/lib/components/Picker/style.js +1 -1
  282. package/lib/components/RadioButton/RadioButton.cjs +1 -1
  283. package/lib/components/RadioButton/RadioButton.js +1 -1
  284. package/lib/components/RadioButtonPanel/RadioButtonPanel.cjs +5 -4
  285. package/lib/components/RadioButtonPanel/RadioButtonPanel.cjs.map +1 -1
  286. package/lib/components/RadioButtonPanel/RadioButtonPanel.js +6 -5
  287. package/lib/components/RadioButtonPanel/RadioButtonPanel.js.map +1 -1
  288. package/lib/components/ResponseMessage/ResponseMessage.cjs +1 -1
  289. package/lib/components/ResponseMessage/ResponseMessage.js +1 -1
  290. package/lib/components/Scroller/Scroller.cjs +23 -13
  291. package/lib/components/Scroller/Scroller.cjs.map +1 -1
  292. package/lib/components/Scroller/Scroller.js +24 -14
  293. package/lib/components/Scroller/Scroller.js.map +1 -1
  294. package/lib/components/SegmentedControl/SegmentedControl.cjs +30 -23
  295. package/lib/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  296. package/lib/components/SegmentedControl/SegmentedControl.js +31 -24
  297. package/lib/components/SegmentedControl/SegmentedControl.js.map +1 -1
  298. package/lib/components/Select/Select.cjs +1 -1
  299. package/lib/components/Select/Select.js +1 -1
  300. package/lib/components/SideMenu/SideMenu.cjs +1 -1
  301. package/lib/components/SideMenu/SideMenu.js +1 -1
  302. package/lib/components/SideMenu/SideMenuGroup.cjs +1 -1
  303. package/lib/components/SideMenu/SideMenuGroup.js +1 -1
  304. package/lib/components/SideMenu/SideMenuItem.cjs +1 -1
  305. package/lib/components/SideMenu/SideMenuItem.js +1 -1
  306. package/lib/components/SideNav/SideNav.cjs +1 -1
  307. package/lib/components/SideNav/SideNav.js +1 -1
  308. package/lib/components/SideNav/SideNavItemButton.cjs +1 -1
  309. package/lib/components/SideNav/SideNavItemButton.js +1 -1
  310. package/lib/components/SmartHRLogo/SmartHRLogo.cjs +1 -1
  311. package/lib/components/SmartHRLogo/SmartHRLogo.js +1 -1
  312. package/lib/components/SpreadsheetTable/SpreadsheetTable.cjs +1 -1
  313. package/lib/components/SpreadsheetTable/SpreadsheetTable.js +1 -1
  314. package/lib/components/StatusLabel/StatusLabel.cjs +1 -1
  315. package/lib/components/StatusLabel/StatusLabel.js +1 -1
  316. package/lib/components/Stepper/HorizontalStepItem.cjs +1 -1
  317. package/lib/components/Stepper/HorizontalStepItem.js +1 -1
  318. package/lib/components/Stepper/StepCounter.cjs +1 -1
  319. package/lib/components/Stepper/StepCounter.js +1 -1
  320. package/lib/components/Stepper/StepStatusIcon.cjs +1 -1
  321. package/lib/components/Stepper/StepStatusIcon.js +1 -1
  322. package/lib/components/Stepper/Stepper.cjs +1 -1
  323. package/lib/components/Stepper/Stepper.js +1 -1
  324. package/lib/components/Stepper/VerticalStepItem.cjs +1 -1
  325. package/lib/components/Stepper/VerticalStepItem.js +1 -1
  326. package/lib/components/Switch/Switch.cjs +1 -1
  327. package/lib/components/Switch/Switch.js +1 -1
  328. package/lib/components/TabBar/TabBar.cjs +1 -1
  329. package/lib/components/TabBar/TabBar.js +1 -1
  330. package/lib/components/TabBar/TabItem.cjs +1 -1
  331. package/lib/components/TabBar/TabItem.js +1 -1
  332. package/lib/components/Table/BulkActionRow.cjs +1 -1
  333. package/lib/components/Table/BulkActionRow.js +1 -1
  334. package/lib/components/Table/EmptyTableBody.cjs +1 -1
  335. package/lib/components/Table/EmptyTableBody.js +1 -1
  336. package/lib/components/Table/Table.cjs +1 -1
  337. package/lib/components/Table/Table.js +1 -1
  338. package/lib/components/Table/TableReel.cjs +1 -1
  339. package/lib/components/Table/TableReel.js +1 -1
  340. package/lib/components/Table/Td.cjs +1 -1
  341. package/lib/components/Table/Td.js +1 -1
  342. package/lib/components/Table/TdCheckbox.cjs +1 -1
  343. package/lib/components/Table/TdCheckbox.js +1 -1
  344. package/lib/components/Table/TdRadioButton.cjs +1 -1
  345. package/lib/components/Table/TdRadioButton.js +1 -1
  346. package/lib/components/Table/Th.cjs +1 -1
  347. package/lib/components/Table/Th.js +1 -1
  348. package/lib/components/Table/ThCheckbox.cjs +1 -1
  349. package/lib/components/Table/ThCheckbox.js +1 -1
  350. package/lib/components/Table/ThSortButton.cjs +1 -1
  351. package/lib/components/Table/ThSortButton.js +1 -1
  352. package/lib/components/Table/reelShadowStyle.cjs +1 -1
  353. package/lib/components/Table/reelShadowStyle.js +1 -1
  354. package/lib/components/Text/Text.cjs +1 -1
  355. package/lib/components/Text/Text.js +1 -1
  356. package/lib/components/TextLink/TextLink.cjs +1 -1
  357. package/lib/components/TextLink/TextLink.js +1 -1
  358. package/lib/components/TextLink/UpwardLink/UpwardLink.cjs +1 -1
  359. package/lib/components/TextLink/UpwardLink/UpwardLink.js +1 -1
  360. package/lib/components/Textarea/Textarea.cjs +1 -1
  361. package/lib/components/Textarea/Textarea.js +1 -1
  362. package/lib/components/Timeline/Timeline.cjs +1 -1
  363. package/lib/components/Timeline/Timeline.js +1 -1
  364. package/lib/components/Timeline/TimelineItem.cjs +1 -1
  365. package/lib/components/Timeline/TimelineItem.js +1 -1
  366. package/lib/components/Tooltip/ControlledTooltip.cjs +1 -1
  367. package/lib/components/Tooltip/ControlledTooltip.js +1 -1
  368. package/lib/components/Tooltip/Tooltip.cjs +1 -1
  369. package/lib/components/Tooltip/Tooltip.js +1 -1
  370. package/lib/components/Tooltip/TooltipPortal.cjs +1 -1
  371. package/lib/components/Tooltip/TooltipPortal.js +1 -1
  372. package/lib/components/VisuallyHiddenText/VisuallyHiddenText.cjs +1 -1
  373. package/lib/components/VisuallyHiddenText/VisuallyHiddenText.js +1 -1
  374. package/lib/configureTwMerge.cjs +1 -1
  375. package/lib/configureTwMerge.js +1 -1
  376. package/lib/hooks/useAnimationFrame.cjs +40 -0
  377. package/lib/hooks/useAnimationFrame.cjs.map +1 -0
  378. package/lib/hooks/useAnimationFrame.d.ts +19 -0
  379. package/lib/hooks/useAnimationFrame.js +38 -0
  380. package/lib/hooks/useAnimationFrame.js.map +1 -0
  381. package/lib/hooks/useLatest.cjs +1 -2
  382. package/lib/hooks/useLatest.cjs.map +1 -1
  383. package/lib/hooks/useLatest.js +1 -2
  384. package/lib/hooks/useLatest.js.map +1 -1
  385. package/lib/hooks/useMediaQueries/useMediaQueries.cjs +41 -29
  386. package/lib/hooks/useMediaQueries/useMediaQueries.cjs.map +1 -1
  387. package/lib/hooks/useMediaQueries/useMediaQueries.js +42 -30
  388. package/lib/hooks/useMediaQueries/useMediaQueries.js.map +1 -1
  389. package/lib/hooks/useMergeRefs.cjs +56 -0
  390. package/lib/hooks/useMergeRefs.cjs.map +1 -0
  391. package/lib/hooks/useMergeRefs.d.ts +18 -0
  392. package/lib/hooks/useMergeRefs.js +54 -0
  393. package/lib/hooks/useMergeRefs.js.map +1 -0
  394. package/lib/hooks/useOnce.cjs +42 -0
  395. package/lib/hooks/useOnce.cjs.map +1 -0
  396. package/lib/hooks/useOnce.d.ts +19 -0
  397. package/lib/hooks/useOnce.js +40 -0
  398. package/lib/hooks/useOnce.js.map +1 -0
  399. package/lib/hooks/useSV/useSV.cjs +1 -1
  400. package/lib/hooks/useSV/useSV.js +1 -1
  401. package/lib/index.cjs +2 -0
  402. package/lib/index.cjs.map +1 -1
  403. package/lib/index.d.ts +1 -0
  404. package/lib/index.js +1 -0
  405. package/lib/index.js.map +1 -1
  406. package/lib/{components/Input/CurrencyInput/currencyInputHelper.js → libs/formatNumericString.cjs} +11 -3
  407. package/lib/libs/formatNumericString.cjs.map +1 -0
  408. package/lib/libs/formatNumericString.d.ts +7 -0
  409. package/lib/{components/Input/CurrencyInput/currencyInputHelper.cjs → libs/formatNumericString.js} +9 -5
  410. package/lib/libs/formatNumericString.js.map +1 -0
  411. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/chunk-I2QGXAA3.cjs.map +1 -0
  412. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/chunk-I2QGXAA3.js.map +1 -0
  413. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.cjs.map +1 -0
  414. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.js.map +1 -0
  415. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/public/create-plugin.cjs.map +1 -0
  416. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/public/create-plugin.js.map +1 -0
  417. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/util/createPlugin.cjs.map +1 -0
  418. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/util/createPlugin.js.map +1 -0
  419. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/plugin.cjs.map +1 -0
  420. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/plugin.js.map +1 -0
  421. package/metadata.json +1 -1
  422. package/package.json +1 -1
  423. package/lib/components/Dialog/ControlledStepFormDialog/useStepFormDialogButton.cjs +0 -36
  424. package/lib/components/Dialog/ControlledStepFormDialog/useStepFormDialogButton.cjs.map +0 -1
  425. package/lib/components/Dialog/ControlledStepFormDialog/useStepFormDialogButton.d.ts +0 -32
  426. package/lib/components/Dialog/ControlledStepFormDialog/useStepFormDialogButton.js +0 -34
  427. package/lib/components/Dialog/ControlledStepFormDialog/useStepFormDialogButton.js.map +0 -1
  428. package/lib/components/Dropdown/DropdownMenuButton/useKeyboardNavigation.cjs +0 -78
  429. package/lib/components/Dropdown/DropdownMenuButton/useKeyboardNavigation.cjs.map +0 -1
  430. package/lib/components/Dropdown/DropdownMenuButton/useKeyboardNavigation.d.ts +0 -3
  431. package/lib/components/Dropdown/DropdownMenuButton/useKeyboardNavigation.js +0 -76
  432. package/lib/components/Dropdown/DropdownMenuButton/useKeyboardNavigation.js.map +0 -1
  433. package/lib/components/Dropdown/SortDropdown/useSortDropdown.cjs +0 -136
  434. package/lib/components/Dropdown/SortDropdown/useSortDropdown.cjs.map +0 -1
  435. package/lib/components/Dropdown/SortDropdown/useSortDropdown.d.ts +0 -34
  436. package/lib/components/Dropdown/SortDropdown/useSortDropdown.js +0 -134
  437. package/lib/components/Dropdown/SortDropdown/useSortDropdown.js.map +0 -1
  438. package/lib/components/Dropdown/useKeyboardNavigation.cjs +0 -90
  439. package/lib/components/Dropdown/useKeyboardNavigation.cjs.map +0 -1
  440. package/lib/components/Dropdown/useKeyboardNavigation.d.ts +0 -2
  441. package/lib/components/Dropdown/useKeyboardNavigation.js +0 -88
  442. package/lib/components/Dropdown/useKeyboardNavigation.js.map +0 -1
  443. package/lib/components/Input/CurrencyInput/currencyInputHelper.cjs.map +0 -1
  444. package/lib/components/Input/CurrencyInput/currencyInputHelper.d.ts +0 -1
  445. package/lib/components/Input/CurrencyInput/currencyInputHelper.js.map +0 -1
  446. package/lib/components/Input/SearchInput/SearchInputIcon.cjs +0 -18
  447. package/lib/components/Input/SearchInput/SearchInputIcon.cjs.map +0 -1
  448. package/lib/components/Input/SearchInput/SearchInputIcon.d.ts +0 -1
  449. package/lib/components/Input/SearchInput/SearchInputIcon.js +0 -16
  450. package/lib/components/Input/SearchInput/SearchInputIcon.js.map +0 -1
  451. package/lib/libs/object.cjs +0 -8
  452. package/lib/libs/object.cjs.map +0 -1
  453. package/lib/libs/object.d.ts +0 -6
  454. package/lib/libs/object.js +0 -5
  455. package/lib/libs/object.js.map +0 -1
  456. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/chunk-I2QGXAA3.cjs.map +0 -1
  457. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/chunk-I2QGXAA3.js.map +0 -1
  458. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs.map +0 -1
  459. package/lib/vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js.map +0 -1
  460. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/public/create-plugin.cjs.map +0 -1
  461. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/public/create-plugin.js.map +0 -1
  462. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/util/createPlugin.cjs.map +0 -1
  463. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/lib/util/createPlugin.js.map +0 -1
  464. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/plugin.cjs.map +0 -1
  465. package/lib/vendor/.pnpm/tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_/vendor/tailwindcss/plugin.js.map +0 -1
  466. /package/lib/vendor/.pnpm/{tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__ → tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c}/vendor/tailwind-variants/dist/chunk-I2QGXAA3.cjs +0 -0
  467. /package/lib/vendor/.pnpm/{tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__ → tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c}/vendor/tailwind-variants/dist/chunk-I2QGXAA3.js +0 -0
  468. /package/lib/vendor/.pnpm/{tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__ → tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c}/vendor/tailwind-variants/dist/index.cjs +0 -0
  469. /package/lib/vendor/.pnpm/{tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__ → tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c}/vendor/tailwind-variants/dist/index.js +0 -0
  470. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/lib/public/create-plugin.cjs +0 -0
  471. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/lib/public/create-plugin.js +0 -0
  472. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/lib/util/createPlugin.cjs +0 -0
  473. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/lib/util/createPlugin.js +0 -0
  474. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/plugin.cjs +0 -0
  475. /package/lib/vendor/.pnpm/{tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3_ → tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helpers@0.5.23__@types_node@20.19.43_typescript@5.9.3_}/vendor/tailwindcss/plugin.js +0 -0
@@ -1,55 +1,72 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useRef, useMemo, useImperativeHandle, useEffect } from 'react';
2
+ import { forwardRef, useRef, useMemo, useImperativeHandle } from 'react';
3
+ import { useMergeRefs } from '../../hooks/useMergeRefs.js';
3
4
  import { tabbable } from '../../libs/tabbable.js';
4
5
 
6
+ const DUMMY_FOCUS_CLASSNAME = 'smarthr-ui-Dialog-dummyFocus';
7
+ const DUMMY_FOCUS_SELECTOR = `.${DUMMY_FOCUS_CLASSNAME}[tabIndex]`;
5
8
  const FocusTrap = forwardRef(({ firstFocusTarget, children }, ref) => {
9
+ // TODO: innerRefを削除して、functionsのuseMemoの中にletで変数としてnodeの参照を持つことを検討
6
10
  const innerRef = useRef(null);
7
- const dummyFocusRef = useRef(null);
8
- const functions = useMemo(() => ({
9
- focus: () => {
10
- (firstFocusTarget?.current || dummyFocusRef.current)?.focus();
11
- },
12
- }), [firstFocusTarget]);
13
- useImperativeHandle(ref, () => functions, [functions]);
14
- useEffect(() => {
15
- // FocusTrap がマウントされた時点のフォーカス要素を保存
16
- const triggerElement = document.activeElement;
17
- functions.focus();
18
- const handleKeyDown = (e) => {
19
- // IME 変換中の Tab は変換候補の選択に使われるため、フォーカストラップの対象外にする。
20
- // ここで preventDefault してしまうと、Dialog 内で日本語入力中に Tab を押しても
21
- // 変換候補が確定されず、未確定文字列がそのまま入力されてしまう。
22
- if (e.key !== 'Tab' || e.isComposing || innerRef.current === null) {
23
- return;
24
- }
25
- const tabbables = tabbable(innerRef.current).filter((elm) => elm.tabIndex >= 0);
26
- if (tabbables.length === 0) {
27
- return;
28
- }
29
- const firstTabbable = tabbables[0];
30
- const lastTabbable = tabbables[tabbables.length - 1];
31
- const currentFocused = tabbables.find((elm) => elm === e.target);
32
- if (e.shiftKey) {
33
- if (currentFocused === firstTabbable || document.activeElement === dummyFocusRef.current) {
34
- e.preventDefault();
35
- lastTabbable.focus();
36
- }
37
- }
38
- else if (currentFocused === lastTabbable) {
39
- e.preventDefault();
40
- firstTabbable.focus();
41
- }
11
+ const functions = useMemo(() => {
12
+ const findDummyFocus = () => innerRef.current?.querySelector(DUMMY_FOCUS_SELECTOR);
13
+ const focus = () => {
14
+ (firstFocusTarget?.current || findDummyFocus())?.focus();
42
15
  };
43
- window.addEventListener('keydown', handleKeyDown);
44
- return () => {
45
- window.removeEventListener('keydown', handleKeyDown);
46
- // フォーカストラップ終了時にトリガにフォーカスを戻す
47
- if (triggerElement instanceof HTMLElement) {
48
- triggerElement.focus();
49
- }
16
+ return {
17
+ callbackRef: (node) => {
18
+ if (!node) {
19
+ return;
20
+ }
21
+ // FocusTrap がマウントされた時点のフォーカス要素を保存
22
+ const triggerElement = document.activeElement;
23
+ const rAFId = requestAnimationFrame(focus);
24
+ const handleKeyDown = (e) => {
25
+ // IME 変換中の Tab は変換候補の選択に使われるため、フォーカストラップの対象外にする。
26
+ // ここで preventDefault してしまうと、Dialog 内で日本語入力中に Tab を押しても
27
+ // 変換候補が確定されず、未確定文字列がそのまま入力されてしまう。
28
+ if (e.key !== 'Tab' || e.isComposing) {
29
+ return;
30
+ }
31
+ const tabbables = tabbable(node).filter((elm) => elm.tabIndex >= 0);
32
+ if (tabbables.length === 0) {
33
+ return;
34
+ }
35
+ const firstTabbable = tabbables[0];
36
+ const lastTabbable = tabbables[tabbables.length - 1];
37
+ const currentFocused = tabbables.find((elm) => elm === e.target);
38
+ if (e.shiftKey) {
39
+ if (currentFocused === firstTabbable || document.activeElement === findDummyFocus()) {
40
+ e.preventDefault();
41
+ lastTabbable.focus();
42
+ }
43
+ }
44
+ else if (currentFocused === lastTabbable) {
45
+ e.preventDefault();
46
+ firstTabbable.focus();
47
+ }
48
+ };
49
+ window.addEventListener('keydown', handleKeyDown);
50
+ // HINT: useMergeRefsはv18でもcallbackRefのcleanup関数に対応している
51
+ // もしuseMergeRefsをなくす場合、react v18対応が不要になっているかどうか確認する
52
+ return () => {
53
+ cancelAnimationFrame(rAFId);
54
+ window.removeEventListener('keydown', handleKeyDown);
55
+ if (triggerElement instanceof HTMLElement) {
56
+ triggerElement.focus();
57
+ }
58
+ };
59
+ },
60
+ focus,
50
61
  };
51
- }, [functions]);
52
- return (jsxs("div", { ref: innerRef, children: [jsx("div", { ref: dummyFocusRef, tabIndex: -1 }), children] }));
62
+ }, [firstFocusTarget]);
63
+ // HINT: useMergeRefsはv18でもcallbackRefのcleanup関数に対応している
64
+ // もしuseMergeRefsをなくす場合、react v18対応が不要になっているかどうか確認する
65
+ const mergedRef = useMergeRefs(innerRef, functions.callbackRef);
66
+ useImperativeHandle(ref, () => functions, [functions]);
67
+ return (jsxs("div", { ref: mergedRef, children: [!firstFocusTarget && (
68
+ /* eslint-disable-next-line smarthr/a11y-scroller-has-tabindex -- dummy element for focus management. */
69
+ jsx("div", { tabIndex: -1, className: DUMMY_FOCUS_CLASSNAME })), children] }));
53
70
  });
54
71
 
55
72
  export { FocusTrap };
@@ -1 +1 @@
1
- {"version":3,"file":"FocusTrap.js","sources":["../../../src/components/Dialog/FocusTrap.tsx"],"sourcesContent":["import {\n type PropsWithChildren,\n type RefObject,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react'\n\nimport { tabbable } from '../../libs/tabbable'\n\ntype Props = PropsWithChildren<{\n firstFocusTarget?: RefObject<HTMLElement>\n}>\n\nexport type FocusTrapRef = {\n focus: () => void\n}\n\nexport const FocusTrap = forwardRef<FocusTrapRef, Props>(({ firstFocusTarget, children }, ref) => {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const dummyFocusRef = useRef<HTMLDivElement>(null)\n\n const functions = useMemo(\n () => ({\n focus: () => {\n ;(firstFocusTarget?.current || dummyFocusRef.current)?.focus()\n },\n }),\n [firstFocusTarget],\n )\n\n useImperativeHandle(ref, () => functions, [functions])\n\n useEffect(() => {\n // FocusTrap がマウントされた時点のフォーカス要素を保存\n const triggerElement = document.activeElement\n\n functions.focus()\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // IME 変換中の Tab は変換候補の選択に使われるため、フォーカストラップの対象外にする。\n // ここで preventDefault してしまうと、Dialog 内で日本語入力中に Tab を押しても\n // 変換候補が確定されず、未確定文字列がそのまま入力されてしまう。\n if (e.key !== 'Tab' || e.isComposing || innerRef.current === null) {\n return\n }\n\n const tabbables = tabbable(innerRef.current).filter((elm) => elm.tabIndex >= 0)\n\n if (tabbables.length === 0) {\n return\n }\n\n const firstTabbable = tabbables[0]\n const lastTabbable = tabbables[tabbables.length - 1]\n const currentFocused = tabbables.find((elm) => elm === e.target)\n\n if (e.shiftKey) {\n if (currentFocused === firstTabbable || document.activeElement === dummyFocusRef.current) {\n e.preventDefault()\n lastTabbable.focus()\n }\n } else if (currentFocused === lastTabbable) {\n e.preventDefault()\n firstTabbable.focus()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n // フォーカストラップ終了時にトリガにフォーカスを戻す\n if (triggerElement instanceof HTMLElement) {\n triggerElement.focus()\n }\n }\n }, [functions])\n\n return (\n <div ref={innerRef}>\n {/* eslint-disable-next-line smarthr/a11y-scroller-has-tabindex -- dummy element for focus management. */}\n <div ref={dummyFocusRef} tabIndex={-1} />\n {children}\n </div>\n )\n})\n"],"names":["_jsxs","_jsx"],"mappings":";;;;AAoBO,MAAM,SAAS,GAAG,UAAU,CAAsB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAI;AAC/F,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC;AACpD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC;AAElD,IAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO;QACL,KAAK,EAAE,MAAK;YACT,CAAC,gBAAgB,EAAE,OAAO,IAAI,aAAa,CAAC,OAAO,GAAG,KAAK,EAAE;QAChE,CAAC;AACF,KAAA,CAAC,EACF,CAAC,gBAAgB,CAAC,CACnB;AAED,IAAA,mBAAmB,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAEtD,SAAS,CAAC,MAAK;;AAEb,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa;QAE7C,SAAS,CAAC,KAAK,EAAE;AAEjB,QAAA,MAAM,aAAa,GAAG,CAAC,CAAgB,KAAI;;;;AAIzC,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE;gBACjE;YACF;YAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;AAE/E,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;AAEhE,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,IAAI,cAAc,KAAK,aAAa,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,CAAC,OAAO,EAAE;oBACxF,CAAC,CAAC,cAAc,EAAE;oBAClB,YAAY,CAAC,KAAK,EAAE;gBACtB;YACF;AAAO,iBAAA,IAAI,cAAc,KAAK,YAAY,EAAE;gBAC1C,CAAC,CAAC,cAAc,EAAE;gBAClB,aAAa,CAAC,KAAK,EAAE;YACvB;AACF,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;AAEjD,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;;AAEpD,YAAA,IAAI,cAAc,YAAY,WAAW,EAAE;gBACzC,cAAc,CAAC,KAAK,EAAE;YACxB;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAEf,QACEA,cAAK,GAAG,EAAE,QAAQ,EAAA,QAAA,EAAA,CAEhBC,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAA,CAAI,EACxC,QAAQ,CAAA,EAAA,CACL;AAEV,CAAC;;;;"}
1
+ {"version":3,"file":"FocusTrap.js","sources":["../../../src/components/Dialog/FocusTrap.tsx"],"sourcesContent":["import {\n type PropsWithChildren,\n type RefObject,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react'\n\nimport { useMergeRefs } from '../../hooks/useMergeRefs'\nimport { tabbable } from '../../libs/tabbable'\n\ntype Props = PropsWithChildren<{\n firstFocusTarget?: RefObject<HTMLElement>\n}>\n\nexport type FocusTrapRef = {\n focus: () => void\n}\n\nconst DUMMY_FOCUS_CLASSNAME = 'smarthr-ui-Dialog-dummyFocus'\nconst DUMMY_FOCUS_SELECTOR = `.${DUMMY_FOCUS_CLASSNAME}[tabIndex]`\n\nexport const FocusTrap = forwardRef<FocusTrapRef, Props>(({ firstFocusTarget, children }, ref) => {\n // TODO: innerRefを削除して、functionsのuseMemoの中にletで変数としてnodeの参照を持つことを検討\n const innerRef = useRef<HTMLDivElement | null>(null)\n\n const functions = useMemo(() => {\n const findDummyFocus = () => innerRef.current?.querySelector<HTMLElement>(DUMMY_FOCUS_SELECTOR)\n\n const focus = () => {\n ;(firstFocusTarget?.current || findDummyFocus())?.focus()\n }\n\n return {\n callbackRef: (node: HTMLDivElement | null) => {\n if (!node) {\n return\n }\n\n // FocusTrap がマウントされた時点のフォーカス要素を保存\n const triggerElement = document.activeElement\n\n const rAFId = requestAnimationFrame(focus)\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // IME 変換中の Tab は変換候補の選択に使われるため、フォーカストラップの対象外にする。\n // ここで preventDefault してしまうと、Dialog 内で日本語入力中に Tab を押しても\n // 変換候補が確定されず、未確定文字列がそのまま入力されてしまう。\n if (e.key !== 'Tab' || e.isComposing) {\n return\n }\n\n const tabbables = tabbable(node).filter((elm) => elm.tabIndex >= 0)\n\n if (tabbables.length === 0) {\n return\n }\n\n const firstTabbable = tabbables[0]\n const lastTabbable = tabbables[tabbables.length - 1]\n const currentFocused = tabbables.find((elm) => elm === e.target)\n\n if (e.shiftKey) {\n if (currentFocused === firstTabbable || document.activeElement === findDummyFocus()) {\n e.preventDefault()\n lastTabbable.focus()\n }\n } else if (currentFocused === lastTabbable) {\n e.preventDefault()\n firstTabbable.focus()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n\n // HINT: useMergeRefsはv18でもcallbackRefのcleanup関数に対応している\n // もしuseMergeRefsをなくす場合、react v18対応が不要になっているかどうか確認する\n return () => {\n cancelAnimationFrame(rAFId)\n window.removeEventListener('keydown', handleKeyDown)\n\n if (triggerElement instanceof HTMLElement) {\n triggerElement.focus()\n }\n }\n },\n focus,\n }\n }, [firstFocusTarget])\n\n // HINT: useMergeRefsはv18でもcallbackRefのcleanup関数に対応している\n // もしuseMergeRefsをなくす場合、react v18対応が不要になっているかどうか確認する\n const mergedRef = useMergeRefs(innerRef, functions.callbackRef)\n\n useImperativeHandle(ref, () => functions as { focus: () => void }, [functions])\n\n return (\n <div ref={mergedRef}>\n {!firstFocusTarget && (\n /* eslint-disable-next-line smarthr/a11y-scroller-has-tabindex -- dummy element for focus management. */\n <div tabIndex={-1} className={DUMMY_FOCUS_CLASSNAME} />\n )}\n {children}\n </div>\n )\n})\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAoBA,MAAM,qBAAqB,GAAG,8BAA8B;AAC5D,MAAM,oBAAoB,GAAG,CAAA,CAAA,EAAI,qBAAqB,YAAY;AAE3D,MAAM,SAAS,GAAG,UAAU,CAAsB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAI;;AAE/F,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC;AAEpD,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAc,oBAAoB,CAAC;QAE/F,MAAM,KAAK,GAAG,MAAK;YAChB,CAAC,gBAAgB,EAAE,OAAO,IAAI,cAAc,EAAE,GAAG,KAAK,EAAE;AAC3D,QAAA,CAAC;QAED,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAA2B,KAAI;gBAC3C,IAAI,CAAC,IAAI,EAAE;oBACT;gBACF;;AAGA,gBAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa;AAE7C,gBAAA,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAE1C,gBAAA,MAAM,aAAa,GAAG,CAAC,CAAgB,KAAI;;;;oBAIzC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE;wBACpC;oBACF;oBAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;AAEnE,oBAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1B;oBACF;AAEA,oBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC;oBAClC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,oBAAA,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;AAEhE,oBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;wBACd,IAAI,cAAc,KAAK,aAAa,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE,EAAE;4BACnF,CAAC,CAAC,cAAc,EAAE;4BAClB,YAAY,CAAC,KAAK,EAAE;wBACtB;oBACF;AAAO,yBAAA,IAAI,cAAc,KAAK,YAAY,EAAE;wBAC1C,CAAC,CAAC,cAAc,EAAE;wBAClB,aAAa,CAAC,KAAK,EAAE;oBACvB;AACF,gBAAA,CAAC;AAED,gBAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAIjD,gBAAA,OAAO,MAAK;oBACV,oBAAoB,CAAC,KAAK,CAAC;AAC3B,oBAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;AAEpD,oBAAA,IAAI,cAAc,YAAY,WAAW,EAAE;wBACzC,cAAc,CAAC,KAAK,EAAE;oBACxB;AACF,gBAAA,CAAC;YACH,CAAC;YACD,KAAK;SACN;AACH,IAAA,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;;;IAItB,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC;AAE/D,IAAA,mBAAmB,CAAC,GAAG,EAAE,MAAM,SAAkC,EAAE,CAAC,SAAS,CAAC,CAAC;IAE/E,QACEA,cAAK,GAAG,EAAE,SAAS,EAAA,QAAA,EAAA,CAChB,CAAC,gBAAgB;;AAEhB,YAAAC,GAAA,CAAA,KAAA,EAAA,EAAK,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAA,CAAI,CACxD,EACA,QAAQ,CAAA,EAAA,CACL;AAEV,CAAC;;;;"}
@@ -4,7 +4,7 @@
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React = require('react');
6
6
  var cjs = require('./../../../vendor/.pnpm/react-draggable@4.7.1_react-dom@19.2.8_react@19.2.8__react@19.2.8/vendor/react-draggable/build/cjs/cjs.cjs');
7
- var index = require('./../../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
7
+ var index = require('./../../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.cjs');
8
8
  var hooks_useHandleEscape = require('../../../hooks/useHandleEscape.cjs');
9
9
  var hooks_useLatest = require('../../../hooks/useLatest.cjs');
10
10
  require('../../../intl/IntlProvider.cjs');
@@ -2,7 +2,7 @@
2
2
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
3
  import { memo, useId, useRef, useMemo, useState, useEffect } from 'react';
4
4
  import cjs_default from './../../../vendor/.pnpm/react-draggable@4.7.1_react-dom@19.2.8_react@19.2.8__react@19.2.8/vendor/react-draggable/build/cjs/cjs.js';
5
- import { tv as ce } from './../../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
5
+ import { tv as ce } from './../../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.js';
6
6
  import { useHandleEscape } from '../../../hooks/useHandleEscape.js';
7
7
  import { useLatest } from '../../../hooks/useLatest.js';
8
8
  import '../../../intl/IntlProvider.js';
@@ -1,37 +1,45 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
+ var hooks_useAnimationFrame = require('../../../hooks/useAnimationFrame.cjs');
4
5
  var hooks_useLatest = require('../../../hooks/useLatest.cjs');
5
6
 
6
7
  const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch';
7
- function useRemoteTrigger({ onClickClose: orgOnClickClose, onPressEscape: orgOnPressEscape, onToggle, onOpen, onClose, id, }) {
8
+ function useRemoteTrigger({ onClickClose, onPressEscape, onToggle, onOpen, onClose, id, }) {
8
9
  const [isOpen, setIsOpen] = React.useState(false);
10
+ const toggleFrame = hooks_useAnimationFrame.useAnimationFrame();
9
11
  const latest = hooks_useLatest.useLatest({
10
12
  onToggle,
11
13
  onOpen,
12
14
  onClose,
13
- orgOnClickClose,
14
- orgOnPressEscape,
15
+ onClickClose,
16
+ onPressEscape,
17
+ toggleFrame,
15
18
  });
16
19
  const functions = React.useMemo(() => {
17
20
  const updateIsOpen = (newIsOpen) => {
18
21
  setIsOpen(newIsOpen);
19
- latest.onToggle?.(newIsOpen);
20
- latest[newIsOpen ? 'onOpen' : 'onClose']?.();
22
+ if (latest.onToggle || latest[newIsOpen ? 'onOpen' : 'onClose']) {
23
+ // HINT: 利用者側でstateの更新が行われている可能性があるため、遅延させる
24
+ latest.toggleFrame.request(() => {
25
+ latest.onToggle?.(newIsOpen);
26
+ latest[newIsOpen ? 'onOpen' : 'onClose']?.();
27
+ });
28
+ }
21
29
  };
22
30
  return {
23
31
  updateIsOpen,
24
32
  handleClickClose: () => {
25
- if (latest.orgOnClickClose) {
26
- return latest.orgOnClickClose(() => {
33
+ if (latest.onClickClose) {
34
+ return latest.onClickClose(() => {
27
35
  updateIsOpen(false);
28
36
  });
29
37
  }
30
38
  updateIsOpen(false);
31
39
  },
32
40
  handlePressEscape: () => {
33
- if (latest.orgOnPressEscape) {
34
- return latest.orgOnPressEscape(() => {
41
+ if (latest.onPressEscape) {
42
+ return latest.onPressEscape(() => {
35
43
  updateIsOpen(false);
36
44
  });
37
45
  }
@@ -47,9 +55,11 @@ function useRemoteTrigger({ onClickClose: orgOnClickClose, onPressEscape: orgOnP
47
55
  });
48
56
  document.addEventListener(TRIGGER_EVENT, handler);
49
57
  return () => {
58
+ // HINT: アンマウント後に予約済みのonToggle・onOpen・onCloseが呼ばれないようにする
59
+ toggleFrame.cancel();
50
60
  document.removeEventListener(TRIGGER_EVENT, handler);
51
61
  };
52
- }, [id, functions]);
62
+ }, [id, toggleFrame, functions]);
53
63
  return {
54
64
  isOpen,
55
65
  handleClickClose: functions.handleClickClose,
@@ -1 +1 @@
1
- {"version":3,"file":"useRemoteTrigger.cjs","sources":["../../../../src/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useLatest } from '../../../hooks/useLatest'\n\nexport const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch'\n\ntype Props = {\n id: string\n onClickClose?: (close: () => void) => void\n onPressEscape?: (close: () => void) => void\n onToggle?: (isOpen: boolean) => void\n onOpen?: () => void\n onClose?: () => void\n}\n\nexport function useRemoteTrigger({\n onClickClose: orgOnClickClose,\n onPressEscape: orgOnPressEscape,\n onToggle,\n onOpen,\n onClose,\n id,\n}: Props) {\n const [isOpen, setIsOpen] = useState(false)\n const latest = useLatest({\n onToggle,\n onOpen,\n onClose,\n orgOnClickClose,\n orgOnPressEscape,\n })\n\n const functions = useMemo(() => {\n const updateIsOpen = (newIsOpen: boolean) => {\n setIsOpen(newIsOpen)\n latest.onToggle?.(newIsOpen)\n latest[newIsOpen ? 'onOpen' : 'onClose']?.()\n }\n\n return {\n updateIsOpen,\n handleClickClose: () => {\n if (latest.orgOnClickClose) {\n return latest.orgOnClickClose(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n handlePressEscape: () => {\n if (latest.orgOnPressEscape) {\n return latest.orgOnPressEscape(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n }\n }, [latest])\n\n useEffect(() => {\n const handler = ((e: Event & { detail: { id: string } }) => {\n if (id === e.detail.id) {\n functions.updateIsOpen(true)\n }\n }) as Parameters<typeof document.addEventListener>['1']\n\n document.addEventListener(TRIGGER_EVENT, handler)\n\n return () => {\n document.removeEventListener(TRIGGER_EVENT, handler)\n }\n }, [id, functions])\n\n return {\n isOpen,\n handleClickClose: functions.handleClickClose,\n handlePressEscape: functions.handlePressEscape,\n }\n}\n"],"names":["useState","useLatest","useMemo","useEffect"],"mappings":";;;;;AAIO,MAAM,aAAa,GAAG;SAWb,gBAAgB,CAAC,EAC/B,YAAY,EAAE,eAAe,EAC7B,aAAa,EAAE,gBAAgB,EAC/B,QAAQ,EACR,MAAM,EACN,OAAO,EACP,EAAE,GACI,EAAA;IACN,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,MAAM,GAAGC,yBAAS,CAAC;QACvB,QAAQ;QACR,MAAM;QACN,OAAO;QACP,eAAe;QACf,gBAAgB;AACjB,KAAA,CAAC;AAEF,IAAA,MAAM,SAAS,GAAGC,aAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,YAAY,GAAG,CAAC,SAAkB,KAAI;YAC1C,SAAS,CAAC,SAAS,CAAC;AACpB,YAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC5B,YAAA,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI;AAC9C,QAAA,CAAC;QAED,OAAO;YACL,YAAY;YACZ,gBAAgB,EAAE,MAAK;AACrB,gBAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,oBAAA,OAAO,MAAM,CAAC,eAAe,CAAC,MAAK;wBACjC,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,iBAAiB,EAAE,MAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,oBAAA,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAK;wBAClC,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;SACF;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,IAAI,CAAC,CAAqC,KAAI;YACzD,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACtB,gBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAsD;AAEvD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;AAEjD,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;AACtD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM;QACN,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;KAC/C;AACH;;;;;"}
1
+ {"version":3,"file":"useRemoteTrigger.cjs","sources":["../../../../src/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useAnimationFrame } from '../../../hooks/useAnimationFrame'\nimport { useLatest } from '../../../hooks/useLatest'\n\nexport const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch'\n\ntype Props = {\n id: string\n onClickClose?: (close: () => void) => void\n onPressEscape?: (close: () => void) => void\n onToggle?: (isOpen: boolean) => void\n onOpen?: () => void\n onClose?: () => void\n}\n\nexport function useRemoteTrigger({\n onClickClose,\n onPressEscape,\n onToggle,\n onOpen,\n onClose,\n id,\n}: Props) {\n const [isOpen, setIsOpen] = useState(false)\n const toggleFrame = useAnimationFrame()\n const latest = useLatest({\n onToggle,\n onOpen,\n onClose,\n onClickClose,\n onPressEscape,\n toggleFrame,\n })\n\n const functions = useMemo(() => {\n const updateIsOpen = (newIsOpen: boolean) => {\n setIsOpen(newIsOpen)\n\n if (latest.onToggle || latest[newIsOpen ? 'onOpen' : 'onClose']) {\n // HINT: 利用者側でstateの更新が行われている可能性があるため、遅延させる\n latest.toggleFrame.request(() => {\n latest.onToggle?.(newIsOpen)\n latest[newIsOpen ? 'onOpen' : 'onClose']?.()\n })\n }\n }\n\n return {\n updateIsOpen,\n handleClickClose: () => {\n if (latest.onClickClose) {\n return latest.onClickClose(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n handlePressEscape: () => {\n if (latest.onPressEscape) {\n return latest.onPressEscape(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n }\n }, [latest])\n\n useEffect(() => {\n const handler = ((e: Event & { detail: { id: string } }) => {\n if (id === e.detail.id) {\n functions.updateIsOpen(true)\n }\n }) as Parameters<typeof document.addEventListener>['1']\n\n document.addEventListener(TRIGGER_EVENT, handler)\n\n return () => {\n // HINT: アンマウント後に予約済みのonToggle・onOpen・onCloseが呼ばれないようにする\n toggleFrame.cancel()\n document.removeEventListener(TRIGGER_EVENT, handler)\n }\n }, [id, toggleFrame, functions])\n\n return {\n isOpen,\n handleClickClose: functions.handleClickClose,\n handlePressEscape: functions.handlePressEscape,\n }\n}\n"],"names":["useState","useAnimationFrame","useLatest","useMemo","useEffect"],"mappings":";;;;;;AAKO,MAAM,aAAa,GAAG;AAWvB,SAAU,gBAAgB,CAAC,EAC/B,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,MAAM,EACN,OAAO,EACP,EAAE,GACI,EAAA;IACN,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AAC3C,IAAA,MAAM,WAAW,GAAGC,yCAAiB,EAAE;IACvC,MAAM,MAAM,GAAGC,yBAAS,CAAC;QACvB,QAAQ;QACR,MAAM;QACN,OAAO;QACP,YAAY;QACZ,aAAa;QACb,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,SAAS,GAAGC,aAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,YAAY,GAAG,CAAC,SAAkB,KAAI;YAC1C,SAAS,CAAC,SAAS,CAAC;AAEpB,YAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE;;AAE/D,gBAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAK;AAC9B,oBAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC5B,oBAAA,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI;AAC9C,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC;QAED,OAAO;YACL,YAAY;YACZ,gBAAgB,EAAE,MAAK;AACrB,gBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,MAAM,CAAC,YAAY,CAAC,MAAK;wBAC9B,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,iBAAiB,EAAE,MAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,oBAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAK;wBAC/B,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;SACF;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,IAAI,CAAC,CAAqC,KAAI;YACzD,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACtB,gBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAsD;AAEvD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;AAEjD,QAAA,OAAO,MAAK;;YAEV,WAAW,CAAC,MAAM,EAAE;AACpB,YAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;AACtD,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,OAAO;QACL,MAAM;QACN,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;KAC/C;AACH;;;;;"}
@@ -7,7 +7,7 @@ type Props = {
7
7
  onOpen?: () => void;
8
8
  onClose?: () => void;
9
9
  };
10
- export declare function useRemoteTrigger({ onClickClose: orgOnClickClose, onPressEscape: orgOnPressEscape, onToggle, onOpen, onClose, id, }: Props): {
10
+ export declare function useRemoteTrigger({ onClickClose, onPressEscape, onToggle, onOpen, onClose, id, }: Props): {
11
11
  isOpen: boolean;
12
12
  handleClickClose: () => void;
13
13
  handlePressEscape: () => void;
@@ -1,35 +1,43 @@
1
1
  import { useState, useMemo, useEffect } from 'react';
2
+ import { useAnimationFrame } from '../../../hooks/useAnimationFrame.js';
2
3
  import { useLatest } from '../../../hooks/useLatest.js';
3
4
 
4
5
  const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch';
5
- function useRemoteTrigger({ onClickClose: orgOnClickClose, onPressEscape: orgOnPressEscape, onToggle, onOpen, onClose, id, }) {
6
+ function useRemoteTrigger({ onClickClose, onPressEscape, onToggle, onOpen, onClose, id, }) {
6
7
  const [isOpen, setIsOpen] = useState(false);
8
+ const toggleFrame = useAnimationFrame();
7
9
  const latest = useLatest({
8
10
  onToggle,
9
11
  onOpen,
10
12
  onClose,
11
- orgOnClickClose,
12
- orgOnPressEscape,
13
+ onClickClose,
14
+ onPressEscape,
15
+ toggleFrame,
13
16
  });
14
17
  const functions = useMemo(() => {
15
18
  const updateIsOpen = (newIsOpen) => {
16
19
  setIsOpen(newIsOpen);
17
- latest.onToggle?.(newIsOpen);
18
- latest[newIsOpen ? 'onOpen' : 'onClose']?.();
20
+ if (latest.onToggle || latest[newIsOpen ? 'onOpen' : 'onClose']) {
21
+ // HINT: 利用者側でstateの更新が行われている可能性があるため、遅延させる
22
+ latest.toggleFrame.request(() => {
23
+ latest.onToggle?.(newIsOpen);
24
+ latest[newIsOpen ? 'onOpen' : 'onClose']?.();
25
+ });
26
+ }
19
27
  };
20
28
  return {
21
29
  updateIsOpen,
22
30
  handleClickClose: () => {
23
- if (latest.orgOnClickClose) {
24
- return latest.orgOnClickClose(() => {
31
+ if (latest.onClickClose) {
32
+ return latest.onClickClose(() => {
25
33
  updateIsOpen(false);
26
34
  });
27
35
  }
28
36
  updateIsOpen(false);
29
37
  },
30
38
  handlePressEscape: () => {
31
- if (latest.orgOnPressEscape) {
32
- return latest.orgOnPressEscape(() => {
39
+ if (latest.onPressEscape) {
40
+ return latest.onPressEscape(() => {
33
41
  updateIsOpen(false);
34
42
  });
35
43
  }
@@ -45,9 +53,11 @@ function useRemoteTrigger({ onClickClose: orgOnClickClose, onPressEscape: orgOnP
45
53
  });
46
54
  document.addEventListener(TRIGGER_EVENT, handler);
47
55
  return () => {
56
+ // HINT: アンマウント後に予約済みのonToggle・onOpen・onCloseが呼ばれないようにする
57
+ toggleFrame.cancel();
48
58
  document.removeEventListener(TRIGGER_EVENT, handler);
49
59
  };
50
- }, [id, functions]);
60
+ }, [id, toggleFrame, functions]);
51
61
  return {
52
62
  isOpen,
53
63
  handleClickClose: functions.handleClickClose,
@@ -1 +1 @@
1
- {"version":3,"file":"useRemoteTrigger.js","sources":["../../../../src/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useLatest } from '../../../hooks/useLatest'\n\nexport const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch'\n\ntype Props = {\n id: string\n onClickClose?: (close: () => void) => void\n onPressEscape?: (close: () => void) => void\n onToggle?: (isOpen: boolean) => void\n onOpen?: () => void\n onClose?: () => void\n}\n\nexport function useRemoteTrigger({\n onClickClose: orgOnClickClose,\n onPressEscape: orgOnPressEscape,\n onToggle,\n onOpen,\n onClose,\n id,\n}: Props) {\n const [isOpen, setIsOpen] = useState(false)\n const latest = useLatest({\n onToggle,\n onOpen,\n onClose,\n orgOnClickClose,\n orgOnPressEscape,\n })\n\n const functions = useMemo(() => {\n const updateIsOpen = (newIsOpen: boolean) => {\n setIsOpen(newIsOpen)\n latest.onToggle?.(newIsOpen)\n latest[newIsOpen ? 'onOpen' : 'onClose']?.()\n }\n\n return {\n updateIsOpen,\n handleClickClose: () => {\n if (latest.orgOnClickClose) {\n return latest.orgOnClickClose(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n handlePressEscape: () => {\n if (latest.orgOnPressEscape) {\n return latest.orgOnPressEscape(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n }\n }, [latest])\n\n useEffect(() => {\n const handler = ((e: Event & { detail: { id: string } }) => {\n if (id === e.detail.id) {\n functions.updateIsOpen(true)\n }\n }) as Parameters<typeof document.addEventListener>['1']\n\n document.addEventListener(TRIGGER_EVENT, handler)\n\n return () => {\n document.removeEventListener(TRIGGER_EVENT, handler)\n }\n }, [id, functions])\n\n return {\n isOpen,\n handleClickClose: functions.handleClickClose,\n handlePressEscape: functions.handlePressEscape,\n }\n}\n"],"names":[],"mappings":";;;AAIO,MAAM,aAAa,GAAG;SAWb,gBAAgB,CAAC,EAC/B,YAAY,EAAE,eAAe,EAC7B,aAAa,EAAE,gBAAgB,EAC/B,QAAQ,EACR,MAAM,EACN,OAAO,EACP,EAAE,GACI,EAAA;IACN,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC;QACvB,QAAQ;QACR,MAAM;QACN,OAAO;QACP,eAAe;QACf,gBAAgB;AACjB,KAAA,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,YAAY,GAAG,CAAC,SAAkB,KAAI;YAC1C,SAAS,CAAC,SAAS,CAAC;AACpB,YAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC5B,YAAA,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI;AAC9C,QAAA,CAAC;QAED,OAAO;YACL,YAAY;YACZ,gBAAgB,EAAE,MAAK;AACrB,gBAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,oBAAA,OAAO,MAAM,CAAC,eAAe,CAAC,MAAK;wBACjC,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,iBAAiB,EAAE,MAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,oBAAA,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAK;wBAClC,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;SACF;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,IAAI,CAAC,CAAqC,KAAI;YACzD,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACtB,gBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAsD;AAEvD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;AAEjD,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;AACtD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM;QACN,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;KAC/C;AACH;;;;"}
1
+ {"version":3,"file":"useRemoteTrigger.js","sources":["../../../../src/components/Dialog/RemoteDialogTrigger/useRemoteTrigger.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useAnimationFrame } from '../../../hooks/useAnimationFrame'\nimport { useLatest } from '../../../hooks/useLatest'\n\nexport const TRIGGER_EVENT = 'smarthr-ui:remote-dialog-trigger-dispatch'\n\ntype Props = {\n id: string\n onClickClose?: (close: () => void) => void\n onPressEscape?: (close: () => void) => void\n onToggle?: (isOpen: boolean) => void\n onOpen?: () => void\n onClose?: () => void\n}\n\nexport function useRemoteTrigger({\n onClickClose,\n onPressEscape,\n onToggle,\n onOpen,\n onClose,\n id,\n}: Props) {\n const [isOpen, setIsOpen] = useState(false)\n const toggleFrame = useAnimationFrame()\n const latest = useLatest({\n onToggle,\n onOpen,\n onClose,\n onClickClose,\n onPressEscape,\n toggleFrame,\n })\n\n const functions = useMemo(() => {\n const updateIsOpen = (newIsOpen: boolean) => {\n setIsOpen(newIsOpen)\n\n if (latest.onToggle || latest[newIsOpen ? 'onOpen' : 'onClose']) {\n // HINT: 利用者側でstateの更新が行われている可能性があるため、遅延させる\n latest.toggleFrame.request(() => {\n latest.onToggle?.(newIsOpen)\n latest[newIsOpen ? 'onOpen' : 'onClose']?.()\n })\n }\n }\n\n return {\n updateIsOpen,\n handleClickClose: () => {\n if (latest.onClickClose) {\n return latest.onClickClose(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n handlePressEscape: () => {\n if (latest.onPressEscape) {\n return latest.onPressEscape(() => {\n updateIsOpen(false)\n })\n }\n\n updateIsOpen(false)\n },\n }\n }, [latest])\n\n useEffect(() => {\n const handler = ((e: Event & { detail: { id: string } }) => {\n if (id === e.detail.id) {\n functions.updateIsOpen(true)\n }\n }) as Parameters<typeof document.addEventListener>['1']\n\n document.addEventListener(TRIGGER_EVENT, handler)\n\n return () => {\n // HINT: アンマウント後に予約済みのonToggle・onOpen・onCloseが呼ばれないようにする\n toggleFrame.cancel()\n document.removeEventListener(TRIGGER_EVENT, handler)\n }\n }, [id, toggleFrame, functions])\n\n return {\n isOpen,\n handleClickClose: functions.handleClickClose,\n handlePressEscape: functions.handlePressEscape,\n }\n}\n"],"names":[],"mappings":";;;;AAKO,MAAM,aAAa,GAAG;AAWvB,SAAU,gBAAgB,CAAC,EAC/B,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,MAAM,EACN,OAAO,EACP,EAAE,GACI,EAAA;IACN,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC3C,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC;QACvB,QAAQ;QACR,MAAM;QACN,OAAO;QACP,YAAY;QACZ,aAAa;QACb,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,YAAY,GAAG,CAAC,SAAkB,KAAI;YAC1C,SAAS,CAAC,SAAS,CAAC;AAEpB,YAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,EAAE;;AAE/D,gBAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAK;AAC9B,oBAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC5B,oBAAA,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI;AAC9C,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC;QAED,OAAO;YACL,YAAY;YACZ,gBAAgB,EAAE,MAAK;AACrB,gBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,oBAAA,OAAO,MAAM,CAAC,YAAY,CAAC,MAAK;wBAC9B,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,iBAAiB,EAAE,MAAK;AACtB,gBAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,oBAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAK;wBAC/B,YAAY,CAAC,KAAK,CAAC;AACrB,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,KAAK,CAAC;YACrB,CAAC;SACF;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,IAAI,CAAC,CAAqC,KAAI;YACzD,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AACtB,gBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAsD;AAEvD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;AAEjD,QAAA,OAAO,MAAK;;YAEV,WAAW,CAAC,MAAM,EAAE;AACpB,YAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;AACtD,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEhC,OAAO;QACL,MAAM;QACN,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;KAC/C;AACH;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
3
+ var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.cjs');
4
4
 
5
5
  const dialogContentInner = index.tv({
6
6
  slots: {
@@ -1,4 +1,4 @@
1
- import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
1
+ import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.js';
2
2
 
3
3
  const dialogContentInner = ce({
4
4
  slots: {
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
+ var hooks_useAnimationFrame = require('../../hooks/useAnimationFrame.cjs');
4
5
  var hooks_useLatest = require('../../hooks/useLatest.cjs');
5
6
 
6
7
  const DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change';
@@ -9,11 +10,12 @@ const DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change';
9
10
  */
10
11
  const useDisclosure = (id) => {
11
12
  const [expanded, setExpanded] = React.useState(false);
12
- const latest = hooks_useLatest.useLatest({ id, expanded });
13
+ const frame = hooks_useAnimationFrame.useAnimationFrame();
14
+ const latest = hooks_useLatest.useLatest({ id, expanded, frame });
13
15
  const functions = React.useMemo(() => ({
14
16
  safeSetExpanded: (value) => {
15
17
  // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する
16
- requestAnimationFrame(() => {
18
+ latest.frame.request(() => {
17
19
  const next = typeof value === 'function' ? value(latest.expanded) : value;
18
20
  if (next !== latest.expanded) {
19
21
  setExpanded(next);
@@ -32,9 +34,10 @@ const useDisclosure = (id) => {
32
34
  React.useEffect(() => {
33
35
  document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange);
34
36
  return () => {
37
+ frame.cancel();
35
38
  document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange);
36
39
  };
37
- }, [functions]);
40
+ }, [frame, functions]);
38
41
  return [expanded, functions.safeSetExpanded];
39
42
  };
40
43
 
@@ -1 +1 @@
1
- {"version":3,"file":"useDisclosure.cjs","sources":["../../../src/components/Disclosure/useDisclosure.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useLatest } from '../../hooks/useLatest'\n\nconst DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change'\ntype DisclosureChangeEventDetail = { id: string; expanded: boolean }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface DocumentEventMap {\n [DISCLOSURE_CHANGE_EVENT]: CustomEvent<DisclosureChangeEventDetail>\n }\n}\n\ntype Setter = (value: boolean | ((prev: boolean) => boolean)) => void\n\ntype UseDisclosureResult = [expanded: boolean, setExpanded: Setter]\n\n/**\n * 同じ `id` で呼ぶとイベント経由で状態が同期される custom hook\n */\nexport const useDisclosure = (id: string): UseDisclosureResult => {\n const [expanded, setExpanded] = useState(false)\n const latest = useLatest({ id, expanded })\n\n const functions = useMemo(\n () => ({\n safeSetExpanded: (value: boolean | ((prev: boolean) => boolean)) => {\n // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する\n requestAnimationFrame(() => {\n const next = typeof value === 'function' ? value(latest.expanded) : value\n\n if (next !== latest.expanded) {\n setExpanded(next)\n document.dispatchEvent(\n new CustomEvent<DisclosureChangeEventDetail>(DISCLOSURE_CHANGE_EVENT, {\n detail: { id: latest.id, expanded: next },\n }),\n )\n }\n })\n },\n handleDisclosureChange: (e: CustomEvent<DisclosureChangeEventDetail>) => {\n if (latest.id === e.detail.id) {\n setExpanded(e.detail.expanded)\n }\n },\n }),\n [latest],\n )\n\n useEffect(() => {\n document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n\n return () => {\n document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n }\n }, [functions])\n\n return [expanded, functions.safeSetExpanded]\n}\n"],"names":["useState","useLatest","useMemo","useEffect"],"mappings":";;;;;AAIA,MAAM,uBAAuB,GAAG,8BAA8B;AAc9D;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,EAAU,KAAyB;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAC/C,MAAM,MAAM,GAAGC,yBAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAE1C,IAAA,MAAM,SAAS,GAAGC,aAAO,CACvB,OAAO;AACL,QAAA,eAAe,EAAE,CAAC,KAA6C,KAAI;;YAEjE,qBAAqB,CAAC,MAAK;AACzB,gBAAA,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK;AAEzE,gBAAA,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC;AACjB,oBAAA,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAA8B,uBAAuB,EAAE;wBACpE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1C,qBAAA,CAAC,CACH;gBACH;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,sBAAsB,EAAE,CAAC,CAA2C,KAAI;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7B,gBAAA,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;QACF,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAEDC,eAAS,CAAC,MAAK;QACb,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AAEpF,QAAA,OAAO,MAAK;YACV,QAAQ,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AACzF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC;AAC9C;;;;"}
1
+ {"version":3,"file":"useDisclosure.cjs","sources":["../../../src/components/Disclosure/useDisclosure.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useAnimationFrame } from '../../hooks/useAnimationFrame'\nimport { useLatest } from '../../hooks/useLatest'\n\nconst DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change'\ntype DisclosureChangeEventDetail = { id: string; expanded: boolean }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface DocumentEventMap {\n [DISCLOSURE_CHANGE_EVENT]: CustomEvent<DisclosureChangeEventDetail>\n }\n}\n\ntype Setter = (value: boolean | ((prev: boolean) => boolean)) => void\n\ntype UseDisclosureResult = [expanded: boolean, setExpanded: Setter]\n\n/**\n * 同じ `id` で呼ぶとイベント経由で状態が同期される custom hook\n */\nexport const useDisclosure = (id: string): UseDisclosureResult => {\n const [expanded, setExpanded] = useState(false)\n const frame = useAnimationFrame()\n const latest = useLatest({ id, expanded, frame })\n\n const functions = useMemo(\n () => ({\n safeSetExpanded: (value: boolean | ((prev: boolean) => boolean)) => {\n // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する\n latest.frame.request(() => {\n const next = typeof value === 'function' ? value(latest.expanded) : value\n\n if (next !== latest.expanded) {\n setExpanded(next)\n document.dispatchEvent(\n new CustomEvent<DisclosureChangeEventDetail>(DISCLOSURE_CHANGE_EVENT, {\n detail: { id: latest.id, expanded: next },\n }),\n )\n }\n })\n },\n handleDisclosureChange: (e: CustomEvent<DisclosureChangeEventDetail>) => {\n if (latest.id === e.detail.id) {\n setExpanded(e.detail.expanded)\n }\n },\n }),\n [latest],\n )\n\n useEffect(() => {\n document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n\n return () => {\n frame.cancel()\n document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n }\n }, [frame, functions])\n\n return [expanded, functions.safeSetExpanded]\n}\n"],"names":["useState","useAnimationFrame","useLatest","useMemo","useEffect"],"mappings":";;;;;;AAKA,MAAM,uBAAuB,GAAG,8BAA8B;AAc9D;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,EAAU,KAAyB;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AAC/C,IAAA,MAAM,KAAK,GAAGC,yCAAiB,EAAE;AACjC,IAAA,MAAM,MAAM,GAAGC,yBAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAEjD,IAAA,MAAM,SAAS,GAAGC,aAAO,CACvB,OAAO;AACL,QAAA,eAAe,EAAE,CAAC,KAA6C,KAAI;;AAEjE,YAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAK;AACxB,gBAAA,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK;AAEzE,gBAAA,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC;AACjB,oBAAA,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAA8B,uBAAuB,EAAE;wBACpE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1C,qBAAA,CAAC,CACH;gBACH;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,sBAAsB,EAAE,CAAC,CAA2C,KAAI;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7B,gBAAA,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;QACF,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAEDC,eAAS,CAAC,MAAK;QACb,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AAEpF,QAAA,OAAO,MAAK;YACV,KAAK,CAAC,MAAM,EAAE;YACd,QAAQ,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AACzF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEtB,IAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC;AAC9C;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { useState, useMemo, useEffect } from 'react';
2
+ import { useAnimationFrame } from '../../hooks/useAnimationFrame.js';
2
3
  import { useLatest } from '../../hooks/useLatest.js';
3
4
 
4
5
  const DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change';
@@ -7,11 +8,12 @@ const DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change';
7
8
  */
8
9
  const useDisclosure = (id) => {
9
10
  const [expanded, setExpanded] = useState(false);
10
- const latest = useLatest({ id, expanded });
11
+ const frame = useAnimationFrame();
12
+ const latest = useLatest({ id, expanded, frame });
11
13
  const functions = useMemo(() => ({
12
14
  safeSetExpanded: (value) => {
13
15
  // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する
14
- requestAnimationFrame(() => {
16
+ latest.frame.request(() => {
15
17
  const next = typeof value === 'function' ? value(latest.expanded) : value;
16
18
  if (next !== latest.expanded) {
17
19
  setExpanded(next);
@@ -30,9 +32,10 @@ const useDisclosure = (id) => {
30
32
  useEffect(() => {
31
33
  document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange);
32
34
  return () => {
35
+ frame.cancel();
33
36
  document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange);
34
37
  };
35
- }, [functions]);
38
+ }, [frame, functions]);
36
39
  return [expanded, functions.safeSetExpanded];
37
40
  };
38
41
 
@@ -1 +1 @@
1
- {"version":3,"file":"useDisclosure.js","sources":["../../../src/components/Disclosure/useDisclosure.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useLatest } from '../../hooks/useLatest'\n\nconst DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change'\ntype DisclosureChangeEventDetail = { id: string; expanded: boolean }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface DocumentEventMap {\n [DISCLOSURE_CHANGE_EVENT]: CustomEvent<DisclosureChangeEventDetail>\n }\n}\n\ntype Setter = (value: boolean | ((prev: boolean) => boolean)) => void\n\ntype UseDisclosureResult = [expanded: boolean, setExpanded: Setter]\n\n/**\n * 同じ `id` で呼ぶとイベント経由で状態が同期される custom hook\n */\nexport const useDisclosure = (id: string): UseDisclosureResult => {\n const [expanded, setExpanded] = useState(false)\n const latest = useLatest({ id, expanded })\n\n const functions = useMemo(\n () => ({\n safeSetExpanded: (value: boolean | ((prev: boolean) => boolean)) => {\n // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する\n requestAnimationFrame(() => {\n const next = typeof value === 'function' ? value(latest.expanded) : value\n\n if (next !== latest.expanded) {\n setExpanded(next)\n document.dispatchEvent(\n new CustomEvent<DisclosureChangeEventDetail>(DISCLOSURE_CHANGE_EVENT, {\n detail: { id: latest.id, expanded: next },\n }),\n )\n }\n })\n },\n handleDisclosureChange: (e: CustomEvent<DisclosureChangeEventDetail>) => {\n if (latest.id === e.detail.id) {\n setExpanded(e.detail.expanded)\n }\n },\n }),\n [latest],\n )\n\n useEffect(() => {\n document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n\n return () => {\n document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n }\n }, [functions])\n\n return [expanded, functions.safeSetExpanded]\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,uBAAuB,GAAG,8BAA8B;AAc9D;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,EAAU,KAAyB;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAE1C,IAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO;AACL,QAAA,eAAe,EAAE,CAAC,KAA6C,KAAI;;YAEjE,qBAAqB,CAAC,MAAK;AACzB,gBAAA,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK;AAEzE,gBAAA,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC;AACjB,oBAAA,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAA8B,uBAAuB,EAAE;wBACpE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1C,qBAAA,CAAC,CACH;gBACH;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,sBAAsB,EAAE,CAAC,CAA2C,KAAI;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7B,gBAAA,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;QACF,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAED,SAAS,CAAC,MAAK;QACb,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AAEpF,QAAA,OAAO,MAAK;YACV,QAAQ,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AACzF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC;AAC9C;;;;"}
1
+ {"version":3,"file":"useDisclosure.js","sources":["../../../src/components/Disclosure/useDisclosure.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\n\nimport { useAnimationFrame } from '../../hooks/useAnimationFrame'\nimport { useLatest } from '../../hooks/useLatest'\n\nconst DISCLOSURE_CHANGE_EVENT = 'smarthr-ui:disclosure-change'\ntype DisclosureChangeEventDetail = { id: string; expanded: boolean }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface DocumentEventMap {\n [DISCLOSURE_CHANGE_EVENT]: CustomEvent<DisclosureChangeEventDetail>\n }\n}\n\ntype Setter = (value: boolean | ((prev: boolean) => boolean)) => void\n\ntype UseDisclosureResult = [expanded: boolean, setExpanded: Setter]\n\n/**\n * 同じ `id` で呼ぶとイベント経由で状態が同期される custom hook\n */\nexport const useDisclosure = (id: string): UseDisclosureResult => {\n const [expanded, setExpanded] = useState(false)\n const frame = useAnimationFrame()\n const latest = useLatest({ id, expanded, frame })\n\n const functions = useMemo(\n () => ({\n safeSetExpanded: (value: boolean | ((prev: boolean) => boolean)) => {\n // DisclosureTrigger と DisclosureContent のレンダリング順序に影響しないように animation frame を待ってから state を更新する\n latest.frame.request(() => {\n const next = typeof value === 'function' ? value(latest.expanded) : value\n\n if (next !== latest.expanded) {\n setExpanded(next)\n document.dispatchEvent(\n new CustomEvent<DisclosureChangeEventDetail>(DISCLOSURE_CHANGE_EVENT, {\n detail: { id: latest.id, expanded: next },\n }),\n )\n }\n })\n },\n handleDisclosureChange: (e: CustomEvent<DisclosureChangeEventDetail>) => {\n if (latest.id === e.detail.id) {\n setExpanded(e.detail.expanded)\n }\n },\n }),\n [latest],\n )\n\n useEffect(() => {\n document.addEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n\n return () => {\n frame.cancel()\n document.removeEventListener(DISCLOSURE_CHANGE_EVENT, functions.handleDisclosureChange)\n }\n }, [frame, functions])\n\n return [expanded, functions.safeSetExpanded]\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,uBAAuB,GAAG,8BAA8B;AAc9D;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,EAAU,KAAyB;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/C,IAAA,MAAM,KAAK,GAAG,iBAAiB,EAAE;AACjC,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAEjD,IAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO;AACL,QAAA,eAAe,EAAE,CAAC,KAA6C,KAAI;;AAEjE,YAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAK;AACxB,gBAAA,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK;AAEzE,gBAAA,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC;AACjB,oBAAA,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAA8B,uBAAuB,EAAE;wBACpE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1C,qBAAA,CAAC,CACH;gBACH;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;AACD,QAAA,sBAAsB,EAAE,CAAC,CAA2C,KAAI;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7B,gBAAA,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;QACF,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAED,SAAS,CAAC,MAAK;QACb,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AAEpF,QAAA,OAAO,MAAK;YACV,KAAK,CAAC,MAAM,EAAE;YACd,QAAQ,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,SAAS,CAAC,sBAAsB,CAAC;AACzF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEtB,IAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC;AAC9C;;;;"}
@@ -3,7 +3,7 @@
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React = require('react');
6
- var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
6
+ var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.cjs');
7
7
  var hooks_useLatest = require('../../hooks/useLatest.cjs');
8
8
  require('../../intl/IntlProvider.cjs');
9
9
  require('react-intl');
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { forwardRef, useRef, useState, useMemo, useImperativeHandle, memo } from 'react';
4
- import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@types_node@20.19.43_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
4
+ import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.46_@swc_helper_93b9c5ee15e3d3d2221e194197be3b5c/vendor/tailwind-variants/dist/index.js';
5
5
  import { useLatest } from '../../hooks/useLatest.js';
6
6
  import '../../intl/IntlProvider.js';
7
7
  import 'react-intl';
@@ -3,6 +3,7 @@
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React = require('react');
6
+ var hooks_useAnimationFrame = require('../../hooks/useAnimationFrame.cjs');
6
7
  var hooks_useLatest = require('../../hooks/useLatest.cjs');
7
8
  var hooks_usePortal = require('../../hooks/usePortal.cjs');
8
9
  var components_Dropdown_dropdownHelper = require('./dropdownHelper.cjs');
@@ -31,6 +32,8 @@ const Dropdown = ({ onOpen, onClose, children }) => {
31
32
  rootId: contentId,
32
33
  });
33
34
  const triggerElementRef = React.useRef(null);
35
+ const openFrame = hooks_useAnimationFrame.useAnimationFrame();
36
+ const closeFrame = hooks_useAnimationFrame.useAnimationFrame();
34
37
  const latest = hooks_useLatest.useLatest({
35
38
  active,
36
39
  isChildPortal,
@@ -38,30 +41,36 @@ const Dropdown = ({ onOpen, onClose, children }) => {
38
41
  onOpen,
39
42
  onClose,
40
43
  createPortal,
44
+ openFrame,
45
+ closeFrame,
41
46
  });
42
47
  const functions = React.useMemo(() => {
43
48
  // This is the root container of a dropdown content located in outside the DOM tree
44
49
  const DropdownContentRoot = (props) => latest.active ? latest.createPortal(props.children) : null;
45
50
  DropdownContentRoot.displayName = 'DropdownContentRoot';
51
+ const actualClose = () => {
52
+ if (latest.onClose) {
53
+ latest.closeFrame.request(() => latest.onClose?.());
54
+ }
55
+ };
46
56
  return {
47
57
  DropdownContentRoot,
48
58
  handleClickTrigger: (rect) => {
49
59
  if (latest.active) {
50
60
  setActive(false);
51
- if (latest.onClose)
52
- requestAnimationFrame(() => latest.onClose?.());
61
+ actualClose();
53
62
  }
54
63
  else {
55
64
  setActive(true);
56
65
  setTriggerRect(rect);
57
- if (latest.onOpen)
58
- requestAnimationFrame(() => latest.onOpen?.());
66
+ if (latest.onOpen) {
67
+ latest.openFrame.request(() => latest.onOpen?.());
68
+ }
59
69
  }
60
70
  },
61
71
  handleDelegateClickCloser: () => {
62
72
  setActive(false);
63
- if (latest.onClose)
64
- requestAnimationFrame(() => latest.onClose?.());
73
+ actualClose();
65
74
  // return focus to the Trigger
66
75
  components_Dropdown_dropdownHelper.getFirstTabbable(triggerElementRef)?.focus();
67
76
  },
@@ -71,9 +80,7 @@ const Dropdown = ({ onOpen, onClose, children }) => {
71
80
  !components_Dropdown_dropdownHelper.isEventFromChild(e, triggerElementRef.current) &&
72
81
  !latest.isChildPortal(e.target)) {
73
82
  setActive(false);
74
- if (latest.onClose) {
75
- requestAnimationFrame(() => latest.onClose?.());
76
- }
83
+ actualClose();
77
84
  }
78
85
  },
79
86
  updateTriggerRect: () => {
@@ -83,6 +90,10 @@ const Dropdown = ({ onOpen, onClose, children }) => {
83
90
  },
84
91
  };
85
92
  }, [latest]);
93
+ React.useEffect(() => () => {
94
+ latest.openFrame.cancel();
95
+ latest.closeFrame.cancel();
96
+ }, [latest]);
86
97
  React.useEffect(() => {
87
98
  if (!active)
88
99
  return;