kempo 4.2.19 → 4.2.21

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 (176) hide show
  1. package/app-public/CATCH.page.html +15 -0
  2. package/app-public/kempo-global.global.html +0 -6
  3. package/bin/cli.js +4 -21
  4. package/dist/admin/accounts/groups/[name]/index.page.html +114 -4
  5. package/dist/admin/accounts/groups/index.page.html +89 -4
  6. package/dist/admin/accounts/permissions/index.page.html +86 -4
  7. package/dist/admin/accounts/users/[id]/index.page.html +117 -3
  8. package/dist/admin/accounts/users/index.page.html +118 -4
  9. package/dist/admin/components/AddGroupControl.js +1 -5
  10. package/dist/admin/components/AddGroupControl.js.map +1 -1
  11. package/dist/admin/components/AdminTableControl.js +2 -0
  12. package/dist/admin/components/AdminTableControl.js.map +1 -0
  13. package/dist/admin/components/ClearExpiredSessionsControl.js +1 -5
  14. package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -1
  15. package/dist/admin/components/GroupDeleteSelected.js +1 -5
  16. package/dist/admin/components/GroupDeleteSelected.js.map +1 -1
  17. package/dist/admin/components/GroupRemoveRecord.js +1 -5
  18. package/dist/admin/components/GroupRemoveRecord.js.map +1 -1
  19. package/dist/admin/components/TableRowDelete.js +1 -3
  20. package/dist/admin/components/TableRowDelete.js.map +1 -1
  21. package/dist/admin/components/TableRowLink.js +1 -7
  22. package/dist/admin/components/TableRowLink.js.map +1 -1
  23. package/dist/admin/components/tableControls/AddMember.js +1 -5
  24. package/dist/admin/components/tableControls/AddMember.js.map +1 -1
  25. package/dist/admin/components/tableControls/AddPermission.js +1 -5
  26. package/dist/admin/components/tableControls/AddPermission.js.map +1 -1
  27. package/dist/admin/components/tableControls/InstallExtension.js +1 -5
  28. package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
  29. package/dist/admin/components/tableControls/UninstallExtension.js +1 -5
  30. package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
  31. package/dist/admin/content/fragments/edit/index.page.html +8 -1
  32. package/dist/admin/content/fragments/index.page.html +88 -3
  33. package/dist/admin/content/globals/edit/index.page.html +8 -1
  34. package/dist/admin/content/globals/index.page.html +103 -8
  35. package/dist/admin/content/pages/edit/index.page.html +8 -1
  36. package/dist/admin/content/pages/index.page.html +225 -28
  37. package/dist/admin/content/templates/edit/index.page.html +8 -1
  38. package/dist/admin/content/templates/index.page.html +117 -3
  39. package/dist/admin/default.template.html +20 -1
  40. package/dist/admin/extensions/index.page.html +59 -2
  41. package/dist/admin/icons/extension_add.svg +1 -0
  42. package/dist/admin/icons/extension_remove.svg +1 -0
  43. package/dist/admin/index.page.html +5 -1
  44. package/dist/admin/init.js.map +1 -1
  45. package/dist/admin/nav.fragment.html +84 -2
  46. package/dist/admin/settings/[owner]/[name]/index.page.html +110 -4
  47. package/dist/admin/settings/index.page.html +89 -4
  48. package/dist/kempo/api/admin-globals/DELETE.js +1 -1
  49. package/dist/kempo/api/admin-globals/DELETE.js.map +1 -1
  50. package/dist/kempo/api/admin-globals/GET.js +1 -1
  51. package/dist/kempo/api/admin-globals/GET.js.map +1 -1
  52. package/dist/kempo/api/admin-globals/POST.js +1 -1
  53. package/dist/kempo/api/admin-globals/POST.js.map +1 -1
  54. package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
  55. package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -1
  56. package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
  57. package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -1
  58. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
  59. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -1
  60. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
  61. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -1
  62. package/dist/kempo/api/extensions/DELETE.js +1 -1
  63. package/dist/kempo/api/extensions/DELETE.js.map +1 -1
  64. package/dist/kempo/api/extensions/POST.js +1 -1
  65. package/dist/kempo/api/extensions/POST.js.map +1 -1
  66. package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
  67. package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -1
  68. package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
  69. package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -1
  70. package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
  71. package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -1
  72. package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
  73. package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -1
  74. package/dist/kempo/api/fragments/DELETE.js +1 -1
  75. package/dist/kempo/api/fragments/DELETE.js.map +1 -1
  76. package/dist/kempo/api/fragments/GET.js +1 -1
  77. package/dist/kempo/api/fragments/GET.js.map +1 -1
  78. package/dist/kempo/api/fragments/POST.js +1 -1
  79. package/dist/kempo/api/fragments/POST.js.map +1 -1
  80. package/dist/kempo/api/fragments/disable/PUT.js +1 -1
  81. package/dist/kempo/api/fragments/disable/PUT.js.map +1 -1
  82. package/dist/kempo/api/fragments/enable/PUT.js +1 -1
  83. package/dist/kempo/api/fragments/enable/PUT.js.map +1 -1
  84. package/dist/kempo/api/fragments/file/GET.js +1 -1
  85. package/dist/kempo/api/fragments/file/GET.js.map +1 -1
  86. package/dist/kempo/api/fragments/file/PATCH.js +1 -1
  87. package/dist/kempo/api/fragments/file/PATCH.js.map +1 -1
  88. package/dist/kempo/api/fragments/file/PUT.js +1 -1
  89. package/dist/kempo/api/fragments/file/PUT.js.map +1 -1
  90. package/dist/kempo/api/fragments/lock/PUT.js +1 -1
  91. package/dist/kempo/api/fragments/lock/PUT.js.map +1 -1
  92. package/dist/kempo/api/globals/DELETE.js +1 -1
  93. package/dist/kempo/api/globals/DELETE.js.map +1 -1
  94. package/dist/kempo/api/globals/GET.js +1 -1
  95. package/dist/kempo/api/globals/GET.js.map +1 -1
  96. package/dist/kempo/api/globals/POST.js +1 -1
  97. package/dist/kempo/api/globals/POST.js.map +1 -1
  98. package/dist/kempo/api/globals/disable/PUT.js +1 -1
  99. package/dist/kempo/api/globals/disable/PUT.js.map +1 -1
  100. package/dist/kempo/api/globals/enable/PUT.js +1 -1
  101. package/dist/kempo/api/globals/enable/PUT.js.map +1 -1
  102. package/dist/kempo/api/globals/entry/GET.js +1 -1
  103. package/dist/kempo/api/globals/entry/GET.js.map +1 -1
  104. package/dist/kempo/api/globals/entry/PUT.js +1 -1
  105. package/dist/kempo/api/globals/entry/PUT.js.map +1 -1
  106. package/dist/kempo/api/globals/lock/PUT.js +1 -1
  107. package/dist/kempo/api/globals/lock/PUT.js.map +1 -1
  108. package/dist/kempo/api/pages/DELETE.js +1 -1
  109. package/dist/kempo/api/pages/DELETE.js.map +1 -1
  110. package/dist/kempo/api/pages/GET.js +1 -1
  111. package/dist/kempo/api/pages/GET.js.map +1 -1
  112. package/dist/kempo/api/pages/POST.js +1 -1
  113. package/dist/kempo/api/pages/POST.js.map +1 -1
  114. package/dist/kempo/api/pages/directories/GET.js +1 -1
  115. package/dist/kempo/api/pages/directories/GET.js.map +1 -1
  116. package/dist/kempo/api/pages/disable/PUT.js +1 -1
  117. package/dist/kempo/api/pages/disable/PUT.js.map +1 -1
  118. package/dist/kempo/api/pages/enable/PUT.js +1 -1
  119. package/dist/kempo/api/pages/enable/PUT.js.map +1 -1
  120. package/dist/kempo/api/pages/file/GET.js +1 -1
  121. package/dist/kempo/api/pages/file/GET.js.map +1 -1
  122. package/dist/kempo/api/pages/file/PATCH.js +1 -1
  123. package/dist/kempo/api/pages/file/PATCH.js.map +1 -1
  124. package/dist/kempo/api/pages/file/PUT.js +1 -1
  125. package/dist/kempo/api/pages/file/PUT.js.map +1 -1
  126. package/dist/kempo/api/pages/lock/PUT.js +1 -1
  127. package/dist/kempo/api/pages/lock/PUT.js.map +1 -1
  128. package/dist/kempo/api/pages/rescan/POST.js +2 -0
  129. package/dist/kempo/api/pages/rescan/POST.js.map +1 -0
  130. package/dist/kempo/api/pages/search/GET.js +1 -1
  131. package/dist/kempo/api/pages/search/GET.js.map +1 -1
  132. package/dist/kempo/api/pages/templates/GET.js +1 -1
  133. package/dist/kempo/api/pages/templates/GET.js.map +1 -1
  134. package/dist/kempo/api/templates/DELETE.js +1 -1
  135. package/dist/kempo/api/templates/DELETE.js.map +1 -1
  136. package/dist/kempo/api/templates/GET.js +1 -1
  137. package/dist/kempo/api/templates/GET.js.map +1 -1
  138. package/dist/kempo/api/templates/POST.js +1 -1
  139. package/dist/kempo/api/templates/POST.js.map +1 -1
  140. package/dist/kempo/api/templates/disable/PUT.js +1 -1
  141. package/dist/kempo/api/templates/disable/PUT.js.map +1 -1
  142. package/dist/kempo/api/templates/enable/PUT.js +1 -1
  143. package/dist/kempo/api/templates/enable/PUT.js.map +1 -1
  144. package/dist/kempo/api/templates/file/GET.js +1 -1
  145. package/dist/kempo/api/templates/file/GET.js.map +1 -1
  146. package/dist/kempo/api/templates/file/PATCH.js +1 -1
  147. package/dist/kempo/api/templates/file/PATCH.js.map +1 -1
  148. package/dist/kempo/api/templates/file/PUT.js +1 -1
  149. package/dist/kempo/api/templates/file/PUT.js.map +1 -1
  150. package/dist/kempo/api/templates/lock/PUT.js +1 -1
  151. package/dist/kempo/api/templates/lock/PUT.js.map +1 -1
  152. package/dist/kempo/api/user/[userid]/name/GET.js +2 -0
  153. package/dist/kempo/api/user/[userid]/name/GET.js.map +1 -0
  154. package/dist/kempo/components/UserDisplayName.js +2 -0
  155. package/dist/kempo/components/UserDisplayName.js.map +1 -0
  156. package/dist/kempo/sdk.js +1 -1
  157. package/dist/kempo/sdk.js.map +1 -1
  158. package/middleware/kempo.js +99 -25
  159. package/package.json +16 -9
  160. package/server/utils/admin-global-content/createAdminGlobalContent.js +4 -3
  161. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +2 -2
  162. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +2 -2
  163. package/server/utils/admin-global-content/disableAdminGlobalContent.js +2 -2
  164. package/server/utils/admin-global-content/enableAdminGlobalContent.js +2 -2
  165. package/server/utils/admin-global-content/getAdminGlobalContent.js +2 -2
  166. package/server/utils/admin-global-content/helpers.js +12 -1
  167. package/server/utils/admin-global-content/listAdminGlobalContent.js +2 -2
  168. package/server/utils/admin-global-content/updateAdminGlobalContent.js +2 -2
  169. package/server/utils/email/sendEmail.js +9 -3
  170. package/server/utils/extensions/uninstallExtension.js +54 -21
  171. package/server/utils/fragments/listFragments.js +10 -1
  172. package/server/utils/hooks/triggerHook.js +15 -13
  173. package/server/utils/pages/listPages.js +57 -7
  174. package/app-public/kempo-global.global-disabled.html +0 -0
  175. package/app-public/new-page.page.html +0 -17
  176. package/app-public/test.page.html +0 -21
@@ -1,7 +1,118 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Users - Admin"><content><script type="module" src="/kempo-ui/components/Table.js"></script><script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script><script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script><script type="module" src="/kempo-ui/components/tableControls/Edit.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script><script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script><script type="module" src="/kempo-ui/components/Toggle.js"></script><script type="module" src="/admin/components/TableRowLink.js"></script><script type="module" src="/kempo/components/Permission.js"></script><div class="d-f mb" style="align-items: center;"><h1 class="flex mb0">Users</h1><k-permission has="system:user:create"><button id="createUserBtn" class="primary">Create User</button></k-permission></div><k-table id="usersTable" enable-pages page-size="10" page-size-options="[10,25,50]" placeholder="No users found." filtered-placeholder="No users match your search."><admin-table-row-link slot="before" url-pattern="/admin/accounts/users/{id}" field-name="id"></admin-table-row-link><div slot="top" class="d-f full" style="align-items: center;"><div><k-permission has="system:user:delete"><k-tc-delete-selected></k-tc-delete-selected></k-permission></div></div><div class="d-f full" style="align-items: center;"><div><k-tc-first-page></k-tc-first-page><k-tc-prev-page></k-tc-prev-page><k-tc-next-page></k-tc-next-page><k-tc-last-page></k-tc-last-page></div><div class="flex"></div><div><k-tc-page-select></k-tc-page-select></div><div class="flex"></div><div><k-tc-page-size></k-tc-page-size></div></div></k-table><script type="module">import { getUsers, createUser, updateUser, deleteUsers, getAllCurrentUserPermissions } from '/kempo/sdk.js';
4
+ <page title="Users - Admin">
5
+ <content>
6
+ <script
7
+ type="module"
8
+ src="/kempo-ui/components/Table.js"
9
+ ></script>
10
+ <script
11
+ type="module"
12
+ src="/kempo-ui/components/controls/TcFirstPage.js"
13
+ ></script>
14
+ <script
15
+ type="module"
16
+ src="/kempo-ui/components/controls/TcPrevPage.js"
17
+ ></script>
18
+ <script
19
+ type="module"
20
+ src="/kempo-ui/components/controls/TcNextPage.js"
21
+ ></script>
22
+ <script
23
+ type="module"
24
+ src="/kempo-ui/components/controls/TcLastPage.js"
25
+ ></script>
26
+ <script
27
+ type="module"
28
+ src="/kempo-ui/components/controls/TcPageSelect.js"
29
+ ></script>
30
+ <script
31
+ type="module"
32
+ src="/kempo-ui/components/controls/TcPageSize.js"
33
+ ></script>
34
+ <script
35
+ type="module"
36
+ src="/kempo-ui/components/controls/TcEdit.js"
37
+ ></script>
38
+ <script
39
+ type="module"
40
+ src="/kempo-ui/components/controls/TcDeleteRecord.js"
41
+ ></script>
42
+ <script
43
+ type="module"
44
+ src="/kempo-ui/components/controls/TcDeleteSelected.js"
45
+ ></script>
46
+ <script
47
+ type="module"
48
+ src="/kempo-ui/components/Toggle.js"
49
+ ></script>
50
+ <script
51
+ type="module"
52
+ src="/admin/components/TableRowLink.js"
53
+ ></script>
54
+ <script
55
+ type="module"
56
+ src="/kempo/components/Permission.js"
57
+ ></script>
58
+ <div
59
+ class="d-f mb"
60
+ style="align-items: center;"
61
+ >
62
+ <h1 class="flex mb0">Users</h1>
63
+ <k-permission has="system:user:create">
64
+ <button
65
+ id="createUserBtn"
66
+ class="primary"
67
+ >Create User</button>
68
+ </k-permission>
69
+ </div>
70
+ <k-table
71
+ id="usersTable"
72
+ enable-pages
73
+ page-size="10"
74
+ page-size-options="[10,25,50]"
75
+ placeholder="No users found."
76
+ filtered-placeholder="No users match your search."
77
+ >
78
+ <admin-table-row-link
79
+ slot="before"
80
+ url-pattern="/admin/accounts/users/{id}"
81
+ field-name="id"
82
+ ></admin-table-row-link>
83
+ <div
84
+ slot="top"
85
+ class="d-f full"
86
+ style="align-items: center;"
87
+ >
88
+ <div>
89
+ <k-permission has="system:user:delete">
90
+ <kc-tc-delete-selected></kc-tc-delete-selected>
91
+ </k-permission>
92
+ </div>
93
+ </div>
94
+ <div
95
+ class="d-f full"
96
+ style="align-items: center;"
97
+ >
98
+ <div>
99
+ <kc-tc-first-page></kc-tc-first-page>
100
+ <kc-tc-prev-page></kc-tc-prev-page>
101
+ <kc-tc-next-page></kc-tc-next-page>
102
+ <kc-tc-last-page></kc-tc-last-page>
103
+ </div>
104
+ <div class="flex"></div>
105
+ <div>
106
+ <kc-tc-page-select></kc-tc-page-select>
107
+ </div>
108
+ <div class="flex"></div>
109
+ <div>
110
+ <kc-tc-page-size></kc-tc-page-size>
111
+ </div>
112
+ </div>
113
+ </k-table>
114
+ <script type="module">
115
+ import { getUsers, createUser, updateUser, deleteUsers, getAllCurrentUserPermissions } from '/kempo/sdk.js';
5
116
  import { html } from '/kempo-ui/lit-all.min.js';
6
117
  import Toast from '/kempo-ui/components/Toast.js';
7
118
  import Dialog from '/kempo-ui/components/Dialog.js';
@@ -13,7 +124,7 @@
13
124
 
14
125
  if (myPerms.has('system:user:update')) {
15
126
  $table.setAttribute('request-edit', '');
16
- const edit = document.createElement('k-tc-edit');
127
+ const edit = document.createElement('kc-tc-edit');
17
128
  edit.setAttribute('slot', 'after');
18
129
  $table.appendChild(edit);
19
130
  }
@@ -21,7 +132,7 @@
21
132
  if (myPerms.has('system:user:delete')) {
22
133
  $table.setAttribute('request-delete', '');
23
134
  $table.setAttribute('enable-selection', '');
24
- const del = document.createElement('k-tc-delete-record');
135
+ const del = document.createElement('kc-tc-delete-record');
25
136
  del.setAttribute('slot', 'after');
26
137
  $table.appendChild(del);
27
138
  }
@@ -157,4 +268,7 @@
157
268
  cancelText: 'Cancel'
158
269
  });
159
270
  });
160
- }</script></content></page>
271
+ }
272
+ </script>
273
+ </content>
274
+ </page>
@@ -1,6 +1,2 @@
1
- import o from"/kempo-ui/components/tableControls/TableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class n extends o{render(){return t`
2
- <button class="no-btn icon-btn" title="Add to Group">
3
- <k-icon name="add"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-add-group-control",n);
1
+ import t from"./AdminTableControl.js";import{html as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class o extends t{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add to Group")}render(){return e`<k-icon name="add"></k-icon>`}}customElements.define("admin-add-group-control",o);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\AddGroupControl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\AddGroupControl.js","names":["TableControl","html","AddGroupControl","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class AddGroupControl extends TableControl {\r\n render() {\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Add to Group\">\r\n <k-icon name=\"add\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-add-group-control', AddGroupControl);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,iCACd,8CAEQ,MAAMC,UAAwBF,EAC3C,MAAAG,GACE,OAAOF,CAAI;;;;KAKb,EAGFG,eAAeC,OAAO,0BAA2BH","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\AddGroupControl.js","names":["AdminTableControl","html","AddGroupControl","connectedCallback","super","this","hasAttribute","title","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class AddGroupControl extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Add to Group';\n }\n\n render(){ return html`<k-icon name=\"add\"></k-icon>`; }\n}\n\ncustomElements.define('admin-add-group-control', AddGroupControl);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAwBF,EAC3C,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,eAC/C,CAEA,MAAAC,GAAU,OAAOP,CAAI,8BAAgC,EAGvDQ,eAAeC,OAAO,0BAA2BR","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import t from"/kempo-ui/components/controls/ButtonControl.js";export default class o extends t{get table(){return this.host}get record(){const t=this.closest(".record"),o=t?.dataset?.index;return void 0===o?null:this.host?.records?.[o]??null}}
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\AdminTableControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\admin\\components\\AdminTableControl.js","names":["ButtonControl","AdminTableControl","table","this","host","record","row","closest","index","dataset","undefined","records"],"sources":["0"],"sourcesContent":["import ButtonControl from '/kempo-ui/components/controls/ButtonControl.js';\n\n/*\n Shared base for the admin's table controls.\n\n kempo-ui's Control resolves its host through closest('[controlled]'), which k-table sets on\n itself, but it deliberately leaves the per-row lookup to each control. Rather than repeat that\n lookup in every admin control, it lives here once — it is the one place coupled to k-table's row\n markup (`.record[data-index]` indexing into `host.records`).\n\n Controls that sit in a row get a `record`; controls placed at the table level get `null`.\n*/\nexport default class AdminTableControl extends ButtonControl {\n get table(){\n return this.host;\n }\n\n get record(){\n const row = this.closest('.record');\n const index = row?.dataset?.index;\n if(index === undefined) return null;\n return this.host?.records?.[index] ?? null;\n }\n}\n"],"mappings":"OAAOA,MAAmB,gEAYX,MAAMC,UAA0BD,EAC7C,SAAIE,GACF,OAAOC,KAAKC,IACd,CAEA,UAAIC,GACF,MAAMC,EAAMH,KAAKI,QAAQ,WACnBC,EAAQF,GAAKG,SAASD,MAC5B,YAAaE,IAAVF,EAA4B,KACxBL,KAAKC,MAAMO,UAAUH,IAAU,IACxC","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import e from"/kempo-ui/components/tableControls/TableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class n extends e{render(){return o`
2
- <button class="no-btn icon-btn" title="Clear Expired Sessions">
3
- <k-icon name="timer_off"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-clear-expired-sessions",n);
1
+ import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class i extends e{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Clear Expired Sessions")}render(){return t`<k-icon name="timer_off"></k-icon>`}}customElements.define("admin-clear-expired-sessions",i);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\ClearExpiredSessionsControl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\ClearExpiredSessionsControl.js","names":["TableControl","html","ClearExpiredSessionsControl","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class ClearExpiredSessionsControl extends TableControl {\r\n render() {\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Clear Expired Sessions\">\r\n <k-icon name=\"timer_off\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-clear-expired-sessions', ClearExpiredSessionsControl);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,iCACd,8CAEQ,MAAMC,UAAoCF,EACvD,MAAAG,GACE,OAAOF,CAAI;;;;KAKb,EAGFG,eAAeC,OAAO,+BAAgCH","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\ClearExpiredSessionsControl.js","names":["AdminTableControl","html","ClearExpiredSessionsControl","connectedCallback","super","this","hasAttribute","title","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class ClearExpiredSessionsControl extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Clear Expired Sessions';\n }\n\n render(){ return html`<k-icon name=\"timer_off\"></k-icon>`; }\n}\n\ncustomElements.define('admin-clear-expired-sessions', ClearExpiredSessionsControl);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAoCF,EACvD,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,yBAC/C,CAEA,MAAAC,GAAU,OAAOP,CAAI,oCAAsC,EAG7DQ,eAAeC,OAAO,+BAAgCR","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import e from"/kempo-ui/components/tableControls/TableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class s extends e{constructor(){super({maxWidth:null}),this.selectionChangeHandler=()=>this.requestUpdate()}connectedCallback(){super.connectedCallback(),this.onTableEvent("selectionChange",this.selectionChangeHandler)}disconnectedCallback(){super.disconnectedCallback(),this.table&&this.table.removeEventListener("selectionChange",this.selectionChangeHandler)}deleteSelected=()=>{if(!this.table)return;const e=this.table.getSelectedRecords(),t=e.filter(e=>"system:Users"!==e.name);if(!t.length)return;const s=e.some(e=>"system:Users"===e.name);this.dispatchEvent(new CustomEvent("groupRemoveSelected",{detail:{records:t,systemUsersSkipped:s},bubbles:!0}))};get deletableCount(){return this.table?this.table.getSelectedRecords().filter(e=>"system:Users"!==e.name).length:0}render(){return t`
2
- <button class="no-btn icon-btn" ?disabled="${0===this.deletableCount}" @click="${this.deleteSelected}">
3
- <k-icon name="delete"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-group-delete-selected",s);
1
+ import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class s extends e{static hostEvents=["selectionChange"];connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Remove Selected")}get deletableCount(){return this.table?this.table.getSelectedRecords().filter(e=>"system:Users"!==e.name).length:0}willUpdate(){this.disabled=0===this.deletableCount}handleAction(){if(!this.table)return;const e=this.table.getSelectedRecords(),t=e.filter(e=>"system:Users"!==e.name);t.length&&this.dispatchEvent(new CustomEvent("groupRemoveSelected",{detail:{records:t,systemUsersSkipped:e.some(e=>"system:Users"===e.name)},bubbles:!0}))}render(){return t`<k-icon name="delete"></k-icon>`}}customElements.define("admin-group-delete-selected",s);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\GroupDeleteSelected.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\GroupDeleteSelected.js","names":["TableControl","html","GroupDeleteSelected","constructor","super","maxWidth","this","selectionChangeHandler","requestUpdate","connectedCallback","onTableEvent","disconnectedCallback","table","removeEventListener","deleteSelected","selected","getSelectedRecords","records","filter","r","name","length","systemUsersSkipped","some","dispatchEvent","CustomEvent","detail","bubbles","deletableCount","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class GroupDeleteSelected extends TableControl {\r\n constructor() {\r\n super({ maxWidth: null });\r\n this.selectionChangeHandler = () => this.requestUpdate();\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.onTableEvent('selectionChange', this.selectionChangeHandler);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n if(this.table) this.table.removeEventListener('selectionChange', this.selectionChangeHandler);\r\n }\r\n\r\n deleteSelected = () => {\r\n if(!this.table) return;\r\n const selected = this.table.getSelectedRecords();\r\n const records = selected.filter(r => r.name !== 'system:Users');\r\n if(!records.length) return;\r\n const systemUsersSkipped = selected.some(r => r.name === 'system:Users');\r\n this.dispatchEvent(new CustomEvent('groupRemoveSelected', {\r\n detail: { records, systemUsersSkipped },\r\n bubbles: true\r\n }));\r\n };\r\n\r\n get deletableCount() {\r\n if(!this.table) return 0;\r\n return this.table.getSelectedRecords().filter(r => r.name !== 'system:Users').length;\r\n }\r\n\r\n render() {\r\n return html`\r\n <button class=\"no-btn icon-btn\" ?disabled=\"${this.deletableCount === 0}\" @click=\"${this.deleteSelected}\">\r\n <k-icon name=\"delete\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-group-delete-selected', GroupDeleteSelected);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,iCACd,8CAEQ,MAAMC,UAA4BF,EAC/C,WAAAG,GACEC,MAAM,CAAEC,SAAU,OAClBC,KAAKC,uBAAyB,IAAMD,KAAKE,eAC3C,CAEA,iBAAAC,GACEL,MAAMK,oBACNH,KAAKI,aAAa,kBAAmBJ,KAAKC,uBAC5C,CAEA,oBAAAI,GACEP,MAAMO,uBACHL,KAAKM,OAAON,KAAKM,MAAMC,oBAAoB,kBAAmBP,KAAKC,uBACxE,CAEAO,eAAiB,KACf,IAAIR,KAAKM,MAAO,OAChB,MAAMG,EAAWT,KAAKM,MAAMI,qBACtBC,EAAUF,EAASG,OAAOC,GAAgB,iBAAXA,EAAEC,MACvC,IAAIH,EAAQI,OAAQ,OACpB,MAAMC,EAAqBP,EAASQ,KAAKJ,GAAgB,iBAAXA,EAAEC,MAChDd,KAAKkB,cAAc,IAAIC,YAAY,sBAAuB,CACxDC,OAAQ,CAAET,UAASK,sBACnBK,SAAS,MAIb,kBAAIC,GACF,OAAItB,KAAKM,MACFN,KAAKM,MAAMI,qBAAqBE,OAAOC,GAAgB,iBAAXA,EAAEC,MAAyBC,OADvD,CAEzB,CAEA,MAAAQ,GACE,OAAO5B,CAAI;mDAC4D,IAAxBK,KAAKsB,2BAAiCtB,KAAKQ;;;KAI5F,EAGFgB,eAAeC,OAAO,8BAA+B7B","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\GroupDeleteSelected.js","names":["AdminTableControl","html","GroupDeleteSelected","static","connectedCallback","super","this","hasAttribute","title","deletableCount","table","getSelectedRecords","filter","r","name","length","willUpdate","disabled","handleAction","selected","records","dispatchEvent","CustomEvent","detail","systemUsersSkipped","some","bubbles","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class GroupDeleteSelected extends AdminTableControl {\n // Control re-renders on these host events, replacing the manual listener wiring\n static hostEvents = ['selectionChange'];\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Remove Selected';\n }\n\n get deletableCount(){\n if(!this.table) return 0;\n return this.table.getSelectedRecords().filter(r => r.name !== 'system:Users').length;\n }\n\n willUpdate(){\n this.disabled = this.deletableCount === 0;\n }\n\n handleAction(){\n if(!this.table) return;\n const selected = this.table.getSelectedRecords();\n const records = selected.filter(r => r.name !== 'system:Users');\n if(!records.length) return;\n this.dispatchEvent(new CustomEvent('groupRemoveSelected', {\n detail: { records, systemUsersSkipped: selected.some(r => r.name === 'system:Users') },\n bubbles: true\n }));\n }\n\n render(){ return html`<k-icon name=\"delete\"></k-icon>`; }\n}\n\ncustomElements.define('admin-group-delete-selected', GroupDeleteSelected);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAA4BF,EAE/CG,kBAAoB,CAAC,mBAErB,iBAAAC,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,kBAC/C,CAEA,kBAAIC,GACF,OAAIH,KAAKI,MACFJ,KAAKI,MAAMC,qBAAqBC,OAAOC,GAAgB,iBAAXA,EAAEC,MAAyBC,OADvD,CAEzB,CAEA,UAAAC,GACEV,KAAKW,SAAmC,IAAxBX,KAAKG,cACvB,CAEA,YAAAS,GACE,IAAIZ,KAAKI,MAAO,OAChB,MAAMS,EAAWb,KAAKI,MAAMC,qBACtBS,EAAUD,EAASP,OAAOC,GAAgB,iBAAXA,EAAEC,MACnCM,EAAQL,QACZT,KAAKe,cAAc,IAAIC,YAAY,sBAAuB,CACxDC,OAAQ,CAAEH,UAASI,mBAAoBL,EAASM,KAAKZ,GAAgB,iBAAXA,EAAEC,OAC5DY,SAAS,IAEb,CAEA,MAAAC,GAAU,OAAO1B,CAAI,iCAAmC,EAG1D2B,eAAeC,OAAO,8BAA+B3B","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import e from"/kempo-ui/components/tableControls/TableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class t extends e{remove=()=>{this.record&&this.table.deleteRecord(this.record)};render(){return"system:Users"===this.record?.name?o``:o`
2
- <button class="no-btn icon-btn" @click="${this.remove}">
3
- <k-icon name="delete"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-group-remove-record",t);
1
+ import e from"./AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class o extends e{connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Remove from Group")}handleAction(){this.record&&"system:Users"!==this.record.name&&this.table.deleteRecord(this.record)}render(){return"system:Users"===this.record?.name?t``:t`<k-icon name="delete"></k-icon>`}}customElements.define("admin-group-remove-record",o);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\GroupRemoveRecord.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\GroupRemoveRecord.js","names":["TableControl","html","GroupRemoveRecord","remove","this","record","table","deleteRecord","render","name","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class GroupRemoveRecord extends TableControl {\r\n remove = () => {\r\n if(this.record) this.table.deleteRecord(this.record);\r\n };\r\n\r\n render() {\r\n if(this.record?.name === 'system:Users') return html``;\r\n return html`\r\n <button class=\"no-btn icon-btn\" @click=\"${this.remove}\">\r\n <k-icon name=\"delete\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-group-remove-record', GroupRemoveRecord);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,iCACd,8CAEQ,MAAMC,UAA0BF,EAC7CG,OAAS,KACJC,KAAKC,QAAQD,KAAKE,MAAMC,aAAaH,KAAKC,SAG/C,MAAAG,GACE,MAAyB,iBAAtBJ,KAAKC,QAAQI,KAAgCR,CAAI,GAC7CA,CAAI;gDACiCG,KAAKD;;;KAInD,EAGFO,eAAeC,OAAO,4BAA6BT","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\GroupRemoveRecord.js","names":["AdminTableControl","html","GroupRemoveRecord","connectedCallback","super","this","hasAttribute","title","handleAction","record","name","table","deleteRecord","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class GroupRemoveRecord extends AdminTableControl {\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Remove from Group';\n }\n\n handleAction(){\n if(this.record && this.record.name !== 'system:Users') this.table.deleteRecord(this.record);\n }\n\n render(){\n // system:Users is the built-in group every user belongs to and cannot be removed from\n if(this.record?.name === 'system:Users') return html``;\n return html`<k-icon name=\"delete\"></k-icon>`;\n }\n}\n\ncustomElements.define('admin-group-remove-record', GroupRemoveRecord);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAA0BF,EAC7C,iBAAAG,GACEC,MAAMD,oBACFE,KAAKC,aAAa,WAAUD,KAAKE,MAAQ,oBAC/C,CAEA,YAAAC,GACKH,KAAKI,QAA+B,iBAArBJ,KAAKI,OAAOC,MAAyBL,KAAKM,MAAMC,aAAaP,KAAKI,OACtF,CAEA,MAAAI,GAEE,MAAyB,iBAAtBR,KAAKI,QAAQC,KAAgCT,CAAI,GAC7CA,CAAI,iCACb,EAGFa,eAAeC,OAAO,4BAA6Bb","ignoreList":[]}
@@ -1,4 +1,2 @@
1
- import{html as e}from"/kempo-ui/lit-all.min.js";import t from"/kempo-ui/components/tableControls/TableControl.js";import o from"/kempo-ui/components/Dialog.js";import r from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static properties={maxWidth:{type:Number,attribute:"max-width"},sdkMethod:{type:String,attribute:"sdk-method"},primaryKey:{type:String,attribute:"primary-key"}};constructor(){super(),this.maxWidth=40,this.sdkMethod="deleteUsers",this.idField="id"}delete=()=>{this.record&&o.confirm("Are you sure you want to delete this record? This action cannot be undone.",async e=>{if(!e)return;const t=(await import("../../kempo/sdk.js"))[this.sdkMethod];if(!t)return void r.error("Delete method not found");const[o,i]=await t([this.record[this.primaryKey]]);o?r.error(o.msg||"Failed to delete record"):(this.table.deleteRecord(this.record),r.success("Record deleted successfully"))})};render(){return e`<button class="no-btn icon-btn" @click="${this.delete}">
2
- <slot><k-icon name="delete"></k-icon></slot>
3
- </button>`}}customElements.define("admin-table-row-delete",i);
1
+ import{html as e}from"/kempo-ui/lit-all.min.js";import t from"./AdminTableControl.js";import o from"/kempo-ui/components/Dialog.js";import r from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static properties={sdkMethod:{type:String,attribute:"sdk-method"},primaryKey:{type:String,attribute:"primary-key"}};constructor(){super(),this.sdkMethod="deleteUsers",this.idField="id"}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Delete Record")}delete=()=>{this.record&&o.confirm("Are you sure you want to delete this record? This action cannot be undone.",async e=>{if(!e)return;const t=(await(import("../../kempo/sdk.js")))[this.sdkMethod];if(!t)return void r.error("Delete method not found");const[o]=await t([this.record[this.primaryKey]]);o?r.error(o.msg||"Failed to delete record"):(this.table.deleteRecord(this.record),r.success("Record deleted successfully"))})};handleAction(){this.delete()}render(){return e`<slot><k-icon name="delete"></k-icon></slot>`}}customElements.define("admin-table-row-delete",i);
4
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\TableRowDelete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\TableRowDelete.js","names":["html","TableControl","Dialog","Toast","TableRowDelete","static","maxWidth","type","Number","attribute","sdkMethod","String","primaryKey","constructor","super","this","idField","delete","record","confirm","async","confirmed","deleteMethod","import","error","result","msg","table","deleteRecord","success","render","customElements","define"],"sources":["0"],"sourcesContent":["import { html } from '/kempo-ui/lit-all.min.js';\r\nimport TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class TableRowDelete extends TableControl {\r\n static properties = {\r\n maxWidth: { type: Number, attribute: 'max-width' },\r\n sdkMethod: { type: String, attribute: 'sdk-method' },\r\n primaryKey: { type: String, attribute: 'primary-key' }\r\n };\r\n\r\n constructor(){\r\n super();\r\n this.maxWidth = 40;\r\n this.sdkMethod = 'deleteUsers';\r\n this.idField = 'id';\r\n }\r\n\r\n delete = () => {\r\n if(!this.record) return;\r\n\r\n Dialog.confirm('Are you sure you want to delete this record? This action cannot be undone.', async (confirmed) => {\r\n if(!confirmed) return;\r\n\r\n const module = await import('../../kempo/sdk.js');\r\n const deleteMethod = module[this.sdkMethod];\r\n\r\n if(!deleteMethod){\r\n Toast.error('Delete method not found');\r\n return;\r\n }\r\n\r\n const [error, result] = await deleteMethod([this.record[this.primaryKey]]);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to delete record');\r\n return;\r\n }\r\n\r\n this.table.deleteRecord(this.record);\r\n Toast.success('Record deleted successfully');\r\n });\r\n };\r\n\r\n render(){\r\n return html`<button class=\"no-btn icon-btn\" @click=\"${this.delete}\">\r\n <slot><k-icon name=\"delete\"></k-icon></slot>\r\n </button>`;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-table-row-delete', TableRowDelete);\r\n"],"mappings":"eAASA,MAAY,kCACdC,MAAkB,4DAClBC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAuBH,EAC1CI,kBAAoB,CAClBC,SAAU,CAAEC,KAAMC,OAAQC,UAAW,aACrCC,UAAW,CAAEH,KAAMI,OAAQF,UAAW,cACtCG,WAAY,CAAEL,KAAMI,OAAQF,UAAW,gBAGzC,WAAAI,GACEC,QACAC,KAAKT,SAAW,GAChBS,KAAKL,UAAY,cACjBK,KAAKC,QAAU,IACjB,CAEAC,OAAS,KACHF,KAAKG,QAEThB,EAAOiB,QAAQ,6EAA8EC,MAAOC,IAClG,IAAIA,EAAW,OAEf,MACMC,SADeC,OAAO,uBACAR,KAAKL,WAEjC,IAAIY,EAEF,YADAnB,EAAMqB,MAAM,2BAId,MAAOA,EAAOC,SAAgBH,EAAa,CAACP,KAAKG,OAAOH,KAAKH,cAE1DY,EACDrB,EAAMqB,MAAMA,EAAME,KAAO,4BAI3BX,KAAKY,MAAMC,aAAab,KAAKG,QAC7Bf,EAAM0B,QAAQ,mCAIlB,MAAAC,GACE,OAAO9B,CAAI,2CAA2Ce,KAAKE;;cAG7D,EAGFc,eAAeC,OAAO,yBAA0B5B","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\TableRowDelete.js","names":["html","AdminTableControl","Dialog","Toast","TableRowDelete","static","sdkMethod","type","String","attribute","primaryKey","constructor","super","this","idField","connectedCallback","hasAttribute","title","delete","record","confirm","async","confirmed","deleteMethod","error","msg","table","deleteRecord","success","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import { html } from '/kempo-ui/lit-all.min.js';\nimport AdminTableControl from './AdminTableControl.js';\nimport Dialog from '/kempo-ui/components/Dialog.js';\nimport Toast from '/kempo-ui/components/Toast.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class TableRowDelete extends AdminTableControl {\n static properties = {\n sdkMethod: { type: String, attribute: 'sdk-method' },\n primaryKey: { type: String, attribute: 'primary-key' }\n };\n\n constructor(){\n super();\n this.sdkMethod = 'deleteUsers';\n this.idField = 'id';\n }\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'Delete Record';\n }\n\n delete = () => {\n if(!this.record) return;\n\n Dialog.confirm('Are you sure you want to delete this record? This action cannot be undone.', async (confirmed) => {\n if(!confirmed) return;\n\n const module = await import('../../kempo/sdk.js');\n const deleteMethod = module[this.sdkMethod];\n\n if(!deleteMethod){\n Toast.error('Delete method not found');\n return;\n }\n\n const [error] = await deleteMethod([this.record[this.primaryKey]]);\n\n if(error){\n Toast.error(error.msg || 'Failed to delete record');\n return;\n }\n\n this.table.deleteRecord(this.record);\n Toast.success('Record deleted successfully');\n });\n };\n\n handleAction(){ this.delete(); }\n\n render(){ return html`<slot><k-icon name=\"delete\"></k-icon></slot>`; }\n}\n\ncustomElements.define('admin-table-row-delete', TableRowDelete);\n"],"mappings":"eAASA,MAAY,kCACdC,MAAuB,gCACvBC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAuBH,EAC1CI,kBAAoB,CAClBC,UAAW,CAAEC,KAAMC,OAAQC,UAAW,cACtCC,WAAY,CAAEH,KAAMC,OAAQC,UAAW,gBAGzC,WAAAE,GACEC,QACAC,KAAKP,UAAY,cACjBO,KAAKC,QAAU,IACjB,CAEA,iBAAAC,GACEH,MAAMG,oBACFF,KAAKG,aAAa,WAAUH,KAAKI,MAAQ,gBAC/C,CAEAC,OAAS,KACHL,KAAKM,QAETjB,EAAOkB,QAAQ,6EAA8EC,MAAOC,IAClG,IAAIA,EAAW,OAEf,MACMC,gBADsB,wBACAV,KAAKP,WAEjC,IAAIiB,EAEF,YADApB,EAAMqB,MAAM,2BAId,MAAOA,SAAeD,EAAa,CAACV,KAAKM,OAAON,KAAKH,cAElDc,EACDrB,EAAMqB,MAAMA,EAAMC,KAAO,4BAI3BZ,KAAKa,MAAMC,aAAad,KAAKM,QAC7BhB,EAAMyB,QAAQ,mCAIlB,YAAAC,GAAgBhB,KAAKK,QAAU,CAE/B,MAAAY,GAAU,OAAO9B,CAAI,8CAAgD,EAGvE+B,eAAeC,OAAO,yBAA0B5B","ignoreList":[]}
@@ -1,8 +1,2 @@
1
- import t from"/kempo-ui/components/tableControls/TableControl.js";import{html as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static get properties(){return{urlPattern:{type:String,attribute:"url-pattern"},fieldName:{type:String,attribute:"field-name"}}}constructor(){super(),this.fieldName="id",this.maxWidth=40}navigate=()=>{if(!this.record)return;const t=this.record[this.fieldName];if(!t)return;const e=this.urlPattern.replace(`{${this.fieldName}}`,t);window.location.href=e};render(){return e`
2
- <button class="no-btn icon-btn" @click="${this.navigate}">
3
- <slot>
4
- <k-icon name="visibility"></k-icon>
5
- </slot>
6
- </button>
7
- `}}customElements.define("admin-table-row-link",i);
1
+ import t from"./AdminTableControl.js";import{html as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";export default class i extends t{static properties={urlPattern:{type:String,attribute:"url-pattern"},fieldName:{type:String,attribute:"field-name"}};constructor(){super(),this.fieldName="id"}connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="View")}handleAction(){if(!this.record)return;const t=this.record[this.fieldName];t&&(window.location.href=this.urlPattern.replace(`{${this.fieldName}}`,t))}render(){return e`<slot><k-icon name="visibility"></k-icon></slot>`}}customElements.define("admin-table-row-link",i);
8
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\TableRowLink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\TableRowLink.js","names":["TableControl","html","TableRowLink","properties","urlPattern","type","String","attribute","fieldName","constructor","super","this","maxWidth","navigate","record","fieldValue","url","replace","window","location","href","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class TableRowLink extends TableControl {\r\n static get properties() {\r\n return {\r\n urlPattern: { type: String, attribute: 'url-pattern' },\r\n fieldName: { type: String, attribute: 'field-name' }\r\n };\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.fieldName = 'id';\r\n this.maxWidth = 40;\r\n }\r\n\r\n navigate = () => {\r\n if(!this.record) return;\r\n\r\n const fieldValue = this.record[this.fieldName];\r\n if(!fieldValue) return;\r\n\r\n const url = this.urlPattern.replace(`{${this.fieldName}}`, fieldValue);\r\n window.location.href = url;\r\n };\r\n\r\n render() {\r\n return html`\r\n <button class=\"no-btn icon-btn\" @click=\"${this.navigate}\">\r\n <slot>\r\n <k-icon name=\"visibility\"></k-icon>\r\n </slot>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-table-row-link', TableRowLink);\r\n\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,iCACd,8CAEQ,MAAMC,UAAqBF,EACxC,qBAAWG,GACT,MAAO,CACLC,WAAY,CAAEC,KAAMC,OAAQC,UAAW,eACvCC,UAAW,CAAEH,KAAMC,OAAQC,UAAW,cAE1C,CAEA,WAAAE,GACEC,QACAC,KAAKH,UAAY,KACjBG,KAAKC,SAAW,EAClB,CAEAC,SAAW,KACT,IAAIF,KAAKG,OAAQ,OAEjB,MAAMC,EAAaJ,KAAKG,OAAOH,KAAKH,WACpC,IAAIO,EAAY,OAEhB,MAAMC,EAAML,KAAKP,WAAWa,QAAQ,IAAIN,KAAKH,aAAcO,GAC3DG,OAAOC,SAASC,KAAOJ,GAGzB,MAAAK,GACE,OAAOpB,CAAI;gDACiCU,KAAKE;;;;;KAMnD,EAGFS,eAAeC,OAAO,uBAAwBrB","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\TableRowLink.js","names":["AdminTableControl","html","TableRowLink","static","urlPattern","type","String","attribute","fieldName","constructor","super","this","connectedCallback","hasAttribute","title","handleAction","record","fieldValue","window","location","href","replace","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from './AdminTableControl.js';\nimport { html } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\n\nexport default class TableRowLink extends AdminTableControl {\n static properties = {\n urlPattern: { type: String, attribute: 'url-pattern' },\n fieldName: { type: String, attribute: 'field-name' }\n };\n\n constructor(){\n super();\n this.fieldName = 'id';\n }\n\n connectedCallback(){\n super.connectedCallback();\n if(!this.hasAttribute('title')) this.title = 'View';\n }\n\n handleAction(){\n if(!this.record) return;\n const fieldValue = this.record[this.fieldName];\n if(!fieldValue) return;\n window.location.href = this.urlPattern.replace(`{${this.fieldName}}`, fieldValue);\n }\n\n render(){ return html`<slot><k-icon name=\"visibility\"></k-icon></slot>`; }\n}\n\ncustomElements.define('admin-table-row-link', TableRowLink);\n"],"mappings":"OAAOA,MAAuB,wCACrBC,MAAY,iCACd,8CAEQ,MAAMC,UAAqBF,EACxCG,kBAAoB,CAClBC,WAAY,CAAEC,KAAMC,OAAQC,UAAW,eACvCC,UAAW,CAAEH,KAAMC,OAAQC,UAAW,eAGxC,WAAAE,GACEC,QACAC,KAAKH,UAAY,IACnB,CAEA,iBAAAI,GACEF,MAAME,oBACFD,KAAKE,aAAa,WAAUF,KAAKG,MAAQ,OAC/C,CAEA,YAAAC,GACE,IAAIJ,KAAKK,OAAQ,OACjB,MAAMC,EAAaN,KAAKK,OAAOL,KAAKH,WAChCS,IACJC,OAAOC,SAASC,KAAOT,KAAKP,WAAWiB,QAAQ,IAAIV,KAAKH,aAAcS,GACxE,CAEA,MAAAK,GAAU,OAAOrB,CAAI,kDAAoD,EAG3EsB,eAAeC,OAAO,uBAAwBtB","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import e from"/kempo-ui/components/tableControls/TableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import o from"/kempo-ui/components/Dialog.js";import m from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";import"/kempo-ui/components/Spinner.js";export default class n extends e{groupName="";addMember=()=>{let e=null;const t=document.createElement("k-combobox");t.setAttribute("placeholder","Search users..."),t.setAttribute("debounce-ms","350"),t.setAttribute("require-match",""),t.addEventListener("search",async e=>{t.searching=!0;const{searchUsers:o}=await import("/kempo/sdk.js"),[m,n]=await o({q:e.detail.value,notInGroup:this.groupName,limit:20});t.searching=!1,!m&&n&&t.setOptions(n.users.map(e=>({label:`${e.name} (${e.email})`,value:e.id})))}),t.addEventListener("select",t=>{e=t.detail.value});const n=document.createElement("div");n.className="p",n.appendChild(t),o.create(n,{title:"Add Member",confirmText:"Add",confirmAction:async()=>{if(!e)return;const{addMemberToGroup:t}=await import("/kempo/sdk.js"),[o]=await t(this.groupName,e);o?m.error(o.msg||"Failed to add member"):(m.success("Member added"),this.dispatchEvent(new CustomEvent("memberAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};render(){return t`
2
- <button class="no-btn icon-btn" title="Add Member" @click="${this.addMember}">
3
- <k-icon name="person_add"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-add-member",n);
1
+ import e from"../AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import o from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";import"/kempo-ui/components/Spinner.js";export default class m extends e{groupName="";addMember=()=>{let e=null;const t=document.createElement("k-combobox");t.setAttribute("placeholder","Search users..."),t.setAttribute("debounce-ms","350"),t.setAttribute("require-match",""),t.addEventListener("search",async e=>{t.searching=!0;const{searchUsers:o}=await(import("/kempo/sdk.js")),[s,m]=await o({q:e.detail.value,notInGroup:this.groupName,limit:20});t.searching=!1,!s&&m&&t.setOptions(m.users.map(e=>({label:`${e.name} (${e.email})`,value:e.id})))}),t.addEventListener("select",t=>{e=t.detail.value});const m=document.createElement("div");m.className="p",m.appendChild(t),o.create(m,{title:"Add Member",confirmText:"Add",confirmAction:async()=>{if(!e)return;const{addMemberToGroup:t}=await(import("/kempo/sdk.js")),[o]=await t(this.groupName,e);o?s.error(o.msg||"Failed to add member"):(s.success("Member added"),this.dispatchEvent(new CustomEvent("memberAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add Member")}handleAction(){this.addMember()}render(){return t`<k-icon name="person_add"></k-icon>`}}customElements.define("admin-add-member",m);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\AddMember.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\tableControls\\AddMember.js","names":["TableControl","html","Dialog","Toast","AddMember","groupName","addMember","selectedUserId","$combobox","document","createElement","setAttribute","addEventListener","async","searching","searchUsers","import","err","data","q","e","detail","value","notInGroup","this","limit","setOptions","users","map","u","label","name","email","id","$wrap","className","appendChild","create","title","confirmText","confirmAction","addMemberToGroup","error","msg","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\nimport '/kempo-ui/components/Spinner.js';\r\n\r\nexport default class AddMember extends TableControl {\r\n groupName = '';\r\n\r\n addMember = () => {\r\n let selectedUserId = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search users...');\r\n $combobox.setAttribute('debounce-ms', '350');\r\n $combobox.setAttribute('require-match', '');\r\n\r\n $combobox.addEventListener('search', async e => {\r\n $combobox.searching = true;\r\n const { searchUsers } = await import('/kempo/sdk.js');\r\n const [err, data] = await searchUsers({ q: e.detail.value, notInGroup: this.groupName, limit: 20 });\r\n $combobox.searching = false;\r\n if(err || !data) return;\r\n $combobox.setOptions(data.users.map(u => ({ label: `${u.name} (${u.email})`, value: u.id })));\r\n });\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedUserId = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Member',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedUserId) return;\r\n const { addMemberToGroup } = await import('/kempo/sdk.js');\r\n const [err] = await addMemberToGroup(this.groupName, selectedUserId);\r\n if(err){ Toast.error(err.msg || 'Failed to add member'); return; }\r\n Toast.success('Member added');\r\n this.dispatchEvent(new CustomEvent('memberAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n render(){\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Add Member\" @click=\"${this.addMember}\">\r\n <k-icon name=\"person_add\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-add-member', AddMember);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,yCACA,iDAEQ,MAAMC,UAAkBJ,EACrCK,UAAY,GAEZC,UAAY,KACV,IAAIC,EAAiB,KAErB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,mBACtCH,EAAUG,aAAa,cAAe,OACtCH,EAAUG,aAAa,gBAAiB,IAExCH,EAAUI,iBAAiB,SAAUC,UACnCL,EAAUM,WAAY,EACtB,MAAMC,YAAEA,SAAsBC,OAAO,kBAC9BC,EAAKC,SAAcH,EAAY,CAAEI,EAAGC,EAAEC,OAAOC,MAAOC,WAAYC,KAAKnB,UAAWoB,MAAO,KAC9FjB,EAAUM,WAAY,GACnBG,GAAQC,GACXV,EAAUkB,WAAWR,EAAKS,MAAMC,IAAIC,IAAK,CAAGC,MAAO,GAAGD,EAAEE,SAASF,EAAEG,SAAUV,MAAOO,EAAEI,SAGxFzB,EAAUI,iBAAiB,SAAUQ,IACnCb,EAAiBa,EAAEC,OAAOC,QAG5B,MAAMY,EAAQzB,SAASC,cAAc,OACrCwB,EAAMC,UAAY,IAClBD,EAAME,YAAY5B,GAElBN,EAAOmC,OAAOH,EAAO,CACnBI,MAAO,aACPC,YAAa,MACbC,cAAe3B,UACb,IAAIN,EAAgB,OACpB,MAAMkC,iBAAEA,SAA2BzB,OAAO,kBACnCC,SAAawB,EAAiBjB,KAAKnB,UAAWE,GAClDU,EAAMd,EAAMuC,MAAMzB,EAAI0B,KAAO,yBAChCxC,EAAMyC,QAAQ,gBACdpB,KAAKqB,cAAc,IAAIC,YAAY,cAAe,CAAEC,SAAS,EAAMC,UAAU,OAE/EC,WAAY,YAIhB,MAAAC,GACE,OAAOjD,CAAI;mEACoDuB,KAAKlB;;;KAItE,EAGF6C,eAAeC,OAAO,mBAAoBhD","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\tableControls\\AddMember.js","names":["AdminTableControl","html","Dialog","Toast","AddMember","groupName","addMember","selectedUserId","$combobox","document","createElement","setAttribute","addEventListener","async","searching","searchUsers","err","data","q","e","detail","value","notInGroup","this","limit","setOptions","users","map","u","label","name","email","id","$wrap","className","appendChild","create","title","confirmText","confirmAction","addMemberToGroup","error","msg","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\nimport '/kempo-ui/components/Spinner.js';\r\n\r\nexport default class AddMember extends AdminTableControl {\r\n groupName = '';\r\n\r\n addMember = () => {\r\n let selectedUserId = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search users...');\r\n $combobox.setAttribute('debounce-ms', '350');\r\n $combobox.setAttribute('require-match', '');\r\n\r\n $combobox.addEventListener('search', async e => {\r\n $combobox.searching = true;\r\n const { searchUsers } = await import('/kempo/sdk.js');\r\n const [err, data] = await searchUsers({ q: e.detail.value, notInGroup: this.groupName, limit: 20 });\r\n $combobox.searching = false;\r\n if(err || !data) return;\r\n $combobox.setOptions(data.users.map(u => ({ label: `${u.name} (${u.email})`, value: u.id })));\r\n });\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedUserId = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Member',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedUserId) return;\r\n const { addMemberToGroup } = await import('/kempo/sdk.js');\r\n const [err] = await addMemberToGroup(this.groupName, selectedUserId);\r\n if(err){ Toast.error(err.msg || 'Failed to add member'); return; }\r\n Toast.success('Member added');\r\n this.dispatchEvent(new CustomEvent('memberAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Add Member';\r\n }\r\n\r\n handleAction(){ this.addMember(); }\r\n\r\n render(){ return html`<k-icon name=\"person_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-add-member', AddMember);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,yCACA,iDAEQ,MAAMC,UAAkBJ,EACrCK,UAAY,GAEZC,UAAY,KACV,IAAIC,EAAiB,KAErB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,mBACtCH,EAAUG,aAAa,cAAe,OACtCH,EAAUG,aAAa,gBAAiB,IAExCH,EAAUI,iBAAiB,SAAUC,UACnCL,EAAUM,WAAY,EACtB,MAAMC,YAAEA,gBAA6B,mBAC9BC,EAAKC,SAAcF,EAAY,CAAEG,EAAGC,EAAEC,OAAOC,MAAOC,WAAYC,KAAKlB,UAAWmB,MAAO,KAC9FhB,EAAUM,WAAY,GACnBE,GAAQC,GACXT,EAAUiB,WAAWR,EAAKS,MAAMC,IAAIC,IAAK,CAAGC,MAAO,GAAGD,EAAEE,SAASF,EAAEG,SAAUV,MAAOO,EAAEI,SAGxFxB,EAAUI,iBAAiB,SAAUO,IACnCZ,EAAiBY,EAAEC,OAAOC,QAG5B,MAAMY,EAAQxB,SAASC,cAAc,OACrCuB,EAAMC,UAAY,IAClBD,EAAME,YAAY3B,GAElBN,EAAOkC,OAAOH,EAAO,CACnBI,MAAO,aACPC,YAAa,MACbC,cAAe1B,UACb,IAAIN,EAAgB,OACpB,MAAMiC,iBAAEA,gBAAkC,mBACnCxB,SAAawB,EAAiBjB,KAAKlB,UAAWE,GAClDS,EAAMb,EAAMsC,MAAMzB,EAAI0B,KAAO,yBAChCvC,EAAMwC,QAAQ,gBACdpB,KAAKqB,cAAc,IAAIC,YAAY,cAAe,CAAEC,SAAS,EAAMC,UAAU,OAE/EC,WAAY,YAIhB,iBAAAC,GACEC,MAAMD,oBACF1B,KAAK4B,aAAa,WAAU5B,KAAKc,MAAQ,aAC/C,CAEA,YAAAe,GAAgB7B,KAAKjB,WAAa,CAElC,MAAA+C,GAAU,OAAOpD,CAAI,qCAAuC,EAG9DqD,eAAeC,OAAO,mBAAoBnD","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import e from"/kempo-ui/components/tableControls/TableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import s from"/kempo-ui/components/Dialog.js";import i from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";export default class t extends e{groupName="";addPermission=async()=>{const{listPermissions:e,getGroupPermissions:o,addPermissionToGroup:t}=await import("/kempo/sdk.js"),[[n,r],[m,a]]=await Promise.all([e({limit:1e3}),o(this.groupName)]);if(n)return void i.error(n.msg||"Failed to load permissions");if(m)return void i.error(m.msg||"Failed to load group permissions");const d=new Set(a.permissions),l=r.permissions.filter(e=>!d.has(e.name));let c=null;const p=document.createElement("k-combobox");p.setAttribute("placeholder","Search permissions..."),p.setAttribute("require-match",""),p.setOptions(l.map(e=>({label:e.name,value:e.name}))),p.addEventListener("select",e=>{c=e.detail.value});const u=document.createElement("div");u.className="p",u.appendChild(p),s.create(u,{title:"Add Permission",confirmText:"Add",confirmAction:async()=>{if(!c)return;const[e]=await t(this.groupName,c);e?i.error(e.msg||"Failed to add permission"):(i.success("Permission added"),this.dispatchEvent(new CustomEvent("permissionAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};render(){return o`
2
- <button class="no-btn icon-btn" title="Add Permission" @click="${this.addPermission}">
3
- <k-icon name="lock_add"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-add-permission",t);
1
+ import e from"../AdminTableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import s from"/kempo-ui/components/Dialog.js";import i from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";import"/kempo-ui/components/Combobox.js";export default class t extends e{groupName="";addPermission=async()=>{const{listPermissions:e,getGroupPermissions:o,addPermissionToGroup:t}=await(import("/kempo/sdk.js")),[[n,r],[m,a]]=await Promise.all([e({limit:1e3}),o(this.groupName)]);if(n)return void i.error(n.msg||"Failed to load permissions");if(m)return void i.error(m.msg||"Failed to load group permissions");const d=new Set(a.permissions),l=r.permissions.filter(e=>!d.has(e.name));let c=null;const p=document.createElement("k-combobox");p.setAttribute("placeholder","Search permissions..."),p.setAttribute("require-match",""),p.setOptions(l.map(e=>({label:e.name,value:e.name}))),p.addEventListener("select",e=>{c=e.detail.value});const u=document.createElement("div");u.className="p",u.appendChild(p),s.create(u,{title:"Add Permission",confirmText:"Add",confirmAction:async()=>{if(!c)return;const[e]=await t(this.groupName,c);e?i.error(e.msg||"Failed to add permission"):(i.success("Permission added"),this.dispatchEvent(new CustomEvent("permissionAdded",{bubbles:!0,composed:!0})))},cancelText:"Cancel"})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Add Permission")}handleAction(){this.addPermission()}render(){return o`<k-icon name="lock_add"></k-icon>`}}customElements.define("admin-add-permission",t);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\AddPermission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\tableControls\\AddPermission.js","names":["TableControl","html","Dialog","Toast","AddPermission","groupName","addPermission","async","listPermissions","getGroupPermissions","addPermissionToGroup","import","allErr","allData","groupErr","groupPerms","Promise","all","limit","this","error","msg","assigned","Set","permissions","available","filter","p","has","name","selectedPermName","$combobox","document","createElement","setAttribute","setOptions","map","label","value","addEventListener","e","detail","$wrap","className","appendChild","create","title","confirmText","confirmAction","err","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\n\r\nexport default class AddPermission extends TableControl {\r\n groupName = '';\r\n\r\n addPermission = async () => {\r\n const { listPermissions, getGroupPermissions, addPermissionToGroup } = await import('/kempo/sdk.js');\r\n\r\n const [[allErr, allData], [groupErr, groupPerms]] = await Promise.all([\r\n listPermissions({ limit: 1000 }),\r\n getGroupPermissions(this.groupName)\r\n ]);\r\n\r\n if(allErr){ Toast.error(allErr.msg || 'Failed to load permissions'); return; }\r\n if(groupErr){ Toast.error(groupErr.msg || 'Failed to load group permissions'); return; }\r\n\r\n const assigned = new Set(groupPerms.permissions);\r\n const available = allData.permissions.filter(p => !assigned.has(p.name));\r\n\r\n let selectedPermName = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search permissions...');\r\n $combobox.setAttribute('require-match', '');\r\n $combobox.setOptions(available.map(p => ({ label: p.name, value: p.name })));\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedPermName = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Permission',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedPermName) return;\r\n const [err] = await addPermissionToGroup(this.groupName, selectedPermName);\r\n if(err){ Toast.error(err.msg || 'Failed to add permission'); return; }\r\n Toast.success('Permission added');\r\n this.dispatchEvent(new CustomEvent('permissionAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n render(){\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Add Permission\" @click=\"${this.addPermission}\">\r\n <k-icon name=\"lock_add\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-add-permission', AddPermission);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,kDAEQ,MAAMC,UAAsBJ,EACzCK,UAAY,GAEZC,cAAgBC,UACd,MAAMC,gBAAEA,EAAeC,oBAAEA,EAAmBC,qBAAEA,SAA+BC,OAAO,mBAE5EC,EAAQC,IAAWC,EAAUC,UAAqBC,QAAQC,IAAI,CACpET,EAAgB,CAAEU,MAAO,MACzBT,EAAoBU,KAAKd,aAG3B,GAAGO,EAAkE,YAAzDT,EAAMiB,MAAMR,EAAOS,KAAO,8BACtC,GAAGP,EAA4E,YAAjEX,EAAMiB,MAAMN,EAASO,KAAO,oCAE1C,MAAMC,EAAW,IAAIC,IAAIR,EAAWS,aAC9BC,EAAYZ,EAAQW,YAAYE,OAAOC,IAAML,EAASM,IAAID,EAAEE,OAElE,IAAIC,EAAmB,KAEvB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,yBACtCH,EAAUG,aAAa,gBAAiB,IACxCH,EAAUI,WAAWV,EAAUW,IAAIT,IAAK,CAAGU,MAAOV,EAAEE,KAAMS,MAAOX,EAAEE,SAEnEE,EAAUQ,iBAAiB,SAAUC,IACnCV,EAAmBU,EAAEC,OAAOH,QAG9B,MAAMI,EAAQV,SAASC,cAAc,OACrCS,EAAMC,UAAY,IAClBD,EAAME,YAAYb,GAElB7B,EAAO2C,OAAOH,EAAO,CACnBI,MAAO,iBACPC,YAAa,MACbC,cAAezC,UACb,IAAIuB,EAAkB,OACtB,MAAOmB,SAAavC,EAAqBS,KAAKd,UAAWyB,GACtDmB,EAAM9C,EAAMiB,MAAM6B,EAAI5B,KAAO,6BAChClB,EAAM+C,QAAQ,oBACd/B,KAAKgC,cAAc,IAAIC,YAAY,kBAAmB,CAAEC,SAAS,EAAMC,UAAU,OAEnFC,WAAY,YAIhB,MAAAC,GACE,OAAOvD,CAAI;uEACwDkB,KAAKb;;;KAI1E,EAGFmD,eAAeC,OAAO,uBAAwBtD","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\tableControls\\AddPermission.js","names":["AdminTableControl","html","Dialog","Toast","AddPermission","groupName","addPermission","async","listPermissions","getGroupPermissions","addPermissionToGroup","allErr","allData","groupErr","groupPerms","Promise","all","limit","this","error","msg","assigned","Set","permissions","available","filter","p","has","name","selectedPermName","$combobox","document","createElement","setAttribute","setOptions","map","label","value","addEventListener","e","detail","$wrap","className","appendChild","create","title","confirmText","confirmAction","err","success","dispatchEvent","CustomEvent","bubbles","composed","cancelText","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport '/kempo-ui/components/Combobox.js';\r\n\r\nexport default class AddPermission extends AdminTableControl {\r\n groupName = '';\r\n\r\n addPermission = async () => {\r\n const { listPermissions, getGroupPermissions, addPermissionToGroup } = await import('/kempo/sdk.js');\r\n\r\n const [[allErr, allData], [groupErr, groupPerms]] = await Promise.all([\r\n listPermissions({ limit: 1000 }),\r\n getGroupPermissions(this.groupName)\r\n ]);\r\n\r\n if(allErr){ Toast.error(allErr.msg || 'Failed to load permissions'); return; }\r\n if(groupErr){ Toast.error(groupErr.msg || 'Failed to load group permissions'); return; }\r\n\r\n const assigned = new Set(groupPerms.permissions);\r\n const available = allData.permissions.filter(p => !assigned.has(p.name));\r\n\r\n let selectedPermName = null;\r\n\r\n const $combobox = document.createElement('k-combobox');\r\n $combobox.setAttribute('placeholder', 'Search permissions...');\r\n $combobox.setAttribute('require-match', '');\r\n $combobox.setOptions(available.map(p => ({ label: p.name, value: p.name })));\r\n\r\n $combobox.addEventListener('select', e => {\r\n selectedPermName = e.detail.value;\r\n });\r\n\r\n const $wrap = document.createElement('div');\r\n $wrap.className = 'p';\r\n $wrap.appendChild($combobox);\r\n\r\n Dialog.create($wrap, {\r\n title: 'Add Permission',\r\n confirmText: 'Add',\r\n confirmAction: async () => {\r\n if(!selectedPermName) return;\r\n const [err] = await addPermissionToGroup(this.groupName, selectedPermName);\r\n if(err){ Toast.error(err.msg || 'Failed to add permission'); return; }\r\n Toast.success('Permission added');\r\n this.dispatchEvent(new CustomEvent('permissionAdded', { bubbles: true, composed: true }));\r\n },\r\n cancelText: 'Cancel'\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Add Permission';\r\n }\r\n\r\n handleAction(){ this.addPermission(); }\r\n\r\n render(){ return html`<k-icon name=\"lock_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-add-permission', AddPermission);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,qCACA,kDAEQ,MAAMC,UAAsBJ,EACzCK,UAAY,GAEZC,cAAgBC,UACd,MAAMC,gBAAEA,EAAeC,oBAAEA,EAAmBC,qBAAEA,gBAAsC,oBAE5EC,EAAQC,IAAWC,EAAUC,UAAqBC,QAAQC,IAAI,CACpER,EAAgB,CAAES,MAAO,MACzBR,EAAoBS,KAAKb,aAG3B,GAAGM,EAAkE,YAAzDR,EAAMgB,MAAMR,EAAOS,KAAO,8BACtC,GAAGP,EAA4E,YAAjEV,EAAMgB,MAAMN,EAASO,KAAO,oCAE1C,MAAMC,EAAW,IAAIC,IAAIR,EAAWS,aAC9BC,EAAYZ,EAAQW,YAAYE,OAAOC,IAAML,EAASM,IAAID,EAAEE,OAElE,IAAIC,EAAmB,KAEvB,MAAMC,EAAYC,SAASC,cAAc,cACzCF,EAAUG,aAAa,cAAe,yBACtCH,EAAUG,aAAa,gBAAiB,IACxCH,EAAUI,WAAWV,EAAUW,IAAIT,IAAK,CAAGU,MAAOV,EAAEE,KAAMS,MAAOX,EAAEE,SAEnEE,EAAUQ,iBAAiB,SAAUC,IACnCV,EAAmBU,EAAEC,OAAOH,QAG9B,MAAMI,EAAQV,SAASC,cAAc,OACrCS,EAAMC,UAAY,IAClBD,EAAME,YAAYb,GAElB5B,EAAO0C,OAAOH,EAAO,CACnBI,MAAO,iBACPC,YAAa,MACbC,cAAexC,UACb,IAAIsB,EAAkB,OACtB,MAAOmB,SAAatC,EAAqBQ,KAAKb,UAAWwB,GACtDmB,EAAM7C,EAAMgB,MAAM6B,EAAI5B,KAAO,6BAChCjB,EAAM8C,QAAQ,oBACd/B,KAAKgC,cAAc,IAAIC,YAAY,kBAAmB,CAAEC,SAAS,EAAMC,UAAU,OAEnFC,WAAY,YAIhB,iBAAAC,GACEC,MAAMD,oBACFrC,KAAKuC,aAAa,WAAUvC,KAAK2B,MAAQ,iBAC/C,CAEA,YAAAa,GAAgBxC,KAAKZ,eAAiB,CAEtC,MAAAqD,GAAU,OAAO1D,CAAI,mCAAqC,EAG5D2D,eAAeC,OAAO,uBAAwBzD","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import t from"/kempo-ui/components/tableControls/TableControl.js";import{html as o}from"/kempo-ui/lit-all.min.js";import e from"/kempo-ui/components/Dialog.js";import n from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class s extends t{install=async()=>{this.record&&e.confirm(`Install "${this.record.name}"?`,async t=>{if(!t)return;const{installExtension:o}=await import("/kempo/sdk.js"),[e]=await o(this.record.name);e?n.error(e.msg||"Failed to install extension"):(n.success(`"${this.record.name}" installed successfully`),this.table.deleteRecord(this.record))})};render(){return o`
2
- <button class="no-btn icon-btn" title="Install Extension" @click="${this.install}">
3
- <k-icon name="deployed_code_update"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-install-extension",s);
1
+ import e from"../AdminTableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import n from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class o extends e{install=async()=>{this.record&&n.confirm(`Install "${this.record.name}"?`,async e=>{if(!e)return;const{installExtension:t}=await(import("/kempo/sdk.js")),[n]=await t(this.record.name);n?s.error(n.msg||"Failed to install extension"):(s.success(`"${this.record.name}" installed successfully`),this.table.deleteRecord(this.record))})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Install Extension")}handleAction(){this.install()}render(){return t`<k-icon name="extension_add"></k-icon>`}}customElements.define("admin-install-extension",o);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\InstallExtension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\tableControls\\InstallExtension.js","names":["TableControl","html","Dialog","Toast","InstallExtension","install","async","this","record","confirm","name","confirmed","installExtension","import","error","msg","success","table","deleteRecord","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class InstallExtension extends TableControl {\r\n install = async () => {\r\n if(!this.record) return;\r\n\r\n Dialog.confirm(`Install \"${this.record.name}\"?`, async confirmed => {\r\n if(!confirmed) return;\r\n\r\n const { installExtension } = await import('/kempo/sdk.js');\r\n const [error] = await installExtension(this.record.name);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to install extension');\r\n return;\r\n }\r\n\r\n Toast.success(`\"${this.record.name}\" installed successfully`);\r\n this.table.deleteRecord(this.record);\r\n });\r\n };\r\n\r\n render(){\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Install Extension\" @click=\"${this.install}\">\r\n <k-icon name=\"deployed_code_update\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-install-extension', InstallExtension);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAyBJ,EAC5CK,QAAUC,UACJC,KAAKC,QAETN,EAAOO,QAAQ,YAAYF,KAAKC,OAAOE,SAAUJ,UAC/C,IAAIK,EAAW,OAEf,MAAMC,iBAAEA,SAA2BC,OAAO,kBACnCC,SAAeF,EAAiBL,KAAKC,OAAOE,MAEhDI,EACDX,EAAMW,MAAMA,EAAMC,KAAO,gCAI3BZ,EAAMa,QAAQ,IAAIT,KAAKC,OAAOE,gCAC9BH,KAAKU,MAAMC,aAAaX,KAAKC,YAIjC,MAAAW,GACE,OAAOlB,CAAI;0EAC2DM,KAAKF;;;KAI7E,EAGFe,eAAeC,OAAO,0BAA2BjB","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\tableControls\\InstallExtension.js","names":["AdminTableControl","html","Dialog","Toast","InstallExtension","install","async","this","record","confirm","name","confirmed","installExtension","error","msg","success","table","deleteRecord","connectedCallback","super","hasAttribute","title","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class InstallExtension extends AdminTableControl {\r\n install = async () => {\r\n if(!this.record) return;\r\n\r\n Dialog.confirm(`Install \"${this.record.name}\"?`, async confirmed => {\r\n if(!confirmed) return;\r\n\r\n const { installExtension } = await import('/kempo/sdk.js');\r\n const [error] = await installExtension(this.record.name);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to install extension');\r\n return;\r\n }\r\n\r\n Toast.success(`\"${this.record.name}\" installed successfully`);\r\n this.table.deleteRecord(this.record);\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Install Extension';\r\n }\r\n\r\n handleAction(){ this.install(); }\r\n\r\n render(){ return html`<k-icon name=\"extension_add\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-install-extension', InstallExtension);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAAyBJ,EAC5CK,QAAUC,UACJC,KAAKC,QAETN,EAAOO,QAAQ,YAAYF,KAAKC,OAAOE,SAAUJ,UAC/C,IAAIK,EAAW,OAEf,MAAMC,iBAAEA,gBAAkC,mBACnCC,SAAeD,EAAiBL,KAAKC,OAAOE,MAEhDG,EACDV,EAAMU,MAAMA,EAAMC,KAAO,gCAI3BX,EAAMY,QAAQ,IAAIR,KAAKC,OAAOE,gCAC9BH,KAAKS,MAAMC,aAAaV,KAAKC,YAIjC,iBAAAU,GACEC,MAAMD,oBACFX,KAAKa,aAAa,WAAUb,KAAKc,MAAQ,oBAC/C,CAEA,YAAAC,GAAgBf,KAAKF,SAAW,CAEhC,MAAAkB,GAAU,OAAOtB,CAAI,wCAA0C,EAGjEuB,eAAeC,OAAO,0BAA2BrB","ignoreList":[]}
@@ -1,6 +1,2 @@
1
- import n from"/kempo-ui/components/tableControls/TableControl.js";import{html as t}from"/kempo-ui/lit-all.min.js";import e from"/kempo-ui/components/Dialog.js";import o from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class s extends n{uninstall=async()=>{this.record&&e.confirm(`Uninstall "${this.record.name}"? This may delete extension data.`,async n=>{if(!n)return;const{uninstallExtension:t}=await import("/kempo/sdk.js"),[e]=await t(this.record.name);e?o.error(e.msg||"Failed to uninstall extension"):(o.success(`"${this.record.name}" uninstalled successfully`),this.table.deleteRecord(this.record))})};render(){return t`
2
- <button class="no-btn icon-btn" title="Uninstall Extension" @click="${this.uninstall}">
3
- <k-icon name="delete"></k-icon>
4
- </button>
5
- `}}customElements.define("admin-uninstall-extension",s);
1
+ import e from"../AdminTableControl.js";import{html as n}from"/kempo-ui/lit-all.min.js";import t from"/kempo-ui/components/Dialog.js";import s from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class a extends e{uninstall=async()=>{if(!this.record)return;const e=document.createElement("div");e.className="p",e.innerHTML=`\n <p>Uninstall "${this.record.name}"?</p>\n <p class="small tc-muted">Its data is kept by default, so reinstalling restores everything.</p>\n <label class="d-f" style="gap: var(--spacer_h); align-items: center">\n <input type="checkbox" name="purge-data" />\n <span class="tc-danger">Also permanently delete all of its data</span>\n </label>\n `,t.create(e,{title:"Uninstall Extension",closeBtn:!1,overlayClose:!1,confirmText:"Uninstall",confirmClasses:"danger ml",cancelText:"Cancel",confirmAction:async()=>{const n=e.querySelector('[name="purge-data"]').checked,{uninstallExtension:t}=await(import("/kempo/sdk.js")),[a]=await t(this.record.name,n);a?s.error(a.msg||"Failed to uninstall extension"):(s.success(n?`"${this.record.name}" uninstalled and its data deleted`:`"${this.record.name}" uninstalled, its data kept`),this.table.deleteRecord(this.record))}})};connectedCallback(){super.connectedCallback(),this.hasAttribute("title")||(this.title="Uninstall Extension")}handleAction(){this.uninstall()}render(){return n`<k-icon name="extension_remove"></k-icon>`}}customElements.define("admin-uninstall-extension",a);
6
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\admin\components\tableControls\UninstallExtension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\admin\\components\\tableControls\\UninstallExtension.js","names":["TableControl","html","Dialog","Toast","UninstallExtension","uninstall","async","this","record","confirm","name","confirmed","uninstallExtension","import","error","msg","success","table","deleteRecord","render","customElements","define"],"sources":["0"],"sourcesContent":["import TableControl from '/kempo-ui/components/tableControls/TableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class UninstallExtension extends TableControl {\r\n uninstall = async () => {\r\n if(!this.record) return;\r\n\r\n Dialog.confirm(`Uninstall \"${this.record.name}\"? This may delete extension data.`, async confirmed => {\r\n if(!confirmed) return;\r\n\r\n const { uninstallExtension } = await import('/kempo/sdk.js');\r\n const [error] = await uninstallExtension(this.record.name);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to uninstall extension');\r\n return;\r\n }\r\n\r\n Toast.success(`\"${this.record.name}\" uninstalled successfully`);\r\n this.table.deleteRecord(this.record);\r\n });\r\n };\r\n\r\n render(){\r\n return html`\r\n <button class=\"no-btn icon-btn\" title=\"Uninstall Extension\" @click=\"${this.uninstall}\">\r\n <k-icon name=\"delete\"></k-icon>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('admin-uninstall-extension', UninstallExtension);\r\n"],"mappings":"OAAOA,MAAkB,oEAChBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAA2BJ,EAC9CK,UAAYC,UACNC,KAAKC,QAETN,EAAOO,QAAQ,cAAcF,KAAKC,OAAOE,yCAA0CJ,UACjF,IAAIK,EAAW,OAEf,MAAMC,mBAAEA,SAA6BC,OAAO,kBACrCC,SAAeF,EAAmBL,KAAKC,OAAOE,MAElDI,EACDX,EAAMW,MAAMA,EAAMC,KAAO,kCAI3BZ,EAAMa,QAAQ,IAAIT,KAAKC,OAAOE,kCAC9BH,KAAKU,MAAMC,aAAaX,KAAKC,YAIjC,MAAAW,GACE,OAAOlB,CAAI;4EAC6DM,KAAKF;;;KAI/E,EAGFe,eAAeC,OAAO,4BAA6BjB","ignoreList":[]}
1
+ {"version":3,"file":"src\\admin\\components\\tableControls\\UninstallExtension.js","names":["AdminTableControl","html","Dialog","Toast","UninstallExtension","uninstall","async","this","record","contents","document","createElement","className","innerHTML","name","create","title","closeBtn","overlayClose","confirmText","confirmClasses","cancelText","confirmAction","purgeData","querySelector","checked","uninstallExtension","error","msg","success","table","deleteRecord","connectedCallback","super","hasAttribute","handleAction","render","customElements","define"],"sources":["0"],"sourcesContent":["import AdminTableControl from '../AdminTableControl.js';\r\nimport { html } from '/kempo-ui/lit-all.min.js';\r\nimport Dialog from '/kempo-ui/components/Dialog.js';\r\nimport Toast from '/kempo-ui/components/Toast.js';\r\nimport '/kempo-ui/components/Icon.js';\r\n\r\nexport default class UninstallExtension extends AdminTableControl {\r\n uninstall = async () => {\r\n if(!this.record) return;\r\n\r\n /*\r\n Two genuinely different operations behind one button, so the destructive one is opt-in:\r\n deregistering leaves the extension's tables, settings, groups and memberships intact and a\r\n reinstall picks up exactly where it left off, which is what you want when reinstalling to\r\n apply a fix. Purging destroys all of it — for a blog that is every post and comment.\r\n */\r\n const contents = document.createElement('div');\r\n contents.className = 'p';\r\n contents.innerHTML = `\r\n <p>Uninstall \"${this.record.name}\"?</p>\r\n <p class=\"small tc-muted\">Its data is kept by default, so reinstalling restores everything.</p>\r\n <label class=\"d-f\" style=\"gap: var(--spacer_h); align-items: center\">\r\n <input type=\"checkbox\" name=\"purge-data\" />\r\n <span class=\"tc-danger\">Also permanently delete all of its data</span>\r\n </label>\r\n `;\r\n\r\n Dialog.create(contents, {\r\n title: 'Uninstall Extension',\r\n closeBtn: false,\r\n overlayClose: false,\r\n confirmText: 'Uninstall',\r\n confirmClasses: 'danger ml',\r\n cancelText: 'Cancel',\r\n confirmAction: async () => {\r\n const purgeData = contents.querySelector('[name=\"purge-data\"]').checked;\r\n const { uninstallExtension } = await import('/kempo/sdk.js');\r\n const [error] = await uninstallExtension(this.record.name, purgeData);\r\n\r\n if(error){\r\n Toast.error(error.msg || 'Failed to uninstall extension');\r\n return;\r\n }\r\n\r\n Toast.success(purgeData\r\n ? `\"${this.record.name}\" uninstalled and its data deleted`\r\n : `\"${this.record.name}\" uninstalled, its data kept`);\r\n this.table.deleteRecord(this.record);\r\n },\r\n });\r\n };\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n if(!this.hasAttribute('title')) this.title = 'Uninstall Extension';\r\n }\r\n\r\n handleAction(){ this.uninstall(); }\r\n\r\n render(){ return html`<k-icon name=\"extension_remove\"></k-icon>`; }\r\n}\r\n\r\ncustomElements.define('admin-uninstall-extension', UninstallExtension);\r\n"],"mappings":"OAAOA,MAAuB,yCACrBC,MAAY,kCACdC,MAAY,wCACZC,MAAW,sCACX,8CAEQ,MAAMC,UAA2BJ,EAC9CK,UAAYC,UACV,IAAIC,KAAKC,OAAQ,OAQjB,MAAMC,EAAWC,SAASC,cAAc,OACxCF,EAASG,UAAY,IACrBH,EAASI,UAAY,yBACHN,KAAKC,OAAOM,4VAQ9BZ,EAAOa,OAAON,EAAU,CACtBO,MAAO,sBACPC,UAAU,EACVC,cAAc,EACdC,YAAa,YACbC,eAAgB,YAChBC,WAAY,SACZC,cAAehB,UACb,MAAMiB,EAAYd,EAASe,cAAc,uBAAuBC,SAC1DC,mBAAEA,gBAAoC,mBACrCC,SAAeD,EAAmBnB,KAAKC,OAAOM,KAAMS,GAExDI,EACDxB,EAAMwB,MAAMA,EAAMC,KAAO,kCAI3BzB,EAAM0B,QAAQN,EACV,IAAIhB,KAAKC,OAAOM,yCAChB,IAAIP,KAAKC,OAAOM,oCACpBP,KAAKuB,MAAMC,aAAaxB,KAAKC,aAKnC,iBAAAwB,GACEC,MAAMD,oBACFzB,KAAK2B,aAAa,WAAU3B,KAAKS,MAAQ,sBAC/C,CAEA,YAAAmB,GAAgB5B,KAAKF,WAAa,CAElC,MAAA+B,GAAU,OAAOnC,CAAI,2CAA6C,EAGpEoC,eAAeC,OAAO,4BAA6BlC","ignoreList":[]}
@@ -1,4 +1,11 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Edit Fragment - Admin"><content><admin-fragment-editor></admin-fragment-editor></content><content location="head"><script type="module" src="/admin/components/FragmentEditor.js"></script></content></page>
4
+ <page title="Edit Fragment - Admin">
5
+ <content>
6
+ <admin-fragment-editor></admin-fragment-editor>
7
+ </content>
8
+ <content location="head">
9
+ <script type="module" src="/admin/components/FragmentEditor.js"></script>
10
+ </content>
11
+ </page>