kempo 4.2.20 → 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 (83) hide show
  1. package/bin/cli.js +4 -21
  2. package/dist/admin/accounts/groups/[name]/index.page.html +24 -24
  3. package/dist/admin/accounts/groups/index.page.html +30 -30
  4. package/dist/admin/accounts/permissions/index.page.html +30 -30
  5. package/dist/admin/accounts/users/[id]/index.page.html +17 -17
  6. package/dist/admin/accounts/users/index.page.html +18 -18
  7. package/dist/admin/components/AddGroupControl.js +1 -5
  8. package/dist/admin/components/AddGroupControl.js.map +1 -1
  9. package/dist/admin/components/AdminTableControl.js +2 -0
  10. package/dist/admin/components/AdminTableControl.js.map +1 -0
  11. package/dist/admin/components/ClearExpiredSessionsControl.js +1 -5
  12. package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -1
  13. package/dist/admin/components/GroupDeleteSelected.js +1 -5
  14. package/dist/admin/components/GroupDeleteSelected.js.map +1 -1
  15. package/dist/admin/components/GroupRemoveRecord.js +1 -5
  16. package/dist/admin/components/GroupRemoveRecord.js.map +1 -1
  17. package/dist/admin/components/TableRowDelete.js +1 -3
  18. package/dist/admin/components/TableRowDelete.js.map +1 -1
  19. package/dist/admin/components/TableRowLink.js +1 -7
  20. package/dist/admin/components/TableRowLink.js.map +1 -1
  21. package/dist/admin/components/tableControls/AddMember.js +1 -5
  22. package/dist/admin/components/tableControls/AddMember.js.map +1 -1
  23. package/dist/admin/components/tableControls/AddPermission.js +1 -5
  24. package/dist/admin/components/tableControls/AddPermission.js.map +1 -1
  25. package/dist/admin/components/tableControls/InstallExtension.js +1 -5
  26. package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
  27. package/dist/admin/components/tableControls/UninstallExtension.js +1 -5
  28. package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
  29. package/dist/admin/content/fragments/index.page.html +28 -28
  30. package/dist/admin/content/globals/index.page.html +28 -28
  31. package/dist/admin/content/pages/index.page.html +28 -28
  32. package/dist/admin/content/templates/index.page.html +28 -28
  33. package/dist/admin/extensions/index.page.html +18 -18
  34. package/dist/admin/init.js.map +1 -1
  35. package/dist/admin/settings/index.page.html +30 -30
  36. package/dist/kempo/api/admin-globals/DELETE.js +1 -1
  37. package/dist/kempo/api/admin-globals/DELETE.js.map +1 -1
  38. package/dist/kempo/api/admin-globals/GET.js +1 -1
  39. package/dist/kempo/api/admin-globals/GET.js.map +1 -1
  40. package/dist/kempo/api/admin-globals/POST.js +1 -1
  41. package/dist/kempo/api/admin-globals/POST.js.map +1 -1
  42. package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
  43. package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -1
  44. package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
  45. package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -1
  46. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
  47. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -1
  48. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
  49. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -1
  50. package/dist/kempo/api/extensions/DELETE.js +1 -1
  51. package/dist/kempo/api/extensions/DELETE.js.map +1 -1
  52. package/dist/kempo/api/extensions/POST.js +1 -1
  53. package/dist/kempo/api/extensions/POST.js.map +1 -1
  54. package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
  55. package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -1
  56. package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
  57. package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -1
  58. package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
  59. package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -1
  60. package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
  61. package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -1
  62. package/dist/kempo/api/pages/search/GET.js +1 -1
  63. package/dist/kempo/api/pages/search/GET.js.map +1 -1
  64. package/dist/kempo/api/user/[userid]/name/GET.js +2 -0
  65. package/dist/kempo/api/user/[userid]/name/GET.js.map +1 -0
  66. package/dist/kempo/components/UserDisplayName.js +2 -0
  67. package/dist/kempo/components/UserDisplayName.js.map +1 -0
  68. package/dist/kempo/sdk.js +1 -1
  69. package/dist/kempo/sdk.js.map +1 -1
  70. package/middleware/kempo.js +70 -45
  71. package/package.json +15 -8
  72. package/server/utils/admin-global-content/createAdminGlobalContent.js +4 -3
  73. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +2 -2
  74. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +2 -2
  75. package/server/utils/admin-global-content/disableAdminGlobalContent.js +2 -2
  76. package/server/utils/admin-global-content/enableAdminGlobalContent.js +2 -2
  77. package/server/utils/admin-global-content/getAdminGlobalContent.js +2 -2
  78. package/server/utils/admin-global-content/helpers.js +12 -1
  79. package/server/utils/admin-global-content/listAdminGlobalContent.js +2 -2
  80. package/server/utils/admin-global-content/updateAdminGlobalContent.js +2 -2
  81. package/server/utils/email/sendEmail.js +9 -3
  82. package/server/utils/extensions/uninstallExtension.js +54 -21
  83. package/server/utils/hooks/triggerHook.js +8 -1
@@ -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 n from"/kempo-ui/components/Dialog.js";import e from"/kempo-ui/components/Toast.js";import"/kempo-ui/components/Icon.js";export default class s extends t{install=async()=>{this.record&&n.confirm(`Install "${this.record.name}"?`,async t=>{if(!t)return;const{installExtension:o}=await import("/kempo/sdk.js"),[n]=await o(this.record.name);n?e.error(n.msg||"Failed to install extension"):(e.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="extension_add"></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=\"extension_add\"></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 e}from"/kempo-ui/lit-all.min.js";import t 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&&t.confirm(`Uninstall "${this.record.name}"? This may delete extension data.`,async n=>{if(!n)return;const{uninstallExtension:e}=await import("/kempo/sdk.js"),[t]=await e(this.record.name);t?o.error(t.msg||"Failed to uninstall extension"):(o.success(`"${this.record.name}" uninstalled successfully`),this.table.deleteRecord(this.record))})};render(){return e`
2
- <button class="no-btn icon-btn" title="Uninstall Extension" @click="${this.uninstall}">
3
- <k-icon name="extension_remove"></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=\"extension_remove\"></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":[]}
@@ -4,14 +4,14 @@
4
4
  <page title="Fragments - Admin">
5
5
  <content>
6
6
  <script type="module" src="/kempo-ui/components/Table.js"></script>
7
- <script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script>
8
- <script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script>
9
- <script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script>
10
- <script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script>
11
- <script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script>
12
- <script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script>
13
- <script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script>
14
- <script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script>
7
+ <script type="module" src="/kempo-ui/components/controls/TcFirstPage.js"></script>
8
+ <script type="module" src="/kempo-ui/components/controls/TcPrevPage.js"></script>
9
+ <script type="module" src="/kempo-ui/components/controls/TcNextPage.js"></script>
10
+ <script type="module" src="/kempo-ui/components/controls/TcLastPage.js"></script>
11
+ <script type="module" src="/kempo-ui/components/controls/TcPageSelect.js"></script>
12
+ <script type="module" src="/kempo-ui/components/controls/TcPageSize.js"></script>
13
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteRecord.js"></script>
14
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteSelected.js"></script>
15
15
  <script type="module" src="/kempo-ui/components/Icon.js"></script>
16
16
  <script type="module" src="/admin/components/TableRowLink.js"></script>
17
17
  <script type="module" src="/kempo/components/Permission.js"></script>
@@ -29,21 +29,21 @@
29
29
  <div slot="top" class="d-f full" style="align-items: center;">
30
30
  <div>
31
31
  <k-permission has="system:fragments:delete">
32
- <k-tc-delete-selected></k-tc-delete-selected>
32
+ <kc-tc-delete-selected></kc-tc-delete-selected>
33
33
  </k-permission>
34
34
  </div>
35
35
  </div>
36
36
  <div class="d-f full" style="align-items: center;">
37
37
  <div>
38
- <k-tc-first-page></k-tc-first-page>
39
- <k-tc-prev-page></k-tc-prev-page>
40
- <k-tc-next-page></k-tc-next-page>
41
- <k-tc-last-page></k-tc-last-page>
38
+ <kc-tc-first-page></kc-tc-first-page>
39
+ <kc-tc-prev-page></kc-tc-prev-page>
40
+ <kc-tc-next-page></kc-tc-next-page>
41
+ <kc-tc-last-page></kc-tc-last-page>
42
42
  </div>
43
43
  <div class="flex"></div>
44
- <div><k-tc-page-select></k-tc-page-select></div>
44
+ <div><kc-tc-page-select></kc-tc-page-select></div>
45
45
  <div class="flex"></div>
46
- <div><k-tc-page-size></k-tc-page-size></div>
46
+ <div><kc-tc-page-size></kc-tc-page-size></div>
47
47
  </div>
48
48
  </k-table>
49
49
 
@@ -52,15 +52,15 @@
52
52
  <admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link>
53
53
  <div class="d-f full" style="align-items: center;">
54
54
  <div>
55
- <k-tc-first-page></k-tc-first-page>
56
- <k-tc-prev-page></k-tc-prev-page>
57
- <k-tc-next-page></k-tc-next-page>
58
- <k-tc-last-page></k-tc-last-page>
55
+ <kc-tc-first-page></kc-tc-first-page>
56
+ <kc-tc-prev-page></kc-tc-prev-page>
57
+ <kc-tc-next-page></kc-tc-next-page>
58
+ <kc-tc-last-page></kc-tc-last-page>
59
59
  </div>
60
60
  <div class="flex"></div>
61
- <div><k-tc-page-select></k-tc-page-select></div>
61
+ <div><kc-tc-page-select></kc-tc-page-select></div>
62
62
  <div class="flex"></div>
63
- <div><k-tc-page-size></k-tc-page-size></div>
63
+ <div><kc-tc-page-size></kc-tc-page-size></div>
64
64
  </div>
65
65
  </k-table>
66
66
 
@@ -69,15 +69,15 @@
69
69
  <admin-table-row-link slot="before" url-pattern="/admin/content/fragments/edit?fragment={editPath}" field-name="editPath"></admin-table-row-link>
70
70
  <div class="d-f full" style="align-items: center;">
71
71
  <div>
72
- <k-tc-first-page></k-tc-first-page>
73
- <k-tc-prev-page></k-tc-prev-page>
74
- <k-tc-next-page></k-tc-next-page>
75
- <k-tc-last-page></k-tc-last-page>
72
+ <kc-tc-first-page></kc-tc-first-page>
73
+ <kc-tc-prev-page></kc-tc-prev-page>
74
+ <kc-tc-next-page></kc-tc-next-page>
75
+ <kc-tc-last-page></kc-tc-last-page>
76
76
  </div>
77
77
  <div class="flex"></div>
78
- <div><k-tc-page-select></k-tc-page-select></div>
78
+ <div><kc-tc-page-select></kc-tc-page-select></div>
79
79
  <div class="flex"></div>
80
- <div><k-tc-page-size></k-tc-page-size></div>
80
+ <div><kc-tc-page-size></kc-tc-page-size></div>
81
81
  </div>
82
82
  </k-table>
83
83
 
@@ -128,7 +128,7 @@
128
128
  if(myPerms.has('system:fragments:delete')){
129
129
  $customTable.setAttribute('request-delete', '');
130
130
  $customTable.setAttribute('enable-selection', '');
131
- const del = document.createElement('k-tc-delete-record');
131
+ const del = document.createElement('kc-tc-delete-record');
132
132
  del.setAttribute('slot', 'after');
133
133
  $customTable.appendChild(del);
134
134
  }
@@ -4,14 +4,14 @@
4
4
  <page title="Global Content - Admin">
5
5
  <content>
6
6
  <script type="module" src="/kempo-ui/components/Table.js"></script>
7
- <script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script>
8
- <script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script>
9
- <script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script>
10
- <script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script>
11
- <script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script>
12
- <script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script>
13
- <script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script>
14
- <script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script>
7
+ <script type="module" src="/kempo-ui/components/controls/TcFirstPage.js"></script>
8
+ <script type="module" src="/kempo-ui/components/controls/TcPrevPage.js"></script>
9
+ <script type="module" src="/kempo-ui/components/controls/TcNextPage.js"></script>
10
+ <script type="module" src="/kempo-ui/components/controls/TcLastPage.js"></script>
11
+ <script type="module" src="/kempo-ui/components/controls/TcPageSelect.js"></script>
12
+ <script type="module" src="/kempo-ui/components/controls/TcPageSize.js"></script>
13
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteRecord.js"></script>
14
+ <script type="module" src="/kempo-ui/components/controls/TcDeleteSelected.js"></script>
15
15
  <script type="module" src="/kempo-ui/components/Icon.js"></script>
16
16
  <script type="module" src="/kempo-ui/components/Combobox.js"></script>
17
17
  <script type="module" src="/admin/components/TableRowLink.js"></script>
@@ -30,21 +30,21 @@
30
30
  <div slot="top" class="d-f full" style="align-items: center;">
31
31
  <div>
32
32
  <k-permission has="system:globals:delete">
33
- <k-tc-delete-selected></k-tc-delete-selected>
33
+ <kc-tc-delete-selected></kc-tc-delete-selected>
34
34
  </k-permission>
35
35
  </div>
36
36
  </div>
37
37
  <div class="d-f full" style="align-items: center;">
38
38
  <div>
39
- <k-tc-first-page></k-tc-first-page>
40
- <k-tc-prev-page></k-tc-prev-page>
41
- <k-tc-next-page></k-tc-next-page>
42
- <k-tc-last-page></k-tc-last-page>
39
+ <kc-tc-first-page></kc-tc-first-page>
40
+ <kc-tc-prev-page></kc-tc-prev-page>
41
+ <kc-tc-next-page></kc-tc-next-page>
42
+ <kc-tc-last-page></kc-tc-last-page>
43
43
  </div>
44
44
  <div class="flex"></div>
45
- <div><k-tc-page-select></k-tc-page-select></div>
45
+ <div><kc-tc-page-select></kc-tc-page-select></div>
46
46
  <div class="flex"></div>
47
- <div><k-tc-page-size></k-tc-page-size></div>
47
+ <div><kc-tc-page-size></kc-tc-page-size></div>
48
48
  </div>
49
49
  </k-table>
50
50
 
@@ -53,15 +53,15 @@
53
53
  <admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link>
54
54
  <div class="d-f full" style="align-items: center;">
55
55
  <div>
56
- <k-tc-first-page></k-tc-first-page>
57
- <k-tc-prev-page></k-tc-prev-page>
58
- <k-tc-next-page></k-tc-next-page>
59
- <k-tc-last-page></k-tc-last-page>
56
+ <kc-tc-first-page></kc-tc-first-page>
57
+ <kc-tc-prev-page></kc-tc-prev-page>
58
+ <kc-tc-next-page></kc-tc-next-page>
59
+ <kc-tc-last-page></kc-tc-last-page>
60
60
  </div>
61
61
  <div class="flex"></div>
62
- <div><k-tc-page-select></k-tc-page-select></div>
62
+ <div><kc-tc-page-select></kc-tc-page-select></div>
63
63
  <div class="flex"></div>
64
- <div><k-tc-page-size></k-tc-page-size></div>
64
+ <div><kc-tc-page-size></kc-tc-page-size></div>
65
65
  </div>
66
66
  </k-table>
67
67
 
@@ -70,15 +70,15 @@
70
70
  <admin-table-row-link slot="before" url-pattern="/admin/content/globals/edit?id={id}" field-name="id"></admin-table-row-link>
71
71
  <div class="d-f full" style="align-items: center;">
72
72
  <div>
73
- <k-tc-first-page></k-tc-first-page>
74
- <k-tc-prev-page></k-tc-prev-page>
75
- <k-tc-next-page></k-tc-next-page>
76
- <k-tc-last-page></k-tc-last-page>
73
+ <kc-tc-first-page></kc-tc-first-page>
74
+ <kc-tc-prev-page></kc-tc-prev-page>
75
+ <kc-tc-next-page></kc-tc-next-page>
76
+ <kc-tc-last-page></kc-tc-last-page>
77
77
  </div>
78
78
  <div class="flex"></div>
79
- <div><k-tc-page-select></k-tc-page-select></div>
79
+ <div><kc-tc-page-select></kc-tc-page-select></div>
80
80
  <div class="flex"></div>
81
- <div><k-tc-page-size></k-tc-page-size></div>
81
+ <div><kc-tc-page-size></kc-tc-page-size></div>
82
82
  </div>
83
83
  </k-table>
84
84
 
@@ -131,7 +131,7 @@
131
131
  if(myPerms.has('system:globals:delete')){
132
132
  $customTable.setAttribute('request-delete', '');
133
133
  $customTable.setAttribute('enable-selection', '');
134
- const del = document.createElement('k-tc-delete-record');
134
+ const del = document.createElement('kc-tc-delete-record');
135
135
  del.setAttribute('slot', 'after');
136
136
  $customTable.appendChild(del);
137
137
  }