diff --git a/.eslintrc.js b/.eslintrc.js index 7d6108d36b..a5e9976e13 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -148,6 +148,6 @@ module.exports = { rules: { '@typescript-eslint/no-non-null-assertion': 'off', } - } + }, ], } diff --git a/DEV_DOCS.md b/DEV_DOCS.md index 4232cb2ff9..9a667d545b 100644 --- a/DEV_DOCS.md +++ b/DEV_DOCS.md @@ -8,6 +8,7 @@ Canonical reference for everyone working on the HyperFormula source code: mainta - **[Test suite](test/README.md)** — smoke tests and how to attach the private test suite - **[Public docs portal](https://hyperformula.handsontable.com/docs)** — main documentation - **[Docs README](docs/README.md)** — how to run the docs portal locally +- **[Docs content guide](DOCS_CONTENT_GUIDE.md)** — how to create and edit docs content - **[Changelog](CHANGELOG.md)** - **[Pull request template](.github/pull_request_template.md)** @@ -90,6 +91,10 @@ A single pull request should contain an atomic self-contained functional change - All changes to the production code must be covered by automatic tests kept in the `test/` directory. - Each test case must be very simple and focused on a single assertion. Don't use loops, conditionals, or other control flow statements in test cases. +## Documentation + +- Follow the [documentation content guide](DOCS_CONTENT_GUIDE.md) when creating or editing docs (writing style, language, and how to structure guides). + ## How to add a new function Adding a built-in function is similar to adding a [custom function](docs/guide/custom-functions.md), so that guide is a useful reference for the function-implementation patterns (argument metadata, return types, array handling). The built-in flow on top of that is: diff --git a/context7.json b/context7.json new file mode 100644 index 0000000000..b819d18d1e --- /dev/null +++ b/context7.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://context7.com/schema/context7.json", + "projectTitle": "HyperFormula", + "description": "Headless, Excel-compatible spreadsheet engine in TypeScript — parses and evaluates ~400 functions in the browser or Node.js. In-process library (no REST API).", + "folders": ["docs"], + "excludeFolders": ["docs/.vuepress", "docs/api"], + "rules": [ + "HyperFormula is an in-process library, not a REST API — there is no HTTP endpoint or base URL.", + "Public API cell addresses are 0-indexed: { sheet, col, row }.", + "There is no #CALC! error type.", + "EmptyValue is exported as a Symbol, not null/undefined.", + "A license key is required when constructing the engine (use 'gpl-v3' for open-source use)." + ] +} diff --git a/docs/.vuepress/components/CodingAgentWizard.vue b/docs/.vuepress/components/CodingAgentWizard.vue new file mode 100644 index 0000000000..6eb24284a4 --- /dev/null +++ b/docs/.vuepress/components/CodingAgentWizard.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/docs/.vuepress/components/ViewMarkdownLink.vue b/docs/.vuepress/components/ViewMarkdownLink.vue new file mode 100644 index 0000000000..287f4dfa7c --- /dev/null +++ b/docs/.vuepress/components/ViewMarkdownLink.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/docs/.vuepress/components/clipboard.js b/docs/.vuepress/components/clipboard.js new file mode 100644 index 0000000000..694b8b1bcc --- /dev/null +++ b/docs/.vuepress/components/clipboard.js @@ -0,0 +1,29 @@ +/** + * Copy text to the clipboard, falling back to a hidden `