kempo 4.2.3 → 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 +0,0 @@
1
- import LazyComponent from"./LazyComponent.js";import"./Icon.js";import"./FocusCapture.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";export default class SideMenu extends LazyComponent{constructor(){super(),this.registerAttribute("opened",!1),this.registerAttribute("overlayClose",!0),this.registerProps({_overlayClick:()=>{this.overlayClose&&this.close()}})}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("overlay"),"click",this._overlayClick)}attributeChangedCallback(n,e,t){super.attributeChangedCallback(n,e,t),"opened"===n&&dispatchEvent(this,"true"===t?"change open":"change close")}render(n){super.render(n),onEvent(this.shadowRoot.getElementById("overlay"),"click",this._overlayClick)}open(){this.opened=!0}close(){this.opened=!1}toggle(){this.opened?this.close():this.open(),dispatchEvent(this,"toggle")}get shadowTemplate(){return`\n <k-focus-capture>\n <div id="container">\n <button id="overlay" class="no-btn">\n <k-icon id="overlay-x" name="close"></k-icon>\n </button>\n <div id="menu">\n ${super.shadowTemplate}\n </div>\n </div>\n </k-focus-capture>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n --bg: var(--c_bg);\n --width: 20rem;\n\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n max-width: 100%;\n height: 100vh;\n z-index: 100;\n pointer-events: none;\n }\n :host([opened]) {\n pointer-events: auto;\n }\n k-focus-capture {\n width: 100%;\n height: 100%;\n }\n #container {\n position: relative;\n width: 100%;\n height: 100%;\n opacity: 0;\n transition: opacity var(--animation_ms, 256ms);\n }\n :host([opened]) #container {\n opacity: 1;\n }\n #overlay {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background: var(--overlay, rgba(0, 0, 0, 0.5));\n }\n #overlay-x {\n position: absolute;\n top: var(--spacer_h);\n right: var(--spacer_h);\n font-size: 1.75rem;\n cursor: pointer;\n color: var(--tc_light);\n }\n :host([overlay-close="false"]) #overlay-x {\n display: none;\n }\n :host([overlay-close="false"]) #overlay {\n cursor: default;\n }\n #menu {\n position: absolute;\n width: var(--width);\n max-width: calc(100vw - 6rem);\n height: 100vh;\n overflow-y: auto;\n left: calc(var(--width) * -1);\n top: 0;\n background: var(--bg);\n transition: left var(--animation_ms, 256ms);\n padding: var(--menu_padding, var(--spacer))\n }\n :host([opened]) #menu {\n left: 0;\n }\n :host([side="right"]) #menu {\n left: auto;\n transition: right var(--animation_ms, 256ms);\n right: calc(var(--width) * -1);\n }\n :host([opened][side="right"]) #menu {\n right: 0;\n }\n :host([side="right"]) #overlay-x {\n right: auto;\n left: var(--spacer_h);\n }\n `}static observedAttributes=[...super.observedAttributes,"opened"]}window.customElements.define("k-side-menu",SideMenu);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";import drag from"../utils/drag.js";const dragStartHandler=Symbol("dragStartHandler"),dragMoveHandler=Symbol("dragMoveHandler"),dragEndHandler=Symbol("dragEndHandler"),cleanup=Symbol("cleanup");export class Sortable extends Component{constructor(){super(),this.registerAttributes({sorting:!1})}async render(t){return await super.render(t),!1}disconnectedCallback(){super.disconnectedCallback(),this.cleanupFuncs.forEach((t=>t()))}getCursorElement(){const t=Array.from(this.children).filter((t=>"K-SORTABLE-ITEM"===t.tagName&&!t.hasAttribute("sorting")));if(0===t.length)return null;const e=event.clientY;if(e<t[0].getBoundingClientRect().top)return[t[0],"before"];if(e>t[t.length-1].getBoundingClientRect().bottom)return[t[t.length-1],"after"];for(const r of t){const t=r.getBoundingClientRect();if(e<t.top+t.height/2)return[r,"before"];if(e<t.bottom)return[r,"after"]}return null}}window.customElements.define("k-sortable",Sortable);export class SortableItem extends Component{constructor(){super(),this[dragStartHandler]=()=>{this.sorting=!0},this[dragMoveHandler]=({y:t})=>{this.style.transform=`translateY(${t}px)`,this.style.zIndex=9999;const[e,r]=this.sortable.getCursorElement();Array.from(this.sortable.children).forEach((t=>{t.classList.remove("target-before","target-after")})),e&&e.classList.add(`target-${r}`)},this[dragEndHandler]=({y:t})=>{this.sorting=!1,this.style.transform="",this.style.zIndex="";const[e,r]=this.sortable.getCursorElement();Array.from(this.sortable.children).forEach((t=>{t.classList.remove("target-before","target-after")})),e&&("before"===r?this.sortable.insertBefore(this,e):"after"===r&&this.sortable.insertBefore(this,e.nextSibling),dispatchEvent(this.sortable,"sort"))},this.registerAttributes({sorting:!1})}async render(t=!1){if(await super.render(t)){const t=this.shadowRoot.getElementById("handle");return this[cleanup]=drag({element:t,startCallback:this[dragStartHandler],moveCallback:this[dragMoveHandler],endCallback:this[dragEndHandler]}),!0}return!1}get sortable(){return this.closest("k-sortable")}get shadowTemplate(){return`\n <div id="handle">\n <k-icon name="drag-handle"></k-icon>\n </div>\n <div id="content" class="p pl0">\n ${super.shadowTemplate}\n </div>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: block;\n border: 1px solid var(--c_border);\n user-select: none;\n position: relative;\n }\n :host([sorting]){\n opacity: 0.8;\n }\n #handle {\n display: inline-block;\n cursor: pointer;\n padding: var(--spacer);\n }\n #content {\n display: inline-block;\n }\n :host(.target-before)::before,\n :host(.target-after)::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background-color: var(--c_primary);\n }\n :host(.target-before)::before {\n top: -2px;\n }\n :host(.target-after)::after {\n bottom: -2px;\n }\n `}}window.customElements.define("k-sortable-item",SortableItem);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import drag from"../utils/drag.js";import{dispatchEvent}from"../utils/element.js";import{watchWindowSize,unwatchWindowSize}from"../utils/watchWindowSize.js";const dragStartWidth=Symbol(),dragStartCallback=Symbol(),dragEndCallback=Symbol(),dragCallback=Symbol(),dragCleanup=Symbol(),windowResizeHandler=Symbol();export default class Split extends Component{constructor({stackWidth:t=0}={}){super(),this[dragStartWidth]=0,this[dragStartCallback]=()=>{this.resizing=!0,this[dragStartWidth]=Math.round(this.shadowRoot.getElementById("left").getBoundingClientRect().width),dispatchEvent(this,"resizestart",{startSize:this[dragStartWidth]})},this[dragCallback]=({x:t})=>{const e=`${this[dragStartWidth]+t}px`;this.setSize(e),dispatchEvent(this,"resize",{size:e})},this[dragEndCallback]=({x:t})=>{this.resizing=!1;const e=`${this[dragStartWidth]+t}px`;this.setSize(e),dispatchEvent(this,"resizeend",{size:e})},this[dragCleanup]=()=>{},this[windowResizeHandler]=t=>{this.stacked=t<=this.stackWidth},this.registerAttributes({resizing:!1,stacked:!1,stackWidth:t})}disconnectedCallback(){super.disconnectedCallback(),this[dragCleanup]()}async render(t){return!!await super.render(t)&&(this[dragCleanup]=drag({element:this.shadowRoot.getElementById("divider-handle"),callback:this[dragCallback],startCallback:this[dragStartCallback],endCallback:this[dragEndCallback]}),this.stacked=watchWindowSize(this[windowResizeHandler])<=this.stackWidth,!0)}setSize(t){this.style.setProperty("--left_width",t)}get shadowTemplate(){return`\n <div\n id="left"\n class="pane"\n >\n ${super.shadowTemplate}\n </div>\n <div id="divider-handle">\n <div id="divider-border"></div>\n </div>\n <div\n id="right"\n class="pane"\n >\n <slot name="right"></slot>\n </div>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n --left_width: calc( (100% - var(--handle_width)) / 2);\n --handle_width: 0.5rem;\n --min_pane_width: 6rem;\n\n height: 100%;\n display: flex;\n align-items: stretch;\n flex: 1 1 auto;\n overflow: hidden;\n }\n .pane, #divider-handle {\n display: inline-block;\n }\n .pane {\n min-width: var(--min_pane_width);\n max-width: calc(100% - var(--min_pane_width));\n max-height: 100%;\n overflow: hidden;\n }\n #left {\n flex: 0 0 var(--left_width);\n }\n #divider-handle {\n display: flex;\n justify-content: center;\n width: var(--handle_width);\n cursor: ew-resize;\n }\n :host([resizing]) #divider-handle {\n background-color: var(--tc_primary);\n }\n :host([resizing]) .pane {\n pointer-events: none;\n user-select: none;\n }\n #divider-border {\n width: 1px;\n height: 100%;\n border-left: 1px solid var(--c_border);\n }\n #right {\n flex: 1 1;\n }\n :host([stacked="true"]),\n :host([stacked="true"]) #left,\n :host([stacked="true"]) #right {\n display: block;\n }\n :host([stacked="true"]) #divider-handle {\n display: none;\n }\n :host([stacked="true"]) .pane {\n min-width: 0;\n max-width: 100%;\n max-height: auto;\n overflow: auto;\n }\n `}}window.customElements.define("k-split",Split);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";export default class Stacks extends Component{get panels(){return[...this.querySelectorAll("k-stack-panel")]}reorderPanels(){this.panels.reverse().forEach(((t,e)=>t.style.setProperty("--order",e)))}get shadowStyles(){return"\n :host {\n --stack_width: 16rem;\n display: block;\n height: 100%;\n position: relative;\n }\n "}}window.customElements.define("k-stacks",Stacks);export class StackPanel extends Component{constructor(){super(),this.registerAttribute("stack",0)}connectedCallback(){super.connectedCallback();const t=this.stacks;t&&t.reorderPanels()}attributeChangedCallback(t,e,s){super.attributeChangedCallback(t,e,s),"stack"===t&&e!==s&&this.style.setProperty("--stack",s)}get stacks(){return this.closest("k-stacks")}get shadowStyles(){return"\n :host {\n --stack: 0;\n display: block;\n height: 100%;\n width: var(--stack_width);\n position: absolute;\n top: 0;\n left: calc(var(--stack) * var(--stack_width));\n transition: left var(--animation_ms) ease-in-out;\n z-index: var(--order);\n }\n "}static observedAttributes=[...super.observedAttributes,"stack"]}window.customElements.define("k-stack-panel",StackPanel);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{toTitleCase}from"../utils/string.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";const selected=Symbol("selected"),hidden=Symbol("hidden"),index=Symbol("index"),editing=Symbol("editing");export default class Table extends Component{constructor({records:e=[],fields:t=[],filters:s=[],enablePages:i=!1,pageSize:r=50,pageSizeOptions:n=[10,25,50,100,500],currentPage:o=1,enableSelection:d=!1,enableSorting:l=!1}={}){super(),this.registerAttributes({enablePages:i,pageSize:r,currentPage:o,pageSizeOptions:n,enableSelection:d,enableSorting:l}),this.registerProps({fields:t,records:e,filters:s,sort:[],columnSizes:{},fetchPending:!1})}async render(e){return!!await super.render(e)&&(this.setData({records:this.records,fields:this.fields,filters:this.filters}),!0)}renderFields(){if(!this.rendered)return;this.calculateColumnSizes(),this.hasTopControls()?this.setAttribute("top-controls","true"):this.removeAttribute("top-controls"),this.hasBottomControls()?this.setAttribute("bottom-controls","true"):this.removeAttribute("bottom-controls");const e=this.shadowRoot.getElementById("fields");if(e.innerHTML="",this.enableSelection){const t=document.createElement("div");t.classList.add("field","controls","cell","field-select"),t.style.width="40px",t.innerHTML='<input type="checkbox" id="select-all" />',e.appendChild(t)}if(this.hasBeforeControls()){const t=document.createElement("div");t.classList.add("field","cell","field-before-controls"),t.style.width=this.columnSizes.beforeControls+"px",e.appendChild(t)}if(this.fields.forEach((({name:t,label:s,hidden:i})=>{if(i)return;const r=document.createElement("div");if(r.classList.add("field","cell"),r.style.width=this.columnSizes[t]+"px",r.innerHTML=s,this.enableSorting){r.style.cursor="pointer";const e=this.sort.find((e=>e.name===t));if(e){r.classList.add(e.asc?"sort-asc":"sort-desc");const t=document.createElement("k-icon");t.classList.add("icon-sort"),t.setAttribute("name",e.asc?"arrow-down":"arrow-up"),r.appendChild(t)}r.addEventListener("click",(()=>{const e=this.sort.find((e=>e.name===t)),s=!e||!e.asc;this.sortBy(t,s)}))}e.appendChild(r)})),this.hasAfterControls()){const t=document.createElement("div");t.classList.add("field","cell","field-after-controls"),t.style.width=this.columnSizes.afterControls+"px",e.appendChild(t)}if(e.style.width=this.shadowRoot.getElementById("top").style.width=this.shadowRoot.getElementById("bottom").style.width=this.shadowRoot.getElementById("records").style.width=this.columnSizes.total+"px",this.enableSelection){const e=this.shadowRoot.getElementById("select-all");e.addEventListener("change",(()=>{e.checked?this.selectAllOnPage():this.deselectAllOnPage()})),onEvent(this,"selectionChange pageChange",(()=>{this.allOnPageSelected()?e.checked=!0:e.checked=!1}))}}renderRecords(){if(!this.rendered)return;const e=this.shadowRoot.getElementById("records");e.innerHTML="";let t=this.getDisplayedRecords(),s=0,i=this.pageSize;this.enablePages&&(s=(this.currentPage-1)*this.pageSize,i=s+this.pageSize,t=t.slice(s,i));let r,n=0;t.forEach(((t,i)=>{if(null!==t)e.appendChild(this.renderRecord(t));else{r||(r=s+i),n++;const t=document.createElement("div");t.classList.add("record","fetching"),t.innerHTML='<div class="cell">Loading...</div>',e.appendChild(t)}})),r&&!this.fetchPending&&dispatchEvent(this,"fetchRecords",{start:r,count:n})}renderRecord(e){const t=document.createElement("div");if(t.classList.add("record"),t.dataset.index=e[index],this.enableSelection){const s=document.createElement("div");s.style.width="40px",s.classList.add("cell","selection","controls");const i=document.createElement("input");i.type="checkbox",i.checked=e[selected],i.addEventListener("change",(t=>{e[selected]=!!t.target.checked,dispatchEvent(this,"selectionChange")})),s.appendChild(i),t.appendChild(s)}return this.hasBeforeControls()&&t.appendChild(this.renderBeforeControls()),this.fields.forEach((({name:s,formatter:i,calculator:r,type:n,editor:o,hidden:d})=>{if(d)return;const l=document.createElement("div");l.classList.add("cell"),l.dataset.field=s,l.style.width=this.columnSizes[s]+"px";let a=e[s]||"";if(e[editing])if(t.setAttribute("editing",!0),r)l.appendChild(Table.editors.calculated(r(e,this)));else if(o)l.appendChild(o(a));else{let e=Table.editors[n||typeof a];e||(e=Table.editors.string),l.appendChild(e(a))}else l.innerHTML=r?r(e,this):i?i(a):a;t.appendChild(l)})),this.hasAfterControls()&&t.appendChild(this.renderAfterControls()),t}renderBeforeControls(){const e=document.createElement("div");return e.style.width=this.columnSizes.beforeControls+"px",e.classList.add("cell","controls","controls-before"),this.querySelectorAll('[slot="before"]').forEach((t=>{e.appendChild(t.cloneNode(!0))})),e}renderAfterControls(){const e=document.createElement("div");return e.style.width=this.columnSizes.afterControls+"px",e.classList.add("cell","controls","controls-after"),this.querySelectorAll('[slot="after"]').forEach((t=>{e.appendChild(t.cloneNode(!0))})),e}hasBeforeControls(){return!!this.querySelector('[slot="before"]')}hasAfterControls(){return!!this.querySelector('[slot="after"]')}hasTopControls(){return!!this.querySelector('[slot="top"]')}hasBottomControls(){return!!this.querySelector(":scope > :not([slot])")}editRecord(e){e[editing]=!0;const t=this.shadowRoot.querySelector(`.record[data-index="${e[index]}"]`),s=this.renderRecord(e);t.replaceWith(s),dispatchEvent(this,"editingChange")}saveEditedRecord(e){e[editing]=!1;const t=this.shadowRoot.querySelector(`.record[data-index="${e[index]}"]`);t.querySelectorAll(".cell").forEach((t=>{const s=t.dataset.field,i=this.fields.find((e=>e.name===s));if(i&&!i.calculator){const i=1===t.children.length?t.firstChild:t.querySelector("input, select");i&&(e[s]=i.value)}})),t.replaceWith(this.renderRecord(e))}cancelEditedRecord(e){e[editing]=!1,this.shadowRoot.querySelector(`.record[data-index="${e[index]}"]`).replaceWith(this.renderRecord(e))}recordIsEditing(e){return e[editing]}getCurrentPage(){return this.currentPage}getTotalPages(){return Math.ceil(this.getDisplayedRecords().length/this.pageSize)}setPage(e){e<1||e>this.getTotalPages()||(this.currentPage=e,this.renderRecords(),dispatchEvent(this,"pageChange"))}firstPage(){1!==this.currentPage&&this.setPage(1)}nextPage(){this.currentPage<this.getTotalPages()&&this.setPage(this.currentPage+1)}prevPage(){this.currentPage>1&&this.setPage(this.currentPage-1)}lastPage(){this.currentPage!==this.getTotalPages()&&this.setPage(this.getTotalPages())}setPageSize(e){this.pageSize=e,this.currentPage=1,this.renderRecords(),dispatchEvent(this,"pageSizeChange")}setData({records:e=!1,fields:t=!1,pageSize:s=!1,pageSizeOptions:i=!1,currentPage:r=!1,enableSelection:n}={}){let o=!1,d=this.getTotalPages(),l=this.currentPage;e&&(this.records=e.map((e=>({...e}))),this.records.forEach(((e,t)=>{e[index]=t,e[selected]=!1,e[hidden]=!1,e[editing]=!1})),this.fields=t||Table.extractFieldsFromRecords(this.records),o=!0),s&&(this.pageSize=s,o=!0),i&&(this.pageSizeOptions=i),r&&(this.currentPage=r,o=!0),void 0!==n&&(this.enableSelection=n,o=!0),o&&(this.renderFields(),this.renderRecords());const a=this.getTotalPages();a!==d&&dispatchEvent(this,"pageCountChanged",{totalPages:this.getTotalPages()}),l>a&&this.setPage(a)}setRecords(e,t){let s=this.getTotalPages(),i=this.currentPage;this.records=e.map((e=>({...e}))),this.records.forEach(((e,t)=>{e[index]=t,e[selected]=!1,e[hidden]=!1,e[editing]=!1})),this.fields=t||Table.extractFieldsFromRecords(this.records),this.renderFields(),this.renderRecords(),dispatchEvent(this,"recordsSet",{records:e});const r=this.getTotalPages();r!==s&&dispatchEvent(this,"pageCountChanged",{totalPages:this.getTotalPages()}),i>r&&this.setPage(r)}setupFetchRecords(e,t){const s=this.records.length;s<e&&(this.records.length=e,this.records.fill(null,s)),onEvent(this,"fetchRecords",(async e=>{if(this.fetchPending)return;this.fetchPending=!0;const{start:s,count:i}=e.detail,r=await t(s,i);this.records.splice(s,r.length,...r),this.fetchPending=!1,this.renderRecords()}))}addRecord(e){e[selected]=!1,e[hidden]=!1,e[index]=this.records.length,this.records.push(e),this.renderRecords(),dispatchEvent(this,"recordAdded",{record:e})}updateRecord(e,t){let s=!1,i=this.records.find((t=>t===e));if(i||void 0===e[index]||(i=this.records[e[index]]),Object.keys(t).forEach((e=>{i.hasOwnProperty(e)&&(i[e]=t[e],s=!0)})),s){const e=(this.currentPage-1)*this.pageSize,t=e+this.pageSize;(!this.enablePages||i[index]>=e&&i[index]<t)&&this.renderRecords()}}deleteRecord(e){let t=this.records.find((t=>t===e)),s=this.getTotalPages();if(t||void 0===e[index]||(t=this.records[e[index]]),t){const e=this.records.indexOf(t);this.records.splice(e,1),this.records.forEach(((e,t)=>{e[index]=t})),this.renderRecords(),dispatchEvent(this,"selectionChange"),dispatchEvent(this,"recordDeleted",{index:e});const i=this.getTotalPages();this.currentPage>i&&this.setPage(i),i!==s&&dispatchEvent(this,"pageCountChanged",{totalPages:i})}}deleteSelected(){let e=this.getTotalPages();this.getSelectedRecords().forEach((e=>{let t=this.records.find((t=>t===e));if(t||void 0===e[index]||(t=this.records[e[index]]),t){const e=this.records.indexOf(t);this.records.splice(e,1)}})),this.records.forEach(((e,t)=>{e[index]=t})),this.renderRecords();const t=this.getTotalPages();this.currentPage>t&&this.setPage(t),t!==e&&dispatchEvent(this,"pageCountChanged",{totalPages:t}),dispatchEvent(this,"selectionChange")}getSelectedRecords(){return this.records.filter((e=>e[selected]))}selectAllOnPage(){const e=(this.currentPage-1)*this.pageSize,t=Math.min(e+this.pageSize,this.records.length);for(let s=e;s<t;s++)this.records[s][selected]=!0;this.renderRecords(),setTimeout((()=>{dispatchEvent(this,"selectionChange")}),0)}deselectAllOnPage(){const e=(this.currentPage-1)*this.pageSize,t=Math.min(e+this.pageSize,this.records.length);for(let s=e;s<t;s++)this.records[s][selected]=!1;this.renderRecords(),setTimeout((()=>{dispatchEvent(this,"selectionChange")}),0)}allOnPageSelected(){const e=(this.currentPage-1)*this.pageSize,t=Math.min(e+this.pageSize,this.records.length);for(let s=e;s<t;s++)if(!this.records[s][selected])return!1;return!0}sortBy(e,t=!0){this.sort=this.sort.filter((t=>t.name!==e)),this.sort.push({name:e,asc:t}),this.renderFields(),this.renderRecords()}hideRecord(e){let t=this.records.find((t=>t===e));t||void 0===e[index]||(t=this.records[e[index]]),t&&(t[hidden]=!0,this.renderRecords(),dispatchEvent(this,"recordHidden"))}showRecord(e){let t=this.records.find((t=>t===e));t||void 0===e[index]||(t=this.records[e[index]]),t&&(t[hidden]=!1,this.renderRecords(),dispatchEvent(this,"recordShown"))}showAllRecords(){this.records.forEach((e=>{e[hidden]=!1})),this.filters.length&&(this.filters=[],dispatchEvent(this,"filterRemoved filterChange")),this.renderRecords(),dispatchEvent(this,"recordShown allRecordsShown")}addFilter(e,t,s){this.filters.push({field:e,condition:t,value:s}),dispatchEvent(this,"filterAdded filterChange"),this.renderRecords()}removeFilter(e,t,s,i=!0){const r=this.filters.findIndex((i=>i.field===e&&i.condition===t&&i.value===s));-1!==r&&(this.records.forEach((i=>{this.testFilter(i,e,t,s)||(i[hidden]=!1)})),this.filters.splice(r,1),dispatchEvent(this,"filterRemoved filterChange"),i&&this.renderRecords())}testFilter(e,t,s,i){const r=e[t];switch(s){case"equals":return r===i;case"not-equals":return r!==i;case"contains":return r.includes(i);case"not-contains":return!r.includes(i);case"greater-than":return r>i;case"less-than":return r<i;case"greater-than-or-equal":return r>=i;case"less-than-or-equal":return r<=i;default:return!0}}removeAllFilters(){this.filters.length&&(this.filters.forEach((({field:e,condition:t,value:s})=>{this.removeFilter(e,t,s,!1)})),this.renderRecords())}search(e){const t=e.trim().toLowerCase();let s=!1;this.records.forEach((e=>{if(e[hidden])return;let i=!1;this.fields.forEach((({name:s})=>{(e[s]?.toString().toLowerCase()||"").includes(t)&&(i=!0)})),e[hidden]!==!i&&(e[hidden]=!i,s=!0)})),s&&(dispatchEvent(this,"recordHidden"),this.renderRecords()),dispatchEvent(this,"search",{term:e})}getDisplayedRecords(){this.filters.forEach((({field:e,condition:t,value:s})=>{this.records.forEach((i=>{this.testFilter(i,e,t,s)||(i[hidden]=!0)}))}));let e=this.records.filter((e=>null===e||!e[hidden]));return this.sort.forEach((({name:t,asc:s})=>{e.sort(((e,i)=>e[t]<i[t]?s?-1:1:e[t]>i[t]?s?1:-1:0))})),e}getHiddenRecords(){return this.records.filter((e=>e[hidden]))}calculateColumnSizes(){return this.columnSizes={},this.columnSizes.total=0,this.enableSelection&&(this.columnSizes.total+=40),this.columnSizes.beforeControls=Array.from(this.querySelectorAll('[slot="before"]')).reduce(((e,t)=>e+(t.maxWidth||40)),0),this.columnSizes.afterControls=Array.from(this.querySelectorAll('[slot="after"]')).reduce(((e,t)=>e+(t.maxWidth||40)),0),this.hasBeforeControls()&&(this.columnSizes.total+=this.columnSizes.beforeControls),this.hasAfterControls()&&(this.columnSizes.total+=this.columnSizes.afterControls),this.fields.forEach((e=>{if(e.size)this.columnSizes[e.name]=e.size,this.columnSizes.total+=e.size;else{let t=0;this.records.slice(0,100).forEach((s=>{let i=s[e.name];e.calculator&&(i=e.calculator(s,this)),e.formatter&&(i=e.formatter(i)),i&&i.toString().length>t&&(t=i.toString().length)})),this.columnSizes[e.name]=Math.max(10*t+32,128),e.hidden||(this.columnSizes.total+=this.columnSizes[e.name])}})),this.columnSizes}setFieldHiddenState(e,t){const s=this.fields.find((t=>t.name===e));s&&(s.hidden=t,this.calculateColumnSizes(),this.renderFields(),this.renderRecords(),dispatchEvent(this,"fieldVisibilityChanged "+(t?"fieldHidden":"fieldShown"),{field:s}))}hideField(e){this.setFieldHiddenState(e,!0)}showField(e){this.setFieldHiddenState(e,!1)}reorderFields(e){const t=[];e.forEach((e=>{const s=this.fields.find((t=>t.name===e));s&&t.push(s)})),this.fields=t,this.renderFields(),this.renderRecords()}get shadowTemplate(){return`\n <div id="wrapper">\n <div id="top"><slot name="top"></slot></div>\n <div id="table">\n <div id="fields"></div>\n <div id="records"></div>\n </div>\n <div id="bottom">${super.shadowTemplate}</div>\n </div>\n <div style="display: none">\n <slot name="before"></slot>\n <slot name="after"></slot>\n </div>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: block;\n width: 100%;\n overflow: auto;\n margin-bottom: var(--spacer);\n }\n #wrapper {\n width: min-content;\n border: 1px solid var(--c_border);\n border-radius: var(--radius);\n }\n #table {\n width: min-content;\n }\n #fields,\n .record {\n display: flex;\n }\n #fields {\n background-color: var(--c_bg__alt);\n border-bottom: 1px solid var(--c_border);\n }\n .record:not([editing="true"]) .cell:not(.controls),\n #fields .cell:not(.controls) {\n padding: calc(0.5 * var(--spacer)) var(--spacer);\n }\n .cell:not(:first-child) {\n border-left: 1px solid var(--c_border);\n }\n .record:not(:last-child) .cell {\n border-bottom: 1px solid var(--c_border);\n }\n #top, #bottom {\n display: flex;\n width: 100%;\n }\n #top slot {\n display: block;\n width: 100%;\n border-bottom: 1px solid var(--c_border);\n }\n #bottom slot {\n display: block;\n width: 100%;\n border-top: 1px solid var(--c_border);\n }\n :host(:not([top-controls])) #top,\n :host(:not([bottom-controls])) #bottom {\n display: none;\n }\n .field-select,\n .selection {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .field-select input,\n .selection input {\n width: 1.25rem;\n height: 1.25rem;\n }\n .icon-sort {\n float: right;\n opacity: 0.5;\n }\n `}static extractFieldsFromRecords(e,t=100){const s=new Set;return e.slice(0,t).forEach((e=>{Object.keys(e).forEach((e=>s.add(e)))})),[...s].map((e=>({name:e,label:toTitleCase(e)})))}static format(e){return(Array.isArray(e)?Table.formatters.array:Table.formatters[typeof e])(e)}static formatters={string:e=>e,number:e=>`${e}`,date:e=>e.toLocaleDateString(),boolean:e=>e?"True":"False",array:e=>e.map((e=>Table.format(e))).join(", "),undefined:e=>"",null:e=>"<code>null</code>"};static editors={string:e=>{const t=document.createElement("input");return t.value=e,t},number:e=>{const t=document.createElement("input");return t.type="number",t.value=e,t},date:e=>{const t=document.createElement("input");return t.type="date",t.value=e,t},boolean:e=>{const t=document.createElement("select");return t.innerHTML=`\n <option value="true" ${e?"selected":""}>True</option>\n <option value="false" ${e?"":"selected"}>False</option>\n `,t.value=e,t},calculated:e=>{const t=document.createElement("input");return t.disabled=!0,t.value=e,t}}}window.customElements.define("k-table",Table);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{dispatchEvent}from"../utils/element.js";export class Tabs extends Component{constructor(){super(),this.registerAttributes({active:"",fixedHeight:!1})}async connectedCallback(){await super.connectedCallback(),this.active||(this.active=`${this.querySelectorAll("k-tab-content")[0].name}`);const t=this.shadowRoot.getElementById("tabs");t.addEventListener("scroll",this.updateScrollIndicators.bind(this)),this.updateScrollIndicators(),new ResizeObserver((()=>this.updateScrollIndicators())).observe(t);const e=this.shadowRoot.getElementById("scroll-left"),n=this.shadowRoot.getElementById("scroll-right");e.addEventListener("click",(()=>{t.scrollBy({left:-200,behavior:"smooth"})})),n.addEventListener("click",(()=>{t.scrollBy({left:200,behavior:"smooth"})}))}updateScrollIndicators(){const t=this.shadowRoot.getElementById("tabs"),e=this.shadowRoot.getElementById("scroll-left"),n=this.shadowRoot.getElementById("scroll-right"),o=t.scrollLeft>0,s=t.scrollLeft<t.scrollWidth-t.clientWidth;e.classList.toggle("visible",o),n.classList.toggle("visible",s)}attributeChangedCallback(t,e,n){if("active"===t){const t=this.getActiveTab();t&&(t.active=!1);const e=this.getActiveContent();e&&(e.active=!1);const o=this.getTab(n);o&&(o.active=!0);const s=this.getContent(n);s&&(s.active=!0),dispatchEvent(this,"tab",{tab:n})}}get contents(){return[...this.querySelectorAll(":scope > k-tab-content")]}get tabs(){return[...this.querySelectorAll(":scope > k-tab")]}getTab(t){let e;if("string"==typeof t&&(e=this.querySelector(`k-tab[for="${t}"]`)),!e){let n=parseInt(t);n||(n=0),e=this.querySelectorAll("k-tab")[n]}return e}getActiveTab(){return this.querySelector(':scope > k-tab[active="true"]')}getContent(t){let e;if("string"==typeof t&&(e=this.querySelector(`k-tab-content[name="${t}"]`)),!e){let n=parseInt(t);n||(n=0),e=this.querySelectorAll("k-tab-content")[n]}return e}getActiveContent(){return this.querySelector(':scope > k-tab-content[active="true"]')}get shadowTemplate(){return`\n <div id="wrapper">\n <div id="tabs-container">\n <div id="scroll-left" class="scroll-indicator">\n <svg class="arrow" width="20" height="20" viewBox="0 0 20 20" fill="none">\n <path d="M12 15L7 10L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>\n </svg>\n </div>\n <div id="tabs">\n <slot name="tabs"></slot>\n </div>\n <div id="scroll-right" class="scroll-indicator">\n <svg class="arrow" width="20" height="20" viewBox="0 0 20 20" fill="none">\n <path d="M8 15L13 10L8 5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>\n </svg>\n </div>\n </div>\n <div id="contents">\n ${super.shadowTemplate}\n </div>\n </div>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: block;\n width: 100%;\n }\n #wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n }\n #tabs-container {\n position: relative;\n border-bottom: 1px solid var(--c_border);\n }\n #tabs {\n display: flex;\n overflow-x: auto;\n overflow-y: hidden;\n }\n #tabs ::slotted(*) {\n flex: 0 0 auto;\n }\n .scroll-indicator {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 72px;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-bottom: 2px;\n }\n .scroll-indicator .arrow {\n color: var(--tc_base);\n z-index: 1;\n }\n .scroll-indicator.visible {\n opacity: 1;\n }\n #scroll-left {\n left: 0;\n background: linear-gradient(90deg, \n var(--c_bg) 0%,\n var(--c_bg) 30%,\n transparent 100%\n );\n }\n #scroll-right {\n right: 0;\n justify-content: flex-end;\n background: linear-gradient(-90deg, \n var(--c_bg) 0%,\n var(--c_bg) 30%,\n transparent 100%\n );\n }\n :host([fixed-height="true"]) #wrapper {\n height: 100%;\n }\n :host([fixed-height="true"]) #contents {\n height: 100%;\n flex: 1;\n min-height: 1.35rem;\n overflow: auto;\n }\n `}static observedAttributes=[...super.observedAttributes,"active"]}window.customElements.define("k-tabs",Tabs);const clickHandler=Symbol();export class Tab extends Component{constructor(){super(),this[clickHandler]=()=>{this.active||(this.tabs.active=this.for)},this.slot="tabs",this.registerAttribute("active",!1)}connectedCallback(){super.connectedCallback(),this.shadowRoot.getElementById("button").addEventListener("click",this[clickHandler])}get for(){const t=this.getAttribute("for");return t||this?.tabs.tabs.indexOf(this)}set for(t){t?this.setAttribute("for",t):this.removeAttribute("for")}get tabs(){return"K-TABS"===this.parentElement.tagName?this.parentElement:null}get shadowTemplate(){return`\n <button id="button">\n ${super.shadowTemplate}\n </button>\n `}get shadowStyles(){return"\n :host {\n margin-bottom: -1px;\n flex: 0 0 auto; /* Important: prevent shrinking and growing */\n }\n #button {\n padding: var(--spacer_h);\n background-color: transparent;\n border: none;\n cursor: inherit;\n box-shadow: none;\n color: inherit;\n white-space: nowrap; /* Prevent text wrapping */\n }\n :host(:not([active])) #button {\n cursor: pointer;\n }\n :host([active]){\n border-bottom: 2px solid var(--c_primary);\n margin-bottom: -1px;\n }\n :host([active]) #button {\n color: var(--tc_primary);\n }\n "}}window.customElements.define("k-tab",Tab);export class TabContent extends Component{constructor(){super(),this.registerAttribute("active",!1)}get tabs(){return"K-TABS"===this.parentElement.tagName?this.parentElement:null}get name(){const t=this.getAttribute("name");return t||this?.tabs.contents.indexOf(this)}set name(t){t?this.setAttribute("name",t):this.removeAttribute("name")}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: block;\n height: 100%;\n max-height: 100%;\n flex: 1 1 auto;\n overflow: auto;\n }\n :host([active]) {\n display: block;\n }\n :host(:not([active])) {\n display: none;\n }\n `}}window.customElements.define("k-tab-content",TabContent);export class TabSpacer extends Component{constructor(){super(),this.slot="tabs"}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n flex: 1 1 auto !important;\n height: 1px;\n }\n `}}window.customElements.define("k-tab-spacer",TabSpacer);export default{Tab:Tab,TabContent:TabContent,Tabs:Tabs,TabSpacer:TabSpacer};
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";const tagsInputChangeHandler=Symbol(),tagsInputCommaHandler=Symbol();export default class Tags extends Component{constructor(){super(),this[tagsInputChangeHandler]=()=>{const t=this.shadowRoot.getElementById("tagsInput"),n=t.value;n&&(this.addTag(n),t.value="")},this[tagsInputCommaHandler]=t=>{if(","===t.data||"insertFromPaste"===t.inputType){const t=this.shadowRoot.getElementById("tagsInput"),n=t.value.split(",").filter((t=>!!t));n.length&&(n.forEach((t=>this.addTag(t))),t.value="")}},this.registerAttributes({value:"",allowedTags:"",disallowedTags:""})}attributeChangedCallback(t,n,e){if(super.attributeChangedCallback(t,n,e),"value"===t){const t=this.validateTags();t!==e?this.value=t:(dispatchEvent(this,"change",{oldValue:n,newValue:e}),this.renderTags())}else if(["allowed-tags","disallowed-tags"].includes(t)){const a=this.validateTags();a!==e?this.value=a:(dispatchEvent(this,`${t.replace("-","")}change`,{oldValue:n,newValue:e}),this.renderTags())}}async render(t){if(await super.render(t)){const t=this.shadowRoot.getElementById("tagsInput");return onEvent(t,"change",this[tagsInputChangeHandler]),onEvent(t,"input",this[tagsInputCommaHandler]),!0}return!1}disconnectedCallback(){super.disconnectedCallback();const t=this.shadowRoot.getElementById("tagsInput");offEvent(t,"change",this[tagsInputChangeHandler]),offEvent(t,"input",this[tagsInputCommaHandler])}async renderTags(){this.render(!1),await window.customElements.whenDefined("k-tag");const t=this.shadowRoot.getElementById("tags");t.innerHTML="";const n=this.value;n&&n.split(",").forEach((n=>{t.appendChild(new Tag(n))}))}addTag(t){const n=new Set(this.value.split(",").filter((t=>!!t)));n.add(t),this.value=[...n].filter((t=>!!t)).join(","),dispatchEvent(this,"addtag",{tag:t})}removeTag(t){const n=new Set(this.value.split(",").filter((t=>!!t)));n.delete(t),this.value=[...n].join(","),dispatchEvent(this,"removetag",{tag:t})}validateTags(){return this.value.split(",").map((t=>t.trim())).map((t=>{const n=new Set(this.allowedTags.split(",").filter((t=>!!t)));if(n.size)return n.has(t)?t:"";const e=new Set(this.disallowedTags.split(",").filter((t=>!!t)));return e.size&&e.has(t)?"":t})).filter((t=>!!t)).join(",")}get shadowTemplate(){return`\n <label for="tagsInput">\n ${super.shadowTemplate}\n <div id="tagsHolder">\n <span id="tags"></span>\n <input id="tagsInput" />\n </div>\n </label>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n \n }\n #tagsHolder {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n width: 100%;\n background-color: var(--input_bg);\n color: var(--input_tc);\n border: var(--input_border_width) solid var(--c_border);\n padding: 0;\n margin-bottom: var(--spacer);\n border-radius: var(--radius);\n outline: none;\n transition: box-shadow var(--animation_ms);\n cursor: default;\n }\n #tagsHolder:focus-within {\n box-shadow: var(--focus_shadow);\n }\n #tags {\n display: contents;\n }\n #tagsInput {\n display: inline-block;\n min-width: 5rem;\n width: auto;\n max-width: 100%;\n background-color: transparent;\n color: inherit;\n border: 0 solid transparent;\n margin-bottom: 0;\n border-radius: 0;\n transition: none;\n }\n #tagsInput {\n box-shadow: 0 0 0 transparent;\n }\n `}static observedAttributes=[...Component.observedAttributes,"value","allowed-tags","disallowed-tags"]}window.customElements.define("k-tags",Tags);const tagClickHandler=Symbol();class Tag extends Component{constructor(t){super(),this[tagClickHandler]=()=>{this.getRootNode().host.removeTag(t)},this.innerHTML=t}async render(t){return!!await super.render(t)&&(onEvent(this,"click",this[tagClickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this,"click",this[tagClickHandler])}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: inline-block;\n width: min-content;\n margin: var(--spacer_q);\n padding: var(--spacer_q) var(--spacer_h);\n border: 1px solid var(--c_border);\n border-radius: var(--radius);\n cursor: pointer;\n }\n :host(:hover) {\n text-decoration: line-through;\n }\n `}}window.customElements.define("k-tag",Tag);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{onEvent,dispatchEvent}from"../utils/element.js";import"./Icon.js";const storageWatcher=Symbol("storageWatcher"),clickHandler=Symbol("clickHandler");export default class ThemeSwitcher extends Component{constructor(){super(),this[storageWatcher]=()=>{this.currentTheme=ThemeSwitcher.getCurrentTheme()},this[clickHandler]=()=>{const e=ThemeSwitcher.getCurrentTheme();"auto"===e&&ThemeSwitcher.setTheme("light"),"light"===e&&ThemeSwitcher.setTheme("dark"),"dark"===e&&ThemeSwitcher.setTheme("auto")},this.registerAttribute("currentTheme",ThemeSwitcher.getCurrentTheme())}async render(e){return!!await super.render(e)&&(onEvent(window,"storage",this[storageWatcher]),onEvent(this.shadowRoot.getElementById("toggle"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("toggle"),"click",this[clickHandler])}get shadowTemplate(){return'\n <button\n id="toggle"\n class="no-btn"\n >\n <k-icon\n id="autoMode"\n name="mode-auto"\n class="mode"\n ></k-icon>\n <k-icon\n id="lightMode"\n name="mode-light"\n class="mode"\n ></k-icon>\n <k-icon\n id="darkMode"\n name="mode-dark"\n class="mode"\n ></k-icon>\n </button>\n '}get shadowStyles(){return'\n :host {\n --padding: var(--spacer);\n\n display: flex;\n }\n #toggle {\n padding: var(--padding);\n }\n .mode {\n display: none;\n }\n :host([current-theme="auto"]) #autoMode,\n :host([current-theme="light"]) #lightMode,\n :host([current-theme="dark"]) #darkMode {\n display: block;\n }\n '}static setTheme(e){localStorage.setItem("theme",e),document.documentElement.setAttribute("theme",e),dispatchEvent(window,"storage",{theme:e})}static getCurrentTheme(){let e=document.documentElement.getAttribute("theme");return e||(e=localStorage.getItem("theme")),e||"auto"}}const colorSchemeQuery=window.matchMedia("(prefers-color-scheme: dark)"),colorSchemeChangeHandler=e=>document.documentElement.setAttribute("auto-theme",e.matches?"dark":"light");colorSchemeQuery.addEventListener("change",colorSchemeChangeHandler),colorSchemeChangeHandler(colorSchemeQuery),ThemeSwitcher.setTheme(ThemeSwitcher.getCurrentTheme()),window.customElements.define("k-theme-switcher",ThemeSwitcher);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import formatTimestamp from"../utils/formatTimestamp.js";export default class Timestamp extends Component{constructor(t=0,e="",m=""){super(),this.registerAttributes({timestamp:t,locale:m,format:e})}attributeChangedCallback(t,e,m){"timestamp"==t&&(this.innerHTML=m?formatTimestamp(m,this.format,this.locale||navigator.language):"")}static observedAttributes=["timestamp"]}window.customElements.define("k-timestamp",Timestamp);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";const _position=Symbol();export class ToastContainer extends Component{constructor(t="bottom center"){super(),this[_position]=t.toLowerCase(),this.setAttribute("position",this[_position])}get position(){return this[_position]}set position(t){t!==this[_position]&&(this[_position]=t.toLowerCase(),this.setAttribute("position",this[_position]))}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n position: fixed;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: 1000;\n pointer-events: none;\n padding: 16px;\n box-sizing: border-box;\n max-width: 100%;\n max-height: 100%;\n overflow: hidden;\n }\n\n :host([position*="top"]) {\n top: 0;\n }\n\n :host([position*="bottom"]) {\n bottom: 0;\n }\n\n :host([position*="left"]) {\n left: 0;\n align-items: flex-start;\n }\n\n :host([position*="right"]) {\n right: 0;\n align-items: flex-end;\n }\n\n :host([position*="center"]:not([position*="top"]):not([position*="bottom"])) {\n top: 50%;\n transform: translateY(-50%);\n }\n \n :host([position="center"]),\n :host([position*="center"][position*="top"]),\n :host([position*="center"][position*="bottom"]) {\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([position*="center"]:not([position="center"])) {\n align-items: center;\n }\n \n /* Combined transforms for center vertically and horizontally */\n :host([position*="center"]:not([position*="top"]):not([position*="bottom"]):not([position="center"])) {\n transform: translate(-50%, -50%);\n }\n\n ::slotted(*) {\n pointer-events: auto;\n }\n `}}window.customElements.define("k-toast-container",ToastContainer);const closeHandler=Symbol(),actionHandler=Symbol(),timeoutId=Symbol(),animationEndHandler=Symbol(),_toastPosition=Symbol(),_closing=Symbol();export default class Toast extends Component{constructor({actionCallback:t=()=>{},closeCallback:n=()=>{},timeout:o=0,position:i="bottom center"}={}){super(),this[timeoutId]=-1,this[_toastPosition]=i.toLowerCase(),this[_closing]=!1,this[closeHandler]=()=>{this.close()},this[actionHandler]=()=>{!1!==this.actionCallback()&&this.close()},this[animationEndHandler]=t=>{t.animationName.includes("toast-hide")?(this.removeAttribute("animating"),this.opened=!1,dispatchEvent(this,"close openchange"),this.closeCallback(),this[_closing]=!1):t.animationName.includes("toast-show")&&this.removeAttribute("animating")},this.registerProps({actionCallback:t,closeCallback:n}),this.registerAttributes({hasAction:!1,hasClose:!1,hasIcon:!1,timeout:o,opened:!1,position:this[_toastPosition]})}async render(t){return!!await super.render(t)&&(onEvent(this.shadowRoot.getElementById("action"),"click",this[actionHandler]),onEvent(this.shadowRoot.getElementById("close"),"click",this[closeHandler]),onEvent(this,"animationend",this[animationEndHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this[timeoutId]),offEvent(this.shadowRoot.getElementById("action"),"click",this[actionHandler]),offEvent(this.shadowRoot.getElementById("close"),"click",this[closeHandler]),offEvent(this,"animationend",this[animationEndHandler])}attributeChangedCallback(t,n,o){super.attributeChangedCallback(t,n,o),"opened"===t&&n!==o&&o&&(this.hasAction=!!this.querySelector('[slot="action"]'),this.hasClose=!!this.querySelector('[slot="close"]'),this.hasIcon=!!this.querySelector('[slot="icon"]'))}open(){this[_closing]=!1,this.setAttribute("animating","in"),this.opened=!0,this.timeout&&(clearTimeout(this[timeoutId]),this[timeoutId]=setTimeout((()=>{this.close()}),this.timeout)),dispatchEvent(this,"open openchange")}close(){clearTimeout(this[timeoutId]),this.opened&&!this[_closing]&&(this[_closing]=!0,this.setAttribute("animating","out"))}get shadowTemplate(){return`\n <div id="icon">\n <slot name="icon"></slot>\n </div>\n <div id="message">\n ${super.shadowTemplate}\n </div>\n <button id="action" class="no-style">\n <slot name="action"></slot>\n </button>\n <button id="close" class="no-style">\n <slot name="close"></slot>\n </button>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n @keyframes toast-show-bottom {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes toast-hide-bottom {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(20px); }\n }\n @keyframes toast-show-top {\n from { opacity: 0; transform: translateY(-20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes toast-hide-top {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-20px); }\n }\n @keyframes toast-show-left {\n from { opacity: 0; transform: translateX(-20px); }\n to { opacity: 1; transform: translateX(0); }\n }\n @keyframes toast-hide-left {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(-20px); }\n }\n @keyframes toast-show-right {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n }\n @keyframes toast-hide-right {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(20px); }\n }\n :host {\n display: none;\n min-width: 16rem;\n max-width: calc(100% - ( 2 * var(--spacer) ));\n background-color: var(--c_bg);\n border-radius: var(--radius);\n box-shadow: var(--drop_shadow);\n }\n :host([opened="true"]) {\n display: flex;\n }\n :host([animating="in"][position*="bottom"]) {\n animation: toast-show-bottom var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="out"][position*="bottom"]) {\n animation: toast-hide-bottom var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="in"][position*="top"]) {\n animation: toast-show-top var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="out"][position*="top"]) {\n animation: toast-hide-top var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="in"][position*="left"]:not([position*="top"]):not([position*="bottom"])) {\n animation: toast-show-left var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="out"][position*="left"]:not([position*="top"]):not([position*="bottom"])) {\n animation: toast-hide-left var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="in"][position*="right"]:not([position*="top"]):not([position*="bottom"])) {\n animation: toast-show-right var(--animation_ms, 300ms) ease forwards;\n }\n :host([animating="out"][position*="right"]:not([position*="top"]):not([position*="bottom"])) {\n animation: toast-hide-right var(--animation_ms, 300ms) ease forwards;\n }\n #icon {\n padding: var(--spacer);\n padding-right: 0;\n }\n #message {\n padding: var(--spacer);\n flex: 1 1 auto;\n }\n :host(:not([has-close])) #close,\n :host(:not([has-action])) #action,\n :host(:not([has-icon])) #icon {\n display: none;\n }\n #action {\n background: transparent;\n border: none;\n color: var(--tc_primary, blue);\n cursor: pointer;\n padding: var(--spacer);\n }\n #action:hover {\n color: var(--tc_primary__hover, lightblue);\n }\n #close {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: var(--spacer);\n opacity: 0.7;\n transition: opacity var(--animation_ms);\n }\n #close:hover {\n opacity: 1;\n }\n `}static observedAttributes=[...super.observedAttributes,"opened"];static create(t,n={}){let{position:o="auto",removeOnClose:i=!0,closeCallback:s=()=>{},action:e=!1,close:a=!1,icon:r=!1}=n;"auto"===o&&(o=window.innerWidth<=768?"bottom center":"top right");let c=document.querySelector(`k-toast-container[position="${o}"]`);c||(c=new ToastContainer(o),document.body.appendChild(c));const l=new Toast({position:o,timeout:5e3,...n,closeCallback:(...t)=>{i&&(l.remove(),0===c.children.length&&c.remove()),s(...t)}});if(l.innerHTML=t,r)if(r instanceof HTMLElement)r.slot="icon",l.appencChild(r);else if("string"==typeof r){const t=document.createElement("span");t.slot="icon",t.innerHTML=r,l.appendChild(t)}if(e)if(e instanceof HTMLElement)e.slot="action",l.appencChild(e);else if("string"==typeof e){const t=document.createElement("span");t.slot="action",t.innerHTML=e,l.appendChild(t)}if(a)if(a instanceof HTMLElement)a.slot="close",l.appencChild(a);else if("string"==typeof a){const t=document.createElement("span");t.slot="close",t.innerHTML=a,l.appendChild(t)}return l.open(),c.appendChild(l),l}static success(t,n={}){const o=Toast.create(t,{icon:'<k-icon name="check"></k-icon>',...n});return o.classList.add("bg-success"),o}static warning(t,n={}){const o=Toast.create(t,{icon:'<k-icon name="warning"></k-icon>',...n});return o.classList.add("bg-warning"),o}static error(t,n={}){const o=Toast.create(t,{icon:'<k-icon name="error"></k-icon>',...n});return o.classList.add("bg-danger"),o}}window.customElements.define("k-toast",Toast);
@@ -1 +0,0 @@
1
- import Component from"./Component.js";import{onEvent,offEvent,dispatchEvent}from"../utils/element.js";const clickHandler=Symbol(),keyDownHandler=Symbol();export default class Toggle extends Component{constructor(){super(),this[clickHandler]=()=>{this.toggle()},this[keyDownHandler]=({code:n})=>{["Space","Enter"].includes(n)&&this.toggle()},this.registerAttributes({value:!1}),this.tabIndex=0}connectedCallback(){super.connectedCallback(),onEvent(this,"click",this[clickHandler]),onEvent(this,"keydown",this[keyDownHandler])}disconnectedCallback(){super.disconnectedCallback(),offEvent(this,"click",this[clickHandler]),offEvent(this,"keydown",this[keyDownHandler])}attributeChangedCallback(n,e,t){"value"===n&&dispatchEvent(this,"change",{value:t})}on(){return this.value=!0,dispatchEvent(this,"on",{value:!0}),this}off(){return this.value=!1,dispatchEvent(this,"on",{value:!1}),this}toggle(){return this.value?this.off():this.on(),dispatchEvent(this,"toggle",{value:this.value}),this}get shadowTemplate(){return`\n <div id="switch">\n <div id="handle"></div>\n </div>\n <label id="label">\n ${super.shadowTemplate}\n </label>\n `}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n --switch_height: 2rem;\n --switch_width: 3rem;\n --switch_border: 1px solid var(--c_border);\n --switch_background__off: var(--c_bg__alt);\n --switch_background__on: var(--c_success);\n --handle_size__off: 1rem;\n --handle_size__on: 1.5rem;\n --handle_border: 1px solid var(--c_border);\n --handle_background__off: var(--c_border);\n --handle_background__on: white;\n\n display: flex;\n align-items: center;\n cursor: pointer;\n margin-bottom: var(--spacer);\n border-radius: 999rem;\n }\n #switch {\n display: flex;\n align-items: center;\n width: var(--switch_width);\n height: var(--switch_height);\n border: var(--switch_border);\n background: var(--switch_background__off);\n border-radius: 999rem;\n margin-right: var(--spacer);\n }\n #handle {\n --margin: calc( (var(--switch_height) - var(--handle_size__off)) / 2);\n width: var(--handle_size__off);\n height: var(--handle_size__off);\n border: var(--handle_border);\n background: var(--handle_background__off);\n border-radius: 999rem;\n transform: translateX(var(--margin));\n transition: width var(--animation_ms, 256ms), height var(--animation_ms, 256ms), transform var(--animation_ms, 256ms);\n }\n :host([value="true"]) #switch {\n background: var(--switch_background__on);\n }\n :host([value="true"]) #handle {\n --m: calc( (var(--switch_height) - var(--handle_size__on)) / 2);\n --d: calc( var(--switch_width) - var(--handle_size__on) - var(--m));\n width: var(--handle_size__on);\n height: var(--handle_size__on);\n background: var(--handle_background__on);\n transform: translateX(var(--d));\n }\n #label {\n display: block;\n flex: 1 1 auto;\n padding: 0;\n }\n `}static observedAttributes=[...Component.observedAttributes,"value"]}window.customElements.define("k-toggle",Toggle);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import"../Icon.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler");export default class DeleteRecord extends TableControl{constructor(){super(),this[clickHandler]=this.delete.bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("delete"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("delete"),"click",this[clickHandler])}delete(){this.record&&this.table.deleteRecord(this.record)}get shadowTemplate(){return'\n <button id="delete" class="no-btn icon-btn">\n <slot><k-icon name="delete"></k-icon></slot>\n </button>\n '}}window.customElements.define("k-tc-delete-record",DeleteRecord);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const deleteSelected=Symbol("deleteSelected"),updateButtonState=Symbol("updateButtonState");export default class DeleteSelected extends TableControl{constructor(){super(),this[deleteSelected]=this.deleteSelected.bind(this),this[updateButtonState]=(()=>{this.shadowRoot.getElementById("deleteSelectedButton").disabled=0===this.table.getSelectedRecords().length}).bind(this)}async render(e=!1){return!!await super.render(e)&&(this[updateButtonState](),onEvent(this.shadowRoot.getElementById("deleteSelectedButton"),"click",this[deleteSelected]),onEvent(this.table,"selectionChange",this[updateButtonState]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("deleteSelectedButton"),"click",this[deleteSelected]),offEvent(this.table,"selectionChange",this[updateButtonState])}deleteSelected(){this.table.deleteSelected(),this[updateButtonState]()}get shadowTemplate(){return'\n <button id="deleteSelectedButton" class="pq no-btn">\n <k-icon name="delete"></k-icon>\n </button>\n '}get shadowStyles(){return"\n :host {\n display: inline-flex;\n width: max-content;\n align-items: baseline;\n }\n #deleteSelectedButton {\n display: flex;\n align-items: center;\n }\n #deleteSelectedButton:disabled,\n #deleteSelectedButton[disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n }\n "}}window.customElements.define("k-table-delete-selected",DeleteSelected);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{offEvent,onEvent}from"../../utils/element.js";const editRecord=Symbol("editRecord"),saveRecord=Symbol("saveRecord"),cancelEdit=Symbol("cancelEdit");export default class Edit extends TableControl{constructor(){super(),this[editRecord]=this.editRecord.bind(this),this[saveRecord]=this.saveRecord.bind(this),this[cancelEdit]=this.cancelEdit.bind(this),this.registerAttributes({editing:!1}),this.maxWidth=80}async render(t=!1){if(await super.render(t)){const t=this.record;return t&&(this.editing=this.table.recordIsEditing(t)),onEvent(this.shadowRoot.getElementById("editButton"),"click",this[editRecord]),onEvent(this.shadowRoot.getElementById("saveButton"),"click",this[saveRecord]),onEvent(this.shadowRoot.getElementById("cancelButton"),"click",this[cancelEdit]),!0}return!1}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("editButton"),"click",this[editRecord]),offEvent(this.shadowRoot.getElementById("saveButton"),"click",this[saveRecord]),offEvent(this.shadowRoot.getElementById("cancelButton"),"click",this[cancelEdit])}editRecord(){this.table.editRecord(this.record)}saveRecord(){this.table.saveEditedRecord(this.record)}cancelEdit(){this.table.cancelEditedRecord(this.record)}get shadowTemplate(){return'\n <button id="editButton" class="icon-btn no-btn">\n <k-icon name="edit"></k-icon>\n </button>\n <button id="saveButton" class="icon-btn no-btn bg-success">\n <k-icon name="check"></k-icon>\n </button>\n <button id="cancelButton" class="icon-btn no-btn bg-danger">\n <k-icon name="close"></k-icon>\n </button>\n '}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: inline-flex;\n width: max-content;\n align-items: baseline;\n }\n :host([editing]) #editButton,\n :host(:not([editing])) #cancelButton,\n :host(:not([editing])) #saveButton {\n display: none !important;\n }\n `}}window.customElements.define("k-tc-edit",Edit);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import"../Icon.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler");export default class ExportCsv extends TableControl{constructor(){super({maxWidth:136}),this[clickHandler]=this.export.bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("export"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("export"),"click",this[clickHandler])}getCSV(){const e=this.table;let t="";if(e){const o=[];if(e.fields.forEach((({name:e,calculator:t})=>{t||o.push(e)})),t+=o.join(",")+"\n",this.record){const e=this.record,n=[];o.forEach((t=>{n.push(e[t])})),t+=n.join(",")+"\n"}else e.records.forEach((e=>{const n=[];o.forEach((t=>{n.push(e[t])})),t+=n.join(",")+"\n"}))}return t}export(){const e=this.getCSV();if(this.record){const t=new Blob([e],{type:"application/json"}),o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download="data.json",n.click(),URL.revokeObjectURL(o)}else{const t=new Blob([e],{type:"application/json"}),o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download="data.json",n.click(),URL.revokeObjectURL(o)}}get shadowTemplate(){return'\n <button id="export" class="no-btn ph">\n <slot><k-icon name="export-file"></k-icon> Export CSV</slot>\n </button>\n '}}window.customElements.define("k-tc-export-csv",ExportCsv);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import"../Icon.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler");export default class ExportJson extends TableControl{constructor(){super({maxWidth:136}),this[clickHandler]=this.export.bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("export"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("export"),"click",this[clickHandler])}export(){const e=this.record;if(e){const t=JSON.stringify(e),o=new Blob([t],{type:"application/json"}),n=URL.createObjectURL(o),c=document.createElement("a");c.href=n,c.download="data.json",c.click(),URL.revokeObjectURL(n)}else{const e=JSON.stringify(this.table.records),t=new Blob([e],{type:"application/json"}),o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download="data.json",n.click(),URL.revokeObjectURL(o)}}get shadowTemplate(){return'\n <button id="export" class="no-btn ph">\n <slot><k-icon name="export-file"></k-icon> Export JSON</slot>\n </button>\n '}}window.customElements.define("k-tc-export-json",ExportJson);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";import Dialog from"../Dialog.js";const clickHandler=Symbol("clickHandler");export default class FieldSortHide extends TableControl{constructor(){super(),this[clickHandler]=this.openDialog.bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("sort"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("sort"),"click",this[clickHandler])}openDialog(){import("../Sortable.js");const e=Dialog.create(`\n <h3 class="m0 ph" slot="title">Show / Hide Fields</h3>\n <div class="m">\n <k-sortable id="sorting">\n ${this.table.fields.map((e=>`\n <k-sortable-item data-field="${e.name}">\n <label class="field pb0">\n <input\n class="field-visibility"\n data-field="${e.name}"\n type="checkbox"\n ${e.hidden?"":"checked"}\n style="height: 1.25rem; width: 1.25rem"\n />\n ${e.label}\n </label>\n </k-sortable-item>\n `)).join("")}\n </k-sortable>\n </div>\n `,{width:"400px",cancelText:"Close"});onEvent(e,"click",(e=>{if(!e.target.closest(".field"))return;const t=e.target.closest(".field-visibility");if(t){const e=t.getAttribute("data-field");this.table.setFieldHiddenState(e,!t.checked)}}));const t=e.querySelector("#sorting");onEvent(t,"sort",(()=>{const e=Array.from(t.querySelectorAll("k-sortable-item")).map((e=>e.getAttribute("data-field")));this.table.reorderFields(e)}))}get shadowTemplate(){return'\n <button\n id="sort"\n class="no-btn icon-btn"\n >\n <k-icon name="table-visibility"></k-icon>\n </button>\n '}}window.customElements.define("k-tc-field-sort-hide",FieldSortHide);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import Dialog from"../Dialog.js";import{offEvent,onEvent}from"../../utils/element.js";const table=Symbol("table"),clickHandler=Symbol("clickHandler");export default class Filters extends TableControl{constructor(){super(),this[clickHandler]=this.revealFilters.bind(this)}async render(t=!1){return!!await super.render(t)&&(onEvent(this.shadowRoot.getElementById("filterBtn"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("filterBtn"),"click",this[clickHandler])}revealFilters(){const t=Dialog.create(`\n <h3 slot="title" class="m0 pyh px">Filters</h3>\n <div class="p">\n ${0===this.table.filters.length?"\n <p>No Current Filters.</p>\n ":`\n <h5>Current Filters</h5>\n <ul id="currentFilters">${this.table.filters.map((function({field:t,condition:e,value:n}){return`<li\n data-field="${t}"\n data-condition="${e}"\n data-value="${n}"\n >\n ${t} ${{eq:"equals",ne:"does not equal",gt:"is greater than",gte:"is greater than or equal to",lt:"is less than",lte:"is less than or equal to",contains:"contains",starts:"starts with",ends:"ends with"}[e]} ${n}\n <button class="remove-filter no-btn pq">\n <k-icon name="close"></k-icon>\n </button>\n </li>`})).join("")}</ul>\n `}\n <hr />\n <h5>Add A Filter</h5>\n <form id="addFilter">\n <select id="filterField" class="mb">${this.table.fields.map((({name:t,label:e})=>`<option value="${t}">${e}</option>`)).join("")}</select>\n <select id="filterCondition" class="mb">${Object.entries({eq:"equals",ne:"does not equal",gt:"is greater than",gte:"is greater than or equal to",lt:"is less than",lte:"is less than or equal to",contains:"contains",starts:"starts with",ends:"ends with"}).map((([t,e])=>`<option value="${t}" ${"contains"===t?"selected":""}>${e}</option>`)).join("")}</select>\n <input id="filterValue" type="text" class="mb" />\n <button type="submit" class="btn primary mb mr">Add Filter</button>\n ${0===this.table.filters.length?"":'\n <button type="button" id="clearFilters" class="btn danger mb mr">Clear All Filters</button>\n '}\n </form>\n </div>\n `,{width:"600px"}),e=t.querySelector("#addFilter");onEvent(e,"submit",(n=>{n.preventDefault(),this.table.addFilter(e.filterField.value,e.filterCondition.value,e.filterValue.value),t.close(),this.revealFilters()})),onEvent(t,"click",(e=>{if(e.target.closest("button")?.classList.contains("remove-filter")){const n=e.target.closest("li");if(n){const{field:e,condition:l,value:i}=n.dataset;this.table.removeFilter(e,l,i),t.close(),this.revealFilters()}}"clearFilters"===e.target.id&&(this.table.removeAllFilters(),t.close())}))}get shadowTemplate(){return'\n <button id="filterBtn" class="no-btn icon-btn">\n <k-icon name="filter"></k-icon>\n </button>\n '}}window.customElements.define("k-tc-filters",Filters);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler"),handlePageChange=Symbol("handlePageChange");export default class FirstPage extends TableControl{constructor(){super(),this[clickHandler]=this.goToFirstPage.bind(this),this[handlePageChange]=(()=>{const e=this.table;e&&1!==e.getCurrentPage()?this.shadowRoot.getElementById("firstPage").disabled=!1:this.shadowRoot.getElementById("firstPage").disabled=!0}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("firstPage"),"click",this[clickHandler]),this[handlePageChange](),onEvent(this.table,"pageChange",this[handlePageChange]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("firstPage"),"click",this[clickHandler]),offEvent(this.table,"pageChange",this[handlePageChange])}goToFirstPage(){const e=this.table;e&&e.firstPage()}get shadowTemplate(){return'\n <button\n id="firstPage"\n class="no-btn icon-btn"\n >\n <slot><k-icon name="first"></k-icon></slot>\n </button>\n '}get shadowStyles(){return`\n ${super.shadowStyles}\n #firstPage[disabled] {\n cursor: inherit;\n opacity: 0.5;\n }\n `}}window.customElements.define("k-tc-first-page",FirstPage);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{offEvent,onEvent}from"../../utils/element.js";const hiddenChangeHandler=Symbol("hiddenChangeHandler");export default class HiddenCount extends TableControl{constructor(){super(),this[hiddenChangeHandler]=(()=>{this.shadowRoot.getElementById("hiddenCount").textContent=this.table.getHiddenRecords().length}).bind(this),this.classList.add("mq")}async render(e=!1){return!!await super.render(e)&&(this[hiddenChangeHandler](),onEvent(this.table,"recordHidden recordShown",this[hiddenChangeHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.table,"recordHidden recordShown",this[hiddenChangeHandler])}get shadowTemplate(){return'\n <span id="hiddenCount"></span>&nbsp;Hidden Records\n '}}window.customElements.define("k-tc-hidden-count",HiddenCount);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{offEvent,onEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler");export default class Hide extends TableControl{constructor(){super(),this[clickHandler]=(()=>{const e=this.table,t=this.record;e&&t&&e.hideRecord(t)}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("hideButton"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("hideButton"),"click",this[clickHandler])}get shadowTemplate(){return'\n <button id="hideButton" class="no-btn icon-btn">\n <k-icon name="hide"></k-icon>\n </button>\n '}}window.customElements.define("k-tc-hide",Hide);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler"),handlePageChange=Symbol("handlePageChange");export default class LastPage extends TableControl{constructor(){super(),this[clickHandler]=this.lastPage.bind(this),this[handlePageChange]=(()=>{const e=this.table;e&&e.getCurrentPage()!==e.getTotalPages()?this.shadowRoot.getElementById("lastPage").disabled=!1:this.shadowRoot.getElementById("lastPage").disabled=!0}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("lastPage"),"click",this[clickHandler]),this[handlePageChange](),onEvent(this.table,"pageChange",this[handlePageChange]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("lastPage"),"click",this[clickHandler]),offEvent(this.table,"pageChange",this[handlePageChange])}lastPage(){const e=this.table;e&&e.lastPage()}get shadowTemplate(){return'\n <button\n id="lastPage"\n class="no-btn icon-btn"\n >\n <slot><k-icon name="last"></k-icon></slot>\n </button>\n '}get shadowStyles(){return`\n ${super.shadowStyles}\n #lastPage[disabled] {\n cursor: inherit;\n opacity: 0.5;\n }\n `}}window.customElements.define("k-tc-last-page",LastPage);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler"),handlePageChange=Symbol("handlePageChange");export default class NextPage extends TableControl{constructor(){super(),this[clickHandler]=this.nextPage.bind(this),this[handlePageChange]=(()=>{const e=this.table;e&&e.getCurrentPage()!==e.getTotalPages()?this.shadowRoot.getElementById("nextPage").disabled=!1:this.shadowRoot.getElementById("nextPage").disabled=!0}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("nextPage"),"click",this[clickHandler]),this[handlePageChange](),onEvent(this.table,"pageChange",this[handlePageChange]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("nextPage"),"click",this[clickHandler]),offEvent(this.table,"pageChange",this[handlePageChange])}nextPage(){const e=this.table;e&&e.nextPage()}get shadowTemplate(){return'\n <button\n id="nextPage"\n class="no-btn icon-btn"\n >\n <slot><k-icon name="chevron-right"></k-icon></slot>\n </button>\n '}get shadowStyles(){return`\n ${super.shadowStyles}\n #nextPage[disabled] {\n cursor: inherit;\n opacity: 0.5;\n }\n `}}window.customElements.define("k-tc-next-page",NextPage);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent}from"../../utils/element.js";const updateOptions=Symbol("updateOptions"),handleSelectChange=Symbol("handleSelectChange"),handlePageSizeChange=Symbol("handlePageSizeChange"),handlePageChange=Symbol("handlePageChange"),handlePageCountChange=Symbol("handlePageCountChange");export default class PageSelect extends TableControl{constructor(){super(),this[updateOptions]=(()=>{const e=this.shadowRoot.getElementById("pageSelect");e.innerHTML="";for(let t=1;t<=this.table.getTotalPages();t++){const a=document.createElement("option");a.value=t,a.textContent=t,e.appendChild(a)}e.value=this.table.getCurrentPage(),this.shadowRoot.getElementById("totalPages").textContent=this.table.getTotalPages()}).bind(this),this[handleSelectChange]=(()=>{this.table.setPage(parseInt(this.shadowRoot.getElementById("pageSelect").value))}).bind(this),this[handlePageSizeChange]=(()=>{this[updateOptions](),this.shadowRoot.getElementById("pageSelect").value=this.table.getCurrentPage()}).bind(this),this[handlePageChange]=(()=>{this.shadowRoot.getElementById("pageSelect").value=this.table.getCurrentPage()}).bind(this),this[handlePageCountChange]=(()=>{this.shadowRoot.getElementById("totalPages").textContent=this.table.getTotalPages(),this[updateOptions]()}).bind(this)}async render(e=!1){if(await super.render(e)){const e=this.shadowRoot.getElementById("pageSelect");return onEvent(e,"change",this[handleSelectChange]),onEvent(this.table,"pageSizeChange",this[handlePageSizeChange]),onEvent(this.table,"pageChange pageCountChanged",this[handlePageChange]),onEvent(this.table,"pageCountChanged",this[handlePageCountChange]),this[updateOptions](),!0}return!1}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("pageSelect"),"change",this[handleSelectChange]),offEvent(this.table,"pageSizeChange",this[handlePageSizeChange]),offEvent(this.table,"pageChange pageCountChanged",this[handlePageChange]),offEvent(this.table,"pageCountChanged",this[handlePageCountChange])}get shadowTemplate(){return'\n <select id="pageSelect" class="mxq"></select>\n <label> out of <span id="totalPages"></span></label>\n '}get shadowStyles(){return"\n :host {\n display: inline-flex;\n width: max-content;\n align-items: baseline;\n }\n #pageSelect, label {\n display: inline;\n }\n label {\n white-space: nowrap;\n }\n "}}window.customElements.define("k-tc-page-select",PageSelect);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const updateOptions=Symbol("updateOptions"),changeHandler=Symbol("changeHandler"),pageSizeChangeHandler=Symbol("pageSizeChangeHandler");export default class PageSize extends TableControl{constructor(e){super(),this[updateOptions]=(()=>{const e=this.shadowRoot.getElementById("pageSizeSelect");this.table.pageSizeOptions.forEach((t=>{const a=document.createElement("option");a.value=t,a.textContent=t,e.appendChild(a)})),e.value=this.table.pageSize}).bind(this),this[changeHandler]=(()=>{this.table.setPageSize(parseInt(this.shadowRoot.getElementById("pageSizeSelect").value))}).bind(this),this[pageSizeChangeHandler]=(()=>{this.shadowRoot.getElementById("pageSizeSelect").value=this.table.pageSize}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("pageSizeSelect"),"change",this[changeHandler]),onEvent(this.table,"pageSizeChange",this[pageSizeChangeHandler]),this[updateOptions](),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("pageSizeSelect"),"change",this[changeHandler]),offEvent(this.table,"pageSizeChange",this[pageSizeChangeHandler])}get shadowTemplate(){return'\n <label for="pageSizeSelect">Page Size: </label>\n <select id="pageSizeSelect" class="mxq"></select>\n '}get shadowStyles(){return"\n :host {\n display: inline-flex;\n width: max-content;\n align-items: baseline;\n }\n label {\n white-space: nowrap;\n }\n "}}window.customElements.define("k-tc-page-size",PageSize);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler"),handlePageChange=Symbol("handlePageChange");export default class PrevPage extends TableControl{constructor(){super(),this[clickHandler]=this.prevPage.bind(this),this[handlePageChange]=(()=>{const e=this.table;e&&1!==e.getCurrentPage()?this.shadowRoot.getElementById("prevPage").disabled=!1:this.shadowRoot.getElementById("prevPage").disabled=!0}).bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("prevPage"),"click",this[clickHandler]),this[handlePageChange](),onEvent(this.table,"pageChange",this[handlePageChange]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("prevPage"),"click",this[clickHandler]),offEvent(this.table,"pageChange",this[handlePageChange])}prevPage(){const e=this.table;e&&e.prevPage()}get shadowTemplate(){return'\n <button\n id="prevPage"\n class="no-btn icon-btn"\n >\n <slot><k-icon name="chevron-left"></k-icon></slot>\n </button>\n '}get shadowStyles(){return`\n ${super.shadowStyles}\n #prevPage[disabled] {\n cursor: inherit;\n opacity: 0.5;\n }\n `}}window.customElements.define("k-tc-prev-page",PrevPage);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{offEvent,onEvent}from"../../utils/element.js";import debounce from"../../utils/debounce.js";const changeHandler=Symbol("changeHandler");export default class Search extends TableControl{constructor(){super(),this[changeHandler]=debounce(this.search.bind(this),200)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("search"),"input",this[changeHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("search"),"input",this[changeHandler])}search(){const e=this.shadowRoot.getElementById("search").value;e.length<3?this.table.showAllRecords():this.table.search(e)}get shadowTemplate(){return`\n <input\n id="search"\n type="search"\n placeholder="Search"\n class="px pyh"\n />\n ${super.shadowTemplate}\n `}}window.customElements.define("k-tc-search",Search);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent}from"../../utils/element.js";export default class SelectCount extends TableControl{async render(e=!1){return!!await super.render(e)&&(this.updateCount(),onEvent(this.table,"selectionChange",(()=>{this.updateCount()})),!0)}updateCount(){this.shadowRoot.getElementById("selectCount").textContent=this.table.getSelectedRecords().length}get shadowTemplate(){return'\n Selected: <span id="selectCount"></span>\n '}get shadowStyles(){return"\n :host {\n display: inline-flex;\n width: max-content;\n align-items: baseline;\n align-self: center;\n }\n label {\n white-space: nowrap;\n }\n "}}window.customElements.define("k-table-select-count",SelectCount);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{offEvent,onEvent}from"../../utils/element.js";const clickHandler=Symbol("clickHandler");export default class HiddenCount extends TableControl{constructor(){super(),this[clickHandler]=(()=>{this.table.showAllRecords()}).bind(this)}async render(t=!1){return!!await super.render(t)&&(onEvent(this.shadowRoot.getElementById("showAllButton"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("showAllButton"),"click",this[clickHandler])}get shadowTemplate(){return'\n <button id="showAllButton" class="no-btn icon-btn">\n <k-icon name="show"></k-icon>\n </button>\n '}}window.customElements.define("k-tc-show-all",HiddenCount);
@@ -1 +0,0 @@
1
- import TableControl from"./TableControl.js";import{onEvent,offEvent}from"../../utils/element.js";import Dialog from"../Dialog.js";const clickHandler=Symbol("clickHandler");export default class ShowHideFields extends TableControl{constructor(){super(),this[clickHandler]=this.openDialog.bind(this)}async render(e=!1){return!!await super.render(e)&&(onEvent(this.shadowRoot.getElementById("sort"),"click",this[clickHandler]),!0)}disconnectedCallback(){super.disconnectedCallback(),offEvent(this.shadowRoot.getElementById("sort"),"click",this[clickHandler])}openDialog(){const e=Dialog.create(`\n <h3 class="m0 ph" slot="title">Show / Hide Fields</h3>\n <div class="p">\n ${this.table.fields.map((e=>`\n <div class="mb">\n <label class="field">\n <input\n class="field-visibility"\n data-field="${e.name}"\n type="checkbox"\n ${e.hidden?"":"checked"}\n style="height: 1.25rem; width: 1.25rem"\n />\n ${e.label}\n </label>\n </div>\n `)).join("")}\n </div>\n `,{width:"400px",cancelText:"Close"});onEvent(e,"click",(e=>{if(!e.target.closest(".field"))return;const t=e.target.closest(".field-visibility");if(t){const e=t.getAttribute("data-field");this.table.setFieldHiddenState(e,!t.checked)}}))}get shadowTemplate(){return'\n <button\n id="sort"\n class="no-btn icon-btn"\n >\n <k-icon name="table-visibility"></k-icon>\n </button>\n '}}window.customElements.define("k-tc-show-hide-fields",ShowHideFields);
@@ -1 +0,0 @@
1
- import Component from"../Component.js";export default class TableControl extends Component{constructor({maxWidth:t=40}={}){super(),this.registerAttributes({maxWidth:t})}get table(){return this.getRootNode()instanceof ShadowRoot?this.getRootNode().host.closest("k-table"):this.closest("k-table")}get record(){if(this.getRootNode()instanceof ShadowRoot){const t=this.closest(".record");if(t){const e=t.dataset.index;if(e)return this.table.records[e]}}return!1}get shadowStyles(){return`\n ${super.shadowStyles}\n :host {\n display: inline-flex;\n }\n .icon-btn {\n display: inline-flex !important;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n }\n `}}
@@ -1 +0,0 @@
1
- :root,[theme="light"]{--c_text:#000000;--c_keyword:#0000ff;--c_builtin:#00b0e8;--c_number:#709756;--c_string:#a31515;--c_regex:#914525;--c_function:inherit;--c_comment:#008000;--c_doc:#808080;--c_tag:#7d7d7d;--c_var:#b436bf;--c_attr:#ff0000;--c_section:#a31515;--c_selector:#0000ff;--c_addition:#a31515;--c_deletion:#2b91af;--c_caret:black}[auto-theme="dark"]:not([theme="light"]),[theme="dark"]{--c_text:#DCDCDC;--c_keyword:#569CD6;--c_builtin:#4EC9B0;--c_number:#B8D7A3;--c_string:#D69D85;--c_regex:#9A5334;--c_function:inehrit;--c_comment:#57A64A;--c_doc:#608B4E;--c_tag:#9B9B9B;--c_var:#BD63C5;--c_attr:#9CDCFE;--c_section:#ffd700;--c_selector:#569CD6;--c_addition:#144212;--c_deletion:#600;--c_caret:white}.hljs{display:block;overflow-x:auto;color:var(--c_text)}.hljs-keyword,.hljs-literal,.hljs-symbol,.hljs-name,.hljs-link{color:var(--c_keyword)}.hljs-link{text-decoration:underline}.hljs-built_in,.hljs-type{color:var(--c_builtin)}.hljs-number,.hljs-class{color:var(--c_number)}.hljs-string,.hljs-meta-string{color:var(--c_string)}.hljs-regexp,.hljs-template-tag{color:var(--c_regex)}.hljs-subst,.hljs-function,.hljs-title,.hljs-params,.hljs-formula{color:var(--c_function)}.hljs-comment,.hljs-quote{color:var(--c_comment);font-style:italic}.hljs-doctag{color:var(--c_doc)}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:var(--c_tag)}.hljs-variable,.hljs-template-variable{color:var(--c_var)}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:var(--c_attr)}.hljs-section{color:var(--c_section)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-bullet,.hljs-selector-tag,.hljs-selector-id,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo{color:var(--c_selector)}.hljs-addition{background-color:var(--c_addition);display:inline-block;width:100%}.hljs-deletion{background-color:var(--c_deletion);display:inline-block;width:100%}
@@ -1 +0,0 @@
1
- /* Reset*/:root{interpolate-size:allow-keywords}*, *::before, *::after{font-family:inherit;box-sizing:border-box;line-height:var(--line-height)}body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dd, dt, blockquote, pre, code{margin:0;padding:0.1px}html{font-family:var(--ff_body);font-size:var(--fs_base);font-weight:var(--fw_base);color:var(--tc)}::selection{background:var(--c_highlight)}body{min-height:100vh;background-color:var(--c_bg);color:var(--tc);overflow-y:scroll;font-family:var(--ff_body);position:relative}main, .container{max-width:var(--container_width);margin-left:auto;margin-right:auto;padding-top:var(--spacer);padding-left:var(--spacer);padding-right:var(--spacer)}nav > a,nav > .link{display:inline-block;padding:var(--spacer) !important;text-decoration:none}menu{margin:0;padding:0}menu a{display:block;padding:var(--spacer_q);text-decoration:none;color:inherit}summary{cursor:pointer;margin-bottom:var(--sapcer);outline:none;box-shadow:0 0 0 transparent;transition:box-shadow var(--animation_ms);border-radius:var(--radius)}summary:focus{box-shadow:var(--focus_shadow)}/* Display / Flex*/.d-b{display:block !important}.d-ib{display:inline-block !important}.d-g{display:grid !important}.d-i{display:inline !important}.d-n{display:none !important}.d-f{display:flex !important;flex-wrap:wrap}.d-if{display:inline-flex !important;flex-wrap:wrap}@media (min-width:1024px){.d-d-b{display:block !important}.d-d-ib{display:inline-block !important}.d-d-g{display:grid !important}.d-d-i{display:inline !important}.d-d-n{display:none !important}.d-d-f{display:flex !important;flex-wrap:wrap}.d-d-if{display:inline-flex !important;flex-wrap:wrap}}@media (min-width:769px) and (max-width:1023px){.t-d-b{display:block !important}.t-d-ib{display:inline-block !important}.t-d-g{display:grid !important}.t-d-i{display:inline !important}.t-d-n{display:none !important}.t-d-f{display:flex !important;flex-wrap:wrap}.t-d-if{display:inline-flex !important;flex-wrap:wrap}}@media (max-width:768px){.m-d-b{display:block !important}.m-d-ib{display:inline-block !important}.m-d-g{display:grid !important}.m-d-i{display:inline !important}.m-d-n{display:none !important}.m-d-f{display:flex !important;flex-wrap:wrap}.m-d-if{display:inline-flex !important;flex-wrap:wrap}}.flex, .flex-1{flex:1 1 auto}.flex-0{flex:0 0}.flex-2{flex:2 2 auto}.flex-3{flex:3 3 auto}.flex-4{flex:4 4 auto}.flex-5{flex:5 5 auto}.flex-6{flex:6 6 auto}.flex-7{flex:7 7 auto}.flex-8{flex:8 8 auto}.flex-9{flex:9 9 auto}.flex-10{flex:10 10 auto}@media (min-width:1024px){.d-d-b{display:block !important}.d-d-ib{display:inline-block !important}.d-d-g{display:grid !important}.d-d-i{display:inline !important}.d-d-n{display:none !important}.d-d-if{display:inline-flex !important;flex-wrap:wrap}.d-d-f{display:flex !important;flex-wrap:wrap}.d-flex, .d-flex-1{flex:1 1 auto}.d-flex-0{flex:0 0}.d-flex-2{flex:2 2 auto}.d-flex-3{flex:3 3 auto}.d-flex-4{flex:4 4 auto}.d-flex-5{flex:5 5 auto}.d-flex-6{flex:6 6 auto}.d-flex-7{flex:7 7 auto}.d-flex-8{flex:8 8 auto}.d-flex-9{flex:9 9 auto}.d-flex-10{flex:10 10 auto}}@media (min-width:769px) and (max-width:1023px){.t-d-b{display:block !important}.t-d-ib{display:inline-block !important}.t-d-g{display:grid !important}.t-d-i{display:inline !important}.t-d-n{display:none !important}.t-d-if{display:inline-flex !important;flex-wrap:wrap}.t-d-f{display:flex !important;flex-wrap:wrap}.t-flex, .t-flex-1{flex:1 1 auto}.t-flex-0{flex:0 0}.t-flex-2{flex:2 2 auto}.t-flex-3{flex:3 3 auto}.t-flex-4{flex:4 4 auto}.t-flex-5{flex:5 5 auto}.t-flex-6{flex:6 6 auto}.t-flex-7{flex:7 7 auto}.t-flex-8{flex:8 8 auto}.t-flex-9{flex:9 9 auto}.t-flex-10{flex:10 10 auto}}@media (max-width:768px){.m-d-b{display:block !important}.m-d-ib{display:inline-block !important}.m-d-g{display:grid !important}.m-d-i{display:inline !important}.m-d-n{display:none !important}.m-d-if{display:inline-flex !important;flex-wrap:wrap}.m-d-f{display:flex !important;flex-wrap:wrap}.m-flex, .m-flex-1{flex:1 1 auto}.m-flex-0{flex:0 0}.m-flex-2{flex:2 2 auto}.m-flex-3{flex:3 3 auto}.m-flex-4{flex:4 4 auto}.m-flex-5{flex:5 5 auto}.m-flex-6{flex:6 6 auto}.m-flex-7{flex:7 7 auto}.m-flex-8{flex:8 8 auto}.m-flex-9{flex:9 9 auto}.m-flex-10{flex:10 10 auto}}.fixed{position:fixed;top:0;width:100%;z-index:99}/* Typography*/.small,small{font-size:var(--fs_small) !important}.large{font-size:var(--fs_large) !important}h1, h2, h3, h4, h5, h6,.h1, .h2, .h3, .h4, .h5, .h6,b, strong{font-weight:var(--fw_bold)}h1, h2, h3, h4, h5, h6,.h1, .h2, .h3, .h4, .h5, .h6{font-family:var(--ff_heading)}.h1, h1{font-size:var(--fs_h1)}.h2, h2{font-size:var(--fs_h2)}.h3, h3{font-size:var(--fs_h3)}.h4, h4{font-size:var(--fs_h4)}.h5, h5{font-size:var(--fs_h5)}.h6, h6{font-size:var(--fs_h6)}p, h1, h2, h3, h4, h5, h6, blockquote, ul, ol, dl, pre, hr, dd{margin-bottom:var(--spacer)}ul, ol, dl{padding-left:calc(1.5 * var(--spacer))}blockquote{border-left:2px solid var(--c_border);padding:var(--spacer)}mark{background-color:var(--c_highlight);color:inherit}.ff-mono, pre, code{font-family:var(--ff_mono)}code{background-color:var(--c_bg__alt);border-radius:var(--radius);word-break:break-word;padding:calc(0.125 * var(--spacer)) var(--spacer_q)}pre code{display:block;padding:var(--spacer);word-break:normal;overflow:auto;white-space:pre-wrap}output{display:block;border:1px solid var(--c_border);border-radius:var(--radius);padding:var(--spacer) var(--spacer) 0 var(--spacer)}.ta-left{text-align:left}.ta-center{text-align:center}.ta-right{text-align:right}a,.link{color:var(--tc_link);box-shadow:0 0 0 transparent;transition:color var(--animation_ms), box-shadow var(--animation_ms);outline:none;border-radius:var(--radius);text-decoration:var(--link_decoration)}a:hover,.link:hover{color:var(--tc_link__hover)}a:focus,.link:focus-visible{box-shadow:var(--focus_shadow)}.no-link,.no-link:hover{text-decoration:none;color:inherit}hr{border:none;border-top:1px solid var(--c_border)}small{font-size:0.75em}dl{padding:0;margin:0}dt, dd{padding-left:var(--spacer);border-left:2px solid var(--c_border)}dt{padding-top:var(--spacer_h)}dd{padding-bottom:var(--spacer_h)}dd + dd{margin-top:calc(-1 * var(--spacer));padding-top:0}li ul{margin-bottom:0}.td-n{text-decoration:none}/* Spacing, Borders and Radius*/.p, .pt, .py{padding-top:var(--spacer) !important}.p, .pr, .px{padding-right:var(--spacer) !important}.p, .pb, .py{padding-bottom:var(--spacer) !important}.p, .pl, .px{padding-left:var(--spacer) !important}.ph, .pth, .pyh{padding-top:var(--spacer_h) !important}.ph, .prh, .pxh{padding-right:var(--spacer_h) !important}.ph, .pbh, .pyh{padding-bottom:var(--spacer_h) !important}.ph, .plh, .pxh{padding-left:var(--spacer_h) !important}.pq, .ptq, .pyq{padding-top:var(--spacer_q) !important}.pq, .prq, .pxq{padding-right:var(--spacer_q) !important}.pq, .pbq, .pyq{padding-bottom:var(--spacer_q) !important}.pq, .plq, .pxq{padding-left:var(--spacer_q) !important}.p0, .pt0, .py0{padding-top:0.1px !important}.p0, .pr0, .px0{padding-right:0.1px !important}.p0, .pb0, .py0{padding-bottom:0.1px !important}.p0, .pl0, .px0{padding-left:0.1px !important}.m, .mt, .my{margin-top:var(--spacer) !important}.m, .mr, .mx{margin-right:var(--spacer) !important}.m, .mb, .my{margin-bottom:var(--spacer) !important}.m, .ml, .mx{margin-left:var(--spacer) !important}.mh, .mth, .myh{margin-top:var(--spacer_h) !important}.mh, .mrh, .mxh{margin-right:var(--spacer_h) !important}.mh, .mbh, .myh{margin-bottom:var(--spacer_h) !important}.mh, .mlh, .mxh{margin-left:var(--spacer_h) !important}.mq, .mtq, .myq{margin-top:var(--spacer_q) !important}.mq, .mrq, .mxq{margin-right:var(--spacer_q) !important}.mq, .mbq, .myq{margin-bottom:var(--spacer_q) !important}.mq, .mlq, .mxq{margin-left:var(--spacer_q) !important}.m0, .mt0, .my0{margin-top:0 !important}.m0, .mr0, .mx0{margin-right:0 !important}.m0, .mb0, .my0{margin-bottom:0 !important}.m0, .ml0, .mx0{margin-left:0 !important}.-m, .-mt, .-my{margin-top:calc(-1 * var(--spacer)) !important}.-m, .-mr, .-mx{margin-right:calc(-1 * var(--spacer)) !important}.-m, .-mb, .-my{margin-bottom:calc(-1 * var(--spacer)) !important}.-m, .-ml, .-mx{margin-left:calc(-1 * var(--spacer)) !important}.b, .bt, .by{border-top:1px solid var(--c_border) !important}.b, .br, .bx{border-right:1px solid var(--c_border) !important}.b, .bb, .by{border-bottom:1px solid var(--c_border) !important}.b, .bl, .bx{border-left:1px solid var(--c_border) !important}.b0, .bt0, .by0{border-top:none !important}.b0, .br0, .bx0{border-right:none !important}.b0, .bb0, .by0{border-bottom:none !important}.b0, .bl0, .bx0{border-left:none !important}.r, .rtl, .rt, .rl{border-top-left-radius:var(--radius) !important}.r, .rtr, .rt, .rr{border-top-right-radius:var(--radius) !important}.r, .rbr, .rb, .rr{border-bottom-right-radius:var(--radius) !important}.r, .rbl, .rb, .rl{border-bottom-left-radius:var(--radius) !important}.r0, .rtl0, .rt0, .rl0{border-top-left-radius:0 !important}.r0, .rtr0, .rt0, .rr0{border-top-right-radius:0 !important}.r0, .rbr0, .rb0, .rr0{border-bottom-right-radius:0 !important}.r0, .rbl0, .rb0, .rl0{border-bottom-left-radius:0 !important}.round{border-radius:9999rem !important}/* Rows and Columns*/.row{display:flex;flex-wrap:wrap}.col{flex:1 1}.span-1{min-width:8.333%;flex-basis:8.333%}.span-2{min-width:16.666%;flex-basis:16.666%}.span-3{min-width:25%;flex-basis:25%}.span-4{min-width:33.333%;flex-basis:33.333%}.span-5{min-width:41.666%;flex-basis:41.666%}.span-6{min-width:50%;flex-basis:50%}.span-7{min-width:58.333%;flex-basis:58.333%}.span-8{min-width:66.666%;flex-basis:66.666%}.span-9{min-width:75%;flex-basis:75%}.span-10{min-width:83.333%;flex-basis:83.333%}.span-11{min-width:91.333%;flex-basis:91.333%}.span-12{min-width:100%;flex-basis:100%}@media (min-width:1024px){.d-span-1{min-width:8.333%;flex-basis:8.333%}.d-span-2{min-width:16.666%;flex-basis:16.666%}.d-span-3{min-width:25%;flex-basis:25%}.d-span-4{min-width:33.333%;flex-basis:33.333%}.d-span-5{min-width:41.666%;flex-basis:41.666%}.d-span-6{min-width:50%;flex-basis:50%}.d-span-7{min-width:58.333%;flex-basis:58.333%}.d-span-8{min-width:66.666%;flex-basis:66.666%}.d-span-9{min-width:75%;flex-basis:75%}.d-span-10{min-width:83.333%;flex-basis:83.333%}.d-span-11{min-width:91.333%;flex-basis:91.333%}.d-span-12{min-width:100%;flex-basis:100%}}@media (min-width:769px) and (max-width:1023px){.t-span-1{min-width:8.333%;flex-basis:8.333%}.t-span-2{min-width:16.666%;flex-basis:16.666%}.t-span-3{min-width:25%;flex-basis:25%}.t-span-4{min-width:33.333%;flex-basis:33.333%}.t-span-5{min-width:41.666%;flex-basis:41.666%}.t-span-6{min-width:50%;flex-basis:50%}.t-span-7{min-width:58.333%;flex-basis:58.333%}.t-span-8{min-width:66.666%;flex-basis:66.666%}.t-span-9{min-width:75%;flex-basis:75%}.t-span-10{min-width:83.333%;flex-basis:83.333%}.t-span-11{min-width:91.333%;flex-basis:91.333%}.t-span-12{min-width:100%;flex-basis:100%}}@media (max-width:768px){.m-span-1{min-width:8.333%;flex-basis:8.333%}.m-span-2{min-width:16.666%;flex-basis:16.666%}.m-span-3{min-width:25%;flex-basis:25%}.m-span-4{min-width:33.333%;flex-basis:33.333%}.m-span-5{min-width:41.666%;flex-basis:41.666%}.m-span-6{min-width:50%;flex-basis:50%}.m-span-7{min-width:58.333%;flex-basis:58.333%}.m-span-8{min-width:66.666%;flex-basis:66.666%}.m-span-9{min-width:75%;flex-basis:75%}.m-span-10{min-width:83.333%;flex-basis:83.333%}.m-span-11{min-width:91.333%;flex-basis:91.333%}.m-span-12{min-width:100%;flex-basis:100%}}.cols-2{grid-template-columns:repeat(2, 1fr)}.cols-3{grid-template-columns:repeat(3, 1fr)}.cols-4{grid-template-columns:repeat(4, 1fr)}.cols-5{grid-template-columns:repeat(5, 1fr)}.cols-6{grid-template-columns:repeat(6, 1fr)}.cols-7{grid-template-columns:repeat(7, 1fr)}.cols-8{grid-template-columns:repeat(8, 1fr)}.cols-9{grid-template-columns:repeat(9, 1fr)}.cols-10{grid-template-columns:repeat(10, 1fr)}@media (min-width:1024px){.d-cols-2{grid-template-columns:repeat(2, 1fr)}.d-cols-3{grid-template-columns:repeat(3, 1fr)}.d-cols-4{grid-template-columns:repeat(4, 1fr)}.d-cols-5{grid-template-columns:repeat(5, 1fr)}.d-cols-6{grid-template-columns:repeat(6, 1fr)}.d-cols-7{grid-template-columns:repeat(7, 1fr)}.d-cols-8{grid-template-columns:repeat(8, 1fr)}.d-cols-9{grid-template-columns:repeat(9, 1fr)}.d-cols-10{grid-template-columns:repeat(10, 1fr)}}@media (min-width:769px) and (max-width:1023px){.t-cols-2{grid-template-columns:repeat(2, 1fr)}.t-cols-3{grid-template-columns:repeat(3, 1fr)}.t-cols-4{grid-template-columns:repeat(4, 1fr)}.t-cols-5{grid-template-columns:repeat(5, 1fr)}.t-cols-6{grid-template-columns:repeat(6, 1fr)}.t-cols-7{grid-template-columns:repeat(7, 1fr)}.t-cols-8{grid-template-columns:repeat(8, 1fr)}.t-cols-9{grid-template-columns:repeat(9, 1fr)}.t-cols-10{grid-template-columns:repeat(10, 1fr)}}@media (max-width:768px){.m-cols-2{grid-template-columns:repeat(2, 1fr)}.m-cols-3{grid-template-columns:repeat(3, 1fr)}.m-cols-4{grid-template-columns:repeat(4, 1fr)}.m-cols-5{grid-template-columns:repeat(5, 1fr)}.m-cols-6{grid-template-columns:repeat(6, 1fr)}.m-cols-7{grid-template-columns:repeat(7, 1fr)}.m-cols-8{grid-template-columns:repeat(8, 1fr)}.m-cols-9{grid-template-columns:repeat(9, 1fr)}.m-cols-10{grid-template-columns:repeat(10, 1fr)}}/* Buttons*/button:not(.no-btn):not(.no-style),.btn,input[type="button"],input[type="submit"],input[type="reset"]{display:inline-block;padding:var(--btn_padding);background-color:var(--btn_bg);border:1px solid var(--btn_border);cursor:pointer;outline:none;border-radius:var(--radius);color:var(--btn_tc);transition:background-color var(--animation_ms), box-shadow var(--animation_ms);text-decoration:none;box-shadow:var(--btn_box_shadow);font-size:inherit;vertical-align:middle}button:not(.no-btn):not(.no-style):hover,.btn:hover,input[type="button"]:hover,input[type="submit"]:hover,input[type="reset"]:hover{background-color:var(--btn_bg__hover);color:var(--btn_tc);box-shadow:var(--btn_box_shadow__hover)}button:not(.no-btn):not(.no-style):focus,.btn:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus{box-shadow:var(--btn_box_shadow__hover), var(--focus_shadow);z-index:1}button:not(.no-btn):not(.no-style):disabled,.btn[disabled],input[type="button"]:disabled,input[type="submit"]:disabled,input[type="reset"]:disabled{opacity:0.6}button:not(.no-btn).primary,.btn.primary,input[type="button"].primary,input[type="submit"].primary,input[type="reset"].primary{background-color:var(--c_primary);--btn_tc:var(--tc_on_primary)}button:not(.no-btn).primary:hover,.btn.primary:hover,input[type="button"].primary:hover,input[type="submit"].primary:hover,input[type="reset"].primary:hover{background-color:var(--c_primary__hover)}button:not(.no-btn).secondary,.btn.secondary,input[type="button"].secondary,input[type="submit"].secondary,input[type="reset"].secondary{background-color:var(--c_secondary);--btn_tc:var(--tc_on_secondary)}button:not(.no-btn).secondary:hover,.btn.secondary:hover,input[type="button"].secondary:hover,input[type="submit"].secondary:hover,input[type="reset"].secondary:hover{background-color:var(--c_secondary__hover)}button:not(.no-btn).success,.btn.success,input[type="button"].success,input[type="submit"].success,input[type="reset"].success{background-color:var(--c_success);--btn_tc:var(--tc_on_success)}button:not(.no-btn).success:hover,.btn.success:hover,input[type="button"].success:hover,input[type="submit"].success:hover,input[type="reset"].success:hover{background-color:var(--c_success__hover)}button:not(.no-btn).warning,.btn.warning,input[type="button"].warning,input[type="submit"].warning,input[type="reset"].warning{background-color:var(--c_warning);--btn_tc:var(--tc_on_warning)}button:not(.no-btn).warning:hover,.btn.warning:hover,input[type="button"].warning:hover,input[type="submit"].warning:hover,input[type="reset"].warning:hover{background-color:var(--c_warning__hover)}button:not(.no-btn).danger,.btn.danger,input[type="button"].danger,input[type="submit"].danger,input[type="reset"].danger{background-color:var(--c_danger);--btn_tc:var(--tc_on_danger)}button:not(.no-btn).danger:hover,.btn.danger:hover,input[type="button"].danger:hover,input[type="submit"].danger:hover,input[type="reset"].danger:hover{background-color:var(--c_danger__hover)}button:not(.no-btn):not(.no-style).link,.btn.link,input[type="button"].link,input[type="submit"].link,input[type="reset"].link{background-color:transparent;color:inherit;box-shadow:0 0 0 transparent;border:none;padding:0.1px;font-size:inherit}.btn-grp{display:inline-flex}.btn-grp button:not(.no-btn):not(:first-child),.btn-grp .btn:not(:first-child),.btn-grp input[type="button"]:not(:first-child),.btn-grp input[type="submit"]:not(:first-child),.btn-grp input[type="reset"]:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;border-left:1px solid rgba(0, 0, 0, 0.25)}.btn-grp button:not(.no-btn):not(:last-child),.btn-grp .btn:not(:last-child),.btn-grp input[type="button"]:not(:last-child),.btn-grp input[type="submit"]:not(:last-child),.btn-grp input[type="reset"]:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.no-btn{display:inline;border:none;background-color:transparent;padding:0;font-size:inherit;font-family:inherit;cursor:pointer;outline:none;box-shadow:0 0 0 transparent;transition:box-shadow var(--animation_ms);border-radius:0;text-align:left;color:inherit}.no-btn:focus{box-shadow:var(--focus_shadow)}.full{display:block;width:100%}/* Inputs*/input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="radio"]):not([type="checkbox"]),select,textarea{display:block;width:100%;background-color:var(--input_bg);color:var(--input_tc);border:var(--input_border_width) solid var(--c_input_border);padding:var(--input_padding);border-radius:var(--radius);outline:none;transition:box-shadow var(--animation_ms)}input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="radio"]):not([type="checkbox"]):focus,select:focus,textarea:focus,input[type="checkbox"]:focus,input[type="radio"]:focus{box-shadow:var(--focus_shadow)}input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="radio"]):not([type="checkbox"]):disabled,select:disabled,textarea:disabled,input[type="checkbox"]:disabled,input[type="radio"]:disabled{opacity:0.6}textarea,select[multiple]{resize:vertical;max-height:75vh;height:6rem;min-height:4rem}select[multiple]{height:8rem}select{cursor:pointer}label{display:block;cursor:pointer;padding-bottom:var(--spacer_h)}label.checkbox,label.radio{display:inline-block;vertical-align:top;width:calc(100% - 1em - (2 * var(--spacer_h)) - 6px);margin-top:2px}input[type="checkbox"],input[type="radio"]{display:inline-block;width:1em;height:1em;cursor:pointer;vertical-align:top;outline:none;accent-color:var(--c_input_accent);margin:var(--spacer_q) var(--spacer_h)}select option{padding:var(--spacer_h) var(--spacer)}select[multiple]{padding:0.1px}select[multiple] option{padding:var(--spacer_h) var(--spacer)}input[type="color"]{padding:0 !important;height:2.35em}input[type="color"]::-webkit-color-swatch-wrapper{padding:0}input[type="color"]::-webkit-color-swatch{border-radius:var(--radius, 0.25rem);cursor:pointer}input[type="date"]::-webkit-calendar-picker-indicator,input[type="month"]::-webkit-calendar-picker-indicator,input[type="time"]::-webkit-calendar-picker-indicator,input[type="week"]::-webkit-calendar-picker-indicator,input[type="search"]::-webkit-search-cancel-button{filter:var(--date_picker_icon_filter)}/* Tables*/.table-wrapper{overflow-x:auto}table{width:100%;border-spacing:0}th{font-weight:var(--fw_bold);text-align:left;background-color:var(--c_bg__alt);border-top:1px solid var(--c_border)}th, td{padding:var(--spacer_h) var(--spacer);border-bottom:1px solid var(--c_border);border-left:1px solid var(--c_border)}th:last-child,td:last-child{border-right:1px solid var(--c_border)}th:first-child{border-top-left-radius:var(--radius)}th:last-child{border-top-right-radius:var(--radius)}tr:last-child td:first-child{border-bottom-left-radius:var(--radius)}tr:last-child td:last-child{border-bottom-right-radius:var(--radius)}/* Colors*/.bg-default{background-color:var(--c_bg);color:var(--tc)}.bg-alt{background-color:var(--c_bg__alt);color:var(--tc)}.bg-inv{--c_primary:var(--c_primary__inv);--c_primary__hover:var(--c_primary__inv__hover);--c_secondary:var(--c_secondary__inv);--c_secondary__hover:var(--c_secondary__inv__hover);--c_success:var(--c_success__inv);--c_success__hover:var(--c_success__inv__hover);--c_warning:var(--c_warning__inv);--c_warning__hover:var(--c_warning__inv__hover);--c_danger:var(--c_danger__inv);--c_danger__hover:var(--c_danger__inv__hover);--tc_link:var(--tc_link__inv);--tc_link__hover:var(--tc_link__inv__hover);background-color:var(--c_bg__inv);color:var(--tc_inv)}.bg-primary{--tc_link:var(--tc_on_primary);--tc_link__hover:var(--tc_on_primary);--c_border:var(--tc_on_primary);background-color:var(--c_primary);color:var(--tc_on_primary);--focus_shadow:var(--focus_shadow_on_primary)}.bg-secondary{--tc_link:var(--tc_on_secondary);--tc_link__hover:var(--tc_on_secondary);background-color:var(--c_secondary);color:var(--tc_on_secondary)}.bg-success{--tc_link:var(--tc_on_success);--tc_link__hover:var(--tc_on_success);background-color:var(--c_success);color:var(--tc_on_success)}.bg-warning{--tc_link:var(--tc_on_warning);--tc_link__hover:var(--tc_on_warning);background-color:var(--c_warning);color:var(--tc_on_warning)}.bg-danger{--tc_link:var(--tc_on_danger);--tc_link__hover:var(--tc_on_danger);background-color:var(--c_danger);color:var(--tc_on_danger)}.tc-default{color:var(--tc)}.tc-inv{color:var(--tc__inv)}.tc-primary{color:var(--tc_primary)}.is-inv .tc-primary,.bg-inv .tc-primary{color:var(--tc_primary__inv)}.tc-secondary{color:var(--tc_secondary)}.is-inv .tc-secondary,.bg-inv .tc-secondary{color:var(--tc_secondary__inv)}.tc-success{color:var(--tc_success)}.is-inv .tc-success,.bg-inv .tc-success{color:var(--tc_success__inv)}.tc-warning{color:var(--tc_warning)}.is-inv .tc-warning,.bg-inv .tc-warning{color:var(--tc_warning__inv)}.tc-danger{color:var(--tc_danger)}.is-inv .tc-danger,.bg-inv .tc-danger{color:var(--tc_danger__inv)}.tc-muted{color:var(--tc_muted)}/* Misc*/.card{border:1px solid var(--c_border);border-radius:var(--radius);padding-top:var(--spacer);padding-left:var(--spacer);padding-right:var(--spacer);margin-bottom:var(--spacer)}.drop-shadow{box-shadow:var(--drop_shadow)}.icon{display:inline-block;width:1.35em;vertical-align:top;margin-left:auto;margin-right:auto}iframe{border:none;width:100%}
@@ -1 +0,0 @@
1
- :root{--ff_body:"Helvetica Neue", Helvetica, Arial, sans-serif;--ff_heading:"Helvetica Neue", Helvetica, Arial, sans-serif;--ff_mono:Consolas, monaco, monospace;--fs_base:16px;--fs_small:calc(0.6 * var(--fs_base));--fs_large:calc(1.5 * var(--fs_base));--fs_h6:var(--fs_base);--fs_h5:calc(1.25 * var(--fs_base));--fs_h4:calc(1.5 * var(--fs_base));--fs_h3:calc(1.75 * var(--fs_base));--fs_h2:calc(2 * var(--fs_base));--fs_h1:calc(2.5 * var(--fs_base));--fw_base:400;--fw_bold:700;--spacer:1rem;--spacer_h:calc(0.5 * var(--spacer));--spacer_q:calc(0.25 * var(--spacer));--line-height:1.35em;--container_width:90rem;--animation_ms:256ms;--radius:0.25rem;--link_decoration:underline;--input_padding:var(--spacer_h) var(--spacer);--input_border_width:1px;--c_input_border:var(--c_border);--btn_padding:var(--spacer_h) var(--spacer);--date_picker_icon_filter:invert(0)}:root,[theme="light"]{color-scheme:light;--c_bg:rgb(249, 249, 249);--c_bg__inv:rgb(51, 51, 51);--c_bg__alt:rgb(238, 238, 238);--c_overscroll:rgb(255, 255, 255);--c_border:rgb(204, 204, 204);--c_border__inv:var(--d_c_bg_border);--c_primary:rgb(51, 102, 255);--c_primary__hover:rgb(17, 68, 221);--c_secondary:rgb(153, 51, 255);--c_secondary__hover:rgb(119, 17, 221);--c_success:rgb(0, 136, 0);--c_success__hover:rgb(0, 102, 0);--c_warning:rgb(255, 102, 0);--c_warning__hover:rgb(221, 68, 0);--c_danger:rgb(255, 0, 51);--c_danger__hover:rgb(221, 0, 17);--c_input_accent:rgb(51, 102, 255);--c_highlight:rgba(41, 100, 210, 0.25);--tc:rgba(0, 0, 0, 0.93);--tc_dark:var(--tc);--tc_light:rgba(255, 255, 255, 0.93);--tc_inv:var(--tc_light);--tc_muted:rgba(0, 0, 0, 0.5);--tc_on_primary:var(--tc_light);--tc_on_secondary:var(--tc_light);--tc_on_success:var(--tc_light);--tc_on_warning:var(--tc_light);--tc_on_danger:var(--tc_light);--c_overlay:rgba(0, 0, 0, 0.5);--tc_primary:#36f;--tc_secondary:#93f;--tc_success:#080;--tc_warning:#f60;--tc_danger:#f03;--btn_box_shadow:0 0 0 transparent;--btn_box_shadow__hover:0 0 0 transparent;--btn_border:transparent;--btn_bg:rgb(221, 221, 221);--btn_bg__hover:rgb(204, 204, 204);--btn_tc:rgba(0, 0, 0, 0.93);--btn_transparent__hover:rgba(0, 0, 0, 0.05);--tc_link:var(--tc_primary);--tc_link__hover:var(--tc_secondary);--tc_link__inv:var(--tc_primary__inv);--tc_link__inv__hover:var(--tc_secondary__inv);--focus_shadow:0 0 2px 2px var(--c_primary);--focus_shadow_on_primary:0 0 2px 2px var(--tc_on_primary);--input_bg:white;--input_tc:rgba(0, 0, 0, 0.93);--drop_shadow:0 0.25rem 0.5rem rgba(0, 0, 0, 0.333)}[auto-theme="dark"]:not([theme="light"]),[theme="dark"]{color-scheme:dark;--c_bg:rgb(51, 51, 51);--c_bg__inv:rgb(249, 249, 249);--c_bg__alt:rgb(34, 34, 34);--c_overscroll:rgb(0, 0, 0);--c_border:rgb(119, 119, 119);--c_border__inv:rgb(204, 204, 204);--c_primary:rgb(51, 102, 255);--c_primary__hover:rgb(17, 68, 221);--c_secondary:rgb(153, 51, 255);--c_secondary__hover:rgb(119, 17, 221);--c_success:rgb(0, 136, 0);--c_success__hover:rgb(0, 102, 0);--c_warning:rgb(255, 102, 0);--c_warning__hover:rgb(221, 68, 0);--c_danger:rgb(255, 0, 51);--c_danger__hover:rgb(221, 0, 17);--c_input_accent:rgb(51, 102, 255);--c_highlight:rgba(0, 89, 255, 0.25);--tc:rgba(255, 255, 255, 0.93);--tc_dark:rgba(0, 0, 0, 0.93);--tc_light:var(--tc);--tc_inv:var(--tc_dark);--tc_muted:rgba(255, 255, 255, 0.5);--tc_on_primary:var(--tc);--tc_on_secondary:var(--tc);--tc_on_success:var(--tc);--tc_on_warning:var(--tc);--tc_on_danger:var(--tc);--c_overlay:rgba(0, 0, 0, 0.5);--tc_primary:rgb(138, 180, 248);--tc_secondary:rgb(187, 102, 255);--tc_success:rgb(102, 187, 102);--tc_warning:rgb(255, 153, 51);--tc_danger:rgb(255, 85, 119);--btn_bg:rgb(170, 170, 170);--btn_bg__hover:rgb(187, 187, 187);--btn_tc:rgba(0, 0, 0, 0.93);--btn_transparent__hover:rgba(255, 255, 255, 0.05);--btn_box_shadow:0 0 0 transparent;--btn_box_shadow__hover:0 0 0 transparent;--btn_border:transparent;--tc_link:var(--tc_primary);--tc_link__hover:var(--tc_secondary);--tc_link__inv:var(--tc_primary__inv);--tc_link__inv__hover:var(--tc_secondary__inv);--focus_shadow:0 0 2px 2px var(--c_primary);--focus_shadow_on_primary:0 0 2px 2px var(--tc_on_primary);--input_bg:var(--c_bg__alt);--input_tc:var(--tc);--ff_body:"Helvetica Neue", Helvetica, Arial, sans-serif;--ff_heading:"Helvetica Neue", Helvetica, Arial, sans-serif;--ff_mono:Consolas, monaco, monospace;--fs_base:16px;--fs_h6:var(--fs_base);--fs_h5:calc(1.25 * var(--fs_base));--fs_h4:calc(1.5 * var(--fs_base));--fs_h3:calc(1.75 * var(--fs_base));--fs_h2:calc(2 * var(--fs_base));--fs_h1:calc(2.5 * var(--fs_base));--fw_base:400;--fw_bold:700;--spacer:1rem;--spacer_h:calc(0.5 * var(--spacer));--spacer_q:calc(0.25 * var(--spacer));--line-height:1.35em;--container_width:90rem;--animation_ms:256ms;--radius:0.25rem;--drop_shadow:0 0.25rem 0.5rem rgba(0, 0, 0, 0.25);--link_decoration:underline;--date_picker_icon_filter:invert(1)}
@@ -1 +0,0 @@
1
- import http from"http";import{readFile}from"fs/promises";import{join,extname,normalize}from"path";export class Server{constructor(t={}){this.routes=[]}route(t,e,r){const n=r?r.map((t=>t.toUpperCase())):["ANY"];return this.routes.push({pattern:t,handler:e,methods:n}),this}get(t,e){return this.route(t,e,["GET"])}post(t,e){return this.route(t,e,["POST"])}put(t,e){return this.route(t,e,["PUT"])}delete(t,e){return this.route(t,e,["DELETE"])}patch(t,e){return this.route(t,e,["PATCH"])}async handleRequest(t,e){try{const[r,n=""]=t.url.split("?"),s=n.split("&").filter((t=>""!=t)).map((t=>{const[e,r]=t.split("=");return{[e]:decodeURIComponent(r)}})),i=this.routes.find((({methods:e,pattern:n})=>{if(!e.includes(t.method||"GET")&&!e.includes("ANY"))return!1;const s=r.split("/").filter((t=>""!=t)),i=n.split("/").filter((t=>""!=t));if(0==s.length&&0==i.length)return!0;const o=i.length>0&&"*"===i[i.length-1];if(!o&&s.length!==i.length)return!1;if(o&&s.length<i.length-1)return!1;const a=o?i.length-1:i.length;for(let t=0;t<a;t++)if(!i[t].startsWith(":")&&i[t]!==s[t])return!1;return!0}));if(!i)return e.writeHead(404,{"Content-Type":"text/plain"}),void e.end("Not Found");const{pattern:o,handler:a}=i;if("string"==typeof a){const t=o.split("/").filter((t=>""!=t)),n=r.split("/").filter((t=>""!=t)),s="*"===t[t.length-1]?n.slice(t.length-1).join("/"):"",i=a.endsWith("*")?a.slice(0,-1):a,l=i.startsWith("/")||/^[A-Z]:/i.test(i)?normalize(join(i,s)):join(process.cwd(),normalize(join(i,s)));l.endsWith("/")||l.endsWith("\\")?await Server.serveFile(join(l,"index.html"),e):await Server.serveFile(l,e)}else if("function"==typeof a){const n={};o.includes(":")&&o.split("/").filter((t=>""!=t)).forEach(((t,e)=>{t.startsWith(":")&&(n[t.slice(1)]=r.split("/").filter((t=>""!=t))[e])})),await a(t,e,n,s)}else console.error("Invalid Route Handler"),e.writeHead(500,{"Content-Type":"text/plain"}),e.end("Internal server error")}catch(t){console.error("Request error:",t),e.writeHead(500,{"Content-Type":"text/plain"}),e.end("Internal server error")}}listen(t=8080){return new Promise(((e,r)=>{try{const n=http.createServer(((t,e)=>this.handleRequest(t,e)));n.on("error",(e=>{"EADDRINUSE"===e.code?r(new Error(`Port ${t} is already in use`)):r(e)})),n.listen(t,(()=>{e(n)}))}catch(t){r(t)}}))}static mimeTypes={".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".json":"application/json; charset=utf-8",".png":"image/png",".jpg":"image/jpeg",".svg":"image/svg+xml",".ico":"image/x-icon",".txt":"text/plain; charset=utf-8",".md":"text/plain; charset=utf-8",".map":"application/json; charset=utf-8"};static textExtensions=[".txt",".md",".js",".css",".html",".json",".map"];static getMimeType(t){const e=extname(t).toLowerCase();return this.mimeTypes[e]?this.mimeTypes[e]:this.textExtensions.includes(e)?"text/plain; charset=utf-8":"application/octet-stream"}static async serveFile(t,e,r={}){try{const n=await readFile(t);e.writeHead(200,{"Content-Type":Server.getMimeType(t),...r}),e.end(n)}catch(t){const r="ENOENT"===t.code?404:500,n=404===r?"Not found":"Internal server error";e.writeHead(r,{"Content-Type":"text/plain"}),e.end(n)}}}
package/dist/utils/cli.js DELETED
@@ -1 +0,0 @@
1
- import{spawn}from"child_process";import readline from"readline";const args={};let win={};"undefined"!=typeof window?win=window:"undefined"!=typeof global&&(win=global),win.log=(...e)=>{args.debug&&console.log(...e)};export const getArgs=(e={d:"debug"})=>{let r="",s=[];const o=()=>{r&&(0===s.length?args[r]=!0:1===s.length?"false"===s[0]?args[r]=!1:args[r]=s[0]:args[r]=s)};for(let t=2;t<process.argv.length;t++){const n=process.argv[t];n.startsWith("-")?(o(),n.startsWith("--")?r=n.slice(2):(r=n.slice(1),e[r]&&(r=e[r])),s=[]):s.push(n)}return o(),args};export const runChildProcess=e=>new Promise(((r,s)=>{const[o,...t]=e.split(" ");spawn(o,t).on("close",(e=>{0===e?r(`child process exited with code ${e}`):s(new Error(`child process exited with code ${e}`))}))}));export const runChildNodeProcess=(e,r={})=>{const s=`node ${e} ${Object.entries(r).flatMap((([e,r])=>!0===r?[`--${e}`]:[`--${e}`,r])).join(" ")}`;return runChildProcess(s)};export const promptUser=e=>{const r=readline.createInterface({input:process.stdin,output:process.stdout});return new Promise((s=>{r.question(`${e}: `,(e=>{r.close(),s(e)}))}))};export const promptYN=(e,r="y")=>promptUser(`${e} (${"y"===r?"Y/n":"y/N"}): `).then((e=>{const s=e.trim().toLowerCase();return""===s?"y"===r:"y"===s}));export default{getArgs:getArgs,runChildNodeProcess:runChildNodeProcess,runChildNodeProcess:runChildNodeProcess,promptUser:promptUser,promptYN:promptYN};
@@ -1 +0,0 @@
1
- export const saveCookie=(e,o,t=43200,i="/")=>{const n=new Date(Date.now()+60*t*1e3);document.cookie=`${e}=${o};expires=${n.toUTCString()};path=${i}`};export const getCookie=e=>{const o=document.cookie.split(";").map((e=>e.trim().split("="))),t=o.find((o=>o[0]===e));return t?t[1]:null};export const deleteCookie=e=>{document.cookie=`${e}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`};export default{saveCookie:saveCookie,getCookie:getCookie,deleteCookie:deleteCookie};
@@ -1 +0,0 @@
1
- function debounce(e,t=300){let u;return(...o)=>{clearTimeout(u),u=setTimeout((()=>{e.apply(this,o)}),t)}}export default debounce;
@@ -1 +0,0 @@
1
- export default(e={})=>{let t,o,n;const{element:s=()=>{},callback:a=()=>{},startCallback:v=()=>{},moveCallback:i=()=>{},endCallback:r=()=>{},preventScroll:d=!1}=e,u=s=>{d&&s.preventDefault(),clearTimeout(n);const v=s.pageX||s.touches[0].pageX,r=s.pageY||s.touches[0].pageY,u={x:v-t,y:r-o,...e};a(u),i(u)},c=({pageX:s,pageY:v})=>{clearTimeout(n);const i={x:s-t,y:v-o,...e};a(i),r(i),m()},p=s=>{clearTimeout(n),t=s.pageX||s.touches[0].pageX,o=s.pageY||s.touches[0].pageY;const a={x:0,y:0,...e};v(a),window.addEventListener("mousemove",u,{passive:!d}),window.addEventListener("mouseup",c,{passive:!d}),window.addEventListener("touchmove",u,{passive:!d}),window.addEventListener("touchend",c,{passive:!d})},m=()=>{window.removeEventListener("mousemove",u),window.removeEventListener("mouseup",c),window.removeEventListener("touchmove",u),window.removeEventListener("touchend",c)};return s.addEventListener("mousedown",p,{passive:!d}),s.addEventListener("touchstart",p,{passive:!d}),()=>{s.removeEventListener("mousedown",p),m()}};
@@ -1 +0,0 @@
1
- import waitFrames from"./waitFrames.js";export const onEvent=(e,t,n,o=document)=>{e instanceof EventTarget?t.toLowerCase().split(" ").forEach((t=>{e.addEventListener(t,n)})):e instanceof NodeList||e instanceof Array?e.forEach((e=>onEvent(e,t,n))):"string"==typeof e&&o.querySelectorAll(e).forEach((e=>onEvent(e,t,n)))};export const offEvent=(e,t,n,o=document)=>{e instanceof EventTarget?t.toLowerCase().split(" ").forEach((t=>{e.removeEventListener(t,n)})):e instanceof NodeList||e instanceof Array?e.forEach((e=>offEvent(e,t,n))):"string"==typeof e&&o.querySelectorAll(e).forEach((e=>offEvent(e,t,n)))};export const dispatchEvent=(e,t,n,{scope:o=document,bubbles:i=!1}={})=>{e instanceof EventTarget?t.toLowerCase().split(" ").forEach((t=>{e.dispatchEvent(new CustomEvent(t,{bubbles:i,detail:n}))})):e instanceof NodeList||e instanceof Array?e.forEach((e=>dispatchEvent(e,t,n,{scope:o,bubbles:i}))):"string"==typeof e&&o.querySelectorAll(e).forEach((e=>dispatchEvent(e,t,n,{scope:o,bubbles:i})))};export const isInView=async e=>{await waitFrames(2);const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth;if(t.bottom<0||t.top>n||t.right<0||t.left>o)return!1;for(;e;){const t=getComputedStyle(e);if("none"===t.display||"hidden"===t.visibility)return!1;e=e.parentElement}return!0};export const firstFocusable=e=>e.querySelector('a[href]:not([disabled]), button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])');export const setProp=(e,t,n,o=document)=>{e instanceof HTMLElement?e[t]=n:e instanceof NodeList||e instanceof Array?[...e].forEach((e=>dispatchEvent(e,t,n))):"string"==typeof e&&dispatchEvent(o.querySelectorAll(e),t,n)};export default{onEvent:onEvent,offEvent:offEvent,dispatchEvent:dispatchEvent,isInView:isInView,firstFocusable:firstFocusable,setProp:setProp};
@@ -1 +0,0 @@
1
- export const getDir=async()=>{};let id,interval=1e3;const watchers=new Map,poll=()=>{};export const watchDir=async(t,c,e=1e3)=>{};export const unwatchDir=async(t,c)=>{};
@@ -1 +0,0 @@
1
- export default(e,i,t)=>{const s=new Date(parseInt(e));if(i){const e=(e,i)=>("000"+e).slice(-1*i),t={YYYY:s.getFullYear(),YY:String(s.getFullYear()).slice(-2),MM:e(s.getMonth()+1,2),M:s.getMonth()+1,DD:e(s.getDate(),2),D:s.getDate(),hh:e(s.getHours(),2),h:s.getHours(),mm:e(s.getMinutes(),2),m:s.getMinutes(),ss:e(s.getSeconds(),2),s:s.getSeconds(),iiii:e(s.getMilliseconds(),3),iii:e(s.getMilliseconds(),3),ii:e(s.getMilliseconds(),2),i:s.getMilliseconds()};return i.replace(/YYYY|YY|MM|M|DD|D|hh|h|mm|m|ss|s|iiii|iii|ii|i/g,(e=>t[e]))}return s.toLocaleString(t||navigator.language)};
@@ -1 +0,0 @@
1
- import fs from"fs/promises";import path from"path";export async function ensureDir(i){try{await fs.mkdir(i,{recursive:!0})}catch(i){if("EEXIST"!==i.code)throw i}}export async function copyDir(i,r){await ensureDir(r);const t=await fs.readdir(i,{withFileTypes:!0});for(const a of t){const t=path.join(i,a.name),o=path.join(r,a.name);a.isDirectory()?await copyDir(t,o):await fs.copyFile(t,o)}}export async function emptyDir(i){try{const r=await fs.readdir(i);await Promise.all(r.map((r=>fs.rm(path.join(i,r),{recursive:!0,force:!0}))))}catch(i){if("ENOENT"!==i.code)throw i}}
@@ -1 +0,0 @@
1
- export const fuzzyMatch=(t,r)=>{const e=((t,r)=>{const e=t.length,a=r.length,n=Array.from({length:e+1},(()=>Array(a+1).fill(0)));for(let h=0;h<=e;h++)for(let e=0;e<=a;e++)n[h][e]=0===h?e:0===e?h:Math.min(n[h-1][e-1]+(t.charAt(h-1)===r.charAt(e-1)?0:1),n[h][e-1]+1,n[h-1][e]+1);return n[e][a]})(t.toLowerCase(),r.toLowerCase());if(0===e)return 10;const a=Math.max(0,10-e/3),n=Math.min((t.length-e)/t.length,1);return Math.round(5*a+5*n)};export const fuzzyMatchArray=(t,r)=>{const e=t.map((t=>fuzzyMatch(t,r))).filter((t=>0!==t));if(0===e.length)return 0;return e.reduce(((t,r)=>t+r),0)/e.length};export default{fuzzyMatch:fuzzyMatch,fuzzyMatchArray:fuzzyMatchArray};
@@ -1 +0,0 @@
1
- export default()=>window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";
@@ -1 +0,0 @@
1
- export default(e,n="stylesheet")=>new Promise(((o,t)=>{const r=document.createElement("link");r.rel=n,r.href=e,r.onload=o,r.onerror=t,document.head.appendChild(r)}));
@@ -1 +0,0 @@
1
- export default(e,o="module")=>new Promise(((t,d)=>{const n=document.createElement("script");n.type=o,n.src=e,n.onload=t,n.onerror=d,document.head.appendChild(n)}));
@@ -1 +0,0 @@
1
- export function minifyCss(e){return e.replace(/\s*\{\s*/g,"{").replace(/\s*\}\s*/g,"}").replace(/\n/g,"").replace(/\r/g,"").replace(/\s+/g," ").replace(/\s*\:\s*/g,":").replace(/\s*\;\s*/g,";").replace(/;\}/g,"}")}
@@ -1 +0,0 @@
1
- import{typeOf}from"./type.js";export const toJson=e=>JSON.stringify(e,((t,n)=>""!==t&&n===e?"<<Circular Reference>>":"undefined"!=typeof Element&&n instanceof Element?n.outerHTML:"function"===typeOf(n)?`<<Function ${t}>>`:n));export const flattenObject=(e,t=100,n=0,o=[])=>{const r=n+1;return null===e?{}:Object.keys(e).reduce(((n,c)=>{const s=e[c],l=[...o,c].join(".");return"undefined"!==typeOf(Element)&&s instanceof Element?{...n,[l]:s.outerHTML}:null===s?{...n,[l]:null}:"object"==typeof s?t<=r?{...n,[l]:"<<Max Depth Reached>>"}:{...n,...flattenObject(s,t,r,[...o,c])}:{...n,[l]:s}}),{})};export const flattenedObjects=(...e)=>e.map((e=>flattenObject(e)));export const objectSummary=(e,t=100)=>{if("object"==typeof e){const n=flattenObject(e),o=[];return Object.keys(n).forEach((e=>{o.push(`${e} = ${objectSummary(n[e])}`)})),o.join(", ").substring(0,t)}return`${e}`.substring(0,t)};export const clone=e=>{const t=typeof e,n="undefined"==typeof window?class{}:window.Element;return e instanceof n?e.outerHTML:null===e?null:["string","number","boolean","undefined","bigint"].includes(t)?e:"symbol"===t?"<<SYMBOL>>":"function"===t?"<<function>>":e instanceof Array?e.map((e=>clone(e))):"object"===t?Object.keys(e).reduce(((t,n)=>({...t,[n]:clone(e[n])})),{}):e};export const equalObjs=(...e)=>{if(e.length<2)return!0;const t=toJson(e[0]);for(let n=1;n<e.length;n++)if(t!==toJson(e[n]))return!1;return!0};const pruneVar=e=>void 0===e?[void 0,!0]:"string"==typeof e?[e,""===e]:e instanceof Array?[e,0===e.length]:null===e?[e,!1]:"object"==typeof e?pruneObject(e):[e,!1],pruneObject=e=>{const t={};return Object.keys(e).forEach((n=>{const[o,r]=pruneVar(e[n]);r||(t[n]=o)})),[t,0===Object.keys(t).length]};export const prune=e=>pruneObject(e)[0];export const getAllKeys=(...e)=>[...new Set(e.map((e=>Object.keys(e))).flat())];export const getDifferencesKeys=(...e)=>getAllKeys(...e).map((t=>1!==new Set(e.map((e=>e[t]))).size?t:null)).filter((e=>null!==e));export const diff=(e,t)=>{const n={};function o(e,t,o){Array.isArray(t)&&Array.isArray(o)?t.length===o.length&&t.every(((e,t)=>e===o[t]))||(n[e.join(".")]={newValue:t,oldValue:o}):"object"==typeof t&&"object"==typeof o?r([...e],t,o):t!==o&&(n[e.join(".")]={newValue:t,oldValue:o})}function r(e,t,n){for(const r in t)if(t.hasOwnProperty(r)){o([...e,r],t[r],n[r])}}return r([],e,t),n};export const mapObject=(e,t)=>Object.entries(e).reduce(((e,[n,o])=>{const[r,c]=t(n,o);return e[r]=c,e}),{});export default{toJson:toJson,flattenObject:flattenObject,flattenedObjects:flattenedObjects,objectSummary:objectSummary,clone:clone,equalObjs:equalObjs,pruneVar:pruneVar,pruneObject:pruneObject,prune:prune,getAllKeys:getAllKeys,getDifferencesKeys:getDifferencesKeys,diff:diff,mapObject:mapObject};
package/dist/utils/raf.js DELETED
@@ -1 +0,0 @@
1
- const raf=(a,r=1)=>{requestAnimationFrame((()=>{1===r?a():raf(a,r-1)}))};export default raf;
@@ -1 +0,0 @@
1
- export const camelToDash=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();export const dashToCamel=e=>e.replace(/-([a-z])/g,((e,a)=>a.toUpperCase()));export const isCamelCase=e=>/[a-z][A-Z]/.test(e);export const getCase=e=>isCamelCase(e)?{camel:e,dash:camelToDash(e)}:{camel:dashToCamel(e),dash:e};export const escapeHTML=e=>e.replace(/[&<>"'/]/g,(e=>{switch(e){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&#39;";case"/":return"&#x2F;";default:return e}}));export const unescapeHTML=e=>e.replace(/&amp;|&lt;|&gt;|&quot;|&#39;|&#x2F;/g,(e=>{switch(e){case"&amp;":return"&";case"&lt;":return"<";case"&gt;":return">";case"&quot;":return'"';case"&#39;":return"'";case"&#x2F;":return"/";default:return e}}));export const trim=(e,a)=>e.replace(new RegExp(`^[${a}]+|[${a}]+$`,"g"),"");export const compoundKey=e=>trim(e.join("."),".");export const toTitleCase=e=>e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").trim().replace(/\s+/g," ").split(" ").map((e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase())).join(" ");export default{camelToDash:camelToDash,dashToCamel:dashToCamel,isCamelCase:isCamelCase,getCase:getCase,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,trim:trim,compoundKey:compoundKey};
@@ -1 +0,0 @@
1
- export default t=>{if("function"==typeof t)return t;if("string"==typeof t){const n=t.split(".");let o=window;for(const t of n)if(o=o[t],void 0===o)break;if("function"==typeof o)return o;try{return new Function(t)}catch(t){console.error("Failed to create function from string:",t)}}return()=>t};
@@ -1 +0,0 @@
1
- export const typeOf=e=>null===e?"null":e instanceof Array?"array":"undefined"!=typeof Element&&e instanceof Element?"element":typeof e;export const isType=(e,t)=>typeOf(e)===t;export default{typeOf:typeOf,isType:isType};
@@ -1 +0,0 @@
1
- export default(e=1)=>new Promise((t=>{let n=0;requestAnimationFrame((function i(){n++,n>=e?t():requestAnimationFrame(i)}))}));
@@ -1 +0,0 @@
1
- const serializeDir=async a=>{const e=[];for await(const{kind:i,name:t}of a.values())e.push(`${i}:${t}`);return e.join("|")};export default async(a,e,i=1e3)=>{let t=await serializeDir(a);return setInterval((async()=>{const i=await serializeDir(a);i!=t&&(t=i,e())}),i)};
@@ -1 +0,0 @@
1
- import debounce from"./debounce.js";const handlers=new Set;window.addEventListener("resize",debounce((()=>{const e=window.innerWidth;handlers.forEach((n=>n(e)))})));export const watchWindowSize=e=>(handlers.add(e),window.innerWidth);export const unwatchWindowSize=e=>{handlers.remove(e)};