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
@@ -1,935 +0,0 @@
1
- import Component from './Component.js';
2
- import { toTitleCase } from '../utils/string.js';
3
- import { onEvent, offEvent, dispatchEvent } from '../utils/element.js';
4
-
5
- const selected = Symbol('selected');
6
- const hidden = Symbol('hidden');
7
- const index = Symbol('index');
8
- const editing = Symbol('editing');
9
-
10
- export default class Table extends Component {
11
- constructor({
12
- records = [],
13
- fields = [],
14
- filters = [],
15
- enablePages = false,
16
- pageSize = 50,
17
- pageSizeOptions = [10, 25, 50, 100, 500],
18
- currentPage = 1,
19
- enableSelection = false,
20
- enableSorting = false
21
- } = {}) {
22
- super();
23
-
24
- this.registerAttributes({
25
- enablePages,
26
- pageSize,
27
- currentPage,
28
- pageSizeOptions,
29
- enableSelection,
30
- enableSorting
31
- });
32
-
33
- this.registerProps({
34
- fields: fields,
35
- records: records,
36
- filters: filters,
37
- sort: [],
38
- columnSizes: {},
39
- fetchPending: false
40
- });
41
- }
42
- async render(force){
43
- if(await super.render(force)){
44
- this.setData({
45
- records: this.records,
46
- fields: this.fields,
47
- filters: this.filters
48
- });
49
- return true;
50
- }
51
- return false;
52
- }
53
-
54
-
55
- /*
56
- Render Functions
57
- */
58
-
59
- renderFields(){
60
- if(!this.rendered) return;
61
- this.calculateColumnSizes();
62
- this.hasTopControls()?this.setAttribute('top-controls', 'true'):this.removeAttribute('top-controls');
63
- this.hasBottomControls()?this.setAttribute('bottom-controls', 'true'):this.removeAttribute('bottom-controls');
64
-
65
- const $fields = this.shadowRoot.getElementById('fields');
66
- $fields.innerHTML = '';
67
-
68
- if(this.enableSelection){
69
- const $selectDiv = document.createElement('div');
70
- $selectDiv.classList.add('field', 'controls', 'cell', 'field-select');
71
- $selectDiv.style.width = '40px';
72
- $selectDiv.innerHTML = `<input type="checkbox" id="select-all" />`;
73
- $fields.appendChild($selectDiv);
74
- }
75
- if(this.hasBeforeControls()){
76
- const $beforeDiv = document.createElement('div');
77
- $beforeDiv.classList.add('field', 'cell', 'field-before-controls');
78
- $beforeDiv.style.width = this.columnSizes.beforeControls + 'px';
79
- $fields.appendChild($beforeDiv);
80
- }
81
- this.fields.forEach( ({name, label, hidden}) => {
82
- if (hidden) return; // Skip hidden fields
83
- const $fieldDiv = document.createElement('div');
84
- $fieldDiv.classList.add('field', 'cell');
85
- $fieldDiv.style.width = this.columnSizes[name] + 'px';
86
- $fieldDiv.innerHTML = label;
87
- if (this.enableSorting) {
88
- $fieldDiv.style.cursor = 'pointer';
89
- const currentSort = this.sort.find(s => s.name === name);
90
- if (currentSort) {
91
- $fieldDiv.classList.add(currentSort.asc ? 'sort-asc' : 'sort-desc');
92
- const $icon = document.createElement('k-icon');
93
- $icon.classList.add('icon-sort');
94
- $icon.setAttribute('name', currentSort.asc ? 'arrow-down' : 'arrow-up');
95
- $fieldDiv.appendChild($icon);
96
- }
97
- $fieldDiv.addEventListener('click', () => {
98
- const currentSort = this.sort.find(s => s.name === name);
99
- const asc = currentSort ? !currentSort.asc : true;
100
- this.sortBy(name, asc);
101
- });
102
- }
103
- $fields.appendChild($fieldDiv);
104
- });
105
- if(this.hasAfterControls()){
106
- const $afterDiv = document.createElement('div');
107
- $afterDiv.classList.add('field', 'cell', 'field-after-controls');
108
- $afterDiv.style.width = this.columnSizes.afterControls + 'px';
109
- $fields.appendChild($afterDiv);
110
- }
111
-
112
- $fields.style.width =
113
- this.shadowRoot.getElementById('top').style.width =
114
- this.shadowRoot.getElementById('bottom').style.width =
115
- this.shadowRoot.getElementById('records').style.width = this.columnSizes.total + 'px';
116
-
117
- if (this.enableSelection) {
118
- const selectAllCheckbox = this.shadowRoot.getElementById('select-all');
119
- selectAllCheckbox.addEventListener('change', () => {
120
- if (selectAllCheckbox.checked) {
121
- this.selectAllOnPage();
122
- } else {
123
- this.deselectAllOnPage();
124
- }
125
- });
126
- onEvent(this, 'selectionChange pageChange', () => {
127
- if(this.allOnPageSelected()){
128
- selectAllCheckbox.checked = true;
129
- } else {
130
- selectAllCheckbox.checked = false;
131
- }
132
- });
133
- }
134
- }
135
-
136
- renderRecords() {
137
- if (!this.rendered) return;
138
- const $records = this.shadowRoot.getElementById('records');
139
- $records.innerHTML = '';
140
-
141
- let displayedRecords = this.getDisplayedRecords(),
142
- start = 0,
143
- end = this.pageSize;
144
-
145
- if(this.enablePages){
146
- start = (this.currentPage - 1) * this.pageSize;
147
- end = start + this.pageSize;
148
- displayedRecords = displayedRecords.slice(start, end);
149
- }
150
-
151
- let fetchStart,
152
- fetchCount = 0;
153
- displayedRecords.forEach((record, index) => {
154
- if(record !== null){
155
- $records.appendChild(this.renderRecord(record));
156
- } else {
157
- if(!fetchStart) fetchStart = start + index;
158
- fetchCount++;
159
- const $div = document.createElement('div');
160
- $div.classList.add('record', 'fetching');
161
- $div.innerHTML = '<div class="cell">Loading...</div>';
162
- $records.appendChild($div);
163
- }
164
- });
165
- if(fetchStart && !this.fetchPending){
166
- dispatchEvent(this, 'fetchRecords', {
167
- start: fetchStart,
168
- count: fetchCount
169
- });
170
- }
171
- }
172
-
173
- renderRecord(record){
174
- const $record = document.createElement('div');
175
- $record.classList.add('record');
176
- $record.dataset.index = record[index];
177
- if (this.enableSelection) {
178
- const $selectionDiv = document.createElement('div');
179
- $selectionDiv.style.width = '40px';
180
- $selectionDiv.classList.add('cell', 'selection', 'controls');
181
- const $checkbox = document.createElement('input');
182
- $checkbox.type = 'checkbox';
183
- $checkbox.checked = record[selected];
184
- $checkbox.addEventListener('change', (event) => {
185
- record[selected] = !!event.target.checked;
186
- dispatchEvent(this, 'selectionChange');
187
- });
188
- $selectionDiv.appendChild($checkbox);
189
- $record.appendChild($selectionDiv);
190
- }
191
- if (this.hasBeforeControls()) {
192
- $record.appendChild(this.renderBeforeControls());
193
- }
194
- this.fields.forEach(({ name, formatter, calculator, type, editor, hidden }) => {
195
- if (hidden) return; // Skip hidden fields
196
- const $div = document.createElement('div');
197
- $div.classList.add('cell');
198
- $div.dataset.field = name;
199
- $div.style.width = this.columnSizes[name] + 'px';
200
- let value = record[name] || '';
201
- if(record[editing]){
202
- $record.setAttribute('editing', true);
203
- if (calculator) {
204
- $div.appendChild(Table.editors.calculated(calculator(record, this)));
205
- } else if(editor){
206
- $div.appendChild(editor(value));
207
- } else {
208
- let editorGen = Table.editors[type || typeof value];
209
- if(!editorGen){
210
- editorGen = Table.editors.string;
211
- }
212
- $div.appendChild(editorGen(value));
213
- }
214
- } else {
215
- if (calculator) {
216
- $div.innerHTML = calculator(record, this);
217
- } else if (formatter) {
218
- $div.innerHTML = formatter(value);
219
- } else {
220
- $div.innerHTML = value;
221
- }
222
- }
223
- $record.appendChild($div);
224
- });
225
- if (this.hasAfterControls()) {
226
- $record.appendChild(this.renderAfterControls());
227
- }
228
- return $record;
229
- }
230
-
231
- renderBeforeControls(){
232
- const $div = document.createElement('div');
233
- $div.style.width = this.columnSizes.beforeControls + 'px';
234
- $div.classList.add('cell', 'controls', 'controls-before');
235
- this.querySelectorAll('[slot="before"]').forEach($control => {
236
- $div.appendChild($control.cloneNode(true));
237
- });
238
- return $div;
239
- }
240
-
241
- renderAfterControls(){
242
- const $div = document.createElement('div');
243
- $div.style.width = this.columnSizes.afterControls + 'px';
244
- $div.classList.add('cell', 'controls', 'controls-after');
245
- this.querySelectorAll('[slot="after"]').forEach($control => {
246
- $div.appendChild($control.cloneNode(true));
247
- });
248
- return $div;
249
- }
250
-
251
-
252
-
253
-
254
-
255
- hasBeforeControls(){
256
- return !!this.querySelector('[slot="before"]');
257
- }
258
-
259
- hasAfterControls(){
260
- return !!this.querySelector('[slot="after"]');
261
- }
262
-
263
- hasTopControls(){
264
- return !!this.querySelector('[slot="top"]');
265
- }
266
-
267
- hasBottomControls(){
268
- return !!this.querySelector(':scope > :not([slot])'); // bottom is default slot, detect direct child with no slot
269
- }
270
-
271
- editRecord(record){
272
- record[editing] = true;
273
- const $currentRecord = this.shadowRoot.querySelector(`.record[data-index="${record[index]}"]`);
274
- const $newRecord = this.renderRecord(record);
275
- $currentRecord.replaceWith($newRecord);
276
- dispatchEvent(this, 'editingChange');
277
- }
278
-
279
- saveEditedRecord(record){
280
- record[editing] = false;
281
- const $currentRecord = this.shadowRoot.querySelector(`.record[data-index="${record[index]}"]`);
282
- $currentRecord.querySelectorAll('.cell').forEach(($cell) => {
283
- const field = $cell.dataset.field;
284
- const fieldDef = this.fields.find(f => f.name === field);
285
- if(fieldDef && !fieldDef.calculator){ // calculated fields cannot be udated
286
- const $input = $cell.children.length === 1 ? $cell.firstChild : $cell.querySelector('input, select');
287
- if ($input) {
288
- record[field] = $input.value;
289
- }
290
- }
291
- });
292
- $currentRecord.replaceWith(this.renderRecord(record));
293
- }
294
-
295
- cancelEditedRecord(record){
296
- record[editing] = false;
297
- this.shadowRoot.querySelector(`.record[data-index="${record[index]}"]`).replaceWith(this.renderRecord(record));
298
- }
299
-
300
- recordIsEditing(record){
301
- return record[editing];
302
- }
303
-
304
- getCurrentPage() {
305
- return this.currentPage;
306
- }
307
-
308
- getTotalPages() {
309
- return Math.ceil(this.getDisplayedRecords().length / this.pageSize);
310
- }
311
-
312
- setPage(page) {
313
- if (page < 1 || page > this.getTotalPages()) return;
314
- this.currentPage = page;
315
- this.renderRecords();
316
- // Trigger page change event
317
- dispatchEvent(this, 'pageChange');
318
- }
319
-
320
- firstPage(){
321
- if(this.currentPage !== 1){
322
- this.setPage(1);
323
- }
324
- }
325
-
326
- nextPage() {
327
- if (this.currentPage < this.getTotalPages()) {
328
- this.setPage(this.currentPage + 1);
329
- }
330
- }
331
-
332
- prevPage() {
333
- if (this.currentPage > 1) {
334
- this.setPage(this.currentPage - 1);
335
- }
336
- }
337
-
338
- lastPage() {
339
- if (this.currentPage !== this.getTotalPages()) {
340
- this.setPage(this.getTotalPages());
341
- }
342
- }
343
-
344
- setPageSize(pageSize) {
345
- this.pageSize = pageSize;
346
- this.currentPage = 1;
347
- this.renderRecords();
348
- // Trigger page size change event
349
- dispatchEvent(this, 'pageSizeChange');
350
- }
351
-
352
- setData({
353
- records = false,
354
- fields = false,
355
- pageSize = false,
356
- pageSizeOptions = false,
357
- currentPage = false,
358
- enableSelection
359
- } = {}) {
360
- let rerender = false,
361
- pageCountBefore = this.getTotalPages(),
362
- pageBefore = this.currentPage;
363
- if(records){
364
- this.records = records.map(r=>({...r}));
365
- this.records.forEach((record, idx) => {
366
- record[index] = idx;
367
- record[selected] = false;
368
- record[hidden] = false;
369
- record[editing] = false;
370
- });
371
- this.fields = fields || Table.extractFieldsFromRecords(this.records);
372
- rerender = true;
373
- }
374
- if (pageSize) {
375
- this.pageSize = pageSize;
376
- rerender = true;
377
- }
378
- if (pageSizeOptions) {
379
- this.pageSizeOptions = pageSizeOptions;
380
- }
381
- if(currentPage){
382
- this.currentPage = currentPage;
383
- rerender = true;
384
- }
385
- if(enableSelection !== undefined){
386
- this.enableSelection = enableSelection;
387
- rerender = true;
388
- }
389
- if(rerender){
390
- this.renderFields();
391
- this.renderRecords();
392
- }
393
- const newPageCount = this.getTotalPages();
394
- if(newPageCount !== pageCountBefore){
395
- dispatchEvent(this, 'pageCountChanged', { totalPages: this.getTotalPages() });
396
- }
397
- if(pageBefore > newPageCount){
398
- this.setPage(newPageCount);
399
- }
400
- }
401
-
402
- setRecords(records, fields) {
403
- let pageCountBefore = this.getTotalPages(),
404
- pageBefore = this.currentPage;
405
-
406
- this.records = records.map(r=>({...r}));
407
- this.records.forEach((record, idx) => {
408
- record[index] = idx;
409
- record[selected] = false;
410
- record[hidden] = false;
411
- record[editing] = false;
412
- });
413
- this.fields = fields || Table.extractFieldsFromRecords(this.records);
414
- this.renderFields();
415
- this.renderRecords();
416
- dispatchEvent(this, 'recordsSet', { records });
417
- const newPageCount = this.getTotalPages();
418
- if(newPageCount !== pageCountBefore){
419
- dispatchEvent(this, 'pageCountChanged', { totalPages: this.getTotalPages() });
420
- }
421
- if(pageBefore > newPageCount){
422
- this.setPage(newPageCount);
423
- }
424
- }
425
-
426
- setupFetchRecords(totalRecords, callback) {
427
- const previousLength = this.records.length;
428
- if (previousLength < totalRecords) {
429
- this.records.length = totalRecords;
430
- this.records.fill(null, previousLength);
431
- }
432
-
433
- onEvent(this, 'fetchRecords', async (event) => {
434
- if(this.fetchPending) return;
435
- this.fetchPending = true;
436
- const { start, count } = event.detail;
437
- const records = await callback(start, count);
438
- this.records.splice(start, records.length, ...records);
439
- this.fetchPending = false;
440
- this.renderRecords();
441
- });
442
- }
443
-
444
- addRecord(record) {
445
- record[selected] = false;
446
- record[hidden] = false;
447
- record[index] = this.records.length;
448
- this.records.push(record);
449
- this.renderRecords();
450
- dispatchEvent(this, 'recordAdded', { record });
451
- }
452
-
453
- updateRecord(record, newData) {
454
- let updated = false;
455
- let originalRecord = this.records.find(r => r === record);
456
- if (!originalRecord && record[index] !== undefined) {
457
- originalRecord = this.records[record[index]];
458
- }
459
- Object.keys(newData).forEach(key => {
460
- if (originalRecord.hasOwnProperty(key)) {
461
- originalRecord[key] = newData[key];
462
- updated = true;
463
- }
464
- });
465
- if(updated){
466
- const start = (this.currentPage - 1) * this.pageSize;
467
- const end = start + this.pageSize;
468
- if (
469
- !this.enablePages ||
470
- (originalRecord[index] >= start && originalRecord[index] < end)
471
- ) {
472
- this.renderRecords();
473
- }
474
- }
475
- }
476
-
477
- deleteRecord(record) {
478
- let originalRecord = this.records.find(r => r === record),
479
- totalPagesBefore = this.getTotalPages();
480
- if (!originalRecord && record[index] !== undefined) {
481
- originalRecord = this.records[record[index]];
482
- }
483
- if (originalRecord) {
484
- const recordIndex = this.records.indexOf(originalRecord);
485
- this.records.splice(recordIndex, 1);
486
- // Update the index of remaining records
487
- this.records.forEach((rec, idx) => {
488
- rec[index] = idx;
489
- });
490
- this.renderRecords();
491
- dispatchEvent(this, 'selectionChange');
492
- dispatchEvent(this, 'recordDeleted', { index: recordIndex });
493
- const totalPages = this.getTotalPages();
494
- if (this.currentPage > totalPages) {
495
- this.setPage(totalPages);
496
- }
497
- if(totalPages !== totalPagesBefore){
498
- dispatchEvent(this, 'pageCountChanged', { totalPages });
499
- }
500
- }
501
- }
502
-
503
- deleteSelected() {
504
- let totalPagesBefore = this.getTotalPages();
505
- const selectedRecords = this.getSelectedRecords();
506
- selectedRecords.forEach(record => {
507
- let originalRecord = this.records.find(r => r === record);
508
- if (!originalRecord && record[index] !== undefined) {
509
- originalRecord = this.records[record[index]];
510
- }
511
- if (originalRecord) {
512
- const recordIndex = this.records.indexOf(originalRecord);
513
- this.records.splice(recordIndex, 1);
514
- }
515
- });
516
- this.records.forEach((rec, idx) => {
517
- rec[index] = idx;
518
- });
519
- this.renderRecords();
520
- const totalPages = this.getTotalPages();
521
- if (this.currentPage > totalPages) {
522
- this.setPage(totalPages);
523
- }
524
- if(totalPages !== totalPagesBefore){
525
- dispatchEvent(this, 'pageCountChanged', { totalPages });
526
- }
527
- dispatchEvent(this, 'selectionChange');
528
- }
529
-
530
- getSelectedRecords() {
531
- const selectedRecords = this.records.filter(record => {
532
- const isSelected = record[selected];
533
- return isSelected;
534
- });
535
- return selectedRecords;
536
- }
537
-
538
- selectAllOnPage() {
539
- const start = (this.currentPage - 1) * this.pageSize;
540
- const end = Math.min(start + this.pageSize, this.records.length);
541
- for (let i = start; i < end; i++) {
542
- this.records[i][selected] = true;
543
- }
544
- this.renderRecords();
545
- setTimeout(() => {
546
- dispatchEvent(this, 'selectionChange');
547
- }, 0);
548
- }
549
-
550
- deselectAllOnPage() {
551
- const start = (this.currentPage - 1) * this.pageSize;
552
- const end = Math.min(start + this.pageSize, this.records.length);
553
- for (let i = start; i < end; i++) {
554
- this.records[i][selected] = false;
555
- }
556
- this.renderRecords();
557
- setTimeout(() => {
558
- dispatchEvent(this, 'selectionChange');
559
- }, 0);
560
- }
561
-
562
- allOnPageSelected() {
563
- const start = (this.currentPage - 1) * this.pageSize;
564
- const end = Math.min(start + this.pageSize, this.records.length);
565
- for (let i = start; i < end; i++) {
566
- if (!this.records[i][selected]) {
567
- return false;
568
- }
569
- }
570
- return true;
571
- }
572
-
573
- sortBy(field, asc = true) {
574
- this.sort = this.sort.filter(item => item.name !== field);
575
- this.sort.push({ name: field, asc });
576
- this.renderFields(); // Re-render fields to update sort classes and icons
577
- this.renderRecords();
578
- }
579
-
580
- hideRecord(record) {
581
- let originalRecord = this.records.find(r => r === record);
582
- if (!originalRecord && record[index] !== undefined) {
583
- originalRecord = this.records[record[index]];
584
- }
585
- if (originalRecord) {
586
- originalRecord[hidden] = true;
587
- this.renderRecords();
588
- dispatchEvent(this, 'recordHidden');
589
- }
590
- }
591
-
592
- showRecord(record) {
593
- let originalRecord = this.records.find(r => r === record);
594
- if (!originalRecord && record[index] !== undefined) {
595
- originalRecord = this.records[record[index]];
596
- }
597
- if (originalRecord) {
598
- originalRecord[hidden] = false;
599
- this.renderRecords();
600
- dispatchEvent(this, 'recordShown');
601
- }
602
- }
603
-
604
- showAllRecords() {
605
- this.records.forEach(record => {
606
- record[hidden] = false;
607
- });
608
- if(this.filters.length){
609
- this.filters = [];
610
- dispatchEvent(this, 'filterRemoved filterChange');
611
- }
612
- this.renderRecords();
613
- dispatchEvent(this, 'recordShown allRecordsShown');
614
- }
615
-
616
- addFilter(field, condition, value) {
617
- this.filters.push({ field, condition, value });
618
- dispatchEvent(this, 'filterAdded filterChange');
619
- this.renderRecords();
620
- }
621
-
622
- removeFilter(field, condition, value, rerender = true) {
623
- const filterIndex = this.filters.findIndex(f => f.field === field && f.condition === condition && f.value === value);
624
- if (filterIndex !== -1) {
625
- this.records.forEach(record => {
626
- if(!this.testFilter(record, field, condition, value)){
627
- record[hidden] = false;
628
- }
629
- });
630
- this.filters.splice(filterIndex, 1);
631
- dispatchEvent(this, 'filterRemoved filterChange');
632
- if(rerender) this.renderRecords();
633
- }
634
- }
635
-
636
- testFilter(record, field, condition, value) {
637
- const recordValue = record[field];
638
- switch (condition) {
639
- case 'equals':
640
- return recordValue === value;
641
- case 'not-equals':
642
- return recordValue !== value;
643
- case 'contains':
644
- return recordValue.includes(value);
645
- case 'not-contains':
646
- return !recordValue.includes(value);
647
- case 'greater-than':
648
- return recordValue > value;
649
- case 'less-than':
650
- return recordValue < value;
651
- case 'greater-than-or-equal':
652
- return recordValue >= value;
653
- case 'less-than-or-equal':
654
- return recordValue <= value;
655
- default:
656
- return true;
657
- }
658
- }
659
-
660
- removeAllFilters() {
661
- if(this.filters.length){
662
- this.filters.forEach(({ field, condition, value }) => {
663
- this.removeFilter(field, condition, value, false);
664
- });
665
- this.renderRecords();
666
- }
667
- }
668
-
669
- search(term) {
670
- const t = term.trim().toLowerCase();
671
- let changed = false;
672
- this.records.forEach(record => {
673
- if (record[hidden]) return;
674
- let match = false;
675
- this.fields.forEach(({ name }) => {
676
- const val = record[name]?.toString().toLowerCase() || '';
677
- if (val.includes(t)) {
678
- match = true;
679
- }
680
- });
681
- if (record[hidden] !== !match) {
682
- record[hidden] = !match;
683
- changed = true;
684
- }
685
- });
686
- if (changed) {
687
- dispatchEvent(this, 'recordHidden');
688
- this.renderRecords();
689
- }
690
- dispatchEvent(this, 'search', { term });
691
- }
692
-
693
- getDisplayedRecords() {
694
- this.filters.forEach(({ field, condition, value }) => {
695
- this.records.forEach(record => {
696
- if (!this.testFilter(record, field, condition, value)) {
697
- record[hidden] = true;
698
- }
699
- });
700
- });
701
-
702
- let displayedRecords = this.records.filter(record => record === null || !record[hidden]);
703
-
704
- this.sort.forEach(({ name, asc }) => {
705
- displayedRecords.sort((a, b) => {
706
- if (a[name] < b[name]) return asc ? -1 : 1;
707
- if (a[name] > b[name]) return asc ? 1 : -1;
708
- return 0;
709
- });
710
- });
711
-
712
- return displayedRecords;
713
- }
714
-
715
- getHiddenRecords() {
716
- return this.records.filter(record => record[hidden]);
717
- }
718
-
719
- calculateColumnSizes() {
720
- this.columnSizes = {};
721
- this.columnSizes.total = 0;
722
- if(this.enableSelection) this.columnSizes.total += 40;
723
- this.columnSizes.beforeControls = Array.from(this.querySelectorAll('[slot="before"]')).reduce((total, el) => total + (el.maxWidth || 40), 0);
724
- this.columnSizes.afterControls = Array.from(this.querySelectorAll('[slot="after"]')).reduce((total, el) => total + (el.maxWidth || 40), 0);
725
- if(this.hasBeforeControls()) this.columnSizes.total += this.columnSizes.beforeControls;
726
- if(this.hasAfterControls()) this.columnSizes.total += this.columnSizes.afterControls;
727
-
728
- this.fields.forEach(field => {
729
- if (field.size) {
730
- this.columnSizes[field.name] = field.size;
731
- this.columnSizes.total += field.size;
732
- } else {
733
- let maxLength = 0;
734
- this.records.slice(0, 100).forEach(record => {
735
- let value = record[field.name];
736
- if (field.calculator) {
737
- value = field.calculator(record, this);
738
- }
739
- if (field.formatter) {
740
- value = field.formatter(value);
741
- }
742
- if (value && value.toString().length > maxLength) {
743
- maxLength = value.toString().length;
744
- }
745
- });
746
- this.columnSizes[field.name] = Math.max((maxLength * 10 + 32), 128);
747
- if(!field.hidden) this.columnSizes.total += this.columnSizes[field.name];
748
- }
749
- });
750
- return this.columnSizes;
751
- }
752
-
753
- setFieldHiddenState(fieldName, hidden) {
754
- const field = this.fields.find(f => f.name === fieldName);
755
- if (field) {
756
- field.hidden = hidden;
757
- this.calculateColumnSizes();
758
- this.renderFields();
759
- this.renderRecords();
760
- dispatchEvent(this, 'fieldVisibilityChanged ' + (hidden ? 'fieldHidden' : 'fieldShown'), { field });
761
- }
762
- }
763
-
764
- hideField(fieldName) {
765
- this.setFieldHiddenState(fieldName, true);
766
- }
767
-
768
- showField(fieldName) {
769
- this.setFieldHiddenState(fieldName, false);
770
- }
771
-
772
- reorderFields(newOrder) {
773
- const newFields = [];
774
- newOrder.forEach(fieldName => {
775
- const field = this.fields.find(f => f.name === fieldName);
776
- if (field) {
777
- newFields.push(field);
778
- }
779
- });
780
- this.fields = newFields;
781
- this.renderFields();
782
- this.renderRecords();
783
- }
784
-
785
- /* Shadow DOM */
786
- get shadowTemplate(){
787
- return /*html*/`
788
- <div id="wrapper">
789
- <div id="top"><slot name="top"></slot></div>
790
- <div id="table">
791
- <div id="fields"></div>
792
- <div id="records"></div>
793
- </div>
794
- <div id="bottom">${super.shadowTemplate}</div>
795
- </div>
796
- <div style="display: none">
797
- <slot name="before"></slot>
798
- <slot name="after"></slot>
799
- </div>
800
- `;
801
- }
802
-
803
- get shadowStyles(){
804
- return /*css*/`
805
- ${super.shadowStyles}
806
- :host {
807
- display: block;
808
- width: 100%;
809
- overflow: auto;
810
- margin-bottom: var(--spacer);
811
- }
812
- #wrapper {
813
- width: min-content;
814
- border: 1px solid var(--c_border);
815
- border-radius: var(--radius);
816
- }
817
- #table {
818
- width: min-content;
819
- }
820
- #fields,
821
- .record {
822
- display: flex;
823
- }
824
- #fields {
825
- background-color: var(--c_bg__alt);
826
- border-bottom: 1px solid var(--c_border);
827
- }
828
- .record:not([editing="true"]) .cell:not(.controls),
829
- #fields .cell:not(.controls) {
830
- padding: calc(0.5 * var(--spacer)) var(--spacer);
831
- }
832
- .cell:not(:first-child) {
833
- border-left: 1px solid var(--c_border);
834
- }
835
- .record:not(:last-child) .cell {
836
- border-bottom: 1px solid var(--c_border);
837
- }
838
- #top, #bottom {
839
- display: flex;
840
- width: 100%;
841
- }
842
- #top slot {
843
- display: block;
844
- width: 100%;
845
- border-bottom: 1px solid var(--c_border);
846
- }
847
- #bottom slot {
848
- display: block;
849
- width: 100%;
850
- border-top: 1px solid var(--c_border);
851
- }
852
- :host(:not([top-controls])) #top,
853
- :host(:not([bottom-controls])) #bottom {
854
- display: none;
855
- }
856
- .field-select,
857
- .selection {
858
- display: flex;
859
- justify-content: center;
860
- align-items: center;
861
- }
862
- .field-select input,
863
- .selection input {
864
- width: 1.25rem;
865
- height: 1.25rem;
866
- }
867
- .icon-sort {
868
- float: right;
869
- opacity: 0.5;
870
- }
871
- `;
872
- }
873
-
874
-
875
- /* Static Methods */
876
- static extractFieldsFromRecords(records, recordLimit = 100){
877
- const names = new Set();
878
- records.slice(0, recordLimit).forEach( record => {
879
- Object.keys(record).forEach( name => names.add(name) )
880
- });
881
- return [...names].map(name=>({name,label:toTitleCase(name)}));
882
- };
883
-
884
- /* Static Members */
885
- static format(value){
886
- const f = Array.isArray(value) ? Table.formatters.array : Table.formatters[typeof value];
887
- return f(value);
888
- };
889
-
890
- static formatters = {
891
- string: v=>v,
892
- number: v=>`${v}`,
893
- date: v=>v.toLocaleDateString(),
894
- boolean: v=>v ? 'True' : 'False',
895
- array: v=>v.map(i=>Table.format(i)).join(', '),
896
- 'undefined': v=>'',
897
- 'null': v=>'<code>null</code>'
898
- };
899
-
900
- static editors = {
901
- string: (value) => {
902
- const $i = document.createElement('input');
903
- $i.value = value;
904
- return $i;
905
- },
906
- number: (value) => {
907
- const $i = document.createElement('input');
908
- $i.type = 'number';
909
- $i.value = value;
910
- return $i;
911
- },
912
- date: (value) => {
913
- const $i = document.createElement('input');
914
- $i.type = 'date';
915
- $i.value = value;
916
- return $i;
917
- },
918
- boolean: (value) => {
919
- const $i = document.createElement('select');
920
- $i.innerHTML = `
921
- <option value="true" ${value ? 'selected' : ''}>True</option>
922
- <option value="false" ${!value ? 'selected' : ''}>False</option>
923
- `;
924
- $i.value = value;
925
- return $i;
926
- },
927
- calculated: (value) => {
928
- const $i = document.createElement('input');
929
- $i.disabled = true;
930
- $i.value = value;
931
- return $i;
932
- }
933
- };
934
- }
935
- window.customElements.define('k-table', Table);