Package Exports
- cupertino-pane
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (cupertino-pane) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Cupertino Pane
Cupertino Pane is great modern slide-over pane with touch technologies.
- Small. 5kb (minified and gzipped). No dependencies.
- Accelerated. Hardware accelerated transitions and amazing native behavior.
- Progressive. Useful for mobile/web/hybrid applications.
Right like in Apple Maps, Apple Stocks, Apple Music and other modern apps.
- Breaking changes
- Demonstration
- Supporting platforms
- Getting Started
- Settings
- Public Methods
- Attributes
- Future Goals
- Contributing
- License
Demonstration
Supporting platforms
We officially support the last two versions of every major browser. Specifically, we test on the following browsers
| Browser | Operating system |
|---|---|
| Chrome | Android, Windows, macOS, and Linux |
| Firefox | Windows, macOS, and Linux |
| Safari | iOS |
| WkWebView | iOS |
| Android WebView | Android |
Getting Started
Install via NPM
npm install cupertino-paneUse from CDN
If you don't want to include Cupertino Pane files in your project, you may use it from CDN. The following files are available:
<script src="https://unpkg.com/cupertino-pane/dist/cupertino-pane.js"></script>
<script src="https://unpkg.com/cupertino-pane/dist/cupertino-pane.min.js"></script>Include Files To App/Website
<!DOCTYPE html>
<html lang="en">
<body>
...
<script src="path/to/cupertino-pane.min.js"></script>
</body>
</html>Add HTML Layout
<div class="cupertino-pane">
<h1>Header</h1>
<div class="content">Content</div>
</div>Additional CSS Styles
.cupertino-pane {
margin: 20px;
}Initialize Cupertino Pane
<body>
...
<script>
window.onload = function () {
var myPane = new CupertinoPane(
'.cupertino-pane', // Pane container selector
{
parentElement: 'body', // Parent container
breaks: {
middle: { enabled: true, offset: 300 },
bottom: { enabled: true, offset: 80 },
},
onDrag: () => console.log('Drag event')
}
);
myPane.present({animate: true});
};
</script>
</body>jQuery example
$(document).ready(function () {
//initialize pane when document ready
var myPane = new CupertinoPane('.cupertino-pane', { /* ... */ });
myPane.present();
});As an ES module
Cupertino Pane package comes with ES module version which can be used where supported or with bundlers like Webpack or Rollup:
import { CupertinoPane } from 'cupertino-pane';
var myPane = new CupertinoPane('.cupertino-pane', { /* ... */ });
myPane.present();Settings
Common configuration
| Property | Type | Default | Description |
|---|---|---|---|
| parentElement | string |
Parent element selector | Element selector where pane will rendered |
| followerElement | string |
Follower element selector | Element with selector will following pane transitions |
| initialBreak | 'top' | 'middle' | 'bottom' |
'middle' | Initial pane position |
| darkMode | boolean |
false | Initial pane styles |
| backdrop | boolean |
false | Dimmed overlay will rendered with pane if true |
| backdropOpacity | number |
0.4 | Dimmed overlay opacity value |
| animationType | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'cubic-bezier' |
'ease' | Transition property animation type |
| animationDuration | number |
300 | Transition property duration |
| bottomClose | boolean |
false | Close pane with drag to bottom breakpoint |
| freeMode | boolean |
false | On true will remove automatical magnetic effects to near breakpoint |
| buttonClose | boolean |
true | Determinate whetever close button will render or not |
| topperOverflow | boolean |
true | Ability to scroll content inside pane if topper point reached |
| topperOverflowOffset | number |
0 | Offset from screen bottom to the end of overflow content |
| showDraggable | boolean |
true | Render rectangular shape on the top of pane |
| clickBottomOpen | boolean |
true | If bottom position reached, simple click to pane will open pane to the next upper point |
| dragByCursor | boolean |
false | Drag pane only with draggabale top cursor |
| simulateTouch | boolean |
true | Simulate touch events for Desktop |
| passiveListeners | boolean |
true | (Indicates that the function specified by listener will never call preventDefault()) |
Breakpoints
Package now supports 3 base breakpoints
const pane = new CupertinoPane('.cupertino-pane', {
breaks: {
top: { // Topper point that pane can reach
enabled: true, // Enable or disable breakpoint
offset: 0 // Additional bottom margin if needs
},
middle: { ... },
bottom: { ... }
}
});Default top offset: window.screen.height - (135 * 0.35)
Bottom and middle offsets normalized accross devices by default
Callbacks
The function that executes when the event fires.
| Name | Type | Description |
|---|---|---|
| onDidDismiss | void: () => {} |
Call after pane will dissapeared |
| onWillDismiss | void: () => {} |
Call before pane will dissapeared |
| onDidPresent | void: () => {} |
Call after pane will present |
| onWillPresent | void: () => {} |
Call before panel will present |
| onDragStart | void: () => {} |
Call when detect user drag event on pane |
| onDrag | void: () => {} |
Call executes on each new position of pane |
| onDragEng | void: () => {} |
Executes when drag event complete |
| onBackdropTap | void: () => {} |
Call when user tap backdrop overlay |
| onTransitionEnd | void: () => {} |
Executes when transition and animation complete |
Public Methods
present({animate: boolean = false})
Will render pane DOM and show pane with setted params.
myPane.present();moveToBreak('top' | 'middle' | 'bottom')
Will change pane position with animation to selected breakpoint.
myPane.moveToBreak('top');hide()
Dissappear pane from screen, still keep pane in DOM.
myPane.hide();destroy({animate: boolean = false})
Remove pane from DOM and clear styles
myPane.destroy();isHidden()
Determinate if pane position was moved out of screen, but pane still exist in DOM. true - in DOM but not visible, false - in DOM and visible, null - not rendered
if (myPane.isHidden()) {
myPane.moveToBreak('top');
}currentBreak()
Method return current break position in text format ('top' | 'middle' | 'bottom)
if (myPane.currentBreak() === 'top') {
myPane.moveToBreak('bottom');
}disableDrag()
Method disable any drag actions for pane
myPane.disableDrag();enableDrag()
Method enable any drag actions for pane
myPane.enableDrag();Attributes
hide-on-bottom
Set for element to automaticaly hide on reach bottom breakpoint.
<div class="cupertino-pane">
<h1>Header</h1>
<div class="content" hide-on-bottom>Content</div>
</div>overflow-y
Set for element with overflow ability. By default using for full pane area, but in some cases good useful with header.
<div class="cupertino-pane">
<h1>Header</h1>
<div class="content" overflow-y>Content</div>
</div>Future Goals
- Click item/drag pane precision on device
- Precision delta counts experiments + option
- 3D effect (ion-modal example)
- Topper than top (10px-20px)
- Drawer control effect
- 3D button toggle effect
- Docs engine
- Live example hosted in pages
- React Native version with one core
Contributing
We welcome contributions of all kinds from anyone.
1. Where do I go from here?
If you've noticed a bug or have a question, make an issue, we'll try to answer it as fast as possible.
2. Fork & Create a branch
If this is something you think you can fix, then fork Cupertino Pane and create a branch.
# Create new branch
git checkout -b my_issue
# Then we install the dependencies
npm install3. Changes & Build
# Make bundles
gulp buildThis will output the files into the dist directory.
4. Push changes
Push your changes to a topic branch in your fork of the repository. Submit a pull request to the repository. It can take several days before we can review the code you've submitted.
License
Licensed under the MIT License. View license.