Port lightbox icon buttons
This commit is contained in:
parent
3acdeb90c3
commit
2474b42198
3 changed files with 84 additions and 12 deletions
|
@ -7,3 +7,38 @@
|
|||
height: 100%;
|
||||
z-index: $z-index-modal;
|
||||
}
|
||||
|
||||
.iconButton {
|
||||
background: transparent;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
border-radius: 50%;
|
||||
padding: 3px;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: $grey;
|
||||
}
|
||||
|
||||
&.save {
|
||||
&:before {
|
||||
@include color-svg('../images/save.svg', white);
|
||||
}
|
||||
}
|
||||
|
||||
&.close {
|
||||
&:before {
|
||||
@include color-svg('../images/x.svg', white);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
5
ts/components/Lightbox.md
Normal file
5
ts/components/Lightbox.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
```js
|
||||
<div style={{position: 'relative', width: '100%', height: 500}}>
|
||||
<Lightbox imageURL="https://placekitten.com/800/600"/>
|
||||
</div>
|
||||
```
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
import React from 'react';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
interface Props {
|
||||
imageURL?: string;
|
||||
|
@ -12,28 +13,59 @@ interface Props {
|
|||
|
||||
const styles = {
|
||||
container: {
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.8)',
|
||||
padding: 20,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
},
|
||||
display: 'flex',
|
||||
flexDirection: 'row',
|
||||
position: 'absolute',
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.9)',
|
||||
padding: 40,
|
||||
} as React.CSSProperties,
|
||||
objectContainer: {
|
||||
display: 'inline-flex',
|
||||
justifyContent: 'center',
|
||||
} as React.CSSProperties,
|
||||
image: {
|
||||
flexGrow: 1,
|
||||
flexShrink: 0,
|
||||
maxWidth: '100%',
|
||||
maxHeight: '100%',
|
||||
objectFit: 'cover',
|
||||
}
|
||||
objectFit: 'contain',
|
||||
} as React.CSSProperties,
|
||||
controls: {
|
||||
flexShrink: 0,
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
marginLeft: 10,
|
||||
} as React.CSSProperties
|
||||
};
|
||||
|
||||
interface IconButtonProps {
|
||||
type: 'save' | 'close';
|
||||
onClick?: () => void;
|
||||
}
|
||||
const IconButton = ({ onClick, type }: IconButtonProps) => (
|
||||
<a
|
||||
href="#"
|
||||
onClick={onClick}
|
||||
className={classNames('iconButton', type)}
|
||||
/>
|
||||
);
|
||||
|
||||
export class Lightbox extends React.Component<Props, {}> {
|
||||
public render() {
|
||||
const { imageURL } = this.props;
|
||||
return (
|
||||
<div style={styles.container}>
|
||||
<img
|
||||
style={styles.image}
|
||||
src={imageURL}
|
||||
/>
|
||||
<button onClick={this.props.close}>Close</button>
|
||||
<div style={styles.objectContainer}>
|
||||
{<img style={styles.image} src={imageURL} />}
|
||||
</div>
|
||||
<div style={styles.controls}>
|
||||
<IconButton type="close" onClick={this.props.close} />
|
||||
<IconButton type="save" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue