This pull request refactors the plugin library infrastructure and adds new experimental features for hosted/sidebar renderers. The main changes include:
Purpose: Refactor plugin communication library (Postmate) to support MessageChannel for improved performance, add support for hosted/sidebar renderers in plugins, add new debug APIs, and consolidate helper functions.
Changes:
Added MessageChannel support to Postmate for optimized plugin-host communication with backward compatibility
Introduced hosted renderer and sidebar renderer APIs for plugins to register custom UI components
Added new app APIs: get_current_route, export_debug_log_db, reset_debug_log_db
Refactored helper functions from helpers.ts to common.ts and updated all import paths
Extended block property APIs to include class properties with default values
Added comprehensive documentation for experiments APIs and plugin development
Added E2E test for plugin marketplace installation
Version bump from 0.2.12 to 0.3.1
Updated dompurify dependency from version 2.5.4 to 3.2.4.
DOMPurify before 3.2.4 has an incorrect template literal regular expression when SAFE_FOR_TEMPLATES is set to true, sometimes leading to mutation cross-site scripting (mXSS).
* enhance(api): plugin class with ident like `plugin.class.id/class-name`
* enhance(apis): remove support for namespace separator in create tag
* enhance(apis): get tag with ident or uuid
* fix(lint): remove unused vars
* fix(apis): sanitize user property name
* enhance(apis): get tag ex info
* chore: bump libs version
---------
Co-authored-by: charlie <xyhp915@qq.com>
* fix(plugins): load unpacked package for the existed plugin
* enhance(plugin): increase timeout time for the plugin handshake
* enhance(api): support option to insert block with auto ordered list
* fix(api): skip empty target for the batch insertion blocks
* fix(api): before option for the batch blocks insertion
* enhance(api): types
* chore: bump minor version
* fix(apis): Empty `payload.uuid` when executing onMacroRendererSlotted inside query table
* actually using result from deepMerge when updating settings
* replacing merge from lodash with merge from deepmerge
---------
Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
- fix: Select and Input elements rendered using provideUI via onMacroRendererSlotted don't function #8374
- fix: logseq.Editor.getPageBlocksTree does not work when page uuid is passed in as param #4920
- feat: add a plug-in flag for the plugin slash commands item
- feat: add logseq.App.setCurrentGraphConfigs: (configs: {}) => Promise<void>
- feat: add hook logseq.App.onTodayJournalCreated: IUserHook<{ title: string }
- enhance: auto-check updates for the installed plugins from Marketplace
- feat: expose template-related APIs to SDK
Added
1. All configurations of current graph.
App.getCurrentGraphConfigs: () => Promise<any>
2. All favorite pages list of current graph.
App.getCurrentGraphFavorites: () => Promise<Array<string> | null>
3. All recent pages list of current graph.
App.getCurrentGraphRecent: () => Promise<Array<string> | null>
4. Clear right sidebar blocks.
App.clearRightSidebarBlocks: (opts?: { close: boolean }) => void
5. Support register CodeMirror enhancer. #Experiment feature
Experiments.registerExtensionsEnhancer<T = any>(type: 'katex' | 'codemirror', enhancer: (v: T) => Promise<any>)
6. Support hooks for app search service. #Alpha stage
App.registerSearchService<T extends IPluginSearchServiceHooks>(s: T): void
7. Support focus option for App.insertBlock. Credit to [[tennox]] #PR
Fixed
1. Adjust build script to be compatible for shadow-cljs bundler.
How to set up a clojurescript project with shadow-cljs?
https://github.com/rlhk/logseq-url-plus/blob/main/doc/dev-notes.md
* improve(plugin): WIP add settings schema
* improve(plugin): add identity for settings modal
* improve(plugin): WIP add settings input
* fix(ui): scrollbar overlay of modal panel content
* improve(plugin): WIP add more render types of setting item
* improve(plugin): WIP polish settings items
* improve(plugin): WIP settings list of plugins
* improve(plugin): more settings types & polish releated ui
* fix(plugin): sometimes disable plugin not work
* improve(plugin): polish ui of plugin settings
* fix(dev): warning of lint
* improve(plugin): add api of settings changed
* chore: build libs core
* fix(ui): width of settings panel wrap
* improve(plugin): separate layouts data from settings aio file
* imporve(plugin): container size of single plugin settings
* fix: add missing state
* improve(plugin): add Git ns
* improve(plugin): git related api
* improve(api): type of git result
* chore: build libs core
* fix(dev): kondo lint
* fix(plugin): use cdn sdk when js entry
* chore: build libs core
* fix(plugin): env condition
* improve(plugin): add UI ns
* fix(api): arguments of datascript query
* enhance(api): manageable message instance of UI tools
* enhance(api): WIP add experiments api
* enhance(api): WIP add resources state of plugin
* improve(plugin): add status of loading script resources
* improve(plugin): more opts for script loader
* improve(plugin): WIP add fenced code renderer hook
* improve(plugin): fenced code renderer hook
* fix(plugin): resource root path of plugin fs location
* imporve(plugin): support local files for loading scripts
* improve(plugin): types of expirements api
* fix: typo of class
* enhance(api): add namespace related apis
* enhance(api): add linked refrences related apis
* enhance(plugin): add sample links to related api comments
* improve(plugin): add db changed hook & optimize strategy of caller for hooks
* improve(plugin): compatible commands registration for old sdk
* improve(plugin): collect user sdk version for plugin local
* improve(plugin): add internal callable apis for user sdk
* chore(plugin): missing files & bump libs version
* improve(plugin): compatiable for old sdk about hook messaging optimization
* improve(plugin): db hook optimization for old sdk
* enhance(ux): auto focus searchbar when open plugins list
* improve(plugin): api of a hook from specific block changed event
* improve(plugin): api of db block change hook
* improve(plugin): add show bracket user config of api
* improve(plugin): api of db block change hook
* fix(api): toggle collapsed of block
* improve(api): try to init grpah with git before exec git commands
* improve(plugin): attributes of sandbox container
* improve(dev): support register command with keybinding
* improve(plugin): add api of register shortcut command
* fix(plugin): reubild slash commands when new command registration
* fix(dev): lint
* improve(dev): lint script of libs codebase
* chore(dev): remove useless codes
* improve(plugin):sanitize path string of plugin repo value
* fix(plugin): rebuild commands list when unregister a plugin
* fix(ui): overflow width of query result table
* chore: rebuild libs core
* improve(plugin): add assets related apis
* chore: rebuild libs core
* improve(plugin): support replace state of into block in page api
* improve(plugin): prepend/append child block in page
* improve(plugin): polished exceptions message of plugin update/install
* fix(plugin): update settings within gui
* improve(ux): debounce change event of input for plugin settings gui
* chore: rebuild libs core
* enhance(plugin): catch exception of hook plugin
* improve(plugin): support autoFocus option for main ui frame
* improve(plugin): make single selected block as current block
* improve(api): get selected blocks
* improve(plugin): support call built-in command from api
* fix(plugin): sanitize key of shortcut id
* improve(plugin): add invoke built-in command api &
* fix(editor): overwritten class of collapsed block
* improve(plugin): add `getStateFromStore` api
* chore: build libs core
Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
* improve(plugin): add container for main ui frame
* feat(plugin): support draggable & resizable UI container for main ui
* feat: support fork sub layout container
* improve(plugin): add editor selection api
* improve(plugin): click outside configure for float container
* improve(plugin): api of journal for create-page
* improve(plugin): api of open-in-right-sidebar
* improve(plugin): add full screen api
* improve(plugin): api of register-palette-command
* improve(plugin): add apis