floq 0.0.1 → 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 (55) hide show
  1. package/README.ja.md +157 -29
  2. package/README.md +157 -29
  3. package/dist/changelog.d.ts +13 -0
  4. package/dist/changelog.js +95 -0
  5. package/dist/cli.js +70 -1
  6. package/dist/commands/add.js +5 -6
  7. package/dist/commands/comment.d.ts +2 -0
  8. package/dist/commands/comment.js +67 -0
  9. package/dist/commands/config.d.ts +7 -0
  10. package/dist/commands/config.js +163 -14
  11. package/dist/commands/done.js +4 -6
  12. package/dist/commands/list.js +9 -13
  13. package/dist/commands/move.js +4 -6
  14. package/dist/commands/project.js +18 -26
  15. package/dist/commands/setup.d.ts +1 -0
  16. package/dist/commands/setup.js +13 -0
  17. package/dist/config.d.ts +15 -1
  18. package/dist/config.js +53 -2
  19. package/dist/db/index.d.ts +5 -4
  20. package/dist/db/index.js +127 -32
  21. package/dist/db/schema.d.ts +83 -0
  22. package/dist/db/schema.js +6 -0
  23. package/dist/i18n/en.d.ts +258 -0
  24. package/dist/i18n/en.js +138 -3
  25. package/dist/i18n/ja.js +138 -3
  26. package/dist/index.js +33 -1
  27. package/dist/paths.d.ts +4 -0
  28. package/dist/paths.js +63 -5
  29. package/dist/ui/App.js +384 -136
  30. package/dist/ui/ModeSelector.d.ts +7 -0
  31. package/dist/ui/ModeSelector.js +37 -0
  32. package/dist/ui/SetupWizard.d.ts +6 -0
  33. package/dist/ui/SetupWizard.js +321 -0
  34. package/dist/ui/ThemeSelector.d.ts +1 -1
  35. package/dist/ui/ThemeSelector.js +23 -10
  36. package/dist/ui/components/FunctionKeyBar.d.ts +5 -4
  37. package/dist/ui/components/FunctionKeyBar.js +19 -15
  38. package/dist/ui/components/HelpModal.d.ts +2 -1
  39. package/dist/ui/components/HelpModal.js +118 -4
  40. package/dist/ui/components/KanbanBoard.d.ts +6 -0
  41. package/dist/ui/components/KanbanBoard.js +508 -0
  42. package/dist/ui/components/KanbanColumn.d.ts +12 -0
  43. package/dist/ui/components/KanbanColumn.js +11 -0
  44. package/dist/ui/components/ProgressBar.d.ts +7 -0
  45. package/dist/ui/components/ProgressBar.js +13 -0
  46. package/dist/ui/components/SearchBar.d.ts +8 -0
  47. package/dist/ui/components/SearchBar.js +11 -0
  48. package/dist/ui/components/SearchResults.d.ts +9 -0
  49. package/dist/ui/components/SearchResults.js +18 -0
  50. package/dist/ui/components/TaskItem.d.ts +6 -1
  51. package/dist/ui/components/TaskItem.js +3 -2
  52. package/dist/ui/theme/themes.d.ts +12 -0
  53. package/dist/ui/theme/themes.js +495 -3
  54. package/dist/ui/theme/types.d.ts +1 -1
  55. package/package.json +2 -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,13 +83,31 @@ 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;
75
90
  selectProjectHelp: string;
76
91
  back: string;
92
+ keyBar: {
93
+ add: string;
94
+ done: string;
95
+ next: string;
96
+ someday: string;
97
+ waiting: string;
98
+ inbox: string;
99
+ project: string;
100
+ help: string;
101
+ quit: string;
102
+ comment: string;
103
+ back: string;
104
+ delete: string;
105
+ };
77
106
  help: {
78
107
  title: string;
108
+ whatsNewTab: string;
109
+ keybindingsTab: string;
110
+ tabHint: string;
79
111
  navigation: string;
80
112
  tabSwitch: string;
81
113
  prevNextTab: string;
@@ -85,6 +117,7 @@ export declare const en: {
85
117
  completeTask: string;
86
118
  moveToNext: string;
87
119
  moveToSomeday: string;
120
+ moveToWaiting: string;
88
121
  moveToInbox: string;
89
122
  refresh: string;
90
123
  projects: string;
@@ -92,15 +125,114 @@ export declare const en: {
92
125
  linkToProject: string;
93
126
  openProject: string;
94
127
  backFromProject: string;
128
+ taskDetail: string;
129
+ addComment: string;
130
+ searchTasks: string;
95
131
  other: string;
96
132
  showHelp: string;
97
133
  quit: string;
98
134
  closeHint: string;
99
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;
158
+ other: string;
159
+ showHelp: string;
160
+ quit: string;
161
+ closeHint: string;
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
+ };
100
229
  };
101
230
  };
102
231
  export type HelpTranslations = {
103
232
  title: string;
233
+ whatsNewTab: string;
234
+ keybindingsTab: string;
235
+ tabHint: string;
104
236
  navigation: string;
105
237
  tabSwitch: string;
106
238
  prevNextTab: string;
@@ -110,6 +242,7 @@ export type HelpTranslations = {
110
242
  completeTask: string;
111
243
  moveToNext: string;
112
244
  moveToSomeday: string;
245
+ moveToWaiting: string;
113
246
  moveToInbox: string;
114
247
  refresh: string;
115
248
  projects: string;
@@ -117,11 +250,68 @@ export type HelpTranslations = {
117
250
  linkToProject: string;
118
251
  openProject: string;
119
252
  backFromProject: string;
253
+ taskDetail: string;
254
+ addComment: string;
255
+ searchTasks: string;
120
256
  other: string;
121
257
  showHelp: string;
122
258
  quit: string;
123
259
  closeHint: string;
124
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
+ };
293
+ export type KeyBarTranslations = {
294
+ add: string;
295
+ done: string;
296
+ next: string;
297
+ someday: string;
298
+ waiting: string;
299
+ inbox: string;
300
+ project: string;
301
+ help: string;
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;
314
+ };
125
315
  export type TuiTranslations = {
126
316
  title: string;
127
317
  helpHint: string;
@@ -131,6 +321,8 @@ export type TuiTranslations = {
131
321
  added: string;
132
322
  completed: string;
133
323
  movedTo: string;
324
+ movedToWaiting: string;
325
+ waitingFor: string;
134
326
  refreshed: string;
135
327
  footer: string;
136
328
  noTasks: string;
@@ -139,15 +331,79 @@ export type TuiTranslations = {
139
331
  tabWaiting: string;
140
332
  tabSomeday: string;
141
333
  tabProjects: string;
334
+ tabDone: string;
142
335
  madeProject: string;
143
336
  linkedToProject: string;
144
337
  selectProject: string;
145
338
  selectProjectHelp: string;
146
339
  back: string;
340
+ keyBar: KeyBarTranslations;
147
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
+ };
148
403
  };
149
404
  export type Translations = {
150
405
  status: Record<string, string>;
406
+ kanban: KanbanTranslations;
151
407
  projectStatus: Record<string, string>;
152
408
  commands: {
153
409
  add: Record<string, string>;
@@ -155,6 +411,8 @@ export type Translations = {
155
411
  move: Record<string, string>;
156
412
  done: Record<string, string>;
157
413
  project: Record<string, string>;
414
+ comment: Record<string, string>;
158
415
  };
159
416
  tui: TuiTranslations;
417
+ setup: SetupTranslations;
160
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,17 +89,36 @@ 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}',
80
96
  selectProject: 'Select project for',
81
97
  selectProjectHelp: 'j/k: select, Enter: confirm, Esc: cancel',
82
98
  back: 'back',
99
+ // Action key bar labels
100
+ keyBar: {
101
+ add: 'Add',
102
+ done: 'Done',
103
+ next: 'Next',
104
+ someday: 'Someday',
105
+ waiting: 'Waiting',
106
+ inbox: 'Inbox',
107
+ project: 'Project',
108
+ help: 'Help',
109
+ quit: 'Quit',
110
+ comment: 'Comment',
111
+ back: 'Back',
112
+ delete: 'Delete',
113
+ },
83
114
  // Help modal
84
115
  help: {
85
116
  title: 'Keyboard Shortcuts',
117
+ whatsNewTab: "What's New",
118
+ keybindingsTab: 'Keybindings',
119
+ tabHint: 'Tab: switch view',
86
120
  navigation: 'Navigation',
87
- tabSwitch: 'Switch tab (5=Projects)',
121
+ tabSwitch: 'Switch tab (5=Projects, 6=Done)',
88
122
  prevNextTab: 'Previous/Next tab',
89
123
  taskSelect: 'Select task',
90
124
  actions: 'Actions',
@@ -92,6 +126,7 @@ export const en = {
92
126
  completeTask: 'Complete selected task',
93
127
  moveToNext: 'Move to Next Actions',
94
128
  moveToSomeday: 'Move to Someday/Maybe',
129
+ moveToWaiting: 'Move to Waiting For',
95
130
  moveToInbox: 'Move to Inbox',
96
131
  refresh: 'Refresh list',
97
132
  projects: 'Projects',
@@ -99,10 +134,110 @@ export const en = {
99
134
  linkToProject: 'Link task to project',
100
135
  openProject: 'Open project (on Projects tab)',
101
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',
102
169
  other: 'Other',
103
170
  showHelp: 'Show this help',
104
171
  quit: 'Quit',
105
- 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...',
106
241
  },
107
242
  },
108
243
  };