mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
72 lines
1.5 KiB
TypeScript
72 lines
1.5 KiB
TypeScript
|
import {Disposable} from 'app/client/lib/dispose';
|
||
|
import {dom, styled} from 'grainjs';
|
||
|
|
||
|
const modalBacker = styled('div', `
|
||
|
position: fixed;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: center;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
z-index: 100;
|
||
|
background-color: rgba(0, 0, 0, 0.5);
|
||
|
`);
|
||
|
|
||
|
const modal = styled('div', `
|
||
|
background-color: white;
|
||
|
color: black;
|
||
|
margin: 0 auto;
|
||
|
border-radius: 4px;
|
||
|
box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.2);
|
||
|
border: 1px solid #aaa;
|
||
|
padding: 10px;
|
||
|
`);
|
||
|
|
||
|
export const modalHeader = styled('div', `
|
||
|
font-size: 12pt;
|
||
|
color: #859394;
|
||
|
padding: 5px;
|
||
|
`);
|
||
|
|
||
|
export const modalButtonRow = styled('div', `
|
||
|
width: 70%;
|
||
|
margin: 0 auto;
|
||
|
text-align: center;
|
||
|
|
||
|
& > button {
|
||
|
width: 80px;
|
||
|
}
|
||
|
`);
|
||
|
|
||
|
/**
|
||
|
* A simple modal. Shows up in the middle of the screen with a tinted backdrop.
|
||
|
* Created with the given body content and width.
|
||
|
*
|
||
|
* Closed and disposed via clicking anywhere outside the modal. May also be closed by
|
||
|
* calling the `dispose()` function.
|
||
|
*/
|
||
|
export class Modal1 extends Disposable {
|
||
|
private _dom: Element;
|
||
|
|
||
|
public create(
|
||
|
body: Element,
|
||
|
width: number = 300
|
||
|
) {
|
||
|
this._dom = modalBacker(
|
||
|
modal({style: `width: ${width}px;`, tabindex: "-1"},
|
||
|
dom.cls('clipboard_focus'),
|
||
|
body,
|
||
|
dom.on('click', (e) => e.stopPropagation())
|
||
|
),
|
||
|
dom.on('click', () => this.dispose())
|
||
|
);
|
||
|
document.body.appendChild(this._dom);
|
||
|
|
||
|
this.autoDisposeCallback(() => {
|
||
|
document.body.removeChild(this._dom);
|
||
|
});
|
||
|
}
|
||
|
}
|