kempo 4.2.4 → 4.2.7

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 (856) 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 +468 -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/schema.js +173 -0
  339. package/server/sdk.js +192 -0
  340. package/server/utils/admin-global-content/createAdminGlobalContent.js +43 -0
  341. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +34 -0
  342. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +26 -0
  343. package/server/utils/admin-global-content/disableAdminGlobalContent.js +33 -0
  344. package/server/utils/admin-global-content/enableAdminGlobalContent.js +33 -0
  345. package/server/utils/admin-global-content/getAdminGlobalContent.js +28 -0
  346. package/server/utils/admin-global-content/helpers.js +47 -0
  347. package/server/utils/admin-global-content/listAdminGlobalContent.js +20 -0
  348. package/server/utils/admin-global-content/updateAdminGlobalContent.js +41 -0
  349. package/server/utils/auth/changePassword.js +27 -0
  350. package/server/utils/auth/getSession.js +35 -0
  351. package/server/utils/auth/loginEmail.js +66 -0
  352. package/server/utils/auth/logout.js +16 -0
  353. package/server/utils/auth/registerEmail.js +105 -0
  354. package/server/utils/auth/requestPasswordReset.js +62 -0
  355. package/server/utils/auth/resetPassword.js +58 -0
  356. package/server/utils/auth/sendVerificationEmail.js +57 -0
  357. package/server/utils/auth/verifyEmail.js +46 -0
  358. package/server/utils/email/sendEmail.js +42 -0
  359. package/server/utils/email/sendEmailFromTemplate.js +45 -0
  360. package/server/utils/extensions/checkExtensionUpdate.js +56 -0
  361. package/server/utils/extensions/createTablesFromSchema.js +57 -0
  362. package/server/utils/extensions/disableExtension.js +26 -0
  363. package/server/utils/extensions/enableExtension.js +26 -0
  364. package/server/utils/extensions/getExtension.js +34 -0
  365. package/server/utils/extensions/installExtension.js +134 -0
  366. package/server/utils/extensions/listExtensions.js +36 -0
  367. package/server/utils/extensions/scopeCache.js +18 -0
  368. package/server/utils/extensions/uninstallExtension.js +88 -0
  369. package/server/utils/extensions/updateExtension.js +159 -0
  370. package/server/utils/fragments/createFragment.js +57 -0
  371. package/server/utils/fragments/deleteFragment.js +35 -0
  372. package/server/utils/fragments/disableFragment.js +37 -0
  373. package/server/utils/fragments/enableFragment.js +30 -0
  374. package/server/utils/fragments/getFragment.js +36 -0
  375. package/server/utils/fragments/listFragments.js +32 -0
  376. package/server/utils/fragments/moveFragment.js +54 -0
  377. package/server/utils/fragments/updateFragment.js +58 -0
  378. package/server/utils/fs/parseFrontmatter.js +13 -0
  379. package/server/utils/fs/scanDir.js +26 -0
  380. package/server/utils/global-content/createGlobalContent.js +58 -0
  381. package/server/utils/global-content/deleteGlobalContent.js +52 -0
  382. package/server/utils/global-content/disableGlobalContent.js +57 -0
  383. package/server/utils/global-content/enableGlobalContent.js +53 -0
  384. package/server/utils/global-content/getGlobalContent.js +28 -0
  385. package/server/utils/global-content/helpers.js +33 -0
  386. package/server/utils/global-content/listGlobalContent.js +24 -0
  387. package/server/utils/global-content/updateGlobalContent.js +56 -0
  388. package/server/utils/groups/addUserToGroup.js +46 -0
  389. package/server/utils/groups/createGroup.js +32 -0
  390. package/server/utils/groups/deleteGroup.js +29 -0
  391. package/server/utils/groups/getGroup.js +25 -0
  392. package/server/utils/groups/getGroupMembers.js +33 -0
  393. package/server/utils/groups/listGroups.js +21 -0
  394. package/server/utils/groups/removeUserFromGroup.js +31 -0
  395. package/server/utils/groups/updateGroup.js +54 -0
  396. package/server/utils/hooks/createHook.js +29 -0
  397. package/server/utils/hooks/deleteHook.js +19 -0
  398. package/server/utils/hooks/getHook.js +19 -0
  399. package/server/utils/hooks/listHooks.js +30 -0
  400. package/server/utils/hooks/triggerHook.js +61 -0
  401. package/server/utils/hooks/updateHook.js +27 -0
  402. package/server/utils/pages/createPage.js +60 -0
  403. package/server/utils/pages/deletePage.js +35 -0
  404. package/server/utils/pages/disablePage.js +37 -0
  405. package/server/utils/pages/enablePage.js +30 -0
  406. package/server/utils/pages/getPage.js +53 -0
  407. package/server/utils/pages/listDirectories.js +18 -0
  408. package/server/utils/pages/listPages.js +40 -0
  409. package/server/utils/pages/listTemplates.js +52 -0
  410. package/server/utils/pages/movePage.js +54 -0
  411. package/server/utils/pages/updatePage.js +74 -0
  412. package/server/utils/permissions/addPermissionToGroup.js +43 -0
  413. package/server/utils/permissions/createPermission.js +43 -0
  414. package/server/utils/permissions/currentUserHasAllPermissions.js +24 -0
  415. package/server/utils/permissions/currentUserHasPermission.js +24 -0
  416. package/server/utils/permissions/currentUserHasSomePermissions.js +24 -0
  417. package/server/utils/permissions/deletePermission.js +29 -0
  418. package/server/utils/permissions/getAllPermissions.js +21 -0
  419. package/server/utils/permissions/getPermissionsForGroups.js +26 -0
  420. package/server/utils/permissions/getUserGroups.js +31 -0
  421. package/server/utils/permissions/getUserPermission.js +30 -0
  422. package/server/utils/permissions/getUserPermissions.js +16 -0
  423. package/server/utils/permissions/removePermissionFromGroup.js +31 -0
  424. package/server/utils/permissions/updatePermission.js +33 -0
  425. package/server/utils/permissions/userHasAllPermissions.js +31 -0
  426. package/server/utils/permissions/userHasPermission.js +13 -0
  427. package/server/utils/permissions/userHasSomePermissions.js +31 -0
  428. package/server/utils/sessions/createSession.js +36 -0
  429. package/server/utils/sessions/deleteExpiredUserSessions.js +22 -0
  430. package/server/utils/sessions/deleteSession.js +16 -0
  431. package/server/utils/sessions/deleteUserSessions.js +16 -0
  432. package/server/utils/sessions/getSessionById.js +21 -0
  433. package/server/utils/sessions/getSessionByToken.js +21 -0
  434. package/server/utils/sessions/getSessions.js +19 -0
  435. package/server/utils/sessions/getUserSessions.js +30 -0
  436. package/server/utils/settings/deleteSetting.js +24 -0
  437. package/server/utils/settings/getPublicSettings.js +22 -0
  438. package/server/utils/settings/getSetting.js +25 -0
  439. package/server/utils/settings/getSettingWithMetadata.js +33 -0
  440. package/server/utils/settings/getSettingsByOwner.js +23 -0
  441. package/server/utils/settings/helpers.js +29 -0
  442. package/server/utils/settings/listSettings.js +25 -0
  443. package/server/utils/settings/setSetting.js +49 -0
  444. package/server/utils/templates/createTemplate.js +71 -0
  445. package/server/utils/templates/deleteTemplate.js +35 -0
  446. package/server/utils/templates/disableTemplate.js +37 -0
  447. package/server/utils/templates/enableTemplate.js +30 -0
  448. package/server/utils/templates/getTemplate.js +30 -0
  449. package/server/utils/templates/moveTemplate.js +54 -0
  450. package/server/utils/templates/updateTemplate.js +46 -0
  451. package/server/utils/users/createUser.js +60 -0
  452. package/server/utils/users/deleteUser.js +19 -0
  453. package/server/utils/users/findUsersByEmail.js +35 -0
  454. package/server/utils/users/findUsersByName.js +35 -0
  455. package/server/utils/users/getUserByEmail.js +26 -0
  456. package/server/utils/users/getUserById.js +27 -0
  457. package/server/utils/users/getUsers.js +26 -0
  458. package/server/utils/users/searchUsers.js +53 -0
  459. package/server/utils/users/updateUser.js +38 -0
  460. package/.gitattributes +0 -2
  461. package/LICENSE +0 -21
  462. package/dist/components/Accordion.js +0 -1
  463. package/dist/components/Card.js +0 -1
  464. package/dist/components/Collapsible.js +0 -1
  465. package/dist/components/Component.js +0 -1
  466. package/dist/components/ContentSlider.js +0 -1
  467. package/dist/components/Dialog.js +0 -1
  468. package/dist/components/DirectoryViewer.js +0 -1
  469. package/dist/components/FocusCapture.js +0 -1
  470. package/dist/components/Icon.js +0 -1
  471. package/dist/components/Import.js +0 -1
  472. package/dist/components/LazyComponent.js +0 -1
  473. package/dist/components/PersistantCollapsible.js +0 -1
  474. package/dist/components/PhotoViewer.js +0 -1
  475. package/dist/components/ReactiveComponent.js +0 -1
  476. package/dist/components/ReactiveLazyComponent.js +0 -1
  477. package/dist/components/Resize.js +0 -1
  478. package/dist/components/Search.js +0 -1
  479. package/dist/components/ShowMore.js +0 -1
  480. package/dist/components/SideMenu.js +0 -1
  481. package/dist/components/Sortable.js +0 -1
  482. package/dist/components/Split.js +0 -1
  483. package/dist/components/Stacks.js +0 -1
  484. package/dist/components/Table.js +0 -1
  485. package/dist/components/Tabs.js +0 -1
  486. package/dist/components/Tags.js +0 -1
  487. package/dist/components/ThemeSwitcher.js +0 -1
  488. package/dist/components/Timestamp.js +0 -1
  489. package/dist/components/Toast.js +0 -1
  490. package/dist/components/Toggle.js +0 -1
  491. package/dist/components/tableControls/DeleteRecord.js +0 -1
  492. package/dist/components/tableControls/DeleteSelected.js +0 -1
  493. package/dist/components/tableControls/Edit.js +0 -1
  494. package/dist/components/tableControls/ExportCSV.js +0 -1
  495. package/dist/components/tableControls/ExportJson.js +0 -1
  496. package/dist/components/tableControls/FieldSortHide.js +0 -1
  497. package/dist/components/tableControls/Filters.js +0 -1
  498. package/dist/components/tableControls/FirstPage.js +0 -1
  499. package/dist/components/tableControls/HiddenCount.js +0 -1
  500. package/dist/components/tableControls/Hide.js +0 -1
  501. package/dist/components/tableControls/LastPage.js +0 -1
  502. package/dist/components/tableControls/NextPage.js +0 -1
  503. package/dist/components/tableControls/PageSelect.js +0 -1
  504. package/dist/components/tableControls/PageSize.js +0 -1
  505. package/dist/components/tableControls/PrevPage.js +0 -1
  506. package/dist/components/tableControls/Search.js +0 -1
  507. package/dist/components/tableControls/SelectCount.js +0 -1
  508. package/dist/components/tableControls/ShowAll.js +0 -1
  509. package/dist/components/tableControls/ShowHideFields.js +0 -1
  510. package/dist/components/tableControls/TableControl.js +0 -1
  511. package/dist/kempo-hljs.css +0 -1
  512. package/dist/kempo-styles.css +0 -1
  513. package/dist/kempo-vars.css +0 -1
  514. package/dist/utils/Server.js +0 -1
  515. package/dist/utils/cli.js +0 -1
  516. package/dist/utils/cookie.js +0 -1
  517. package/dist/utils/debounce.js +0 -1
  518. package/dist/utils/drag.js +0 -1
  519. package/dist/utils/element.js +0 -1
  520. package/dist/utils/files.js +0 -1
  521. package/dist/utils/formatTimestamp.js +0 -1
  522. package/dist/utils/fs-utils.js +0 -1
  523. package/dist/utils/fuzzyMatch.js +0 -1
  524. package/dist/utils/getPreferredTheme.js +0 -1
  525. package/dist/utils/loadCss.js +0 -1
  526. package/dist/utils/loadScript.js +0 -1
  527. package/dist/utils/minify.js +0 -1
  528. package/dist/utils/object.js +0 -1
  529. package/dist/utils/raf.js +0 -1
  530. package/dist/utils/string.js +0 -1
  531. package/dist/utils/toFunction.js +0 -1
  532. package/dist/utils/type.js +0 -1
  533. package/dist/utils/waitFrames.js +0 -1
  534. package/dist/utils/watchDirectoryHandle.js +0 -1
  535. package/dist/utils/watchWindowSize.js +0 -1
  536. package/docs/components/_template.html +0 -77
  537. package/docs/components/accordion.html +0 -124
  538. package/docs/components/card.html +0 -93
  539. package/docs/components/component.html +0 -92
  540. package/docs/components/content-slider.html +0 -195
  541. package/docs/components/dialog.html +0 -247
  542. package/docs/components/directory-viewer.html +0 -92
  543. package/docs/components/focus-capture.html +0 -70
  544. package/docs/components/icon.html +0 -160
  545. package/docs/components/import.html +0 -79
  546. package/docs/components/lazy-component.html +0 -86
  547. package/docs/components/reactive-component.html +0 -71
  548. package/docs/components/reactive-lazy-component.html +0 -71
  549. package/docs/components/resize.html +0 -154
  550. package/docs/components/search.html +0 -104
  551. package/docs/components/show-more.html +0 -125
  552. package/docs/components/side-menu.html +0 -148
  553. package/docs/components/sortable.html +0 -98
  554. package/docs/components/split.html +0 -128
  555. package/docs/components/table.html +0 -314
  556. package/docs/components/tableControls.html +0 -79
  557. package/docs/components/tableCustomFields.html +0 -115
  558. package/docs/components/tableFetchRecords.html +0 -116
  559. package/docs/components/tableFieldSortHide.html +0 -77
  560. package/docs/components/tablePagination.html +0 -102
  561. package/docs/components/tableRecordEditing.html +0 -146
  562. package/docs/components/tableRecordFiltering.html +0 -77
  563. package/docs/components/tableRecordHiding.html +0 -82
  564. package/docs/components/tableRecordSearching.html +0 -77
  565. package/docs/components/tableRecordSelection.html +0 -77
  566. package/docs/components/tableRowControls.html +0 -80
  567. package/docs/components/tableSorting.html +0 -75
  568. package/docs/components/tabs.html +0 -165
  569. package/docs/components/tags.html +0 -96
  570. package/docs/components/theme-switcher.html +0 -76
  571. package/docs/components/timestamp.html +0 -88
  572. package/docs/components/toast.html +0 -330
  573. package/docs/components/toggle.html +0 -157
  574. package/docs/icons/add.svg +0 -1
  575. package/docs/icons/arrow-back.svg +0 -1
  576. package/docs/icons/arrow-down-double.svg +0 -1
  577. package/docs/icons/arrow-down.svg +0 -1
  578. package/docs/icons/arrow-forward.svg +0 -1
  579. package/docs/icons/arrow-up-double.svg +0 -1
  580. package/docs/icons/arrow-up.svg +0 -1
  581. package/docs/icons/cards.svg +0 -1
  582. package/docs/icons/check.svg +0 -1
  583. package/docs/icons/chevron-left.svg +0 -1
  584. package/docs/icons/chevron-right.svg +0 -1
  585. package/docs/icons/close.svg +0 -2
  586. package/docs/icons/compare.svg +0 -1
  587. package/docs/icons/delete.svg +0 -1
  588. package/docs/icons/drag-handle.svg +0 -1
  589. package/docs/icons/drawing2.svg +0 -124
  590. package/docs/icons/edit.svg +0 -1
  591. package/docs/icons/error.svg +0 -1
  592. package/docs/icons/export-file.svg +0 -1
  593. package/docs/icons/file-text.svg +0 -1
  594. package/docs/icons/file.svg +0 -1
  595. package/docs/icons/filter-off.svg +0 -1
  596. package/docs/icons/filter.svg +0 -1
  597. package/docs/icons/first.svg +0 -1
  598. package/docs/icons/folder-clear.svg +0 -1
  599. package/docs/icons/folder-create.svg +0 -1
  600. package/docs/icons/folder-open.svg +0 -1
  601. package/docs/icons/folder.svg +0 -1
  602. package/docs/icons/hide.svg +0 -1
  603. package/docs/icons/image.svg +0 -1
  604. package/docs/icons/label-add.svg +0 -1
  605. package/docs/icons/label.svg +0 -1
  606. package/docs/icons/last.svg +0 -1
  607. package/docs/icons/menu.svg +0 -1
  608. package/docs/icons/mode-auto.svg +0 -1
  609. package/docs/icons/mode-dark.svg +0 -1
  610. package/docs/icons/mode-light.svg +0 -1
  611. package/docs/icons/open-in-browser.svg +0 -1
  612. package/docs/icons/pause.svg +0 -1
  613. package/docs/icons/play.svg +0 -1
  614. package/docs/icons/refresh.svg +0 -1
  615. package/docs/icons/remove.svg +0 -1
  616. package/docs/icons/save.svg +0 -1
  617. package/docs/icons/search.svg +0 -1
  618. package/docs/icons/settings.svg +0 -1
  619. package/docs/icons/storage.svg +0 -1
  620. package/docs/icons/table-visibility.svg +0 -1
  621. package/docs/icons/tag.svg +0 -1
  622. package/docs/icons/tools.svg +0 -1
  623. package/docs/icons/trash-x.svg +0 -1
  624. package/docs/icons/warning.svg +0 -1
  625. package/docs/index.html +0 -21
  626. package/docs/js/nav.inc.js +0 -4
  627. package/docs/kempo/components/Accordion.js +0 -1
  628. package/docs/kempo/components/Card.js +0 -1
  629. package/docs/kempo/components/Collapsible.js +0 -1
  630. package/docs/kempo/components/Component.js +0 -1
  631. package/docs/kempo/components/ContentSlider.js +0 -1
  632. package/docs/kempo/components/Dialog.js +0 -1
  633. package/docs/kempo/components/DirectoryViewer.js +0 -1
  634. package/docs/kempo/components/FocusCapture.js +0 -1
  635. package/docs/kempo/components/Icon.js +0 -1
  636. package/docs/kempo/components/Import.js +0 -1
  637. package/docs/kempo/components/LazyComponent.js +0 -1
  638. package/docs/kempo/components/PersistantCollapsible.js +0 -1
  639. package/docs/kempo/components/PhotoViewer.js +0 -1
  640. package/docs/kempo/components/ReactiveComponent.js +0 -1
  641. package/docs/kempo/components/ReactiveLazyComponent.js +0 -1
  642. package/docs/kempo/components/Resize.js +0 -1
  643. package/docs/kempo/components/Search.js +0 -1
  644. package/docs/kempo/components/ShowMore.js +0 -1
  645. package/docs/kempo/components/SideMenu.js +0 -1
  646. package/docs/kempo/components/Sortable.js +0 -1
  647. package/docs/kempo/components/Split.js +0 -1
  648. package/docs/kempo/components/Stacks.js +0 -1
  649. package/docs/kempo/components/Table.js +0 -1
  650. package/docs/kempo/components/Tabs.js +0 -1
  651. package/docs/kempo/components/Tags.js +0 -1
  652. package/docs/kempo/components/ThemeSwitcher.js +0 -1
  653. package/docs/kempo/components/Timestamp.js +0 -1
  654. package/docs/kempo/components/Toast.js +0 -1
  655. package/docs/kempo/components/Toggle.js +0 -1
  656. package/docs/kempo/components/tableControls/DeleteRecord.js +0 -1
  657. package/docs/kempo/components/tableControls/DeleteSelected.js +0 -1
  658. package/docs/kempo/components/tableControls/Edit.js +0 -1
  659. package/docs/kempo/components/tableControls/ExportCSV.js +0 -1
  660. package/docs/kempo/components/tableControls/ExportJson.js +0 -1
  661. package/docs/kempo/components/tableControls/FieldSortHide.js +0 -1
  662. package/docs/kempo/components/tableControls/Filters.js +0 -1
  663. package/docs/kempo/components/tableControls/FirstPage.js +0 -1
  664. package/docs/kempo/components/tableControls/HiddenCount.js +0 -1
  665. package/docs/kempo/components/tableControls/Hide.js +0 -1
  666. package/docs/kempo/components/tableControls/LastPage.js +0 -1
  667. package/docs/kempo/components/tableControls/NextPage.js +0 -1
  668. package/docs/kempo/components/tableControls/PageSelect.js +0 -1
  669. package/docs/kempo/components/tableControls/PageSize.js +0 -1
  670. package/docs/kempo/components/tableControls/PrevPage.js +0 -1
  671. package/docs/kempo/components/tableControls/Search.js +0 -1
  672. package/docs/kempo/components/tableControls/SelectCount.js +0 -1
  673. package/docs/kempo/components/tableControls/ShowAll.js +0 -1
  674. package/docs/kempo/components/tableControls/ShowHideFields.js +0 -1
  675. package/docs/kempo/components/tableControls/TableControl.js +0 -1
  676. package/docs/kempo/index.js +0 -1
  677. package/docs/kempo/kempo-hljs.css +0 -1
  678. package/docs/kempo/kempo-styles.css +0 -1
  679. package/docs/kempo/kempo-vars.css +0 -1
  680. package/docs/kempo/utils/Server.js +0 -1
  681. package/docs/kempo/utils/cli.js +0 -1
  682. package/docs/kempo/utils/cookie.js +0 -1
  683. package/docs/kempo/utils/debounce.js +0 -1
  684. package/docs/kempo/utils/drag.js +0 -1
  685. package/docs/kempo/utils/element.js +0 -1
  686. package/docs/kempo/utils/files.js +0 -1
  687. package/docs/kempo/utils/formatTimestamp.js +0 -1
  688. package/docs/kempo/utils/fs-utils.js +0 -1
  689. package/docs/kempo/utils/fuzzyMatch.js +0 -1
  690. package/docs/kempo/utils/getPreferredTheme.js +0 -1
  691. package/docs/kempo/utils/loadCss.js +0 -1
  692. package/docs/kempo/utils/loadScript.js +0 -1
  693. package/docs/kempo/utils/minify.js +0 -1
  694. package/docs/kempo/utils/object.js +0 -1
  695. package/docs/kempo/utils/raf.js +0 -1
  696. package/docs/kempo/utils/string.js +0 -1
  697. package/docs/kempo/utils/toFunction.js +0 -1
  698. package/docs/kempo/utils/type.js +0 -1
  699. package/docs/kempo/utils/waitFrames.js +0 -1
  700. package/docs/kempo/utils/watchDirectoryHandle.js +0 -1
  701. package/docs/kempo/utils/watchWindowSize.js +0 -1
  702. package/docs/nav.inc.html +0 -74
  703. package/docs/search.json +0 -400
  704. package/docs/styles/_template.html +0 -26
  705. package/docs/styles/borders-spacing.html +0 -197
  706. package/docs/styles/buttons.html +0 -117
  707. package/docs/styles/colors.html +0 -69
  708. package/docs/styles/displays-layouts.html +0 -162
  709. package/docs/styles/embed-1.html +0 -40
  710. package/docs/styles/inputs.html +0 -93
  711. package/docs/styles/tables.html +0 -147
  712. package/docs/styles/typography.html +0 -120
  713. package/docs/utils/Server.html +0 -119
  714. package/docs/utils/_template.html +0 -77
  715. package/docs/utils/cli.html +0 -86
  716. package/docs/utils/cookie.html +0 -89
  717. package/docs/utils/debounce.html +0 -63
  718. package/docs/utils/drag.html +0 -87
  719. package/docs/utils/element.html +0 -126
  720. package/docs/utils/format-timestamp.html +0 -66
  721. package/docs/utils/fuzzy-match.html +0 -60
  722. package/icons/add.svg +0 -1
  723. package/icons/arrow-back.svg +0 -1
  724. package/icons/arrow-down-double.svg +0 -1
  725. package/icons/arrow-down.svg +0 -1
  726. package/icons/arrow-forward.svg +0 -1
  727. package/icons/arrow-up-double.svg +0 -1
  728. package/icons/arrow-up.svg +0 -1
  729. package/icons/cards.svg +0 -1
  730. package/icons/check.svg +0 -1
  731. package/icons/chevron-left.svg +0 -1
  732. package/icons/chevron-right.svg +0 -1
  733. package/icons/close.svg +0 -2
  734. package/icons/compare.svg +0 -1
  735. package/icons/delete.svg +0 -1
  736. package/icons/drag-handle.svg +0 -1
  737. package/icons/drawing2.svg +0 -124
  738. package/icons/edit.svg +0 -1
  739. package/icons/error.svg +0 -1
  740. package/icons/export-file.svg +0 -1
  741. package/icons/file-text.svg +0 -1
  742. package/icons/file.svg +0 -1
  743. package/icons/filter-off.svg +0 -1
  744. package/icons/filter.svg +0 -1
  745. package/icons/first.svg +0 -1
  746. package/icons/folder-clear.svg +0 -1
  747. package/icons/folder-create.svg +0 -1
  748. package/icons/folder-open.svg +0 -1
  749. package/icons/folder.svg +0 -1
  750. package/icons/hide.svg +0 -1
  751. package/icons/image.svg +0 -1
  752. package/icons/label-add.svg +0 -1
  753. package/icons/label.svg +0 -1
  754. package/icons/last.svg +0 -1
  755. package/icons/menu.svg +0 -1
  756. package/icons/mode-auto.svg +0 -1
  757. package/icons/mode-dark.svg +0 -1
  758. package/icons/mode-light.svg +0 -1
  759. package/icons/open-in-browser.svg +0 -1
  760. package/icons/pause.svg +0 -1
  761. package/icons/play.svg +0 -1
  762. package/icons/refresh.svg +0 -1
  763. package/icons/remove.svg +0 -1
  764. package/icons/save.svg +0 -1
  765. package/icons/search.svg +0 -1
  766. package/icons/settings.svg +0 -1
  767. package/icons/show.svg +0 -1
  768. package/icons/storage.svg +0 -1
  769. package/icons/table-visibility.svg +0 -1
  770. package/icons/tag.svg +0 -1
  771. package/icons/tools.svg +0 -1
  772. package/icons/trash-x.svg +0 -1
  773. package/icons/warning.svg +0 -1
  774. package/scripts/build.js +0 -154
  775. package/scripts/docs.js +0 -47
  776. package/src/components/Accordion.js +0 -182
  777. package/src/components/Card.js +0 -62
  778. package/src/components/Collapsible.js +0 -104
  779. package/src/components/Component.js +0 -110
  780. package/src/components/ContentSlider.js +0 -192
  781. package/src/components/Dialog.js +0 -338
  782. package/src/components/DirectoryViewer.js +0 -363
  783. package/src/components/FocusCapture.js +0 -31
  784. package/src/components/Icon.js +0 -119
  785. package/src/components/Import.js +0 -48
  786. package/src/components/LazyComponent.js +0 -65
  787. package/src/components/PersistantCollapsible.js +0 -44
  788. package/src/components/PhotoViewer.js +0 -358
  789. package/src/components/ReactiveComponent.js +0 -11
  790. package/src/components/ReactiveLazyComponent.js +0 -11
  791. package/src/components/Resize.js +0 -168
  792. package/src/components/Search.js +0 -140
  793. package/src/components/ShowMore.js +0 -102
  794. package/src/components/SideMenu.js +0 -150
  795. package/src/components/Sortable.js +0 -169
  796. package/src/components/Split.js +0 -164
  797. package/src/components/Table.js +0 -935
  798. package/src/components/Tabs.js +0 -349
  799. package/src/components/Tags.js +0 -224
  800. package/src/components/ThemeSwitcher.js +0 -100
  801. package/src/components/Timestamp.js +0 -28
  802. package/src/components/Toast.js +0 -424
  803. package/src/components/Toggle.js +0 -137
  804. package/src/components/tableControls/DeleteRecord.js +0 -43
  805. package/src/components/tableControls/DeleteSelected.js +0 -70
  806. package/src/components/tableControls/Edit.js +0 -84
  807. package/src/components/tableControls/ExportCSV.js +0 -91
  808. package/src/components/tableControls/ExportJson.js +0 -62
  809. package/src/components/tableControls/FieldSortHide.js +0 -77
  810. package/src/components/tableControls/Filters.js +0 -129
  811. package/src/components/tableControls/FirstPage.js +0 -69
  812. package/src/components/tableControls/HiddenCount.js +0 -37
  813. package/src/components/tableControls/Hide.js +0 -40
  814. package/src/components/tableControls/LastPage.js +0 -67
  815. package/src/components/tableControls/NextPage.js +0 -69
  816. package/src/components/tableControls/PageSelect.js +0 -89
  817. package/src/components/tableControls/PageSize.js +0 -70
  818. package/src/components/tableControls/PrevPage.js +0 -69
  819. package/src/components/tableControls/Search.js +0 -49
  820. package/src/components/tableControls/SelectCount.js +0 -42
  821. package/src/components/tableControls/ShowAll.js +0 -37
  822. package/src/components/tableControls/TableControl.js +0 -51
  823. package/src/kempo-hljs.css +0 -146
  824. package/src/kempo-styles.css +0 -952
  825. package/src/kempo-vars.css +0 -159
  826. package/src/utils/Server.js +0 -189
  827. package/src/utils/cli.js +0 -119
  828. package/src/utils/cookie.js +0 -20
  829. package/src/utils/debounce.js +0 -9
  830. package/src/utils/drag.js +0 -74
  831. package/src/utils/element.js +0 -81
  832. package/src/utils/formatTimestamp.js +0 -27
  833. package/src/utils/fs-utils.js +0 -41
  834. package/src/utils/fuzzyMatch.js +0 -60
  835. package/src/utils/getPreferredTheme.js +0 -1
  836. package/src/utils/loadCss.js +0 -10
  837. package/src/utils/loadScript.js +0 -10
  838. package/src/utils/object.js +0 -198
  839. package/src/utils/raf.js +0 -10
  840. package/src/utils/string.js +0 -66
  841. package/src/utils/toFunction.js +0 -24
  842. package/src/utils/type.js +0 -13
  843. package/src/utils/waitFrames.js +0 -17
  844. package/src/utils/watchDirectoryHandle.js +0 -18
  845. package/src/utils/watchWindowSize.js +0 -15
  846. package/test/components/SuiteList.js +0 -26
  847. package/test/components/Test.js +0 -357
  848. package/test/index.html +0 -49
  849. package/test/index.js +0 -36
  850. package/test/suite.html +0 -45
  851. package/test/suites.inc.html +0 -4
  852. package/test/tests/components/Component.test.js +0 -138
  853. package/test/tests/utils/cli.test.js +0 -113
  854. package/test/tests/utils/cookie.test.js +0 -87
  855. package/test/tests/utils/debounce.test.js +0 -71
  856. /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>