• Stars
    star
    389
  • Rank 108,204 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 8 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

React wrapper around Tether

React Tether

CI Status Sauce Test Status

Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs.


React wrapper around Tether, a positioning engine to make overlays, tooltips and dropdowns better

React Tether

Install

npm install react-tether

As of version 2, a minimum of React 16.3 is required. If you need support for React < 16.3 please use the 1.x branch.

Example Usage

import TetherComponent from "react-tether";

class SimpleDemo extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			isOpen: false,
		};
	}

	render() {
		const { isOpen } = this.state;

		return (
			<TetherComponent
				attachment="top center"
				constraints={[
					{
						to: "scrollParent",
						attachment: "together",
					},
				]}
				/* renderTarget: This is what the item will be tethered to, make sure to attach the ref */
				renderTarget={(ref) => (
					<button
						ref={ref}
						onClick={() => {
							this.setState({ isOpen: !isOpen });
						}}
					>
						Toggle Tethered Content
					</button>
				)}
				/* renderElement: If present, this item will be tethered to the the component returned by renderTarget */
				renderElement={(ref) =>
					isOpen && (
						<div ref={ref}>
							<h2>Tethered Content</h2>
							<p>A paragraph to accompany the title.</p>
						</div>
					)
				}
			/>
		);
	}
}

Props

renderTarget: PropTypes.func

This is a render prop, the component returned from this function will be Tether's target. One argument, ref, is passed into this function. This is a ref that must be attached to the highest possible DOM node in the tree. If this is not done the element will not render.

renderElement: PropTypes.func

This is a render prop, the component returned from this function will be Tether's element, that will be moved. If no component is returned, the target will still render, but with no element tethered. One argument, ref, is passed into this function. This is a ref that must be attached to the highest possible DOM node in the tree. If this is not done the element will not render.

renderElementTag: PropTypes.string

The tag that is used to render the Tether element, defaults to div.

renderElementTo: PropTypes.string

Where in the DOM the Tether element is appended. Passes in any valid selector to document.querySelector. Defaults to document.body.

Tether requires this element to be position: static;, otherwise it will default to document.body. See this example for more information.

Tether Options:

Any valid Tether options.

children:

Previous versions of react-tether used children to render the target and component, using children will now throw an error. Please use renderTarget and renderElement instead

Imperative API

The following methods are exposed on the component instance:

  • getTetherInstance(): Tether
  • disable(): void
  • enable(): void
  • on(event: string, handler: function, ctx: any): void
  • once(event: string, handler: function, ctx: any): void
  • off(event: string, handler: function): void
  • position(): void

Example usage:

<TetherComponent
	ref={(tether) => (this.tether = tether)}
	renderTarget={(ref) => <Target ref={ref} />}
	renderElement={(ref) => (
		<Element ref={ref} onResize={() => this.tether && this.tether.position()} />
	)}
/>

Run Example

clone repo

git clone [email protected]:danreeves/react-tether.git

move into folder

cd ~/react-tether

install dependencies

npm install

run dev mode

npm run demo

open your browser and visit: http://localhost:1234/

More Repositories

1

cargo-cmd

Like npm scripts, but for cargo
Rust
64
star
2

sublime-prettier

✍️ A Sublime Text 3 plugin for Prettier
Python
63
star
3

dt-exchange

TypeScript
39
star
4

path-clean

A Rust implementation of `cleanname` or `path.Clean`
Rust
38
star
5

discord-speech-to-text-bot

🎀 A Discord bot that uses the Bing Speech to Text API to transcribe what's said
JavaScript
21
star
6

darktide-mods

Lua
10
star
7

watch

Watch your files and run commands on changes from a crystal script
Crystal
10
star
8

kitsu-what-to-watch

🦊 A more detailed, sortable, Want to watch list
JavaScript
7
star
9

darkti.de

TypeScript
6
star
10

lumberjack

A Wordpress theme built on timber
PHP
6
star
11

picotags

[Deprecated] Adds page tagging functionality to Pico.
PHP
4
star
12

discord-bot-example

πŸ€– A simple Discord bot that replies to messages
JavaScript
3
star
13

hero-generator

Creates a hero for your creative digital agency site.
JavaScript
3
star
14

vermintide-2-mods

Mods for Vermintide 2
Lua
3
star
15

darktide-images

2
star
16

danreev.es

🏑 welcome to my home page
HTML
2
star
17

surgeapp

JavaScript
2
star
18

sbaitso

Dr. Sbaitso as a Twitter bot
JavaScript
2
star
19

godot-wild-jam-34

GDScript
1
star
20

godot-wild-jam-33

GDScript
1
star
21

godot-test

An experiment with the Godot game engine
GDScript
1
star
22

bardinbot

JavaScript
1
star
23

style

my css gets its own website
CSS
1
star
24

MorePlayers2

Lua
1
star
25

discord-msn-bot

😎 A simple Discord bot that plays sound in a voice channel
JavaScript
1
star
26

nasa

πŸš€ Create your own NASA logo
CSS
1
star
27

advent-of-code

Advent of Code solutions - http://adventofcode.com
TypeScript
1
star
28

lohners-emporium

JavaScript
1
star
29

google-inbox-fluid-userscript

πŸ’Œ Gives you a multiuser (across tabs) unread count on the dock
TypeScript
1
star
30

verminbuilds

JavaScript
1
star
31

lilypad-lagoon

GDScript
1
star
32

cerver

playing around with c
C
1
star
33

when-are-we-all-free

JavaScript
1
star
34

vt2leaderboards

Vermintide 2 Weave Leaderboards
JavaScript
1
star
35

ping-cli

Crystal
1
star
36

rust-tests

Learning Rust by testing language features
Rust
1
star