Commit graph

2625 commits

Author SHA1 Message Date
johnnyjoygh
b88a71540a feat(web): add 0.5x and 0.75x audio playback speeds
Voice notes recorded quickly or in noisy surroundings are easier to
follow when slowed down. The speed button still starts at 1x and cycles
through 1.5x and 2x before wrapping to the slow rates.

Closes #6263
2026-09-03 21:34:38 +08:00
johnnyjoygh
02caf98c7b chore: separate the header brand from the navigator
The space switcher and the navigator pills shared one grammar (rounded
pill, same padding, 16-20px glyph, labels on the same rail), so the
header read as two rows of a list. Make the brand a title (24px mark,
15px semibold, small chevron), keep only the bordered compose control in
the header, move search to the trailing end of the navigator, and size
the nav pills as 28px squares to match compose.
2026-09-03 09:23:01 +08:00
johnnyjoygh
882664d9d6 refactor(calendar): collapse the activity calendar to the month grid
Only the month view is rendered anywhere, so drop the unused year
calendar, the size variants and the helpers that existed for them.

- Build the month grid in one place (monthDays.ts) with the week-start
  rotation and out-of-month padding, and test it.
- Keep every chip visual in cellStyles.ts. A selected day now owns its
  fill outright so the empty-cell hover tint cannot swap the accent out.
- MonthCalendar derives maxCount from its own data instead of taking it
  as a prop; the index exports only what callers use.
2026-09-02 22:55:51 +08:00
johnnyjoygh
aba1f7384d feat(sidebar): separate checked filters from current rows
The rail used one fill for two meanings: the page you are on and a
filter that is on. A view, a tag and a calendar day could light three
rows like three current pages, while the view itself was never echoed
above the list.

- Split sidebarRowStateClasses into idle / current / checked. Nav pills,
  settings sections and list scopes stay filled; views, tags (flat and
  tree) and the selected calendar day take the checked look: foreground
  text, accent icon and count, a 2px accent mark in the rail inset, no
  surface.
- Echo the active view as a filter chip like a tag, and format the day
  chip as a date.
- Make the tags list/tree toggle surface-free so only rows carry a fill.
- Tighten rows from 32px to 28px; nav pills keep their 32px square.
2026-09-02 22:50:29 +08:00
johnnyjoygh
ce0dd23d2f fix(ui): refine compact navigation and memo actions 2026-09-02 22:22:13 +08:00
johnnyjoygh
5a65350400 fix(sidebar): flatten account footer surface 2026-09-02 20:45:43 +08:00
Johnny
d79b2e1dc3
feat(sidebar): redesign memo detail navigation (#6261) 2026-09-02 20:20:22 +08:00
johnnyjoygh
245e5e3a3e chore: prioritize access policies in system settings 2026-09-01 23:30:43 +08:00
johnnyjoygh
191ec01d11 fix(sidebar): unify layout rails and spacing
Keep the primary navigator compact and horizontal while aligning header, content, and footer controls on shared artwork and label rails. Add regression coverage for symmetric popovers, compact hit targets, and mobile drawer accessibility.
2026-09-01 23:24:50 +08:00
Johnny
673b9df05f
feat(editor): add Markdown formatting shortcuts (#6258) 2026-09-01 21:54:55 +08:00
johnnyjoygh
ee3a0a2bba chore(sidebar): add common content and clarify navigation 2026-09-01 21:24:56 +08:00
johnnyjoygh
de843f658a chore: slim down the view options popover
Drop the title bar and section micro-headers, and let the layout
switcher recede: transparent track with an accent fill on the active
segment only, which also reads correctly in dark mode.
2026-08-31 23:56:36 +08:00
boojack
04be0d9ee6 chore(web): unify sidebar rows on a shared row grammar
Align every sidebar list (tags in both modes, views, settings, memo
detail) on shared slot and count-rail primitives so icons, labels, and
digits sit on the same vertical lines. Tree branches show their # mark
at rest and swap in the chevron on hover or keyboard focus; views rows
gain glyphs and move onto the same grammar, with ViewsSection extracted
to its own module.
2026-08-31 23:40:47 +08:00
boojack
2c7cf91aac
fix(editor): enable native mobile text assistance (#6248) 2026-08-30 11:59:16 +08:00
boojack
171687c456
fix(map): restore keyless OpenStreetMap tiles (#6242) 2026-08-28 22:41:36 +08:00
Chen, Ting-An
9fd3885e43
fix(i18n): complete Traditional Chinese space translations (#6241) 2026-08-28 21:47:31 +08:00
amblued
22a5f3385b fix(ui): refine space labels and sidebar menus
Keep long Space titles readable without expanding compact surfaces.

Fold Inbox into the user menu and align sidebar popups with the rail.
2026-08-28 01:01:01 +08:00
amblued
9d2b77ced8 feat(space): add client-defined UIDs and identity cues
- Generate UUID v4 values in the client with validated custom UID
  support.\n- Show immutable UIDs where Space titles need
  disambiguation.\n- Standardize Space surfaces on the Lucide Astroid
  icon.
2026-08-28 00:33:09 +08:00
amblued
040f9ae717 fix(web): make archived independent of space scope 2026-08-26 23:43:05 +08:00
ABird
854d893fc6
feat(spaces): add settings management (#6234) 2026-08-26 22:20:40 +08:00
amblued
cdd13ca24e feat(spaces): unify collection scope across resource pages
- Treat All as an unfiltered Space collection while preserving exact Space filters.
- Keep global resources outside remembered Space context and preserve memo navigation origins.
- Surface Space placement consistently across memo, attachment, and visibility UI.
2026-08-26 09:16:28 +08:00
ABird
05f882e43a
feat(spaces): add consent-based member invitations (#6232) 2026-08-25 23:21:19 +08:00
amblued
45c3a79b12 fix(settings): validate memo content length limit 2026-08-24 23:35:32 +08:00
ABird
66b9cb49c1
feat(spaces): add space-aware UI and filtering (#6230) 2026-08-24 23:13:55 +08:00
amblued
6da8461e1d
feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
amblued
fc6cbab7d0
fix(editor): scope view toggles to inline presentations (#6227) 2026-08-23 16:26:17 +08:00
amblued
76a7629243
feat(instance): persist access mode independently of URL (#6225) 2026-08-22 14:15:31 +08:00
amblued
fe9a9bdf64
refactor(reaction): link reactions to memo IDs (#6221) 2026-08-22 00:12:35 +08:00
amblued
f36ca9317d
feat(web): add a global memo composer to the sidebar (#6219) 2026-08-21 21:14:28 +08:00
amblued
e99ae78012
fix(markdown): avoid parsing currency as inline math (#6216) 2026-08-20 19:47:10 +08:00
amblued
e67ec79351
fix(web): correct RTL layout behavior (#6215) 2026-08-19 21:14:51 +08:00
amblued
488b71a00a chore(sidebar): animate global navigator pill transitions
Give the home/attachments/inbox navigator one shared pill anatomy so the
active label expands and collapses as a single smooth motion: constant
px-[7px] padding with the label in a grid column animating 0fr to 1fr,
tooltips kept mounted via Base UI's disabled prop, and the scope control
as one always-mounted uncontrolled DropdownMenu that vetoes the menu and
navigates when off the scope routes. The unread badge scales in and out,
and the scope chevron rotates while its menu is open.

The tooltip anchors to a wrapper span because a disabled tooltip stamps
data-trigger-disabled on its trigger element, which Base UI's shared
floating logic would read as the menu trigger being disabled.
2026-08-19 19:35:37 +08:00
amblued
38412eb75a
fix(storage): proxy S3 attachments through authenticated routes (#6210) 2026-08-18 23:38:35 +08:00
shiva
c9324f9519
chore: add Hebrew language support (#6203)
Co-authored-by: AlloyQA Runner <runner@alloyqa.invalid>
2026-08-18 21:24:27 +08:00
johnnyjoygh
bbb23958b2 fix(editor): match tag autocomplete on path segments
Tag completion filtered candidates with a full-path prefix test, so a
nested tag was only reachable by retyping its whole ancestry: `#Mem`
offered nothing for `software/hosted/Memos`.

Rank candidates instead — full-path prefix, then path-segment start,
then any other position — and keep that order by opting out of
CodeMirror's own fuzzy filtering.

Fixes #6190
2026-08-16 22:09:04 +08:00
Valentin Sonin
4b561d89a8
chore: update russian localization (#6195) 2026-08-16 21:48:52 +08:00
boojack
14d757ce1f fix(editor): preserve IME composition during content sync 2026-08-14 00:08:45 +08:00
boojack
a569775120 chore(web): standardize UUID generation 2026-08-13 22:45:08 +08:00
Johnny
7d971b1c61
feat(storage): add named attachment storage drivers (#6184) 2026-08-13 22:37:11 +08:00
guomengjia618-dot
bba1d6d497
fix(i18n): correct French memo link label (#6182)
Co-authored-by: guomengjia618-dot <271711167+guomengjia618-dot@users.noreply.github.com>
2026-08-12 20:52:25 +08:00
Johnny
57bfe0a70f
feat(filter): support memo location filters (#6181) 2026-08-12 00:00:37 +08:00
Johnny
da81b6b48f
feat: persist and display client media metadata (#6180) 2026-08-11 23:47:21 +08:00
Chen, Ting-An
38bc02c3cc
chore(i18n): complete Traditional Chinese translations (#6177) 2026-08-11 18:33:15 +08:00
Johnny
9a928c2868
feat: insert attachment images into memo content (#6172) 2026-08-10 22:53:07 +08:00
Johnny
4e8b262d6d
refactor(memo-views): replace shortcuts with saved views (#6167) 2026-08-09 20:27:27 +08:00
kpab
6c22f9562b
i18n(ja): add missing Japanese translations (#6165) 2026-08-09 16:24:47 +08:00
Johnny
f75d49f9b6
fix(web): restore sidebar and outline behavior (#6161) 2026-08-08 08:58:07 +08:00
s4kura
e5ed6e7ec6
fix: align memo outline links with rendered headings (#6159) 2026-08-07 09:51:48 +08:00
Wally
3f567fda45
fix(web): keep share token on shared-memo attachment thumbnails (#6155) 2026-08-07 00:21:53 +08:00
johnnyjoygh
ec689c3a03 chore(sidebar): replace static mode with a library-content fallback
The rail had two navigation grammars for the same destinations: a
compact icon strip on recognized routes, and StaticNavigation — full
labeled rows — on everything else (/about, /403, /404, wildcard).
Crossing onto one of those pages rearranged the entire rail, and any
route nobody remembered to classify silently inherited the alternate
layout.

Make the frame invariant instead: header, global strip, contextual
content, footer — on every route. Pages without a specific sidebar
tenant now fall back to the default library content (the home
collection for signed-in users, explore for guests), following the
convention that error and utility pages render inside the persistent
shell rather than degrading it. The memo-detail route gets the same
fallback while the page has not yet published its descriptor, instead
of a blank scroll area.

Off the collection routes the library is display-plus-navigation, so
StatisticsView and TagsSection accept a navigationTarget: calendar and
tag clicks land on / or /explore with the filter in the query string,
which RootLayout's route-change effect would otherwise wipe.

StaticNavigation is deleted, About returns to living only in the user
menu (the showAbout prop is gone), and the guest strip now marks About
active on /about.
2026-08-07 00:04:04 +08:00