@k2b/ui 0.47.0 → 0.49.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 (95) hide show
  1. package/dist/browser/actions/CopyButton.js +26 -18
  2. package/dist/browser/actions/CopyButton.js.map +1 -1
  3. package/dist/browser/chat/ChatComposer.js +244 -193
  4. package/dist/browser/chat/ChatComposer.js.map +1 -1
  5. package/dist/browser/chat/chat-messages.js +6 -0
  6. package/dist/browser/chat/chat-messages.js.map +1 -1
  7. package/dist/browser/chat/types.js.map +1 -1
  8. package/dist/browser/content/Calendar.js +40 -5
  9. package/dist/browser/content/Calendar.js.map +1 -1
  10. package/dist/browser/content/calendar-event-detail.js +328 -0
  11. package/dist/browser/content/calendar-event-detail.js.map +1 -0
  12. package/dist/browser/content/calendar-messages.js +34 -2
  13. package/dist/browser/content/calendar-messages.js.map +1 -1
  14. package/dist/browser/content/calendar-shared.js +189 -82
  15. package/dist/browser/content/calendar-shared.js.map +1 -1
  16. package/dist/browser/content/calendar-time-view.js +101 -96
  17. package/dist/browser/content/calendar-time-view.js.map +1 -1
  18. package/dist/browser/content/index.js.map +1 -1
  19. package/dist/browser/feedback/prompt-confirm.js +7 -4
  20. package/dist/browser/feedback/prompt-confirm.js.map +1 -1
  21. package/dist/browser/feedback/prompts.js +3 -3
  22. package/dist/browser/feedback/prompts.js.map +1 -1
  23. package/dist/browser/inputs/NumberInput.js +17 -5
  24. package/dist/browser/inputs/NumberInput.js.map +1 -1
  25. package/dist/browser/inputs/dictation/Dictation.js +114 -108
  26. package/dist/browser/inputs/dictation/Dictation.js.map +1 -1
  27. package/dist/browser/inputs/dictation/dictation-messages.js +2 -0
  28. package/dist/browser/inputs/dictation/dictation-messages.js.map +1 -1
  29. package/dist/browser/layout/AppWorkspace.js +574 -522
  30. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  31. package/dist/browser/layout/MobileShell.js +26 -0
  32. package/dist/browser/layout/MobileShell.js.map +1 -1
  33. package/dist/browser/layout/index.js +1 -0
  34. package/dist/browser/layout/index.js.map +1 -1
  35. package/dist/browser/layout/sheet-handle.js +155 -0
  36. package/dist/browser/layout/sheet-handle.js.map +1 -0
  37. package/dist/browser/surfaces/NoticeCard.js +48 -29
  38. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  39. package/dist/ssr/actions/CopyButton.js +13 -8
  40. package/dist/ssr/actions/CopyButton.js.map +1 -1
  41. package/dist/ssr/chat/ChatComposer.js +53 -30
  42. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  43. package/dist/ssr/chat/chat-messages.js +6 -0
  44. package/dist/ssr/chat/chat-messages.js.map +1 -1
  45. package/dist/ssr/chat/types.js.map +1 -1
  46. package/dist/ssr/content/Calendar.js +36 -4
  47. package/dist/ssr/content/Calendar.js.map +1 -1
  48. package/dist/ssr/content/calendar-event-detail.js +212 -0
  49. package/dist/ssr/content/calendar-event-detail.js.map +1 -0
  50. package/dist/ssr/content/calendar-messages.js +34 -2
  51. package/dist/ssr/content/calendar-messages.js.map +1 -1
  52. package/dist/ssr/content/calendar-shared.js +117 -36
  53. package/dist/ssr/content/calendar-shared.js.map +1 -1
  54. package/dist/ssr/content/calendar-time-view.js +6 -4
  55. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  56. package/dist/ssr/content/index.js.map +1 -1
  57. package/dist/ssr/feedback/prompt-confirm.js +7 -4
  58. package/dist/ssr/feedback/prompt-confirm.js.map +1 -1
  59. package/dist/ssr/feedback/prompts.js +3 -3
  60. package/dist/ssr/feedback/prompts.js.map +1 -1
  61. package/dist/ssr/inputs/NumberInput.js +17 -5
  62. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  63. package/dist/ssr/inputs/dictation/Dictation.js +3 -1
  64. package/dist/ssr/inputs/dictation/Dictation.js.map +1 -1
  65. package/dist/ssr/inputs/dictation/dictation-messages.js +2 -0
  66. package/dist/ssr/inputs/dictation/dictation-messages.js.map +1 -1
  67. package/dist/ssr/layout/AppWorkspace.js +152 -114
  68. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  69. package/dist/ssr/layout/MobileShell.js +26 -0
  70. package/dist/ssr/layout/MobileShell.js.map +1 -1
  71. package/dist/ssr/layout/index.js +1 -0
  72. package/dist/ssr/layout/index.js.map +1 -1
  73. package/dist/ssr/layout/sheet-handle.js +155 -0
  74. package/dist/ssr/layout/sheet-handle.js.map +1 -0
  75. package/dist/ssr/surfaces/NoticeCard.js +25 -10
  76. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  77. package/dist/styles.css +1 -1
  78. package/dist/types/chat/chat-messages.d.ts +3 -0
  79. package/dist/types/chat/types.d.ts +5 -0
  80. package/dist/types/content/Calendar.d.ts +29 -5
  81. package/dist/types/content/calendar-event-detail.d.ts +21 -0
  82. package/dist/types/content/calendar-messages.d.ts +16 -0
  83. package/dist/types/content/calendar-shared.d.ts +16 -1
  84. package/dist/types/content/calendar-time-view.d.ts +1 -1
  85. package/dist/types/content/index.d.ts +1 -1
  86. package/dist/types/feedback/prompt-confirm.d.ts +3 -1
  87. package/dist/types/feedback/prompts.d.ts +2 -2
  88. package/dist/types/inputs/NumberInput.d.ts +1 -1
  89. package/dist/types/inputs/dictation/dictation-messages.d.ts +1 -0
  90. package/dist/types/layout/AppWorkspace.d.ts +16 -1
  91. package/dist/types/layout/MobileShell.d.ts +5 -0
  92. package/dist/types/layout/index.d.ts +2 -1
  93. package/dist/types/layout/sheet-handle.d.ts +21 -0
  94. package/dist/types/surfaces/NoticeCard.d.ts +5 -2
  95. package/package.json +1 -1
@@ -0,0 +1,212 @@
1
+ import { ssrStyle as _$ssrStyle } from "solid-js/web";
2
+ import { ssr as _$ssr } from "solid-js/web";
3
+ import { createComponent as _$createComponent } from "solid-js/web";
4
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
5
+ import { escape as _$escape } from "solid-js/web";
6
+ var _tmpl$ = ["<div class=\"k2b-calendar-popover\" popover=\"auto\" role=\"dialog\"", " data-kind=\"event\">", "</div>"],
7
+ _tmpl$2 = "<i class=\"ti ti-x\" aria-hidden=\"true\"></i>",
8
+ _tmpl$3 = ["<p class=\"k2b-calendar-detail__row\"><i class=\"ti ti-circle-check\" aria-hidden=\"true\"></i><span>", "</span></p>"],
9
+ _tmpl$4 = ["<p class=\"k2b-calendar-detail__row\"><i class=\"ti ti-map-pin\" aria-hidden=\"true\"></i><span>", "</span></p>"],
10
+ _tmpl$5 = ["<p class=\"k2b-calendar-detail__row\"><i class=\"ti ti-calendar\" aria-hidden=\"true\"></i><span>", "</span></p>"],
11
+ _tmpl$6 = ["<p class=\"k2b-calendar-detail__description\">", "</p>"],
12
+ _tmpl$7 = ["<section class=\"k2b-calendar-detail__section\"", "><h3 class=\"k2b-calendar-detail__label\">", "</h3><ul class=\"k2b-calendar-detail__people\">", "</ul></section>"],
13
+ _tmpl$8 = ["<section class=\"k2b-calendar-detail__section\"", "><h3 class=\"k2b-calendar-detail__label\">", "</h3><div class=\"k2b-calendar-detail__links\">", "</div></section>"],
14
+ _tmpl$9 = ["<div class=\"k2b-calendar-detail\" tabindex=\"-1\"", " style=\"", "\"><header class=\"k2b-calendar-detail__head\">", "<h2 class=\"k2b-calendar-detail__title\"", ">", "</h2>", "</header><p class=\"k2b-calendar-detail__row\"", "><i", " aria-hidden=\"true\"></i><span>", "</span></p>", "", "", "", "", "", "", "</div>"],
15
+ _tmpl$0 = ["<span class=\"k2b-calendar-detail__icon\" aria-hidden=\"true\"><i", "></i></span>"],
16
+ _tmpl$1 = ["<li>", "<span>", "</span></li>"],
17
+ _tmpl$10 = ["<i", " aria-hidden=\"true\"></i>"],
18
+ _tmpl$11 = ["<footer class=\"k2b-calendar-detail__foot\">", "</footer>"];
19
+ import { dates as calendar } from "@k2b/stdlib";
20
+ import { createEffect, For, Show } from "solid-js";
21
+ import { ButtonLink, IconButton } from "../actions/Button";
22
+ import { useUiMessages } from "../intl/messages";
23
+ import { Avatar } from "../surfaces/Avatar";
24
+ import { useCalendarMessages } from "./calendar-messages";
25
+ import { eventHref, followCalendarHref, isOverdue, ownerDateConfig, placeCalendarPopover } from "./calendar-shared";
26
+
27
+ /** The entry the calendar's own detail shows, and the element that opened it, where the focus returns. */
28
+
29
+ const DAY_MS = 86_400_000;
30
+ const PHONE = "(max-width: 47.999rem)";
31
+
32
+ /**
33
+ * The calendar's own detail of an entry, for hosts without `onEventActivate`: its time, place, people, and links, and
34
+ * "Open" for its `href`. It lies beside the entry, and on a phone it rises from the bottom. Escape and a click outside
35
+ * close it, and the focus goes back to the entry.
36
+ */
37
+ export const CalendarEventDetail = props => {
38
+ const ui = useUiMessages();
39
+ const messages = useCalendarMessages();
40
+ let element;
41
+ const config = () => ownerDateConfig(props.owner);
42
+ const day = date => date.toLocaleDateString(config().locale ?? "en", {
43
+ weekday: "long",
44
+ day: "numeric",
45
+ month: "long",
46
+ timeZone: config().timeZone
47
+ });
48
+ const when = event => {
49
+ const start = event.sourceStartDate ?? new Date(event.start);
50
+ const end = event.sourceEndDate ?? start;
51
+ const time = date => calendar.formatTime(date, config());
52
+ if (event.allDay) {
53
+ const last = new Date(Math.max(start.getTime(), end.getTime() - DAY_MS));
54
+ return day(last) === day(start) ? `${day(start)} · ${ui().allDay}` : `${day(start)} – ${day(last)}`;
55
+ }
56
+ if (end.getTime() <= start.getTime()) return `${day(start)} · ${messages().calendarDue({
57
+ time: time(start)
58
+ })}`;
59
+ return day(end) === day(start) ? `${day(start)} · ${time(start)}–${time(end)}` : `${day(start)} ${time(start)} – ${day(end)} ${time(end)}`;
60
+ };
61
+ const close = restoreFocus => {
62
+ const anchor = props.state?.anchor;
63
+ props.onClose();
64
+ if (restoreFocus && anchor?.isConnected) anchor.focus({
65
+ preventScroll: true
66
+ });
67
+ };
68
+ createEffect(() => {
69
+ const state = props.state;
70
+ if (!element) return;
71
+ if (!state) {
72
+ if (element.matches(":popover-open")) element.hidePopover();
73
+ return;
74
+ }
75
+ if (!element.matches(":popover-open")) element.showPopover();
76
+ const sheet = window.matchMedia(PHONE).matches;
77
+ element.toggleAttribute("data-sheet", sheet);
78
+ queueMicrotask(() => {
79
+ if (!element || props.state !== state) return;
80
+ if (sheet) {
81
+ element.style.removeProperty("left");
82
+ element.style.removeProperty("top");
83
+ } else placeCalendarPopover(state.anchor, element);
84
+ // The panel takes the focus, so the dialog is read first and Tab reaches Close; a focused button would show its tooltip.
85
+ element.querySelector(".k2b-calendar-detail")?.focus({
86
+ preventScroll: true
87
+ });
88
+ });
89
+ });
90
+ return _$ssr(_tmpl$, _$ssrAttribute("aria-label", props.state ? _$escape(messages().calendarEventDetail({
91
+ title: props.state.event.title
92
+ }), true) : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
93
+ get when() {
94
+ return props.state;
95
+ },
96
+ keyed: true,
97
+ children: state => {
98
+ const event = state.event;
99
+ const href = eventHref(props.owner, event);
100
+ const overdue = isOverdue(event, props.owner.calendarNow?.());
101
+ return _$ssr(_tmpl$9, _$ssrAttribute("data-color", event.colorHex ? _$escape(undefined, true) : _$escape(event.color ?? "blue", true), false), _$ssrStyle(event.colorHex ? {
102
+ "--k2b-calendar-accent": event.colorHex
103
+ } : undefined), _$escape(_$createComponent(Show, {
104
+ get when() {
105
+ return event.icon;
106
+ },
107
+ children: icon => _$ssr(_tmpl$0, _$ssrAttribute("class", _$escape(icon(), true), false))
108
+ })), _$ssrAttribute("data-done", event.checked === true ? "true" : _$escape(undefined, true), false), _$escape(event.title), _$escape(_$createComponent(IconButton, {
109
+ get label() {
110
+ return ui().close;
111
+ },
112
+ variant: "ghost",
113
+ size: "sm",
114
+ onClick: () => close(true),
115
+ get children() {
116
+ return _$ssr(_tmpl$2);
117
+ }
118
+ })), _$ssrAttribute("data-tone", overdue ? "danger" : _$escape(undefined, true), false), _$ssrAttribute("class", overdue ? "ti ti-alert-circle" : "ti ti-clock", false), overdue ? `${_$escape(messages().calendarOverdue)} · ${_$escape(when(event))}` : _$escape(when(event)), _$escape(_$createComponent(Show, {
119
+ get when() {
120
+ return event.checked === true;
121
+ },
122
+ get children() {
123
+ return _$ssr(_tmpl$3, _$escape(messages().calendarDoneState));
124
+ }
125
+ })), _$escape(_$createComponent(Show, {
126
+ get when() {
127
+ return event.location;
128
+ },
129
+ get children() {
130
+ return _$ssr(_tmpl$4, _$escape(event.location));
131
+ }
132
+ })), _$escape(_$createComponent(Show, {
133
+ get when() {
134
+ return event.calendarName;
135
+ },
136
+ get children() {
137
+ return _$ssr(_tmpl$5, _$escape(event.calendarName));
138
+ }
139
+ })), _$escape(_$createComponent(Show, {
140
+ get when() {
141
+ return event.description?.trim();
142
+ },
143
+ get children() {
144
+ return _$ssr(_tmpl$6, _$escape(event.description));
145
+ }
146
+ })), _$escape(_$createComponent(Show, {
147
+ get when() {
148
+ return event.attendees?.length;
149
+ },
150
+ get children() {
151
+ return _$ssr(_tmpl$7, _$ssrAttribute("aria-label", _$escape(messages().calendarPeople, true), false), _$escape(messages().calendarPeople), _$escape(_$createComponent(For, {
152
+ get each() {
153
+ return event.attendees;
154
+ },
155
+ children: person => _$ssr(_tmpl$1, _$escape(_$createComponent(Avatar, {
156
+ get name() {
157
+ return person.name;
158
+ },
159
+ get src() {
160
+ return person.src;
161
+ },
162
+ size: "xs",
163
+ alt: ""
164
+ })), _$escape(person.name))
165
+ })));
166
+ }
167
+ })), _$escape(_$createComponent(Show, {
168
+ get when() {
169
+ return event.links?.length;
170
+ },
171
+ get children() {
172
+ return _$ssr(_tmpl$8, _$ssrAttribute("aria-label", _$escape(messages().calendarLinks, true), false), _$escape(messages().calendarLinks), _$escape(_$createComponent(For, {
173
+ get each() {
174
+ return event.links;
175
+ },
176
+ children: link => _$createComponent(ButtonLink, {
177
+ get href() {
178
+ return link.href;
179
+ },
180
+ variant: "secondary",
181
+ size: "sm",
182
+ align: "start",
183
+ "class": "k2b-calendar-detail__link",
184
+ get children() {
185
+ return [_$ssr(_tmpl$10, _$ssrAttribute("class", _$escape(link.icon ?? "ti ti-link", true), false)), link.label];
186
+ }
187
+ })
188
+ })));
189
+ }
190
+ })), _$escape(_$createComponent(Show, {
191
+ when: href,
192
+ children: target => _$ssr(_tmpl$11, _$escape(_$createComponent(ButtonLink, {
193
+ get href() {
194
+ return target();
195
+ },
196
+ variant: "primary",
197
+ size: "sm",
198
+ onClick: click => {
199
+ if (!props.owner.onNavigateHref || click.button !== 0 || click.metaKey || click.ctrlKey || click.shiftKey) return;
200
+ click.preventDefault();
201
+ props.onClose();
202
+ followCalendarHref(props.owner, target());
203
+ },
204
+ get children() {
205
+ return messages().calendarOpenEvent;
206
+ }
207
+ })))
208
+ })));
209
+ }
210
+ })));
211
+ };
212
+ //# sourceMappingURL=calendar-event-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/calendar-event-detail.tsx"],"sourcesContent":["import { dates as calendar } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, For, Show } from \"solid-js\";\nimport { ButtonLink, IconButton } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Avatar } from \"../surfaces/Avatar\";\nimport type { CalendarEvent } from \"./Calendar\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { type CalendarOwner, eventHref, followCalendarHref, isOverdue, ownerDateConfig, placeCalendarPopover } from \"./calendar-shared\";\n\n/** The entry the calendar's own detail shows, and the element that opened it, where the focus returns. */\nexport type CalendarDetailState = { event: CalendarEvent & { sourceStartDate?: Date; sourceEndDate?: Date }; anchor: HTMLElement };\n\nconst DAY_MS = 86_400_000;\nconst PHONE = \"(max-width: 47.999rem)\";\n\n/**\n * The calendar's own detail of an entry, for hosts without `onEventActivate`: its time, place, people, and links, and\n * \"Open\" for its `href`. It lies beside the entry, and on a phone it rises from the bottom. Escape and a click outside\n * close it, and the focus goes back to the entry.\n */\nexport const CalendarEventDetail = (props: {\n owner: CalendarOwner;\n state: CalendarDetailState | null;\n onClose: () => void;\n}): JSX.Element => {\n const ui = useUiMessages();\n const messages = useCalendarMessages();\n let element: HTMLDivElement | undefined;\n const config = () => ownerDateConfig(props.owner);\n const day = (date: Date) =>\n date.toLocaleDateString(config().locale ?? \"en\", { weekday: \"long\", day: \"numeric\", month: \"long\", timeZone: config().timeZone });\n const when = (event: CalendarDetailState[\"event\"]) => {\n const start = event.sourceStartDate ?? new Date(event.start);\n const end = event.sourceEndDate ?? start;\n const time = (date: Date) => calendar.formatTime(date, config());\n if (event.allDay) {\n const last = new Date(Math.max(start.getTime(), end.getTime() - DAY_MS));\n return day(last) === day(start) ? `${day(start)} · ${ui().allDay}` : `${day(start)} – ${day(last)}`;\n }\n if (end.getTime() <= start.getTime()) return `${day(start)} · ${messages().calendarDue({ time: time(start) })}`;\n return day(end) === day(start)\n ? `${day(start)} · ${time(start)}–${time(end)}`\n : `${day(start)} ${time(start)} – ${day(end)} ${time(end)}`;\n };\n const close = (restoreFocus: boolean) => {\n const anchor = props.state?.anchor;\n props.onClose();\n if (restoreFocus && anchor?.isConnected) anchor.focus({ preventScroll: true });\n };\n\n createEffect(() => {\n const state = props.state;\n if (!element) return;\n if (!state) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n if (!element.matches(\":popover-open\")) element.showPopover();\n const sheet = window.matchMedia(PHONE).matches;\n element.toggleAttribute(\"data-sheet\", sheet);\n queueMicrotask(() => {\n if (!element || props.state !== state) return;\n if (sheet) {\n element.style.removeProperty(\"left\");\n element.style.removeProperty(\"top\");\n } else placeCalendarPopover(state.anchor, element);\n // The panel takes the focus, so the dialog is read first and Tab reaches Close; a focused button would show its tooltip.\n element.querySelector<HTMLElement>(\".k2b-calendar-detail\")?.focus({ preventScroll: true });\n });\n });\n\n return (\n <div\n ref={element}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.state ? messages().calendarEventDetail({ title: props.state.event.title }) : undefined}\n data-kind=\"event\"\n onToggle={(event) => {\n if (event.newState !== \"closed\" || !props.state) return;\n close(element?.contains(document.activeElement) === true || document.activeElement === document.body);\n }}\n >\n <Show when={props.state} keyed>\n {(state) => {\n const event = state.event;\n const href = eventHref(props.owner, event);\n const overdue = isOverdue(event, props.owner.calendarNow?.());\n return (\n <div\n class=\"k2b-calendar-detail\"\n tabIndex={-1}\n data-color={event.colorHex ? undefined : (event.color ?? \"blue\")}\n style={event.colorHex ? { \"--k2b-calendar-accent\": event.colorHex } : undefined}\n >\n <header class=\"k2b-calendar-detail__head\">\n <Show when={event.icon}>\n {(icon) => (\n <span class=\"k2b-calendar-detail__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n </span>\n )}\n </Show>\n <h2 class=\"k2b-calendar-detail__title\" data-done={event.checked === true ? \"true\" : undefined}>\n {event.title}\n </h2>\n <IconButton label={ui().close} variant=\"ghost\" size=\"sm\" onClick={() => close(true)}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </IconButton>\n </header>\n <p class=\"k2b-calendar-detail__row\" data-tone={overdue ? \"danger\" : undefined}>\n <i class={overdue ? \"ti ti-alert-circle\" : \"ti ti-clock\"} aria-hidden=\"true\" />\n <span>{overdue ? `${messages().calendarOverdue} · ${when(event)}` : when(event)}</span>\n </p>\n <Show when={event.checked === true}>\n <p class=\"k2b-calendar-detail__row\">\n <i class=\"ti ti-circle-check\" aria-hidden=\"true\" />\n <span>{messages().calendarDoneState}</span>\n </p>\n </Show>\n <Show when={event.location}>\n <p class=\"k2b-calendar-detail__row\">\n <i class=\"ti ti-map-pin\" aria-hidden=\"true\" />\n <span>{event.location}</span>\n </p>\n </Show>\n <Show when={event.calendarName}>\n <p class=\"k2b-calendar-detail__row\">\n <i class=\"ti ti-calendar\" aria-hidden=\"true\" />\n <span>{event.calendarName}</span>\n </p>\n </Show>\n <Show when={event.description?.trim()}>\n <p class=\"k2b-calendar-detail__description\">{event.description}</p>\n </Show>\n <Show when={event.attendees?.length}>\n <section class=\"k2b-calendar-detail__section\" aria-label={messages().calendarPeople}>\n <h3 class=\"k2b-calendar-detail__label\">{messages().calendarPeople}</h3>\n <ul class=\"k2b-calendar-detail__people\">\n <For each={event.attendees}>\n {(person) => (\n <li>\n <Avatar name={person.name} src={person.src} size=\"xs\" alt=\"\" />\n <span>{person.name}</span>\n </li>\n )}\n </For>\n </ul>\n </section>\n </Show>\n <Show when={event.links?.length}>\n <section class=\"k2b-calendar-detail__section\" aria-label={messages().calendarLinks}>\n <h3 class=\"k2b-calendar-detail__label\">{messages().calendarLinks}</h3>\n <div class=\"k2b-calendar-detail__links\">\n <For each={event.links}>\n {(link) => (\n <ButtonLink href={link.href} variant=\"secondary\" size=\"sm\" align=\"start\" class=\"k2b-calendar-detail__link\">\n <i class={link.icon ?? \"ti ti-link\"} aria-hidden=\"true\" />\n {link.label}\n </ButtonLink>\n )}\n </For>\n </div>\n </section>\n </Show>\n <Show when={href}>\n {(target) => (\n <footer class=\"k2b-calendar-detail__foot\">\n <ButtonLink\n href={target()}\n variant=\"primary\"\n size=\"sm\"\n onClick={(click: MouseEvent) => {\n if (!props.owner.onNavigateHref || click.button !== 0 || click.metaKey || click.ctrlKey || click.shiftKey) return;\n click.preventDefault();\n props.onClose();\n followCalendarHref(props.owner, target());\n }}\n >\n {messages().calendarOpenEvent}\n </ButtonLink>\n </footer>\n )}\n </Show>\n </div>\n );\n }}\n </Show>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -161,7 +161,23 @@ const calendarMessages = i18n.define({
161
161
  calendarGoToPlaceholder: "Date, such as 3/15, Friday, March, or W 12",
162
162
  calendarGoToHint: "Enter a date, a weekday, a month, or a week number.",
163
163
  calendarGoToUnknown: "Not recognized.",
164
- calendarGoToGo: "Go"
164
+ calendarGoToGo: "Go",
165
+ calendarStateDone: "done",
166
+ calendarStateOverdue: "overdue",
167
+ calendarOverdue: "Overdue",
168
+ calendarDoneState: "Done",
169
+ calendarPeopleCount: ({
170
+ count
171
+ }) => count === 1 ? "1 person" : `${count} people`,
172
+ calendarLinkCount: ({
173
+ count
174
+ }) => count === 1 ? "1 link" : `${count} links`,
175
+ calendarPeople: "People",
176
+ calendarLinks: "Links",
177
+ calendarOpenEvent: "Open",
178
+ calendarEventDetail: ({
179
+ title
180
+ }) => `Details: ${title}`
165
181
  },
166
182
  de: {
167
183
  calendarView: "Kalenderansicht",
@@ -316,7 +332,23 @@ const calendarMessages = i18n.define({
316
332
  calendarGoToPlaceholder: "Datum, z. B. 15.3., Freitag, März oder KW 12",
317
333
  calendarGoToHint: "Datum, Wochentag, Monat oder Kalenderwoche eingeben.",
318
334
  calendarGoToUnknown: "Nicht erkannt.",
319
- calendarGoToGo: "Springen"
335
+ calendarGoToGo: "Springen",
336
+ calendarStateDone: "erledigt",
337
+ calendarStateOverdue: "überfällig",
338
+ calendarOverdue: "Überfällig",
339
+ calendarDoneState: "Erledigt",
340
+ calendarPeopleCount: ({
341
+ count
342
+ }) => count === 1 ? "1 Person" : `${count} Personen`,
343
+ calendarLinkCount: ({
344
+ count
345
+ }) => count === 1 ? "1 Link" : `${count} Links`,
346
+ calendarPeople: "Personen",
347
+ calendarLinks: "Links",
348
+ calendarOpenEvent: "Öffnen",
349
+ calendarEventDetail: ({
350
+ title
351
+ }) => `Details: ${title}`
320
352
  }
321
353
  }
322
354
  });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/calendar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/**\n * The calendar's own strings. They live beside the calendar instead of in the shared catalog, so applications that\n * never render a calendar do not ship them.\n */\nconst calendarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n calendarView: \"Calendar view\",\n openDate: ({ label }: { label: string }) => `Open ${label}`,\n createEventOn: ({ label }: { label: string }) => `Create event on ${label}`,\n hiddenOverlappingEvents: ({ count }: { count: number }) => `${count} hidden overlapping events`,\n calendarEventTime: ({ title, start, end }: { title: string; start: string; end: string }) => `${title}, ${start} to ${end}`,\n weekShort: \"Wk\",\n noEvents: \"No events\",\n moveEvent: \"Move event\",\n resizeEvent: \"Resize event\",\n calendarMoreEvents: ({ count }: { count: number }) => `+${count} more`,\n calendarMoreEventsOn: ({ count, label }: { count: number; label: string }) => `${count} more on ${label}`,\n calendarSelectionActions: \"Actions for the selected days\",\n calendarQuickCreate: \"New entry\",\n calendarSelectedDays: ({ start, end, count }: { start: string; end: string; count: number }) => `${start} – ${end} · ${count} days`,\n calendarOpenDay: \"Open day\",\n calendarOpenWeek: \"Open week\",\n calendarOpenWeekNumber: ({ week }: { week: number }) => `Week ${week}, open week`,\n calendarClearSelection: \"Clear selection\",\n calendarNewEvent: \"New event\",\n calendarNothingPlanned: \"Nothing planned.\",\n calendarContinuesFrom: ({ day, month }: { day: number; month?: string }) => `from ${month ? `${month} ` : \"\"}${day}`,\n calendarContinuesUntil: ({ day, month }: { day: number; month?: string }) => `until ${month ? `${month} ` : \"\"}${day}`,\n calendarDuration: ({ minutes }: { minutes: number }) => {\n if (minutes < 60) return `${minutes} min`;\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return `${hours} hr${rest ? ` ${rest} min` : hours === 1 ? \"\" : \"s\"}`;\n },\n calendarFree: ({ duration }: { duration: string }) => `${duration} free`,\n calendarCreateAt: ({ start, end }: { start: string; end: string }) => `Create event ${start}–${end}`,\n calendarFreeAction: ({\n duration,\n from,\n to,\n start,\n end,\n }: {\n duration: string;\n from: string;\n to: string;\n start: string;\n end: string;\n }) => `${duration} free, ${from} to ${to}. Create event ${start}–${end}`,\n calendarRemaining: ({ duration }: { duration: string }) => `${duration} left`,\n calendarSoon: ({ title, duration }: { title: string; duration: string }) => `${title} in ${duration}`,\n calendarNight: ({ from, to }: { from: string; to: string }) => `Night · ${from} → ${to}`,\n calendarNightHours: ({ from, to }: { from: string; to: string }) => `Night · ${from}–${to}`,\n calendarFoldNight: \"Fold\",\n calendarOpenNight: \"Open the night\",\n calendarFoldNights: \"Fold the nights\",\n calendarOpenNights: ({ from, to }: { from: string; to: string }) => `Open the nights, ${from} to ${to}`,\n calendarUntil: ({ time }: { time: string }) => `until ${time}`,\n calendarNothingPlannedShort: \"Nothing planned\",\n calendarUnfoldDays: ({ count }: { count: number }): string => (count === 1 ? \"Show day\" : \"Show days\"),\n calendarDayCount: ({ count }: { count: number }) => `${count} days`,\n calendarDaySummary: ({ events, tasks }: { events: number; tasks: number }) =>\n [events ? `${events} ${events === 1 ? \"event\" : \"events\"}` : \"\", tasks ? `${tasks} ${tasks === 1 ? \"to-do\" : \"to-dos\"}` : \"\"]\n .filter(Boolean)\n .join(\" · \"),\n calendarMoreDays: \"More days load as you scroll …\",\n calendarAllDayRow: \"all day\",\n calendarAllDayRowShort: \"all day\",\n calendarAllDayAndDue: \"All day and due\",\n calendarDone: ({ title }: { title: string }) => `Done: ${title}`,\n calendarAllDone: \"All done for today\",\n calendarAllDoneShort: \"All done\",\n calendarDue: ({ time }: { time: string }) => `due ${time}`,\n calendarFits: \"fits\",\n calendarTooShort: ({ duration }: { duration: string }) => `${duration} too short`,\n calendarOverlaps: ({ title }: { title: string }) => `overlaps “${title}”`,\n calendarWeekNumber: ({ week }: { week: number }) => `W ${week}`,\n calendarWeek: \"Week\",\n calendarDays: \"Days\",\n calendarKeyboardHelp: \"Arrow keys move between days, events, and free time. Enter opens or creates, Space checks off.\",\n calendarDayKeyboardHelp: \"Tab moves through the events and free time of each day. Enter opens or creates, Space checks off.\",\n calendarShortcuts: \"Keyboard shortcuts\",\n calendarShortcutsNote: \"Shortcuts work anywhere on this page, except while you type in a text field or a dialog is open.\",\n calendarCommandToday: \"Today\",\n calendarCommandTodayDescription: \"Show today in the calendar\",\n calendarCommandNext: \"Next\",\n calendarCommandNextDescription: \"Show the next day, week, month, or year\",\n calendarCommandPrevious: \"Previous\",\n calendarCommandPreviousDescription: \"Show the previous day, week, month, or year\",\n calendarCommandView: ({ view }: { view: string }) => `${view} view`,\n calendarCommandViewDescription: ({ view }: { view: string }) => `Switch the calendar to the ${view.toLowerCase()} view`,\n calendarCommandGoTo: \"Go to\",\n calendarCommandGoToDescription: \"Jump to a date or a week number\",\n calendarGoToPlaceholder: \"Date, such as 3/15, Friday, March, or W 12\",\n calendarGoToHint: \"Enter a date, a weekday, a month, or a week number.\",\n calendarGoToUnknown: \"Not recognized.\",\n calendarGoToGo: \"Go\",\n },\n de: {\n calendarView: \"Kalenderansicht\",\n openDate: ({ label }) => `${label} öffnen`,\n createEventOn: ({ label }) => `Termin am ${label} erstellen`,\n hiddenOverlappingEvents: ({ count }) => `${count} ausgeblendete überlappende Termine`,\n calendarEventTime: ({ title, start, end }) => `${title}, ${start} bis ${end}`,\n weekShort: \"KW\",\n noEvents: \"Keine Termine\",\n moveEvent: \"Termin verschieben\",\n resizeEvent: \"Termindauer ändern\",\n calendarMoreEvents: ({ count }) => `+${count} weitere`,\n calendarMoreEventsOn: ({ count, label }) => `${count} weitere am ${label}`,\n calendarSelectionActions: \"Aktionen für die ausgewählten Tage\",\n calendarQuickCreate: \"Neuer Eintrag\",\n calendarSelectedDays: ({ start, end, count }) => `${start} – ${end} · ${count} Tage`,\n calendarOpenDay: \"Tag öffnen\",\n calendarOpenWeek: \"Woche öffnen\",\n calendarOpenWeekNumber: ({ week }) => `KW ${week}, Woche öffnen`,\n calendarClearSelection: \"Auswahl aufheben\",\n calendarNewEvent: \"Neuer Termin\",\n calendarNothingPlanned: \"Nichts geplant.\",\n calendarContinuesFrom: ({ day, month }) => `seit ${day}.${month ? ` ${month}` : \"\"}`,\n calendarContinuesUntil: ({ day, month }) => `bis ${day}.${month ? ` ${month}` : \"\"}`,\n calendarDuration: ({ minutes }) => {\n if (minutes < 60) return `${minutes} Min`;\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return rest ? `${hours} Std. ${rest}` : `${hours} Std.`;\n },\n calendarFree: ({ duration }) => `${duration} frei`,\n calendarCreateAt: ({ start, end }) => `Termin ${start}–${end} anlegen`,\n calendarFreeAction: ({ duration, from, to, start, end }) => `${duration} frei, ${from} bis ${to}. Termin ${start}–${end} anlegen`,\n calendarRemaining: ({ duration }) => `noch ${duration}`,\n calendarSoon: ({ title, duration }) => `${title} in ${duration}`,\n calendarNight: ({ from, to }) => `Nacht · ${from} → ${to}`,\n calendarNightHours: ({ from, to }) => `Nacht · ${from}–${to}`,\n calendarFoldNight: \"einklappen\",\n calendarOpenNight: \"Nacht ausklappen\",\n calendarFoldNights: \"Nächte einklappen\",\n calendarOpenNights: ({ from, to }) => `Nächte ausklappen, ${from}–${to} Uhr`,\n calendarUntil: ({ time }) => `bis ${time}`,\n calendarNothingPlannedShort: \"Nichts geplant\",\n calendarUnfoldDays: ({ count }) => (count === 1 ? \"Tag aufklappen\" : \"Tage aufklappen\"),\n calendarDayCount: ({ count }) => `${count} Tage`,\n calendarDaySummary: ({ events, tasks }) =>\n [events ? `${events} ${events === 1 ? \"Termin\" : \"Termine\"}` : \"\", tasks ? `${tasks} ${tasks === 1 ? \"To-do\" : \"To-dos\"}` : \"\"]\n .filter(Boolean)\n .join(\" · \"),\n calendarMoreDays: \"Weitere Tage laden beim Scrollen …\",\n calendarAllDayRow: \"ganztägig\",\n calendarAllDayRowShort: \"ganzt.\",\n calendarAllDayAndDue: \"Ganztägig und fällig\",\n calendarDone: ({ title }) => `Erledigt: ${title}`,\n calendarAllDone: \"Alles für heute erledigt\",\n calendarAllDoneShort: \"Alles erledigt\",\n calendarDue: ({ time }) => `fällig ${time}`,\n calendarFits: \"passt\",\n calendarTooShort: ({ duration }) => `${duration} zu kurz`,\n calendarOverlaps: ({ title }) => `überschneidet „${title}“`,\n calendarWeekNumber: ({ week }) => `KW ${week}`,\n calendarWeek: \"Woche\",\n calendarDays: \"Tage\",\n calendarKeyboardHelp: \"Pfeiltasten wechseln zwischen Tagen, Terminen und freier Zeit. Enter öffnet oder legt an, Leertaste hakt ab.\",\n calendarDayKeyboardHelp:\n \"Tab wechselt zwischen den Terminen und der freien Zeit jedes Tages. Enter öffnet oder legt an, Leertaste hakt ab.\",\n calendarShortcuts: \"Tastenkürzel\",\n calendarShortcutsNote: \"Kürzel wirken überall auf dieser Seite, nur nicht beim Tippen in einem Eingabefeld oder bei offenem Dialog.\",\n calendarCommandToday: \"Heute\",\n calendarCommandTodayDescription: \"Im Kalender heute zeigen\",\n calendarCommandNext: \"Weiter\",\n calendarCommandNextDescription: \"Nächsten Tag, nächste Woche, nächsten Monat oder nächstes Jahr zeigen\",\n calendarCommandPrevious: \"Zurück\",\n calendarCommandPreviousDescription: \"Vorigen Tag, vorige Woche, vorigen Monat oder voriges Jahr zeigen\",\n calendarCommandView: ({ view }) => `Ansicht ${view}`,\n calendarCommandViewDescription: ({ view }) => `Den Kalender als ${view} zeigen`,\n calendarCommandGoTo: \"Gehe zu\",\n calendarCommandGoToDescription: \"Zu einem Datum oder einer Kalenderwoche springen\",\n calendarGoToPlaceholder: \"Datum, z. B. 15.3., Freitag, März oder KW 12\",\n calendarGoToHint: \"Datum, Wochentag, Monat oder Kalenderwoche eingeben.\",\n calendarGoToUnknown: \"Nicht erkannt.\",\n calendarGoToGo: \"Springen\",\n },\n },\n});\n\nexport type CalendarMessages = ReturnType<(typeof calendarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale, like the rest of @k2b/ui. */\nexport const useCalendarMessages = (): (() => CalendarMessages) => {\n const locale = useLocale();\n return () => calendarMessages.resolve([locale()]).t;\n};\n\nexport const checkCalendarMessages = () => calendarMessages.check();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/calendar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/**\n * The calendar's own strings. They live beside the calendar instead of in the shared catalog, so applications that\n * never render a calendar do not ship them.\n */\nconst calendarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n calendarView: \"Calendar view\",\n openDate: ({ label }: { label: string }) => `Open ${label}`,\n createEventOn: ({ label }: { label: string }) => `Create event on ${label}`,\n hiddenOverlappingEvents: ({ count }: { count: number }) => `${count} hidden overlapping events`,\n calendarEventTime: ({ title, start, end }: { title: string; start: string; end: string }) => `${title}, ${start} to ${end}`,\n weekShort: \"Wk\",\n noEvents: \"No events\",\n moveEvent: \"Move event\",\n resizeEvent: \"Resize event\",\n calendarMoreEvents: ({ count }: { count: number }) => `+${count} more`,\n calendarMoreEventsOn: ({ count, label }: { count: number; label: string }) => `${count} more on ${label}`,\n calendarSelectionActions: \"Actions for the selected days\",\n calendarQuickCreate: \"New entry\",\n calendarSelectedDays: ({ start, end, count }: { start: string; end: string; count: number }) => `${start} – ${end} · ${count} days`,\n calendarOpenDay: \"Open day\",\n calendarOpenWeek: \"Open week\",\n calendarOpenWeekNumber: ({ week }: { week: number }) => `Week ${week}, open week`,\n calendarClearSelection: \"Clear selection\",\n calendarNewEvent: \"New event\",\n calendarNothingPlanned: \"Nothing planned.\",\n calendarContinuesFrom: ({ day, month }: { day: number; month?: string }) => `from ${month ? `${month} ` : \"\"}${day}`,\n calendarContinuesUntil: ({ day, month }: { day: number; month?: string }) => `until ${month ? `${month} ` : \"\"}${day}`,\n calendarDuration: ({ minutes }: { minutes: number }) => {\n if (minutes < 60) return `${minutes} min`;\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return `${hours} hr${rest ? ` ${rest} min` : hours === 1 ? \"\" : \"s\"}`;\n },\n calendarFree: ({ duration }: { duration: string }) => `${duration} free`,\n calendarCreateAt: ({ start, end }: { start: string; end: string }) => `Create event ${start}–${end}`,\n calendarFreeAction: ({\n duration,\n from,\n to,\n start,\n end,\n }: {\n duration: string;\n from: string;\n to: string;\n start: string;\n end: string;\n }) => `${duration} free, ${from} to ${to}. Create event ${start}–${end}`,\n calendarRemaining: ({ duration }: { duration: string }) => `${duration} left`,\n calendarSoon: ({ title, duration }: { title: string; duration: string }) => `${title} in ${duration}`,\n calendarNight: ({ from, to }: { from: string; to: string }) => `Night · ${from} → ${to}`,\n calendarNightHours: ({ from, to }: { from: string; to: string }) => `Night · ${from}–${to}`,\n calendarFoldNight: \"Fold\",\n calendarOpenNight: \"Open the night\",\n calendarFoldNights: \"Fold the nights\",\n calendarOpenNights: ({ from, to }: { from: string; to: string }) => `Open the nights, ${from} to ${to}`,\n calendarUntil: ({ time }: { time: string }) => `until ${time}`,\n calendarNothingPlannedShort: \"Nothing planned\",\n calendarUnfoldDays: ({ count }: { count: number }): string => (count === 1 ? \"Show day\" : \"Show days\"),\n calendarDayCount: ({ count }: { count: number }) => `${count} days`,\n calendarDaySummary: ({ events, tasks }: { events: number; tasks: number }) =>\n [events ? `${events} ${events === 1 ? \"event\" : \"events\"}` : \"\", tasks ? `${tasks} ${tasks === 1 ? \"to-do\" : \"to-dos\"}` : \"\"]\n .filter(Boolean)\n .join(\" · \"),\n calendarMoreDays: \"More days load as you scroll …\",\n calendarAllDayRow: \"all day\",\n calendarAllDayRowShort: \"all day\",\n calendarAllDayAndDue: \"All day and due\",\n calendarDone: ({ title }: { title: string }) => `Done: ${title}`,\n calendarAllDone: \"All done for today\",\n calendarAllDoneShort: \"All done\",\n calendarDue: ({ time }: { time: string }) => `due ${time}`,\n calendarFits: \"fits\",\n calendarTooShort: ({ duration }: { duration: string }) => `${duration} too short`,\n calendarOverlaps: ({ title }: { title: string }) => `overlaps “${title}”`,\n calendarWeekNumber: ({ week }: { week: number }) => `W ${week}`,\n calendarWeek: \"Week\",\n calendarDays: \"Days\",\n calendarKeyboardHelp: \"Arrow keys move between days, events, and free time. Enter opens or creates, Space checks off.\",\n calendarDayKeyboardHelp: \"Tab moves through the events and free time of each day. Enter opens or creates, Space checks off.\",\n calendarShortcuts: \"Keyboard shortcuts\",\n calendarShortcutsNote: \"Shortcuts work anywhere on this page, except while you type in a text field or a dialog is open.\",\n calendarCommandToday: \"Today\",\n calendarCommandTodayDescription: \"Show today in the calendar\",\n calendarCommandNext: \"Next\",\n calendarCommandNextDescription: \"Show the next day, week, month, or year\",\n calendarCommandPrevious: \"Previous\",\n calendarCommandPreviousDescription: \"Show the previous day, week, month, or year\",\n calendarCommandView: ({ view }: { view: string }) => `${view} view`,\n calendarCommandViewDescription: ({ view }: { view: string }) => `Switch the calendar to the ${view.toLowerCase()} view`,\n calendarCommandGoTo: \"Go to\",\n calendarCommandGoToDescription: \"Jump to a date or a week number\",\n calendarGoToPlaceholder: \"Date, such as 3/15, Friday, March, or W 12\",\n calendarGoToHint: \"Enter a date, a weekday, a month, or a week number.\",\n calendarGoToUnknown: \"Not recognized.\",\n calendarGoToGo: \"Go\",\n calendarStateDone: \"done\",\n calendarStateOverdue: \"overdue\",\n calendarOverdue: \"Overdue\",\n calendarDoneState: \"Done\",\n calendarPeopleCount: ({ count }: { count: number }) => (count === 1 ? \"1 person\" : `${count} people`),\n calendarLinkCount: ({ count }: { count: number }) => (count === 1 ? \"1 link\" : `${count} links`),\n calendarPeople: \"People\",\n calendarLinks: \"Links\",\n calendarOpenEvent: \"Open\",\n calendarEventDetail: ({ title }: { title: string }) => `Details: ${title}`,\n },\n de: {\n calendarView: \"Kalenderansicht\",\n openDate: ({ label }) => `${label} öffnen`,\n createEventOn: ({ label }) => `Termin am ${label} erstellen`,\n hiddenOverlappingEvents: ({ count }) => `${count} ausgeblendete überlappende Termine`,\n calendarEventTime: ({ title, start, end }) => `${title}, ${start} bis ${end}`,\n weekShort: \"KW\",\n noEvents: \"Keine Termine\",\n moveEvent: \"Termin verschieben\",\n resizeEvent: \"Termindauer ändern\",\n calendarMoreEvents: ({ count }) => `+${count} weitere`,\n calendarMoreEventsOn: ({ count, label }) => `${count} weitere am ${label}`,\n calendarSelectionActions: \"Aktionen für die ausgewählten Tage\",\n calendarQuickCreate: \"Neuer Eintrag\",\n calendarSelectedDays: ({ start, end, count }) => `${start} – ${end} · ${count} Tage`,\n calendarOpenDay: \"Tag öffnen\",\n calendarOpenWeek: \"Woche öffnen\",\n calendarOpenWeekNumber: ({ week }) => `KW ${week}, Woche öffnen`,\n calendarClearSelection: \"Auswahl aufheben\",\n calendarNewEvent: \"Neuer Termin\",\n calendarNothingPlanned: \"Nichts geplant.\",\n calendarContinuesFrom: ({ day, month }) => `seit ${day}.${month ? ` ${month}` : \"\"}`,\n calendarContinuesUntil: ({ day, month }) => `bis ${day}.${month ? ` ${month}` : \"\"}`,\n calendarDuration: ({ minutes }) => {\n if (minutes < 60) return `${minutes} Min`;\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return rest ? `${hours} Std. ${rest}` : `${hours} Std.`;\n },\n calendarFree: ({ duration }) => `${duration} frei`,\n calendarCreateAt: ({ start, end }) => `Termin ${start}–${end} anlegen`,\n calendarFreeAction: ({ duration, from, to, start, end }) => `${duration} frei, ${from} bis ${to}. Termin ${start}–${end} anlegen`,\n calendarRemaining: ({ duration }) => `noch ${duration}`,\n calendarSoon: ({ title, duration }) => `${title} in ${duration}`,\n calendarNight: ({ from, to }) => `Nacht · ${from} → ${to}`,\n calendarNightHours: ({ from, to }) => `Nacht · ${from}–${to}`,\n calendarFoldNight: \"einklappen\",\n calendarOpenNight: \"Nacht ausklappen\",\n calendarFoldNights: \"Nächte einklappen\",\n calendarOpenNights: ({ from, to }) => `Nächte ausklappen, ${from}–${to} Uhr`,\n calendarUntil: ({ time }) => `bis ${time}`,\n calendarNothingPlannedShort: \"Nichts geplant\",\n calendarUnfoldDays: ({ count }) => (count === 1 ? \"Tag aufklappen\" : \"Tage aufklappen\"),\n calendarDayCount: ({ count }) => `${count} Tage`,\n calendarDaySummary: ({ events, tasks }) =>\n [events ? `${events} ${events === 1 ? \"Termin\" : \"Termine\"}` : \"\", tasks ? `${tasks} ${tasks === 1 ? \"To-do\" : \"To-dos\"}` : \"\"]\n .filter(Boolean)\n .join(\" · \"),\n calendarMoreDays: \"Weitere Tage laden beim Scrollen …\",\n calendarAllDayRow: \"ganztägig\",\n calendarAllDayRowShort: \"ganzt.\",\n calendarAllDayAndDue: \"Ganztägig und fällig\",\n calendarDone: ({ title }) => `Erledigt: ${title}`,\n calendarAllDone: \"Alles für heute erledigt\",\n calendarAllDoneShort: \"Alles erledigt\",\n calendarDue: ({ time }) => `fällig ${time}`,\n calendarFits: \"passt\",\n calendarTooShort: ({ duration }) => `${duration} zu kurz`,\n calendarOverlaps: ({ title }) => `überschneidet „${title}“`,\n calendarWeekNumber: ({ week }) => `KW ${week}`,\n calendarWeek: \"Woche\",\n calendarDays: \"Tage\",\n calendarKeyboardHelp: \"Pfeiltasten wechseln zwischen Tagen, Terminen und freier Zeit. Enter öffnet oder legt an, Leertaste hakt ab.\",\n calendarDayKeyboardHelp:\n \"Tab wechselt zwischen den Terminen und der freien Zeit jedes Tages. Enter öffnet oder legt an, Leertaste hakt ab.\",\n calendarShortcuts: \"Tastenkürzel\",\n calendarShortcutsNote: \"Kürzel wirken überall auf dieser Seite, nur nicht beim Tippen in einem Eingabefeld oder bei offenem Dialog.\",\n calendarCommandToday: \"Heute\",\n calendarCommandTodayDescription: \"Im Kalender heute zeigen\",\n calendarCommandNext: \"Weiter\",\n calendarCommandNextDescription: \"Nächsten Tag, nächste Woche, nächsten Monat oder nächstes Jahr zeigen\",\n calendarCommandPrevious: \"Zurück\",\n calendarCommandPreviousDescription: \"Vorigen Tag, vorige Woche, vorigen Monat oder voriges Jahr zeigen\",\n calendarCommandView: ({ view }) => `Ansicht ${view}`,\n calendarCommandViewDescription: ({ view }) => `Den Kalender als ${view} zeigen`,\n calendarCommandGoTo: \"Gehe zu\",\n calendarCommandGoToDescription: \"Zu einem Datum oder einer Kalenderwoche springen\",\n calendarGoToPlaceholder: \"Datum, z. B. 15.3., Freitag, März oder KW 12\",\n calendarGoToHint: \"Datum, Wochentag, Monat oder Kalenderwoche eingeben.\",\n calendarGoToUnknown: \"Nicht erkannt.\",\n calendarGoToGo: \"Springen\",\n calendarStateDone: \"erledigt\",\n calendarStateOverdue: \"überfällig\",\n calendarOverdue: \"Überfällig\",\n calendarDoneState: \"Erledigt\",\n calendarPeopleCount: ({ count }) => (count === 1 ? \"1 Person\" : `${count} Personen`),\n calendarLinkCount: ({ count }) => (count === 1 ? \"1 Link\" : `${count} Links`),\n calendarPeople: \"Personen\",\n calendarLinks: \"Links\",\n calendarOpenEvent: \"Öffnen\",\n calendarEventDetail: ({ title }) => `Details: ${title}`,\n },\n },\n});\n\nexport type CalendarMessages = ReturnType<(typeof calendarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale, like the rest of @k2b/ui. */\nexport const useCalendarMessages = (): (() => CalendarMessages) => {\n const locale = useLocale();\n return () => calendarMessages.resolve([locale()]).t;\n};\n\nexport const checkCalendarMessages = () => calendarMessages.check();\n"],"mappings":"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","ignoreList":[]}