{"id":18537925,"url":"https://github.com/easywebapp/cell-router","last_synced_at":"2025-04-09T17:37:12.889Z","repository":{"id":57195646,"uuid":"138959382","full_name":"EasyWebApp/cell-router","owner":"EasyWebApp","description":"Decorator based Router component framework, powered by WebCell","archived":false,"fork":false,"pushed_at":"2025-03-09T14:36:56.000Z","size":1927,"stargazers_count":6,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T09:11:35.450Z","etag":null,"topics":["decorator","router","spa","web-app","web-cell","web-component"],"latest_commit_sha":null,"homepage":"https://web-cell.dev/cell-router/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EasyWebApp.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":"Contributing.md","funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://paypal.me/TechQuery","https://tech-query.me/image/TechQuery-Alipay.jpg"]}},"created_at":"2018-06-28T03:03:20.000Z","updated_at":"2025-03-09T14:33:50.000Z","dependencies_parsed_at":"2024-05-17T17:48:16.692Z","dependency_job_id":"6b560f84-6502-4e70-b881-d2291e4fbaa2","html_url":"https://github.com/EasyWebApp/cell-router","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyWebApp%2Fcell-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyWebApp%2Fcell-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyWebApp%2Fcell-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EasyWebApp%2Fcell-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EasyWebApp","download_url":"https://codeload.github.com/EasyWebApp/cell-router/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248078344,"owners_count":21044091,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["decorator","router","spa","web-app","web-cell","web-component"],"created_at":"2024-11-06T19:41:15.538Z","updated_at":"2025-04-09T17:37:12.882Z","avatar_url":"https://github.com/EasyWebApp.png","language":"TypeScript","funding_links":["https://paypal.me/TechQuery","https://tech-query.me/image/TechQuery-Alipay.jpg"],"categories":[],"sub_categories":[],"readme":"# Cell Router\n\n[Web Component][1] Router based on [WebCell][2] \u0026 [MobX][3]\n\n[![NPM Dependency](https://img.shields.io/librariesio/github/EasyWebApp/cell-router.svg)][4]\n[![CI \u0026 CD](https://github.com/EasyWebApp/cell-router/actions/workflows/main.yml/badge.svg)][5]\n\n[![NPM](https://nodei.co/npm/cell-router.png?downloads=true\u0026downloadRank=true\u0026stars=true)][6]\n\n## Demo\n\nhttps://web-cell.dev/cell-router/preview/\n\n## Feature\n\n-   [x] `\u003ciframe /\u003e`-like **Route Component** as a **Page Container**\n\n-   [x] **Page Link** (support `\u003ca /\u003e`, `\u003carea /\u003e` \u0026 `\u003cform /\u003e`)\n\n    -   `\u003ca href=\"route/path\"\u003ePage title\u003c/a\u003e`\n    -   `\u003ca href=\"route/path\" title=\"Page title\"\u003eExample page\u003c/a\u003e`\n    -   `\u003ca href=\"#page-section\"\u003ePage section\u003c/a\u003e` (Scroll to an Anchor smoothly)\n    -   `\u003cform method=\"get\" action=\"route/path\" /\u003e` (Form Data processed by `URLSearchParams`)\n\n-   [x] **Path Mode**: `location.hash` (default) \u0026 `history.pushState()`\n\n-   [x] **Async Loading** (based on `import()` ECMAScript syntax)\n\n-   [x] [View Transition API][7] based **Page Transition Animation**\n\n## Installation\n\n### Command\n\n```shell\nnpm install dom-renderer web-cell cell-router\nnpm install parcel @parcel/config-default @parcel/transformer-typescript-tsc -D\n```\n\n### `tsconfig.json`\n\n```json\n{\n    \"compilerOptions\": {\n        \"target\": \"ES6\",\n        \"useDefineForClassFields\": true,\n        \"jsx\": \"react-jsx\",\n        \"jsxImportSource\": \"dom-renderer\"\n    }\n}\n```\n\n### `.parcelrc`\n\n```json\n{\n    \"extends\": \"@parcel/config-default\",\n    \"transformers\": {\n        \"*.{ts,tsx}\": [\"@parcel/transformer-typescript-tsc\"]\n    }\n}\n```\n\n## Usage\n\n### Sync Pages\n\n#### `source/index.tsx`\n\n```tsx\nimport { DOMRenderer } from 'dom-renderer';\nimport { FC } from 'web-cell';\nimport { createRouter, PageProps } from 'cell-router';\n\nconst { Route, Link } = createRouter();\n\nconst TestPage: FC\u003cPageProps\u003e = ({\n    className,\n    style,\n    path,\n    history,\n    ...data\n}) =\u003e (\n    \u003cul {...{ className, style }}\u003e\n        \u003cli\u003ePath: {path}\u003c/li\u003e\n        \u003cli\u003eData: {JSON.stringify(data)}\u003c/li\u003e\n    \u003c/ul\u003e\n);\n\nnew DOMRenderer().render(\n    \u003c\u003e\n        \u003cnav\u003e\n            \u003cLink to=\"test?a=1\"\u003eTest\u003c/Link\u003e\n            \u003cLink to=\"example/2\"\u003eExample\u003c/Link\u003e\n        \u003c/nav\u003e\n        \u003cmain className=\"router\"\u003e\n            \u003cRoute\n                path=\"\"\n                component={props =\u003e \u003cdiv {...props}\u003eHome Page\u003c/div\u003e}\n            /\u003e\n            \u003cRoute path=\"test\" component={TestPage} /\u003e\n            \u003cRoute path=\"example/:id\" component={TestPage} /\u003e\n        \u003c/main\u003e\n    \u003c/\u003e\n);\n```\n\n### Async Pages\n\n#### `tsconfig.json`\n\n```json\n{\n    \"compilerOptions\": {\n        \"module\": \"ES2020\"\n    }\n}\n```\n\n#### `source/index.tsx`\n\n```tsx\nimport { DOMRenderer } from 'dom-renderer';\nimport { FC, lazy } from 'web-cell';\nimport { createRouter, PageProps } from 'cell-router';\n\nconst { Route, Link } = createRouter();\n\nconst TestPage: FC\u003cPageProps\u003e = ({\n    className,\n    style,\n    path,\n    history,\n    ...data\n}) =\u003e (\n    \u003cul {...{ className, style }}\u003e\n        \u003cli\u003ePath: {path}\u003c/li\u003e\n        \u003cli\u003eData: {JSON.stringify(data)}\u003c/li\u003e\n    \u003c/ul\u003e\n);\nconst AsyncPage = lazy(() =\u003e import('./Async'));\n\nnew DOMRenderer().render(\n    \u003c\u003e\n        \u003cnav\u003e\n            \u003cLink to=\"test?a=1\"\u003eTest\u003c/Link\u003e\n            \u003cLink to=\"example/2\"\u003eExample\u003c/Link\u003e\n        \u003c/nav\u003e\n        \u003cmain className=\"router\"\u003e\n            \u003cRoute\n                path=\"\"\n                component={props =\u003e \u003cdiv {...props}\u003eHome Page\u003c/div\u003e}\n            /\u003e\n            \u003cRoute path=\"test\" component={TestPage} /\u003e\n            \u003cRoute path=\"example/:id\" component={AsyncPage} /\u003e\n        \u003c/main\u003e\n    \u003c/\u003e\n);\n```\n\n[1]: https://www.webcomponents.org/\n[2]: https://web-cell.dev/\n[3]: https://mobx.js.org/\n[4]: https://libraries.io/npm/cell-router\n[5]: https://github.com/EasyWebApp/cell-router/actions/workflows/main.yml\n[6]: https://nodei.co/npm/cell-router/\n[7]: https://developer.chrome.com/docs/web-platform/view-transitions/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasywebapp%2Fcell-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasywebapp%2Fcell-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasywebapp%2Fcell-router/lists"}