@axium/tasks 0.3.4 → 0.4.0

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/common.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { WithRequired } from 'utilium';
2
1
  import * as z from 'zod';
3
2
  export declare const TaskInit: z.ZodObject<{
4
3
  summary: z.ZodOptional<z.ZodString>;
@@ -6,12 +5,20 @@ export declare const TaskInit: z.ZodObject<{
6
5
  listId: z.ZodUUID;
7
6
  parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
8
7
  completed: z.ZodOptional<z.ZodBoolean>;
9
- due: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
8
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
10
9
  }, z.core.$strip>;
11
10
  export type TaskInit = z.infer<typeof TaskInit>;
12
- export interface Task extends TaskInit {
13
- id: string;
14
- created: Date;
11
+ export declare const Task: z.ZodObject<{
12
+ summary: z.ZodOptional<z.ZodString>;
13
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
+ listId: z.ZodUUID;
15
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
16
+ completed: z.ZodOptional<z.ZodBoolean>;
17
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
18
+ id: z.ZodUUID;
19
+ created: z.ZodCoercedDate<unknown>;
20
+ }, z.core.$strip>;
21
+ export interface Task extends z.infer<typeof Task> {
15
22
  }
16
23
  export declare const TaskListInit: z.ZodObject<{
17
24
  name: z.ZodString;
@@ -22,28 +29,172 @@ export declare const TaskListUpdate: z.ZodObject<{
22
29
  all_completed: z.ZodOptional<z.ZodBoolean>;
23
30
  }, z.core.$strip>;
24
31
  export type TaskListUpdate = z.infer<typeof TaskListUpdate>;
25
- export interface TaskList extends TaskListInit {
26
- id: string;
27
- userId: string;
28
- created: Date;
29
- tasks?: Task[];
32
+ export declare const TaskList: z.ZodObject<{
33
+ name: z.ZodString;
34
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35
+ id: z.ZodUUID;
36
+ userId: z.ZodUUID;
37
+ created: z.ZodCoercedDate<unknown>;
38
+ tasks: z.ZodOptional<z.ZodArray<z.ZodObject<{
39
+ summary: z.ZodOptional<z.ZodString>;
40
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
41
+ listId: z.ZodUUID;
42
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
43
+ completed: z.ZodOptional<z.ZodBoolean>;
44
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
45
+ id: z.ZodUUID;
46
+ created: z.ZodCoercedDate<unknown>;
47
+ }, z.core.$strip>>>;
48
+ }, z.core.$strip>;
49
+ export interface TaskList extends z.infer<typeof TaskList> {
30
50
  }
51
+ declare const TasksAPI: {
52
+ readonly 'users/:id/task_lists': {
53
+ readonly GET: z.ZodArray<z.ZodObject<{
54
+ name: z.ZodString;
55
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ id: z.ZodUUID;
57
+ userId: z.ZodUUID;
58
+ created: z.ZodCoercedDate<unknown>;
59
+ tasks: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ summary: z.ZodOptional<z.ZodString>;
61
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ listId: z.ZodUUID;
63
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
64
+ completed: z.ZodOptional<z.ZodBoolean>;
65
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
66
+ id: z.ZodUUID;
67
+ created: z.ZodCoercedDate<unknown>;
68
+ }, z.core.$strip>>>>;
69
+ }, z.core.$strip>>;
70
+ readonly PUT: readonly [z.ZodObject<{
71
+ name: z.ZodString;
72
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
73
+ }, z.core.$strip>, z.ZodObject<{
74
+ name: z.ZodString;
75
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
76
+ id: z.ZodUUID;
77
+ userId: z.ZodUUID;
78
+ created: z.ZodCoercedDate<unknown>;
79
+ tasks: z.ZodOptional<z.ZodArray<z.ZodObject<{
80
+ summary: z.ZodOptional<z.ZodString>;
81
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
82
+ listId: z.ZodUUID;
83
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
84
+ completed: z.ZodOptional<z.ZodBoolean>;
85
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
86
+ id: z.ZodUUID;
87
+ created: z.ZodCoercedDate<unknown>;
88
+ }, z.core.$strip>>>;
89
+ }, z.core.$strip>];
90
+ };
91
+ readonly 'task_lists/:id': {
92
+ readonly GET: z.ZodObject<{
93
+ name: z.ZodString;
94
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
95
+ id: z.ZodUUID;
96
+ userId: z.ZodUUID;
97
+ created: z.ZodCoercedDate<unknown>;
98
+ tasks: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
99
+ summary: z.ZodOptional<z.ZodString>;
100
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
101
+ listId: z.ZodUUID;
102
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
103
+ completed: z.ZodOptional<z.ZodBoolean>;
104
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
105
+ id: z.ZodUUID;
106
+ created: z.ZodCoercedDate<unknown>;
107
+ }, z.core.$strip>>>>;
108
+ }, z.core.$strip>;
109
+ readonly PATCH: readonly [z.ZodObject<{
110
+ name: z.ZodString;
111
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
112
+ }, z.core.$strip>, z.ZodObject<{
113
+ name: z.ZodString;
114
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
115
+ id: z.ZodUUID;
116
+ userId: z.ZodUUID;
117
+ created: z.ZodCoercedDate<unknown>;
118
+ tasks: z.ZodOptional<z.ZodArray<z.ZodObject<{
119
+ summary: z.ZodOptional<z.ZodString>;
120
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
121
+ listId: z.ZodUUID;
122
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
123
+ completed: z.ZodOptional<z.ZodBoolean>;
124
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
125
+ id: z.ZodUUID;
126
+ created: z.ZodCoercedDate<unknown>;
127
+ }, z.core.$strip>>>;
128
+ }, z.core.$strip>];
129
+ readonly POST: readonly [z.ZodObject<{
130
+ all_completed: z.ZodOptional<z.ZodBoolean>;
131
+ }, z.core.$strip>, {}];
132
+ readonly PUT: readonly [z.ZodObject<{
133
+ summary: z.ZodOptional<z.ZodString>;
134
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
135
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
136
+ completed: z.ZodOptional<z.ZodBoolean>;
137
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
138
+ }, z.core.$strip>, z.ZodObject<{
139
+ summary: z.ZodOptional<z.ZodString>;
140
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
141
+ listId: z.ZodUUID;
142
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
143
+ completed: z.ZodOptional<z.ZodBoolean>;
144
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
145
+ id: z.ZodUUID;
146
+ created: z.ZodCoercedDate<unknown>;
147
+ }, z.core.$strip>];
148
+ readonly DELETE: z.ZodObject<{
149
+ name: z.ZodString;
150
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
151
+ id: z.ZodUUID;
152
+ userId: z.ZodUUID;
153
+ created: z.ZodCoercedDate<unknown>;
154
+ tasks: z.ZodOptional<z.ZodArray<z.ZodObject<{
155
+ summary: z.ZodOptional<z.ZodString>;
156
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
157
+ listId: z.ZodUUID;
158
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
159
+ completed: z.ZodOptional<z.ZodBoolean>;
160
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
161
+ id: z.ZodUUID;
162
+ created: z.ZodCoercedDate<unknown>;
163
+ }, z.core.$strip>>>;
164
+ }, z.core.$strip>;
165
+ };
166
+ readonly 'tasks/:id': {
167
+ readonly PATCH: readonly [z.ZodObject<{
168
+ summary: z.ZodOptional<z.ZodString>;
169
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
170
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
171
+ completed: z.ZodOptional<z.ZodBoolean>;
172
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
173
+ }, z.core.$strip>, z.ZodObject<{
174
+ summary: z.ZodOptional<z.ZodString>;
175
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
176
+ listId: z.ZodUUID;
177
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
178
+ completed: z.ZodOptional<z.ZodBoolean>;
179
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
180
+ id: z.ZodUUID;
181
+ created: z.ZodCoercedDate<unknown>;
182
+ }, z.core.$strip>];
183
+ readonly DELETE: z.ZodObject<{
184
+ summary: z.ZodOptional<z.ZodString>;
185
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
186
+ listId: z.ZodUUID;
187
+ parentId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
188
+ completed: z.ZodOptional<z.ZodBoolean>;
189
+ due: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
190
+ id: z.ZodUUID;
191
+ created: z.ZodCoercedDate<unknown>;
192
+ }, z.core.$strip>;
193
+ };
194
+ };
195
+ type TasksAPI = typeof TasksAPI;
31
196
  declare module '@axium/core/api' {
32
- interface $API {
33
- 'users/:id/task_lists': {
34
- GET: WithRequired<TaskList, 'tasks'>[];
35
- PUT: [z.input<typeof TaskListInit>, TaskList];
36
- };
37
- 'task_lists/:id': {
38
- GET: WithRequired<TaskList, 'tasks'>;
39
- PATCH: [z.input<typeof TaskListInit>, TaskList];
40
- POST: [z.input<typeof TaskListUpdate>, {}];
41
- PUT: [Omit<z.input<typeof TaskInit>, 'listId'>, Task];
42
- DELETE: TaskList;
43
- };
44
- 'tasks/:id': {
45
- PATCH: [Omit<z.input<typeof TaskInit>, 'listId'>, Task];
46
- DELETE: Task;
47
- };
197
+ interface $API extends TasksAPI {
48
198
  }
49
199
  }
200
+ export {};
package/dist/common.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { $API } from '@axium/core';
1
2
  import * as z from 'zod';
2
3
  export const TaskInit = z.object({
3
4
  summary: z.string().max(100).optional(),
@@ -5,7 +6,11 @@ export const TaskInit = z.object({
5
6
  listId: z.uuid(),
6
7
  parentId: z.uuid().nullish(),
7
8
  completed: z.boolean().optional(),
8
- due: z.date().nullish(),
9
+ due: z.coerce.date().nullish(),
10
+ });
11
+ export const Task = TaskInit.extend({
12
+ id: z.uuid(),
13
+ created: z.coerce.date(),
9
14
  });
10
15
  export const TaskListInit = z.object({
11
16
  name: z.string().min(1).max(50),
@@ -14,3 +19,27 @@ export const TaskListInit = z.object({
14
19
  export const TaskListUpdate = z.object({
15
20
  all_completed: z.boolean().optional(),
16
21
  });
22
+ export const TaskList = TaskListInit.extend({
23
+ id: z.uuid(),
24
+ userId: z.uuid(),
25
+ created: z.coerce.date(),
26
+ tasks: Task.array().optional(),
27
+ });
28
+ const TasksAPI = {
29
+ 'users/:id/task_lists': {
30
+ GET: TaskList.required({ tasks: true }).array(),
31
+ PUT: [TaskListInit, TaskList],
32
+ },
33
+ 'task_lists/:id': {
34
+ GET: TaskList.required({ tasks: true }),
35
+ PATCH: [TaskListInit, TaskList],
36
+ POST: [TaskListUpdate, {}],
37
+ PUT: [TaskInit.omit({ listId: true }), Task],
38
+ DELETE: TaskList,
39
+ },
40
+ 'tasks/:id': {
41
+ PATCH: [TaskInit.omit({ listId: true }), Task],
42
+ DELETE: Task,
43
+ },
44
+ };
45
+ Object.assign($API, TasksAPI);
@@ -2,7 +2,7 @@
2
2
  import { goto } from '$app/navigation';
3
3
  import { page } from '$app/state';
4
4
  import { copy } from '@axium/client/clipboard';
5
- import { Icon, Popover } from '@axium/client/components';
5
+ import { AccessControlDialog, Icon, Popover } from '@axium/client/components';
6
6
  import { fetchAPI } from '@axium/client/requests';
7
7
  import type { Task, TaskList } from '@axium/tasks/common';
8
8
  import type { WithRequired } from 'utilium';
@@ -22,6 +22,8 @@
22
22
 
23
23
  return `[${task.completed ? 'x' : ' '}] ${task.summary}` + children;
24
24
  }
25
+
26
+ let acl = $state<HTMLDialogElement>();
25
27
  </script>
26
28
 
27
29
  {#snippet task_tree(task: Task)}
@@ -108,6 +110,15 @@
108
110
  >
109
111
  <Icon i="regular/file-export" /> Export
110
112
  </div>
113
+ <div
114
+ class="menu-item"
115
+ onclick={() => {
116
+ acl!.showModal();
117
+ acl!.click();
118
+ }}
119
+ >
120
+ <Icon i="user-group" /> Share
121
+ </div>
111
122
  {#if tasks.some(t => !t.completed)}
112
123
  <div
113
124
  class="menu-item"
@@ -144,6 +155,7 @@
144
155
  </div>
145
156
  {/if}
146
157
  </Popover>
158
+ <AccessControlDialog bind:dialog={acl} bind:item={list} itemType="task_lists" editable />
147
159
  </div>
148
160
  <div>
149
161
  <button
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axium/tasks",
3
- "version": "0.3.4",
3
+ "version": "0.4.0",
4
4
  "author": "James Prevett <axium@jamespre.dev>",
5
5
  "description": "Tasks for Axium",
6
6
  "funding": {
@@ -35,8 +35,8 @@
35
35
  "build": "tsc"
36
36
  },
37
37
  "peerDependencies": {
38
- "@axium/client": ">=0.9.6",
39
- "@axium/core": ">=0.12.0",
38
+ "@axium/client": ">=0.11.0",
39
+ "@axium/core": ">=0.17.0",
40
40
  "@axium/server": ">=0.28.0",
41
41
  "@sveltejs/kit": "^2.27.3",
42
42
  "utilium": "^2.3.8"
@@ -0,0 +1 @@
1
+ import '@axium/tasks/common';
@@ -1,7 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { FormDialog, Icon } from '@axium/client/components';
3
3
  import { fetchAPI } from '@axium/client/requests';
4
- import { parseList } from '@axium/tasks/client';
5
4
  import { TaskListInit } from '@axium/tasks/common';
6
5
  import { TaskList } from '@axium/tasks/components';
7
6
 
@@ -35,7 +34,6 @@
35
34
  submit={async rawInit => {
36
35
  const init = TaskListInit.parse(rawInit);
37
36
  const result = await fetchAPI('PUT', 'users/:id/task_lists', init, data.session!.userId);
38
- parseList(result);
39
37
  lists.push(Object.assign(result, { tasks: [] }));
40
38
  }}
41
39
  >
package/dist/client.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import type { TaskList } from './common.js';
2
- export declare function parseList<const T extends TaskList>(list: T): T;
package/dist/client.js DELETED
@@ -1,8 +0,0 @@
1
- export function parseList(list) {
2
- list.created = new Date(list.created);
3
- for (const task of list.tasks || []) {
4
- task.created = new Date(task.created);
5
- task.due = task.due ? new Date(task.due) : null;
6
- }
7
- return list;
8
- }