@atmo-dev/kit 0.9.0 → 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/README.md +27 -429
- package/dist/components/AccountMenu.svelte +7 -7
- package/dist/components/Avatar.svelte +1 -1
- package/dist/components/Badge.svelte +3 -3
- package/dist/components/Button.svelte +4 -3
- package/dist/components/Checkbox.svelte +31 -1
- package/dist/{events → components}/DatePicker.svelte +3 -3
- package/dist/components/ExternalEmbed.svelte +9 -6
- package/dist/components/GrainAlbumPicker.svelte +18 -9
- package/dist/components/GrainAlbumView.svelte +15 -6
- package/dist/components/Heading.svelte +1 -1
- package/dist/components/IconRail.svelte +11 -9
- package/dist/components/InlineEditor.svelte +3 -3
- package/dist/components/InsetImage.svelte +1 -1
- package/dist/components/Label.svelte +1 -1
- package/dist/components/LinkCard.svelte +6 -4
- package/dist/components/Modal.svelte +3 -3
- package/dist/components/NestedComments.svelte +9 -6
- package/dist/components/PhotoGrid.svelte +1 -1
- package/dist/components/Popover.svelte +1 -1
- package/dist/components/PostComposer.svelte +2 -2
- package/dist/components/PostContent.svelte +11 -9
- package/dist/components/PostVideo.svelte +1 -1
- package/dist/components/RichText.svelte +19 -7
- package/dist/components/Select.svelte +5 -2
- package/dist/components/Select.svelte.d.ts +2 -0
- package/dist/components/SocialClientPicker.svelte +1 -1
- package/dist/components/StreamplacePicker.svelte +1 -1
- package/dist/components/Subheading.svelte +4 -2
- package/dist/components/Surface.svelte +3 -2
- package/dist/components/Tabs.svelte +2 -2
- package/dist/{events → components}/TimePicker.svelte +10 -7
- package/dist/{events → components}/TimezonePicker.svelte +15 -7
- package/dist/components/ToggleGroup.svelte +1 -1
- package/dist/components/ToggleGroupItem.svelte +1 -1
- package/dist/components/UserProfile.svelte +16 -9
- package/dist/components/WorkspaceSidebar.svelte +1 -1
- package/dist/components/legal/LegalDocument.svelte +9 -3
- package/dist/components/legal/LegalFooter.svelte +2 -2
- package/dist/components/login/ActorSearchField.svelte +10 -6
- package/dist/components/login/AtmosphereApps.svelte +1 -1
- package/dist/components/login/LoginForm.svelte +15 -9
- package/dist/components/login/PermissionFields.svelte +9 -2
- package/dist/components/login/RecentAccounts.svelte +5 -3
- package/dist/events/EventAttendees.svelte +9 -3
- package/dist/events/EventCard.svelte +7 -5
- package/dist/events/EventComments.svelte +3 -3
- package/dist/events/EventEditor.svelte +20 -9
- package/dist/events/EventRsvp.svelte +10 -6
- package/dist/events/EventView.svelte +21 -7
- package/dist/events/StarterPackButton.svelte +3 -3
- package/dist/events/ThemePicker.svelte +7 -7
- package/dist/events/ThumbnailPresets.svelte +1 -1
- package/dist/events/VodPlayer.svelte +1 -1
- package/dist/events/editor/LinksSection.svelte +7 -3
- package/dist/events/editor/LocationSection.svelte +1 -1
- package/dist/events/editor/RecurringModal.svelte +6 -4
- package/dist/events/editor/ThemeSection.svelte +3 -1
- package/dist/events/event-view/EventDateBlock.svelte +3 -3
- package/dist/events/event-view/EventHostedBy.svelte +6 -2
- package/dist/events/event-view/EventLinksList.svelte +2 -2
- package/dist/events/event-view/EventLocationBlock.svelte +9 -5
- package/dist/events/event-view/EventLocationMap.svelte +4 -2
- package/dist/events/schedule/ConferenceTimetable.svelte +7 -7
- package/dist/events/schedule/DaySchedule.svelte +2 -2
- package/dist/events/schedule/ScheduleEventCell.svelte +2 -2
- package/dist/events/themes/Matrix.svelte +12 -6
- package/dist/events.d.ts +5 -5
- package/dist/events.js +6 -5
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/social/mention-suggestions.js +4 -4
- package/dist/styles.d.ts +2 -2
- package/dist/styles.js +2 -2
- package/dist/theme.css +23 -44
- package/dist/theme.js +4 -12
- package/package.json +1 -1
- /package/dist/{events → components}/DatePicker.svelte.d.ts +0 -0
- /package/dist/{events → components}/DateTimePicker.svelte +0 -0
- /package/dist/{events → components}/DateTimePicker.svelte.d.ts +0 -0
- /package/dist/{events → components}/ImageDropper.svelte +0 -0
- /package/dist/{events → components}/ImageDropper.svelte.d.ts +0 -0
- /package/dist/{events → components}/TimePicker.svelte.d.ts +0 -0
- /package/dist/{events → components}/TimezonePicker.svelte.d.ts +0 -0
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
import { Avatar, Button, ToggleGroup, ToggleGroupItem } from '../index.js';
|
|
5
5
|
import { onMount, untrack } from 'svelte';
|
|
6
6
|
import { InlineEditor, type Editor } from '../index.js';
|
|
7
|
-
import DateTimePicker from '
|
|
8
|
-
import TimezonePicker from '
|
|
7
|
+
import DateTimePicker from '../components/DateTimePicker.svelte';
|
|
8
|
+
import TimezonePicker from '../components/TimezonePicker.svelte';
|
|
9
9
|
import { parseDateTime } from '@internationalized/date';
|
|
10
10
|
import { isoToDatetimeLocalInTz } from './date-format.js';
|
|
11
11
|
import type { FlatEventRecord } from './contrail.js';
|
|
@@ -386,7 +386,7 @@
|
|
|
386
386
|
<ToggleGroupItem value="public">Public</ToggleGroupItem>
|
|
387
387
|
<ToggleGroupItem value="unlisted">Unlisted</ToggleGroupItem>
|
|
388
388
|
</ToggleGroup>
|
|
389
|
-
<div class="mt-1.5 text-xs text-
|
|
389
|
+
<div class="mt-1.5 text-xs text-base-600 dark:text-base-400">
|
|
390
390
|
{#if visibility === 'public'}
|
|
391
391
|
Anyone can view and it appears in discovery.
|
|
392
392
|
{:else}
|
|
@@ -398,11 +398,11 @@
|
|
|
398
398
|
<!-- Date row -->
|
|
399
399
|
<div class="mb-5 grid min-w-0 gap-2">
|
|
400
400
|
<div class="flex min-w-0 items-center gap-2">
|
|
401
|
-
<span class="w-9 shrink-0 text-sm text-
|
|
401
|
+
<span class="w-9 shrink-0 text-sm text-base-600 dark:text-base-400">Start</span>
|
|
402
402
|
<DateTimePicker bind:value={startsAt} label="Start" required />
|
|
403
403
|
</div>
|
|
404
404
|
<div class="flex min-w-0 items-center gap-2">
|
|
405
|
-
<span class="w-9 shrink-0 text-sm text-
|
|
405
|
+
<span class="w-9 shrink-0 text-sm text-base-600 dark:text-base-400">End</span>
|
|
406
406
|
<DateTimePicker
|
|
407
407
|
bind:value={endsAt}
|
|
408
408
|
label="End"
|
|
@@ -419,7 +419,11 @@
|
|
|
419
419
|
|
|
420
420
|
<!-- About Event -->
|
|
421
421
|
<div class="mt-8 mb-8">
|
|
422
|
-
<p
|
|
422
|
+
<p
|
|
423
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
424
|
+
>
|
|
425
|
+
About
|
|
426
|
+
</p>
|
|
423
427
|
<textarea
|
|
424
428
|
aria-label="Event description"
|
|
425
429
|
bind:value={description}
|
|
@@ -427,11 +431,14 @@
|
|
|
427
431
|
placeholder="What's this event about? @mentions, #hashtags and links will be detected automatically."
|
|
428
432
|
class="w-full resize-none border-0 bg-transparent px-0 leading-relaxed text-base-700 placeholder:text-base-500 focus:border-0 focus:ring-0 focus:outline-none dark:text-base-300 dark:placeholder:text-base-500"
|
|
429
433
|
style="field-sizing: content;"></textarea>
|
|
430
|
-
<p class="mt-2 text-xs text-
|
|
434
|
+
<p class="mt-2 text-xs text-base-600 dark:text-base-400">
|
|
431
435
|
Add a hashtag like <span class="font-medium">#webdev</span> or
|
|
432
436
|
<span class="font-medium">#music</span>
|
|
433
437
|
to have this event appear under a
|
|
434
|
-
<a
|
|
438
|
+
<a
|
|
439
|
+
href="/topics"
|
|
440
|
+
class="text-accent-700 underline underline-offset-2 dark:text-accent-300">topic</a
|
|
441
|
+
>.
|
|
435
442
|
</p>
|
|
436
443
|
</div>
|
|
437
444
|
|
|
@@ -462,7 +469,11 @@
|
|
|
462
469
|
|
|
463
470
|
<!-- Hosted By -->
|
|
464
471
|
<div class="order-3 md:order-0 md:col-start-1">
|
|
465
|
-
<p
|
|
472
|
+
<p
|
|
473
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
474
|
+
>
|
|
475
|
+
Hosted By
|
|
476
|
+
</p>
|
|
466
477
|
<div class="flex items-center gap-2.5">
|
|
467
478
|
<Avatar src={viewer.avatar} name={hostName} class="size-8 shrink-0" />
|
|
468
479
|
<span class="truncate text-sm font-medium text-base-900 dark:text-base-100">
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
|
|
99
99
|
{#if rsvpExpected !== false || (viewer.isLoggedIn && rsvpStatus)}
|
|
100
100
|
<div
|
|
101
|
-
class="mt-7 mb-2 flex min-h-25 flex-col justify-center rounded-panel bg-
|
|
101
|
+
class="mt-7 mb-2 flex min-h-25 flex-col justify-center rounded-panel bg-[color-mix(in_srgb,var(--base-100)_75%,var(--base-200))] p-4 shadow-[inset_0_2px_4px_color-mix(in_srgb,var(--base-950)_8%,transparent),inset_0_5px_12px_color-mix(in_srgb,var(--base-950)_2%,transparent)] dark:bg-base-950 dark:shadow-[inset_0_2px_4px_#0006,inset_0_5px_12px_#0002]"
|
|
102
102
|
>
|
|
103
103
|
{#if !viewer.isLoggedIn}
|
|
104
104
|
<div class="flex items-center justify-between gap-4">
|
|
@@ -114,8 +114,10 @@
|
|
|
114
114
|
{:else if rsvpStatus === 'going'}
|
|
115
115
|
<div class="flex items-center justify-between">
|
|
116
116
|
<div class="flex items-center gap-3">
|
|
117
|
-
<div
|
|
118
|
-
|
|
117
|
+
<div
|
|
118
|
+
class="flex size-8 items-center justify-center rounded-full bg-accent-50 dark:bg-[color-mix(in_srgb,var(--accent-950)_65%,var(--base-950))]"
|
|
119
|
+
>
|
|
120
|
+
<Icon img={Check} size={16} class="text-accent-700 dark:text-accent-300" />
|
|
119
121
|
</div>
|
|
120
122
|
<p class="font-semibold text-base-900 dark:text-base-50">You're Going</p>
|
|
121
123
|
</div>
|
|
@@ -124,8 +126,10 @@
|
|
|
124
126
|
{:else if rsvpStatus === 'interested'}
|
|
125
127
|
<div class="flex items-center justify-between">
|
|
126
128
|
<div class="flex items-center gap-3">
|
|
127
|
-
<div
|
|
128
|
-
|
|
129
|
+
<div
|
|
130
|
+
class="flex size-8 items-center justify-center rounded-full bg-accent-50 dark:bg-[color-mix(in_srgb,var(--accent-950)_65%,var(--base-950))]"
|
|
131
|
+
>
|
|
132
|
+
<Icon img={Star} size={16} class="text-accent-700 dark:text-accent-300" />
|
|
129
133
|
</div>
|
|
130
134
|
<p class="font-semibold text-base-900 dark:text-base-50">You're Interested</p>
|
|
131
135
|
</div>
|
|
@@ -146,7 +150,7 @@
|
|
|
146
150
|
{:else}
|
|
147
151
|
{#if viewer.isLoggedIn}
|
|
148
152
|
<div class="mb-4 flex items-center gap-2">
|
|
149
|
-
<span class="text-sm text-
|
|
153
|
+
<span class="text-sm text-base-600 dark:text-base-400">Attend as</span>
|
|
150
154
|
<Avatar
|
|
151
155
|
src={viewer.avatar}
|
|
152
156
|
name={viewer.displayName || viewer.handle || viewer.did || 'Account'}
|
|
@@ -260,7 +260,7 @@
|
|
|
260
260
|
src={displayImage.url}
|
|
261
261
|
alt={displayImage.alt}
|
|
262
262
|
loading="eager"
|
|
263
|
-
class="mb-8 block w-full rounded-panel border border-
|
|
263
|
+
class="mb-8 block w-full rounded-panel border border-base-300 object-cover dark:border-[color-mix(in_srgb,var(--base-800)_80%,var(--base-950))]"
|
|
264
264
|
style:aspect-ratio={frameAspectRatio}
|
|
265
265
|
/>
|
|
266
266
|
{/if}
|
|
@@ -277,12 +277,12 @@
|
|
|
277
277
|
src={displayImage.url}
|
|
278
278
|
alt={displayImage.alt}
|
|
279
279
|
loading="eager"
|
|
280
|
-
class="block w-full rounded-panel border border-
|
|
280
|
+
class="block w-full rounded-panel border border-base-300 object-cover dark:border-[color-mix(in_srgb,var(--base-800)_80%,var(--base-950))]"
|
|
281
281
|
style:aspect-ratio={frameAspectRatio}
|
|
282
282
|
/>
|
|
283
283
|
{:else if !showBanner}
|
|
284
284
|
<div
|
|
285
|
-
class="aspect-square w-full overflow-hidden rounded-panel border border-
|
|
285
|
+
class="aspect-square w-full overflow-hidden rounded-panel border border-base-300 dark:border-[color-mix(in_srgb,var(--base-800)_80%,var(--base-950))] [&>svg]:h-full [&>svg]:w-full"
|
|
286
286
|
>
|
|
287
287
|
<Avatar
|
|
288
288
|
size={256}
|
|
@@ -328,7 +328,11 @@
|
|
|
328
328
|
<div
|
|
329
329
|
class="mt-8 mb-2 justify-center rounded-2xl border border-base-200 bg-base-100 p-4 dark:border-base-800 dark:bg-base-950/50"
|
|
330
330
|
>
|
|
331
|
-
<p
|
|
331
|
+
<p
|
|
332
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
333
|
+
>
|
|
334
|
+
Part of
|
|
335
|
+
</p>
|
|
332
336
|
<EventCard event={data.parentEvent} actor={parentActor} />
|
|
333
337
|
<Button
|
|
334
338
|
href={data.parentScheduleUrl ?? `/p/${parentActor}/e/${data.parentEvent.rkey}`}
|
|
@@ -361,7 +365,11 @@
|
|
|
361
365
|
<!-- Live stream -->
|
|
362
366
|
{#if isOngoing && streamPlaceHandle}
|
|
363
367
|
<div class="mt-8 mb-8">
|
|
364
|
-
<p
|
|
368
|
+
<p
|
|
369
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
370
|
+
>
|
|
371
|
+
Live now
|
|
372
|
+
</p>
|
|
365
373
|
<StreamPlacePlayer handle={streamPlaceHandle} title={eventData.name} />
|
|
366
374
|
</div>
|
|
367
375
|
{/if}
|
|
@@ -387,7 +395,9 @@
|
|
|
387
395
|
>{/each}
|
|
388
396
|
</ToggleGroup>
|
|
389
397
|
{:else}
|
|
390
|
-
<p
|
|
398
|
+
<p
|
|
399
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
400
|
+
>
|
|
391
401
|
{contentTabs[0].label}
|
|
392
402
|
</p>
|
|
393
403
|
{/if}
|
|
@@ -423,7 +433,11 @@
|
|
|
423
433
|
<!-- Recording -->
|
|
424
434
|
{#if data.vod}
|
|
425
435
|
<div class="mt-8 mb-8">
|
|
426
|
-
<p
|
|
436
|
+
<p
|
|
437
|
+
class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400"
|
|
438
|
+
>
|
|
439
|
+
Recording
|
|
440
|
+
</p>
|
|
427
441
|
<VodPlayer
|
|
428
442
|
playlistUrl={data.vod.playlistUrl}
|
|
429
443
|
title={eventData.name}
|
|
@@ -46,13 +46,13 @@
|
|
|
46
46
|
</script>
|
|
47
47
|
|
|
48
48
|
<div class="mt-4">
|
|
49
|
-
<p class="mb-1 text-xs text-
|
|
49
|
+
<p class="mb-1 text-xs text-base-600 dark:text-base-400">Follow attendees on {clientLabel}.</p>
|
|
50
50
|
{#if packUrl}
|
|
51
51
|
<a
|
|
52
52
|
href={packUrl}
|
|
53
53
|
target="_blank"
|
|
54
54
|
rel="noopener noreferrer"
|
|
55
|
-
class="rounded text-sm text-
|
|
55
|
+
class="rounded text-sm text-accent-700 underline-offset-4 hover:underline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-accent-700 dark:text-accent-300 dark:focus-visible:outline-accent-300"
|
|
56
56
|
>Starter pack ↗</a
|
|
57
57
|
>
|
|
58
58
|
{:else}
|
|
@@ -67,6 +67,6 @@
|
|
|
67
67
|
</Button>
|
|
68
68
|
{/if}
|
|
69
69
|
{#if message}
|
|
70
|
-
<p role="alert" class="mt-2 text-sm text-
|
|
70
|
+
<p role="alert" class="mt-2 text-sm text-base-600 dark:text-base-400">{message}</p>
|
|
71
71
|
{/if}
|
|
72
72
|
</div>
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<div class="flex flex-col gap-6">
|
|
46
46
|
<!-- Theme background -->
|
|
47
47
|
<div>
|
|
48
|
-
<p class="mb-2 text-xs font-medium text-
|
|
48
|
+
<p class="mb-2 text-xs font-medium text-base-600 dark:text-base-400">Background style</p>
|
|
49
49
|
<div class="flex flex-wrap gap-2">
|
|
50
50
|
{#each bgKeys as key (key)}
|
|
51
51
|
<button
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
<!-- Accent color -->
|
|
68
68
|
<div>
|
|
69
|
-
<p class="mb-2 text-xs font-medium text-
|
|
69
|
+
<p class="mb-2 text-xs font-medium text-base-600 dark:text-base-400">Accent color</p>
|
|
70
70
|
<div class="flex flex-wrap gap-2">
|
|
71
71
|
{#each accentColors as color (color.label)}
|
|
72
72
|
<button
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
aria-pressed={theme.accentColor === color.label}
|
|
76
76
|
class="size-7 cursor-pointer rounded-full border-2 transition-all {color.cls}
|
|
77
77
|
{theme.accentColor === color.label
|
|
78
|
-
? 'border-white ring-2 ring-
|
|
79
|
-
: 'border-transparent hover:border-
|
|
78
|
+
? 'border-white ring-2 ring-base-300 dark:ring-base-800'
|
|
79
|
+
: 'border-transparent hover:border-base-300 dark:hover:border-base-800'}"
|
|
80
80
|
onclick={() => (theme = { ...theme, accentColor: color.label })}
|
|
81
81
|
></button>
|
|
82
82
|
{/each}
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
|
|
86
86
|
<!-- Base color -->
|
|
87
87
|
<div>
|
|
88
|
-
<p class="mb-2 text-xs font-medium text-
|
|
88
|
+
<p class="mb-2 text-xs font-medium text-base-600 dark:text-base-400">Base color</p>
|
|
89
89
|
<div class="flex flex-wrap gap-2">
|
|
90
90
|
{#each baseColors as color (color.label)}
|
|
91
91
|
<button
|
|
@@ -94,8 +94,8 @@
|
|
|
94
94
|
aria-pressed={theme.baseColor === color.label}
|
|
95
95
|
class="size-7 cursor-pointer rounded-full border-2 transition-all {color.cls}
|
|
96
96
|
{theme.baseColor === color.label
|
|
97
|
-
? 'border-white ring-2 ring-
|
|
98
|
-
: 'border-transparent hover:border-
|
|
97
|
+
? 'border-white ring-2 ring-base-300 dark:ring-base-800'
|
|
98
|
+
: 'border-transparent hover:border-base-300 dark:hover:border-base-800'}"
|
|
99
99
|
onclick={() => (theme = { ...theme, baseColor: color.label })}
|
|
100
100
|
></button>
|
|
101
101
|
{/each}
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
</script>
|
|
50
50
|
|
|
51
51
|
<div class="flex flex-col gap-3">
|
|
52
|
-
<p class="text-xs font-medium text-
|
|
52
|
+
<p class="text-xs font-medium text-base-600 dark:text-base-400">Preset thumbnails</p>
|
|
53
53
|
<div class="grid grid-cols-3 gap-2" bind:this={containerEl}>
|
|
54
54
|
{#each presetKeys as key (key)}
|
|
55
55
|
<button
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
<div
|
|
137
137
|
class="flex aspect-video w-full items-center justify-center rounded-xl border border-base-200 bg-base-100 dark:border-base-800 dark:bg-base-900"
|
|
138
138
|
>
|
|
139
|
-
<p class="text-sm text-
|
|
139
|
+
<p class="text-sm text-base-600 dark:text-base-400">Failed to load video</p>
|
|
140
140
|
</div>
|
|
141
141
|
{:else}
|
|
142
142
|
<div
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
<Icon
|
|
66
66
|
img={provider === 'grain' ? Camera : provider === 'stream' ? Video : LinkIcon}
|
|
67
67
|
size={16}
|
|
68
|
-
class="shrink-0 text-
|
|
68
|
+
class="shrink-0 text-base-600 dark:text-base-400"
|
|
69
69
|
/>
|
|
70
70
|
<div class="min-w-0 flex-1">
|
|
71
71
|
<p class="truncate text-sm">
|
|
@@ -89,13 +89,17 @@
|
|
|
89
89
|
|
|
90
90
|
<div>
|
|
91
91
|
{#if ordinary.length}
|
|
92
|
-
<p class="mb-3 text-xs font-semibold tracking-wider text-
|
|
92
|
+
<p class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
93
|
+
Links
|
|
94
|
+
</p>
|
|
93
95
|
<div class="mb-4 space-y-3">
|
|
94
96
|
{#each ordinary as link, i (i)}{@render row(link)}{/each}
|
|
95
97
|
</div>
|
|
96
98
|
{/if}
|
|
97
99
|
{#if linked.length}
|
|
98
|
-
<p class="mb-3 text-xs font-semibold tracking-wider text-
|
|
100
|
+
<p class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
101
|
+
Linked records
|
|
102
|
+
</p>
|
|
99
103
|
<div class="mb-4 space-y-3">
|
|
100
104
|
{#each linked as link, i (i)}{@render row(
|
|
101
105
|
link,
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
<p class="font-medium text-base-900 dark:text-base-50">
|
|
137
137
|
{getLocationDisplayString(result.location)}
|
|
138
138
|
</p>
|
|
139
|
-
<p class="mt-0.5 truncate text-xs text-
|
|
139
|
+
<p class="mt-0.5 truncate text-xs text-base-600 dark:text-base-400">
|
|
140
140
|
{result.displayName}
|
|
141
141
|
</p>
|
|
142
142
|
</div>
|
|
@@ -219,7 +219,9 @@
|
|
|
219
219
|
</script>
|
|
220
220
|
|
|
221
221
|
<Modal bind:open title="Recurring events" dismissible={!creating}>
|
|
222
|
-
<p class="mt-1 text-sm text-
|
|
222
|
+
<p class="mt-1 text-sm text-base-600 dark:text-base-400">
|
|
223
|
+
Create multiple copies of this event at regular intervals.
|
|
224
|
+
</p>
|
|
223
225
|
|
|
224
226
|
<div class="mt-4 space-y-4">
|
|
225
227
|
<div>
|
|
@@ -276,7 +278,7 @@
|
|
|
276
278
|
<Checkbox bind:checked={numberInTitle} disabled={creating} aria-label="Number in title" />
|
|
277
279
|
<span class="text-sm font-medium text-base-700 dark:text-base-300">Number in title</span>
|
|
278
280
|
</div>
|
|
279
|
-
<p class="mt-1 text-xs text-
|
|
281
|
+
<p class="mt-1 text-xs text-base-600 dark:text-base-400">
|
|
280
282
|
{#if numberInTitle && detectedStartNumber !== null}
|
|
281
283
|
Titles will count up from #{detectedStartNumber + 1}
|
|
282
284
|
{:else if numberInTitle}
|
|
@@ -293,13 +295,13 @@
|
|
|
293
295
|
{/if}
|
|
294
296
|
|
|
295
297
|
{#if creating && created > 0}
|
|
296
|
-
<p class="mt-4 text-sm text-
|
|
298
|
+
<p class="mt-4 text-sm text-base-600 dark:text-base-400">
|
|
297
299
|
Created {created} of {count} events...
|
|
298
300
|
</p>
|
|
299
301
|
{/if}
|
|
300
302
|
|
|
301
303
|
{#if created > 0 && !creating}
|
|
302
|
-
<p class="mt-4 text-sm text-
|
|
304
|
+
<p class="mt-4 text-sm text-accent-700 dark:text-accent-300">
|
|
303
305
|
Successfully created {created} recurring events!
|
|
304
306
|
</p>
|
|
305
307
|
{/if}
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
</script>
|
|
11
11
|
|
|
12
12
|
<div>
|
|
13
|
-
<p class="mb-3 text-xs font-semibold tracking-wider text-
|
|
13
|
+
<p class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
14
|
+
Theme
|
|
15
|
+
</p>
|
|
14
16
|
<Button variant="secondary" size="sm" onclick={() => (showModal = true)}>
|
|
15
17
|
<Icon img={Palette} size={16} />
|
|
16
18
|
{themeBackgrounds[theme.name] || theme.name}
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
|
|
15
15
|
<div class="mb-4 flex items-center gap-4">
|
|
16
16
|
<div
|
|
17
|
-
class="flex size-12 shrink-0 flex-col items-center justify-center overflow-hidden rounded-ui bg-
|
|
17
|
+
class="flex size-12 shrink-0 flex-col items-center justify-center overflow-hidden rounded-ui bg-[color-mix(in_srgb,var(--base-100)_75%,var(--base-200))] shadow-[inset_0_2px_4px_color-mix(in_srgb,var(--base-950)_8%,transparent),inset_0_5px_12px_color-mix(in_srgb,var(--base-950)_2%,transparent)] dark:bg-base-950 dark:shadow-[inset_0_2px_4px_#0006,inset_0_5px_12px_#0002]"
|
|
18
18
|
>
|
|
19
|
-
<span class="text-[9px] leading-none font-semibold text-
|
|
19
|
+
<span class="text-[9px] leading-none font-semibold text-base-600 dark:text-base-400">
|
|
20
20
|
{formatMonth(startDate)}
|
|
21
21
|
</span>
|
|
22
22
|
<span class="text-lg leading-tight font-bold text-base-900 dark:text-base-50">
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
- {formatWeekday(endDate)}, {formatFullDate(endDate)}
|
|
31
31
|
{/if}
|
|
32
32
|
</p>
|
|
33
|
-
<p class="flex flex-wrap items-center gap-2 text-sm text-
|
|
33
|
+
<p class="flex flex-wrap items-center gap-2 text-sm text-base-600 dark:text-base-400">
|
|
34
34
|
<span>
|
|
35
35
|
{formatTime(startDate)}
|
|
36
36
|
{#if endDate && isSameDay}
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
</script>
|
|
19
19
|
|
|
20
20
|
<div>
|
|
21
|
-
<p class="mb-3 text-xs font-semibold tracking-wider text-
|
|
21
|
+
<p class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
22
|
+
Hosted By
|
|
23
|
+
</p>
|
|
22
24
|
<a
|
|
23
25
|
href={hostUrl}
|
|
24
26
|
class="flex items-center gap-2.5 font-medium text-base-900 transition-opacity hover:opacity-80 dark:text-base-100"
|
|
@@ -36,7 +38,9 @@
|
|
|
36
38
|
|
|
37
39
|
{#if speakers.length > 0}
|
|
38
40
|
<div>
|
|
39
|
-
<p class="mb-3 text-xs font-semibold tracking-wider text-
|
|
41
|
+
<p class="mb-3 text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
42
|
+
Speakers
|
|
43
|
+
</p>
|
|
40
44
|
<div class="space-y-2">
|
|
41
45
|
{#each speakers as speaker, i (speaker.id || i)}
|
|
42
46
|
{#if speaker.handle}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
{#if links.length}
|
|
15
15
|
<div>
|
|
16
|
-
<p class="mb-3 text-xs font-medium text-
|
|
16
|
+
<p class="mb-3 text-xs font-medium text-base-600 dark:text-base-400">Links</p>
|
|
17
17
|
<div class="space-y-3">
|
|
18
18
|
<!-- These rows are stateless; equivalent URLs and exact duplicate entries are valid. -->
|
|
19
19
|
<!-- eslint-disable-next-line svelte/require-each-key -->
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
href={link.uri}
|
|
23
23
|
target="_blank"
|
|
24
24
|
rel="noopener noreferrer"
|
|
25
|
-
class="flex items-center gap-2 rounded-sm text-sm text-
|
|
25
|
+
class="flex items-center gap-2 rounded-sm text-sm text-base-600 transition-colors hover:text-accent-700 dark:text-base-400 dark:hover:text-accent-300"
|
|
26
26
|
><Icon img={Link} size={15} /><span class="truncate"
|
|
27
27
|
>{link.name || link.uri.replace(/^https?:\/\//, '')}</span
|
|
28
28
|
></a
|
|
@@ -13,13 +13,17 @@
|
|
|
13
13
|
{#if physicalLines.length}
|
|
14
14
|
<li class="flex min-w-0 items-center gap-4">
|
|
15
15
|
<div
|
|
16
|
-
class="flex size-12 shrink-0 items-center justify-center rounded-ui bg-
|
|
16
|
+
class="flex size-12 shrink-0 items-center justify-center rounded-ui bg-[color-mix(in_srgb,var(--base-100)_75%,var(--base-200))] text-base-600 shadow-[inset_0_2px_4px_color-mix(in_srgb,var(--base-950)_8%,transparent),inset_0_5px_12px_color-mix(in_srgb,var(--base-950)_2%,transparent)] dark:bg-base-950 dark:text-base-400 dark:shadow-[inset_0_2px_4px_#0006,inset_0_5px_12px_#0002]"
|
|
17
17
|
>
|
|
18
18
|
<Icon img={MapPin} size={22} />
|
|
19
19
|
</div>
|
|
20
20
|
<div class="min-w-0 [overflow-wrap:anywhere]">
|
|
21
21
|
{#each physicalLines as line, i (i)}
|
|
22
|
-
<p
|
|
22
|
+
<p
|
|
23
|
+
class={line.muted
|
|
24
|
+
? 'text-sm text-base-600 dark:text-base-400'
|
|
25
|
+
: 'font-semibold text-base-950 dark:text-base-50'}
|
|
26
|
+
>
|
|
23
27
|
<svelte:element
|
|
24
28
|
this={line.href ? 'a' : 'span'}
|
|
25
29
|
href={line.href}
|
|
@@ -45,14 +49,14 @@
|
|
|
45
49
|
: ''}"
|
|
46
50
|
>
|
|
47
51
|
<div
|
|
48
|
-
class="flex size-12 shrink-0 items-center justify-center rounded-ui bg-
|
|
52
|
+
class="flex size-12 shrink-0 items-center justify-center rounded-ui bg-[color-mix(in_srgb,var(--base-100)_75%,var(--base-200))] text-base-600 shadow-[inset_0_2px_4px_color-mix(in_srgb,var(--base-950)_8%,transparent),inset_0_5px_12px_color-mix(in_srgb,var(--base-950)_2%,transparent)] dark:bg-base-950 dark:text-base-400 dark:shadow-[inset_0_2px_4px_#0006,inset_0_5px_12px_#0002]"
|
|
49
53
|
>
|
|
50
54
|
<Icon img={Link} size={22} />
|
|
51
55
|
</div>
|
|
52
56
|
<div class="min-w-0 [overflow-wrap:anywhere]">
|
|
53
|
-
<p class="font-semibold text-
|
|
57
|
+
<p class="font-semibold text-base-950 dark:text-base-50">{location.label}</p>
|
|
54
58
|
{#if location.detail}
|
|
55
|
-
<p class="text-sm text-
|
|
59
|
+
<p class="text-sm text-base-600 dark:text-base-400">{location.detail}</p>
|
|
56
60
|
{/if}
|
|
57
61
|
</div>
|
|
58
62
|
</svelte:element>
|
|
@@ -23,7 +23,9 @@
|
|
|
23
23
|
{#if geoLocation}
|
|
24
24
|
<div class="mt-8 mb-8">
|
|
25
25
|
<div class="mb-3 flex items-baseline gap-2">
|
|
26
|
-
<p class="text-xs font-semibold tracking-wider text-
|
|
26
|
+
<p class="text-xs font-semibold tracking-wider text-base-600 uppercase dark:text-base-400">
|
|
27
|
+
Location:
|
|
28
|
+
</p>
|
|
27
29
|
<button
|
|
28
30
|
type="button"
|
|
29
31
|
onclick={copyCoords}
|
|
@@ -42,7 +44,7 @@
|
|
|
42
44
|
<p class="mt-3 text-sm [overflow-wrap:anywhere] text-base-700 dark:text-base-200">
|
|
43
45
|
{geoLocation.label}
|
|
44
46
|
</p>
|
|
45
|
-
<p class="mt-1 text-xs text-
|
|
47
|
+
<p class="mt-1 text-xs text-base-600 dark:text-base-400">
|
|
46
48
|
Open in
|
|
47
49
|
<a
|
|
48
50
|
href={geoLocation.googleMapsUrl}
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
{/if}
|
|
206
206
|
</div>
|
|
207
207
|
|
|
208
|
-
<p class="mb-4 text-sm text-
|
|
208
|
+
<p class="mb-4 text-sm text-base-600 dark:text-base-400">All times shown in {tzLabel}.</p>
|
|
209
209
|
|
|
210
210
|
{#if upNextAll.length > 0}
|
|
211
211
|
<div class="mb-8">
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
{ev.title}
|
|
236
236
|
</p>
|
|
237
237
|
{#if subtitle(ev)}
|
|
238
|
-
<p class="mt-0.5 truncate text-xs text-
|
|
238
|
+
<p class="mt-0.5 truncate text-xs text-base-600 dark:text-base-400">
|
|
239
239
|
{subtitle(ev)}
|
|
240
240
|
</p>
|
|
241
241
|
{/if}
|
|
@@ -243,12 +243,12 @@
|
|
|
243
243
|
<span
|
|
244
244
|
class="flex shrink-0 items-center gap-1.5 text-xs whitespace-nowrap {w.soon
|
|
245
245
|
? 'font-semibold text-accent-600 dark:text-accent-400'
|
|
246
|
-
: 'text-
|
|
246
|
+
: 'text-base-600 dark:text-base-400'}"
|
|
247
247
|
>
|
|
248
248
|
{#if rsvpStatuses[ev.uri] === 'going'}
|
|
249
|
-
<Icon img={Check} size={14} class="text-
|
|
249
|
+
<Icon img={Check} size={14} class="text-accent-700 dark:text-accent-300" />
|
|
250
250
|
{:else}
|
|
251
|
-
<Icon img={Star} size={14} class="text-
|
|
251
|
+
<Icon img={Star} size={14} class="text-accent-700 dark:text-accent-300" />
|
|
252
252
|
{/if}
|
|
253
253
|
{w.text}
|
|
254
254
|
</span>
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
<div class="mb-6 space-y-3">
|
|
274
274
|
{#if dayGroups.length > 1}
|
|
275
275
|
<div class="flex items-center gap-3">
|
|
276
|
-
<span class="w-14 text-xs text-
|
|
276
|
+
<span class="w-14 text-xs text-base-600 dark:text-base-400">Days</span>
|
|
277
277
|
<ToggleGroup
|
|
278
278
|
type="single"
|
|
279
279
|
bind:value={
|
|
@@ -293,7 +293,7 @@
|
|
|
293
293
|
{/if}
|
|
294
294
|
{#if loggedIn}
|
|
295
295
|
<div class="flex items-center gap-3">
|
|
296
|
-
<span class="w-14 text-xs text-
|
|
296
|
+
<span class="w-14 text-xs text-base-600 dark:text-base-400">Events</span>
|
|
297
297
|
<ToggleGroup
|
|
298
298
|
type="single"
|
|
299
299
|
bind:value={
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
onclick={() => (roomMenuOpen = false)}
|
|
98
98
|
></button>
|
|
99
99
|
<ul
|
|
100
|
-
class="absolute inset-x-0 top-full z-[10000] max-h-64 overflow-auto border-b border-
|
|
100
|
+
class="absolute inset-x-0 top-full z-[10000] max-h-64 overflow-auto border-b border-base-300 bg-base-50 dark:border-[color-mix(in_srgb,var(--base-800)_80%,var(--base-950))] dark:bg-base-925"
|
|
101
101
|
>
|
|
102
102
|
{#each rooms as room, i (room)}
|
|
103
103
|
<li>
|
|
@@ -209,7 +209,7 @@
|
|
|
209
209
|
>
|
|
210
210
|
{#each rooms as room (room)}
|
|
211
211
|
<div
|
|
212
|
-
class="px-2 py-2.5 text-center text-xs font-semibold tracking-wide text-
|
|
212
|
+
class="px-2 py-2.5 text-center text-xs font-semibold tracking-wide text-base-600 uppercase dark:text-base-400"
|
|
213
213
|
>
|
|
214
214
|
{room}
|
|
215
215
|
</div>
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
<Modal bind:open={modalOpen} title={event.title}>
|
|
90
90
|
<div class="overflow-hidden">
|
|
91
91
|
{#if event.start}
|
|
92
|
-
<p class="mt-1 text-sm text-
|
|
92
|
+
<p class="mt-1 text-sm text-base-600 dark:text-base-400">
|
|
93
93
|
{formatTime(event.start, tz)}{event.end ? ` – ${formatTime(event.end, tz)}` : ''}
|
|
94
94
|
</p>
|
|
95
95
|
{/if}
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
{/if}
|
|
108
108
|
|
|
109
109
|
{#if event.description}
|
|
110
|
-
<p class="mt-3 line-clamp-3 text-sm break-words text-
|
|
110
|
+
<p class="mt-3 line-clamp-3 text-sm break-words text-base-600 dark:text-base-400">
|
|
111
111
|
{event.description}
|
|
112
112
|
</p>
|
|
113
113
|
{/if}
|
|
@@ -37,23 +37,28 @@
|
|
|
37
37
|
);
|
|
38
38
|
|
|
39
39
|
const accentColor = getComputedStyle(document.documentElement)
|
|
40
|
-
.getPropertyValue('--
|
|
40
|
+
.getPropertyValue('--accent-500')
|
|
41
41
|
.trim();
|
|
42
42
|
|
|
43
|
+
const root = document.documentElement;
|
|
44
|
+
const systemScheme = window.matchMedia('(prefers-color-scheme: dark)');
|
|
43
45
|
let bgColor = '';
|
|
44
46
|
function readBgColor() {
|
|
45
|
-
const isDark =
|
|
46
|
-
|
|
47
|
-
.
|
|
47
|
+
const isDark =
|
|
48
|
+
root.matches('.dark, [data-theme="dark"]') ||
|
|
49
|
+
(!root.matches('.light, [data-theme="light"]') && systemScheme.matches);
|
|
50
|
+
bgColor = getComputedStyle(root)
|
|
51
|
+
.getPropertyValue(isDark ? '--base-900' : '--base-50')
|
|
48
52
|
.trim();
|
|
49
53
|
}
|
|
50
54
|
readBgColor();
|
|
51
55
|
|
|
52
56
|
const themeObserver = new MutationObserver(readBgColor);
|
|
53
|
-
themeObserver.observe(
|
|
57
|
+
themeObserver.observe(root, {
|
|
54
58
|
attributes: true,
|
|
55
|
-
attributeFilter: ['class']
|
|
59
|
+
attributeFilter: ['class', 'data-theme', 'style']
|
|
56
60
|
});
|
|
61
|
+
systemScheme.addEventListener('change', readBgColor);
|
|
57
62
|
|
|
58
63
|
let lastResize = canvas.width;
|
|
59
64
|
let lastTime = performance.now();
|
|
@@ -144,6 +149,7 @@
|
|
|
144
149
|
cancelAnimationFrame(animId);
|
|
145
150
|
window.removeEventListener('resize', resize);
|
|
146
151
|
themeObserver.disconnect();
|
|
152
|
+
systemScheme.removeEventListener('change', readBgColor);
|
|
147
153
|
};
|
|
148
154
|
});
|
|
149
155
|
</script>
|
package/dist/events.d.ts
CHANGED
|
@@ -12,8 +12,8 @@ export { default as VodPlayer } from './events/VodPlayer.svelte';
|
|
|
12
12
|
export type { VodPlayerApi } from './events/VodPlayer.svelte';
|
|
13
13
|
export { default as VodTranscript } from './events/VodTranscript.svelte';
|
|
14
14
|
export { default as ConferenceTimetable } from './events/schedule/ConferenceTimetable.svelte';
|
|
15
|
-
export { default as DatePicker } from './
|
|
16
|
-
export { default as TimePicker } from './
|
|
17
|
-
export { default as DateTimePicker } from './
|
|
18
|
-
export { default as TimezonePicker } from './
|
|
19
|
-
export { default as ImageDropper } from './
|
|
15
|
+
export { default as DatePicker } from './components/DatePicker.svelte';
|
|
16
|
+
export { default as TimePicker } from './components/TimePicker.svelte';
|
|
17
|
+
export { default as DateTimePicker } from './components/DateTimePicker.svelte';
|
|
18
|
+
export { default as TimezonePicker } from './components/TimezonePicker.svelte';
|
|
19
|
+
export { default as ImageDropper } from './components/ImageDropper.svelte';
|