smarthr-ui 98.1.1 → 99.0.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 (520) hide show
  1. package/lib/components/AccordionPanel/AccordionPanel.cjs +51 -12
  2. package/lib/components/AccordionPanel/AccordionPanel.cjs.map +1 -1
  3. package/lib/components/AccordionPanel/AccordionPanel.d.ts +3 -3
  4. package/lib/components/AccordionPanel/AccordionPanel.js +54 -15
  5. package/lib/components/AccordionPanel/AccordionPanel.js.map +1 -1
  6. package/lib/components/AccordionPanel/AccordionPanelTrigger.cjs +5 -60
  7. package/lib/components/AccordionPanel/AccordionPanelTrigger.cjs.map +1 -1
  8. package/lib/components/AccordionPanel/AccordionPanelTrigger.js +8 -63
  9. package/lib/components/AccordionPanel/AccordionPanelTrigger.js.map +1 -1
  10. package/lib/components/AppHeader/components/common/AppLauncherFeatures.cjs +12 -22
  11. package/lib/components/AppHeader/components/common/AppLauncherFeatures.cjs.map +1 -1
  12. package/lib/components/AppHeader/components/common/AppLauncherFeatures.js +13 -23
  13. package/lib/components/AppHeader/components/common/AppLauncherFeatures.js.map +1 -1
  14. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.cjs +26 -40
  15. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.cjs.map +1 -1
  16. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.js +26 -40
  17. package/lib/components/AppHeader/components/common/AppLauncherSortDropdown.js.map +1 -1
  18. package/lib/components/AppHeader/components/desktop/AppLauncher.cjs +37 -43
  19. package/lib/components/AppHeader/components/desktop/AppLauncher.cjs.map +1 -1
  20. package/lib/components/AppHeader/components/desktop/AppLauncher.js +38 -44
  21. package/lib/components/AppHeader/components/desktop/AppLauncher.js.map +1 -1
  22. package/lib/components/AppHeader/components/desktop/DesktopHeader.cjs +4 -11
  23. package/lib/components/AppHeader/components/desktop/DesktopHeader.cjs.map +1 -1
  24. package/lib/components/AppHeader/components/desktop/DesktopHeader.js +4 -11
  25. package/lib/components/AppHeader/components/desktop/DesktopHeader.js.map +1 -1
  26. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.cjs +5 -19
  27. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.cjs.map +1 -1
  28. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.js +5 -19
  29. package/lib/components/AppHeader/components/desktop/ReleaseNotesDropdown.js.map +1 -1
  30. package/lib/components/AppHeader/components/desktop/UserInfo.cjs +4 -8
  31. package/lib/components/AppHeader/components/desktop/UserInfo.cjs.map +1 -1
  32. package/lib/components/AppHeader/components/desktop/UserInfo.js +4 -8
  33. package/lib/components/AppHeader/components/desktop/UserInfo.js.map +1 -1
  34. package/lib/components/AppHeader/components/mobile/AppLauncher.cjs +16 -25
  35. package/lib/components/AppHeader/components/mobile/AppLauncher.cjs.map +1 -1
  36. package/lib/components/AppHeader/components/mobile/AppLauncher.js +16 -25
  37. package/lib/components/AppHeader/components/mobile/AppLauncher.js.map +1 -1
  38. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.cjs +15 -32
  39. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.cjs.map +1 -1
  40. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.js +16 -33
  41. package/lib/components/AppHeader/components/mobile/AppLauncherFilterDropdown.js.map +1 -1
  42. package/lib/components/AppHeader/components/mobile/Help.cjs +4 -17
  43. package/lib/components/AppHeader/components/mobile/Help.cjs.map +1 -1
  44. package/lib/components/AppHeader/components/mobile/Help.js +5 -18
  45. package/lib/components/AppHeader/components/mobile/Help.js.map +1 -1
  46. package/lib/components/AppHeader/components/mobile/LanguageSelector.cjs +14 -12
  47. package/lib/components/AppHeader/components/mobile/LanguageSelector.cjs.map +1 -1
  48. package/lib/components/AppHeader/components/mobile/LanguageSelector.js +14 -12
  49. package/lib/components/AppHeader/components/mobile/LanguageSelector.js.map +1 -1
  50. package/lib/components/AppHeader/components/mobile/Menu.cjs +3 -22
  51. package/lib/components/AppHeader/components/mobile/Menu.cjs.map +1 -1
  52. package/lib/components/AppHeader/components/mobile/Menu.js +3 -22
  53. package/lib/components/AppHeader/components/mobile/Menu.js.map +1 -1
  54. package/lib/components/AppHeader/components/mobile/MenuAccordion.cjs +3 -14
  55. package/lib/components/AppHeader/components/mobile/MenuAccordion.cjs.map +1 -1
  56. package/lib/components/AppHeader/components/mobile/MenuAccordion.js +4 -15
  57. package/lib/components/AppHeader/components/mobile/MenuAccordion.js.map +1 -1
  58. package/lib/components/AppHeader/components/mobile/MenuDialog.cjs +12 -15
  59. package/lib/components/AppHeader/components/mobile/MenuDialog.cjs.map +1 -1
  60. package/lib/components/AppHeader/components/mobile/MenuDialog.js +12 -15
  61. package/lib/components/AppHeader/components/mobile/MenuDialog.js.map +1 -1
  62. package/lib/components/AppHeader/components/mobile/MenuSubHeading.cjs +3 -7
  63. package/lib/components/AppHeader/components/mobile/MenuSubHeading.cjs.map +1 -1
  64. package/lib/components/AppHeader/components/mobile/MenuSubHeading.js +4 -8
  65. package/lib/components/AppHeader/components/mobile/MenuSubHeading.js.map +1 -1
  66. package/lib/components/AppHeader/components/mobile/ReleaseNote.cjs +13 -25
  67. package/lib/components/AppHeader/components/mobile/ReleaseNote.cjs.map +1 -1
  68. package/lib/components/AppHeader/components/mobile/ReleaseNote.js +14 -26
  69. package/lib/components/AppHeader/components/mobile/ReleaseNote.js.map +1 -1
  70. package/lib/components/AppHeader/components/mobile/UserInfo.cjs +16 -25
  71. package/lib/components/AppHeader/components/mobile/UserInfo.cjs.map +1 -1
  72. package/lib/components/AppHeader/components/mobile/UserInfo.js +17 -26
  73. package/lib/components/AppHeader/components/mobile/UserInfo.js.map +1 -1
  74. package/lib/components/Badge/Badge.cjs +4 -2
  75. package/lib/components/Badge/Badge.cjs.map +1 -1
  76. package/lib/components/Badge/Badge.js +4 -2
  77. package/lib/components/Badge/Badge.js.map +1 -1
  78. package/lib/components/Browser/Browser.cjs +45 -37
  79. package/lib/components/Browser/Browser.cjs.map +1 -1
  80. package/lib/components/Browser/Browser.js +46 -38
  81. package/lib/components/Browser/Browser.js.map +1 -1
  82. package/lib/components/Browser/BrowserColumn.cjs +4 -4
  83. package/lib/components/Browser/BrowserColumn.cjs.map +1 -1
  84. package/lib/components/Browser/BrowserColumn.d.ts +1 -1
  85. package/lib/components/Browser/BrowserColumn.js +4 -4
  86. package/lib/components/Browser/BrowserColumn.js.map +1 -1
  87. package/lib/components/Browser/BrowserItem.cjs +2 -2
  88. package/lib/components/Browser/BrowserItem.cjs.map +1 -1
  89. package/lib/components/Browser/BrowserItem.d.ts +1 -1
  90. package/lib/components/Browser/BrowserItem.js +2 -2
  91. package/lib/components/Browser/BrowserItem.js.map +1 -1
  92. package/lib/components/Button/DisabledReason.cjs +8 -10
  93. package/lib/components/Button/DisabledReason.cjs.map +1 -1
  94. package/lib/components/Button/DisabledReason.js +9 -11
  95. package/lib/components/Button/DisabledReason.js.map +1 -1
  96. package/lib/components/Calendar/Calendar.cjs +21 -33
  97. package/lib/components/Calendar/Calendar.cjs.map +1 -1
  98. package/lib/components/Calendar/Calendar.js +22 -34
  99. package/lib/components/Calendar/Calendar.js.map +1 -1
  100. package/lib/components/Calendar/CalendarTable.cjs +3 -2
  101. package/lib/components/Calendar/CalendarTable.cjs.map +1 -1
  102. package/lib/components/Calendar/CalendarTable.js +3 -2
  103. package/lib/components/Calendar/CalendarTable.js.map +1 -1
  104. package/lib/components/Calendar/YearPicker.cjs +14 -13
  105. package/lib/components/Calendar/YearPicker.cjs.map +1 -1
  106. package/lib/components/Calendar/YearPicker.d.ts +1 -1
  107. package/lib/components/Calendar/YearPicker.js +15 -14
  108. package/lib/components/Calendar/YearPicker.js.map +1 -1
  109. package/lib/components/Combobox/MultiCombobox/MultiCombobox.cjs +1 -0
  110. package/lib/components/Combobox/MultiCombobox/MultiCombobox.cjs.map +1 -1
  111. package/lib/components/Combobox/MultiCombobox/MultiCombobox.js +1 -0
  112. package/lib/components/Combobox/MultiCombobox/MultiCombobox.js.map +1 -1
  113. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.cjs +3 -8
  114. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.cjs.map +1 -1
  115. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.js +4 -9
  116. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.js.map +1 -1
  117. package/lib/components/Combobox/SingleCombobox/SingleCombobox.cjs +4 -9
  118. package/lib/components/Combobox/SingleCombobox/SingleCombobox.cjs.map +1 -1
  119. package/lib/components/Combobox/SingleCombobox/SingleCombobox.js +4 -9
  120. package/lib/components/Combobox/SingleCombobox/SingleCombobox.js.map +1 -1
  121. package/lib/components/Combobox/useListbox.cjs +14 -24
  122. package/lib/components/Combobox/useListbox.cjs.map +1 -1
  123. package/lib/components/Combobox/useListbox.js +14 -24
  124. package/lib/components/Combobox/useListbox.js.map +1 -1
  125. package/lib/components/DatePicker/DatePicker.cjs +3 -4
  126. package/lib/components/DatePicker/DatePicker.cjs.map +1 -1
  127. package/lib/components/DatePicker/DatePicker.js +3 -4
  128. package/lib/components/DatePicker/DatePicker.js.map +1 -1
  129. package/lib/components/DatePicker/Portal.cjs +3 -8
  130. package/lib/components/DatePicker/Portal.cjs.map +1 -1
  131. package/lib/components/DatePicker/Portal.js +4 -9
  132. package/lib/components/DatePicker/Portal.js.map +1 -1
  133. package/lib/components/Dialog/ControlledActionDialog/ActionDialogContentInner.cjs +3 -10
  134. package/lib/components/Dialog/ControlledActionDialog/ActionDialogContentInner.cjs.map +1 -1
  135. package/lib/components/Dialog/ControlledActionDialog/ActionDialogContentInner.js +4 -11
  136. package/lib/components/Dialog/ControlledActionDialog/ActionDialogContentInner.js.map +1 -1
  137. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.cjs +3 -10
  138. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.cjs.map +1 -1
  139. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.js +4 -11
  140. package/lib/components/Dialog/ControlledFormDialog/FormDialogContentInner.js.map +1 -1
  141. package/lib/components/Dialog/ControlledMessageDialog/MessageDialogContentInner.cjs +3 -10
  142. package/lib/components/Dialog/ControlledMessageDialog/MessageDialogContentInner.cjs.map +1 -1
  143. package/lib/components/Dialog/ControlledMessageDialog/MessageDialogContentInner.js +3 -10
  144. package/lib/components/Dialog/ControlledMessageDialog/MessageDialogContentInner.js.map +1 -1
  145. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.cjs +1 -0
  146. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.cjs.map +1 -1
  147. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.js +1 -0
  148. package/lib/components/Dialog/ControlledStepFormDialog/ControlledStepFormDialog.js.map +1 -1
  149. package/lib/components/Dialog/DialogBody.cjs +2 -4
  150. package/lib/components/Dialog/DialogBody.cjs.map +1 -1
  151. package/lib/components/Dialog/DialogBody.js +2 -4
  152. package/lib/components/Dialog/DialogBody.js.map +1 -1
  153. package/lib/components/Dialog/DialogCloser.cjs +2 -3
  154. package/lib/components/Dialog/DialogCloser.cjs.map +1 -1
  155. package/lib/components/Dialog/DialogCloser.js +2 -3
  156. package/lib/components/Dialog/DialogCloser.js.map +1 -1
  157. package/lib/components/Dialog/DialogContent.cjs +3 -3
  158. package/lib/components/Dialog/DialogContent.cjs.map +1 -1
  159. package/lib/components/Dialog/DialogContent.d.ts +1 -1
  160. package/lib/components/Dialog/DialogContent.js +3 -3
  161. package/lib/components/Dialog/DialogContent.js.map +1 -1
  162. package/lib/components/Dialog/DialogContentInner.cjs +8 -16
  163. package/lib/components/Dialog/DialogContentInner.cjs.map +1 -1
  164. package/lib/components/Dialog/DialogContentInner.js +8 -16
  165. package/lib/components/Dialog/DialogContentInner.js.map +1 -1
  166. package/lib/components/Dialog/DialogHeading.cjs +1 -11
  167. package/lib/components/Dialog/DialogHeading.cjs.map +1 -1
  168. package/lib/components/Dialog/DialogHeading.js +2 -12
  169. package/lib/components/Dialog/DialogHeading.js.map +1 -1
  170. package/lib/components/Dialog/DialogTrigger.cjs +2 -2
  171. package/lib/components/Dialog/DialogTrigger.cjs.map +1 -1
  172. package/lib/components/Dialog/DialogTrigger.js +2 -2
  173. package/lib/components/Dialog/DialogTrigger.js.map +1 -1
  174. package/lib/components/Dialog/DialogWrapper.cjs +7 -6
  175. package/lib/components/Dialog/DialogWrapper.cjs.map +1 -1
  176. package/lib/components/Dialog/DialogWrapper.d.ts +2 -2
  177. package/lib/components/Dialog/DialogWrapper.js +8 -7
  178. package/lib/components/Dialog/DialogWrapper.js.map +1 -1
  179. package/lib/components/Dialog/FocusTrap.cjs +8 -11
  180. package/lib/components/Dialog/FocusTrap.cjs.map +1 -1
  181. package/lib/components/Dialog/FocusTrap.js +8 -11
  182. package/lib/components/Dialog/FocusTrap.js.map +1 -1
  183. package/lib/components/Dialog/ModelessDialog/ModelessDialog.cjs +81 -92
  184. package/lib/components/Dialog/ModelessDialog/ModelessDialog.cjs.map +1 -1
  185. package/lib/components/Dialog/ModelessDialog/ModelessDialog.js +82 -93
  186. package/lib/components/Dialog/ModelessDialog/ModelessDialog.js.map +1 -1
  187. package/lib/components/Dialog/useBodyScrollLock.cjs +3 -7
  188. package/lib/components/Dialog/useBodyScrollLock.cjs.map +1 -1
  189. package/lib/components/Dialog/useBodyScrollLock.js +4 -8
  190. package/lib/components/Dialog/useBodyScrollLock.js.map +1 -1
  191. package/lib/components/Dialog/useDialogPortal.cjs +1 -1
  192. package/lib/components/Dialog/useDialogPortal.cjs.map +1 -1
  193. package/lib/components/Dialog/useDialogPortal.js +2 -2
  194. package/lib/components/Dialog/useDialogPortal.js.map +1 -1
  195. package/lib/components/DropZone/DropZone.cjs +9 -17
  196. package/lib/components/DropZone/DropZone.cjs.map +1 -1
  197. package/lib/components/DropZone/DropZone.js +9 -17
  198. package/lib/components/DropZone/DropZone.js.map +1 -1
  199. package/lib/components/Dropdown/Dropdown.cjs +3 -3
  200. package/lib/components/Dropdown/Dropdown.cjs.map +1 -1
  201. package/lib/components/Dropdown/Dropdown.d.ts +1 -1
  202. package/lib/components/Dropdown/Dropdown.js +3 -3
  203. package/lib/components/Dropdown/Dropdown.js.map +1 -1
  204. package/lib/components/Dropdown/DropdownCloser.cjs +4 -5
  205. package/lib/components/Dropdown/DropdownCloser.cjs.map +1 -1
  206. package/lib/components/Dropdown/DropdownCloser.js +4 -5
  207. package/lib/components/Dropdown/DropdownCloser.js.map +1 -1
  208. package/lib/components/Dropdown/DropdownContent.cjs +3 -3
  209. package/lib/components/Dropdown/DropdownContent.cjs.map +1 -1
  210. package/lib/components/Dropdown/DropdownContent.d.ts +1 -1
  211. package/lib/components/Dropdown/DropdownContent.js +3 -3
  212. package/lib/components/Dropdown/DropdownContent.js.map +1 -1
  213. package/lib/components/Dropdown/DropdownContentInner.cjs +15 -6
  214. package/lib/components/Dropdown/DropdownContentInner.cjs.map +1 -1
  215. package/lib/components/Dropdown/DropdownContentInner.js +15 -6
  216. package/lib/components/Dropdown/DropdownContentInner.js.map +1 -1
  217. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs +3 -12
  218. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs.map +1 -1
  219. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js +3 -12
  220. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js.map +1 -1
  221. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.cjs +19 -37
  222. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.cjs.map +1 -1
  223. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.js +20 -38
  224. package/lib/components/Dropdown/FilterDropdown/FilterDropdown.js.map +1 -1
  225. package/lib/components/Dropdown/SortDropdown/useSortDropdown.cjs +1 -0
  226. package/lib/components/Dropdown/SortDropdown/useSortDropdown.cjs.map +1 -1
  227. package/lib/components/Dropdown/SortDropdown/useSortDropdown.js +1 -0
  228. package/lib/components/Dropdown/SortDropdown/useSortDropdown.js.map +1 -1
  229. package/lib/components/Dropdown/useKeyboardNavigation.cjs +7 -7
  230. package/lib/components/Dropdown/useKeyboardNavigation.cjs.map +1 -1
  231. package/lib/components/Dropdown/useKeyboardNavigation.js +7 -7
  232. package/lib/components/Dropdown/useKeyboardNavigation.js.map +1 -1
  233. package/lib/components/ErrorScreen/AuthErrorScreen.cjs +9 -17
  234. package/lib/components/ErrorScreen/AuthErrorScreen.cjs.map +1 -1
  235. package/lib/components/ErrorScreen/AuthErrorScreen.js +9 -17
  236. package/lib/components/ErrorScreen/AuthErrorScreen.js.map +1 -1
  237. package/lib/components/ErrorScreen/ForbiddenErrorScreen.cjs +9 -20
  238. package/lib/components/ErrorScreen/ForbiddenErrorScreen.cjs.map +1 -1
  239. package/lib/components/ErrorScreen/ForbiddenErrorScreen.js +9 -20
  240. package/lib/components/ErrorScreen/ForbiddenErrorScreen.js.map +1 -1
  241. package/lib/components/ErrorScreen/NotFoundErrorScreen.cjs +9 -20
  242. package/lib/components/ErrorScreen/NotFoundErrorScreen.cjs.map +1 -1
  243. package/lib/components/ErrorScreen/NotFoundErrorScreen.js +9 -20
  244. package/lib/components/ErrorScreen/NotFoundErrorScreen.js.map +1 -1
  245. package/lib/components/ErrorScreen/UnauthorizedErrorScreen.cjs +4 -18
  246. package/lib/components/ErrorScreen/UnauthorizedErrorScreen.cjs.map +1 -1
  247. package/lib/components/ErrorScreen/UnauthorizedErrorScreen.js +4 -18
  248. package/lib/components/ErrorScreen/UnauthorizedErrorScreen.js.map +1 -1
  249. package/lib/components/ErrorScreen/UnexpectedErrorScreen.cjs +10 -43
  250. package/lib/components/ErrorScreen/UnexpectedErrorScreen.cjs.map +1 -1
  251. package/lib/components/ErrorScreen/UnexpectedErrorScreen.js +10 -43
  252. package/lib/components/ErrorScreen/UnexpectedErrorScreen.js.map +1 -1
  253. package/lib/components/FileViewer/FileViewer.cjs +25 -21
  254. package/lib/components/FileViewer/FileViewer.cjs.map +1 -1
  255. package/lib/components/FileViewer/FileViewer.d.ts +1 -1
  256. package/lib/components/FileViewer/FileViewer.js +26 -22
  257. package/lib/components/FileViewer/FileViewer.js.map +1 -1
  258. package/lib/components/FileViewer/PDFViewer.cjs +1 -19
  259. package/lib/components/FileViewer/PDFViewer.cjs.map +1 -1
  260. package/lib/components/FileViewer/PDFViewer.js +2 -20
  261. package/lib/components/FileViewer/PDFViewer.js.map +1 -1
  262. package/lib/components/FileViewer/SearchController.cjs +5 -48
  263. package/lib/components/FileViewer/SearchController.cjs.map +1 -1
  264. package/lib/components/FileViewer/SearchController.js +6 -49
  265. package/lib/components/FileViewer/SearchController.js.map +1 -1
  266. package/lib/components/FileViewer/types.d.ts +1 -1
  267. package/lib/components/FileViewer/usePDFSearch.cjs +121 -86
  268. package/lib/components/FileViewer/usePDFSearch.cjs.map +1 -1
  269. package/lib/components/FileViewer/usePDFSearch.d.ts +8 -3
  270. package/lib/components/FileViewer/usePDFSearch.js +122 -87
  271. package/lib/components/FileViewer/usePDFSearch.js.map +1 -1
  272. package/lib/components/FormControl/FormControl.cjs +17 -33
  273. package/lib/components/FormControl/FormControl.cjs.map +1 -1
  274. package/lib/components/FormControl/FormControl.js +18 -34
  275. package/lib/components/FormControl/FormControl.js.map +1 -1
  276. package/lib/components/Header/AppLauncher/AppLauncher.cjs +4 -16
  277. package/lib/components/Header/AppLauncher/AppLauncher.cjs.map +1 -1
  278. package/lib/components/Header/AppLauncher/AppLauncher.js +4 -16
  279. package/lib/components/Header/AppLauncher/AppLauncher.js.map +1 -1
  280. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.cjs +11 -18
  281. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.cjs.map +1 -1
  282. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.js +11 -18
  283. package/lib/components/Header/LanguageSwitcher/LanguageSwitcher.js.map +1 -1
  284. package/lib/components/Heading/Heading.cjs +14 -27
  285. package/lib/components/Heading/Heading.cjs.map +1 -1
  286. package/lib/components/Heading/Heading.js +14 -27
  287. package/lib/components/Heading/Heading.js.map +1 -1
  288. package/lib/components/Heading/PageHeading/PageHeading.cjs +2 -8
  289. package/lib/components/Heading/PageHeading/PageHeading.cjs.map +1 -1
  290. package/lib/components/Heading/PageHeading/PageHeading.js +3 -9
  291. package/lib/components/Heading/PageHeading/PageHeading.js.map +1 -1
  292. package/lib/components/Icon/OpenInNewTabIcon.cjs +3 -10
  293. package/lib/components/Icon/OpenInNewTabIcon.cjs.map +1 -1
  294. package/lib/components/Icon/OpenInNewTabIcon.d.ts +4 -9
  295. package/lib/components/Icon/OpenInNewTabIcon.js +3 -10
  296. package/lib/components/Icon/OpenInNewTabIcon.js.map +1 -1
  297. package/lib/components/Icon/generateIcon.cjs +10 -19
  298. package/lib/components/Icon/generateIcon.cjs.map +1 -1
  299. package/lib/components/Icon/generateIcon.js +10 -19
  300. package/lib/components/Icon/generateIcon.js.map +1 -1
  301. package/lib/components/InformationPanel/InformationPanel.cjs +18 -52
  302. package/lib/components/InformationPanel/InformationPanel.cjs.map +1 -1
  303. package/lib/components/InformationPanel/InformationPanel.d.ts +5 -45
  304. package/lib/components/InformationPanel/InformationPanel.js +19 -53
  305. package/lib/components/InformationPanel/InformationPanel.js.map +1 -1
  306. package/lib/components/Input/CurrencyInput/currencyInputHelper.cjs +24 -15
  307. package/lib/components/Input/CurrencyInput/currencyInputHelper.cjs.map +1 -1
  308. package/lib/components/Input/CurrencyInput/currencyInputHelper.js +24 -15
  309. package/lib/components/Input/CurrencyInput/currencyInputHelper.js.map +1 -1
  310. package/lib/components/Input/Input.cjs +29 -44
  311. package/lib/components/Input/Input.cjs.map +1 -1
  312. package/lib/components/Input/Input.js +30 -45
  313. package/lib/components/Input/Input.js.map +1 -1
  314. package/lib/components/Input/SearchInput/SearchInput.cjs +5 -4
  315. package/lib/components/Input/SearchInput/SearchInput.cjs.map +1 -1
  316. package/lib/components/Input/SearchInput/SearchInput.js +5 -4
  317. package/lib/components/Input/SearchInput/SearchInput.js.map +1 -1
  318. package/lib/components/Input/SearchInput/SearchInputIcon.cjs +4 -11
  319. package/lib/components/Input/SearchInput/SearchInputIcon.cjs.map +1 -1
  320. package/lib/components/Input/SearchInput/SearchInputIcon.js +4 -11
  321. package/lib/components/Input/SearchInput/SearchInputIcon.js.map +1 -1
  322. package/lib/components/InputFile/InputFileMultiplyAppendable.cjs +4 -9
  323. package/lib/components/InputFile/InputFileMultiplyAppendable.cjs.map +1 -1
  324. package/lib/components/InputFile/InputFileMultiplyAppendable.js +4 -9
  325. package/lib/components/InputFile/InputFileMultiplyAppendable.js.map +1 -1
  326. package/lib/components/InputFile/InputFileNative.cjs +4 -9
  327. package/lib/components/InputFile/InputFileNative.cjs.map +1 -1
  328. package/lib/components/InputFile/InputFileNative.js +4 -9
  329. package/lib/components/InputFile/InputFileNative.js.map +1 -1
  330. package/lib/components/Layout/Center/Center.cjs +4 -5
  331. package/lib/components/Layout/Center/Center.cjs.map +1 -1
  332. package/lib/components/Layout/Center/Center.js +4 -5
  333. package/lib/components/Layout/Center/Center.js.map +1 -1
  334. package/lib/components/Layout/Cluster/Cluster.cjs +16 -17
  335. package/lib/components/Layout/Cluster/Cluster.cjs.map +1 -1
  336. package/lib/components/Layout/Cluster/Cluster.js +16 -17
  337. package/lib/components/Layout/Cluster/Cluster.js.map +1 -1
  338. package/lib/components/Layout/Container/Container.cjs +7 -1
  339. package/lib/components/Layout/Container/Container.cjs.map +1 -1
  340. package/lib/components/Layout/Container/Container.js +7 -1
  341. package/lib/components/Layout/Container/Container.js.map +1 -1
  342. package/lib/components/Loader/Loader.cjs +3 -2
  343. package/lib/components/Loader/Loader.cjs.map +1 -1
  344. package/lib/components/Loader/Loader.js +4 -3
  345. package/lib/components/Loader/Loader.js.map +1 -1
  346. package/lib/components/Loader/LoaderSpinner.cjs +9 -10
  347. package/lib/components/Loader/LoaderSpinner.cjs.map +1 -1
  348. package/lib/components/Loader/LoaderSpinner.d.ts +2 -2
  349. package/lib/components/Loader/LoaderSpinner.js +9 -10
  350. package/lib/components/Loader/LoaderSpinner.js.map +1 -1
  351. package/lib/components/NotificationBar/NotificationBar.cjs +11 -20
  352. package/lib/components/NotificationBar/NotificationBar.cjs.map +1 -1
  353. package/lib/components/NotificationBar/NotificationBar.js +11 -20
  354. package/lib/components/NotificationBar/NotificationBar.js.map +1 -1
  355. package/lib/components/Pagination/Pagination.cjs +14 -15
  356. package/lib/components/Pagination/Pagination.cjs.map +1 -1
  357. package/lib/components/Pagination/Pagination.js +14 -15
  358. package/lib/components/Pagination/Pagination.js.map +1 -1
  359. package/lib/components/Pagination/PaginationControllerItemButton.cjs +11 -27
  360. package/lib/components/Pagination/PaginationControllerItemButton.cjs.map +1 -1
  361. package/lib/components/Pagination/PaginationControllerItemButton.d.ts +1 -1
  362. package/lib/components/Pagination/PaginationControllerItemButton.js +11 -27
  363. package/lib/components/Pagination/PaginationControllerItemButton.js.map +1 -1
  364. package/lib/components/Pagination/PaginationItemButton.cjs +14 -35
  365. package/lib/components/Pagination/PaginationItemButton.cjs.map +1 -1
  366. package/lib/components/Pagination/PaginationItemButton.js +14 -35
  367. package/lib/components/Pagination/PaginationItemButton.js.map +1 -1
  368. package/lib/components/SegmentedControl/SegmentedControl.cjs +21 -18
  369. package/lib/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  370. package/lib/components/SegmentedControl/SegmentedControl.js +22 -19
  371. package/lib/components/SegmentedControl/SegmentedControl.js.map +1 -1
  372. package/lib/components/SideMenu/SideMenuItem.cjs +1 -7
  373. package/lib/components/SideMenu/SideMenuItem.cjs.map +1 -1
  374. package/lib/components/SideMenu/SideMenuItem.js +1 -7
  375. package/lib/components/SideMenu/SideMenuItem.js.map +1 -1
  376. package/lib/components/SmartHRAILogo/SmartHRAILogo.cjs +1 -6
  377. package/lib/components/SmartHRAILogo/SmartHRAILogo.cjs.map +1 -1
  378. package/lib/components/SmartHRAILogo/SmartHRAILogo.js +2 -7
  379. package/lib/components/SmartHRAILogo/SmartHRAILogo.js.map +1 -1
  380. package/lib/components/SmartHRLogo/SmartHRLogo.cjs +1 -7
  381. package/lib/components/SmartHRLogo/SmartHRLogo.cjs.map +1 -1
  382. package/lib/components/SmartHRLogo/SmartHRLogo.js +2 -8
  383. package/lib/components/SmartHRLogo/SmartHRLogo.js.map +1 -1
  384. package/lib/components/Stepper/StepStatusIcon.cjs +6 -13
  385. package/lib/components/Stepper/StepStatusIcon.cjs.map +1 -1
  386. package/lib/components/Stepper/StepStatusIcon.js +6 -13
  387. package/lib/components/Stepper/StepStatusIcon.js.map +1 -1
  388. package/lib/components/Stepper/Stepper.cjs +4 -6
  389. package/lib/components/Stepper/Stepper.cjs.map +1 -1
  390. package/lib/components/Stepper/Stepper.js +4 -6
  391. package/lib/components/Stepper/Stepper.js.map +1 -1
  392. package/lib/components/TabBar/TabItem.cjs +15 -10
  393. package/lib/components/TabBar/TabItem.cjs.map +1 -1
  394. package/lib/components/TabBar/TabItem.js +16 -11
  395. package/lib/components/TabBar/TabItem.js.map +1 -1
  396. package/lib/components/Table/TdCheckbox.cjs +2 -2
  397. package/lib/components/Table/TdCheckbox.cjs.map +1 -1
  398. package/lib/components/Table/TdCheckbox.d.ts +1 -1
  399. package/lib/components/Table/TdCheckbox.js +2 -2
  400. package/lib/components/Table/TdCheckbox.js.map +1 -1
  401. package/lib/components/Table/Th.cjs +17 -5
  402. package/lib/components/Table/Th.cjs.map +1 -1
  403. package/lib/components/Table/Th.d.ts +2 -2
  404. package/lib/components/Table/Th.js +17 -5
  405. package/lib/components/Table/Th.js.map +1 -1
  406. package/lib/components/Table/ThCheckbox.cjs +3 -2
  407. package/lib/components/Table/ThCheckbox.cjs.map +1 -1
  408. package/lib/components/Table/ThCheckbox.d.ts +1 -1
  409. package/lib/components/Table/ThCheckbox.js +3 -2
  410. package/lib/components/Table/ThCheckbox.js.map +1 -1
  411. package/lib/components/Table/ThSortButton.cjs +13 -36
  412. package/lib/components/Table/ThSortButton.cjs.map +1 -1
  413. package/lib/components/Table/ThSortButton.d.ts +1 -1
  414. package/lib/components/Table/ThSortButton.js +13 -36
  415. package/lib/components/Table/ThSortButton.js.map +1 -1
  416. package/lib/components/TextLink/TextLink.cjs +14 -12
  417. package/lib/components/TextLink/TextLink.cjs.map +1 -1
  418. package/lib/components/TextLink/TextLink.js +15 -13
  419. package/lib/components/TextLink/TextLink.js.map +1 -1
  420. package/lib/components/Textarea/Textarea.cjs +85 -68
  421. package/lib/components/Textarea/Textarea.cjs.map +1 -1
  422. package/lib/components/Textarea/Textarea.js +86 -69
  423. package/lib/components/Textarea/Textarea.js.map +1 -1
  424. package/lib/components/Tooltip/Tooltip.cjs +4 -1
  425. package/lib/components/Tooltip/Tooltip.cjs.map +1 -1
  426. package/lib/components/Tooltip/Tooltip.js +4 -1
  427. package/lib/components/Tooltip/Tooltip.js.map +1 -1
  428. package/lib/components/Tooltip/TooltipPortal.cjs +9 -9
  429. package/lib/components/Tooltip/TooltipPortal.cjs.map +1 -1
  430. package/lib/components/Tooltip/TooltipPortal.js +10 -10
  431. package/lib/components/Tooltip/TooltipPortal.js.map +1 -1
  432. package/lib/components/WarekiPicker/WarekiPicker.cjs +6 -1
  433. package/lib/components/WarekiPicker/WarekiPicker.cjs.map +1 -1
  434. package/lib/components/WarekiPicker/WarekiPicker.d.ts +1 -1
  435. package/lib/components/WarekiPicker/WarekiPicker.js +6 -1
  436. package/lib/components/WarekiPicker/WarekiPicker.js.map +1 -1
  437. package/lib/index.cjs +3 -0
  438. package/lib/index.cjs.map +1 -1
  439. package/lib/index.d.ts +1 -1
  440. package/lib/index.js +2 -1
  441. package/lib/index.js.map +1 -1
  442. package/lib/intl/DateFormatter.cjs +2 -2
  443. package/lib/intl/DateFormatter.cjs.map +1 -1
  444. package/lib/intl/DateFormatter.d.ts +1 -1
  445. package/lib/intl/DateFormatter.js +2 -2
  446. package/lib/intl/DateFormatter.js.map +1 -1
  447. package/lib/intl/IntlProvider.cjs +8 -3
  448. package/lib/intl/IntlProvider.cjs.map +1 -1
  449. package/lib/intl/IntlProvider.js +8 -3
  450. package/lib/intl/IntlProvider.js.map +1 -1
  451. package/lib/intl/TimeFormatter.cjs +2 -2
  452. package/lib/intl/TimeFormatter.cjs.map +1 -1
  453. package/lib/intl/TimeFormatter.d.ts +1 -1
  454. package/lib/intl/TimeFormatter.js +2 -2
  455. package/lib/intl/TimeFormatter.js.map +1 -1
  456. package/lib/intl/TimestampFormatter.cjs +2 -2
  457. package/lib/intl/TimestampFormatter.cjs.map +1 -1
  458. package/lib/intl/TimestampFormatter.d.ts +1 -1
  459. package/lib/intl/TimestampFormatter.js +2 -2
  460. package/lib/intl/TimestampFormatter.js.map +1 -1
  461. package/lib/intl/index.cjs +3 -0
  462. package/lib/intl/index.cjs.map +1 -1
  463. package/lib/intl/index.d.ts +2 -1
  464. package/lib/intl/index.js +2 -1
  465. package/lib/intl/index.js.map +1 -1
  466. package/lib/intl/locales/en_us.json.cjs +2 -4
  467. package/lib/intl/locales/en_us.json.cjs.map +1 -1
  468. package/lib/intl/locales/en_us.json.js +2 -4
  469. package/lib/intl/locales/en_us.json.js.map +1 -1
  470. package/lib/intl/locales/id_id.json.cjs +2 -4
  471. package/lib/intl/locales/id_id.json.cjs.map +1 -1
  472. package/lib/intl/locales/id_id.json.js +2 -4
  473. package/lib/intl/locales/id_id.json.js.map +1 -1
  474. package/lib/intl/locales/index.d.ts +18 -36
  475. package/lib/intl/locales/ja.cjs +2 -4
  476. package/lib/intl/locales/ja.cjs.map +1 -1
  477. package/lib/intl/locales/ja.d.ts +2 -4
  478. package/lib/intl/locales/ja.js +2 -4
  479. package/lib/intl/locales/ja.js.map +1 -1
  480. package/lib/intl/locales/ja.json.cjs +2 -4
  481. package/lib/intl/locales/ja.json.cjs.map +1 -1
  482. package/lib/intl/locales/ja.json.js +2 -4
  483. package/lib/intl/locales/ja.json.js.map +1 -1
  484. package/lib/intl/locales/ja_easy.json.cjs +2 -4
  485. package/lib/intl/locales/ja_easy.json.cjs.map +1 -1
  486. package/lib/intl/locales/ja_easy.json.js +2 -4
  487. package/lib/intl/locales/ja_easy.json.js.map +1 -1
  488. package/lib/intl/locales/ko_kr.json.cjs +2 -4
  489. package/lib/intl/locales/ko_kr.json.cjs.map +1 -1
  490. package/lib/intl/locales/ko_kr.json.js +2 -4
  491. package/lib/intl/locales/ko_kr.json.js.map +1 -1
  492. package/lib/intl/locales/pt_br.json.cjs +2 -4
  493. package/lib/intl/locales/pt_br.json.cjs.map +1 -1
  494. package/lib/intl/locales/pt_br.json.js +2 -4
  495. package/lib/intl/locales/pt_br.json.js.map +1 -1
  496. package/lib/intl/locales/vi_vn.json.cjs +2 -4
  497. package/lib/intl/locales/vi_vn.json.cjs.map +1 -1
  498. package/lib/intl/locales/vi_vn.json.js +2 -4
  499. package/lib/intl/locales/vi_vn.json.js.map +1 -1
  500. package/lib/intl/locales/zh_hans_cn.json.cjs +2 -4
  501. package/lib/intl/locales/zh_hans_cn.json.cjs.map +1 -1
  502. package/lib/intl/locales/zh_hans_cn.json.js +2 -4
  503. package/lib/intl/locales/zh_hans_cn.json.js.map +1 -1
  504. package/lib/intl/locales/zh_hant_tw.json.cjs +2 -4
  505. package/lib/intl/locales/zh_hant_tw.json.cjs.map +1 -1
  506. package/lib/intl/locales/zh_hant_tw.json.js +2 -4
  507. package/lib/intl/locales/zh_hant_tw.json.js.map +1 -1
  508. package/lib/intl/useDateFormat.cjs +208 -0
  509. package/lib/intl/useDateFormat.cjs.map +1 -0
  510. package/lib/intl/useDateFormat.d.ts +158 -0
  511. package/lib/intl/useDateFormat.js +206 -0
  512. package/lib/intl/useDateFormat.js.map +1 -0
  513. package/lib/intl/useIntl.cjs +9 -192
  514. package/lib/intl/useIntl.cjs.map +1 -1
  515. package/lib/intl/useIntl.d.ts +4 -146
  516. package/lib/intl/useIntl.js +10 -193
  517. package/lib/intl/useIntl.js.map +1 -1
  518. package/metadata.json +1 -1
  519. package/package.json +1 -1
  520. package/smarthr-ui.css +15 -0
@@ -4,14 +4,19 @@
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React = require('react');
6
6
  var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
7
+ var hooks_useLatest = require('../../hooks/useLatest.cjs');
7
8
  var libs_map = require('../../libs/map.cjs');
8
9
  var components_AccordionPanel_accordionPanelHelper = require('./accordionPanelHelper.cjs');
9
10
 
11
+ const DEFAULT_EXPANDED_ARRAY = [];
12
+ const DEFAULT_EXPANDED_MAP = libs_map.flatArrayToMap(DEFAULT_EXPANDED_ARRAY);
10
13
  const AccordionPanelContext = React.createContext({
11
14
  iconPosition: 'left',
12
- expandedItems: new Map(),
15
+ expandedItems: DEFAULT_EXPANDED_MAP,
13
16
  expandableMultiply: true,
14
17
  parentRef: null,
18
+ handleClickTrigger: () => { },
19
+ handleKeyDown: () => { },
15
20
  });
16
21
  const ROUNDED = {
17
22
  t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',
@@ -37,20 +42,54 @@ const classNameGenerator = index.tv({
37
42
  rounded: false,
38
43
  },
39
44
  });
40
- const AccordionPanel = ({ iconPosition = 'left', expandableMultiply = true, defaultExpanded = [], className, onClick: onClickProps, rounded, ...rest }) => {
41
- const [expandedItems, setExpanded] = React.useState(libs_map.flatArrayToMap(defaultExpanded));
45
+ const AccordionPanel = ({ iconPosition = 'left', expandableMultiply = true, defaultExpanded = DEFAULT_EXPANDED_ARRAY, className, onClick, rounded, ...rest }) => {
46
+ const [expandedItems, setExpanded] = React.useState(() => libs_map.flatArrayToMap(defaultExpanded));
42
47
  const parentRef = React.useRef(null);
43
48
  const actualClassName = React.useMemo(() => classNameGenerator({ className, rounded }), [rounded, className]);
44
- const onClickTrigger = React.useCallback((itemName, isExpanded) => {
45
- setExpanded(components_AccordionPanel_accordionPanelHelper.getNewExpandedItems(expandedItems, itemName, isExpanded, expandableMultiply));
46
- }, [expandableMultiply, expandedItems]);
47
- React.useEffect(() => {
48
- if (defaultExpanded.length > 0)
49
- setExpanded(libs_map.flatArrayToMap(defaultExpanded));
50
- }, [defaultExpanded]);
49
+ const latest = hooks_useLatest.useLatest({ onClick, expandableMultiply });
50
+ const functions = React.useMemo(() => ({
51
+ handleClickTrigger: (e) => {
52
+ const { currentTarget } = e;
53
+ setExpanded((prevExpandedItems) => {
54
+ const newExpandedItems = components_AccordionPanel_accordionPanelHelper.getNewExpandedItems(prevExpandedItems, currentTarget.value, currentTarget.getAttribute('aria-expanded') !== 'true', latest.expandableMultiply);
55
+ latest.onClick?.(libs_map.mapToKeyArray(newExpandedItems));
56
+ return newExpandedItems;
57
+ });
58
+ },
59
+ handleKeyDown: (e) => {
60
+ if (!parentRef.current) {
61
+ return;
62
+ }
63
+ const item = e.target;
64
+ switch (e.key) {
65
+ case 'Home': {
66
+ e.preventDefault();
67
+ components_AccordionPanel_accordionPanelHelper.focusFirstSibling(parentRef.current);
68
+ break;
69
+ }
70
+ case 'End': {
71
+ e.preventDefault();
72
+ components_AccordionPanel_accordionPanelHelper.focusLastSibling(parentRef.current);
73
+ break;
74
+ }
75
+ case 'ArrowLeft':
76
+ case 'ArrowUp': {
77
+ e.preventDefault();
78
+ components_AccordionPanel_accordionPanelHelper.focusPreviousSibling(item, parentRef.current);
79
+ break;
80
+ }
81
+ case 'ArrowRight':
82
+ case 'ArrowDown': {
83
+ e.preventDefault();
84
+ components_AccordionPanel_accordionPanelHelper.focusNextSibling(item, parentRef.current);
85
+ break;
86
+ }
87
+ }
88
+ },
89
+ }), [latest]);
51
90
  return (jsxRuntime.jsx(AccordionPanelContext.Provider, { value: {
52
- onClickTrigger,
53
- onClickProps,
91
+ handleClickTrigger: functions.handleClickTrigger,
92
+ handleKeyDown: functions.handleKeyDown,
54
93
  expandedItems,
55
94
  iconPosition,
56
95
  expandableMultiply,
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionPanel.cjs","sources":["../../../src/components/AccordionPanel/AccordionPanel.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { flatArrayToMap } from '../../libs/map'\n\nimport { getNewExpandedItems } from './accordionPanelHelper'\n\ntype AbstractProps = PropsWithChildren<{\n /** アイコンの左右位置 */\n iconPosition?: 'left' | 'right'\n /** 複数のパネルを同時に開くことを許容するかどうか */\n expandableMultiply?: boolean\n /** デフォルトで開いた状態にするアイテムの `name` の配列 */\n defaultExpanded?: string[]\n /** トリガのクリックイベントを処理するハンドラ */\n onClick?: (expandedItems: string[]) => void\n}> &\n VariantProps<typeof classNameGenerator>\ntype Props = AbstractProps & Omit<ComponentProps<'div'>, keyof AbstractProps>\n\nexport const AccordionPanelContext = createContext<{\n iconPosition: 'left' | 'right'\n expandedItems: Map<string, string>\n expandableMultiply: boolean\n parentRef: RefObject<HTMLDivElement> | null\n onClickTrigger?: (itemName: string, isExpanded: boolean) => void\n onClickProps?: (expandedItems: string[]) => void\n}>({\n iconPosition: 'left',\n expandedItems: new Map(),\n expandableMultiply: true,\n parentRef: null,\n})\n\nconst ROUNDED = {\n t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',\n t_r: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tr-l',\n b_l: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-bl-l',\n b_r: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-br-l',\n}\n\nconst ROUNDED_ALL = [ROUNDED.t_l, ROUNDED.t_r, ROUNDED.b_l, ROUNDED.b_r]\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-AccordionPanel',\n variants: {\n rounded: {\n true: ROUNDED_ALL,\n false: '',\n all: ROUNDED_ALL,\n top: [ROUNDED.t_l, ROUNDED.t_r],\n right: [ROUNDED.t_r, ROUNDED.b_r],\n bottom: [ROUNDED.b_l, ROUNDED.b_r],\n left: [ROUNDED.t_l, ROUNDED.b_l],\n },\n },\n defaultVariants: {\n rounded: false,\n },\n})\n\nexport const AccordionPanel: FC<Props> = ({\n iconPosition = 'left',\n expandableMultiply = true,\n defaultExpanded = [],\n className,\n onClick: onClickProps,\n rounded,\n ...rest\n}) => {\n const [expandedItems, setExpanded] = useState(flatArrayToMap(defaultExpanded))\n const parentRef = useRef<HTMLDivElement>(null)\n const actualClassName = useMemo(\n () => classNameGenerator({ className, rounded }),\n [rounded, className],\n )\n\n const onClickTrigger = useCallback(\n (itemName: string, isExpanded: boolean) => {\n setExpanded(getNewExpandedItems(expandedItems, itemName, isExpanded, expandableMultiply))\n },\n [expandableMultiply, expandedItems],\n )\n\n useEffect(() => {\n if (defaultExpanded.length > 0) setExpanded(flatArrayToMap(defaultExpanded))\n }, [defaultExpanded])\n\n return (\n <AccordionPanelContext.Provider\n value={{\n onClickTrigger,\n onClickProps,\n expandedItems,\n iconPosition,\n expandableMultiply,\n parentRef,\n }}\n >\n <div {...rest} ref={parentRef} role=\"presentation\" className={actualClassName} />\n </AccordionPanelContext.Provider>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;AAiCO;AAQL;;AAEA;AACA;AACD;AAED;AACE;AACA;AACA;AACA;;AAGF;AAEA;AACE;AACA;AACE;AACE;AACA;AACA;;;;;AAKD;AACF;AACD;AACE;AACD;AACF;AAEM;AASL;AACA;;;AAQI;AACF;;AAKA;AAAgC;AAClC;AAEA;;;;;;;AASK;AAKP;;;"}
1
+ {"version":3,"file":"AccordionPanel.cjs","sources":["../../../src/components/AccordionPanel/AccordionPanel.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentProps,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useLatest } from '../../hooks/useLatest'\nimport { flatArrayToMap, mapToKeyArray } from '../../libs/map'\n\nimport {\n focusFirstSibling,\n focusLastSibling,\n focusNextSibling,\n focusPreviousSibling,\n getNewExpandedItems,\n} from './accordionPanelHelper'\n\ntype AbstractProps = PropsWithChildren<{\n /** アイコンの左右位置 */\n iconPosition?: 'left' | 'right'\n /** 複数のパネルを同時に開くことを許容するかどうか */\n expandableMultiply?: boolean\n /** デフォルトで開いた状態にするアイテムの `name` の配列 */\n defaultExpanded?: string[]\n /** トリガのクリックイベントを処理するハンドラ */\n onClick?: (expandedItems: string[]) => void\n}> &\n VariantProps<typeof classNameGenerator>\ntype Props = AbstractProps & Omit<ComponentProps<'div'>, keyof AbstractProps>\n\nconst DEFAULT_EXPANDED_ARRAY: string[] = []\nconst DEFAULT_EXPANDED_MAP = flatArrayToMap(DEFAULT_EXPANDED_ARRAY)\n\nexport const AccordionPanelContext = createContext<{\n iconPosition: 'left' | 'right'\n expandedItems: Map<string, string>\n expandableMultiply: boolean\n parentRef: RefObject<HTMLDivElement> | null\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => void\n handleKeyDown: KeyboardEventHandler<HTMLButtonElement>\n}>({\n iconPosition: 'left',\n expandedItems: DEFAULT_EXPANDED_MAP,\n expandableMultiply: true,\n parentRef: null,\n handleClickTrigger: () => {},\n handleKeyDown: () => {},\n})\n\nconst ROUNDED = {\n t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',\n t_r: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tr-l',\n b_l: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-bl-l',\n b_r: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-br-l',\n}\n\nconst ROUNDED_ALL = [ROUNDED.t_l, ROUNDED.t_r, ROUNDED.b_l, ROUNDED.b_r]\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-AccordionPanel',\n variants: {\n rounded: {\n true: ROUNDED_ALL,\n false: '',\n all: ROUNDED_ALL,\n top: [ROUNDED.t_l, ROUNDED.t_r],\n right: [ROUNDED.t_r, ROUNDED.b_r],\n bottom: [ROUNDED.b_l, ROUNDED.b_r],\n left: [ROUNDED.t_l, ROUNDED.b_l],\n },\n },\n defaultVariants: {\n rounded: false,\n },\n})\n\nexport const AccordionPanel: FC<Props> = ({\n iconPosition = 'left',\n expandableMultiply = true,\n defaultExpanded = DEFAULT_EXPANDED_ARRAY,\n className,\n onClick,\n rounded,\n ...rest\n}) => {\n const [expandedItems, setExpanded] = useState(() => flatArrayToMap(defaultExpanded))\n const parentRef = useRef<HTMLDivElement>(null)\n const actualClassName = useMemo(\n () => classNameGenerator({ className, rounded }),\n [rounded, className],\n )\n\n const latest = useLatest({ onClick, expandableMultiply })\n\n const functions = useMemo(\n () => ({\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => {\n const { currentTarget } = e\n\n setExpanded((prevExpandedItems) => {\n const newExpandedItems = getNewExpandedItems(\n prevExpandedItems,\n currentTarget.value,\n currentTarget.getAttribute('aria-expanded') !== 'true',\n latest.expandableMultiply,\n )\n\n latest.onClick?.(mapToKeyArray(newExpandedItems))\n\n return newExpandedItems\n })\n },\n handleKeyDown: (e: Parameters<KeyboardEventHandler<HTMLButtonElement>>[0]): void => {\n if (!parentRef.current) {\n return\n }\n\n const item = e.target as HTMLElement\n\n switch (e.key) {\n case 'Home': {\n e.preventDefault()\n focusFirstSibling(parentRef.current)\n break\n }\n case 'End': {\n e.preventDefault()\n focusLastSibling(parentRef.current)\n break\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault()\n focusPreviousSibling(item, parentRef.current)\n break\n }\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault()\n focusNextSibling(item, parentRef.current)\n break\n }\n }\n },\n }),\n [latest],\n )\n\n return (\n <AccordionPanelContext.Provider\n value={{\n handleClickTrigger: functions.handleClickTrigger,\n handleKeyDown: functions.handleKeyDown,\n expandedItems,\n iconPosition,\n expandableMultiply,\n parentRef,\n }}\n >\n <div {...rest} ref={parentRef} role=\"presentation\" className={actualClassName} />\n </AccordionPanelContext.Provider>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;AAwCA;AACA;AAEO;AAQL;AACA;AACA;AACA;AACA;AACA;AACD;AAED;AACE;AACA;AACA;AACA;;AAGF;AAEA;AACE;AACA;AACE;AACE;AACA;AACA;;;;;AAKD;AACF;AACD;AACE;AACD;AACF;AAEM;AASL;AACA;;;AAQA;AAEI;AACE;AAEA;;;AAUE;AACF;;AAEF;AACE;;;AAIA;AAEA;;;AAGI;;;;;AAKA;;;AAGF;;;AAGE;;;AAGF;;;AAGE;;;;;AAKP;AAIH;;;;;;;AASK;AAKP;;;"}
@@ -1,4 +1,4 @@
1
- import { type ComponentProps, type FC, type PropsWithChildren, type RefObject } from 'react';
1
+ import { type ComponentProps, type FC, type KeyboardEventHandler, type MouseEvent, type PropsWithChildren, type RefObject } from 'react';
2
2
  import { type VariantProps } from 'tailwind-variants';
3
3
  type AbstractProps = PropsWithChildren<{
4
4
  /** アイコンの左右位置 */
@@ -16,8 +16,8 @@ export declare const AccordionPanelContext: import("react").Context<{
16
16
  expandedItems: Map<string, string>;
17
17
  expandableMultiply: boolean;
18
18
  parentRef: RefObject<HTMLDivElement> | null;
19
- onClickTrigger?: (itemName: string, isExpanded: boolean) => void;
20
- onClickProps?: (expandedItems: string[]) => void;
19
+ handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => void;
20
+ handleKeyDown: KeyboardEventHandler<HTMLButtonElement>;
21
21
  }>;
22
22
  declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
23
23
  rounded: {
@@ -1,15 +1,20 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { createContext, useState, useRef, useMemo, useCallback, useEffect } from 'react';
3
+ import { createContext, useState, useRef, useMemo } from 'react';
4
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.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
5
- import { flatArrayToMap } from '../../libs/map.js';
6
- import { getNewExpandedItems } from './accordionPanelHelper.js';
5
+ import { useLatest } from '../../hooks/useLatest.js';
6
+ import { flatArrayToMap, mapToKeyArray } from '../../libs/map.js';
7
+ import { focusNextSibling, focusPreviousSibling, focusLastSibling, focusFirstSibling, getNewExpandedItems } from './accordionPanelHelper.js';
7
8
 
9
+ const DEFAULT_EXPANDED_ARRAY = [];
10
+ const DEFAULT_EXPANDED_MAP = flatArrayToMap(DEFAULT_EXPANDED_ARRAY);
8
11
  const AccordionPanelContext = createContext({
9
12
  iconPosition: 'left',
10
- expandedItems: new Map(),
13
+ expandedItems: DEFAULT_EXPANDED_MAP,
11
14
  expandableMultiply: true,
12
15
  parentRef: null,
16
+ handleClickTrigger: () => { },
17
+ handleKeyDown: () => { },
13
18
  });
14
19
  const ROUNDED = {
15
20
  t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',
@@ -35,20 +40,54 @@ const classNameGenerator = ce({
35
40
  rounded: false,
36
41
  },
37
42
  });
38
- const AccordionPanel = ({ iconPosition = 'left', expandableMultiply = true, defaultExpanded = [], className, onClick: onClickProps, rounded, ...rest }) => {
39
- const [expandedItems, setExpanded] = useState(flatArrayToMap(defaultExpanded));
43
+ const AccordionPanel = ({ iconPosition = 'left', expandableMultiply = true, defaultExpanded = DEFAULT_EXPANDED_ARRAY, className, onClick, rounded, ...rest }) => {
44
+ const [expandedItems, setExpanded] = useState(() => flatArrayToMap(defaultExpanded));
40
45
  const parentRef = useRef(null);
41
46
  const actualClassName = useMemo(() => classNameGenerator({ className, rounded }), [rounded, className]);
42
- const onClickTrigger = useCallback((itemName, isExpanded) => {
43
- setExpanded(getNewExpandedItems(expandedItems, itemName, isExpanded, expandableMultiply));
44
- }, [expandableMultiply, expandedItems]);
45
- useEffect(() => {
46
- if (defaultExpanded.length > 0)
47
- setExpanded(flatArrayToMap(defaultExpanded));
48
- }, [defaultExpanded]);
47
+ const latest = useLatest({ onClick, expandableMultiply });
48
+ const functions = useMemo(() => ({
49
+ handleClickTrigger: (e) => {
50
+ const { currentTarget } = e;
51
+ setExpanded((prevExpandedItems) => {
52
+ const newExpandedItems = getNewExpandedItems(prevExpandedItems, currentTarget.value, currentTarget.getAttribute('aria-expanded') !== 'true', latest.expandableMultiply);
53
+ latest.onClick?.(mapToKeyArray(newExpandedItems));
54
+ return newExpandedItems;
55
+ });
56
+ },
57
+ handleKeyDown: (e) => {
58
+ if (!parentRef.current) {
59
+ return;
60
+ }
61
+ const item = e.target;
62
+ switch (e.key) {
63
+ case 'Home': {
64
+ e.preventDefault();
65
+ focusFirstSibling(parentRef.current);
66
+ break;
67
+ }
68
+ case 'End': {
69
+ e.preventDefault();
70
+ focusLastSibling(parentRef.current);
71
+ break;
72
+ }
73
+ case 'ArrowLeft':
74
+ case 'ArrowUp': {
75
+ e.preventDefault();
76
+ focusPreviousSibling(item, parentRef.current);
77
+ break;
78
+ }
79
+ case 'ArrowRight':
80
+ case 'ArrowDown': {
81
+ e.preventDefault();
82
+ focusNextSibling(item, parentRef.current);
83
+ break;
84
+ }
85
+ }
86
+ },
87
+ }), [latest]);
49
88
  return (jsx(AccordionPanelContext.Provider, { value: {
50
- onClickTrigger,
51
- onClickProps,
89
+ handleClickTrigger: functions.handleClickTrigger,
90
+ handleKeyDown: functions.handleKeyDown,
52
91
  expandedItems,
53
92
  iconPosition,
54
93
  expandableMultiply,
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionPanel.js","sources":["../../../src/components/AccordionPanel/AccordionPanel.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { flatArrayToMap } from '../../libs/map'\n\nimport { getNewExpandedItems } from './accordionPanelHelper'\n\ntype AbstractProps = PropsWithChildren<{\n /** アイコンの左右位置 */\n iconPosition?: 'left' | 'right'\n /** 複数のパネルを同時に開くことを許容するかどうか */\n expandableMultiply?: boolean\n /** デフォルトで開いた状態にするアイテムの `name` の配列 */\n defaultExpanded?: string[]\n /** トリガのクリックイベントを処理するハンドラ */\n onClick?: (expandedItems: string[]) => void\n}> &\n VariantProps<typeof classNameGenerator>\ntype Props = AbstractProps & Omit<ComponentProps<'div'>, keyof AbstractProps>\n\nexport const AccordionPanelContext = createContext<{\n iconPosition: 'left' | 'right'\n expandedItems: Map<string, string>\n expandableMultiply: boolean\n parentRef: RefObject<HTMLDivElement> | null\n onClickTrigger?: (itemName: string, isExpanded: boolean) => void\n onClickProps?: (expandedItems: string[]) => void\n}>({\n iconPosition: 'left',\n expandedItems: new Map(),\n expandableMultiply: true,\n parentRef: null,\n})\n\nconst ROUNDED = {\n t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',\n t_r: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tr-l',\n b_l: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-bl-l',\n b_r: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-br-l',\n}\n\nconst ROUNDED_ALL = [ROUNDED.t_l, ROUNDED.t_r, ROUNDED.b_l, ROUNDED.b_r]\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-AccordionPanel',\n variants: {\n rounded: {\n true: ROUNDED_ALL,\n false: '',\n all: ROUNDED_ALL,\n top: [ROUNDED.t_l, ROUNDED.t_r],\n right: [ROUNDED.t_r, ROUNDED.b_r],\n bottom: [ROUNDED.b_l, ROUNDED.b_r],\n left: [ROUNDED.t_l, ROUNDED.b_l],\n },\n },\n defaultVariants: {\n rounded: false,\n },\n})\n\nexport const AccordionPanel: FC<Props> = ({\n iconPosition = 'left',\n expandableMultiply = true,\n defaultExpanded = [],\n className,\n onClick: onClickProps,\n rounded,\n ...rest\n}) => {\n const [expandedItems, setExpanded] = useState(flatArrayToMap(defaultExpanded))\n const parentRef = useRef<HTMLDivElement>(null)\n const actualClassName = useMemo(\n () => classNameGenerator({ className, rounded }),\n [rounded, className],\n )\n\n const onClickTrigger = useCallback(\n (itemName: string, isExpanded: boolean) => {\n setExpanded(getNewExpandedItems(expandedItems, itemName, isExpanded, expandableMultiply))\n },\n [expandableMultiply, expandedItems],\n )\n\n useEffect(() => {\n if (defaultExpanded.length > 0) setExpanded(flatArrayToMap(defaultExpanded))\n }, [defaultExpanded])\n\n return (\n <AccordionPanelContext.Provider\n value={{\n onClickTrigger,\n onClickProps,\n expandedItems,\n iconPosition,\n expandableMultiply,\n parentRef,\n }}\n >\n <div {...rest} ref={parentRef} role=\"presentation\" className={actualClassName} />\n </AccordionPanelContext.Provider>\n )\n}\n"],"names":[],"mappings":";;;;;;;AAiCO;AAQL;;AAEA;AACA;AACD;AAED;AACE;AACA;AACA;AACA;;AAGF;AAEA;AACE;AACA;AACE;AACE;AACA;AACA;;;;;AAKD;AACF;AACD;AACE;AACD;AACF;AAEM;AASL;AACA;;;AAQI;AACF;;AAKA;AAAgC;AAClC;AAEA;;;;;;;AASK;AAKP;;"}
1
+ {"version":3,"file":"AccordionPanel.js","sources":["../../../src/components/AccordionPanel/AccordionPanel.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentProps,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useLatest } from '../../hooks/useLatest'\nimport { flatArrayToMap, mapToKeyArray } from '../../libs/map'\n\nimport {\n focusFirstSibling,\n focusLastSibling,\n focusNextSibling,\n focusPreviousSibling,\n getNewExpandedItems,\n} from './accordionPanelHelper'\n\ntype AbstractProps = PropsWithChildren<{\n /** アイコンの左右位置 */\n iconPosition?: 'left' | 'right'\n /** 複数のパネルを同時に開くことを許容するかどうか */\n expandableMultiply?: boolean\n /** デフォルトで開いた状態にするアイテムの `name` の配列 */\n defaultExpanded?: string[]\n /** トリガのクリックイベントを処理するハンドラ */\n onClick?: (expandedItems: string[]) => void\n}> &\n VariantProps<typeof classNameGenerator>\ntype Props = AbstractProps & Omit<ComponentProps<'div'>, keyof AbstractProps>\n\nconst DEFAULT_EXPANDED_ARRAY: string[] = []\nconst DEFAULT_EXPANDED_MAP = flatArrayToMap(DEFAULT_EXPANDED_ARRAY)\n\nexport const AccordionPanelContext = createContext<{\n iconPosition: 'left' | 'right'\n expandedItems: Map<string, string>\n expandableMultiply: boolean\n parentRef: RefObject<HTMLDivElement> | null\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => void\n handleKeyDown: KeyboardEventHandler<HTMLButtonElement>\n}>({\n iconPosition: 'left',\n expandedItems: DEFAULT_EXPANDED_MAP,\n expandableMultiply: true,\n parentRef: null,\n handleClickTrigger: () => {},\n handleKeyDown: () => {},\n})\n\nconst ROUNDED = {\n t_l: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tl-l',\n t_r: '[&>.smarthr-ui-AccordionPanel-item:first-child_.smarthr-ui-AccordionPanel-trigger]:shr-rounded-tr-l',\n b_l: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-bl-l',\n b_r: '[&>.smarthr-ui-AccordionPanel-item:last-child_.smarthr-ui-AccordionPanel-trigger:not([aria-expanded=\"true\"])]:shr-rounded-br-l',\n}\n\nconst ROUNDED_ALL = [ROUNDED.t_l, ROUNDED.t_r, ROUNDED.b_l, ROUNDED.b_r]\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-AccordionPanel',\n variants: {\n rounded: {\n true: ROUNDED_ALL,\n false: '',\n all: ROUNDED_ALL,\n top: [ROUNDED.t_l, ROUNDED.t_r],\n right: [ROUNDED.t_r, ROUNDED.b_r],\n bottom: [ROUNDED.b_l, ROUNDED.b_r],\n left: [ROUNDED.t_l, ROUNDED.b_l],\n },\n },\n defaultVariants: {\n rounded: false,\n },\n})\n\nexport const AccordionPanel: FC<Props> = ({\n iconPosition = 'left',\n expandableMultiply = true,\n defaultExpanded = DEFAULT_EXPANDED_ARRAY,\n className,\n onClick,\n rounded,\n ...rest\n}) => {\n const [expandedItems, setExpanded] = useState(() => flatArrayToMap(defaultExpanded))\n const parentRef = useRef<HTMLDivElement>(null)\n const actualClassName = useMemo(\n () => classNameGenerator({ className, rounded }),\n [rounded, className],\n )\n\n const latest = useLatest({ onClick, expandableMultiply })\n\n const functions = useMemo(\n () => ({\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => {\n const { currentTarget } = e\n\n setExpanded((prevExpandedItems) => {\n const newExpandedItems = getNewExpandedItems(\n prevExpandedItems,\n currentTarget.value,\n currentTarget.getAttribute('aria-expanded') !== 'true',\n latest.expandableMultiply,\n )\n\n latest.onClick?.(mapToKeyArray(newExpandedItems))\n\n return newExpandedItems\n })\n },\n handleKeyDown: (e: Parameters<KeyboardEventHandler<HTMLButtonElement>>[0]): void => {\n if (!parentRef.current) {\n return\n }\n\n const item = e.target as HTMLElement\n\n switch (e.key) {\n case 'Home': {\n e.preventDefault()\n focusFirstSibling(parentRef.current)\n break\n }\n case 'End': {\n e.preventDefault()\n focusLastSibling(parentRef.current)\n break\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault()\n focusPreviousSibling(item, parentRef.current)\n break\n }\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault()\n focusNextSibling(item, parentRef.current)\n break\n }\n }\n },\n }),\n [latest],\n )\n\n return (\n <AccordionPanelContext.Provider\n value={{\n handleClickTrigger: functions.handleClickTrigger,\n handleKeyDown: functions.handleKeyDown,\n expandedItems,\n iconPosition,\n expandableMultiply,\n parentRef,\n }}\n >\n <div {...rest} ref={parentRef} role=\"presentation\" className={actualClassName} />\n </AccordionPanelContext.Provider>\n )\n}\n"],"names":[],"mappings":";;;;;;;;AAwCA;AACA;AAEO;AAQL;AACA;AACA;AACA;AACA;AACA;AACD;AAED;AACE;AACA;AACA;AACA;;AAGF;AAEA;AACE;AACA;AACE;AACE;AACA;AACA;;;;;AAKD;AACF;AACD;AACE;AACD;AACF;AAEM;AASL;AACA;;;AAQA;AAEI;AACE;AAEA;;;AAUE;AACF;;AAEF;AACE;;;AAIA;AAEA;;;AAGI;;;;;AAKA;;;AAGF;;;AAGE;;;AAGF;;;AAGE;;;;;AAKP;AAIH;;;;;;;AASK;AAKP;;"}
@@ -18,7 +18,6 @@ require('../Layout/Center/Center.cjs');
18
18
  require('../Layout/Container/Container.cjs');
19
19
  var components_AccordionPanel_AccordionPanel = require('./AccordionPanel.cjs');
20
20
  var components_AccordionPanel_AccordionPanelItem = require('./AccordionPanelItem.cjs');
21
- var components_AccordionPanel_accordionPanelHelper = require('./accordionPanelHelper.cjs');
22
21
 
23
22
  const classNameGenerator = index.tv({
24
23
  slots: {
@@ -55,67 +54,13 @@ const AccordionPanelTrigger = ({ children, className, headingType = 'blockTitle'
55
54
  };
56
55
  }, [className]);
57
56
  const { name, contentId, triggerId } = React.useContext(components_AccordionPanel_AccordionPanelItem.AccordionPanelItemContext);
58
- const { iconPosition, expandedItems, onClickTrigger, onClickProps, expandableMultiply, parentRef, } = React.useContext(components_AccordionPanel_AccordionPanel.AccordionPanelContext);
57
+ const { iconPosition, expandedItems, handleClickTrigger, handleKeyDown } = React.useContext(components_AccordionPanel_AccordionPanel.AccordionPanelContext);
59
58
  const isExpanded = React.useMemo(() => libs_map.getIsInclude(expandedItems, name), [expandedItems, name]);
60
- const actualOnClickTrigger = React.useMemo(() => onClickTrigger
61
- ? (e) => onClickTrigger(e.currentTarget.value, !isExpanded)
62
- : undefined, [isExpanded, onClickTrigger]);
63
- const actualOnClickProps = React.useMemo(() => onClickProps
64
- ? (e) => {
65
- const newExpandedItems = components_AccordionPanel_accordionPanelHelper.getNewExpandedItems(expandedItems, e.currentTarget.value, !isExpanded, expandableMultiply);
66
- onClickProps(libs_map.mapToKeyArray(newExpandedItems));
67
- }
68
- : undefined, [isExpanded, expandedItems, expandableMultiply, onClickProps]);
69
- const handleClick = React.useMemo(() => {
70
- if (actualOnClickTrigger) {
71
- if (actualOnClickProps) {
72
- return (e) => {
73
- actualOnClickTrigger(e);
74
- actualOnClickProps(e);
75
- };
76
- }
77
- return actualOnClickTrigger;
78
- }
79
- else if (actualOnClickProps) {
80
- return actualOnClickProps;
81
- }
82
- return undefined;
83
- }, [actualOnClickProps, actualOnClickTrigger]);
84
- const handleKeyDown = React.useCallback((e) => {
85
- if (!parentRef?.current) {
86
- return;
87
- }
88
- const item = e.target;
89
- switch (e.key) {
90
- case 'Home': {
91
- e.preventDefault();
92
- components_AccordionPanel_accordionPanelHelper.focusFirstSibling(parentRef.current);
93
- break;
94
- }
95
- case 'End': {
96
- e.preventDefault();
97
- components_AccordionPanel_accordionPanelHelper.focusLastSibling(parentRef.current);
98
- break;
99
- }
100
- case 'ArrowLeft':
101
- case 'ArrowUp': {
102
- e.preventDefault();
103
- components_AccordionPanel_accordionPanelHelper.focusPreviousSibling(item, parentRef.current);
104
- break;
105
- }
106
- case 'ArrowRight':
107
- case 'ArrowDown': {
108
- e.preventDefault();
109
- components_AccordionPanel_accordionPanelHelper.focusNextSibling(item, parentRef.current);
110
- break;
111
- }
112
- }
113
- }, [parentRef]);
114
- return (
115
- // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content
116
- jsxRuntime.jsx(components_Heading_Heading.Heading, { unrecommendedTag: unrecommendedHeadingTag, type: headingType, children: jsxRuntime.jsx("button", { ...rest, type: "button", value: name, id: triggerId, "aria-expanded": isExpanded, "aria-controls": contentId, onClick: handleClick, onKeyDown: handleKeyDown, className: classNames.button, "data-component": "AccordionHeaderButton", children: jsxRuntime.jsx(MemoizedTitle, { iconPosition: iconPosition, classNames: classNames, children: children }) }) }));
59
+ return (jsxRuntime.jsx(MemoizedHeadingButton, { ...rest, name: name, triggerId: triggerId, isExpanded: isExpanded, contentId: contentId, handleClickTrigger: handleClickTrigger, handleKeyDown: handleKeyDown, classNames: classNames, iconPosition: iconPosition, headingType: headingType, unrecommendedHeadingTag: unrecommendedHeadingTag, children: children }));
117
60
  };
118
- const MemoizedTitle = React.memo(({ classNames, iconPosition, children }) => (jsxRuntime.jsxs(components_Layout_Cluster_Cluster.Cluster, { className: classNames.titleWrapper, align: "center", as: "span", children: [iconPosition === 'left' && jsxRuntime.jsx(components_Icon_FaIcon.FaCaretRightIcon, { className: classNames.leftIcon }), jsxRuntime.jsx("span", { className: classNames.title, children: children }), iconPosition === 'right' && jsxRuntime.jsx(components_Icon_FaIcon.FaCaretDownIcon, { className: classNames.rightIcon })] })));
61
+ const MemoizedHeadingButton = React.memo(({ children, name, triggerId, isExpanded, contentId, handleClickTrigger, handleKeyDown, classNames, iconPosition, headingType, unrecommendedHeadingTag, ...rest }) => (
62
+ // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content
63
+ jsxRuntime.jsx(components_Heading_Heading.Heading, { unrecommendedTag: unrecommendedHeadingTag, type: headingType, children: jsxRuntime.jsx("button", { ...rest, type: "button", value: name, id: triggerId, "aria-expanded": isExpanded, "aria-controls": contentId, onClick: handleClickTrigger, onKeyDown: handleKeyDown, className: classNames.button, "data-component": "AccordionHeaderButton", children: jsxRuntime.jsxs(components_Layout_Cluster_Cluster.Cluster, { className: classNames.titleWrapper, align: "center", as: "span", children: [iconPosition === 'left' && jsxRuntime.jsx(components_Icon_FaIcon.FaCaretRightIcon, { className: classNames.leftIcon }), jsxRuntime.jsx("span", { className: classNames.title, children: children }), iconPosition === 'right' && jsxRuntime.jsx(components_Icon_FaIcon.FaCaretDownIcon, { className: classNames.rightIcon })] }) }) })));
119
64
 
120
65
  exports.AccordionPanelTrigger = AccordionPanelTrigger;
121
66
  //# sourceMappingURL=AccordionPanelTrigger.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionPanelTrigger.cjs","sources":["../../../src/components/AccordionPanel/AccordionPanelTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useContext,\n useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { getIsInclude, mapToKeyArray } from '../../libs/map'\nimport { Heading, type HeadingTagTypes } from '../Heading'\nimport { FaCaretDownIcon, FaCaretRightIcon } from '../Icon'\nimport { Cluster } from '../Layout'\n\nimport { AccordionPanelContext } from './AccordionPanel'\nimport { AccordionPanelItemContext } from './AccordionPanelItem'\nimport {\n focusFirstSibling,\n focusLastSibling,\n focusNextSibling,\n focusPreviousSibling,\n getNewExpandedItems,\n} from './accordionPanelHelper'\n\nimport type { TextProps } from '../Text'\n\ntype AbstractProps = PropsWithChildren<{\n /** ヘッダ部分のテキストのスタイル */\n headingType?: Exclude<TextProps['styleType'], 'screenTitle'>\n /**\n * 可能な限り利用せず、SectioningContent(Article, Aside, Nav, Section)を使ってHeadingと関連する範囲を明確に指定する方法を検討してください\n */\n unrecommendedHeadingTag?: HeadingTagTypes\n}>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'button'>, keyof AbstractProps>\n\nconst classNameGenerator = tv({\n slots: {\n title: 'shr-grow shr-leading-tight',\n titleWrapper: 'shr-flex-nowrap',\n button: [\n 'smarthr-ui-AccordionPanel-trigger',\n 'shr-group shr-w-full shr-cursor-pointer shr-appearance-none shr-border-none shr-bg-transparent shr-px-1 shr-py-0.75 shr-text-left shr-text-inherit shr-text-color-inherit',\n 'disabled:shr-cursor-not-allowed disabled:shr-bg-white-darken disabled:shr-text-disabled',\n 'hover:shr-bg-white-darken',\n 'focus-visible:shr-focus-indicator',\n // Base 直下に AccordionPanel がある場合、背景が付き抜けないように角丸を指定(Base に overflow: hidden を与えるとフォーカスリングが表示されなくなる)\n '[.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:first-child_&]:shr-rounded-t-l [.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:last-child_&]:shr-rounded-b-l',\n ],\n leftIcon: 'shr-transition-transform shr-duration-100 group-aria-expanded:shr-rotate-90',\n rightIcon: 'group-aria-expanded:-shr-rotate-180',\n },\n compoundSlots: [\n {\n slots: ['leftIcon', 'rightIcon'],\n className: 'shr-shrink-0',\n },\n ],\n})\n\nexport const AccordionPanelTrigger: FC<Props> = ({\n children,\n className,\n headingType = 'blockTitle',\n unrecommendedHeadingTag,\n ...rest\n}) => {\n const classNames = useMemo(() => {\n const { title, titleWrapper, button, leftIcon, rightIcon } = classNameGenerator()\n\n return {\n title: title(),\n titleWrapper: titleWrapper(),\n button: button({ className }),\n leftIcon: leftIcon(),\n rightIcon: rightIcon(),\n }\n }, [className])\n\n const { name, contentId, triggerId } = useContext(AccordionPanelItemContext)\n const {\n iconPosition,\n expandedItems,\n onClickTrigger,\n onClickProps,\n expandableMultiply,\n parentRef,\n } = useContext(AccordionPanelContext)\n\n const isExpanded = useMemo(() => getIsInclude(expandedItems, name), [expandedItems, name])\n\n const actualOnClickTrigger = useMemo(\n () =>\n onClickTrigger\n ? (e: MouseEvent<HTMLButtonElement>) => onClickTrigger(e.currentTarget.value, !isExpanded)\n : undefined,\n [isExpanded, onClickTrigger],\n )\n const actualOnClickProps = useMemo(\n () =>\n onClickProps\n ? (e: MouseEvent<HTMLButtonElement>) => {\n const newExpandedItems = getNewExpandedItems(\n expandedItems,\n e.currentTarget.value,\n !isExpanded,\n expandableMultiply,\n )\n onClickProps(mapToKeyArray(newExpandedItems))\n }\n : undefined,\n [isExpanded, expandedItems, expandableMultiply, onClickProps],\n )\n const handleClick = useMemo(() => {\n if (actualOnClickTrigger) {\n if (actualOnClickProps) {\n return (e: MouseEvent<HTMLButtonElement>) => {\n actualOnClickTrigger(e)\n actualOnClickProps(e)\n }\n }\n\n return actualOnClickTrigger\n } else if (actualOnClickProps) {\n return actualOnClickProps\n }\n\n return undefined\n }, [actualOnClickProps, actualOnClickTrigger])\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (e): void => {\n if (!parentRef?.current) {\n return\n }\n\n const item = e.target as HTMLElement\n\n switch (e.key) {\n case 'Home': {\n e.preventDefault()\n focusFirstSibling(parentRef.current)\n break\n }\n case 'End': {\n e.preventDefault()\n focusLastSibling(parentRef.current)\n break\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault()\n focusPreviousSibling(item, parentRef.current)\n break\n }\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault()\n focusNextSibling(item, parentRef.current)\n break\n }\n }\n },\n [parentRef],\n )\n\n return (\n // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content\n <Heading unrecommendedTag={unrecommendedHeadingTag} type={headingType}>\n <button\n {...rest}\n type=\"button\"\n value={name}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={classNames.button}\n data-component=\"AccordionHeaderButton\"\n >\n <MemoizedTitle iconPosition={iconPosition} classNames={classNames}>\n {children}\n </MemoizedTitle>\n </button>\n </Heading>\n )\n}\n\nconst MemoizedTitle = memo<\n PropsWithChildren<{\n iconPosition: undefined | 'left' | 'right'\n classNames: { leftIcon: string; rightIcon: string; title: string; titleWrapper: string }\n }>\n>(({ classNames, iconPosition, children }) => (\n <Cluster className={classNames.titleWrapper} align=\"center\" as=\"span\">\n {iconPosition === 'left' && <FaCaretRightIcon className={classNames.leftIcon} />}\n <span className={classNames.title}>{children}</span>\n {iconPosition === 'right' && <FaCaretDownIcon className={classNames.rightIcon} />}\n </Cluster>\n))\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA0CA;AACE;AACE;AACA;AACA;;;;;;;;AAQC;AACD;AACA;AACD;AACD;AACE;AACE;AACA;AACD;AACF;AACF;;AASC;AACE;;;;AAKE;;;;AAIJ;AAEA;AACA;;AAWA;AAGM;;AAIN;AAGM;AACI;AAMA;;AAEJ;AAGN;;;;;;AAMM;;AAGF;;;AAEA;;AAGF;AACF;AAEA;AAEI;;;AAIA;AAEA;;;AAGI;;;;;AAKA;;;AAGF;;;AAGE;;;AAGF;;;AAGE;;;;AAIN;;;AAMA;AAmBJ;AAEA;;"}
1
+ {"version":3,"file":"AccordionPanelTrigger.cjs","sources":["../../../src/components/AccordionPanel/AccordionPanelTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n memo,\n useContext,\n useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { getIsInclude } from '../../libs/map'\nimport { Heading, type HeadingTagTypes } from '../Heading'\nimport { FaCaretDownIcon, FaCaretRightIcon } from '../Icon'\nimport { Cluster } from '../Layout'\n\nimport { AccordionPanelContext } from './AccordionPanel'\nimport { AccordionPanelItemContext } from './AccordionPanelItem'\n\nimport type { TextProps } from '../Text'\n\ntype AbstractProps = PropsWithChildren<{\n /** ヘッダ部分のテキストのスタイル */\n headingType?: Exclude<TextProps['styleType'], 'screenTitle'>\n /**\n * 可能な限り利用せず、SectioningContent(Article, Aside, Nav, Section)を使ってHeadingと関連する範囲を明確に指定する方法を検討してください\n */\n unrecommendedHeadingTag?: HeadingTagTypes\n}>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'button'>, keyof AbstractProps>\n\nconst classNameGenerator = tv({\n slots: {\n title: 'shr-grow shr-leading-tight',\n titleWrapper: 'shr-flex-nowrap',\n button: [\n 'smarthr-ui-AccordionPanel-trigger',\n 'shr-group shr-w-full shr-cursor-pointer shr-appearance-none shr-border-none shr-bg-transparent shr-px-1 shr-py-0.75 shr-text-left shr-text-inherit shr-text-color-inherit',\n 'disabled:shr-cursor-not-allowed disabled:shr-bg-white-darken disabled:shr-text-disabled',\n 'hover:shr-bg-white-darken',\n 'focus-visible:shr-focus-indicator',\n // Base 直下に AccordionPanel がある場合、背景が付き抜けないように角丸を指定(Base に overflow: hidden を与えるとフォーカスリングが表示されなくなる)\n '[.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:first-child_&]:shr-rounded-t-l [.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:last-child_&]:shr-rounded-b-l',\n ],\n leftIcon: 'shr-transition-transform shr-duration-100 group-aria-expanded:shr-rotate-90',\n rightIcon: 'group-aria-expanded:-shr-rotate-180',\n },\n compoundSlots: [\n {\n slots: ['leftIcon', 'rightIcon'],\n className: 'shr-shrink-0',\n },\n ],\n})\n\nexport const AccordionPanelTrigger: FC<Props> = ({\n children,\n className,\n headingType = 'blockTitle',\n unrecommendedHeadingTag,\n ...rest\n}) => {\n const classNames = useMemo(() => {\n const { title, titleWrapper, button, leftIcon, rightIcon } = classNameGenerator()\n\n return {\n title: title(),\n titleWrapper: titleWrapper(),\n button: button({ className }),\n leftIcon: leftIcon(),\n rightIcon: rightIcon(),\n }\n }, [className])\n\n const { name, contentId, triggerId } = useContext(AccordionPanelItemContext)\n const { iconPosition, expandedItems, handleClickTrigger, handleKeyDown } =\n useContext(AccordionPanelContext)\n\n const isExpanded = useMemo(() => getIsInclude(expandedItems, name), [expandedItems, name])\n\n return (\n <MemoizedHeadingButton\n {...rest}\n name={name}\n triggerId={triggerId}\n isExpanded={isExpanded}\n contentId={contentId}\n handleClickTrigger={handleClickTrigger}\n handleKeyDown={handleKeyDown}\n classNames={classNames}\n iconPosition={iconPosition}\n headingType={headingType}\n unrecommendedHeadingTag={unrecommendedHeadingTag}\n >\n {children}\n </MemoizedHeadingButton>\n )\n}\n\nconst MemoizedHeadingButton = memo<\n PropsWithChildren<\n Omit<ComponentPropsWithoutRef<'button'>, 'onClick' | 'onKeyDown'> & {\n name: string\n triggerId: string\n isExpanded: boolean\n contentId: string\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => void\n handleKeyDown: KeyboardEventHandler<HTMLButtonElement>\n classNames: {\n button: string\n titleWrapper: string\n leftIcon: string\n rightIcon: string\n title: string\n }\n iconPosition: 'left' | 'right'\n headingType: Exclude<TextProps['styleType'], 'screenTitle'>\n unrecommendedHeadingTag?: HeadingTagTypes\n }\n >\n>(\n ({\n children,\n name,\n triggerId,\n isExpanded,\n contentId,\n handleClickTrigger,\n handleKeyDown,\n classNames,\n iconPosition,\n headingType,\n unrecommendedHeadingTag,\n ...rest\n }) => (\n // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content\n <Heading unrecommendedTag={unrecommendedHeadingTag} type={headingType}>\n <button\n {...rest}\n type=\"button\"\n value={name}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleClickTrigger}\n onKeyDown={handleKeyDown}\n className={classNames.button}\n data-component=\"AccordionHeaderButton\"\n >\n {/* eslint-disable-next-line smarthr/best-practice-for-layouts */}\n <Cluster className={classNames.titleWrapper} align=\"center\" as=\"span\">\n {iconPosition === 'left' && <FaCaretRightIcon className={classNames.leftIcon} />}\n <span className={classNames.title}>{children}</span>\n {iconPosition === 'right' && <FaCaretDownIcon className={classNames.rightIcon} />}\n </Cluster>\n </button>\n </Heading>\n ),\n)\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkCA;AACE;AACE;AACA;AACA;;;;;;;;AAQC;AACD;AACA;AACD;AACD;AACE;AACE;AACA;AACD;AACF;AACF;;AASC;AACE;;;;AAKE;;;;AAIJ;AAEA;AACA;;;AAsBF;AAEA;AAoCI;AACAA;;"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { memo, useMemo, useContext, useCallback } from 'react';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { memo, useMemo, useContext } from 'react';
4
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.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
5
- import { getIsInclude, mapToKeyArray } from '../../libs/map.js';
5
+ import { getIsInclude } from '../../libs/map.js';
6
6
  import { Heading } from '../Heading/Heading.js';
7
7
  import '../Heading/PageHeading/PageHeading.js';
8
8
  import { FaCaretRightIcon, FaCaretDownIcon } from '../Icon/FaIcon.js';
@@ -16,7 +16,6 @@ import '../Layout/Center/Center.js';
16
16
  import '../Layout/Container/Container.js';
17
17
  import { AccordionPanelContext } from './AccordionPanel.js';
18
18
  import { AccordionPanelItemContext } from './AccordionPanelItem.js';
19
- import { getNewExpandedItems, focusNextSibling, focusPreviousSibling, focusLastSibling, focusFirstSibling } from './accordionPanelHelper.js';
20
19
 
21
20
  const classNameGenerator = ce({
22
21
  slots: {
@@ -53,67 +52,13 @@ const AccordionPanelTrigger = ({ children, className, headingType = 'blockTitle'
53
52
  };
54
53
  }, [className]);
55
54
  const { name, contentId, triggerId } = useContext(AccordionPanelItemContext);
56
- const { iconPosition, expandedItems, onClickTrigger, onClickProps, expandableMultiply, parentRef, } = useContext(AccordionPanelContext);
55
+ const { iconPosition, expandedItems, handleClickTrigger, handleKeyDown } = useContext(AccordionPanelContext);
57
56
  const isExpanded = useMemo(() => getIsInclude(expandedItems, name), [expandedItems, name]);
58
- const actualOnClickTrigger = useMemo(() => onClickTrigger
59
- ? (e) => onClickTrigger(e.currentTarget.value, !isExpanded)
60
- : undefined, [isExpanded, onClickTrigger]);
61
- const actualOnClickProps = useMemo(() => onClickProps
62
- ? (e) => {
63
- const newExpandedItems = getNewExpandedItems(expandedItems, e.currentTarget.value, !isExpanded, expandableMultiply);
64
- onClickProps(mapToKeyArray(newExpandedItems));
65
- }
66
- : undefined, [isExpanded, expandedItems, expandableMultiply, onClickProps]);
67
- const handleClick = useMemo(() => {
68
- if (actualOnClickTrigger) {
69
- if (actualOnClickProps) {
70
- return (e) => {
71
- actualOnClickTrigger(e);
72
- actualOnClickProps(e);
73
- };
74
- }
75
- return actualOnClickTrigger;
76
- }
77
- else if (actualOnClickProps) {
78
- return actualOnClickProps;
79
- }
80
- return undefined;
81
- }, [actualOnClickProps, actualOnClickTrigger]);
82
- const handleKeyDown = useCallback((e) => {
83
- if (!parentRef?.current) {
84
- return;
85
- }
86
- const item = e.target;
87
- switch (e.key) {
88
- case 'Home': {
89
- e.preventDefault();
90
- focusFirstSibling(parentRef.current);
91
- break;
92
- }
93
- case 'End': {
94
- e.preventDefault();
95
- focusLastSibling(parentRef.current);
96
- break;
97
- }
98
- case 'ArrowLeft':
99
- case 'ArrowUp': {
100
- e.preventDefault();
101
- focusPreviousSibling(item, parentRef.current);
102
- break;
103
- }
104
- case 'ArrowRight':
105
- case 'ArrowDown': {
106
- e.preventDefault();
107
- focusNextSibling(item, parentRef.current);
108
- break;
109
- }
110
- }
111
- }, [parentRef]);
112
- return (
113
- // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content
114
- jsx(Heading, { unrecommendedTag: unrecommendedHeadingTag, type: headingType, children: jsx("button", { ...rest, type: "button", value: name, id: triggerId, "aria-expanded": isExpanded, "aria-controls": contentId, onClick: handleClick, onKeyDown: handleKeyDown, className: classNames.button, "data-component": "AccordionHeaderButton", children: jsx(MemoizedTitle, { iconPosition: iconPosition, classNames: classNames, children: children }) }) }));
57
+ return (jsx(MemoizedHeadingButton, { ...rest, name: name, triggerId: triggerId, isExpanded: isExpanded, contentId: contentId, handleClickTrigger: handleClickTrigger, handleKeyDown: handleKeyDown, classNames: classNames, iconPosition: iconPosition, headingType: headingType, unrecommendedHeadingTag: unrecommendedHeadingTag, children: children }));
115
58
  };
116
- const MemoizedTitle = memo(({ classNames, iconPosition, children }) => (jsxs(Cluster, { className: classNames.titleWrapper, align: "center", as: "span", children: [iconPosition === 'left' && jsx(FaCaretRightIcon, { className: classNames.leftIcon }), jsx("span", { className: classNames.title, children: children }), iconPosition === 'right' && jsx(FaCaretDownIcon, { className: classNames.rightIcon })] })));
59
+ const MemoizedHeadingButton = memo(({ children, name, triggerId, isExpanded, contentId, handleClickTrigger, handleKeyDown, classNames, iconPosition, headingType, unrecommendedHeadingTag, ...rest }) => (
60
+ // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content
61
+ jsx(Heading, { unrecommendedTag: unrecommendedHeadingTag, type: headingType, children: jsx("button", { ...rest, type: "button", value: name, id: triggerId, "aria-expanded": isExpanded, "aria-controls": contentId, onClick: handleClickTrigger, onKeyDown: handleKeyDown, className: classNames.button, "data-component": "AccordionHeaderButton", children: jsxs(Cluster, { className: classNames.titleWrapper, align: "center", as: "span", children: [iconPosition === 'left' && jsx(FaCaretRightIcon, { className: classNames.leftIcon }), jsx("span", { className: classNames.title, children: children }), iconPosition === 'right' && jsx(FaCaretDownIcon, { className: classNames.rightIcon })] }) }) })));
117
62
 
118
63
  export { AccordionPanelTrigger };
119
64
  //# sourceMappingURL=AccordionPanelTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionPanelTrigger.js","sources":["../../../src/components/AccordionPanel/AccordionPanelTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useContext,\n useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { getIsInclude, mapToKeyArray } from '../../libs/map'\nimport { Heading, type HeadingTagTypes } from '../Heading'\nimport { FaCaretDownIcon, FaCaretRightIcon } from '../Icon'\nimport { Cluster } from '../Layout'\n\nimport { AccordionPanelContext } from './AccordionPanel'\nimport { AccordionPanelItemContext } from './AccordionPanelItem'\nimport {\n focusFirstSibling,\n focusLastSibling,\n focusNextSibling,\n focusPreviousSibling,\n getNewExpandedItems,\n} from './accordionPanelHelper'\n\nimport type { TextProps } from '../Text'\n\ntype AbstractProps = PropsWithChildren<{\n /** ヘッダ部分のテキストのスタイル */\n headingType?: Exclude<TextProps['styleType'], 'screenTitle'>\n /**\n * 可能な限り利用せず、SectioningContent(Article, Aside, Nav, Section)を使ってHeadingと関連する範囲を明確に指定する方法を検討してください\n */\n unrecommendedHeadingTag?: HeadingTagTypes\n}>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'button'>, keyof AbstractProps>\n\nconst classNameGenerator = tv({\n slots: {\n title: 'shr-grow shr-leading-tight',\n titleWrapper: 'shr-flex-nowrap',\n button: [\n 'smarthr-ui-AccordionPanel-trigger',\n 'shr-group shr-w-full shr-cursor-pointer shr-appearance-none shr-border-none shr-bg-transparent shr-px-1 shr-py-0.75 shr-text-left shr-text-inherit shr-text-color-inherit',\n 'disabled:shr-cursor-not-allowed disabled:shr-bg-white-darken disabled:shr-text-disabled',\n 'hover:shr-bg-white-darken',\n 'focus-visible:shr-focus-indicator',\n // Base 直下に AccordionPanel がある場合、背景が付き抜けないように角丸を指定(Base に overflow: hidden を与えるとフォーカスリングが表示されなくなる)\n '[.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:first-child_&]:shr-rounded-t-l [.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:last-child_&]:shr-rounded-b-l',\n ],\n leftIcon: 'shr-transition-transform shr-duration-100 group-aria-expanded:shr-rotate-90',\n rightIcon: 'group-aria-expanded:-shr-rotate-180',\n },\n compoundSlots: [\n {\n slots: ['leftIcon', 'rightIcon'],\n className: 'shr-shrink-0',\n },\n ],\n})\n\nexport const AccordionPanelTrigger: FC<Props> = ({\n children,\n className,\n headingType = 'blockTitle',\n unrecommendedHeadingTag,\n ...rest\n}) => {\n const classNames = useMemo(() => {\n const { title, titleWrapper, button, leftIcon, rightIcon } = classNameGenerator()\n\n return {\n title: title(),\n titleWrapper: titleWrapper(),\n button: button({ className }),\n leftIcon: leftIcon(),\n rightIcon: rightIcon(),\n }\n }, [className])\n\n const { name, contentId, triggerId } = useContext(AccordionPanelItemContext)\n const {\n iconPosition,\n expandedItems,\n onClickTrigger,\n onClickProps,\n expandableMultiply,\n parentRef,\n } = useContext(AccordionPanelContext)\n\n const isExpanded = useMemo(() => getIsInclude(expandedItems, name), [expandedItems, name])\n\n const actualOnClickTrigger = useMemo(\n () =>\n onClickTrigger\n ? (e: MouseEvent<HTMLButtonElement>) => onClickTrigger(e.currentTarget.value, !isExpanded)\n : undefined,\n [isExpanded, onClickTrigger],\n )\n const actualOnClickProps = useMemo(\n () =>\n onClickProps\n ? (e: MouseEvent<HTMLButtonElement>) => {\n const newExpandedItems = getNewExpandedItems(\n expandedItems,\n e.currentTarget.value,\n !isExpanded,\n expandableMultiply,\n )\n onClickProps(mapToKeyArray(newExpandedItems))\n }\n : undefined,\n [isExpanded, expandedItems, expandableMultiply, onClickProps],\n )\n const handleClick = useMemo(() => {\n if (actualOnClickTrigger) {\n if (actualOnClickProps) {\n return (e: MouseEvent<HTMLButtonElement>) => {\n actualOnClickTrigger(e)\n actualOnClickProps(e)\n }\n }\n\n return actualOnClickTrigger\n } else if (actualOnClickProps) {\n return actualOnClickProps\n }\n\n return undefined\n }, [actualOnClickProps, actualOnClickTrigger])\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (e): void => {\n if (!parentRef?.current) {\n return\n }\n\n const item = e.target as HTMLElement\n\n switch (e.key) {\n case 'Home': {\n e.preventDefault()\n focusFirstSibling(parentRef.current)\n break\n }\n case 'End': {\n e.preventDefault()\n focusLastSibling(parentRef.current)\n break\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault()\n focusPreviousSibling(item, parentRef.current)\n break\n }\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault()\n focusNextSibling(item, parentRef.current)\n break\n }\n }\n },\n [parentRef],\n )\n\n return (\n // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content\n <Heading unrecommendedTag={unrecommendedHeadingTag} type={headingType}>\n <button\n {...rest}\n type=\"button\"\n value={name}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={classNames.button}\n data-component=\"AccordionHeaderButton\"\n >\n <MemoizedTitle iconPosition={iconPosition} classNames={classNames}>\n {children}\n </MemoizedTitle>\n </button>\n </Heading>\n )\n}\n\nconst MemoizedTitle = memo<\n PropsWithChildren<{\n iconPosition: undefined | 'left' | 'right'\n classNames: { leftIcon: string; rightIcon: string; title: string; titleWrapper: string }\n }>\n>(({ classNames, iconPosition, children }) => (\n <Cluster className={classNames.titleWrapper} align=\"center\" as=\"span\">\n {iconPosition === 'left' && <FaCaretRightIcon className={classNames.leftIcon} />}\n <span className={classNames.title}>{children}</span>\n {iconPosition === 'right' && <FaCaretDownIcon className={classNames.rightIcon} />}\n </Cluster>\n))\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA0CA;AACE;AACE;AACA;AACA;;;;;;;;AAQC;AACD;AACA;AACD;AACD;AACE;AACE;AACA;AACD;AACF;AACF;;AASC;AACE;;;;AAKE;;;;AAIJ;AAEA;AACA;;AAWA;AAGM;;AAIN;AAGM;AACI;AAMA;;AAEJ;AAGN;;;;;;AAMM;;AAGF;;;AAEA;;AAGF;AACF;AAEA;AAEI;;;AAIA;AAEA;;;AAGI;;;;;AAKA;;;AAGF;;;AAGE;;;AAGF;;;AAGE;;;;AAIN;;;AAMA;AAmBJ;AAEA;;"}
1
+ {"version":3,"file":"AccordionPanelTrigger.js","sources":["../../../src/components/AccordionPanel/AccordionPanelTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type FC,\n type KeyboardEventHandler,\n type MouseEvent,\n type PropsWithChildren,\n memo,\n useContext,\n useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { getIsInclude } from '../../libs/map'\nimport { Heading, type HeadingTagTypes } from '../Heading'\nimport { FaCaretDownIcon, FaCaretRightIcon } from '../Icon'\nimport { Cluster } from '../Layout'\n\nimport { AccordionPanelContext } from './AccordionPanel'\nimport { AccordionPanelItemContext } from './AccordionPanelItem'\n\nimport type { TextProps } from '../Text'\n\ntype AbstractProps = PropsWithChildren<{\n /** ヘッダ部分のテキストのスタイル */\n headingType?: Exclude<TextProps['styleType'], 'screenTitle'>\n /**\n * 可能な限り利用せず、SectioningContent(Article, Aside, Nav, Section)を使ってHeadingと関連する範囲を明確に指定する方法を検討してください\n */\n unrecommendedHeadingTag?: HeadingTagTypes\n}>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'button'>, keyof AbstractProps>\n\nconst classNameGenerator = tv({\n slots: {\n title: 'shr-grow shr-leading-tight',\n titleWrapper: 'shr-flex-nowrap',\n button: [\n 'smarthr-ui-AccordionPanel-trigger',\n 'shr-group shr-w-full shr-cursor-pointer shr-appearance-none shr-border-none shr-bg-transparent shr-px-1 shr-py-0.75 shr-text-left shr-text-inherit shr-text-color-inherit',\n 'disabled:shr-cursor-not-allowed disabled:shr-bg-white-darken disabled:shr-text-disabled',\n 'hover:shr-bg-white-darken',\n 'focus-visible:shr-focus-indicator',\n // Base 直下に AccordionPanel がある場合、背景が付き抜けないように角丸を指定(Base に overflow: hidden を与えるとフォーカスリングが表示されなくなる)\n '[.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:first-child_&]:shr-rounded-t-l [.smarthr-ui-Base_>_.smarthr-ui-AccordionPanel_.smarthr-ui-AccordionPanel-item:last-child_&]:shr-rounded-b-l',\n ],\n leftIcon: 'shr-transition-transform shr-duration-100 group-aria-expanded:shr-rotate-90',\n rightIcon: 'group-aria-expanded:-shr-rotate-180',\n },\n compoundSlots: [\n {\n slots: ['leftIcon', 'rightIcon'],\n className: 'shr-shrink-0',\n },\n ],\n})\n\nexport const AccordionPanelTrigger: FC<Props> = ({\n children,\n className,\n headingType = 'blockTitle',\n unrecommendedHeadingTag,\n ...rest\n}) => {\n const classNames = useMemo(() => {\n const { title, titleWrapper, button, leftIcon, rightIcon } = classNameGenerator()\n\n return {\n title: title(),\n titleWrapper: titleWrapper(),\n button: button({ className }),\n leftIcon: leftIcon(),\n rightIcon: rightIcon(),\n }\n }, [className])\n\n const { name, contentId, triggerId } = useContext(AccordionPanelItemContext)\n const { iconPosition, expandedItems, handleClickTrigger, handleKeyDown } =\n useContext(AccordionPanelContext)\n\n const isExpanded = useMemo(() => getIsInclude(expandedItems, name), [expandedItems, name])\n\n return (\n <MemoizedHeadingButton\n {...rest}\n name={name}\n triggerId={triggerId}\n isExpanded={isExpanded}\n contentId={contentId}\n handleClickTrigger={handleClickTrigger}\n handleKeyDown={handleKeyDown}\n classNames={classNames}\n iconPosition={iconPosition}\n headingType={headingType}\n unrecommendedHeadingTag={unrecommendedHeadingTag}\n >\n {children}\n </MemoizedHeadingButton>\n )\n}\n\nconst MemoizedHeadingButton = memo<\n PropsWithChildren<\n Omit<ComponentPropsWithoutRef<'button'>, 'onClick' | 'onKeyDown'> & {\n name: string\n triggerId: string\n isExpanded: boolean\n contentId: string\n handleClickTrigger: (e: MouseEvent<HTMLButtonElement>) => void\n handleKeyDown: KeyboardEventHandler<HTMLButtonElement>\n classNames: {\n button: string\n titleWrapper: string\n leftIcon: string\n rightIcon: string\n title: string\n }\n iconPosition: 'left' | 'right'\n headingType: Exclude<TextProps['styleType'], 'screenTitle'>\n unrecommendedHeadingTag?: HeadingTagTypes\n }\n >\n>(\n ({\n children,\n name,\n triggerId,\n isExpanded,\n contentId,\n handleClickTrigger,\n handleKeyDown,\n classNames,\n iconPosition,\n headingType,\n unrecommendedHeadingTag,\n ...rest\n }) => (\n // eslint-disable-next-line smarthr/a11y-heading-in-sectioning-content\n <Heading unrecommendedTag={unrecommendedHeadingTag} type={headingType}>\n <button\n {...rest}\n type=\"button\"\n value={name}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n onClick={handleClickTrigger}\n onKeyDown={handleKeyDown}\n className={classNames.button}\n data-component=\"AccordionHeaderButton\"\n >\n {/* eslint-disable-next-line smarthr/best-practice-for-layouts */}\n <Cluster className={classNames.titleWrapper} align=\"center\" as=\"span\">\n {iconPosition === 'left' && <FaCaretRightIcon className={classNames.leftIcon} />}\n <span className={classNames.title}>{children}</span>\n {iconPosition === 'right' && <FaCaretDownIcon className={classNames.rightIcon} />}\n </Cluster>\n </button>\n </Heading>\n ),\n)\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;AAkCA;AACE;AACE;AACA;AACA;;;;;;;;AAQC;AACD;AACA;AACD;AACD;AACE;AACE;AACA;AACD;AACF;AACF;;AASC;AACE;;;;AAKE;;;;AAIJ;AAEA;AACA;;;AAsBF;AAEA;AAoCI;AACAA;;"}
@@ -4,8 +4,8 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var index = require('./../../../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
6
6
  require('../../../../intl/IntlProvider.cjs');
7
- var intl_useIntl = require('../../../../intl/useIntl.cjs');
8
- require('../../../../intl/Localizer.cjs');
7
+ require('react-intl');
8
+ var intl_Localizer = require('../../../../intl/Localizer.cjs');
9
9
  require('../../../../_virtual/dayjs.min.cjs');
10
10
  require('../../../../intl/TimeFormatter.cjs');
11
11
  require('../../../Button/Button.cjs');
@@ -30,29 +30,19 @@ const classNameGenerator = index.tv({
30
30
  ],
31
31
  },
32
32
  });
33
+ const CLASS_NAMES = (() => {
34
+ const { empty, list, listItem } = classNameGenerator();
35
+ return {
36
+ empty: empty(),
37
+ list: list(),
38
+ listItem: listItem(),
39
+ };
40
+ })();
33
41
  const AppLauncherFeatures = ({ features, page }) => features.length === 0 ? jsxRuntime.jsx(EmptyList, {}) : jsxRuntime.jsx(FeatureList, { features: features, page: page });
34
- const EmptyList = React.memo(() => {
35
- const className = React.useMemo(() => {
36
- const { empty } = classNameGenerator();
37
- return empty();
38
- }, []);
39
- const { localize } = intl_useIntl.useIntl();
40
- const translated = React.useMemo(() => localize({
41
- id: 'smarthr-ui/AppHeader/Launcher/emptyText',
42
- defaultText: '該当するアプリが見つかりませんでした。',
43
- }), [localize]);
44
- return (jsxRuntime.jsx("div", { className: className, children: jsxRuntime.jsx(components_Text_Text.Text, { size: "S", children: jsxRuntime.jsx(components_AppHeader_components_common_Translate.Translate, { children: translated }) }) }));
45
- });
42
+ const EmptyList = React.memo(() => (jsxRuntime.jsx("div", { className: CLASS_NAMES.empty, children: jsxRuntime.jsx(components_Text_Text.Text, { size: "S", children: jsxRuntime.jsx(components_AppHeader_components_common_Translate.Translate, { children: jsxRuntime.jsx(intl_Localizer.Localizer, { id: "smarthr-ui/AppHeader/Launcher/emptyText", defaultText: "\u8A72\u5F53\u3059\u308B\u30A2\u30D7\u30EA\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002" }) }) }) })));
46
43
  const FeatureList = ({ features, page }) => {
47
- const classNames = React.useMemo(() => {
48
- const { list, listItem } = classNameGenerator();
49
- return {
50
- list: list(),
51
- listItem: listItem(),
52
- };
53
- }, []);
54
44
  const isFavorite = page === 'favorite';
55
- return (jsxRuntime.jsx("ul", { className: classNames.list, children: features.map((feature) => (jsxRuntime.jsx(FeatureListItem, { href: feature.url, isFavorite: isFavorite, className: classNames.listItem, children: feature.name }, feature.id))) }));
45
+ return (jsxRuntime.jsx("ul", { className: CLASS_NAMES.list, children: features.map((feature) => (jsxRuntime.jsx(FeatureListItem, { href: feature.url, isFavorite: isFavorite, className: CLASS_NAMES.listItem, children: feature.name }, feature.id))) }));
56
46
  };
57
47
  const FeatureListItem = React.memo(({ href, children, isFavorite, className }) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsx(components_Button_AnchorButton.AnchorButton, { href: href, target: "_blank", prefix: isFavorite && jsxRuntime.jsx(components_Icon_FaIcon.FaStarIcon, {}), suffix: jsxRuntime.jsx(components_Icon_FaIcon.FaArrowRightIcon, {}), variant: "text", wide: true, "data-favorite": isFavorite, className: className, children: jsxRuntime.jsx(FeatureName, { children: children }) }) })));
58
48
  const FeatureName = ({ children }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AppLauncherFeatures.cjs","sources":["../../../../../src/components/AppHeader/components/common/AppLauncherFeatures.tsx"],"sourcesContent":["import { type FC, type PropsWithChildren, memo, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { useIntl } from '../../../../intl'\nimport { AnchorButton } from '../../../Button'\nimport { FaArrowRightIcon, FaStarIcon } from '../../../Icon'\nimport { LineClamp } from '../../../LineClamp'\nimport { Text } from '../../../Text'\nimport { mediaQuery, useMediaQuery } from '../../hooks/useMediaQuery'\n\nimport { Translate } from './Translate'\n\nimport type { Launcher } from '../../types'\n\nconst classNameGenerator = tv({\n slots: {\n empty: ['shr-p-1 shr-text-center'],\n list: ['shr-list-none', '[&>li]:shr-px-0.5 [&>li]:shr-py-0.25'],\n listItem: [\n 'smarthr-ui-AppLauncher-listItem',\n 'shr-grid shr-min-h-[2.5rem] shr-grid-cols-[1rem_1fr_1rem] shr-gap-0.75 shr-whitespace-normal shr-px-1 shr-py-0 shr-text-left shr-leading-tight',\n 'data-[favorite=\"false\"]:shr-grid-cols-[1fr_1rem]',\n ],\n },\n})\n\ntype Props = {\n features: Array<Launcher['feature']>\n page: Launcher['page']\n}\n\nexport const AppLauncherFeatures: FC<Props> = ({ features, page }) =>\n features.length === 0 ? <EmptyList /> : <FeatureList features={features} page={page} />\n\nconst EmptyList = memo(() => {\n const className = useMemo(() => {\n const { empty } = classNameGenerator()\n\n return empty()\n }, [])\n const { localize } = useIntl()\n const translated = useMemo(\n () =>\n localize({\n id: 'smarthr-ui/AppHeader/Launcher/emptyText',\n defaultText: '該当するアプリが見つかりませんでした。',\n }),\n [localize],\n )\n\n return (\n <div className={className}>\n <Text size=\"S\">\n <Translate>{translated}</Translate>\n </Text>\n </div>\n )\n})\n\nconst FeatureList: FC<Props> = ({ features, page }) => {\n const classNames = useMemo(() => {\n const { list, listItem } = classNameGenerator()\n\n return {\n list: list(),\n listItem: listItem(),\n }\n }, [])\n\n const isFavorite = page === 'favorite'\n\n return (\n <ul className={classNames.list}>\n {features.map((feature) => (\n <FeatureListItem\n key={feature.id}\n href={feature.url}\n isFavorite={isFavorite}\n className={classNames.listItem}\n >\n {feature.name}\n </FeatureListItem>\n ))}\n </ul>\n )\n}\n\nconst FeatureListItem = memo<{\n href: Props['features'][number]['url']\n children: Props['features'][number]['name']\n className: string\n isFavorite: boolean\n}>(({ href, children, isFavorite, className }) => (\n <li>\n <AnchorButton\n href={href}\n target=\"_blank\"\n prefix={isFavorite && <FaStarIcon />}\n suffix={<FaArrowRightIcon />}\n variant=\"text\"\n wide\n data-favorite={isFavorite}\n className={className}\n >\n <FeatureName>{children}</FeatureName>\n </AnchorButton>\n </li>\n))\n\nconst FeatureName: FC<PropsWithChildren> = ({ children }) => {\n const isDesktop = useMediaQuery(mediaQuery.desktop)\n\n return isDesktop ? <LineClamp maxLines={2}>{children}</LineClamp> : children\n}\n"],"names":["tv","_jsx","memo","useMemo","useIntl","Text","Translate","AnchorButton","FaStarIcon","FaArrowRightIcon","useMediaQuery","mediaQuery","LineClamp"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,yBAAyB,CAAC;AAClC,QAAA,IAAI,EAAE,CAAC,eAAe,EAAE,sCAAsC,CAAC;AAC/D,QAAA,QAAQ,EAAE;YACR,iCAAiC;YACjC,gJAAgJ;YAChJ,kDAAkD;AACnD,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AAOK,MAAM,mBAAmB,GAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAC/D,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAGC,eAAC,SAAS,EAAA,EAAA,CAAG,GAAGA,cAAA,CAAC,WAAW,EAAA,EAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI;AAErF,MAAM,SAAS,GAAGC,UAAI,CAAC,MAAK;AAC1B,IAAA,MAAM,SAAS,GAAGC,aAAO,CAAC,MAAK;AAC7B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,EAAE;QAEtC,OAAO,KAAK,EAAE;IAChB,CAAC,EAAE,EAAE,CAAC;AACN,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAGC,oBAAO,EAAE;IAC9B,MAAM,UAAU,GAAGD,aAAO,CACxB,MACE,QAAQ,CAAC;AACP,QAAA,EAAE,EAAE,yCAAyC;AAC7C,QAAA,WAAW,EAAE,qBAAqB;AACnC,KAAA,CAAC,EACJ,CAAC,QAAQ,CAAC,CACX;IAED,QACEF,wBAAK,SAAS,EAAE,SAAS,EAAA,QAAA,EACvBA,cAAA,CAACI,yBAAI,EAAA,EAAC,IAAI,EAAC,GAAG,EAAA,QAAA,EACZJ,eAACK,0DAAS,EAAA,EAAA,QAAA,EAAE,UAAU,EAAA,CAAa,EAAA,CAC9B,EAAA,CACH;AAEV,CAAC,CAAC;AAEF,MAAM,WAAW,GAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAI;AACpD,IAAA,MAAM,UAAU,GAAGH,aAAO,CAAC,MAAK;QAC9B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE;QAE/C,OAAO;YACL,IAAI,EAAE,IAAI,EAAE;YACZ,QAAQ,EAAE,QAAQ,EAAE;SACrB;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU;IAEtC,QACEF,uBAAI,SAAS,EAAE,UAAU,CAAC,IAAI,EAAA,QAAA,EAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,MACpBA,cAAA,CAAC,eAAe,EAAA,EAEd,IAAI,EAAE,OAAO,CAAC,GAAG,EACjB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAA,QAAA,EAE7B,OAAO,CAAC,IAAI,EAAA,EALR,OAAO,CAAC,EAAE,CAMC,CACnB,CAAC,EAAA,CACC;AAET,CAAC;AAED,MAAM,eAAe,GAAGC,UAAI,CAKzB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAC3CD,cAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EACEA,cAAA,CAACM,2CAAY,EAAA,EACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,QAAQ,EACf,MAAM,EAAE,UAAU,IAAIN,cAAA,CAACO,iCAAU,EAAA,EAAA,CAAG,EACpC,MAAM,EAAEP,cAAA,CAACQ,uCAAgB,EAAA,EAAA,CAAG,EAC5B,OAAO,EAAC,MAAM,EACd,IAAI,EAAA,IAAA,EAAA,eAAA,EACW,UAAU,EACzB,SAAS,EAAE,SAAS,YAEpBR,cAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAe,EAAA,CACxB,EAAA,CACZ,CACN,CAAC;AAEF,MAAM,WAAW,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;IAC1D,MAAM,SAAS,GAAGS,sDAAa,CAACC,mDAAU,CAAC,OAAO,CAAC;AAEnD,IAAA,OAAO,SAAS,GAAGV,cAAA,CAACW,wCAAS,EAAA,EAAC,QAAQ,EAAE,CAAC,YAAG,QAAQ,EAAA,CAAa,GAAG,QAAQ;AAC9E,CAAC;;;;"}
1
+ {"version":3,"file":"AppLauncherFeatures.cjs","sources":["../../../../../src/components/AppHeader/components/common/AppLauncherFeatures.tsx"],"sourcesContent":["import { type FC, type PropsWithChildren, memo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { Localizer } from '../../../../intl'\nimport { AnchorButton } from '../../../Button'\nimport { FaArrowRightIcon, FaStarIcon } from '../../../Icon'\nimport { LineClamp } from '../../../LineClamp'\nimport { Text } from '../../../Text'\nimport { mediaQuery, useMediaQuery } from '../../hooks/useMediaQuery'\n\nimport { Translate } from './Translate'\n\nimport type { Launcher } from '../../types'\n\nconst classNameGenerator = tv({\n slots: {\n empty: ['shr-p-1 shr-text-center'],\n list: ['shr-list-none', '[&>li]:shr-px-0.5 [&>li]:shr-py-0.25'],\n listItem: [\n 'smarthr-ui-AppLauncher-listItem',\n 'shr-grid shr-min-h-[2.5rem] shr-grid-cols-[1rem_1fr_1rem] shr-gap-0.75 shr-whitespace-normal shr-px-1 shr-py-0 shr-text-left shr-leading-tight',\n 'data-[favorite=\"false\"]:shr-grid-cols-[1fr_1rem]',\n ],\n },\n})\n\nconst CLASS_NAMES = (() => {\n const { empty, list, listItem } = classNameGenerator()\n\n return {\n empty: empty(),\n list: list(),\n listItem: listItem(),\n }\n})()\n\ntype Props = {\n features: Array<Launcher['feature']>\n page: Launcher['page']\n}\n\nexport const AppLauncherFeatures: FC<Props> = ({ features, page }) =>\n features.length === 0 ? <EmptyList /> : <FeatureList features={features} page={page} />\n\nconst EmptyList = memo(() => (\n <div className={CLASS_NAMES.empty}>\n <Text size=\"S\">\n <Translate>\n <Localizer\n id=\"smarthr-ui/AppHeader/Launcher/emptyText\"\n defaultText=\"該当するアプリが見つかりませんでした。\"\n />\n </Translate>\n </Text>\n </div>\n))\n\nconst FeatureList: FC<Props> = ({ features, page }) => {\n const isFavorite = page === 'favorite'\n\n return (\n <ul className={CLASS_NAMES.list}>\n {features.map((feature) => (\n <FeatureListItem\n key={feature.id}\n href={feature.url}\n isFavorite={isFavorite}\n className={CLASS_NAMES.listItem}\n >\n {feature.name}\n </FeatureListItem>\n ))}\n </ul>\n )\n}\n\nconst FeatureListItem = memo<{\n href: Props['features'][number]['url']\n children: Props['features'][number]['name']\n className: string\n isFavorite: boolean\n}>(({ href, children, isFavorite, className }) => (\n <li>\n <AnchorButton\n href={href}\n target=\"_blank\"\n prefix={isFavorite && <FaStarIcon />}\n suffix={<FaArrowRightIcon />}\n variant=\"text\"\n wide\n data-favorite={isFavorite}\n className={className}\n >\n <FeatureName>{children}</FeatureName>\n </AnchorButton>\n </li>\n))\n\nconst FeatureName: FC<PropsWithChildren> = ({ children }) => {\n const isDesktop = useMediaQuery(mediaQuery.desktop)\n\n return isDesktop ? <LineClamp maxLines={2}>{children}</LineClamp> : children\n}\n"],"names":["tv","_jsx","memo","Text","Translate","Localizer","AnchorButton","FaStarIcon","FaArrowRightIcon","useMediaQuery","mediaQuery","LineClamp"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,yBAAyB,CAAC;AAClC,QAAA,IAAI,EAAE,CAAC,eAAe,EAAE,sCAAsC,CAAC;AAC/D,QAAA,QAAQ,EAAE;YACR,iCAAiC;YACjC,gJAAgJ;YAChJ,kDAAkD;AACnD,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAK;IACxB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE;IAEtD,OAAO;QACL,KAAK,EAAE,KAAK,EAAE;QACd,IAAI,EAAE,IAAI,EAAE;QACZ,QAAQ,EAAE,QAAQ,EAAE;KACrB;AACH,CAAC,GAAG;AAOG,MAAM,mBAAmB,GAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAC/D,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAGC,eAAC,SAAS,EAAA,EAAA,CAAG,GAAGA,cAAA,CAAC,WAAW,EAAA,EAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI;AAErF,MAAM,SAAS,GAAGC,UAAI,CAAC,OACrBD,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,WAAW,CAAC,KAAK,YAC/BA,cAAA,CAACE,yBAAI,IAAC,IAAI,EAAC,GAAG,EAAA,QAAA,EACZF,eAACG,0DAAS,EAAA,EAAA,QAAA,EACRH,eAACI,wBAAS,EAAA,EACR,EAAE,EAAC,yCAAyC,EAC5C,WAAW,EAAC,oHAAqB,EAAA,CACjC,EAAA,CACQ,GACP,EAAA,CACH,CACP,CAAC;AAEF,MAAM,WAAW,GAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAI;AACpD,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU;IAEtC,QACEJ,uBAAI,SAAS,EAAE,WAAW,CAAC,IAAI,EAAA,QAAA,EAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,MACpBA,cAAA,CAAC,eAAe,EAAA,EAEd,IAAI,EAAE,OAAO,CAAC,GAAG,EACjB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAA,QAAA,EAE9B,OAAO,CAAC,IAAI,EAAA,EALR,OAAO,CAAC,EAAE,CAMC,CACnB,CAAC,EAAA,CACC;AAET,CAAC;AAED,MAAM,eAAe,GAAGC,UAAI,CAKzB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAC3CD,cAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EACEA,cAAA,CAACK,2CAAY,EAAA,EACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,QAAQ,EACf,MAAM,EAAE,UAAU,IAAIL,cAAA,CAACM,iCAAU,EAAA,EAAA,CAAG,EACpC,MAAM,EAAEN,cAAA,CAACO,uCAAgB,EAAA,EAAA,CAAG,EAC5B,OAAO,EAAC,MAAM,EACd,IAAI,EAAA,IAAA,EAAA,eAAA,EACW,UAAU,EACzB,SAAS,EAAE,SAAS,YAEpBP,cAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EAAE,QAAQ,EAAA,CAAe,EAAA,CACxB,EAAA,CACZ,CACN,CAAC;AAEF,MAAM,WAAW,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;IAC1D,MAAM,SAAS,GAAGQ,sDAAa,CAACC,mDAAU,CAAC,OAAO,CAAC;AAEnD,IAAA,OAAO,SAAS,GAAGT,cAAA,CAACU,wCAAS,EAAA,EAAC,QAAQ,EAAE,CAAC,YAAG,QAAQ,EAAA,CAAa,GAAG,QAAQ;AAC9E,CAAC;;;;"}