@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,8 +1,35 @@
1
1
  import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';
2
2
  import * as React from 'react';
3
+ /**
4
+ * Renders a scroll viewport with a vertical scrollbar and corner.
5
+ * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling.
6
+ * @returns The rendered ScrollArea composition.
7
+ * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling. The ref prop forwards to the rendered control or container declared by the component ref type.
8
+ * @example
9
+ * ```tsx
10
+ * import { ScrollArea } from '@alneas/appkit-react/ui';
11
+ * import '@alneas/appkit-react/styles';
12
+ *
13
+ * export function Example() {
14
+ * return (<ScrollArea className="h-32 w-64"><div className="h-96">Scrollable content</div></ScrollArea>);
15
+ * }
16
+ * ```
17
+ */
3
18
  declare const ScrollArea: React.ForwardRefExoticComponent<Omit<import('@base-ui/react').ScrollAreaRootProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
19
  /**
5
- * スクロール領域で表示されるスクロールバーコンポーネント。
20
+ * Renders a scrollbar track and thumb for the surrounding scroll-area root.
21
+ * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: orientation='vertical'.
22
+ * @returns The rendered ScrollBar composition.
23
+ * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling.
24
+ * @example
25
+ * ```tsx
26
+ * import { ScrollArea } from '@alneas/appkit-react/ui';
27
+ * import '@alneas/appkit-react/styles';
28
+ *
29
+ * export function Example() {
30
+ * return (<ScrollArea className="h-32 w-64"><div className="h-96">Scrollable content</div></ScrollArea>);
31
+ * }
32
+ * ```
6
33
  */
7
34
  declare function ScrollBar({ className, orientation, ...props }: ScrollAreaPrimitive.Scrollbar.Props): React.JSX.Element;
8
35
  export { ScrollArea, ScrollBar };
@@ -1,8 +1,35 @@
1
1
  import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';
2
2
  import * as React from 'react';
3
+ /**
4
+ * Renders a scroll viewport with a vertical scrollbar and corner.
5
+ * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling.
6
+ * @returns The rendered ScrollArea composition.
7
+ * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling. The ref prop forwards to the rendered control or container declared by the component ref type.
8
+ * @example
9
+ * ```tsx
10
+ * import { ScrollArea } from '@alneas/appkit-react/ui';
11
+ * import '@alneas/appkit-react/styles';
12
+ *
13
+ * export function Example() {
14
+ * return (<ScrollArea className="h-32 w-64"><div className="h-96">Scrollable content</div></ScrollArea>);
15
+ * }
16
+ * ```
17
+ */
3
18
  declare const ScrollArea: React.ForwardRefExoticComponent<Omit<import('@base-ui/react').ScrollAreaRootProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
19
  /**
5
- * スクロール領域で表示されるスクロールバーコンポーネント。
20
+ * Renders a scrollbar track and thumb for the surrounding scroll-area root.
21
+ * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: orientation='vertical'.
22
+ * @returns The rendered ScrollBar composition.
23
+ * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling.
24
+ * @example
25
+ * ```tsx
26
+ * import { ScrollArea } from '@alneas/appkit-react/ui';
27
+ * import '@alneas/appkit-react/styles';
28
+ *
29
+ * export function Example() {
30
+ * return (<ScrollArea className="h-32 w-64"><div className="h-96">Scrollable content</div></ScrollArea>);
31
+ * }
32
+ * ```
6
33
  */
7
34
  declare function ScrollBar({ className, orientation, ...props }: ScrollAreaPrimitive.Scrollbar.Props): React.JSX.Element;
8
35
  export { ScrollArea, ScrollBar };
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-area.js","names":["React","ScrollAreaPrimitive","React$1","ScrollArea$1","ScrollArea","props","cn","className","ScrollBar","orientation"],"sources":["../../../../src/ui/components/ui/scroll-area.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\n\nimport { cn } from '../../lib/utils';\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaPrimitive.Root.Props>(\n ({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n ),\n);\nScrollArea.displayName = 'ScrollArea';\n\n/**\n * スクロール領域で表示されるスクロールバーコンポーネント。\n */\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot='scroll-area-scrollbar'\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot='scroll-area-thumb'\n className='rounded-full bg-border relative flex-1'\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n"],"mappings":";;;;;;;AAOA,IAAMI,IAAaJ,EAAM,YACtB,EAAE,cAAW,aAAU,GAAGK,KAAS,MAClC,kBAACJ,EAAoB,MAArB;CACO;CACL,aAAU;CACV,WAAWK,EAAG,YAAYC,CAAS;CACnC,GAAIF;CAJN,UAAA;EAME,kBAACJ,EAAoB,UAArB;GACE,aAAU;GACV,WAAU;GAET;EAC2B,CAAA;EAC9B,kBAACO,GAAD,CAAY,CAAA;EACZ,kBAACP,EAAoB,QAArB,CAA6B,CAAA;CACL;AAE9B,CAAA,CAAA;AACA,EAAW,cAAc;AAKzB,SAASO,EAAU,EACjB,cACA,iBAAc,YACd,GAAGH,KACmC;CACtC,OACE,kBAACJ,EAAoB,WAArB;EACE,aAAU;EACV,oBAAkBQ;EACL;EACb,WAAWH,EACT,sQACAC,CACF;EACA,GAAIF;EAEJ,UAAA,kBAACJ,EAAoB,OAArB;GACE,aAAU;GACV,WAAU;EACX,CAAA;CAC4B,CAAA;AAEnC"}
1
+ {"version":3,"file":"scroll-area.js","names":["React","ScrollAreaPrimitive","React$1","ScrollArea$1","ScrollArea","props","cn","className","ScrollBar","orientation"],"sources":["../../../../src/ui/components/ui/scroll-area.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\n\nimport { cn } from '../../lib/utils';\n\n/**\n * Renders a scroll viewport with a vertical scrollbar and corner.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling.\n * @returns The rendered ScrollArea composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling. The ref prop forwards to the rendered control or container declared by the component ref type.\n * @example\n * ```tsx\n * import { ScrollArea } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ScrollArea className=\"h-32 w-64\"><div className=\"h-96\">Scrollable content</div></ScrollArea>);\n * }\n * ```\n */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaPrimitive.Root.Props>(\n ({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n ),\n);\nScrollArea.displayName = 'ScrollArea';\n\n/**\n * Renders a scrollbar track and thumb for the surrounding scroll-area root.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: orientation='vertical'.\n * @returns The rendered ScrollBar composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Constrain the root size so content can overflow. ScrollArea already inserts the vertical scrollbar and corner; it passes children into its viewport. ScrollBar requires Base UI scroll-area root context and defaults to vertical; an extra ScrollBar passed as ScrollArea children is placed inside the viewport, not as a root sibling.\n * @example\n * ```tsx\n * import { ScrollArea } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<ScrollArea className=\"h-32 w-64\"><div className=\"h-96\">Scrollable content</div></ScrollArea>);\n * }\n * ```\n */\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot='scroll-area-scrollbar'\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot='scroll-area-thumb'\n className='rounded-full bg-border relative flex-1'\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n"],"mappings":";;;;;;;AAsBA,IAAMI,IAAaJ,EAAM,YACtB,EAAE,cAAW,aAAU,GAAGK,KAAS,MAClC,kBAACJ,EAAoB,MAArB;CACO;CACL,aAAU;CACV,WAAWK,EAAG,YAAYC,CAAS;CACnC,GAAIF;CAJN,UAAA;EAME,kBAACJ,EAAoB,UAArB;GACE,aAAU;GACV,WAAU;GAET;EAC2B,CAAA;EAC9B,kBAACO,GAAD,CAAY,CAAA;EACZ,kBAACP,EAAoB,QAArB,CAA6B,CAAA;CACL;AAE9B,CAAA,CAAA;AACA,EAAW,cAAc;AAiBzB,SAASO,EAAU,EACjB,cACA,iBAAc,YACd,GAAGH,KACmC;CACtC,OACE,kBAACJ,EAAoB,WAArB;EACE,aAAU;EACV,oBAAkBQ;EACL;EACb,WAAWH,EACT,sQACAC,CACF;EACA,GAAIF;EAEJ,UAAA,kBAACJ,EAAoB,OAArB;GACE,aAAU;GACV,WAAU;EACX,CAAA;CAC4B,CAAA;AAEnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"searchable-select-input.cjs","names":["React","ComboboxPrimitive","cn","Input","Search","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Button","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_components","require_ui_components_ui_input","require_ui_components_ui_dialog","require_ui_components_ui_label","react_jsx_runtime","react","lucide_react","_base_ui_react_combobox","EMPTY_OPTIONS","normalize","value","uniqByValue","map","option","options","SearchableSelectInput","open","setOpen","inputValue","setInputValue","query","setQuery","highlightedIndex","setHighlightedIndex","isFocused","setIsFocused","loading","setLoading","remoteOptions","setRemoteOptions","knownOptions","setKnownOptions","createOpen","setCreateOpen","createId","setCreateId","createName","setCreateName","creating","setCreating","codeInputValue","setCodeInputValue","isCodeFocused","setIsCodeFocused","closeTimerRef","requestIdRef","lastSearchQueryRef","containerRef","inputElRef","autoSelectedValueRef","composingRef","skipBlurClearRef","isDeletingRef","deletingTimerRef","currentOptionsKey","o","stabilizedOptions","setStabilizedOptions","prevOptionsKey","setPrevOptionsKey","merged","prev","selectedRawValue","selectedOption","splitLayout","codeVal","resolveDisplayField","field","hasExplicitDisplayConfig","primaryDisplayField","secondaryDisplayField","explicitPrimaryText","explicitSecondaryText","secondary","primary","lastValueRef","inputValueRef","currentInputValue","isExternalUpdate","hasResolvedLabel","isCurrentlyUuid","targetLabel","showIdBelow","showIdInInput","showIdRight","displayIdSuffix","secondaryDisplayPosition","displayVal","displayIdBelow","trimmedQuery","normalizedQuery","searchFn","onSearch","createFn","onCreateOption","localFilteredOptions","base","byLabel","matchByLabel","byValue","matchByValue","byDescription","matchByDescription","searchFnRef","canStartCreate","createMode","onCreateRequested","idInputEnabled","minSearchLength","requestId","timer","fetched","debounceMs","filteredOptions","visibleOptions","maxInlineResults","hasTooMany","resolvedTooManyMessage","tooManyMessage","applyOption","nextValue","onValueChange","nextInputText","keepOpen","index","el","nextInput","autoSelectSingle","single","singleValue","singleInputText","selectedIndex","handleInputValue","prevLen","isDeleting","raw","allowCustomValue","showCreatePrompt","createPromptLabel","openCreateDialog","triggerCreate","handleKeyDown","event","key","onClear","onDoubleClick","disabled","readOnly","submitCreate","id","name","created","resolveCode","match","exact","handleCodeKeyDown","showLabelOverlay","overlayLabel","showLookupIcon","next","opt","codePlaceholder","className","belowContent","text","inputProps","inputRef","namePlaceholder","placeholder","onBlur","isSelected","showValue","showValueInList","noOptionsMessage","createDialogTitle","createIdLabel","createNameLabel"],"sources":["../../../../src/ui/components/ui/searchable-select-input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Search } from 'lucide-react';\nimport { Input } from './input';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from './dialog';\nimport { Label } from './label';\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { cn } from '../../lib/utils';\n/** A value and its display text; independent of records or schemas. */\nexport interface SearchableSelectOption {\n value: string | number;\n label: string;\n description?: string;\n name?: string;\n code?: string;\n}\n\n\n/** options 未指定時に毎レンダーで新しい配列を作らないための安定参照 */\nconst EMPTY_OPTIONS: SearchableSelectOption[] = [];\n\n/**\n * 候補ゼロ時の新規作成入力です。\n */\nexport interface SearchableSelectCreateInput {\n /** 新規レコードID */\n id?: string;\n /** 新規レコード名称 */\n name: string;\n}\n\nexport type SearchableSelectCreateMode = 'manual_code' | 'sequence_code' | 'disabled';\nexport type SearchableSelectDisplayField =\n | 'label'\n | 'description'\n | 'name'\n | 'code'\n | 'value'\n | 'none';\nexport type SearchableSelectDisplayPosition = 'right' | 'below';\n\n/**\n * 候補ゼロ時に親コンポーネントへ通知する「新規作成リクエスト」です。\n */\nexport interface SearchableSelectCreateRequest {\n /** ユーザーが入力していた検索文字列 */\n query: string;\n /** コード採番モード */\n mode: SearchableSelectCreateMode;\n}\n\n/**\n * SearchableSelectInput のプロパティです。\n */\nexport interface SearchableSelectInputProps {\n /** 現在の選択値(ID等)。null/undefined は未選択 */\n value?: string | number | null;\n /** 値が変更された際に呼ばれるコールバック */\n onValueChange: (value: string) => void;\n /** 同期的に利用可能な候補一覧(ローカルフィルタ対象) */\n options?: SearchableSelectOption[];\n /** 非同期検索関数 */\n onSearch?: (query: string) => Promise<SearchableSelectOption[]>;\n /** 新規作成関数 */\n onCreateOption?: (input: SearchableSelectCreateInput) => Promise<SearchableSelectOption>;\n /** 候補ゼロ時の「新規作成」選択を親へ通知 */\n onCreateRequested?: (request: SearchableSelectCreateRequest) => void;\n /** デバウンス時間(ms) */\n debounceMs?: number;\n /** 検索を開始する最小入力文字数 */\n minSearchLength?: number;\n /** 値(ID)による部分一致フィルタを有効にするか */\n matchByValue?: boolean;\n /** ラベル(名称)による部分一致フィルタを有効にするか */\n matchByLabel?: boolean;\n /** 補足説明(コード等)による部分一致フィルタを有効にするか */\n matchByDescription?: boolean;\n /** 候補リストにID(value)を表示するか */\n showValueInList?: boolean;\n /** 候補一覧に無い任意の値入力を許可するか */\n allowCustomValue?: boolean;\n /** プレースホルダーテキスト */\n placeholder?: string;\n /** 入力を無効化するか */\n disabled?: boolean;\n /** 読み取り専用にするか */\n readOnly?: boolean;\n /** 追加CSSクラス名 */\n className?: string;\n /** blur イベント通知コールバック */\n onBlur?: () => void;\n /** 候補ゼロ時に表示するメッセージ */\n noOptionsMessage?: string;\n /** 新規作成ダイアログのタイトル */\n createDialogTitle?: string;\n /** 新規作成フォームのIDラベル */\n createIdLabel?: string;\n /** 新規作成フォームの名称ラベル */\n createNameLabel?: string;\n /** 新規作成時のコード採番モード */\n createMode?: SearchableSelectCreateMode;\n /** 入力要素への ref */\n inputRef?: React.Ref<HTMLInputElement>;\n /** ドロップダウンにインライン表示する候補の最大件数 */\n maxInlineResults?: number;\n /** 検索結果が maxInlineResults を超えた際に表示するメッセージ */\n tooManyMessage?: string;\n /** 検索結果が厳密に1件のみの場合に、自動的にその候補を選択するか */\n autoSelectSingle?: boolean;\n /** ダブルクリック時に呼ばれるコールバック */\n onDoubleClick?: () => void;\n /** 選択確定後にコード(ID)を表示する方法 */\n showIdInInput?: boolean | 'right' | 'below';\n /** 選択済み表示の主表示フィールド */\n primaryDisplayField?: SearchableSelectDisplayField;\n /** 選択済み表示の副表示フィールド */\n secondaryDisplayField?: SearchableSelectDisplayField;\n /** 副表示の配置位置 */\n secondaryDisplayPosition?: SearchableSelectDisplayPosition;\n /** 値をクリアするコールバック */\n onClear?: () => void;\n /** 選択確定後に2行目に表示する内容 */\n belowContent?: string | ((option: SearchableSelectOption) => string);\n /**\n * コード(値)入力と名称入力を別々のインプットとして分離して表示するレイアウト。\n * - 'horizontal': 横並び(左側にコード、右側に名称)\n * - 'vertical': 縦並び(上がコード、下が名称)\n * - undefined: 従来の単一インプット\n */\n splitLayout?: 'horizontal' | 'vertical';\n /** コード(値)入力欄のプレースホルダー */\n codePlaceholder?: string;\n /** 名称入力欄のプレースホルダー */\n namePlaceholder?: string;\n}\n\nfunction normalize(value: unknown): string {\n return value === null || value === undefined ? '' : String(value);\n}\n\nfunction uniqByValue(options: SearchableSelectOption[]): SearchableSelectOption[] {\n const map = new Map<string, SearchableSelectOption>();\n for (const option of options) {\n map.set(String(option.value), option);\n }\n return Array.from(map.values());\n}\n\n/**\n * 入力されたテキストに基づいて候補を検索(ローカルまたは非同期)して選択できる、インクリメンタルサーチ対応のセレクトボックス。\n */\nexport function SearchableSelectInput({\n value,\n onValueChange,\n options = EMPTY_OPTIONS,\n onSearch,\n onCreateOption,\n onCreateRequested,\n debounceMs = 300,\n minSearchLength = 1,\n matchByValue = true,\n matchByLabel = true,\n allowCustomValue = true,\n placeholder,\n disabled,\n readOnly,\n className,\n onBlur,\n noOptionsMessage = '候補なし',\n createDialogTitle = '候補がありません。新規作成しますか?',\n createIdLabel = 'コード',\n createNameLabel = '名称',\n createMode = 'manual_code',\n inputRef,\n maxInlineResults = 10,\n tooManyMessage = 'さらに絞り込んでください',\n autoSelectSingle = false,\n onDoubleClick,\n showIdInInput = false,\n primaryDisplayField,\n secondaryDisplayField,\n secondaryDisplayPosition = 'right',\n onClear,\n belowContent,\n matchByDescription = true,\n showValueInList = true,\n splitLayout,\n codePlaceholder,\n namePlaceholder,\n}: SearchableSelectInputProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState('');\n const [query, setQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n const [isFocused, setIsFocused] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [remoteOptions, setRemoteOptions] = React.useState<SearchableSelectOption[]>([]);\n const [knownOptions, setKnownOptions] = React.useState<SearchableSelectOption[]>(options);\n const [createOpen, setCreateOpen] = React.useState(false);\n const [createId, setCreateId] = React.useState('');\n const [createName, setCreateName] = React.useState('');\n const [creating, setCreating] = React.useState(false);\n const [codeInputValue, setCodeInputValue] = React.useState('');\n const [isCodeFocused, setIsCodeFocused] = React.useState(false);\n const closeTimerRef = React.useRef<number | null>(null);\n const requestIdRef = React.useRef(0);\n const lastSearchQueryRef = React.useRef('');\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const inputElRef = React.useRef<HTMLInputElement | null>(null);\n const autoSelectedValueRef = React.useRef<string>('');\n const composingRef = React.useRef(false);\n const skipBlurClearRef = React.useRef(false);\n const isDeletingRef = React.useRef(false);\n const deletingTimerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (closeTimerRef.current !== null) {\n window.clearTimeout(closeTimerRef.current);\n }\n if (deletingTimerRef.current !== null) {\n window.clearTimeout(deletingTimerRef.current);\n }\n };\n }, []);\n\n const currentOptionsKey = React.useMemo(\n () => options.map((o) => String(o.value)).join(','),\n [options],\n );\n const [stabilizedOptions, setStabilizedOptions] = React.useState(options);\n const [prevOptionsKey, setPrevOptionsKey] = React.useState(currentOptionsKey);\n\n if (currentOptionsKey !== prevOptionsKey) {\n setStabilizedOptions(options);\n setPrevOptionsKey(currentOptionsKey);\n }\n\n React.useEffect(() => {\n if (stabilizedOptions.length === 0) return;\n queueMicrotask(() => {\n setKnownOptions((prev) => {\n const merged = uniqByValue([...prev, ...stabilizedOptions]);\n if (merged.length === prev.length) return prev;\n return merged;\n });\n });\n }, [stabilizedOptions]);\n\n const selectedRawValue = normalize(value);\n\n const selectedOption = React.useMemo(\n () => knownOptions.find((option) => String(option.value) === selectedRawValue),\n [knownOptions, selectedRawValue],\n );\n\n // splitLayout 時のコード入力値の同期\n React.useEffect(() => {\n if (splitLayout) {\n if (isCodeFocused) return;\n if (selectedOption) {\n const codeVal =\n selectedOption.code ||\n (selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value));\n queueMicrotask(() => {\n setCodeInputValue(codeVal);\n });\n } else {\n queueMicrotask(() => {\n setCodeInputValue(selectedRawValue);\n });\n }\n }\n }, [selectedOption, selectedRawValue, splitLayout, isCodeFocused]);\n\n const resolveDisplayField = React.useCallback(\n (option: SearchableSelectOption, field: SearchableSelectDisplayField | undefined): string => {\n if (!field || field === 'none') return '';\n switch (field) {\n case 'label':\n return option.label || '';\n case 'description':\n return option.description ? String(option.description) : '';\n case 'name':\n return option.name || option.label || '';\n case 'code':\n return option.code || (option.description ? String(option.description) : '');\n case 'value':\n return String(option.value);\n default:\n return '';\n }\n },\n [],\n );\n const hasExplicitDisplayConfig = Boolean(primaryDisplayField || secondaryDisplayField);\n const explicitPrimaryText = React.useMemo(() => {\n if (!selectedOption || !primaryDisplayField) return '';\n return resolveDisplayField(selectedOption, primaryDisplayField);\n }, [selectedOption, primaryDisplayField, resolveDisplayField]);\n const explicitSecondaryText = React.useMemo(() => {\n if (!selectedOption || !secondaryDisplayField || secondaryDisplayField === 'none') return '';\n const secondary = resolveDisplayField(selectedOption, secondaryDisplayField);\n const primary = primaryDisplayField\n ? resolveDisplayField(selectedOption, primaryDisplayField)\n : '';\n if (!secondary || secondary === primary) return '';\n return secondary;\n }, [selectedOption, secondaryDisplayField, primaryDisplayField, resolveDisplayField]);\n\n const lastValueRef = React.useRef(value);\n const inputValueRef = React.useRef(inputValue);\n React.useLayoutEffect(() => {\n inputValueRef.current = inputValue;\n });\n React.useEffect(() => {\n const currentInputValue = inputValueRef.current;\n const isExternalUpdate = value !== lastValueRef.current;\n const hasResolvedLabel =\n selectedOption && selectedOption.label !== String(selectedOption.value);\n const isCurrentlyUuid = currentInputValue === String(value) && value !== '';\n const targetLabel = selectedOption\n ? hasExplicitDisplayConfig\n ? primaryDisplayField === 'none'\n ? ''\n : explicitPrimaryText || selectedOption.label\n : selectedOption.label\n : selectedRawValue;\n\n if (currentInputValue === targetLabel && !isExternalUpdate) return;\n\n if (isFocused && isExternalUpdate && isDeletingRef.current) {\n lastValueRef.current = value;\n return;\n }\n\n if (isFocused && isExternalUpdate && String(value) === currentInputValue) {\n lastValueRef.current = value;\n return;\n }\n\n if (\n isExternalUpdate ||\n (isCurrentlyUuid && hasResolvedLabel) ||\n (!isFocused && (selectedOption || selectedRawValue))\n ) {\n setInputValue(targetLabel);\n lastValueRef.current = value;\n }\n }, [\n value,\n selectedOption,\n selectedRawValue,\n isFocused,\n hasExplicitDisplayConfig,\n explicitPrimaryText,\n primaryDisplayField,\n ]);\n\n const showIdBelow = !hasExplicitDisplayConfig && showIdInInput === 'below';\n const showIdRight =\n !hasExplicitDisplayConfig && (showIdInInput === true || showIdInInput === 'right');\n\n const displayIdSuffix = React.useMemo(() => {\n if (hasExplicitDisplayConfig) {\n if (!selectedOption || secondaryDisplayPosition !== 'right') return null;\n return explicitSecondaryText || null;\n }\n if (!showIdRight || !selectedOption) return null;\n const displayVal = selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value);\n if (displayVal === selectedOption.label || !displayVal) return null;\n return displayVal;\n }, [\n hasExplicitDisplayConfig,\n selectedOption,\n secondaryDisplayPosition,\n explicitSecondaryText,\n showIdRight,\n ]);\n\n const displayIdBelow = React.useMemo(() => {\n if (hasExplicitDisplayConfig) {\n if (!selectedOption || secondaryDisplayPosition !== 'below') return null;\n return explicitSecondaryText || null;\n }\n if (!showIdBelow || !selectedOption) return null;\n const displayVal = selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value);\n if (displayVal === selectedOption.label || !displayVal) return null;\n return displayVal;\n }, [\n hasExplicitDisplayConfig,\n selectedOption,\n secondaryDisplayPosition,\n explicitSecondaryText,\n showIdBelow,\n ]);\n\n const trimmedQuery = query.trim();\n const normalizedQuery = trimmedQuery.toLowerCase();\n\n const searchFn = onSearch ?? null;\n const createFn = onCreateOption ?? null;\n\n const localFilteredOptions = React.useMemo(() => {\n if (!normalizedQuery) {\n const base = stabilizedOptions;\n if (selectedOption && !base.find((o) => String(o.value) === String(selectedOption.value))) {\n return uniqByValue([...base, selectedOption]);\n }\n return base;\n }\n return knownOptions.filter((option) => {\n const byLabel = matchByLabel ? option.label.toLowerCase().includes(normalizedQuery) : false;\n const byValue = matchByValue\n ? String(option.value).toLowerCase().includes(normalizedQuery)\n : false;\n const byDescription = matchByDescription\n ? String(option.description || '')\n .toLowerCase()\n .includes(normalizedQuery)\n : false;\n return byLabel || byValue || byDescription;\n });\n }, [\n normalizedQuery,\n knownOptions,\n matchByLabel,\n matchByValue,\n matchByDescription,\n selectedOption,\n stabilizedOptions,\n ]);\n\n const searchFnRef = React.useRef(searchFn);\n React.useLayoutEffect(() => {\n searchFnRef.current = searchFn;\n });\n\n const canCreate = Boolean(createFn) && createMode !== 'disabled';\n const canRequestCreate = Boolean(onCreateRequested) && createMode !== 'disabled';\n const canStartCreate = canCreate || canRequestCreate;\n const idInputEnabled = createMode === 'manual_code';\n\n React.useEffect(() => {\n if (!searchFnRef.current) return;\n\n const isRefinement =\n lastSearchQueryRef.current &&\n normalizedQuery.startsWith(lastSearchQueryRef.current.toLowerCase()) &&\n remoteOptions.length > 0 &&\n remoteOptions.length <= 10;\n\n if (isRefinement) {\n return;\n }\n\n if (normalizedQuery.length < minSearchLength) {\n queueMicrotask(() => {\n setRemoteOptions((prev) => (prev.length === 0 ? prev : []));\n setLoading(false);\n });\n return;\n }\n\n const requestId = ++requestIdRef.current;\n const timer = window.setTimeout(async () => {\n try {\n setLoading(true);\n const fetched = await searchFnRef.current!(query);\n if (requestIdRef.current !== requestId) return;\n lastSearchQueryRef.current = query;\n setRemoteOptions(fetched);\n setKnownOptions((prev) => uniqByValue([...prev, ...fetched]));\n } finally {\n if (requestIdRef.current === requestId) {\n setLoading(false);\n }\n }\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [query, normalizedQuery, remoteOptions.length, minSearchLength, debounceMs]);\n\n const filteredOptions = React.useMemo(() => {\n if (!searchFn) return localFilteredOptions;\n if (normalizedQuery.length < minSearchLength) return localFilteredOptions;\n\n return remoteOptions.filter((option: SearchableSelectOption) => {\n const byLabel = matchByLabel ? option.label.toLowerCase().includes(normalizedQuery) : false;\n const byValue = matchByValue\n ? String(option.value).toLowerCase().includes(normalizedQuery)\n : false;\n const byDescription = matchByDescription\n ? String(option.description || '')\n .toLowerCase()\n .includes(normalizedQuery)\n : false;\n return byLabel || byValue || byDescription;\n });\n }, [\n searchFn,\n localFilteredOptions,\n normalizedQuery,\n minSearchLength,\n matchByLabel,\n matchByValue,\n matchByDescription,\n remoteOptions,\n ]);\n\n const visibleOptions = React.useMemo(() => {\n if (filteredOptions.length <= maxInlineResults) return filteredOptions;\n return filteredOptions.slice(0, maxInlineResults);\n }, [filteredOptions, maxInlineResults]);\n\n const hasTooMany = filteredOptions.length > maxInlineResults;\n\n const resolvedTooManyMessage = React.useMemo(() => {\n return tooManyMessage.replace('{count}', String(filteredOptions.length));\n }, [tooManyMessage, filteredOptions.length]);\n\n const applyOption = React.useCallback(\n (option: SearchableSelectOption, keepOpen: boolean, index: number) => {\n const nextValue = String(option.value);\n setKnownOptions((prev: SearchableSelectOption[]) => uniqByValue([...prev, option]));\n onValueChange(nextValue);\n const nextInputText = hasExplicitDisplayConfig\n ? resolveDisplayField(option, primaryDisplayField) || option.label\n : option.label;\n setInputValue(nextInputText);\n setQuery('');\n setOpen(keepOpen);\n setHighlightedIndex(keepOpen ? index : -1);\n if (!keepOpen) {\n const el = inputElRef.current;\n if (el) {\n const td = el.closest('td');\n const nextTd = td?.nextElementSibling as HTMLElement | null;\n const nextInput = nextTd?.querySelector<HTMLElement>(\n 'input, textarea, select, [role=\"combobox\"]',\n );\n if (nextInput) {\n skipBlurClearRef.current = true;\n nextInput.focus();\n } else {\n skipBlurClearRef.current = true;\n el.blur();\n }\n }\n }\n },\n [onValueChange, hasExplicitDisplayConfig, resolveDisplayField, primaryDisplayField],\n );\n\n // 自動選択\n React.useEffect(() => {\n if (\n !autoSelectSingle ||\n loading ||\n !isFocused ||\n composingRef.current ||\n isDeletingRef.current ||\n filteredOptions.length !== 1 ||\n normalizedQuery.length < minSearchLength\n ) {\n return;\n }\n const single = filteredOptions[0];\n const singleValue = String(single.value);\n if (autoSelectedValueRef.current === singleValue) return;\n autoSelectedValueRef.current = singleValue;\n setKnownOptions((prev: SearchableSelectOption[]) => uniqByValue([...prev, single]));\n\n onValueChange(singleValue);\n const singleInputText = hasExplicitDisplayConfig\n ? resolveDisplayField(single, primaryDisplayField) || single.label\n : single.label;\n setInputValue(singleInputText);\n setQuery('');\n setOpen(false);\n setHighlightedIndex(-1);\n\n const el = inputElRef.current;\n if (el) {\n const td = el.closest('td');\n const nextTd = td?.nextElementSibling as HTMLElement | null;\n const nextInput = nextTd?.querySelector<HTMLElement>(\n 'input, textarea, select, [role=\"combobox\"]',\n );\n if (nextInput) {\n skipBlurClearRef.current = true;\n nextInput.focus();\n } else {\n skipBlurClearRef.current = true;\n el.blur();\n }\n }\n }, [\n autoSelectSingle,\n loading,\n isFocused,\n filteredOptions,\n normalizedQuery,\n minSearchLength,\n onValueChange,\n hasExplicitDisplayConfig,\n resolveDisplayField,\n primaryDisplayField,\n ]);\n\n React.useEffect(() => {\n if (!open) {\n queueMicrotask(() => {\n setHighlightedIndex(-1);\n });\n return;\n }\n if (visibleOptions.length === 0) {\n queueMicrotask(() => {\n setHighlightedIndex(-1);\n });\n return;\n }\n const selectedIndex = visibleOptions.findIndex(\n (option) => String(option.value) === selectedRawValue,\n );\n queueMicrotask(() => {\n setHighlightedIndex(selectedIndex >= 0 ? selectedIndex : 0);\n });\n }, [open, visibleOptions, selectedRawValue]);\n\n const handleInputValue = React.useCallback(\n (raw: string) => {\n const prevLen = inputValueRef.current.length;\n const isDeleting = raw.length < prevLen;\n setInputValue(raw);\n setQuery(raw);\n setOpen(true);\n\n if (deletingTimerRef.current !== null) {\n window.clearTimeout(deletingTimerRef.current);\n deletingTimerRef.current = null;\n }\n\n if (isDeleting) {\n isDeletingRef.current = true;\n deletingTimerRef.current = window.setTimeout(() => {\n isDeletingRef.current = false;\n deletingTimerRef.current = null;\n }, 800);\n } else {\n isDeletingRef.current = false;\n autoSelectedValueRef.current = '';\n }\n\n if (!allowCustomValue) return;\n onValueChange(raw);\n },\n [allowCustomValue, onValueChange],\n );\n\n const showCreatePrompt =\n canStartCreate &&\n !loading &&\n trimmedQuery.length >= minSearchLength &&\n filteredOptions.length === 0;\n\n const createPromptLabel = trimmedQuery ? `「${trimmedQuery}」で新規作成` : '新規作成';\n\n const openCreateDialog = React.useCallback(() => {\n const nextValue = query.trim();\n setCreateId(idInputEnabled ? nextValue : '');\n setCreateName(nextValue);\n setCreateOpen(true);\n }, [query, idInputEnabled]);\n\n const triggerCreate = React.useCallback(() => {\n const nextValue = query.trim();\n if (!nextValue) return;\n if (onCreateRequested) {\n setOpen(false);\n setHighlightedIndex(-1);\n onCreateRequested({ query: nextValue, mode: createMode });\n return;\n }\n openCreateDialog();\n }, [query, onCreateRequested, createMode, openCreateDialog]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n return;\n }\n const key = event.key;\n\n if (key === 'Enter' && open) {\n if ((event.ctrlKey || event.metaKey) && showCreatePrompt) {\n event.preventDefault();\n event.stopPropagation();\n triggerCreate();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const option = visibleOptions[highlightedIndex];\n if (option) {\n applyOption(option, false, highlightedIndex);\n }\n return;\n }\n\n if (key === 'Escape' || key === 'Esc') {\n event.preventDefault();\n if (open) {\n setOpen(false);\n setHighlightedIndex(-1);\n } else {\n if (onClear) {\n onClear();\n } else {\n onValueChange('');\n }\n setInputValue('');\n setQuery('');\n autoSelectedValueRef.current = '';\n }\n return;\n }\n\n if (key === 'F2' && onDoubleClick && !disabled && !readOnly) {\n event.preventDefault();\n setOpen(false);\n onDoubleClick();\n return;\n }\n },\n [\n visibleOptions,\n highlightedIndex,\n open,\n applyOption,\n onDoubleClick,\n disabled,\n readOnly,\n onClear,\n onValueChange,\n showCreatePrompt,\n triggerCreate,\n ],\n );\n\n const submitCreate = React.useCallback(async () => {\n if (!createFn) return;\n const id = idInputEnabled ? createId.trim() : '';\n const name = createName.trim();\n if (!name) return;\n\n setCreating(true);\n try {\n const created = await createFn({ id, name });\n setKnownOptions((prev) => uniqByValue([...prev, created]));\n applyOption(created, false, -1);\n setCreateOpen(false);\n } finally {\n setCreating(false);\n }\n }, [createFn, createId, createName, applyOption, idInputEnabled]);\n\n const resolveCode = React.useCallback(\n async (raw: string) => {\n if (raw === '') {\n onValueChange('');\n setInputValue('');\n setQuery('');\n return;\n }\n\n // まずは既知の候補から\n let match = knownOptions.find(\n (o) =>\n String(o.value) === raw ||\n (o.code && o.code === raw) ||\n (o.description && String(o.description) === raw),\n );\n\n if (!match && searchFn) {\n setLoading(true);\n try {\n const fetched = await searchFn(raw);\n const exact = fetched.find(\n (o) =>\n String(o.value) === raw ||\n (o.code && o.code === raw) ||\n (o.description && String(o.description) === raw),\n );\n if (exact) {\n match = exact;\n }\n } catch (e) {\n console.error('Code lookup error', e);\n } finally {\n setLoading(false);\n }\n }\n\n if (match) {\n applyOption(match, false, -1);\n } else {\n if (allowCustomValue) {\n onValueChange(raw);\n setInputValue(raw);\n } else {\n if (canStartCreate) {\n setQuery(raw);\n if (onCreateRequested) {\n onCreateRequested({ query: raw, mode: createMode });\n } else {\n const nextValue = raw.trim();\n setCreateId(idInputEnabled ? nextValue : '');\n setCreateName('');\n setCreateOpen(true);\n }\n } else {\n // 一致せず作成も不可の場合は元に戻す\n setCodeInputValue(\n selectedOption ? selectedOption.code || String(selectedOption.value) : '',\n );\n }\n }\n }\n },\n [\n knownOptions,\n searchFn,\n applyOption,\n onValueChange,\n allowCustomValue,\n canStartCreate,\n onCreateRequested,\n createMode,\n idInputEnabled,\n selectedOption,\n ],\n );\n\n const handleCodeKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n resolveCode(codeInputValue);\n }\n },\n [codeInputValue, resolveCode],\n );\n\n const showLabelOverlay = !isFocused && selectedRawValue !== '';\n const overlayLabel = selectedOption\n ? hasExplicitDisplayConfig\n ? primaryDisplayField === 'none'\n ? ''\n : explicitPrimaryText || selectedOption.label\n : selectedOption.label\n : selectedRawValue;\n const showLookupIcon = Boolean(onDoubleClick) && isFocused && !disabled && !readOnly;\n\n return (\n <ComboboxPrimitive.Root\n open={open && !disabled && !readOnly}\n onOpenChange={setOpen}\n value={selectedRawValue}\n onValueChange={(next) => {\n if (next !== null && next !== undefined) {\n const opt = knownOptions.find((o) => String(o.value) === String(next));\n if (opt) {\n applyOption(opt, false, -1);\n } else {\n onValueChange(String(next));\n }\n }\n }}\n >\n <div ref={containerRef} className='relative w-full flex-1 flex flex-col'>\n <div\n className={cn(\n 'w-full',\n splitLayout === 'horizontal'\n ? 'flex flex-row items-stretch'\n : splitLayout === 'vertical'\n ? 'flex flex-col'\n : 'relative',\n )}\n >\n {splitLayout && (\n <Input\n value={codeInputValue}\n placeholder={codePlaceholder || 'コード'}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\n 'flex-shrink-0',\n splitLayout === 'horizontal'\n ? 'w-28 rounded-r-none border-r-0'\n : 'w-full rounded-b-none border-b-0',\n 'focus:z-10 focus-visible:ring-1',\n )}\n onChange={(e) => setCodeInputValue(e.target.value)}\n onFocus={() => setIsCodeFocused(true)}\n onBlur={() => {\n setIsCodeFocused(false);\n resolveCode(codeInputValue);\n }}\n onKeyDown={handleCodeKeyDown}\n />\n )}\n <div className={cn('flex-1', splitLayout ? 'relative' : '')}>\n {showLabelOverlay && (\n <div\n className={className}\n aria-hidden='true'\n style={{\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n zIndex: 1,\n background: 'transparent',\n display: 'flex',\n alignItems: className?.includes('flex-col') ? 'flex-start' : 'center',\n paddingLeft: 'inherit',\n paddingRight: 'inherit',\n }}\n >\n {overlayLabel}\n {selectedOption &&\n !hasExplicitDisplayConfig &&\n belowContent != null &&\n (() => {\n const text =\n typeof belowContent === 'function'\n ? belowContent(selectedOption)\n : belowContent;\n return text ? (\n <div style={{ fontSize: '0.75em', opacity: 0.6, lineHeight: 1.2 }}>\n {text}\n </div>\n ) : null;\n })()}\n </div>\n )}\n <ComboboxPrimitive.Input\n render={(inputProps) => (\n <Input\n {...inputProps}\n ref={(el: HTMLInputElement | null) => {\n inputElRef.current = el;\n // Chain refs correctly\n if (typeof inputRef === 'function') {\n inputRef(el);\n } else if (inputRef) {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = el;\n }\n if (typeof inputProps.ref === 'function') {\n inputProps.ref(el);\n } else if (inputProps.ref) {\n (inputProps.ref as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n }\n }}\n value={inputValue}\n placeholder={splitLayout ? namePlaceholder || placeholder : placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\n className,\n splitLayout === 'horizontal'\n ? 'rounded-l-none'\n : splitLayout === 'vertical'\n ? 'rounded-t-none'\n : '',\n )}\n autoComplete='off'\n style={{\n ...(displayIdSuffix\n ? { paddingRight: `${displayIdSuffix.length * 0.6 + 1.5}em` }\n : {}),\n ...(showLookupIcon ? { paddingRight: '2rem' } : {}),\n ...(showLabelOverlay\n ? { color: 'transparent', caretColor: 'transparent' }\n : {}),\n }}\n onChange={(event) => {\n inputProps.onChange?.(event);\n if (!composingRef.current) {\n handleInputValue(event.target.value);\n } else {\n setInputValue(event.target.value);\n }\n }}\n onCompositionStart={(event) => {\n inputProps.onCompositionStart?.(event);\n composingRef.current = true;\n }}\n onCompositionEnd={(event) => {\n inputProps.onCompositionEnd?.(event);\n composingRef.current = false;\n handleInputValue((event.target as HTMLInputElement).value);\n }}\n onFocus={(event) => {\n inputProps.onFocus?.(event);\n setIsFocused(true);\n setOpen(true);\n setQuery('');\n }}\n onClick={(event) => {\n inputProps.onClick?.(event);\n setOpen(true);\n setQuery('');\n }}\n onDoubleClick={() => {\n if (onDoubleClick && !disabled && !readOnly) {\n setOpen(false);\n onDoubleClick();\n }\n }}\n onKeyDownCapture={(event) => {\n inputProps.onKeyDown?.(event);\n handleKeyDown(event);\n }}\n onBlur={(event) => {\n inputProps.onBlur?.(event);\n setIsFocused(false);\n if (closeTimerRef.current !== null) {\n window.clearTimeout(closeTimerRef.current);\n }\n closeTimerRef.current = window.setTimeout(() => {\n setOpen(false);\n skipBlurClearRef.current = false;\n }, 120);\n onBlur?.();\n }}\n />\n )}\n />\n {showLookupIcon && (\n <button\n type='button'\n onMouseDown={(event: React.MouseEvent) => event.preventDefault()}\n onClick={() => {\n setOpen(false);\n onDoubleClick?.();\n }}\n style={{\n position: 'absolute',\n right: '0.25rem',\n top: '50%',\n transform: 'translateY(-50%)',\n width: '1.5rem',\n height: '1.5rem',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '0.25rem',\n color: 'var(--muted-foreground, #999)',\n background: 'transparent',\n zIndex: 2,\n }}\n aria-label='詳細検索'\n title='詳細検索 (F2)'\n >\n <Search size={14} />\n </button>\n )}\n {displayIdSuffix && (\n <span\n style={{\n position: 'absolute',\n right: '0.5em',\n top: '50%',\n transform: 'translateY(-50%)',\n fontSize: '0.75em',\n color: 'var(--muted-foreground, #999)',\n pointerEvents: 'none',\n opacity: 0.7,\n userSelect: 'none',\n zIndex: 2,\n }}\n >\n {displayIdSuffix}\n </span>\n )}\n </div>\n </div>\n <div className='flex flex-col min-h-[1.25rem] pointer-events-none'>\n {(displayIdBelow || belowContent) && (\n <div className='text-[10px] text-muted-foreground leading-none px-2 py-1'>\n {(() => {\n const text =\n typeof belowContent === 'function'\n ? selectedOption\n ? belowContent(selectedOption)\n : null\n : belowContent;\n return text || displayIdBelow;\n })()}\n </div>\n )}\n </div>\n </div>\n\n <ComboboxPrimitive.Portal>\n <ComboboxPrimitive.Positioner\n side='bottom'\n sideOffset={6}\n align='start'\n className='isolate z-50'\n anchor={containerRef}\n >\n <ComboboxPrimitive.Popup className='max-h-56 overflow-auto rounded-md border bg-popover py-1 text-popover-foreground shadow-md min-w-[calc(var(--anchor-width))]'>\n {loading && <div className='px-3 py-1.5 text-sm text-muted-foreground'>検索中...</div>}\n\n {!loading &&\n visibleOptions.length > 0 &&\n visibleOptions.map((option, index) => {\n const isSelected =\n selectedRawValue !== '' && String(option.value) === selectedRawValue;\n const showValue = showValueInList && String(option.value) !== option.label;\n\n return (\n <ComboboxPrimitive.Item\n key={String(option.value)}\n value={String(option.value)}\n className={cn(\n 'block w-full px-3 py-1.5 text-left text-sm cursor-default select-none outline-none',\n 'hover:bg-accent hover:text-accent-foreground data-highlighted:bg-accent data-highlighted:text-accent-foreground',\n isSelected ? 'bg-primary/10 text-foreground font-semibold' : '',\n )}\n onMouseEnter={() => setHighlightedIndex(index)}\n onClick={() => applyOption(option, false, index)}\n >\n <div className='flex items-start justify-between gap-2 w-full'>\n <div className='flex-1 truncate'>\n <div className='truncate'>{option.label || String(option.value)}</div>\n </div>\n <div className='flex flex-col items-end gap-0.5 text-xs text-muted-foreground flex-shrink-0'>\n {option.description ? (\n <span className='leading-none'>{option.description}</span>\n ) : (\n showValue && <span className='leading-none'>{String(option.value)}</span>\n )}\n </div>\n </div>\n </ComboboxPrimitive.Item>\n );\n })}\n\n {!loading && hasTooMany && (\n <div className='border-t px-3 py-1.5 text-xs text-muted-foreground'>\n {filteredOptions.length}件中{maxInlineResults}件を表示 — {resolvedTooManyMessage}\n </div>\n )}\n\n {!loading && filteredOptions.length === 0 && (\n <div className='px-3 py-1.5 text-sm text-muted-foreground'>{noOptionsMessage}</div>\n )}\n\n {showCreatePrompt && (\n <div className='border-t'>\n <button\n type='button'\n className='block w-full px-3 py-2 text-left text-sm hover:bg-accent hover:text-accent-foreground'\n onMouseDown={(event: React.MouseEvent) => event.preventDefault()}\n onClick={triggerCreate}\n >\n <div className='flex items-center justify-between gap-3'>\n <span className='truncate'>{createPromptLabel}</span>\n <span className='text-[11px] text-muted-foreground whitespace-nowrap'>\n Ctrl/Cmd+Enter\n </span>\n </div>\n </button>\n </div>\n )}\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n\n <Dialog open={createOpen} onOpenChange={setCreateOpen}>\n <DialogContent className='sm:max-w-md'>\n <DialogHeader>\n <DialogTitle>{createDialogTitle}</DialogTitle>\n </DialogHeader>\n <div className='space-y-3'>\n {idInputEnabled && (\n <div className='space-y-1'>\n <Label htmlFor='searchable-select-create-id'>{createIdLabel}</Label>\n <Input\n id='searchable-select-create-id'\n value={createId}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n setCreateId(event.target.value)\n }\n placeholder={createIdLabel}\n />\n </div>\n )}\n <div className='space-y-1'>\n <Label htmlFor='searchable-select-create-name'>{createNameLabel}</Label>\n <Input\n id='searchable-select-create-name'\n value={createName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n setCreateName(event.target.value)\n }\n placeholder='名称'\n />\n </div>\n <div className='flex justify-end gap-2'>\n <Button\n type='button'\n variant='ghost'\n onClick={() => setCreateOpen(false)}\n disabled={creating}\n >\n キャンセル\n </Button>\n <Button\n type='button'\n onClick={submitCreate}\n disabled={creating || !createName.trim() || (idInputEnabled && !createId.trim())}\n >\n {creating ? '作成中...' : '作成'}\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </ComboboxPrimitive.Root>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"searchable-select-input.cjs","names":["React","ComboboxPrimitive","cn","Input","Search","Dialog","DialogContent","DialogHeader","DialogTitle","Label","Button","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_components","require_ui_components_ui_input","require_ui_components_ui_dialog","require_ui_components_ui_label","react_jsx_runtime","react","lucide_react","_base_ui_react_combobox","EMPTY_OPTIONS","normalize","value","uniqByValue","map","option","options","SearchableSelectInput","open","setOpen","inputValue","setInputValue","query","setQuery","highlightedIndex","setHighlightedIndex","isFocused","setIsFocused","loading","setLoading","remoteOptions","setRemoteOptions","knownOptions","setKnownOptions","createOpen","setCreateOpen","createId","setCreateId","createName","setCreateName","creating","setCreating","codeInputValue","setCodeInputValue","isCodeFocused","setIsCodeFocused","closeTimerRef","requestIdRef","lastSearchQueryRef","containerRef","inputElRef","autoSelectedValueRef","composingRef","skipBlurClearRef","isDeletingRef","deletingTimerRef","currentOptionsKey","o","stabilizedOptions","setStabilizedOptions","prevOptionsKey","setPrevOptionsKey","merged","prev","selectedRawValue","selectedOption","splitLayout","codeVal","resolveDisplayField","field","hasExplicitDisplayConfig","primaryDisplayField","secondaryDisplayField","explicitPrimaryText","explicitSecondaryText","secondary","primary","lastValueRef","inputValueRef","currentInputValue","isExternalUpdate","hasResolvedLabel","isCurrentlyUuid","targetLabel","showIdBelow","showIdInInput","showIdRight","displayIdSuffix","secondaryDisplayPosition","displayVal","displayIdBelow","trimmedQuery","normalizedQuery","searchFn","onSearch","createFn","onCreateOption","localFilteredOptions","base","byLabel","matchByLabel","byValue","matchByValue","byDescription","matchByDescription","searchFnRef","canStartCreate","createMode","onCreateRequested","idInputEnabled","minSearchLength","requestId","timer","fetched","debounceMs","filteredOptions","visibleOptions","maxInlineResults","hasTooMany","resolvedTooManyMessage","tooManyMessage","applyOption","nextValue","onValueChange","nextInputText","keepOpen","index","el","nextInput","autoSelectSingle","single","singleValue","singleInputText","selectedIndex","handleInputValue","prevLen","isDeleting","raw","allowCustomValue","showCreatePrompt","createPromptLabel","openCreateDialog","triggerCreate","handleKeyDown","event","key","onClear","onDoubleClick","disabled","readOnly","submitCreate","id","name","created","resolveCode","match","exact","handleCodeKeyDown","showLabelOverlay","overlayLabel","showLookupIcon","next","opt","codePlaceholder","className","belowContent","text","inputProps","inputRef","namePlaceholder","placeholder","onBlur","isSelected","showValue","showValueInList","noOptionsMessage","createDialogTitle","createIdLabel","createNameLabel"],"sources":["../../../../src/ui/components/ui/searchable-select-input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Search } from 'lucide-react';\nimport { Input } from './input';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from './dialog';\nimport { Label } from './label';\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { cn } from '../../lib/utils';\n/**\n * A stringifiable selection value and its display/search metadata.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport interface SearchableSelectOption {\n /**\n * Selection identity; comparisons/deduplication use String(value), so numeric/string equivalents collide.\n */\n value: string | number;\n /**\n * Main visible/searchable text; local label matching is case-insensitive.\n */\n label: string;\n /**\n * Optional description searched by default and shown in result metadata; also a code/display fallback.\n */\n description?: string;\n /**\n * Optional named display field; name display falls back to label.\n */\n name?: string;\n /**\n * Optional exact code-lookup key; code display falls back to description.\n */\n code?: string;\n}\n\n\n/** options 未指定時に毎レンダーで新しい配列を作らないための安定参照 */\nconst EMPTY_OPTIONS: SearchableSelectOption[] = [];\n\n/**\n * Trimmed fields submitted to the host option-creation callback.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport interface SearchableSelectCreateInput {\n /**\n * Trimmed manual code, or an empty string in sequence_code mode; no local ID is generated.\n */\n id?: string;\n /**\n * Trimmed name; empty names prevent built-in creation submission.\n */\n name: string;\n}\n\n/**\n * Controls creation UI: manual_code asks for ID/name, sequence_code asks for name and passes an empty ID, disabled hides creation.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport type SearchableSelectCreateMode = 'manual_code' | 'sequence_code' | 'disabled';\n/**\n * Selects primary/secondary display text; none suppresses that display and missing name/code use documented fallbacks.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport type SearchableSelectDisplayField =\n | 'label'\n | 'description'\n | 'name'\n | 'code'\n | 'value'\n | 'none';\n/**\n * Positions secondary selected-option text to the right or below the main input.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport type SearchableSelectDisplayPosition = 'right' | 'below';\n\n/**\n * Host-owned creation request emitted instead of opening the built-in dialog.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport interface SearchableSelectCreateRequest {\n /**\n * Text requested for creation: the main-input prompt trims and rejects empty text;\n * split-code lookup passes unmatched nonempty raw text, including whitespace, unchanged.\n */\n query: string;\n /**\n * Current creation mode; disabled prevents the creation prompt.\n */\n mode: SearchableSelectCreateMode;\n}\n\n/**\n * Controlled selection, search/creation callbacks and rendering settings for SearchableSelectInput.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SearchableSelectInput\n */\nexport interface SearchableSelectInputProps {\n /**\n * Controlled selected identity; null/undefined means unselected. Display uses String(value).\n */\n value?: string | number | null;\n /**\n * Called with a string identity on selection, raw typing when allowCustomValue=true, or an empty string on clear; the host must update value.\n * @param value - Next string identity or raw input; empty string represents clearing.\n * @returns No value; complete the host callback action.\n */\n onValueChange: (value: string) => void;\n /**\n * Local candidates; defaults to a stable empty array. Known choices accumulate by string value; this is not a replacement cache.\n */\n options?: SearchableSelectOption[];\n /**\n * Optional async search callback receiving the typed query (or exact code). No AbortSignal is supplied; the host owns authorization, data access and error handling.\n * @param query - Typed query or exact code supplied by the search flow.\n * @returns A promise resolving actual candidate options; the host handles operational errors.\n */\n onSearch?: (query: string) => Promise<SearchableSelectOption[]>;\n /**\n * Creates and returns one actual option from trimmed ID/name input; the host owns persistence, uniqueness and authorization. Rejection is not rendered as error UI.\n * @param input - Trimmed creation fields with the ID/name contract defined by SearchableSelectCreateInput.\n * @returns A promise resolving the actual created option after host persistence.\n */\n onCreateOption?: (input: SearchableSelectCreateInput) => Promise<SearchableSelectOption>;\n /**\n * Receives query/mode when creation is requested and takes precedence over the internal create dialog; the host owns the resulting flow.\n * @param request - Creation query and active mode; main-input prompts trim the query,\n * while split-code lookup preserves raw text, including whitespace.\n * @returns No value; complete the host callback action.\n */\n onCreateRequested?: (request: SearchableSelectCreateRequest) => void;\n /**\n * Remote-search debounce delay in milliseconds; defaults to 300. This is not network cancellation.\n */\n debounceMs?: number;\n /**\n * Minimum trimmed query length for remote search and create prompts; defaults to 1.\n */\n minSearchLength?: number;\n /**\n * Enables case-insensitive value substring filtering; defaults to true.\n */\n matchByValue?: boolean;\n /**\n * Enables case-insensitive label substring filtering; defaults to true.\n */\n matchByLabel?: boolean;\n /**\n * Enables case-insensitive description substring filtering; defaults to true. It does not search name/code fields directly.\n */\n matchByDescription?: boolean;\n /**\n * Displays String(value) in result metadata when no description is present and it differs from label; defaults to true.\n */\n showValueInList?: boolean;\n /**\n * Emits raw typed text through onValueChange and accepts unmatched code lookup text; defaults to true.\n */\n allowCustomValue?: boolean;\n /**\n * Text displayed while no value is selected/entered; omitted means no placeholder.\n */\n placeholder?: string;\n /**\n * Disables the control/option when true; omission delegates to the underlying native/primitive default.\n */\n disabled?: boolean;\n /**\n * Prevents editing and opening this search popup when true; the host still owns the selected value.\n */\n readOnly?: boolean;\n /**\n * Additional classes on the main name/input and selected-label overlay; not on the code input or outer container.\n */\n className?: string;\n /**\n * Called when the main input blurs; popup closure is scheduled after 120ms. Separate code-input blur does not invoke this callback.\n * @returns No value; complete the host callback action.\n */\n onBlur?: () => void;\n /**\n * Message shown when there are no filtered results.\n * @defaultValue 候補なし\n */\n noOptionsMessage?: string;\n /**\n * Title of the built-in option-creation dialog.\n * @defaultValue 候補がありません。新規作成しますか?\n */\n createDialogTitle?: string;\n /**\n * Label of the built-in manual-code field.\n * @defaultValue コード\n */\n createIdLabel?: string;\n /**\n * Label of the built-in creation-name field.\n * @defaultValue 名称\n */\n createNameLabel?: string;\n /**\n * Creation mode; defaults to manual_code. disabled hides creation; sequence_code passes an empty ID to the host without generating a sequence.\n */\n createMode?: SearchableSelectCreateMode;\n /**\n * Callback or mutable ref assigned to the main input, not the optional split code input; React clears it on unmount.\n */\n inputRef?: React.Ref<HTMLInputElement>;\n /**\n * Maximum displayed result count, used by Array.slice; defaults to 10. Supply a nonnegative integer; no validation/clamping is added.\n */\n maxInlineResults?: number;\n /**\n * Overflow hint; the first {count} token is replaced with the full filtered result count.\n * @defaultValue さらに絞り込んでください\n */\n tooManyMessage?: string;\n /**\n * Selects one eligible result while focused and not composing/deleting; defaults to false. Selection may move focus to the next table-cell input or blur.\n */\n autoSelectSingle?: boolean;\n /**\n * Called on main-input double-click, F2 or the detail-search button when editable; the wrapper closes the popup first.\n * @returns No value; complete the host callback action.\n */\n onDoubleClick?: () => void;\n /**\n * Legacy secondary display: true/right places description-or-value on the right, below places it below; defaults to false. Explicit display fields take precedence.\n */\n showIdInInput?: boolean | 'right' | 'below';\n /**\n * Explicit primary selected-option field; none suppresses the selected overlay text. Missing/unresolved fields can fall back to label.\n */\n primaryDisplayField?: SearchableSelectDisplayField;\n /**\n * Explicit secondary selected-option field; none hides it. Duplicate primary/secondary text is suppressed.\n */\n secondaryDisplayField?: SearchableSelectDisplayField;\n /**\n * Placement of explicit secondary text; defaults to right.\n */\n secondaryDisplayPosition?: SearchableSelectDisplayPosition;\n /**\n * Called instead of onValueChange('') when Escape is pressed with the popup already closed; the host must clear value.\n * @returns No value; complete the host callback action.\n */\n onClear?: () => void;\n /**\n * Static text or renderer for a known selected option below the input; a truthy result takes precedence over computed below text.\n */\n belowContent?: string | ((option: SearchableSelectOption) => string);\n /**\n * Adds a code input: horizontal places code left/name right, vertical places code above name; omitted uses a single input.\n */\n splitLayout?: 'horizontal' | 'vertical';\n /**\n * Split code-input placeholder; the default is also used for an empty string.\n * @defaultValue コード\n */\n codePlaceholder?: string;\n /**\n * Split name-input placeholder; falls back to placeholder when missing or empty.\n */\n namePlaceholder?: string;\n}\n\nfunction normalize(value: unknown): string {\n return value === null || value === undefined ? '' : String(value);\n}\n\nfunction uniqByValue(options: SearchableSelectOption[]): SearchableSelectOption[] {\n const map = new Map<string, SearchableSelectOption>();\n for (const option of options) {\n map.set(String(option.value), option);\n }\n return Array.from(map.values());\n}\n\n/**\n * Combines controlled string selection, local/remote search and optional host-owned option creation.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: options=EMPTY_OPTIONS, debounceMs=300, minSearchLength=1, matchByValue=true, matchByLabel=true, allowCustomValue=true, noOptionsMessage='候補なし', createDialogTitle='候補がありません。新規作成しますか?', createIdLabel='コード', createNameLabel='名称', createMode='manual_code', maxInlineResults=10, tooManyMessage='さらに絞り込んでください', autoSelectSingle=false, showIdInInput=false, secondaryDisplayPosition='right', matchByDescription=true, showValueInList=true.\n * @returns The rendered SearchableSelectInput composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. No external combobox/dialog provider is required. The host must update value from onValueChange; numeric option values are emitted as strings and clearing emits an empty string. onSearch is debounced but receives no AbortSignal; cleanup cancels pending timers, not in-flight requests. Request IDs suppress older responses only when a newer eligible search starts. Refinements reuse up to 10 previous remote results without another fetch. Search/create rejections have no rendered error state or catch in their async handlers; handle operational failures in the host callbacks. Code-lookup search errors are caught and logged. onCreateRequested takes precedence over the built-in create dialog; neither path fabricates persistence or authorization. Known options accumulate by string value; updates containing only new labels for existing value lists may not refresh displayed labels. Applying an option may focus the next table-cell input or blur the input. Explicit display fields override showIdInInput; splitLayout adds a separate code input. See SearchableSelectInputProps for defaults and callback contracts.\n * @example\n * ```tsx\n * import { useState } from 'react';\n * import { SearchableSelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * const [value, setValue] = useState(\"\");\n * return (<label>Assignee<SearchableSelectInput value={value} onValueChange={setValue} options={[{ value: \"ada\", label: \"Ada\" }, { value: \"grace\", label: \"Grace\" }]} allowCustomValue={false} createMode=\"disabled\" placeholder=\"Choose an assignee\" /></label>);\n * }\n * ```\n */\nexport function SearchableSelectInput({\n value,\n onValueChange,\n options = EMPTY_OPTIONS,\n onSearch,\n onCreateOption,\n onCreateRequested,\n debounceMs = 300,\n minSearchLength = 1,\n matchByValue = true,\n matchByLabel = true,\n allowCustomValue = true,\n placeholder,\n disabled,\n readOnly,\n className,\n onBlur,\n noOptionsMessage = '候補なし',\n createDialogTitle = '候補がありません。新規作成しますか?',\n createIdLabel = 'コード',\n createNameLabel = '名称',\n createMode = 'manual_code',\n inputRef,\n maxInlineResults = 10,\n tooManyMessage = 'さらに絞り込んでください',\n autoSelectSingle = false,\n onDoubleClick,\n showIdInInput = false,\n primaryDisplayField,\n secondaryDisplayField,\n secondaryDisplayPosition = 'right',\n onClear,\n belowContent,\n matchByDescription = true,\n showValueInList = true,\n splitLayout,\n codePlaceholder,\n namePlaceholder,\n}: SearchableSelectInputProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState('');\n const [query, setQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n const [isFocused, setIsFocused] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [remoteOptions, setRemoteOptions] = React.useState<SearchableSelectOption[]>([]);\n const [knownOptions, setKnownOptions] = React.useState<SearchableSelectOption[]>(options);\n const [createOpen, setCreateOpen] = React.useState(false);\n const [createId, setCreateId] = React.useState('');\n const [createName, setCreateName] = React.useState('');\n const [creating, setCreating] = React.useState(false);\n const [codeInputValue, setCodeInputValue] = React.useState('');\n const [isCodeFocused, setIsCodeFocused] = React.useState(false);\n const closeTimerRef = React.useRef<number | null>(null);\n const requestIdRef = React.useRef(0);\n const lastSearchQueryRef = React.useRef('');\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const inputElRef = React.useRef<HTMLInputElement | null>(null);\n const autoSelectedValueRef = React.useRef<string>('');\n const composingRef = React.useRef(false);\n const skipBlurClearRef = React.useRef(false);\n const isDeletingRef = React.useRef(false);\n const deletingTimerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (closeTimerRef.current !== null) {\n window.clearTimeout(closeTimerRef.current);\n }\n if (deletingTimerRef.current !== null) {\n window.clearTimeout(deletingTimerRef.current);\n }\n };\n }, []);\n\n const currentOptionsKey = React.useMemo(\n () => options.map((o) => String(o.value)).join(','),\n [options],\n );\n const [stabilizedOptions, setStabilizedOptions] = React.useState(options);\n const [prevOptionsKey, setPrevOptionsKey] = React.useState(currentOptionsKey);\n\n if (currentOptionsKey !== prevOptionsKey) {\n setStabilizedOptions(options);\n setPrevOptionsKey(currentOptionsKey);\n }\n\n React.useEffect(() => {\n if (stabilizedOptions.length === 0) return;\n queueMicrotask(() => {\n setKnownOptions((prev) => {\n const merged = uniqByValue([...prev, ...stabilizedOptions]);\n if (merged.length === prev.length) return prev;\n return merged;\n });\n });\n }, [stabilizedOptions]);\n\n const selectedRawValue = normalize(value);\n\n const selectedOption = React.useMemo(\n () => knownOptions.find((option) => String(option.value) === selectedRawValue),\n [knownOptions, selectedRawValue],\n );\n\n // splitLayout 時のコード入力値の同期\n React.useEffect(() => {\n if (splitLayout) {\n if (isCodeFocused) return;\n if (selectedOption) {\n const codeVal =\n selectedOption.code ||\n (selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value));\n queueMicrotask(() => {\n setCodeInputValue(codeVal);\n });\n } else {\n queueMicrotask(() => {\n setCodeInputValue(selectedRawValue);\n });\n }\n }\n }, [selectedOption, selectedRawValue, splitLayout, isCodeFocused]);\n\n const resolveDisplayField = React.useCallback(\n (option: SearchableSelectOption, field: SearchableSelectDisplayField | undefined): string => {\n if (!field || field === 'none') return '';\n switch (field) {\n case 'label':\n return option.label || '';\n case 'description':\n return option.description ? String(option.description) : '';\n case 'name':\n return option.name || option.label || '';\n case 'code':\n return option.code || (option.description ? String(option.description) : '');\n case 'value':\n return String(option.value);\n default:\n return '';\n }\n },\n [],\n );\n const hasExplicitDisplayConfig = Boolean(primaryDisplayField || secondaryDisplayField);\n const explicitPrimaryText = React.useMemo(() => {\n if (!selectedOption || !primaryDisplayField) return '';\n return resolveDisplayField(selectedOption, primaryDisplayField);\n }, [selectedOption, primaryDisplayField, resolveDisplayField]);\n const explicitSecondaryText = React.useMemo(() => {\n if (!selectedOption || !secondaryDisplayField || secondaryDisplayField === 'none') return '';\n const secondary = resolveDisplayField(selectedOption, secondaryDisplayField);\n const primary = primaryDisplayField\n ? resolveDisplayField(selectedOption, primaryDisplayField)\n : '';\n if (!secondary || secondary === primary) return '';\n return secondary;\n }, [selectedOption, secondaryDisplayField, primaryDisplayField, resolveDisplayField]);\n\n const lastValueRef = React.useRef(value);\n const inputValueRef = React.useRef(inputValue);\n React.useLayoutEffect(() => {\n inputValueRef.current = inputValue;\n });\n React.useEffect(() => {\n const currentInputValue = inputValueRef.current;\n const isExternalUpdate = value !== lastValueRef.current;\n const hasResolvedLabel =\n selectedOption && selectedOption.label !== String(selectedOption.value);\n const isCurrentlyUuid = currentInputValue === String(value) && value !== '';\n const targetLabel = selectedOption\n ? hasExplicitDisplayConfig\n ? primaryDisplayField === 'none'\n ? ''\n : explicitPrimaryText || selectedOption.label\n : selectedOption.label\n : selectedRawValue;\n\n if (currentInputValue === targetLabel && !isExternalUpdate) return;\n\n if (isFocused && isExternalUpdate && isDeletingRef.current) {\n lastValueRef.current = value;\n return;\n }\n\n if (isFocused && isExternalUpdate && String(value) === currentInputValue) {\n lastValueRef.current = value;\n return;\n }\n\n if (\n isExternalUpdate ||\n (isCurrentlyUuid && hasResolvedLabel) ||\n (!isFocused && (selectedOption || selectedRawValue))\n ) {\n setInputValue(targetLabel);\n lastValueRef.current = value;\n }\n }, [\n value,\n selectedOption,\n selectedRawValue,\n isFocused,\n hasExplicitDisplayConfig,\n explicitPrimaryText,\n primaryDisplayField,\n ]);\n\n const showIdBelow = !hasExplicitDisplayConfig && showIdInInput === 'below';\n const showIdRight =\n !hasExplicitDisplayConfig && (showIdInInput === true || showIdInInput === 'right');\n\n const displayIdSuffix = React.useMemo(() => {\n if (hasExplicitDisplayConfig) {\n if (!selectedOption || secondaryDisplayPosition !== 'right') return null;\n return explicitSecondaryText || null;\n }\n if (!showIdRight || !selectedOption) return null;\n const displayVal = selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value);\n if (displayVal === selectedOption.label || !displayVal) return null;\n return displayVal;\n }, [\n hasExplicitDisplayConfig,\n selectedOption,\n secondaryDisplayPosition,\n explicitSecondaryText,\n showIdRight,\n ]);\n\n const displayIdBelow = React.useMemo(() => {\n if (hasExplicitDisplayConfig) {\n if (!selectedOption || secondaryDisplayPosition !== 'below') return null;\n return explicitSecondaryText || null;\n }\n if (!showIdBelow || !selectedOption) return null;\n const displayVal = selectedOption.description\n ? String(selectedOption.description)\n : String(selectedOption.value);\n if (displayVal === selectedOption.label || !displayVal) return null;\n return displayVal;\n }, [\n hasExplicitDisplayConfig,\n selectedOption,\n secondaryDisplayPosition,\n explicitSecondaryText,\n showIdBelow,\n ]);\n\n const trimmedQuery = query.trim();\n const normalizedQuery = trimmedQuery.toLowerCase();\n\n const searchFn = onSearch ?? null;\n const createFn = onCreateOption ?? null;\n\n const localFilteredOptions = React.useMemo(() => {\n if (!normalizedQuery) {\n const base = stabilizedOptions;\n if (selectedOption && !base.find((o) => String(o.value) === String(selectedOption.value))) {\n return uniqByValue([...base, selectedOption]);\n }\n return base;\n }\n return knownOptions.filter((option) => {\n const byLabel = matchByLabel ? option.label.toLowerCase().includes(normalizedQuery) : false;\n const byValue = matchByValue\n ? String(option.value).toLowerCase().includes(normalizedQuery)\n : false;\n const byDescription = matchByDescription\n ? String(option.description || '')\n .toLowerCase()\n .includes(normalizedQuery)\n : false;\n return byLabel || byValue || byDescription;\n });\n }, [\n normalizedQuery,\n knownOptions,\n matchByLabel,\n matchByValue,\n matchByDescription,\n selectedOption,\n stabilizedOptions,\n ]);\n\n const searchFnRef = React.useRef(searchFn);\n React.useLayoutEffect(() => {\n searchFnRef.current = searchFn;\n });\n\n const canCreate = Boolean(createFn) && createMode !== 'disabled';\n const canRequestCreate = Boolean(onCreateRequested) && createMode !== 'disabled';\n const canStartCreate = canCreate || canRequestCreate;\n const idInputEnabled = createMode === 'manual_code';\n\n React.useEffect(() => {\n if (!searchFnRef.current) return;\n\n const isRefinement =\n lastSearchQueryRef.current &&\n normalizedQuery.startsWith(lastSearchQueryRef.current.toLowerCase()) &&\n remoteOptions.length > 0 &&\n remoteOptions.length <= 10;\n\n if (isRefinement) {\n return;\n }\n\n if (normalizedQuery.length < minSearchLength) {\n queueMicrotask(() => {\n setRemoteOptions((prev) => (prev.length === 0 ? prev : []));\n setLoading(false);\n });\n return;\n }\n\n const requestId = ++requestIdRef.current;\n const timer = window.setTimeout(async () => {\n try {\n setLoading(true);\n const fetched = await searchFnRef.current!(query);\n if (requestIdRef.current !== requestId) return;\n lastSearchQueryRef.current = query;\n setRemoteOptions(fetched);\n setKnownOptions((prev) => uniqByValue([...prev, ...fetched]));\n } finally {\n if (requestIdRef.current === requestId) {\n setLoading(false);\n }\n }\n }, debounceMs);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [query, normalizedQuery, remoteOptions.length, minSearchLength, debounceMs]);\n\n const filteredOptions = React.useMemo(() => {\n if (!searchFn) return localFilteredOptions;\n if (normalizedQuery.length < minSearchLength) return localFilteredOptions;\n\n return remoteOptions.filter((option: SearchableSelectOption) => {\n const byLabel = matchByLabel ? option.label.toLowerCase().includes(normalizedQuery) : false;\n const byValue = matchByValue\n ? String(option.value).toLowerCase().includes(normalizedQuery)\n : false;\n const byDescription = matchByDescription\n ? String(option.description || '')\n .toLowerCase()\n .includes(normalizedQuery)\n : false;\n return byLabel || byValue || byDescription;\n });\n }, [\n searchFn,\n localFilteredOptions,\n normalizedQuery,\n minSearchLength,\n matchByLabel,\n matchByValue,\n matchByDescription,\n remoteOptions,\n ]);\n\n const visibleOptions = React.useMemo(() => {\n if (filteredOptions.length <= maxInlineResults) return filteredOptions;\n return filteredOptions.slice(0, maxInlineResults);\n }, [filteredOptions, maxInlineResults]);\n\n const hasTooMany = filteredOptions.length > maxInlineResults;\n\n const resolvedTooManyMessage = React.useMemo(() => {\n return tooManyMessage.replace('{count}', String(filteredOptions.length));\n }, [tooManyMessage, filteredOptions.length]);\n\n const applyOption = React.useCallback(\n (option: SearchableSelectOption, keepOpen: boolean, index: number) => {\n const nextValue = String(option.value);\n setKnownOptions((prev: SearchableSelectOption[]) => uniqByValue([...prev, option]));\n onValueChange(nextValue);\n const nextInputText = hasExplicitDisplayConfig\n ? resolveDisplayField(option, primaryDisplayField) || option.label\n : option.label;\n setInputValue(nextInputText);\n setQuery('');\n setOpen(keepOpen);\n setHighlightedIndex(keepOpen ? index : -1);\n if (!keepOpen) {\n const el = inputElRef.current;\n if (el) {\n const td = el.closest('td');\n const nextTd = td?.nextElementSibling as HTMLElement | null;\n const nextInput = nextTd?.querySelector<HTMLElement>(\n 'input, textarea, select, [role=\"combobox\"]',\n );\n if (nextInput) {\n skipBlurClearRef.current = true;\n nextInput.focus();\n } else {\n skipBlurClearRef.current = true;\n el.blur();\n }\n }\n }\n },\n [onValueChange, hasExplicitDisplayConfig, resolveDisplayField, primaryDisplayField],\n );\n\n // 自動選択\n React.useEffect(() => {\n if (\n !autoSelectSingle ||\n loading ||\n !isFocused ||\n composingRef.current ||\n isDeletingRef.current ||\n filteredOptions.length !== 1 ||\n normalizedQuery.length < minSearchLength\n ) {\n return;\n }\n const single = filteredOptions[0];\n const singleValue = String(single.value);\n if (autoSelectedValueRef.current === singleValue) return;\n autoSelectedValueRef.current = singleValue;\n setKnownOptions((prev: SearchableSelectOption[]) => uniqByValue([...prev, single]));\n\n onValueChange(singleValue);\n const singleInputText = hasExplicitDisplayConfig\n ? resolveDisplayField(single, primaryDisplayField) || single.label\n : single.label;\n setInputValue(singleInputText);\n setQuery('');\n setOpen(false);\n setHighlightedIndex(-1);\n\n const el = inputElRef.current;\n if (el) {\n const td = el.closest('td');\n const nextTd = td?.nextElementSibling as HTMLElement | null;\n const nextInput = nextTd?.querySelector<HTMLElement>(\n 'input, textarea, select, [role=\"combobox\"]',\n );\n if (nextInput) {\n skipBlurClearRef.current = true;\n nextInput.focus();\n } else {\n skipBlurClearRef.current = true;\n el.blur();\n }\n }\n }, [\n autoSelectSingle,\n loading,\n isFocused,\n filteredOptions,\n normalizedQuery,\n minSearchLength,\n onValueChange,\n hasExplicitDisplayConfig,\n resolveDisplayField,\n primaryDisplayField,\n ]);\n\n React.useEffect(() => {\n if (!open) {\n queueMicrotask(() => {\n setHighlightedIndex(-1);\n });\n return;\n }\n if (visibleOptions.length === 0) {\n queueMicrotask(() => {\n setHighlightedIndex(-1);\n });\n return;\n }\n const selectedIndex = visibleOptions.findIndex(\n (option) => String(option.value) === selectedRawValue,\n );\n queueMicrotask(() => {\n setHighlightedIndex(selectedIndex >= 0 ? selectedIndex : 0);\n });\n }, [open, visibleOptions, selectedRawValue]);\n\n const handleInputValue = React.useCallback(\n (raw: string) => {\n const prevLen = inputValueRef.current.length;\n const isDeleting = raw.length < prevLen;\n setInputValue(raw);\n setQuery(raw);\n setOpen(true);\n\n if (deletingTimerRef.current !== null) {\n window.clearTimeout(deletingTimerRef.current);\n deletingTimerRef.current = null;\n }\n\n if (isDeleting) {\n isDeletingRef.current = true;\n deletingTimerRef.current = window.setTimeout(() => {\n isDeletingRef.current = false;\n deletingTimerRef.current = null;\n }, 800);\n } else {\n isDeletingRef.current = false;\n autoSelectedValueRef.current = '';\n }\n\n if (!allowCustomValue) return;\n onValueChange(raw);\n },\n [allowCustomValue, onValueChange],\n );\n\n const showCreatePrompt =\n canStartCreate &&\n !loading &&\n trimmedQuery.length >= minSearchLength &&\n filteredOptions.length === 0;\n\n const createPromptLabel = trimmedQuery ? `「${trimmedQuery}」で新規作成` : '新規作成';\n\n const openCreateDialog = React.useCallback(() => {\n const nextValue = query.trim();\n setCreateId(idInputEnabled ? nextValue : '');\n setCreateName(nextValue);\n setCreateOpen(true);\n }, [query, idInputEnabled]);\n\n const triggerCreate = React.useCallback(() => {\n const nextValue = query.trim();\n if (!nextValue) return;\n if (onCreateRequested) {\n setOpen(false);\n setHighlightedIndex(-1);\n onCreateRequested({ query: nextValue, mode: createMode });\n return;\n }\n openCreateDialog();\n }, [query, onCreateRequested, createMode, openCreateDialog]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n return;\n }\n const key = event.key;\n\n if (key === 'Enter' && open) {\n if ((event.ctrlKey || event.metaKey) && showCreatePrompt) {\n event.preventDefault();\n event.stopPropagation();\n triggerCreate();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const option = visibleOptions[highlightedIndex];\n if (option) {\n applyOption(option, false, highlightedIndex);\n }\n return;\n }\n\n if (key === 'Escape' || key === 'Esc') {\n event.preventDefault();\n if (open) {\n setOpen(false);\n setHighlightedIndex(-1);\n } else {\n if (onClear) {\n onClear();\n } else {\n onValueChange('');\n }\n setInputValue('');\n setQuery('');\n autoSelectedValueRef.current = '';\n }\n return;\n }\n\n if (key === 'F2' && onDoubleClick && !disabled && !readOnly) {\n event.preventDefault();\n setOpen(false);\n onDoubleClick();\n return;\n }\n },\n [\n visibleOptions,\n highlightedIndex,\n open,\n applyOption,\n onDoubleClick,\n disabled,\n readOnly,\n onClear,\n onValueChange,\n showCreatePrompt,\n triggerCreate,\n ],\n );\n\n const submitCreate = React.useCallback(async () => {\n if (!createFn) return;\n const id = idInputEnabled ? createId.trim() : '';\n const name = createName.trim();\n if (!name) return;\n\n setCreating(true);\n try {\n const created = await createFn({ id, name });\n setKnownOptions((prev) => uniqByValue([...prev, created]));\n applyOption(created, false, -1);\n setCreateOpen(false);\n } finally {\n setCreating(false);\n }\n }, [createFn, createId, createName, applyOption, idInputEnabled]);\n\n const resolveCode = React.useCallback(\n async (raw: string) => {\n if (raw === '') {\n onValueChange('');\n setInputValue('');\n setQuery('');\n return;\n }\n\n // まずは既知の候補から\n let match = knownOptions.find(\n (o) =>\n String(o.value) === raw ||\n (o.code && o.code === raw) ||\n (o.description && String(o.description) === raw),\n );\n\n if (!match && searchFn) {\n setLoading(true);\n try {\n const fetched = await searchFn(raw);\n const exact = fetched.find(\n (o) =>\n String(o.value) === raw ||\n (o.code && o.code === raw) ||\n (o.description && String(o.description) === raw),\n );\n if (exact) {\n match = exact;\n }\n } catch (e) {\n console.error('Code lookup error', e);\n } finally {\n setLoading(false);\n }\n }\n\n if (match) {\n applyOption(match, false, -1);\n } else {\n if (allowCustomValue) {\n onValueChange(raw);\n setInputValue(raw);\n } else {\n if (canStartCreate) {\n setQuery(raw);\n if (onCreateRequested) {\n onCreateRequested({ query: raw, mode: createMode });\n } else {\n const nextValue = raw.trim();\n setCreateId(idInputEnabled ? nextValue : '');\n setCreateName('');\n setCreateOpen(true);\n }\n } else {\n // 一致せず作成も不可の場合は元に戻す\n setCodeInputValue(\n selectedOption ? selectedOption.code || String(selectedOption.value) : '',\n );\n }\n }\n }\n },\n [\n knownOptions,\n searchFn,\n applyOption,\n onValueChange,\n allowCustomValue,\n canStartCreate,\n onCreateRequested,\n createMode,\n idInputEnabled,\n selectedOption,\n ],\n );\n\n const handleCodeKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n resolveCode(codeInputValue);\n }\n },\n [codeInputValue, resolveCode],\n );\n\n const showLabelOverlay = !isFocused && selectedRawValue !== '';\n const overlayLabel = selectedOption\n ? hasExplicitDisplayConfig\n ? primaryDisplayField === 'none'\n ? ''\n : explicitPrimaryText || selectedOption.label\n : selectedOption.label\n : selectedRawValue;\n const showLookupIcon = Boolean(onDoubleClick) && isFocused && !disabled && !readOnly;\n\n return (\n <ComboboxPrimitive.Root\n open={open && !disabled && !readOnly}\n onOpenChange={setOpen}\n value={selectedRawValue}\n onValueChange={(next) => {\n if (next !== null && next !== undefined) {\n const opt = knownOptions.find((o) => String(o.value) === String(next));\n if (opt) {\n applyOption(opt, false, -1);\n } else {\n onValueChange(String(next));\n }\n }\n }}\n >\n <div ref={containerRef} className='relative w-full flex-1 flex flex-col'>\n <div\n className={cn(\n 'w-full',\n splitLayout === 'horizontal'\n ? 'flex flex-row items-stretch'\n : splitLayout === 'vertical'\n ? 'flex flex-col'\n : 'relative',\n )}\n >\n {splitLayout && (\n <Input\n value={codeInputValue}\n placeholder={codePlaceholder || 'コード'}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\n 'flex-shrink-0',\n splitLayout === 'horizontal'\n ? 'w-28 rounded-r-none border-r-0'\n : 'w-full rounded-b-none border-b-0',\n 'focus:z-10 focus-visible:ring-1',\n )}\n onChange={(e) => setCodeInputValue(e.target.value)}\n onFocus={() => setIsCodeFocused(true)}\n onBlur={() => {\n setIsCodeFocused(false);\n resolveCode(codeInputValue);\n }}\n onKeyDown={handleCodeKeyDown}\n />\n )}\n <div className={cn('flex-1', splitLayout ? 'relative' : '')}>\n {showLabelOverlay && (\n <div\n className={className}\n aria-hidden='true'\n style={{\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n zIndex: 1,\n background: 'transparent',\n display: 'flex',\n alignItems: className?.includes('flex-col') ? 'flex-start' : 'center',\n paddingLeft: 'inherit',\n paddingRight: 'inherit',\n }}\n >\n {overlayLabel}\n {selectedOption &&\n !hasExplicitDisplayConfig &&\n belowContent != null &&\n (() => {\n const text =\n typeof belowContent === 'function'\n ? belowContent(selectedOption)\n : belowContent;\n return text ? (\n <div style={{ fontSize: '0.75em', opacity: 0.6, lineHeight: 1.2 }}>\n {text}\n </div>\n ) : null;\n })()}\n </div>\n )}\n <ComboboxPrimitive.Input\n render={(inputProps) => (\n <Input\n {...inputProps}\n ref={(el: HTMLInputElement | null) => {\n inputElRef.current = el;\n // Chain refs correctly\n if (typeof inputRef === 'function') {\n inputRef(el);\n } else if (inputRef) {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = el;\n }\n if (typeof inputProps.ref === 'function') {\n inputProps.ref(el);\n } else if (inputProps.ref) {\n (inputProps.ref as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n }\n }}\n value={inputValue}\n placeholder={splitLayout ? namePlaceholder || placeholder : placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\n className,\n splitLayout === 'horizontal'\n ? 'rounded-l-none'\n : splitLayout === 'vertical'\n ? 'rounded-t-none'\n : '',\n )}\n autoComplete='off'\n style={{\n ...(displayIdSuffix\n ? { paddingRight: `${displayIdSuffix.length * 0.6 + 1.5}em` }\n : {}),\n ...(showLookupIcon ? { paddingRight: '2rem' } : {}),\n ...(showLabelOverlay\n ? { color: 'transparent', caretColor: 'transparent' }\n : {}),\n }}\n onChange={(event) => {\n inputProps.onChange?.(event);\n if (!composingRef.current) {\n handleInputValue(event.target.value);\n } else {\n setInputValue(event.target.value);\n }\n }}\n onCompositionStart={(event) => {\n inputProps.onCompositionStart?.(event);\n composingRef.current = true;\n }}\n onCompositionEnd={(event) => {\n inputProps.onCompositionEnd?.(event);\n composingRef.current = false;\n handleInputValue((event.target as HTMLInputElement).value);\n }}\n onFocus={(event) => {\n inputProps.onFocus?.(event);\n setIsFocused(true);\n setOpen(true);\n setQuery('');\n }}\n onClick={(event) => {\n inputProps.onClick?.(event);\n setOpen(true);\n setQuery('');\n }}\n onDoubleClick={() => {\n if (onDoubleClick && !disabled && !readOnly) {\n setOpen(false);\n onDoubleClick();\n }\n }}\n onKeyDownCapture={(event) => {\n inputProps.onKeyDown?.(event);\n handleKeyDown(event);\n }}\n onBlur={(event) => {\n inputProps.onBlur?.(event);\n setIsFocused(false);\n if (closeTimerRef.current !== null) {\n window.clearTimeout(closeTimerRef.current);\n }\n closeTimerRef.current = window.setTimeout(() => {\n setOpen(false);\n skipBlurClearRef.current = false;\n }, 120);\n onBlur?.();\n }}\n />\n )}\n />\n {showLookupIcon && (\n <button\n type='button'\n onMouseDown={(event: React.MouseEvent) => event.preventDefault()}\n onClick={() => {\n setOpen(false);\n onDoubleClick?.();\n }}\n style={{\n position: 'absolute',\n right: '0.25rem',\n top: '50%',\n transform: 'translateY(-50%)',\n width: '1.5rem',\n height: '1.5rem',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '0.25rem',\n color: 'var(--muted-foreground, #999)',\n background: 'transparent',\n zIndex: 2,\n }}\n aria-label='詳細検索'\n title='詳細検索 (F2)'\n >\n <Search size={14} />\n </button>\n )}\n {displayIdSuffix && (\n <span\n style={{\n position: 'absolute',\n right: '0.5em',\n top: '50%',\n transform: 'translateY(-50%)',\n fontSize: '0.75em',\n color: 'var(--muted-foreground, #999)',\n pointerEvents: 'none',\n opacity: 0.7,\n userSelect: 'none',\n zIndex: 2,\n }}\n >\n {displayIdSuffix}\n </span>\n )}\n </div>\n </div>\n <div className='flex flex-col min-h-[1.25rem] pointer-events-none'>\n {(displayIdBelow || belowContent) && (\n <div className='text-[10px] text-muted-foreground leading-none px-2 py-1'>\n {(() => {\n const text =\n typeof belowContent === 'function'\n ? selectedOption\n ? belowContent(selectedOption)\n : null\n : belowContent;\n return text || displayIdBelow;\n })()}\n </div>\n )}\n </div>\n </div>\n\n <ComboboxPrimitive.Portal>\n <ComboboxPrimitive.Positioner\n side='bottom'\n sideOffset={6}\n align='start'\n className='isolate z-50'\n anchor={containerRef}\n >\n <ComboboxPrimitive.Popup className='max-h-56 overflow-auto rounded-md border bg-popover py-1 text-popover-foreground shadow-md min-w-[calc(var(--anchor-width))]'>\n {loading && <div className='px-3 py-1.5 text-sm text-muted-foreground'>検索中...</div>}\n\n {!loading &&\n visibleOptions.length > 0 &&\n visibleOptions.map((option, index) => {\n const isSelected =\n selectedRawValue !== '' && String(option.value) === selectedRawValue;\n const showValue = showValueInList && String(option.value) !== option.label;\n\n return (\n <ComboboxPrimitive.Item\n key={String(option.value)}\n value={String(option.value)}\n className={cn(\n 'block w-full px-3 py-1.5 text-left text-sm cursor-default select-none outline-none',\n 'hover:bg-accent hover:text-accent-foreground data-highlighted:bg-accent data-highlighted:text-accent-foreground',\n isSelected ? 'bg-primary/10 text-foreground font-semibold' : '',\n )}\n onMouseEnter={() => setHighlightedIndex(index)}\n onClick={() => applyOption(option, false, index)}\n >\n <div className='flex items-start justify-between gap-2 w-full'>\n <div className='flex-1 truncate'>\n <div className='truncate'>{option.label || String(option.value)}</div>\n </div>\n <div className='flex flex-col items-end gap-0.5 text-xs text-muted-foreground flex-shrink-0'>\n {option.description ? (\n <span className='leading-none'>{option.description}</span>\n ) : (\n showValue && <span className='leading-none'>{String(option.value)}</span>\n )}\n </div>\n </div>\n </ComboboxPrimitive.Item>\n );\n })}\n\n {!loading && hasTooMany && (\n <div className='border-t px-3 py-1.5 text-xs text-muted-foreground'>\n {filteredOptions.length}件中{maxInlineResults}件を表示 — {resolvedTooManyMessage}\n </div>\n )}\n\n {!loading && filteredOptions.length === 0 && (\n <div className='px-3 py-1.5 text-sm text-muted-foreground'>{noOptionsMessage}</div>\n )}\n\n {showCreatePrompt && (\n <div className='border-t'>\n <button\n type='button'\n className='block w-full px-3 py-2 text-left text-sm hover:bg-accent hover:text-accent-foreground'\n onMouseDown={(event: React.MouseEvent) => event.preventDefault()}\n onClick={triggerCreate}\n >\n <div className='flex items-center justify-between gap-3'>\n <span className='truncate'>{createPromptLabel}</span>\n <span className='text-[11px] text-muted-foreground whitespace-nowrap'>\n Ctrl/Cmd+Enter\n </span>\n </div>\n </button>\n </div>\n )}\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n\n <Dialog open={createOpen} onOpenChange={setCreateOpen}>\n <DialogContent className='sm:max-w-md'>\n <DialogHeader>\n <DialogTitle>{createDialogTitle}</DialogTitle>\n </DialogHeader>\n <div className='space-y-3'>\n {idInputEnabled && (\n <div className='space-y-1'>\n <Label htmlFor='searchable-select-create-id'>{createIdLabel}</Label>\n <Input\n id='searchable-select-create-id'\n value={createId}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n setCreateId(event.target.value)\n }\n placeholder={createIdLabel}\n />\n </div>\n )}\n <div className='space-y-1'>\n <Label htmlFor='searchable-select-create-name'>{createNameLabel}</Label>\n <Input\n id='searchable-select-create-name'\n value={createName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n setCreateName(event.target.value)\n }\n placeholder='名称'\n />\n </div>\n <div className='flex justify-end gap-2'>\n <Button\n type='button'\n variant='ghost'\n onClick={() => setCreateOpen(false)}\n disabled={creating}\n >\n キャンセル\n </Button>\n <Button\n type='button'\n onClick={submitCreate}\n disabled={creating || !createName.trim() || (idInputEnabled && !createId.trim())}\n >\n {creating ? '作成中...' : '作成'}\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </ComboboxPrimitive.Root>\n );\n}\n"],"mappings":"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"}