{"id":16907888,"url":"https://github.com/timc1/postel","last_synced_at":"2026-03-18T00:03:57.583Z","repository":{"id":39095406,"uuid":"270879257","full_name":"timc1/postel","owner":"timc1","description":"tiny react library for building tooltips, flyovers, menus and more","archived":false,"fork":false,"pushed_at":"2023-07-10T01:19:49.000Z","size":1239,"stargazers_count":82,"open_issues_count":12,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-23T16:02:35.108Z","etag":null,"topics":["flyover","javascript","menu","react","tooltip"],"latest_commit_sha":null,"homepage":"https://postel.vercel.app/","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/timc1.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":"2020-06-09T01:59:26.000Z","updated_at":"2025-03-06T07:47:29.000Z","dependencies_parsed_at":"2024-06-18T22:43:36.942Z","dependency_job_id":"5320eb5f-4e60-4a86-84c7-1c18c570b039","html_url":"https://github.com/timc1/postel","commit_stats":{"total_commits":42,"total_committers":4,"mean_commits":10.5,"dds":"0.40476190476190477","last_synced_commit":"487c063ed845ac11cbba94b29830cb1783c268aa"},"previous_names":["timc1/react-tooltip"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/timc1/postel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timc1%2Fpostel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timc1%2Fpostel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timc1%2Fpostel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timc1%2Fpostel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timc1","download_url":"https://codeload.github.com/timc1/postel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timc1%2Fpostel/sbom","scorecard":{"id":885653,"data":{"date":"2025-08-11","repo":{"name":"github.com/timc1/postel","commit":"487c063ed845ac11cbba94b29830cb1783c268aa"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Code-Review","score":2,"reason":"Found 1/4 approved changesets -- score normalized to 2","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":"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":-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":"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":"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":"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":"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":"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: 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'","Warn: branch protection not enabled for branch 'release-0.1.2'","Warn: branch protection not enabled for branch 'release-0.1.0'"],"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 29 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":"71 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","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-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-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-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-ww39-953v-wcq6","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-9c47-m6qq-7p4h","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-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-92xj-mqp7-vmcj","Warn: Project is vulnerable to: GHSA-wxgw-qj99-44c2","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-76c9-3jph-rj3q","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-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-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","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-j8xg-fqg3-53r7","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-24T09:56:19.397Z","repository_id":39095406,"created_at":"2025-08-24T09:56:19.397Z","updated_at":"2025-08-24T09:56:19.397Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30636697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T23:56:54.546Z","status":"ssl_error","status_checked_at":"2026-03-17T23:56:28.952Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["flyover","javascript","menu","react","tooltip"],"created_at":"2024-10-13T18:49:14.238Z","updated_at":"2026-03-18T00:03:57.558Z","avatar_url":"https://github.com/timc1.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Postel 🌑\n\n[![npm version](https://badge.fury.io/js/postel.svg)](https://badge.fury.io/js/postel) \u003ca href=\"#badge\"\u003e\n\u003cimg alt=\"code style: prettier\" src=\"https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square\"\u003e\u003c/a\u003e \u003cimg src=\"https://camo.githubusercontent.com/21132e0838961fbecb75077042aa9b15bc0bf6f9/68747470733a2f2f62616467656e2e6e65742f62616467652f4275696c74253230576974682f547970655363726970742f626c7565\" alt=\"Built with Typescript badge\" /\u003e\n\nPostel is a single component that you can easily extend into customized tooltips, dropdowns, flyovers –\nany type of UI which would make sense to render outside of your regular React root node, floating\nabove all other content.\n\nPostel is built on the idea of opening a generic set of props that allow wide customizability. With\nthat, we attempt to keep the API as simple as possible.\n\n- [Usage](#usage)\n- [Props](#props)\n- [Contributing](#contributing)\n  - [Installation](#installation)\n\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eTooltip\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"600\" alt=\"Screen Shot 2020-07-04 at 6 01 50 PM\" src=\"https://user-images.githubusercontent.com/12195101/86521625-3de77a80-be21-11ea-85c4-cad734e3410e.png\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eCustom content\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"600\" alt=\"Screen Shot 2020-07-04 at 6 01 50 PM\" src=\"https://user-images.githubusercontent.com/12195101/86521626-3f18a780-be21-11ea-91d4-5bb66441b57a.png\"\u003e\n\u003c/p\u003e\n\n### Usage\n\nThe simplest usage of Postel is building something like a tooltip – just wrap it around the component that you want to trigger:\n\n```\n\u003cPostel\n  title=\"Toggle menu\"\n  content={\n    \u003cdiv className=\"tooltip\"\u003e\n      Tooltip content\n    \u003c/div\u003e\n  }\n  caret={\n    \u003cdiv className=\"caret\" /\u003e\n  }\n}}\u003e\n  \u003cbutton className=\"button\"\u003eTrigger\u003c/button\u003e\n\u003c/Postel\u003e\n```\n\n## Props\n\n#### children: React.ReactNode\n\nA valid React child that Postel will attach listeners to.\n\n#### title: string\n\nA string to describe the purpose of what will be shown or hidden.\n\n#### placement?: \"auto\" | \"top\" | \"top-start\" | \"top-end\" | \"left\" | \"right\" | \"bottom\" | \"bottom-start\" | \"bottom-end\"\n\nThe position that you want Postel to render your `content` relative to the `children`.\n\n#### preferredAutoPlacement?: \"top\" | \"top-start\" | \"top-end\" | \"left\" | \"right\" | \"bottom\" | \"bottom-start\" | \"bottom-end\"\n\nIf your placement is set to `auto`, this is the preferred position that you would like `auto` to\ndefault to.\n\n#### trigger?: \"hover\" | \"click\" | \"mousedown\"\n\nThe type of action you want to apply to the `children` that will show your `content`.\n\n#### triggerDelay?: number\n\nThe time in milliseconds that you want to delay showing the `content` after triggering to show.\n\n#### hideTrigger?: \"click\" | \"mouseleave\"\n\nThe type of action you want to signal that the `content` should hide.\n\n#### hideDelay?: number\n\nThe time in milliseconds that you want to delay hiding the `content` after triggering to hide.\n\n#### transitionOutMs?: number\n\nImportant for adding leave animations – the amount of time in milliseconds you want your `content` to animate out before unmounting.\n\n#### showTransparentUnderlay?: boolean\n\nAdd this if you want a hidden transparent underlay that will cover the entire screen to prevent clicks on UI outside of your `content`.\n\n#### verticalOffset?: number\n\nAdd this if you want to vertically offset the content by n `px`s.\n\n#### horizontalOffset?: number\n\nAdd this if you want to horizontally offset the content by n `px`s.\n\n### Contributing\n\nContributions are welcome! For requests or bugs, please create an issue [here](https://github.com/timc1/postel/issues).\n\n#### Installation\n\nPostel uses `yarn` to manage dependencies. To install, simply run:\n\n`git clone git@github.com:timc1/postel.git`\n\n`cd postel`\n\n`yarn install`\n\n`yarn start`\n\nNavigate to `localhost:8080` and you should see a hot reloading interface to run the code against.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimc1%2Fpostel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimc1%2Fpostel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimc1%2Fpostel/lists"}