@airdraft/react-ui 0.1.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 (390) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/AcceptInviteForm.d.ts +22 -0
  3. package/dist/AcceptInviteForm.d.ts.map +1 -0
  4. package/dist/AcceptInviteForm.js +52 -0
  5. package/dist/AcceptInviteForm.js.map +1 -0
  6. package/dist/AuditLogViewer.d.ts +42 -0
  7. package/dist/AuditLogViewer.d.ts.map +1 -0
  8. package/dist/AuditLogViewer.js +95 -0
  9. package/dist/AuditLogViewer.js.map +1 -0
  10. package/dist/CollectionManager.d.ts +26 -0
  11. package/dist/CollectionManager.d.ts.map +1 -0
  12. package/dist/CollectionManager.js +100 -0
  13. package/dist/CollectionManager.js.map +1 -0
  14. package/dist/CollectionsIndex.d.ts +25 -0
  15. package/dist/CollectionsIndex.d.ts.map +1 -0
  16. package/dist/CollectionsIndex.js +42 -0
  17. package/dist/CollectionsIndex.js.map +1 -0
  18. package/dist/ContentManager.d.ts +26 -0
  19. package/dist/ContentManager.d.ts.map +1 -0
  20. package/dist/ContentManager.js +110 -0
  21. package/dist/ContentManager.js.map +1 -0
  22. package/dist/EntryEditor.d.ts +25 -0
  23. package/dist/EntryEditor.d.ts.map +1 -0
  24. package/dist/EntryEditor.js +190 -0
  25. package/dist/EntryEditor.js.map +1 -0
  26. package/dist/LoginForm.d.ts +18 -0
  27. package/dist/LoginForm.d.ts.map +1 -0
  28. package/dist/LoginForm.js +41 -0
  29. package/dist/LoginForm.js.map +1 -0
  30. package/dist/MediaManager.d.ts +21 -0
  31. package/dist/MediaManager.d.ts.map +1 -0
  32. package/dist/MediaManager.js +59 -0
  33. package/dist/MediaManager.js.map +1 -0
  34. package/dist/SchemaEditor.d.ts +22 -0
  35. package/dist/SchemaEditor.d.ts.map +1 -0
  36. package/dist/SchemaEditor.js +35 -0
  37. package/dist/SchemaEditor.js.map +1 -0
  38. package/dist/SchemaEditorContent.d.ts +4 -0
  39. package/dist/SchemaEditorContent.d.ts.map +1 -0
  40. package/dist/SchemaEditorContent.js +82 -0
  41. package/dist/SchemaEditorContent.js.map +1 -0
  42. package/dist/SchemaEditorFieldDrawer.d.ts +2 -0
  43. package/dist/SchemaEditorFieldDrawer.d.ts.map +1 -0
  44. package/dist/SchemaEditorFieldDrawer.js +126 -0
  45. package/dist/SchemaEditorFieldDrawer.js.map +1 -0
  46. package/dist/SchemaEditorRoot.d.ts +59 -0
  47. package/dist/SchemaEditorRoot.d.ts.map +1 -0
  48. package/dist/SchemaEditorRoot.js +71 -0
  49. package/dist/SchemaEditorRoot.js.map +1 -0
  50. package/dist/SchemaEditorSidebar.d.ts +4 -0
  51. package/dist/SchemaEditorSidebar.d.ts.map +1 -0
  52. package/dist/SchemaEditorSidebar.js +67 -0
  53. package/dist/SchemaEditorSidebar.js.map +1 -0
  54. package/dist/TeamManager.d.ts +18 -0
  55. package/dist/TeamManager.d.ts.map +1 -0
  56. package/dist/TeamManager.js +90 -0
  57. package/dist/TeamManager.js.map +1 -0
  58. package/dist/components/CmsAdminHeader.d.ts +11 -0
  59. package/dist/components/CmsAdminHeader.d.ts.map +1 -0
  60. package/dist/components/CmsAdminHeader.js +119 -0
  61. package/dist/components/CmsAdminHeader.js.map +1 -0
  62. package/dist/components/ConfirmDialog.d.ts +19 -0
  63. package/dist/components/ConfirmDialog.d.ts.map +1 -0
  64. package/dist/components/ConfirmDialog.js +12 -0
  65. package/dist/components/ConfirmDialog.js.map +1 -0
  66. package/dist/components/EmptyState.d.ts +9 -0
  67. package/dist/components/EmptyState.d.ts.map +1 -0
  68. package/dist/components/EmptyState.js +7 -0
  69. package/dist/components/EmptyState.js.map +1 -0
  70. package/dist/components/EntryRow.d.ts +12 -0
  71. package/dist/components/EntryRow.d.ts.map +1 -0
  72. package/dist/components/EntryRow.js +20 -0
  73. package/dist/components/EntryRow.js.map +1 -0
  74. package/dist/components/ErrorAlert.d.ts +32 -0
  75. package/dist/components/ErrorAlert.d.ts.map +1 -0
  76. package/dist/components/ErrorAlert.js +40 -0
  77. package/dist/components/ErrorAlert.js.map +1 -0
  78. package/dist/components/InviteRow.d.ts +18 -0
  79. package/dist/components/InviteRow.d.ts.map +1 -0
  80. package/dist/components/InviteRow.js +28 -0
  81. package/dist/components/InviteRow.js.map +1 -0
  82. package/dist/components/MediaCard.d.ts +10 -0
  83. package/dist/components/MediaCard.d.ts.map +1 -0
  84. package/dist/components/MediaCard.js +29 -0
  85. package/dist/components/MediaCard.js.map +1 -0
  86. package/dist/components/MemberRow.d.ts +19 -0
  87. package/dist/components/MemberRow.d.ts.map +1 -0
  88. package/dist/components/MemberRow.js +19 -0
  89. package/dist/components/MemberRow.js.map +1 -0
  90. package/dist/components/PageHeader.d.ts +8 -0
  91. package/dist/components/PageHeader.d.ts.map +1 -0
  92. package/dist/components/PageHeader.js +7 -0
  93. package/dist/components/PageHeader.js.map +1 -0
  94. package/dist/components/RoleBadge.d.ts +7 -0
  95. package/dist/components/RoleBadge.d.ts.map +1 -0
  96. package/dist/components/RoleBadge.js +12 -0
  97. package/dist/components/RoleBadge.js.map +1 -0
  98. package/dist/components/StatusBadge.d.ts +8 -0
  99. package/dist/components/StatusBadge.d.ts.map +1 -0
  100. package/dist/components/StatusBadge.js +16 -0
  101. package/dist/components/StatusBadge.js.map +1 -0
  102. package/dist/components/TagInput.d.ts +12 -0
  103. package/dist/components/TagInput.d.ts.map +1 -0
  104. package/dist/components/TagInput.js +76 -0
  105. package/dist/components/TagInput.js.map +1 -0
  106. package/dist/components/UploadZone.d.ts +9 -0
  107. package/dist/components/UploadZone.d.ts.map +1 -0
  108. package/dist/components/UploadZone.js +21 -0
  109. package/dist/components/UploadZone.js.map +1 -0
  110. package/dist/components/index.d.ts +27 -0
  111. package/dist/components/index.d.ts.map +1 -0
  112. package/dist/components/index.js +15 -0
  113. package/dist/components/index.js.map +1 -0
  114. package/dist/hooks/use-mobile.d.ts +2 -0
  115. package/dist/hooks/use-mobile.d.ts.map +1 -0
  116. package/dist/hooks/use-mobile.js +16 -0
  117. package/dist/hooks/use-mobile.js.map +1 -0
  118. package/dist/hooks/useMediaQuery.d.ts +2 -0
  119. package/dist/hooks/useMediaQuery.d.ts.map +1 -0
  120. package/dist/hooks/useMediaQuery.js +16 -0
  121. package/dist/hooks/useMediaQuery.js.map +1 -0
  122. package/dist/index.d.ts +29 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +23 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/lib/utils.d.ts +3 -0
  127. package/dist/lib/utils.d.ts.map +1 -0
  128. package/dist/lib/utils.js +6 -0
  129. package/dist/lib/utils.js.map +1 -0
  130. package/dist/ui/accordion.d.ts +8 -0
  131. package/dist/ui/accordion.d.ts.map +1 -0
  132. package/dist/ui/accordion.js +19 -0
  133. package/dist/ui/accordion.js.map +1 -0
  134. package/dist/ui/aevr/aevr/activity-item.d.ts +107 -0
  135. package/dist/ui/aevr/aevr/activity-item.d.ts.map +1 -0
  136. package/dist/ui/aevr/aevr/activity-item.js +154 -0
  137. package/dist/ui/aevr/aevr/activity-item.js.map +1 -0
  138. package/dist/ui/aevr/aevr/blurred-background.d.ts +10 -0
  139. package/dist/ui/aevr/aevr/blurred-background.d.ts.map +1 -0
  140. package/dist/ui/aevr/aevr/blurred-background.js +31 -0
  141. package/dist/ui/aevr/aevr/blurred-background.js.map +1 -0
  142. package/dist/ui/aevr/aevr/button.d.ts +11 -0
  143. package/dist/ui/aevr/aevr/button.d.ts.map +1 -0
  144. package/dist/ui/aevr/aevr/button.js +37 -0
  145. package/dist/ui/aevr/aevr/button.js.map +1 -0
  146. package/dist/ui/aevr/aevr/country-dropdown.d.ts +25 -0
  147. package/dist/ui/aevr/aevr/country-dropdown.d.ts.map +1 -0
  148. package/dist/ui/aevr/aevr/country-dropdown.js +38 -0
  149. package/dist/ui/aevr/aevr/country-dropdown.js.map +1 -0
  150. package/dist/ui/aevr/aevr/currency-amount-input.d.ts +19 -0
  151. package/dist/ui/aevr/aevr/currency-amount-input.d.ts.map +1 -0
  152. package/dist/ui/aevr/aevr/currency-amount-input.js +89 -0
  153. package/dist/ui/aevr/aevr/currency-amount-input.js.map +1 -0
  154. package/dist/ui/aevr/aevr/currency-select.d.ts +16 -0
  155. package/dist/ui/aevr/aevr/currency-select.d.ts.map +1 -0
  156. package/dist/ui/aevr/aevr/currency-select.js +38 -0
  157. package/dist/ui/aevr/aevr/currency-select.js.map +1 -0
  158. package/dist/ui/aevr/aevr/file-upload.d.ts +70 -0
  159. package/dist/ui/aevr/aevr/file-upload.d.ts.map +1 -0
  160. package/dist/ui/aevr/aevr/file-upload.js +388 -0
  161. package/dist/ui/aevr/aevr/file-upload.js.map +1 -0
  162. package/dist/ui/aevr/aevr/info-box.d.ts +32 -0
  163. package/dist/ui/aevr/aevr/info-box.d.ts.map +1 -0
  164. package/dist/ui/aevr/aevr/info-box.js +248 -0
  165. package/dist/ui/aevr/aevr/info-box.js.map +1 -0
  166. package/dist/ui/aevr/aevr/loader.d.ts +6 -0
  167. package/dist/ui/aevr/aevr/loader.d.ts.map +1 -0
  168. package/dist/ui/aevr/aevr/loader.js +14 -0
  169. package/dist/ui/aevr/aevr/loader.js.map +1 -0
  170. package/dist/ui/aevr/aevr/mini-wallet-card.d.ts +29 -0
  171. package/dist/ui/aevr/aevr/mini-wallet-card.d.ts.map +1 -0
  172. package/dist/ui/aevr/aevr/mini-wallet-card.js +31 -0
  173. package/dist/ui/aevr/aevr/mini-wallet-card.js.map +1 -0
  174. package/dist/ui/aevr/aevr/multistep.d.ts +40 -0
  175. package/dist/ui/aevr/aevr/multistep.d.ts.map +1 -0
  176. package/dist/ui/aevr/aevr/multistep.js +95 -0
  177. package/dist/ui/aevr/aevr/multistep.js.map +1 -0
  178. package/dist/ui/aevr/aevr/nav-user.d.ts +35 -0
  179. package/dist/ui/aevr/aevr/nav-user.d.ts.map +1 -0
  180. package/dist/ui/aevr/aevr/nav-user.js +47 -0
  181. package/dist/ui/aevr/aevr/nav-user.js.map +1 -0
  182. package/dist/ui/aevr/aevr/page-header.d.ts +46 -0
  183. package/dist/ui/aevr/aevr/page-header.d.ts.map +1 -0
  184. package/dist/ui/aevr/aevr/page-header.js +68 -0
  185. package/dist/ui/aevr/aevr/page-header.js.map +1 -0
  186. package/dist/ui/aevr/aevr/phone-input.d.ts +8 -0
  187. package/dist/ui/aevr/aevr/phone-input.d.ts.map +1 -0
  188. package/dist/ui/aevr/aevr/phone-input.js +60 -0
  189. package/dist/ui/aevr/aevr/phone-input.js.map +1 -0
  190. package/dist/ui/aevr/aevr/progress.d.ts +38 -0
  191. package/dist/ui/aevr/aevr/progress.d.ts.map +1 -0
  192. package/dist/ui/aevr/aevr/progress.js +65 -0
  193. package/dist/ui/aevr/aevr/progress.js.map +1 -0
  194. package/dist/ui/aevr/aevr/responsive-breadcrumb.d.ts +14 -0
  195. package/dist/ui/aevr/aevr/responsive-breadcrumb.d.ts.map +1 -0
  196. package/dist/ui/aevr/aevr/responsive-breadcrumb.js +17 -0
  197. package/dist/ui/aevr/aevr/responsive-breadcrumb.js.map +1 -0
  198. package/dist/ui/aevr/aevr/responsive-dialog.d.ts +16 -0
  199. package/dist/ui/aevr/aevr/responsive-dialog.d.ts.map +1 -0
  200. package/dist/ui/aevr/aevr/responsive-dialog.js +29 -0
  201. package/dist/ui/aevr/aevr/responsive-dialog.js.map +1 -0
  202. package/dist/ui/aevr/aevr/search-command.d.ts +31 -0
  203. package/dist/ui/aevr/aevr/search-command.d.ts.map +1 -0
  204. package/dist/ui/aevr/aevr/search-command.js +129 -0
  205. package/dist/ui/aevr/aevr/search-command.js.map +1 -0
  206. package/dist/ui/aevr/aevr/settings-card.d.ts +15 -0
  207. package/dist/ui/aevr/aevr/settings-card.d.ts.map +1 -0
  208. package/dist/ui/aevr/aevr/settings-card.js +29 -0
  209. package/dist/ui/aevr/aevr/settings-card.js.map +1 -0
  210. package/dist/ui/aevr/aevr/settings-header.d.ts +8 -0
  211. package/dist/ui/aevr/aevr/settings-header.d.ts.map +1 -0
  212. package/dist/ui/aevr/aevr/settings-header.js +9 -0
  213. package/dist/ui/aevr/aevr/settings-header.js.map +1 -0
  214. package/dist/ui/aevr/aevr/stat-card.d.ts +55 -0
  215. package/dist/ui/aevr/aevr/stat-card.d.ts.map +1 -0
  216. package/dist/ui/aevr/aevr/stat-card.js +86 -0
  217. package/dist/ui/aevr/aevr/stat-card.js.map +1 -0
  218. package/dist/ui/aevr/aevr/summary-card.d.ts +20 -0
  219. package/dist/ui/aevr/aevr/summary-card.d.ts.map +1 -0
  220. package/dist/ui/aevr/aevr/summary-card.js +29 -0
  221. package/dist/ui/aevr/aevr/summary-card.js.map +1 -0
  222. package/dist/ui/aevr/aevr/tag.d.ts +15 -0
  223. package/dist/ui/aevr/aevr/tag.d.ts.map +1 -0
  224. package/dist/ui/aevr/aevr/tag.js +42 -0
  225. package/dist/ui/aevr/aevr/tag.js.map +1 -0
  226. package/dist/ui/aevr/aevr/theme-toggle.d.ts +2 -0
  227. package/dist/ui/aevr/aevr/theme-toggle.d.ts.map +1 -0
  228. package/dist/ui/aevr/aevr/theme-toggle.js +20 -0
  229. package/dist/ui/aevr/aevr/theme-toggle.js.map +1 -0
  230. package/dist/ui/aevr/aevr/transaction-pin-confirm.d.ts +21 -0
  231. package/dist/ui/aevr/aevr/transaction-pin-confirm.d.ts.map +1 -0
  232. package/dist/ui/aevr/aevr/transaction-pin-confirm.js +65 -0
  233. package/dist/ui/aevr/aevr/transaction-pin-confirm.js.map +1 -0
  234. package/dist/ui/aevr/aevr/wallet-activity-item.d.ts +36 -0
  235. package/dist/ui/aevr/aevr/wallet-activity-item.d.ts.map +1 -0
  236. package/dist/ui/aevr/aevr/wallet-activity-item.js +288 -0
  237. package/dist/ui/aevr/aevr/wallet-activity-item.js.map +1 -0
  238. package/dist/ui/aevr/aevr/wallet-topup-form.d.ts +26 -0
  239. package/dist/ui/aevr/aevr/wallet-topup-form.d.ts.map +1 -0
  240. package/dist/ui/aevr/aevr/wallet-topup-form.js +13 -0
  241. package/dist/ui/aevr/aevr/wallet-topup-form.js.map +1 -0
  242. package/dist/ui/aevr/blurred-background.d.ts +10 -0
  243. package/dist/ui/aevr/blurred-background.d.ts.map +1 -0
  244. package/dist/ui/aevr/blurred-background.js +31 -0
  245. package/dist/ui/aevr/blurred-background.js.map +1 -0
  246. package/dist/ui/aevr/loader.d.ts +7 -0
  247. package/dist/ui/aevr/loader.d.ts.map +1 -0
  248. package/dist/ui/aevr/loader.js +15 -0
  249. package/dist/ui/aevr/loader.js.map +1 -0
  250. package/dist/ui/aevr/nav-user.d.ts +35 -0
  251. package/dist/ui/aevr/nav-user.d.ts.map +1 -0
  252. package/dist/ui/aevr/nav-user.js +38 -0
  253. package/dist/ui/aevr/nav-user.js.map +1 -0
  254. package/dist/ui/aevr/page-header.d.ts +46 -0
  255. package/dist/ui/aevr/page-header.d.ts.map +1 -0
  256. package/dist/ui/aevr/page-header.js +72 -0
  257. package/dist/ui/aevr/page-header.js.map +1 -0
  258. package/dist/ui/aevr/progress.d.ts +38 -0
  259. package/dist/ui/aevr/progress.d.ts.map +1 -0
  260. package/dist/ui/aevr/progress.js +65 -0
  261. package/dist/ui/aevr/progress.js.map +1 -0
  262. package/dist/ui/aevr/responsive-breadcrumb.d.ts +14 -0
  263. package/dist/ui/aevr/responsive-breadcrumb.d.ts.map +1 -0
  264. package/dist/ui/aevr/responsive-breadcrumb.js +17 -0
  265. package/dist/ui/aevr/responsive-breadcrumb.js.map +1 -0
  266. package/dist/ui/aevr/search-command.d.ts +31 -0
  267. package/dist/ui/aevr/search-command.d.ts.map +1 -0
  268. package/dist/ui/aevr/search-command.js +129 -0
  269. package/dist/ui/aevr/search-command.js.map +1 -0
  270. package/dist/ui/aevr/theme-toggle.d.ts +2 -0
  271. package/dist/ui/aevr/theme-toggle.d.ts.map +1 -0
  272. package/dist/ui/aevr/theme-toggle.js +20 -0
  273. package/dist/ui/aevr/theme-toggle.js.map +1 -0
  274. package/dist/ui/alert-dialog.d.ts +19 -0
  275. package/dist/ui/alert-dialog.d.ts.map +1 -0
  276. package/dist/ui/alert-dialog.js +42 -0
  277. package/dist/ui/alert-dialog.js.map +1 -0
  278. package/dist/ui/alert.d.ts +11 -0
  279. package/dist/ui/alert.d.ts.map +1 -0
  280. package/dist/ui/alert.js +28 -0
  281. package/dist/ui/alert.js.map +1 -0
  282. package/dist/ui/avatar.d.ts +12 -0
  283. package/dist/ui/avatar.d.ts.map +1 -0
  284. package/dist/ui/avatar.js +24 -0
  285. package/dist/ui/avatar.js.map +1 -0
  286. package/dist/ui/badge.d.ts +10 -0
  287. package/dist/ui/badge.d.ts.map +1 -0
  288. package/dist/ui/badge.js +25 -0
  289. package/dist/ui/badge.js.map +1 -0
  290. package/dist/ui/breadcrumb.d.ts +12 -0
  291. package/dist/ui/breadcrumb.d.ts.map +1 -0
  292. package/dist/ui/breadcrumb.js +28 -0
  293. package/dist/ui/breadcrumb.js.map +1 -0
  294. package/dist/ui/button.d.ts +11 -0
  295. package/dist/ui/button.d.ts.map +1 -0
  296. package/dist/ui/button.js +36 -0
  297. package/dist/ui/button.js.map +1 -0
  298. package/dist/ui/checkbox.d.ts +5 -0
  299. package/dist/ui/checkbox.d.ts.map +1 -0
  300. package/dist/ui/checkbox.js +9 -0
  301. package/dist/ui/checkbox.js.map +1 -0
  302. package/dist/ui/command.d.ts +19 -0
  303. package/dist/ui/command.d.ts.map +1 -0
  304. package/dist/ui/command.js +35 -0
  305. package/dist/ui/command.js.map +1 -0
  306. package/dist/ui/dialog.d.ts +18 -0
  307. package/dist/ui/dialog.d.ts.map +1 -0
  308. package/dist/ui/dialog.js +37 -0
  309. package/dist/ui/dialog.js.map +1 -0
  310. package/dist/ui/drawer.d.ts +14 -0
  311. package/dist/ui/drawer.d.ts.map +1 -0
  312. package/dist/ui/drawer.js +35 -0
  313. package/dist/ui/drawer.js.map +1 -0
  314. package/dist/ui/dropdown-menu.d.ts +30 -0
  315. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  316. package/dist/ui/dropdown-menu.js +52 -0
  317. package/dist/ui/dropdown-menu.js.map +1 -0
  318. package/dist/ui/field.d.ts +25 -0
  319. package/dist/ui/field.d.ts.map +1 -0
  320. package/dist/ui/field.js +68 -0
  321. package/dist/ui/field.js.map +1 -0
  322. package/dist/ui/hover-card.d.ts +7 -0
  323. package/dist/ui/hover-card.d.ts.map +1 -0
  324. package/dist/ui/hover-card.js +14 -0
  325. package/dist/ui/hover-card.js.map +1 -0
  326. package/dist/ui/input-group.d.ts +17 -0
  327. package/dist/ui/input-group.d.ts.map +1 -0
  328. package/dist/ui/input-group.js +57 -0
  329. package/dist/ui/input-group.js.map +1 -0
  330. package/dist/ui/input.d.ts +4 -0
  331. package/dist/ui/input.d.ts.map +1 -0
  332. package/dist/ui/input.js +7 -0
  333. package/dist/ui/input.js.map +1 -0
  334. package/dist/ui/item.d.ts +24 -0
  335. package/dist/ui/item.d.ts.map +1 -0
  336. package/dist/ui/item.js +68 -0
  337. package/dist/ui/item.js.map +1 -0
  338. package/dist/ui/label.d.ts +5 -0
  339. package/dist/ui/label.d.ts.map +1 -0
  340. package/dist/ui/label.js +8 -0
  341. package/dist/ui/label.js.map +1 -0
  342. package/dist/ui/radio-group.d.ts +6 -0
  343. package/dist/ui/radio-group.d.ts.map +1 -0
  344. package/dist/ui/radio-group.js +11 -0
  345. package/dist/ui/radio-group.js.map +1 -0
  346. package/dist/ui/select.d.ts +16 -0
  347. package/dist/ui/select.d.ts.map +1 -0
  348. package/dist/ui/select.js +36 -0
  349. package/dist/ui/select.js.map +1 -0
  350. package/dist/ui/separator.d.ts +5 -0
  351. package/dist/ui/separator.d.ts.map +1 -0
  352. package/dist/ui/separator.js +9 -0
  353. package/dist/ui/separator.js.map +1 -0
  354. package/dist/ui/sheet.d.ts +15 -0
  355. package/dist/ui/sheet.d.ts.map +1 -0
  356. package/dist/ui/sheet.js +37 -0
  357. package/dist/ui/sheet.js.map +1 -0
  358. package/dist/ui/sidebar.d.ts +70 -0
  359. package/dist/ui/sidebar.d.ts.map +1 -0
  360. package/dist/ui/sidebar.js +207 -0
  361. package/dist/ui/sidebar.js.map +1 -0
  362. package/dist/ui/skeleton.d.ts +3 -0
  363. package/dist/ui/skeleton.d.ts.map +1 -0
  364. package/dist/ui/skeleton.js +7 -0
  365. package/dist/ui/skeleton.js.map +1 -0
  366. package/dist/ui/switch.d.ts +7 -0
  367. package/dist/ui/switch.d.ts.map +1 -0
  368. package/dist/ui/switch.js +8 -0
  369. package/dist/ui/switch.js.map +1 -0
  370. package/dist/ui/table.d.ts +11 -0
  371. package/dist/ui/table.d.ts.map +1 -0
  372. package/dist/ui/table.js +28 -0
  373. package/dist/ui/table.js.map +1 -0
  374. package/dist/ui/textarea.d.ts +4 -0
  375. package/dist/ui/textarea.d.ts.map +1 -0
  376. package/dist/ui/textarea.js +7 -0
  377. package/dist/ui/textarea.js.map +1 -0
  378. package/dist/ui/toggle-group.d.ts +11 -0
  379. package/dist/ui/toggle-group.d.ts.map +1 -0
  380. package/dist/ui/toggle-group.js +24 -0
  381. package/dist/ui/toggle-group.js.map +1 -0
  382. package/dist/ui/toggle.d.ts +10 -0
  383. package/dist/ui/toggle.d.ts.map +1 -0
  384. package/dist/ui/toggle.js +26 -0
  385. package/dist/ui/toggle.js.map +1 -0
  386. package/dist/ui/tooltip.d.ts +8 -0
  387. package/dist/ui/tooltip.d.ts.map +1 -0
  388. package/dist/ui/tooltip.js +17 -0
  389. package/dist/ui/tooltip.js.map +1 -0
  390. package/package.json +57 -0
@@ -0,0 +1,110 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useEffect, useCallback } from 'react';
4
+ import { useEntries, useMutateEntry, useSchemaEditor } from '@airdraft/react';
5
+ import { Button } from './ui/button.js';
6
+ import Loader from './ui/aevr/loader.js';
7
+ import { Input } from './ui/input.js';
8
+ import { Label } from './ui/label.js';
9
+ import { Table, TableBody, TableHead, TableHeader, TableRow, } from './ui/table.js';
10
+ import { PageHeader } from './components/PageHeader.js';
11
+ import { EmptyState } from './components/EmptyState.js';
12
+ import { EntryRow } from './components/EntryRow.js';
13
+ import { ErrorAlert } from './components/ErrorAlert.js';
14
+ import { FileText, Plus, X } from 'lucide-react';
15
+ import { cn } from './lib/utils.js';
16
+ // ---------------------------------------------------------------------------
17
+ // New-entry inline form
18
+ // ---------------------------------------------------------------------------
19
+ function NewEntryForm({ onDone, onCreate, creating, fieldName = 'title', }) {
20
+ const [value, setValue] = useState('');
21
+ const [error, setError] = useState(null);
22
+ const fieldLabel = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
23
+ async function handleSubmit(e) {
24
+ e.preventDefault();
25
+ if (!value.trim()) {
26
+ setError(`${fieldLabel} is required`);
27
+ return;
28
+ }
29
+ try {
30
+ await onCreate({ [fieldName]: value.trim() });
31
+ onDone();
32
+ }
33
+ catch (err) {
34
+ setError(err instanceof Error ? err.message : 'Failed to create entry.');
35
+ }
36
+ }
37
+ return (_jsxs("form", { onSubmit: handleSubmit, className: "flex items-end gap-2 rounded-lg border bg-muted/30 p-3", children: [_jsxs("div", { className: "flex-1 space-y-1", children: [_jsx(Label, { htmlFor: "new-entry-title", className: "text-xs", children: fieldLabel }), _jsx(Input, { id: "new-entry-title", value: value, onChange: (e) => { setValue(e.target.value); setError(null); }, placeholder: `New entry ${fieldLabel.toLowerCase()}`, className: "h-8 text-sm", autoFocus: true }), error && _jsx(ErrorAlert, { error: error, compact: true })] }), _jsxs(Button, { type: "submit", size: "sm", disabled: creating, children: [_jsx(Loader, { loading: creating, className: "size-3.5" }), creating ? 'Creating…' : 'Create'] }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8", onClick: onDone, children: _jsx(X, { className: "h-4 w-4" }) })] }));
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // CollectionManager
41
+ // ---------------------------------------------------------------------------
42
+ /**
43
+ * Tier 3 — drop-in content manager for a single collection.
44
+ *
45
+ * Lists entries in the given collection with create and delete actions.
46
+ *
47
+ * ```tsx
48
+ * import { ContentManager } from '@airdraft/react-ui'
49
+ *
50
+ * export default function Page({ params }: { params: { collection: string } }) {
51
+ * return <ContentManager collection={params.collection} />
52
+ * }
53
+ * ```
54
+ */
55
+ export function ContentManager({ collection, label, onEdit, className }) {
56
+ const { entries, loading, error, refresh } = useEntries(collection);
57
+ const { createEntry, deleteEntry, creating, deleting } = useMutateEntry(collection);
58
+ const { collections, loading: schemaLoading } = useSchemaEditor();
59
+ const [showNew, setShowNew] = useState(false);
60
+ const [deletingSlug, setDeletingSlug] = useState(null);
61
+ const displayLabel = label ?? collection.charAt(0).toUpperCase() + collection.slice(1);
62
+ // Derive publish flag and the slug-source field from the loaded schema
63
+ const [hasPublish, setHasPublish] = useState(false);
64
+ const [titleField, setTitleField] = useState('title');
65
+ useEffect(() => {
66
+ const col = collections?.[collection];
67
+ if (!col)
68
+ return;
69
+ setHasPublish(Boolean(col.publish));
70
+ if (col.slugSource) {
71
+ setTitleField(col.slugSource);
72
+ }
73
+ else if (!col.fields['title']) {
74
+ // Fall back to first required string field, then first string field
75
+ const fieldEntries = Object.entries(col.fields);
76
+ const pick = fieldEntries.find(([, f]) => f.required && f.type === 'string') ??
77
+ fieldEntries.find(([, f]) => f.type === 'string');
78
+ if (pick)
79
+ setTitleField(pick[0]);
80
+ }
81
+ }, [collections, collection]);
82
+ const handleDelete = useCallback(async (entry) => {
83
+ const sha = entry.meta?.sha;
84
+ if (!sha)
85
+ return;
86
+ setDeletingSlug(entry.slug);
87
+ try {
88
+ await deleteEntry(entry.slug, sha);
89
+ refresh();
90
+ }
91
+ finally {
92
+ setDeletingSlug(null);
93
+ }
94
+ }, [deleteEntry, refresh]);
95
+ const handleEdit = useCallback((entry) => {
96
+ if (onEdit) {
97
+ onEdit(entry.slug);
98
+ }
99
+ else {
100
+ window.location.href = `./${collection}/${entry.slug}`;
101
+ }
102
+ }, [onEdit, collection]);
103
+ const handleCreate = useCallback(async (data) => {
104
+ const entry = await createEntry(data);
105
+ refresh();
106
+ return entry;
107
+ }, [createEntry, refresh]);
108
+ return (_jsxs("div", { className: cn('space-y-4', className), children: [_jsx(PageHeader, { title: displayLabel, description: `${entries.length} entr${entries.length === 1 ? 'y' : 'ies'}`, actions: !showNew && (_jsxs(Button, { size: "sm", onClick: () => setShowNew(true), children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), "New entry"] })) }), showNew && (_jsx(NewEntryForm, { onDone: () => setShowNew(false), onCreate: handleCreate, creating: creating, fieldName: titleField })), loading ? (_jsx("div", { className: "flex justify-center py-8", children: _jsx(Loader, {}) })) : error ? (_jsx(ErrorAlert, { error: error, title: "Failed to load entries", onRetry: refresh })) : entries.length === 0 ? (_jsx(EmptyState, { icon: _jsx(FileText, { className: "h-10 w-10" }), title: "No entries yet", description: "Create the first entry in this collection.", action: _jsxs(Button, { size: "sm", onClick: () => setShowNew(true), children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), "New entry"] }) })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Title" }), _jsx(TableHead, { children: "Slug" }), hasPublish && _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { className: "text-right", children: "Actions" })] }) }), _jsx(TableBody, { children: entries.map((entry) => (_jsx(EntryRow, { entry: entry, titleField: titleField, hasPublish: hasPublish, onEdit: handleEdit, onDelete: handleDelete, deleting: deletingSlug === entry.slug && deleting }, entry.slug))) })] }))] }));
109
+ }
110
+ //# sourceMappingURL=ContentManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentManager.js","sourceRoot":"","sources":["../src/ContentManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface EntryEditorProps {
2
+ /** Collection name (from schema). */
3
+ collection: string;
4
+ /** Entry slug to edit. */
5
+ slug: string;
6
+ /** Called when the back button is clicked. */
7
+ onBack?: () => void;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Tier 3 — drop-in entry editor for a single CMS entry.
12
+ *
13
+ * Loads the entry and its collection schema, then renders a dynamic form for
14
+ * all defined fields. Saves via `updateEntry`.
15
+ *
16
+ * ```tsx
17
+ * import { EntryEditor } from '@airdraft/react-ui'
18
+ *
19
+ * export default function Page({ collection, slug }) {
20
+ * return <EntryEditor collection={collection} slug={slug} />
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function EntryEditor({ collection, slug, onBack, className }: EntryEditorProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=EntryEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntryEditor.d.ts","sourceRoot":"","sources":["../src/EntryEditor.tsx"],"names":[],"mappings":"AA4bA,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAuJpF"}
@@ -0,0 +1,190 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useState, useCallback, useRef } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { useEntry, useMutateEntry, useSchemaEditor, useEntries, useMediaLibrary, useMediaUpload, AirdraftClientError } from '@airdraft/react';
6
+ import { Button } from './ui/button.js';
7
+ import { Input } from './ui/input.js';
8
+ import { TagInput } from './components/TagInput.js';
9
+ import { Textarea } from './ui/textarea.js';
10
+ import { Label } from './ui/label.js';
11
+ import { Switch } from './ui/switch.js';
12
+ import { Checkbox } from './ui/checkbox.js';
13
+ import Loader from './ui/aevr/loader.js';
14
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select.js';
15
+ import { PageHeader } from './components/PageHeader.js';
16
+ import { ErrorAlert } from './components/ErrorAlert.js';
17
+ import { cn } from './lib/utils.js';
18
+ import { Image as ImageIcon, Upload, X, Check, AlertTriangle, RefreshCw } from 'lucide-react';
19
+ function FieldMediaInput({ name, label, required, value, onChange }) {
20
+ const id = `field-${name}`;
21
+ const { items, loading: libLoading, refresh } = useMediaLibrary();
22
+ const { upload, uploading } = useMediaUpload();
23
+ const [open, setOpen] = useState(false);
24
+ const [mounted, setMounted] = useState(false);
25
+ const [uploadError, setUploadError] = useState(null);
26
+ const fileRef = useRef(null);
27
+ useEffect(() => { setMounted(true); }, []);
28
+ const currentKey = String(value ?? '');
29
+ const currentItem = items.find((i) => i.key === currentKey);
30
+ async function handleFile(files) {
31
+ if (!files?.length)
32
+ return;
33
+ setUploadError(null);
34
+ try {
35
+ const item = await upload(files[0]);
36
+ refresh();
37
+ onChange(name, item.key);
38
+ setOpen(false);
39
+ }
40
+ catch (err) {
41
+ setUploadError(err instanceof Error ? err.message : 'Upload failed');
42
+ }
43
+ finally {
44
+ if (fileRef.current)
45
+ fileRef.current.value = '';
46
+ }
47
+ }
48
+ const modal = open && mounted && createPortal(_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60", onClick: (e) => { if (e.target === e.currentTarget)
49
+ setOpen(false); }, children: _jsxs("div", { className: "bg-background rounded-xl border shadow-xl w-full max-w-2xl max-h-[80vh] flex flex-col", children: [_jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-b shrink-0", children: [_jsx("h2", { className: "font-semibold text-sm", children: "Media library" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { type: "button", size: "sm", variant: "outline", onClick: () => fileRef.current?.click(), disabled: uploading, children: [_jsx(Loader, { loading: uploading, className: "size-3.5" }), _jsx(Upload, { className: "h-3.5 w-3.5 mr-1.5" }), uploading ? 'Uploading…' : 'Upload'] }), _jsx("input", { ref: fileRef, type: "file", accept: "image/jpeg,image/png,image/webp,image/gif,image/svg+xml", className: "sr-only", onChange: (e) => handleFile(e.target.files) }), _jsx(Button, { type: "button", size: "icon", variant: "ghost", className: "h-7 w-7", onClick: () => setOpen(false), children: _jsx(X, { className: "h-4 w-4" }) })] })] }), _jsxs("div", { className: "overflow-y-auto p-4 flex-1", children: [uploadError && _jsx("p", { className: "text-sm text-destructive mb-3", children: uploadError }), libLoading && _jsx("div", { className: "flex justify-center py-4", children: _jsx(Loader, {}) }), !libLoading && items.length === 0 && (_jsx("p", { className: "text-sm text-muted-foreground", children: "No media yet \u2014 upload something above." })), _jsx("div", { className: "grid grid-cols-3 sm:grid-cols-4 gap-2", children: items.map((item) => {
50
+ const selected = item.key === currentKey;
51
+ return (_jsxs("button", { type: "button", onClick: () => { onChange(name, item.key); setOpen(false); }, className: cn('group relative rounded-lg overflow-hidden border aspect-square transition-all', selected ? 'ring-2 ring-primary border-primary' : 'hover:border-foreground/40'), children: [_jsx("img", { src: item.url, alt: item.alt ?? item.name, className: "w-full h-full object-cover" }), selected && (_jsx("div", { className: "absolute top-1.5 right-1.5 bg-primary text-primary-foreground rounded-full w-5 h-5 flex items-center justify-center", children: _jsx(Check, { className: "h-3 w-3" }) })), _jsx("div", { className: "absolute bottom-0 inset-x-0 bg-linear-to-t from-black/70 to-transparent px-2 py-1.5 opacity-0 group-hover:opacity-100 transition-opacity", children: _jsx("p", { className: "text-white text-xs truncate", children: item.name }) })] }, item.key));
52
+ }) })] })] }) }), document.body);
53
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), currentItem ? (_jsxs("div", { className: "relative rounded-lg overflow-hidden border aspect-video w-full max-w-sm bg-muted", children: [_jsx("img", { src: currentItem.url, alt: currentItem.alt ?? currentItem.name, className: "w-full h-full object-cover" }), _jsxs("div", { className: "absolute top-2 right-2 flex gap-1.5", children: [_jsx(Button, { type: "button", size: "sm", variant: "secondary", className: "h-6 text-xs px-2", onClick: () => setOpen(true), children: "Change" }), _jsx(Button, { type: "button", size: "icon", variant: "secondary", className: "h-6 w-6", onClick: () => onChange(name, ''), children: _jsx(X, { className: "h-3 w-3" }) })] }), _jsx("p", { className: "absolute bottom-0 inset-x-0 bg-black/50 text-white text-xs px-2 py-1 truncate", children: currentItem.name })] })) : (_jsxs("button", { id: id, type: "button", onClick: () => setOpen(true), className: "flex flex-col items-center justify-center gap-2 rounded-lg border border-dashed bg-muted/40 aspect-video w-full max-w-sm text-muted-foreground hover:bg-muted/70 hover:border-foreground/30 transition-colors", children: [_jsx(ImageIcon, { className: "h-8 w-8 opacity-40" }), _jsx("span", { className: "text-xs", children: "Click to pick from media library" })] })), modal] }));
54
+ }
55
+ function getEntryLabel(entry) {
56
+ return String(entry.data['title'] ?? entry.data['name'] ?? entry.slug);
57
+ }
58
+ function FieldRelationInput({ name, config, value, onChange }) {
59
+ const id = `field-${name}`;
60
+ const label = config.label ?? name;
61
+ const relatedCollection = config.collection ?? '';
62
+ const isMulti = config.type === 'relations';
63
+ const { entries, loading } = useEntries(relatedCollection);
64
+ const [search, setSearch] = useState('');
65
+ const filtered = search
66
+ ? entries.filter((e) => getEntryLabel(e).toLowerCase().includes(search.toLowerCase()) || e.slug.includes(search.toLowerCase()))
67
+ : entries;
68
+ if (!relatedCollection) {
69
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx("p", { className: "text-xs text-destructive", children: "Relation field missing collection config." })] }));
70
+ }
71
+ if (isMulti) {
72
+ const selected = Array.isArray(value) ? value : [];
73
+ function toggle(slug) {
74
+ onChange(name, selected.includes(slug) ? selected.filter((s) => s !== slug) : [...selected, slug]);
75
+ }
76
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" }), _jsxs("span", { className: "text-muted-foreground ml-1 text-xs", children: ["\u2192 ", relatedCollection] })] }), selected.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5 mb-1", children: selected.map((slug) => {
77
+ const entry = entries.find((e) => e.slug === slug);
78
+ return (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border bg-muted px-2.5 py-0.5 text-xs", children: [entry ? getEntryLabel(entry) : slug, _jsx("button", { type: "button", onClick: () => toggle(slug), className: "text-muted-foreground hover:text-foreground transition-colors ml-0.5", children: _jsx(X, { className: "h-3 w-3" }) })] }, slug));
79
+ }) })), _jsxs("div", { className: "rounded-lg border overflow-hidden", children: [_jsx("div", { className: "border-b px-3 py-2 bg-muted/30", children: _jsx(Input, { placeholder: `Search ${relatedCollection}…`, value: search, onChange: (e) => setSearch(e.target.value), className: "h-7 text-xs border-0 bg-transparent shadow-none px-0 focus-visible:ring-0" }) }), _jsxs("div", { className: "max-h-48 overflow-y-auto divide-y", children: [loading && _jsx("p", { className: "text-xs text-muted-foreground px-3 py-2", children: "Loading\u2026" }), !loading && filtered.length === 0 && (_jsx("p", { className: "text-xs text-muted-foreground px-3 py-2", children: "No entries found." })), filtered.map((entry) => {
80
+ const checked = selected.includes(entry.slug);
81
+ return (_jsxs("label", { className: "flex items-center gap-2.5 px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors", children: [_jsx(Checkbox, { checked: checked, onCheckedChange: () => toggle(entry.slug) }), _jsx("span", { className: "text-sm flex-1 truncate", children: getEntryLabel(entry) }), _jsx("span", { className: "text-xs text-muted-foreground font-mono", children: entry.slug })] }, entry.slug));
82
+ })] })] })] }));
83
+ }
84
+ // Single relation — Select dropdown
85
+ const currentSlug = String(value ?? '');
86
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" }), _jsxs("span", { className: "text-muted-foreground ml-1 text-xs", children: ["\u2192 ", relatedCollection] })] }), _jsxs(Select, { value: currentSlug, onValueChange: (v) => onChange(name, v === '__none__' ? '' : v), children: [_jsx(SelectTrigger, { id: id, children: _jsx(SelectValue, { placeholder: loading ? 'Loading…' : `Select ${relatedCollection}…` }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__none__", children: _jsx("span", { className: "text-muted-foreground", children: "None" }) }), entries.map((entry) => (_jsx(SelectItem, { value: entry.slug, children: getEntryLabel(entry) }, entry.slug)))] })] })] }));
87
+ }
88
+ function FieldInput({ name, config, value, onChange }) {
89
+ const label = config.label ?? name;
90
+ const id = `field-${name}`;
91
+ switch (config.type) {
92
+ case 'boolean':
93
+ return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Switch, { id: id, checked: Boolean(value ?? config.default ?? false), onCheckedChange: (checked) => onChange(name, checked) }), _jsx(Label, { htmlFor: id, children: label })] }));
94
+ case 'text':
95
+ case 'rich-text':
96
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(Textarea, { id: id, value: String(value ?? config.default ?? ''), onChange: (e) => onChange(name, e.target.value), className: "min-h-[120px]" })] }));
97
+ case 'number':
98
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(Input, { id: id, type: "number", value: String(value ?? config.default ?? ''), onChange: (e) => onChange(name, e.target.value === '' ? '' : Number(e.target.value)) })] }));
99
+ case 'date':
100
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(Input, { id: id, type: "date", value: String(value ?? config.default ?? ''), onChange: (e) => onChange(name, e.target.value) })] }));
101
+ case 'datetime':
102
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(Input, { id: id, type: "datetime-local", value: String(value ?? config.default ?? '').replace('Z', ''), onChange: (e) => onChange(name, e.target.value ? `${e.target.value}Z` : '') })] }));
103
+ case 'select':
104
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsxs(Select, { value: String(value ?? config.default ?? ''), onValueChange: (v) => onChange(name, v), children: [_jsx(SelectTrigger, { id: id, children: _jsx(SelectValue, { placeholder: "Select\u2026" }) }), _jsx(SelectContent, { children: (config.options ?? []).map((opt) => (_jsx(SelectItem, { value: opt, children: opt }, opt))) })] })] }));
105
+ case 'multiselect':
106
+ case 'list':
107
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(TagInput, { id: id, value: Array.isArray(value) ? value : String(value ?? '').split(',').map((s) => s.trim()).filter(Boolean), onChange: (tags) => onChange(name, tags), options: config.type === 'multiselect' ? (config.options ?? undefined) : undefined, placeholder: config.type === 'multiselect' ? 'Pick options…' : 'Type and press Enter' })] }));
108
+ case 'image':
109
+ return (_jsx(FieldMediaInput, { name: name, label: label, required: config.required, value: value, onChange: onChange }));
110
+ case 'relation':
111
+ case 'relations':
112
+ return (_jsx(FieldRelationInput, { name: name, config: config, value: value, onChange: onChange }));
113
+ // string (default)
114
+ default:
115
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: id, children: [label, config.required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx(Input, { id: id, value: String(value ?? config.default ?? ''), onChange: (e) => onChange(name, e.target.value) })] }));
116
+ }
117
+ }
118
+ /**
119
+ * Tier 3 — drop-in entry editor for a single CMS entry.
120
+ *
121
+ * Loads the entry and its collection schema, then renders a dynamic form for
122
+ * all defined fields. Saves via `updateEntry`.
123
+ *
124
+ * ```tsx
125
+ * import { EntryEditor } from '@airdraft/react-ui'
126
+ *
127
+ * export default function Page({ collection, slug }) {
128
+ * return <EntryEditor collection={collection} slug={slug} />
129
+ * }
130
+ * ```
131
+ */
132
+ export function EntryEditor({ collection, slug, onBack, className }) {
133
+ const { entry, loading: entryLoading, error: entryError, refresh } = useEntry(collection, slug);
134
+ const { updateEntry, updating, error: mutError } = useMutateEntry(collection);
135
+ const { collections, loading: schemaLoading } = useSchemaEditor();
136
+ const [form, setForm] = useState({});
137
+ const [saved, setSaved] = useState(false);
138
+ const [conflict, setConflict] = useState(false);
139
+ // Seed form when entry loads
140
+ useEffect(() => {
141
+ if (entry) {
142
+ setForm({ ...entry.data });
143
+ setConflict(false);
144
+ }
145
+ }, [entry]);
146
+ const handleChange = useCallback((name, value) => {
147
+ setSaved(false);
148
+ setForm((prev) => ({ ...prev, [name]: value }));
149
+ }, []);
150
+ async function handleSave(e) {
151
+ e.preventDefault();
152
+ if (!entry)
153
+ return;
154
+ // Coerce list / multiselect / relations fields to arrays before saving.
155
+ // Entries written when those fields had type "string" store plain strings
156
+ // on disk; the validator requires arrays.
157
+ const normalized = { ...form };
158
+ for (const [name, cfg] of Object.entries(fields)) {
159
+ if (['list', 'multiselect', 'relations'].includes(cfg.type)) {
160
+ const v = normalized[name];
161
+ if (!Array.isArray(v)) {
162
+ normalized[name] = v
163
+ ? String(v).split(',').map((s) => s.trim()).filter(Boolean)
164
+ : [];
165
+ }
166
+ }
167
+ }
168
+ try {
169
+ await updateEntry(slug, normalized, entry.meta.sha);
170
+ refresh();
171
+ setSaved(true);
172
+ setConflict(false);
173
+ }
174
+ catch (err) {
175
+ if (err instanceof AirdraftClientError && err.statusCode === 409) {
176
+ setConflict(true);
177
+ }
178
+ // mutError is set by the hook; form stays visible
179
+ }
180
+ }
181
+ const schema = collections?.[collection];
182
+ const fields = schema?.fields ?? {};
183
+ const loading = entryLoading || schemaLoading;
184
+ const title = String(entry?.data?.['title'] ?? entry?.data?.['name'] ?? slug);
185
+ const collectionLabel = schema?.label ?? collection;
186
+ return (_jsxs("div", { className: className, children: [_jsx(PageHeader, { title: loading ? '…' : title, description: `${collectionLabel} / ${slug}`, actions: onBack ? (_jsx(Button, { variant: "outline", size: "sm", onClick: onBack, children: "\u2190 Back" })) : undefined }), loading && (_jsx("div", { className: "flex justify-center py-10 mt-6", children: _jsx(Loader, {}) })), !loading && entryError && (_jsx(ErrorAlert, { error: entryError, title: "Failed to load entry", className: "mt-6" })), !loading && !entryError && entry && (_jsxs(_Fragment, { children: [conflict && (_jsxs("div", { className: "mt-6 flex items-start gap-3 rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 py-3 text-sm", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0 text-amber-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "font-medium text-amber-700 dark:text-amber-400", children: "Conflict detected" }), _jsx("p", { className: "text-muted-foreground text-xs mt-0.5", children: "This entry was updated by someone else. Reload to get the latest version before saving." })] }), _jsxs(Button, { type: "button", size: "sm", variant: "outline", className: "shrink-0 border-amber-500/40 text-amber-700 hover:bg-amber-500/10 dark:text-amber-400", onClick: () => { refresh(); }, children: [_jsx(RefreshCw, { className: "mr-1.5 h-3.5 w-3.5" }), "Reload"] })] })), _jsxs("form", { onSubmit: handleSave, className: "mt-6 space-y-5 max-w-2xl", children: [Object.entries(fields)
187
+ .filter(([, cfg]) => !cfg.hidden)
188
+ .map(([name, cfg]) => (_jsx(FieldInput, { name: name, config: cfg, value: form[name], onChange: handleChange }, name))), schema?.publish && (_jsxs("div", { className: "flex items-center gap-3 pt-2 border-t", children: [_jsx(Switch, { id: "field-published", checked: Boolean(form['published']), onCheckedChange: (checked) => handleChange('published', checked) }), _jsxs(Label, { htmlFor: "field-published", className: "text-muted-foreground text-sm", children: ["Published", entry.publishedAt && (_jsx("span", { className: "ml-2 text-xs", children: new Date(entry.publishedAt).toLocaleDateString() }))] })] })), _jsxs("div", { className: "flex items-center gap-3 pt-4", children: [_jsxs(Button, { type: "submit", disabled: updating, children: [_jsx(Loader, { loading: updating, className: "size-3.5" }), updating ? 'Saving…' : 'Save changes'] }), saved && !updating && (_jsx("span", { className: "text-sm text-green-600", children: "Saved" })), mutError && !conflict && (_jsx(ErrorAlert, { error: mutError, title: "Save failed", compact: true }))] })] })] }))] }));
189
+ }
190
+ //# sourceMappingURL=EntryEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntryEditor.js","sourceRoot":"","sources":["../src/EntryEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface LoginFormProps {
2
+ /** Called after a successful login. Use this to redirect the user. */
3
+ onSuccess?: () => void;
4
+ /** Optional class name applied to the outer `<form>` element. */
5
+ className?: string;
6
+ }
7
+ /**
8
+ * Email + password login form backed by `useAuth()`.
9
+ *
10
+ * Must be rendered inside an `<AirdraftProvider>` that uses
11
+ * `{ type: 'session' }` auth.
12
+ *
13
+ * ```tsx
14
+ * <LoginForm onSuccess={() => router.replace('/cms')} />
15
+ * ```
16
+ */
17
+ export declare function LoginForm({ onSuccess, className }: LoginFormProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=LoginForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../src/LoginForm.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,cAAc,2CA6DjE"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { useAuth } from '@airdraft/react';
5
+ import { Button } from './ui/button.js';
6
+ import { Input } from './ui/input.js';
7
+ import { Label } from './ui/label.js';
8
+ /**
9
+ * Email + password login form backed by `useAuth()`.
10
+ *
11
+ * Must be rendered inside an `<AirdraftProvider>` that uses
12
+ * `{ type: 'session' }` auth.
13
+ *
14
+ * ```tsx
15
+ * <LoginForm onSuccess={() => router.replace('/cms')} />
16
+ * ```
17
+ */
18
+ export function LoginForm({ onSuccess, className }) {
19
+ const { login } = useAuth();
20
+ const [email, setEmail] = useState('');
21
+ const [password, setPassword] = useState('');
22
+ const [error, setError] = useState(null);
23
+ const [loading, setLoading] = useState(false);
24
+ async function handleSubmit(e) {
25
+ e.preventDefault();
26
+ setError(null);
27
+ setLoading(true);
28
+ try {
29
+ await login(email, password);
30
+ onSuccess?.();
31
+ }
32
+ catch (err) {
33
+ setError(err instanceof Error ? err.message : 'Login failed. Check your credentials.');
34
+ }
35
+ finally {
36
+ setLoading(false);
37
+ }
38
+ }
39
+ return (_jsx("form", { onSubmit: handleSubmit, className: className, children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "airdraft-email", children: "Email" }), _jsx(Input, { id: "airdraft-email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoComplete: "email", placeholder: "you@example.com", disabled: loading })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "airdraft-password", children: "Password" }), _jsx(Input, { id: "airdraft-password", type: "password", value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "current-password", placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", disabled: loading })] }), error && (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: error })), _jsx(Button, { type: "submit", className: "w-full", disabled: loading, children: loading ? 'Signing in…' : 'Sign in' })] }) }));
40
+ }
41
+ //# sourceMappingURL=LoginForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginForm.js","sourceRoot":"","sources":["../src/LoginForm.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AASrC;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAkB;IAChE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAA;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,KAAK,UAAU,YAAY,CAAC,CAA6B;QACvD,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC5B,SAAS,EAAE,EAAE,CAAA;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAA;QACxF,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CACL,eAAM,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,YAChD,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,aAAa,aAC1B,KAAC,KAAK,IAAC,OAAO,EAAC,gBAAgB,sBAAc,EAC7C,KAAC,KAAK,IACJ,EAAE,EAAC,gBAAgB,EACnB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,QACR,YAAY,EAAC,OAAO,EACpB,WAAW,EAAC,iBAAiB,EAC7B,QAAQ,EAAE,OAAO,GACjB,IACE,EACN,eAAK,SAAS,EAAC,aAAa,aAC1B,KAAC,KAAK,IAAC,OAAO,EAAC,mBAAmB,yBAAiB,EACnD,KAAC,KAAK,IACJ,EAAE,EAAC,mBAAmB,EACtB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,QAAQ,QACR,YAAY,EAAC,kBAAkB,EAC/B,WAAW,EAAC,kDAAU,EACtB,QAAQ,EAAE,OAAO,GACjB,IACE,EACL,KAAK,IAAI,CACR,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,YACjD,KAAK,GACJ,CACL,EACD,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,YACvD,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,GAC7B,IACL,GACD,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { MediaItem } from '@airdraft/core';
2
+ export interface MediaManagerProps {
3
+ className?: string;
4
+ /** When set, calls this instead of showing the selection state. */
5
+ onSelect?: (item: MediaItem) => void;
6
+ }
7
+ /**
8
+ * Tier 3 — drop-in media manager.
9
+ *
10
+ * Provides upload, browse, and delete for all media assets.
11
+ *
12
+ * ```tsx
13
+ * import { MediaManager } from '@airdraft/react-ui'
14
+ *
15
+ * export default function MediaPage() {
16
+ * return <MediaManager />
17
+ * }
18
+ * ```
19
+ */
20
+ export declare function MediaManager({ className, onSelect }: MediaManagerProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=MediaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaManager.d.ts","sourceRoot":"","sources":["../src/MediaManager.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAa/C,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CACrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAiGtE"}
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback } from 'react';
4
+ import { useMediaLibrary, useMediaUpload, useMediaDelete } from '@airdraft/react';
5
+ import { Button } from './ui/button.js';
6
+ import Loader from './ui/aevr/loader.js';
7
+ import { Input } from './ui/input.js';
8
+ import { PageHeader } from './components/PageHeader.js';
9
+ import { EmptyState } from './components/EmptyState.js';
10
+ import { MediaCard } from './components/MediaCard.js';
11
+ import { UploadZone } from './components/UploadZone.js';
12
+ import { ErrorAlert } from './components/ErrorAlert.js';
13
+ import { Images, Search, X } from 'lucide-react';
14
+ import { cn } from './lib/utils.js';
15
+ /**
16
+ * Tier 3 — drop-in media manager.
17
+ *
18
+ * Provides upload, browse, and delete for all media assets.
19
+ *
20
+ * ```tsx
21
+ * import { MediaManager } from '@airdraft/react-ui'
22
+ *
23
+ * export default function MediaPage() {
24
+ * return <MediaManager />
25
+ * }
26
+ * ```
27
+ */
28
+ export function MediaManager({ className, onSelect }) {
29
+ const [search, setSearch] = useState('');
30
+ const [showUpload, setShowUpload] = useState(false);
31
+ const [deletingKey, setDeletingKey] = useState(null);
32
+ const [uploadError, setUploadError] = useState(null);
33
+ const { items, loading, error, refresh } = useMediaLibrary({ search: search || undefined });
34
+ const { upload, uploading } = useMediaUpload();
35
+ const { deleteItem } = useMediaDelete();
36
+ const handleUpload = useCallback(async (files) => {
37
+ setUploadError(null);
38
+ try {
39
+ await Promise.all(files.map((f) => upload(f)));
40
+ refresh();
41
+ setShowUpload(false);
42
+ }
43
+ catch (err) {
44
+ setUploadError(err instanceof Error ? err.message : 'Upload failed.');
45
+ }
46
+ }, [upload, refresh]);
47
+ const handleDelete = useCallback(async (item) => {
48
+ setDeletingKey(item.key);
49
+ try {
50
+ await deleteItem(item.key);
51
+ refresh();
52
+ }
53
+ finally {
54
+ setDeletingKey(null);
55
+ }
56
+ }, [deleteItem, refresh]);
57
+ return (_jsxs("div", { className: cn('space-y-4', className), children: [_jsx(PageHeader, { title: "Media", description: `${items.length} item${items.length === 1 ? '' : 's'}`, actions: _jsx(Button, { size: "sm", onClick: () => setShowUpload((v) => !v), children: showUpload ? (_jsxs(_Fragment, { children: [_jsx(X, { className: "mr-1.5 h-3.5 w-3.5" }), "Cancel"] })) : (_jsx(_Fragment, { children: "Upload" })) }) }), showUpload && (_jsxs("div", { className: "space-y-2", children: [_jsx(UploadZone, { onFiles: handleUpload, uploading: uploading }), uploadError && _jsx(ErrorAlert, { error: uploadError, compact: true })] })), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground" }), _jsx(Input, { value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search by filename\u2026", className: "pl-8 h-8 text-sm" })] }), loading ? (_jsx("div", { className: "flex justify-center py-8", children: _jsx(Loader, {}) })) : error ? (_jsx(ErrorAlert, { error: error, title: "Failed to load media", onRetry: refresh })) : items.length === 0 ? (_jsx(EmptyState, { icon: _jsx(Images, { className: "h-10 w-10" }), title: search ? 'No results' : 'No media yet', description: search ? 'Try a different search term.' : 'Upload your first file to get started.', action: !search && (_jsx(Button, { size: "sm", onClick: () => setShowUpload(true), children: "Upload" })) })) : (_jsx("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5", children: items.map((item) => (_jsx(MediaCard, { item: item, onDelete: handleDelete, onSelect: onSelect, deleting: deletingKey === item.key }, item.key))) }))] }));
58
+ }
59
+ //# sourceMappingURL=MediaManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaManager.js","sourceRoot":"","sources":["../src/MediaManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { UseSchemaEditorState } from "@airdraft/react";
2
+ import { type SchemaEditorLabels } from "./SchemaEditorRoot.js";
3
+ export interface SchemaEditorProps {
4
+ /** Consumer-controlled state override (from useSchemaEditor()). */
5
+ value?: UseSchemaEditorState;
6
+ /** Override any label string. */
7
+ labels?: SchemaEditorLabels;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Tier 3 — drop-in schema editor. Zero configuration required.
12
+ *
13
+ * ```tsx
14
+ * import { SchemaEditor } from '@airdraft/react-ui'
15
+ *
16
+ * export default function SchemaPage() {
17
+ * return <SchemaEditor />
18
+ * }
19
+ * ```
20
+ */
21
+ export declare function SchemaEditor({ value, labels, className }: SchemaEditorProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=SchemaEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaEditor.d.ts","sourceRoot":"","sources":["../src/SchemaEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAM3E"}