Commit Graph
3002 Commits
Author SHA1 Message Date
Zef Hemel dbcef9e8aa Fix: make sure Edit buttons work even for Lua expressions and code
widgets whose bodies appear multiple times in the same page (previously
always jumped to first).
2026-03-12 14:13:18 +01:00
Matouš Jan FialkaandGitHub 1f7a4d7d66 Fix attribute rendering (#1880)
* Fix table row parser

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

* Remove all `{[command button]}` remnants

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

* Render `Attribute` nodes in HTML like CodeMirror does

This patch

- ensures always render `Attribute`,
- produces `sb-attribute` span with sub-spans matching CodeMirror DOM,
- removee `preserveAttributes` from Markdown render options and callers.

Finally the attributes looks the same everywhere (table, text, widget).

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

---------

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-12 13:50:09 +01:00
Matouš Jan FialkaandGitHub b83c1e03d2 Fix Markdown table rendering and remove deprecated command button remnants (#1879)
* Fix table row parser

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

* Remove all `{[command button]}` remnants

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

* Add tests

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

* Fix extended task rendering in case of following EoL

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>

---------

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-12 13:46:48 +01:00
Zef HemelandGitHub 3df11ccf3d Implements custom markdown syntax extensions (EXPERIMENTAL) (#1881)
Alternative implemention of #1727
2026-03-12 13:40:20 +01:00
Zef HemelandGitHub 84136c7ed6 Merge pull request #1878 from mjf/liq-implement-offset 2026-03-11 19:44:04 +01:00
Matouš Jan FialkaandGitHub fea7e5a508 Merge branch 'main' into liq-implement-offset 2026-03-11 18:49:29 +01:00
Zef HemelandGitHub f898c44196 Merge pull request #1877 from mjf/liq-implement-order-by-for-aggregates
[LIQ] Implement `order by` for aggregates
2026-03-11 16:54:07 +01:00
Matouš Jan FialkaandGitHub 9104231132 Merge branch 'silverbulletmd:main' into liq-implement-offset 2026-03-11 15:23:16 +01:00
Matouš Jan Fialka 9522437941 [LIQ] Website: Improve general syntax description
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 15:17:06 +01:00
Zef Hemel 1beb13a134 Fix: regression where multi-line markdown results from Lua directives
would _always_ be rendered as inline.

Added back the old heuristic check.
2026-03-11 14:55:02 +01:00
Zef Hemel 0ac8172185 Fix CI 2026-03-11 14:40:57 +01:00
Zef Hemel e799d30c63 Some more build cleanup 2026-03-11 14:28:45 +01:00
Matouš Jan Fialka 5205ab5154 [LIQ] Implement offset (4: add tests)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 11:47:11 +01:00
Matouš Jan Fialka 11a5fb1a5a Merge branch 'main' into liq-implement-offset 2026-03-11 11:38:52 +01:00
Matouš Jan Fialka 6970c41a4e [LIQ] Implement offset (1: make generate)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 11:36:46 +01:00
Matouš Jan Fialka 0efbe59c8c [LIQ] Implement offset (3: update docs)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 11:36:04 +01:00
Matouš Jan Fialka 76fe46e590 [LIQ] Implement offset (2: update AST, parser and eval)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 11:35:19 +01:00
Matouš Jan Fialka a8c0538627 [LIQ] Implement offset (1: grammar)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 11:34:26 +01:00
Zef Hemel 0cc7091b7d Remove vim mode from mini-editor, which didn't really work anyway 2026-03-11 10:15:46 +01:00
Zef Hemel a080ee3b15 Optimize bundle size + chunked builds + JIT loading
* Replaced AJV with other JSON schema library
* Turndown and Vim mode (very large) now only loaded when used
* Chunked builds with ESBuild
2026-03-11 10:04:13 +01:00
Matouš Jan Fialka a1b3c7f083 Reformat
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 09:43:08 +01:00
Matouš Jan Fialka 9be3490575 Resolve merge conflicts with main branch
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 09:37:37 +01:00
Matouš Jan Fialka bc5c3c8bda [LIQ] Implement intra-aggregate order by (5: documentation)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 08:52:33 +01:00
Matouš Jan Fialka 7eca1562e0 [LIQ] Implement intra-aggregate order by (4: add Space Lua tests)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 08:43:16 +01:00
Matouš Jan Fialka 10f7d5d1b4 [LIQ] Implement intra-aggregate order by (3: add TS tests)
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 08:42:23 +01:00
Matouš Jan Fialka 8fdc61aa7a [LIQ] Implement intra-aggregate order by (2: make generate-ed files)
* Add files generated by `make generate` from `lua.grammar`.

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 08:41:14 +01:00
Matouš Jan Fialka af6c0e338b [LIQ] Implement intra-aggregate order by (1)
* Add support for `order by ...` inside aggregate function calls, e.g.,
  `array_agg(p.name order by p.name asc)` matching Postgres
  per-aggregate ordering semantics.

* Add support for extra arguments for aggregates.

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-11 08:35:48 +01:00
Zef Hemel 81408ed5cf Refactor TopBar component
Extracts various part into separate components
2026-03-10 16:11:33 +01:00
Zef Hemel ec40aa0838 Add action buttons to flashNotification
Used by upgrade notification
2026-03-10 16:07:25 +01:00
Zef Hemel 73d657d652 Remove format checking as part of make check 2026-03-10 14:05:07 +01:00
Zef Hemel d9f4b93795 Eliminate (most) uses of the client global
Also an opportunity to refactor the transclusion code, which had become
very messy
2026-03-10 14:02:05 +01:00
Zef Hemel 6b461aa5f3 Changelog and outline website doc update 2026-03-10 13:04:41 +01:00
Zef Hemel fd1a81b8d8 Client refactor: move UI related APIs to editor_ui.ts 2026-03-10 12:42:26 +01:00
Zef Hemel 6d33d3d8ac Refactor: extract page/document manager into separate class 2026-03-10 12:33:34 +01:00
Zef Hemel cb9f954bc7 Refactor: extract widget cache from Client class 2026-03-10 12:17:02 +01:00
Zef Hemel 822997fd5e Client available upgrade notification
If the server is updated, but the client doesn't match the server
version, a notification will appear instructing the user to reload.
2026-03-10 12:05:33 +01:00
Zef Hemel c2d42849a9 A few more format and type fixes 2026-03-10 09:42:48 +01:00
Zef Hemel 799e27a9b4 Enable biome based formatter and reformat 2026-03-10 09:38:59 +01:00
Zef HemelandGitHub a0b79e7c1d Merge pull request #1839 from silverbulletmd/to-node
Migration Deno -> Node.js
2026-03-10 09:11:32 +01:00
Zef Hemel 21e846ba09 Docs fix 2026-03-10 09:00:30 +01:00
Zef Hemel cce5b669f6 Merge branch 'main' into to-node 2026-03-10 08:57:58 +01:00
Zef HemelandGitHub 6de5b1ed14 Merge pull request #1876 from mjf/improve-widget-rendering
Improve Lua Widget Rendering
2026-03-10 08:42:51 +01:00
Zef HemelandGitHub c02594f20c Merge pull request #1865 from Dobli/collapsible-toc
Make ToC widget collapsible
2026-03-10 08:42:01 +01:00
Zef Hemel a59fb566ae Add table row support also to outline commands
As requested in #1051
2026-03-09 14:58:02 +01:00
Zef Hemel dbe9e702aa Thorough redo of the outline operation commands
Fixes #606 and #908 improves #1051,
2026-03-09 14:52:06 +01:00
Matouš Jan Fialka 9c9ca047f0 Fix: Handle tagged floats before plain object check in renderCellContent
Tagged floats (`{value: N, isFloat: true}`) were matched by
`isPlainObject` and rendered as a two-column table with "value" and
"isFloat" headers instead of as a formatted number. This is now fixed.

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-09 12:57:53 +01:00
Matouš Jan Fialka 2aaa797bda Improve Lua Widget Rendering
Lua `${...}` expression results are rendered using two parallel paths:

- **HTML path** (display path) for visual display in the editor and
- **Markdown path** (copy path) for the *copy button* output.

Every Lua value is classified as one of:

- **Scalar:** number, string, boolean, or `nil`
- **Empty table:** `{}`
- **Array:** a `LuaTable` with only sequential integer keys (no string keys)
- **Array of tables:** an array where every element is a `LuaTable`
- **Record:** a `LuaTable` with any string key (may also have integer keys)

Scalars are rendered as inline Markdown - wiki links, tags, bold, and
other inline syntax are resolved, `nil` renders as `<span data-empty>`.

Empty tables render as `<table data-table-empty>`.

An array of tables renders as a multi-row `<table>`. Column headers
are the union of all element keys. Each cell value recurses through
the same classification.

An array of scalars (or a mix of scalars and tables) renders as `<ul>`
with one `<li>` per element. Each item value recurses.

A record renders as a single-row `<table>` with one column per key.
Cell values recurse.

Every `<td>` carries `data-table-cell-type` and optionally
`data-table-cell-empty`.  Every `<li>` carries `data-list-item-type` and
optionally `data-list-item-empty`.  The outermost element carries
`data-type`.  These attributes allow CSS styling of rendered widgets.

Nesting is **unlimited**. Tables inside cells, lists inside cells,
tables inside list items all render correctly in HTML.

Scalars render as plain text. Lua `nil` renders as `nil`. Empty tables
render as `*(empty table)*`.

An array of tables renders as a pipe-delimited Markdown table. Nested
values in cells are rendered as Lua literals via `toStringAsync()`
(e.g. `{1, 2, 3}` or `{a = 1}`), since Markdown table cells cannot
contain block-level content.

An array of scalars renders as a Markdown list (`- item`). When a list
item is itself multi-line (a sublist) it uses an empty bullet with
two-space indented content on the next line:

```
- 1
- 2
-
  - nested 1
  - nested 2
```

Nested tables or arrays **beyond the first list nesting** level are
rendered as Lua literals.

A record renders as a single-row Markdown table.

Column headers follow the order returned by `LuaTable.keys`: string keys
in their insertion order, followed by integer keys in ascending order.
For example, `{a = 1, b = 2, 3, d = 4}` produces columns `a
| b | d | 1`. This is consequence of `LuaTable` storing string keys
and the array part separately (for performance).

Arrays mixing plain scalars and record-like tables (e.g.  `{1, 2, 3,
{a=3}}`) were previously rendered as a single flat table due to an
internal JS conversion (`toJS`). They now render as a list, with record
elements shown as nested tables - which more accurately reflects their
Lua structure. This is the only divergence from the original
presentation.

To restore the old tabular layout, wrap all elements as records with
a consistent key:

```lua
-- Before (was a flat table, now a list with nested table):
${{1, 2, 3, {a=3}}}

-- After (explicit records, renders as a table):
${{{value=1}, {value=2}, {value=3}, {a=3}}}
```

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
2026-03-09 11:45:04 +01:00
Zef Hemel a5c9227499 deno fmt 2026-03-08 16:11:29 +01:00
Zef Hemel 6ad4878748 Fixes #1722 (clean completed tasks)
Refactors logic to be more testable. Now handles more scenarios.
2026-03-08 16:11:14 +01:00
Zef Hemel 0452910b0b Fixes #1777 2026-03-08 16:00:18 +01:00