Compare commits

..
2 Commits
Author SHA1 Message Date
klemek ae030ea7f5 chore: 1.7.8
Python Lint CI / ruff (push) Successful in 4m55s
Python Lint CI / ty (push) Successful in 6m0s
Python Lint CI / ruff-format-check (push) Successful in 6m50s
TS Lint / ESLint (push) Successful in 7m58s
Docker Build / build (push) Successful in 13m35s
TS Lint / Oxlint (push) Successful in 7m9s
TS Lint / TypeScript (push) Successful in 7m33s
2026-09-16 11:35:19 +02:00
klemek 8007468abd fix(dates): invalid UTC in RRULE 2026-09-16 11:35:01 +02:00
5 changed files with 26 additions and 6 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "tout-doux", "name": "tout-doux",
"version": "1.7.7", "version": "1.7.8",
"private": true, "private": true,
"type": "module", "type": "module",
"engines": { "engines": {
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "tout-doux" name = "tout-doux"
version = "1.7.7" version = "1.7.8"
description = "" description = ""
requires-python = ">=3.14" requires-python = ">=3.14"
dependencies = [ dependencies = [
+7 -3
View File
@@ -1,24 +1,28 @@
<script setup lang="ts"> <script setup lang="ts">
import { parseDateInput, formatDateInput } from "@/lib/dates";
const emit = defineEmits<(e: "input"|"change", value: Date) => void>(); const emit = defineEmits<(e: "input"|"change", value: Date) => void>();
const date = defineModel<Date>({ required: true }); const date = defineModel<Date>({ required: true });
function onInput(event: Event) { function onInput(event: Event) {
const inputValue = (event.target as HTMLInputElement).value; const inputValue = (event.target as HTMLInputElement).value;
date.value = new Date(inputValue); date.value = parseDateInput(inputValue);
emit('input', date.value); emit('input', date.value);
} }
function onChange(event: Event) { function onChange(event: Event) {
const inputValue = (event.target as HTMLInputElement).value; const inputValue = (event.target as HTMLInputElement).value;
date.value = new Date(inputValue); date.value = parseDateInput(inputValue);
emit('change', date.value); emit('change', date.value);
} }
</script> </script>
<template> <template>
<input <input
:value="date.toISOString().substring(0, 10)" :value="formatDateInput(date)"
type="date" type="date"
@input="onInput" @input="onInput"
@change="onChange" @change="onChange"
+16
View File
@@ -1,6 +1,22 @@
import { formatDistanceToNow } from "date-fns"; import { formatDistanceToNow } from "date-fns";
import { enUS, fr } from "date-fns/locale"; import { enUS, fr } from "date-fns/locale";
export function parseDateInput(rawDate: string): Date {
const parts = rawDate.split('-').map(part => parseInt(part, 10));
if (!parts[0] || !parts[1] || !parts[2]) {
return new Date(new Date().setHours(0, 0, 0, 0))
}
return new Date(parts[0], parts[1] - 1, parts[2]);
}
export function formatDateInput(date: Date): string {
return [
date.getFullYear().toFixed(0),
(date.getMonth() + 1).toFixed(0).padStart(2, '0'),
(date.getDate()).toFixed(0).padStart(2, '0'),
].join('-');
}
export function relativeTime(date: Date, locale: string): string { export function relativeTime(date: Date, locale: string): string {
return formatDistanceToNow(date, { return formatDistanceToNow(date, {
addSuffix: true, addSuffix: true,
Generated
+1 -1
View File
@@ -323,7 +323,7 @@ asyncpg = [
[[package]] [[package]]
name = "tout-doux" name = "tout-doux"
version = "1.7.7" version = "1.7.8"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "flask", extra = ["async"] }, { name = "flask", extra = ["async"] },