Commit Graph

17763 Commits

Author SHA1 Message Date
charlie
17a092d438 fix(electron): compatible ipc for js object 2026-05-01 17:52:19 +08:00
Tienson Qin
d1ac0836be enhance(ux): add block content conflicts notice 2026-05-01 12:12:55 +08:00
Tienson Qin
46ab697178 fix(property): refine scoped choice actions for tag configs
fixes https://github.com/logseq/db-test/issues/812
2026-05-01 03:16:08 +08:00
Tienson Qin
9cfbaf80dc fix: normalize copy/paste export property data
- prefer memory-backed copied blocks before async clipboard read fallback in paste flow
- normalize clipboard write payload construction for web ClipboardItem
- render exported property keys with property titles instead of db ident suffixes
- render datetime property integer values as journal titles using export date formatter
- add regression tests for paste and export property rendering
2026-05-01 00:15:32 +08:00
Tienson Qin
4bbb53cdf3 fix(db-worker): use template config when startup config missing 2026-04-30 22:50:19 +08:00
Tienson Qin
9e4b8c8246 fix(cli): resolve packaged db-worker runtime path 2026-04-30 19:38:45 +08:00
Tienson Qin
abbc1ad628 Merge pull request #12548 from logseq/feat/desktop-bundle-cli
Feat/desktop bundle cli
2026-04-30 18:09:35 +08:00
Tienson Qin
464c5375ee fix: update local changes 2026-04-30 13:27:21 +08:00
Tienson Qin
c2a1d98aaf Merge branch 'master' into feat/cliable 2026-04-30 12:52:03 +08:00
Tienson Qin
009d93dc92 fix: client/server checksum mismatch 2026-04-30 12:51:35 +08:00
Tienson Qin
4ce4aedee8 fix: download remote graph should set sync metadata too 2026-04-30 01:46:44 +08:00
Tienson Qin
49dd71d658 fix: don't throw error for mkdir/stat 2026-04-30 01:26:42 +08:00
Tienson Qin
72822bc720 fix: addresses ipc errors in general 2026-04-30 01:22:34 +08:00
Tienson Qin
e750c79e34 chore: remove unused node persist-db impl 2026-04-30 01:01:17 +08:00
Tienson Qin
db84d6bd96 fix(db): validate sqlite format on import 2026-04-30 01:01:17 +08:00
rcmerci
12b4c3399d fix(cli,db-worker): not keep empty new graph when sync download failed 2026-04-30 00:18:12 +08:00
Tienson Qin
40d8442180 fix: no need to load db from disk since data is written directly 2026-04-29 23:25:16 +08:00
Tienson Qin
72252e5b58 refactor: move create-remote-graph to db worker
also, don't use :logseq.kv/graph-uuid to detect whether it's still
a remote graph, since it's not retracted when deleting a remote graph.
2026-04-29 22:45:49 +08:00
rcmerci
07f3006a5d fix(cli,db-worker): able to upload the graph again after delete related remote graph 2026-04-29 22:07:07 +08:00
Tienson Qin
2a1ec47b03 fix: local-tx not initialized when creating a new graph 2026-04-29 19:41:59 +08:00
rcmerci
a43485a68f fix(test): invalid HOME env 2026-04-29 17:37:25 +08:00
Tienson Qin
e0076fcffc chore: remove ENABLE-FILE-SYNC-PRODUCTION 2026-04-29 17:14:18 +08:00
Tienson Qin
69c4d36a61 fix: :block/name shouldn't be updated for custom date formatter
fixes https://github.com/logseq/db-test/issues/830
2026-04-29 16:44:22 +08:00
rcmerci
743e389961 fix(test): fails on CI about some permission issue on directories 2026-04-29 15:22:18 +08:00
rcmerci
ca7647f808 enhance(cli): update db-worker-node options 2026-04-29 14:48:54 +08:00
Tienson Qin
62eac11fe3 fix: search doesn't returns matched pages 2026-04-29 13:10:05 +08:00
Gabriel Horner
3943f0b1ec fix(cli): sync status fails with unactionable e2ee-password-not-found error
`sync status` can fail with error to use nonexistent
--e2ee-password option. `status` is a read only operation and isn't in
authenticated-sync-actions so just remove e2ee check for it
2026-04-28 16:16:35 -04:00
Gabriel Horner
49382463cd fix(cli): hint not showing up for sync subcommands
e.g. `sync status` and e2ee-password-not-found error
2026-04-28 15:57:21 -04:00
Gabriel Horner
90891fdab7 fix(cli): config.edn reading and writing incorrectly
from a literal '~' directory under current directory
because it wasn't expanded
2026-04-28 13:37:31 -04:00
rcmerci
6d91d8ccae Merge remote-tracking branch 'origin/master' into feat/cliable 2026-04-28 22:59:59 +08:00
scheinriese
63c3b8210a feat: keep saved web-images visible with green badge, polish broken state
Web-image dedup turned into an annotation. Tiles whose source-url already
matches a local asset stay in the row but swap their globe overlay for a
deep-forest-green disc with a white check. Click on a saved tile routes
through the existing asset (no re-download, no orphan duplicate). Keeps
the row at full width even when 3 of 5 hits are already saved, and avoids
the "broken search" feel of the previous filter.

Disc color is a fixed #137333 rather than a Radix token because the
green scale's step 9 is intentionally similar across themes — pairing it
with a flipping icon color leaves white washed out in dark mode and
near-black on green in light mode. Hardcoded deep green is the simplest
single-token answer that gives white the contrast it needs in both modes.

Broken-image state (image-icon-cp's :error? branch) reworked from a heavy
filled bg-gray-04 block to a bordered placeholder-style tile matching the
"pick an image" affordance — solid border (vs dashed for "awaiting
input"), translucent fill, muted photo-off glyph at 0.45x size. Same
chrome family, distinct enough to read as "broken/persistent" rather
than "empty/inviting".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 16:25:01 +02:00
scheinriese
5cc684b13b fix: page-icon cold-load, asset-picker dedup, and a11y polish
- icon dispatch + renderable-icon? trust the asset-uuid string instead of
  probing the renderer-side entity, so a fresh navigation to a page whose
  icon points at an asset renders via the filesystem loader instead of
  silently rendering nothing while DataScript catches up.
- <load-asset-url! widens the retry window when the error is db-worker
  not-yet-initialized (15x500ms) vs real failures (3x1s unchanged).
- asset-picker hides web-image suggestions whose source-url already
  matches a saved asset, so the same image no longer shows up in both
  Web images and Available assets. Pull queries extended to surface
  :logseq.property.asset/source-url, and the keyboard-nav flat list
  filters in lockstep with the visible UI.
- Custom-tab Text/Avatar/Image preview thumbnails get aria-hidden so
  screen readers and find-by-text read just the label rather than
  "STAvatar"/"STText".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 15:18:35 +02:00
Gabriel Horner
cecabbf157 fix: capitalize paid feature consistently like we do with Sync 2026-04-28 09:03:30 -04:00
Tienson Qin
99d2e30066 fix(sync): ignore oversized tldraw payload on snapshot upload 2026-04-28 19:50:45 +08:00
Tienson Qin
293309801f fix(sync): cap snapshot upload payload to 1MB 2026-04-28 19:14:21 +08:00
Tienson Qin
bba25ea579 fix: set batch upload kvs to 500 instead of 2000 2026-04-28 18:29:43 +08:00
rcmerci
eca0ab1a36 Merge remote-tracking branch 'origin/master' into feat/cliable 2026-04-28 18:17:17 +08:00
Tienson Qin
200569e512 fix: web backup 2026-04-28 18:06:45 +08:00
TechnoHouse
80344840c4 feat: configurable publish server URL (#12520)
* feat: configurable publish server URL

Mirror the Custom Sync Server URL pattern (#12459) for the single-page
publish service. Settings -> Advanced -> Publish server URL opens a
dialog that writes the URL to localStorage; frontend.config/publish-api-base
reads it on each call so URL changes take effect without a restart.

Unlike sync, publish does not need a push-config-to-worker step because
the handler is purely HTTP request-response with no long-lived connection.

* fix(i18n): resolve en.edn merge after master sync

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-04-28 15:44:55 +08:00
charlie
5907b09824 fix(i18n): update interpolate function reference in plugin 2026-04-28 15:35:00 +08:00
Charlie
cfa90139b4 enhance(plugins): custom block renderer (#12533)
* enhance(plugins): add block properties and block renderers with conditional rendering

* chore(libs): bump version

* enhance(docs): update Experiments API guide with detailed usage examples and best practices

* enhance(ui): implement plugin renderer effects and enhance action bar visibility

* enhance(plugin): improve router refresh mechanism for dynamic plugin routes

* chore(libs): rename development notes and add SKILL.md for plugin SDK

* enhance(plugin): enhance PluginLogger with structured log entries and UI for viewing logs

* fix: lint

* Update src/main/frontend/components/block.cljs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/main/frontend/handler/plugin.cljs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/main/frontend/handler/plugin.cljs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update libs/src/modules/LSPlugin.Experiments.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/main/frontend/handler/plugin.cljs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* enhance(plugin): add rich text interpolation to i18n translation

* fix: lint

* fix: lint

* fix: remove unnecessary newlines and clean up code formatting

* fix: lint

* fix(libs): incorrect entry path for js mode

* enhance(docs): add custom theme plugin guide and update SKILL.md

* enhance(plugin): add 'open logs' option in multiple languages

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-28 15:17:55 +08:00
Tienson Qin
1bcd855542 fix: flashcards dialog closed immediately after finishing one card 2026-04-28 13:29:22 +08:00
Tienson Qin
0d5986eb90 fix(flashcards): load collapsed children when revealing answers
fixes https://github.com/logseq/db-test/issues/828
2026-04-28 12:50:13 +08:00
Tienson Qin
cea40a2cd6 fix(outliner): remap pasted property value uuids 2026-04-28 12:19:47 +08:00
Tienson Qin
540e410320 fix: paste 2026-04-28 11:57:44 +08:00
scheinriese
c4a61b75d7 feat: live icon hover preview, custom-tab routing, and flash-free commits
The page-icon now previews any tile the user is hovering or keyboard-
navigating in the picker — mirroring the existing color preview but
extended to icon, emoji, text, avatar, and image-placeholder types. The
preview state is keyed by `:db-id` and reads through the existing
`:ui/icon-hover-preview` slot.

Custom-tab tiles route to the asset-picker on the right tab and commit
a placeholder synchronously: Avatar commits the initials avatar and
opens the Avatar tab; Image commits an `:image-placeholder` (rendered
as a plus inside a dashed rounded square — the same affordance Logseq
uses for "no icon yet, click to add") and opens the Image tab. The
asset-picker accepts an `:initial-mode` prop that overrides its
heuristic seed.

Mouse-clicking a tab now also focuses the search input so ArrowDown
flows into the grid (the previous code only updated `*focus-region`,
leaving DOM focus on the tab button so the keydown listener never
fired).

A `pending-icon` `rum/use-state` in `icon-picker` holds the just-
committed icon-value during the ~15ms SharedWorker round-trip between
the DB write and the entity update propagating back through the
reactive read chain. Without this, every commit visibly flashed the
old icon for one render cycle. The state auto-clears via `use-effect`
on `[icon-value]` deps (Logseq's `hooks/use-effect!` uses Clojure
value equality, so map content changes fire correctly).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-27 23:33:39 +02:00
scheinriese
c2cf10e35d refactor: unify page-icon vertical alignment across all icon types
The page-title icon container used `.flex.self-start` and relied on each
icon type's own intrinsic baseline (font glyph for emoji, SVG bottom
anchor for tabler, etc.), with `margin-top: 8px` and `pb-[1.5px]`
band-aids compensating for one type at a time. Replaced with a single
flex-center 38×38 button rule, scoped to `.ls-page-title .ls-page-icon`,
so every type centers on the same visual axis. Drops the per-type pixel
overrides, the mobile-specific `:size 28` (mobile font is unchanged from
desktop, so the override was a band-aid), and the inline `1lh` style.
Bumps the icon-to-title gap from `gap-2` to `gap-3` (12px) for breathing
room.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-27 23:33:21 +02:00
rcmerci
9e3a592cff fix: toggle spell-check not working
fix https://github.com/logseq/db-test/issues/823
2026-04-27 23:31:38 +08:00
scheinriese
154a0865c3 fix: restore icon-picker focus after color pick when no icon highlighted
The color-picker's :after-close! callback was gated on @*highlighted-index,
so opening the color picker without first navigating to an icon left focus
nowhere when the popover closed. The capture-phase keydown listener only
fires for keys whose target is inside the icon-picker container, so the
picker would appear open but reject every keystroke until the user clicked
the search input. Fall back to focusing the search input (and resetting
:focus-region to :search) when there's no highlighted tile to return to.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 20:49:38 +02:00
scheinriese
0763eeef71 feat: full keyboard navigation across color picker regions
Tab/Shift+Tab cycles three lanes (swatches → hex input → recents) and
arrow keys cross between them: hex input ↑ jumps to the active swatch,
↓ jumps to the first recent; the swatches grid's bottom row hops into
the hex input when the pane is open. The recents lane gets roving
tabindex with 2D nav across its two flex-wrapped rows, and react-
colorful's pad/hue sliders are stripped from the Tab order (mouse/
touch only) so keyboard users never land on the pad. The collapsed
pane is marked `inert` to keep its hidden controls out of focus.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 20:12:39 +02:00