{"id":22033908,"url":"https://github.com/mateuszbilicz/ngx-windows","last_synced_at":"2026-02-20T11:03:30.271Z","repository":{"id":257834017,"uuid":"842189633","full_name":"mateuszbilicz/ngx-windows","owner":"mateuszbilicz","description":"Angular Windows Components and Services","archived":false,"fork":false,"pushed_at":"2024-11-18T10:28:41.000Z","size":971,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-13T19:18:15.226Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mateuszbilicz.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-13T21:21:45.000Z","updated_at":"2024-11-21T03:21:36.000Z","dependencies_parsed_at":"2024-10-16T16:41:32.459Z","dependency_job_id":null,"html_url":"https://github.com/mateuszbilicz/ngx-windows","commit_stats":null,"previous_names":["mateuszbilicz/ngx-windows"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mateuszbilicz/ngx-windows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mateuszbilicz%2Fngx-windows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mateuszbilicz%2Fngx-windows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mateuszbilicz%2Fngx-windows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mateuszbilicz%2Fngx-windows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mateuszbilicz","download_url":"https://codeload.github.com/mateuszbilicz/ngx-windows/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mateuszbilicz%2Fngx-windows/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266324500,"owners_count":23911227,"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","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":"2024-11-30T09:01:45.312Z","updated_at":"2026-02-20T11:03:30.258Z","avatar_url":"https://github.com/mateuszbilicz.png","language":"TypeScript","funding_links":[],"categories":["Table of contents","Recently Updated"],"sub_categories":["Third Party Components","[Nov 29, 2024](/content/2024/11/29/README.md)"],"readme":"# Angular Windows\n\nAngular version: 21.1.5\n\nPrevious versions of Angular aren't supported.\n\nLicense: ISC\n\n# Using Angular Windows\n\n## Installation\n\nInstall ngx-windows: `npm i ngx-windows`.\nEdit, build and use in example app: `npm run update-ngx-windows`.\n\nAdd ngx-windows style to your angular.json config file:\n\n```json\n\"styles\": [\n  \"./node_modules/ngx-windows/ngx-windows-style.css\",\n  \"src/styles.scss\"\n]\n```\n\n## Usage\n\n1. You should provide NgwWindowsManagerService in app config\n   or if you need multiple instances - in specific component that will\n   contain windows.\n\n2. Add NgwWindowsContainerComponent to your template\n\n```angular17html\n\u003cngw-windows-container [style]=\"{width: '100vw', height: '100vh'}\"/\u003e\n```\n\nYou must set width and height of this container for windows.\n\nCurrent version uses only window inner width and height.\n\n3. Creating window\n\nIn any component inject NgwWindowsManagerService and use it commands to control, filter and manage windows globally.\nYou must provide class of component that will be displayed inside window.\nComponent should have overflow:auto, width:100% and height:100% for more fail-safe experience.\nIf you want to change window component while window is already active you need to\nuse `NgwWindowsManagerService.findFN.component = AnotherComponent`.\n\n```typescript\nexport class YourComponent {\n  constructor(public nwm: NgwWindowsManagerService,\n              private destroyRef: DestroyRef) {\n    const win = this.nwm.createWindow({\n      name: 'Test Window',\n      component: TestWindowComponent\n    });\n    win.onRegister$\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(service =\u003e {\n        // Change window properties after it's registered...\n      });\n    // Don't change window properties through win.service here - explaination in HowItWorks section\n  }\n}\n```\n\nYour window component \u003cb\u003emust\u003c/b\u003e contain windowController input!\n\n```typescript\n  windowController = input.required\u003cNgwWindowControllerService\u003e();\n```\n\nAlso, remember to set window placement after register:\n\n```typescript\nconstructor(private nwm: NgwWindowsManagerService) {\n  const win = this.nwm.createWindow({\n    name: 'My Window',\n    component: TestCpmComponent\n  });\n\n  win.onRegister$\n    .pipe(takeUntilDestroyed())\n    .subscribe(service =\u003e {\n      service.placementSvc.setAll(\n        800,\n        600,\n        30,\n        30\n      );\n    });\n}\n```\n\n## HowItWorks\n\nWhen you call `NgwWindowsManagerService.createWindow`\nfunction adds default properties, ID and onRegister$ Subject\nto window object and pushes it to `activeWindows`.\nAfter pushed, it's rendered inside `NgwWindowsContainerComponent`\nas `NgwWindowComponent` that calls `NgwWindowsManagerService.register`\nafter initialization of its service and self.\n`onRegister$: Subject\u003cNgwWindowControllerService\u003e` was called after registration\nwhich means that you can use all properties and services inside `NgwWindowComponent`.\n\n# Examples\n\n## Simple window\n\n`src/app/app.component` - creating window after init\n\n`src/app/test-app` - window contents\n\n## Window with close confirmation dialog\n\n`src/app/app.component` - add button\n\n`src/app/close-confirm-dialog-example` - primary window with close confirmation checkbox\n\n`src/app/close-confirm-dialog` - close confirmation dialog that fires close/cancel event to parent\n\n# API\n\n## NgwWindowsManagerService\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eProperties\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eProperty\u003c/th\u003e\n    \u003cth\u003eType\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eactiveWindows\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;ActiveNgwWindowProps[]\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Full windows list.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecurrentActiveWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;ActiveNgwWindowProps | undefined\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Currently active window object. If all windows are not active then it's undefined.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eonPlacementChange$\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eBehaviorSubject\u0026lt;NgwWindowPlacement | undefined\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window placement information while moving - for preview of window placement while user moves window.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e [!WARNING]\n\u003e Functions that update window properties, add window or remove window uses write operations.\n\u003e If you want to use these functions in effect then you need to set effect property {allowWriteSignals: true}.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eFunctions\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eFunction\u003c/th\u003e\n    \u003cth\u003eArguments\u003c/th\u003e\n    \u003cth\u003eReturns\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecreateWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eproperties: NgwWindowPropsWithoutId\u003c/code\u003e,\n      \u003ccode\u003eactivate?: boolean\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eActiveNgwWindowProps\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eCreates window instance with all properties. Window is not fully initialized yet.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eremoveWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewindowId: string\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eRemoves window.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003efilterWindowsByName\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enameFilter?: string\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService[]\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eFind windows that name contains specified nameFilter.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetWindowById\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewindowId: string\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService | undefined\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eGet window by its ID. If there's no such window then return undefined.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetOpenWindows\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService[]\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eGet all not minimized windows.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetMaximizedWindows\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService[]\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eGet all maximized windows.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetMinimizedWindows\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService[]\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eGet all minimized windows.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetActiveWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPropsWithService | undefined\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eGet current active window or undefined if there's no focused window.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eactivateWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewindowId: string\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eActivate (focus) window. If there's focused window then it will be deactivated. If window that you're activating is minimized, then it will open it.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edeactivateCurrentActiveWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eDeactivate (unfocus) window.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eremoveAllWindows\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eInstantly removes all active window. If some windows has close confirmation, then it will be skipped.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eonPlacementPrediction\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eplacement?: NgwWindowPlacement\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eWindow calls this function when user moves it and placement prediction is enabled.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eregisterWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eid: string\u003c/code\u003e,\n      \u003ccode\u003eservice: NgwWindowControllerService\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eWindow calls this function after it's initialized. This function also calls ActiveNgwWindowProps.onRegister$ and completes it.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## NgwWindowControllerService\n\nEach window has its own instance of NgwWindowControllerService that can be accessed\nvia `NgwWindowsManagerService.createWindow(...).onRegister$`\nor `NgwWindowsManagerService.findFN.service` (after initialization).\nIt's also passed to window app component as\nrequired input `windowController: InputSignal\u003cNgwWindowControllerService\u003e`.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eProperties\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eProperty\u003c/th\u003e\n    \u003cth\u003eType\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eproperties\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;NgwWindowProps | undefined\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window properties.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eonMenu$\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSubject\u0026lt;MouseEvent\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Menu button click Subject.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eonClose$\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSubject\u0026lt;MouseEvent\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window Close Subject.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eleftControlsTemplate\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eTemplateRef\u0026lt;any\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window topbar left controls template (optional).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003erightControlsTemplate\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eTemplateRef\u0026lt;any\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window topbar right controls template (optional).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ewindowNameTemplate\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eTemplateRef\u0026lt;any\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window topbar name template (optional).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eid\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;string\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Read-only window id.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ename\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;string\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Read-only window name.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecomponent\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;string\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Read-only window component (app).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edata\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWriteableSignal\u0026lt;any\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Read-only window data (any data passed to window via properties).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e [!WARNING]\n\u003e Functions that update window properties, add window or remove window uses write operations.\n\u003e If you want to use these functions in effect then you need to set effect property {allowWriteSignals: true}.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eFunctions\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eFunction\u003c/th\u003e\n    \u003cth\u003eArguments\u003c/th\u003e\n    \u003cth\u003eReturns\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emoveWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ex: number\u003c/code\u003e,\n      \u003ccode\u003ey: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eMoves window with checking max/min position to user viewport. Checks minimized and maximized state, if some of them is true, then cancels execution.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eresizeWindow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewidth: number\u003c/code\u003e,\n      \u003ccode\u003eheight: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eResize window, uses window mix and max size. Cancels if window is minimized or maximized.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edoNgwWindowPlacementIfPossible\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ex: number\u003c/code\u003e,\n      \u003ccode\u003ey: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eChecks possible window placement mode and if it's not \"free\", then applies this placement to window.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetPlacementMode\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ex: number\u003c/code\u003e,\n      \u003ccode\u003ey: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWindowPlacementKeyName | undefined\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003ePredicts window placement mode or undefined if it's \"free\".\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eisOverResizingPoint\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ex: number\u003c/code\u003e,\n      \u003ccode\u003ey: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eboolean\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eChecks distance to window resizing point and returns if mouse cursor is over this point.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eminimize\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eSets window minimized state. If current active window is focused (active), then deactivates it.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etoggleMaximize\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eToggles window maximized state.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetLocked\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003elocked: boolean\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eSets window locked state.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eclose\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eev: MouseEvent\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003eIf window has preventClose option then emits onClose$ Subject, else calls removeWindow.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n# NgwWindowConfigurationService\n\nProvided in and used by NgwWindowComponent.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eProperties\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eProperty\u003c/th\u003e\n    \u003cth\u003eType\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edisplayProperties\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;NgwWindowConfiguration\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      All window display properties.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edisplayName\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Display window name in topbar.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eshowLeftControls\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Show window left controls, by default - menu button.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eshowRightControls\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Show window right controls, by default - minimize, maximize, close.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eshowMenuButton\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Show window menu button which emits onMenu$ on click.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emaximizable\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window can be maximized.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eminimizable\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window can be minimized.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecloseable\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window can be closed by user.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003epreventClose\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets close prevention by user. You can use onClose$ to show close confirmation dialog and then use removeWindow.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eshowTopBar\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window topbar could be shown. Without it you need to manually manage window state, close and move.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eplacementDistanceTolerance\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Tolerance of placement prediction \u0026 alignment (distance from placement point).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eresizeDistanceTolerance\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Distance to window resize point for resize activation (right bottom corner).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eallowOutboundMovements\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window could be moved outside user viewport.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eallowPlacementAlignment\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window could be aligned to placement point.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eborderless\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Disables window border.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003enoShadow\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Disabled window shadow.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003etransparent\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window should be transparent.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ebackground\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets css window background (if not transparent).\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ebackdropFilter\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets css backdrop filter.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emoveable\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window could be moveable.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eresizeable\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets if window could be resizeable.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eFunctions\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eFunction\u003c/th\u003e\n    \u003cth\u003eArguments\u003c/th\u003e\n    \u003cth\u003eReturns\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetProperty\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eproperty: T\u003c/code\u003e,\n      \u003ccode\u003evalue: NgwWindowConfiguration[T]\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets specific property defined in NgwWindowConfiguration.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetProperties\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eproperties: NgwWindowConfiguration\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Overrides all window configuration properties.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eappendProperties\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eproperties: Partial\u0026lt;NgwWindowConfiguration\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Concat new properties with previous.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n# NgwWindowPlacementService\n\nProvided in and used by NgwWindowComponent.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eProperties\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eProperty\u003c/th\u003e\n    \u003cth\u003eType\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eplacementMode\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;WindowPlacementsKeyName | undefined\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Current window placement mode.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eplacementBeforeAuto\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;NgwWindowPlacement | undefined\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window placement before alignment.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ewidth\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window width.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eheight\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window height.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eoffsetX\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window X position.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eoffsetY\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window Y position.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eminWidth\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window minimum width.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emaxWidth\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window maximum width.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eminHeight\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window minimum height.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emaxHeight\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;number\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window maximum height.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eFunctions\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eFunction\u003c/th\u003e\n    \u003cth\u003eArguments\u003c/th\u003e\n    \u003cth\u003eReturns\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetWH\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewidth: number\u003c/code\u003e,\n      \u003ccode\u003eheight: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets window width and height.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetOffset\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eoffsetX: number\u003c/code\u003e,\n      \u003ccode\u003eoffsetY: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Set window XY position.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003esetAll\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003ewidth: number\u003c/code\u003e,\n      \u003ccode\u003eheight: number\u003c/code\u003e,\n      \u003ccode\u003eoffsetX: number\u003c/code\u003e,\n      \u003ccode\u003eoffsetY: number\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003evoid\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Sets all window placement properties.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egetPlacementObject\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003enone\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eNgwWindowPlacement\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Current window placement object.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n# NgwWindowStateService\n\nProvided in and used by NgwWindowComponent.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    \u003cb\u003eProperties\u003c/b\u003e\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eProperty\u003c/th\u003e\n    \u003cth\u003eType\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eminimized\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window minimized state signal.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emaximized\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window maximized state signal.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003efocused\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window focused state signal.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003elocked\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003eWritableSignal\u0026lt;boolean\u0026gt;\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Window locked state signal.\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n# Styling\n\nYou can create custom scss file with styles and import it in your styles.scss file.\nExample file can be found in public/custom-window-style.scss file.\n\nDefault style:\n```scss\nngw-window {\n  \u0026:not(.transparent) {\n    background: #efefef !important;\n  }\n\n  \u0026:not(\u0026.borderless) {\n    border: solid 1px #373737;\n  }\n\n  \u0026:not(\u0026.noshadow) {\n    box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.1);\n  }\n\n  \u0026.focused:not(\u0026.noshadow) {\n    box-shadow: 1px 1px 6px rgba(0, 0, 0, .35),\n    1px 1px 4px rgba(0, 0, 0, .2);\n  }\n\n  .ngw-window-topbar {\n    background: #373737;\n    color: #fff;\n  }\n\n  ngw-icon:hover {\n    background-color: rgba(255, 255, 255, .15);\n  }\n\n  .ngw-window-content {\n    color: #000;\n    padding: 0;\n  }\n}\n\nngw-windows-container .ngw-window-placement-prediction.show {\n  background-color: rgba(150, 200, 255, .5);\n  border: solid 2px rgba(150, 200, 255, .95);\n  backdrop-filter: blur(1px);\n}\n\nngw-icon svg path {\n  fill: #fff;\n  stroke: #fff;\n}\n```\n\n# Testing\n\nRunning tests: `npm run test-ngx-windows`.\n\n\u003ctable\u003e\n  \u003ccaption\u003e\n    Test coverage\n  \u003c/caption\u003e\n  \u003ctr\u003e\n    \u003cth\u003eClass\u003c/th\u003e\n    \u003cth\u003eHas tests\u003c/th\u003e\n    \u003cth\u003eComments\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowsManagerService\u003c/td\u003e\n    \u003ctd\u003e\n      ☑️\n    \u003c/td\u003e\n    \u003ctd\u003e\n      Missing tests for \u003ccode\u003eonPlacementPrediction\u003c/code\u003e and \u003ccode\u003eregisterWindow\u003c/code\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowComponent\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowStateService\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowPlacementService\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowControllerService\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNgwWindowConfigurationService\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eIconComponent\u003c/td\u003e\n    \u003ctd\u003e\n      ✅\n    \u003c/td\u003e\n    \u003ctd\u003eFull\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateuszbilicz%2Fngx-windows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmateuszbilicz%2Fngx-windows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateuszbilicz%2Fngx-windows/lists"}