@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@airdraft/react-ui` will be documented here.
4
+
5
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
@@ -0,0 +1,22 @@
1
+ export interface AcceptInviteFormProps {
2
+ /** The invite token from the URL — passed directly into `POST /auth/invite/:token`. */
3
+ token: string;
4
+ /** Called after the invite is accepted and the user is automatically logged in. */
5
+ onSuccess?: () => void;
6
+ /** Optional class name applied to the outer `<form>` element. */
7
+ className?: string;
8
+ }
9
+ /**
10
+ * Name + password form for accepting an email invite.
11
+ *
12
+ * Accepts the invite (creates the account), then immediately logs the new user
13
+ * in so the caller can redirect straight to the CMS.
14
+ *
15
+ * Must be rendered inside an `<AirdraftProvider>` with `{ type: 'session' }` auth.
16
+ *
17
+ * ```tsx
18
+ * <AcceptInviteForm token={token} onSuccess={() => router.replace('/cms')} />
19
+ * ```
20
+ */
21
+ export declare function AcceptInviteForm({ token, onSuccess, className }: AcceptInviteFormProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=AcceptInviteForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcceptInviteForm.d.ts","sourceRoot":"","sources":["../src/AcceptInviteForm.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAA;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CA0FtF"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { useAirdraftClient, 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
+ * Name + password form for accepting an email invite.
10
+ *
11
+ * Accepts the invite (creates the account), then immediately logs the new user
12
+ * in so the caller can redirect straight to the CMS.
13
+ *
14
+ * Must be rendered inside an `<AirdraftProvider>` with `{ type: 'session' }` auth.
15
+ *
16
+ * ```tsx
17
+ * <AcceptInviteForm token={token} onSuccess={() => router.replace('/cms')} />
18
+ * ```
19
+ */
20
+ export function AcceptInviteForm({ token, onSuccess, className }) {
21
+ const client = useAirdraftClient();
22
+ const { login } = useAuth();
23
+ const [name, setName] = useState('');
24
+ const [password, setPassword] = useState('');
25
+ const [confirm, setConfirm] = useState('');
26
+ const [error, setError] = useState(null);
27
+ const [loading, setLoading] = useState(false);
28
+ async function handleSubmit(e) {
29
+ e.preventDefault();
30
+ if (password !== confirm) {
31
+ setError('Passwords do not match');
32
+ return;
33
+ }
34
+ setError(null);
35
+ setLoading(true);
36
+ try {
37
+ // Step 1: Accept invite — creates the account, returns the new email
38
+ const { email } = await client.auth.acceptInvite(token, password, name.trim() || undefined);
39
+ // Step 2: Auto-login so the session cookie is set immediately
40
+ await login(email, password);
41
+ onSuccess?.();
42
+ }
43
+ catch (err) {
44
+ setError(err instanceof Error ? err.message : 'Something went wrong. Please try again.');
45
+ }
46
+ finally {
47
+ setLoading(false);
48
+ }
49
+ }
50
+ return (_jsx("form", { onSubmit: handleSubmit, className: className, children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsxs(Label, { htmlFor: "airdraft-invite-name", children: ["Name", ' ', _jsx("span", { className: "text-muted-foreground font-normal", children: "(optional)" })] }), _jsx(Input, { id: "airdraft-invite-name", type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Your name", autoComplete: "name", disabled: loading })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "airdraft-invite-password", children: "Password" }), _jsx(Input, { id: "airdraft-invite-password", type: "password", value: password, onChange: (e) => { setPassword(e.target.value); setError(null); }, placeholder: "Min. 8 characters", autoComplete: "new-password", required: true, disabled: loading })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "airdraft-invite-confirm", children: "Confirm password" }), _jsx(Input, { id: "airdraft-invite-confirm", type: "password", value: confirm, onChange: (e) => { setConfirm(e.target.value); setError(null); }, placeholder: "Re-enter password", autoComplete: "new-password", required: true, 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 ? 'Setting up account…' : 'Create account' })] }) }));
51
+ }
52
+ //# sourceMappingURL=AcceptInviteForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcceptInviteForm.js","sourceRoot":"","sources":["../src/AcceptInviteForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface AuditEventRecord {
2
+ requestId: string;
3
+ timestamp: string;
4
+ durationMs: number;
5
+ method: string;
6
+ path: string;
7
+ action: string;
8
+ collection?: string;
9
+ slug?: string;
10
+ statusCode: number;
11
+ actor?: string;
12
+ request?: Record<string, unknown>;
13
+ response?: Record<string, unknown>;
14
+ error?: {
15
+ message: string;
16
+ code?: string;
17
+ };
18
+ }
19
+ export interface AuditLogViewerProps {
20
+ /**
21
+ * URL of the endpoint that returns `{ events: AuditEventRecord[], total: number }`.
22
+ * Defaults to `/api/audit`.
23
+ */
24
+ apiUrl?: string;
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Tier 3 — drop-in audit log inspector.
29
+ *
30
+ * Fetches audit events from `apiUrl` (default `/api/audit`) and renders them
31
+ * in a filterable, sortable table with status-code colour coding.
32
+ *
33
+ * ```tsx
34
+ * import { AuditLogViewer } from '@airdraft/react-ui'
35
+ *
36
+ * export default function AuditPage() {
37
+ * return <AuditLogViewer />
38
+ * }
39
+ * ```
40
+ */
41
+ export declare function AuditLogViewer({ apiUrl, className }: AuditLogViewerProps): import("react/jsx-runtime").JSX.Element;
42
+ //# sourceMappingURL=AuditLogViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogViewer.d.ts","sourceRoot":"","sources":["../src/AuditLogViewer.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3C;AAgDD,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAqB,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CA6KvF"}
@@ -0,0 +1,95 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useState, useCallback } from 'react';
4
+ import { Button } from './ui/button.js';
5
+ import { Input } from './ui/input.js';
6
+ import { Badge } from './ui/badge.js';
7
+ import { PageHeader } from './components/PageHeader.js';
8
+ import { EmptyState } from './components/EmptyState.js';
9
+ import { ErrorAlert } from './components/ErrorAlert.js';
10
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from './ui/table.js';
11
+ import { cn } from './lib/utils.js';
12
+ import { RefreshCw, ScrollText } from 'lucide-react';
13
+ // ---------------------------------------------------------------------------
14
+ // Helpers
15
+ // ---------------------------------------------------------------------------
16
+ function StatusBadge({ code }) {
17
+ const cls = code >= 500 ? 'bg-red-100 text-red-700 border-red-200 hover:bg-red-100'
18
+ : code >= 400 ? 'bg-orange-100 text-orange-700 border-orange-200 hover:bg-orange-100'
19
+ : code >= 300 ? 'bg-yellow-100 text-yellow-700 border-yellow-200 hover:bg-yellow-100'
20
+ : 'bg-green-100 text-green-700 border-green-200 hover:bg-green-100';
21
+ return (_jsx(Badge, { variant: "outline", className: cn('font-mono text-xs', cls), children: code }));
22
+ }
23
+ function MethodBadge({ method }) {
24
+ const cls = method === 'GET' ? 'bg-blue-50 text-blue-700 border-blue-200 hover:bg-blue-50'
25
+ : method === 'POST' ? 'bg-green-50 text-green-700 border-green-200 hover:bg-green-50'
26
+ : method === 'PUT' || method === 'PATCH' ? 'bg-amber-50 text-amber-700 border-amber-200 hover:bg-amber-50'
27
+ : method === 'DELETE' ? 'bg-red-50 text-red-700 border-red-200 hover:bg-red-50'
28
+ : 'bg-muted text-muted-foreground';
29
+ return (_jsx(Badge, { variant: "outline", className: cn('font-mono text-xs w-14 justify-center', cls), children: method }));
30
+ }
31
+ function formatTs(ts) {
32
+ const d = new Date(ts);
33
+ return d.toLocaleString(undefined, {
34
+ month: 'short',
35
+ day: 'numeric',
36
+ hour: '2-digit',
37
+ minute: '2-digit',
38
+ second: '2-digit',
39
+ });
40
+ }
41
+ /**
42
+ * Tier 3 — drop-in audit log inspector.
43
+ *
44
+ * Fetches audit events from `apiUrl` (default `/api/audit`) and renders them
45
+ * in a filterable, sortable table with status-code colour coding.
46
+ *
47
+ * ```tsx
48
+ * import { AuditLogViewer } from '@airdraft/react-ui'
49
+ *
50
+ * export default function AuditPage() {
51
+ * return <AuditLogViewer />
52
+ * }
53
+ * ```
54
+ */
55
+ export function AuditLogViewer({ apiUrl = '/api/audit', className }) {
56
+ const [events, setEvents] = useState([]);
57
+ const [total, setTotal] = useState(0);
58
+ const [loading, setLoading] = useState(true);
59
+ const [error, setError] = useState(null);
60
+ const [filter, setFilter] = useState('');
61
+ const [expanded, setExpanded] = useState(null);
62
+ const load = useCallback(async () => {
63
+ setLoading(true);
64
+ setError(null);
65
+ try {
66
+ const res = await fetch(`${apiUrl}?limit=500`);
67
+ if (!res.ok)
68
+ throw new Error(`HTTP ${res.status}`);
69
+ const json = await res.json();
70
+ setEvents(json.events);
71
+ setTotal(json.total);
72
+ }
73
+ catch (err) {
74
+ setError(err instanceof Error ? err.message : 'Failed to load audit log');
75
+ }
76
+ finally {
77
+ setLoading(false);
78
+ }
79
+ }, [apiUrl]);
80
+ useEffect(() => { load(); }, [load]);
81
+ const q = filter.toLowerCase().trim();
82
+ const filtered = q
83
+ ? events.filter((e) => e.action.toLowerCase().includes(q) ||
84
+ e.path.toLowerCase().includes(q) ||
85
+ e.method.toLowerCase().includes(q) ||
86
+ String(e.statusCode).includes(q) ||
87
+ (e.collection ?? '').toLowerCase().includes(q) ||
88
+ (e.actor ?? '').toLowerCase().includes(q) ||
89
+ (e.error?.message ?? '').toLowerCase().includes(q))
90
+ : events;
91
+ return (_jsxs("div", { className: cn('space-y-4', className), children: [_jsx(PageHeader, { title: "Audit Log", description: loading ? 'Loading…'
92
+ : error ? 'Error'
93
+ : `${filtered.length} of ${total} event${total === 1 ? '' : 's'}`, actions: _jsxs(Button, { variant: "outline", size: "sm", onClick: load, disabled: loading, children: [_jsx(RefreshCw, { className: cn('h-3.5 w-3.5 mr-1.5', loading && 'animate-spin') }), "Refresh"] }) }), _jsx(Input, { placeholder: "Filter by action, path, status, collection\u2026", value: filter, onChange: (e) => setFilter(e.target.value), className: "max-w-md" }), error && _jsx(ErrorAlert, { error: error, title: "Failed to load audit log", onRetry: load }), !loading && !error && filtered.length === 0 && (_jsx(EmptyState, { icon: _jsx(ScrollText, { className: "h-10 w-10" }), title: "No events", description: q ? 'No events match your filter.' : 'No audit events recorded yet.' })), filtered.length > 0 && (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { className: "w-[160px]", children: "Time" }), _jsx(TableHead, { className: "w-[60px]", children: "Method" }), _jsx(TableHead, { children: "Path" }), _jsx(TableHead, { className: "w-[80px]", children: "Status" }), _jsx(TableHead, { className: "w-[70px] text-right", children: "ms" })] }) }), _jsx(TableBody, { children: filtered.map((ev) => (_jsxs(_Fragment, { children: [_jsxs(TableRow, { className: cn('cursor-pointer hover:bg-muted/50', expanded === ev.requestId && 'bg-muted/40'), onClick: () => setExpanded((prev) => (prev === ev.requestId ? null : ev.requestId)), children: [_jsx(TableCell, { className: "font-mono text-xs text-muted-foreground whitespace-nowrap", children: formatTs(ev.timestamp) }), _jsx(TableCell, { children: _jsx(MethodBadge, { method: ev.method }) }), _jsxs(TableCell, { className: "font-mono text-xs max-w-[320px] truncate", children: [_jsx("span", { className: "text-muted-foreground", children: ev.path }), ev.error && (_jsx("span", { className: "ml-2 text-destructive text-xs", children: ev.error.message }))] }), _jsx(TableCell, { children: _jsx(StatusBadge, { code: ev.statusCode }) }), _jsx(TableCell, { className: "text-right font-mono text-xs text-muted-foreground", children: ev.durationMs })] }, ev.requestId), expanded === ev.requestId && (_jsx(TableRow, { className: "bg-muted/20 hover:bg-muted/20", children: _jsx(TableCell, { colSpan: 5, className: "p-0", children: _jsx("div", { className: "px-4 py-3 font-mono text-xs space-y-1.5", children: _jsxs("div", { className: "grid grid-cols-[120px_1fr] gap-x-4 gap-y-1", children: [_jsx("span", { className: "text-muted-foreground", children: "requestId" }), _jsx("span", { children: ev.requestId }), _jsx("span", { className: "text-muted-foreground", children: "action" }), _jsx("span", { children: ev.action }), ev.collection && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "collection" }), _jsx("span", { children: ev.collection })] })), ev.slug && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "slug" }), _jsx("span", { children: ev.slug })] })), ev.actor && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "actor" }), _jsx("span", { className: "truncate max-w-[300px]", children: ev.actor })] })), ev.error && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "error" }), _jsxs("span", { className: "text-destructive", children: [ev.error.code ? `[${ev.error.code}] ` : '', ev.error.message] })] })), ev.response && Object.keys(ev.response).length > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "response" }), _jsx("span", { className: "text-muted-foreground break-all", children: JSON.stringify(ev.response) })] }))] }) }) }) }, `${ev.requestId}-detail`))] }))) })] }))] }));
94
+ }
95
+ //# sourceMappingURL=AuditLogViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogViewer.js","sourceRoot":"","sources":["../src/AuditLogViewer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ContentManagerProps {
2
+ collection: string;
3
+ /** Override display name. Falls back to capitalised collection key. */
4
+ label?: string;
5
+ /**
6
+ * Called when the user clicks Edit on an entry.
7
+ * Default: navigates to `./{slug}` (Next.js `router.push`).
8
+ */
9
+ onEdit?: (slug: string) => void;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * Tier 3 — drop-in collection manager.
14
+ *
15
+ * Lists all entries in a collection with create and delete actions.
16
+ *
17
+ * ```tsx
18
+ * import { CollectionManager } from '@airdraft/react-ui'
19
+ *
20
+ * export default function Page({ params }: { params: { collection: string } }) {
21
+ * return <CollectionManager collection={params.collection} />
22
+ * }
23
+ * ```
24
+ */
25
+ export declare function ContentManager({ collection, label, onEdit, className }: ContentManagerProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=CollectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionManager.d.ts","sourceRoot":"","sources":["../src/CollectionManager.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAqH3F"}
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback } from 'react';
4
+ import { useEntries, useMutateEntry, useAirdraftClient } 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
+ import { Table, TableBody, TableHead, TableHeader, TableRow, } from './ui/table.js';
9
+ import { PageHeader } from './components/PageHeader.js';
10
+ import { EmptyState } from './components/EmptyState.js';
11
+ import { EntryRow } from './components/EntryRow.js';
12
+ import { FileText, Plus, X } from 'lucide-react';
13
+ import { cn } from './lib/utils.js';
14
+ // ---------------------------------------------------------------------------
15
+ // New-entry inline form
16
+ // ---------------------------------------------------------------------------
17
+ function NewEntryForm({ onDone, onCreate, creating, }) {
18
+ const [title, setTitle] = useState('');
19
+ const [error, setError] = useState(null);
20
+ async function handleSubmit(e) {
21
+ e.preventDefault();
22
+ if (!title.trim()) {
23
+ setError('Title is required');
24
+ return;
25
+ }
26
+ try {
27
+ await onCreate({ title: title.trim() });
28
+ onDone();
29
+ }
30
+ catch (err) {
31
+ setError(err instanceof Error ? err.message : 'Failed to create entry.');
32
+ }
33
+ }
34
+ 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: "Title" }), _jsx(Input, { id: "new-entry-title", value: title, onChange: (e) => { setTitle(e.target.value); setError(null); }, placeholder: "New entry title", className: "h-8 text-sm", autoFocus: true }), error && _jsx("p", { className: "text-xs text-destructive", children: error })] }), _jsx(Button, { type: "submit", size: "sm", disabled: creating, children: 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" }) })] }));
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // CollectionManager
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Tier 3 — drop-in collection manager.
41
+ *
42
+ * Lists all entries in a collection with create and delete actions.
43
+ *
44
+ * ```tsx
45
+ * import { CollectionManager } from '@airdraft/react-ui'
46
+ *
47
+ * export default function Page({ params }: { params: { collection: string } }) {
48
+ * return <CollectionManager collection={params.collection} />
49
+ * }
50
+ * ```
51
+ */
52
+ export function ContentManager({ collection, label, onEdit, className }) {
53
+ const client = useAirdraftClient();
54
+ const { entries, loading, error, refresh } = useEntries(collection);
55
+ const { createEntry, deleteEntry, creating, deleting } = useMutateEntry(collection);
56
+ const [showNew, setShowNew] = useState(false);
57
+ const [deletingSlug, setDeletingSlug] = useState(null);
58
+ const displayLabel = label ?? collection.charAt(0).toUpperCase() + collection.slice(1);
59
+ // Detect publish-enabled collection via schema
60
+ const [hasPublish, setHasPublish] = useState(false);
61
+ const [titleField, setTitleField] = useState('title');
62
+ useState(() => {
63
+ client.getSchema().then((schema) => {
64
+ const col = schema.collections[collection];
65
+ if (col) {
66
+ setHasPublish(Boolean(col.publish));
67
+ if (col.slugSource)
68
+ setTitleField(col.slugSource);
69
+ }
70
+ }).catch(() => undefined);
71
+ });
72
+ const handleDelete = useCallback(async (entry) => {
73
+ const sha = entry.meta?.sha;
74
+ if (!sha)
75
+ return;
76
+ setDeletingSlug(entry.slug);
77
+ try {
78
+ await deleteEntry(entry.slug, sha);
79
+ refresh();
80
+ }
81
+ finally {
82
+ setDeletingSlug(null);
83
+ }
84
+ }, [deleteEntry, refresh]);
85
+ const handleEdit = useCallback((entry) => {
86
+ if (onEdit) {
87
+ onEdit(entry.slug);
88
+ }
89
+ else {
90
+ window.location.href = `./${collection}/${entry.slug}`;
91
+ }
92
+ }, [onEdit, collection]);
93
+ const handleCreate = useCallback(async (data) => {
94
+ const entry = await createEntry(data);
95
+ refresh();
96
+ return entry;
97
+ }, [createEntry, refresh]);
98
+ 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 })), loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Loading\u2026" })) : error ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm text-destructive", children: error.message }), _jsx(Button, { variant: "outline", size: "sm", onClick: refresh, children: "Retry" })] })) : 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))) })] }))] }));
99
+ }
100
+ //# sourceMappingURL=CollectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionManager.js","sourceRoot":"","sources":["../src/CollectionManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { CollectionConfig } from '@airdraft/core';
2
+ export interface CollectionsIndexProps {
3
+ /**
4
+ * Called when the user clicks a collection card.
5
+ * Default: navigates to `./collections/{name}`.
6
+ */
7
+ onSelect?: (name: string, config: CollectionConfig) => void;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Tier 3 — collections index / landing page.
12
+ *
13
+ * Lists all collections from the schema as cards. Clicking one navigates to
14
+ * its content manager (via `onSelect` or the default `./collections/{name}` route).
15
+ *
16
+ * ```tsx
17
+ * import { CollectionsIndex } from '@airdraft/react-ui'
18
+ *
19
+ * export default function CmsPage() {
20
+ * return <CollectionsIndex />
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function CollectionsIndex({ onSelect, className }: CollectionsIndexProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=CollectionsIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionsIndex.d.ts","sourceRoot":"","sources":["../src/CollectionsIndex.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAStD,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA8CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAqD9E"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback } from 'react';
4
+ import { useSchemaEditor } from '@airdraft/react';
5
+ import { Button } from './ui/button.js';
6
+ import { PageHeader } from './components/PageHeader.js';
7
+ import { EmptyState } from './components/EmptyState.js';
8
+ import { ErrorAlert } from './components/ErrorAlert.js';
9
+ import { FileText, ChevronRight, Hash, LayoutList } from 'lucide-react';
10
+ import { cn } from './lib/utils.js';
11
+ function CollectionCard({ name, config, onClick, }) {
12
+ const fieldCount = Object.keys(config.fields).length;
13
+ return (_jsxs(Button, { onClick: onClick, className: "w-full text-left flex items-center gap-4 border bg-card h-auto p-3 hover:bg-accent/50 transition-colors group", children: [_jsx("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-muted", children: _jsx(LayoutList, { className: "h-4 w-4 text-muted-foreground" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: "font-medium text-sm truncate", children: config.label ?? name.charAt(0).toUpperCase() + name.slice(1) }), _jsxs("p", { className: "text-xs text-muted-foreground flex truncate text-ellipsis items-center gap-2 mt-0.5", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Hash, { className: "h-3 w-3" }), name] }), _jsx("span", { children: "\u00B7" }), _jsxs("span", { children: [fieldCount, " field", fieldCount === 1 ? '' : 's'] }), _jsx("span", { children: "\u00B7" }), _jsx("span", { className: "font-mono", children: config.format }), config.publish && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u00B7" }), _jsx("span", { className: "text-emerald-600 truncate", children: "publish enabled" })] }))] })] }), _jsx(ChevronRight, { className: "h-4 w-4 text-muted-foreground shrink-0 group-hover:translate-x-0.5 transition-transform" })] }));
14
+ }
15
+ /**
16
+ * Tier 3 — collections index / landing page.
17
+ *
18
+ * Lists all collections from the schema as cards. Clicking one navigates to
19
+ * its content manager (via `onSelect` or the default `./collections/{name}` route).
20
+ *
21
+ * ```tsx
22
+ * import { CollectionsIndex } from '@airdraft/react-ui'
23
+ *
24
+ * export default function CmsPage() {
25
+ * return <CollectionsIndex />
26
+ * }
27
+ * ```
28
+ */
29
+ export function CollectionsIndex({ onSelect, className }) {
30
+ const { collections, loading, error, refresh } = useSchemaEditor();
31
+ const handleSelect = useCallback((name, config) => {
32
+ if (onSelect) {
33
+ onSelect(name, config);
34
+ }
35
+ else {
36
+ window.location.href = `./collections/${name}`;
37
+ }
38
+ }, [onSelect]);
39
+ const entries = collections ? Object.entries(collections) : [];
40
+ return (_jsxs("div", { className: cn('space-y-4', className), children: [_jsx(PageHeader, { title: "Content", description: loading ? 'Loading…' : `${entries.length} collection${entries.length === 1 ? '' : 's'}` }), loading ? (_jsx("div", { className: "space-y-2", children: [1, 2, 3].map((i) => (_jsx("div", { className: "h-16 rounded-lg border bg-muted/30 animate-pulse" }, i))) })) : error ? (_jsx(ErrorAlert, { error: error, title: "Failed to load entries", onRetry: refresh, className: "mt-2" })) : entries.length === 0 ? (_jsx(EmptyState, { icon: _jsx(FileText, { className: "h-10 w-10" }), title: "No collections", description: "Define collections in your airdraft config or use the Schema editor to create them." })) : (_jsx("div", { className: "space-y-2", children: entries.map(([name, config]) => (_jsx(CollectionCard, { name: name, config: config, onClick: () => handleSelect(name, config) }, name))) }))] }));
41
+ }
42
+ //# sourceMappingURL=CollectionsIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionsIndex.js","sourceRoot":"","sources":["../src/CollectionsIndex.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ContentManagerProps {
2
+ collection: string;
3
+ /** Override display name. Falls back to capitalised collection key. */
4
+ label?: string;
5
+ /**
6
+ * Called when the user clicks Edit on an entry.
7
+ * Default: navigates to `./{slug}` (Next.js `router.push`).
8
+ */
9
+ onEdit?: (slug: string) => void;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * Tier 3 — drop-in content manager for a single collection.
14
+ *
15
+ * Lists entries in the given collection with create and delete actions.
16
+ *
17
+ * ```tsx
18
+ * import { ContentManager } from '@airdraft/react-ui'
19
+ *
20
+ * export default function Page({ params }: { params: { collection: string } }) {
21
+ * return <ContentManager collection={params.collection} />
22
+ * }
23
+ * ```
24
+ */
25
+ export declare function ContentManager({ collection, label, onEdit, className }: ContentManagerProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=ContentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentManager.d.ts","sourceRoot":"","sources":["../src/ContentManager.tsx"],"names":[],"mappings":"AAwBA,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA6DD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CA4H3F"}