Adopt shared WebUI structural primitives
This commit is contained in:
@@ -355,7 +355,7 @@ export function CalendarEventDialog({
|
|||||||
<input value={location} onChange={(item) => setLocation(item.target.value)} maxLength={500} disabled={saving || !canWrite} />
|
<input value={location} onChange={(item) => setLocation(item.target.value)} maxLength={500} disabled={saving || !canWrite} />
|
||||||
</label>
|
</label>
|
||||||
<ToggleSwitch label="i18n:govoplan-calendar.whole_day.951c82d1" checked={allDay} disabled={saving || !canWrite} onChange={handleAllDayChange} />
|
<ToggleSwitch label="i18n:govoplan-calendar.whole_day.951c82d1" checked={allDay} disabled={saving || !canWrite} onChange={handleAllDayChange} />
|
||||||
<div className="calendar-dialog-date-row">
|
<FormGrid columns={2} gap="compact" collapseAt="narrow">
|
||||||
<label>
|
<label>
|
||||||
<span>i18n:govoplan-calendar.start_date.ff99f5b5</span>
|
<span>i18n:govoplan-calendar.start_date.ff99f5b5</span>
|
||||||
<DateField value={startDate} onChange={handleStartDateChange} required disabled={saving || !canWrite} />
|
<DateField value={startDate} onChange={handleStartDateChange} required disabled={saving || !canWrite} />
|
||||||
@@ -364,9 +364,9 @@ export function CalendarEventDialog({
|
|||||||
<span>i18n:govoplan-calendar.start_time.88d8206d</span>
|
<span>i18n:govoplan-calendar.start_time.88d8206d</span>
|
||||||
<TimeField value={startTime} onChange={handleStartTimeChange} disabled={saving || !canWrite || allDay} />
|
<TimeField value={startTime} onChange={handleStartTimeChange} disabled={saving || !canWrite || allDay} />
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</FormGrid>
|
||||||
{!allDay &&
|
{!allDay &&
|
||||||
<div className="calendar-dialog-date-row">
|
<FormGrid columns={2} gap="compact" collapseAt="narrow">
|
||||||
<label>
|
<label>
|
||||||
<span>i18n:govoplan-calendar.end_mode.5a06de37</span>
|
<span>i18n:govoplan-calendar.end_mode.5a06de37</span>
|
||||||
<select value={endMode} onChange={(item) => setEndMode(item.target.value as CalendarEventEndMode)} disabled={saving || !canWrite}>
|
<select value={endMode} onChange={(item) => setEndMode(item.target.value as CalendarEventEndMode)} disabled={saving || !canWrite}>
|
||||||
@@ -380,10 +380,10 @@ export function CalendarEventDialog({
|
|||||||
<input type="number" min={1} step={60} value={durationSeconds} onChange={(item) => setDurationSeconds(item.target.value)} required disabled={saving || !canWrite} />
|
<input type="number" min={1} step={60} value={durationSeconds} onChange={(item) => setDurationSeconds(item.target.value)} required disabled={saving || !canWrite} />
|
||||||
</label>
|
</label>
|
||||||
}
|
}
|
||||||
</div>
|
</FormGrid>
|
||||||
}
|
}
|
||||||
{(allDay || endMode === "end") &&
|
{(allDay || endMode === "end") &&
|
||||||
<div className="calendar-dialog-date-row">
|
<FormGrid columns={2} gap="compact" collapseAt="narrow">
|
||||||
<label>
|
<label>
|
||||||
<span>i18n:govoplan-calendar.end_date.89d10cd6</span>
|
<span>i18n:govoplan-calendar.end_date.89d10cd6</span>
|
||||||
<DateField value={endDate} min={startDate} onChange={setEndDate} required disabled={saving || !canWrite} />
|
<DateField value={endDate} min={startDate} onChange={setEndDate} required disabled={saving || !canWrite} />
|
||||||
@@ -392,7 +392,7 @@ export function CalendarEventDialog({
|
|||||||
<span>i18n:govoplan-calendar.end_time.cd7800da</span>
|
<span>i18n:govoplan-calendar.end_time.cd7800da</span>
|
||||||
<TimeField value={endTime} min={!allDay && startDate === endDate ? startTime : undefined} onChange={setEndTime} disabled={saving || !canWrite || allDay} />
|
<TimeField value={endTime} min={!allDay && startDate === endDate ? startTime : undefined} onChange={setEndTime} disabled={saving || !canWrite || allDay} />
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</FormGrid>
|
||||||
}
|
}
|
||||||
<details className="calendar-advanced-settings calendar-vevent-details">
|
<details className="calendar-advanced-settings calendar-vevent-details">
|
||||||
<summary>i18n:govoplan-calendar.vevent.9cf5be75</summary>
|
<summary>i18n:govoplan-calendar.vevent.9cf5be75</summary>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { RefreshCw, XCircle } from "lucide-react";
|
import { RefreshCw, XCircle } from "lucide-react";
|
||||||
import {
|
import {
|
||||||
|
ActionToolbar,
|
||||||
Button,
|
Button,
|
||||||
Dialog,
|
Dialog,
|
||||||
DismissibleAlert,
|
DismissibleAlert,
|
||||||
@@ -120,13 +121,13 @@ export function CalendarMigrationDialog({
|
|||||||
)}
|
)}
|
||||||
{batch && (
|
{batch && (
|
||||||
<>
|
<>
|
||||||
<div className="calendar-migration-heading">
|
<ActionToolbar surface="section-header" className="calendar-migration-heading">
|
||||||
<div>
|
<div>
|
||||||
<strong>{phaseLabel(batch.phase)}</strong>
|
<strong>{phaseLabel(batch.phase)}</strong>
|
||||||
<span>Updated {dateTimeLabel(new Date(batch.updated_at))}</span>
|
<span>Updated {dateTimeLabel(new Date(batch.updated_at))}</span>
|
||||||
</div>
|
</div>
|
||||||
<StatusBadge status={batch.status} label={statusLabel(batch.status)} />
|
<StatusBadge status={batch.status} label={statusLabel(batch.status)} />
|
||||||
</div>
|
</ActionToolbar>
|
||||||
<progress value={progress} max={100} aria-label="Remote move progress" />
|
<progress value={progress} max={100} aria-label="Remote move progress" />
|
||||||
<dl className="calendar-migration-summary">
|
<dl className="calendar-migration-summary">
|
||||||
<div><dt>Events</dt><dd>{batch.total_events}</dd></div>
|
<div><dt>Events</dt><dd>{batch.total_events}</dd></div>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ export function CalendarOutboxDialog({
|
|||||||
<p className="calendar-outbox-calendar-name">{calendar.name}</p>
|
<p className="calendar-outbox-calendar-name">{calendar.name}</p>
|
||||||
<DocumentationHelpLink reference={CALENDAR_RECOVERY_DOCUMENTATION} />
|
<DocumentationHelpLink reference={CALENDAR_RECOVERY_DOCUMENTATION} />
|
||||||
{error && <DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert>}
|
{error && <DismissibleAlert tone="danger" resetKey={error}>{error}</DismissibleAlert>}
|
||||||
<ActionToolbar className="calendar-outbox-toolbar">
|
<ActionToolbar justify="between" className="calendar-outbox-toolbar">
|
||||||
<SegmentedControl<OutboxFilter>
|
<SegmentedControl<OutboxFilter>
|
||||||
value={filter}
|
value={filter}
|
||||||
ariaLabel="i18n:govoplan-calendar.outbox_filter.8305af40"
|
ariaLabel="i18n:govoplan-calendar.outbox_filter.8305af40"
|
||||||
|
|||||||
@@ -895,13 +895,6 @@
|
|||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-dialog-row,
|
|
||||||
.calendar-dialog-date-row {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.calendar-dialog-name-color-row {
|
.calendar-dialog-name-color-row {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: minmax(0, 1fr) 142px;
|
grid-template-columns: minmax(0, 1fr) 142px;
|
||||||
@@ -1117,13 +1110,6 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-outbox-toolbar {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.calendar-outbox-summary {
|
.calendar-outbox-summary {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -1208,13 +1194,6 @@
|
|||||||
min-height: 240px;
|
min-height: 240px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-migration-heading {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.calendar-migration-heading > div {
|
.calendar-migration-heading > div {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 3px;
|
gap: 3px;
|
||||||
@@ -1504,8 +1483,6 @@
|
|||||||
max-width: none;
|
max-width: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-dialog-row,
|
|
||||||
.calendar-dialog-date-row,
|
|
||||||
.calendar-dialog-name-color-row,
|
.calendar-dialog-name-color-row,
|
||||||
.calendar-sync-status-panel dl {
|
.calendar-sync-status-panel dl {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|||||||
Reference in New Issue
Block a user