diff --git a/apps/docs/introduction.yaml b/apps/docs/introduction.yaml new file mode 100644 index 0000000..e26793a --- /dev/null +++ b/apps/docs/introduction.yaml @@ -0,0 +1,92 @@ +_ref: + path: templates/general.yaml.njk + vars: + pageId: introduction + pageTitle: Introduction to Community Plugins + filePath: introduction.yaml + content: + - id: markdown + type: Markdown + properties: + content: | + ##### This is a site for all the unofficial plugins for Lowdefy created by the community. + + These community plugins are built for developers by developers, and if you're building a Lowdefy app, then you're a developer too! + + These community plugins also serve as a testing ground for what does or doesn't work for the community. Community plugins may begin as very specific to their use cases and less broadly applicable. However, successful and frequently used community plugins may eventually be incorporated as official Lowdefy plugins. + + - id: block_id + type: Alert + properties: + message: Use with caution + banner: true + description: Because community plugins contain third-party code, they are more experimental and subject to change than official Lowdefy packages. It is recommended to treat community plugins as beta ware that can be used to share and learn with others in the community. # not sure if beta ware is the right term here? + icon: AiOutlineExperiment + type: info + + - id: md2 + type: MarkdownWithCode + properties: + content: | + Community plugins can be added directly to your Lowdefy project or simply provide a good starting point for seeing what plugins are capable of or a reference point for [developing your own plugins](https://docs.lowdefy.com/plugins-dev). + + If there are any of these plugins you'd like to make use of but need to refresh your memory, you can revisit the [Lowdefy plugin docs](https://docs.lowdefy.com/plugins-introduction). + + Any questions about how these plugins work or developing your own can be asked via on [Github](https://github.com/lowdefy/lowdefy/discussions) and [Discord](https://discord.gg/QQY9eJ7A2D). + + ## Using a plugin + + To use a plugin in an app, the plugin name and version should be specified in the `plugins` section of the Lowdefy config. Once the plugin is included, the types (blocks, connections, etc) defined in the plugin can be used anywhere in the app. + + If two plugins export types with the same type name, user defined plugins will override the default Lowdefy types, and user defined plugins will overwrite other plugins defined before them in the plugins array. + + ###### Example from the Confetti plugin + + ```yaml + # lowdefy.yaml + lowdefy: '4.0.0-rc.12' + ... + plugins: + - name : '@lowdefy/community-plugin-confetti' + version: '1.0.0' + ``` + + - id: md2 + type: MarkdownWithCode + properties: + content: | + ## Plugin versions and updates + + Just like Lowdefy uses a semantic versioning, community plugins have their own *independent* versioning and version updates. Community plugin changelogs and past releases can be viewed on the Github repo [release page](https://github.com/lowdefy/community-plugins/releases). + + ### Troubleshooting + Because community plugin versions and updates are not tied to Lowdefy versions and updates, if the plugin is no longer working, it might be that the plugin is no longer compatible with the new version of Lowdefy. + + Alternatively, the developer may have updated the community plugin to a new version. This can be fixed by updated the `version` number in the `lowdefy.yaml` file as shown above. You might also need to make some changes to your app configuration to be compatible with the new version. + + ### About semantic versioning + + Just like Lowdefy, community plugins should be versioned using semantic versioning, with a three part version number (e.g. `version: 2.1.3`), with the form: `major.minor.patch.` + + major | .minor | .patch + :--- | :--- | :--- + May include breaking or architecture changes. Configuration changes likely required. | New features likely to cause only small breaking changes to individual elements | updates only contain fixes, shouldn't have any material impact other than improved performance. + + This means that if a plugin is going from `version: 1.0.0` to `version: 1.0.1`, which is a `patch` change, changes are likely to be negligible to your configuration but improve performance of the plugin. + + However, a change from `version: 1.0.1` to `version: 2.0.0`, which is a `major` change, could result in major breaking changes and will probably require configuration changes in your app. + + - id: md2 + type: MarkdownWithCode + properties: + content: | + ### _alternative to the table summary. I like the table because it preserves the x.y.z visual layout_ + + ##### `major` + Major version updates may include major breaking changes or architecture changes. You might need to make more changes to your configuration to be compatible with the new version. We don't intend to release major versions regularly, and try to minimize breaking changes. + + ##### `minor` + Minor version changes include new features. At this stage, since the project is still in early development, they might also have minor breaking changes to individual blocks, actions, operators or connections. Please check the changelog to see if any configuration changes are needed before updating. + + ##### `patch` + Patch updates only contain fixes, and you should be safe to update to a patched version without any changes to your app. Since we are actively developing new features, most releases will be minor version updates, and patches won't be made to older versions. diff --git a/apps/docs/lowdefy.yaml b/apps/docs/lowdefy.yaml index aa13e1d..f3e6fcb 100644 --- a/apps/docs/lowdefy.yaml +++ b/apps/docs/lowdefy.yaml @@ -19,6 +19,7 @@ menus: _ref: menus.yaml pages: + - _ref: introduction.yaml - _ref: community-plugin-aggrid/AgGrid.yaml - _ref: community-plugin-confetti/Confetti.yaml - _ref: community-plugin-nodemailer/EmailProvider.yaml diff --git a/apps/docs/menus.yaml b/apps/docs/menus.yaml index 8d882f8..ffe84c2 100644 --- a/apps/docs/menus.yaml +++ b/apps/docs/menus.yaml @@ -1,5 +1,11 @@ - id: default links: + - id: introduction + type: MenuLink + pageId: introduction + properties: + title: Community Plugins + icon: AiOutlineBuild - id: community-plugin-confetti type: MenuLink pageId: Confetti diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e13f8b..bb9f03d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,7 +70,7 @@ importers: version: 4.0.0-rc.12 '@lowdefy/blocks-markdown': specifier: 4.0.0-rc.12 - version: 4.0.0-rc.12(@types/react@18.2.37) + version: 4.0.0-rc.12(@types/react@18.2.46) '@lowdefy/blocks-qr': specifier: 4.0.0-rc.12 version: 4.0.0-rc.12 @@ -1950,14 +1950,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@lowdefy/blocks-markdown@4.0.0-rc.12(@types/react@18.2.37): + /@lowdefy/blocks-markdown@4.0.0-rc.12(@types/react@18.2.46): resolution: {integrity: sha512-AvZTBXDaVuqOj8rGDqoVE+E8Pyy4aQHtd+ZPd9QZ3DLhDN2E8SEEc5pCQqTxN+ypkN+w6B36OPl8Nk7JcF7+yA==} dependencies: '@lowdefy/block-utils': 4.0.0-rc.12 dompurify: 3.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-markdown: 8.0.7(@types/react@18.2.37)(react@18.2.0) + react-markdown: 8.0.7(@types/react@18.2.46)(react@18.2.0) react-syntax-highlighter: 15.5.0(react@18.2.0) rehype-raw: 6.1.1 remark-gfm: 3.0.0 @@ -3178,8 +3178,8 @@ packages: '@types/node': 20.4.8 dev: true - /@types/hast@2.3.8: - resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} + /@types/hast@2.3.9: + resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} dependencies: '@types/unist': 2.0.10 dev: false @@ -3261,15 +3261,15 @@ packages: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true - /@types/prop-types@15.7.10: - resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: false - /@types/react@18.2.37: - resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} + /@types/react@18.2.46: + resolution: {integrity: sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==} dependencies: - '@types/prop-types': 15.7.10 - '@types/scheduler': 0.16.6 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 csstype: 3.1.2 dev: false @@ -3279,8 +3279,8 @@ packages: '@types/node': 20.4.8 dev: true - /@types/scheduler@0.16.6: - resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: false /@types/semver@7.5.5: @@ -3601,7 +3601,7 @@ packages: rc-tree: 5.7.12(react-dom@18.2.0)(react@18.2.0) rc-tree-select: 5.5.5(react-dom@18.2.0)(react@18.2.0) rc-trigger: 5.3.4(react-dom@18.2.0)(react@18.2.0) - rc-upload: 4.3.5(react-dom@18.2.0)(react@18.2.0) + rc-upload: 4.3.6(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5861,7 +5861,7 @@ packages: /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 '@types/unist': 2.0.10 hastscript: 7.2.0 property-information: 6.4.0 @@ -5877,13 +5877,13 @@ packages: /hast-util-parse-selector@3.1.1: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 dev: false /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 '@types/parse5': 6.0.3 hast-util-from-parse5: 7.1.2 hast-util-to-parse5: 7.1.0 @@ -5899,7 +5899,7 @@ packages: /hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 comma-separated-tokens: 2.0.3 property-information: 6.4.0 space-separated-tokens: 2.0.2 @@ -5914,7 +5914,7 @@ packages: /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -5924,7 +5924,7 @@ packages: /hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 property-information: 6.4.0 @@ -7080,10 +7080,8 @@ packages: image-size: 0.5.5 make-dir: 2.1.0 mime: 1.6.0 - needle: 3.2.0 + needle: 3.3.1 source-map: 0.6.1 - transitivePeerDependencies: - - supports-color dev: true /leven@3.1.0: @@ -7425,7 +7423,7 @@ packages: /mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 '@types/mdast': 3.0.15 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.2.0 @@ -7941,17 +7939,14 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /needle@3.2.0: - resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + /needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} engines: {node: '>= 4.4.x'} hasBin: true requiresBuild: true dependencies: - debug: 3.2.7 iconv-lite: 0.6.3 sax: 1.3.0 - transitivePeerDependencies: - - supports-color dev: true optional: true @@ -8515,7 +8510,7 @@ packages: /pino-abstract-transport@1.1.0: resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} dependencies: - readable-stream: 4.4.2 + readable-stream: 4.5.2 split2: 4.2.0 dev: false @@ -8532,7 +8527,7 @@ packages: on-exit-leak-free: 2.1.2 pino-abstract-transport: 1.1.0 pino-std-serializers: 6.2.2 - process-warning: 2.3.0 + process-warning: 2.3.2 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 @@ -8635,8 +8630,8 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false - /process-warning@2.3.0: - resolution: {integrity: sha512-N6mp1+2jpQr3oCFMz6SeHRGbv6Slb20bRhj4v3xR99HqNToAcOe1MFOp4tytyzOfJn+QtN8Rf7U/h2KAn4kC6g==} + /process-warning@2.3.2: + resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==} dev: false /process@0.11.10: @@ -9214,8 +9209,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /rc-upload@4.3.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-EHlKJbhkgFSQHliTj9v/2K5aEuFwfUQgZARzD7AmAPOneZEPiCNF3n6PEWIuqz9h7oq6FuXgdR67sC5BWFxJbA==} + /rc-upload@4.3.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -9287,15 +9282,15 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-markdown@8.0.7(@types/react@18.2.37)(react@18.2.0): + /react-markdown@8.0.7(@types/react@18.2.46)(react@18.2.0): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: '@types/react': '>=16' react: '>=16' dependencies: - '@types/hast': 2.3.8 - '@types/prop-types': 15.7.10 - '@types/react': 18.2.37 + '@types/hast': 2.3.9 + '@types/prop-types': 15.7.11 + '@types/react': 18.2.46 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.1 @@ -9382,8 +9377,8 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readable-stream@4.4.2: - resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + /readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: abort-controller: 3.0.0 @@ -9461,7 +9456,7 @@ packages: /rehype-raw@6.1.1: resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 hast-util-raw: 7.2.3 unified: 10.1.2 dev: false @@ -9490,7 +9485,7 @@ packages: /remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.9 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2