Commit Graph

2040 Commits

Author SHA1 Message Date
A. S.
ce61af1483 feat: add :asset property type with thumbnail picker (#12506)
* feat(property): add :asset property type with thumbnail grid picker

Introduces a new user-facing "Asset" property type, modeled on :node but
restricted to blocks tagged with :logseq.class/Asset. Unlike :node's text
search dropdown, the :asset picker opens a 4-column thumbnail grid popup
populated from db-async/<get-tag-objects, filtered to image assets via
common-config/img-formats.

Once a value is set, the property cell renders an inline asset-cp preview
alongside "View" and "Swap" action buttons. View dispatches a new
:asset/show-preview event that opens the image lightbox for images, the
PDF viewer for PDFs (same path as the inline open-pdf-file handler), and
falls back to redirect-to-page! for other asset types. Swap reopens the
grid popup so the user can pick a different asset.

- Register :asset in user-built-in-property-types, user-ref-property-types,
  and property-types-with-db; add asset-entity? validator that requires
  :block/title and :logseq.class/Asset in :block/tags.
- Label the type as "Asset" in property-type-label so it appears in the
  property type sub-pane.
- Add asset-grid-popup-content and asset-value-picker components in
  property/value.cljs, dispatch :asset ahead of the generic select branch
  in property-scalar-value-aux, and include :asset in the reference
  display set used by select-item.
- Wire :asset/show-preview in handler/events/ui.cljs using the existing
  lightbox, pdf-assets, and assets-handler plumbing.

* fix(property): refresh asset thumbnail after Swap

asset-cp captures the asset block in :will-mount, so React reconciling
the same component in place across re-renders left the old thumbnail
rendered even though the underlying property value had been updated
(visible because the View button opened the newly chosen asset).

Keying asset-cp on (:block/uuid value) forces React to remount it on
swap so :will-mount re-runs with the new block.

* fix(property): let image clicks select the asset in picker grid

asset-cp renders an <img> with its own click handler that opens the
image preview lightbox, which swallowed clicks before they could reach
the grid cell's select-this-asset handler. Users had to click the
padding around an image to pick it. Disabling pointer events on the
thumbnail wrapper lets the click bubble straight to the parent button.

* fix(property): fit asset thumbnails without cropping any aspect ratio

asset-cp emits the <img> with explicit width/height attributes (default
250px) wrapped in a div.asset-container that has no size constraint of
its own, so neither square nor tall images respected the thumbnail
bounding box: max-h-full on the img resolved against an auto-sized
parent and tall images overflowed the property row.

Constrain every descendant with !important max-w-full / max-h-full and
force the img to w-auto h-auto object-contain, and give the block
property thumbnail a fixed 80x80 bounding box instead of the previous
120x80 max that let the asset-container stretch. Same override is
applied to grid picker cells so they stay uniform regardless of source
aspect ratio.

* fix(property): stop tall images cropping in asset picker grid

The previous fix applied max-w/max-h-full to all descendants, but
div.asset-container's own height stayed auto, so max-height: 100% on
the img resolved against an auto-sized parent and tall images still
overflowed their grid cell.

Force div.asset-container itself to w-full h-full (and flex-center) so
the img's max-h-full resolves against a real bounded height. Same fix
is applied to the block property thumbnail for consistency.

* feat(property): show all asset types in picker grid with title bar

Drop the image-only filter so the asset picker grid lists every block
tagged :logseq.class/Asset, not just images. Non-image assets render as
a centered tabler icon + uppercase extension label chosen by a new
asset-icon-for-type helper (photo / music / movie / file-type-pdf /
file fallback); image assets keep the existing asset-cp thumbnail.

Each grid cell is now a vertical flex with a small title strip at the
top showing :block/title (truncated) and the thumbnail body filling
the rest of the square. min-height: 0 on the body lets the flex child
shrink inside the aspect-ratio box so square images still fit without
pushing the title off screen.

* feat(property): skip image sizing constraints for non-image asset values

The filled asset-value-picker used to force every asset-cp render into
a fixed 80x80 box with img overrides meant for bitmap thumbnails. That
mangled PDF link icons, audio <audio> controls and video <video>
players because those elements have their own intrinsic layout.

Branch on (:logseq.property.asset/type value): image assets keep the
80x80 constrained box so square/tall/wide bitmaps still fit without
cropping, while every other asset type renders asset-cp in a plain
flex-shrink-0 wrapper at its natural size.

* feat(property): preview video assets in a modal instead of inline

Inline asset-cp for videos rendered a full <video> player in the
property row, which was oversized and awkward next to the View/Swap
buttons. Replace it with a compact shui button showing a movie icon
plus the truncated asset title; clicking the button dispatches the
existing :asset/show-preview event.

The :asset/show-preview handler grows a video branch that resolves the
asset URL via <make-asset-url and opens a centered shui dialog with an
autoplaying <video controls>, capped at 80vh so it never exceeds the
viewport. Image lightbox and PDF viewer paths are untouched.

* refactor(property): drop redundant View button on asset property values

Every asset type already has a native click-to-preview path: image
thumbnails open the lightbox via resizable-image's handler, PDF links
open the PDF viewer via asset-link, audio/video players are clickable
in place, and the video-asset fallback button itself dispatches
:asset/show-preview. The separate View button just duplicated those
actions, so remove it and leave only Swap next to the thumbnail.

* fix(property): let video asset button grow to fit title

The video preview button capped itself at max-w-[240px] with a
truncated title span, cropping any video whose name was longer than
the cap. Drop the cap and truncation so the button sizes to its
content, and add h-auto whitespace-normal text-left so titles that
wrap onto multiple lines stay visible instead of being clipped by
shui's fixed button height.

* refactor(property): review cleanups for :asset property type

Addresses review feedback from the branch self-review:

- Extract the asset-cp-fit CSS escape hatch into an asset-thumb-fit-class
  def with a docstring explaining why .asset-container needs forced
  sizing, and reuse it in both the grid cell and the filled-state
  thumbnail instead of duplicating the 60-char tailwind arbitrary
  variant soup in two places.
- Simplify the two-clause cond in asset-value-picker's filled branch
  to an if now that the :else is the only fallthrough.
- Wrap set-block-property! in the grid picker on-click with p/catch so
  transact failures log and surface a notification toast instead of
  being silently swallowed after the popup hides.
- Replace the bespoke :content-props {:class "max-w-[min(90vw,1200px)]"}
  on the video preview dialog with shui's supported :auto-width? true
  option, which applies max-w-[90vw] w-max sm:max-w-[960px] via the
  data-auto-width CSS hook.
- Add a new logseq.db.frontend.property.type-test ns covering both the
  :asset property type registration (present in user-built-in /
  user-ref / all-ref / property-types-with-db, absent from
  cardinality / closed-value) and the asset-entity? validator against
  a real datascript db built via db-test/create-conn-with-blocks.
- Add a comment above asset-entity? documenting that :logseq.class/Asset
  lives in ldb/private-tags, so the class is used programmatically for
  scoping rather than via #Asset inline tagging.

* fix(property): satisfy CI lint checks for :asset property type

Address two lint failures on PR #12506:

- Drop the unused datascript.core require in property/type_test.cljs
  (clj-kondo unused-namespace warning failed the deps/db lint job).
- Replace four hardcoded user-facing strings in the asset grid picker
  with i18n keys, adding :asset/picker-empty, :asset/picker-fallback-type,
  and :asset/picker-set-failed to the English dictionary; reuse
  :ui/loading for the loading state.

* fix(property): address upstream review on :asset property type

Two follow-ups from the copilot-pull-request-reviewer review on PR #12506:

- Guard :asset picker against edits in publishing mode. show-grid!
  short-circuits when config/publishing? is true so the empty-state click
  and the Swap button can no longer open the picker, and the
  Backspace/Delete branch of the keydown handler no longer fires
  delete-block-property! Mirrors how single-value-select gates its
  popup. Read-only paths (image lightbox, video preview dialog) are
  left intact so published readers can still view embedded assets.

- Localize the Swap button label. Adds :asset/swap "Swap" to en.edn
  and replaces the hard-coded literal with (t :asset/swap), matching
  the other strings in asset-value-picker (picker-empty,
  picker-set-failed, picker-fallback-type).

* fix(property): use letter-a icon for :asset property type

Without an entry in property-icon's case form, :asset properties fell
through to the default "letter-t" glyph, which collides visually with
the Text type. Map :asset to "letter-a" so the column header reads as
"A".

* fix: improve asset property picker

---------

Co-authored-by: Victor239 <12621257+Victor239@users.noreply.github.com>
Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-05-14 22:00:00 +08:00
Cory Donnelly
2169a86f03 fix: honor documented repeater cookie semantics (#12523)
* fix: honor the three documented repeater cookie semantics

Logseq's documented repeater semantics (per docs.logseq.com and
`logseq/docs` `Tasks.md`) define three org-mode-style cookies for
recurring tasks:

  `.+`: repeats from the last completion date
  `++`: advances from scheduled, skipping in whole intervals to future
  `+`:  advances from scheduled by the declared interval (can stack)

The scheduler in `worker/commands.cljs` has been ignoring the cookie
entirely and applying a single, `++`-like semantic for every
recurring task. A user who wrote `.+1w` in markdown — expecting "a
week from when I actually finished" — silently got `++1w` behavior
("a week from the original scheduled date, skipped to future"),
which for a weekly task scheduled 2026-04-01 and completed on
2026-04-05 returns the next occurrence on 2026-04-08 rather than
the documented 2026-04-12.

This change:

  * Adds a closed-values `:logseq.property.repeat/repeat-type` property
    with values `:dotted-plus` / `:plus` / `:double-plus`. Default is
    `:double-plus` so existing recurring tasks see no behavior change
    on upgrade.
  * Rewrites the scheduler to branch on repeat-type and implement each
    semantic: `.+` anchors on now; `+` advances from original once (can
    stack overdue, per org-mode); `++` iterates in whole intervals
    until strictly after now. The `++` path is mathematically
    equivalent to the previous scheduler, so default-path behavior is
    preserved.
  * Guards against frequency <= 0 — the old code would silently produce
    nonsense and, under the new `++` loop, would spin forever. The
    guard short-circuits to `nil`.
  * Extracts `resolve-recur-frequency` and fixes the previous
    `(or [A B] [C D])` pattern in `compute-reschedule-property-tx` —
    any 2-vector is truthy in Clojure, so the default-value branch
    was unreachable and entities without an explicit
    `:recur-frequency` silently fell through to `frequency = nil`.
    `if-let` makes both branches reachable so default-to-1 actually
    works at migration time.
  * Restores the cookie-type selector that was removed from the
    date-time popover in `0a5b88467` (Nov 2020) — in-code support for
    all three cookies has been present but not user-pickable for the
    last ~5.5 years.
  * Adds `docs/recurring-tasks.md` — a technical spec for contributors
    and users that restates and augments the upstream `Tasks.md` text,
    adds decision guidance, and documents the implementation surface.
  * Extends the file-graph → DB-graph migration (built on top of
    `44d6bd49c4` "fix: preserve repeated schedule import") to also
    carry the cookie kind via a new `repeat-types` map in
    `graph-parser/exporter.cljs`, so an imported `.+1w` task lands in
    the DB-graph with `:repeat-type.dotted-plus` rather than picking
    up the `:double-plus` default. Test updated to assert this.
  * Adds deftests covering each cookie's distinctive behavior plus
    boundary cases (non-positive frequency, unknown unit, frequency > 1
    variants, `++` at month/year units, and both branches of
    `resolve-recur-frequency`).

The preexisting `get-next-time-test` passes unchanged under the
`:double-plus` default, preserving the existing regression contract.
Tests pin `t/now` via `with-redefs` for determinism.

Refs #7731, #11260, #6715, #8531. Folds in the small remaining delta
from #12532 (now closed as superseded by `44d6bd49c4`).

* fix: harden recurring task repeat type

* fix: contain repeat type selector

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

* fix: handle clamped monthly repeats

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-14 17:53:11 +08:00
Tienson Qin
4fe42af3ed fix: preserve markdown tag link aliases 2026-05-14 14:52:08 +08:00
Tienson Qin
562e56e4c5 fix: delete recycled node cleanup 2026-05-12 18:39:37 +08:00
Tienson Qin
1f9c017998 refactor: graph view V2 (#12604)
* feat(graph): rebuild global graph view with Pixi

Summary:

- Replace /graph route with a new Pixi-based global graph implementation in ClojureScript.

- Build graph data from db-worker only (no UI DB writeback) and default to tags+objects with a toggle for all pages.

- Add fast scene rendering for large graphs with indexed hit-testing, zoom/pan, node dragging, and click/shift+click node actions.

- Introduce dynamic label management (zoom hysteresis, viewport culling, overlap control, hover-emphasis) and fix hook lifecycle cleanup issues.

- Refresh graph UI styling to full-container layout, dot-first settings control, and Logseq button usage.

- Add/expand tests for global graph modes, node actions, and Pixi label/visibility logic.

- Update graph-related dependencies/lockfile as part of the new implementation.

* enhance(graph): improve drag exploration and label visibility

- Dragging a node now pulls connected nodes with depth-based weights for easier structure exploration.

- Labels are rendered only for currently visible node dots; hover no longer reveals hidden-node titles.

- Hovered node title remains promoted in foreground while respecting visibility constraints.

- Add logic/test coverage for connected drag weights and updated label text behavior.

* enhance(graph): use d3 force layout

Summary:
- Move Graph V2 node layout into graph pixi logic.
- Use d3-force link, charge, center, collision, and y forces instead of the hand-written ring/spiral layout.
- Add coverage that linked graph nodes settle closer than an unlinked island.

Dependency:
- Verified d3-force is already latest at 3.0.0.

Tests:
- bb dev:test -v frontend.extensions.graph-pixi-logic-test
- bb dev:test -v frontend.common.graph-view-v2-test
- pnpm install --frozen-lockfile --lockfile-only

* fix: graph view interactions

* enhance: speed up large graph view

* enhance: speed up tags graph

* enhance: speed up tags layout

* enhance: bound tags force layout

* enhance: speed up graph opening

* fix: keep graph objects visible when zoomed out

* fix: resize graph with sidebars

* enhance: select graph nodes

* fix: refine graph selection controls

* support icons

* fix: sharpen graph node icons

* enhance(graph): update graph v2 settings

* fix: re-render graph when theme changes

* enhance(graph): remove legacy graph view

* fix: typo

* fix: improve graph view

* test: cover graph view improvements

* enhance: improve graph view

* test: cover graph time travel behavior

* enhance: refine graph time travel

* test: cover graph layout controls

* enhance: add graph layout controls

* test: cover graph highlight controls

* fix: refine graph highlight controls

* test: cover edge label alignment

* fix: align graph edge labels

* test: keep graph lines visible on highlight

* fix: keep graph lines visible on highlight

* fix: show graph lines by default

* test: filter graph lines on highlight

* fix: filter graph lines on highlight

* test: keep graph depth incremental

* fix: update graph depth incrementally

* test: cover graph label link occlusion

* fix: occlude graph links behind labels

* test: cover graph edge visibility defaults

* fix: smooth graph edges on highlight

* test: cover graph arrow toggle

* fix: toggle graph arrows

* test: cover reciprocal graph edge offsets

* fix: separate reciprocal graph edges

* test: cover duplicate graph edge runs

* fix: dedupe graph edge render runs

* test: cover graph tag clusters

* enhance: cluster graph tags layout

* test: cover graph tag cluster colors

* fix: color graph tag clusters by title

* test: cover subdued graph node colors

* fix: mute graph node colors

* feat: grid layout

* add more options

* enhance(graph): drill into tags on zoom

* map-like navigation

* mod+click to preview node

* edge enhancements

* more tweaks

* fix: block preview

* enhance(graph): speed up large graph layout

* fix: improve graph mode switching ux

* fix: speed up graph view switching

* fix: optimize large all-pages graph render

* fix: speed up graph data build

* fix: collapse graph tag settings on mode switch

* enhance: refine graph panel width

* fix: improve graph zoom performance

* fix: satisfy graph lint

* fix: open graph nodes by uuid

---------

Co-authored-by: rcmerci <rcmerci@gmail.com>
2026-05-10 23:26:32 +08:00
megayu
51f0ce261c Enhance breadcrumb display (#12595)
* feat(breadcrumb): enhance breadcrumb functionality and styling

* feat(breadcrumb): enhance breadcrumb label handling and add tooltips

* feat(breadcrumb): add tooltip for breadcrumb search overflow

* fix lint and test

* feat(search): enhance subtitle handling for native search results

* fix doc

* feat(breadcrumb): add accessibility attributes to tooltip button

* fix: no need to pull refs for block parents

* enhance(breadcrumb): remove ref-resolution layer from parent breadcrumbs

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-05-08 17:14:13 +08:00
VictorVow
1423a38062 fix: restore :ref/default-open-blocks-level 0 behavior in DB graphs
Make `:ref/default-open-blocks-level 0` collapse references by default
in the DB version, matching the previous file-graph behavior. The
section fold is scoped to the page-bottom "Linked References" panel
only — the inline "Open block references" popup rendered next to
blocks always shows its references uncollapsed.

1. Collapse the "Linked References" section when the configured level
   is 0, gated on a new `:linked-refs-section?` config flag set only
   by the page-bottom call site in page.cljs. The inline popup at
   block.cljs:3366 passes `{}` and is unaffected.

2. Propagate `:block.temp/has-children?` on the top-level fetched
   block in `get-block-and-children`. The list-view loads linked-
   reference blocks with `:children? false`, so `(:block/_parent ...)`
   is always nil in the client DB and the collapse check in
   `block-default-collapsed?` could never fire. Use a lightweight
   `d/datoms :avet :block/parent` scan that stops at the first match,
   rather than the reverse-ref `(:block/_parent block)` which
   materializes the full child set. Includes a regression test.

3. Fall back to `:block.temp/has-children?` when computing `has-child?`
   in `block-container-inner-aux`. This renders the collapse arrow for
   blocks whose children exist in the worker DB but haven't been
   lazily loaded into the client DB yet (e.g. linked-reference blocks).
   Clicking the arrow calls `expand-block!` which loads them.

The `:ref/default-open-blocks-level 0 → (int? ...)` state.cljs fix
from PR #12228 is already present on this branch.
2026-05-08 11:18:51 +08:00
Tienson Qin
427dbe3f58 feat: export Logseq markdown syntax
Move the Logseq Markdown Mirror syntax/export work out of the two-way sync branch while leaving file-to-DB sync behavior behind.

Details:\n- add docs/logseq-markdown-syntax.md and update ADR 0016 with the one-way mirror syntax contract\n- export mirror files with page id markers, property list items, nested default property values, node page refs, task status markers, and datetime values with time\n- preserve block refs as uuid links where needed while keeping page/node refs readable\n- update focused export and markdown mirror tests

Validation:\n- bb dev:lint-and-test
2026-05-08 10:58:45 +08:00
rcmerci
a610925bca fix(export): ignore legacy-property 2026-05-06 21:03:23 +08:00
Tienson Qin
13779a4047 fix: don't update local tx to 0 except for two cases
1. creating a remote graph
2. uploading a local graph
2026-05-05 13:35:45 +08:00
Tienson Qin
c556ce27ed bump datascript 2026-05-03 12:52:27 +08:00
Tienson Qin
627cb619e1 fix: sqlite db backup on desktop 2026-05-03 12:04:22 +08:00
Tienson Qin
e470dfd5f0 fix: remove legacy properties 2026-05-03 11:19:05 +08:00
Tienson Qin
c2a1d98aaf Merge branch 'master' into feat/cliable 2026-04-30 12:52:03 +08:00
Gabriel Horner
6945771612 fix(regression): export-edn fails on deprecated property
that wasn't migrated when removed in 333f3e10b1
Fixes https://github.com/logseq/db-test/issues/831
2026-04-28 10:54:35 -04:00
rcmerci
eca0ab1a36 Merge remote-tracking branch 'origin/master' into feat/cliable 2026-04-28 18:17:17 +08:00
megayu
79c25837cb Migrate from yarn to pnpm (#12529)
* migrate yarn to pnpm

* chore: update pnpm version to 10.33.0 across all package.json files

* chore: update .npmrc and package.json for improved dependency management

* chore: unify Clojure, Node, and Java version in workflow files

* fix: enable shamefully-hoist for now and add electron, keytar to onlyBuiltDependencies

* feat: add cider/piggieback dependency and update nREPL middleware configuration to silence warnings

* ensure pnpm setup prior to node setup

* fix: update logseq/bb-tasks git SHA

* feat: add pnpm configuration for onlyBuiltDependencies in package.json

* feat: add onlyBuiltDependencies configuration for better-sqlite3 in pnpm settings

* chore: update pnpm lockfile

* fix: resolve merge conflicts

* fix: remove invisible characters from markdown headers

* fix: update .npmrc comments for clarity on lockfile usage

* Revert "feat: add cider/piggieback dependency and update nREPL middleware configuration to silence warnings"

This reverts commit 70a111936f.

* fix: remove invisible characters from various README files and add .editorconfig

* fix: clarify lockfile resolution process in SKILL.md

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-04-24 23:40:25 +08:00
Tienson Qin
94ea551ec4 perf(db): optimize recursive uuid title replacement (#12536)
* perf(db): optimize recursive uuid title replacement

* fix: lint

* fix: don't lower-case for search indexed blocks

* fix: typo
2026-04-24 21:09:47 +08:00
rcmerci
2e4922b60d Merge remote-tracking branch 'origin/master' into feat/cliable 2026-04-23 21:55:05 +08:00
Tienson Qin
3414177805 fix: validate client tx and ensures monotonically increasing 2026-04-23 15:52:03 +08:00
Mega Yu
b9745dbaec fix test 2026-04-23 15:40:11 +08:00
Tienson Qin
12e8cc3d36 fix(db): clear tx-tail after batch-transact store 2026-04-23 02:28:55 +08:00
Gabriel Horner
96367595aa fix(regression): bidirectional properties setup
cdc1bc1d32 made it such that two classes
had to enable bidirectional properties when only one class should be
needed. Using the example from #12296, the bug was requiring the user
to enable bidirectional on #Person and #Book when #Book is all that
should be needed
2026-04-22 13:24:29 -04:00
Tienson Qin
e048996880 Merge branch 'master' into feat/cliable 2026-04-22 21:07:00 +08:00
Tienson Qin
9bd349dfe9 fix: lint and tests 2026-04-21 21:15:39 +08:00
Tienson Qin
b646db6a68 enhance(backup): share sqlite backup flow and trigger via save shortcut 2026-04-21 18:43:13 +08:00
Tienson Qin
85c5a412a4 revert changes from 1bdba92 related to sync 2026-04-20 15:19:33 +08:00
rcmerci
1bdba923eb fix sync test 2026-04-20 10:56:44 +08:00
rcmerci
4b13d67a88 Merge remote-tracking branch 'origin/master' into feat/cliable 2026-04-18 10:25:32 +08:00
Mega Yu
d6bc0b75ec Merge branch 'master' into enhance/i18n 2026-04-17 20:26:15 +08:00
megayu
76285de44b refactor: toolchain upgrade (#12517)
* chore(deps): upgrade Clojure version to 1.12.4 across multiple dependency files

* chore: bump shadow-cljs to 3.3.6

* chore: bump org.clojure/clojurescript to 1.12.134

* chore(deps): upgrade Clojure version to 1.12.4 in workflow files

* chore(deps): upgrade Java version to 21 in workflow files

* chore(deps): upgrade Node.js version to 24 in workflow files

* chore(deps): upgrade Node.js version to 24 in Dockerfile

* feat(updater): migrate electron-forge to electron-builder

* fix wrong android app version

* fix workflow

* feat(dependency-upgrade): add max-update-interval option for dependency audits

* chore(deps): upgrade electron-builder and electron-updater

* fix: update manual verification instructions for Electron shim cache

* chore: update shadow-cljs version to 3.4.4 across all dependencies

* chore: upgrade electron version to 41.2.1

* chore: update metosin/malli dependency to latest

* chore: upgrade cider-nrepl version to 0.59.0 in dependencies

* chore: upgrade clj-kondo version to 2026.04.15 and fix warning

* chore: move Electron windows build configuration from yml to ci

* chore: update Electron signing configuration to extend from base config

* fix: replace icon file for NSIS compatibility

* chore: resolve metosin/malli version conflicts

* chore: upgrade jdk to 21 in e2e workflow

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2026-04-17 19:40:01 +08:00
Tienson Qin
f53767dfc6 chore: remove both transit-read and transit-write
use write-transit-str and read-transit-str instead
2026-04-17 16:58:18 +08:00
Tienson Qin
12509f58db fix: plugins e2e tests 2026-04-17 15:57:53 +08:00
Mega Yu
92681111b6 Merge branch 'master' into enhance/i18n 2026-04-17 10:35:36 +08:00
Tienson Qin
8606a8b5f0 fix: it's unsafe to invoke d/store in nested batch tx
Switched to use our own `conn-from-db` that doesn't call `d/store`.
2026-04-17 01:36:30 +08:00
Mega Yu
230a2b8296 Merge master into enhance/i18n 2026-04-15 22:30:34 +08:00
Tienson Qin
8058ece6c4 fix(page): gate deferred root reveal by children completion 2026-04-15 17:49:50 +08:00
Tienson Qin
58fdd8aea1 add doc for batch-transact! and batch-transact-with-temp-conn! 2026-04-15 17:49:50 +08:00
Mega Yu
8347708c69 Merge master into enhance/i18n 2026-04-15 10:23:06 +08:00
Tienson Qin
fc76192631 fix: stabilize uuid-based outliner ops and undo/redo replay 2026-04-14 22:11:51 +08:00
Mega Yu
5eda6a8ab6 Merge master into enhance/i18n 2026-04-14 16:42:19 +08:00
Tienson Qin
ff56c143ab continue to improve view performance 2026-04-14 05:37:45 +08:00
Tienson Qin
995d0bf4a9 enhance(view): speed up large-graph get-view-data 2026-04-14 04:52:10 +08:00
Tienson Qin
e3a974947a perf: views 2026-04-14 04:33:46 +08:00
Gabriel Horner
4ab1216303 fix(cli): logseq upsert block --id modifies built-in nodes
it shouldn't be able to. Somes of these bugs are caused by same incorrect
definition of built-in? as found in
22c7736751. --content and --pos could modify all
built-in nodes. *properties and *tags options could modify private
built-in nodes which the app is not able to do and the CLI should be
disallowed from doing as well
2026-04-13 15:15:42 -04:00
Tienson Qin
73bc59857e fix(perf): don't call d/datoms to get all eavt
It's too slow (+8s) for a 500m sqlite file to just insert a new block
2026-04-14 00:27:36 +08:00
Tienson Qin
6e737b78ac fix: db unlisten 2026-04-13 18:25:03 +08:00
Tienson Qin
174fd15c8e fix(sync): stabilize incremental checksum updates 2026-04-12 19:27:05 +08:00
Tienson Qin
30bb4acc27 fix: stabilize undo/redo raw tx replay order 2026-04-12 15:55:52 +08:00
Tienson Qin
9baeee6e49 simplify transact ops 2026-04-12 15:41:22 +08:00