{"id":20502160,"url":"https://github.com/srukshan98/ngs-workspace","last_synced_at":"2026-04-21T13:32:55.562Z","repository":{"id":54274121,"uuid":"324509624","full_name":"srukshan98/ngs-workspace","owner":"srukshan98","description":"This Library introduces an Intelligent way to hold your components dynamically in a tabular format in a modern side panel.","archived":false,"fork":false,"pushed_at":"2021-02-27T16:35:16.000Z","size":363,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-05T19:59:30.809Z","etag":null,"topics":["angular","workspace"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/ngs-workspace","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srukshan98.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-26T08:03:28.000Z","updated_at":"2021-02-27T16:35:15.000Z","dependencies_parsed_at":"2022-08-13T10:40:37.134Z","dependency_job_id":null,"html_url":"https://github.com/srukshan98/ngs-workspace","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/srukshan98/ngs-workspace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srukshan98%2Fngs-workspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srukshan98%2Fngs-workspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srukshan98%2Fngs-workspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srukshan98%2Fngs-workspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srukshan98","download_url":"https://codeload.github.com/srukshan98/ngs-workspace/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srukshan98%2Fngs-workspace/sbom","scorecard":{"id":844303,"data":{"date":"2025-08-11","repo":{"name":"github.com/srukshan98/ngs-workspace","commit":"f0c9ce396d59d362fd9ac8d01ed793098b0da919"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"Code-Review","score":0,"reason":"Found 0/15 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":"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: no jobLevel write permissions found"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/srukshan98/ngs-workspace/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/srukshan98/ngs-workspace/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/srukshan98/ngs-workspace/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/srukshan98/ngs-workspace/codeql-analysis.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned"],"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":"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":"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: GNU General Public License v3.0: 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":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 16 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":0,"reason":"117 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-c75v-2vq8-878f","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-whgm-jr23-g3j9","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-3wcq-x3mq-6r9p","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-j4f2-536g-r55m","Warn: Project is vulnerable to: GHSA-r7qp-cfhv-p84w","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-jg8v-48h5-wgxg","Warn: Project is vulnerable to: GHSA-36fh-84j7-cv5h","Warn: Project is vulnerable to: GHSA-7x7c-qm48-pq9c","Warn: Project is vulnerable to: GHSA-rc3x-jf5g-xvc5","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-82v2-mx6x-wq7q","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-qm28-7hqv-wg5j","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-px4h-xg32-q955","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-6fx8-h7jm-663j","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-fxwf-4rqh-v8g3","Warn: Project is vulnerable to: GHSA-25hc-qcg6-38wj","Warn: Project is vulnerable to: GHSA-xfhh-g9f5-x4m4","Warn: Project is vulnerable to: GHSA-qm95-pgcg-qqfq","Warn: Project is vulnerable to: GHSA-cqmj-92xf-r6r9","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-662x-fhqg-9p8v","Warn: Project is vulnerable to: GHSA-394c-5j6w-4xmx","Warn: Project is vulnerable to: GHSA-78cj-fxph-m83p","Warn: Project is vulnerable to: GHSA-fhg7-m89q-25r3","Warn: Project is vulnerable to: GHSA-9m6j-fcg5-2442","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-4fc4-chg7-h8gh","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc","Warn: Project is vulnerable to: GHSA-72mh-269x-7mh5","Warn: Project is vulnerable to: GHSA-h4j5-c7cj-74xg"],"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-23T21:06:15.017Z","repository_id":54274121,"created_at":"2025-08-23T21:06:15.017Z","updated_at":"2025-08-23T21:06:15.017Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32094481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["angular","workspace"],"created_at":"2024-11-15T19:20:11.205Z","updated_at":"2026-04-21T13:32:55.516Z","avatar_url":"https://github.com/srukshan98.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cdiv align=\"center\"\u003e Angular Smart Workspace \u003c/div\u003e\n\n![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg) [![Ask Me Anything !](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg)](https://GitHub.com/srukshan98) [![GitHub issues](https://img.shields.io/github/issues/srukshan98/ngs-workspace)](https://github.com/srukshan98/ngs-workspace/issues) [![GitHub license](https://img.shields.io/github/license/srukshan98/ngs-workspace)](https://github.com/srukshan98/ngs-workspace)\n\nThis Library introduces an Intelligent way to hold your components dynamically in a tabular format in a modern side panel.\n\nBelow documentation is a 90% plagiarisation of Angular Mat Dialog documentation.\n\n# Overview\n\nThe `NgsWorkspace` service can be used to open workspaces with Material Design styling and animations into a modern looking side panel.\n\n![Sample Image](https://drive.google.com/uc?export=download\u0026id=1kB_dhSB-bXnL5b0VMsVTUVdiOWCWrvT6)\n\n### [Demo Link](https://stackblitz.com/github/srukshan98/ngs-workspace-sample)\n\nThe `NgsWorkspaceModule` should be added to the app module with optional default configuration ([IWorkspaceConfig](##-IWorkspaceConfig)).\n\n```\n@NgModule({\n  imports: [\n    ...\n    NgsWorkspaceModule.forRoot({\n      placeholderComponent: NoTabComponent\n    }),\n    ...\n  ],\n})\nexport class AppModule { }\n```\n\nA workspace is opened by calling the open method with a component to be loaded and an optional config object ([IWorkspaceTabConfig](##-IWorkspaceTabConfig)). The open method will return an instance of [NgsWorkspaceTabRef](##-WorkspaceTabRef):\n\n```\nlet workspaceRef = workspace.open(UserProfileComponent, {\n  title: 'User Profile'\n});\n```\n\nThe NgsWorkspaceTabRef provides a handle on the opened workspace tab. It can be used to close the workspace tab and to receive notification when the workspace tab has been closed.\n\n```\nworkspaceRef.afterClosed().subscribe(result =\u003e {\n  console.log(`Workspace result: ${result}`); // Cool!\n});\n\nworkspaceRef.close('Cool!');\n```\n\nComponents created via NgsWorkspace can inject NgsWorkspaceTabRef and use it to close the workspace in which they are contained. When closing, an optional result value can be provided. This result value is forwarded as the result of the afterClosed promise.\n\n```\n@Component({/* ... */})\nexport class YourWorkspaceTab {\n  constructor(public workspaceRef: NgsWorkspaceTabRef\u003cYourWorkspaceTab\u003e) { }\n\n  closeWorkspaceTab() {\n    this.workspaceRef.close('Cool!');\n  }\n}\n```\n\n### Sharing data with the Workspace Tab component.\n\nIf you want to share data with your workspace tab, you can use the data option to pass information to the workspace tab component.\n\n```\nlet workspaceRef = workspace.open(YourWorkspaceTab, {\n  data: { name: 'austin' },\n});\n```\n\nTo access the data in your workspace tab component, you have to use the `WORKSPACE_DATA` injection token:\n\n```\nimport {Component, Inject} from '@angular/core';\nimport {WORKSPACE_DATA} from 'ngs-workspace';\n\n@Component({\n  selector: 'your-workspace',\n  template: 'passed in {{ data.name }}',\n})\nexport class YourWorkspaceTab {\n  constructor(@Inject(WORKSPACE_DATA) public data: {name: string}) { }\n}\n```\n\n### Handling Errors Globally\n\n```\nthis.workspace.emitErrors.subscribe((err: WorkspaceErrorModel) =\u003e {\n  if (err.message) {\n    this.snackBar.open(err.message);\n  }\n});\n```\n\n### Adding Custom header to workspace\n\nAdd this to any html template in your project\n\n```\n\u003cdiv *ngsWorkspaceHeader class=\"header\"\u003e\n  Workspace\n  \u003cdiv class=\"close-btn\" ngsWorkspaceClose\u003e\n    \u003cmat-icon\u003elogin\u003c/mat-icon\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n```\n\nor attach the template Reference or Component to workspace service to dynamically set the header\n\n```\nthis.workspace.attachHeader(header);\n```\n\n# API reference\n\n```\nimport {NgsWorkspaceModule} from 'ngs-workspace';\n```\n\n## Services\n\u003chr\u003e\n\n## NgsWorkspace\n\nService to open NgsWorkspace Tab.\n\u003cbr/\u003e\u003cbr/\u003e\n### Properties\n\n| Name | Description |\n|---|---|\n| slide: BehaviorSubject\u003c'in' \\| 'out'\u003e | Slide in and out the workspace |\n| afterAllClosed: Observable\u003cvoid\u003e | Stream that emits when all open tabs have finished closing.|\n| tabCount: Observable\u003cnumber\u003e | An Observable that will emit on Tab count changes |\n| onTabClosed: Subject\u003cWorkspaceTabRef\u003cany\u003e\u003e | An observable which will emit if a tab is closed |\n| afterOpened: Subject\u003cWorkspaceTabRef\u003cany\u003e\u003e | Stream that emits when a tab has been opened. |\n| openWorkspaces: WorkspaceTabRef\u003cany\u003e[] | Keeps track of currently-open workspace tabs |\n| emitErrors: Subject\u003cWorkspaceErrorModel\u003e | Stream that emits all tab errors |\n\u003cbr/\u003e\u003cbr/\u003e\n### Methods\n| closeAll |\n|---|\n| Close all of the currently-open tabs |\n\u003cbr/\u003e\n\n| getWorkspaceById ||\n|---|---|\n| Finds an open tab by its id ||\n| **Parameters** ||\n| id\u003cbr\u003e*number* | ID to use when looking up the tab|\n| \u003cb\u003eReturns\u003c/b\u003e ||\n| WorkspaceTabRef\\\u003cT\\\u003e \\| undefined ||\n\n\u003cbr/\u003e\n\n| open ||\n|---|---|\n| Opens a workspace tab containing the given component ||\n| **Parameters** ||\n| component\u003cbr\u003e*ComponentType\\\u003cT\\\u003e* | Type of the component to load into the tab |\n| config?\u003cbr\u003e*IWorkspaceTabConfig\\\u003cD\\\u003e* | Extra Configuration Options |\n| \u003cb\u003eReturns\u003c/b\u003e ||\n| WorkspaceTabRef\\\u003cT, R\\\u003e ||\n\n\u003cbr/\u003e\n\n| attachHeader ||\n|---|---|\n| Attach the given component or Template as the workspace header ||\n| **Parameters** ||\n| headerRef\u003cbr\u003e*TemplateRef\\\u003cany\\\u003e \\| ComponentType\\\u003cany\\\u003e* | Type of the component or Template to load as the header |\n\u003cbr/\u003e\n\n## Directives\n\u003chr\u003e\n\n## WorkspaceClose\n\nButton that will close the current workspace tab\n\nSelector: ```[ngsWorkspaceClose]```\n\n\u003cbr/\u003e\n\n## WorkspaceHeader\n\nA structural directive which will take it's content and add it to the workspace header.\n\nSelector: ```[ngsWorkspaceHeader]```\n\u003cbr\u003e\u003cbr\u003e\n\n## Classes\n\u003chr\u003e\n\n## WorkspaceTabRef\n\nReference to a tab opened via NgsWorkspace Service.\n\u003cbr\u003e\u003cbr\u003e\n\n### Properties\n\n| Name | Description |\n|---|---|\n| referenceId: number ||\n| componentRef: ComponentRef\\\u003cT\\\u003e | reference to component opened in tab |\n\u003cbr\u003e\u003cbr\u003e\n\n### Methods\n| close ||\n|---|---|\n| Close current workspace tab ||\n| **Parameters** ||\n| data\u003cbr\u003e*R* | Data to passes down to parent component |\n\u003cbr\u003e\n\n| minimize |\n|---|\n| Minimize the workspace |\n\u003cbr\u003e\n\n| onTabVisit |\n|---|\n| Gets an observable that is notified when the tab is been visited |\n| \u003cb\u003eReturns\u003c/b\u003e |\n| Observable\\\u003cT\\\u003e |\n\u003cbr\u003e\n\n| onTabLeave |\n|---|\n| Gets an observable that is notified when the tab is been left |\n| \u003cb\u003eReturns\u003c/b\u003e |\n| Observable\\\u003cvoid\\\u003e |\n\u003cbr\u003e\n\n| onClose |\n|---|\n| Gets an observable that is notified when the tab is been closed |\n| \u003cb\u003eReturns\u003c/b\u003e |\n| Observable\\\u003cR \\| undefined\\\u003e |\n\u003cbr\u003e\n\n| onOpen |\n|---|\n| Gets an observable that is notified when the tab is been opened |\n| \u003cb\u003eReturns\u003c/b\u003e |\n| Observable\\\u003cvoid\\\u003e |\n\u003cbr\u003e\u003cbr\u003e\n\n## Interfaces\n\u003chr\u003e\n\n## IWorkspaceTabConfig\n\nConfiguration for opening a workspace tab with the NgsWorkspace service\n\u003cbr\u003e\u003cbr\u003e\n\n### Properties\n\n| Name | Description |\n|---|---|\n| title?: string | Title of the Workspace tab |\n| data?: D \\| null | Data being injected into the child component.|\n| disableClose?: boolean | Whether the user can click on the tab close button to close the modal |\n\u003cbr\u003e\u003cbr\u003e\n\n## IWorkspaceConfig\n\nConfiguration for workspace module root function\n\u003cbr\u003e\u003cbr\u003e\n\n### Properties\n\n| Name | Description |\n|---|---|\n| title?: string | Title of the Workspace tab |\n| disableClose?: boolean | Whether the user can click on the tab close button to close the modal |\n| minimizeOnNavigation?: boolean | Trigger the workspace to minimize on route change |\n| maxWidth?: number \\| string | Set a maximum workspace width |\n| minWidth?: number \\| string | Set a minimum workspace width |\n| width?: number \\| string | Set the initial workspace width |\n| maxTabCount?: number | Limit the tab Count. Default to -1 (inifinite) |\n| placeholderComponent?: ComponentType\u003cany\u003e | Component to be rendered as empty workspace UI |\n| direction?: 'RTL' \\| 'LTR' | Direction in which the workspace is expanded |\n| showSideBtn?: boolean | Set side button visibility |\n| classes?: StyleType | object of custom class names to customize workspace |\n| handleTabClose?: boolean | Disable workspace tab close button |\n| tabChangeAnimation?: boolean | Visibility of tab change animation |\n| animationDuration?: number | Duration of workspace animation in ms |\n| animationTiming?: WorkspaceAnimationTimingType | Workspace animation Timing Function |\n\u003cbr\u003e\u003cbr\u003e\n\n## WorkspaceErrorModel\n\nError Model Type the Workspace emits errors\n\u003cbr\u003e\u003cbr\u003e\n\n### Properties\n\n| Name | Description |\n|---|---|\n| ref: WorkspaceTabRef\\\u003cany\\\u003e | Reference the Workspace tab |\n| errorV2: WorkspaceErrorTypesV2 | Error Type enum.|\n| message?: string | The Error message for the error, if any. |\n| content?: string | The Error content, if any. |\n\u003cbr\u003e\u003cbr\u003e\n\n## StyleType\n\nObject of custom class names to customize workspace\n\u003cbr\u003e\u003cbr\u003e\n\n### Properties\n\n| Name | Description |\n|---|---|\n| container?: string[] | Array of custom class names attached to workspace container |\n| body?: string[] | Array of custom class names attached to workspace tab body |\n| tabLabel?: string[] | Array of custom class names attached to workspace tab label |\n| tabContainer?: string[] | Array of custom class names attached to workspace tab container |\n\u003cbr\u003e\u003cbr\u003e\n\n## Type aliases\n\u003chr\u003e\n\n### WorkspaceErrorTypesV2\nThe enum type of error that is thrown.\n```\nenum WorkspaceErrorTypesV2 {\n  SIMILAR_TAB_ERROR,\n  MAX_TAB_COUNT_EXCEEDED_ERROR,\n  CONSOLE_ERROR\n}\n```\n\u003cbr\u003e\u003cbr\u003e\n\n### WorkspaceAnimationTimingType\nAnimation timing function types\n```\nexport type WorkspaceAnimationTimingType = 'ease'\n    | 'linear'\n    | 'ease-in'\n    | 'ease-out'\n    | 'ease-in-out';\n```\n\u003cbr\u003e\u003cbr\u003e\n\n## Constants\n\u003chr\u003e\n\n### WORKSPACE_DATA\nInjection token that can be used to access the data that was passed in to a tab.\n\n```\nconst WORKSPACE_DATA: InjectionToken\u003cstring\u003e\n```\n\n# Versions\n\n\n### v0.2.0\n\nThis Update include breaking changes, new features and some bug fixes\n\n- The requirement to add the workspace component to a base component is now removed\n- The workspace component is not exposed\n- The method to add the workspace header has been altered\n- New API exposed from Workspace service to attach header dynamically\n- Exposed a Configuration to attach a custom class to workspace container \"workspaceContainerClass\"\n- Updated Customizable classes api to contain Container, Body, TabLabel and TabContainer\n- Exposed an external tab close handle\n- Exposed tab count observable\n- New tab change animation disable api\n- Workspace animation customizability added\n\n### v0.1.2\n\nThis Update include new features\n\n- Added the ability to change the direction of the workspace(RTL or LTR)\n- Added new Workspace header which can be added by a directive(ngsWorkspaceHeader)\n- Added new Workspace Close directive(ngsWorkspaceClose)\n- Added the ability to hide the side button\n\n### v0.1.1\n\nThis Update include new feature and APIs\n\n- Added New APIs to service\n  - afterAllClosed\n  - afterOpen\n  - openWorkspaces\n  - closeAll method\n  - getWorkspaceById method\n- Global Error Handling added\n\n### v0.1.0\n\nThis update include several bug and performance enhancement.\n\n- Added a Workspace Container CSS Class\n- Now the component reference is exposed from WorkspaceTabRef\n- Default Error Enum is Deprecated\n- New Error Enum added with Better description\n\n# Collaboration\n\nPlease create a Github Issues to inform any issues and suggestions, also you can fix any code issues you find and create a pull request to integrate.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrukshan98%2Fngs-workspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrukshan98%2Fngs-workspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrukshan98%2Fngs-workspace/lists"}