From 2588cc43f109a1e4bfb6c436bf28dfaa1707478f Mon Sep 17 00:00:00 2001 From: Ulas Kalayci Date: Fri, 1 May 2026 09:46:54 +0200 Subject: [PATCH] chore: release v0.39.2 --- CHANGELOG.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- public/pages/budget.js | 18 +++++------------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2136839..e53c040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.39.2] - 2026-05-01 + +### Fixed +- **Budget date picker**: the date input in Budget → New Entry / Edit Entry now uses a native date picker on iOS and Android instead of a plain text field. + ## [0.39.1] - 2026-05-01 ### Added diff --git a/package-lock.json b/package-lock.json index 7cd397a..91ef3f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "oikos", - "version": "0.38.4", + "version": "0.39.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "oikos", - "version": "0.38.4", + "version": "0.39.2", "license": "MIT", "dependencies": { "bcrypt": "^6.0.0", diff --git a/package.json b/package.json index 3e16ea6..340320f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oikos", - "version": "0.39.1", + "version": "0.39.2", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "main": "server/index.js", "type": "module", diff --git a/public/pages/budget.js b/public/pages/budget.js index 1335266..c454be1 100644 --- a/public/pages/budget.js +++ b/public/pages/budget.js @@ -8,7 +8,7 @@ import { api } from '/api.js'; import { openModal as openSharedModal, closeModal } from '/components/modal.js'; import { stagger, vibrate } from '/utils/ux.js'; -import { t, formatDate, getLocale, dateInputPlaceholder, formatDateInput, parseDateInput, isDateInputValid } from '/i18n.js'; +import { t, formatDate, getLocale } from '/i18n.js'; import { esc } from '/utils/html.js'; // -------------------------------------------------------- @@ -501,8 +501,8 @@ function openBudgetModal({ mode, entry = null }) {
- +
@@ -611,13 +611,6 @@ function openBudgetModal({ mode, entry = null }) { panel.querySelector('#bm-category').addEventListener('change', () => updateSubcategoryOptions()); panel.querySelector('#bm-add-category').addEventListener('click', addCategory); panel.querySelector('#bm-add-subcategory').addEventListener('click', addSubcategory); - panel.querySelectorAll('.js-date-input').forEach((input) => { - input.addEventListener('blur', () => { - const parsed = parseDateInput(input.value); - if (parsed) input.value = formatDateInput(parsed); - }); - }); - panel.querySelector('#bm-cancel').addEventListener('click', closeModal); panel.querySelector('#bm-delete')?.addEventListener('click', async () => { @@ -631,13 +624,12 @@ function openBudgetModal({ mode, entry = null }) { const absVal = parseFloat(panel.querySelector('#bm-amount').value); const category = panel.querySelector('#bm-category').value; const subcategory = currentType === 'expense' ? panel.querySelector('#bm-subcategory').value : ''; - const dateRaw = panel.querySelector('#bm-date').value; - const date = parseDateInput(dateRaw); + const date = panel.querySelector('#bm-date').value; const recurring = panel.querySelector('#bm-recurring').checked ? 1 : 0; if (!title) { window.oikos?.showToast(t('common.titleRequired'), 'error'); return; } if (isNaN(absVal) || absVal <= 0) { window.oikos?.showToast(t('budget.validAmountRequired'), 'error'); return; } - if (!date || !isDateInputValid(dateRaw)) { window.oikos?.showToast(t('calendar.invalidDate'), 'error'); return; } + if (!date) { window.oikos?.showToast(t('calendar.invalidDate'), 'error'); return; } const amount = currentType === 'expense' ? -absVal : absVal;