kempo 4.2.4 → 4.2.5

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 (861) hide show
  1. package/LICENSE.md +60 -0
  2. package/README.md +427 -0
  3. package/app-drizzle.config.js +14 -0
  4. package/app-public/.config.json +25 -0
  5. package/app-public/account/index.page.html +110 -0
  6. package/app-public/account/split2.template.html +36 -0
  7. package/app-public/default.template.html +24 -0
  8. package/app-public/forgot-password/index.page.html +79 -0
  9. package/app-public/index.page.html +16 -0
  10. package/app-public/init.js +2 -0
  11. package/app-public/kempo-global.global-disabled.html +0 -0
  12. package/app-public/kempo-global.global.html +6 -0
  13. package/app-public/login/index.page.html +51 -0
  14. package/app-public/manifest.json +87 -0
  15. package/app-public/media/hexagon.svg +22 -0
  16. package/app-public/media/icon-maskable.png +0 -0
  17. package/app-public/media/icon.svg +1 -0
  18. package/app-public/media/icon128.png +0 -0
  19. package/app-public/media/icon144.png +0 -0
  20. package/app-public/media/icon152.png +0 -0
  21. package/app-public/media/icon16-48.svg +19 -0
  22. package/app-public/media/icon16.png +0 -0
  23. package/app-public/media/icon192.png +0 -0
  24. package/app-public/media/icon256.png +0 -0
  25. package/app-public/media/icon32.png +0 -0
  26. package/app-public/media/icon384.png +0 -0
  27. package/app-public/media/icon48.png +0 -0
  28. package/app-public/media/icon512.png +0 -0
  29. package/app-public/media/icon64.png +0 -0
  30. package/app-public/media/icon72.png +0 -0
  31. package/app-public/media/icon96.png +0 -0
  32. package/app-public/media/kempo-fist.svg +21 -0
  33. package/app-public/media/nsx.jpg +0 -0
  34. package/app-public/nav.fragment.html +41 -0
  35. package/app-public/new-page.page.html +17 -0
  36. package/app-public/register/index.page.html +60 -0
  37. package/app-public/reset-password/[token]/index.html +123 -0
  38. package/app-public/reset-password/[token]/index.page.html +75 -0
  39. package/app-public/styles.css +1 -0
  40. package/app-public/test.page.html +20 -0
  41. package/app-public/verify-email/[token]/index.html +107 -0
  42. package/app-public/verify-email/[token]/index.page.html +59 -0
  43. package/app-public/verify-email/index.page.html +21 -0
  44. package/app-server/db/schema.js +19 -0
  45. package/bin/cli.js +461 -0
  46. package/dist/admin/accounts/groups/[name]/index.page.html +286 -0
  47. package/dist/admin/accounts/groups/index.page.html +171 -0
  48. package/dist/admin/accounts/permissions/index.page.html +193 -0
  49. package/dist/admin/accounts/users/[id]/index.page.html +314 -0
  50. package/dist/admin/accounts/users/index.page.html +160 -0
  51. package/dist/admin/components/AddGroupControl.js +6 -0
  52. package/dist/admin/components/AddGroupControl.js.map +1 -0
  53. package/dist/admin/components/ClearExpiredSessionsControl.js +6 -0
  54. package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -0
  55. package/dist/admin/components/FragmentEditor.js +101 -0
  56. package/dist/admin/components/FragmentEditor.js.map +1 -0
  57. package/dist/admin/components/GlobalContentEditor.js +85 -0
  58. package/dist/admin/components/GlobalContentEditor.js.map +1 -0
  59. package/dist/admin/components/GroupDeleteSelected.js +6 -0
  60. package/dist/admin/components/GroupDeleteSelected.js.map +1 -0
  61. package/dist/admin/components/GroupRemoveRecord.js +6 -0
  62. package/dist/admin/components/GroupRemoveRecord.js.map +1 -0
  63. package/dist/admin/components/Monaco.js +2 -0
  64. package/dist/admin/components/Monaco.js.map +1 -0
  65. package/dist/admin/components/PageEditor.js +138 -0
  66. package/dist/admin/components/PageEditor.js.map +1 -0
  67. package/dist/admin/components/TableRowDelete.js +4 -0
  68. package/dist/admin/components/TableRowDelete.js.map +1 -0
  69. package/dist/admin/components/TableRowLink.js +8 -0
  70. package/dist/admin/components/TableRowLink.js.map +1 -0
  71. package/dist/admin/components/TemplateEditor.js +125 -0
  72. package/dist/admin/components/TemplateEditor.js.map +1 -0
  73. package/dist/admin/components/ValueEditor.js +40 -0
  74. package/dist/admin/components/ValueEditor.js.map +1 -0
  75. package/dist/admin/components/tableControls/AddMember.js +6 -0
  76. package/dist/admin/components/tableControls/AddMember.js.map +1 -0
  77. package/dist/admin/components/tableControls/AddPermission.js +6 -0
  78. package/dist/admin/components/tableControls/AddPermission.js.map +1 -0
  79. package/dist/admin/components/tableControls/InstallExtension.js +6 -0
  80. package/dist/admin/components/tableControls/InstallExtension.js.map +1 -0
  81. package/dist/admin/components/tableControls/UninstallExtension.js +6 -0
  82. package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -0
  83. package/dist/admin/content/fragments/edit/index.page.html +4 -0
  84. package/dist/admin/content/fragments/index.page.html +169 -0
  85. package/dist/admin/content/globals/edit/index.page.html +4 -0
  86. package/dist/admin/content/globals/index.page.html +152 -0
  87. package/dist/admin/content/pages/edit/index.page.html +4 -0
  88. package/dist/admin/content/pages/index.page.html +218 -0
  89. package/dist/admin/content/templates/edit/index.page.html +4 -0
  90. package/dist/admin/content/templates/index.page.html +193 -0
  91. package/dist/admin/default.template.html +9 -0
  92. package/dist/admin/extensions/index.page.html +32 -0
  93. package/dist/admin/icons/article.svg +1 -0
  94. package/dist/admin/icons/browse.svg +1 -0
  95. package/dist/admin/icons/cards_stack.svg +1 -0
  96. package/dist/admin/icons/content.svg +1 -0
  97. package/dist/admin/icons/docs.svg +1 -0
  98. package/dist/admin/icons/drive_file_move.svg +1 -0
  99. package/dist/admin/icons/extension.svg +1 -0
  100. package/dist/admin/icons/globe.svg +1 -0
  101. package/dist/admin/icons/group.svg +1 -0
  102. package/dist/admin/icons/lock.svg +1 -0
  103. package/dist/admin/icons/lock_add.svg +1 -0
  104. package/dist/admin/icons/manage-accounts.svg +1 -0
  105. package/dist/admin/icons/person.svg +1 -0
  106. package/dist/admin/icons/person_add.svg +1 -0
  107. package/dist/admin/icons/preview.svg +1 -0
  108. package/dist/admin/icons/save.svg +1 -0
  109. package/dist/admin/icons/segment.svg +1 -0
  110. package/dist/admin/icons/timer_off.svg +1 -0
  111. package/dist/admin/icons/web.svg +1 -0
  112. package/dist/admin/index.page.html +4 -0
  113. package/dist/admin/init.js +2 -0
  114. package/dist/admin/init.js.map +1 -0
  115. package/dist/admin/known-extensions.json +1 -0
  116. package/dist/admin/nav.fragment.html +20 -0
  117. package/dist/admin/settings/[owner]/[name]/index.page.html +260 -0
  118. package/dist/admin/settings/index.page.html +203 -0
  119. package/dist/kempo/api/admin-globals/DELETE.js +2 -0
  120. package/dist/kempo/api/admin-globals/DELETE.js.map +1 -0
  121. package/dist/kempo/api/admin-globals/GET.js +2 -0
  122. package/dist/kempo/api/admin-globals/GET.js.map +1 -0
  123. package/dist/kempo/api/admin-globals/POST.js +2 -0
  124. package/dist/kempo/api/admin-globals/POST.js.map +1 -0
  125. package/dist/kempo/api/admin-globals/[id]/GET.js +2 -0
  126. package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -0
  127. package/dist/kempo/api/admin-globals/[id]/PUT.js +2 -0
  128. package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -0
  129. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +2 -0
  130. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -0
  131. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +2 -0
  132. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -0
  133. package/dist/kempo/api/auth/change-password/POST.js +2 -0
  134. package/dist/kempo/api/auth/change-password/POST.js.map +1 -0
  135. package/dist/kempo/api/auth/login/email/POST.js +2 -0
  136. package/dist/kempo/api/auth/login/email/POST.js.map +1 -0
  137. package/dist/kempo/api/auth/logout/POST.js +2 -0
  138. package/dist/kempo/api/auth/logout/POST.js.map +1 -0
  139. package/dist/kempo/api/auth/register/email/POST.js +2 -0
  140. package/dist/kempo/api/auth/register/email/POST.js.map +1 -0
  141. package/dist/kempo/api/auth/reset-password/POST.js +2 -0
  142. package/dist/kempo/api/auth/reset-password/POST.js.map +1 -0
  143. package/dist/kempo/api/auth/session/GET.js +2 -0
  144. package/dist/kempo/api/auth/session/GET.js.map +1 -0
  145. package/dist/kempo/api/auth/verify-email/POST.js +2 -0
  146. package/dist/kempo/api/auth/verify-email/POST.js.map +1 -0
  147. package/dist/kempo/api/extensions/DELETE.js +2 -0
  148. package/dist/kempo/api/extensions/DELETE.js.map +1 -0
  149. package/dist/kempo/api/extensions/GET.js +2 -0
  150. package/dist/kempo/api/extensions/GET.js.map +1 -0
  151. package/dist/kempo/api/extensions/POST.js +2 -0
  152. package/dist/kempo/api/extensions/POST.js.map +1 -0
  153. package/dist/kempo/api/extensions/[name]/disable/POST.js +2 -0
  154. package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -0
  155. package/dist/kempo/api/extensions/[name]/enable/POST.js +2 -0
  156. package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -0
  157. package/dist/kempo/api/extensions/[name]/update/POST.js +2 -0
  158. package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -0
  159. package/dist/kempo/api/extensions/[name]/update-check/GET.js +2 -0
  160. package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -0
  161. package/dist/kempo/api/extensions/available/GET.js +2 -0
  162. package/dist/kempo/api/extensions/available/GET.js.map +1 -0
  163. package/dist/kempo/api/extensions/known/GET.js +2 -0
  164. package/dist/kempo/api/extensions/known/GET.js.map +1 -0
  165. package/dist/kempo/api/forgot-password/POST.js +2 -0
  166. package/dist/kempo/api/forgot-password/POST.js.map +1 -0
  167. package/dist/kempo/api/fragments/DELETE.js +2 -0
  168. package/dist/kempo/api/fragments/DELETE.js.map +1 -0
  169. package/dist/kempo/api/fragments/GET.js +2 -0
  170. package/dist/kempo/api/fragments/GET.js.map +1 -0
  171. package/dist/kempo/api/fragments/POST.js +2 -0
  172. package/dist/kempo/api/fragments/POST.js.map +1 -0
  173. package/dist/kempo/api/fragments/disable/PUT.js +2 -0
  174. package/dist/kempo/api/fragments/disable/PUT.js.map +1 -0
  175. package/dist/kempo/api/fragments/enable/PUT.js +2 -0
  176. package/dist/kempo/api/fragments/enable/PUT.js.map +1 -0
  177. package/dist/kempo/api/fragments/file/GET.js +2 -0
  178. package/dist/kempo/api/fragments/file/GET.js.map +1 -0
  179. package/dist/kempo/api/fragments/file/PATCH.js +2 -0
  180. package/dist/kempo/api/fragments/file/PATCH.js.map +1 -0
  181. package/dist/kempo/api/fragments/file/PUT.js +2 -0
  182. package/dist/kempo/api/fragments/file/PUT.js.map +1 -0
  183. package/dist/kempo/api/globals/DELETE.js +2 -0
  184. package/dist/kempo/api/globals/DELETE.js.map +1 -0
  185. package/dist/kempo/api/globals/GET.js +2 -0
  186. package/dist/kempo/api/globals/GET.js.map +1 -0
  187. package/dist/kempo/api/globals/POST.js +2 -0
  188. package/dist/kempo/api/globals/POST.js.map +1 -0
  189. package/dist/kempo/api/globals/disable/PUT.js +2 -0
  190. package/dist/kempo/api/globals/disable/PUT.js.map +1 -0
  191. package/dist/kempo/api/globals/enable/PUT.js +2 -0
  192. package/dist/kempo/api/globals/enable/PUT.js.map +1 -0
  193. package/dist/kempo/api/globals/entry/GET.js +2 -0
  194. package/dist/kempo/api/globals/entry/GET.js.map +1 -0
  195. package/dist/kempo/api/globals/entry/PUT.js +2 -0
  196. package/dist/kempo/api/globals/entry/PUT.js.map +1 -0
  197. package/dist/kempo/api/groups/DELETE.js +2 -0
  198. package/dist/kempo/api/groups/DELETE.js.map +1 -0
  199. package/dist/kempo/api/groups/GET.js +2 -0
  200. package/dist/kempo/api/groups/GET.js.map +1 -0
  201. package/dist/kempo/api/groups/PATCH.js +2 -0
  202. package/dist/kempo/api/groups/PATCH.js.map +1 -0
  203. package/dist/kempo/api/groups/POST.js +2 -0
  204. package/dist/kempo/api/groups/POST.js.map +1 -0
  205. package/dist/kempo/api/groups/[name]/GET.js +2 -0
  206. package/dist/kempo/api/groups/[name]/GET.js.map +1 -0
  207. package/dist/kempo/api/groups/[name]/members/DELETE.js +2 -0
  208. package/dist/kempo/api/groups/[name]/members/DELETE.js.map +1 -0
  209. package/dist/kempo/api/groups/[name]/members/GET.js +2 -0
  210. package/dist/kempo/api/groups/[name]/members/GET.js.map +1 -0
  211. package/dist/kempo/api/groups/[name]/members/POST.js +2 -0
  212. package/dist/kempo/api/groups/[name]/members/POST.js.map +1 -0
  213. package/dist/kempo/api/groups/[name]/permissions/DELETE.js +2 -0
  214. package/dist/kempo/api/groups/[name]/permissions/DELETE.js.map +1 -0
  215. package/dist/kempo/api/groups/[name]/permissions/GET.js +2 -0
  216. package/dist/kempo/api/groups/[name]/permissions/GET.js.map +1 -0
  217. package/dist/kempo/api/groups/[name]/permissions/POST.js +2 -0
  218. package/dist/kempo/api/groups/[name]/permissions/POST.js.map +1 -0
  219. package/dist/kempo/api/pages/DELETE.js +2 -0
  220. package/dist/kempo/api/pages/DELETE.js.map +1 -0
  221. package/dist/kempo/api/pages/GET.js +2 -0
  222. package/dist/kempo/api/pages/GET.js.map +1 -0
  223. package/dist/kempo/api/pages/POST.js +2 -0
  224. package/dist/kempo/api/pages/POST.js.map +1 -0
  225. package/dist/kempo/api/pages/directories/GET.js +2 -0
  226. package/dist/kempo/api/pages/directories/GET.js.map +1 -0
  227. package/dist/kempo/api/pages/disable/PUT.js +2 -0
  228. package/dist/kempo/api/pages/disable/PUT.js.map +1 -0
  229. package/dist/kempo/api/pages/enable/PUT.js +2 -0
  230. package/dist/kempo/api/pages/enable/PUT.js.map +1 -0
  231. package/dist/kempo/api/pages/file/GET.js +2 -0
  232. package/dist/kempo/api/pages/file/GET.js.map +1 -0
  233. package/dist/kempo/api/pages/file/PATCH.js +2 -0
  234. package/dist/kempo/api/pages/file/PATCH.js.map +1 -0
  235. package/dist/kempo/api/pages/file/PUT.js +2 -0
  236. package/dist/kempo/api/pages/file/PUT.js.map +1 -0
  237. package/dist/kempo/api/pages/templates/GET.js +2 -0
  238. package/dist/kempo/api/pages/templates/GET.js.map +1 -0
  239. package/dist/kempo/api/permissions/DELETE.js +2 -0
  240. package/dist/kempo/api/permissions/DELETE.js.map +1 -0
  241. package/dist/kempo/api/permissions/GET.js +2 -0
  242. package/dist/kempo/api/permissions/GET.js.map +1 -0
  243. package/dist/kempo/api/permissions/PATCH.js +2 -0
  244. package/dist/kempo/api/permissions/PATCH.js.map +1 -0
  245. package/dist/kempo/api/permissions/POST.js +2 -0
  246. package/dist/kempo/api/permissions/POST.js.map +1 -0
  247. package/dist/kempo/api/settings/[owner]/GET.js +2 -0
  248. package/dist/kempo/api/settings/[owner]/GET.js.map +1 -0
  249. package/dist/kempo/api/settings/[owner]/[name]/DELETE.js +2 -0
  250. package/dist/kempo/api/settings/[owner]/[name]/DELETE.js.map +1 -0
  251. package/dist/kempo/api/settings/[owner]/[name]/GET.js +2 -0
  252. package/dist/kempo/api/settings/[owner]/[name]/GET.js.map +1 -0
  253. package/dist/kempo/api/settings/[owner]/[name]/POST.js +2 -0
  254. package/dist/kempo/api/settings/[owner]/[name]/POST.js.map +1 -0
  255. package/dist/kempo/api/settings/public/GET.js +2 -0
  256. package/dist/kempo/api/settings/public/GET.js.map +1 -0
  257. package/dist/kempo/api/templates/DELETE.js +2 -0
  258. package/dist/kempo/api/templates/DELETE.js.map +1 -0
  259. package/dist/kempo/api/templates/GET.js +2 -0
  260. package/dist/kempo/api/templates/GET.js.map +1 -0
  261. package/dist/kempo/api/templates/POST.js +2 -0
  262. package/dist/kempo/api/templates/POST.js.map +1 -0
  263. package/dist/kempo/api/templates/disable/PUT.js +2 -0
  264. package/dist/kempo/api/templates/disable/PUT.js.map +1 -0
  265. package/dist/kempo/api/templates/enable/PUT.js +2 -0
  266. package/dist/kempo/api/templates/enable/PUT.js.map +1 -0
  267. package/dist/kempo/api/templates/file/GET.js +2 -0
  268. package/dist/kempo/api/templates/file/GET.js.map +1 -0
  269. package/dist/kempo/api/templates/file/PATCH.js +2 -0
  270. package/dist/kempo/api/templates/file/PATCH.js.map +1 -0
  271. package/dist/kempo/api/templates/file/PUT.js +2 -0
  272. package/dist/kempo/api/templates/file/PUT.js.map +1 -0
  273. package/dist/kempo/api/user/DELETE.js +2 -0
  274. package/dist/kempo/api/user/DELETE.js.map +1 -0
  275. package/dist/kempo/api/user/GET.js +2 -0
  276. package/dist/kempo/api/user/GET.js.map +1 -0
  277. package/dist/kempo/api/user/PATCH.js +2 -0
  278. package/dist/kempo/api/user/PATCH.js.map +1 -0
  279. package/dist/kempo/api/user/[userid]/GET.js +2 -0
  280. package/dist/kempo/api/user/[userid]/GET.js.map +1 -0
  281. package/dist/kempo/api/user/[userid]/groups/DELETE.js +2 -0
  282. package/dist/kempo/api/user/[userid]/groups/DELETE.js.map +1 -0
  283. package/dist/kempo/api/user/[userid]/groups/GET.js +2 -0
  284. package/dist/kempo/api/user/[userid]/groups/GET.js.map +1 -0
  285. package/dist/kempo/api/user/[userid]/groups/POST.js +2 -0
  286. package/dist/kempo/api/user/[userid]/groups/POST.js.map +1 -0
  287. package/dist/kempo/api/user/[userid]/permissions/GET.js +2 -0
  288. package/dist/kempo/api/user/[userid]/permissions/GET.js.map +1 -0
  289. package/dist/kempo/api/user/[userid]/permissions/all/GET.js +2 -0
  290. package/dist/kempo/api/user/[userid]/permissions/all/GET.js.map +1 -0
  291. package/dist/kempo/api/user/[userid]/permissions/list/GET.js +2 -0
  292. package/dist/kempo/api/user/[userid]/permissions/list/GET.js.map +1 -0
  293. package/dist/kempo/api/user/[userid]/permissions/some/GET.js +2 -0
  294. package/dist/kempo/api/user/[userid]/permissions/some/GET.js.map +1 -0
  295. package/dist/kempo/api/user/[userid]/sessions/DELETE.js +2 -0
  296. package/dist/kempo/api/user/[userid]/sessions/DELETE.js.map +1 -0
  297. package/dist/kempo/api/user/[userid]/sessions/GET.js +2 -0
  298. package/dist/kempo/api/user/[userid]/sessions/GET.js.map +1 -0
  299. package/dist/kempo/api/user/[userid]/sessions/expired/DELETE.js +2 -0
  300. package/dist/kempo/api/user/[userid]/sessions/expired/DELETE.js.map +1 -0
  301. package/dist/kempo/api/user/create/POST.js +2 -0
  302. package/dist/kempo/api/user/create/POST.js.map +1 -0
  303. package/dist/kempo/api/user/search/GET.js +2 -0
  304. package/dist/kempo/api/user/search/GET.js.map +1 -0
  305. package/dist/kempo/components/LogoutBtn.js +2 -0
  306. package/dist/kempo/components/LogoutBtn.js.map +1 -0
  307. package/dist/kempo/components/Menu.js +17 -0
  308. package/dist/kempo/components/Menu.js.map +1 -0
  309. package/dist/kempo/components/Permission.js +2 -0
  310. package/dist/kempo/components/Permission.js.map +1 -0
  311. package/dist/kempo/components/Role.js +2 -0
  312. package/dist/kempo/components/Role.js.map +1 -0
  313. package/dist/kempo/components/UserCreatedAt.js +2 -0
  314. package/dist/kempo/components/UserCreatedAt.js.map +1 -0
  315. package/dist/kempo/components/UserEmail.js +2 -0
  316. package/dist/kempo/components/UserEmail.js.map +1 -0
  317. package/dist/kempo/components/UserEmailVerified.js +2 -0
  318. package/dist/kempo/components/UserEmailVerified.js.map +1 -0
  319. package/dist/kempo/components/UserName.js +2 -0
  320. package/dist/kempo/components/UserName.js.map +1 -0
  321. package/dist/kempo/fetch.js +2 -0
  322. package/dist/kempo/fetch.js.map +1 -0
  323. package/dist/kempo/icons/format_indent_decrease.svg +1 -0
  324. package/dist/kempo/icons/format_indent_increase.svg +1 -0
  325. package/dist/kempo/icons/format_quote.svg +1 -0
  326. package/dist/kempo/icons/redo.svg +1 -0
  327. package/dist/kempo/icons/restart_alt.svg +1 -0
  328. package/dist/kempo/icons/subscript.svg +1 -0
  329. package/dist/kempo/icons/superscript.svg +1 -0
  330. package/dist/kempo/icons/undo.svg +1 -0
  331. package/dist/kempo/sdk.js +2 -0
  332. package/dist/kempo/sdk.js.map +1 -0
  333. package/middleware/extension-scope-router.js +255 -0
  334. package/middleware/kempo-auth.js +26 -0
  335. package/package.json +46 -19
  336. package/scripts/init-db.js +211 -0
  337. package/server/db/index.js +24 -0
  338. package/server/db/migrations/0000_initial.sql +91 -0
  339. package/server/db/migrations/0001_soft_master_chief.sql +1 -0
  340. package/server/db/migrations/meta/0000_snapshot.json +588 -0
  341. package/server/db/migrations/meta/0001_snapshot.json +594 -0
  342. package/server/db/migrations/meta/_journal.json +20 -0
  343. package/server/db/schema.js +173 -0
  344. package/server/sdk.js +192 -0
  345. package/server/utils/admin-global-content/createAdminGlobalContent.js +43 -0
  346. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +34 -0
  347. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +26 -0
  348. package/server/utils/admin-global-content/disableAdminGlobalContent.js +33 -0
  349. package/server/utils/admin-global-content/enableAdminGlobalContent.js +33 -0
  350. package/server/utils/admin-global-content/getAdminGlobalContent.js +28 -0
  351. package/server/utils/admin-global-content/helpers.js +47 -0
  352. package/server/utils/admin-global-content/listAdminGlobalContent.js +20 -0
  353. package/server/utils/admin-global-content/updateAdminGlobalContent.js +41 -0
  354. package/server/utils/auth/changePassword.js +27 -0
  355. package/server/utils/auth/getSession.js +35 -0
  356. package/server/utils/auth/loginEmail.js +66 -0
  357. package/server/utils/auth/logout.js +16 -0
  358. package/server/utils/auth/registerEmail.js +105 -0
  359. package/server/utils/auth/requestPasswordReset.js +62 -0
  360. package/server/utils/auth/resetPassword.js +58 -0
  361. package/server/utils/auth/sendVerificationEmail.js +57 -0
  362. package/server/utils/auth/verifyEmail.js +46 -0
  363. package/server/utils/email/sendEmail.js +42 -0
  364. package/server/utils/email/sendEmailFromTemplate.js +45 -0
  365. package/server/utils/extensions/checkExtensionUpdate.js +56 -0
  366. package/server/utils/extensions/createTablesFromSchema.js +57 -0
  367. package/server/utils/extensions/disableExtension.js +26 -0
  368. package/server/utils/extensions/enableExtension.js +26 -0
  369. package/server/utils/extensions/getExtension.js +34 -0
  370. package/server/utils/extensions/installExtension.js +134 -0
  371. package/server/utils/extensions/listExtensions.js +36 -0
  372. package/server/utils/extensions/scopeCache.js +18 -0
  373. package/server/utils/extensions/uninstallExtension.js +88 -0
  374. package/server/utils/extensions/updateExtension.js +159 -0
  375. package/server/utils/fragments/createFragment.js +57 -0
  376. package/server/utils/fragments/deleteFragment.js +35 -0
  377. package/server/utils/fragments/disableFragment.js +37 -0
  378. package/server/utils/fragments/enableFragment.js +30 -0
  379. package/server/utils/fragments/getFragment.js +36 -0
  380. package/server/utils/fragments/listFragments.js +32 -0
  381. package/server/utils/fragments/moveFragment.js +54 -0
  382. package/server/utils/fragments/updateFragment.js +58 -0
  383. package/server/utils/fs/parseFrontmatter.js +13 -0
  384. package/server/utils/fs/scanDir.js +26 -0
  385. package/server/utils/global-content/createGlobalContent.js +58 -0
  386. package/server/utils/global-content/deleteGlobalContent.js +52 -0
  387. package/server/utils/global-content/disableGlobalContent.js +57 -0
  388. package/server/utils/global-content/enableGlobalContent.js +53 -0
  389. package/server/utils/global-content/getGlobalContent.js +28 -0
  390. package/server/utils/global-content/helpers.js +33 -0
  391. package/server/utils/global-content/listGlobalContent.js +24 -0
  392. package/server/utils/global-content/updateGlobalContent.js +56 -0
  393. package/server/utils/groups/addUserToGroup.js +46 -0
  394. package/server/utils/groups/createGroup.js +32 -0
  395. package/server/utils/groups/deleteGroup.js +29 -0
  396. package/server/utils/groups/getGroup.js +25 -0
  397. package/server/utils/groups/getGroupMembers.js +33 -0
  398. package/server/utils/groups/listGroups.js +21 -0
  399. package/server/utils/groups/removeUserFromGroup.js +31 -0
  400. package/server/utils/groups/updateGroup.js +54 -0
  401. package/server/utils/hooks/createHook.js +29 -0
  402. package/server/utils/hooks/deleteHook.js +19 -0
  403. package/server/utils/hooks/getHook.js +19 -0
  404. package/server/utils/hooks/listHooks.js +30 -0
  405. package/server/utils/hooks/triggerHook.js +61 -0
  406. package/server/utils/hooks/updateHook.js +27 -0
  407. package/server/utils/pages/createPage.js +60 -0
  408. package/server/utils/pages/deletePage.js +35 -0
  409. package/server/utils/pages/disablePage.js +37 -0
  410. package/server/utils/pages/enablePage.js +30 -0
  411. package/server/utils/pages/getPage.js +53 -0
  412. package/server/utils/pages/listDirectories.js +18 -0
  413. package/server/utils/pages/listPages.js +40 -0
  414. package/server/utils/pages/listTemplates.js +52 -0
  415. package/server/utils/pages/movePage.js +54 -0
  416. package/server/utils/pages/updatePage.js +74 -0
  417. package/server/utils/permissions/addPermissionToGroup.js +43 -0
  418. package/server/utils/permissions/createPermission.js +43 -0
  419. package/server/utils/permissions/currentUserHasAllPermissions.js +24 -0
  420. package/server/utils/permissions/currentUserHasPermission.js +24 -0
  421. package/server/utils/permissions/currentUserHasSomePermissions.js +24 -0
  422. package/server/utils/permissions/deletePermission.js +29 -0
  423. package/server/utils/permissions/getAllPermissions.js +21 -0
  424. package/server/utils/permissions/getPermissionsForGroups.js +26 -0
  425. package/server/utils/permissions/getUserGroups.js +31 -0
  426. package/server/utils/permissions/getUserPermission.js +30 -0
  427. package/server/utils/permissions/getUserPermissions.js +16 -0
  428. package/server/utils/permissions/removePermissionFromGroup.js +31 -0
  429. package/server/utils/permissions/updatePermission.js +33 -0
  430. package/server/utils/permissions/userHasAllPermissions.js +31 -0
  431. package/server/utils/permissions/userHasPermission.js +13 -0
  432. package/server/utils/permissions/userHasSomePermissions.js +31 -0
  433. package/server/utils/sessions/createSession.js +36 -0
  434. package/server/utils/sessions/deleteExpiredUserSessions.js +22 -0
  435. package/server/utils/sessions/deleteSession.js +16 -0
  436. package/server/utils/sessions/deleteUserSessions.js +16 -0
  437. package/server/utils/sessions/getSessionById.js +21 -0
  438. package/server/utils/sessions/getSessionByToken.js +21 -0
  439. package/server/utils/sessions/getSessions.js +19 -0
  440. package/server/utils/sessions/getUserSessions.js +30 -0
  441. package/server/utils/settings/deleteSetting.js +24 -0
  442. package/server/utils/settings/getPublicSettings.js +22 -0
  443. package/server/utils/settings/getSetting.js +25 -0
  444. package/server/utils/settings/getSettingWithMetadata.js +33 -0
  445. package/server/utils/settings/getSettingsByOwner.js +23 -0
  446. package/server/utils/settings/helpers.js +29 -0
  447. package/server/utils/settings/listSettings.js +25 -0
  448. package/server/utils/settings/setSetting.js +49 -0
  449. package/server/utils/templates/createTemplate.js +71 -0
  450. package/server/utils/templates/deleteTemplate.js +35 -0
  451. package/server/utils/templates/disableTemplate.js +37 -0
  452. package/server/utils/templates/enableTemplate.js +30 -0
  453. package/server/utils/templates/getTemplate.js +30 -0
  454. package/server/utils/templates/moveTemplate.js +54 -0
  455. package/server/utils/templates/updateTemplate.js +46 -0
  456. package/server/utils/users/createUser.js +60 -0
  457. package/server/utils/users/deleteUser.js +19 -0
  458. package/server/utils/users/findUsersByEmail.js +35 -0
  459. package/server/utils/users/findUsersByName.js +35 -0
  460. package/server/utils/users/getUserByEmail.js +26 -0
  461. package/server/utils/users/getUserById.js +27 -0
  462. package/server/utils/users/getUsers.js +26 -0
  463. package/server/utils/users/searchUsers.js +53 -0
  464. package/server/utils/users/updateUser.js +38 -0
  465. package/.gitattributes +0 -2
  466. package/LICENSE +0 -21
  467. package/dist/components/Accordion.js +0 -1
  468. package/dist/components/Card.js +0 -1
  469. package/dist/components/Collapsible.js +0 -1
  470. package/dist/components/Component.js +0 -1
  471. package/dist/components/ContentSlider.js +0 -1
  472. package/dist/components/Dialog.js +0 -1
  473. package/dist/components/DirectoryViewer.js +0 -1
  474. package/dist/components/FocusCapture.js +0 -1
  475. package/dist/components/Icon.js +0 -1
  476. package/dist/components/Import.js +0 -1
  477. package/dist/components/LazyComponent.js +0 -1
  478. package/dist/components/PersistantCollapsible.js +0 -1
  479. package/dist/components/PhotoViewer.js +0 -1
  480. package/dist/components/ReactiveComponent.js +0 -1
  481. package/dist/components/ReactiveLazyComponent.js +0 -1
  482. package/dist/components/Resize.js +0 -1
  483. package/dist/components/Search.js +0 -1
  484. package/dist/components/ShowMore.js +0 -1
  485. package/dist/components/SideMenu.js +0 -1
  486. package/dist/components/Sortable.js +0 -1
  487. package/dist/components/Split.js +0 -1
  488. package/dist/components/Stacks.js +0 -1
  489. package/dist/components/Table.js +0 -1
  490. package/dist/components/Tabs.js +0 -1
  491. package/dist/components/Tags.js +0 -1
  492. package/dist/components/ThemeSwitcher.js +0 -1
  493. package/dist/components/Timestamp.js +0 -1
  494. package/dist/components/Toast.js +0 -1
  495. package/dist/components/Toggle.js +0 -1
  496. package/dist/components/tableControls/DeleteRecord.js +0 -1
  497. package/dist/components/tableControls/DeleteSelected.js +0 -1
  498. package/dist/components/tableControls/Edit.js +0 -1
  499. package/dist/components/tableControls/ExportCSV.js +0 -1
  500. package/dist/components/tableControls/ExportJson.js +0 -1
  501. package/dist/components/tableControls/FieldSortHide.js +0 -1
  502. package/dist/components/tableControls/Filters.js +0 -1
  503. package/dist/components/tableControls/FirstPage.js +0 -1
  504. package/dist/components/tableControls/HiddenCount.js +0 -1
  505. package/dist/components/tableControls/Hide.js +0 -1
  506. package/dist/components/tableControls/LastPage.js +0 -1
  507. package/dist/components/tableControls/NextPage.js +0 -1
  508. package/dist/components/tableControls/PageSelect.js +0 -1
  509. package/dist/components/tableControls/PageSize.js +0 -1
  510. package/dist/components/tableControls/PrevPage.js +0 -1
  511. package/dist/components/tableControls/Search.js +0 -1
  512. package/dist/components/tableControls/SelectCount.js +0 -1
  513. package/dist/components/tableControls/ShowAll.js +0 -1
  514. package/dist/components/tableControls/ShowHideFields.js +0 -1
  515. package/dist/components/tableControls/TableControl.js +0 -1
  516. package/dist/kempo-hljs.css +0 -1
  517. package/dist/kempo-styles.css +0 -1
  518. package/dist/kempo-vars.css +0 -1
  519. package/dist/utils/Server.js +0 -1
  520. package/dist/utils/cli.js +0 -1
  521. package/dist/utils/cookie.js +0 -1
  522. package/dist/utils/debounce.js +0 -1
  523. package/dist/utils/drag.js +0 -1
  524. package/dist/utils/element.js +0 -1
  525. package/dist/utils/files.js +0 -1
  526. package/dist/utils/formatTimestamp.js +0 -1
  527. package/dist/utils/fs-utils.js +0 -1
  528. package/dist/utils/fuzzyMatch.js +0 -1
  529. package/dist/utils/getPreferredTheme.js +0 -1
  530. package/dist/utils/loadCss.js +0 -1
  531. package/dist/utils/loadScript.js +0 -1
  532. package/dist/utils/minify.js +0 -1
  533. package/dist/utils/object.js +0 -1
  534. package/dist/utils/raf.js +0 -1
  535. package/dist/utils/string.js +0 -1
  536. package/dist/utils/toFunction.js +0 -1
  537. package/dist/utils/type.js +0 -1
  538. package/dist/utils/waitFrames.js +0 -1
  539. package/dist/utils/watchDirectoryHandle.js +0 -1
  540. package/dist/utils/watchWindowSize.js +0 -1
  541. package/docs/components/_template.html +0 -77
  542. package/docs/components/accordion.html +0 -124
  543. package/docs/components/card.html +0 -93
  544. package/docs/components/component.html +0 -92
  545. package/docs/components/content-slider.html +0 -195
  546. package/docs/components/dialog.html +0 -247
  547. package/docs/components/directory-viewer.html +0 -92
  548. package/docs/components/focus-capture.html +0 -70
  549. package/docs/components/icon.html +0 -160
  550. package/docs/components/import.html +0 -79
  551. package/docs/components/lazy-component.html +0 -86
  552. package/docs/components/reactive-component.html +0 -71
  553. package/docs/components/reactive-lazy-component.html +0 -71
  554. package/docs/components/resize.html +0 -154
  555. package/docs/components/search.html +0 -104
  556. package/docs/components/show-more.html +0 -125
  557. package/docs/components/side-menu.html +0 -148
  558. package/docs/components/sortable.html +0 -98
  559. package/docs/components/split.html +0 -128
  560. package/docs/components/table.html +0 -314
  561. package/docs/components/tableControls.html +0 -79
  562. package/docs/components/tableCustomFields.html +0 -115
  563. package/docs/components/tableFetchRecords.html +0 -116
  564. package/docs/components/tableFieldSortHide.html +0 -77
  565. package/docs/components/tablePagination.html +0 -102
  566. package/docs/components/tableRecordEditing.html +0 -146
  567. package/docs/components/tableRecordFiltering.html +0 -77
  568. package/docs/components/tableRecordHiding.html +0 -82
  569. package/docs/components/tableRecordSearching.html +0 -77
  570. package/docs/components/tableRecordSelection.html +0 -77
  571. package/docs/components/tableRowControls.html +0 -80
  572. package/docs/components/tableSorting.html +0 -75
  573. package/docs/components/tabs.html +0 -165
  574. package/docs/components/tags.html +0 -96
  575. package/docs/components/theme-switcher.html +0 -76
  576. package/docs/components/timestamp.html +0 -88
  577. package/docs/components/toast.html +0 -330
  578. package/docs/components/toggle.html +0 -157
  579. package/docs/icons/add.svg +0 -1
  580. package/docs/icons/arrow-back.svg +0 -1
  581. package/docs/icons/arrow-down-double.svg +0 -1
  582. package/docs/icons/arrow-down.svg +0 -1
  583. package/docs/icons/arrow-forward.svg +0 -1
  584. package/docs/icons/arrow-up-double.svg +0 -1
  585. package/docs/icons/arrow-up.svg +0 -1
  586. package/docs/icons/cards.svg +0 -1
  587. package/docs/icons/check.svg +0 -1
  588. package/docs/icons/chevron-left.svg +0 -1
  589. package/docs/icons/chevron-right.svg +0 -1
  590. package/docs/icons/close.svg +0 -2
  591. package/docs/icons/compare.svg +0 -1
  592. package/docs/icons/delete.svg +0 -1
  593. package/docs/icons/drag-handle.svg +0 -1
  594. package/docs/icons/drawing2.svg +0 -124
  595. package/docs/icons/edit.svg +0 -1
  596. package/docs/icons/error.svg +0 -1
  597. package/docs/icons/export-file.svg +0 -1
  598. package/docs/icons/file-text.svg +0 -1
  599. package/docs/icons/file.svg +0 -1
  600. package/docs/icons/filter-off.svg +0 -1
  601. package/docs/icons/filter.svg +0 -1
  602. package/docs/icons/first.svg +0 -1
  603. package/docs/icons/folder-clear.svg +0 -1
  604. package/docs/icons/folder-create.svg +0 -1
  605. package/docs/icons/folder-open.svg +0 -1
  606. package/docs/icons/folder.svg +0 -1
  607. package/docs/icons/hide.svg +0 -1
  608. package/docs/icons/image.svg +0 -1
  609. package/docs/icons/label-add.svg +0 -1
  610. package/docs/icons/label.svg +0 -1
  611. package/docs/icons/last.svg +0 -1
  612. package/docs/icons/menu.svg +0 -1
  613. package/docs/icons/mode-auto.svg +0 -1
  614. package/docs/icons/mode-dark.svg +0 -1
  615. package/docs/icons/mode-light.svg +0 -1
  616. package/docs/icons/open-in-browser.svg +0 -1
  617. package/docs/icons/pause.svg +0 -1
  618. package/docs/icons/play.svg +0 -1
  619. package/docs/icons/refresh.svg +0 -1
  620. package/docs/icons/remove.svg +0 -1
  621. package/docs/icons/save.svg +0 -1
  622. package/docs/icons/search.svg +0 -1
  623. package/docs/icons/settings.svg +0 -1
  624. package/docs/icons/storage.svg +0 -1
  625. package/docs/icons/table-visibility.svg +0 -1
  626. package/docs/icons/tag.svg +0 -1
  627. package/docs/icons/tools.svg +0 -1
  628. package/docs/icons/trash-x.svg +0 -1
  629. package/docs/icons/warning.svg +0 -1
  630. package/docs/index.html +0 -21
  631. package/docs/js/nav.inc.js +0 -4
  632. package/docs/kempo/components/Accordion.js +0 -1
  633. package/docs/kempo/components/Card.js +0 -1
  634. package/docs/kempo/components/Collapsible.js +0 -1
  635. package/docs/kempo/components/Component.js +0 -1
  636. package/docs/kempo/components/ContentSlider.js +0 -1
  637. package/docs/kempo/components/Dialog.js +0 -1
  638. package/docs/kempo/components/DirectoryViewer.js +0 -1
  639. package/docs/kempo/components/FocusCapture.js +0 -1
  640. package/docs/kempo/components/Icon.js +0 -1
  641. package/docs/kempo/components/Import.js +0 -1
  642. package/docs/kempo/components/LazyComponent.js +0 -1
  643. package/docs/kempo/components/PersistantCollapsible.js +0 -1
  644. package/docs/kempo/components/PhotoViewer.js +0 -1
  645. package/docs/kempo/components/ReactiveComponent.js +0 -1
  646. package/docs/kempo/components/ReactiveLazyComponent.js +0 -1
  647. package/docs/kempo/components/Resize.js +0 -1
  648. package/docs/kempo/components/Search.js +0 -1
  649. package/docs/kempo/components/ShowMore.js +0 -1
  650. package/docs/kempo/components/SideMenu.js +0 -1
  651. package/docs/kempo/components/Sortable.js +0 -1
  652. package/docs/kempo/components/Split.js +0 -1
  653. package/docs/kempo/components/Stacks.js +0 -1
  654. package/docs/kempo/components/Table.js +0 -1
  655. package/docs/kempo/components/Tabs.js +0 -1
  656. package/docs/kempo/components/Tags.js +0 -1
  657. package/docs/kempo/components/ThemeSwitcher.js +0 -1
  658. package/docs/kempo/components/Timestamp.js +0 -1
  659. package/docs/kempo/components/Toast.js +0 -1
  660. package/docs/kempo/components/Toggle.js +0 -1
  661. package/docs/kempo/components/tableControls/DeleteRecord.js +0 -1
  662. package/docs/kempo/components/tableControls/DeleteSelected.js +0 -1
  663. package/docs/kempo/components/tableControls/Edit.js +0 -1
  664. package/docs/kempo/components/tableControls/ExportCSV.js +0 -1
  665. package/docs/kempo/components/tableControls/ExportJson.js +0 -1
  666. package/docs/kempo/components/tableControls/FieldSortHide.js +0 -1
  667. package/docs/kempo/components/tableControls/Filters.js +0 -1
  668. package/docs/kempo/components/tableControls/FirstPage.js +0 -1
  669. package/docs/kempo/components/tableControls/HiddenCount.js +0 -1
  670. package/docs/kempo/components/tableControls/Hide.js +0 -1
  671. package/docs/kempo/components/tableControls/LastPage.js +0 -1
  672. package/docs/kempo/components/tableControls/NextPage.js +0 -1
  673. package/docs/kempo/components/tableControls/PageSelect.js +0 -1
  674. package/docs/kempo/components/tableControls/PageSize.js +0 -1
  675. package/docs/kempo/components/tableControls/PrevPage.js +0 -1
  676. package/docs/kempo/components/tableControls/Search.js +0 -1
  677. package/docs/kempo/components/tableControls/SelectCount.js +0 -1
  678. package/docs/kempo/components/tableControls/ShowAll.js +0 -1
  679. package/docs/kempo/components/tableControls/ShowHideFields.js +0 -1
  680. package/docs/kempo/components/tableControls/TableControl.js +0 -1
  681. package/docs/kempo/index.js +0 -1
  682. package/docs/kempo/kempo-hljs.css +0 -1
  683. package/docs/kempo/kempo-styles.css +0 -1
  684. package/docs/kempo/kempo-vars.css +0 -1
  685. package/docs/kempo/utils/Server.js +0 -1
  686. package/docs/kempo/utils/cli.js +0 -1
  687. package/docs/kempo/utils/cookie.js +0 -1
  688. package/docs/kempo/utils/debounce.js +0 -1
  689. package/docs/kempo/utils/drag.js +0 -1
  690. package/docs/kempo/utils/element.js +0 -1
  691. package/docs/kempo/utils/files.js +0 -1
  692. package/docs/kempo/utils/formatTimestamp.js +0 -1
  693. package/docs/kempo/utils/fs-utils.js +0 -1
  694. package/docs/kempo/utils/fuzzyMatch.js +0 -1
  695. package/docs/kempo/utils/getPreferredTheme.js +0 -1
  696. package/docs/kempo/utils/loadCss.js +0 -1
  697. package/docs/kempo/utils/loadScript.js +0 -1
  698. package/docs/kempo/utils/minify.js +0 -1
  699. package/docs/kempo/utils/object.js +0 -1
  700. package/docs/kempo/utils/raf.js +0 -1
  701. package/docs/kempo/utils/string.js +0 -1
  702. package/docs/kempo/utils/toFunction.js +0 -1
  703. package/docs/kempo/utils/type.js +0 -1
  704. package/docs/kempo/utils/waitFrames.js +0 -1
  705. package/docs/kempo/utils/watchDirectoryHandle.js +0 -1
  706. package/docs/kempo/utils/watchWindowSize.js +0 -1
  707. package/docs/nav.inc.html +0 -74
  708. package/docs/search.json +0 -400
  709. package/docs/styles/_template.html +0 -26
  710. package/docs/styles/borders-spacing.html +0 -197
  711. package/docs/styles/buttons.html +0 -117
  712. package/docs/styles/colors.html +0 -69
  713. package/docs/styles/displays-layouts.html +0 -162
  714. package/docs/styles/embed-1.html +0 -40
  715. package/docs/styles/inputs.html +0 -93
  716. package/docs/styles/tables.html +0 -147
  717. package/docs/styles/typography.html +0 -120
  718. package/docs/utils/Server.html +0 -119
  719. package/docs/utils/_template.html +0 -77
  720. package/docs/utils/cli.html +0 -86
  721. package/docs/utils/cookie.html +0 -89
  722. package/docs/utils/debounce.html +0 -63
  723. package/docs/utils/drag.html +0 -87
  724. package/docs/utils/element.html +0 -126
  725. package/docs/utils/format-timestamp.html +0 -66
  726. package/docs/utils/fuzzy-match.html +0 -60
  727. package/icons/add.svg +0 -1
  728. package/icons/arrow-back.svg +0 -1
  729. package/icons/arrow-down-double.svg +0 -1
  730. package/icons/arrow-down.svg +0 -1
  731. package/icons/arrow-forward.svg +0 -1
  732. package/icons/arrow-up-double.svg +0 -1
  733. package/icons/arrow-up.svg +0 -1
  734. package/icons/cards.svg +0 -1
  735. package/icons/check.svg +0 -1
  736. package/icons/chevron-left.svg +0 -1
  737. package/icons/chevron-right.svg +0 -1
  738. package/icons/close.svg +0 -2
  739. package/icons/compare.svg +0 -1
  740. package/icons/delete.svg +0 -1
  741. package/icons/drag-handle.svg +0 -1
  742. package/icons/drawing2.svg +0 -124
  743. package/icons/edit.svg +0 -1
  744. package/icons/error.svg +0 -1
  745. package/icons/export-file.svg +0 -1
  746. package/icons/file-text.svg +0 -1
  747. package/icons/file.svg +0 -1
  748. package/icons/filter-off.svg +0 -1
  749. package/icons/filter.svg +0 -1
  750. package/icons/first.svg +0 -1
  751. package/icons/folder-clear.svg +0 -1
  752. package/icons/folder-create.svg +0 -1
  753. package/icons/folder-open.svg +0 -1
  754. package/icons/folder.svg +0 -1
  755. package/icons/hide.svg +0 -1
  756. package/icons/image.svg +0 -1
  757. package/icons/label-add.svg +0 -1
  758. package/icons/label.svg +0 -1
  759. package/icons/last.svg +0 -1
  760. package/icons/menu.svg +0 -1
  761. package/icons/mode-auto.svg +0 -1
  762. package/icons/mode-dark.svg +0 -1
  763. package/icons/mode-light.svg +0 -1
  764. package/icons/open-in-browser.svg +0 -1
  765. package/icons/pause.svg +0 -1
  766. package/icons/play.svg +0 -1
  767. package/icons/refresh.svg +0 -1
  768. package/icons/remove.svg +0 -1
  769. package/icons/save.svg +0 -1
  770. package/icons/search.svg +0 -1
  771. package/icons/settings.svg +0 -1
  772. package/icons/show.svg +0 -1
  773. package/icons/storage.svg +0 -1
  774. package/icons/table-visibility.svg +0 -1
  775. package/icons/tag.svg +0 -1
  776. package/icons/tools.svg +0 -1
  777. package/icons/trash-x.svg +0 -1
  778. package/icons/warning.svg +0 -1
  779. package/scripts/build.js +0 -154
  780. package/scripts/docs.js +0 -47
  781. package/src/components/Accordion.js +0 -182
  782. package/src/components/Card.js +0 -62
  783. package/src/components/Collapsible.js +0 -104
  784. package/src/components/Component.js +0 -110
  785. package/src/components/ContentSlider.js +0 -192
  786. package/src/components/Dialog.js +0 -338
  787. package/src/components/DirectoryViewer.js +0 -363
  788. package/src/components/FocusCapture.js +0 -31
  789. package/src/components/Icon.js +0 -119
  790. package/src/components/Import.js +0 -48
  791. package/src/components/LazyComponent.js +0 -65
  792. package/src/components/PersistantCollapsible.js +0 -44
  793. package/src/components/PhotoViewer.js +0 -358
  794. package/src/components/ReactiveComponent.js +0 -11
  795. package/src/components/ReactiveLazyComponent.js +0 -11
  796. package/src/components/Resize.js +0 -168
  797. package/src/components/Search.js +0 -140
  798. package/src/components/ShowMore.js +0 -102
  799. package/src/components/SideMenu.js +0 -150
  800. package/src/components/Sortable.js +0 -169
  801. package/src/components/Split.js +0 -164
  802. package/src/components/Table.js +0 -935
  803. package/src/components/Tabs.js +0 -349
  804. package/src/components/Tags.js +0 -224
  805. package/src/components/ThemeSwitcher.js +0 -100
  806. package/src/components/Timestamp.js +0 -28
  807. package/src/components/Toast.js +0 -424
  808. package/src/components/Toggle.js +0 -137
  809. package/src/components/tableControls/DeleteRecord.js +0 -43
  810. package/src/components/tableControls/DeleteSelected.js +0 -70
  811. package/src/components/tableControls/Edit.js +0 -84
  812. package/src/components/tableControls/ExportCSV.js +0 -91
  813. package/src/components/tableControls/ExportJson.js +0 -62
  814. package/src/components/tableControls/FieldSortHide.js +0 -77
  815. package/src/components/tableControls/Filters.js +0 -129
  816. package/src/components/tableControls/FirstPage.js +0 -69
  817. package/src/components/tableControls/HiddenCount.js +0 -37
  818. package/src/components/tableControls/Hide.js +0 -40
  819. package/src/components/tableControls/LastPage.js +0 -67
  820. package/src/components/tableControls/NextPage.js +0 -69
  821. package/src/components/tableControls/PageSelect.js +0 -89
  822. package/src/components/tableControls/PageSize.js +0 -70
  823. package/src/components/tableControls/PrevPage.js +0 -69
  824. package/src/components/tableControls/Search.js +0 -49
  825. package/src/components/tableControls/SelectCount.js +0 -42
  826. package/src/components/tableControls/ShowAll.js +0 -37
  827. package/src/components/tableControls/TableControl.js +0 -51
  828. package/src/kempo-hljs.css +0 -146
  829. package/src/kempo-styles.css +0 -952
  830. package/src/kempo-vars.css +0 -159
  831. package/src/utils/Server.js +0 -189
  832. package/src/utils/cli.js +0 -119
  833. package/src/utils/cookie.js +0 -20
  834. package/src/utils/debounce.js +0 -9
  835. package/src/utils/drag.js +0 -74
  836. package/src/utils/element.js +0 -81
  837. package/src/utils/formatTimestamp.js +0 -27
  838. package/src/utils/fs-utils.js +0 -41
  839. package/src/utils/fuzzyMatch.js +0 -60
  840. package/src/utils/getPreferredTheme.js +0 -1
  841. package/src/utils/loadCss.js +0 -10
  842. package/src/utils/loadScript.js +0 -10
  843. package/src/utils/object.js +0 -198
  844. package/src/utils/raf.js +0 -10
  845. package/src/utils/string.js +0 -66
  846. package/src/utils/toFunction.js +0 -24
  847. package/src/utils/type.js +0 -13
  848. package/src/utils/waitFrames.js +0 -17
  849. package/src/utils/watchDirectoryHandle.js +0 -18
  850. package/src/utils/watchWindowSize.js +0 -15
  851. package/test/components/SuiteList.js +0 -26
  852. package/test/components/Test.js +0 -357
  853. package/test/index.html +0 -49
  854. package/test/index.js +0 -36
  855. package/test/suite.html +0 -45
  856. package/test/suites.inc.html +0 -4
  857. package/test/tests/components/Component.test.js +0 -138
  858. package/test/tests/utils/cli.test.js +0 -113
  859. package/test/tests/utils/cookie.test.js +0 -87
  860. package/test/tests/utils/debounce.test.js +0 -71
  861. /package/{docs/icons/show.svg → dist/admin/icons/visibility.svg} +0 -0
package/LICENSE.md ADDED
@@ -0,0 +1,60 @@
1
+ # MIT License
2
+
3
+ Copyright (c) 2025 Dustin Poissant
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ ## Third-Party Licenses
26
+
27
+ This project includes third-party software. The following sections detail the licenses for these components:
28
+
29
+ ### Lit
30
+
31
+ This project includes Lit, which is licensed under the BSD-3-Clause License:
32
+
33
+ ```
34
+ Copyright 2017 Google LLC. All rights reserved.
35
+
36
+ Redistribution and use in source and binary forms, with or without
37
+ modification, are permitted provided that the following conditions are met:
38
+
39
+ 1. Redistributions of source code must retain the above copyright notice, this
40
+ list of conditions and the following disclaimer.
41
+
42
+ 2. Redistributions in binary form must reproduce the above copyright notice,
43
+ this list of conditions and the following disclaimer in the documentation
44
+ and/or other materials provided with the distribution.
45
+
46
+ 3. Neither the name of the copyright holder nor the names of its
47
+ contributors may be used to endorse or promote products derived from
48
+ this software without specific prior written permission.
49
+
50
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
51
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
52
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
53
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
54
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
55
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
56
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
57
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
58
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
59
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60
+ ```
package/README.md ADDED
@@ -0,0 +1,427 @@
1
+ # Kempo
2
+
3
+ A fullstack CMS framework for creating websites with user authentication, group-based permissions, and an admin panel. Built on [kempo-server](https://github.com/dustinpoissant/kempo-server), [kempo-css](https://github.com/dustinpoissant/kempo-css), and [kempo-ui](https://github.com/dustinpoissant/kempo-ui).
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx kempo init
9
+ ```
10
+
11
+ This initializes the current directory with everything scaffolded:
12
+
13
+ | File / Directory | Purpose |
14
+ |---|---|
15
+ | `package.json` | Pre-configured with start script |
16
+ | `.env` | Environment variables template |
17
+ | `.gitignore` | Ignores `node_modules` and `.env` |
18
+ | `docker-compose.yml` | PostgreSQL database via Docker |
19
+ | `public/` | Your website's pages, assets, and route handlers |
20
+ | `public/.config.json` | Server routing and middleware config |
21
+ | `server/db/schema.js` | Your app's database table definitions |
22
+ | `drizzle.config.js` | Drizzle ORM config (points to both your schema and kempo's) |
23
+
24
+ These files are yours to modify. Kempo will not overwrite them on future installs.
25
+
26
+ ### Setup the Database
27
+
28
+ Update the credentials in `.env` and `docker-compose.yml` if needed, then:
29
+
30
+ ```bash
31
+ docker compose up -d
32
+ npx drizzle-kit push
33
+ node node_modules/kempo/scripts/init-db.js
34
+ ```
35
+
36
+ ### Start the Server
37
+
38
+ ```bash
39
+ npm start
40
+ ```
41
+
42
+ Your site is running at `http://localhost:3000`.
43
+
44
+ ### Create an Admin User
45
+
46
+ Register a user through the UI at `/register`, then promote them:
47
+
48
+ ```bash
49
+ node node_modules/kempo/scripts/make-admin.js
50
+ ```
51
+
52
+ This prompts for the user's email and adds them to the `system:Administrators` group. To remove admin access:
53
+
54
+ ```bash
55
+ node node_modules/kempo/scripts/remove-admin.js
56
+ ```
57
+
58
+ ## Scaffolded Pages
59
+
60
+ Kempo scaffolds these pages into your `public/` directory. All are fully functional and customizable.
61
+
62
+ | Route | Page |
63
+ |---|---|
64
+ | `/` | Home page |
65
+ | `/login` | Login form |
66
+ | `/register` | Registration form |
67
+ | `/forgot-password` | Password recovery |
68
+ | `/reset-password/[token]` | Password reset (from email link) |
69
+ | `/verify-email` | Email verification notice |
70
+ | `/verify-email/[token]` | Email verification (from email link) |
71
+ | `/account` | User account page (requires login) |
72
+ | `/admin` | Admin dashboard (requires `system:admin:access` permission) |
73
+ | `/admin/accounts/users` | User management |
74
+ | `/admin/accounts/users/create` | Create user |
75
+ | `/admin/accounts/users/[id]` | Edit user |
76
+ | `/admin/accounts/groups` | Group management |
77
+ | `/admin/accounts/permissions` | Permission management |
78
+ | `/admin/settings` | Settings management |
79
+
80
+ ## Project Structure
81
+
82
+ After setup, your project looks like this:
83
+
84
+ ```
85
+ my-site/
86
+ ├── .env
87
+ ├── drizzle.config.js # Drizzle config (your schema + kempo's)
88
+ ├── package.json
89
+ ├── public/ # Your website
90
+ │ ├── .config.json # Server routing & middleware config
91
+ │ ├── index.html # Home page
92
+ │ ├── styles.css # Your custom styles
93
+ │ ├── login/
94
+ │ ├── register/
95
+ │ ├── account/
96
+ │ ├── admin/
97
+ │ └── ...
98
+ ├── server/
99
+ │ └── db/
100
+ │ └── schema.js # Your app's database tables
101
+ └── node_modules/
102
+ └── kempo/
103
+ ├── dist/kempo/ # SDK, API endpoints, components
104
+ ├── server/
105
+ │ ├── db/schema.js # Framework tables (user, session, group, etc.)
106
+ │ └── utils/ # Backend utilities
107
+ ├── middleware/ # Auth middleware
108
+ └── templates/ # Nav and email templates
109
+ ```
110
+
111
+ ## Custom Database Tables
112
+
113
+ Define your app's tables in `server/db/schema.js`. You can reference kempo's tables for foreign keys:
114
+
115
+ ```javascript
116
+ import { pgTable, text, timestamp } from 'drizzle-orm/pg-core';
117
+ import { user } from 'kempo/server/db/schema.js';
118
+
119
+ export const post = pgTable('post', {
120
+ id: text('id').primaryKey(),
121
+ authorId: text('authorId').references(() => user.id),
122
+ title: text('title').notNull(),
123
+ content: text('content'),
124
+ createdAt: timestamp('createdAt').notNull(),
125
+ });
126
+ ```
127
+
128
+ Then push to the database:
129
+
130
+ ```bash
131
+ npx drizzle-kit push
132
+ ```
133
+
134
+ Your `drizzle.config.js` already points to both schema files, so both framework and app tables are managed together.
135
+
136
+ ### Querying the Database
137
+
138
+ Import the shared database instance from kempo:
139
+
140
+ ```javascript
141
+ import db from 'kempo/server/db/index.js';
142
+ import { post } from '../../db/schema.js';
143
+
144
+ export default async ({ authorId, title, content }) => {
145
+ const result = await db.insert(post).values({
146
+ id: crypto.randomUUID(),
147
+ authorId,
148
+ title,
149
+ content,
150
+ createdAt: new Date(),
151
+ }).returning();
152
+
153
+ return [null, result[0]];
154
+ };
155
+ ```
156
+
157
+ ## Framework Database Tables
158
+
159
+ Kempo provides these tables out of the box:
160
+
161
+ | Table | Purpose |
162
+ |---|---|
163
+ | `user` | User accounts (id, name, email, passwordHash, emailVerified, timestamps) |
164
+ | `session` | Login sessions (token, userId, expiresAt, ipAddress, userAgent) |
165
+ | `verificationToken` | Email verification and password reset tokens |
166
+ | `group` | Permission groups (e.g. `system:Users`, `system:Administrators`) |
167
+ | `userGroup` | User-to-group membership |
168
+ | `permission` | Named permissions (e.g. `system:admin:access`) |
169
+ | `groupPermission` | Group-to-permission assignments |
170
+ | `setting` | Key-value settings with type, visibility, and ownership |
171
+
172
+ ## Frontend SDK
173
+
174
+ Kempo provides a client-side SDK at `/kempo/sdk.js` for calling API endpoints.
175
+
176
+ ```html
177
+ <script type="module">
178
+ import { login, getSession, logout } from '/kempo/sdk.js';
179
+
180
+ const [error, result] = await login({ email: 'user@example.com', password: 'secret' });
181
+ if(error){
182
+ console.error(error.msg);
183
+ }
184
+ </script>
185
+ ```
186
+
187
+ All SDK methods return an `[error, data]` tuple. On failure, `error` is `{ code, msg }`. On success, `error` is `null`.
188
+
189
+ ### Auth
190
+
191
+ | Method | Parameters |
192
+ |---|---|
193
+ | `register` | `{ email, password, name }` |
194
+ | `login` | `{ email, password }` |
195
+ | `logout` | (none) |
196
+ | `getSession` | (none) |
197
+ | `forgotPassword` | `{ email }` |
198
+ | `resetPassword` | `{ token, password, logoutAll? }` |
199
+ | `changePassword` | `{ currentPassword, newPassword, logoutAll? }` |
200
+ | `verifyEmail` | `{ token }` |
201
+
202
+ ### Permissions
203
+
204
+ | Method | Parameters |
205
+ |---|---|
206
+ | `currentUserHasPermission` | `{ permission }` |
207
+ | `currentUserHasAllPermissions` | `{ permissions }` |
208
+ | `currentUserHasSomePermissions` | `{ permissions }` |
209
+ | `getAllCurrentUserPermissions` | (none) |
210
+ | `userHasPermission` | `{ userid, permission }` |
211
+ | `userHasAllPermissions` | `{ userid, permissions }` |
212
+ | `userHasSomePermissions` | `{ userid, permissions }` |
213
+ | `getAllUserPermissions` | `{ userid }` |
214
+
215
+ ### Users
216
+
217
+ | Method | Parameters |
218
+ |---|---|
219
+ | `getUsers` | `{ limit?, offset? }` |
220
+ | `getUser` | `userid` |
221
+ | `createUser` | `{ name, email, password, emailVerified? }` |
222
+ | `updateUser` | `{ id, name?, email?, emailVerified?, createdAt? }` |
223
+ | `deleteUsers` | `ids` (array) |
224
+
225
+ ### Sessions
226
+
227
+ | Method | Parameters |
228
+ |---|---|
229
+ | `getUserSessions` | `userid` |
230
+ | `deleteUserSession` | `userid, sessionToken` |
231
+ | `deleteExpiredUserSessions` | `userid` |
232
+
233
+ ### Groups
234
+
235
+ | Method | Parameters |
236
+ |---|---|
237
+ | `listGroups` | (none) |
238
+ | `getUserGroups` | `userid` |
239
+ | `addUserToGroup` | `userid, groupName` |
240
+ | `removeUserFromGroup` | `userid, groupName` |
241
+
242
+ ## Frontend Components
243
+
244
+ Kempo provides web components you can use in your pages:
245
+
246
+ ```html
247
+ <script type="module" src="/kempo/components/Permission.js"></script>
248
+ <kempo-permission has="system:admin:access">
249
+ <a href="/admin">Admin Panel</a>
250
+ </kempo-permission>
251
+ ```
252
+
253
+ | Component | Tag | Purpose |
254
+ |---|---|---|
255
+ | `Permission.js` | `<kempo-permission>` | Conditionally render content based on permissions |
256
+ | `LogoutBtn.js` | `<kempo-logout-btn>` | Logout button |
257
+ | `UserName.js` | `<kempo-user-name>` | Display current user's name |
258
+ | `UserEmail.js` | `<kempo-user-email>` | Display current user's email |
259
+ | `UserEmailVerified.js` | `<kempo-user-email-verified>` | Display email verification status |
260
+ | `UserCreatedAt.js` | `<kempo-user-created-at>` | Display account creation date |
261
+
262
+ ## Adding Routes
263
+
264
+ Create files in `public/` following the kempo-server routing convention. File names map to HTTP methods:
265
+
266
+ ```
267
+ public/
268
+ api/
269
+ posts/
270
+ GET.js → GET /api/posts
271
+ POST.js → POST /api/posts
272
+ [id]/
273
+ GET.js → GET /api/posts/:id
274
+ PATCH.js → PATCH /api/posts/:id
275
+ DELETE.js → DELETE /api/posts/:id
276
+ ```
277
+
278
+ Route handlers receive `(request, response)`:
279
+
280
+ ```javascript
281
+ import db from 'kempo/server/db/index.js';
282
+ import { post } from '../../../server/db/schema.js';
283
+ import { eq } from 'drizzle-orm';
284
+
285
+ export default async (request, response) => {
286
+ const posts = await db.select().from(post);
287
+ response.json({ posts });
288
+ };
289
+ ```
290
+
291
+ `request.body` is pre-parsed based on `Content-Type`. Query params are at `request.query`. Cookies are at `request.cookies`. Path params from `[param]` folders are at `request.params`.
292
+
293
+ ## Auth Middleware
294
+
295
+ The auth middleware protects `/account` and `/admin` routes by default:
296
+
297
+ - `/account/*` — Requires a valid session. Redirects to `/login` if not authenticated.
298
+ - `/admin/*` — Requires the `system:admin:access` permission. Redirects to `/account` if unauthorized.
299
+
300
+ These are configured in `public/.config.json` and can be customized.
301
+
302
+ ## Default Permissions
303
+
304
+ The `init-db.js` script seeds these permissions:
305
+
306
+ | Permission | Description |
307
+ |---|---|
308
+ | `system:admin:access` | Access admin panel |
309
+ | `system:content:create` | Create new content |
310
+ | `system:content:update` | Edit content |
311
+ | `system:content:delete` | Delete content |
312
+ | `system:user:create` | Create new users |
313
+ | `system:user:read` | View users |
314
+ | `system:user:update` | Edit users |
315
+ | `system:user:delete` | Delete users |
316
+ | `system:group:create` | Create new groups |
317
+ | `system:group:read` | View groups |
318
+ | `system:group:update` | Edit groups and manage membership |
319
+ | `system:group:delete` | Delete groups |
320
+ | `system:permissions:read` | View permissions for all users |
321
+ | `system:permissions:manage` | Add or remove permissions |
322
+ | `system:settings:read` | View private settings |
323
+ | `system:settings:update` | Update settings |
324
+ | `system:custom-settings:manage` | Create and delete custom settings |
325
+
326
+ Two default groups are created:
327
+
328
+ - **system:Users** — Assigned to all users, no permissions by default.
329
+ - **system:Administrators** — Full system access (all permissions above).
330
+
331
+ ## Default Settings
332
+
333
+ | Setting | Default | Type | Public | Description |
334
+ |---|---|---|---|---|
335
+ | `site_name` | `Kempo Site` | string | yes | The name of the website |
336
+ | `session_duration_days` | `7` | number | no | Session duration in days |
337
+ | `allow_registration` | `true` | boolean | yes | Allow new users to register |
338
+ | `require_email_verification` | `false` | boolean | no | Require email verification before account access |
339
+ | `verification_url` | `http://localhost:3000/verify-email/{{token}}` | string | no | Email verification URL template |
340
+ | `password_reset_url` | `http://localhost:3000/reset-password/{{token}}` | string | no | Password reset URL template |
341
+
342
+ Settings can be managed through the admin panel at `/admin/settings` or the SDK.
343
+
344
+ ## Email
345
+
346
+ Kempo uses [Resend](https://resend.com/) for sending emails. Set `RESEND_API_KEY` and `EMAIL_FROM` in your `.env` file.
347
+
348
+ Built-in email templates (in `templates/emails/`):
349
+ - `verify-email.html` — Email verification link
350
+ - `reset-password.html` — Password reset link
351
+
352
+ ## Styling
353
+
354
+ Kempo uses [kempo-css](https://github.com/dustinpoissant/kempo-css) for styling and [kempo-ui](https://github.com/dustinpoissant/kempo-ui) for UI components. Both are served automatically via custom routes configured in `public/.config.json`.
355
+
356
+ ```html
357
+ <link rel="stylesheet" href="/kempo-css/kempo.min.css">
358
+ <script type="module" src="/kempo-ui/components/Import.js"></script>
359
+ ```
360
+
361
+ Refer to the [kempo-css docs](https://github.com/dustinpoissant/kempo-css) and [kempo-ui docs](https://github.com/dustinpoissant/kempo-ui) for available utility classes and components.
362
+
363
+ ## Development
364
+
365
+ ### Running the Dev Server
366
+
367
+ ```bash
368
+ npm run dev
369
+ ```
370
+
371
+ This serves `app-public/` at `http://localhost:9876` for testing the consumer-facing boilerplate. The dev server watches for changes and auto-reloads.
372
+
373
+ ### Building for Distribution
374
+
375
+ When preparing the framework for npm release, minify and optimize the source code:
376
+
377
+ ```bash
378
+ npm run build
379
+ ```
380
+
381
+ This processes all files in `src/` and outputs to `dist/`:
382
+ - JavaScript files are minified with terser, mangled, and source maps are generated
383
+ - HTML files are minified while preserving CMS front matter comments (important for page templating)
384
+ - JSON files are minified
385
+ - SVG icons and other assets are copied as-is
386
+
387
+ The build achieves ~15% size reduction and runs in ~0.6s.
388
+
389
+ **Output Structure:**
390
+ ```
391
+ dist/
392
+ ├── admin/ # Minified admin portal
393
+ ├── kempo/ # Minified framework SDK, API routes, components
394
+ └── ...
395
+ ```
396
+
397
+ See [spec/concepts/build.md](spec/concepts/build.md) for detailed build documentation.
398
+
399
+ ### Project Structure
400
+
401
+ **Framework source:**
402
+ ```
403
+ kempo/
404
+ ├── src/
405
+ │ ├── admin/ # Admin portal source (minified to dist/admin/)
406
+ │ └── kempo/ # Framework SDK & API source (minified to dist/kempo/)
407
+ ├── server/ # Backend utilities (not minified)
408
+ ├── middleware/ # Auth middleware
409
+ ├── app-public/ # Consumer boilerplate (not minified)
410
+ ├── app-templates/ # Email and page templates (not minified)
411
+ ├── app-server/ # Server scaffolding (not minified)
412
+ └── dist/ # Built & minified output (generated by `npm run build`)
413
+ ```
414
+
415
+ **Consumer project (created by `npx kempo init`):**
416
+ ```
417
+ my-site/
418
+ ├── public/ # Copied from kempo's app-public/
419
+ ├── server/db/schema.js # Copied from kempo's app-server/
420
+ ├── templates/ # Copied from kempo's app-templates/
421
+ └── ...
422
+ ```
423
+
424
+ ## License
425
+
426
+
427
+ MIT
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from 'drizzle-kit';
2
+ import 'dotenv/config';
3
+
4
+ export default defineConfig({
5
+ schema: [
6
+ './server/db/schema.js',
7
+ './node_modules/kempo/server/db/schema.js',
8
+ ],
9
+ out: './server/db/migrations',
10
+ dialect: 'postgresql',
11
+ dbCredentials: {
12
+ url: process.env.DATABASE_URL,
13
+ },
14
+ });
@@ -0,0 +1,25 @@
1
+ {
2
+ "customRoutes": {
3
+ "/kempo-css/**": "../node_modules/kempo-css/dist/**",
4
+ "/kempo-ui/icons/**": "../node_modules/kempo-ui/icons/**",
5
+ "/kempo-ui/**": "../node_modules/kempo-ui/dist/**",
6
+ "/monaco-editor/**": "../node_modules/monaco-editor/min/**",
7
+ "/kempo/**": "../dist/kempo/**",
8
+ "/admin": "../dist/admin/",
9
+ "/admin/**": "../dist/admin/**"
10
+ },
11
+ "middleware": {
12
+ "custom": [
13
+ "../middleware/kempo-auth.js",
14
+ "../middleware/extension-scope-router.js"
15
+ ]
16
+ },
17
+ "templating": {
18
+ "ssr": true,
19
+ "ssrPriority": true,
20
+ "preRender": false
21
+ },
22
+ "disallowedRegex": [
23
+ "-disabled\\.html$"
24
+ ]
25
+ }
@@ -0,0 +1,110 @@
1
+ <!--
2
+ owner: system
3
+ title: My Account
4
+ description: User account settings and profile management
5
+ -->
6
+ <page title="My Account">
7
+ <content location="head">
8
+ <style>
9
+ input.error {
10
+ --c_input_border: var(--c_danger, red);
11
+ --focus_shadow: 0 0 2px 2px var(--c_danger, red);
12
+ }
13
+ </style>
14
+ </content>
15
+ <content>
16
+ <main class="p">
17
+ <div style="max-width: 600px; margin: 0 auto;">
18
+ <h2>My Account</h2>
19
+ <div class="mb">
20
+ <strong>Name:</strong> <k-user-name></k-user-name>
21
+ </div>
22
+ <div class="mb">
23
+ <strong>Email:</strong> <k-user-email></k-user-email>
24
+ </div>
25
+ <div class="mb">
26
+ <strong>Email Verified:</strong> <k-user-email-verified></k-user-email-verified>
27
+ </div>
28
+ <div class="mb">
29
+ <strong>Member Since:</strong> <k-user-created-at></k-user-created-at>
30
+ </div>
31
+ <div class="mt-lg">
32
+ <k-permission has="system:admin:access">
33
+ <a href="{{pathToRoot}}admin" class="btn primary">Admin Panel</a>
34
+ </k-permission>
35
+ <button id="changePasswordBtn" class="btn">Change Password</button>
36
+ <k-logout-btn redirect="{{pathToRoot}}login" button-class="btn danger">Logout</k-logout-btn>
37
+ </div>
38
+ </div>
39
+ </main>
40
+ <k-dialog id="changePasswordDialog">
41
+ <h5 slot="title" class="pyh px m0">Change Password</h5>
42
+ <form id="changePasswordForm" class="p">
43
+ <div class="mb">
44
+ <label for="currentPassword" class="d-b mb-sm">Current Password</label>
45
+ <input type="password" id="currentPassword" required class="w-full p-sm br">
46
+ </div>
47
+ <div class="mb">
48
+ <label for="newPassword" class="d-b mb-sm">New Password</label>
49
+ <input type="password" id="newPassword" required minlength="8" class="w-full p-sm br">
50
+ </div>
51
+ <div class="mb">
52
+ <label for="confirmPassword" class="d-b mb-sm">Confirm New Password</label>
53
+ <input type="password" id="confirmPassword" required minlength="8" class="w-full p-sm br">
54
+ </div>
55
+ <k-toggle id="logout-all">Logout all other devices</k-toggle>
56
+ <div class="ta-right">
57
+ <button type="submit" class="primary">Change Password</button>
58
+ </div>
59
+ </form>
60
+ </k-dialog>
61
+ </content>
62
+ <content location="scripts">
63
+ <script src="{{pathToRoot}}kempo-ui/components/Dialog.js" type="module"></script>
64
+ <script src="{{pathToRoot}}kempo/components/Permission.js" type="module"></script>
65
+ <script src="{{pathToRoot}}kempo/components/UserName.js" type="module"></script>
66
+ <script src="{{pathToRoot}}kempo/components/UserEmail.js" type="module"></script>
67
+ <script src="{{pathToRoot}}kempo/components/UserEmailVerified.js" type="module"></script>
68
+ <script src="{{pathToRoot}}kempo/components/UserCreatedAt.js" type="module"></script>
69
+ <script src="{{pathToRoot}}kempo/components/LogoutBtn.js" type="module"></script>
70
+ <script src="{{pathToRoot}}kempo-ui/components/Toggle.js" type="module"></script>
71
+ <script type="module">
72
+ import { changePassword } from '{{pathToRoot}}kempo/sdk.js';
73
+ import Toast from '{{pathToRoot}}kempo-ui/components/Toast.js';
74
+
75
+ (()=>{
76
+ const $dialog = document.getElementById('changePasswordDialog');
77
+ const $confirmPassword = document.getElementById('confirmPassword');
78
+ document.getElementById('changePasswordBtn').addEventListener('click', () => {
79
+ $dialog.open();
80
+ });
81
+ document.getElementById('changePasswordForm').addEventListener('submit', async (event) => {
82
+ event.preventDefault();
83
+ const currentPassword = document.getElementById('currentPassword').value;
84
+ const newPassword = document.getElementById('newPassword').value;
85
+ const confirmPassword = $confirmPassword.value;
86
+ if(newPassword !== confirmPassword){
87
+ $confirmPassword.classList.add('error');
88
+ $confirmPassword.setCustomValidity("Your new password and confirmation password do not match");
89
+ return;
90
+ }
91
+ $dialog.close();
92
+ const [error] = await changePassword({
93
+ currentPassword,
94
+ newPassword,
95
+ logoutAll: document.getElementById('logout-all').value
96
+ });
97
+ if(error){
98
+ Toast.error(error.msg);
99
+ return;
100
+ }
101
+ Toast.success('Password Updated');
102
+ });
103
+ $confirmPassword.addEventListener('input', ()=>{
104
+ $confirmPassword.classList.remove('error');
105
+ $confirmPassword.setCustomValidity('');
106
+ });
107
+ })();
108
+ </script>
109
+ </content>
110
+ </page>
@@ -0,0 +1,36 @@
1
+ <!--
2
+ owner: custom
3
+ author: Copilot Admin
4
+ created: 2026-04-16T20:40:58.376Z
5
+ updated: 2026-04-19T20:43:06.103Z
6
+ -->
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+
10
+ <head>
11
+ <meta charset="UTF-8">
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
13
+ <link rel="icon" type="image/png" sizes="48x48" href="{{pathToRoot}}media/icon48.png">
14
+ <link rel="manifest" href="{{pathToRoot}}manifest.json">
15
+ <title>{{title}}</title>
16
+ <link rel="stylesheet" href="{{pathToRoot}}kempo-css/kempo.min.css">
17
+ <link rel="stylesheet" href="{{pathToRoot}}styles.css">
18
+ <script src="{{pathToRoot}}init.js"></script>
19
+ <location name="head" />
20
+ </head>
21
+
22
+ <body>
23
+ <fragment name="nav" />
24
+ <div class="row">
25
+ <div class="col d-span-4 t-span-4 m-span-12 px">
26
+ <location name="left" label="Left Sidebar" />
27
+ </div>
28
+ <div class="col d-span-8 t-span-8 m-span-12">
29
+ <main>
30
+ <location />
31
+ </main>
32
+ </div>
33
+ </div>
34
+ <location name="scripts" />
35
+ </body>
36
+ </html>