chore: bump version to 1.4.2
This commit is contained in:
@@ -1,5 +1,28 @@
|
||||
# Changelog
|
||||
|
||||
## 1.4.2 (2026-03-19)
|
||||
|
||||
### Features
|
||||
|
||||
- **Calendar**: Add task list view for calendar tasks with task details and management
|
||||
- **Calendar**: Add shared calendar grouping with visual separation in sidebar
|
||||
- **Calendar**: Support double-click to create events and improve modal date handling
|
||||
- **Contacts**: Add address book directories with drag-and-drop and editor picker
|
||||
- **Email**: Add email attachment support in sendEmail functionality
|
||||
- **Email**: Implement draft editing functionality across email components
|
||||
- **Email**: Implement unwrapping of embedded message/rfc822 attachments with enhanced HTML body validation
|
||||
- **Email**: Add email export/import localization keys for multiple languages
|
||||
- **Contacts**: Update gender handling to use speakToAs structure
|
||||
|
||||
### Fixes
|
||||
|
||||
- **Email**: Resolve default sender to canonical identity on local-part login
|
||||
- **Email**: Refactor overflow handling in EmailViewer to use hidden priorities and layout effects
|
||||
- **Email**: Remove debugMode usage from EmailViewer component
|
||||
- **Calendar**: Enhance IMIP invitation and cancellation handling for calendar events
|
||||
- **Calendar**: Add time-based sorting for events in buildWeekSegments function
|
||||
- **Dependencies**: Update dompurify to 3.3.3 and elliptic to 6.6.1, add undici override
|
||||
|
||||
## 1.4.1 (2026-03-18)
|
||||
|
||||
### Features
|
||||
|
||||
@@ -12,7 +12,7 @@ A modern, self-hosted webmail client for [Stalwart Mail Server](https://stalw.ar
|
||||
Built with Next.js and the JMAP protocol.
|
||||
|
||||
[](LICENSE)
|
||||
[](CHANGELOG.md)
|
||||
[](CHANGELOG.md)
|
||||
[](https://ghcr.io/bulwarkmail/webmail)
|
||||
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,7 @@ import { discoverOAuth, type OAuthMetadata } from "@/lib/oauth/discovery";
|
||||
import { generateCodeVerifier, generateCodeChallenge, generateState } from "@/lib/oauth/pkce";
|
||||
import { OAUTH_SCOPES } from "@/lib/oauth/tokens";
|
||||
|
||||
const APP_VERSION = "1.4.1";
|
||||
const APP_VERSION = "1.4.2";
|
||||
|
||||
const THEME_OPTIONS = [
|
||||
{ value: "light" as const, icon: Sun, label: "Light" },
|
||||
|
||||
@@ -564,6 +564,32 @@ export interface CalendarRelation {
|
||||
relation: Record<string, boolean> | null;
|
||||
}
|
||||
|
||||
export interface CalendarTask {
|
||||
id: string;
|
||||
calendarIds: Record<string, boolean>;
|
||||
'@type': 'Task';
|
||||
uid: string;
|
||||
title: string;
|
||||
description: string;
|
||||
due: string | null;
|
||||
start: string | null;
|
||||
duration: string | null;
|
||||
timeZone: string | null;
|
||||
showWithoutTime: boolean;
|
||||
progress: 'needs-action' | 'in-process' | 'completed' | 'cancelled';
|
||||
progressUpdated: string | null;
|
||||
priority: number;
|
||||
privacy: 'public' | 'private' | 'secret';
|
||||
keywords: Record<string, boolean> | null;
|
||||
categories: Record<string, boolean> | null;
|
||||
color: string | null;
|
||||
created: string | null;
|
||||
updated: string;
|
||||
recurrenceRules: CalendarRecurrenceRule[] | null;
|
||||
alerts: Record<string, CalendarEventAlert> | null;
|
||||
relatedTo: Record<string, CalendarRelation> | null;
|
||||
}
|
||||
|
||||
export interface CalendarParticipantIdentity {
|
||||
id: string;
|
||||
name: string;
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "bulwark-webmail",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "bulwark-webmail",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"license": "AGPL-3.0-only",
|
||||
"dependencies": {
|
||||
"@tanstack/react-virtual": "^3.13.18",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bulwark-webmail",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"description": "Bulwark Webmail — a modern webmail client built for Stalwart Mail Server",
|
||||
"author": "Bulwark Webmail <bulwark@rbm.systems>",
|
||||
"license": "AGPL-3.0-only",
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { create } from 'zustand';
|
||||
import type { CalendarTask } from '@/lib/jmap/types';
|
||||
|
||||
export type TaskViewFilter = 'all' | 'pending' | 'completed' | 'overdue';
|
||||
|
||||
interface TaskStore {
|
||||
tasks: CalendarTask[];
|
||||
selectedTaskId: string | null;
|
||||
filter: TaskViewFilter;
|
||||
showCompleted: boolean;
|
||||
setTasks: (tasks: CalendarTask[]) => void;
|
||||
setSelectedTaskId: (id: string | null) => void;
|
||||
setFilter: (filter: TaskViewFilter) => void;
|
||||
setShowCompleted: (show: boolean) => void;
|
||||
}
|
||||
|
||||
export const useTaskStore = create<TaskStore>((set) => ({
|
||||
tasks: [],
|
||||
selectedTaskId: null,
|
||||
filter: 'all',
|
||||
showCompleted: false,
|
||||
setTasks: (tasks) => set({ tasks }),
|
||||
setSelectedTaskId: (id) => set({ selectedTaskId: id }),
|
||||
setFilter: (filter) => set({ filter }),
|
||||
setShowCompleted: (show) => set({ showCompleted: show }),
|
||||
}));
|
||||
Reference in New Issue
Block a user