@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,41 +1,30 @@
1
1
  import { FilterProps, FilterResult } from './filter-types.cjs';
2
2
  /**
3
- * Filter Component
4
- * フィルターUIコンポーネント
5
- *
6
- * Schema-based filter UI with type inference.
7
- * スキーマからフィールド型を推論し、適切なフィルター入力を自動選択します。
8
- * MongoDBスタイルのフィルターオブジェクトを生成し、useFindと連携できます。
9
- *
10
- * ## AI/Automation Features
11
- * - `data-testid`: Container, apply/reset buttons
12
- * - Pattern: `{testId}`, `{testId}-apply`, `{testId}-reset`
13
- * - Filter inputs auto-generate testId from field name
14
- *
15
- * @example Basic usage with testId
3
+ * Renders schema-derived filter inputs and emits a MongoDB-style filter object.
4
+ * @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.
5
+ * @returns A responsive filter grid with apply/reset buttons when autoApply is false.
6
+ * @remarks Import Appkit CSS. This component creates local filter state; the host must apply the
7
+ * emitted filter to its own data query. autoApply defaults to true; false defers onChange
8
+ * until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.
9
+ * With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.
10
+ * Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.
11
+ * @example
16
12
  * ```tsx
17
- * <Filter
18
- * testId="user-filter"
19
- * schema={userSchema}
20
- * fields={['name', 'age', 'status']}
21
- * showPlaceholderOnAll={true}
22
- * onChange={(filter) => setQueryFilter(filter)}
23
- * />
24
- * // Container: data-testid="user-filter"
25
- * // Apply button: data-testid="user-filter-apply"
26
- * // Reset button: data-testid="user-filter-reset"
27
- * // Filter inputs auto-generate testId from field name
13
+ * import { useState } from 'react';
14
+ * import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';
15
+ * import '@alneas/appkit-react/styles';
28
16
  *
29
- * @example Customizing filter widths
30
- * ```tsx
31
- * <Filter
32
- * schema={userSchema}
33
- * fields={[
34
- * { field: 'name', className: 'min-w-[300px]' }, // Specific field
35
- * 'status'
36
- * ]}
37
- * inputClassName="min-w-[200px]" // Global default for this instance
38
- * />
17
+ * const schema: CollectionSchema = {
18
+ * name: { type: 'string', label: 'Name' },
19
+ * status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },
20
+ * };
21
+ * export function UserFilter() {
22
+ * const [filter, setFilter] = useState<FilterResult>({});
23
+ * return <><SchemaFilter testId="user-filter" schema={schema} autoApply={false}
24
+ * fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}
25
+ * inputClassName="min-w-[200px]" onChange={setFilter} />
26
+ * <pre>{JSON.stringify(filter)}</pre></>;
27
+ * }
39
28
  * ```
40
29
  */
41
30
  export declare function SchemaFilter({ testId, schema, fields: fieldSpecs, defaultValues, onChange, autoApply, applyLabel, resetLabel, className, labelPosition: globalLabelPosition, labelWidth: globalLabelWidth, overlappingLabel: globalOverlappingLabel, showPlaceholderOnAll: globalShowPlaceholderOnAll, inputClassName: globalInputClassName, locale, // Add locale to destructured props
@@ -1,41 +1,30 @@
1
1
  import { FilterProps, FilterResult } from './filter-types.js';
2
2
  /**
3
- * Filter Component
4
- * フィルターUIコンポーネント
5
- *
6
- * Schema-based filter UI with type inference.
7
- * スキーマからフィールド型を推論し、適切なフィルター入力を自動選択します。
8
- * MongoDBスタイルのフィルターオブジェクトを生成し、useFindと連携できます。
9
- *
10
- * ## AI/Automation Features
11
- * - `data-testid`: Container, apply/reset buttons
12
- * - Pattern: `{testId}`, `{testId}-apply`, `{testId}-reset`
13
- * - Filter inputs auto-generate testId from field name
14
- *
15
- * @example Basic usage with testId
3
+ * Renders schema-derived filter inputs and emits a MongoDB-style filter object.
4
+ * @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.
5
+ * @returns A responsive filter grid with apply/reset buttons when autoApply is false.
6
+ * @remarks Import Appkit CSS. This component creates local filter state; the host must apply the
7
+ * emitted filter to its own data query. autoApply defaults to true; false defers onChange
8
+ * until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.
9
+ * With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.
10
+ * Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.
11
+ * @example
16
12
  * ```tsx
17
- * <Filter
18
- * testId="user-filter"
19
- * schema={userSchema}
20
- * fields={['name', 'age', 'status']}
21
- * showPlaceholderOnAll={true}
22
- * onChange={(filter) => setQueryFilter(filter)}
23
- * />
24
- * // Container: data-testid="user-filter"
25
- * // Apply button: data-testid="user-filter-apply"
26
- * // Reset button: data-testid="user-filter-reset"
27
- * // Filter inputs auto-generate testId from field name
13
+ * import { useState } from 'react';
14
+ * import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';
15
+ * import '@alneas/appkit-react/styles';
28
16
  *
29
- * @example Customizing filter widths
30
- * ```tsx
31
- * <Filter
32
- * schema={userSchema}
33
- * fields={[
34
- * { field: 'name', className: 'min-w-[300px]' }, // Specific field
35
- * 'status'
36
- * ]}
37
- * inputClassName="min-w-[200px]" // Global default for this instance
38
- * />
17
+ * const schema: CollectionSchema = {
18
+ * name: { type: 'string', label: 'Name' },
19
+ * status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },
20
+ * };
21
+ * export function UserFilter() {
22
+ * const [filter, setFilter] = useState<FilterResult>({});
23
+ * return <><SchemaFilter testId="user-filter" schema={schema} autoApply={false}
24
+ * fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}
25
+ * inputClassName="min-w-[200px]" onChange={setFilter} />
26
+ * <pre>{JSON.stringify(filter)}</pre></>;
27
+ * }
39
28
  * ```
40
29
  */
41
30
  export declare function SchemaFilter({ testId, schema, fields: fieldSpecs, defaultValues, onChange, autoApply, applyLabel, resetLabel, className, labelPosition: globalLabelPosition, labelWidth: globalLabelWidth, overlappingLabel: globalOverlappingLabel, showPlaceholderOnAll: globalShowPlaceholderOnAll, inputClassName: globalInputClassName, locale, // Add locale to destructured props
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","names":["m.filter_apply","m.filter_reset","SchemaFilter","fieldSpecs","globalLabelPosition","globalLabelWidth","globalOverlappingLabel","globalShowPlaceholderOnAll","globalInputClassName","useFilter","autoApply","onChange","displayApplyLabel","applyLabel","filter_apply","displayResetLabel","resetLabel","filter_reset","handleApply","filter","handleReset","reset","testId","cn","className","fields","FieldFactory","field","FilterInput","values","setField","value","debounceMs","Button","isEmpty"],"sources":["../../../../src/tools/components/filter/filter.tsx"],"sourcesContent":["/**\n * @fileoverview フィルターUIコンポーネント\n *\n * スキーマベースのフィルターUIを提供します。\n * useFilterフックと各種フィルター入力を組み合わせて、\n * 完全なフィルタリングUIを構築します。\n *\n * @module filter/filter\n */\n\n'use client';\n\nimport * as m from '../../paraglide/messages.js';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport { FilterInput } from './filter-inputs';\nimport { useFilter } from './use-filter';\nimport { FilterProps, FilterResult } from './filter-types';\nimport { FieldFactory } from '../ui/field';\n\n// =============================================================================\n// Filter Component\n// =============================================================================\n\n/**\n * Filter Component\n * フィルターUIコンポーネント\n *\n * Schema-based filter UI with type inference.\n * スキーマからフィールド型を推論し、適切なフィルター入力を自動選択します。\n * MongoDBスタイルのフィルターオブジェクトを生成し、useFindと連携できます。\n *\n * ## AI/Automation Features\n * - `data-testid`: Container, apply/reset buttons\n * - Pattern: `{testId}`, `{testId}-apply`, `{testId}-reset`\n * - Filter inputs auto-generate testId from field name\n *\n * @example Basic usage with testId\n * ```tsx\n * <Filter\n * testId=\"user-filter\"\n * schema={userSchema}\n * fields={['name', 'age', 'status']}\n * showPlaceholderOnAll={true}\n * onChange={(filter) => setQueryFilter(filter)}\n * />\n * // Container: data-testid=\"user-filter\"\n * // Apply button: data-testid=\"user-filter-apply\"\n * // Reset button: data-testid=\"user-filter-reset\"\n * // Filter inputs auto-generate testId from field name\n *\n * @example Customizing filter widths\n * ```tsx\n * <Filter\n * schema={userSchema}\n * fields={[\n * { field: 'name', className: 'min-w-[300px]' }, // Specific field\n * 'status'\n * ]}\n * inputClassName=\"min-w-[200px]\" // Global default for this instance\n * />\n * ```\n */\nexport function SchemaFilter({\n testId,\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange,\n autoApply = true,\n applyLabel = '適用',\n resetLabel,\n className,\n labelPosition: globalLabelPosition,\n labelWidth: globalLabelWidth,\n overlappingLabel: globalOverlappingLabel,\n showPlaceholderOnAll: globalShowPlaceholderOnAll,\n inputClassName: globalInputClassName,\n locale, // Add locale to destructured props\n debounceMs,\n}: FilterProps) {\n const { values, filter, fields, setField, reset, isEmpty } = useFilter({\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange: autoApply ? onChange : undefined,\n debounceMs,\n });\n\n const displayApplyLabel = applyLabel || m.filter_apply();\n const displayResetLabel = resetLabel || m.filter_reset();\n\n /**\n * 適用ボタンのハンドラー\n */\n const handleApply = () => {\n onChange?.(filter);\n };\n\n /**\n * リセットボタンのハンドラー\n */\n const handleReset = () => {\n reset();\n if (!autoApply) {\n onChange?.({});\n }\n };\n\n return (\n <div\n data-testid={testId}\n className={cn(\n 'w-full',\n 'grid gap-x-4 gap-y-2',\n // Responsive grid: 1 column on small screens, 2 columns on sm+\n 'grid-cols-1 sm:grid-cols-2',\n className,\n )}\n >\n {fields.map((field) => (\n <FieldFactory\n key={field.field}\n data-testid={testId ? `${testId}-${field.field}` : undefined}\n label={field.label}\n labelPosition={field.labelPosition || globalLabelPosition || 'responsive'}\n labelWidth={field.labelWidth || globalLabelWidth}\n overlappingLabel={\n field.overlappingLabel !== undefined ? field.overlappingLabel : globalOverlappingLabel\n }\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n >\n <FilterInput\n field={field}\n value={values[field.field]}\n onChange={(value) => setField(field.field, value)}\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n className={field.className || globalInputClassName}\n locale={locale} // Pass locale down\n debounceMs={field.debounceMs !== undefined ? field.debounceMs : debounceMs}\n />\n </FieldFactory>\n ))}\n\n {/* ボタン(autoApply=falseの場合のみ表示) */}\n {!autoApply && (\n <div className='flex items-end gap-2'>\n <Button\n testId={testId ? `${testId}-apply` : undefined}\n onClick={handleApply}\n variant='default'\n >\n {displayApplyLabel}\n </Button>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='outline'\n disabled={isEmpty}\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n\n {/* autoApply時のリセットボタン */}\n {autoApply && !isEmpty && (\n <div className='flex items-end'>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='ghost'\n size='sm'\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\nSchemaFilter.displayName = 'SchemaFilter';\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport type { FilterProps, FilterResult };\n"],"mappings":";;;;;;;;;;;AA+DA,SAAgBE,EAAa,EAC3B,WACA,WACA,QAAQC,GACR,kBACA,aACA,eAAY,IACZ,gBAAa,MACb,eACA,cACA,eAAeC,GACf,YAAYC,GACZ,kBAAkBC,GAClB,sBAAsBC,GACtB,gBAAgBC,GAChB,WACA,iBACc;CACd,IAAM,EAAE,WAAQ,WAAQ,WAAQ,aAAU,UAAO,eAAYC,EAAU;EACrE;EACA,QAAQN;EACR;EACA,UAAUO,IAAYC,IAAW,KAAA;EACjC;CACF,CAAC,GAEKC,IAAoBC,KAAcb,EAAe,GACjDe,IAAoBC,KAAcf,EAAe,GAKjDiB,UAAoB;EACxB,IAAWC,CAAM;CACnB,GAKMC,UAAoB;EAExB,AADAC,EAAM,GACDX,KACHC,IAAW,CAAC,CAAC;CAEjB;CAEA,OACE,kBAAC,OAAD;EACE,eAAaW;EACb,WAAWC,EACT,UACA,wBAEA,8BACAC,CACF;EARF,UAAA;GAUGC,EAAO,KAAK,MACX,kBAACC,GAAD;IAEE,eAAaJ,IAAS,GAAGA,EAAO,GAAGK,EAAM,UAAU,KAAA;IACnD,OAAOA,EAAM;IACb,eAAeA,EAAM,iBAAiBvB,KAAuB;IAC7D,YAAYuB,EAAM,cAActB;IAChC,kBACEsB,EAAM,qBAAqB,KAAA,IAAqCrB,IAAzBqB,EAAM;IAE/C,sBACEA,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;IAIZ,UAAA,kBAACC,GAAD;KACS;KACP,OAAOC,EAAOF,EAAM;KACpB,WAAW,MAAUG,EAASH,EAAM,OAAOI,CAAK;KAChD,sBACEJ,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;KAGZ,WAAWA,EAAM,aAAanB;KACtB;KACR,YAAYmB,EAAM,eAAe,KAAA,IAA+BK,IAAnBL,EAAM;IACpD,CAAA;GACW,GA3BPA,EAAM,KA2BC,CACf;GAGA,CAACjB,KACA,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACuB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASJ;KACT,SAAQ;KAEP,UAAAN;IACK,CAAA,GACR,kBAACqB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,UAAUc;KAET,UAAAnB;IACK,CAAA,CACL;;GAINL,KAAa,CAACwB,KACb,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACD,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,MAAK;KAEJ,UAAAL;IACK,CAAA;GACL,CAAA;EAEJ;;AAET;AACA,EAAa,cAAc"}
1
+ {"version":3,"file":"filter.js","names":["m.filter_apply","m.filter_reset","SchemaFilter","fieldSpecs","globalLabelPosition","globalLabelWidth","globalOverlappingLabel","globalShowPlaceholderOnAll","globalInputClassName","useFilter","autoApply","onChange","displayApplyLabel","applyLabel","filter_apply","displayResetLabel","resetLabel","filter_reset","handleApply","filter","handleReset","reset","testId","cn","className","fields","FieldFactory","field","FilterInput","values","setField","value","debounceMs","Button","isEmpty"],"sources":["../../../../src/tools/components/filter/filter.tsx"],"sourcesContent":["/**\n * @fileoverview フィルターUIコンポーネント\n *\n * スキーマベースのフィルターUIを提供します。\n * useFilterフックと各種フィルター入力を組み合わせて、\n * 完全なフィルタリングUIを構築します。\n *\n * @module filter/filter\n */\n\n'use client';\n\nimport * as m from '../../paraglide/messages.js';\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '../ui/button';\nimport { FilterInput } from './filter-inputs';\nimport { useFilter } from './use-filter';\nimport { FilterProps, FilterResult } from './filter-types';\nimport { FieldFactory } from '../ui/field';\n\n// =============================================================================\n// Filter Component\n// =============================================================================\n\n/**\n * Renders schema-derived filter inputs and emits a MongoDB-style filter object.\n * @param props - Field specifications, optional collection schema, labels and change callback; see {@link FilterProps}.\n * @returns A responsive filter grid with apply/reset buttons when autoApply is false.\n * @remarks Import Appkit CSS. This component creates local filter state; the host must apply the\n * emitted filter to its own data query. autoApply defaults to true; false defers onChange\n * until Apply or Reset. Reset emits an empty filter in manual mode. layout is currently ignored.\n * With testId, the root uses data-testid=testId and field wrappers use `${testId}-${field}`.\n * Manual apply/reset buttons use `${testId}-apply` and `${testId}-reset`; they are absent in auto mode.\n * @example\n * ```tsx\n * import { useState } from 'react';\n * import { SchemaFilter, type CollectionSchema, type FilterResult } from '@alneas/appkit-react/tools/filter';\n * import '@alneas/appkit-react/styles';\n *\n * const schema: CollectionSchema = {\n * name: { type: 'string', label: 'Name' },\n * status: { type: 'enum', enum: ['active', 'inactive'], label: 'Status' },\n * };\n * export function UserFilter() {\n * const [filter, setFilter] = useState<FilterResult>({});\n * return <><SchemaFilter testId=\"user-filter\" schema={schema} autoApply={false}\n * fields={[{ field: 'name', className: 'min-w-[300px]' }, 'status']}\n * inputClassName=\"min-w-[200px]\" onChange={setFilter} />\n * <pre>{JSON.stringify(filter)}</pre></>;\n * }\n * ```\n */\nexport function SchemaFilter({\n testId,\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange,\n autoApply = true,\n applyLabel = '適用',\n resetLabel,\n className,\n labelPosition: globalLabelPosition,\n labelWidth: globalLabelWidth,\n overlappingLabel: globalOverlappingLabel,\n showPlaceholderOnAll: globalShowPlaceholderOnAll,\n inputClassName: globalInputClassName,\n locale, // Add locale to destructured props\n debounceMs,\n}: FilterProps) {\n const { values, filter, fields, setField, reset, isEmpty } = useFilter({\n schema,\n fields: fieldSpecs,\n defaultValues,\n onChange: autoApply ? onChange : undefined,\n debounceMs,\n });\n\n const displayApplyLabel = applyLabel || m.filter_apply();\n const displayResetLabel = resetLabel || m.filter_reset();\n\n /**\n * 適用ボタンのハンドラー\n */\n const handleApply = () => {\n onChange?.(filter);\n };\n\n /**\n * リセットボタンのハンドラー\n */\n const handleReset = () => {\n reset();\n if (!autoApply) {\n onChange?.({});\n }\n };\n\n return (\n <div\n data-testid={testId}\n className={cn(\n 'w-full',\n 'grid gap-x-4 gap-y-2',\n // Responsive grid: 1 column on small screens, 2 columns on sm+\n 'grid-cols-1 sm:grid-cols-2',\n className,\n )}\n >\n {fields.map((field) => (\n <FieldFactory\n key={field.field}\n data-testid={testId ? `${testId}-${field.field}` : undefined}\n label={field.label}\n labelPosition={field.labelPosition || globalLabelPosition || 'responsive'}\n labelWidth={field.labelWidth || globalLabelWidth}\n overlappingLabel={\n field.overlappingLabel !== undefined ? field.overlappingLabel : globalOverlappingLabel\n }\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n >\n <FilterInput\n field={field}\n value={values[field.field]}\n onChange={(value) => setField(field.field, value)}\n showPlaceholderOnAll={\n field.showPlaceholderOnAll !== undefined\n ? field.showPlaceholderOnAll\n : globalShowPlaceholderOnAll\n }\n className={field.className || globalInputClassName}\n locale={locale} // Pass locale down\n debounceMs={field.debounceMs !== undefined ? field.debounceMs : debounceMs}\n />\n </FieldFactory>\n ))}\n\n {/* ボタン(autoApply=falseの場合のみ表示) */}\n {!autoApply && (\n <div className='flex items-end gap-2'>\n <Button\n testId={testId ? `${testId}-apply` : undefined}\n onClick={handleApply}\n variant='default'\n >\n {displayApplyLabel}\n </Button>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='outline'\n disabled={isEmpty}\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n\n {/* autoApply時のリセットボタン */}\n {autoApply && !isEmpty && (\n <div className='flex items-end'>\n <Button\n testId={testId ? `${testId}-reset` : undefined}\n onClick={handleReset}\n variant='ghost'\n size='sm'\n >\n {displayResetLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\nSchemaFilter.displayName = 'SchemaFilter';\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport type { FilterProps, FilterResult };\n"],"mappings":";;;;;;;;;;;AAoDA,SAAgBE,EAAa,EAC3B,WACA,WACA,QAAQC,GACR,kBACA,aACA,eAAY,IACZ,gBAAa,MACb,eACA,cACA,eAAeC,GACf,YAAYC,GACZ,kBAAkBC,GAClB,sBAAsBC,GACtB,gBAAgBC,GAChB,WACA,iBACc;CACd,IAAM,EAAE,WAAQ,WAAQ,WAAQ,aAAU,UAAO,eAAYC,EAAU;EACrE;EACA,QAAQN;EACR;EACA,UAAUO,IAAYC,IAAW,KAAA;EACjC;CACF,CAAC,GAEKC,IAAoBC,KAAcb,EAAe,GACjDe,IAAoBC,KAAcf,EAAe,GAKjDiB,UAAoB;EACxB,IAAWC,CAAM;CACnB,GAKMC,UAAoB;EAExB,AADAC,EAAM,GACDX,KACHC,IAAW,CAAC,CAAC;CAEjB;CAEA,OACE,kBAAC,OAAD;EACE,eAAaW;EACb,WAAWC,EACT,UACA,wBAEA,8BACAC,CACF;EARF,UAAA;GAUGC,EAAO,KAAK,MACX,kBAACC,GAAD;IAEE,eAAaJ,IAAS,GAAGA,EAAO,GAAGK,EAAM,UAAU,KAAA;IACnD,OAAOA,EAAM;IACb,eAAeA,EAAM,iBAAiBvB,KAAuB;IAC7D,YAAYuB,EAAM,cAActB;IAChC,kBACEsB,EAAM,qBAAqB,KAAA,IAAqCrB,IAAzBqB,EAAM;IAE/C,sBACEA,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;IAIZ,UAAA,kBAACC,GAAD;KACS;KACP,OAAOC,EAAOF,EAAM;KACpB,WAAW,MAAUG,EAASH,EAAM,OAAOI,CAAK;KAChD,sBACEJ,EAAM,yBAAyB,KAAA,IAE3BpB,IADAoB,EAAM;KAGZ,WAAWA,EAAM,aAAanB;KACtB;KACR,YAAYmB,EAAM,eAAe,KAAA,IAA+BK,IAAnBL,EAAM;IACpD,CAAA;GACW,GA3BPA,EAAM,KA2BC,CACf;GAGA,CAACjB,KACA,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACuB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASJ;KACT,SAAQ;KAEP,UAAAN;IACK,CAAA,GACR,kBAACqB,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,UAAUc;KAET,UAAAnB;IACK,CAAA,CACL;;GAINL,KAAa,CAACwB,KACb,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACD,GAAD;KACE,QAAQX,IAAS,GAAGA,EAAO,UAAU,KAAA;KACrC,SAASF;KACT,SAAQ;KACR,MAAK;KAEJ,UAAAL;IACK,CAAA;GACL,CAAA;EAEJ;;AAET;AACA,EAAa,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"EnhancedDetailPage.cjs","names":["useForm","createAjvResolver","React","_Fragment","SchemaDetailPage","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","FormActionBar","Button","FormProvider","FormContainer","require_runtime","require_ui_components_ui_button_components","require_ui_components_ui_collapsible","require_common_actions_create","require_common_actions_delete","require_common_actions_edit","require_common_actions_update","require_common_advanced","require_tools_components_form_form_container","require_tools_components_form_form_action_bar","require_tools_lib_schema_ajv","require_tools_components_schema_SchemaDetailPage","react_jsx_runtime","react","lucide_react","react_hook_form","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","values","validation","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","children","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","mode","submitLabel","onCancel","onDelete","onEdit","content","onSubmit","data","containerLayout"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** 表示モード */\n mode: DetailMode;\n /** 現在の値 */\n values?: Partial<TFieldValues>;\n /** 送信ボタンのラベル */\n submitLabel?: 'create' | 'update';\n /** フォーム送信時のハンドラ */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** キャンセル時のハンドラ */\n onCancel?: () => void;\n /** 削除時のハンドラ */\n onDelete?: () => void;\n /** 編集モード切り替えハンドラ */\n onEdit?: () => void;\n /** 編集ボタンを表示 */\n showEditButton?: boolean;\n /** グループ表示スタイル */\n groupDisplay?: GroupDisplay;\n /** リレーションデータ */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * 中央揃えコンテナレイアウトを使用\n * @default true\n */\n containerLayout?: boolean;\n /**\n * コンテナの最大幅\n * @default \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * スティッキーアクションバーを有効化\n * @default false\n */\n stickyActions?: boolean;\n /**\n * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)\n * @default true\n */\n progressiveDisclosure?: boolean;\n /**\n * 保存状態インジケーター\n */\n saveStatus?: SaveStatus;\n /**\n * レスポンシブグリッドを使用 (field.width を考慮)\n * @default true\n */\n useGrid?: boolean;\n /**\n * グリッドの列数\n * @default 2\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * カスタムフォームコンテンツ (schema による自動生成を上書き)\n */\n children?: React.ReactNode;\n\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * デスクトップ最適化された詳細/編集ページコンポーネント\n *\n * UXベストプラクティスに基づく拡張レイアウト機能:\n * - 中央揃えの読みやすいコンテナ幅\n * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)\n * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)\n * - スティッキーアクションバー\n * - 保存状態インジケーター\n *\n * @example\n * ```tsx\n * <EnhancedDetailPage\n * schema={userSchema}\n * mode=\"edit\"\n * values={userData}\n * onSubmit={handleSave}\n * containerLayout\n * stickyActions\n * progressiveDisclosure\n * />\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EnhancedDetailPage.cjs","names":["useForm","createAjvResolver","React","_Fragment","SchemaDetailPage","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","FormActionBar","Button","FormProvider","FormContainer","require_runtime","require_ui_components_ui_button_components","require_ui_components_ui_collapsible","require_common_actions_create","require_common_actions_delete","require_common_actions_edit","require_common_actions_update","require_common_advanced","require_tools_components_form_form_container","require_tools_components_form_form_action_bar","require_tools_lib_schema_ajv","require_tools_components_schema_SchemaDetailPage","react_jsx_runtime","react","lucide_react","react_hook_form","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","values","validation","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","children","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","mode","submitLabel","onCancel","onDelete","onEdit","content","onSubmit","data","containerLayout"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\n/**\n * Form values, schema and presentation settings for {@link EnhancedDetailPage}.\n * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.\n */\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** View renders details; edit renders form inputs. */\n mode: DetailMode;\n /** Initial values and later reset values; later updates preserve dirty fields. */\n values?: Partial<TFieldValues>;\n /** Submit action wording; defaults to update. */\n submitLabel?: 'create' | 'update';\n /** Called with form values after configured validation on submit; the host performs persistence. */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** Called by the cancel action; the host handles navigation or rollback. */\n onCancel?: () => void;\n /** Called by the delete action; the host performs deletion. */\n onDelete?: () => void;\n /** Called by the edit action; the host updates mode. */\n onEdit?: () => void;\n /** Shows the view-mode edit action when true; defaults to false. */\n showEditButton?: boolean;\n /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */\n groupDisplay?: GroupDisplay;\n /** Related-field display and selection configuration forwarded to SchemaDetailPage. */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * Wrap content in a centered FormContainer.\n * @defaultValue true\n */\n containerLayout?: boolean;\n /**\n * Maximum width preset when containerLayout is enabled.\n * @defaultValue \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * Use the sticky FormActionBar and hide ordinary generated actions.\n * @defaultValue false\n */\n stickyActions?: boolean;\n /**\n * Separate fields marked x-ui.advanced into a section initially collapsed.\n * @defaultValue true\n */\n progressiveDisclosure?: boolean;\n /**\n * Host-supplied save indicator; defaults to idle and does not track persistence automatically.\n */\n saveStatus?: SaveStatus;\n /**\n * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.\n * @defaultValue true\n */\n useGrid?: boolean;\n /**\n * Reserved compatibility option; currently ignored. Changing it does not set columns.\n * Use useGrid to select the supported layout behavior.\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * Replace generated content. The caller supplies its own form, submission wiring and providers.\n */\n children?: React.ReactNode;\n\n /** Additional classes on the outer container. */\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.\n * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.\n * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.\n * @returns The detail content inside a centered container or plain div.\n * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider\n * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.\n * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.\n * Custom children replace generated content and must supply their own form/provider wiring.\n * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,\n * without guaranteeing an exact number of columns. No fixed two-column default is implemented.\n * @example\n * ```tsx\n * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';\n * import '@alneas/appkit-react/styles';\n *\n * export function UserDetails() {\n * return <EnhancedDetailPage<{ name: string }> mode=\"view\"\n * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}\n * values={{ name: 'Ada' }} />;\n * }\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -7,92 +7,97 @@ import { RelatedFieldConfig } from '../ui/form.cjs';
7
7
  import * as React from 'react';
8
8
  type DetailMode = 'view' | 'edit';
9
9
  type GroupDisplay = 'heading' | 'card' | 'dropdown';
10
+ /**
11
+ * Form values, schema and presentation settings for {@link EnhancedDetailPage}.
12
+ * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.
13
+ */
10
14
  interface EnhancedDetailPageProps<TFieldValues extends FieldValues> {
11
15
  /** Opt into whole-record schema validation. */
12
16
  validation?: SchemaFormValidationOptions;
13
17
  /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */
14
18
  schema: JSONSchema;
15
- /** 表示モード */
19
+ /** View renders details; edit renders form inputs. */
16
20
  mode: DetailMode;
17
- /** 現在の値 */
21
+ /** Initial values and later reset values; later updates preserve dirty fields. */
18
22
  values?: Partial<TFieldValues>;
19
- /** 送信ボタンのラベル */
23
+ /** Submit action wording; defaults to update. */
20
24
  submitLabel?: 'create' | 'update';
21
- /** フォーム送信時のハンドラ */
25
+ /** Called with form values after configured validation on submit; the host performs persistence. */
22
26
  onSubmit?: (values: TFieldValues) => void | Promise<void>;
23
- /** キャンセル時のハンドラ */
27
+ /** Called by the cancel action; the host handles navigation or rollback. */
24
28
  onCancel?: () => void;
25
- /** 削除時のハンドラ */
29
+ /** Called by the delete action; the host performs deletion. */
26
30
  onDelete?: () => void;
27
- /** 編集モード切り替えハンドラ */
31
+ /** Called by the edit action; the host updates mode. */
28
32
  onEdit?: () => void;
29
- /** 編集ボタンを表示 */
33
+ /** Shows the view-mode edit action when true; defaults to false. */
30
34
  showEditButton?: boolean;
31
- /** グループ表示スタイル */
35
+ /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */
32
36
  groupDisplay?: GroupDisplay;
33
- /** リレーションデータ */
37
+ /** Related-field display and selection configuration forwarded to SchemaDetailPage. */
34
38
  relations?: Record<string, RelatedFieldConfig>;
35
39
  /**
36
- * 中央揃えコンテナレイアウトを使用
37
- * @default true
40
+ * Wrap content in a centered FormContainer.
41
+ * @defaultValue true
38
42
  */
39
43
  containerLayout?: boolean;
40
44
  /**
41
- * コンテナの最大幅
42
- * @default "4xl"
45
+ * Maximum width preset when containerLayout is enabled.
46
+ * @defaultValue "4xl"
43
47
  */
44
48
  maxWidth?: FormContainerWidth;
45
49
  /**
46
- * スティッキーアクションバーを有効化
47
- * @default false
50
+ * Use the sticky FormActionBar and hide ordinary generated actions.
51
+ * @defaultValue false
48
52
  */
49
53
  stickyActions?: boolean;
50
54
  /**
51
- * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)
52
- * @default true
55
+ * Separate fields marked x-ui.advanced into a section initially collapsed.
56
+ * @defaultValue true
53
57
  */
54
58
  progressiveDisclosure?: boolean;
55
59
  /**
56
- * 保存状態インジケーター
60
+ * Host-supplied save indicator; defaults to idle and does not track persistence automatically.
57
61
  */
58
62
  saveStatus?: SaveStatus;
59
63
  /**
60
- * レスポンシブグリッドを使用 (field.width を考慮)
61
- * @default true
64
+ * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.
65
+ * @defaultValue true
62
66
  */
63
67
  useGrid?: boolean;
64
68
  /**
65
- * グリッドの列数
66
- * @default 2
69
+ * Reserved compatibility option; currently ignored. Changing it does not set columns.
70
+ * Use useGrid to select the supported layout behavior.
67
71
  */
68
72
  gridColumns?: 1 | 2 | 3;
69
73
  /**
70
- * カスタムフォームコンテンツ (schema による自動生成を上書き)
74
+ * Replace generated content. The caller supplies its own form, submission wiring and providers.
71
75
  */
72
76
  children?: React.ReactNode;
77
+ /** Additional classes on the outer container. */
73
78
  className?: string;
74
79
  }
75
80
  /**
76
- * デスクトップ最適化された詳細/編集ページコンポーネント
77
- *
78
- * UXベストプラクティスに基づく拡張レイアウト機能:
79
- * - 中央揃えの読みやすいコンテナ幅
80
- * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)
81
- * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)
82
- * - スティッキーアクションバー
83
- * - 保存状態インジケーター
84
- *
81
+ * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.
82
+ * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.
83
+ * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.
84
+ * @returns The detail content inside a centered container or plain div.
85
+ * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider
86
+ * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.
87
+ * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.
88
+ * Custom children replace generated content and must supply their own form/provider wiring.
89
+ * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,
90
+ * without guaranteeing an exact number of columns. No fixed two-column default is implemented.
85
91
  * @example
86
92
  * ```tsx
87
- * <EnhancedDetailPage
88
- * schema={userSchema}
89
- * mode="edit"
90
- * values={userData}
91
- * onSubmit={handleSave}
92
- * containerLayout
93
- * stickyActions
94
- * progressiveDisclosure
95
- * />
93
+ * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';
94
+ * import '@alneas/appkit-react/styles';
95
+ *
96
+ * export function UserDetails() {
97
+ * return <EnhancedDetailPage<{ name: string }> mode="view"
98
+ * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}
99
+ * values={{ name: 'Ada' }} />;
100
+ * }
96
101
  * ```
97
102
  */
98
103
  export declare function EnhancedDetailPage<TFieldValues extends FieldValues>({ schema, validation, mode, values, submitLabel, onSubmit, onCancel, onDelete, onEdit, showEditButton, groupDisplay, relations, containerLayout, maxWidth, stickyActions, progressiveDisclosure, saveStatus, useGrid, children, className, }: EnhancedDetailPageProps<TFieldValues>): React.JSX.Element;
@@ -7,92 +7,97 @@ import { RelatedFieldConfig } from '../ui/form.js';
7
7
  import * as React from 'react';
8
8
  type DetailMode = 'view' | 'edit';
9
9
  type GroupDisplay = 'heading' | 'card' | 'dropdown';
10
+ /**
11
+ * Form values, schema and presentation settings for {@link EnhancedDetailPage}.
12
+ * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.
13
+ */
10
14
  interface EnhancedDetailPageProps<TFieldValues extends FieldValues> {
11
15
  /** Opt into whole-record schema validation. */
12
16
  validation?: SchemaFormValidationOptions;
13
17
  /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */
14
18
  schema: JSONSchema;
15
- /** 表示モード */
19
+ /** View renders details; edit renders form inputs. */
16
20
  mode: DetailMode;
17
- /** 現在の値 */
21
+ /** Initial values and later reset values; later updates preserve dirty fields. */
18
22
  values?: Partial<TFieldValues>;
19
- /** 送信ボタンのラベル */
23
+ /** Submit action wording; defaults to update. */
20
24
  submitLabel?: 'create' | 'update';
21
- /** フォーム送信時のハンドラ */
25
+ /** Called with form values after configured validation on submit; the host performs persistence. */
22
26
  onSubmit?: (values: TFieldValues) => void | Promise<void>;
23
- /** キャンセル時のハンドラ */
27
+ /** Called by the cancel action; the host handles navigation or rollback. */
24
28
  onCancel?: () => void;
25
- /** 削除時のハンドラ */
29
+ /** Called by the delete action; the host performs deletion. */
26
30
  onDelete?: () => void;
27
- /** 編集モード切り替えハンドラ */
31
+ /** Called by the edit action; the host updates mode. */
28
32
  onEdit?: () => void;
29
- /** 編集ボタンを表示 */
33
+ /** Shows the view-mode edit action when true; defaults to false. */
30
34
  showEditButton?: boolean;
31
- /** グループ表示スタイル */
35
+ /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */
32
36
  groupDisplay?: GroupDisplay;
33
- /** リレーションデータ */
37
+ /** Related-field display and selection configuration forwarded to SchemaDetailPage. */
34
38
  relations?: Record<string, RelatedFieldConfig>;
35
39
  /**
36
- * 中央揃えコンテナレイアウトを使用
37
- * @default true
40
+ * Wrap content in a centered FormContainer.
41
+ * @defaultValue true
38
42
  */
39
43
  containerLayout?: boolean;
40
44
  /**
41
- * コンテナの最大幅
42
- * @default "4xl"
45
+ * Maximum width preset when containerLayout is enabled.
46
+ * @defaultValue "4xl"
43
47
  */
44
48
  maxWidth?: FormContainerWidth;
45
49
  /**
46
- * スティッキーアクションバーを有効化
47
- * @default false
50
+ * Use the sticky FormActionBar and hide ordinary generated actions.
51
+ * @defaultValue false
48
52
  */
49
53
  stickyActions?: boolean;
50
54
  /**
51
- * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)
52
- * @default true
55
+ * Separate fields marked x-ui.advanced into a section initially collapsed.
56
+ * @defaultValue true
53
57
  */
54
58
  progressiveDisclosure?: boolean;
55
59
  /**
56
- * 保存状態インジケーター
60
+ * Host-supplied save indicator; defaults to idle and does not track persistence automatically.
57
61
  */
58
62
  saveStatus?: SaveStatus;
59
63
  /**
60
- * レスポンシブグリッドを使用 (field.width を考慮)
61
- * @default true
64
+ * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.
65
+ * @defaultValue true
62
66
  */
63
67
  useGrid?: boolean;
64
68
  /**
65
- * グリッドの列数
66
- * @default 2
69
+ * Reserved compatibility option; currently ignored. Changing it does not set columns.
70
+ * Use useGrid to select the supported layout behavior.
67
71
  */
68
72
  gridColumns?: 1 | 2 | 3;
69
73
  /**
70
- * カスタムフォームコンテンツ (schema による自動生成を上書き)
74
+ * Replace generated content. The caller supplies its own form, submission wiring and providers.
71
75
  */
72
76
  children?: React.ReactNode;
77
+ /** Additional classes on the outer container. */
73
78
  className?: string;
74
79
  }
75
80
  /**
76
- * デスクトップ最適化された詳細/編集ページコンポーネント
77
- *
78
- * UXベストプラクティスに基づく拡張レイアウト機能:
79
- * - 中央揃えの読みやすいコンテナ幅
80
- * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)
81
- * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)
82
- * - スティッキーアクションバー
83
- * - 保存状態インジケーター
84
- *
81
+ * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.
82
+ * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.
83
+ * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.
84
+ * @returns The detail content inside a centered container or plain div.
85
+ * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider
86
+ * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.
87
+ * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.
88
+ * Custom children replace generated content and must supply their own form/provider wiring.
89
+ * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,
90
+ * without guaranteeing an exact number of columns. No fixed two-column default is implemented.
85
91
  * @example
86
92
  * ```tsx
87
- * <EnhancedDetailPage
88
- * schema={userSchema}
89
- * mode="edit"
90
- * values={userData}
91
- * onSubmit={handleSave}
92
- * containerLayout
93
- * stickyActions
94
- * progressiveDisclosure
95
- * />
93
+ * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';
94
+ * import '@alneas/appkit-react/styles';
95
+ *
96
+ * export function UserDetails() {
97
+ * return <EnhancedDetailPage<{ name: string }> mode="view"
98
+ * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}
99
+ * values={{ name: 'Ada' }} />;
100
+ * }
96
101
  * ```
97
102
  */
98
103
  export declare function EnhancedDetailPage<TFieldValues extends FieldValues>({ schema, validation, mode, values, submitLabel, onSubmit, onCancel, onDelete, onEdit, showEditButton, groupDisplay, relations, containerLayout, maxWidth, stickyActions, progressiveDisclosure, saveStatus, useGrid, children, className, }: EnhancedDetailPageProps<TFieldValues>): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"EnhancedDetailPage.js","names":["React","_Fragment","m.common_advanced","m.common_actions_create","m.common_actions_update","m.common_actions_delete","m.common_actions_edit","React$1","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","useForm","values","validation","createAjvResolver","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","Fragment","children","SchemaDetailPage","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","Collapsible","CollapsibleTrigger","common_advanced","ChevronDown","CollapsibleContent","mode","FormActionBar","submitLabel","common_actions_create","common_actions_update","onCancel","onDelete","Button","common_actions_delete","common_actions_edit","onEdit","content","FormProvider","onSubmit","data","containerLayout","FormContainer"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** 表示モード */\n mode: DetailMode;\n /** 現在の値 */\n values?: Partial<TFieldValues>;\n /** 送信ボタンのラベル */\n submitLabel?: 'create' | 'update';\n /** フォーム送信時のハンドラ */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** キャンセル時のハンドラ */\n onCancel?: () => void;\n /** 削除時のハンドラ */\n onDelete?: () => void;\n /** 編集モード切り替えハンドラ */\n onEdit?: () => void;\n /** 編集ボタンを表示 */\n showEditButton?: boolean;\n /** グループ表示スタイル */\n groupDisplay?: GroupDisplay;\n /** リレーションデータ */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * 中央揃えコンテナレイアウトを使用\n * @default true\n */\n containerLayout?: boolean;\n /**\n * コンテナの最大幅\n * @default \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * スティッキーアクションバーを有効化\n * @default false\n */\n stickyActions?: boolean;\n /**\n * プログレッシブディスクロージャー (advanced フィールドを折りたたみ)\n * @default true\n */\n progressiveDisclosure?: boolean;\n /**\n * 保存状態インジケーター\n */\n saveStatus?: SaveStatus;\n /**\n * レスポンシブグリッドを使用 (field.width を考慮)\n * @default true\n */\n useGrid?: boolean;\n /**\n * グリッドの列数\n * @default 2\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * カスタムフォームコンテンツ (schema による自動生成を上書き)\n */\n children?: React.ReactNode;\n\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * デスクトップ最適化された詳細/編集ページコンポーネント\n *\n * UXベストプラクティスに基づく拡張レイアウト機能:\n * - 中央揃えの読みやすいコンテナ幅\n * - レスポンシブグリッドレイアウト (モバイル1列、デスクトップ2列)\n * - プログレッシブディスクロージャー (advanced フィールドの折りたたみ)\n * - スティッキーアクションバー\n * - 保存状態インジケーター\n *\n * @example\n * ```tsx\n * <EnhancedDetailPage\n * schema={userSchema}\n * mode=\"edit\"\n * values={userData}\n * onSubmit={handleSave}\n * containerLayout\n * stickyActions\n * progressiveDisclosure\n * />\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EnhancedDetailPage.js","names":["React","_Fragment","m.common_advanced","m.common_actions_create","m.common_actions_update","m.common_actions_delete","m.common_actions_edit","React$1","separateAdvancedFields","standardProps","advancedProps","properties","schema","key","prop","EnhancedDetailPage","form","useForm","values","validation","createAjvResolver","advancedOpen","setAdvancedOpen","containerRef","hasAdvancedFields","advanced","renderContent","Fragment","children","SchemaDetailPage","progressiveDisclosure","standard","stickyActions","showEditButton","useGrid","Collapsible","CollapsibleTrigger","common_advanced","ChevronDown","CollapsibleContent","mode","FormActionBar","submitLabel","common_actions_create","common_actions_update","onCancel","onDelete","Button","common_actions_delete","common_actions_edit","onEdit","content","FormProvider","onSubmit","data","containerLayout","FormContainer"],"sources":["../../../../src/tools/components/form/EnhancedDetailPage.tsx"],"sourcesContent":["import * as React from 'react';\nimport { FormProvider, useForm, type FieldValues, type DefaultValues } from 'react-hook-form';\nimport { createAjvResolver, type SchemaFormValidationOptions } from '../../lib/schema/ajv';\nimport * as m from '../../paraglide/messages.js';\nimport { ChevronDown } from 'lucide-react';\n\nimport type { JSONSchema, JSONSchemaProperty } from '../../lib/schema/types';\nimport { FormContainer, type FormContainerWidth } from './form-container';\nimport { FormActionBar, type SaveStatus } from './form-action-bar';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible';\nimport { Button } from '../ui/button';\nimport { SchemaDetailPage } from '../schema/SchemaDetailPage';\nimport type { RelatedFieldConfig } from '../ui/form';\n\ntype DetailMode = 'view' | 'edit';\ntype GroupDisplay = 'heading' | 'card' | 'dropdown';\n\n/**\n * Form values, schema and presentation settings for {@link EnhancedDetailPage}.\n * @typeParam TFieldValues - React Hook Form field-value shape supplied to onSubmit.\n */\ninterface EnhancedDetailPageProps<TFieldValues extends FieldValues> {\n /** Opt into whole-record schema validation. */\n validation?: SchemaFormValidationOptions;\n /** JSON Schema definition with vendor extensions (x-ui, x-db, x-zod) */\n schema: JSONSchema;\n /** View renders details; edit renders form inputs. */\n mode: DetailMode;\n /** Initial values and later reset values; later updates preserve dirty fields. */\n values?: Partial<TFieldValues>;\n /** Submit action wording; defaults to update. */\n submitLabel?: 'create' | 'update';\n /** Called with form values after configured validation on submit; the host performs persistence. */\n onSubmit?: (values: TFieldValues) => void | Promise<void>;\n /** Called by the cancel action; the host handles navigation or rollback. */\n onCancel?: () => void;\n /** Called by the delete action; the host performs deletion. */\n onDelete?: () => void;\n /** Called by the edit action; the host updates mode. */\n onEdit?: () => void;\n /** Shows the view-mode edit action when true; defaults to false. */\n showEditButton?: boolean;\n /** Group presentation forwarded to SchemaDetailPage; omitted uses its default. */\n groupDisplay?: GroupDisplay;\n /** Related-field display and selection configuration forwarded to SchemaDetailPage. */\n relations?: Record<string, RelatedFieldConfig>;\n\n // 新しいレイアウトオプション\n\n /**\n * Wrap content in a centered FormContainer.\n * @defaultValue true\n */\n containerLayout?: boolean;\n /**\n * Maximum width preset when containerLayout is enabled.\n * @defaultValue \"4xl\"\n */\n maxWidth?: FormContainerWidth;\n /**\n * Use the sticky FormActionBar and hide ordinary generated actions.\n * @defaultValue false\n */\n stickyActions?: boolean;\n /**\n * Separate fields marked x-ui.advanced into a section initially collapsed.\n * @defaultValue true\n */\n progressiveDisclosure?: boolean;\n /**\n * Host-supplied save indicator; defaults to idle and does not track persistence automatically.\n */\n saveStatus?: SaveStatus;\n /**\n * Use SchemaDetailPage groupLayout full and columnMinWidth 300; false uses column layout.\n * @defaultValue true\n */\n useGrid?: boolean;\n /**\n * Reserved compatibility option; currently ignored. Changing it does not set columns.\n * Use useGrid to select the supported layout behavior.\n */\n gridColumns?: 1 | 2 | 3;\n\n /**\n * Replace generated content. The caller supplies its own form, submission wiring and providers.\n */\n children?: React.ReactNode;\n\n /** Additional classes on the outer container. */\n className?: string;\n}\n\n/**\n * 拡張されたフィールドを通常と高度に分離 (JSONSchema版)\n */\nconst separateAdvancedFields = (\n schema: JSONSchema,\n): { standard: JSONSchema; advanced: JSONSchema } => {\n const standardProps: Record<string, JSONSchemaProperty> = {};\n const advancedProps: Record<string, JSONSchemaProperty> = {};\n\n const properties = schema.properties || {};\n\n for (const [key, prop] of Object.entries(properties)) {\n if (prop['x-ui']?.advanced) {\n advancedProps[key] = prop;\n } else {\n standardProps[key] = prop;\n }\n }\n\n return {\n standard: { ...schema, properties: standardProps },\n advanced: { ...schema, title: `${schema.title || ''}_advanced`, properties: advancedProps },\n };\n};\n\n/**\n * Renders schema-driven view/edit content with an optional container, advanced fields and action bar.\n * @typeParam TFieldValues - React Hook Form value shape passed to the submit callback.\n * @param props - Schema, host-owned values/actions and layout settings; see EnhancedDetailPageProps.\n * @returns The detail content inside a centered container or plain div.\n * @remarks Import Appkit CSS. Generated edit content supplies its own React Hook Form provider\n * and form element; validation is opt-in via validation. Later values updates preserve dirty fields.\n * The host owns persistence, saveStatus, mode changes and errors from async onSubmit.\n * Custom children replace generated content and must supply their own form/provider wiring.\n * gridColumns is ignored; useGrid selects SchemaDetailPage layout and a 300px column minimum,\n * without guaranteeing an exact number of columns. No fixed two-column default is implemented.\n * @example\n * ```tsx\n * import { EnhancedDetailPage } from '@alneas/appkit-react/tools/form';\n * import '@alneas/appkit-react/styles';\n *\n * export function UserDetails() {\n * return <EnhancedDetailPage<{ name: string }> mode=\"view\"\n * schema={{ type: 'object', properties: { name: { type: 'string', title: 'Name' } } }}\n * values={{ name: 'Ada' }} />;\n * }\n * ```\n */\nexport function EnhancedDetailPage<TFieldValues extends FieldValues>({\n schema,\n validation,\n mode,\n values,\n submitLabel = 'update',\n onSubmit,\n onCancel,\n onDelete,\n onEdit,\n showEditButton = false,\n groupDisplay,\n relations,\n containerLayout = true,\n maxWidth = '4xl',\n stickyActions = false,\n progressiveDisclosure = true,\n saveStatus = 'idle',\n useGrid = true,\n children,\n className,\n}: EnhancedDetailPageProps<TFieldValues>) {\n const form = useForm<TFieldValues>({\n defaultValues: values as DefaultValues<TFieldValues>,\n resolver: validation ? createAjvResolver<TFieldValues>(schema, validation) : undefined,\n });\n const { dirtyFields } = form.formState;\n React.useEffect(() => { if (values) form.reset(values as TFieldValues, { keepDirtyValues: true }); }, [values, form]);\n void dirtyFields;\n const [advancedOpen, setAdvancedOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // プログレッシブディスクロージャー: 通常/高度フィールドを分離\n const { standard, advanced } = React.useMemo(() => separateAdvancedFields(schema), [schema]);\n const hasAdvancedFields = Object.keys(advanced.properties || {}).length > 0;\n\n const renderContent = () => (\n <>\n {/* カスタムコンテンツがある場合はそれを優先、ない場合はスキーマ駆動フォームを表示 */}\n {children ? (\n <div className='space-y-6'>{children}</div>\n ) : (\n <>\n {/* 標準フィールド */}\n <SchemaDetailPage\n form={form}\n schema={progressiveDisclosure ? standard : schema}\n mode={mode}\n values={values}\n submitLabel={submitLabel}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onDelete={onDelete}\n onEdit={onEdit}\n showEditButton={!stickyActions && showEditButton}\n hideActions={stickyActions}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n\n {/* 高度なフィールド (折りたたみ) */}\n {progressiveDisclosure && hasAdvancedFields && (\n <Collapsible\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n className='mt-6 border-t pt-4'\n >\n <CollapsibleTrigger className='flex w-full items-center justify-between py-2 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors'>\n <span>{m.common_advanced({ defaultValue: 'Advanced Settings' })}</span>\n <ChevronDown\n className={`h-4 w-4 transition-transform ${advancedOpen ? 'rotate-180' : ''}`}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className='pt-4'>\n <SchemaDetailPage\n form={form}\n schema={advanced}\n mode={mode}\n values={values}\n groupDisplay={groupDisplay}\n groupLayout={useGrid ? 'full' : 'column'}\n columnMinWidth={useGrid ? 300 : undefined}\n relations={relations}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n </>\n )}\n\n {/* スティッキーアクションバー */}\n {stickyActions && mode === 'edit' && (\n <FormActionBar\n primaryLabel={\n submitLabel === 'create'\n ? m.common_actions_create({ defaultValue: 'Create' })\n : m.common_actions_update({ defaultValue: 'Update' })\n }\n onPrimary={children ? () => containerRef.current?.querySelector('form')?.requestSubmit() : undefined}\n onSecondary={onCancel}\n saveStatus={saveStatus}\n sticky\n tertiaryAction={\n onDelete && (\n <Button type='button' variant='destructive' onClick={onDelete}>\n {m.common_actions_delete({ defaultValue: 'Delete' })}\n </Button>\n )\n }\n />\n )}\n\n {/* View モードのアクション */}\n {stickyActions && mode === 'view' && showEditButton && (\n <FormActionBar\n primaryLabel={m.common_actions_edit({ defaultValue: 'Edit' })}\n onPrimary={onEdit}\n onSecondary={onCancel}\n sticky\n />\n )}\n </>\n );\n\n const content = mode === 'edit' && !children ? (\n <FormProvider {...form}>\n <form onSubmit={form.handleSubmit(data => onSubmit?.(data))}>{renderContent()}</form>\n </FormProvider>\n ) : renderContent();\n\n if (containerLayout) {\n return (\n <FormContainer ref={containerRef} maxWidth={maxWidth} className={className}>\n {content}\n </FormContainer>\n );\n }\n\n return (\n <div ref={containerRef} className={className}>\n {content}\n </div>\n );\n}\n"],"mappings":"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"}