{"id":28190010,"url":"https://github.com/typescene/typescene-treegrid","last_synced_at":"2026-03-01T02:31:23.002Z","repository":{"id":47810539,"uuid":"165974490","full_name":"typescene/typescene-treegrid","owner":"typescene","description":"Typescene TreeGrid and PropertyGrid components","archived":false,"fork":false,"pushed_at":"2021-08-12T20:57:16.000Z","size":293,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-12T01:38:39.903Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typescene.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-16T04:37:08.000Z","updated_at":"2021-07-31T10:35:27.000Z","dependencies_parsed_at":"2022-08-24T14:38:17.905Z","dependency_job_id":null,"html_url":"https://github.com/typescene/typescene-treegrid","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/typescene/typescene-treegrid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescene%2Ftypescene-treegrid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescene%2Ftypescene-treegrid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescene%2Ftypescene-treegrid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescene%2Ftypescene-treegrid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typescene","download_url":"https://codeload.github.com/typescene/typescene-treegrid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescene%2Ftypescene-treegrid/sbom","scorecard":{"id":905334,"data":{"date":"2025-08-11","repo":{"name":"github.com/typescene/typescene-treegrid","commit":"1c55972cb4bcd21531c2ec49ff8ea1b583c25aa4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/12 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T17:08:51.766Z","repository_id":47810539,"created_at":"2025-08-24T17:08:51.766Z","updated_at":"2025-08-24T17:08:51.766Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29959037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-05-16T10:11:56.011Z","updated_at":"2026-03-01T02:31:22.904Z","avatar_url":"https://github.com/typescene.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TreeGridView \u0026 PropertyGridView\n\nThis package contains the `TreeGridView` and `PropertyGridView` components. These can be used to display hierarchical lists and grid controls in a Typescene application.\n\nNOTE: if you're looking for an introduction to how components should be written using Typescene, this isn't the right place. For various reasons (see Notes below), the implementation of a collapsible tree-grid is very complex. For a better example, take a look at the [`typescene/sample-project-todo`](https://github.com/typescene/sample-project-todo) repository instead.\n\n## Installation \u0026 Usage\n\n**Note:** This component requires [Typescene](https://github.com/typescene/typescene).\n\nTo add one of these components to your application, add the NPM package first:\n\n`npm i -D @typescene/treegrid`\n\nThen import the `TreeGridView` and/or `PropertyGridView` classes (or `TreeGrid` and/or `PropertyGrid` for JSX views) using an import statement such as:\n\n`import { PropertyGrid, PropertyGridRow } from \"@typescene/treegrid\"`\n\n### JSX\n\nNote that _rows_ within grids are NOT represented by UI components, hence these cannot be preset using JSX syntax.\n\nThe correct way to include a property grid component in JSX is as follows:\n\n```tsx\nimport { PropertyGrid, PropertyGridRow } from \"@typescene/treegrid\";\n\nexport default (\n  \u003cPropertyGrid\n    rows={[\n      PropertyGridRow.with({\n        label: \"First row\",\n        // ...\n      }),\n      // ... etc.\n    ]}\n  /\u003e\n);\n```\n\n## Demo\n\nThe `demo/` folder contains a working example.\n\n\u003cimg width=\"600\" src=\"screenshot.png\" alt=\"Screenshot\" /\u003e\n\nClone the source repository, and run the following commands:\n\n- `npm install`\n- `npm run build`\n- `cd demo`\n- `npm install`\n- `npm start`\n\n## Notes\n\nThe code in this repository is relatively complex, and probably not a good first project to look at (the source code, that is) if you're new to Typescene. There are two primary reasons for this:\n\n1. Because of the way the Document Object Model (DOM) works, and specifically the limitations of the Flexible Box Model (aka flexbox, which is what Typescene uses to render its UI components), the grid is rendered as a set of _columns_ rather than simply as rows. This means that all cells within a column are guaranteed to be of the same width, however it also means that the implementation for updating cells within one row is _much_ more complicated than otherwise.\n2. For efficiency, the implementation takes care of updating only the necessary cells when showing/hiding or updating particular rows. This is done using a linked list of visible cells, which adds lots of complexity.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypescene%2Ftypescene-treegrid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypescene%2Ftypescene-treegrid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypescene%2Ftypescene-treegrid/lists"}