mysticals 0.8.1 → 0.10.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/cli.js +118 -9
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ import { createElement } from "react";
|
|
|
5
5
|
import { render } from "ink";
|
|
6
6
|
|
|
7
7
|
// package.json
|
|
8
|
-
var version = "0.
|
|
8
|
+
var version = "0.10.0";
|
|
9
9
|
|
|
10
10
|
// src/client.ts
|
|
11
11
|
import { spawn } from "child_process";
|
|
@@ -277,6 +277,8 @@ var en = {
|
|
|
277
277
|
"notify.changed": "Event changed",
|
|
278
278
|
"notify.cancelled": "Event cancelled",
|
|
279
279
|
"notify.many": { one: "{n} calendar update", other: "{n} calendar updates" },
|
|
280
|
+
"reminder.in": "in {n} min",
|
|
281
|
+
"reminder.now": "starting now",
|
|
280
282
|
// ---- desktop: menus, dialogs, update ----
|
|
281
283
|
"menu.file": "File",
|
|
282
284
|
"menu.newEvent": "New Event",
|
|
@@ -328,6 +330,17 @@ var en = {
|
|
|
328
330
|
"toast.movedAll": "Moved \u201C{title}\u201D (all events)",
|
|
329
331
|
"toast.movedFollowing": "Moved \u201C{title}\u201D and following",
|
|
330
332
|
"toast.moveFailed": "Couldn't move \u201C{title}\u201D: {error}",
|
|
333
|
+
"menu.eventActions": "Event actions",
|
|
334
|
+
"menu.duplicate": "Duplicate",
|
|
335
|
+
"menu.pasteEvent": "Paste \u201C{title}\u201D",
|
|
336
|
+
"toast.duplicated": "Duplicated \u201C{title}\u201D",
|
|
337
|
+
"toast.copied": "Copied \u201C{title}\u201D \xB7 right-click a time or day to paste",
|
|
338
|
+
"toast.pasted": "Pasted \u201C{title}\u201D",
|
|
339
|
+
"toast.deleted": "Deleted \u201C{title}\u201D",
|
|
340
|
+
"toast.deletedAll": "Deleted \u201C{title}\u201D (all events)",
|
|
341
|
+
"toast.deletedFollowing": "Deleted \u201C{title}\u201D and following",
|
|
342
|
+
"toast.deleteFailed": "Couldn't delete \u201C{title}\u201D: {error}",
|
|
343
|
+
"toast.createFailed": "Couldn't create \u201C{title}\u201D: {error}",
|
|
331
344
|
"scope.move": "Move recurring event",
|
|
332
345
|
"toolbar.weekNo": "W{n}",
|
|
333
346
|
"toolbar.previous": "Previous",
|
|
@@ -345,12 +358,37 @@ var en = {
|
|
|
345
358
|
"settings.tab.language": "Language",
|
|
346
359
|
"settings.tab.sync": "Sync",
|
|
347
360
|
"settings.tab.privacy": "Privacy",
|
|
361
|
+
"settings.tab.notifications": "Notifications",
|
|
362
|
+
"settings.tab.events": "Events",
|
|
363
|
+
"settings.events.long": "Long events",
|
|
364
|
+
"settings.events.note": "Timed events that fill most of a day, like a teammate blocking 09:00\u201320:00 as busy. Choose how the Day, 3 Days and Week views show them.",
|
|
365
|
+
"settings.events.mode": "Show long events as",
|
|
366
|
+
"settings.events.rails": "Rails",
|
|
367
|
+
"settings.events.railsHint": "A thin bar at the left of the day. Other events get the full width.",
|
|
368
|
+
"settings.events.allday": "Move to all-day",
|
|
369
|
+
"settings.events.alldayHint": "A chip in the all-day row with its hours. The grid shows the busy time.",
|
|
370
|
+
"settings.events.cascade": "Cascade",
|
|
371
|
+
"settings.events.cascadeHint": "Blocks overlap, each later one shifted right and drawn on top.",
|
|
372
|
+
"settings.events.expand": "Expand to fill",
|
|
373
|
+
"settings.events.expandHint": "Ordinary blocks, side by side, widening into free space.",
|
|
374
|
+
"settings.events.longer": "Long means longer than",
|
|
375
|
+
"settings.events.hours": "{n} h",
|
|
376
|
+
"settings.events.noThreshold": "Every event is a block in this mode, whatever its length.",
|
|
377
|
+
"settings.reminders.label": "Remind me before events",
|
|
378
|
+
"settings.reminders.off": "Off",
|
|
379
|
+
"settings.reminders.min": "{n} min before",
|
|
380
|
+
"settings.reminders.note": "A notification pops up before each event while Mysticals is open, with a button to join the call when the event has a link. Declined, all-day and hidden-calendar events stay silent.",
|
|
381
|
+
"settings.reminders.accounts": "Notify for these accounts",
|
|
382
|
+
"settings.reminders.accountsNote": "A switched-off account gets no reminders and no invite or change notifications.",
|
|
383
|
+
"settings.reminders.accountFor": "Notifications for {name}",
|
|
348
384
|
"settings.noAccounts": "No accounts yet.",
|
|
349
385
|
"settings.addAccount": "Add account\u2026",
|
|
350
386
|
"settings.theme": "Theme",
|
|
351
387
|
"theme.amber": "Phosphor amber",
|
|
352
388
|
"theme.mono": "Black & White",
|
|
353
389
|
"theme.toon": "Cartoon",
|
|
390
|
+
"theme.cloud": "Cloud",
|
|
391
|
+
"theme.light": "Light",
|
|
354
392
|
"settings.language.auto": "Automatic",
|
|
355
393
|
"settings.language.system": "system: {name}",
|
|
356
394
|
"settings.sync.note": "Accounts sync automatically every 2 minutes and when the app regains focus.",
|
|
@@ -365,6 +403,7 @@ var en = {
|
|
|
365
403
|
"settings.privacy.note": "Mysticals sends two anonymous events: when the app is first installed and when an account is added (provider only). Never emails, server addresses, calendars or events.",
|
|
366
404
|
"settings.privacy.policy": "Privacy policy",
|
|
367
405
|
"settings.privacy.share": "Share anonymous usage stats",
|
|
406
|
+
"settings.donate": "Support on Ko-fi",
|
|
368
407
|
"settings.account.labelFor": "Label for {email}",
|
|
369
408
|
"settings.account.colourFor": "Colour for {email}",
|
|
370
409
|
"settings.account.remove": "Remove",
|
|
@@ -531,6 +570,7 @@ var en = {
|
|
|
531
570
|
"agenda.joinShort": "Join",
|
|
532
571
|
"agenda.noCalls": "No calls today. Enjoy the quiet.",
|
|
533
572
|
"agenda.fact.calendar": "calendar",
|
|
573
|
+
"agenda.fact.organizer": "organizer",
|
|
534
574
|
"agenda.fact.where": "where",
|
|
535
575
|
"agenda.fact.people": "people",
|
|
536
576
|
"agenda.fact.link": "link",
|
|
@@ -610,6 +650,8 @@ var uk = {
|
|
|
610
650
|
"notify.changed": "\u041F\u043E\u0434\u0456\u044E \u0437\u043C\u0456\u043D\u0435\u043D\u043E",
|
|
611
651
|
"notify.cancelled": "\u041F\u043E\u0434\u0456\u044E \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E",
|
|
612
652
|
"notify.many": { one: "{n} \u0437\u043C\u0456\u043D\u0430 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456", few: "{n} \u0437\u043C\u0456\u043D\u0438 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456", many: "{n} \u0437\u043C\u0456\u043D \u0443 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456", other: "{n} \u0437\u043C\u0456\u043D\u0438 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456" },
|
|
653
|
+
"reminder.in": "\u0447\u0435\u0440\u0435\u0437 {n} \u0445\u0432",
|
|
654
|
+
"reminder.now": "\u043F\u043E\u0447\u0438\u043D\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0430\u0440\u0430\u0437",
|
|
613
655
|
// ---- desktop: menus, dialogs, update ----
|
|
614
656
|
"menu.file": "\u0424\u0430\u0439\u043B",
|
|
615
657
|
"menu.newEvent": "\u041D\u043E\u0432\u0430 \u043F\u043E\u0434\u0456\u044F",
|
|
@@ -661,6 +703,17 @@ var uk = {
|
|
|
661
703
|
"toast.movedAll": "\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u043E \xAB{title}\xBB (\u0443\u0441\u0456 \u043F\u043E\u0434\u0456\u0457)",
|
|
662
704
|
"toast.movedFollowing": "\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u043E \xAB{title}\xBB \u0456 \u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0456",
|
|
663
705
|
"toast.moveFailed": "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0435\u0440\u0435\u043D\u0435\u0441\u0442\u0438 \xAB{title}\xBB: {error}",
|
|
706
|
+
"menu.eventActions": "\u0414\u0456\u0457 \u0437 \u043F\u043E\u0434\u0456\u0454\u044E",
|
|
707
|
+
"menu.duplicate": "\u0414\u0443\u0431\u043B\u044E\u0432\u0430\u0442\u0438",
|
|
708
|
+
"menu.pasteEvent": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \xAB{title}\xBB",
|
|
709
|
+
"toast.duplicated": "\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u043E \xAB{title}\xBB",
|
|
710
|
+
"toast.copied": "\u0421\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E \xAB{title}\xBB \xB7 \u043A\u043B\u0430\u0446\u043D\u0456\u0442\u044C \u043F\u0440\u0430\u0432\u043E\u044E \u043A\u043D\u043E\u043F\u043A\u043E\u044E \u043D\u0430 \u0447\u0430\u0441 \u0430\u0431\u043E \u0434\u0435\u043D\u044C, \u0449\u043E\u0431 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0438",
|
|
711
|
+
"toast.pasted": "\u0412\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E \xAB{title}\xBB",
|
|
712
|
+
"toast.deleted": "\u0412\u0438\u0434\u0430\u043B\u0435\u043D\u043E \xAB{title}\xBB",
|
|
713
|
+
"toast.deletedAll": "\u0412\u0438\u0434\u0430\u043B\u0435\u043D\u043E \xAB{title}\xBB (\u0443\u0441\u0456 \u043F\u043E\u0434\u0456\u0457)",
|
|
714
|
+
"toast.deletedFollowing": "\u0412\u0438\u0434\u0430\u043B\u0435\u043D\u043E \xAB{title}\xBB \u0456 \u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0456",
|
|
715
|
+
"toast.deleteFailed": "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \xAB{title}\xBB: {error}",
|
|
716
|
+
"toast.createFailed": "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0441\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \xAB{title}\xBB: {error}",
|
|
664
717
|
"scope.move": "\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0442\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u044E\u0432\u0430\u043D\u0443 \u043F\u043E\u0434\u0456\u044E",
|
|
665
718
|
"toolbar.weekNo": "\u0422{n}",
|
|
666
719
|
"toolbar.previous": "\u041D\u0430\u0437\u0430\u0434",
|
|
@@ -678,12 +731,37 @@ var uk = {
|
|
|
678
731
|
"settings.tab.language": "\u041C\u043E\u0432\u0430",
|
|
679
732
|
"settings.tab.sync": "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0456\u0437\u0430\u0446\u0456\u044F",
|
|
680
733
|
"settings.tab.privacy": "\u041A\u043E\u043D\u0444\u0456\u0434\u0435\u043D\u0446\u0456\u0439\u043D\u0456\u0441\u0442\u044C",
|
|
734
|
+
"settings.tab.notifications": "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F",
|
|
735
|
+
"settings.tab.events": "\u041F\u043E\u0434\u0456\u0457",
|
|
736
|
+
"settings.events.long": "\u0414\u043E\u0432\u0433\u0456 \u043F\u043E\u0434\u0456\u0457",
|
|
737
|
+
"settings.events.note": "\u041F\u043E\u0434\u0456\u0457 \u0437 \u0447\u0430\u0441\u043E\u043C, \u0449\u043E \u0437\u0430\u0439\u043C\u0430\u044E\u0442\u044C \u0431\u0456\u043B\u044C\u0448\u0443 \u0447\u0430\u0441\u0442\u0438\u043D\u0443 \u0434\u043D\u044F, \u043D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434 \u043A\u043E\u043B\u0435\u0433\u0430 \u043F\u043E\u0437\u043D\u0430\u0447\u0438\u0432 09:00\u201320:00 \u044F\u043A \u0437\u0430\u0439\u043D\u044F\u0442\u0438\u0439. \u041E\u0431\u0435\u0440\u0456\u0442\u044C, \u044F\u043A \u0457\u0445 \u043F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0443 \u0432\u0438\u0434\u0430\u0445 \u0414\u0435\u043D\u044C, 3 \u0434\u043D\u0456 \u0442\u0430 \u0422\u0438\u0436\u0434\u0435\u043D\u044C.",
|
|
738
|
+
"settings.events.mode": "\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0434\u043E\u0432\u0433\u0456 \u043F\u043E\u0434\u0456\u0457 \u044F\u043A",
|
|
739
|
+
"settings.events.rails": "\u0421\u043C\u0443\u0436\u043A\u0438",
|
|
740
|
+
"settings.events.railsHint": "\u0422\u043E\u043D\u043A\u0430 \u0441\u043C\u0443\u0436\u043A\u0430 \u0437\u043B\u0456\u0432\u0430 \u0432 \u0434\u043D\u0456. \u0406\u043D\u0448\u0456 \u043F\u043E\u0434\u0456\u0457 \u043E\u0442\u0440\u0438\u043C\u0443\u044E\u0442\u044C \u0443\u0441\u044E \u0448\u0438\u0440\u0438\u043D\u0443.",
|
|
741
|
+
"settings.events.allday": "\u0423 \u0440\u044F\u0434\u043E\u043A \xAB\u0432\u0435\u0441\u044C \u0434\u0435\u043D\u044C\xBB",
|
|
742
|
+
"settings.events.alldayHint": "\u041F\u043B\u0430\u0448\u043A\u0430 \u0432 \u0440\u044F\u0434\u043A\u0443 \xAB\u0432\u0435\u0441\u044C \u0434\u0435\u043D\u044C\xBB \u0437 \u0433\u043E\u0434\u0438\u043D\u0430\u043C\u0438. \u0423 \u0441\u0456\u0442\u0446\u0456 \u0432\u0438\u0434\u043D\u043E \u0437\u0430\u0439\u043D\u044F\u0442\u0438\u0439 \u0447\u0430\u0441.",
|
|
743
|
+
"settings.events.cascade": "\u041A\u0430\u0441\u043A\u0430\u0434",
|
|
744
|
+
"settings.events.cascadeHint": "\u0411\u043B\u043E\u043A\u0438 \u043D\u0430\u043A\u043B\u0430\u0434\u0430\u044E\u0442\u044C\u0441\u044F, \u043A\u043E\u0436\u0435\u043D \u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u0442\u0440\u043E\u0445\u0438 \u043F\u0440\u0430\u0432\u0456\u0448\u0435 \u0439 \u043F\u043E\u0432\u0435\u0440\u0445 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E.",
|
|
745
|
+
"settings.events.expand": "\u0420\u043E\u0437\u0448\u0438\u0440\u044E\u0432\u0430\u0442\u0438",
|
|
746
|
+
"settings.events.expandHint": "\u0417\u0432\u0438\u0447\u0430\u0439\u043D\u0456 \u0431\u043B\u043E\u043A\u0438 \u043F\u043E\u0440\u0443\u0447, \u0449\u043E \u0440\u043E\u0437\u0448\u0438\u0440\u044E\u044E\u0442\u044C\u0441\u044F \u043D\u0430 \u0432\u0456\u043B\u044C\u043D\u0435 \u043C\u0456\u0441\u0446\u0435.",
|
|
747
|
+
"settings.events.longer": "\u0414\u043E\u0432\u0433\u0430 \u2014 \u0446\u0435 \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0456\u0436",
|
|
748
|
+
"settings.events.hours": "{n} \u0433\u043E\u0434",
|
|
749
|
+
"settings.events.noThreshold": "\u0423 \u0446\u044C\u043E\u043C\u0443 \u0440\u0435\u0436\u0438\u043C\u0456 \u043A\u043E\u0436\u043D\u0430 \u043F\u043E\u0434\u0456\u044F \u2014 \u0431\u043B\u043E\u043A, \u043D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u043E \u0432\u0456\u0434 \u0434\u043E\u0432\u0436\u0438\u043D\u0438.",
|
|
750
|
+
"settings.reminders.label": "\u041D\u0430\u0433\u0430\u0434\u0443\u0432\u0430\u0442\u0438 \u043F\u0435\u0440\u0435\u0434 \u043F\u043E\u0434\u0456\u044F\u043C\u0438",
|
|
751
|
+
"settings.reminders.off": "\u0412\u0438\u043C\u043A\u043D\u0435\u043D\u043E",
|
|
752
|
+
"settings.reminders.min": "\u0437\u0430 {n} \u0445\u0432",
|
|
753
|
+
"settings.reminders.note": "\u041F\u043E\u043A\u0438 Mysticals \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u0439, \u043F\u0435\u0440\u0435\u0434 \u043A\u043E\u0436\u043D\u043E\u044E \u043F\u043E\u0434\u0456\u0454\u044E \u0437\u2019\u044F\u0432\u043B\u044F\u0454\u0442\u044C\u0441\u044F \u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0437 \u043A\u043D\u043E\u043F\u043A\u043E\u044E, \u0449\u043E\u0431 \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F \u0434\u043E \u0434\u0437\u0432\u0456\u043D\u043A\u0430, \u044F\u043A\u0449\u043E \u0432 \u043F\u043E\u0434\u0456\u0457 \u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F. \u0412\u0456\u0434\u0445\u0438\u043B\u0435\u043D\u0456, \u0446\u0456\u043B\u043E\u0434\u0435\u043D\u043D\u0456 \u043F\u043E\u0434\u0456\u0457 \u0442\u0430 \u043F\u043E\u0434\u0456\u0457 \u0437 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0438\u0445 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456\u0432 \u0431\u0435\u0437 \u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u044C.",
|
|
754
|
+
"settings.reminders.accounts": "\u0421\u043F\u043E\u0432\u0456\u0449\u0430\u0442\u0438 \u0434\u043B\u044F \u0446\u0438\u0445 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0437\u0430\u043F\u0438\u0441\u0456\u0432",
|
|
755
|
+
"settings.reminders.accountsNote": "\u0412\u0438\u043C\u043A\u043D\u0435\u043D\u0438\u0439 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0439 \u0437\u0430\u043F\u0438\u0441 \u043D\u0435 \u043E\u0442\u0440\u0438\u043C\u0443\u0454 \u043D\u0456 \u043D\u0430\u0433\u0430\u0434\u0443\u0432\u0430\u043D\u044C, \u043D\u0456 \u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u044C \u043F\u0440\u043E \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0442\u0430 \u0437\u043C\u0456\u043D\u0438.",
|
|
756
|
+
"settings.reminders.accountFor": "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0434\u043B\u044F {name}",
|
|
681
757
|
"settings.noAccounts": "\u041E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0437\u0430\u043F\u0438\u0441\u0456\u0432 \u0449\u0435 \u043D\u0435\u043C\u0430\u0454.",
|
|
682
758
|
"settings.addAccount": "\u0414\u043E\u0434\u0430\u0442\u0438 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0439 \u0437\u0430\u043F\u0438\u0441\u2026",
|
|
683
759
|
"settings.theme": "\u0422\u0435\u043C\u0430",
|
|
684
760
|
"theme.amber": "\u0411\u0443\u0440\u0448\u0442\u0438\u043D\u043E\u0432\u0438\u0439 \u043B\u044E\u043C\u0456\u043D\u043E\u0444\u043E\u0440",
|
|
685
761
|
"theme.mono": "\u0427\u043E\u0440\u043D\u043E-\u0431\u0456\u043B\u0430",
|
|
686
762
|
"theme.toon": "\u041C\u0443\u043B\u044C\u0442\u044F\u0448\u043D\u0430",
|
|
763
|
+
"theme.cloud": "\u0425\u043C\u0430\u0440\u0438\u043D\u043A\u0430",
|
|
764
|
+
"theme.light": "\u0421\u0432\u0456\u0442\u043B\u0430",
|
|
687
765
|
"settings.language.auto": "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E",
|
|
688
766
|
"settings.language.system": "\u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0430: {name}",
|
|
689
767
|
"settings.sync.note": "\u041E\u0431\u043B\u0456\u043A\u043E\u0432\u0456 \u0437\u0430\u043F\u0438\u0441\u0438 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0456\u0437\u0443\u044E\u0442\u044C\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u043A\u043E\u0436\u043D\u0456 2 \u0445\u0432\u0438\u043B\u0438\u043D\u0438 \u0442\u0430 \u043A\u043E\u043B\u0438 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0437\u043D\u043E\u0432\u0443 \u0441\u0442\u0430\u0454 \u0430\u043A\u0442\u0438\u0432\u043D\u0438\u043C.",
|
|
@@ -698,6 +776,7 @@ var uk = {
|
|
|
698
776
|
"settings.privacy.note": "Mysticals \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0454 \u0434\u0432\u0456 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u0456 \u043F\u043E\u0434\u0456\u0457: \u043A\u043E\u043B\u0438 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0432\u043F\u0435\u0440\u0448\u0435 \u0456 \u043A\u043E\u043B\u0438 \u0434\u043E\u0434\u0430\u043D\u043E \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0439 \u0437\u0430\u043F\u0438\u0441 (\u043B\u0438\u0448\u0435 \u0442\u0438\u043F \u0441\u0435\u0440\u0432\u0456\u0441\u0443). \u041D\u0456\u043A\u043E\u043B\u0438 \u043D\u0435 \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0454 \u0430\u0434\u0440\u0435\u0441\u0438 \u043F\u043E\u0448\u0442\u0438 \u0447\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432, \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0456 \u0430\u0431\u043E \u043F\u043E\u0434\u0456\u0457.",
|
|
699
777
|
"settings.privacy.policy": "\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430 \u043A\u043E\u043D\u0444\u0456\u0434\u0435\u043D\u0446\u0456\u0439\u043D\u043E\u0441\u0442\u0456",
|
|
700
778
|
"settings.privacy.share": "\u041D\u0430\u0434\u0441\u0438\u043B\u0430\u0442\u0438 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u0443 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F",
|
|
779
|
+
"settings.donate": "\u041F\u0456\u0434\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u043D\u0430 Ko-fi",
|
|
701
780
|
"settings.account.labelFor": "\u041D\u0430\u0437\u0432\u0430 \u0434\u043B\u044F {email}",
|
|
702
781
|
"settings.account.colourFor": "\u041A\u043E\u043B\u0456\u0440 \u0434\u043B\u044F {email}",
|
|
703
782
|
"settings.account.remove": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",
|
|
@@ -864,6 +943,7 @@ var uk = {
|
|
|
864
943
|
"agenda.joinShort": "\u041F\u0440\u0438\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F",
|
|
865
944
|
"agenda.noCalls": "\u0421\u044C\u043E\u0433\u043E\u0434\u043D\u0456 \u0434\u0437\u0432\u0456\u043D\u043A\u0456\u0432 \u043D\u0435\u043C\u0430\u0454. \u041D\u0430\u0441\u043E\u043B\u043E\u0434\u0436\u0443\u0439\u0442\u0435\u0441\u044F \u0442\u0438\u0448\u0435\u044E.",
|
|
866
945
|
"agenda.fact.calendar": "\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440",
|
|
946
|
+
"agenda.fact.organizer": "\u043E\u0440\u0433\u0430\u043D\u0456\u0437\u0430\u0442\u043E\u0440",
|
|
867
947
|
"agenda.fact.where": "\u0434\u0435",
|
|
868
948
|
"agenda.fact.people": "\u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0438",
|
|
869
949
|
"agenda.fact.link": "\u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F",
|
|
@@ -2330,6 +2410,8 @@ function createMockApi(onChanged) {
|
|
|
2330
2410
|
seed(personal, "p-main", { title: "Ukraine - Portugal", start: iso(5, 12, 30), end: iso(5, 13), conferenceUrl: "https://meet.google.com/zon-fdwf-hnk" });
|
|
2331
2411
|
seed(personal, "p-main", { title: "Catch-up", start: iso(5, 16), end: iso(5, 16, 30), location: "https://meet.namechip.net/catch-up" });
|
|
2332
2412
|
seed(personal, "p-main", { title: "Coffee", start: iso(5, 9), end: iso(5, 9, 30), location: "Podil https://maps.app.goo.gl/kyiv-coffee" });
|
|
2413
|
+
for (const title2 of ["Olena \u2014 busy", "Maksym \u2014 busy"]) seed(work, "work-main", { title: title2, start: iso(-2, 9), end: iso(-2, 20) });
|
|
2414
|
+
seed(work, "work-main", { title: "Design review", start: iso(-2, 14), end: iso(-2, 15) });
|
|
2333
2415
|
seed(personal, "p-main", { title: "Dinner with friends", start: iso(2, 20), end: iso(2, 22), location: "Kyiv" });
|
|
2334
2416
|
const day = (offset) => format5(addDays2(/* @__PURE__ */ new Date(), offset), "yyyy-MM-dd");
|
|
2335
2417
|
seed(personal, "p-holidays", { title: "Holiday", start: day(0), end: day(1), allDay: true });
|
|
@@ -2489,6 +2571,10 @@ function mapPeople(vevent, email) {
|
|
|
2489
2571
|
});
|
|
2490
2572
|
return { organizer, attendees, myStatus: attendees.find((a) => a.self)?.status };
|
|
2491
2573
|
}
|
|
2574
|
+
function conferenceOf(vevent) {
|
|
2575
|
+
const urls = [...vevent.getAllProperties("conference"), ...vevent.getAllProperties("x-google-conference")].map((p) => String(p.getFirstValue() ?? "").trim());
|
|
2576
|
+
return urls.find((u) => /^https?:\/\//i.test(u));
|
|
2577
|
+
}
|
|
2492
2578
|
function parseEvents(ics, href, etag, ctx, range) {
|
|
2493
2579
|
const root = parse(ics);
|
|
2494
2580
|
const vevents = root.getAllSubcomponents("vevent");
|
|
@@ -2502,6 +2588,7 @@ function parseEvents(ics, href, etag, ctx, range) {
|
|
|
2502
2588
|
const build = (item, start, end, recurrenceId) => {
|
|
2503
2589
|
const rid = recurrenceId?.toString();
|
|
2504
2590
|
const raw = { href, ics, ...rid ? { recurrenceId: rid } : {} };
|
|
2591
|
+
const conference = conferenceOf(item.component);
|
|
2505
2592
|
return {
|
|
2506
2593
|
id: rid ? `${href}#${rid}` : href,
|
|
2507
2594
|
accountId: ctx.accountId,
|
|
@@ -2512,6 +2599,7 @@ function parseEvents(ics, href, etag, ctx, range) {
|
|
|
2512
2599
|
allDay: start.isDate,
|
|
2513
2600
|
location: item.location || void 0,
|
|
2514
2601
|
description: item.description || void 0,
|
|
2602
|
+
...conference ? { conferenceUrl: conference } : {},
|
|
2515
2603
|
...mapPeople(item.component, ctx.email),
|
|
2516
2604
|
etag,
|
|
2517
2605
|
raw,
|
|
@@ -3393,7 +3481,11 @@ function packColumns(items, minDur = 0) {
|
|
|
3393
3481
|
let colEnds = [];
|
|
3394
3482
|
let clusterEnd = -Infinity;
|
|
3395
3483
|
const flush = () => {
|
|
3396
|
-
for (const p of cluster)
|
|
3484
|
+
for (const { p, end } of cluster) {
|
|
3485
|
+
p.cols = colEnds.length;
|
|
3486
|
+
const busy = (col) => cluster.some((q) => q.p.col === col && q.p.start < end && p.start < q.end);
|
|
3487
|
+
while (p.col + p.span < p.cols && !busy(p.col + p.span)) p.span++;
|
|
3488
|
+
}
|
|
3397
3489
|
cluster = [];
|
|
3398
3490
|
colEnds = [];
|
|
3399
3491
|
};
|
|
@@ -3404,16 +3496,16 @@ function packColumns(items, minDur = 0) {
|
|
|
3404
3496
|
if (col < 0) col = colEnds.push(end) - 1;
|
|
3405
3497
|
else colEnds[col] = end;
|
|
3406
3498
|
clusterEnd = Math.max(clusterEnd, end);
|
|
3407
|
-
const p = { ...it, col, cols: 0 };
|
|
3408
|
-
cluster.push(p);
|
|
3499
|
+
const p = { ...it, col, cols: 0, span: 1 };
|
|
3500
|
+
cluster.push({ p, end });
|
|
3409
3501
|
out.push(p);
|
|
3410
3502
|
}
|
|
3411
3503
|
flush();
|
|
3412
3504
|
return out;
|
|
3413
3505
|
}
|
|
3414
3506
|
var wallMinutes = (d) => d.getHours() * 60 + d.getMinutes();
|
|
3415
|
-
function
|
|
3416
|
-
|
|
3507
|
+
function clipDay(events, day) {
|
|
3508
|
+
return events.filter((e) => !e.allDay && overlapsDay(e, day)).map((e) => {
|
|
3417
3509
|
const { start, end } = eventBounds(e);
|
|
3418
3510
|
return {
|
|
3419
3511
|
item: e,
|
|
@@ -3421,7 +3513,9 @@ function layoutDay(events, day, minDur = 0) {
|
|
|
3421
3513
|
end: isSameDay2(end, day) ? wallMinutes(end) : 1440
|
|
3422
3514
|
};
|
|
3423
3515
|
});
|
|
3424
|
-
|
|
3516
|
+
}
|
|
3517
|
+
function layoutDay(events, day, minDur = 0) {
|
|
3518
|
+
return packColumns(clipDay(events, day), minDur);
|
|
3425
3519
|
}
|
|
3426
3520
|
function monthGrid(date) {
|
|
3427
3521
|
const first = startOfWeek2(startOfMonth(date), { weekStartsOn: WEEK_STARTS_ON });
|
|
@@ -3847,8 +3941,15 @@ function htmlToText(html) {
|
|
|
3847
3941
|
function meetingUrl(location) {
|
|
3848
3942
|
return location?.match(/https?:\/\/[^\s<>"]+/i)?.[0].replace(/[.,;:!?)\]}'>]+$/, "");
|
|
3849
3943
|
}
|
|
3944
|
+
var CALL_KINDS = ["meet", "zoom", "teams", "video"];
|
|
3945
|
+
function descriptionCallUrl(description) {
|
|
3946
|
+
if (!description) return void 0;
|
|
3947
|
+
const hrefs = [...description.matchAll(/href\s*=\s*["']([^"']+)["']/gi)].map((m) => m[1].replace(/&/g, "&"));
|
|
3948
|
+
const urls = [...hrefs, ...linkify(description.replace(/<[^>]*>/g, " ")).flatMap((p) => p.href ? [p.href] : [])];
|
|
3949
|
+
return urls.find((u) => /^https?:\/\//i.test(u) && CALL_KINDS.includes(linkKind(u)));
|
|
3950
|
+
}
|
|
3850
3951
|
function eventMeetingUrl(e) {
|
|
3851
|
-
return e.conferenceUrl ?? meetingUrl(e.location);
|
|
3952
|
+
return e.conferenceUrl ?? meetingUrl(e.location) ?? descriptionCallUrl(e.description);
|
|
3852
3953
|
}
|
|
3853
3954
|
function locationText(location = "") {
|
|
3854
3955
|
return location.replace(/https?:\/\/[^\s<>"]+/gi, "").replace(/^[\s/|,·-]+|[\s/|,·-]+$/g, "");
|
|
@@ -5163,6 +5264,7 @@ function AddCaldav({ onBack, onDone }) {
|
|
|
5163
5264
|
|
|
5164
5265
|
// src/ui/screens/Accounts.tsx
|
|
5165
5266
|
import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
5267
|
+
var DONATE_URL = "https://ko-fi.com/a1exalexander";
|
|
5166
5268
|
function Accounts({ onClose }) {
|
|
5167
5269
|
const api = useApi();
|
|
5168
5270
|
const { accounts, calendars, loaded, error: loadError } = useDirectory();
|
|
@@ -5406,7 +5508,14 @@ function Accounts({ onClose }) {
|
|
|
5406
5508
|
button("a", "add CalDAV"),
|
|
5407
5509
|
/* @__PURE__ */ jsx12(Button, { k: "esc", label: "close", onPress: onClose })
|
|
5408
5510
|
] }),
|
|
5409
|
-
mode.kind === "list" && /* @__PURE__ */
|
|
5511
|
+
mode.kind === "list" && /* @__PURE__ */ jsxs10(Box10, { marginTop: 1, children: [
|
|
5512
|
+
/* @__PURE__ */ jsx12(Text10, { color: C.muted, children: "Made in Ukraine \xB7 " }),
|
|
5513
|
+
/* @__PURE__ */ jsxs10(Clickable, { onClick: () => void openUrl(DONATE_URL).catch(() => {
|
|
5514
|
+
}), children: [
|
|
5515
|
+
/* @__PURE__ */ jsx12(Text10, { color: C.muted, children: "Support on Ko-fi: " }),
|
|
5516
|
+
/* @__PURE__ */ jsx12(Text10, { color: C.cyan, underline: true, children: DONATE_URL })
|
|
5517
|
+
] })
|
|
5518
|
+
] })
|
|
5410
5519
|
] });
|
|
5411
5520
|
}
|
|
5412
5521
|
var loopbackPort = (authUrl) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mysticals",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Isolated multi-account calendar for the terminal on macOS, Linux and Windows",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"calendar",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"tsup": "^8.5.1",
|
|
48
48
|
"typescript": "^5.9.3",
|
|
49
49
|
"vitest": "^3.2.7",
|
|
50
|
-
"@mysticals/core": "0.
|
|
50
|
+
"@mysticals/core": "0.10.0"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"dev": "tsup --watch",
|