@alneas/appkit-react 0.1.0 → 0.2.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 (659) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +85 -15
  3. package/consumer-ai/SKILL.md +12 -0
  4. package/consumer-ai/api-index.json +103754 -0
  5. package/consumer-ai/package-context.json +409 -0
  6. package/dist/ai/action/ExecutionHistory.cjs.map +1 -1
  7. package/dist/ai/action/ExecutionHistory.d.cts +32 -2
  8. package/dist/ai/action/ExecutionHistory.d.ts +32 -2
  9. package/dist/ai/action/ExecutionHistory.js.map +1 -1
  10. package/dist/ai/action/ScreenActionContext.cjs.map +1 -1
  11. package/dist/ai/action/ScreenActionContext.d.cts +15 -2
  12. package/dist/ai/action/ScreenActionContext.d.ts +15 -2
  13. package/dist/ai/action/ScreenActionContext.js.map +1 -1
  14. package/dist/ai/action/context.cjs.map +1 -1
  15. package/dist/ai/action/context.d.cts +19 -3
  16. package/dist/ai/action/context.d.ts +19 -3
  17. package/dist/ai/action/context.js.map +1 -1
  18. package/dist/ai/action/types.d.cts +35 -3
  19. package/dist/ai/action/types.d.ts +35 -3
  20. package/dist/ai/action/use-execution-session.cjs.map +1 -1
  21. package/dist/ai/action/use-execution-session.d.cts +17 -1
  22. package/dist/ai/action/use-execution-session.d.ts +17 -1
  23. package/dist/ai/action/use-execution-session.js.map +1 -1
  24. package/dist/ai/action/use-screen-action-registry.cjs.map +1 -1
  25. package/dist/ai/action/use-screen-action-registry.d.cts +77 -8
  26. package/dist/ai/action/use-screen-action-registry.d.ts +77 -8
  27. package/dist/ai/action/use-screen-action-registry.js.map +1 -1
  28. package/dist/ai/action/use-screen-action.cjs.map +1 -1
  29. package/dist/ai/action/use-screen-action.d.cts +23 -6
  30. package/dist/ai/action/use-screen-action.d.ts +23 -6
  31. package/dist/ai/action/use-screen-action.js.map +1 -1
  32. package/dist/ai/action/use-screen-context.cjs.map +1 -1
  33. package/dist/ai/action/use-screen-context.d.cts +42 -5
  34. package/dist/ai/action/use-screen-context.d.ts +42 -5
  35. package/dist/ai/action/use-screen-context.js.map +1 -1
  36. package/dist/ai/ai-chat/transport.cjs.map +1 -1
  37. package/dist/ai/ai-chat/transport.d.cts +35 -8
  38. package/dist/ai/ai-chat/transport.d.ts +35 -8
  39. package/dist/ai/ai-chat/transport.js.map +1 -1
  40. package/dist/ai/generative-ui/GenerativeUIRenderer.cjs.map +1 -1
  41. package/dist/ai/generative-ui/GenerativeUIRenderer.d.cts +21 -3
  42. package/dist/ai/generative-ui/GenerativeUIRenderer.d.ts +21 -3
  43. package/dist/ai/generative-ui/GenerativeUIRenderer.js.map +1 -1
  44. package/dist/ai/generative-ui/error-boundary.cjs.map +1 -1
  45. package/dist/ai/generative-ui/error-boundary.d.cts +98 -2
  46. package/dist/ai/generative-ui/error-boundary.d.ts +98 -2
  47. package/dist/ai/generative-ui/error-boundary.js.map +1 -1
  48. package/dist/ai/generative-ui/registry.cjs.map +1 -1
  49. package/dist/ai/generative-ui/registry.d.cts +96 -7
  50. package/dist/ai/generative-ui/registry.d.ts +96 -7
  51. package/dist/ai/generative-ui/registry.js.map +1 -1
  52. package/dist/ai/proposal/ProposalFieldReview.cjs.map +1 -1
  53. package/dist/ai/proposal/ProposalFieldReview.d.cts +170 -8
  54. package/dist/ai/proposal/ProposalFieldReview.d.ts +170 -8
  55. package/dist/ai/proposal/ProposalFieldReview.js.map +1 -1
  56. package/dist/ai/proposal/types.d.cts +97 -26
  57. package/dist/ai/proposal/types.d.ts +97 -26
  58. package/dist/ai/proposal/use-proposal-batch-review.cjs.map +1 -1
  59. package/dist/ai/proposal/use-proposal-batch-review.d.cts +133 -7
  60. package/dist/ai/proposal/use-proposal-batch-review.d.ts +133 -7
  61. package/dist/ai/proposal/use-proposal-batch-review.js.map +1 -1
  62. package/dist/ai/proposal/use-proposal-review.cjs.map +1 -1
  63. package/dist/ai/proposal/use-proposal-review.d.cts +47 -5
  64. package/dist/ai/proposal/use-proposal-review.d.ts +47 -5
  65. package/dist/ai/proposal/use-proposal-review.js.map +1 -1
  66. package/dist/avatar.svg +1 -0
  67. package/dist/consumer-ai/SKILL.md +6 -0
  68. package/dist/consumer-ai/api-index.json +103754 -0
  69. package/dist/consumer-ai/package-context.json +5 -3
  70. package/dist/mockServiceWorker.js +361 -0
  71. package/dist/styles.css +1 -1
  72. package/dist/tools/components/auth/AuthForms.cjs.map +1 -1
  73. package/dist/tools/components/auth/AuthForms.d.cts +131 -81
  74. package/dist/tools/components/auth/AuthForms.d.ts +131 -81
  75. package/dist/tools/components/auth/AuthForms.js.map +1 -1
  76. package/dist/tools/components/auth/AuthGuard.cjs.map +1 -1
  77. package/dist/tools/components/auth/AuthGuard.d.cts +31 -4
  78. package/dist/tools/components/auth/AuthGuard.d.ts +31 -4
  79. package/dist/tools/components/auth/AuthGuard.js.map +1 -1
  80. package/dist/tools/components/auth/AuthProvider.cjs.map +1 -1
  81. package/dist/tools/components/auth/AuthProvider.d.cts +39 -42
  82. package/dist/tools/components/auth/AuthProvider.d.ts +39 -42
  83. package/dist/tools/components/auth/AuthProvider.js.map +1 -1
  84. package/dist/tools/components/auth/ProtectedRoute.cjs.map +1 -1
  85. package/dist/tools/components/auth/ProtectedRoute.d.cts +75 -60
  86. package/dist/tools/components/auth/ProtectedRoute.d.ts +75 -60
  87. package/dist/tools/components/auth/ProtectedRoute.js.map +1 -1
  88. package/dist/tools/components/auth/SignInButton.cjs.map +1 -1
  89. package/dist/tools/components/auth/SignInButton.d.cts +26 -18
  90. package/dist/tools/components/auth/SignInButton.d.ts +26 -18
  91. package/dist/tools/components/auth/SignInButton.js.map +1 -1
  92. package/dist/tools/components/auth/UserProfileProvider.cjs.map +1 -1
  93. package/dist/tools/components/auth/UserProfileProvider.d.cts +48 -20
  94. package/dist/tools/components/auth/UserProfileProvider.d.ts +48 -20
  95. package/dist/tools/components/auth/UserProfileProvider.js.map +1 -1
  96. package/dist/tools/components/auth/adapters/better-auth-adapter.cjs.map +1 -1
  97. package/dist/tools/components/auth/adapters/better-auth-adapter.d.cts +371 -51
  98. package/dist/tools/components/auth/adapters/better-auth-adapter.d.ts +371 -51
  99. package/dist/tools/components/auth/adapters/better-auth-adapter.js.map +1 -1
  100. package/dist/tools/components/auth/adapters/mock-adapter.cjs.map +1 -1
  101. package/dist/tools/components/auth/adapters/mock-adapter.d.cts +149 -28
  102. package/dist/tools/components/auth/adapters/mock-adapter.d.ts +149 -28
  103. package/dist/tools/components/auth/adapters/mock-adapter.js.map +1 -1
  104. package/dist/tools/components/auth/auth-session.cjs.map +1 -1
  105. package/dist/tools/components/auth/auth-session.d.cts +147 -1
  106. package/dist/tools/components/auth/auth-session.d.ts +147 -1
  107. package/dist/tools/components/auth/auth-session.js.map +1 -1
  108. package/dist/tools/components/auth/session-cache.cjs.map +1 -1
  109. package/dist/tools/components/auth/session-cache.d.cts +88 -24
  110. package/dist/tools/components/auth/session-cache.d.ts +88 -24
  111. package/dist/tools/components/auth/session-cache.js.map +1 -1
  112. package/dist/tools/components/auth/types.cjs.map +1 -1
  113. package/dist/tools/components/auth/types.d.cts +329 -106
  114. package/dist/tools/components/auth/types.d.ts +329 -106
  115. package/dist/tools/components/auth/types.js.map +1 -1
  116. package/dist/tools/components/auth/useAuth.cjs.map +1 -1
  117. package/dist/tools/components/auth/useAuth.d.cts +110 -17
  118. package/dist/tools/components/auth/useAuth.d.ts +110 -17
  119. package/dist/tools/components/auth/useAuth.js.map +1 -1
  120. package/dist/tools/components/auth/useAuthGuard.cjs.map +1 -1
  121. package/dist/tools/components/auth/useAuthGuard.d.cts +49 -38
  122. package/dist/tools/components/auth/useAuthGuard.d.ts +49 -38
  123. package/dist/tools/components/auth/useAuthGuard.js.map +1 -1
  124. package/dist/tools/components/auth/useRoleCheck.cjs.map +1 -1
  125. package/dist/tools/components/auth/useRoleCheck.d.cts +48 -1
  126. package/dist/tools/components/auth/useRoleCheck.d.ts +48 -1
  127. package/dist/tools/components/auth/useRoleCheck.js.map +1 -1
  128. package/dist/tools/components/auth/useUserProfile.cjs.map +1 -1
  129. package/dist/tools/components/auth/useUserProfile.d.cts +66 -1
  130. package/dist/tools/components/auth/useUserProfile.d.ts +66 -1
  131. package/dist/tools/components/auth/useUserProfile.js.map +1 -1
  132. package/dist/tools/components/barcode/BarcodeGenerator.cjs.map +1 -1
  133. package/dist/tools/components/barcode/BarcodeGenerator.d.cts +32 -18
  134. package/dist/tools/components/barcode/BarcodeGenerator.d.ts +32 -18
  135. package/dist/tools/components/barcode/BarcodeGenerator.js.map +1 -1
  136. package/dist/tools/components/barcode/QRCodeGenerator.cjs +1 -1
  137. package/dist/tools/components/barcode/QRCodeGenerator.cjs.map +1 -1
  138. package/dist/tools/components/barcode/QRCodeGenerator.d.cts +20 -13
  139. package/dist/tools/components/barcode/QRCodeGenerator.d.ts +20 -13
  140. package/dist/tools/components/barcode/QRCodeGenerator.js +1 -1
  141. package/dist/tools/components/barcode/QRCodeGenerator.js.map +1 -1
  142. package/dist/tools/components/barcode/QRCodeScanner.cjs.map +1 -1
  143. package/dist/tools/components/barcode/QRCodeScanner.d.cts +32 -1
  144. package/dist/tools/components/barcode/QRCodeScanner.d.ts +32 -1
  145. package/dist/tools/components/barcode/QRCodeScanner.js.map +1 -1
  146. package/dist/tools/components/calendar/ResourceCalendar.cjs.map +1 -1
  147. package/dist/tools/components/calendar/ResourceCalendar.d.cts +17 -42
  148. package/dist/tools/components/calendar/ResourceCalendar.d.ts +17 -42
  149. package/dist/tools/components/calendar/ResourceCalendar.js.map +1 -1
  150. package/dist/tools/components/calendar/views/ResourceView.cjs +1 -1
  151. package/dist/tools/components/calendar/views/ResourceView.cjs.map +1 -1
  152. package/dist/tools/components/calendar/views/ResourceView.js +2 -2
  153. package/dist/tools/components/calendar/views/ResourceView.js.map +1 -1
  154. package/dist/tools/components/chart/ComposedChart.cjs.map +1 -1
  155. package/dist/tools/components/chart/ComposedChart.d.cts +54 -1
  156. package/dist/tools/components/chart/ComposedChart.d.ts +54 -1
  157. package/dist/tools/components/chart/ComposedChart.js.map +1 -1
  158. package/dist/tools/components/chart/SimpleAreaChart.cjs.map +1 -1
  159. package/dist/tools/components/chart/SimpleAreaChart.d.cts +41 -1
  160. package/dist/tools/components/chart/SimpleAreaChart.d.ts +41 -1
  161. package/dist/tools/components/chart/SimpleAreaChart.js.map +1 -1
  162. package/dist/tools/components/chart/SimpleBarChart.cjs.map +1 -1
  163. package/dist/tools/components/chart/SimpleBarChart.d.cts +34 -24
  164. package/dist/tools/components/chart/SimpleBarChart.d.ts +34 -24
  165. package/dist/tools/components/chart/SimpleBarChart.js.map +1 -1
  166. package/dist/tools/components/chart/SimpleLineChart.cjs.map +1 -1
  167. package/dist/tools/components/chart/SimpleLineChart.d.cts +31 -28
  168. package/dist/tools/components/chart/SimpleLineChart.d.ts +31 -28
  169. package/dist/tools/components/chart/SimpleLineChart.js.map +1 -1
  170. package/dist/tools/components/chart/SimplePieChart.cjs.map +1 -1
  171. package/dist/tools/components/chart/SimplePieChart.d.cts +28 -22
  172. package/dist/tools/components/chart/SimplePieChart.d.ts +28 -22
  173. package/dist/tools/components/chart/SimplePieChart.js.map +1 -1
  174. package/dist/tools/components/chart/SimpleRadarChart.cjs.map +1 -1
  175. package/dist/tools/components/chart/SimpleRadarChart.d.cts +38 -1
  176. package/dist/tools/components/chart/SimpleRadarChart.d.ts +38 -1
  177. package/dist/tools/components/chart/SimpleRadarChart.js.map +1 -1
  178. package/dist/tools/components/chart/SimpleScatterChart.cjs.map +1 -1
  179. package/dist/tools/components/chart/SimpleScatterChart.d.cts +44 -1
  180. package/dist/tools/components/chart/SimpleScatterChart.d.ts +44 -1
  181. package/dist/tools/components/chart/SimpleScatterChart.js.map +1 -1
  182. package/dist/tools/components/chart/StackedBarChart.cjs.map +1 -1
  183. package/dist/tools/components/chart/StackedBarChart.d.cts +38 -1
  184. package/dist/tools/components/chart/StackedBarChart.d.ts +38 -1
  185. package/dist/tools/components/chart/StackedBarChart.js.map +1 -1
  186. package/dist/tools/components/data-table/data-table.cjs +1 -1
  187. package/dist/tools/components/data-table/data-table.cjs.map +1 -1
  188. package/dist/tools/components/data-table/data-table.js +286 -263
  189. package/dist/tools/components/data-table/data-table.js.map +1 -1
  190. package/dist/tools/components/data-table/table-utils.cjs.map +1 -1
  191. package/dist/tools/components/data-table/table-utils.d.cts +45 -35
  192. package/dist/tools/components/data-table/table-utils.d.ts +45 -35
  193. package/dist/tools/components/data-table/table-utils.js.map +1 -1
  194. package/dist/tools/components/editable-table/editable-table.cjs +1 -1
  195. package/dist/tools/components/editable-table/editable-table.cjs.map +1 -1
  196. package/dist/tools/components/editable-table/editable-table.js +15 -2
  197. package/dist/tools/components/editable-table/editable-table.js.map +1 -1
  198. package/dist/tools/components/error/ErrorDialog.cjs +1 -1
  199. package/dist/tools/components/error/ErrorDialog.cjs.map +1 -1
  200. package/dist/tools/components/error/ErrorDialog.js +1 -1
  201. package/dist/tools/components/error/ErrorDialog.js.map +1 -1
  202. package/dist/tools/components/error/ErrorInline.cjs +1 -1
  203. package/dist/tools/components/error/ErrorInline.cjs.map +1 -1
  204. package/dist/tools/components/error/ErrorInline.js +1 -1
  205. package/dist/tools/components/error/ErrorInline.js.map +1 -1
  206. package/dist/tools/components/error/ErrorNotification.cjs +1 -1
  207. package/dist/tools/components/error/ErrorNotification.cjs.map +1 -1
  208. package/dist/tools/components/error/ErrorNotification.js +10 -10
  209. package/dist/tools/components/error/ErrorNotification.js.map +1 -1
  210. package/dist/tools/components/file-browser/FilePreview.cjs +1 -1
  211. package/dist/tools/components/file-browser/FilePreview.cjs.map +1 -1
  212. package/dist/tools/components/file-browser/FilePreview.js +28 -26
  213. package/dist/tools/components/file-browser/FilePreview.js.map +1 -1
  214. package/dist/tools/components/filter/filter.cjs.map +1 -1
  215. package/dist/tools/components/filter/filter.d.cts +23 -34
  216. package/dist/tools/components/filter/filter.d.ts +23 -34
  217. package/dist/tools/components/filter/filter.js.map +1 -1
  218. package/dist/tools/components/form/EnhancedDetailPage.cjs.map +1 -1
  219. package/dist/tools/components/form/EnhancedDetailPage.d.cts +47 -42
  220. package/dist/tools/components/form/EnhancedDetailPage.d.ts +47 -42
  221. package/dist/tools/components/form/EnhancedDetailPage.js.map +1 -1
  222. package/dist/tools/components/form/form-grid.cjs.map +1 -1
  223. package/dist/tools/components/form/form-grid.d.cts +44 -22
  224. package/dist/tools/components/form/form-grid.d.ts +44 -22
  225. package/dist/tools/components/form/form-grid.js.map +1 -1
  226. package/dist/tools/components/gantt/GanttChart.cjs +1 -1
  227. package/dist/tools/components/gantt/GanttChart.cjs.map +1 -1
  228. package/dist/tools/components/gantt/GanttChart.d.cts +20 -1
  229. package/dist/tools/components/gantt/GanttChart.d.ts +20 -1
  230. package/dist/tools/components/gantt/GanttChart.js +3 -0
  231. package/dist/tools/components/gantt/GanttChart.js.map +1 -1
  232. package/dist/tools/components/gantt/components/GanttTaskBar.cjs +1 -1
  233. package/dist/tools/components/gantt/components/GanttTaskBar.cjs.map +1 -1
  234. package/dist/tools/components/gantt/components/GanttTaskBar.js +2 -1
  235. package/dist/tools/components/gantt/components/GanttTaskBar.js.map +1 -1
  236. package/dist/tools/components/header/header.cjs +1 -1
  237. package/dist/tools/components/header/header.cjs.map +1 -1
  238. package/dist/tools/components/header/header.d.cts +103 -40
  239. package/dist/tools/components/header/header.d.ts +103 -40
  240. package/dist/tools/components/header/header.js +1 -1
  241. package/dist/tools/components/header/header.js.map +1 -1
  242. package/dist/tools/components/i18n/LanguageSwitcher.cjs.map +1 -1
  243. package/dist/tools/components/i18n/LanguageSwitcher.d.cts +18 -14
  244. package/dist/tools/components/i18n/LanguageSwitcher.d.ts +18 -14
  245. package/dist/tools/components/i18n/LanguageSwitcher.js.map +1 -1
  246. package/dist/tools/components/kanban/KanbanBoard.cjs +1 -1
  247. package/dist/tools/components/kanban/KanbanBoard.cjs.map +1 -1
  248. package/dist/tools/components/kanban/KanbanBoard.d.cts +16 -34
  249. package/dist/tools/components/kanban/KanbanBoard.d.ts +16 -34
  250. package/dist/tools/components/kanban/KanbanBoard.js +3 -0
  251. package/dist/tools/components/kanban/KanbanBoard.js.map +1 -1
  252. package/dist/tools/components/kanban/KanbanColumn.cjs +1 -1
  253. package/dist/tools/components/kanban/KanbanColumn.cjs.map +1 -1
  254. package/dist/tools/components/kanban/KanbanColumn.js +1 -1
  255. package/dist/tools/components/kanban/KanbanColumn.js.map +1 -1
  256. package/dist/tools/components/kanban/kanban-compound.cjs +1 -1
  257. package/dist/tools/components/kanban/kanban-compound.cjs.map +1 -1
  258. package/dist/tools/components/kanban/kanban-compound.js +4 -1
  259. package/dist/tools/components/kanban/kanban-compound.js.map +1 -1
  260. package/dist/tools/components/kanban/kanban-primitives.cjs +1 -1
  261. package/dist/tools/components/kanban/kanban-primitives.cjs.map +1 -1
  262. package/dist/tools/components/kanban/kanban-primitives.js +0 -1
  263. package/dist/tools/components/kanban/kanban-primitives.js.map +1 -1
  264. package/dist/tools/components/priority-queue/PriorityCard.cjs +1 -1
  265. package/dist/tools/components/priority-queue/PriorityCard.cjs.map +1 -1
  266. package/dist/tools/components/priority-queue/PriorityCard.js +3 -1
  267. package/dist/tools/components/priority-queue/PriorityCard.js.map +1 -1
  268. package/dist/tools/components/sidebar/SmartSidebar.cjs.map +1 -1
  269. package/dist/tools/components/sidebar/SmartSidebar.d.cts +41 -43
  270. package/dist/tools/components/sidebar/SmartSidebar.d.ts +41 -43
  271. package/dist/tools/components/sidebar/SmartSidebar.js.map +1 -1
  272. package/dist/tools/components/splash/SplashScreen.cjs.map +1 -1
  273. package/dist/tools/components/splash/SplashScreen.d.cts +43 -68
  274. package/dist/tools/components/splash/SplashScreen.d.ts +43 -68
  275. package/dist/tools/components/splash/SplashScreen.js.map +1 -1
  276. package/dist/tools/components/workflow/WorkflowStatusPanel.cjs +1 -1
  277. package/dist/tools/components/workflow/WorkflowStatusPanel.cjs.map +1 -1
  278. package/dist/tools/components/workflow/WorkflowStatusPanel.js +2 -2
  279. package/dist/tools/components/workflow/WorkflowStatusPanel.js.map +1 -1
  280. package/dist/tools/lib/data-access/data-access-context.cjs.map +1 -1
  281. package/dist/tools/lib/data-access/data-access-context.d.cts +15 -6
  282. package/dist/tools/lib/data-access/data-access-context.d.ts +15 -6
  283. package/dist/tools/lib/data-access/data-access-context.js.map +1 -1
  284. package/dist/tools/lib/data-access/react-query-provider.cjs.map +1 -1
  285. package/dist/tools/lib/data-access/react-query-provider.d.cts +19 -2
  286. package/dist/tools/lib/data-access/react-query-provider.d.ts +19 -2
  287. package/dist/tools/lib/data-access/react-query-provider.js.map +1 -1
  288. package/dist/tools/lib/data-access/react-query.cjs.map +1 -1
  289. package/dist/tools/lib/data-access/react-query.d.cts +365 -90
  290. package/dist/tools/lib/data-access/react-query.d.ts +365 -90
  291. package/dist/tools/lib/data-access/react-query.js.map +1 -1
  292. package/dist/tools/lib/error/AppError.cjs.map +1 -1
  293. package/dist/tools/lib/error/AppError.d.cts +157 -63
  294. package/dist/tools/lib/error/AppError.d.ts +157 -63
  295. package/dist/tools/lib/error/AppError.js.map +1 -1
  296. package/dist/tools/lib/hooks/useAsyncWithTimeout.cjs.map +1 -1
  297. package/dist/tools/lib/hooks/useAsyncWithTimeout.d.cts +79 -26
  298. package/dist/tools/lib/hooks/useAsyncWithTimeout.d.ts +79 -26
  299. package/dist/tools/lib/hooks/useAsyncWithTimeout.js.map +1 -1
  300. package/dist/tools/lib/hooks/useError.cjs.map +1 -1
  301. package/dist/tools/lib/hooks/useError.d.cts +51 -16
  302. package/dist/tools/lib/hooks/useError.d.ts +51 -16
  303. package/dist/tools/lib/hooks/useError.js.map +1 -1
  304. package/dist/tools/lib/schema/ajv.cjs +1 -1
  305. package/dist/tools/lib/schema/ajv.cjs.map +1 -1
  306. package/dist/tools/lib/schema/ajv.d.cts +19 -8
  307. package/dist/tools/lib/schema/ajv.d.ts +19 -8
  308. package/dist/tools/lib/schema/ajv.js +2 -1
  309. package/dist/tools/lib/schema/ajv.js.map +1 -1
  310. package/dist/tools/lib/state/error-store.cjs.map +1 -1
  311. package/dist/tools/lib/state/error-store.d.cts +61 -10
  312. package/dist/tools/lib/state/error-store.d.ts +61 -10
  313. package/dist/tools/lib/state/error-store.js.map +1 -1
  314. package/dist/tools/lib/state/store-factory.cjs.map +1 -1
  315. package/dist/tools/lib/state/store-factory.d.cts +25 -4
  316. package/dist/tools/lib/state/store-factory.d.ts +25 -4
  317. package/dist/tools/lib/state/store-factory.js.map +1 -1
  318. package/dist/tools/lib/state/ui-store.cjs.map +1 -1
  319. package/dist/tools/lib/state/ui-store.d.cts +39 -0
  320. package/dist/tools/lib/state/ui-store.d.ts +39 -0
  321. package/dist/tools/lib/state/ui-store.js.map +1 -1
  322. package/dist/ui/components/theme/theme-context.cjs.map +1 -1
  323. package/dist/ui/components/theme/theme-context.d.cts +171 -1
  324. package/dist/ui/components/theme/theme-context.d.ts +171 -1
  325. package/dist/ui/components/theme/theme-context.js.map +1 -1
  326. package/dist/ui/components/theme/theme-provider.cjs.map +1 -1
  327. package/dist/ui/components/theme/theme-provider.d.cts +31 -19
  328. package/dist/ui/components/theme/theme-provider.d.ts +31 -19
  329. package/dist/ui/components/theme/theme-provider.js.map +1 -1
  330. package/dist/ui/components/theme/theme-script.cjs.map +1 -1
  331. package/dist/ui/components/theme/theme-script.d.cts +16 -1
  332. package/dist/ui/components/theme/theme-script.d.ts +16 -1
  333. package/dist/ui/components/theme/theme-script.js.map +1 -1
  334. package/dist/ui/components/theme/theme-switcher.cjs +1 -1
  335. package/dist/ui/components/theme/theme-switcher.cjs.map +1 -1
  336. package/dist/ui/components/theme/theme-switcher.d.cts +82 -13
  337. package/dist/ui/components/theme/theme-switcher.d.ts +82 -13
  338. package/dist/ui/components/theme/theme-switcher.js +8 -0
  339. package/dist/ui/components/theme/theme-switcher.js.map +1 -1
  340. package/dist/ui/components/ui/accordion.cjs.map +1 -1
  341. package/dist/ui/components/ui/accordion.d.cts +60 -0
  342. package/dist/ui/components/ui/accordion.d.ts +60 -0
  343. package/dist/ui/components/ui/accordion.js.map +1 -1
  344. package/dist/ui/components/ui/adjustable-pane.cjs.map +1 -1
  345. package/dist/ui/components/ui/adjustable-pane.d.cts +44 -26
  346. package/dist/ui/components/ui/adjustable-pane.d.ts +44 -26
  347. package/dist/ui/components/ui/adjustable-pane.js.map +1 -1
  348. package/dist/ui/components/ui/alert-dialog.cjs.map +1 -1
  349. package/dist/ui/components/ui/alert-dialog.d.cts +179 -2
  350. package/dist/ui/components/ui/alert-dialog.d.ts +179 -2
  351. package/dist/ui/components/ui/alert-dialog.js.map +1 -1
  352. package/dist/ui/components/ui/alert.cjs.map +1 -1
  353. package/dist/ui/components/ui/alert.d.cts +52 -4
  354. package/dist/ui/components/ui/alert.d.ts +52 -4
  355. package/dist/ui/components/ui/alert.js.map +1 -1
  356. package/dist/ui/components/ui/aspect-ratio.cjs.map +1 -1
  357. package/dist/ui/components/ui/aspect-ratio.d.cts +16 -1
  358. package/dist/ui/components/ui/aspect-ratio.d.ts +16 -1
  359. package/dist/ui/components/ui/aspect-ratio.js.map +1 -1
  360. package/dist/ui/components/ui/avatar.cjs.map +1 -1
  361. package/dist/ui/components/ui/avatar.d.cts +87 -3
  362. package/dist/ui/components/ui/avatar.d.ts +87 -3
  363. package/dist/ui/components/ui/avatar.js.map +1 -1
  364. package/dist/ui/components/ui/badge-components.cjs.map +1 -1
  365. package/dist/ui/components/ui/badge-components.d.cts +13 -1
  366. package/dist/ui/components/ui/badge-components.d.ts +13 -1
  367. package/dist/ui/components/ui/badge-components.js.map +1 -1
  368. package/dist/ui/components/ui/badge-variants.cjs.map +1 -1
  369. package/dist/ui/components/ui/badge-variants.d.cts +15 -0
  370. package/dist/ui/components/ui/badge-variants.d.ts +15 -0
  371. package/dist/ui/components/ui/badge-variants.js.map +1 -1
  372. package/dist/ui/components/ui/breadcrumb.cjs.map +1 -1
  373. package/dist/ui/components/ui/breadcrumb.d.cts +91 -7
  374. package/dist/ui/components/ui/breadcrumb.d.ts +91 -7
  375. package/dist/ui/components/ui/breadcrumb.js.map +1 -1
  376. package/dist/ui/components/ui/button-components.cjs.map +1 -1
  377. package/dist/ui/components/ui/button-components.d.cts +18 -6
  378. package/dist/ui/components/ui/button-components.d.ts +18 -6
  379. package/dist/ui/components/ui/button-components.js.map +1 -1
  380. package/dist/ui/components/ui/button-group-components.cjs.map +1 -1
  381. package/dist/ui/components/ui/button-group-components.d.cts +39 -3
  382. package/dist/ui/components/ui/button-group-components.d.ts +39 -3
  383. package/dist/ui/components/ui/button-group-components.js.map +1 -1
  384. package/dist/ui/components/ui/button-group-variants.cjs.map +1 -1
  385. package/dist/ui/components/ui/button-group-variants.d.cts +15 -0
  386. package/dist/ui/components/ui/button-group-variants.d.ts +15 -0
  387. package/dist/ui/components/ui/button-group-variants.js.map +1 -1
  388. package/dist/ui/components/ui/button-variants.cjs.map +1 -1
  389. package/dist/ui/components/ui/button-variants.d.cts +13 -2
  390. package/dist/ui/components/ui/button-variants.d.ts +13 -2
  391. package/dist/ui/components/ui/button-variants.js.map +1 -1
  392. package/dist/ui/components/ui/card.cjs.map +1 -1
  393. package/dist/ui/components/ui/card.d.cts +106 -2
  394. package/dist/ui/components/ui/card.d.ts +106 -2
  395. package/dist/ui/components/ui/card.js.map +1 -1
  396. package/dist/ui/components/ui/checkbox-group.cjs.map +1 -1
  397. package/dist/ui/components/ui/checkbox-group.d.cts +13 -1
  398. package/dist/ui/components/ui/checkbox-group.d.ts +13 -1
  399. package/dist/ui/components/ui/checkbox-group.js.map +1 -1
  400. package/dist/ui/components/ui/checkbox.cjs.map +1 -1
  401. package/dist/ui/components/ui/checkbox.d.cts +17 -6
  402. package/dist/ui/components/ui/checkbox.d.ts +17 -6
  403. package/dist/ui/components/ui/checkbox.js.map +1 -1
  404. package/dist/ui/components/ui/collapsible.cjs.map +1 -1
  405. package/dist/ui/components/ui/collapsible.d.cts +39 -3
  406. package/dist/ui/components/ui/collapsible.d.ts +39 -3
  407. package/dist/ui/components/ui/collapsible.js.map +1 -1
  408. package/dist/ui/components/ui/combobox-components.cjs.map +1 -1
  409. package/dist/ui/components/ui/combobox-components.d.cts +209 -14
  410. package/dist/ui/components/ui/combobox-components.d.ts +209 -14
  411. package/dist/ui/components/ui/combobox-components.js.map +1 -1
  412. package/dist/ui/components/ui/combobox-hooks.cjs.map +1 -1
  413. package/dist/ui/components/ui/combobox-hooks.d.cts +13 -1
  414. package/dist/ui/components/ui/combobox-hooks.d.ts +13 -1
  415. package/dist/ui/components/ui/combobox-hooks.js.map +1 -1
  416. package/dist/ui/components/ui/command.cjs.map +1 -1
  417. package/dist/ui/components/ui/command.d.cts +132 -9
  418. package/dist/ui/components/ui/command.d.ts +132 -9
  419. package/dist/ui/components/ui/command.js.map +1 -1
  420. package/dist/ui/components/ui/context-menu.cjs.map +1 -1
  421. package/dist/ui/components/ui/context-menu.d.cts +233 -2
  422. package/dist/ui/components/ui/context-menu.d.ts +233 -2
  423. package/dist/ui/components/ui/context-menu.js.map +1 -1
  424. package/dist/ui/components/ui/dialog.cjs.map +1 -1
  425. package/dist/ui/components/ui/dialog.d.cts +157 -5
  426. package/dist/ui/components/ui/dialog.d.ts +157 -5
  427. package/dist/ui/components/ui/dialog.js.map +1 -1
  428. package/dist/ui/components/ui/drawer.cjs.map +1 -1
  429. package/dist/ui/components/ui/drawer.d.cts +130 -10
  430. package/dist/ui/components/ui/drawer.d.ts +130 -10
  431. package/dist/ui/components/ui/drawer.js.map +1 -1
  432. package/dist/ui/components/ui/dropdown-menu.cjs.map +1 -1
  433. package/dist/ui/components/ui/dropdown-menu.d.cts +225 -6
  434. package/dist/ui/components/ui/dropdown-menu.d.ts +225 -6
  435. package/dist/ui/components/ui/dropdown-menu.js.map +1 -1
  436. package/dist/ui/components/ui/empty.cjs.map +1 -1
  437. package/dist/ui/components/ui/empty.d.cts +78 -6
  438. package/dist/ui/components/ui/empty.d.ts +78 -6
  439. package/dist/ui/components/ui/empty.js.map +1 -1
  440. package/dist/ui/components/ui/field.cjs.map +1 -1
  441. package/dist/ui/components/ui/field.d.cts +180 -6
  442. package/dist/ui/components/ui/field.d.ts +180 -6
  443. package/dist/ui/components/ui/field.js.map +1 -1
  444. package/dist/ui/components/ui/file-icon.cjs.map +1 -1
  445. package/dist/ui/components/ui/file-icon.d.cts +32 -4
  446. package/dist/ui/components/ui/file-icon.d.ts +32 -4
  447. package/dist/ui/components/ui/file-icon.js.map +1 -1
  448. package/dist/ui/components/ui/hover-card.cjs.map +1 -1
  449. package/dist/ui/components/ui/hover-card.d.cts +39 -3
  450. package/dist/ui/components/ui/hover-card.d.ts +39 -3
  451. package/dist/ui/components/ui/hover-card.js.map +1 -1
  452. package/dist/ui/components/ui/input-group.cjs.map +1 -1
  453. package/dist/ui/components/ui/input-group.d.cts +84 -6
  454. package/dist/ui/components/ui/input-group.d.ts +84 -6
  455. package/dist/ui/components/ui/input-group.js.map +1 -1
  456. package/dist/ui/components/ui/input-otp.cjs.map +1 -1
  457. package/dist/ui/components/ui/input-otp.d.cts +58 -4
  458. package/dist/ui/components/ui/input-otp.d.ts +58 -4
  459. package/dist/ui/components/ui/input-otp.js.map +1 -1
  460. package/dist/ui/components/ui/input.cjs.map +1 -1
  461. package/dist/ui/components/ui/input.d.cts +18 -10
  462. package/dist/ui/components/ui/input.d.ts +18 -10
  463. package/dist/ui/components/ui/input.js.map +1 -1
  464. package/dist/ui/components/ui/item.cjs.map +1 -1
  465. package/dist/ui/components/ui/item.d.cts +130 -10
  466. package/dist/ui/components/ui/item.d.ts +130 -10
  467. package/dist/ui/components/ui/item.js.map +1 -1
  468. package/dist/ui/components/ui/kbd.cjs.map +1 -1
  469. package/dist/ui/components/ui/kbd.d.cts +26 -2
  470. package/dist/ui/components/ui/kbd.d.ts +26 -2
  471. package/dist/ui/components/ui/kbd.js.map +1 -1
  472. package/dist/ui/components/ui/label.cjs.map +1 -1
  473. package/dist/ui/components/ui/label.d.cts +15 -0
  474. package/dist/ui/components/ui/label.d.ts +15 -0
  475. package/dist/ui/components/ui/label.js.map +1 -1
  476. package/dist/ui/components/ui/layout.cjs +1 -1
  477. package/dist/ui/components/ui/layout.cjs.map +1 -1
  478. package/dist/ui/components/ui/layout.d.cts +45 -11
  479. package/dist/ui/components/ui/layout.d.ts +45 -11
  480. package/dist/ui/components/ui/layout.js +22 -20
  481. package/dist/ui/components/ui/layout.js.map +1 -1
  482. package/dist/ui/components/ui/menubar.cjs.map +1 -1
  483. package/dist/ui/components/ui/menubar.d.cts +220 -16
  484. package/dist/ui/components/ui/menubar.d.ts +220 -16
  485. package/dist/ui/components/ui/menubar.js.map +1 -1
  486. package/dist/ui/components/ui/meter.cjs.map +1 -1
  487. package/dist/ui/components/ui/meter.d.cts +52 -4
  488. package/dist/ui/components/ui/meter.d.ts +52 -4
  489. package/dist/ui/components/ui/meter.js.map +1 -1
  490. package/dist/ui/components/ui/mobile-form-variants.cjs.map +1 -1
  491. package/dist/ui/components/ui/mobile-form-variants.d.cts +30 -0
  492. package/dist/ui/components/ui/mobile-form-variants.d.ts +30 -0
  493. package/dist/ui/components/ui/mobile-form-variants.js.map +1 -1
  494. package/dist/ui/components/ui/mobile-form.cjs.map +1 -1
  495. package/dist/ui/components/ui/mobile-form.d.cts +186 -9
  496. package/dist/ui/components/ui/mobile-form.d.ts +186 -9
  497. package/dist/ui/components/ui/mobile-form.js.map +1 -1
  498. package/dist/ui/components/ui/navigation-menu-components.cjs.map +1 -1
  499. package/dist/ui/components/ui/navigation-menu-components.d.cts +104 -8
  500. package/dist/ui/components/ui/navigation-menu-components.d.ts +104 -8
  501. package/dist/ui/components/ui/navigation-menu-components.js.map +1 -1
  502. package/dist/ui/components/ui/navigation-menu-variants.cjs.map +1 -1
  503. package/dist/ui/components/ui/navigation-menu-variants.d.cts +15 -0
  504. package/dist/ui/components/ui/navigation-menu-variants.d.ts +15 -0
  505. package/dist/ui/components/ui/navigation-menu-variants.js.map +1 -1
  506. package/dist/ui/components/ui/number-field.cjs.map +1 -1
  507. package/dist/ui/components/ui/number-field.d.cts +78 -6
  508. package/dist/ui/components/ui/number-field.d.ts +78 -6
  509. package/dist/ui/components/ui/number-field.js.map +1 -1
  510. package/dist/ui/components/ui/pagination.cjs.map +1 -1
  511. package/dist/ui/components/ui/pagination.d.cts +99 -7
  512. package/dist/ui/components/ui/pagination.d.ts +99 -7
  513. package/dist/ui/components/ui/pagination.js.map +1 -1
  514. package/dist/ui/components/ui/password-input.cjs.map +1 -1
  515. package/dist/ui/components/ui/password-input.d.cts +10 -7
  516. package/dist/ui/components/ui/password-input.d.ts +10 -7
  517. package/dist/ui/components/ui/password-input.js.map +1 -1
  518. package/dist/ui/components/ui/popover.cjs.map +1 -1
  519. package/dist/ui/components/ui/popover.d.cts +86 -2
  520. package/dist/ui/components/ui/popover.d.ts +86 -2
  521. package/dist/ui/components/ui/popover.js.map +1 -1
  522. package/dist/ui/components/ui/progress.cjs.map +1 -1
  523. package/dist/ui/components/ui/progress.d.cts +72 -2
  524. package/dist/ui/components/ui/progress.d.ts +72 -2
  525. package/dist/ui/components/ui/progress.js.map +1 -1
  526. package/dist/ui/components/ui/radio-card.cjs.map +1 -1
  527. package/dist/ui/components/ui/radio-card.d.cts +32 -4
  528. package/dist/ui/components/ui/radio-card.d.ts +32 -4
  529. package/dist/ui/components/ui/radio-card.js.map +1 -1
  530. package/dist/ui/components/ui/radio-group.cjs.map +1 -1
  531. package/dist/ui/components/ui/radio-group.d.cts +28 -2
  532. package/dist/ui/components/ui/radio-group.d.ts +28 -2
  533. package/dist/ui/components/ui/radio-group.js.map +1 -1
  534. package/dist/ui/components/ui/resizable.cjs.map +1 -1
  535. package/dist/ui/components/ui/resizable.d.cts +42 -3
  536. package/dist/ui/components/ui/resizable.d.ts +42 -3
  537. package/dist/ui/components/ui/resizable.js.map +1 -1
  538. package/dist/ui/components/ui/responsive-list.cjs.map +1 -1
  539. package/dist/ui/components/ui/responsive-list.d.cts +176 -13
  540. package/dist/ui/components/ui/responsive-list.d.ts +176 -13
  541. package/dist/ui/components/ui/responsive-list.js.map +1 -1
  542. package/dist/ui/components/ui/scroll-area.cjs.map +1 -1
  543. package/dist/ui/components/ui/scroll-area.d.cts +28 -1
  544. package/dist/ui/components/ui/scroll-area.d.ts +28 -1
  545. package/dist/ui/components/ui/scroll-area.js.map +1 -1
  546. package/dist/ui/components/ui/searchable-select-input.cjs.map +1 -1
  547. package/dist/ui/components/ui/searchable-select-input.d.cts +199 -49
  548. package/dist/ui/components/ui/searchable-select-input.d.ts +199 -49
  549. package/dist/ui/components/ui/searchable-select-input.js.map +1 -1
  550. package/dist/ui/components/ui/select.cjs.map +1 -1
  551. package/dist/ui/components/ui/select.d.cts +205 -40
  552. package/dist/ui/components/ui/select.d.ts +205 -40
  553. package/dist/ui/components/ui/select.js.map +1 -1
  554. package/dist/ui/components/ui/separator.cjs.map +1 -1
  555. package/dist/ui/components/ui/separator.d.cts +13 -2
  556. package/dist/ui/components/ui/separator.d.ts +13 -2
  557. package/dist/ui/components/ui/separator.js.map +1 -1
  558. package/dist/ui/components/ui/sheet.cjs.map +1 -1
  559. package/dist/ui/components/ui/sheet.d.cts +128 -3
  560. package/dist/ui/components/ui/sheet.d.ts +128 -3
  561. package/dist/ui/components/ui/sheet.js.map +1 -1
  562. package/dist/ui/components/ui/skeleton.cjs.map +1 -1
  563. package/dist/ui/components/ui/skeleton.d.cts +13 -1
  564. package/dist/ui/components/ui/skeleton.d.ts +13 -1
  565. package/dist/ui/components/ui/skeleton.js.map +1 -1
  566. package/dist/ui/components/ui/slider.cjs.map +1 -1
  567. package/dist/ui/components/ui/slider.d.cts +13 -7
  568. package/dist/ui/components/ui/slider.d.ts +13 -7
  569. package/dist/ui/components/ui/slider.js.map +1 -1
  570. package/dist/ui/components/ui/spinner.cjs.map +1 -1
  571. package/dist/ui/components/ui/spinner.d.cts +13 -1
  572. package/dist/ui/components/ui/spinner.d.ts +13 -1
  573. package/dist/ui/components/ui/spinner.js.map +1 -1
  574. package/dist/ui/components/ui/switch.cjs.map +1 -1
  575. package/dist/ui/components/ui/switch.d.cts +26 -0
  576. package/dist/ui/components/ui/switch.d.ts +26 -0
  577. package/dist/ui/components/ui/switch.js.map +1 -1
  578. package/dist/ui/components/ui/table.cjs.map +1 -1
  579. package/dist/ui/components/ui/table.d.cts +118 -2
  580. package/dist/ui/components/ui/table.d.ts +118 -2
  581. package/dist/ui/components/ui/table.js.map +1 -1
  582. package/dist/ui/components/ui/tabs-components.cjs.map +1 -1
  583. package/dist/ui/components/ui/tabs-components.d.cts +52 -5
  584. package/dist/ui/components/ui/tabs-components.d.ts +52 -5
  585. package/dist/ui/components/ui/tabs-components.js.map +1 -1
  586. package/dist/ui/components/ui/tabs-variants.cjs.map +1 -1
  587. package/dist/ui/components/ui/tabs-variants.d.cts +15 -0
  588. package/dist/ui/components/ui/tabs-variants.d.ts +15 -0
  589. package/dist/ui/components/ui/tabs-variants.js.map +1 -1
  590. package/dist/ui/components/ui/textarea.cjs.map +1 -1
  591. package/dist/ui/components/ui/textarea.d.cts +23 -0
  592. package/dist/ui/components/ui/textarea.d.ts +23 -0
  593. package/dist/ui/components/ui/textarea.js.map +1 -1
  594. package/dist/ui/components/ui/toast.cjs.map +1 -1
  595. package/dist/ui/components/ui/toast.d.cts +136 -0
  596. package/dist/ui/components/ui/toast.d.ts +136 -0
  597. package/dist/ui/components/ui/toast.js.map +1 -1
  598. package/dist/ui/components/ui/toaster.cjs.map +1 -1
  599. package/dist/ui/components/ui/toaster.d.cts +12 -3
  600. package/dist/ui/components/ui/toaster.d.ts +12 -3
  601. package/dist/ui/components/ui/toaster.js.map +1 -1
  602. package/dist/ui/components/ui/toggle-components.cjs.map +1 -1
  603. package/dist/ui/components/ui/toggle-components.d.cts +15 -0
  604. package/dist/ui/components/ui/toggle-components.d.ts +15 -0
  605. package/dist/ui/components/ui/toggle-components.js.map +1 -1
  606. package/dist/ui/components/ui/toggle-group.cjs.map +1 -1
  607. package/dist/ui/components/ui/toggle-group.d.cts +33 -0
  608. package/dist/ui/components/ui/toggle-group.d.ts +33 -0
  609. package/dist/ui/components/ui/toggle-group.js.map +1 -1
  610. package/dist/ui/components/ui/toggle-variants.cjs.map +1 -1
  611. package/dist/ui/components/ui/toggle-variants.d.cts +15 -0
  612. package/dist/ui/components/ui/toggle-variants.d.ts +15 -0
  613. package/dist/ui/components/ui/toggle-variants.js.map +1 -1
  614. package/dist/ui/components/ui/toolbar.cjs.map +1 -1
  615. package/dist/ui/components/ui/toolbar.d.cts +94 -7
  616. package/dist/ui/components/ui/toolbar.d.ts +94 -7
  617. package/dist/ui/components/ui/toolbar.js.map +1 -1
  618. package/dist/ui/components/ui/tooltip.cjs.map +1 -1
  619. package/dist/ui/components/ui/tooltip.d.cts +54 -3
  620. package/dist/ui/components/ui/tooltip.d.ts +54 -3
  621. package/dist/ui/components/ui/tooltip.js.map +1 -1
  622. package/dist/ui/lib/hooks/use-gps.cjs.map +1 -1
  623. package/dist/ui/lib/hooks/use-gps.d.cts +29 -4
  624. package/dist/ui/lib/hooks/use-gps.d.ts +29 -4
  625. package/dist/ui/lib/hooks/use-gps.js.map +1 -1
  626. package/dist/ui/lib/hooks/use-is-client.cjs.map +1 -1
  627. package/dist/ui/lib/hooks/use-is-client.d.cts +11 -2
  628. package/dist/ui/lib/hooks/use-is-client.d.ts +11 -2
  629. package/dist/ui/lib/hooks/use-is-client.js.map +1 -1
  630. package/dist/ui/lib/hooks/use-keyboard-shortcut.cjs.map +1 -1
  631. package/dist/ui/lib/hooks/use-keyboard-shortcut.d.cts +48 -18
  632. package/dist/ui/lib/hooks/use-keyboard-shortcut.d.ts +48 -18
  633. package/dist/ui/lib/hooks/use-keyboard-shortcut.js.map +1 -1
  634. package/dist/ui/lib/hooks/use-mobile.cjs.map +1 -1
  635. package/dist/ui/lib/hooks/use-mobile.d.cts +11 -3
  636. package/dist/ui/lib/hooks/use-mobile.d.ts +11 -3
  637. package/dist/ui/lib/hooks/use-mobile.js.map +1 -1
  638. package/dist/ui/lib/hooks/use-toast.cjs.map +1 -1
  639. package/dist/ui/lib/hooks/use-toast.d.cts +184 -15
  640. package/dist/ui/lib/hooks/use-toast.d.ts +184 -15
  641. package/dist/ui/lib/hooks/use-toast.js.map +1 -1
  642. package/dist/ui/lib/ime-utils.cjs.map +1 -1
  643. package/dist/ui/lib/ime-utils.d.cts +40 -13
  644. package/dist/ui/lib/ime-utils.d.ts +40 -13
  645. package/dist/ui/lib/ime-utils.js.map +1 -1
  646. package/dist/ui/lib/utils.cjs.map +1 -1
  647. package/dist/ui/lib/utils.d.cts +9 -6
  648. package/dist/ui/lib/utils.d.ts +9 -6
  649. package/dist/ui/lib/utils.js.map +1 -1
  650. package/docs/ai.md +34 -1
  651. package/docs/exports.md +5 -1
  652. package/docs/index.md +89 -16
  653. package/docs/migration.md +268 -0
  654. package/docs/request-form.md +4 -1
  655. package/docs/tools.md +4 -1
  656. package/docs/ui.md +4 -1
  657. package/llms-full.txt +499 -36
  658. package/llms.txt +4 -0
  659. package/package.json +35 -5
@@ -1,51 +1,26 @@
1
1
  import { ResourceCalendarProps } from './types.js';
2
2
  import * as React from 'react';
3
3
  /**
4
- * リソースカレンダーコンポーネント
5
- *
6
- * 月・週・日・タイムライン・リソース表示に対応した多機能カレンダー。
7
- *
8
- * ## Features
9
- * - 6つのビューモード(month, week, day, timeline, resource, agenda)
10
- * - リソース別イベント表示
11
- * - 日付・時間枠の選択(クリック/キーボード)
12
- * - イベントクリック時の詳細表示
13
- * - 日本語/英語ローカライズ
14
- * - カスタムヘッダー/背景色
15
- *
16
- * ## AI/Automation Attributes
17
- * - `data-testid`: Container element
18
- * - `data-view`: Current view mode
19
- * - `data-event-count`: Number of events
20
- *
4
+ * Renders resource events in month, week, day, timeline, resource or agenda views.
5
+ * @param props - Event/resource arrays, view settings and interaction callbacks; see {@link ResourceCalendarProps}.
6
+ * @returns The calendar, navigation controls and optional selected-event dialog.
7
+ * @remarks Import Appkit CSS. Event data is supplied by the host; callbacks do not persist changes.
8
+ * resources defaults to an empty array, defaultDate to the mount-time current date and defaultView
9
+ * to week. view controls the displayed mode when supplied; date navigation remains local state.
10
+ * onRangeChange reports the visible date range after rendering. Locale comes from Appkit's
11
+ * Paraglide runtime (Japanese or English); Date values use the runtime's date/time conventions.
12
+ * The root does not expose data-testid, data-view or data-event-count and does not spread arbitrary attributes.
21
13
  * @example
22
14
  * ```tsx
23
15
  * import { ResourceCalendar } from '@alneas/appkit-react/tools/calendar';
24
- *
25
- * const events = [
26
- * {
27
- * id: '1',
28
- * title: '会議',
29
- * start: new Date('2024-01-15 10:00'),
30
- * end: new Date('2024-01-15 11:00'),
31
- * resourceId: 'room-a',
32
- * },
33
- * ];
34
- *
35
- * const resources = [
36
- * { id: 'room-a', title: '会議室A' },
37
- * { id: 'room-b', title: '会議室B' },
38
- * ];
39
- *
40
- * <ResourceCalendar
41
- * events={events}
42
- * resources={resources}
43
- * defaultView="week"
44
- * onEventClick={(event) => console.log(event)}
45
- * />
16
+ * import '@alneas/appkit-react/styles';
17
+ *
18
+ * export function RoomCalendar() {
19
+ * return <ResourceCalendar defaultDate={new Date(2026, 0, 15)} defaultView="week"
20
+ * resources={[{ id: 'room-a', title: 'Room A' }]}
21
+ * events={[{ id: 'meeting', title: 'Planning', resourceId: 'room-a',
22
+ * start: new Date(2026, 0, 15, 10), end: new Date(2026, 0, 15, 11) }]} />;
23
+ * }
46
24
  * ```
47
- *
48
- * @param props - {@link ResourceCalendarProps}
49
- * @returns リソースカレンダーコンポーネント
50
25
  */
51
26
  export declare function ResourceCalendar({ events, resources, defaultDate, defaultView, view: controlledView, className, onEventClick, onDateSelect, onViewChange, onRangeChange, components, businessHours, enabledViews, showDoubleArrows, headerBgColor, headingBgColor, defaultBgColor, }: ResourceCalendarProps): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceCalendar.js","names":["React","m.calendar_today","m.calendar_view_grid","_Fragment","m.calendar_view_timeline","m.calendar_view_resource","m.calendar_view_day","m.calendar_view_week","m.calendar_view_month","m.calendar_view_agenda","React$1","ResourceCalendar","controlledView","currentDate","setCurrentDate","defaultDate","internalView","setView","defaultView","view","lastGridView","setLastGridView","timelineDuration","setTimelineDuration","selectedResourceId","setSelectedResourceId","selectedEvent","setSelectedEvent","language","getLocale","range","calendarRange","rangeStart","rangeEnd","lastNotifiedRange","key","onRangeChange","options","components","businessHours","locale","enUS","ja","filteredResources","resources","r","filteredEvents","events","handlePrevious","newDate","subMonths","subWeeks","subDays","handleNext","addMonths","addWeeks","addDays","handlePreviousLarge","handleNextLarge","handleViewChange","v","newView","onViewChange","toggleViewMode","next","mode","headerTitle","format","start","startOfWeek","end","CalendarOptionsContext","cn","className","defaultBgColor","headerBgColor","showDoubleArrows","Button","ChevronsLeft","ChevronLeft","calendar_today","ChevronRight","ChevronsRight","Select","SelectTrigger","SelectContent","SelectItem","res","enabledViews","calendar_view_grid","LayoutGrid","Fragment","calendar_view_timeline","StretchHorizontal","calendar_view_resource","Users","calendar_view_day","calendar_view_week","calendar_view_month","calendar_view_agenda","MonthView","onEventClick","TimeGridView","TimelineView","AgendaView","ResourceGridView","onDateSelect","resourceId","Dialog","open","DialogContent","DialogHeader","DialogTitle","DialogDescription"],"sources":["../../../../src/tools/components/calendar/ResourceCalendar.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as m from '../../paraglide/messages.js';\nimport { getLocale } from '../../paraglide/runtime.js';\nimport {\n format,\n addMonths,\n addWeeks,\n addDays,\n subMonths,\n subWeeks,\n subDays,\n startOfWeek,\n} from 'date-fns';\nimport { ja, enUS } from 'date-fns/locale';\nimport { ResourceCalendarProps, CalendarViewMode, CalendarEvent } from './types';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n LayoutGrid,\n StretchHorizontal,\n Users,\n} from 'lucide-react';\nimport { Select, SelectContent, SelectItem, SelectTrigger } from '../ui/select';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '../ui/dialog';\n\nimport { MonthView } from './views/MonthView';\nimport { TimeGridView } from './views/TimeGridView';\nimport { TimelineView } from './views/TimelineView';\nimport { AgendaView } from './views/AgendaView';\nimport { ResourceGridView } from './views/ResourceView';\nimport { CalendarOptionsContext } from './calendar-context';\nimport { calendarRange } from './calendar-layout';\n\n/**\n * リソースカレンダーコンポーネント\n *\n * 月・週・日・タイムライン・リソース表示に対応した多機能カレンダー。\n *\n * ## Features\n * - 6つのビューモード(month, week, day, timeline, resource, agenda)\n * - リソース別イベント表示\n * - 日付・時間枠の選択(クリック/キーボード)\n * - イベントクリック時の詳細表示\n * - 日本語/英語ローカライズ\n * - カスタムヘッダー/背景色\n *\n * ## AI/Automation Attributes\n * - `data-testid`: Container element\n * - `data-view`: Current view mode\n * - `data-event-count`: Number of events\n *\n * @example\n * ```tsx\n * import { ResourceCalendar } from '@alneas/appkit-react/tools/calendar';\n *\n * const events = [\n * {\n * id: '1',\n * title: '会議',\n * start: new Date('2024-01-15 10:00'),\n * end: new Date('2024-01-15 11:00'),\n * resourceId: 'room-a',\n * },\n * ];\n *\n * const resources = [\n * { id: 'room-a', title: '会議室A' },\n * { id: 'room-b', title: '会議室B' },\n * ];\n *\n * <ResourceCalendar\n * events={events}\n * resources={resources}\n * defaultView=\"week\"\n * onEventClick={(event) => console.log(event)}\n * />\n * ```\n *\n * @param props - {@link ResourceCalendarProps}\n * @returns リソースカレンダーコンポーネント\n */\nexport function ResourceCalendar({\n events,\n resources = [],\n defaultDate = new Date(),\n defaultView = 'week',\n view: controlledView,\n className,\n onEventClick,\n onDateSelect,\n onViewChange,\n onRangeChange,\n components,\n businessHours,\n enabledViews,\n showDoubleArrows,\n headerBgColor = 'color-mix(in srgb, hsl(var(--muted)) 50%, hsl(var(--background)))',\n headingBgColor = 'color-mix(in srgb, hsl(var(--muted)) 30%, hsl(var(--background)))',\n defaultBgColor = 'hsl(var(--background))',\n}: ResourceCalendarProps) {\n const [currentDate, setCurrentDate] = React.useState(defaultDate);\n const [internalView, setView] = React.useState<CalendarViewMode>(defaultView);\n const view = controlledView ?? internalView;\n\n const [lastGridView, setLastGridView] = React.useState<CalendarViewMode>('week');\n const [timelineDuration, setTimelineDuration] = React.useState<'day' | 'week' | 'month'>('week');\n const [selectedResourceId, setSelectedResourceId] = React.useState<string>('all');\n const [selectedEvent, setSelectedEvent] = React.useState<CalendarEvent | null>(null);\n const language = getLocale();\n const range = calendarRange(currentDate, view, timelineDuration);\n const rangeStart = +range.start;\n const rangeEnd = +range.end;\n const lastNotifiedRange = React.useRef('');\n React.useEffect(() => {\n const key = `${rangeStart}:${rangeEnd}`;\n if (onRangeChange && lastNotifiedRange.current !== key) {\n lastNotifiedRange.current = key;\n onRangeChange({ start: new Date(rangeStart), end: new Date(rangeEnd) });\n }\n }, [rangeStart, rangeEnd, onRangeChange]);\n const options = React.useMemo(() => ({ components, businessHours }), [components, businessHours]);\n\n const locale = React.useMemo(() => {\n return language === 'en' ? enUS : ja;\n }, [language]);\n\n const filteredResources = React.useMemo(() => {\n if (selectedResourceId === 'all') return resources;\n return resources.filter((r) => r.id === selectedResourceId);\n }, [resources, selectedResourceId]);\n\n const filteredEvents = React.useMemo(() => {\n if (selectedResourceId === 'all') return events;\n return events.filter((e) => e.resourceId === selectedResourceId);\n }, [events, selectedResourceId]);\n\n const handlePrevious = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = subMonths(currentDate, 1);\n break;\n case 'week':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'day':\n newDate = subDays(currentDate, 1);\n break;\n case 'resource':\n newDate = subDays(currentDate, 1);\n break;\n case 'timeline':\n newDate =\n timelineDuration === 'day'\n ? subDays(currentDate, 1)\n : timelineDuration === 'month'\n ? subMonths(currentDate, 1)\n : subWeeks(currentDate, 1);\n break;\n default:\n newDate = subMonths(currentDate, 1);\n }\n setCurrentDate(newDate);\n };\n\n const handleNext = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = addMonths(currentDate, 1);\n break;\n case 'week':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'day':\n newDate = addDays(currentDate, 1);\n break;\n case 'resource':\n newDate = addDays(currentDate, 1);\n break;\n case 'timeline':\n newDate =\n timelineDuration === 'day'\n ? addDays(currentDate, 1)\n : timelineDuration === 'month'\n ? addMonths(currentDate, 1)\n : addWeeks(currentDate, 1);\n break;\n default:\n newDate = addMonths(currentDate, 1);\n }\n setCurrentDate(newDate);\n };\n\n const handlePreviousLarge = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = subMonths(currentDate, 12);\n break;\n case 'week':\n newDate = subMonths(currentDate, 1);\n break;\n case 'day':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'resource':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'timeline':\n newDate = subMonths(currentDate, 1);\n break;\n default:\n newDate = subMonths(currentDate, 12);\n }\n setCurrentDate(newDate);\n };\n\n const handleNextLarge = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = addMonths(currentDate, 12);\n break;\n case 'week':\n newDate = addMonths(currentDate, 1);\n break;\n case 'day':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'resource':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'timeline':\n newDate = addMonths(currentDate, 1);\n break;\n default:\n newDate = addMonths(currentDate, 12);\n }\n setCurrentDate(newDate);\n };\n\n const handleViewChange = (v: string) => {\n if (view === 'timeline') {\n if (v === 'day' || v === 'week' || v === 'month') {\n setTimelineDuration(v as 'day' | 'week' | 'month');\n return;\n }\n }\n\n const newView = v as CalendarViewMode;\n setView(newView);\n onViewChange?.(newView);\n\n if (newView !== 'timeline' && newView !== 'agenda' && newView !== 'resource') {\n setLastGridView(newView);\n }\n };\n\n const toggleViewMode = (mode: 'grid' | 'timeline' | 'resource') => {\n const next = mode === 'grid' ? lastGridView : mode;\n setView(next);\n onViewChange?.(next);\n };\n\n const headerTitle = React.useMemo(() => {\n if (\n view === 'day' ||\n view === 'resource' ||\n (view === 'timeline' && timelineDuration === 'day')\n ) {\n return format(currentDate, language === 'en' ? 'MMMM d, yyyy' : 'yyyy年 M月 d日', { locale });\n }\n if (view === 'week' || (view === 'timeline' && timelineDuration === 'week')) {\n const start = startOfWeek(currentDate, { weekStartsOn: 0 }); // Assuming Sunday start\n // To match \"21日-27日\" style roughly\n // If same month: 10月 21日 - 27日\n // If different month: 9月 28日 - 10月 4日\n const end = addDays(start, 6);\n\n if (language === 'ja') {\n if (start.getMonth() === end.getMonth()) {\n return `${format(start, 'yyyy年 M月d日', { locale })} - ${format(end, 'd日', { locale })}`;\n }\n return `${format(start, 'yyyy年 M月d日', { locale })} - ${format(end, 'M月d日', { locale })}`;\n } else {\n if (start.getMonth() === end.getMonth()) {\n return `${format(start, 'MMM d')} - ${format(end, 'd, yyyy')}`;\n }\n return `${format(start, 'MMM d')} - ${format(end, 'MMM d, yyyy')}`;\n }\n }\n return format(currentDate, language === 'en' ? 'MMMM yyyy' : 'yyyy年 MMMM', { locale });\n }, [currentDate, locale, language, view, timelineDuration]);\n\n return (\n <CalendarOptionsContext.Provider value={options}>\n <div\n className={cn(\n 'flex flex-col h-full border overflow-hidden [border-radius:var(--radius-lg)]',\n className,\n )}\n style={{ backgroundColor: defaultBgColor }}\n >\n {/* Toolbar */}\n {components?.toolbar ? (\n components.toolbar({\n date: currentDate,\n view,\n title: headerTitle,\n range,\n timelineDuration,\n onPrevious: handlePrevious,\n onNext: handleNext,\n onToday: () => setCurrentDate(new Date()),\n onViewChange: handleViewChange,\n })\n ) : (\n <div\n className='flex items-center justify-between border-b px-4 py-2 overflow-x-auto min-h-[52px]'\n style={{ backgroundColor: headerBgColor }}\n >\n <div className='flex items-center gap-2 flex-none'>\n {showDoubleArrows && (\n <Button\n variant='outline'\n size='icon'\n onClick={handlePreviousLarge}\n aria-label={language === 'ja' ? '大きく前へ' : 'Previous large interval'}\n className='h-8 w-8'\n >\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n )}\n <Button\n variant='outline'\n size='icon'\n onClick={handlePrevious}\n aria-label={language === 'ja' ? '前の期間' : 'Previous interval'}\n className='h-8 w-8'\n >\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <Button variant='outline' size='sm' onClick={() => setCurrentDate(new Date())}>\n {m.calendar_today()}\n </Button>\n <Button\n variant='outline'\n size='icon'\n onClick={handleNext}\n aria-label={language === 'ja' ? '次の期間' : 'Next interval'}\n className='h-8 w-8'\n >\n <ChevronRight className='h-4 w-4' />\n </Button>\n {showDoubleArrows && (\n <Button\n variant='outline'\n size='icon'\n onClick={handleNextLarge}\n aria-label={language === 'ja' ? '大きく次へ' : 'Next large interval'}\n className='h-8 w-8'\n >\n <ChevronsRight className='h-4 w-4' />\n </Button>\n )}\n <span className='ml-2 text-lg font-semibold whitespace-nowrap'>{headerTitle}</span>\n </div>\n\n <div className='flex items-center gap-2 flex-none ml-4'>\n {resources.length > 0 && (\n <Select\n value={selectedResourceId}\n onValueChange={(v) => v && setSelectedResourceId(v)}\n >\n <SelectTrigger aria-label={language === 'ja' ? 'リソース' : 'Resource'} className='bg-background w-[200px] h-9'>\n <span>\n {selectedResourceId === 'all'\n ? language === 'ja'\n ? 'すべてのリソース'\n : 'All Resources'\n : resources.find((r) => r.id === selectedResourceId)?.title ||\n selectedResourceId}\n </span>\n </SelectTrigger>\n <SelectContent className='bg-popover'>\n <SelectItem value='all'>\n {language === 'ja' ? 'すべてのリソース' : 'All Resources'}\n </SelectItem>\n {resources.map((res) => (\n <SelectItem key={res.id} value={res.id}>\n {res.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n\n {/* View Type Switcher (Icon Group) */}\n <div className='flex items-center border overflow-hidden bg-background rounded-md flex-none'>\n {(!enabledViews ||\n enabledViews.includes('week') ||\n enabledViews.includes('day') ||\n enabledViews.includes('month')) && (\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('grid')}\n className={cn(\n 'rounded-none h-9 w-9',\n view !== 'timeline' &&\n view !== 'resource' &&\n 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_grid({ defaultValue: 'Grid' })}\n >\n <LayoutGrid className='h-4 w-4' />\n </Button>\n )}\n {(!enabledViews || enabledViews.includes('timeline')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('timeline')}\n className={cn(\n 'rounded-none h-9 w-9',\n view === 'timeline' && 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_timeline({ defaultValue: 'Timeline' })}\n >\n <StretchHorizontal className='h-4 w-4' />\n </Button>\n </>\n )}\n {(!enabledViews || enabledViews.includes('resource')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('resource')}\n className={cn(\n 'rounded-none h-9 w-9',\n view === 'resource' && 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_resource({ defaultValue: 'Resource' })}\n >\n <Users className='h-4 w-4' />\n </Button>\n </>\n )}\n </div>\n\n {/* Time Scope Switcher (Text Group) */}\n {view !== 'resource' && (\n <div className='flex items-center border overflow-hidden bg-background rounded-md flex-none'>\n {(!enabledViews || enabledViews.includes('day')) && (\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('day')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'day' || (view === 'timeline' && timelineDuration === 'day')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_day()}\n </Button>\n )}\n {(!enabledViews || enabledViews.includes('week')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('week')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'week' ||\n (view === 'timeline' && timelineDuration === 'week')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_week()}\n </Button>\n </>\n )}\n {(!enabledViews || enabledViews.includes('month')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('month')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'month' ||\n (view === 'timeline' && timelineDuration === 'month')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_month()}\n </Button>\n </>\n )}\n {view !== 'timeline' && (!enabledViews || enabledViews.includes('agenda')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('agenda')}\n className={cn(\n 'rounded-none px-3 h-9',\n view === 'agenda' && 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_agenda({ defaultValue: 'List' })}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n {/* View Content */}\n <div className='flex-1 overflow-hidden relative min-h-0'>\n {view === 'month' && (\n <MonthView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n onDateSelect={onDateSelect}\n locale={locale}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {(view === 'week' || view === 'day') && (\n <TimeGridView\n view={view}\n currentDate={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n onDateSelect={onDateSelect}\n locale={locale}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'timeline' && (\n <TimelineView\n currentDate={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n locale={locale}\n duration={timelineDuration}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'agenda' && (\n <AgendaView\n currentDate={currentDate}\n events={filteredEvents}\n locale={locale}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'resource' && (\n <ResourceGridView\n date={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n onEmptySlotClick={\n onDateSelect\n ? (resourceId, start) =>\n onDateSelect(start, new Date(+start + 30 * 60_000), resourceId)\n : undefined\n }\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n />\n )}\n </div>\n\n {/* Event Detail Dialog */}\n <Dialog open={!!selectedEvent} onOpenChange={(open) => !open && setSelectedEvent(null)}>\n <DialogContent className='bg-popover'>\n <DialogHeader>\n <DialogTitle className='text-xl font-bold'>{selectedEvent?.title}</DialogTitle>\n <DialogDescription className='text-sm text-muted-foreground'>\n {selectedEvent &&\n format(new Date(selectedEvent.start), 'yyyy/MM/dd HH:mm', { locale })}\n {' - '}\n {selectedEvent && format(new Date(selectedEvent.end), 'HH:mm', { locale })}\n </DialogDescription>\n </DialogHeader>\n {selectedEvent?.description && (\n <div className='py-4 text-sm whitespace-pre-wrap text-foreground'>\n {selectedEvent.description as string}\n </div>\n )}\n {selectedEvent?.resourceId && (\n <div className='mt-2 text-xs font-semibold text-muted-foreground uppercase border-t pt-2'>\n Resource: {resources.find((r) => r.id === selectedEvent.resourceId)?.title}\n </div>\n )}\n </DialogContent>\n </Dialog>\n </div>\n </CalendarOptionsContext.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceCalendar.js","names":["React","m.calendar_today","m.calendar_view_grid","_Fragment","m.calendar_view_timeline","m.calendar_view_resource","m.calendar_view_day","m.calendar_view_week","m.calendar_view_month","m.calendar_view_agenda","React$1","ResourceCalendar","controlledView","currentDate","setCurrentDate","defaultDate","internalView","setView","defaultView","view","lastGridView","setLastGridView","timelineDuration","setTimelineDuration","selectedResourceId","setSelectedResourceId","selectedEvent","setSelectedEvent","language","getLocale","range","calendarRange","rangeStart","rangeEnd","lastNotifiedRange","key","onRangeChange","options","components","businessHours","locale","enUS","ja","filteredResources","resources","r","filteredEvents","events","handlePrevious","newDate","subMonths","subWeeks","subDays","handleNext","addMonths","addWeeks","addDays","handlePreviousLarge","handleNextLarge","handleViewChange","v","newView","onViewChange","toggleViewMode","next","mode","headerTitle","format","start","startOfWeek","end","CalendarOptionsContext","cn","className","defaultBgColor","headerBgColor","showDoubleArrows","Button","ChevronsLeft","ChevronLeft","calendar_today","ChevronRight","ChevronsRight","Select","SelectTrigger","SelectContent","SelectItem","res","enabledViews","calendar_view_grid","LayoutGrid","Fragment","calendar_view_timeline","StretchHorizontal","calendar_view_resource","Users","calendar_view_day","calendar_view_week","calendar_view_month","calendar_view_agenda","MonthView","onEventClick","TimeGridView","TimelineView","AgendaView","ResourceGridView","onDateSelect","resourceId","Dialog","open","DialogContent","DialogHeader","DialogTitle","DialogDescription"],"sources":["../../../../src/tools/components/calendar/ResourceCalendar.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as m from '../../paraglide/messages.js';\nimport { getLocale } from '../../paraglide/runtime.js';\nimport {\n format,\n addMonths,\n addWeeks,\n addDays,\n subMonths,\n subWeeks,\n subDays,\n startOfWeek,\n} from 'date-fns';\nimport { ja, enUS } from 'date-fns/locale';\nimport { ResourceCalendarProps, CalendarViewMode, CalendarEvent } from './types';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n LayoutGrid,\n StretchHorizontal,\n Users,\n} from 'lucide-react';\nimport { Select, SelectContent, SelectItem, SelectTrigger } from '../ui/select';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '../ui/dialog';\n\nimport { MonthView } from './views/MonthView';\nimport { TimeGridView } from './views/TimeGridView';\nimport { TimelineView } from './views/TimelineView';\nimport { AgendaView } from './views/AgendaView';\nimport { ResourceGridView } from './views/ResourceView';\nimport { CalendarOptionsContext } from './calendar-context';\nimport { calendarRange } from './calendar-layout';\n\n/**\n * Renders resource events in month, week, day, timeline, resource or agenda views.\n * @param props - Event/resource arrays, view settings and interaction callbacks; see {@link ResourceCalendarProps}.\n * @returns The calendar, navigation controls and optional selected-event dialog.\n * @remarks Import Appkit CSS. Event data is supplied by the host; callbacks do not persist changes.\n * resources defaults to an empty array, defaultDate to the mount-time current date and defaultView\n * to week. view controls the displayed mode when supplied; date navigation remains local state.\n * onRangeChange reports the visible date range after rendering. Locale comes from Appkit's\n * Paraglide runtime (Japanese or English); Date values use the runtime's date/time conventions.\n * The root does not expose data-testid, data-view or data-event-count and does not spread arbitrary attributes.\n * @example\n * ```tsx\n * import { ResourceCalendar } from '@alneas/appkit-react/tools/calendar';\n * import '@alneas/appkit-react/styles';\n *\n * export function RoomCalendar() {\n * return <ResourceCalendar defaultDate={new Date(2026, 0, 15)} defaultView=\"week\"\n * resources={[{ id: 'room-a', title: 'Room A' }]}\n * events={[{ id: 'meeting', title: 'Planning', resourceId: 'room-a',\n * start: new Date(2026, 0, 15, 10), end: new Date(2026, 0, 15, 11) }]} />;\n * }\n * ```\n */\nexport function ResourceCalendar({\n events,\n resources = [],\n defaultDate = new Date(),\n defaultView = 'week',\n view: controlledView,\n className,\n onEventClick,\n onDateSelect,\n onViewChange,\n onRangeChange,\n components,\n businessHours,\n enabledViews,\n showDoubleArrows,\n headerBgColor = 'color-mix(in srgb, hsl(var(--muted)) 50%, hsl(var(--background)))',\n headingBgColor = 'color-mix(in srgb, hsl(var(--muted)) 30%, hsl(var(--background)))',\n defaultBgColor = 'hsl(var(--background))',\n}: ResourceCalendarProps) {\n const [currentDate, setCurrentDate] = React.useState(defaultDate);\n const [internalView, setView] = React.useState<CalendarViewMode>(defaultView);\n const view = controlledView ?? internalView;\n\n const [lastGridView, setLastGridView] = React.useState<CalendarViewMode>('week');\n const [timelineDuration, setTimelineDuration] = React.useState<'day' | 'week' | 'month'>('week');\n const [selectedResourceId, setSelectedResourceId] = React.useState<string>('all');\n const [selectedEvent, setSelectedEvent] = React.useState<CalendarEvent | null>(null);\n const language = getLocale();\n const range = calendarRange(currentDate, view, timelineDuration);\n const rangeStart = +range.start;\n const rangeEnd = +range.end;\n const lastNotifiedRange = React.useRef('');\n React.useEffect(() => {\n const key = `${rangeStart}:${rangeEnd}`;\n if (onRangeChange && lastNotifiedRange.current !== key) {\n lastNotifiedRange.current = key;\n onRangeChange({ start: new Date(rangeStart), end: new Date(rangeEnd) });\n }\n }, [rangeStart, rangeEnd, onRangeChange]);\n const options = React.useMemo(() => ({ components, businessHours }), [components, businessHours]);\n\n const locale = React.useMemo(() => {\n return language === 'en' ? enUS : ja;\n }, [language]);\n\n const filteredResources = React.useMemo(() => {\n if (selectedResourceId === 'all') return resources;\n return resources.filter((r) => r.id === selectedResourceId);\n }, [resources, selectedResourceId]);\n\n const filteredEvents = React.useMemo(() => {\n if (selectedResourceId === 'all') return events;\n return events.filter((e) => e.resourceId === selectedResourceId);\n }, [events, selectedResourceId]);\n\n const handlePrevious = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = subMonths(currentDate, 1);\n break;\n case 'week':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'day':\n newDate = subDays(currentDate, 1);\n break;\n case 'resource':\n newDate = subDays(currentDate, 1);\n break;\n case 'timeline':\n newDate =\n timelineDuration === 'day'\n ? subDays(currentDate, 1)\n : timelineDuration === 'month'\n ? subMonths(currentDate, 1)\n : subWeeks(currentDate, 1);\n break;\n default:\n newDate = subMonths(currentDate, 1);\n }\n setCurrentDate(newDate);\n };\n\n const handleNext = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = addMonths(currentDate, 1);\n break;\n case 'week':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'day':\n newDate = addDays(currentDate, 1);\n break;\n case 'resource':\n newDate = addDays(currentDate, 1);\n break;\n case 'timeline':\n newDate =\n timelineDuration === 'day'\n ? addDays(currentDate, 1)\n : timelineDuration === 'month'\n ? addMonths(currentDate, 1)\n : addWeeks(currentDate, 1);\n break;\n default:\n newDate = addMonths(currentDate, 1);\n }\n setCurrentDate(newDate);\n };\n\n const handlePreviousLarge = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = subMonths(currentDate, 12);\n break;\n case 'week':\n newDate = subMonths(currentDate, 1);\n break;\n case 'day':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'resource':\n newDate = subWeeks(currentDate, 1);\n break;\n case 'timeline':\n newDate = subMonths(currentDate, 1);\n break;\n default:\n newDate = subMonths(currentDate, 12);\n }\n setCurrentDate(newDate);\n };\n\n const handleNextLarge = () => {\n let newDate: Date;\n switch (view) {\n case 'month':\n newDate = addMonths(currentDate, 12);\n break;\n case 'week':\n newDate = addMonths(currentDate, 1);\n break;\n case 'day':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'resource':\n newDate = addWeeks(currentDate, 1);\n break;\n case 'timeline':\n newDate = addMonths(currentDate, 1);\n break;\n default:\n newDate = addMonths(currentDate, 12);\n }\n setCurrentDate(newDate);\n };\n\n const handleViewChange = (v: string) => {\n if (view === 'timeline') {\n if (v === 'day' || v === 'week' || v === 'month') {\n setTimelineDuration(v as 'day' | 'week' | 'month');\n return;\n }\n }\n\n const newView = v as CalendarViewMode;\n setView(newView);\n onViewChange?.(newView);\n\n if (newView !== 'timeline' && newView !== 'agenda' && newView !== 'resource') {\n setLastGridView(newView);\n }\n };\n\n const toggleViewMode = (mode: 'grid' | 'timeline' | 'resource') => {\n const next = mode === 'grid' ? lastGridView : mode;\n setView(next);\n onViewChange?.(next);\n };\n\n const headerTitle = React.useMemo(() => {\n if (\n view === 'day' ||\n view === 'resource' ||\n (view === 'timeline' && timelineDuration === 'day')\n ) {\n return format(currentDate, language === 'en' ? 'MMMM d, yyyy' : 'yyyy年 M月 d日', { locale });\n }\n if (view === 'week' || (view === 'timeline' && timelineDuration === 'week')) {\n const start = startOfWeek(currentDate, { weekStartsOn: 0 }); // Assuming Sunday start\n // To match \"21日-27日\" style roughly\n // If same month: 10月 21日 - 27日\n // If different month: 9月 28日 - 10月 4日\n const end = addDays(start, 6);\n\n if (language === 'ja') {\n if (start.getMonth() === end.getMonth()) {\n return `${format(start, 'yyyy年 M月d日', { locale })} - ${format(end, 'd日', { locale })}`;\n }\n return `${format(start, 'yyyy年 M月d日', { locale })} - ${format(end, 'M月d日', { locale })}`;\n } else {\n if (start.getMonth() === end.getMonth()) {\n return `${format(start, 'MMM d')} - ${format(end, 'd, yyyy')}`;\n }\n return `${format(start, 'MMM d')} - ${format(end, 'MMM d, yyyy')}`;\n }\n }\n return format(currentDate, language === 'en' ? 'MMMM yyyy' : 'yyyy年 MMMM', { locale });\n }, [currentDate, locale, language, view, timelineDuration]);\n\n return (\n <CalendarOptionsContext.Provider value={options}>\n <div\n className={cn(\n 'flex flex-col h-full border overflow-hidden [border-radius:var(--radius-lg)]',\n className,\n )}\n style={{ backgroundColor: defaultBgColor }}\n >\n {/* Toolbar */}\n {components?.toolbar ? (\n components.toolbar({\n date: currentDate,\n view,\n title: headerTitle,\n range,\n timelineDuration,\n onPrevious: handlePrevious,\n onNext: handleNext,\n onToday: () => setCurrentDate(new Date()),\n onViewChange: handleViewChange,\n })\n ) : (\n <div\n className='flex items-center justify-between border-b px-4 py-2 overflow-x-auto min-h-[52px]'\n style={{ backgroundColor: headerBgColor }}\n >\n <div className='flex items-center gap-2 flex-none'>\n {showDoubleArrows && (\n <Button\n variant='outline'\n size='icon'\n onClick={handlePreviousLarge}\n aria-label={language === 'ja' ? '大きく前へ' : 'Previous large interval'}\n className='h-8 w-8'\n >\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n )}\n <Button\n variant='outline'\n size='icon'\n onClick={handlePrevious}\n aria-label={language === 'ja' ? '前の期間' : 'Previous interval'}\n className='h-8 w-8'\n >\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <Button variant='outline' size='sm' onClick={() => setCurrentDate(new Date())}>\n {m.calendar_today()}\n </Button>\n <Button\n variant='outline'\n size='icon'\n onClick={handleNext}\n aria-label={language === 'ja' ? '次の期間' : 'Next interval'}\n className='h-8 w-8'\n >\n <ChevronRight className='h-4 w-4' />\n </Button>\n {showDoubleArrows && (\n <Button\n variant='outline'\n size='icon'\n onClick={handleNextLarge}\n aria-label={language === 'ja' ? '大きく次へ' : 'Next large interval'}\n className='h-8 w-8'\n >\n <ChevronsRight className='h-4 w-4' />\n </Button>\n )}\n <span className='ml-2 text-lg font-semibold whitespace-nowrap'>{headerTitle}</span>\n </div>\n\n <div className='flex items-center gap-2 flex-none ml-4'>\n {resources.length > 0 && (\n <Select\n value={selectedResourceId}\n onValueChange={(v) => v && setSelectedResourceId(v)}\n >\n <SelectTrigger aria-label={language === 'ja' ? 'リソース' : 'Resource'} className='bg-background w-[200px] h-9'>\n <span>\n {selectedResourceId === 'all'\n ? language === 'ja'\n ? 'すべてのリソース'\n : 'All Resources'\n : resources.find((r) => r.id === selectedResourceId)?.title ||\n selectedResourceId}\n </span>\n </SelectTrigger>\n <SelectContent className='bg-popover'>\n <SelectItem value='all'>\n {language === 'ja' ? 'すべてのリソース' : 'All Resources'}\n </SelectItem>\n {resources.map((res) => (\n <SelectItem key={res.id} value={res.id}>\n {res.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n\n {/* View Type Switcher (Icon Group) */}\n <div className='flex items-center border overflow-hidden bg-background rounded-md flex-none'>\n {(!enabledViews ||\n enabledViews.includes('week') ||\n enabledViews.includes('day') ||\n enabledViews.includes('month')) && (\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('grid')}\n className={cn(\n 'rounded-none h-9 w-9',\n view !== 'timeline' &&\n view !== 'resource' &&\n 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_grid({ defaultValue: 'Grid' })}\n >\n <LayoutGrid className='h-4 w-4' />\n </Button>\n )}\n {(!enabledViews || enabledViews.includes('timeline')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('timeline')}\n className={cn(\n 'rounded-none h-9 w-9',\n view === 'timeline' && 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_timeline({ defaultValue: 'Timeline' })}\n >\n <StretchHorizontal className='h-4 w-4' />\n </Button>\n </>\n )}\n {(!enabledViews || enabledViews.includes('resource')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='icon'\n onClick={() => toggleViewMode('resource')}\n className={cn(\n 'rounded-none h-9 w-9',\n view === 'resource' && 'bg-muted text-accent-foreground',\n )}\n title={m.calendar_view_resource({ defaultValue: 'Resource' })}\n >\n <Users className='h-4 w-4' />\n </Button>\n </>\n )}\n </div>\n\n {/* Time Scope Switcher (Text Group) */}\n {view !== 'resource' && (\n <div className='flex items-center border overflow-hidden bg-background rounded-md flex-none'>\n {(!enabledViews || enabledViews.includes('day')) && (\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('day')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'day' || (view === 'timeline' && timelineDuration === 'day')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_day()}\n </Button>\n )}\n {(!enabledViews || enabledViews.includes('week')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('week')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'week' ||\n (view === 'timeline' && timelineDuration === 'week')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_week()}\n </Button>\n </>\n )}\n {(!enabledViews || enabledViews.includes('month')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('month')}\n className={cn(\n 'rounded-none px-3 h-9',\n (view === 'month' ||\n (view === 'timeline' && timelineDuration === 'month')) &&\n 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_month()}\n </Button>\n </>\n )}\n {view !== 'timeline' && (!enabledViews || enabledViews.includes('agenda')) && (\n <>\n <div className='bg-border w-[1px] h-4' />\n <Button\n variant='ghost'\n size='sm'\n onClick={() => handleViewChange('agenda')}\n className={cn(\n 'rounded-none px-3 h-9',\n view === 'agenda' && 'bg-muted font-medium text-accent-foreground',\n )}\n >\n {m.calendar_view_agenda({ defaultValue: 'List' })}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n {/* View Content */}\n <div className='flex-1 overflow-hidden relative min-h-0'>\n {view === 'month' && (\n <MonthView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n onDateSelect={onDateSelect}\n locale={locale}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {(view === 'week' || view === 'day') && (\n <TimeGridView\n view={view}\n currentDate={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n onDateSelect={onDateSelect}\n locale={locale}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'timeline' && (\n <TimelineView\n currentDate={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n locale={locale}\n duration={timelineDuration}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'agenda' && (\n <AgendaView\n currentDate={currentDate}\n events={filteredEvents}\n locale={locale}\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n headingBgColor={headingBgColor}\n defaultBgColor={defaultBgColor}\n />\n )}\n {view === 'resource' && (\n <ResourceGridView\n date={currentDate}\n events={filteredEvents}\n resources={filteredResources}\n onEmptySlotClick={\n onDateSelect\n ? (resourceId, start) =>\n onDateSelect(start, new Date(+start + 30 * 60_000), resourceId)\n : undefined\n }\n onEventClick={(e) => {\n setSelectedEvent(e);\n onEventClick?.(e);\n }}\n />\n )}\n </div>\n\n {/* Event Detail Dialog */}\n <Dialog open={!!selectedEvent} onOpenChange={(open) => !open && setSelectedEvent(null)}>\n <DialogContent className='bg-popover'>\n <DialogHeader>\n <DialogTitle className='text-xl font-bold'>{selectedEvent?.title}</DialogTitle>\n <DialogDescription className='text-sm text-muted-foreground'>\n {selectedEvent &&\n format(new Date(selectedEvent.start), 'yyyy/MM/dd HH:mm', { locale })}\n {' - '}\n {selectedEvent && format(new Date(selectedEvent.end), 'HH:mm', { locale })}\n </DialogDescription>\n </DialogHeader>\n {selectedEvent?.description && (\n <div className='py-4 text-sm whitespace-pre-wrap text-foreground'>\n {selectedEvent.description as string}\n </div>\n )}\n {selectedEvent?.resourceId && (\n <div className='mt-2 text-xs font-semibold text-muted-foreground uppercase border-t pt-2'>\n Resource: {resources.find((r) => r.id === selectedEvent.resourceId)?.title}\n </div>\n )}\n </DialogContent>\n </Dialog>\n </div>\n </CalendarOptionsContext.Provider>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../../ui/lib/utils.cjs"),n=require("../calendar-layout.cjs"),r=require("../calendar-context.cjs");let i=require("react/jsx-runtime"),a=require("react");a=e.__toESM(a,1);let o=require("date-fns/locale"),s=require("date-fns");var c=96,l=96,u=48;function d({date:e,resources:d,events:f,startHour:p=9,endHour:m=23,cellDuration:h=30,cellWidth:g=48,rowHeight:_=48,onEventClick:v,onEmptySlotClick:y,isWeekendOrHoliday:b=!1,businessHours:x=[{start:9,end:22}],className:S}){let C=Number.isFinite(h)&&h>=1?h:30,{components:w,businessHours:T}=r.useCalendarOptions(),E=a.useRef(null),D=a.useMemo(()=>{let t=[],n=(m-p)*60/C;for(let r=0;r<n;r++){let n=(0,s.setMinutes)((0,s.setHours)((0,s.startOfDay)(e),p),r*C);t.push(n)}return t},[e,p,m,C]),O=a.useMemo(()=>{let t=new Map,r=(0,s.startOfDay)(e);for(let e of d)t.set(e.id,n.layoutEvents(f.filter(t=>t.resourceId===e.id),(0,s.setHours)(r,p),(0,s.setHours)(r,m)));return t},[f,d,e,p,m]),k=_*Math.max(1,...Array.from(O.values(),e=>Math.max(1,...e.map(e=>e.lanes)))),A=(e,t)=>{let n=(0,s.getHours)(e)*60+(0,s.getMinutes)(e)-p*60,r=(t.getTime()-e.getTime())/6e4;return{left:n/C*g,width:r/C*g}},j=(e,t)=>{if(T!==void 0||t.businessHours!==void 0)return n.isBusinessTime(e,T,t);let r=(0,s.getHours)(e)+(0,s.getMinutes)(e)/60;return x.some(e=>r>=e.start&&r<e.end)},M=D.length*g,N=d.length*k,P=a.useRef(null),F=a.useRef(null),I=a.useRef(null),L=a.useRef(null),R=a.useRef(null),z=a.useRef(null),B=a.useRef(null),V=a.useRef(null),H=a.useRef(null),U=a.useRef(null),W=a.useRef(null);a.useEffect(()=>{let e=E.current;if(!e)return;let t=()=>{let t=e.clientWidth,n=e.clientHeight,r=c+M,i=t-l,a=Math.min(r,i),o=a+l;z.current&&(z.current.style.left=`${Math.max(0,a)}px`),V.current&&(V.current.style.width=`${o}px`),U.current&&(U.current.style.left=`${Math.max(0,a)}px`);let s=u+N,d=n-u,f=Math.min(s,d);B.current&&(B.current.style.top=`${Math.max(0,f)}px`,B.current.style.width=`${o}px`),W.current&&(W.current.style.left=`${Math.max(0,a)}px`,W.current.style.top=`${Math.max(0,f)}px`);let p=Math.max(0,f-u);H.current&&(H.current.style.height=`${p}px`),z.current&&(z.current.style.height=`${p}px`)},n=new ResizeObserver(t);return n.observe(e),t(),()=>n.disconnect()},[M,N]);let[G,K]=a.useState(null),q=(e,t)=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect(),r=E.current?.getBoundingClientRect();if(r){let e=n.bottom-r.top,i=n.left-r.left;K({event:t,position:{top:e,left:i}})}};return(0,i.jsx)(`div`,{className:t.cn(`relative h-full w-full overflow-hidden border bg-background`,S),children:(0,i.jsxs)(`div`,{ref:E,className:`relative h-full w-full overflow-auto`,onScroll:e=>{let{scrollTop:t,scrollLeft:n}=e.currentTarget;P.current&&(P.current.style.transform=`translateX(${-n}px)`),F.current&&(F.current.style.transform=`translateX(${-n}px)`),I.current&&(I.current.style.transform=`translateY(${-t}px)`),L.current&&(L.current.style.transform=`translateY(${-t}px)`)},children:[(0,i.jsxs)(`div`,{ref:R,className:`pointer-events-none sticky left-0 top-0 z-30 flex h-full w-full flex-col justify-between`,children:[(0,i.jsxs)(`div`,{ref:V,className:`pointer-events-auto absolute left-0 top-0 z-40 border-b bg-background`,style:{height:u},children:[(0,i.jsx)(`div`,{className:`pointer-events-none absolute left-0 right-0 top-0 h-full border-t`}),(0,i.jsx)(`div`,{className:`absolute left-0 top-0 z-50 border-l border-r bg-muted/50`,style:{width:c,height:u}}),(0,i.jsx)(`div`,{className:`absolute bottom-0 top-0 overflow-hidden bg-muted/50`,style:{left:c,right:l},children:(0,i.jsx)(`div`,{ref:P,className:`will-change-transform absolute left-0 top-0 flex h-full items-center`,children:D.map((e,n)=>{let r=(0,s.getMinutes)(e)===0;return(0,i.jsx)(`div`,{className:t.cn(`relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground`,r?`border-l`:``),style:{width:g,height:`100%`},children:r&&(0,s.format)(e,`H時`,{locale:o.ja})},n)})})})]}),(0,i.jsxs)(`div`,{ref:B,className:`pointer-events-auto absolute left-0 top-full z-40 border-b border-t bg-background transition-all duration-0`,style:{height:u},children:[(0,i.jsx)(`div`,{className:`pointer-events-none absolute left-0 right-0 top-0 h-full border-b`}),(0,i.jsx)(`div`,{className:`absolute left-0 top-0 z-50 border-b border-l border-r bg-muted/50`,style:{width:c,height:u}}),(0,i.jsx)(`div`,{className:`absolute bottom-0 top-0 overflow-hidden bg-muted/50`,style:{left:c,right:l},children:(0,i.jsx)(`div`,{ref:F,className:`will-change-transform absolute left-0 top-0 flex h-full items-center`,children:D.map((e,n)=>{let r=(0,s.getMinutes)(e)===0;return(0,i.jsx)(`div`,{className:t.cn(`relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground`,r?`border-l`:``),style:{width:g,height:`100%`},children:r&&(0,s.format)(e,`H時`,{locale:o.ja})},n)})})})]}),(0,i.jsx)(`div`,{ref:H,className:`pointer-events-auto absolute left-0 z-20 overflow-hidden border-l border-r bg-background`,style:{top:u,width:c},children:(0,i.jsx)(`div`,{ref:I,className:`will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background`,children:d.map(e=>(0,i.jsxs)(`div`,{className:`box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate`,style:{height:k},title:e.title,children:[(0,i.jsx)(`div`,{children:w?.resourceHeader?w.resourceHeader({resource:e}):e.title}),e.prices&&(0,i.jsx)(`div`,{className:`text-xs font-normal text-muted-foreground`,children:b?e.prices.weekend:e.prices.base})]},e.id))})}),(0,i.jsx)(`div`,{ref:z,className:`pointer-events-auto absolute left-full z-20 overflow-hidden border-l border-r bg-background transition-all duration-0`,style:{top:u,width:l},children:(0,i.jsx)(`div`,{ref:L,className:`will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background`,children:d.map(e=>(0,i.jsxs)(`div`,{className:`box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate`,style:{height:k},title:e.title,children:[(0,i.jsx)(`div`,{children:e.title}),e.prices&&(0,i.jsx)(`div`,{className:`text-xs font-normal text-muted-foreground`,children:b?e.prices.weekend:e.prices.peak})]},e.id))})}),(0,i.jsx)(`div`,{ref:U,className:`pointer-events-auto absolute left-full top-0 z-50 border-b border-l border-r border-t bg-muted/50`,style:{width:l,height:u}}),(0,i.jsx)(`div`,{ref:W,className:`pointer-events-auto absolute left-full top-full z-50 border-b border-l border-r border-t bg-muted/50`,style:{width:l,height:u}})]}),(0,i.jsxs)(`div`,{className:`absolute left-0 top-0 z-10`,style:{width:M+c+l,height:N+96},children:[G&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`fixed inset-0 z-40 cursor-default`,onClick:e=>{e?.stopPropagation(),K(null)}}),(0,i.jsxs)(`div`,{className:`pointer-events-auto absolute z-50 cursor-pointer rounded-lg border bg-popover p-2 shadow-lg hover:bg-accent`,style:{top:G.position.top-u+10,left:G.position.left-c+10,width:320},onClick:()=>{G&&v&&(v(G.event),K(null))},children:[(0,i.jsx)(`div`,{className:`mb-1 -mx-2 -mt-2 flex items-center justify-between rounded-t-lg bg-primary px-2 py-1 text-primary-foreground`,children:(0,i.jsxs)(`span`,{className:`text-sm font-bold`,children:[(0,s.format)(G.event.start,`HH:mm`),` -`,` `,(0,s.format)(G.event.end,`HH:mm`)]})}),(0,i.jsxs)(`div`,{className:`grid gap-1`,children:[(0,i.jsx)(`div`,{className:`text-sm font-semibold`,children:G.event.title}),G.event.description&&(0,i.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:G.event.description})]})]})]}),(0,i.jsx)(`div`,{className:`absolute`,style:{top:u,left:c,width:M,height:N},children:d.map(e=>(0,i.jsxs)(`div`,{className:`relative flex box-border border-b bg-background`,style:{height:k,width:M},children:[D.map((n,r)=>{let a=(0,s.getMinutes)(n)===0;return(0,i.jsx)(`button`,{type:`button`,disabled:!y,"aria-label":`${e.title} ${(0,s.format)(n,`yyyy-MM-dd HH:mm`)}`,className:t.cn(`pointer-events-auto box-border h-full flex-none border-r hover:bg-muted/10`,a?`border-border`:`border-border border-dashed`,!j(n,e)&&`bg-muted/20`),style:{width:g},onClick:()=>y&&y(e.id,n)},r)}),O.get(e.id)?.map(({event:e,start:r,end:a,lane:o})=>{let{left:c,width:l}=A(r,a);return(0,i.jsx)(`div`,{"data-event-id":e.id,role:`button`,tabIndex:0,onKeyDown:t=>n.activateOnKey(t,()=>v?.(e)),className:t.cn(`pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:opacity-90`,e.color||`bg-primary text-primary-foreground`),style:{left:c,width:Math.max(1,l-2),top:o*_+4,height:_-8},onClick:t=>q(t,e),title:`${e.title} (${(0,s.format)(e.start,`HH:mm`)} - ${(0,s.format)(e.end,`HH:mm`)})`,children:w?.event?w.event({event:e}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`truncate font-semibold`,children:e.title}),l>40&&e.description&&(0,i.jsx)(`div`,{className:`truncate opacity-90`,children:e.description})]})},e.id)})]},e.id))})]})]})})}exports.ResourceGridView=d;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../../ui/lib/utils.cjs"),n=require("../calendar-layout.cjs"),r=require("../calendar-context.cjs");let i=require("react/jsx-runtime"),a=require("react");a=e.__toESM(a,1);let o=require("date-fns/locale"),s=require("date-fns");var c=96,l=96,u=48;function d({date:e,resources:d,events:f,startHour:p=9,endHour:m=23,cellDuration:h=30,cellWidth:g=48,rowHeight:_=48,onEventClick:v,onEmptySlotClick:y,isWeekendOrHoliday:b=!1,businessHours:x=[{start:9,end:22}],className:S}){let C=Number.isFinite(h)&&h>=1?h:30,{components:w,businessHours:T}=r.useCalendarOptions(),E=a.useRef(null),D=a.useMemo(()=>{let t=[],n=(m-p)*60/C;for(let r=0;r<n;r++){let n=(0,s.setMinutes)((0,s.setHours)((0,s.startOfDay)(e),p),r*C);t.push(n)}return t},[e,p,m,C]),O=a.useMemo(()=>{let t=new Map,r=(0,s.startOfDay)(e);for(let e of d)t.set(e.id,n.layoutEvents(f.filter(t=>t.resourceId===e.id),(0,s.setHours)(r,p),(0,s.setHours)(r,m)));return t},[f,d,e,p,m]),k=_*Math.max(1,...Array.from(O.values(),e=>Math.max(1,...e.map(e=>e.lanes)))),A=(e,t)=>{let n=(0,s.getHours)(e)*60+(0,s.getMinutes)(e)-p*60,r=(t.getTime()-e.getTime())/6e4;return{left:n/C*g,width:r/C*g}},j=(e,t)=>{if(T!==void 0||t.businessHours!==void 0)return n.isBusinessTime(e,T,t);let r=(0,s.getHours)(e)+(0,s.getMinutes)(e)/60;return x.some(e=>r>=e.start&&r<e.end)},M=D.length*g,N=d.length*k,P=a.useRef(null),F=a.useRef(null),I=a.useRef(null),L=a.useRef(null),R=a.useRef(null),z=a.useRef(null),B=a.useRef(null),V=a.useRef(null),H=a.useRef(null),U=a.useRef(null),W=a.useRef(null);a.useEffect(()=>{let e=E.current;if(!e)return;let t=()=>{let t=e.clientWidth,n=e.clientHeight,r=c+M,i=t-l,a=Math.min(r,i),o=a+l;z.current&&(z.current.style.left=`${Math.max(0,a)}px`),V.current&&(V.current.style.width=`${o}px`),U.current&&(U.current.style.left=`${Math.max(0,a)}px`);let s=u+N,d=n-u,f=Math.min(s,d);B.current&&(B.current.style.top=`${Math.max(0,f)}px`,B.current.style.width=`${o}px`),W.current&&(W.current.style.left=`${Math.max(0,a)}px`,W.current.style.top=`${Math.max(0,f)}px`);let p=Math.max(0,f-u);H.current&&(H.current.style.height=`${p}px`),z.current&&(z.current.style.height=`${p}px`)},n=new ResizeObserver(t);return n.observe(e),t(),()=>n.disconnect()},[M,N]);let[G,K]=a.useState(null),q=(e,t)=>{e.stopPropagation();let n=e.currentTarget.getBoundingClientRect(),r=E.current?.getBoundingClientRect();if(r){let e=n.bottom-r.top,i=n.left-r.left;K({event:t,position:{top:e,left:i}})}};return(0,i.jsx)(`div`,{className:t.cn(`relative h-full w-full overflow-hidden border bg-background`,S),children:(0,i.jsxs)(`div`,{ref:E,className:`relative h-full w-full overflow-auto`,onScroll:e=>{let{scrollTop:t,scrollLeft:n}=e.currentTarget;P.current&&(P.current.style.transform=`translateX(${-n}px)`),F.current&&(F.current.style.transform=`translateX(${-n}px)`),I.current&&(I.current.style.transform=`translateY(${-t}px)`),L.current&&(L.current.style.transform=`translateY(${-t}px)`)},children:[(0,i.jsxs)(`div`,{ref:R,className:`pointer-events-none sticky left-0 top-0 z-30 flex h-full w-full flex-col justify-between`,children:[(0,i.jsxs)(`div`,{ref:V,className:`pointer-events-auto absolute left-0 top-0 z-40 border-b bg-background`,style:{height:u},children:[(0,i.jsx)(`div`,{className:`pointer-events-none absolute left-0 right-0 top-0 h-full border-t`}),(0,i.jsx)(`div`,{className:`absolute left-0 top-0 z-50 border-l border-r bg-muted/50`,style:{width:c,height:u}}),(0,i.jsx)(`div`,{className:`absolute bottom-0 top-0 overflow-hidden bg-muted/50`,style:{left:c,right:l},children:(0,i.jsx)(`div`,{ref:P,className:`will-change-transform absolute left-0 top-0 flex h-full items-center`,children:D.map((e,n)=>{let r=(0,s.getMinutes)(e)===0;return(0,i.jsx)(`div`,{className:t.cn(`relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground`,r?`border-l`:``),style:{width:g,height:`100%`},children:r&&(0,s.format)(e,`H時`,{locale:o.ja})},n)})})})]}),(0,i.jsxs)(`div`,{ref:B,className:`pointer-events-auto absolute left-0 top-full z-40 border-b border-t bg-background transition-all duration-0`,style:{height:u},children:[(0,i.jsx)(`div`,{className:`pointer-events-none absolute left-0 right-0 top-0 h-full border-b`}),(0,i.jsx)(`div`,{className:`absolute left-0 top-0 z-50 border-b border-l border-r bg-muted/50`,style:{width:c,height:u}}),(0,i.jsx)(`div`,{className:`absolute bottom-0 top-0 overflow-hidden bg-muted/50`,style:{left:c,right:l},children:(0,i.jsx)(`div`,{ref:F,className:`will-change-transform absolute left-0 top-0 flex h-full items-center`,children:D.map((e,n)=>{let r=(0,s.getMinutes)(e)===0;return(0,i.jsx)(`div`,{className:t.cn(`relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground`,r?`border-l`:``),style:{width:g,height:`100%`},children:r&&(0,s.format)(e,`H時`,{locale:o.ja})},n)})})})]}),(0,i.jsx)(`div`,{ref:H,className:`pointer-events-auto absolute left-0 z-20 overflow-hidden border-l border-r bg-background`,style:{top:u,width:c},children:(0,i.jsx)(`div`,{ref:I,className:`will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background`,children:d.map(e=>(0,i.jsxs)(`div`,{className:`box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate`,style:{height:k},title:e.title,children:[(0,i.jsx)(`div`,{children:w?.resourceHeader?w.resourceHeader({resource:e}):e.title}),e.prices&&(0,i.jsx)(`div`,{className:`text-xs font-normal text-muted-foreground`,children:b?e.prices.weekend:e.prices.base})]},e.id))})}),(0,i.jsx)(`div`,{ref:z,className:`pointer-events-auto absolute left-full z-20 overflow-hidden border-l border-r bg-background transition-all duration-0`,style:{top:u,width:l},children:(0,i.jsx)(`div`,{ref:L,className:`will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background`,children:d.map(e=>(0,i.jsxs)(`div`,{className:`box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate`,style:{height:k},title:e.title,children:[(0,i.jsx)(`div`,{children:e.title}),e.prices&&(0,i.jsx)(`div`,{className:`text-xs font-normal text-muted-foreground`,children:b?e.prices.weekend:e.prices.peak})]},e.id))})}),(0,i.jsx)(`div`,{ref:U,className:`pointer-events-auto absolute left-full top-0 z-50 border-b border-l border-r border-t bg-muted/50`,style:{width:l,height:u}}),(0,i.jsx)(`div`,{ref:W,className:`pointer-events-auto absolute left-full top-full z-50 border-b border-l border-r border-t bg-muted/50`,style:{width:l,height:u}})]}),(0,i.jsxs)(`div`,{className:`absolute left-0 top-0 z-10`,style:{width:M+c+l,height:N+96},children:[G&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`fixed inset-0 z-40 cursor-default`,onClick:e=>{e?.stopPropagation(),K(null)}}),(0,i.jsxs)(`div`,{className:`pointer-events-auto absolute z-50 cursor-pointer rounded-lg border bg-popover p-2 shadow-lg hover:bg-accent`,style:{top:G.position.top-u+10,left:G.position.left-c+10,width:320},onClick:()=>{G&&v&&(v(G.event),K(null))},children:[(0,i.jsx)(`div`,{className:`mb-1 -mx-2 -mt-2 flex items-center justify-between rounded-t-lg bg-primary px-2 py-1 text-primary-foreground`,children:(0,i.jsxs)(`span`,{className:`text-sm font-bold`,children:[(0,s.format)(G.event.start,`HH:mm`),` -`,` `,(0,s.format)(G.event.end,`HH:mm`)]})}),(0,i.jsxs)(`div`,{className:`grid gap-1`,children:[(0,i.jsx)(`div`,{className:`text-sm font-semibold`,children:G.event.title}),G.event.description&&(0,i.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:G.event.description})]})]})]}),(0,i.jsx)(`div`,{className:`absolute`,style:{top:u,left:c,width:M,height:N},children:d.map(e=>(0,i.jsxs)(`div`,{className:`relative flex box-border border-b bg-background`,style:{height:k,width:M},children:[D.map((n,r)=>{let a=(0,s.getMinutes)(n)===0;return(0,i.jsx)(`button`,{type:`button`,disabled:!y,"aria-label":`${e.title} ${(0,s.format)(n,`yyyy-MM-dd HH:mm`)}`,className:t.cn(`pointer-events-auto box-border h-full flex-none border-r hover:bg-muted/10`,a?`border-border`:`border-border border-dashed`,!j(n,e)&&`bg-muted/20`),style:{width:g},onClick:()=>y&&y(e.id,n)},r)}),O.get(e.id)?.map(({event:e,start:r,end:a,lane:o})=>{let{left:c,width:l}=A(r,a);return(0,i.jsx)(`div`,{"data-event-id":e.id,role:`button`,tabIndex:0,onKeyDown:t=>n.activateOnKey(t,()=>v?.(e)),className:t.cn(`pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:brightness-95`,e.color||`bg-primary text-primary-foreground`),style:{left:c,width:Math.max(1,l-2),top:o*_+4,height:_-8},onClick:t=>q(t,e),title:`${e.title} (${(0,s.format)(e.start,`HH:mm`)} - ${(0,s.format)(e.end,`HH:mm`)})`,children:w?.event?w.event({event:e}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`div`,{className:`truncate font-semibold`,children:e.title}),l>40&&e.description&&(0,i.jsx)(`div`,{className:`truncate`,children:e.description})]})},e.id)})]},e.id))})]})]})})}exports.ResourceGridView=d;
2
2
  //# sourceMappingURL=ResourceView.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceView.cjs","names":["useCalendarOptions","React","setMinutes","setHours","startOfDay","layoutEvents","getHours","getMinutes","isBusinessTime","cn","format","ja","_Fragment","activateOnKey","require_runtime","require_ui_lib_utils","require_tools_components_calendar_calendar_layout","require_tools_components_calendar_calendar_context","react_jsx_runtime","react","date_fns_locale","date_fns","LEFT_COL_WIDTH","RIGHT_COL_WIDTH","HEADER_HEIGHT","ResourceGridView","requestedCellDuration","cellDuration","calendarBusinessHours","scrollContainerRef","timeSlots","slots","count","endHour","startHour","i","time","date","eventsByResource","groups","day","resource","resources","events","event","displayRowHeight","rowHeight","segments","segment","calculatePosition","startTotalMinutes","eventStart","durationMinutes","eventEnd","cellWidth","isBusinessHour","timeVal","businessHours","bh","totalContentWidth","totalContentHeight","headerTopRef","headerBottomRef","headerLeftRef","headerRightRef","overlayRef","rightHeaderContainerRef","bottomHeaderContainerRef","topHeaderContainerRef","leftHeaderContainerRef","topRightCornerRef","bottomRightCornerRef","container","updateLayout","viewportWidth","viewportHeight","contentRightEdge","stickyRightEdge","rightHeaderLeft","totalVisualWidth","contentBottomEdge","stickyBottomEdge","bottomHeaderTop","sidebarHeight","observer","selectedEvent","setSelectedEvent","handleEventClick","rect","containerRect","top","left","className","scrollLeft","scrollTop","isHour","components","isWeekendOrHoliday","onEventClick","isHourStart","onEmptySlotClick","colIdx","start","end","e","width","lane"],"sources":["../../../../../src/tools/components/calendar/views/ResourceView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { format, getHours, getMinutes, setHours, setMinutes, startOfDay } from 'date-fns';\nimport { ja } from 'date-fns/locale';\nimport { cn } from \"../../../lib/utils\";\nimport { CalendarEvent, CalendarResource } from '../types';\nimport { layoutEvents, activateOnKey, isBusinessTime } from '../calendar-layout';\nimport { useCalendarOptions } from '../calendar-context';\n\n// Dimensions\nconst LEFT_COL_WIDTH = 96; // w-24\nconst RIGHT_COL_WIDTH = 96;\nconst HEADER_HEIGHT = 48; // h-12\n\nexport interface ResourceGridViewProps {\n /** 表示する日付 */\n date: Date;\n /** リソースのリスト */\n resources: CalendarResource[];\n /** イベントのリスト */\n events: CalendarEvent[];\n /** 開始時間 (時) デフォルト: 9 */\n startHour?: number;\n /** 終了時間 (時) デフォルト: 23 */\n endHour?: number;\n /** 1セルの時間 (分) デフォルト: 30 */\n cellDuration?: number; // minutes\n /** 1セルの幅 (px) デフォルト: 48 */\n cellWidth?: number; // pixels\n /** 行の高さ (px) デフォルト: 48 */\n rowHeight?: number; // pixels\n /** イベントクリック時のコールバック */\n onEventClick?: (event: CalendarEvent) => void;\n /** 空きスロットクリック時のコールバック */\n onEmptySlotClick?: (resourceId: string, time: Date) => void;\n /** 週末・祝日かどうか (価格表示などに影響) */\n isWeekendOrHoliday?: boolean;\n /** 営業時間 (網掛け表示に使用) */\n businessHours?: { start: number; end: number }[];\n /** 追加のクラス名 */\n className?: string;\n}\n\n/**\n * リソースカレンダーコンポーネント\n *\n * リソースごとのタイムラインを表示し、イベントを配置します。\n */\nexport function ResourceGridView({\n date,\n resources,\n events,\n startHour = 9,\n endHour = 23,\n cellDuration: requestedCellDuration = 30,\n cellWidth = 48,\n rowHeight = 48,\n onEventClick,\n onEmptySlotClick,\n isWeekendOrHoliday = false,\n businessHours = [{ start: 9, end: 22 }],\n className,\n}: ResourceGridViewProps) {\n const cellDuration =\n Number.isFinite(requestedCellDuration) && requestedCellDuration >= 1\n ? requestedCellDuration\n : 30;\n const { components, businessHours: calendarBusinessHours } = useCalendarOptions();\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n // Time slots generation\n const timeSlots = React.useMemo(() => {\n const slots = [];\n const totalMinutes = (endHour - startHour) * 60;\n const count = totalMinutes / cellDuration;\n\n for (let i = 0; i < count; i++) {\n const time = setMinutes(setHours(startOfDay(date), startHour), i * cellDuration);\n slots.push(time);\n }\n return slots;\n }, [date, startHour, endHour, cellDuration]);\n\n // Group events by resource\n const eventsByResource = React.useMemo(() => {\n const groups = new Map<string, ReturnType<typeof layoutEvents>>();\n const day = startOfDay(date);\n for (const resource of resources) {\n groups.set(\n resource.id,\n layoutEvents(\n events.filter((event) => event.resourceId === resource.id),\n setHours(day, startHour),\n setHours(day, endHour),\n ),\n );\n }\n return groups;\n }, [events, resources, date, startHour, endHour]);\n const displayRowHeight =\n rowHeight *\n Math.max(\n 1,\n ...Array.from(eventsByResource.values(), (segments) =>\n Math.max(1, ...segments.map((segment) => segment.lanes)),\n ),\n );\n\n const calculatePosition = (eventStart: Date, eventEnd: Date) => {\n const startTotalMinutes = getHours(eventStart) * 60 + getMinutes(eventStart) - startHour * 60;\n const durationMinutes = (eventEnd.getTime() - eventStart.getTime()) / (1000 * 60);\n\n const left = (startTotalMinutes / cellDuration) * cellWidth;\n const width = (durationMinutes / cellDuration) * cellWidth;\n\n return { left, width };\n };\n\n const isBusinessHour = (time: Date, resource: CalendarResource) => {\n if (calendarBusinessHours !== undefined || resource.businessHours !== undefined)\n return isBusinessTime(time, calendarBusinessHours, resource);\n const timeVal = getHours(time) + getMinutes(time) / 60;\n return businessHours.some((bh) => timeVal >= bh.start && timeVal < bh.end);\n };\n\n const totalContentWidth = timeSlots.length * cellWidth;\n const totalContentHeight = resources.length * displayRowHeight;\n\n // Scroll Sync Refs\n const headerTopRef = React.useRef<HTMLDivElement>(null);\n const headerBottomRef = React.useRef<HTMLDivElement>(null);\n const headerLeftRef = React.useRef<HTMLDivElement>(null);\n const headerRightRef = React.useRef<HTMLDivElement>(null);\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n // Refs for layout containers to update positions efficiently\n const rightHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const bottomHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const topHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const leftHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const topRightCornerRef = React.useRef<HTMLDivElement>(null);\n const bottomRightCornerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const updateLayout = () => {\n const viewportWidth = container.clientWidth;\n const viewportHeight = container.clientHeight;\n\n const contentRightEdge = LEFT_COL_WIDTH + totalContentWidth;\n const stickyRightEdge = viewportWidth - RIGHT_COL_WIDTH;\n const rightHeaderLeft = Math.min(contentRightEdge, stickyRightEdge);\n const totalVisualWidth = rightHeaderLeft + RIGHT_COL_WIDTH;\n\n if (rightHeaderContainerRef.current) {\n rightHeaderContainerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n }\n if (topHeaderContainerRef.current) {\n topHeaderContainerRef.current.style.width = `${totalVisualWidth}px`;\n }\n if (topRightCornerRef.current) {\n topRightCornerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n }\n\n const contentBottomEdge = HEADER_HEIGHT + totalContentHeight;\n const stickyBottomEdge = viewportHeight - HEADER_HEIGHT;\n const bottomHeaderTop = Math.min(contentBottomEdge, stickyBottomEdge);\n\n if (bottomHeaderContainerRef.current) {\n bottomHeaderContainerRef.current.style.top = `${Math.max(0, bottomHeaderTop)}px`;\n bottomHeaderContainerRef.current.style.width = `${totalVisualWidth}px`;\n }\n if (bottomRightCornerRef.current) {\n bottomRightCornerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n bottomRightCornerRef.current.style.top = `${Math.max(0, bottomHeaderTop)}px`;\n }\n\n const sidebarHeight = Math.max(0, bottomHeaderTop - HEADER_HEIGHT);\n\n if (leftHeaderContainerRef.current) {\n leftHeaderContainerRef.current.style.height = `${sidebarHeight}px`;\n }\n if (rightHeaderContainerRef.current) {\n rightHeaderContainerRef.current.style.height = `${sidebarHeight}px`;\n }\n };\n\n const observer = new ResizeObserver(updateLayout);\n observer.observe(container);\n updateLayout();\n\n return () => observer.disconnect();\n }, [totalContentWidth, totalContentHeight]);\n\n // Event Selection State\n const [selectedEvent, setSelectedEvent] = React.useState<{\n event: CalendarEvent;\n position: { top: number; left: number };\n } | null>(null);\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n const containerRect = scrollContainerRef.current?.getBoundingClientRect();\n\n if (containerRect) {\n const top = rect.bottom - containerRect.top;\n const left = rect.left - containerRect.left;\n setSelectedEvent({ event, position: { top, left } });\n }\n };\n\n const handlePopoverClick = () => {\n if (selectedEvent && onEventClick) {\n onEventClick(selectedEvent.event);\n setSelectedEvent(null);\n }\n };\n\n const closePopover = (e?: React.MouseEvent) => {\n e?.stopPropagation();\n setSelectedEvent(null);\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = e.currentTarget;\n if (headerTopRef.current) {\n headerTopRef.current.style.transform = `translateX(${-scrollLeft}px)`;\n }\n if (headerBottomRef.current) {\n headerBottomRef.current.style.transform = `translateX(${-scrollLeft}px)`;\n }\n if (headerLeftRef.current) {\n headerLeftRef.current.style.transform = `translateY(${-scrollTop}px)`;\n }\n if (headerRightRef.current) {\n headerRightRef.current.style.transform = `translateY(${-scrollTop}px)`;\n }\n };\n\n return (\n <div className={cn('relative h-full w-full overflow-hidden border bg-background', className)}>\n <div\n ref={scrollContainerRef}\n className='relative h-full w-full overflow-auto'\n onScroll={handleScroll}\n >\n {/* 1. STICKY OVERLAY LAYER */}\n <div\n ref={overlayRef}\n className='pointer-events-none sticky left-0 top-0 z-30 flex h-full w-full flex-col justify-between'\n >\n {/* Top Header Row Wrapper */}\n <div\n ref={topHeaderContainerRef}\n className='pointer-events-auto absolute left-0 top-0 z-40 border-b bg-background'\n style={{ height: HEADER_HEIGHT }}\n >\n <div className='pointer-events-none absolute left-0 right-0 top-0 h-full border-t' />\n {/* Static Left Corner */}\n <div\n className='absolute left-0 top-0 z-50 border-l border-r bg-muted/50'\n style={{ width: LEFT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n {/* Scrolling Top Time Labels */}\n <div\n className='absolute bottom-0 top-0 overflow-hidden bg-muted/50'\n style={{ left: LEFT_COL_WIDTH, right: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerTopRef}\n className='will-change-transform absolute left-0 top-0 flex h-full items-center'\n >\n {timeSlots.map((time, i) => {\n const isHour = getMinutes(time) === 0;\n return (\n <div\n key={i}\n className={cn(\n 'relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground',\n isHour ? 'border-l' : '',\n )}\n style={{ width: cellWidth, height: '100%' }}\n >\n {isHour && format(time, 'H時', { locale: ja })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Bottom Header Row Wrapper */}\n <div\n ref={bottomHeaderContainerRef}\n className='pointer-events-auto absolute left-0 top-full z-40 border-b border-t bg-background transition-all duration-0'\n style={{ height: HEADER_HEIGHT }}\n >\n <div className='pointer-events-none absolute left-0 right-0 top-0 h-full border-b' />\n <div\n className='absolute left-0 top-0 z-50 border-b border-l border-r bg-muted/50'\n style={{ width: LEFT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n <div\n className='absolute bottom-0 top-0 overflow-hidden bg-muted/50'\n style={{ left: LEFT_COL_WIDTH, right: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerBottomRef}\n className='will-change-transform absolute left-0 top-0 flex h-full items-center'\n >\n {timeSlots.map((time, i) => {\n const isHour = getMinutes(time) === 0;\n return (\n <div\n key={i}\n className={cn(\n 'relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground',\n isHour ? 'border-l' : '',\n )}\n style={{ width: cellWidth, height: '100%' }}\n >\n {isHour && format(time, 'H時', { locale: ja })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Left Sidebar Column */}\n <div\n ref={leftHeaderContainerRef}\n className='pointer-events-auto absolute left-0 z-20 overflow-hidden border-l border-r bg-background'\n style={{ top: HEADER_HEIGHT, width: LEFT_COL_WIDTH }}\n >\n <div\n ref={headerLeftRef}\n className='will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background'\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate'\n style={{ height: displayRowHeight }}\n title={resource.title}\n >\n <div>\n {components?.resourceHeader\n ? components.resourceHeader({ resource })\n : resource.title}\n </div>\n {resource.prices && (\n <div className='text-xs font-normal text-muted-foreground'>\n {isWeekendOrHoliday ? resource.prices.weekend : resource.prices.base}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Right Sidebar Column */}\n <div\n ref={rightHeaderContainerRef}\n className='pointer-events-auto absolute left-full z-20 overflow-hidden border-l border-r bg-background transition-all duration-0'\n style={{ top: HEADER_HEIGHT, width: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerRightRef}\n className='will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background'\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate'\n style={{ height: displayRowHeight }}\n title={resource.title}\n >\n <div>{resource.title}</div>\n {resource.prices && (\n <div className='text-xs font-normal text-muted-foreground'>\n {isWeekendOrHoliday ? resource.prices.weekend : resource.prices.peak}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Dynamic Corners */}\n <div\n ref={topRightCornerRef}\n className='pointer-events-auto absolute left-full top-0 z-50 border-b border-l border-r border-t bg-muted/50'\n style={{ width: RIGHT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n <div\n ref={bottomRightCornerRef}\n className='pointer-events-auto absolute left-full top-full z-50 border-b border-l border-r border-t bg-muted/50'\n style={{ width: RIGHT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n </div>\n\n {/* 2. CONTENT LAYER */}\n <div\n className='absolute left-0 top-0 z-10'\n style={{\n width: totalContentWidth + LEFT_COL_WIDTH + RIGHT_COL_WIDTH,\n height: totalContentHeight + HEADER_HEIGHT * 2,\n }}\n >\n {/* POPOVER TOOLTIP */}\n {selectedEvent && (\n <>\n <div className='fixed inset-0 z-40 cursor-default' onClick={closePopover} />\n <div\n className='pointer-events-auto absolute z-50 cursor-pointer rounded-lg border bg-popover p-2 shadow-lg hover:bg-accent'\n style={{\n top: selectedEvent.position.top - HEADER_HEIGHT + 10,\n left: selectedEvent.position.left - LEFT_COL_WIDTH + 10,\n width: 320,\n }}\n onClick={handlePopoverClick}\n >\n <div className='mb-1 -mx-2 -mt-2 flex items-center justify-between rounded-t-lg bg-primary px-2 py-1 text-primary-foreground'>\n <span className='text-sm font-bold'>\n {format(selectedEvent.event.start, 'HH:mm')} -{' '}\n {format(selectedEvent.event.end, 'HH:mm')}\n </span>\n </div>\n <div className='grid gap-1'>\n <div className='text-sm font-semibold'>{selectedEvent.event.title}</div>\n {selectedEvent.event.description && (\n <div className='text-xs text-muted-foreground'>\n {selectedEvent.event.description}\n </div>\n )}\n </div>\n </div>\n </>\n )}\n\n <div\n className='absolute'\n style={{\n top: HEADER_HEIGHT,\n left: LEFT_COL_WIDTH,\n width: totalContentWidth,\n height: totalContentHeight,\n }}\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='relative flex box-border border-b bg-background'\n style={{ height: displayRowHeight, width: totalContentWidth }}\n >\n {timeSlots.map((time, colIdx) => {\n const isHourStart = getMinutes(time) === 0;\n return (\n <button\n key={colIdx}\n type='button'\n disabled={!onEmptySlotClick}\n aria-label={`${resource.title} ${format(time, 'yyyy-MM-dd HH:mm')}`}\n className={cn(\n 'pointer-events-auto box-border h-full flex-none border-r hover:bg-muted/10',\n isHourStart ? 'border-border' : 'border-border border-dashed',\n !isBusinessHour(time, resource) && 'bg-muted/20',\n )}\n style={{ width: cellWidth }}\n onClick={() => onEmptySlotClick && onEmptySlotClick(resource.id, time)}\n />\n );\n })}\n\n {eventsByResource.get(resource.id)?.map(({ event, start, end, lane }) => {\n const { left, width } = calculatePosition(start, end);\n return (\n <div\n key={event.id}\n data-event-id={event.id}\n role='button'\n tabIndex={0}\n onKeyDown={(e) => activateOnKey(e, () => onEventClick?.(event))}\n className={cn(\n 'pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:opacity-90',\n event.color || 'bg-primary text-primary-foreground',\n )}\n style={{\n left,\n width: Math.max(1, width - 2),\n top: lane * rowHeight + 4,\n height: rowHeight - 8,\n }}\n onClick={(e) => handleEventClick(e, event)}\n title={`${event.title} (${format(event.start, 'HH:mm')} - ${format(\n event.end,\n 'HH:mm',\n )})`}\n >\n {components?.event ? (\n components.event({ event })\n ) : (\n <>\n <div className='truncate font-semibold'>{event.title}</div>\n {width > 40 && event.description && (\n <div className='truncate opacity-90'>{event.description}</div>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceView.cjs","names":["useCalendarOptions","React","setMinutes","setHours","startOfDay","layoutEvents","getHours","getMinutes","isBusinessTime","cn","format","ja","_Fragment","activateOnKey","require_runtime","require_ui_lib_utils","require_tools_components_calendar_calendar_layout","require_tools_components_calendar_calendar_context","react_jsx_runtime","react","date_fns_locale","date_fns","LEFT_COL_WIDTH","RIGHT_COL_WIDTH","HEADER_HEIGHT","ResourceGridView","requestedCellDuration","cellDuration","calendarBusinessHours","scrollContainerRef","timeSlots","slots","count","endHour","startHour","i","time","date","eventsByResource","groups","day","resource","resources","events","event","displayRowHeight","rowHeight","segments","segment","calculatePosition","startTotalMinutes","eventStart","durationMinutes","eventEnd","cellWidth","isBusinessHour","timeVal","businessHours","bh","totalContentWidth","totalContentHeight","headerTopRef","headerBottomRef","headerLeftRef","headerRightRef","overlayRef","rightHeaderContainerRef","bottomHeaderContainerRef","topHeaderContainerRef","leftHeaderContainerRef","topRightCornerRef","bottomRightCornerRef","container","updateLayout","viewportWidth","viewportHeight","contentRightEdge","stickyRightEdge","rightHeaderLeft","totalVisualWidth","contentBottomEdge","stickyBottomEdge","bottomHeaderTop","sidebarHeight","observer","selectedEvent","setSelectedEvent","handleEventClick","rect","containerRect","top","left","className","scrollLeft","scrollTop","isHour","components","isWeekendOrHoliday","onEventClick","isHourStart","onEmptySlotClick","colIdx","start","end","e","width","lane"],"sources":["../../../../../src/tools/components/calendar/views/ResourceView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { format, getHours, getMinutes, setHours, setMinutes, startOfDay } from 'date-fns';\nimport { ja } from 'date-fns/locale';\nimport { cn } from \"../../../lib/utils\";\nimport { CalendarEvent, CalendarResource } from '../types';\nimport { layoutEvents, activateOnKey, isBusinessTime } from '../calendar-layout';\nimport { useCalendarOptions } from '../calendar-context';\n\n// Dimensions\nconst LEFT_COL_WIDTH = 96; // w-24\nconst RIGHT_COL_WIDTH = 96;\nconst HEADER_HEIGHT = 48; // h-12\n\nexport interface ResourceGridViewProps {\n /** 表示する日付 */\n date: Date;\n /** リソースのリスト */\n resources: CalendarResource[];\n /** イベントのリスト */\n events: CalendarEvent[];\n /** 開始時間 (時) デフォルト: 9 */\n startHour?: number;\n /** 終了時間 (時) デフォルト: 23 */\n endHour?: number;\n /** 1セルの時間 (分) デフォルト: 30 */\n cellDuration?: number; // minutes\n /** 1セルの幅 (px) デフォルト: 48 */\n cellWidth?: number; // pixels\n /** 行の高さ (px) デフォルト: 48 */\n rowHeight?: number; // pixels\n /** イベントクリック時のコールバック */\n onEventClick?: (event: CalendarEvent) => void;\n /** 空きスロットクリック時のコールバック */\n onEmptySlotClick?: (resourceId: string, time: Date) => void;\n /** 週末・祝日かどうか (価格表示などに影響) */\n isWeekendOrHoliday?: boolean;\n /** 営業時間 (網掛け表示に使用) */\n businessHours?: { start: number; end: number }[];\n /** 追加のクラス名 */\n className?: string;\n}\n\n/**\n * リソースカレンダーコンポーネント\n *\n * リソースごとのタイムラインを表示し、イベントを配置します。\n */\nexport function ResourceGridView({\n date,\n resources,\n events,\n startHour = 9,\n endHour = 23,\n cellDuration: requestedCellDuration = 30,\n cellWidth = 48,\n rowHeight = 48,\n onEventClick,\n onEmptySlotClick,\n isWeekendOrHoliday = false,\n businessHours = [{ start: 9, end: 22 }],\n className,\n}: ResourceGridViewProps) {\n const cellDuration =\n Number.isFinite(requestedCellDuration) && requestedCellDuration >= 1\n ? requestedCellDuration\n : 30;\n const { components, businessHours: calendarBusinessHours } = useCalendarOptions();\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n // Time slots generation\n const timeSlots = React.useMemo(() => {\n const slots = [];\n const totalMinutes = (endHour - startHour) * 60;\n const count = totalMinutes / cellDuration;\n\n for (let i = 0; i < count; i++) {\n const time = setMinutes(setHours(startOfDay(date), startHour), i * cellDuration);\n slots.push(time);\n }\n return slots;\n }, [date, startHour, endHour, cellDuration]);\n\n // Group events by resource\n const eventsByResource = React.useMemo(() => {\n const groups = new Map<string, ReturnType<typeof layoutEvents>>();\n const day = startOfDay(date);\n for (const resource of resources) {\n groups.set(\n resource.id,\n layoutEvents(\n events.filter((event) => event.resourceId === resource.id),\n setHours(day, startHour),\n setHours(day, endHour),\n ),\n );\n }\n return groups;\n }, [events, resources, date, startHour, endHour]);\n const displayRowHeight =\n rowHeight *\n Math.max(\n 1,\n ...Array.from(eventsByResource.values(), (segments) =>\n Math.max(1, ...segments.map((segment) => segment.lanes)),\n ),\n );\n\n const calculatePosition = (eventStart: Date, eventEnd: Date) => {\n const startTotalMinutes = getHours(eventStart) * 60 + getMinutes(eventStart) - startHour * 60;\n const durationMinutes = (eventEnd.getTime() - eventStart.getTime()) / (1000 * 60);\n\n const left = (startTotalMinutes / cellDuration) * cellWidth;\n const width = (durationMinutes / cellDuration) * cellWidth;\n\n return { left, width };\n };\n\n const isBusinessHour = (time: Date, resource: CalendarResource) => {\n if (calendarBusinessHours !== undefined || resource.businessHours !== undefined)\n return isBusinessTime(time, calendarBusinessHours, resource);\n const timeVal = getHours(time) + getMinutes(time) / 60;\n return businessHours.some((bh) => timeVal >= bh.start && timeVal < bh.end);\n };\n\n const totalContentWidth = timeSlots.length * cellWidth;\n const totalContentHeight = resources.length * displayRowHeight;\n\n // Scroll Sync Refs\n const headerTopRef = React.useRef<HTMLDivElement>(null);\n const headerBottomRef = React.useRef<HTMLDivElement>(null);\n const headerLeftRef = React.useRef<HTMLDivElement>(null);\n const headerRightRef = React.useRef<HTMLDivElement>(null);\n const overlayRef = React.useRef<HTMLDivElement>(null);\n\n // Refs for layout containers to update positions efficiently\n const rightHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const bottomHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const topHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const leftHeaderContainerRef = React.useRef<HTMLDivElement>(null);\n const topRightCornerRef = React.useRef<HTMLDivElement>(null);\n const bottomRightCornerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const updateLayout = () => {\n const viewportWidth = container.clientWidth;\n const viewportHeight = container.clientHeight;\n\n const contentRightEdge = LEFT_COL_WIDTH + totalContentWidth;\n const stickyRightEdge = viewportWidth - RIGHT_COL_WIDTH;\n const rightHeaderLeft = Math.min(contentRightEdge, stickyRightEdge);\n const totalVisualWidth = rightHeaderLeft + RIGHT_COL_WIDTH;\n\n if (rightHeaderContainerRef.current) {\n rightHeaderContainerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n }\n if (topHeaderContainerRef.current) {\n topHeaderContainerRef.current.style.width = `${totalVisualWidth}px`;\n }\n if (topRightCornerRef.current) {\n topRightCornerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n }\n\n const contentBottomEdge = HEADER_HEIGHT + totalContentHeight;\n const stickyBottomEdge = viewportHeight - HEADER_HEIGHT;\n const bottomHeaderTop = Math.min(contentBottomEdge, stickyBottomEdge);\n\n if (bottomHeaderContainerRef.current) {\n bottomHeaderContainerRef.current.style.top = `${Math.max(0, bottomHeaderTop)}px`;\n bottomHeaderContainerRef.current.style.width = `${totalVisualWidth}px`;\n }\n if (bottomRightCornerRef.current) {\n bottomRightCornerRef.current.style.left = `${Math.max(0, rightHeaderLeft)}px`;\n bottomRightCornerRef.current.style.top = `${Math.max(0, bottomHeaderTop)}px`;\n }\n\n const sidebarHeight = Math.max(0, bottomHeaderTop - HEADER_HEIGHT);\n\n if (leftHeaderContainerRef.current) {\n leftHeaderContainerRef.current.style.height = `${sidebarHeight}px`;\n }\n if (rightHeaderContainerRef.current) {\n rightHeaderContainerRef.current.style.height = `${sidebarHeight}px`;\n }\n };\n\n const observer = new ResizeObserver(updateLayout);\n observer.observe(container);\n updateLayout();\n\n return () => observer.disconnect();\n }, [totalContentWidth, totalContentHeight]);\n\n // Event Selection State\n const [selectedEvent, setSelectedEvent] = React.useState<{\n event: CalendarEvent;\n position: { top: number; left: number };\n } | null>(null);\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n const containerRect = scrollContainerRef.current?.getBoundingClientRect();\n\n if (containerRect) {\n const top = rect.bottom - containerRect.top;\n const left = rect.left - containerRect.left;\n setSelectedEvent({ event, position: { top, left } });\n }\n };\n\n const handlePopoverClick = () => {\n if (selectedEvent && onEventClick) {\n onEventClick(selectedEvent.event);\n setSelectedEvent(null);\n }\n };\n\n const closePopover = (e?: React.MouseEvent) => {\n e?.stopPropagation();\n setSelectedEvent(null);\n };\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = e.currentTarget;\n if (headerTopRef.current) {\n headerTopRef.current.style.transform = `translateX(${-scrollLeft}px)`;\n }\n if (headerBottomRef.current) {\n headerBottomRef.current.style.transform = `translateX(${-scrollLeft}px)`;\n }\n if (headerLeftRef.current) {\n headerLeftRef.current.style.transform = `translateY(${-scrollTop}px)`;\n }\n if (headerRightRef.current) {\n headerRightRef.current.style.transform = `translateY(${-scrollTop}px)`;\n }\n };\n\n return (\n <div className={cn('relative h-full w-full overflow-hidden border bg-background', className)}>\n <div\n ref={scrollContainerRef}\n className='relative h-full w-full overflow-auto'\n onScroll={handleScroll}\n >\n {/* 1. STICKY OVERLAY LAYER */}\n <div\n ref={overlayRef}\n className='pointer-events-none sticky left-0 top-0 z-30 flex h-full w-full flex-col justify-between'\n >\n {/* Top Header Row Wrapper */}\n <div\n ref={topHeaderContainerRef}\n className='pointer-events-auto absolute left-0 top-0 z-40 border-b bg-background'\n style={{ height: HEADER_HEIGHT }}\n >\n <div className='pointer-events-none absolute left-0 right-0 top-0 h-full border-t' />\n {/* Static Left Corner */}\n <div\n className='absolute left-0 top-0 z-50 border-l border-r bg-muted/50'\n style={{ width: LEFT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n {/* Scrolling Top Time Labels */}\n <div\n className='absolute bottom-0 top-0 overflow-hidden bg-muted/50'\n style={{ left: LEFT_COL_WIDTH, right: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerTopRef}\n className='will-change-transform absolute left-0 top-0 flex h-full items-center'\n >\n {timeSlots.map((time, i) => {\n const isHour = getMinutes(time) === 0;\n return (\n <div\n key={i}\n className={cn(\n 'relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground',\n isHour ? 'border-l' : '',\n )}\n style={{ width: cellWidth, height: '100%' }}\n >\n {isHour && format(time, 'H時', { locale: ja })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Bottom Header Row Wrapper */}\n <div\n ref={bottomHeaderContainerRef}\n className='pointer-events-auto absolute left-0 top-full z-40 border-b border-t bg-background transition-all duration-0'\n style={{ height: HEADER_HEIGHT }}\n >\n <div className='pointer-events-none absolute left-0 right-0 top-0 h-full border-b' />\n <div\n className='absolute left-0 top-0 z-50 border-b border-l border-r bg-muted/50'\n style={{ width: LEFT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n <div\n className='absolute bottom-0 top-0 overflow-hidden bg-muted/50'\n style={{ left: LEFT_COL_WIDTH, right: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerBottomRef}\n className='will-change-transform absolute left-0 top-0 flex h-full items-center'\n >\n {timeSlots.map((time, i) => {\n const isHour = getMinutes(time) === 0;\n return (\n <div\n key={i}\n className={cn(\n 'relative box-border flex flex-none items-center justify-start pl-1 text-sm font-medium text-muted-foreground',\n isHour ? 'border-l' : '',\n )}\n style={{ width: cellWidth, height: '100%' }}\n >\n {isHour && format(time, 'H時', { locale: ja })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Left Sidebar Column */}\n <div\n ref={leftHeaderContainerRef}\n className='pointer-events-auto absolute left-0 z-20 overflow-hidden border-l border-r bg-background'\n style={{ top: HEADER_HEIGHT, width: LEFT_COL_WIDTH }}\n >\n <div\n ref={headerLeftRef}\n className='will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background'\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate'\n style={{ height: displayRowHeight }}\n title={resource.title}\n >\n <div>\n {components?.resourceHeader\n ? components.resourceHeader({ resource })\n : resource.title}\n </div>\n {resource.prices && (\n <div className='text-xs font-normal text-muted-foreground'>\n {isWeekendOrHoliday ? resource.prices.weekend : resource.prices.base}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Right Sidebar Column */}\n <div\n ref={rightHeaderContainerRef}\n className='pointer-events-auto absolute left-full z-20 overflow-hidden border-l border-r bg-background transition-all duration-0'\n style={{ top: HEADER_HEIGHT, width: RIGHT_COL_WIDTH }}\n >\n <div\n ref={headerRightRef}\n className='will-change-transform absolute left-0 top-0 flex w-full flex-col bg-background'\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='box-border flex flex-col items-center justify-center border-b bg-muted/30 px-1 text-center text-sm font-medium text-foreground truncate'\n style={{ height: displayRowHeight }}\n title={resource.title}\n >\n <div>{resource.title}</div>\n {resource.prices && (\n <div className='text-xs font-normal text-muted-foreground'>\n {isWeekendOrHoliday ? resource.prices.weekend : resource.prices.peak}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Dynamic Corners */}\n <div\n ref={topRightCornerRef}\n className='pointer-events-auto absolute left-full top-0 z-50 border-b border-l border-r border-t bg-muted/50'\n style={{ width: RIGHT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n <div\n ref={bottomRightCornerRef}\n className='pointer-events-auto absolute left-full top-full z-50 border-b border-l border-r border-t bg-muted/50'\n style={{ width: RIGHT_COL_WIDTH, height: HEADER_HEIGHT }}\n />\n </div>\n\n {/* 2. CONTENT LAYER */}\n <div\n className='absolute left-0 top-0 z-10'\n style={{\n width: totalContentWidth + LEFT_COL_WIDTH + RIGHT_COL_WIDTH,\n height: totalContentHeight + HEADER_HEIGHT * 2,\n }}\n >\n {/* POPOVER TOOLTIP */}\n {selectedEvent && (\n <>\n <div className='fixed inset-0 z-40 cursor-default' onClick={closePopover} />\n <div\n className='pointer-events-auto absolute z-50 cursor-pointer rounded-lg border bg-popover p-2 shadow-lg hover:bg-accent'\n style={{\n top: selectedEvent.position.top - HEADER_HEIGHT + 10,\n left: selectedEvent.position.left - LEFT_COL_WIDTH + 10,\n width: 320,\n }}\n onClick={handlePopoverClick}\n >\n <div className='mb-1 -mx-2 -mt-2 flex items-center justify-between rounded-t-lg bg-primary px-2 py-1 text-primary-foreground'>\n <span className='text-sm font-bold'>\n {format(selectedEvent.event.start, 'HH:mm')} -{' '}\n {format(selectedEvent.event.end, 'HH:mm')}\n </span>\n </div>\n <div className='grid gap-1'>\n <div className='text-sm font-semibold'>{selectedEvent.event.title}</div>\n {selectedEvent.event.description && (\n <div className='text-xs text-muted-foreground'>\n {selectedEvent.event.description}\n </div>\n )}\n </div>\n </div>\n </>\n )}\n\n <div\n className='absolute'\n style={{\n top: HEADER_HEIGHT,\n left: LEFT_COL_WIDTH,\n width: totalContentWidth,\n height: totalContentHeight,\n }}\n >\n {resources.map((resource) => (\n <div\n key={resource.id}\n className='relative flex box-border border-b bg-background'\n style={{ height: displayRowHeight, width: totalContentWidth }}\n >\n {timeSlots.map((time, colIdx) => {\n const isHourStart = getMinutes(time) === 0;\n return (\n <button\n key={colIdx}\n type='button'\n disabled={!onEmptySlotClick}\n aria-label={`${resource.title} ${format(time, 'yyyy-MM-dd HH:mm')}`}\n className={cn(\n 'pointer-events-auto box-border h-full flex-none border-r hover:bg-muted/10',\n isHourStart ? 'border-border' : 'border-border border-dashed',\n !isBusinessHour(time, resource) && 'bg-muted/20',\n )}\n style={{ width: cellWidth }}\n onClick={() => onEmptySlotClick && onEmptySlotClick(resource.id, time)}\n />\n );\n })}\n\n {eventsByResource.get(resource.id)?.map(({ event, start, end, lane }) => {\n const { left, width } = calculatePosition(start, end);\n return (\n <div\n key={event.id}\n data-event-id={event.id}\n role='button'\n tabIndex={0}\n onKeyDown={(e) => activateOnKey(e, () => onEventClick?.(event))}\n className={cn(\n 'pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:brightness-95',\n event.color || 'bg-primary text-primary-foreground',\n )}\n style={{\n left,\n width: Math.max(1, width - 2),\n top: lane * rowHeight + 4,\n height: rowHeight - 8,\n }}\n onClick={(e) => handleEventClick(e, event)}\n title={`${event.title} (${format(event.start, 'HH:mm')} - ${format(\n event.end,\n 'HH:mm',\n )})`}\n >\n {components?.event ? (\n components.event({ event })\n ) : (\n <>\n <div className='truncate font-semibold'>{event.title}</div>\n {width > 40 && event.description && (\n <div className='truncate'>{event.description}</div>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -291,7 +291,7 @@ function y({ date: y, resources: b, events: x, startHour: S = 9, endHour: C = 23
291
291
  role: "button",
292
292
  tabIndex: 0,
293
293
  onKeyDown: (e) => t(e, () => D?.(n)),
294
- className: e("pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:opacity-90", n.color || "bg-primary text-primary-foreground"),
294
+ className: e("pointer-events-auto absolute z-10 select-none overflow-hidden rounded px-1 text-xs text-white shadow-sm hover:brightness-95", n.color || "bg-primary text-primary-foreground"),
295
295
  style: {
296
296
  left: l,
297
297
  width: Math.max(1, d - 2),
@@ -304,7 +304,7 @@ function y({ date: y, resources: b, events: x, startHour: S = 9, endHour: C = 23
304
304
  className: "truncate font-semibold",
305
305
  children: n.title
306
306
  }), d > 40 && n.description && /* @__PURE__ */ o("div", {
307
- className: "truncate opacity-90",
307
+ className: "truncate",
308
308
  children: n.description
309
309
  })] })
310
310
  }, n.id);