floq 0.1.0 → 0.2.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.
Files changed (42) hide show
  1. package/README.ja.md +89 -9
  2. package/README.md +89 -9
  3. package/dist/changelog.d.ts +13 -0
  4. package/dist/changelog.js +95 -0
  5. package/dist/cli.js +44 -1
  6. package/dist/commands/comment.d.ts +2 -0
  7. package/dist/commands/comment.js +67 -0
  8. package/dist/commands/config.d.ts +4 -0
  9. package/dist/commands/config.js +123 -1
  10. package/dist/commands/setup.d.ts +1 -0
  11. package/dist/commands/setup.js +13 -0
  12. package/dist/config.d.ts +5 -0
  13. package/dist/config.js +40 -3
  14. package/dist/db/index.js +20 -0
  15. package/dist/db/schema.d.ts +83 -0
  16. package/dist/db/schema.js +6 -0
  17. package/dist/i18n/en.d.ts +237 -0
  18. package/dist/i18n/en.js +127 -3
  19. package/dist/i18n/ja.js +127 -3
  20. package/dist/index.js +14 -4
  21. package/dist/paths.d.ts +4 -0
  22. package/dist/paths.js +63 -5
  23. package/dist/ui/App.js +280 -25
  24. package/dist/ui/ModeSelector.d.ts +7 -0
  25. package/dist/ui/ModeSelector.js +37 -0
  26. package/dist/ui/SetupWizard.d.ts +6 -0
  27. package/dist/ui/SetupWizard.js +321 -0
  28. package/dist/ui/components/HelpModal.d.ts +2 -1
  29. package/dist/ui/components/HelpModal.js +118 -4
  30. package/dist/ui/components/KanbanBoard.d.ts +6 -0
  31. package/dist/ui/components/KanbanBoard.js +508 -0
  32. package/dist/ui/components/KanbanColumn.d.ts +12 -0
  33. package/dist/ui/components/KanbanColumn.js +11 -0
  34. package/dist/ui/components/ProgressBar.d.ts +7 -0
  35. package/dist/ui/components/ProgressBar.js +13 -0
  36. package/dist/ui/components/SearchBar.d.ts +8 -0
  37. package/dist/ui/components/SearchBar.js +11 -0
  38. package/dist/ui/components/SearchResults.d.ts +9 -0
  39. package/dist/ui/components/SearchResults.js +18 -0
  40. package/dist/ui/components/TaskItem.d.ts +6 -1
  41. package/dist/ui/components/TaskItem.js +3 -2
  42. package/package.json +1 -1
package/dist/i18n/en.d.ts CHANGED
@@ -6,6 +6,11 @@ export declare const en: {
6
6
  someday: string;
7
7
  done: string;
8
8
  };
9
+ kanban: {
10
+ todo: string;
11
+ doing: string;
12
+ done: string;
13
+ };
9
14
  projectStatus: {
10
15
  active: string;
11
16
  someday: string;
@@ -51,6 +56,13 @@ export declare const en: {
51
56
  statusLabel: string;
52
57
  tasksCount: string;
53
58
  };
59
+ comment: {
60
+ added: string;
61
+ notFound: string;
62
+ multipleMatch: string;
63
+ noComments: string;
64
+ listHeader: string;
65
+ };
54
66
  };
55
67
  tui: {
56
68
  title: string;
@@ -61,6 +73,8 @@ export declare const en: {
61
73
  added: string;
62
74
  completed: string;
63
75
  movedTo: string;
76
+ movedToWaiting: string;
77
+ waitingFor: string;
64
78
  refreshed: string;
65
79
  footer: string;
66
80
  noTasks: string;
@@ -69,6 +83,7 @@ export declare const en: {
69
83
  tabWaiting: string;
70
84
  tabSomeday: string;
71
85
  tabProjects: string;
86
+ tabDone: string;
72
87
  madeProject: string;
73
88
  linkedToProject: string;
74
89
  selectProject: string;
@@ -79,13 +94,20 @@ export declare const en: {
79
94
  done: string;
80
95
  next: string;
81
96
  someday: string;
97
+ waiting: string;
82
98
  inbox: string;
83
99
  project: string;
84
100
  help: string;
85
101
  quit: string;
102
+ comment: string;
103
+ back: string;
104
+ delete: string;
86
105
  };
87
106
  help: {
88
107
  title: string;
108
+ whatsNewTab: string;
109
+ keybindingsTab: string;
110
+ tabHint: string;
89
111
  navigation: string;
90
112
  tabSwitch: string;
91
113
  prevNextTab: string;
@@ -95,6 +117,7 @@ export declare const en: {
95
117
  completeTask: string;
96
118
  moveToNext: string;
97
119
  moveToSomeday: string;
120
+ moveToWaiting: string;
98
121
  moveToInbox: string;
99
122
  refresh: string;
100
123
  projects: string;
@@ -102,15 +125,114 @@ export declare const en: {
102
125
  linkToProject: string;
103
126
  openProject: string;
104
127
  backFromProject: string;
128
+ taskDetail: string;
129
+ addComment: string;
130
+ searchTasks: string;
131
+ other: string;
132
+ showHelp: string;
133
+ quit: string;
134
+ closeHint: string;
135
+ };
136
+ whatsNew: {
137
+ title: string;
138
+ noChanges: string;
139
+ added: string;
140
+ changed: string;
141
+ deprecated: string;
142
+ removed: string;
143
+ fixed: string;
144
+ security: string;
145
+ };
146
+ kanbanHelp: {
147
+ title: string;
148
+ navigation: string;
149
+ columnSwitch: string;
150
+ columnDirect: string;
151
+ taskSelect: string;
152
+ actions: string;
153
+ addTask: string;
154
+ completeTask: string;
155
+ moveRight: string;
156
+ moveLeft: string;
157
+ searchTasks: string;
105
158
  other: string;
106
159
  showHelp: string;
107
160
  quit: string;
108
161
  closeHint: string;
109
162
  };
163
+ addComment: string;
164
+ noComments: string;
165
+ commentHint: string;
166
+ linkHint: string;
167
+ commentAdded: string;
168
+ commentDeleted: string;
169
+ taskDetailTitle: string;
170
+ taskDetailFooter: string;
171
+ comments: string;
172
+ projectTasks: string;
173
+ search: {
174
+ prefix: string;
175
+ placeholder: string;
176
+ help: string;
177
+ noResults: string;
178
+ resultsTitle: string;
179
+ searchTasks: string;
180
+ };
181
+ };
182
+ setup: {
183
+ welcome: {
184
+ title: string;
185
+ subtitle: string;
186
+ instruction: string;
187
+ };
188
+ language: {
189
+ title: string;
190
+ hint: string;
191
+ };
192
+ theme: {
193
+ title: string;
194
+ hint: string;
195
+ };
196
+ viewMode: {
197
+ title: string;
198
+ hint: string;
199
+ gtd: string;
200
+ gtdDesc: string;
201
+ kanban: string;
202
+ kanbanDesc: string;
203
+ };
204
+ database: {
205
+ title: string;
206
+ local: string;
207
+ localDesc: string;
208
+ turso: string;
209
+ tursoDesc: string;
210
+ hint: string;
211
+ };
212
+ turso: {
213
+ urlPrompt: string;
214
+ urlPlaceholder: string;
215
+ urlError: string;
216
+ tokenPrompt: string;
217
+ tokenError: string;
218
+ inputHint: string;
219
+ };
220
+ complete: {
221
+ title: string;
222
+ summary: string;
223
+ language: string;
224
+ theme: string;
225
+ viewMode: string;
226
+ database: string;
227
+ confirm: string;
228
+ };
110
229
  };
111
230
  };
112
231
  export type HelpTranslations = {
113
232
  title: string;
233
+ whatsNewTab: string;
234
+ keybindingsTab: string;
235
+ tabHint: string;
114
236
  navigation: string;
115
237
  tabSwitch: string;
116
238
  prevNextTab: string;
@@ -120,6 +242,7 @@ export type HelpTranslations = {
120
242
  completeTask: string;
121
243
  moveToNext: string;
122
244
  moveToSomeday: string;
245
+ moveToWaiting: string;
123
246
  moveToInbox: string;
124
247
  refresh: string;
125
248
  projects: string;
@@ -127,20 +250,67 @@ export type HelpTranslations = {
127
250
  linkToProject: string;
128
251
  openProject: string;
129
252
  backFromProject: string;
253
+ taskDetail: string;
254
+ addComment: string;
255
+ searchTasks: string;
130
256
  other: string;
131
257
  showHelp: string;
132
258
  quit: string;
133
259
  closeHint: string;
134
260
  };
261
+ export type WhatsNewTranslations = {
262
+ title: string;
263
+ noChanges: string;
264
+ added: string;
265
+ changed: string;
266
+ deprecated: string;
267
+ removed: string;
268
+ fixed: string;
269
+ security: string;
270
+ };
271
+ export type KanbanHelpTranslations = {
272
+ title: string;
273
+ navigation: string;
274
+ columnSwitch: string;
275
+ columnDirect: string;
276
+ taskSelect: string;
277
+ actions: string;
278
+ addTask: string;
279
+ completeTask: string;
280
+ moveRight: string;
281
+ moveLeft: string;
282
+ searchTasks: string;
283
+ other: string;
284
+ showHelp: string;
285
+ quit: string;
286
+ closeHint: string;
287
+ };
288
+ export type KanbanTranslations = {
289
+ todo: string;
290
+ doing: string;
291
+ done: string;
292
+ };
135
293
  export type KeyBarTranslations = {
136
294
  add: string;
137
295
  done: string;
138
296
  next: string;
139
297
  someday: string;
298
+ waiting: string;
140
299
  inbox: string;
141
300
  project: string;
142
301
  help: string;
143
302
  quit: string;
303
+ comment: string;
304
+ back: string;
305
+ delete: string;
306
+ };
307
+ export type SearchTranslations = {
308
+ prefix: string;
309
+ placeholder: string;
310
+ help: string;
311
+ noResults: string;
312
+ resultsTitle: string;
313
+ searchTasks: string;
144
314
  };
145
315
  export type TuiTranslations = {
146
316
  title: string;
@@ -151,6 +321,8 @@ export type TuiTranslations = {
151
321
  added: string;
152
322
  completed: string;
153
323
  movedTo: string;
324
+ movedToWaiting: string;
325
+ waitingFor: string;
154
326
  refreshed: string;
155
327
  footer: string;
156
328
  noTasks: string;
@@ -159,6 +331,7 @@ export type TuiTranslations = {
159
331
  tabWaiting: string;
160
332
  tabSomeday: string;
161
333
  tabProjects: string;
334
+ tabDone: string;
162
335
  madeProject: string;
163
336
  linkedToProject: string;
164
337
  selectProject: string;
@@ -166,9 +339,71 @@ export type TuiTranslations = {
166
339
  back: string;
167
340
  keyBar: KeyBarTranslations;
168
341
  help: HelpTranslations;
342
+ whatsNew: WhatsNewTranslations;
343
+ kanbanHelp: KanbanHelpTranslations;
344
+ search: SearchTranslations;
345
+ addComment: string;
346
+ noComments: string;
347
+ commentHint: string;
348
+ linkHint: string;
349
+ commentAdded: string;
350
+ commentDeleted: string;
351
+ taskDetailTitle: string;
352
+ taskDetailFooter: string;
353
+ comments: string;
354
+ projectTasks: string;
355
+ };
356
+ export type SetupTranslations = {
357
+ welcome: {
358
+ title: string;
359
+ subtitle: string;
360
+ instruction: string;
361
+ };
362
+ language: {
363
+ title: string;
364
+ hint: string;
365
+ };
366
+ theme: {
367
+ title: string;
368
+ hint: string;
369
+ };
370
+ viewMode: {
371
+ title: string;
372
+ hint: string;
373
+ gtd: string;
374
+ gtdDesc: string;
375
+ kanban: string;
376
+ kanbanDesc: string;
377
+ };
378
+ database: {
379
+ title: string;
380
+ local: string;
381
+ localDesc: string;
382
+ turso: string;
383
+ tursoDesc: string;
384
+ hint: string;
385
+ };
386
+ turso: {
387
+ urlPrompt: string;
388
+ urlPlaceholder: string;
389
+ urlError: string;
390
+ tokenPrompt: string;
391
+ tokenError: string;
392
+ inputHint: string;
393
+ };
394
+ complete: {
395
+ title: string;
396
+ summary: string;
397
+ language: string;
398
+ theme: string;
399
+ viewMode: string;
400
+ database: string;
401
+ confirm: string;
402
+ };
169
403
  };
170
404
  export type Translations = {
171
405
  status: Record<string, string>;
406
+ kanban: KanbanTranslations;
172
407
  projectStatus: Record<string, string>;
173
408
  commands: {
174
409
  add: Record<string, string>;
@@ -176,6 +411,8 @@ export type Translations = {
176
411
  move: Record<string, string>;
177
412
  done: Record<string, string>;
178
413
  project: Record<string, string>;
414
+ comment: Record<string, string>;
179
415
  };
180
416
  tui: TuiTranslations;
417
+ setup: SetupTranslations;
181
418
  };
package/dist/i18n/en.js CHANGED
@@ -7,6 +7,12 @@ export const en = {
7
7
  someday: 'Someday/Maybe',
8
8
  done: 'Done',
9
9
  },
10
+ // Kanban mode labels
11
+ kanban: {
12
+ todo: 'TODO',
13
+ doing: 'Doing',
14
+ done: 'Done',
15
+ },
10
16
  // Project status
11
17
  projectStatus: {
12
18
  active: 'Active Projects',
@@ -54,6 +60,13 @@ export const en = {
54
60
  statusLabel: 'Status: {status}',
55
61
  tasksCount: 'Tasks: {count}',
56
62
  },
63
+ comment: {
64
+ added: 'Comment added to "{title}"',
65
+ notFound: 'Task not found: {id}',
66
+ multipleMatch: 'Multiple tasks match "{id}". Please be more specific:',
67
+ noComments: 'No comments',
68
+ listHeader: 'Comments for "{title}":',
69
+ },
57
70
  },
58
71
  // TUI
59
72
  tui: {
@@ -65,8 +78,10 @@ export const en = {
65
78
  added: 'Added: "{title}"',
66
79
  completed: 'Completed: "{title}"',
67
80
  movedTo: 'Moved "{title}" to {status}',
81
+ movedToWaiting: 'Moved "{title}" to Waiting (for {person})',
82
+ waitingFor: 'Waiting for: ',
68
83
  refreshed: 'Refreshed',
69
- footer: 'a=add d=done n=next s=someday i=inbox p=project P=link',
84
+ footer: 'a=add d=done n=next s=someday w=waiting i=inbox p=project P=link',
70
85
  noTasks: 'No tasks',
71
86
  // Tab labels
72
87
  tabInbox: 'Inbox',
@@ -74,6 +89,7 @@ export const en = {
74
89
  tabWaiting: 'Waiting',
75
90
  tabSomeday: 'Someday',
76
91
  tabProjects: 'Projects',
92
+ tabDone: 'Done',
77
93
  // Project actions
78
94
  madeProject: 'Made project: "{title}"',
79
95
  linkedToProject: 'Linked "{title}" to {project}',
@@ -86,16 +102,23 @@ export const en = {
86
102
  done: 'Done',
87
103
  next: 'Next',
88
104
  someday: 'Someday',
105
+ waiting: 'Waiting',
89
106
  inbox: 'Inbox',
90
107
  project: 'Project',
91
108
  help: 'Help',
92
109
  quit: 'Quit',
110
+ comment: 'Comment',
111
+ back: 'Back',
112
+ delete: 'Delete',
93
113
  },
94
114
  // Help modal
95
115
  help: {
96
116
  title: 'Keyboard Shortcuts',
117
+ whatsNewTab: "What's New",
118
+ keybindingsTab: 'Keybindings',
119
+ tabHint: 'Tab: switch view',
97
120
  navigation: 'Navigation',
98
- tabSwitch: 'Switch tab (5=Projects)',
121
+ tabSwitch: 'Switch tab (5=Projects, 6=Done)',
99
122
  prevNextTab: 'Previous/Next tab',
100
123
  taskSelect: 'Select task',
101
124
  actions: 'Actions',
@@ -103,6 +126,7 @@ export const en = {
103
126
  completeTask: 'Complete selected task',
104
127
  moveToNext: 'Move to Next Actions',
105
128
  moveToSomeday: 'Move to Someday/Maybe',
129
+ moveToWaiting: 'Move to Waiting For',
106
130
  moveToInbox: 'Move to Inbox',
107
131
  refresh: 'Refresh list',
108
132
  projects: 'Projects',
@@ -110,10 +134,110 @@ export const en = {
110
134
  linkToProject: 'Link task to project',
111
135
  openProject: 'Open project (on Projects tab)',
112
136
  backFromProject: 'Back from project detail',
137
+ taskDetail: 'View task details',
138
+ addComment: 'Add comment',
139
+ searchTasks: 'Search tasks',
140
+ other: 'Other',
141
+ showHelp: 'Show this help',
142
+ quit: 'Quit',
143
+ closeHint: 'Esc/q: close',
144
+ },
145
+ // What's New / Changelog
146
+ whatsNew: {
147
+ title: "What's New",
148
+ noChanges: 'No changelog available',
149
+ added: 'Added',
150
+ changed: 'Changed',
151
+ deprecated: 'Deprecated',
152
+ removed: 'Removed',
153
+ fixed: 'Fixed',
154
+ security: 'Security',
155
+ },
156
+ // Kanban mode help
157
+ kanbanHelp: {
158
+ title: 'Kanban Shortcuts',
159
+ navigation: 'Navigation',
160
+ columnSwitch: 'Switch column',
161
+ columnDirect: 'Jump to column directly',
162
+ taskSelect: 'Select task',
163
+ actions: 'Actions',
164
+ addTask: 'Add new task (to TODO)',
165
+ completeTask: 'Move to Done',
166
+ moveRight: 'Move task to next column',
167
+ moveLeft: 'Move task to previous column',
168
+ searchTasks: 'Search tasks',
113
169
  other: 'Other',
114
170
  showHelp: 'Show this help',
115
171
  quit: 'Quit',
116
- closeHint: 'Press any key to close',
172
+ closeHint: 'Esc/q: close',
173
+ },
174
+ addComment: 'New comment: ',
175
+ noComments: 'No comments yet',
176
+ commentHint: 'i: add comment',
177
+ linkHint: 'P: link to project',
178
+ commentAdded: 'Comment added',
179
+ commentDeleted: 'Comment deleted',
180
+ taskDetailTitle: 'Task Details',
181
+ taskDetailFooter: 'j/k=select i=comment d=delete P=link b/Esc=back',
182
+ comments: 'Comments',
183
+ projectTasks: 'Tasks',
184
+ // Search
185
+ search: {
186
+ prefix: '/',
187
+ placeholder: 'Search tasks...',
188
+ help: '(Enter to select, Ctrl+j/k to navigate, Esc to cancel)',
189
+ noResults: 'No matching tasks',
190
+ resultsTitle: 'Search Results',
191
+ searchTasks: 'Search tasks',
192
+ },
193
+ },
194
+ // Setup wizard
195
+ setup: {
196
+ welcome: {
197
+ title: 'Welcome to Floq!',
198
+ subtitle: 'Let\'s configure your task manager',
199
+ instruction: 'Press any key to start setup...',
200
+ },
201
+ language: {
202
+ title: 'Select Language',
203
+ hint: 'j/k: select, Enter: confirm, Esc: back',
204
+ },
205
+ theme: {
206
+ title: 'Select Theme',
207
+ hint: 'j/k: select, Enter: confirm, Esc: back',
208
+ },
209
+ viewMode: {
210
+ title: 'Select View Mode',
211
+ hint: 'j/k: select, Enter: confirm, Esc: back',
212
+ gtd: 'GTD (Getting Things Done)',
213
+ gtdDesc: 'Classic GTD workflow with Inbox, Next, Waiting, Someday lists',
214
+ kanban: 'Kanban Board',
215
+ kanbanDesc: '3-column kanban board view',
216
+ },
217
+ database: {
218
+ title: 'Select Database Mode',
219
+ local: 'Local',
220
+ localDesc: 'Store data locally on this device',
221
+ turso: 'Turso Cloud',
222
+ tursoDesc: 'Sync data across devices via Turso',
223
+ hint: 'j/k: select, Enter: confirm, Esc: back',
224
+ },
225
+ turso: {
226
+ urlPrompt: 'Turso Database URL',
227
+ urlPlaceholder: 'libsql://your-db.turso.io',
228
+ urlError: 'URL must start with libsql://',
229
+ tokenPrompt: 'Turso Auth Token',
230
+ tokenError: 'Token cannot be empty',
231
+ inputHint: 'Enter: confirm, Esc: back',
232
+ },
233
+ complete: {
234
+ title: 'Setup Complete!',
235
+ summary: 'Your settings:',
236
+ language: 'Language',
237
+ theme: 'Theme',
238
+ viewMode: 'View Mode',
239
+ database: 'Database',
240
+ confirm: 'Press Enter to save and start Floq...',
117
241
  },
118
242
  },
119
243
  };