chore: release v0.36.0
This commit is contained in:
@@ -332,6 +332,9 @@ function renderBody() {
|
||||
`;
|
||||
|
||||
if (window.lucide) lucide.createIcons();
|
||||
_container.querySelector('#empty-cta-budget')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
stagger(_container.querySelector('#budget-list')?.querySelectorAll('.budget-entry') ?? []);
|
||||
|
||||
_container.querySelector('#budget-list')?.addEventListener('click', async (e) => {
|
||||
@@ -378,6 +381,10 @@ function renderEntries() {
|
||||
<div class="empty-state__title">${t('budget.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('budget.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.budget')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-budget">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('budget.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,9 +181,16 @@ function renderList() {
|
||||
<div class="empty-state__title">${t('contacts.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('contacts.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.contacts')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-contacts">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('contacts.emptyAction')}
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
if (window.lucide) lucide.createIcons();
|
||||
container.querySelector('#empty-cta-contacts')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ const ONBOARDING_KEY = 'oikos-onboarded';
|
||||
function getOnboardingSteps() {
|
||||
return [
|
||||
{ icon: 'home', title: t('onboarding.step1Title'), body: t('onboarding.step1Body') },
|
||||
{ icon: 'grid-2x2', title: t('onboarding.step2Title'), body: t('onboarding.step2Body') },
|
||||
{ icon: 'circle-check', title: t('onboarding.step3Title'), body: t('onboarding.step3Body') },
|
||||
{ icon: 'navigation', title: t('onboarding.step2Title'), body: t('onboarding.step2Body') },
|
||||
{ icon: 'plus-circle', title: t('onboarding.step3Title'), body: t('onboarding.step3Body') },
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -146,10 +146,17 @@ function renderGrid() {
|
||||
</svg>
|
||||
<div class="empty-state__title">${isFiltered ? t('notes.noResultsTitle') : t('notes.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${isFiltered ? t('notes.noResultsDescription', { query: state.filterQuery }) : t('notes.emptyDescription')}</div>
|
||||
${!isFiltered ? `<p class="empty-state__hint">${t('emptyHint.notes')}</p>` : ''}
|
||||
${!isFiltered ? `<p class="empty-state__hint">${t('emptyHint.notes')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-notes">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('notes.emptyAction')}
|
||||
</button>` : ''}
|
||||
</div>
|
||||
`;
|
||||
if (window.lucide) lucide.createIcons();
|
||||
grid.querySelector('#empty-cta-notes')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,8 +131,16 @@ function renderRecipeList() {
|
||||
const emptyHint = document.createElement('p');
|
||||
emptyHint.className = 'empty-state__hint';
|
||||
emptyHint.textContent = t('emptyHint.recipes');
|
||||
empty.append(emptyTitle, emptyDesc, emptyHint);
|
||||
const emptyCta = document.createElement('button');
|
||||
emptyCta.className = 'btn btn--primary empty-state__cta';
|
||||
emptyCta.insertAdjacentHTML('afterbegin', '<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>');
|
||||
emptyCta.append(document.createTextNode(t('recipes.emptyAction')));
|
||||
emptyCta.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
empty.append(emptyTitle, emptyDesc, emptyHint, emptyCta);
|
||||
list.appendChild(empty);
|
||||
if (window.lucide) window.lucide.createIcons({ el: empty });
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -172,6 +172,10 @@ function renderItems() {
|
||||
<div class="empty-state__title">${t('shopping.emptyList')}</div>
|
||||
<div class="empty-state__description">${t('shopping.emptyListDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.shopping')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-shopping">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('shopping.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
@@ -527,6 +531,9 @@ function updateItemsList(container) {
|
||||
stagger(listEl.querySelectorAll('.shopping-item'));
|
||||
wireSwipeGestures(container);
|
||||
maybeShowSwipeHint(container);
|
||||
listEl.querySelector('#empty-cta-shopping')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
}
|
||||
// clear-checked Button aktualisieren
|
||||
const checkedCount = state.items.filter((i) => i.is_checked).length;
|
||||
|
||||
@@ -268,6 +268,10 @@ function renderTaskGroups(tasks, groupMode) {
|
||||
<div class="empty-state__title">${t('tasks.emptyTitle')}</div>
|
||||
<div class="empty-state__description">${t('tasks.emptyDescription')}</div>
|
||||
<p class="empty-state__hint">${t('emptyHint.tasks')}</p>
|
||||
<button class="btn btn--primary empty-state__cta" id="empty-cta-tasks">
|
||||
<i data-lucide="plus" aria-hidden="true" class="icon-base"></i>
|
||||
${t('tasks.emptyAction')}
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
@@ -1029,6 +1033,9 @@ function renderTaskList(container) {
|
||||
updateOverdueBadge();
|
||||
wireSwipeGestures(container);
|
||||
maybeShowSwipeHint(container);
|
||||
listEl.querySelector('#empty-cta-tasks')?.addEventListener('click', () => {
|
||||
document.querySelector('.page-fab')?.click();
|
||||
});
|
||||
}
|
||||
|
||||
function renderFilters(container) {
|
||||
|
||||
Reference in New Issue
Block a user