Replace chained if/assoc rebindings with idiomatic cond-> in
combo-keys, separate-keys, and compact-keys.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The page-up and page-down keys were mapped to Private Use Area Unicode
characters (U+F571, U+F572) that don't exist in any font loaded by the
kbd elements, rendering as invisible/empty badges.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On macOS, Option+key combos in the shortcut recording dialog were
silently dropped because Google Closure's KeyHandler corrupts the
keyCode (merging keydown/keypress produces Unicode charCodes like ç
instead of the base key). Fall back to the native KeyboardEvent.code
property when the primary key-names lookup fails and a modifier is
held — works cross-platform (also helps AltGr on Windows).
Also replace "Opt" text with the standard ⌥ symbol in shortcut badges,
matching ⌘ and ⇧, and update all round-trip paths (decorate, undecorate,
canonicalize, normalize) to handle the new symbol.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Row highlight on shortcut trigger now uses a horizontal gradient sweep
(background-position animation) instead of a static background flash,
providing a distinct visual language from the focus ring
- Shimmer uses theme-aware accent color via color-mix on keymap page,
with a neutral fallback in shui.css base styles
- Guard against animation spam: clearTimeout+reset pattern prevents
stale timeout accumulation during rapid key repeat; reflow only
forced on first trigger, class stays applied until last trigger ends
- Fix combo key press animation: animate the container (the keycap)
instead of individual kbd elements, so translateY and box-shadow
follow the container's border-radius correctly
- Scope row shimmer to .shui-shortcut-row/.shortcut-row elements
to prevent accidental shimmer on standalone badge containers
- Respect prefers-reduced-motion for all new animations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
highlight-row! was looking for .shui-shortcut-row but keymap rows use
.shortcut-row, so the row highlight silently failed. Widen the selector
and add a visible background style for keymap rows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ^{:key} metadata to fragment in shortcut-keymap-x for loop
- Normalize "cmd"/"command" → "meta" and "opt"/"option" → "alt" in
normalize-binding so cmdk shortcut-press! calls match rendered
data-shortcut-binding attributes
- Remove onCloseAutoFocus preventDefault from both popovers so Radix
returns focus to the trigger button on close
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace 24 hardcoded English UI strings with (t :keymap/...) translation
calls and add corresponding keys to en.edn. Thread a :chord-separator
prop through the shui shortcut component so chord sequence "then" text
is translatable without adding i18n awareness to the presentation layer.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add chord-sequence-keys component to shui shortcut for multi-step
bindings (e.g. ⌘C then ⌘R) that were previously truncated to just
the first key. Detects nested binding groups and renders each combo
with a "then" separator and proper glow styling.
- Update normalize-binding to handle chord sequences by joining groups
with spaces instead of flattening into a single combo string.
- Cap keystroke recording at 5 keys to prevent app crashes from
excessively long bindings being persisted to localStorage.
- Add try/catch around localStorage shortcut reads for resilience
against corrupt data on startup.
- Fix vertical centering of shortcut badges using display:contents
wrappers and removing padding-top from label-wrap/action-wrap.
- Style Reset button with accent color and underline-on-hover.
- Add white-space:nowrap to button reset block to prevent text wrapping.
- Use gap instead of margin for shortcut-input-binding spacing.
- Minor CSS refinements: search input padding, keystroke border color,
empty state sizing, toolbar action specificity.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract animate-element!/highlight-row! helpers in shortcut-press! (was 4x duplication)
- Extract matches-keystroke? predicate (was duplicated in count + render)
- Replace <a> tags with <button> for all interactive elements (remove, clear, reset, undo, toggle, refresh)
- Add aria-label to icon-only buttons for screen reader support
- Add button reset CSS for elements changed from <a> to <button>
- Replace hardcoded rgba colors in CSS glow/shadow/row-pressed with theme variables
- Define press-animation-ms constant (was magic number 160)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite the shortcut customization UI from a modal dialog to an inline
popover with a state machine (idle → recording → accepted/conflict).
Add cross-context conflict awareness with amber warnings for non-blocking
conflicts across handler groups, while keeping red blocking conflicts for
same-context collisions. Redesign Esc/Backspace semantics for consistency:
Esc always closes, Backspace always removes. Add Radix tooltip on Reassign
button and polish spacing, animations, and feedback banners.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unused `interactive?` prop from shortcut component and all call sites
- Trigger `shortcut-press!` animation when shortcuts are invoked
- Update shortcut settings UI to use `shui/shortcut` instead of raw `<code>` elements
- Fix shortcut key min-width (fit-content → 20px) for consistent sizing
- Pass raw-binding through `render-keyboard-shortcut` for data attribute matching
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the single-style shortcut renderer with a new component
supporting combo (simultaneous keys), separate (sequential keys),
and compact (text-only) display styles with auto-detection.
- Add shortcut-press! for triggering key press animations via DOM
- Add CSS for all 3 styles with glow effects and reduced-motion support
- Update CMD+K to use v2 styles and press animations on Enter/Cmd+C
- Add accessibility defaults (interactive?/aria-hidden?) to consumers
- Remove old v1 namespace, consolidate under logseq.shui.shortcut
- Remove unused size/theme/animate-on-press? params from API
* fix(lint): make worker/frontend separation lint work on Windows
* chore: update cljs:electron-watch script to include test flag
* chore: remove dead root dependencies
* chore(deps): converge better-sqlite3 to 12.6.2 across deps packages
* chore(deps): converge fs-extra to ^11.3.0 across package roots
* fix(test): correct parameters for create-if-not-exists function
* chore(deps): converge cljs-bean to 1.9.0 across deps roots
* fix(tests): escape regex in cljs:run-test script
* chore: pin root packageManager to yarn 1.22.22
* chore(build): replace del with fs.rmSync in gulp clean
* chore(build): replace npm-run-all with npm-run-all2
* chore(security): upgrade dompurify and unify sanitizer path
* chore(observability): upgrade web sentry to 8.x
* chore: remove unused react-draggable dependencies
* chore(ci): fix windows release artifact collection
* fix(build): create static dir before gulp clean scans it
* fix: update nbb-logseq dependency to version feat-db-v33
* fix(test): move start-time initialization after clone repo
* fix(deps): update nbb dependencies and adjust test script paths to compatible with windows path delimiter
* chore(deps): remove dead meander dependency
---------
Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
* feat(asset): add alignment options for images
* enhance(ux): select block for the action of double click in the image asset container
* enhance(asset): change alignment property type from string to keyword and normalize alignment handling
When new built-in properties are supported in exporter, all-built-in-names
and file-built-in-property-names should be updated. No need
to handle block/properties-order and block/properties-text-values
as those are ignored
Template blocks were being copied instead of updated in place. Would
feel buggy to user as Template blocks would show up twice in search and
would not be where they had defined them