@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 +1 @@
1
- {"version":3,"file":"searchable-select-input.js","names":["React","ComboboxPrimitive","React$1","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","Combobox","next","opt","cn","Input","codePlaceholder","className","belowContent","text","inputProps","inputRef","namePlaceholder","placeholder","onBlur","Search","isSelected","showValue","showValueInList","noOptionsMessage","Dialog","DialogContent","DialogHeader","DialogTitle","createDialogTitle","Label","createIdLabel","createNameLabel","Button"],"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.js","names":["React","ComboboxPrimitive","React$1","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","Combobox","next","opt","cn","Input","codePlaceholder","className","belowContent","text","inputProps","inputRef","namePlaceholder","placeholder","onBlur","Search","isSelected","showValue","showValueInList","noOptionsMessage","Dialog","DialogContent","DialogHeader","DialogTitle","createDialogTitle","Label","createIdLabel","createNameLabel","Button"],"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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"select.cjs","names":["SelectPrimitive","cn","React","ChevronDownIcon","CheckIcon","ChevronUpIcon","require_runtime","require_ui_lib_utils","react_jsx_runtime","react","lucide_react","_base_ui_react_select","Select","SelectGroup","props","className","SelectValue","SelectTrigger","testId","size","children","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","SelectInput","ariaLabel","ariaLabelledBy","value","defaultValue","icon","options","opt","option"],"sources":["../../../../src/ui/components/ui/select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as SelectPrimitive } from '@base-ui/react/select';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\n/**\n * Select Component\n * セレクトコンポーネント\n */\nconst Select = SelectPrimitive.Root;\n\n/**\n * 選択肢をグループ化するためのコンポーネント。\n */\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1 p-1', className)}\n {...props}\n />\n );\n}\n\n/**\n * トリガー内に現在選択されている値やプレースホルダーを表示するコンポーネント。\n */\nfunction SelectValue({\n className,\n children,\n ...props\n}: SelectPrimitive.Value.Props & { placeholder?: string }) {\n return (\n <SelectPrimitive.Value\n data-slot='select-value'\n className={cn('flex flex-1 text-left line-clamp-1', className)}\n {...props}\n >\n {children}\n </SelectPrimitive.Value>\n );\n}\n\ninterface SelectTriggerProps extends SelectPrimitive.Trigger.Props {\n size?: 'sm' | 'default';\n testId?: string;\n}\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, size = 'default', children, testId, ...props }, ref) => {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot='select-trigger'\n data-testid={testId}\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-background py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={<ChevronDownIcon className='text-muted-foreground size-4 pointer-events-none' />}\n />\n </SelectPrimitive.Trigger>\n );\n});\nSelectTrigger.displayName = 'SelectTrigger';\n\n/**\n * 選択肢のリストを格納するドロップダウンポップアップコンテナ。\n */\nfunction SelectContent({\n className,\n children,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className='isolate z-50'\n >\n <SelectPrimitive.Popup\n data-slot='select-content'\n className={cn(\n 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto',\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\n/**\n * グループのタイトルや見出しを表すラベルコンポーネント。\n */\nfunction SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot='select-label'\n className={cn('text-muted-foreground px-1.5 py-1 text-xs', className)}\n {...props}\n />\n );\n}\n\ninterface SelectItemProps extends SelectPrimitive.Item.Props {\n testId?: string;\n}\n\n/**\n * ドロップダウンリスト内の個々の選択肢アイテム。\n */\nfunction SelectItem({ className, children, testId, ...props }: SelectItemProps) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n data-testid={testId}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className='flex flex-1 gap-2 shrink-0 whitespace-nowrap'>\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center' />\n }\n >\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\n/**\n * アイテムやグループを区切るためのセパレーター(区切り線)。\n */\nfunction SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px pointer-events-none', className)}\n {...props}\n />\n );\n}\n\n/**\n * リストが長い場合に、上方向にスクロールするためのインジケーターボタン。\n */\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n // Note: ScrollUpArrow implementation differs in Base UI depending on version.\n // erp uses SelectPrimitive.ScrollUpArrow directly.\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpArrow>\n );\n}\n\n/**\n * リストが長い場合に、下方向にスクロールするためのインジケーターボタン。\n */\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownArrow>\n );\n}\n\n/**\n * セレクトボックスの選択肢を表すインターフェースです。\n */\nexport interface SelectOption {\n /** 表示されるラベルテキストまたは要素 */\n label: React.ReactNode;\n /** 選択時に使用される値 */\n value: string;\n /** 選択肢を無効化するかどうか */\n disabled?: boolean;\n}\n\n/**\n * SelectInputコンポーネントのプロパティです。\n */\nexport interface SelectInputProps extends React.ComponentProps<typeof SelectPrimitive.Root> {\n /** Accessible name applied to the interactive trigger. */\n 'aria-label'?: string;\n /** ID of the label for the interactive trigger. */\n 'aria-labelledby'?: string;\n /** 選択肢の配列 */\n options: SelectOption[];\n /** 未選択時に表示されるプレースホルダーテキスト */\n placeholder?: string;\n /** 追加のCSSクラス名 */\n className?: string;\n /** テスト用のID */\n testId?: string;\n /** コンポーネントのサイズ */\n size?: 'default' | 'sm';\n /** 左側に表示するカスタムアイコン要素 */\n icon?: React.ReactNode;\n}\n\n/**\n * シンプルで使いやすいセレクトボックスラッパーコンポーネントです。\n *\n * 内部で `Select`, `SelectTrigger`, `SelectValue`, `SelectContent`, `SelectItem` などの\n * 複雑な構造を隠蔽し、`options` を渡すだけで完結するように設計されています。\n * 単一の検索機能を持たないシンプルなドロップダウンが必要な場合に最適です。\n *\n * `React.forwardRef` に対応しているため、`react-hook-form` の `Controller` と直接組み合わせて使用できます。\n *\n * @example\n * ```tsx\n * <SelectInput\n * value={sortBy}\n * onValueChange={setSortBy}\n * options={[\n * { label: \"日付順\", value: \"date\" },\n * { label: \"名前順\", value: \"name\" }\n * ]}\n * placeholder=\"並び替え...\"\n * />\n * ```\n */\nconst SelectInput = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Root>,\n SelectInputProps\n>(\n (\n {\n options,\n placeholder,\n className,\n testId,\n size = 'default',\n icon,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n value,\n defaultValue,\n onValueChange,\n disabled,\n name,\n required,\n open,\n defaultOpen,\n onOpenChange,\n ...props\n },\n ref,\n ) => {\n return (\n <Select\n value={value !== undefined ? value : defaultValue !== undefined ? undefined : null}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n disabled={disabled}\n name={name}\n required={required}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n {...props}\n >\n <SelectTrigger ref={ref} className={className} testId={testId} size={size} aria-label={ariaLabel} aria-labelledby={ariaLabelledBy}>\n {icon}\n <SelectValue placeholder={placeholder}>\n {value !== undefined && value !== null\n ? (options.find((opt) => String(opt.value) === String(value))?.label ??\n (typeof value === 'string' || typeof value === 'number' ? String(value) : null))\n : undefined}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n },\n);\n\nSelectInput.displayName = 'SelectInput';\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectInput,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"select.cjs","names":["SelectPrimitive","cn","React","ChevronDownIcon","CheckIcon","ChevronUpIcon","require_runtime","require_ui_lib_utils","react_jsx_runtime","react","lucide_react","_base_ui_react_select","Select","SelectGroup","props","className","SelectValue","SelectTrigger","testId","size","children","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","SelectSeparator","SelectInput","ariaLabel","ariaLabelledBy","value","defaultValue","icon","options","opt","option"],"sources":["../../../../src/ui/components/ui/select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as SelectPrimitive } from '@base-ui/react/select';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\n/**\n * Coordinates a Base UI single or multiple selection popup.\n * @typeParam Value - Option value shape inferred from root props and selection callbacks.\n * @typeParam Multiple - Whether selection uses an array; extends boolean | undefined and defaults to false.\n * @param props - Inherited primitive configuration, children and controlled/default state; the upstream prop type remains authoritative.\n * @returns The rendered Select composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nconst Select = SelectPrimitive.Root;\n\n/**\n * Groups related select options.\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 SelectGroup composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1 p-1', className)}\n {...props}\n />\n );\n}\n\n/**\n * Displays the current selection or an upstream placeholder inside a trigger.\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 SelectValue composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectValue({\n className,\n children,\n ...props\n}: SelectPrimitive.Value.Props & { /**\n * Text displayed while no value is selected/entered; omitted means no placeholder.\n */\n/**\n * Text displayed while no value is selected/entered; omitted means no placeholder.\n */\nplaceholder?: string }) {\n return (\n <SelectPrimitive.Value\n data-slot='select-value'\n className={cn('flex flex-1 text-left line-clamp-1', className)}\n {...props}\n >\n {children}\n </SelectPrimitive.Value>\n );\n}\n\n/**\n * Base UI trigger props with Appkit sizing and test selector.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SelectTrigger\n */\ninterface SelectTriggerProps extends SelectPrimitive.Trigger.Props {\n /**\n * Visual size preset; defaults to default unless the owning component states otherwise.\n */\n size?: 'sm' | 'default';\n /**\n * Stable data-testid assigned to the rendered control/container; omitted means no selector.\n */\n testId?: string;\n}\n\n/**\n * Renders the select opener with a trailing chevron and optional test ID.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: size='default'.\n * @returns The rendered SelectTrigger composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback. The ref prop forwards to the rendered control or container declared by the component ref type.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, size = 'default', children, testId, ...props }, ref) => {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot='select-trigger'\n data-testid={testId}\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-background py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={<ChevronDownIcon className='text-muted-foreground size-4 pointer-events-none' />}\n />\n </SelectPrimitive.Trigger>\n );\n});\nSelectTrigger.displayName = 'SelectTrigger';\n\n/**\n * Portals the positioned option popup with a list and scroll controls.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: side='bottom', sideOffset=4, align='center', alignOffset=0, alignItemWithTrigger=true.\n * @returns The rendered SelectContent composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectContent({\n className,\n children,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className='isolate z-50'\n >\n <SelectPrimitive.Popup\n data-slot='select-content'\n className={cn(\n 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto',\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\n/**\n * Provides the label for a select option group.\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 SelectLabel composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot='select-label'\n className={cn('text-muted-foreground px-1.5 py-1 text-xs', className)}\n {...props}\n />\n );\n}\n\n/**\n * Base UI option props with a stable selector for the option element.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SelectItem\n */\ninterface SelectItemProps extends SelectPrimitive.Item.Props {\n /**\n * Stable data-testid assigned to the rendered control/container; omitted means no selector.\n */\n testId?: string;\n}\n\n/**\n * Renders an option with selected-state checkmark and optional test ID.\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 SelectItem composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectItem({ className, children, testId, ...props }: SelectItemProps) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n data-testid={testId}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className='flex flex-1 gap-2 shrink-0 whitespace-nowrap'>\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center' />\n }\n >\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\n/**\n * Draws a noninteractive divider between option groups.\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 SelectSeparator composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px pointer-events-none', className)}\n {...props}\n />\n );\n}\n\n/**\n * Renders the upstream upward-scroll control with an up chevron.\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 SelectScrollUpButton composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback. children are replaced by the fixed scroll chevron.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n // Note: ScrollUpArrow implementation differs in Base UI depending on version.\n // erp uses SelectPrimitive.ScrollUpArrow directly.\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpArrow>\n );\n}\n\n/**\n * Renders the upstream downward-scroll control with a down chevron.\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 SelectScrollDownButton composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback. children are replaced by the fixed scroll chevron.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownArrow>\n );\n}\n\n/**\n * Display content, string value and disabled state for a SelectInput option.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SelectInput\n */\nexport interface SelectOption {\n /**\n * Visible React content for this option.\n */\n label: React.ReactNode;\n /**\n * Unique string identity passed to selection callbacks.\n */\n value: string;\n /**\n * Prevents option selection when true; omitted means enabled.\n */\n disabled?: boolean;\n}\n\n/**\n * Base UI root props with option data and trigger presentation/accessibility settings.\n * @remarks Inherited native or primitive props keep their upstream types and behavior; this declaration documents only the wrapper-owned options.\n * @see SelectInput\n */\nexport interface SelectInputProps extends React.ComponentProps<typeof SelectPrimitive.Root> {\n /**\n * Accessible name applied to the interactive trigger.\n */\n 'aria-label'?: string;\n /**\n * Space-separated element IDs that label the interactive trigger.\n */\n 'aria-labelledby'?: string;\n /**\n * Options in popup order; labels are also resolved for controlled values.\n */\n options: SelectOption[];\n /**\n * Text displayed while no value is selected/entered; omitted means no placeholder.\n */\n placeholder?: string;\n /**\n * Additional classes on the interactive SelectTrigger.\n */\n className?: string;\n /**\n * data-testid on the SelectTrigger; no per-option IDs are synthesized.\n */\n testId?: string;\n /**\n * Trigger size; defaults to default.\n */\n size?: 'default' | 'sm';\n /**\n * Optional content before SelectValue inside the trigger.\n */\n icon?: React.ReactNode;\n}\n\n/**\n * Builds a complete select from an options array and forwards its ref to the trigger.\n * @param props - Component attributes and children accepted by the declared Base UI or native prop type; className customizes wrapper styling. Wrapper defaults: size='default'.\n * @returns The rendered SelectInput composition.\n * @remarks Import @alneas/appkit-react/styles in the rendering host. Compound parts require Select context; GroupLabel belongs in a Group. Content supplies portal, positioner, List and scroll arrows. SelectInput className/testId/size and accessible labels target the trigger; remaining root props target Select. size defaults to default. If both value and defaultValue are absent, SelectInput passes controlled null; use defaultValue for upstream uncontrolled state. Controlled values are matched to option labels by String(value), with string/number fallback. The ref prop forwards to the rendered control or container declared by the component ref type.\n * @example\n * ```tsx\n * import { SelectInput } from '@alneas/appkit-react/ui';\n * import '@alneas/appkit-react/styles';\n *\n * export function Example() {\n * return (<SelectInput aria-label=\"Sort order\" defaultValue=\"date\" options={[{ value: \"date\", label: \"Date\" }, { value: \"name\", label: \"Name\" }]} placeholder=\"Choose order\" />);\n * }\n * ```\n */\nconst SelectInput = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Root>,\n SelectInputProps\n>(\n (\n {\n options,\n placeholder,\n className,\n testId,\n size = 'default',\n icon,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n value,\n defaultValue,\n onValueChange,\n disabled,\n name,\n required,\n open,\n defaultOpen,\n onOpenChange,\n ...props\n },\n ref,\n ) => {\n return (\n <Select\n value={value !== undefined ? value : defaultValue !== undefined ? undefined : null}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n disabled={disabled}\n name={name}\n required={required}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n {...props}\n >\n <SelectTrigger ref={ref} className={className} testId={testId} size={size} aria-label={ariaLabel} aria-labelledby={ariaLabelledBy}>\n {icon}\n <SelectValue placeholder={placeholder}>\n {value !== undefined && value !== null\n ? (options.find((opt) => String(opt.value) === String(value))?.label ??\n (typeof value === 'string' || typeof value === 'number' ? String(value) : null))\n : undefined}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n },\n);\n\nSelectInput.displayName = 'SelectInput';\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectInput,\n};\n"],"mappings":"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"}