Commit Graph

48 Commits

Author SHA1 Message Date
Milad Nazari 1cf10b563a fix(frontend): fix buttons alignments in rtl direction 2026-06-11 19:45:57 +00:00
kolaente 732b65ba7c feat(a11y): add skip navigation link and main landmark on auth pages
Adds a visually-hidden skip-to-content link as the first focusable
element. Adds id='main-content' to the <main> element. Changes
<section> to <main> on auth pages for proper landmark navigation.

Fixes WCAG 2.4.1 (Bypass Blocks).
2026-04-21 11:44:36 +00:00
kolaente f7dc50faf7 refactor(frontend): port checkbox-radio rules into FormCheckbox and drop Bulma import
The Bulma form/checkbox-radio partial only defined two selectors: .checkbox
(consumed exclusively by FormCheckbox.vue) and .radio (consumed by
ViewEditForm.vue and user/settings/Avatar.vue). Ports the %checkbox-radio
placeholder rules (cursor, line-height, position, hover/disabled states,
and the input cursor override) into FormCheckbox's scoped style for the
.checkbox side, and into scoped style blocks on the two remaining .radio
call-sites for the .radio side (including the 0.5em sibling margin via
margin-inline-start). Drops the now-unused @import. Pixel-perfect verified
on /login, /user/settings/general, and /user/settings/avatar: every
measured label/input getBoundingClientRect and computed style matches the
baseline exactly (0px deltas across all 5 sampled checkboxes and all 5
avatar radios).
2026-04-20 19:55:14 +00:00
kolaente e8b777d3be fix(ui): make code element background dark-mode aware and harden config store 2026-04-20 18:55:06 +00:00
kolaente 5ea7853dd6 refactor(frontend): port pagination rules into BasePagination and drop Bulma import
The Bulma components/pagination partial is only used by BasePagination
and its two wrappers (Pagination.vue, PaginationEmit.vue); no other
component renders raw .pagination-* markup. Ports the rules we actually
use (base layout, item sizing, hover/focus/disabled states, is-current
styling, mobile/tablet breakpoints) into BasePagination's scoped styles,
using :deep() to reach slotted children. The theme override for
.pagination-link on .has-background containers moves into an unscoped
style block on the same component. Drops the now-unused @import.
2026-04-20 10:38:08 +00:00
kolaente 10e5fa915a refactor(frontend): drop Bulma components/navbar import
.navbar and .navbar-end are only used in AppHeader.vue. Ports the
relevant rules (z-index 30 and min-block-size: $navbar-height) into
its scoped <style> block and drops the partial import.
2026-04-17 07:43:35 +00:00
Tink 95ec3325c2
refactor(frontend): migrate .box to Card and drop Bulma elements/box (#2640) 2026-04-16 14:14:36 +02:00
Tink 19ee7f26ee
refactor(frontend): drop Bulma components/card import (#2639) 2026-04-16 14:12:36 +02:00
kolaente 50465818ae refactor(frontend): drop Bulma components/media import
The .media / .media-left / .media-content classes are only used in
Comments.vue. Ports the relevant rules into its scoped <style> block
and drops the partial import.
2026-04-15 20:15:42 +00:00
kolaente 3c3b1820a1 refactor(frontend): port is-pulled-right locally and drop Bulma float helper
Only .is-pulled-right is used (3 callsites); .is-pulled-left and
.is-clearfix from Bulma's helpers/float partial have zero usage. Ports the
one needed rule into theme/helpers.scss so the Bulma import can go.
2026-04-15 20:12:45 +00:00
kolaente 95180a341d refactor(frontend): drop unused Bulma form/file partial import
Every file input in the codebase is hidden (via class="is-hidden" or
scoped display:none) and triggered programmatically by a custom XButton.
None of Bulma's .file / .file-label / .file-cta / .file-input / .file-name /
.file-icon classes are used anywhere in .vue files, so the partial is dead
code.
2026-04-15 11:06:11 +00:00
kolaente 39c804f460 refactor(frontend): drop unused Bulma modal partial import
Vikunja's Modal.vue uses a native <dialog> element with its own locally-
scoped classes (modal-dialog, modal-container, modal-content, modal-header).
None of Bulma's modal classes (.modal, .modal-background, .modal-card*) are
used anywhere in the app. The two CSS variables this partial provided
(--modal-card-head-padding, --modal-content-spacing-tablet) were inlined in
the two callers in the previous commits, so the whole partial is now dead
code.

Modal.vue already had several 'reset bulma' overrides fighting the default
rules Bulma applied to .modal-content; those can be cleaned up in a
follow-up.
2026-04-15 10:56:48 +00:00
kolaente 9899979ca7 docs(frontend): document styles architecture and token system 2026-04-15 10:02:39 +00:00
kolaente a08667b669 feat(frontend): upgrade Tailwind CSS from v3 to v4
- Replace tailwindcss v3 with tailwindcss v4 + @tailwindcss/vite plugin
- Create dedicated tailwind.css entry with granular imports (skip preflight)
- Use CSS-first config with prefix(tw) instead of JS config
- Switch from PostCSS plugin to Vite plugin for better performance
- Update class prefix from tw- (dash) to tw: (colon) in all Vue files
- Remove @tailwind directives from global.scss
- Delete tailwind.config.js (replaced by CSS directives)
- Update stylelint at-rules for v4 directives
2026-03-03 11:46:18 +01:00
kolaente 40287a1570 refactor: move bulma button styles to button component 2026-01-08 13:23:38 +01:00
Alberto Avon b984d49dc0
fix(menu): alignment of projects and subprojects in sidebar (#1974)
This PR changes the width of the collapse-project-button-placeholder
element in order to match the width of the collapse button that has 0.25
+ 0.5 rem of horizontal padding and the svg element inside has 1.25em of
width.

As you can see from the screenshots, the first and third projects are
misaligned compared to the second one. The same happens with
sub-subprojects.

<img width="253" height="129" alt="image"
src="https://github.com/user-attachments/assets/9ca55415-2303-45b5-8a9e-d1b0e03d44bb"
/>
<img width="258" height="258" alt="image"
src="https://github.com/user-attachments/assets/ff6abfbe-5527-48d2-b8aa-2b34da054e19"
/>

Here there are the same projects with this fix applied. The alignment
seems to be preserved even with deeply nested projects.

<img width="247" height="143" alt="image"
src="https://github.com/user-attachments/assets/6566e37a-2017-43d5-b94d-e3daf1a4eb7f"
/>

<img width="279" height="274" alt="image"
src="https://github.com/user-attachments/assets/95d6afd9-ace8-4d55-95c2-c1f924d4826f"
/>
2025-12-15 15:35:56 +00:00
William Guinaudie fda440bd08
fix: mobile device minimum width (#1337) 2025-09-01 22:49:42 +02:00
kolaente eb676aebef
feat: add subsets for all supported languages
This adds unicode ranges for all supported languages: Cyrillic (Russian,
Ukrainian, Bulgarian), CJK (Chinese, Japanese, Korean), Arabic, Hebrew,
Vietnamese diacritics, and various European languages.
2025-08-17 23:11:30 +02:00
kolaente f01f2af4cf
feat: use variable fonts
Resolves https://github.com/go-vikunja/vikunja/issues/493
2025-08-17 23:02:07 +02:00
kolaente 9e1ae2ce9c chore: remove bulma spacing utiltities 2025-08-03 15:05:48 +02:00
kolaente bd61f5179f fix(rtl): content list spacing 2025-08-03 15:05:48 +02:00
kolaente 450e49f586 fix(rtl): task add input layout 2025-08-03 15:05:48 +02:00
kolaente 0159ddc313 feat: replace top with logical properties 2025-08-03 15:05:48 +02:00
kolaente cdd4e46daa feat: replace border-bottom with logical properties 2025-08-03 15:05:48 +02:00
kolaente dd199c4dde feat: replace border-top with logical properties 2025-08-03 15:05:48 +02:00
kolaente 5cd256c485 feat: replace border-bottom with logical properties 2025-08-03 15:05:48 +02:00
kolaente 21943b61eb feat: replace border-top with logical properties 2025-08-03 15:05:48 +02:00
kolaente a25a4a00c9 feat: replace absolute left position with inset-inline-start 2025-08-03 15:05:48 +02:00
kolaente 0e1a253eb8 feat(rtl): mirror task description icon 2025-08-03 15:05:48 +02:00
kolaente d290f2e99c feat: add logical utils 2025-08-03 15:05:48 +02:00
kolaente 16f7fa087a fix: convert all css properties to logical 2025-08-03 15:05:48 +02:00
kolaente 654e397638 feat(rtl): basic rtl layout for rtl languages 2025-08-03 15:05:48 +02:00
kolaente aea2f708d3
fix: add greater unicode range to font subset
Resolves https://github.com/go-vikunja/vikunja/issues/143
2025-07-17 15:21:16 +02:00
Dominik Pschenitschni 342bbd6192 fix: correct comments 2025-07-02 17:46:21 +02:00
Dominik Pschenitschni 5b9d4fcc72
chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
Dominik Pschenitschni 82e4a9d0f4
feat(frontend): balance heading text (#952) 2025-06-16 22:40:28 +02:00
kolaente 5de0e84afa
fix(datepickr): reset styles
It seems like the input order changed and now the flatpickr core styles override our overrides. Since we plan to migrate away from flatpickr, the simplest solution is to just override this again with !important.
2025-03-31 19:30:07 +02:00
kolaente 65a2814b2a
feat(navigation): use focus-visible for nav items 2024-09-19 12:36:33 +02:00
Dominik Pschenitschni 7ef1e0a3e5 fix: textarea autosize for LanguageTool 2024-07-21 12:40:32 +00:00
Dominik Pschenitschni bbfd5270db feat: add tailwind with prefix (#2513)
Reviewed-on: https://kolaente.dev/vikunja/vikunja/pulls/2513
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Co-committed-by: Dominik Pschenitschni <mail@celement.de>
2024-07-19 07:33:10 +00:00
Dominik Pschenitschni 3b38a3faa6
feat(components): align component name casing SingleTaskInProject 2024-06-17 13:50:15 +02:00
Dominik Pschenitschni ede60950b4
feat(components): align component name casing RelatedTasks 2024-06-17 13:41:40 +02:00
Dominik Pschenitschni 3c80783bf2
feat(components): align component name casing Heading 2024-06-17 13:41:39 +02:00
Dominik Pschenitschni ff7e381645
feat(components): align component name casing Loading 2024-06-17 13:09:34 +02:00
kolaente fa628edc0c
fix(project): make sure gantt and kanban views shared with link share are full width
Resolves https://github.com/go-vikunja/vikunja/issues/258
2024-05-07 16:53:21 +02:00
kolaente 8a72fe26f8
fix(views): refactor filter button slot in wrapper
Before this change, the filter button on the top right was positioned using absolute positioning and plenty of tricks, which were brittle and not really maintainable. Now, the buttons are positioned using flexbox, which should make this a lot more maintainable.
2024-04-02 14:02:31 +02:00
kolaente 15215b30a0
fix(filters): rework filter popup button 2024-03-13 17:19:15 +01:00
kolaente fc4676315d
chore: move frontend files 2024-02-07 14:56:56 +01:00