@fastsprout/reacd-shadcn 0.0.0-stage → 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 (643) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +28 -2
  3. package/THIRD_PARTY_NOTICES.md +21 -0
  4. package/dist/accordion/accordion.adapter.d.ts +2 -0
  5. package/dist/accordion/accordion.adapter.js +10 -0
  6. package/dist/action-menu/menu-content.d.ts +5 -0
  7. package/dist/action-menu/menu-content.js +15 -0
  8. package/dist/action-menu/menu-items.d.ts +5 -0
  9. package/dist/action-menu/menu-items.js +46 -0
  10. package/dist/action-menu/menu-surface.d.ts +7 -0
  11. package/dist/action-menu/menu-surface.js +15 -0
  12. package/dist/action-menu/use-menu-frame.d.ts +8 -0
  13. package/dist/action-menu/use-menu-frame.js +24 -0
  14. package/dist/alert/alert.adapter.d.ts +2 -0
  15. package/dist/alert/alert.adapter.js +13 -0
  16. package/dist/app/app.adapter.d.ts +2 -0
  17. package/dist/app/app.adapter.js +7 -0
  18. package/dist/auth-form/auth-form.adapter.d.ts +2 -0
  19. package/dist/auth-form/auth-form.adapter.js +21 -0
  20. package/dist/avatar/avatar.adapter.d.ts +2 -0
  21. package/dist/avatar/avatar.adapter.js +8 -0
  22. package/dist/avatar-group/avatar-group.adapter.d.ts +2 -0
  23. package/dist/avatar-group/avatar-group.adapter.js +9 -0
  24. package/dist/avatar-group/overflow.adapter.d.ts +5 -0
  25. package/dist/avatar-group/overflow.adapter.js +5 -0
  26. package/dist/badge/badge.adapter.d.ts +2 -0
  27. package/dist/badge/badge.adapter.js +9 -0
  28. package/dist/banner/banner.adapter.d.ts +2 -0
  29. package/dist/banner/banner.adapter.js +12 -0
  30. package/dist/blog-post/blog-post.adapter.d.ts +3 -0
  31. package/dist/blog-post/blog-post.adapter.js +5 -0
  32. package/dist/blog-posts/blog-posts.adapter.d.ts +3 -0
  33. package/dist/blog-posts/blog-posts.adapter.js +7 -0
  34. package/dist/breadcrumb/breadcrumb.adapter.d.ts +2 -0
  35. package/dist/breadcrumb/breadcrumb.adapter.js +13 -0
  36. package/dist/button/button.adapter.d.ts +2 -0
  37. package/dist/button/button.adapter.js +8 -0
  38. package/dist/calendar/calendar-date.d.ts +7 -0
  39. package/dist/calendar/calendar-date.js +24 -0
  40. package/dist/calendar/calendar-day-button.d.ts +2 -0
  41. package/dist/calendar/calendar-day-button.js +9 -0
  42. package/dist/calendar/calendar-form-bridge.d.ts +6 -0
  43. package/dist/calendar/calendar-form-bridge.js +11 -0
  44. package/dist/calendar/calendar-localization.d.ts +15 -0
  45. package/dist/calendar/calendar-localization.js +28 -0
  46. package/dist/calendar/calendar.adapter.d.ts +2 -0
  47. package/dist/calendar/calendar.adapter.js +47 -0
  48. package/dist/card/card.adapter.d.ts +2 -0
  49. package/dist/card/card.adapter.js +13 -0
  50. package/dist/carousel/carousel-panel.d.ts +7 -0
  51. package/dist/carousel/carousel-panel.js +8 -0
  52. package/dist/carousel/carousel.adapter.d.ts +2 -0
  53. package/dist/carousel/carousel.adapter.js +43 -0
  54. package/dist/carousel/focus-boundary.d.ts +16 -0
  55. package/dist/carousel/focus-boundary.js +19 -0
  56. package/dist/changelog-version/changelog-version.adapter.d.ts +3 -0
  57. package/dist/changelog-version/changelog-version.adapter.js +5 -0
  58. package/dist/changelog-versions/changelog-versions.adapter.d.ts +3 -0
  59. package/dist/changelog-versions/changelog-versions.adapter.js +8 -0
  60. package/dist/chart/cartesian.d.ts +5 -0
  61. package/dist/chart/cartesian.js +15 -0
  62. package/dist/chart/chart-graphic.d.ts +2 -0
  63. package/dist/chart/chart-graphic.js +14 -0
  64. package/dist/chart/chart-table.d.ts +2 -0
  65. package/dist/chart/chart-table.js +6 -0
  66. package/dist/chart/chart.adapter.d.ts +2 -0
  67. package/dist/chart/chart.adapter.js +17 -0
  68. package/dist/chart/legend.d.ts +3 -0
  69. package/dist/chart/legend.js +14 -0
  70. package/dist/chart/patterns.d.ts +9 -0
  71. package/dist/chart/patterns.js +8 -0
  72. package/dist/chat-attachment/chat-attachment.adapter.d.ts +2 -0
  73. package/dist/chat-attachment/chat-attachment.adapter.js +12 -0
  74. package/dist/chat-disclosure/chat-disclosure.d.ts +9 -0
  75. package/dist/chat-disclosure/chat-disclosure.js +10 -0
  76. package/dist/chat-message/chat-message.adapter.d.ts +2 -0
  77. package/dist/chat-message/chat-message.adapter.js +12 -0
  78. package/dist/chat-messages/chat-messages.adapter.d.ts +2 -0
  79. package/dist/chat-messages/chat-messages.adapter.js +13 -0
  80. package/dist/chat-messages/use-follow-latest.d.ts +6 -0
  81. package/dist/chat-messages/use-follow-latest.js +33 -0
  82. package/dist/chat-palette/chat-palette.adapter.d.ts +2 -0
  83. package/dist/chat-palette/chat-palette.adapter.js +4 -0
  84. package/dist/chat-prompt/chat-prompt.adapter.d.ts +2 -0
  85. package/dist/chat-prompt/chat-prompt.adapter.js +30 -0
  86. package/dist/chat-prompt/use-prompt-controls.d.ts +22 -0
  87. package/dist/chat-prompt/use-prompt-controls.js +69 -0
  88. package/dist/chat-prompt/use-prompt-escape.d.ts +5 -0
  89. package/dist/chat-prompt/use-prompt-escape.js +39 -0
  90. package/dist/chat-prompt-submit/chat-prompt-submit.adapter.d.ts +2 -0
  91. package/dist/chat-prompt-submit/chat-prompt-submit.adapter.js +14 -0
  92. package/dist/chat-prompt-submit/prompt-action.d.ts +12 -0
  93. package/dist/chat-prompt-submit/prompt-action.js +45 -0
  94. package/dist/chat-reasoning/chat-reasoning.adapter.d.ts +2 -0
  95. package/dist/chat-reasoning/chat-reasoning.adapter.js +15 -0
  96. package/dist/chat-reasoning/use-reasoning-disclosure.d.ts +10 -0
  97. package/dist/chat-reasoning/use-reasoning-disclosure.js +23 -0
  98. package/dist/chat-shimmer/chat-shimmer.adapter.d.ts +2 -0
  99. package/dist/chat-shimmer/chat-shimmer.adapter.js +5 -0
  100. package/dist/chat-tool/chat-tool.adapter.d.ts +2 -0
  101. package/dist/chat-tool/chat-tool.adapter.js +7 -0
  102. package/dist/checkbox/checkbox.adapter.d.ts +2 -0
  103. package/dist/checkbox/checkbox.adapter.js +27 -0
  104. package/dist/checkbox-group/checkbox-group.adapter.d.ts +2 -0
  105. package/dist/checkbox-group/checkbox-group.adapter.js +18 -0
  106. package/dist/chip/chip.adapter.d.ts +2 -0
  107. package/dist/chip/chip.adapter.js +12 -0
  108. package/dist/code-editor/code-editor.adapter.d.ts +2 -0
  109. package/dist/code-editor/code-editor.adapter.js +9 -0
  110. package/dist/collapsible/collapsible.adapter.d.ts +2 -0
  111. package/dist/collapsible/collapsible.adapter.js +11 -0
  112. package/dist/color-mode-avatar/color-mode-avatar.adapter.d.ts +2 -0
  113. package/dist/color-mode-avatar/color-mode-avatar.adapter.js +6 -0
  114. package/dist/color-mode-button/color-mode-button.adapter.d.ts +2 -0
  115. package/dist/color-mode-button/color-mode-button.adapter.js +11 -0
  116. package/dist/color-mode-image/color-mode-image.adapter.d.ts +2 -0
  117. package/dist/color-mode-image/color-mode-image.adapter.js +6 -0
  118. package/dist/color-mode-image/mode-image.d.ts +4 -0
  119. package/dist/color-mode-image/mode-image.js +8 -0
  120. package/dist/color-mode-select/color-mode-select.adapter.d.ts +2 -0
  121. package/dist/color-mode-select/color-mode-select.adapter.js +16 -0
  122. package/dist/color-mode-switch/color-mode-switch.adapter.d.ts +2 -0
  123. package/dist/color-mode-switch/color-mode-switch.adapter.js +5 -0
  124. package/dist/color-picker/color-hex.d.ts +11 -0
  125. package/dist/color-picker/color-hex.js +57 -0
  126. package/dist/color-picker/color-picker.adapter.d.ts +2 -0
  127. package/dist/color-picker/color-picker.adapter.js +20 -0
  128. package/dist/color-picker/use-color-model.d.ts +6 -0
  129. package/dist/color-picker/use-color-model.js +18 -0
  130. package/dist/command-palette/command-palette.adapter.d.ts +2 -0
  131. package/dist/command-palette/command-palette.adapter.js +44 -0
  132. package/dist/container/container.adapter.d.ts +2 -0
  133. package/dist/container/container.adapter.js +4 -0
  134. package/dist/content-navigation/content-navigation.adapter.d.ts +2 -0
  135. package/dist/content-navigation/content-navigation.adapter.js +10 -0
  136. package/dist/content-search/content-search.adapter.d.ts +2 -0
  137. package/dist/content-search/content-search.adapter.js +27 -0
  138. package/dist/content-search-button/content-search-button.adapter.d.ts +2 -0
  139. package/dist/content-search-button/content-search-button.adapter.js +6 -0
  140. package/dist/content-surround/content-surround.adapter.d.ts +2 -0
  141. package/dist/content-surround/content-surround.adapter.js +14 -0
  142. package/dist/content-toc/content-toc.adapter.d.ts +2 -0
  143. package/dist/content-toc/content-toc.adapter.js +10 -0
  144. package/dist/context-menu/context-menu.adapter.d.ts +2 -0
  145. package/dist/context-menu/context-menu.adapter.js +13 -0
  146. package/dist/context-menu/keyboard-trigger.d.ts +2 -0
  147. package/dist/context-menu/keyboard-trigger.js +13 -0
  148. package/dist/dashboard-group/dashboard-group.adapter.d.ts +3 -0
  149. package/dist/dashboard-group/dashboard-group.adapter.js +54 -0
  150. package/dist/dashboard-navbar/dashboard-navbar.adapter.d.ts +2 -0
  151. package/dist/dashboard-navbar/dashboard-navbar.adapter.js +12 -0
  152. package/dist/dashboard-panel/dashboard-panel.adapter.d.ts +2 -0
  153. package/dist/dashboard-panel/dashboard-panel.adapter.js +18 -0
  154. package/dist/dashboard-resize-handle/dashboard-resize-handle.adapter.d.ts +2 -0
  155. package/dist/dashboard-resize-handle/dashboard-resize-handle.adapter.js +46 -0
  156. package/dist/dashboard-search/dashboard-search.adapter.d.ts +2 -0
  157. package/dist/dashboard-search/dashboard-search.adapter.js +24 -0
  158. package/dist/dashboard-search-button/dashboard-search-button.adapter.d.ts +2 -0
  159. package/dist/dashboard-search-button/dashboard-search-button.adapter.js +6 -0
  160. package/dist/dashboard-sidebar/dashboard-sidebar.adapter.d.ts +2 -0
  161. package/dist/dashboard-sidebar/dashboard-sidebar.adapter.js +19 -0
  162. package/dist/dashboard-sidebar-collapse/dashboard-sidebar-collapse.adapter.d.ts +2 -0
  163. package/dist/dashboard-sidebar-collapse/dashboard-sidebar-collapse.adapter.js +22 -0
  164. package/dist/dashboard-sidebar-toggle/dashboard-sidebar-toggle.adapter.d.ts +2 -0
  165. package/dist/dashboard-sidebar-toggle/dashboard-sidebar-toggle.adapter.js +22 -0
  166. package/dist/dashboard-toolbar/dashboard-toolbar.adapter.d.ts +2 -0
  167. package/dist/dashboard-toolbar/dashboard-toolbar.adapter.js +4 -0
  168. package/dist/data-table/data-table.adapter.d.ts +2 -0
  169. package/dist/data-table/data-table.adapter.js +28 -0
  170. package/dist/data-table/filters.adapter.d.ts +8 -0
  171. package/dist/data-table/filters.adapter.js +40 -0
  172. package/dist/data-table/pagination.adapter.d.ts +2 -0
  173. package/dist/data-table/pagination.adapter.js +21 -0
  174. package/dist/divider/divider.adapter.d.ts +1 -0
  175. package/dist/divider/divider.adapter.js +5 -0
  176. package/dist/drawer/drawer.adapter.d.ts +2 -0
  177. package/dist/drawer/drawer.adapter.js +14 -0
  178. package/dist/dropdown-menu/dropdown-menu.adapter.d.ts +2 -0
  179. package/dist/dropdown-menu/dropdown-menu.adapter.js +14 -0
  180. package/dist/editor/drag-session.d.ts +7 -0
  181. package/dist/editor/drag-session.js +41 -0
  182. package/dist/editor/editor.adapter.d.ts +2 -0
  183. package/dist/editor/editor.adapter.js +21 -0
  184. package/dist/editor/publish-edit.d.ts +3 -0
  185. package/dist/editor/publish-edit.js +12 -0
  186. package/dist/editor/use-editor-port.d.ts +5 -0
  187. package/dist/editor/use-editor-port.js +40 -0
  188. package/dist/editor/use-editor-session.d.ts +14 -0
  189. package/dist/editor/use-editor-session.js +198 -0
  190. package/dist/editor-conversion/attribute.d.ts +3 -0
  191. package/dist/editor-conversion/attribute.js +3 -0
  192. package/dist/editor-conversion/budget.d.ts +2 -0
  193. package/dist/editor-conversion/budget.js +61 -0
  194. package/dist/editor-conversion/from-sdk-block.d.ts +5 -0
  195. package/dist/editor-conversion/from-sdk-block.js +73 -0
  196. package/dist/editor-conversion/from-sdk-inline.d.ts +3 -0
  197. package/dist/editor-conversion/from-sdk-inline.js +57 -0
  198. package/dist/editor-conversion/from-sdk.d.ts +4 -0
  199. package/dist/editor-conversion/from-sdk.js +35 -0
  200. package/dist/editor-conversion/id-allocator.d.ts +2 -0
  201. package/dist/editor-conversion/id-allocator.js +29 -0
  202. package/dist/editor-conversion/projection-weight.d.ts +8 -0
  203. package/dist/editor-conversion/projection-weight.js +124 -0
  204. package/dist/editor-conversion/text-chunks.d.ts +6 -0
  205. package/dist/editor-conversion/text-chunks.js +18 -0
  206. package/dist/editor-conversion/to-sdk.d.ts +3 -0
  207. package/dist/editor-conversion/to-sdk.js +58 -0
  208. package/dist/editor-drag-handle/editor-drag-handle.adapter.d.ts +2 -0
  209. package/dist/editor-drag-handle/editor-drag-handle.adapter.js +54 -0
  210. package/dist/editor-drag-handle/use-drag-session.d.ts +9 -0
  211. package/dist/editor-drag-handle/use-drag-session.js +22 -0
  212. package/dist/editor-emoji-menu/editor-emoji-menu.adapter.d.ts +2 -0
  213. package/dist/editor-emoji-menu/editor-emoji-menu.adapter.js +9 -0
  214. package/dist/editor-mention-menu/editor-mention-menu.adapter.d.ts +2 -0
  215. package/dist/editor-mention-menu/editor-mention-menu.adapter.js +17 -0
  216. package/dist/editor-menu/lookup-controller.d.ts +24 -0
  217. package/dist/editor-menu/lookup-controller.js +83 -0
  218. package/dist/editor-menu/menu-panel.d.ts +10 -0
  219. package/dist/editor-menu/menu-panel.js +17 -0
  220. package/dist/editor-menu/menu-plugin.d.ts +3 -0
  221. package/dist/editor-menu/menu-plugin.js +190 -0
  222. package/dist/editor-menu/menu-port.d.ts +3 -0
  223. package/dist/editor-menu/menu-port.js +27 -0
  224. package/dist/editor-menu/menu-store.d.ts +20 -0
  225. package/dist/editor-menu/menu-store.js +92 -0
  226. package/dist/editor-menu/use-editor-menu.d.ts +9 -0
  227. package/dist/editor-menu/use-editor-menu.js +21 -0
  228. package/dist/editor-sdk/apply-paste.d.ts +3 -0
  229. package/dist/editor-sdk/apply-paste.js +12 -0
  230. package/dist/editor-sdk/atom-data.d.ts +7 -0
  231. package/dist/editor-sdk/atom-data.js +41 -0
  232. package/dist/editor-sdk/atoms.d.ts +3 -0
  233. package/dist/editor-sdk/atoms.js +25 -0
  234. package/dist/editor-sdk/block-types.d.ts +1 -0
  235. package/dist/editor-sdk/block-types.js +10 -0
  236. package/dist/editor-sdk/command-chain.d.ts +3 -0
  237. package/dist/editor-sdk/command-chain.js +25 -0
  238. package/dist/editor-sdk/commands.d.ts +5 -0
  239. package/dist/editor-sdk/commands.js +38 -0
  240. package/dist/editor-sdk/controlled-selection.d.ts +2 -0
  241. package/dist/editor-sdk/controlled-selection.js +8 -0
  242. package/dist/editor-sdk/extensions.d.ts +2 -0
  243. package/dist/editor-sdk/extensions.js +21 -0
  244. package/dist/editor-sdk/identity-plugin.d.ts +18 -0
  245. package/dist/editor-sdk/identity-plugin.js +107 -0
  246. package/dist/editor-sdk/identity.d.ts +3 -0
  247. package/dist/editor-sdk/identity.js +28 -0
  248. package/dist/editor-sdk/plain-paste.d.ts +3 -0
  249. package/dist/editor-sdk/plain-paste.js +66 -0
  250. package/dist/editor-sdk/resources.d.ts +5 -0
  251. package/dist/editor-sdk/resources.js +14 -0
  252. package/dist/editor-sdk/select-block.d.ts +2 -0
  253. package/dist/editor-sdk/select-block.js +31 -0
  254. package/dist/editor-sdk/selection-mapping.d.ts +9 -0
  255. package/dist/editor-sdk/selection-mapping.js +92 -0
  256. package/dist/editor-sdk/structural-selection.d.ts +4 -0
  257. package/dist/editor-sdk/structural-selection.js +21 -0
  258. package/dist/editor-suggestion-menu/editor-suggestion-menu.adapter.d.ts +2 -0
  259. package/dist/editor-suggestion-menu/editor-suggestion-menu.adapter.js +13 -0
  260. package/dist/editor-toolbar/editor-toolbar.adapter.d.ts +2 -0
  261. package/dist/editor-toolbar/editor-toolbar.adapter.js +38 -0
  262. package/dist/element/variants.d.ts +5 -0
  263. package/dist/element/variants.js +5 -0
  264. package/dist/empty/empty.adapter.d.ts +2 -0
  265. package/dist/empty/empty.adapter.js +10 -0
  266. package/dist/error/error.adapter.d.ts +2 -0
  267. package/dist/error/error.adapter.js +9 -0
  268. package/dist/field-group/field-group.adapter.d.ts +2 -0
  269. package/dist/field-group/field-group.adapter.js +5 -0
  270. package/dist/file-upload/file-upload.adapter.d.ts +2 -0
  271. package/dist/file-upload/file-upload.adapter.js +60 -0
  272. package/dist/file-upload/intake-validation.d.ts +8 -0
  273. package/dist/file-upload/intake-validation.js +48 -0
  274. package/dist/file-upload/intake.d.ts +36 -0
  275. package/dist/file-upload/intake.js +112 -0
  276. package/dist/file-upload/read-file.d.ts +5 -0
  277. package/dist/file-upload/read-file.js +32 -0
  278. package/dist/footer/footer.adapter.d.ts +2 -0
  279. package/dist/footer/footer.adapter.js +4 -0
  280. package/dist/footer-columns/footer-columns.adapter.d.ts +2 -0
  281. package/dist/footer-columns/footer-columns.adapter.js +8 -0
  282. package/dist/form-field/focus-control.d.ts +1 -0
  283. package/dist/form-field/focus-control.js +21 -0
  284. package/dist/form-field/form-field.adapter.d.ts +2 -0
  285. package/dist/form-field/form-field.adapter.js +22 -0
  286. package/dist/form-menu-shared/request.d.ts +4 -0
  287. package/dist/form-menu-shared/request.js +14 -0
  288. package/dist/grid/grid.adapter.d.ts +2 -0
  289. package/dist/grid/grid.adapter.js +5 -0
  290. package/dist/h-stack/h-stack.adapter.d.ts +2 -0
  291. package/dist/h-stack/h-stack.adapter.js +5 -0
  292. package/dist/header/header-menu.d.ts +7 -0
  293. package/dist/header/header-menu.js +25 -0
  294. package/dist/header/header.adapter.d.ts +2 -0
  295. package/dist/header/header.adapter.js +5 -0
  296. package/dist/icon/icon-map.d.ts +16 -0
  297. package/dist/icon/icon-map.js +17 -0
  298. package/dist/icon/icon.adapter.d.ts +2 -0
  299. package/dist/icon/icon.adapter.js +7 -0
  300. package/dist/index.d.ts +1 -0
  301. package/dist/index.js +1 -0
  302. package/dist/input/input.adapter.d.ts +2 -0
  303. package/dist/input/input.adapter.js +34 -0
  304. package/dist/input/validation-message.d.ts +1 -0
  305. package/dist/input/validation-message.js +13 -0
  306. package/dist/input-date/date-control.d.ts +16 -0
  307. package/dist/input-date/date-control.js +35 -0
  308. package/dist/input-date/input-date.adapter.d.ts +2 -0
  309. package/dist/input-date/input-date.adapter.js +36 -0
  310. package/dist/input-menu/input-menu-form.d.ts +7 -0
  311. package/dist/input-menu/input-menu-form.js +8 -0
  312. package/dist/input-menu/input-menu-popup.d.ts +8 -0
  313. package/dist/input-menu/input-menu-popup.js +13 -0
  314. package/dist/input-menu/input-menu.adapter.d.ts +2 -0
  315. package/dist/input-menu/input-menu.adapter.js +74 -0
  316. package/dist/input-menu/use-input-menu.d.ts +26 -0
  317. package/dist/input-menu/use-input-menu.js +92 -0
  318. package/dist/input-number/input-number.adapter.d.ts +2 -0
  319. package/dist/input-number/input-number.adapter.js +13 -0
  320. package/dist/input-rating/input-rating.adapter.d.ts +2 -0
  321. package/dist/input-rating/input-rating.adapter.js +33 -0
  322. package/dist/input-rating/rating-stars.d.ts +4 -0
  323. package/dist/input-rating/rating-stars.js +9 -0
  324. package/dist/input-tags/input-tags.adapter.d.ts +2 -0
  325. package/dist/input-tags/input-tags.adapter.js +47 -0
  326. package/dist/input-tags/use-tag-draft.d.ts +9 -0
  327. package/dist/input-tags/use-tag-draft.js +43 -0
  328. package/dist/input-time/anchored-time.d.ts +1 -0
  329. package/dist/input-time/anchored-time.js +5 -0
  330. package/dist/input-time/draft-validation.d.ts +1 -0
  331. package/dist/input-time/draft-validation.js +1 -0
  332. package/dist/input-time/focus-draft.d.ts +1 -0
  333. package/dist/input-time/focus-draft.js +1 -0
  334. package/dist/input-time/input-time.adapter.d.ts +2 -0
  335. package/dist/input-time/input-time.adapter.js +32 -0
  336. package/dist/input-time/time-control.d.ts +15 -0
  337. package/dist/input-time/time-control.js +37 -0
  338. package/dist/input-time/use-time-change.d.ts +10 -0
  339. package/dist/input-time/use-time-change.js +4 -0
  340. package/dist/kbd/kbd-key.adapter.d.ts +5 -0
  341. package/dist/kbd/kbd-key.adapter.js +5 -0
  342. package/dist/kbd/kbd.adapter.d.ts +2 -0
  343. package/dist/kbd/kbd.adapter.js +8 -0
  344. package/dist/listbox/clear-focus.d.ts +1 -0
  345. package/dist/listbox/clear-focus.js +8 -0
  346. package/dist/listbox/form-bridge.d.ts +14 -0
  347. package/dist/listbox/form-bridge.js +34 -0
  348. package/dist/listbox/listbox.adapter.d.ts +2 -0
  349. package/dist/listbox/listbox.adapter.js +79 -0
  350. package/dist/listbox/native-semantics.d.ts +9 -0
  351. package/dist/listbox/native-semantics.js +33 -0
  352. package/dist/listbox/selection.d.ts +4 -0
  353. package/dist/listbox/selection.js +31 -0
  354. package/dist/listbox/use-listbox-request.d.ts +10 -0
  355. package/dist/listbox/use-listbox-request.js +73 -0
  356. package/dist/locale-select/locale-select.adapter.d.ts +2 -0
  357. package/dist/locale-select/locale-select.adapter.js +15 -0
  358. package/dist/main/main.adapter.d.ts +2 -0
  359. package/dist/main/main.adapter.js +7 -0
  360. package/dist/marquee/marquee.adapter.d.ts +2 -0
  361. package/dist/marquee/marquee.adapter.js +23 -0
  362. package/dist/modal/modal.adapter.d.ts +2 -0
  363. package/dist/modal/modal.adapter.js +30 -0
  364. package/dist/navigation/navigation.adapter.d.ts +2 -0
  365. package/dist/navigation/navigation.adapter.js +5 -0
  366. package/dist/navigation-menu/menu-target.d.ts +4 -0
  367. package/dist/navigation-menu/menu-target.js +13 -0
  368. package/dist/navigation-menu/navigation-menu.adapter.d.ts +2 -0
  369. package/dist/navigation-menu/navigation-menu.adapter.js +16 -0
  370. package/dist/page-anchors/page-anchors.adapter.d.ts +3 -0
  371. package/dist/page-anchors/page-anchors.adapter.js +5 -0
  372. package/dist/page-aside/page-aside.adapter.d.ts +2 -0
  373. package/dist/page-aside/page-aside.adapter.js +6 -0
  374. package/dist/page-body/page-body.adapter.d.ts +2 -0
  375. package/dist/page-body/page-body.adapter.js +4 -0
  376. package/dist/page-card/page-card.adapter.d.ts +3 -0
  377. package/dist/page-card/page-card.adapter.js +5 -0
  378. package/dist/page-columns/page-columns.adapter.d.ts +2 -0
  379. package/dist/page-columns/page-columns.adapter.js +5 -0
  380. package/dist/page-cta/page-cta.adapter.d.ts +3 -0
  381. package/dist/page-cta/page-cta.adapter.js +5 -0
  382. package/dist/page-feature/page-feature.adapter.d.ts +3 -0
  383. package/dist/page-feature/page-feature.adapter.js +6 -0
  384. package/dist/page-grid/page-grid.adapter.d.ts +2 -0
  385. package/dist/page-grid/page-grid.adapter.js +4 -0
  386. package/dist/page-header/page-header.adapter.d.ts +3 -0
  387. package/dist/page-header/page-header.adapter.js +5 -0
  388. package/dist/page-hero/page-hero.adapter.d.ts +3 -0
  389. package/dist/page-hero/page-hero.adapter.js +5 -0
  390. package/dist/page-links/page-links.adapter.d.ts +3 -0
  391. package/dist/page-links/page-links.adapter.js +5 -0
  392. package/dist/page-list/page-list.adapter.d.ts +2 -0
  393. package/dist/page-list/page-list.adapter.js +6 -0
  394. package/dist/page-logos/page-logos.adapter.d.ts +2 -0
  395. package/dist/page-logos/page-logos.adapter.js +11 -0
  396. package/dist/page-section/page-section.adapter.d.ts +3 -0
  397. package/dist/page-section/page-section.adapter.js +5 -0
  398. package/dist/pagination/pagination-control.d.ts +13 -0
  399. package/dist/pagination/pagination-control.js +31 -0
  400. package/dist/pagination/pagination.adapter.d.ts +2 -0
  401. package/dist/pagination/pagination.adapter.js +23 -0
  402. package/dist/panel/use-panel-frame.d.ts +15 -0
  403. package/dist/panel/use-panel-frame.js +36 -0
  404. package/dist/pin-input/pin-input.adapter.d.ts +2 -0
  405. package/dist/pin-input/pin-input.adapter.js +18 -0
  406. package/dist/pin-input/pin-slots.d.ts +6 -0
  407. package/dist/pin-input/pin-slots.js +9 -0
  408. package/dist/popover/popover.adapter.d.ts +2 -0
  409. package/dist/popover/popover.adapter.js +55 -0
  410. package/dist/pricing-plan/pricing-plan.adapter.d.ts +3 -0
  411. package/dist/pricing-plan/pricing-plan.adapter.js +15 -0
  412. package/dist/pricing-plans/pricing-plans.adapter.d.ts +3 -0
  413. package/dist/pricing-plans/pricing-plans.adapter.js +8 -0
  414. package/dist/pricing-table/pricing-table.adapter.d.ts +3 -0
  415. package/dist/pricing-table/pricing-table.adapter.js +9 -0
  416. package/dist/progress/progress.adapter.d.ts +2 -0
  417. package/dist/progress/progress.adapter.js +10 -0
  418. package/dist/progress-group/progress-group.adapter.d.ts +2 -0
  419. package/dist/progress-group/progress-group.adapter.js +9 -0
  420. package/dist/radio-group/radio-group.adapter.d.ts +2 -0
  421. package/dist/radio-group/radio-group.adapter.js +14 -0
  422. package/dist/registry/action-menus.d.ts +4 -0
  423. package/dist/registry/action-menus.js +9 -0
  424. package/dist/registry/auth-form.d.ts +3 -0
  425. package/dist/registry/auth-form.js +6 -0
  426. package/dist/registry/calendar.d.ts +3 -0
  427. package/dist/registry/calendar.js +6 -0
  428. package/dist/registry/carousel.d.ts +3 -0
  429. package/dist/registry/carousel.js +6 -0
  430. package/dist/registry/chart.d.ts +3 -0
  431. package/dist/registry/chart.js +4 -0
  432. package/dist/registry/chat-composer.d.ts +5 -0
  433. package/dist/registry/chat-composer.js +12 -0
  434. package/dist/registry/chat-feedback.d.ts +5 -0
  435. package/dist/registry/chat-feedback.js +12 -0
  436. package/dist/registry/chat.d.ts +5 -0
  437. package/dist/registry/chat.js +12 -0
  438. package/dist/registry/color-mode.d.ts +7 -0
  439. package/dist/registry/color-mode.js +18 -0
  440. package/dist/registry/color-picker.d.ts +3 -0
  441. package/dist/registry/color-picker.js +6 -0
  442. package/dist/registry/command-palette.d.ts +3 -0
  443. package/dist/registry/command-palette.js +6 -0
  444. package/dist/registry/content-outline.d.ts +4 -0
  445. package/dist/registry/content-outline.js +9 -0
  446. package/dist/registry/content-search.d.ts +4 -0
  447. package/dist/registry/content-search.js +9 -0
  448. package/dist/registry/content.d.ts +26 -0
  449. package/dist/registry/content.js +75 -0
  450. package/dist/registry/dashboard.d.ts +12 -0
  451. package/dist/registry/dashboard.js +33 -0
  452. package/dist/registry/edge-panels.d.ts +4 -0
  453. package/dist/registry/edge-panels.js +9 -0
  454. package/dist/registry/editor-drag-handle.d.ts +3 -0
  455. package/dist/registry/editor-drag-handle.js +6 -0
  456. package/dist/registry/editor-menus.d.ts +5 -0
  457. package/dist/registry/editor-menus.js +12 -0
  458. package/dist/registry/editor.d.ts +4 -0
  459. package/dist/registry/editor.js +9 -0
  460. package/dist/registry/editorial.d.ts +6 -0
  461. package/dist/registry/editorial.js +15 -0
  462. package/dist/registry/element.d.ts +3 -0
  463. package/dist/registry/element.js +4 -0
  464. package/dist/registry/feedback.d.ts +8 -0
  465. package/dist/registry/feedback.js +21 -0
  466. package/dist/registry/fields.d.ts +24 -0
  467. package/dist/registry/fields.js +69 -0
  468. package/dist/registry/file-upload.d.ts +3 -0
  469. package/dist/registry/file-upload.js +6 -0
  470. package/dist/registry/listbox.d.ts +3 -0
  471. package/dist/registry/listbox.js +6 -0
  472. package/dist/registry/marquee.d.ts +3 -0
  473. package/dist/registry/marquee.js +6 -0
  474. package/dist/registry/navigation-composition.d.ts +5 -0
  475. package/dist/registry/navigation-composition.js +12 -0
  476. package/dist/registry/page-composition.d.ts +7 -0
  477. package/dist/registry/page-composition.js +18 -0
  478. package/dist/registry/page-logos.d.ts +3 -0
  479. package/dist/registry/page-logos.js +6 -0
  480. package/dist/registry/page-navigation.d.ts +5 -0
  481. package/dist/registry/page-navigation.js +12 -0
  482. package/dist/registry/page-presentation.d.ts +7 -0
  483. package/dist/registry/page-presentation.js +18 -0
  484. package/dist/registry/pricing.d.ts +5 -0
  485. package/dist/registry/pricing.js +12 -0
  486. package/dist/registry/shells.d.ts +10 -0
  487. package/dist/registry/shells.js +27 -0
  488. package/dist/registry/sidebar-splitter.d.ts +4 -0
  489. package/dist/registry/sidebar-splitter.js +9 -0
  490. package/dist/registry/structure.d.ts +10 -0
  491. package/dist/registry/structure.js +27 -0
  492. package/dist/registry/toast.d.ts +3 -0
  493. package/dist/registry/toast.js +4 -0
  494. package/dist/scroll-area/scroll-area.adapter.d.ts +2 -0
  495. package/dist/scroll-area/scroll-area.adapter.js +6 -0
  496. package/dist/select/display-text.d.ts +2 -0
  497. package/dist/select/display-text.js +18 -0
  498. package/dist/select/select-base-content.adapter.d.ts +6 -0
  499. package/dist/select/select-base-content.adapter.js +16 -0
  500. package/dist/select/select-content.adapter.d.ts +4 -0
  501. package/dist/select/select-content.adapter.js +11 -0
  502. package/dist/select/select-option.d.ts +5 -0
  503. package/dist/select/select-option.js +6 -0
  504. package/dist/select/select.adapter.d.ts +2 -0
  505. package/dist/select/select.adapter.js +47 -0
  506. package/dist/select/use-select-change.d.ts +2 -0
  507. package/dist/select/use-select-change.js +29 -0
  508. package/dist/select-menu/select-menu-form.d.ts +7 -0
  509. package/dist/select-menu/select-menu-form.js +14 -0
  510. package/dist/select-menu/select-menu-popup.d.ts +8 -0
  511. package/dist/select-menu/select-menu-popup.js +39 -0
  512. package/dist/select-menu/select-menu-root.d.ts +8 -0
  513. package/dist/select-menu/select-menu-root.js +34 -0
  514. package/dist/select-menu/select-menu.adapter.d.ts +2 -0
  515. package/dist/select-menu/select-menu.adapter.js +63 -0
  516. package/dist/select-menu/use-select-menu.d.ts +22 -0
  517. package/dist/select-menu/use-select-menu.js +111 -0
  518. package/dist/separator/separator.adapter.d.ts +2 -0
  519. package/dist/separator/separator.adapter.js +6 -0
  520. package/dist/shadcn.adapter.d.ts +2 -0
  521. package/dist/shadcn.adapter.js +102 -0
  522. package/dist/sidebar/sidebar.adapter.d.ts +2 -0
  523. package/dist/sidebar/sidebar.adapter.js +63 -0
  524. package/dist/skeleton/skeleton.adapter.d.ts +2 -0
  525. package/dist/skeleton/skeleton.adapter.js +8 -0
  526. package/dist/slideover/slideover.adapter.d.ts +2 -0
  527. package/dist/slideover/slideover.adapter.js +14 -0
  528. package/dist/slider/request-change.d.ts +2 -0
  529. package/dist/slider/request-change.js +34 -0
  530. package/dist/slider/slider-thumb.d.ts +7 -0
  531. package/dist/slider/slider-thumb.js +18 -0
  532. package/dist/slider/slider.adapter.d.ts +2 -0
  533. package/dist/slider/slider.adapter.js +36 -0
  534. package/dist/splitter/splitter.adapter.d.ts +3 -0
  535. package/dist/splitter/splitter.adapter.js +50 -0
  536. package/dist/stepper/stepper.adapter.d.ts +2 -0
  537. package/dist/stepper/stepper.adapter.js +30 -0
  538. package/dist/styles-contract.d.ts +1 -0
  539. package/dist/styles-contract.js +1 -0
  540. package/dist/styles.css +2 -0
  541. package/dist/styles.d.ts +1 -0
  542. package/dist/styles.js +1 -0
  543. package/dist/submit-button/submit-button.adapter.d.ts +2 -0
  544. package/dist/submit-button/submit-button.adapter.js +11 -0
  545. package/dist/surface/surface.adapter.d.ts +2 -0
  546. package/dist/surface/surface.adapter.js +8 -0
  547. package/dist/switch/switch.adapter.d.ts +2 -0
  548. package/dist/switch/switch.adapter.js +26 -0
  549. package/dist/table/interactive-table.d.ts +2 -0
  550. package/dist/table/interactive-table.js +24 -0
  551. package/dist/table/table.adapter.d.ts +2 -0
  552. package/dist/table/table.adapter.js +14 -0
  553. package/dist/tabs/tabs.adapter.d.ts +2 -0
  554. package/dist/tabs/tabs.adapter.js +17 -0
  555. package/dist/temporal/draft-validity.d.ts +13 -0
  556. package/dist/temporal/draft-validity.js +18 -0
  557. package/dist/temporal/focus-incomplete-segment.d.ts +1 -0
  558. package/dist/temporal/focus-incomplete-segment.js +7 -0
  559. package/dist/temporal/range-reset-focus.d.ts +1 -0
  560. package/dist/temporal/range-reset-focus.js +16 -0
  561. package/dist/temporal/temporal-recovery.d.ts +6 -0
  562. package/dist/temporal/temporal-recovery.js +4 -0
  563. package/dist/temporal/use-range-reset.d.ts +6 -0
  564. package/dist/temporal/use-range-reset.js +55 -0
  565. package/dist/temporal/use-temporal-change.d.ts +10 -0
  566. package/dist/temporal/use-temporal-change.js +21 -0
  567. package/dist/text/text.adapter.d.ts +1 -0
  568. package/dist/text/text.adapter.js +1 -0
  569. package/dist/text-area/text-area.adapter.d.ts +2 -0
  570. package/dist/text-area/text-area.adapter.js +9 -0
  571. package/dist/textarea/textarea.adapter.d.ts +2 -0
  572. package/dist/textarea/textarea.adapter.js +40 -0
  573. package/dist/textarea/use-auto-rows.d.ts +2 -0
  574. package/dist/textarea/use-auto-rows.js +33 -0
  575. package/dist/theme/theme.adapter.d.ts +2 -0
  576. package/dist/theme/theme.adapter.js +23 -0
  577. package/dist/timeline/timeline.adapter.d.ts +2 -0
  578. package/dist/timeline/timeline.adapter.js +13 -0
  579. package/dist/toast/toast-data.d.ts +17 -0
  580. package/dist/toast/toast-data.js +1 -0
  581. package/dist/toast/toast-focus.d.ts +12 -0
  582. package/dist/toast/toast-focus.js +38 -0
  583. package/dist/toast/toast-provider.d.ts +4 -0
  584. package/dist/toast/toast-provider.js +11 -0
  585. package/dist/toast/toast-queue-context.d.ts +24 -0
  586. package/dist/toast/toast-queue-context.js +8 -0
  587. package/dist/toast/toast-queue.d.ts +12 -0
  588. package/dist/toast/toast-queue.js +29 -0
  589. package/dist/toast/toast-registration.d.ts +9 -0
  590. package/dist/toast/toast-registration.js +149 -0
  591. package/dist/toast/toast-viewport.d.ts +1 -0
  592. package/dist/toast/toast-viewport.js +36 -0
  593. package/dist/toast/toast.adapter.d.ts +2 -0
  594. package/dist/toast/toast.adapter.js +14 -0
  595. package/dist/toggle/toggle.adapter.d.ts +2 -0
  596. package/dist/toggle/toggle.adapter.js +8 -0
  597. package/dist/tooltip/tooltip.adapter.d.ts +2 -0
  598. package/dist/tooltip/tooltip.adapter.js +29 -0
  599. package/dist/tooltip/use-tooltip-anchor.d.ts +5 -0
  600. package/dist/tooltip/use-tooltip-anchor.js +36 -0
  601. package/dist/tree/focus-element.d.ts +1 -0
  602. package/dist/tree/focus-element.js +4 -0
  603. package/dist/tree/tree.adapter.d.ts +2 -0
  604. package/dist/tree/tree.adapter.js +27 -0
  605. package/dist/tree/use-tree.d.ts +13 -0
  606. package/dist/tree/use-tree.js +73 -0
  607. package/dist/user/user.adapter.d.ts +2 -0
  608. package/dist/user/user.adapter.js +24 -0
  609. package/dist/v-stack/v-stack.adapter.d.ts +2 -0
  610. package/dist/v-stack/v-stack.adapter.js +5 -0
  611. package/dist/vendor/lib/utils.d.ts +2 -0
  612. package/dist/vendor/lib/utils.js +5 -0
  613. package/dist/vendor/ui/accordion.d.ts +7 -0
  614. package/dist/vendor/ui/accordion.js +14 -0
  615. package/dist/vendor/ui/alert.d.ts +8 -0
  616. package/dist/vendor/ui/alert.js +22 -0
  617. package/dist/vendor/ui/badge.d.ts +9 -0
  618. package/dist/vendor/ui/badge.js +21 -0
  619. package/dist/vendor/ui/button.d.ts +11 -0
  620. package/dist/vendor/ui/button.js +33 -0
  621. package/dist/vendor/ui/card.d.ts +8 -0
  622. package/dist/vendor/ui/card.js +16 -0
  623. package/dist/vendor/ui/checkbox.d.ts +4 -0
  624. package/dist/vendor/ui/checkbox.js +9 -0
  625. package/dist/vendor/ui/input.d.ts +3 -0
  626. package/dist/vendor/ui/input.js +8 -0
  627. package/dist/vendor/ui/label.d.ts +5 -0
  628. package/dist/vendor/ui/label.js +10 -0
  629. package/dist/vendor/ui/progress.d.ts +4 -0
  630. package/dist/vendor/ui/progress.js +8 -0
  631. package/dist/vendor/ui/select.d.ts +13 -0
  632. package/dist/vendor/ui/select.js +27 -0
  633. package/dist/vendor/ui/separator.d.ts +4 -0
  634. package/dist/vendor/ui/separator.js +8 -0
  635. package/dist/vendor/ui/slider.d.ts +4 -0
  636. package/dist/vendor/ui/slider.js +8 -0
  637. package/dist/vendor/ui/switch.d.ts +4 -0
  638. package/dist/vendor/ui/switch.js +8 -0
  639. package/dist/vendor/ui/tabs.d.ts +7 -0
  640. package/dist/vendor/ui/tabs.js +13 -0
  641. package/dist/vendor/ui/textarea.d.ts +3 -0
  642. package/dist/vendor/ui/textarea.js +8 -0
  643. package/package.json +71 -3
@@ -0,0 +1,35 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useMemo, useState } from 'react';
3
+ import { DateField, DateInput, DateSegment, Label, Text, FieldError, } from 'react-aria-components/DateField';
4
+ import { useLocale } from 'react-aria-components/I18nProvider';
5
+ import { parseDate } from '@internationalized/date';
6
+ import { INPUT_DATE_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-date-policy.js';
7
+ import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
8
+ import { Button } from '../vendor/ui/button.js';
9
+ import { TemporalDraftValidity } from '../temporal/draft-validity.js';
10
+ export function DateControl({ label, value, referenceDate, onValueChange, description, error, min, max, name, required, disabled, readOnly, }) {
11
+ const metadata = useFieldMetadata({ name, required, disabled });
12
+ const { direction } = useLocale();
13
+ const draftErrorId = useId();
14
+ const [draftInvalid, setDraftInvalid] = useState(false);
15
+ const [segments, setSegments] = useState(null);
16
+ const controlValue = useMemo(() => (value === null ? null : parseDate(value)), [value]);
17
+ const minimum = useMemo(() => (min === undefined ? undefined : parseDate(min)), [min]);
18
+ const maximum = useMemo(() => (max === undefined ? undefined : parseDate(max)), [max]);
19
+ const placeholder = useMemo(() => parseDate(referenceDate), [referenceDate]);
20
+ const invalid = Boolean(metadata.error) || error !== undefined || draftInvalid;
21
+ const descriptions = [
22
+ ...metadata.descriptionIds,
23
+ ...(draftInvalid ? [draftErrorId] : []),
24
+ ].join(' ');
25
+ return (_jsx(DateField, { className: "reacd-node reacd-field reacd-date-control", ...(descriptions ? { 'aria-describedby': descriptions } : {}), value: controlValue, onChange: (next) => {
26
+ setDraftInvalid(false);
27
+ onValueChange(next === null ? null : next.toString());
28
+ }, ...(minimum === undefined ? {} : { minValue: minimum }), ...(maximum === undefined ? {} : { maxValue: maximum }), ...(invalid ? { isInvalid: true } : {}), isRequired: metadata.required, isDisabled: metadata.disabled, isReadOnly: readOnly ?? false, granularity: INPUT_DATE_POLICY.granularity, shouldForceLeadingZeros: INPUT_DATE_POLICY.forceLeadingZeros, validationBehavior: INPUT_DATE_POLICY.validationBehavior, placeholderValue: placeholder, children: ({ state }) => (_jsxs(_Fragment, { children: [_jsx(Label, { children: label }), _jsxs("div", { className: "reacd-date-entry", children: [_jsx(DateInput, { className: "reacd-date-segments", dir: direction, ref: setSegments, "aria-invalid": invalid || undefined, children: (segment) => (_jsx(DateSegment, { className: "reacd-date-segment", segment: segment, "aria-invalid": invalid || undefined })) }), _jsx(Button, { type: "button", variant: "outline", className: "reacd-button reacd-date-clear", disabled: metadata.disabled || readOnly, "aria-label": `${INPUT_DATE_POLICY.clearLabel} ${label}`, onClick: () => {
29
+ if (value === null) {
30
+ state.setValue(null);
31
+ setDraftInvalid(false);
32
+ }
33
+ onValueChange(null);
34
+ }, children: INPUT_DATE_POLICY.clearLabel })] }), description === undefined ? null : (_jsx(Text, { slot: "description", className: "reacd-field-description", children: description })), draftInvalid ? (_jsx("span", { id: draftErrorId, role: "alert", className: "reacd-date-error", children: INPUT_DATE_POLICY.incompleteValue })) : metadata.error ? null : (_jsx(FieldError, { className: "reacd-date-error", children: error })), _jsx("input", { type: "hidden", name: metadata.name, value: value ?? '', disabled: metadata.disabled }), _jsx(TemporalDraftValidity, { segments: state.segments, value: value, required: metadata.required, disabled: metadata.disabled, root: segments, onInvalidChange: setDraftInvalid })] })) }));
35
+ }
@@ -0,0 +1,2 @@
1
+ import type { InputDateProps } from '@fastsprout/reacd/adapter-runtime/components/input-date/index.js';
2
+ export declare function ShadcnInputDate(properties: InputDateProps): import("react").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { I18nProvider } from 'react-aria-components/I18nProvider';
4
+ import { useDirection } from '@radix-ui/react-direction';
5
+ import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
6
+ import { DATE_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/date-time-policy.js';
7
+ import { INPUT_DATE_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-date-policy.js';
8
+ import { boundedDateValueSchema, dateRangeValueSchema, } from '@fastsprout/reacd/adapter-runtime/schema/date-time/index.js';
9
+ import { DateControl } from './date-control.js';
10
+ import { useTemporalChange } from '../temporal/use-temporal-change.js';
11
+ import { temporalRecovery } from '../temporal/temporal-recovery.js';
12
+ import { useRangeReset } from '../temporal/use-range-reset.js';
13
+ function SingleDate(props) {
14
+ const { error, change } = useTemporalChange((value) => boundedDateValueSchema({ min: props.min, max: props.max }).safeParse(value)
15
+ .success, props.onValueChange, INPUT_DATE_POLICY.invalidValue, props, temporalRecovery(props.value, props));
16
+ return _jsx(DateControl, { ...props, error: error, onValueChange: change });
17
+ }
18
+ function RangeDate(props) {
19
+ const { error, change } = useTemporalChange((value) => dateRangeValueSchema({ min: props.min, max: props.max }).safeParse(value).success, props.onValueChange, INPUT_DATE_POLICY.invalidRange, props, temporalRecovery(props.value, props));
20
+ const { ref, revision, change: changeEndpoint } = useRangeReset(props.value, change);
21
+ return (_jsxs("fieldset", { ref: ref, className: "reacd-date-range", children: [_jsx("legend", { children: props.label }), _jsx(DateControl, { ...props, label: `${INPUT_DATE_POLICY.startLabel} ${props.label}`, value: props.value.start, name: props.name === undefined ? undefined : `${props.name}.start`, error: error, onValueChange: (start) => changeEndpoint({ ...props.value, start }) }, `${revision}-start`), _jsx(DateControl, { ...props, label: `${INPUT_DATE_POLICY.endLabel} ${props.label}`, value: props.value.end, name: props.name === undefined ? undefined : `${props.name}.end`, error: error, onValueChange: (end) => changeEndpoint({ ...props.value, end }) }, `${revision}-end`)] }));
22
+ }
23
+ export function ShadcnInputDate(properties) {
24
+ const metadata = useFieldMetadata(properties);
25
+ const props = {
26
+ ...properties,
27
+ name: metadata.name,
28
+ required: metadata.required,
29
+ disabled: metadata.disabled,
30
+ };
31
+ const direction = useDirection();
32
+ const locale = useMemo(() => new Intl.Locale(props.locale ?? DATE_TIME_POLICY.locale, {
33
+ calendar: DATE_TIME_POLICY.calendar,
34
+ }).toString(), [props.locale]);
35
+ return (_jsx(I18nProvider, { locale: locale, children: _jsx("div", { className: "reacd-node reacd-field reacd-input-date", dir: direction, children: props.mode === 'range' ? _jsx(RangeDate, { ...props }) : _jsx(SingleDate, { ...props }) }) }));
36
+ }
@@ -0,0 +1,7 @@
1
+ import type { RefObject } from 'react';
2
+ import type { InputMenuProps } from '@fastsprout/reacd/adapter-runtime/components/input-menu/index.js';
3
+ export declare function InputMenuForm({ properties, input, invalid, }: {
4
+ properties: InputMenuProps;
5
+ input: RefObject<HTMLInputElement | null>;
6
+ invalid: () => void;
7
+ }): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function InputMenuForm({ properties, input, invalid, }) {
3
+ return (_jsxs(_Fragment, { children: [_jsx("input", { type: "hidden", name: properties.name, value: properties.value, disabled: properties.disabled }), _jsx("input", { className: "reacd-input-menu-validation", tabIndex: -1, "aria-hidden": "true", required: properties.required, disabled: properties.disabled, defaultValue: properties.value, onInvalid: (event) => {
4
+ event.preventDefault();
5
+ invalid();
6
+ input.current?.focus();
7
+ } }, String(properties.value === ''))] }));
8
+ }
@@ -0,0 +1,8 @@
1
+ import type { InputMenuProps } from '@fastsprout/reacd/adapter-runtime/components/input-menu/index.js';
2
+ export declare function InputMenuPopup({ label, items, inactive, highlight, open, }: {
3
+ label: string;
4
+ open: boolean;
5
+ items: InputMenuProps['items'];
6
+ inactive: boolean;
7
+ highlight: (item: InputMenuProps['items'][number]) => void;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useContext } from 'react';
3
+ import { Autocomplete } from '@base-ui/react/autocomplete';
4
+ import { useDirection } from '@base-ui/react/direction-provider';
5
+ import { FORM_MENU_DEFAULTS, FORM_MENU_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/form-menu-policy.js';
6
+ import { ThemeVariablesContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/theme-context.js';
7
+ import { PortalHostContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/portal-context.js';
8
+ export function InputMenuPopup({ label, items, inactive, highlight, open, }) {
9
+ const variables = useContext(ThemeVariablesContext);
10
+ const host = useContext(PortalHostContext);
11
+ const direction = useDirection();
12
+ return (_jsx(Autocomplete.Portal, { container: host ?? undefined, children: _jsx(Autocomplete.Positioner, { sideOffset: FORM_MENU_POLICY.sideOffsetPx, collisionPadding: FORM_MENU_POLICY.collisionPaddingPx, className: "reacd-root reacd-portal-root reacd-input-menu-positioner", style: variables, dir: direction, children: _jsx(Autocomplete.Popup, { hidden: !open, className: "reacd-input-menu-popup", dir: direction, children: _jsx(Autocomplete.List, { "aria-label": `${label} ${FORM_MENU_DEFAULTS.suggestionsLabel}`, className: "reacd-input-menu-list", children: items.map((item) => (_jsxs(Autocomplete.Item, { value: item, disabled: inactive || item.disabled, className: "reacd-input-menu-item", onClickCapture: () => highlight(item), children: [_jsx("span", { children: item.label }), item.description !== undefined && _jsx("span", { children: item.description })] }, item.value))) }) }) }) }));
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { InputMenuProps } from '@fastsprout/reacd/adapter-runtime/components/input-menu/index.js';
2
+ export declare function ShadcnInputMenu(declared: InputMenuProps): import("react").JSX.Element;
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useRef } from 'react';
3
+ import { Autocomplete } from '@base-ui/react/autocomplete';
4
+ import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
5
+ import { CONTENT_POLICY } from '@fastsprout/reacd/adapter-runtime/core/policy.js';
6
+ import { FORM_MENU_DEFAULTS, FORM_MENU_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/form-menu-policy.js';
7
+ import { Input } from '../vendor/ui/input.js';
8
+ import { Button } from '../vendor/ui/button.js';
9
+ import { useInputMenu } from './use-input-menu.js';
10
+ import { InputMenuPopup } from './input-menu-popup.js';
11
+ import { InputMenuForm } from './input-menu-form.js';
12
+ export function ShadcnInputMenu(declared) {
13
+ const id = useId();
14
+ const input = useRef(null);
15
+ const metadata = useFieldMetadata(declared, declared.description ? [`${id}-help`] : []);
16
+ const properties = {
17
+ ...declared,
18
+ name: metadata.name,
19
+ required: metadata.required,
20
+ disabled: metadata.disabled,
21
+ };
22
+ const model = useInputMenu(properties);
23
+ const { label, value, readOnly, description, placeholder } = properties;
24
+ const localError = model.error && !metadata.error ? model.error : undefined;
25
+ const described = [
26
+ ...metadata.descriptionIds,
27
+ `${id}-status`,
28
+ ...(localError === undefined ? [] : [`${id}-error`]),
29
+ ];
30
+ const message = model.status === 'loading'
31
+ ? (properties.loadingMessage ?? FORM_MENU_DEFAULTS.loadingMessage)
32
+ : model.status === 'error'
33
+ ? (properties.errorMessage ?? FORM_MENU_DEFAULTS.errorMessage)
34
+ : model.items.length === 0
35
+ ? (properties.emptyMessage ?? FORM_MENU_DEFAULTS.emptyMessage)
36
+ : `${model.items.length} ${FORM_MENU_DEFAULTS.availableMessage}`;
37
+ return (_jsxs("div", { className: "reacd-node reacd-field reacd-input-menu", children: [_jsx("label", { id: `${id}-label`, htmlFor: id, children: label }), _jsxs(Autocomplete.Root, { items: model.items, value: value, open: model.open, mode: "none", filter: null, locale: FORM_MENU_POLICY.locale, openOnInputClick: true, disabled: model.disabled, readOnly: readOnly, itemToStringValue: (item) => item.label, onItemHighlighted: model.highlight, onValueChange: (next, details) => {
38
+ if (details.reason === 'escape-key') {
39
+ details.cancel();
40
+ return;
41
+ }
42
+ const key = details.reason === 'item-press'
43
+ ? model.highlighted.current?.value
44
+ : undefined;
45
+ if (!model.requestText(next, key))
46
+ details.cancel();
47
+ }, onOpenChange: (next, details) => {
48
+ if ((details.reason === 'item-press' && model.denied.current) ||
49
+ !model.requestOpen(next))
50
+ details.cancel();
51
+ }, children: [_jsxs(Autocomplete.InputGroup, { className: "reacd-input-menu-controls", children: [_jsx(Autocomplete.Input, { id: id, ref: input, render: _jsx(Input, {}), className: "reacd-node reacd-input", placeholder: placeholder, maxLength: CONTENT_POLICY.maxTextLength, "aria-labelledby": `${id}-label`, "aria-describedby": described.join(' '), "aria-required": properties.required, "aria-invalid": Boolean(metadata.error || model.error), onCompositionStart: () => {
52
+ model.setComposing(true);
53
+ }, onCompositionEnd: () => {
54
+ model.setComposing(false);
55
+ }, onKeyDownCapture: (event) => {
56
+ const native = event.nativeEvent;
57
+ const enter = event.key === 'Enter' ||
58
+ native.keyCode === FORM_MENU_POLICY.compositionEnterCode;
59
+ if ((enter && (native.isComposing || model.composing.current)) ||
60
+ native.keyCode === FORM_MENU_POLICY.compositionProcessCode) {
61
+ event.preventDefault();
62
+ event.stopPropagation();
63
+ }
64
+ else if (event.key === 'Escape' && model.open) {
65
+ event.preventDefault();
66
+ event.stopPropagation();
67
+ model.requestOpen(false);
68
+ }
69
+ } }), (properties.clearable ?? FORM_MENU_DEFAULTS.clearable) && value !== '' && (_jsx(Autocomplete.Clear, { render: _jsx(Button, { type: "button", className: "reacd-node reacd-button" }), tabIndex: 0, disabled: model.disabled || readOnly, "aria-label": `${FORM_MENU_DEFAULTS.clearLabel}: ${label}`, onMouseDown: (event) => event.preventBaseUIHandler(), onClick: (event) => {
70
+ event.preventBaseUIHandler();
71
+ if (model.requestText(''))
72
+ input.current?.focus();
73
+ }, children: FORM_MENU_DEFAULTS.clearLabel })), _jsx(Autocomplete.Trigger, { "aria-label": `${FORM_MENU_DEFAULTS.openLabel}: ${label}`, render: _jsx(Button, { type: "button", className: "reacd-node reacd-button" }), children: FORM_MENU_DEFAULTS.openLabel })] }), _jsx(InputMenuPopup, { label: label, items: model.items, open: model.open, inactive: model.status !== 'ready', highlight: model.highlight })] }), description !== undefined && _jsx("span", { id: `${id}-help`, children: description }), _jsx("span", { id: `${id}-status`, role: model.status === 'error' ? 'alert' : 'status', "aria-live": "polite", children: message }), localError !== undefined && (_jsx("span", { id: `${id}-error`, role: "alert", children: localError })), _jsx(InputMenuForm, { properties: properties, input: input, invalid: model.invalidRequired })] }));
74
+ }
@@ -0,0 +1,26 @@
1
+ import type { InputMenuProps } from '@fastsprout/reacd/adapter-runtime/components/input-menu/index.js';
2
+ export declare function useInputMenu(properties: InputMenuProps): {
3
+ open: boolean;
4
+ disabled: boolean;
5
+ error: string | undefined;
6
+ items: readonly Readonly<{
7
+ value: string;
8
+ label: string;
9
+ description?: string | undefined;
10
+ disabled?: boolean | undefined;
11
+ }>[];
12
+ status: "error" | "loading" | "ready";
13
+ requestOpen: (next: boolean) => boolean;
14
+ requestText: (next: string, key?: string) => boolean;
15
+ invalidRequired: () => void;
16
+ denied: import("react").RefObject<boolean>;
17
+ composing: import("react").RefObject<boolean>;
18
+ highlighted: import("react").RefObject<Readonly<{
19
+ value: string;
20
+ label: string;
21
+ description?: string | undefined;
22
+ disabled?: boolean | undefined;
23
+ }> | undefined>;
24
+ highlight: (item: InputMenuProps['items'][number] | undefined) => void;
25
+ setComposing: (value: boolean) => void;
26
+ };
@@ -0,0 +1,92 @@
1
+ import { useContext, useRef, useState } from 'react';
2
+ import { FORM_MENU_DEFAULTS } from '@fastsprout/reacd/adapter-runtime/core/form-menu-policy.js';
3
+ import { filterFormMenuItems } from '@fastsprout/reacd/adapter-runtime/core/form-menu-search.js';
4
+ import { menuTextSchema } from '@fastsprout/reacd/adapter-runtime/schema/form-menu-shared/text.schema.js';
5
+ import { PortalActiveContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/portal-context.js';
6
+ import { useEscapeLayer } from '@fastsprout/reacd/adapter-runtime/renderer/theme/use-escape-layer.js';
7
+ import { requestFormMenuChange } from '../form-menu-shared/request.js';
8
+ export function useInputMenu(properties) {
9
+ const [privateOpen, setPrivateOpen] = useState(false);
10
+ const [error, setError] = useState();
11
+ const [attempted, setAttempted] = useState(false);
12
+ const ancestorActive = useContext(PortalActiveContext);
13
+ const denied = useRef(false);
14
+ const composing = useRef(false);
15
+ const highlighted = useRef(undefined);
16
+ const disabled = properties.disabled || !ancestorActive;
17
+ const open = !disabled && (properties.open ?? privateOpen);
18
+ const items = filterFormMenuItems(properties.items, properties.value, properties.visibleValues);
19
+ const status = properties.status ?? FORM_MENU_DEFAULTS.status;
20
+ function requestOpen(next) {
21
+ if (disabled)
22
+ return false;
23
+ if (next === open)
24
+ return true;
25
+ const onOpenChange = properties.onOpenChange;
26
+ if (onOpenChange !== undefined) {
27
+ const result = requestFormMenuChange(() => onOpenChange(next));
28
+ setError(result.error);
29
+ return result.accepted;
30
+ }
31
+ setPrivateOpen(next);
32
+ return true;
33
+ }
34
+ function requestText(next, key) {
35
+ denied.current = true;
36
+ if (disabled || properties.readOnly)
37
+ return false;
38
+ if (key !== undefined) {
39
+ const item = items.find((candidate) => candidate.value === key);
40
+ if (item === undefined || item.disabled || status !== 'ready')
41
+ return false;
42
+ const preflight = requestFormMenuChange(() => properties.onSuggestionSelect?.(Object.freeze({
43
+ value: item.value,
44
+ text: item.label,
45
+ })));
46
+ setError(preflight.error);
47
+ if (!preflight.accepted)
48
+ return false;
49
+ next = item.label;
50
+ }
51
+ if (next !== properties.value) {
52
+ const parsed = menuTextSchema.safeParse(next);
53
+ if (!parsed.success) {
54
+ setError(FORM_MENU_DEFAULTS.invalidText);
55
+ return false;
56
+ }
57
+ const change = requestFormMenuChange(() => properties.onValueChange(next));
58
+ setError(change.error);
59
+ if (!change.accepted)
60
+ return false;
61
+ }
62
+ else
63
+ setError(undefined);
64
+ denied.current = false;
65
+ return true;
66
+ }
67
+ useEscapeLayer(open, () => {
68
+ requestOpen(false);
69
+ });
70
+ return {
71
+ open,
72
+ disabled,
73
+ error: error ??
74
+ (attempted && properties.required && properties.value === '' && !disabled
75
+ ? FORM_MENU_DEFAULTS.requiredMessage
76
+ : undefined),
77
+ items,
78
+ status,
79
+ requestOpen,
80
+ requestText,
81
+ invalidRequired: () => setAttempted(true),
82
+ denied,
83
+ composing,
84
+ highlighted,
85
+ highlight: (item) => {
86
+ highlighted.current = item;
87
+ },
88
+ setComposing: (value) => {
89
+ composing.current = value;
90
+ },
91
+ };
92
+ }
@@ -0,0 +1,2 @@
1
+ import type { InputNumberProps } from '@fastsprout/reacd/adapter-runtime/components/input-number/index.js';
2
+ export declare function ShadcnInputNumber({ label, description, value, onValueChange, min, max, step, locale, format, placeholder, name, required, disabled, readOnly, }: InputNumberProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ import { NumberField } from '@base-ui/react/number-field';
4
+ import { MinusIcon, PlusIcon } from 'lucide-react';
5
+ import { INPUT_NUMBER_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-number-policy.js';
6
+ import { Label } from '../vendor/ui/label.js';
7
+ export function ShadcnInputNumber({ label, description, value, onValueChange, min = INPUT_NUMBER_POLICY.minimum, max = INPUT_NUMBER_POLICY.maximum, step = INPUT_NUMBER_POLICY.step, locale = INPUT_NUMBER_POLICY.locale, format, placeholder, name, required, disabled, readOnly, }) {
8
+ const id = useId();
9
+ return (_jsxs(NumberField.Root, { id: id, className: "reacd-node reacd-field reacd-input-number", value: value, min: min, max: max, step: step, smallStep: INPUT_NUMBER_POLICY.smallStep, largeStep: INPUT_NUMBER_POLICY.largeStep, locale: locale, format: format, name: name, required: required, disabled: disabled, readOnly: readOnly, onValueChange: (next) => {
10
+ if (!disabled && !readOnly)
11
+ onValueChange(next);
12
+ }, children: [_jsx(Label, { htmlFor: id, children: label }), _jsxs(NumberField.Group, { className: "reacd-number-group", children: [_jsx(NumberField.Decrement, { className: "reacd-number-step", "aria-label": `Decrease ${label}`, children: _jsx(MinusIcon, { "aria-hidden": "true" }) }), _jsx(NumberField.Input, { className: "reacd-number-input", placeholder: placeholder, "aria-describedby": description === undefined ? undefined : `${id}-help` }), _jsx(NumberField.Increment, { className: "reacd-number-step", "aria-label": `Increase ${label}`, children: _jsx(PlusIcon, { "aria-hidden": "true" }) })] }), description === undefined ? null : (_jsx("span", { id: `${id}-help`, className: "reacd-field-description", children: description }))] }));
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { InputRatingProps } from '@fastsprout/reacd/adapter-runtime/components/input-rating/index.js';
2
+ export declare function ShadcnInputRating({ label, description, value, onValueChange, length, step, clearable, hoverable, required, disabled, readOnly, name, }: InputRatingProps): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId, useState } from 'react';
3
+ import * as Slider from '@radix-ui/react-slider';
4
+ import { useDirection } from '@radix-ui/react-direction';
5
+ import { INPUT_RATING_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-rating-policy.js';
6
+ import { RatingStars } from './rating-stars.js';
7
+ import { Button } from '../vendor/ui/button.js';
8
+ export function ShadcnInputRating({ label, description, value, onValueChange, length = INPUT_RATING_POLICY.length, step = INPUT_RATING_POLICY.step, clearable, hoverable, required, disabled, readOnly, name, }) {
9
+ const id = useId();
10
+ const direction = useDirection();
11
+ const [thumb, setThumb] = useState(null);
12
+ const [preview, setPreview] = useState(null);
13
+ return (_jsxs("div", { className: "reacd-node reacd-field reacd-input-rating", "data-direction": direction, children: [_jsx("span", { id: id, children: label }), _jsx("div", { className: "reacd-rating-scroll", children: _jsxs(Slider.Root, { value: [value], min: INPUT_RATING_POLICY.emptyValue, max: length, step: step, disabled: disabled || readOnly, className: "reacd-rating-control", onValueChange: (values) => {
14
+ for (const next of values)
15
+ onValueChange(next);
16
+ }, onPointerMove: (event) => {
17
+ if (!hoverable || disabled || readOnly)
18
+ return;
19
+ const rect = event.currentTarget.getBoundingClientRect();
20
+ if (rect.width === 0)
21
+ return;
22
+ const offset = direction === 'rtl'
23
+ ? rect.right - event.clientX
24
+ : event.clientX - rect.left;
25
+ const raw = (offset / rect.width) * length;
26
+ setPreview(Math.min(length, Math.max(INPUT_RATING_POLICY.emptyValue, Math.ceil(raw / step) * step)));
27
+ }, onPointerLeave: () => setPreview(null), children: [_jsx(Slider.Track, { className: "reacd-rating-track", children: _jsx(RatingStars, { value: hoverable && !disabled && !readOnly ? (preview ?? value) : value, length: length }) }), _jsx(Slider.Thumb, { ref: setThumb, className: "reacd-rating-thumb", "aria-labelledby": id, "aria-required": required, "aria-invalid": required && value === INPUT_RATING_POLICY.emptyValue, "aria-readonly": readOnly, "aria-valuetext": `${value} of ${length} stars`, "aria-describedby": description === undefined ? undefined : `${id}-help` })] }) }), _jsx("input", { type: "hidden", name: name, value: value, disabled: disabled }), _jsx("input", { className: "reacd-rating-validation", tabIndex: -1, "aria-hidden": "true", defaultValue: value === INPUT_RATING_POLICY.emptyValue ? '' : String(value), required: required, disabled: disabled || readOnly, onInvalid: thumb === null
28
+ ? undefined
29
+ : (event) => {
30
+ event.preventDefault();
31
+ thumb.focus();
32
+ } }, value), description === undefined ? null : (_jsx("span", { id: `${id}-help`, className: "reacd-field-description", children: description })), clearable ? (_jsxs(Button, { className: "reacd-button", type: "button", variant: "outline", disabled: disabled || readOnly || value === INPUT_RATING_POLICY.emptyValue, onClick: () => onValueChange(INPUT_RATING_POLICY.emptyValue), children: ["Clear ", label] })) : null] }));
33
+ }
@@ -0,0 +1,4 @@
1
+ export declare function RatingStars({ value, length }: {
2
+ value: number;
3
+ length: number;
4
+ }): import("react").JSX.Element[];
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { StarIcon } from 'lucide-react';
3
+ import { INPUT_RATING_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-rating-policy.js';
4
+ export function RatingStars({ value, length }) {
5
+ return Array.from({ length }, (_, index) => {
6
+ const filled = value - index;
7
+ return (_jsxs("span", { className: "reacd-rating-star", "aria-hidden": "true", children: [_jsx(StarIcon, {}), filled >= INPUT_RATING_POLICY.half ? (_jsx(StarIcon, { className: "reacd-rating-star-fill", "data-half": filled < INPUT_RATING_POLICY.step })) : null] }, index));
8
+ });
9
+ }
@@ -0,0 +1,2 @@
1
+ import type { InputTagsProps } from '@fastsprout/reacd/adapter-runtime/components/input-tags/index.js';
2
+ export declare function ShadcnInputTags(properties: InputTagsProps): import("react").JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ import { Combobox } from '@base-ui/react/combobox';
4
+ import { XIcon } from 'lucide-react';
5
+ import { INPUT_TAGS_POLICY, TAG_DELIMITER_CHARACTERS, } from '@fastsprout/reacd/adapter-runtime/core/input-tags-policy.js';
6
+ import { Label } from '../vendor/ui/label.js';
7
+ import { useTagDraft } from './use-tag-draft.js';
8
+ export function ShadcnInputTags(properties) {
9
+ const { label, description, value, onValueChange, placeholder, disabled, readOnly, name, required, addOnTab, addOnBlur, addOnPaste, delimiters = INPUT_TAGS_POLICY.delimiters, } = properties;
10
+ const id = useId();
11
+ const entry = useTagDraft(properties);
12
+ const describedBy = [
13
+ description === undefined ? '' : `${id}-help`,
14
+ entry.error === undefined ? '' : `${id}-error`,
15
+ ]
16
+ .filter(Boolean)
17
+ .join(' ');
18
+ return (_jsxs("div", { className: "reacd-node reacd-field reacd-input-tags", children: [_jsx(Label, { htmlFor: id, children: label }), _jsx(Combobox.Root, { multiple: true, open: false, items: [...value], value: value, inputValue: entry.draft, onInputValueChange: entry.change, onValueChange: (next) => {
19
+ onValueChange(next);
20
+ }, disabled: disabled, readOnly: readOnly, name: name, required: required, children: _jsxs(Combobox.Chips, { className: "reacd-tags-chips", children: [value.map((tag) => (_jsxs(Combobox.Chip, { className: "reacd-tags-chip", children: [_jsx("span", { className: "reacd-tags-text", children: tag }), _jsx(Combobox.ChipRemove, { className: "reacd-tags-remove", "aria-label": `Remove ${tag}`, children: _jsx(XIcon, { "aria-hidden": "true" }) })] }, tag))), _jsx(Combobox.Input, { id: id, className: "reacd-tags-input", placeholder: placeholder, "aria-invalid": entry.error !== undefined, "aria-describedby": describedBy || undefined, "aria-autocomplete": "none", onCompositionStart: () => {
21
+ entry.setComposing(true);
22
+ }, onCompositionEnd: () => {
23
+ entry.setComposing(false);
24
+ }, onKeyDown: (event) => {
25
+ if (event.nativeEvent.isComposing || entry.composing.current)
26
+ return;
27
+ const delimiter = delimiters.some((item) => TAG_DELIMITER_CHARACTERS[item] === event.key);
28
+ const trigger = event.key === 'Enter' || delimiter || (event.key === 'Tab' && addOnTab);
29
+ if (!trigger || entry.draft.trim() === '')
30
+ return;
31
+ if (event.key !== 'Tab')
32
+ event.preventDefault();
33
+ entry.commit(entry.draft);
34
+ }, onBlur: () => {
35
+ if (addOnBlur && entry.draft.trim() !== '')
36
+ entry.commit(entry.draft);
37
+ }, onPaste: (event) => {
38
+ if (!addOnPaste || entry.composing.current)
39
+ return;
40
+ event.preventDefault();
41
+ const start = event.currentTarget.selectionStart ?? entry.draft.length;
42
+ const end = event.currentTarget.selectionEnd ?? entry.draft.length;
43
+ entry.commit(entry.draft.slice(0, start) +
44
+ event.clipboardData.getData('text') +
45
+ entry.draft.slice(end));
46
+ } })] }) }), description === undefined ? null : (_jsx("span", { id: `${id}-help`, className: "reacd-field-description", children: description })), entry.error === undefined ? null : (_jsx("span", { id: `${id}-error`, role: "alert", children: entry.error }))] }));
47
+ }
@@ -0,0 +1,9 @@
1
+ import type { InputTagsProps } from '@fastsprout/reacd/adapter-runtime/components/input-tags/index.js';
2
+ export declare function useTagDraft({ value, onValueChange, maxTags, maxTagLength, delimiters, disabled, readOnly, }: InputTagsProps): {
3
+ draft: string;
4
+ error: string | undefined;
5
+ composing: import("react").RefObject<boolean>;
6
+ setComposing: (value: boolean) => void;
7
+ change: (next: string) => void;
8
+ commit: (next: string) => void;
9
+ };
@@ -0,0 +1,43 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { INPUT_TAGS_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-tags-policy.js';
3
+ import { appendTags, sameTags, } from '@fastsprout/reacd/adapter-runtime/core/tag-entry.js';
4
+ export function useTagDraft({ value, onValueChange, maxTags = INPUT_TAGS_POLICY.maxTags, maxTagLength = INPUT_TAGS_POLICY.maxTagLength, delimiters = INPUT_TAGS_POLICY.delimiters, disabled, readOnly, }) {
5
+ const [draft, setDraft] = useState('');
6
+ const [error, setError] = useState();
7
+ const pending = useRef(null);
8
+ const composing = useRef(false);
9
+ useEffect(() => {
10
+ if (pending.current !== null && sameTags(value, pending.current)) {
11
+ pending.current = null;
12
+ setDraft('');
13
+ }
14
+ }, [value]);
15
+ return {
16
+ draft,
17
+ error,
18
+ composing,
19
+ setComposing: (value) => {
20
+ composing.current = value;
21
+ },
22
+ change: (next) => {
23
+ if (disabled || readOnly)
24
+ return;
25
+ pending.current = null;
26
+ setError(undefined);
27
+ setDraft(next);
28
+ },
29
+ commit: (next) => {
30
+ if (disabled || readOnly || composing.current)
31
+ return;
32
+ setDraft(next);
33
+ const result = appendTags(value, next, delimiters, { maxTags, maxTagLength });
34
+ if (!result.success) {
35
+ setError(result.message);
36
+ return;
37
+ }
38
+ setError(undefined);
39
+ pending.current = result.values;
40
+ onValueChange(result.values);
41
+ },
42
+ };
43
+ }
@@ -0,0 +1 @@
1
+ export declare function anchoredTime(value: string): import("@internationalized/date").ZonedDateTime;
@@ -0,0 +1,5 @@
1
+ import { parseZonedDateTime } from '@internationalized/date';
2
+ import { INPUT_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-time-policy.js';
3
+ export function anchoredTime(value) {
4
+ return parseZonedDateTime(`${INPUT_TIME_POLICY.anchorDate}T${value}[${INPUT_TIME_POLICY.anchorTimeZone}]`);
5
+ }
@@ -0,0 +1 @@
1
+ export { TemporalDraftValidity as TimeDraftValidation, } from '../temporal/draft-validity.js';
@@ -0,0 +1 @@
1
+ export { TemporalDraftValidity as TimeDraftValidation, } from '../temporal/draft-validity.js';
@@ -0,0 +1 @@
1
+ export { focusIncompleteSegment as focusTimeDraft, } from '../temporal/focus-incomplete-segment.js';
@@ -0,0 +1 @@
1
+ export { focusIncompleteSegment as focusTimeDraft, } from '../temporal/focus-incomplete-segment.js';
@@ -0,0 +1,2 @@
1
+ import type { InputTimeProps } from '@fastsprout/reacd/adapter-runtime/components/input-time/index.js';
2
+ export declare function ShadcnInputTime(properties: InputTimeProps): import("react").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { I18nProvider } from 'react-aria-components/I18nProvider';
3
+ import { useDirection } from '@radix-ui/react-direction';
4
+ import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
5
+ import { DATE_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/date-time-policy.js';
6
+ import { INPUT_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-time-policy.js';
7
+ import { boundedTimeValueSchema, timeRangeValueSchema, } from '@fastsprout/reacd/adapter-runtime/schema/date-time/index.js';
8
+ import { TimeControl } from './time-control.js';
9
+ import { useTimeChange } from './use-time-change.js';
10
+ import { temporalRecovery } from '../temporal/temporal-recovery.js';
11
+ import { useRangeReset } from '../temporal/use-range-reset.js';
12
+ function SingleTime(props) {
13
+ const { error, change } = useTimeChange((value) => boundedTimeValueSchema({ min: props.min, max: props.max }).safeParse(value)
14
+ .success, props.onValueChange, INPUT_TIME_POLICY.invalidValue, props, temporalRecovery(props.value, props));
15
+ return _jsx(TimeControl, { ...props, error: error, onValueChange: change });
16
+ }
17
+ function RangeTime(props) {
18
+ const { error, change } = useTimeChange((value) => timeRangeValueSchema({ min: props.min, max: props.max }).safeParse(value).success, props.onValueChange, INPUT_TIME_POLICY.invalidRange, props, temporalRecovery(props.value, props));
19
+ const { ref, revision, change: changeEndpoint } = useRangeReset(props.value, change);
20
+ return (_jsxs("fieldset", { ref: ref, className: "reacd-time-range", children: [_jsx("legend", { children: props.label }), _jsx(TimeControl, { ...props, label: `${INPUT_TIME_POLICY.startLabel} ${props.label}`, value: props.value.start, name: props.name === undefined ? undefined : `${props.name}.start`, error: error, onValueChange: (start) => changeEndpoint({ ...props.value, start }) }, `${revision}-start`), _jsx(TimeControl, { ...props, label: `${INPUT_TIME_POLICY.endLabel} ${props.label}`, value: props.value.end, name: props.name === undefined ? undefined : `${props.name}.end`, error: error, onValueChange: (end) => changeEndpoint({ ...props.value, end }) }, `${revision}-end`)] }));
21
+ }
22
+ export function ShadcnInputTime(properties) {
23
+ const metadata = useFieldMetadata(properties);
24
+ const props = {
25
+ ...properties,
26
+ name: metadata.name,
27
+ required: metadata.required,
28
+ disabled: metadata.disabled,
29
+ };
30
+ const direction = useDirection();
31
+ return (_jsx(I18nProvider, { locale: props.locale ?? DATE_TIME_POLICY.locale, children: _jsx("div", { className: "reacd-node reacd-field reacd-input-time", dir: direction, children: props.mode === 'range' ? _jsx(RangeTime, { ...props }) : _jsx(SingleTime, { ...props }) }) }));
32
+ }
@@ -0,0 +1,15 @@
1
+ interface TimeControlProps {
2
+ readonly label: string;
3
+ readonly value: string | null;
4
+ readonly onValueChange: (value: string | null) => void;
5
+ readonly description?: string | undefined;
6
+ readonly error?: string | undefined;
7
+ readonly min?: string | undefined;
8
+ readonly max?: string | undefined;
9
+ readonly name?: string | undefined;
10
+ readonly required?: boolean | undefined;
11
+ readonly disabled?: boolean | undefined;
12
+ readonly readOnly?: boolean | undefined;
13
+ }
14
+ export declare function TimeControl({ label, value, onValueChange, description, error, min, max, name, required, disabled, readOnly, }: TimeControlProps): import("react").JSX.Element;
15
+ export {};