@open-webapp/calendar 0.8.1 → 0.8.2
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/README.md +2 -0
- package/dist/react/CalendarPane.js +1 -1
- package/dist/styles.css +26 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -201,6 +201,8 @@ import '@open-webapp/calendar/styles.css';
|
|
|
201
201
|
|
|
202
202
|
### Theme behavior
|
|
203
203
|
|
|
204
|
+
Timed meeting headers keep the time left and `[Join] [RSVP glyph]` right, with a 4px gap; title and organizer follow below. Join retains its text and fits it at an intrinsic width, matching the RSVP glyph's 24px outer height, 1px border, 4px radius and exact status foreground/background/border for accepted, tentative, needsAction and declined in every theme. Hover underlines Join; keyboard focus has a visible theme-colored outline. Without a meeting URL only the right-aligned RSVP glyph appears. The pair stays together when a narrow header wraps. Join keeps its original URL, new-tab attributes and click propagation behavior.
|
|
205
|
+
|
|
204
206
|
Both components follow the OS/browser `prefers-color-scheme` preference live in `'system'` mode; omitting `theme` preserves this default. Explicit `'light'` and `'dark'` ignore OS changes. Hosts can change the prop on a mounted component (including back to `'system'` or `undefined`) without remounting, closing an open dropdown, losing its search query, focus or keyboard-active option, changing selected calendars, or resetting the pane's current RSVP selection. Theme changes do not trigger selection callbacks or controller refreshes.
|
|
205
207
|
|
|
206
208
|
Each pane forwards its requested mode to its unified grouped footer selector, including both account groups, account-local actions and the shared search. The single-trigger structure and cross-account keyboard navigation are preserved; the approved trigger geometry exception is described above. Standalone selectors choose their own mode: an omitted/system selector follows the OS even inside an explicitly dark or light pane. Adjacent and nested instances can use opposite modes independently; no document/body theme switch is applied.
|
|
@@ -357,7 +357,7 @@ export function CalendarPane(props) {
|
|
|
357
357
|
else {
|
|
358
358
|
timedEventRefs.current.delete(eventKey);
|
|
359
359
|
}
|
|
360
|
-
}, children: [_jsxs("div", { className: "calendar-event-header", children: [_jsx("span", { className: "calendar-event-time", children: formatTimeRange(event) }), event.joinUrl && (_jsx("a", { className: "calendar-event-join", href: event.joinUrl, target: "_blank", rel: "noopener noreferrer", onClick: (e) => e.stopPropagation(), children: "Join" })), _jsx(RsvpStatusIcon, { status: event.selfResponseStatus })] }), _jsxs("div", { className: "calendar-event-title-wrap", children: [hasLink ? (_jsx("a", { className: "calendar-event-title-link", href: event.htmlLink, target: "_blank", rel: "noopener noreferrer", onClick: (e) => {
|
|
360
|
+
}, children: [_jsxs("div", { className: "calendar-event-header", children: [_jsx("span", { className: "calendar-event-time", children: formatTimeRange(event) }), _jsxs("div", { className: "calendar-event-actions", children: [event.joinUrl && (_jsx("a", { className: "calendar-event-join", href: event.joinUrl, target: "_blank", rel: "noopener noreferrer", onClick: (e) => e.stopPropagation(), children: "Join" })), _jsx(RsvpStatusIcon, { status: event.selfResponseStatus })] })] }), _jsxs("div", { className: "calendar-event-title-wrap", children: [hasLink ? (_jsx("a", { className: "calendar-event-title-link", href: event.htmlLink, target: "_blank", rel: "noopener noreferrer", onClick: (e) => {
|
|
361
361
|
if (isDesktop &&
|
|
362
362
|
e.button === 0 &&
|
|
363
363
|
!e.ctrlKey &&
|
package/dist/styles.css
CHANGED
|
@@ -343,10 +343,10 @@
|
|
|
343
343
|
background: var(--calendar-card-background);
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
+
.calendar-event-join,
|
|
346
347
|
.calendar-event-rsvp {
|
|
347
348
|
display: inline-flex;
|
|
348
349
|
flex: none;
|
|
349
|
-
margin-left: auto;
|
|
350
350
|
padding: 4px;
|
|
351
351
|
border: 1px solid var(--status-border);
|
|
352
352
|
border-radius: 4px;
|
|
@@ -354,24 +354,32 @@
|
|
|
354
354
|
color: var(--status-text);
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
+
.calendar-event-rsvp {
|
|
358
|
+
margin-left: auto;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.calendar-event-row--rsvp-accepted,
|
|
357
362
|
.calendar-event-rsvp--accepted {
|
|
358
363
|
--status-text: var(--calendar-status-accepted-text);
|
|
359
364
|
--status-background: var(--calendar-status-accepted-background);
|
|
360
365
|
--status-border: var(--calendar-status-accepted-border);
|
|
361
366
|
}
|
|
362
367
|
|
|
368
|
+
.calendar-event-row--rsvp-tentative,
|
|
363
369
|
.calendar-event-rsvp--tentative {
|
|
364
370
|
--status-text: var(--calendar-status-tentative-text);
|
|
365
371
|
--status-background: var(--calendar-status-tentative-background);
|
|
366
372
|
--status-border: var(--calendar-status-tentative-border);
|
|
367
373
|
}
|
|
368
374
|
|
|
375
|
+
.calendar-event-row--rsvp-needsAction,
|
|
369
376
|
.calendar-event-rsvp--needsAction {
|
|
370
377
|
--status-text: var(--calendar-status-needsAction-text);
|
|
371
378
|
--status-background: var(--calendar-status-needsAction-background);
|
|
372
379
|
--status-border: var(--calendar-status-needsAction-border);
|
|
373
380
|
}
|
|
374
381
|
|
|
382
|
+
.calendar-event-row--rsvp-declined,
|
|
375
383
|
.calendar-event-rsvp--declined {
|
|
376
384
|
--status-text: var(--calendar-status-declined-text);
|
|
377
385
|
--status-background: var(--calendar-status-declined-background);
|
|
@@ -380,11 +388,20 @@
|
|
|
380
388
|
|
|
381
389
|
.calendar-event-header {
|
|
382
390
|
display: flex;
|
|
391
|
+
flex-wrap: wrap;
|
|
383
392
|
justify-content: space-between;
|
|
384
393
|
align-items: center;
|
|
385
394
|
gap: 8px;
|
|
386
395
|
}
|
|
387
396
|
|
|
397
|
+
.calendar-event-actions {
|
|
398
|
+
display: flex;
|
|
399
|
+
flex: none;
|
|
400
|
+
align-items: center;
|
|
401
|
+
gap: 4px;
|
|
402
|
+
margin-left: auto;
|
|
403
|
+
}
|
|
404
|
+
|
|
388
405
|
.calendar-event-title-link {
|
|
389
406
|
align-self: flex-start;
|
|
390
407
|
text-decoration: none;
|
|
@@ -468,16 +485,20 @@
|
|
|
468
485
|
.calendar-event-join {
|
|
469
486
|
font-size: 12px;
|
|
470
487
|
font-weight: 500;
|
|
471
|
-
|
|
488
|
+
line-height: 14px;
|
|
472
489
|
cursor: pointer;
|
|
473
490
|
text-decoration: none;
|
|
474
491
|
padding: 4px 8px;
|
|
475
|
-
|
|
476
|
-
border-radius: 4px;
|
|
492
|
+
white-space: nowrap;
|
|
477
493
|
}
|
|
478
494
|
|
|
479
495
|
.calendar-event-join:hover {
|
|
480
|
-
|
|
496
|
+
text-decoration: underline;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.calendar-event-join:focus-visible {
|
|
500
|
+
outline: 2px solid var(--calendar-focus);
|
|
501
|
+
outline-offset: 2px;
|
|
481
502
|
}
|
|
482
503
|
|
|
483
504
|
.calendar-event-row--current,
|