Move isMacLike and prettifyShortcut out of command_palette into plug-api/lib/shortcut so the configuration manager's shortcuts UI can render identical key notation.
Track the source path on each Plug and rename the sandbox-factory "cacheKey" to "path" to reflect what it actually is. Fold the one-liner web_worker_sandbox helper into a WorkerSandbox.forPath factory and add system.loadPlug / system.unloadPlug syscalls so individual plugs can be (re)loaded by path — foundation for the upcoming configuration-manager libraries UI.
`config.define` now propagates schema `default` values, so features like smart quotes no longer need their own fallback constants.
Adds `defineCategory` / `getCategories` for the upcoming configuration manager UI.
Extracts almost all codemirror keyboard shortcuts into proper SB
commands so they can be rebound
Bonus: renders prettier versions of keyboard shortcuts on Mac
The service worker's proxy fallback only matched the wrapped "Offline"
error from HttpSpacePrimitives, but raw fetch() throws browser-native
errors like
"Failed to fetch" (Chrome), "NetworkError..." (Firefox), or "Load
failed"
(Safari). This caused a hard 503 instead of falling through to serve
local
data. Additionally, the `fullSyncConfirmed` flag reset on every service
worker
restart, forcing unnecessary proxying even when synced data existed in
IndexedDB.
In this commit:
- Use `isNetworkError()` in proxy_router.ts to catch all browser network
errors
and fall through to local serving instead of returning 503
* Recover `fullSyncConfirmed` from persisted sync snapshot on SW
restart, so
previously synced spaces serve locally immediately
* Adds e2e tests trying to emulate this behavior and prevent regressions
The table style is determined by the header row. After normalizing the
header (filling empty cells between consecutive delimiters), extract
two properties: the column count and whether the header starts with
a delimiter.
For each data row, normalization proceeds in three steps. First, fill in
empty cells between consecutive delimiters (this handles empty cells in
the middle of a row). Second, if the header has no leading delimiter but
the row does, insert an empty cell after the row's leading delimiter (this
corrects the one-position shift caused by the row having a leading pipe
that the header lacks. Third, if the row has fewer cells than the header
column count, pad with empty cells at the end (this handles rows that
are shorter than the header because trailing pipes or cells were
omitted).
The same normalization is applied both in the renderer and the indexer.
Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
- Introduced a new `validate` callback for `tag.define`
- Added `index.validateObjects` API to validate and transform objects before indexing.
- Updated relevant documentation and examples to reflect these changes.
- Introduced `currentPageMeta` method to encapsulate access to the current page's metadata.
- Updated references to page metadata throughout the codebase to use the new method, improving code readability and maintainability.
- Adjusted related components in the UI and linting logic to utilize the new method for consistency.
* Removed code complete from mini editor (didn't really work anyway, and
only use case was emoji)
* Changed meta picker to be more consistent with page picker
* Alt-space completion in page picker (completes "folder" to the top
match)
* Upgraded fuse library
* Removed the category support in the filterbox, it was buggy and hides
command names
* Tweaked fuse parameters for (hopefully) better matches in the page
picker (and everywhere where the filter box is used)