@axium/sysadmin 0.0.1

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 (50) hide show
  1. package/LICENSE.md +157 -0
  2. package/README.md +3 -0
  3. package/db.json +77 -0
  4. package/dist/_probe.d.ts +1 -0
  5. package/dist/_probe.js +4 -0
  6. package/dist/client/.info.js +38 -0
  7. package/dist/client/cli.d.ts +1 -0
  8. package/dist/client/cli.js +109 -0
  9. package/dist/client/hooks.d.ts +1 -0
  10. package/dist/client/hooks.js +1 -0
  11. package/dist/client/info.d.ts +2 -0
  12. package/dist/client/info.js +171 -0
  13. package/dist/client/socket.d.ts +1 -0
  14. package/dist/client/socket.js +9 -0
  15. package/dist/common.d.ts +371 -0
  16. package/dist/common.js +65 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +2 -0
  19. package/dist/info.d.ts +95 -0
  20. package/dist/info.js +58 -0
  21. package/dist/server/api.d.ts +1 -0
  22. package/dist/server/api.js +136 -0
  23. package/dist/server/db.d.ts +7 -0
  24. package/dist/server/db.js +1 -0
  25. package/dist/server/hooks.d.ts +3 -0
  26. package/dist/server/hooks.js +3 -0
  27. package/dist/server/socket.d.ts +1 -0
  28. package/dist/server/socket.js +9 -0
  29. package/dist/web_hook.d.ts +8 -0
  30. package/dist/web_hook.js +4 -0
  31. package/lib/SystemCard.svelte +133 -0
  32. package/lib/SystemInitDialog.svelte +59 -0
  33. package/lib/UserCard.svelte +108 -0
  34. package/lib/UserInitDialog.svelte +49 -0
  35. package/lib/index.ts +4 -0
  36. package/lib/tsconfig.json +12 -0
  37. package/locales/en.json +79 -0
  38. package/package.json +71 -0
  39. package/routes/sysadmin/+layout.ts +22 -0
  40. package/routes/sysadmin/+page.svelte +115 -0
  41. package/routes/sysadmin/+page.ts +14 -0
  42. package/routes/sysadmin/systems/+page.svelte +92 -0
  43. package/routes/sysadmin/systems/+page.ts +11 -0
  44. package/routes/sysadmin/systems/[id]/+page.svelte +290 -0
  45. package/routes/sysadmin/systems/[id]/+page.ts +11 -0
  46. package/routes/sysadmin/users/+page.svelte +85 -0
  47. package/routes/sysadmin/users/+page.ts +11 -0
  48. package/routes/sysadmin/users/[id]/+page.svelte +82 -0
  49. package/routes/sysadmin/users/[id]/+page.ts +11 -0
  50. package/routes/tsconfig.json +12 -0
@@ -0,0 +1,85 @@
1
+ <script lang="ts">
2
+ import { text } from '@axium/client';
3
+ import { Icon } from '@axium/client/components';
4
+ import { UserCard, UserInitDialog } from '@axium/sysadmin/components';
5
+
6
+ const { data } = $props();
7
+
8
+ let users = $state(data.users);
9
+ </script>
10
+
11
+ <svelte:head>
12
+ <title>{text('sysadmin.system_users')}</title>
13
+ </svelte:head>
14
+
15
+ <div class="users">
16
+ <p>
17
+ <a class="subtle icon-text back" href="/sysadmin">
18
+ <Icon i="arrow-left" />
19
+ <span>{text('sysadmin.back_to_main')}</span>
20
+ </a>
21
+ </p>
22
+
23
+ <div class="users-header">
24
+ <h1>{text('sysadmin.system_users')}</h1>
25
+ <button class="icon-text" command="show-modal" commandfor="system-user-init">
26
+ <Icon i="plus" />
27
+ <span>{text('sysadmin.new_system_user')}</span>
28
+ </button>
29
+ </div>
30
+
31
+ {#if users.length}
32
+ <div class="cards">
33
+ {#each users as user, i (user.id)}
34
+ <UserCard bind:user={users[i]} deleted={() => users.splice(i, 1)} />
35
+ {/each}
36
+ </div>
37
+ {:else}
38
+ <p class="subtle">{text('sysadmin.no_system_users')}</p>
39
+ {/if}
40
+ </div>
41
+
42
+ <UserInitDialog userId={data.session.userId} created={user => users.push(user)} />
43
+
44
+ <style>
45
+ .users {
46
+ padding: 2em;
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 1em;
50
+ }
51
+
52
+ .back {
53
+ width: fit-content;
54
+ }
55
+
56
+ .users-header {
57
+ display: flex;
58
+ gap: 1em;
59
+
60
+ h1 {
61
+ margin: 0;
62
+ }
63
+
64
+ button {
65
+ margin-left: auto;
66
+ }
67
+ }
68
+
69
+ .cards {
70
+ display: grid;
71
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
72
+ gap: 1em;
73
+ }
74
+
75
+ @media (width < 700px) {
76
+ .users {
77
+ padding: 1em;
78
+ padding-bottom: 5em;
79
+ }
80
+
81
+ .cards {
82
+ grid-template-columns: 1fr;
83
+ }
84
+ }
85
+ </style>
@@ -0,0 +1,11 @@
1
+ import { fetchAPI } from '@axium/client/requests';
2
+
3
+ export const ssr = false;
4
+
5
+ export async function load({ parent }) {
6
+ const { session } = await parent();
7
+
8
+ const users = await fetchAPI('GET', 'users/:id/sysadmin/users', {}, session.userId);
9
+
10
+ return { session, users };
11
+ }
@@ -0,0 +1,82 @@
1
+ <script lang="ts">
2
+ import { fetchAPI, text } from '@axium/client';
3
+ import { Icon } from '@axium/client/components';
4
+ import { UserInitDialog } from '@axium/sysadmin/components';
5
+ import { toastStatus } from '@axium/client/toast';
6
+ import { goto } from '$app/navigation';
7
+
8
+ const { data } = $props();
9
+
10
+ let user = $state(data.user);
11
+ let editDialog = $state<HTMLDialogElement>();
12
+
13
+ function remove() {
14
+ toastStatus(
15
+ fetchAPI('DELETE', 'sysadmin/users/:id', {}, user.id).then(() => goto('/sysadmin/users')),
16
+ text('sysadmin.UserCard.toast_deleted')
17
+ );
18
+ }
19
+ </script>
20
+
21
+ <svelte:head>
22
+ <title>{text('sysadmin.user.page_title', user)}</title>
23
+ </svelte:head>
24
+
25
+ <div class="user-page">
26
+ <a class="subtle icon-text back" href="/sysadmin/users">
27
+ <Icon i="arrow-left" />
28
+ <span>{text('sysadmin.back_to_users')}</span>
29
+ </a>
30
+
31
+ <div class="user-header">
32
+ <Icon i="user" --size="3em" />
33
+ <div>
34
+ <h1>{user.name}</h1>
35
+ <span class="subtle">{user.username}</span>
36
+ </div>
37
+ <button class="icon-text" onclick={() => editDialog!.showModal()}>
38
+ <Icon i="pen" />
39
+ <span>{text('sysadmin.UserCard.edit')}</span>
40
+ </button>
41
+ <button class="icon-text danger" onclick={remove}>
42
+ <Icon i="trash" />
43
+ <span>{text('generic.delete')}</span>
44
+ </button>
45
+ </div>
46
+ </div>
47
+
48
+ <UserInitDialog bind:dialog={editDialog} {user} edited={updated => (user = updated)} />
49
+
50
+ <style>
51
+ .user-page {
52
+ padding: 2em;
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: 1.5em;
56
+ }
57
+
58
+ .back {
59
+ width: fit-content;
60
+ }
61
+
62
+ .user-header {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 1em;
66
+
67
+ :global(.Icon) {
68
+ flex-shrink: 0;
69
+ }
70
+
71
+ h1 {
72
+ margin: 0;
73
+ }
74
+ }
75
+
76
+ @media (width < 700px) {
77
+ .user-page {
78
+ padding: 1em;
79
+ padding-bottom: 5em;
80
+ }
81
+ }
82
+ </style>
@@ -0,0 +1,11 @@
1
+ import { fetchAPI } from '@axium/client/requests';
2
+
3
+ export const ssr = false;
4
+
5
+ export async function load({ parent, params }) {
6
+ const { session } = await parent();
7
+
8
+ const user = await fetchAPI('GET', 'sysadmin/users/:id', {}, params.id);
9
+
10
+ return { session, user };
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "extends": ["../tsconfig.json", "../.svelte-kit/tsconfig.json"],
3
+ "compilerOptions": {
4
+ "moduleResolution": "bundler",
5
+ "module": "esnext",
6
+ "noEmit": true,
7
+ "target": "esnext",
8
+ "rootDir": ".."
9
+ },
10
+ "include": ["**/*", "../lib/*"],
11
+ "references": [{ "path": ".." }]
12
+ }