This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Dec 25, 2022. It is now read-only.

Repository files navigation

react-sled Logo

react-sled is a carousel made with react-spring.

NPM

  • Super-smooth spring animations (thanks to react-spring)
  • Lightweight and performant architecture
  • Touch- and Mousedrag (thanks to react-with-gesture)
  • Easy to style
  • Ready for server-side-rendering
  • All props are dynamically changeable
  • (Should be) Compatible with older Browsers from Internet Explorer 11 (Needs testing!)

🛷 Have a look at the example!

New Major release 2.0

Breaking Changes:

  • Removed styled-components
  • Removed custom ow-unit
  • Use react-spring Version 9 and react-with-gesture Version 7

New Features:

  • Full Type-Script support
  • Vertical Sliding
  • Set fixed proportion
  • Show multiple elements at once (showElements)
  • Move by multiple elements (slideBy)

Install

Install all dependencies via Yarn or NPM.

yarn add react-sled react-spring@next react-use-gesture react react-dom

Usage

importReactfrom"react";import{Sled,Views,Progress,Control}from"react-sled";import"react-sled/dist/main.css";constimages=["my-image-1.jpg","my-image-2.jpg"];constApp=()=>{return(<Sled><Views>{images.map((image,index)=>(<imgkey={image}src={image}alt={`My Image #${index}`}/>))}</Views><Progress/><divclassName="controls arrows"><Controlselect="prev"/><Controlselect="next"/></div><divclassName="controls dots">{images.map((image,index)=>(<Controlkey={image}select={index}/>))}</div></Sled>);};exportdefaultApp;

Sled

Sled is the wrapper-component. It takes no props.

Views

Render all your views into this component. It takes these optional props:

NameTypeDefaultDescription
widthString'100%'Sets the viewpager’s width. Allowed units: all CSS-units
heightStringnullSets the viewpager’s height.
proportionString2:1Provide either a width or height and set the other dimension proportional to it. If you provide a height and a width proportion is disabled.
showElementsNumber1Determines how many Slides/Views fit in the Sled’s viewport.
slideByNumber1Determines how many Slides/Views the Sled’s slides with one movement .
selectNumberundefinedSelect certain view.
styleObjectnullAdd inline styles to the view-wrapper. 
keyboardBooleantrueSet Keyboard controls. 
draggingBooleantrueSet Mouse- and Touch-Dragging. 
dragDistanceNumber or String40Distance the user has to drag the slider to trigger action. A number is calculated in Pixel. A string is converted to a number unless it has the unit %, which means "percent of Sled’s width". 
autoPlayNumberundefinedActivates automatic Sliding-Interval in Milliseconds. 
configNumber{ mass: 1, tension: 210, friction: 20, clamp: true }react-spring animation-settings. 
pauseBooleanfalseautoPlay (if activated) gets paused. 
pauseOnMouseOverBooleantrueautoPlay (if activated) gets paused, as long as the user hovers over the sled. 
stopOnInteractionBooleanfalseautoPlay (if activated) gets stopped, after the user interacted with the sled. 
rewindBooleanfalseRewind sled, when you want to go beyond the first or last view. 
onSledEndfunctionnullCallback, that gets triggered after last view.
onAnimationStartfunctionnullCallback, that gets triggered when a sliding-animation starts.
onAnimationEndfunctionnullCallback, that gets triggered when a sliding-animation ends.

Controls

There is only one control-component for Arrows and Selecting-Dots. The prop select decides what the Control-element is: A string called next or prev will activate Arrow-functionality, a number Select-functionality.

You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. They are contained in the file dist/index.css. If you give it a custom className-prop, the default-class will be overridden and the Progress will be completely unstyled. Then you can copy the default-styles from here as a starting-point.

Control Props Overview:

NameTypeDefaultDescription
selectString or Number'next'Defines, if the Control has arrow- or dot-functionality. A number is the index of the target-view. A string can be 'prev' or 'next'
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.

Arrow: Default-Design:

<Controlselect="next"/>

Your Custom-Design:

<Controlselect="next"className="custom"style={{background: 'red'}}>
My custom arrow!
</Control>

Selection-Dot:

<Controlselect={1}/>

Progress

react-sled has an Instagram-like progress-bar. You can easily style it via CSS. The default-styles are scoped to the class-name sled-progress-default. If you give it a custom className-prop, the Progress will be completely unstyled. You can copy the default-styles from here as a starting-point.

Progress Props Overview:

NameTypeDefaultDescription
classNameStringDefault depends on select
styleString''If you provide a style and no preset, the default preset gets completely replaced. If you provide a style and a preset, the preset gets extended.
<ProgressclassName="my-progress"style={{background: 'red'}}/>

useSledStore

A hook, that exposes the plugin’s state-management. useSledStore is only useable inside the Sled-Component. It returns an Array with 2 elements:

  1. state of type object
  2. dispatch of type function

To-Do

  • Control animation by frame on drag
  • Infinity-Mode
  • Nice documentation with live examples (using Docz)
  • automated testing

Contributing

Every contribution is very much appreciated.

If you like react-sled, don't hesitate to star it on GitHub.

License

MIT © AndreasFaust

Thanks

This library is derived from the great work and especially this code-sandbox-example provided by Paul Henschel and the react-spring-team.

About

react-sled is a carousel made with react-spring.

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages