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.
- package/dist/admin/nav.fragment.html +57 -58
- package/dist/admin/realtime/index.page.html +2 -2
- package/dist/kempo/api/notifications/GET.js +1 -1
- package/dist/kempo/api/notifications/[id]/DELETE.js +1 -1
- package/dist/kempo/api/notifications/[id]/handled/POST.js +1 -1
- package/dist/kempo/api/notifications/[id]/read/POST.js +1 -1
- package/dist/kempo/api/notifications/count/GET.js +1 -1
- package/dist/kempo/api/notifications/read-all/POST.js +1 -1
- package/dist/kempo/components/AdminNavFooter.js +2 -0
- package/dist/kempo/components/AdminNavFooter.js.map +1 -0
- package/dist/kempo/components/Login.js +1 -1
- package/dist/kempo/components/NotificationBell.js +3 -3
- package/dist/kempo/components/NotificationBell.js.map +1 -1
- package/dist/kempo/components/NotificationList.js +1 -1
- package/dist/kempo/components/Register.js +1 -1
- package/dist/kempo/sdk.js +1 -1
- package/dist/kempo/utils/safeNext.js +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
29
|
-
icon="
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
<
|
|
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-
|
|
93
|
-
labels
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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
|
|
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,+
|
|
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
|
|
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=
|
|
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
|
|
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=
|
|
2
|
+
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\utils\safeNext.js.map
|