kempo 4.5.1 → 4.5.2

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.
@@ -7,96 +7,95 @@
7
7
  state="expanded"
8
8
  style="--aside_padding: 0;"
9
9
  persistent-id="admin-nav"
10
- group-icons='{"Commerce":"storefront"}'
10
+ group-icons='{"Accounts":"manage-accounts","Content":"cards_stack","Settings":"settings","Commerce":"storefront"}'
11
11
  >
12
12
  <k-aside-toggle>
13
13
  <h3 class="m0">Kempo Admin</h3>
14
14
  </k-aside-toggle>
15
- <div class="px pbh">
16
- <k-notification-bell page-href="/admin/notifications" open-direction="down right"></k-notification-bell>
17
- </div>
18
15
  <k-aside-item
19
16
  icon="preview"
20
17
  href="/"
18
+ group="Site"
21
19
  no-expand
22
20
  >Site</k-aside-item>
23
21
  <k-aside-item
24
22
  icon="cards"
25
23
  href="/admin"
24
+ group="Dashboard"
26
25
  no-expand
27
26
  >Dashboard</k-aside-item>
28
- <k-aside-menu
29
- icon="manage-accounts"
30
- label="Accounts"
31
- >
32
- <k-aside-item
33
- icon="person"
34
- href="/admin/accounts/users"
35
- no-expand
36
- >Users</k-aside-item>
37
- <k-aside-item
38
- icon="group"
39
- href="/admin/accounts/groups"
40
- no-expand
41
- >Groups</k-aside-item>
42
- <k-aside-item
43
- icon="lock"
44
- href="/admin/accounts/permissions"
45
- no-expand
46
- >Permissions</k-aside-item>
47
- </k-aside-menu>
48
- <k-aside-menu
49
- icon="cards_stack"
50
- label="Content"
51
- >
52
- <k-aside-item
53
- icon="browse"
54
- href="/admin/content/templates"
55
- >Templates</k-aside-item>
56
- <k-aside-item
57
- icon="docs"
58
- href="/admin/content/pages"
59
- >Pages</k-aside-item>
60
- <k-aside-item
61
- icon="content"
62
- href="/admin/content/fragments"
63
- >Fragments</k-aside-item>
64
- <k-aside-item
65
- icon="globe"
66
- href="/admin/content/globals"
67
- >Global Content</k-aside-item>
68
- </k-aside-menu>
27
+ <k-aside-item
28
+ icon="person"
29
+ href="/admin/accounts/users"
30
+ group="Accounts"
31
+ no-expand
32
+ >Users</k-aside-item>
33
+ <k-aside-item
34
+ icon="group"
35
+ href="/admin/accounts/groups"
36
+ group="Accounts"
37
+ no-expand
38
+ >Groups</k-aside-item>
39
+ <k-aside-item
40
+ icon="lock"
41
+ href="/admin/accounts/permissions"
42
+ group="Accounts"
43
+ no-expand
44
+ >Permissions</k-aside-item>
45
+ <k-aside-item
46
+ icon="browse"
47
+ href="/admin/content/templates"
48
+ group="Content"
49
+ no-expand
50
+ >Templates</k-aside-item>
51
+ <k-aside-item
52
+ icon="docs"
53
+ href="/admin/content/pages"
54
+ group="Content"
55
+ no-expand
56
+ >Pages</k-aside-item>
57
+ <k-aside-item
58
+ icon="content"
59
+ href="/admin/content/fragments"
60
+ group="Content"
61
+ no-expand
62
+ >Fragments</k-aside-item>
63
+ <k-aside-item
64
+ icon="globe"
65
+ href="/admin/content/globals"
66
+ group="Content"
67
+ no-expand
68
+ >Global Content</k-aside-item>
69
69
  <k-aside-item
70
70
  icon="settings"
71
71
  href="/admin/settings"
72
+ group="Settings"
72
73
  no-expand
73
- >Settings</k-aside-item>
74
+ >Admin Settings</k-aside-item>
74
75
  <k-aside-item
75
76
  icon="extension"
76
77
  href="/admin/extensions"
78
+ group="Settings"
77
79
  no-expand
78
80
  >Extensions</k-aside-item>
79
- <k-aside-item
80
- icon="notifications"
81
- href="/admin/notifications"
82
- no-expand
83
- >Notifications</k-aside-item>
81
+ <location name="admin-nav-extensions"></location>
84
82
  <k-aside-item
85
83
  icon="sensors"
86
84
  href="/admin/realtime"
85
+ group="Games"
87
86
  no-expand
88
- >Realtime</k-aside-item>
89
- <hr>
90
- <location name="admin-nav-extensions"></location>
87
+ >Realtime Connections</k-aside-item>
91
88
  <k-aside-spacer></k-aside-spacer>
92
- <k-theme-switcher
93
- labels
94
- style="--padding:var(--spacer_h);margin:var(--spacer_h) auto"
95
- ></k-theme-switcher>
89
+ <k-admin-nav-footer class="pxh pyh">
90
+ <k-theme-switcher class="d-b" labels style="--padding:var(--spacer_h)"></k-theme-switcher>
91
+ <span class="flex"></span>
92
+ <k-notification-bell class="d-b" page-href="/admin/notifications" open-direction="up right" button-class="ph r"></k-notification-bell>
93
+ </k-admin-nav-footer>
96
94
  </k-aside>
97
95
  <script type="module">
98
96
  import '/kempo-ui/components/ThemeSwitcher.js';
99
97
  import '/kempo/components/NotificationBell.js';
98
+ import '/kempo/components/AdminNavFooter.js';
100
99
  const items = document.querySelectorAll('k-aside-item');
101
100
  const currentPath = window.location.pathname;
102
101
 
@@ -1,13 +1,13 @@
1
1
  <!--
2
2
  locked: true
3
3
  -->
4
- <page title="Realtime - Admin">
4
+ <page title="Realtime Connections - Admin">
5
5
  <content>
6
6
  <script type="module" src="/kempo-ui/components/Table.js"></script>
7
7
  <script type="module" src="/kempo-ui/components/Icon.js"></script>
8
8
 
9
9
  <div class="d-f mb">
10
- <h1 class="flex mb0">Realtime</h1>
10
+ <h1 class="flex mb0">Realtime Connections</h1>
11
11
  <button id="refresh"><k-icon name="replay"></k-icon> Refresh</button>
12
12
  </div>
13
13
 
@@ -1,2 +1,2 @@
1
1
  import t from"../../../../server/utils/auth/getSession.js";import e from"../../../../server/utils/notifications/getNotifications.js";export default async(s,o)=>{const[r,i]=await t({token:s.cookies.session_token});if(r)return o.status(500===r.code?500:401).json({error:500===r.code?r.msg:"Authentication required"});const{unreadOnly:n,limit:u,offset:a}=s.query,[f,c]=await e({userId:i.user.id,unreadOnly:"true"===n,limit:u,offset:a});if(f)return o.status(f.code).json({error:f.msg});o.json(c)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\GET.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import t from"../../../../../server/utils/auth/getSession.js";import o from"../../../../../server/utils/notifications/deleteNotification.js";export default async(s,e)=>{const[i,r]=await t({token:s.cookies.session_token});if(i)return e.status(500===i.code?500:401).json({error:500===i.code?i.msg:"Authentication required"});const[n,a]=await o({userId:r.user.id,notificationId:s.params.id});if(n)return e.status(n.code).json({error:n.msg});e.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\[id]\DELETE.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\[id]\DELETE.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/auth/getSession.js";import t from"../../../../../../server/utils/notifications/markHandled.js";export default async(o,e)=>{const[r,i]=await s({token:o.cookies.session_token});if(r)return e.status(500===r.code?500:401).json({error:500===r.code?r.msg:"Authentication required"});const[n,a]=await t({userId:i.user.id,notificationId:o.params.id});if(n)return e.status(n.code).json({error:n.msg});e.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\[id]\handled\POST.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\[id]\handled\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/auth/getSession.js";import t from"../../../../../../server/utils/notifications/markRead.js";export default async(o,e)=>{const[r,i]=await s({token:o.cookies.session_token});if(r)return e.status(500===r.code?500:401).json({error:500===r.code?r.msg:"Authentication required"});const[n,a]=await t({userId:i.user.id,notificationId:o.params.id});if(n)return e.status(n.code).json({error:n.msg});e.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\[id]\read\POST.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\[id]\read\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/auth/getSession.js";import t from"../../../../../server/utils/notifications/getUnreadCount.js";export default async(e,o)=>{const[r,i]=await s({token:e.cookies.session_token});if(r)return o.status(500===r.code?500:401).json({error:500===r.code?r.msg:"Authentication required"});const[n,u]=await t({userId:i.user.id});if(n)return o.status(n.code).json({error:n.msg});o.json(u)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\count\GET.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\count\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/auth/getSession.js";import e from"../../../../../server/utils/notifications/markAllRead.js";export default async(t,o)=>{const[r,i]=await s({token:t.cookies.session_token});if(r)return o.status(500===r.code?500:401).json({error:500===r.code?r.msg:"Authentication required"});const[n,a]=await e({userId:i.user.id});if(n)return o.status(n.code).json({error:n.msg});o.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\api\notifications\read-all\POST.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\notifications\read-all\POST.js.map
@@ -0,0 +1,2 @@
1
+ export default class e extends HTMLElement{#e=null;connectedCallback(){this.#e=this.closest("k-aside"),this.#e?.addEventListener("aside_state_change",this.handleStateChange),this.applyState(this.#e?.state)}disconnectedCallback(){this.#e?.removeEventListener("aside_state_change",this.handleStateChange),this.#e=null}handleStateChange=e=>this.applyState(e.detail.state);applyState=e=>{const t="collapsed"===e;this.classList.toggle("d-f",!t),this.classList.toggle("d-b",t),this.classList.toggle("ta-center",t),this.style.alignItems=t?"":"center"}}customElements.define("k-admin-nav-footer",e);
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\AdminNavFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\components\\AdminNavFooter.js","names":["AdminNavFooter","HTMLElement","aside","connectedCallback","this","closest","addEventListener","handleStateChange","applyState","state","disconnectedCallback","removeEventListener","event","detail","collapsed","classList","toggle","style","alignItems","customElements","define"],"sources":["0"],"sourcesContent":["/*\r\n The bottom row of the admin side nav. Its children sit side by side while the parent <k-aside> is\r\n expanded and stack while it is collapsed. Layout is done with kempo-css utility classes toggled on\r\n this element, driven by the aside's `aside_state_change` event.\r\n*/\r\nexport default class AdminNavFooter extends HTMLElement {\r\n #aside = null;\r\n\r\n /*\r\n Lifecycle Callbacks\r\n */\r\n\r\n connectedCallback(){\r\n this.#aside = this.closest('k-aside');\r\n this.#aside?.addEventListener('aside_state_change', this.handleStateChange);\r\n this.applyState(this.#aside?.state);\r\n }\r\n\r\n disconnectedCallback(){\r\n this.#aside?.removeEventListener('aside_state_change', this.handleStateChange);\r\n this.#aside = null;\r\n }\r\n\r\n /*\r\n Event Handlers\r\n */\r\n\r\n handleStateChange = event => this.applyState(event.detail.state);\r\n\r\n /*\r\n Utility Functions\r\n */\r\n\r\n applyState = state => {\r\n const collapsed = state === 'collapsed';\r\n this.classList.toggle('d-f', !collapsed);\r\n this.classList.toggle('d-b', collapsed);\r\n this.classList.toggle('ta-center', collapsed);\r\n this.style.alignItems = collapsed ? '' : 'center';\r\n };\r\n}\r\n\r\ncustomElements.define('k-admin-nav-footer', AdminNavFooter);\r\n"],"mappings":"eAKe,MAAMA,UAAuBC,YAC1CC,GAAS,KAMT,iBAAAC,GACEC,MAAKF,EAASE,KAAKC,QAAQ,WAC3BD,MAAKF,GAAQI,iBAAiB,qBAAsBF,KAAKG,mBACzDH,KAAKI,WAAWJ,MAAKF,GAAQO,MAC/B,CAEA,oBAAAC,GACEN,MAAKF,GAAQS,oBAAoB,qBAAsBP,KAAKG,mBAC5DH,MAAKF,EAAS,IAChB,CAMAK,kBAAoBK,GAASR,KAAKI,WAAWI,EAAMC,OAAOJ,OAM1DD,WAAaC,IACX,MAAMK,EAAsB,cAAVL,EAClBL,KAAKW,UAAUC,OAAO,OAAQF,GAC9BV,KAAKW,UAAUC,OAAO,MAAOF,GAC7BV,KAAKW,UAAUC,OAAO,YAAaF,GACnCV,KAAKa,MAAMC,WAAaJ,EAAY,GAAK,UAI7CK,eAAeC,OAAO,qBAAsBpB","ignoreList":[]}
@@ -15,4 +15,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as s}from"/kem
15
15
  <p class="mt"><a href="/forgot-password">Forgot Password?</a></p>
16
16
  <p class="mt">Don't have an account? <a href="/register">Register</a></p>
17
17
  `}}customElements.define("k-login",a);
18
- //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Login.js.map
18
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Login.js.map
@@ -1,6 +1,6 @@
1
- import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Dropdown.js";import"/kempo-ui/components/Icon.js";import"./NotificationList.js";import{getUnreadNotificationCount as n,markAllNotificationsRead as s}from"/kempo/sdk.js";export default class o extends t{static properties={pageHref:{type:String,attribute:"page-href"},interval:{type:Number},openDirection:{type:String,attribute:"open-direction"},count:{state:!0},signedOut:{state:!0}};#t=null;constructor(){super(),this.pageHref="",this.interval=6e4,this.openDirection="down right",this.count=0,this.signedOut=!1}connectedCallback(){super.connectedCallback(),window.addEventListener("focus",this.refreshCount),document.addEventListener("visibilitychange",this.handleVisibility),this.refreshCount(),this.interval>0&&(this.#t=setInterval(this.handleTick,this.interval))}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("focus",this.refreshCount),document.removeEventListener("visibilitychange",this.handleVisibility),clearInterval(this.#t)}refreshCount=async()=>{const[t,i]=await n();if(t)return this.signedOut=401===t.code,void(this.signedOut&&(this.count=0));this.signedOut=!1,this.count=i.count};handleTick=()=>{document.hidden||this.refreshCount()};handleVisibility=()=>{document.hidden||this.refreshCount()};handleOpened=t=>{t.target.closest("k-notification-bell")===this&&(this.querySelector("k-notification-list")?.refresh(),this.refreshCount())};handleChange=t=>{this.count=t.detail.unread};markAll=async()=>{await s(),await(this.querySelector("k-notification-list")?.refresh())};renderLightDom(){return this.signedOut?e:i`
1
+ import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing as e}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Dropdown.js";import"/kempo-ui/components/Icon.js";import"./NotificationList.js";import{getUnreadNotificationCount as n,markAllNotificationsRead as s}from"/kempo/sdk.js";export default class o extends t{static properties={pageHref:{type:String,attribute:"page-href"},interval:{type:Number},openDirection:{type:String,attribute:"open-direction"},buttonClass:{type:String,attribute:"button-class"},count:{state:!0},signedOut:{state:!0}};#t=null;constructor(){super(),this.pageHref="",this.interval=6e4,this.openDirection="down right",this.buttonClass="",this.count=0,this.signedOut=!1}connectedCallback(){super.connectedCallback(),window.addEventListener("focus",this.refreshCount),document.addEventListener("visibilitychange",this.handleVisibility),this.refreshCount(),this.interval>0&&(this.#t=setInterval(this.handleTick,this.interval))}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("focus",this.refreshCount),document.removeEventListener("visibilitychange",this.handleVisibility),clearInterval(this.#t)}refreshCount=async()=>{const[t,i]=await n();if(t)return this.signedOut=401===t.code,void(this.signedOut&&(this.count=0));this.signedOut=!1,this.count=i.count};handleTick=()=>{document.hidden||this.refreshCount()};handleVisibility=()=>{document.hidden||this.refreshCount()};handleOpened=t=>{t.target.closest("k-notification-bell")===this&&(this.querySelector("k-notification-list")?.refresh(),this.refreshCount())};handleChange=t=>{this.count=t.detail.unread};markAll=async()=>{await s(),await(this.querySelector("k-notification-list")?.refresh())};renderLightDom(){return this.signedOut?e:i`
2
2
  <k-dropdown close-on-select="false" open-direction=${this.openDirection} @opened=${this.handleOpened}>
3
- <button slot="trigger" class="no-btn d-f" aria-label=${this.count?`Notifications, ${this.count} unread`:"Notifications"}>
3
+ <button slot="trigger" class="no-btn d-f ${this.buttonClass}" aria-label=${this.count?`Notifications, ${this.count} unread`:"Notifications"}>
4
4
  <k-icon name="notifications"></k-icon>
5
5
  ${this.count?i`<span class="bg-danger round pxh ml" data-unread-badge>${this.count>99?"99+":this.count}</span>`:e}
6
6
  </button>
@@ -14,4 +14,4 @@ import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing a
14
14
  </div>
15
15
  </k-dropdown>
16
16
  `}}customElements.define("k-notification-bell",o);
17
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\components\NotificationBell.js.map
17
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\NotificationBell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\components\\NotificationBell.js","names":["LightComponent","html","nothing","getUnreadNotificationCount","markAllNotificationsRead","NotificationBell","static","pageHref","type","String","attribute","interval","Number","openDirection","count","state","signedOut","timer","constructor","super","this","connectedCallback","window","addEventListener","refreshCount","document","handleVisibility","setInterval","handleTick","disconnectedCallback","removeEventListener","clearInterval","async","error","data","code","hidden","handleOpened","event","target","closest","querySelector","refresh","handleChange","detail","unread","markAll","renderLightDom","customElements","define"],"sources":["0"],"sourcesContent":["import LightComponent from '/kempo-ui/components/LightComponent.js';\nimport { html, nothing } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Dropdown.js';\nimport '/kempo-ui/components/Icon.js';\nimport './NotificationList.js';\nimport { getUnreadNotificationCount, markAllNotificationsRead } from '/kempo/sdk.js';\n\n/*\n A bell with an unread badge that opens the latest notifications. It is the one element a site needs to\n show a signed-in user their notifications; it renders nothing when nobody is signed in.\n\n Attributes: `page-href` (a \"View all\" link to a full notifications page, hidden when unset),\n `interval` (milliseconds between background checks of the count, default 60000, 0 to turn them off) and\n `open-direction` (passed to the dropdown). The count is also refreshed on load, when the window regains\n focus and whenever the panel opens.\n*/\nexport default class NotificationBell extends LightComponent {\n static properties = {\n pageHref: { type: String, attribute: 'page-href' },\n interval: { type: Number },\n openDirection: { type: String, attribute: 'open-direction' },\n count: { state: true },\n signedOut: { state: true }\n };\n\n #timer = null;\n\n constructor(){\n super();\n this.pageHref = '';\n this.interval = 60000;\n this.openDirection = 'down right';\n this.count = 0;\n this.signedOut = false;\n }\n\n /*\n Lifecycle Callbacks\n */\n\n connectedCallback(){\n super.connectedCallback();\n window.addEventListener('focus', this.refreshCount);\n document.addEventListener('visibilitychange', this.handleVisibility);\n this.refreshCount();\n if(this.interval > 0) this.#timer = setInterval(this.handleTick, this.interval);\n }\n\n disconnectedCallback(){\n super.disconnectedCallback();\n window.removeEventListener('focus', this.refreshCount);\n document.removeEventListener('visibilitychange', this.handleVisibility);\n clearInterval(this.#timer);\n }\n\n /*\n Public Methods\n */\n\n refreshCount = async () => {\n const [error, data] = await getUnreadNotificationCount();\n if(error){\n this.signedOut = error.code === 401;\n if(this.signedOut) this.count = 0;\n return;\n }\n this.signedOut = false;\n this.count = data.count;\n };\n\n /*\n Event Handlers\n */\n\n handleTick = () => {\n if(!document.hidden) this.refreshCount();\n };\n\n handleVisibility = () => {\n if(!document.hidden) this.refreshCount();\n };\n\n handleOpened = event => {\n if(event.target.closest('k-notification-bell') !== this) return;\n this.querySelector('k-notification-list')?.refresh();\n this.refreshCount();\n };\n\n handleChange = event => {\n this.count = event.detail.unread;\n };\n\n markAll = async () => {\n await markAllNotificationsRead();\n await this.querySelector('k-notification-list')?.refresh();\n };\n\n /*\n Rendering\n */\n\n renderLightDom(){\n if(this.signedOut) return nothing;\n return html`\n <k-dropdown close-on-select=\"false\" open-direction=${this.openDirection} @opened=${this.handleOpened}>\n <button slot=\"trigger\" class=\"no-btn d-f\" aria-label=${this.count ? `Notifications, ${this.count} unread` : 'Notifications'}>\n <k-icon name=\"notifications\"></k-icon>\n ${this.count ? html`<span class=\"bg-danger round pxh ml\" data-unread-badge>${this.count > 99 ? '99+' : this.count}</span>` : nothing}\n </button>\n <div @notifications-change=${this.handleChange}>\n <div class=\"d-f p b-bottom\">\n <strong class=\"flex\">Notifications</strong>\n <button class=\"link\" ?disabled=${!this.count} @click=${this.markAll}>Mark all read</button>\n </div>\n <k-notification-list compact page-size=\"8\"></k-notification-list>\n ${this.pageHref ? html`<div class=\"ta-center p\"><a href=${this.pageHref}>View all</a></div>` : nothing}\n </div>\n </k-dropdown>\n `;\n }\n}\n\ncustomElements.define('k-notification-bell', NotificationBell);\n"],"mappings":"OAAOA,MAAoB,wDAClBC,aAAMC,MAAe,iCACvB,yCACA,qCACA,6DACEC,8BAA4BC,MAAgC,+BAWtD,MAAMC,UAAyBL,EAC5CM,kBAAoB,CAClBC,SAAU,CAAEC,KAAMC,OAAQC,UAAW,aACrCC,SAAU,CAAEH,KAAMI,QAClBC,cAAe,CAAEL,KAAMC,OAAQC,UAAW,kBAC1CI,MAAO,CAAEC,OAAO,GAChBC,UAAW,CAAED,OAAO,IAGtBE,GAAS,KAET,WAAAC,GACEC,QACAC,KAAKb,SAAW,GAChBa,KAAKT,SAAW,IAChBS,KAAKP,cAAgB,aACrBO,KAAKN,MAAQ,EACbM,KAAKJ,WAAY,CACnB,CAMA,iBAAAK,GACEF,MAAME,oBACNC,OAAOC,iBAAiB,QAASH,KAAKI,cACtCC,SAASF,iBAAiB,mBAAoBH,KAAKM,kBACnDN,KAAKI,eACFJ,KAAKT,SAAW,IAAGS,MAAKH,EAASU,YAAYP,KAAKQ,WAAYR,KAAKT,UACxE,CAEA,oBAAAkB,GACEV,MAAMU,uBACNP,OAAOQ,oBAAoB,QAASV,KAAKI,cACzCC,SAASK,oBAAoB,mBAAoBV,KAAKM,kBACtDK,cAAcX,MAAKH,EACrB,CAMAO,aAAeQ,UACb,MAAOC,EAAOC,SAAc/B,IAC5B,GAAG8B,EAGD,OAFAb,KAAKJ,UAA2B,MAAfiB,EAAME,UACpBf,KAAKJ,YAAWI,KAAKN,MAAQ,IAGlCM,KAAKJ,WAAY,EACjBI,KAAKN,MAAQoB,EAAKpB,OAOpBc,WAAa,KACPH,SAASW,QAAQhB,KAAKI,gBAG5BE,iBAAmB,KACbD,SAASW,QAAQhB,KAAKI,gBAG5Ba,aAAeC,IACVA,EAAMC,OAAOC,QAAQ,yBAA2BpB,OACnDA,KAAKqB,cAAc,wBAAwBC,UAC3CtB,KAAKI,iBAGPmB,aAAeL,IACblB,KAAKN,MAAQwB,EAAMM,OAAOC,QAG5BC,QAAUd,gBACF5B,UACAgB,KAAKqB,cAAc,wBAAwBC,YAOnD,cAAAK,GACE,OAAG3B,KAAKJ,UAAkBd,EACnBD,CAAI;2DAC4CmB,KAAKP,yBAAyBO,KAAKiB;+DAC/BjB,KAAKN,MAAQ,kBAAkBM,KAAKN,eAAiB;;YAExGM,KAAKN,MAAQb,CAAI,0DAA0DmB,KAAKN,MAAQ,GAAK,MAAQM,KAAKN,eAAiBZ;;qCAElGkB,KAAKuB;;;8CAGIvB,KAAKN,gBAAgBM,KAAK0B;;;YAG5D1B,KAAKb,SAAWN,CAAI,oCAAoCmB,KAAKb,8BAAgCL;;;KAIvG,EAGF8C,eAAeC,OAAO,sBAAuB5C","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\components\\NotificationBell.js","names":["LightComponent","html","nothing","getUnreadNotificationCount","markAllNotificationsRead","NotificationBell","static","pageHref","type","String","attribute","interval","Number","openDirection","buttonClass","count","state","signedOut","timer","constructor","super","this","connectedCallback","window","addEventListener","refreshCount","document","handleVisibility","setInterval","handleTick","disconnectedCallback","removeEventListener","clearInterval","async","error","data","code","hidden","handleOpened","event","target","closest","querySelector","refresh","handleChange","detail","unread","markAll","renderLightDom","customElements","define"],"sources":["0"],"sourcesContent":["import LightComponent from '/kempo-ui/components/LightComponent.js';\r\nimport { html, nothing } from '/kempo-ui/lit-all.min.js';\r\nimport '/kempo-ui/components/Dropdown.js';\r\nimport '/kempo-ui/components/Icon.js';\r\nimport './NotificationList.js';\r\nimport { getUnreadNotificationCount, markAllNotificationsRead } from '/kempo/sdk.js';\r\n\r\n/*\r\n A bell with an unread badge that opens the latest notifications. It is the one element a site needs to\r\n show a signed-in user their notifications; it renders nothing when nobody is signed in.\r\n\r\n Attributes: `page-href` (a \"View all\" link to a full notifications page, hidden when unset),\r\n `interval` (milliseconds between background checks of the count, default 60000, 0 to turn them off) and\r\n `open-direction` (passed to the dropdown) and `button-class` (extra classes for the trigger button, for\r\n example to size it like the surrounding controls). The count is also refreshed on load, when the window regains\r\n focus and whenever the panel opens.\r\n*/\r\nexport default class NotificationBell extends LightComponent {\r\n static properties = {\r\n pageHref: { type: String, attribute: 'page-href' },\r\n interval: { type: Number },\r\n openDirection: { type: String, attribute: 'open-direction' },\r\n buttonClass: { type: String, attribute: 'button-class' },\r\n count: { state: true },\r\n signedOut: { state: true }\r\n };\r\n\r\n #timer = null;\r\n\r\n constructor(){\r\n super();\r\n this.pageHref = '';\r\n this.interval = 60000;\r\n this.openDirection = 'down right';\r\n this.buttonClass = '';\r\n this.count = 0;\r\n this.signedOut = false;\r\n }\r\n\r\n /*\r\n Lifecycle Callbacks\r\n */\r\n\r\n connectedCallback(){\r\n super.connectedCallback();\r\n window.addEventListener('focus', this.refreshCount);\r\n document.addEventListener('visibilitychange', this.handleVisibility);\r\n this.refreshCount();\r\n if(this.interval > 0) this.#timer = setInterval(this.handleTick, this.interval);\r\n }\r\n\r\n disconnectedCallback(){\r\n super.disconnectedCallback();\r\n window.removeEventListener('focus', this.refreshCount);\r\n document.removeEventListener('visibilitychange', this.handleVisibility);\r\n clearInterval(this.#timer);\r\n }\r\n\r\n /*\r\n Public Methods\r\n */\r\n\r\n refreshCount = async () => {\r\n const [error, data] = await getUnreadNotificationCount();\r\n if(error){\r\n this.signedOut = error.code === 401;\r\n if(this.signedOut) this.count = 0;\r\n return;\r\n }\r\n this.signedOut = false;\r\n this.count = data.count;\r\n };\r\n\r\n /*\r\n Event Handlers\r\n */\r\n\r\n handleTick = () => {\r\n if(!document.hidden) this.refreshCount();\r\n };\r\n\r\n handleVisibility = () => {\r\n if(!document.hidden) this.refreshCount();\r\n };\r\n\r\n handleOpened = event => {\r\n if(event.target.closest('k-notification-bell') !== this) return;\r\n this.querySelector('k-notification-list')?.refresh();\r\n this.refreshCount();\r\n };\r\n\r\n handleChange = event => {\r\n this.count = event.detail.unread;\r\n };\r\n\r\n markAll = async () => {\r\n await markAllNotificationsRead();\r\n await this.querySelector('k-notification-list')?.refresh();\r\n };\r\n\r\n /*\r\n Rendering\r\n */\r\n\r\n renderLightDom(){\r\n if(this.signedOut) return nothing;\r\n return html`\r\n <k-dropdown close-on-select=\"false\" open-direction=${this.openDirection} @opened=${this.handleOpened}>\r\n <button slot=\"trigger\" class=\"no-btn d-f ${this.buttonClass}\" aria-label=${this.count ? `Notifications, ${this.count} unread` : 'Notifications'}>\r\n <k-icon name=\"notifications\"></k-icon>\r\n ${this.count ? html`<span class=\"bg-danger round pxh ml\" data-unread-badge>${this.count > 99 ? '99+' : this.count}</span>` : nothing}\r\n </button>\r\n <div @notifications-change=${this.handleChange}>\r\n <div class=\"d-f p b-bottom\">\r\n <strong class=\"flex\">Notifications</strong>\r\n <button class=\"link\" ?disabled=${!this.count} @click=${this.markAll}>Mark all read</button>\r\n </div>\r\n <k-notification-list compact page-size=\"8\"></k-notification-list>\r\n ${this.pageHref ? html`<div class=\"ta-center p\"><a href=${this.pageHref}>View all</a></div>` : nothing}\r\n </div>\r\n </k-dropdown>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('k-notification-bell', NotificationBell);\r\n"],"mappings":"OAAOA,MAAoB,wDAClBC,aAAMC,MAAe,iCACvB,yCACA,qCACA,6DACEC,8BAA4BC,MAAgC,+BAYtD,MAAMC,UAAyBL,EAC5CM,kBAAoB,CAClBC,SAAU,CAAEC,KAAMC,OAAQC,UAAW,aACrCC,SAAU,CAAEH,KAAMI,QAClBC,cAAe,CAAEL,KAAMC,OAAQC,UAAW,kBAC1CI,YAAa,CAAEN,KAAMC,OAAQC,UAAW,gBACxCK,MAAO,CAAEC,OAAO,GAChBC,UAAW,CAAED,OAAO,IAGtBE,GAAS,KAET,WAAAC,GACEC,QACAC,KAAKd,SAAW,GAChBc,KAAKV,SAAW,IAChBU,KAAKR,cAAgB,aACrBQ,KAAKP,YAAc,GACnBO,KAAKN,MAAQ,EACbM,KAAKJ,WAAY,CACnB,CAMA,iBAAAK,GACEF,MAAME,oBACNC,OAAOC,iBAAiB,QAASH,KAAKI,cACtCC,SAASF,iBAAiB,mBAAoBH,KAAKM,kBACnDN,KAAKI,eACFJ,KAAKV,SAAW,IAAGU,MAAKH,EAASU,YAAYP,KAAKQ,WAAYR,KAAKV,UACxE,CAEA,oBAAAmB,GACEV,MAAMU,uBACNP,OAAOQ,oBAAoB,QAASV,KAAKI,cACzCC,SAASK,oBAAoB,mBAAoBV,KAAKM,kBACtDK,cAAcX,MAAKH,EACrB,CAMAO,aAAeQ,UACb,MAAOC,EAAOC,SAAchC,IAC5B,GAAG+B,EAGD,OAFAb,KAAKJ,UAA2B,MAAfiB,EAAME,UACpBf,KAAKJ,YAAWI,KAAKN,MAAQ,IAGlCM,KAAKJ,WAAY,EACjBI,KAAKN,MAAQoB,EAAKpB,OAOpBc,WAAa,KACPH,SAASW,QAAQhB,KAAKI,gBAG5BE,iBAAmB,KACbD,SAASW,QAAQhB,KAAKI,gBAG5Ba,aAAeC,IACVA,EAAMC,OAAOC,QAAQ,yBAA2BpB,OACnDA,KAAKqB,cAAc,wBAAwBC,UAC3CtB,KAAKI,iBAGPmB,aAAeL,IACblB,KAAKN,MAAQwB,EAAMM,OAAOC,QAG5BC,QAAUd,gBACF7B,UACAiB,KAAKqB,cAAc,wBAAwBC,YAOnD,cAAAK,GACE,OAAG3B,KAAKJ,UAAkBf,EACnBD,CAAI;2DAC4CoB,KAAKR,yBAAyBQ,KAAKiB;mDAC3CjB,KAAKP,2BAA2BO,KAAKN,MAAQ,kBAAkBM,KAAKN,eAAiB;;YAE5HM,KAAKN,MAAQd,CAAI,0DAA0DoB,KAAKN,MAAQ,GAAK,MAAQM,KAAKN,eAAiBb;;qCAElGmB,KAAKuB;;;8CAGIvB,KAAKN,gBAAgBM,KAAK0B;;;YAG5D1B,KAAKd,SAAWN,CAAI,oCAAoCoB,KAAKd,8BAAgCL;;;KAIvG,EAGF+C,eAAeC,OAAO,sBAAuB7C","ignoreList":[]}
@@ -18,4 +18,4 @@ import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing a
18
18
  <k-pagination class="d-b my" controls="simple" .page=${this.page} .totalItems=${this.total} .itemsPerPage=${this.pageSize} @page-change=${this.handlePageChange}></k-pagination>
19
19
  `:e}
20
20
  `:i`<p class="p tc-muted">${this.unreadOnly?"No unread notifications.":"No notifications."}</p>`}}customElements.define("k-notification-list",p);
21
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\components\NotificationList.js.map
21
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\NotificationList.js.map
@@ -18,4 +18,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as t}from"/kem
18
18
  ${this.extra}
19
19
  <p class="mt">Already have an account? <a href="/login">Login</a></p>
20
20
  `}}customElements.define("k-register",a);
21
- //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Register.js.map
21
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Register.js.map
package/dist/kempo/sdk.js CHANGED
@@ -1,2 +1,2 @@
1
1
  import{get as e,post as s,put as o,patch as n,del as t}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:o,name:n})=>s(`${a}/auth/register/email`,{email:e,password:o,name:n});export const login=async({email:e,password:o})=>s(`${a}/auth/login/email`,{email:e,password:o});export const logout=async()=>s(`${a}/auth/logout`,{});export const getSession=async()=>e(`${a}/auth/session`);export const forgotPassword=async({email:e})=>s(`${a}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:o,logoutAll:n=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:o,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:o,logoutAll:n})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:o,logoutAll:n});export const verifyEmail=async({token:e})=>s(`${a}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${a}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${a}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${a}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${a}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:o})=>e(`${a}/user/${s}/permissions`,{permission:o});export const userHasAllPermissions=async({userid:s,permissions:o})=>e(`${a}/user/${s}/permissions/all`,{permissions:o});export const userHasSomePermissions=async({userid:s,permissions:o})=>e(`${a}/user/${s}/permissions/some`,{permissions:o});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:o}={})=>e(`${a}/user`,{limit:s,offset:o});export const searchUsers=async({q:s,limit:o,offset:n,inGroup:t,notInGroup:r}={})=>e(`${a}/user/search`,{q:s,limit:o,offset:n,inGroup:t,notInGroup:r});export const createUser=async({name:e,email:o,password:n,emailVerified:t})=>s(`${a}/user/create`,{name:e,email:o,password:n,emailVerified:t});export const deleteUsers=async e=>t(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:o,emailVerified:t,createdAt:r})=>n(`${a}/user`,{id:e,name:s,email:o,emailVerified:t,createdAt:r});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:o,offset:n}={})=>e(`${a}/user/${s}/sessions`,{limit:o,offset:n});export const deleteUserSession=async(e,s)=>t(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:o,offset:n}={})=>e(`${a}/user/${s}/groups`,{limit:o,offset:n});export const addUserToGroup=async(e,o)=>s(`${a}/user/${e}/groups`,{groupName:o});export const removeUserFromGroup=async(e,s)=>t(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:o,owner:n}={})=>e(`${a}/groups`,{limit:s,offset:o,owner:n});export const createGroup=async({name:e,description:o})=>s(`${a}/groups`,{name:e,description:o});export const updateGroup=async({name:e,newName:s,description:o})=>n(`${a}/groups`,{name:e,newName:s,description:o});export const deleteGroups=async e=>t(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:o,offset:n}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:o,offset:n});export const addMemberToGroup=async(e,o)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:o});export const removeMemberFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,o)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:o});export const removePermissionFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:o,owner:n}={})=>e(`${a}/permissions`,{limit:s,offset:o,owner:n});export const createPermissions=async e=>s(`${a}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>n(`${a}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${a}/permissions`,{names:e});export const getSetting=async(s,o)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(o)}`);export const listSettings=async({owner:s,limit:o,offset:n}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:o,offset:n});export const setSetting=async(e,o,n)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(o)}`,n);export const deleteSetting=async(e,s)=>t(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:o,offset:n,limit:t}={})=>e(`${a}/pages`,{owner:s,showHidden:o,offset:n,limit:t});export const rescanPages=async()=>s(`${a}/pages/rescan`,{});export const listTemplates=async()=>e(`${a}/templates`);export const listDirectories=async()=>e(`${a}/pages/directories`);export const getPage=async s=>e(`${a}/pages/file`,{file:s});export const createPage=async({directory:e,name:o,template:n})=>s(`${a}/pages`,{directory:e,name:o,template:n});export const updatePage=async({file:e,name:s,title:n,description:t,author:r,template:i,contents:c,extraMetadata:l})=>o(`${a}/pages/file`,{file:e,name:s,title:n,description:t,author:r,template:i,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${a}/pages`,{files:e});export const disablePage=async e=>o(`${a}/pages/disable`,{file:e});export const enablePage=async e=>o(`${a}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>n(`${a}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${a}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>o(`${a}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${a}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:o,copyFrom:n})=>s(`${a}/templates`,{directory:e,name:o,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:t})=>o(`${a}/templates/file`,{file:e,name:s,author:n,markup:t});export const deleteTemplates=async e=>t(`${a}/templates`,{files:e});export const disableTemplate=async e=>o(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>o(`${a}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>n(`${a}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>o(`${a}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${a}/fragments`);export const getFragment=async s=>e(`${a}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:o})=>s(`${a}/fragments`,{directory:e,name:o});export const updateFragment=async({file:e,author:s,markup:n})=>o(`${a}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>t(`${a}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>n(`${a}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>o(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>o(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>o(`${a}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${a}/globals`);export const getGlobalContent=async s=>e(`${a}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:o,priority:n})=>s(`${a}/globals`,{name:e,location:o,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:t,markup:r})=>o(`${a}/globals/entry`,{id:e,name:s,location:n,priority:t,markup:r});export const deleteGlobalContent=async e=>t(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>o(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>o(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>o(`${a}/globals/lock`,{id:e,locked:s});export const listExtensions=async({limit:s,offset:o}={})=>e(`${a}/extensions`,{limit:s,offset:o});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async()=>e(`${a}/extensions/known`);export const getNotifications=async({unreadOnly:s=!1,limit:o,offset:n}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:o,offset:n});export const getUnreadNotificationCount=async()=>e(`${a}/notifications/count`);export const markNotificationRead=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/read`,{});export const markNotificationHandled=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/handled`,{});export const markAllNotificationsRead=async()=>s(`${a}/notifications/read-all`,{});export const dismissNotification=async e=>t(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async e=>s(`${a}/extensions`,{name:e});export const uninstallExtension=async(e,s=!1)=>t(`${a}/extensions`,{name:e,purgeData:s});export const enableExtension=async e=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{});export const disableExtension=async e=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{});export const listAdminGlobalContent=async()=>e(`${a}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${a}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:o,priority:n,owner:t,markup:r})=>s(`${a}/admin-globals`,{name:e,location:o,priority:n,owner:t,markup:r});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:t,markup:r})=>o(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:t,markup:r});export const deleteAdminGlobalContent=async e=>t(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>o(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>o(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo-notifications\dist\kempo\sdk.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\sdk.js.map
@@ -1,2 +1,2 @@
1
1
  export default t=>"string"!=typeof t||t.length>2048||!t.startsWith("/")||t.startsWith("//")||/[\\\u0000-\u001f\u007f]/.test(t)?"":t;
2
- //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\utils\safeNext.js.map
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\utils\safeNext.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kempo",
3
- "version": "4.5.1",
3
+ "version": "4.5.2",
4
4
  "type": "module",
5
5
  "description": "A fullstack CMS framework for creating websites with user authentication",
6
6
  "scripts": {