@operato/layout 0.3.20 → 0.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/dist/src/actions/layout.d.ts +89 -0
- package/dist/src/actions/layout.js +159 -0
- package/dist/src/actions/layout.js.map +1 -0
- package/dist/src/actions/snackbar.d.ts +22 -0
- package/dist/src/actions/snackbar.js +24 -0
- package/dist/src/actions/snackbar.js.map +1 -0
- package/dist/src/components/ox-floating-overlay.d.ts +2 -0
- package/dist/src/components/ox-floating-overlay.js +333 -0
- package/dist/src/components/ox-floating-overlay.js.map +1 -0
- package/dist/src/components/ox-resize-splitter.d.ts +13 -0
- package/dist/src/components/ox-resize-splitter.js +108 -0
- package/dist/src/components/ox-resize-splitter.js.map +1 -0
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.js +8 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/initializer.d.ts +2 -0
- package/dist/src/initializer.js +91 -0
- package/dist/src/initializer.js.map +1 -0
- package/dist/src/layouts/ox-aside-bar.d.ts +2 -0
- package/dist/src/layouts/ox-aside-bar.js +106 -0
- package/dist/src/layouts/ox-aside-bar.js.map +1 -0
- package/dist/src/layouts/ox-footer-bar.d.ts +2 -0
- package/dist/src/layouts/ox-footer-bar.js +107 -0
- package/dist/src/layouts/ox-footer-bar.js.map +1 -0
- package/dist/src/layouts/ox-header-bar.d.ts +2 -0
- package/dist/src/layouts/ox-header-bar.js +104 -0
- package/dist/src/layouts/ox-header-bar.js.map +1 -0
- package/dist/src/layouts/ox-nav-bar.d.ts +2 -0
- package/dist/src/layouts/ox-nav-bar.js +108 -0
- package/dist/src/layouts/ox-nav-bar.js.map +1 -0
- package/dist/src/layouts/ox-snack-bar.d.ts +2 -0
- package/dist/src/layouts/ox-snack-bar.js +119 -0
- package/dist/src/layouts/ox-snack-bar.js.map +1 -0
- package/dist/src/reducers/layout.d.ts +13 -0
- package/dist/src/reducers/layout.js +62 -0
- package/dist/src/reducers/layout.js.map +1 -0
- package/dist/src/reducers/snackbar.d.ts +18 -0
- package/dist/src/reducers/snackbar.js +30 -0
- package/dist/src/reducers/snackbar.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -7
- package/src/actions/layout.ts +233 -0
- package/src/actions/snackbar.ts +60 -0
- package/src/components/ox-floating-overlay.ts +319 -0
- package/src/components/ox-resize-splitter.ts +126 -0
- package/src/index.ts +10 -1
- package/src/initializer.ts +113 -0
- package/src/layouts/ox-aside-bar.ts +106 -0
- package/src/layouts/ox-footer-bar.ts +106 -0
- package/src/layouts/ox-header-bar.ts +103 -0
- package/src/layouts/ox-nav-bar.ts +108 -0
- package/src/layouts/ox-snack-bar.ts +108 -0
- package/src/reducers/layout.ts +72 -0
- package/src/reducers/snackbar.ts +32 -0
- package/dist/src/ox-layout.d.ts +0 -45
- package/dist/src/ox-layout.js +0 -148
- package/dist/src/ox-layout.js.map +0 -1
- package/dist/src/ox-toolbar-style.d.ts +0 -4
- package/dist/src/ox-toolbar-style.js +0 -207
- package/dist/src/ox-toolbar-style.js.map +0 -1
- package/dist/src/ox-toolbar.d.ts +0 -4
- package/dist/src/ox-toolbar.js +0 -123
- package/dist/src/ox-toolbar.js.map +0 -1
- package/dist/stories/index.stories.d.ts +0 -33
- package/dist/stories/index.stories.js +0 -33
- package/dist/stories/index.stories.js.map +0 -1
- package/dist/test/ox-layout.test.d.ts +0 -1
- package/dist/test/ox-layout.test.js +0 -24
- package/dist/test/ox-layout.test.js.map +0 -1
- package/src/ox-layout.ts +0 -191
- package/src/ox-toolbar-style.ts +0 -208
- package/src/ox-toolbar.ts +0 -135
- package/stories/index.stories.ts +0 -52
- package/test/ox-layout.test.ts +0 -35
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../components/ox-floating-overlay.js';
|
|
3
|
+
import '../components/ox-resize-splitter.js';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js';
|
|
7
|
+
import { ScrollbarStyles } from '@operato/styles';
|
|
8
|
+
import { VIEWPART_LEVEL } from '../actions/layout.js';
|
|
9
|
+
import store from '../initializer.js';
|
|
10
|
+
let AsideBar = class AsideBar extends connect(store)(LitElement) {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.fullbleed = false;
|
|
14
|
+
this.viewparts = {};
|
|
15
|
+
this._startWidth = 0;
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
var viewparts = this.viewparts;
|
|
19
|
+
var asidebars = Object.keys(viewparts)
|
|
20
|
+
.map(name => {
|
|
21
|
+
return {
|
|
22
|
+
name,
|
|
23
|
+
...viewparts[name]
|
|
24
|
+
};
|
|
25
|
+
})
|
|
26
|
+
.filter(viewpart => viewpart.position == 'asidebar' && (!this.fullbleed || viewpart.hovering));
|
|
27
|
+
asidebars = [
|
|
28
|
+
...asidebars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),
|
|
29
|
+
...asidebars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)
|
|
30
|
+
];
|
|
31
|
+
return html `
|
|
32
|
+
${asidebars.map(asidebar => !asidebar.show
|
|
33
|
+
? html ``
|
|
34
|
+
: asidebar.hovering
|
|
35
|
+
? html `
|
|
36
|
+
<ox-floating-overlay
|
|
37
|
+
.backdrop=${asidebar.backdrop}
|
|
38
|
+
direction="left"
|
|
39
|
+
.hovering=${asidebar.hovering}
|
|
40
|
+
.name=${asidebar.name}
|
|
41
|
+
.size=${asidebar.size}
|
|
42
|
+
.title=${asidebar.title}
|
|
43
|
+
.help=${asidebar.help}
|
|
44
|
+
.closable=${asidebar.closable}
|
|
45
|
+
.templateProperties=${asidebar.templateProperties}
|
|
46
|
+
>${asidebar.template}</ox-floating-overlay
|
|
47
|
+
>
|
|
48
|
+
`
|
|
49
|
+
: html `
|
|
50
|
+
<div asidebar>${asidebar.template}</div>
|
|
51
|
+
${asidebar.resizable
|
|
52
|
+
? html `
|
|
53
|
+
<ox-resize-splitter
|
|
54
|
+
@splitter-dragstart=${(e) => this.resizeStart(e)}
|
|
55
|
+
@splitter-drag=${(e) => this.resizeDrag(e)}
|
|
56
|
+
vertical
|
|
57
|
+
></ox-resize-splitter>
|
|
58
|
+
`
|
|
59
|
+
: html ``}
|
|
60
|
+
`)}
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
resizeStart(e) {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
this._startWidth = (_b = (_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling) === null || _b === void 0 ? void 0 : _b.offsetWidth;
|
|
66
|
+
}
|
|
67
|
+
resizeDrag(e) {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
var delta = e.detail;
|
|
70
|
+
var x = (_b = (_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling) === null || _b === void 0 ? void 0 : _b.querySelectorAll('*');
|
|
71
|
+
Array.from(x).forEach(ele => {
|
|
72
|
+
;
|
|
73
|
+
ele.style.width = `${this._startWidth - delta.x}px`;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
stateChanged(state) {
|
|
77
|
+
this.viewparts = state.layout.viewparts || {};
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
AsideBar.styles = [
|
|
81
|
+
ScrollbarStyles,
|
|
82
|
+
css `
|
|
83
|
+
:host {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-flow: row-reverse nowrap;
|
|
86
|
+
align-items: stretch;
|
|
87
|
+
|
|
88
|
+
position: relative;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
*[asidebar] {
|
|
92
|
+
display: block;
|
|
93
|
+
overflow-y: auto;
|
|
94
|
+
}
|
|
95
|
+
`
|
|
96
|
+
];
|
|
97
|
+
__decorate([
|
|
98
|
+
property({ type: Boolean, attribute: 'fullbleed' })
|
|
99
|
+
], AsideBar.prototype, "fullbleed", void 0);
|
|
100
|
+
__decorate([
|
|
101
|
+
state()
|
|
102
|
+
], AsideBar.prototype, "viewparts", void 0);
|
|
103
|
+
AsideBar = __decorate([
|
|
104
|
+
customElement('ox-aside-bar')
|
|
105
|
+
], AsideBar);
|
|
106
|
+
//# sourceMappingURL=ox-aside-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-aside-bar.js","sourceRoot":"","sources":["../../../src/layouts/ox-aside-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import '../components/ox-floating-overlay.js'\nimport '../components/ox-resize-splitter.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { Viewpart, VIEWPART_LEVEL } from '../actions/layout.js'\nimport store from '../initializer.js'\n\n@customElement('ox-aside-bar')\nclass AsideBar extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-flow: row-reverse nowrap;\n align-items: stretch;\n\n position: relative;\n }\n\n *[asidebar] {\n display: block;\n overflow-y: auto;\n }\n `\n ]\n\n @property({ type: Boolean, attribute: 'fullbleed' }) fullbleed: boolean = false\n\n @state() viewparts: { [name: string]: Viewpart } = {}\n\n private _startWidth: number = 0\n\n render() {\n var viewparts = this.viewparts\n var asidebars = Object.keys(viewparts)\n .map(name => {\n return {\n name,\n ...viewparts[name]\n }\n })\n .filter(viewpart => viewpart.position == 'asidebar' && (!this.fullbleed || viewpart.hovering))\n\n asidebars = [\n ...asidebars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),\n ...asidebars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)\n ]\n\n return html`\n ${asidebars.map(asidebar =>\n !asidebar.show\n ? html``\n : asidebar.hovering\n ? html`\n <ox-floating-overlay\n .backdrop=${asidebar.backdrop}\n direction=\"left\"\n .hovering=${asidebar.hovering}\n .name=${asidebar.name}\n .size=${asidebar.size}\n .title=${asidebar.title}\n .help=${asidebar.help}\n .closable=${asidebar.closable}\n .templateProperties=${asidebar.templateProperties}\n >${asidebar.template}</ox-floating-overlay\n >\n `\n : html`\n <div asidebar>${asidebar.template}</div>\n ${asidebar.resizable\n ? html`\n <ox-resize-splitter\n @splitter-dragstart=${(e: CustomEvent) => this.resizeStart(e)}\n @splitter-drag=${(e: CustomEvent) => this.resizeDrag(e)}\n vertical\n ></ox-resize-splitter>\n `\n : html``}\n `\n )}\n `\n }\n\n resizeStart(e: CustomEvent) {\n this._startWidth = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement)?.offsetWidth\n }\n\n resizeDrag(e: CustomEvent) {\n var delta = e.detail\n\n var x = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement)?.querySelectorAll('*')\n Array.from(x).forEach(ele => {\n ;(ele as HTMLElement).style.width = `${this._startWidth - delta.x}px`\n })\n }\n\n stateChanged(state: any) {\n this.viewparts = state.layout.viewparts || {}\n }\n}\n"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../components/ox-floating-overlay.js';
|
|
3
|
+
import '../components/ox-resize-splitter.js';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js';
|
|
7
|
+
import { VIEWPART_LEVEL } from '../actions/layout.js';
|
|
8
|
+
import store from '../initializer.js';
|
|
9
|
+
let FooterBar = class FooterBar extends connect(store)(LitElement) {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.fullbleed = false;
|
|
13
|
+
this.viewparts = {};
|
|
14
|
+
this._startHeight = 0;
|
|
15
|
+
}
|
|
16
|
+
render() {
|
|
17
|
+
var viewparts = this.viewparts;
|
|
18
|
+
var footerbars = Object.keys(viewparts)
|
|
19
|
+
.map(name => {
|
|
20
|
+
return {
|
|
21
|
+
name,
|
|
22
|
+
...viewparts[name]
|
|
23
|
+
};
|
|
24
|
+
})
|
|
25
|
+
.filter(viewpart => viewpart.position == 'footerbar' && (!this.fullbleed || viewpart.hovering));
|
|
26
|
+
footerbars = [
|
|
27
|
+
...footerbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),
|
|
28
|
+
...footerbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)
|
|
29
|
+
];
|
|
30
|
+
return html `
|
|
31
|
+
${footerbars.map(footerbar => !footerbar.show
|
|
32
|
+
? html ``
|
|
33
|
+
: footerbar.hovering
|
|
34
|
+
? html `
|
|
35
|
+
<ox-floating-overlay
|
|
36
|
+
.backdrop=${footerbar.backdrop}
|
|
37
|
+
direction="up"
|
|
38
|
+
.hovering=${footerbar.hovering}
|
|
39
|
+
.name=${footerbar.name}
|
|
40
|
+
.title=${footerbar.title}
|
|
41
|
+
.help=${footerbar.help}
|
|
42
|
+
.size=${footerbar.size}
|
|
43
|
+
.closable=${footerbar.closable}
|
|
44
|
+
.templateProperties=${footerbar.templateProperties}
|
|
45
|
+
>${footerbar.template}</ox-floating-overlay
|
|
46
|
+
>
|
|
47
|
+
`
|
|
48
|
+
: html `
|
|
49
|
+
<div footerbar>${footerbar.template}</div>
|
|
50
|
+
${footerbar.resizable
|
|
51
|
+
? html `
|
|
52
|
+
<ox-resize-splitter
|
|
53
|
+
@splitter-dragstart=${(e) => this.resizeStart(e)}
|
|
54
|
+
@splitter-drag=${(e) => this.resizeDrag(e)}
|
|
55
|
+
></ox-resize-splitter>
|
|
56
|
+
`
|
|
57
|
+
: html ``}
|
|
58
|
+
`)}
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
resizeStart(e) {
|
|
62
|
+
var _a;
|
|
63
|
+
this._startHeight = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).offsetHeight;
|
|
64
|
+
}
|
|
65
|
+
resizeDrag(e) {
|
|
66
|
+
var _a;
|
|
67
|
+
var delta = e.detail;
|
|
68
|
+
var x = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).querySelectorAll('*');
|
|
69
|
+
Array.from(x).forEach(ele => {
|
|
70
|
+
;
|
|
71
|
+
ele.style.height = `${this._startHeight - delta.y}px`;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
stateChanged(state) {
|
|
75
|
+
this.viewparts = state.layout.viewparts || {};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
FooterBar.styles = [
|
|
79
|
+
css `
|
|
80
|
+
:host {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-flow: column-reverse nowrap;
|
|
83
|
+
align-items: stretch;
|
|
84
|
+
position: relative;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
*[footerbar] {
|
|
88
|
+
display: block;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@media screen and (max-width: 460px) {
|
|
92
|
+
:host {
|
|
93
|
+
padding-bottom: 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
`
|
|
97
|
+
];
|
|
98
|
+
__decorate([
|
|
99
|
+
property({ type: Boolean, attribute: 'fullbleed' })
|
|
100
|
+
], FooterBar.prototype, "fullbleed", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
state()
|
|
103
|
+
], FooterBar.prototype, "viewparts", void 0);
|
|
104
|
+
FooterBar = __decorate([
|
|
105
|
+
customElement('ox-footer-bar')
|
|
106
|
+
], FooterBar);
|
|
107
|
+
//# sourceMappingURL=ox-footer-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-footer-bar.js","sourceRoot":"","sources":["../../../src/layouts/ox-footer-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import '../components/ox-floating-overlay.js'\nimport '../components/ox-resize-splitter.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { Viewpart, VIEWPART_LEVEL } from '../actions/layout.js'\nimport store from '../initializer.js'\n\n@customElement('ox-footer-bar')\nclass FooterBar extends connect(store)(LitElement) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-flow: column-reverse nowrap;\n align-items: stretch;\n position: relative;\n }\n\n *[footerbar] {\n display: block;\n }\n\n @media screen and (max-width: 460px) {\n :host {\n padding-bottom: 0;\n }\n }\n `\n ]\n\n @property({ type: Boolean, attribute: 'fullbleed' }) fullbleed: boolean = false\n\n @state() viewparts: { [name: string]: Viewpart } = {}\n\n private _startHeight: number = 0\n\n render() {\n var viewparts = this.viewparts\n var footerbars = Object.keys(viewparts)\n .map(name => {\n return {\n name,\n ...viewparts[name]\n }\n })\n .filter(viewpart => viewpart.position == 'footerbar' && (!this.fullbleed || viewpart.hovering))\n\n footerbars = [\n ...footerbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),\n ...footerbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)\n ]\n\n return html`\n ${footerbars.map(footerbar =>\n !footerbar.show\n ? html``\n : footerbar.hovering\n ? html`\n <ox-floating-overlay\n .backdrop=${footerbar.backdrop}\n direction=\"up\"\n .hovering=${footerbar.hovering}\n .name=${footerbar.name}\n .title=${footerbar.title}\n .help=${footerbar.help}\n .size=${footerbar.size}\n .closable=${footerbar.closable}\n .templateProperties=${footerbar.templateProperties}\n >${footerbar.template}</ox-floating-overlay\n >\n `\n : html`\n <div footerbar>${footerbar.template}</div>\n ${footerbar.resizable\n ? html`\n <ox-resize-splitter\n @splitter-dragstart=${(e: CustomEvent) => this.resizeStart(e)}\n @splitter-drag=${(e: CustomEvent) => this.resizeDrag(e)}\n ></ox-resize-splitter>\n `\n : html``}\n `\n )}\n `\n }\n\n resizeStart(e: CustomEvent) {\n this._startHeight = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).offsetHeight\n }\n\n resizeDrag(e: CustomEvent) {\n var delta = e.detail\n\n var x = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).querySelectorAll('*')\n Array.from(x).forEach(ele => {\n ;(ele as HTMLElement).style.height = `${this._startHeight - delta.y}px`\n })\n }\n\n stateChanged(state: any) {\n this.viewparts = state.layout.viewparts || {}\n }\n}\n"]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../components/ox-floating-overlay.js';
|
|
3
|
+
import '../components/ox-resize-splitter.js';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js';
|
|
7
|
+
import { VIEWPART_LEVEL } from '../actions/layout.js';
|
|
8
|
+
import store from '../initializer.js';
|
|
9
|
+
let HeaderBar = class HeaderBar extends connect(store)(LitElement) {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.fullbleed = false;
|
|
13
|
+
this.viewparts = {};
|
|
14
|
+
this._startHeight = 0;
|
|
15
|
+
}
|
|
16
|
+
render() {
|
|
17
|
+
var viewparts = this.viewparts;
|
|
18
|
+
var headerbars = Object.keys(viewparts)
|
|
19
|
+
.map(name => {
|
|
20
|
+
return {
|
|
21
|
+
name,
|
|
22
|
+
...viewparts[name]
|
|
23
|
+
};
|
|
24
|
+
})
|
|
25
|
+
.filter(viewpart => viewpart.position == 'headerbar' && (!this.fullbleed || viewpart.hovering));
|
|
26
|
+
headerbars = [
|
|
27
|
+
...headerbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),
|
|
28
|
+
...headerbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)
|
|
29
|
+
];
|
|
30
|
+
return html `
|
|
31
|
+
${headerbars.map(headerbar => !headerbar.show
|
|
32
|
+
? html ``
|
|
33
|
+
: headerbar.hovering
|
|
34
|
+
? html `
|
|
35
|
+
<ox-floating-overlay
|
|
36
|
+
.backdrop=${headerbar.backdrop}
|
|
37
|
+
direction="down"
|
|
38
|
+
.hovering=${headerbar.hovering}
|
|
39
|
+
.name=${headerbar.name}
|
|
40
|
+
.title=${headerbar.title}
|
|
41
|
+
.help=${headerbar.help}
|
|
42
|
+
.size=${headerbar.size}
|
|
43
|
+
.closable=${headerbar.closable}
|
|
44
|
+
.templateProperties=${headerbar.templateProperties}
|
|
45
|
+
>${headerbar.template}</ox-floating-overlay
|
|
46
|
+
>
|
|
47
|
+
`
|
|
48
|
+
: html `
|
|
49
|
+
<div headerbar>${headerbar.template}</div>
|
|
50
|
+
${headerbar.resizable
|
|
51
|
+
? html `
|
|
52
|
+
<ox-resize-splitter
|
|
53
|
+
@splitter-dragstart=${(e) => this.resizeStart(e)}
|
|
54
|
+
@splitter-drag=${(e) => this.resizeDrag(e)}
|
|
55
|
+
></ox-resize-splitter>
|
|
56
|
+
`
|
|
57
|
+
: html ``}
|
|
58
|
+
`)}
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
resizeStart(e) {
|
|
62
|
+
var _a;
|
|
63
|
+
this._startHeight = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).offsetHeight;
|
|
64
|
+
}
|
|
65
|
+
resizeDrag(e) {
|
|
66
|
+
var _a;
|
|
67
|
+
var delta = e.detail;
|
|
68
|
+
var x = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).querySelectorAll('*');
|
|
69
|
+
Array.from(x).forEach(ele => {
|
|
70
|
+
;
|
|
71
|
+
ele.style.height = `${this._startHeight + delta.y}px`;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
stateChanged(state) {
|
|
75
|
+
this.viewparts = state.layout.viewparts || {};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
HeaderBar.styles = [
|
|
79
|
+
css `
|
|
80
|
+
:host {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-flow: column nowrap;
|
|
83
|
+
align-items: stretch;
|
|
84
|
+
|
|
85
|
+
position: relative;
|
|
86
|
+
|
|
87
|
+
background-color: var(--header-bar-background-color);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
*[headerbar] {
|
|
91
|
+
display: block;
|
|
92
|
+
}
|
|
93
|
+
`
|
|
94
|
+
];
|
|
95
|
+
__decorate([
|
|
96
|
+
property({ type: Boolean, attribute: 'fullbleed' })
|
|
97
|
+
], HeaderBar.prototype, "fullbleed", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
state()
|
|
100
|
+
], HeaderBar.prototype, "viewparts", void 0);
|
|
101
|
+
HeaderBar = __decorate([
|
|
102
|
+
customElement('ox-header-bar')
|
|
103
|
+
], HeaderBar);
|
|
104
|
+
//# sourceMappingURL=ox-header-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-header-bar.js","sourceRoot":"","sources":["../../../src/layouts/ox-header-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import '../components/ox-floating-overlay.js'\nimport '../components/ox-resize-splitter.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { Viewpart, VIEWPART_LEVEL } from '../actions/layout.js'\nimport store from '../initializer.js'\n\n@customElement('ox-header-bar')\nclass HeaderBar extends connect(store)(LitElement) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-flow: column nowrap;\n align-items: stretch;\n\n position: relative;\n\n background-color: var(--header-bar-background-color);\n }\n\n *[headerbar] {\n display: block;\n }\n `\n ]\n\n @property({ type: Boolean, attribute: 'fullbleed' }) fullbleed: boolean = false\n\n @state() viewparts: { [name: string]: Viewpart } = {}\n\n private _startHeight: number = 0\n\n render() {\n var viewparts = this.viewparts\n var headerbars = Object.keys(viewparts)\n .map(name => {\n return {\n name,\n ...viewparts[name]\n }\n })\n .filter(viewpart => viewpart.position == 'headerbar' && (!this.fullbleed || viewpart.hovering))\n\n headerbars = [\n ...headerbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),\n ...headerbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)\n ]\n\n return html`\n ${headerbars.map(headerbar =>\n !headerbar.show\n ? html``\n : headerbar.hovering\n ? html`\n <ox-floating-overlay\n .backdrop=${headerbar.backdrop}\n direction=\"down\"\n .hovering=${headerbar.hovering}\n .name=${headerbar.name}\n .title=${headerbar.title}\n .help=${headerbar.help}\n .size=${headerbar.size}\n .closable=${headerbar.closable}\n .templateProperties=${headerbar.templateProperties}\n >${headerbar.template}</ox-floating-overlay\n >\n `\n : html`\n <div headerbar>${headerbar.template}</div>\n ${headerbar.resizable\n ? html`\n <ox-resize-splitter\n @splitter-dragstart=${(e: CustomEvent) => this.resizeStart(e)}\n @splitter-drag=${(e: CustomEvent) => this.resizeDrag(e)}\n ></ox-resize-splitter>\n `\n : html``}\n `\n )}\n `\n }\n\n resizeStart(e: CustomEvent) {\n this._startHeight = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).offsetHeight\n }\n\n resizeDrag(e: CustomEvent) {\n var delta = e.detail\n\n var x = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).querySelectorAll('*')\n Array.from(x).forEach(ele => {\n ;(ele as HTMLElement).style.height = `${this._startHeight + delta.y}px`\n })\n }\n\n stateChanged(state: any) {\n this.viewparts = state.layout.viewparts || {}\n }\n}\n"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '../components/ox-floating-overlay.js';
|
|
3
|
+
import '../components/ox-resize-splitter.js';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js';
|
|
7
|
+
import { ScrollbarStyles } from '@operato/styles';
|
|
8
|
+
import { VIEWPART_LEVEL } from '../actions/layout.js';
|
|
9
|
+
import store from '../initializer.js';
|
|
10
|
+
let NavBar = class NavBar extends connect(store)(LitElement) {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.fullbleed = false;
|
|
14
|
+
this.viewparts = {};
|
|
15
|
+
this._startWidth = 0;
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
var viewparts = this.viewparts;
|
|
19
|
+
var navbars = Object.keys(viewparts)
|
|
20
|
+
.map(name => {
|
|
21
|
+
return {
|
|
22
|
+
name,
|
|
23
|
+
...viewparts[name]
|
|
24
|
+
};
|
|
25
|
+
})
|
|
26
|
+
.filter(viewpart => viewpart.position == 'navbar' && (!this.fullbleed || viewpart.hovering));
|
|
27
|
+
navbars = [
|
|
28
|
+
...navbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),
|
|
29
|
+
...navbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)
|
|
30
|
+
];
|
|
31
|
+
return html `
|
|
32
|
+
${navbars.map(navbar => !navbar.show
|
|
33
|
+
? html ``
|
|
34
|
+
: navbar.hovering
|
|
35
|
+
? html `
|
|
36
|
+
<ox-floating-overlay
|
|
37
|
+
.backdrop=${navbar.backdrop}
|
|
38
|
+
direction="right"
|
|
39
|
+
.hovering=${navbar.hovering}
|
|
40
|
+
.name=${navbar.name}
|
|
41
|
+
.title=${navbar.title}
|
|
42
|
+
.help=${navbar.help}
|
|
43
|
+
.size=${navbar.size}
|
|
44
|
+
.closable=${navbar.closable}
|
|
45
|
+
.templateProperties=${navbar.templateProperties}
|
|
46
|
+
>${navbar.template}</ox-floating-overlay
|
|
47
|
+
>
|
|
48
|
+
`
|
|
49
|
+
: html `
|
|
50
|
+
<div navbar>${navbar.template}</div>
|
|
51
|
+
${navbar.resizable
|
|
52
|
+
? html `
|
|
53
|
+
<ox-resize-splitter
|
|
54
|
+
@splitter-dragstart=${(e) => this.resizeStart(e)}
|
|
55
|
+
@splitter-drag=${(e) => this.resizeDrag(e)}
|
|
56
|
+
vertical
|
|
57
|
+
></ox-resize-splitter>
|
|
58
|
+
`
|
|
59
|
+
: html ``}
|
|
60
|
+
`)}
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
resizeStart(e) {
|
|
64
|
+
var _a;
|
|
65
|
+
this._startWidth = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).offsetWidth;
|
|
66
|
+
}
|
|
67
|
+
resizeDrag(e) {
|
|
68
|
+
var _a;
|
|
69
|
+
var delta = e.detail;
|
|
70
|
+
var x = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).querySelectorAll('*');
|
|
71
|
+
Array.from(x).forEach(ele => {
|
|
72
|
+
;
|
|
73
|
+
ele.style.width = `${this._startWidth + delta.x}px`;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
stateChanged(state) {
|
|
77
|
+
this.viewparts = state.layout.viewparts || {};
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
NavBar.styles = [
|
|
81
|
+
ScrollbarStyles,
|
|
82
|
+
css `
|
|
83
|
+
:host {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-flow: row nowrap;
|
|
86
|
+
align-items: stretch;
|
|
87
|
+
|
|
88
|
+
position: relative;
|
|
89
|
+
|
|
90
|
+
background-color: var(--nav-bar-background-color);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
*[navbar] {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: row;
|
|
96
|
+
}
|
|
97
|
+
`
|
|
98
|
+
];
|
|
99
|
+
__decorate([
|
|
100
|
+
property({ type: Boolean, attribute: 'fullbleed' })
|
|
101
|
+
], NavBar.prototype, "fullbleed", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
state()
|
|
104
|
+
], NavBar.prototype, "viewparts", void 0);
|
|
105
|
+
NavBar = __decorate([
|
|
106
|
+
customElement('ox-nav-bar')
|
|
107
|
+
], NavBar);
|
|
108
|
+
//# sourceMappingURL=ox-nav-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-nav-bar.js","sourceRoot":"","sources":["../../../src/layouts/ox-nav-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import '../components/ox-floating-overlay.js'\nimport '../components/ox-resize-splitter.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { Viewpart, VIEWPART_LEVEL } from '../actions/layout.js'\nimport store from '../initializer.js'\n\n@customElement('ox-nav-bar')\nclass NavBar extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-flow: row nowrap;\n align-items: stretch;\n\n position: relative;\n\n background-color: var(--nav-bar-background-color);\n }\n\n *[navbar] {\n display: flex;\n flex-direction: row;\n }\n `\n ]\n\n @property({ type: Boolean, attribute: 'fullbleed' }) fullbleed: boolean = false\n\n @state() viewparts: { [name: string]: Viewpart } = {}\n\n private _startWidth: number = 0\n\n render() {\n var viewparts = this.viewparts\n var navbars = Object.keys(viewparts)\n .map(name => {\n return {\n name,\n ...viewparts[name]\n }\n })\n .filter(viewpart => viewpart.position == 'navbar' && (!this.fullbleed || viewpart.hovering))\n\n navbars = [\n ...navbars.filter(viewpart => viewpart.level == VIEWPART_LEVEL.TOPMOST),\n ...navbars.filter(viewpart => viewpart.level !== VIEWPART_LEVEL.TOPMOST)\n ]\n\n return html`\n ${navbars.map(navbar =>\n !navbar.show\n ? html``\n : navbar.hovering\n ? html`\n <ox-floating-overlay\n .backdrop=${navbar.backdrop}\n direction=\"right\"\n .hovering=${navbar.hovering}\n .name=${navbar.name}\n .title=${navbar.title}\n .help=${navbar.help}\n .size=${navbar.size}\n .closable=${navbar.closable}\n .templateProperties=${navbar.templateProperties}\n >${navbar.template}</ox-floating-overlay\n >\n `\n : html`\n <div navbar>${navbar.template}</div>\n ${navbar.resizable\n ? html`\n <ox-resize-splitter\n @splitter-dragstart=${(e: CustomEvent) => this.resizeStart(e)}\n @splitter-drag=${(e: CustomEvent) => this.resizeDrag(e)}\n vertical\n ></ox-resize-splitter>\n `\n : html``}\n `\n )}\n `\n }\n\n resizeStart(e: CustomEvent) {\n this._startWidth = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).offsetWidth\n }\n\n resizeDrag(e: CustomEvent) {\n var delta = e.detail\n\n var x = ((e.target as HTMLElement)?.previousElementSibling as HTMLElement).querySelectorAll('*')\n Array.from(x).forEach(ele => {\n ;(ele as HTMLElement).style.width = `${this._startWidth + delta.x}px`\n })\n }\n\n stateChanged(state: any) {\n this.viewparts = state.layout.viewparts || {}\n }\n}\n"]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import '@material/mwc-button';
|
|
3
|
+
import '@material/mwc-icon';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js';
|
|
7
|
+
import { CLOSE_SNACKBAR } from '../actions/snackbar';
|
|
8
|
+
import store from '../initializer.js';
|
|
9
|
+
let SnackBar = class SnackBar extends connect(store)(LitElement) {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.level = 'info';
|
|
13
|
+
this.message = '';
|
|
14
|
+
this.active = false;
|
|
15
|
+
}
|
|
16
|
+
render() {
|
|
17
|
+
return html `
|
|
18
|
+
<span>
|
|
19
|
+
<mwc-icon class=${this.level}
|
|
20
|
+
>${this.level == 'info'
|
|
21
|
+
? html ` notification_important `
|
|
22
|
+
: this.level == 'warn'
|
|
23
|
+
? html ` warning `
|
|
24
|
+
: this.level == 'error'
|
|
25
|
+
? html ` error `
|
|
26
|
+
: html ``}</mwc-icon
|
|
27
|
+
>
|
|
28
|
+
</span>
|
|
29
|
+
<span>${this.message}</span>
|
|
30
|
+
${this.action && this.action.label
|
|
31
|
+
? html `
|
|
32
|
+
<mwc-button
|
|
33
|
+
@click=${() => {
|
|
34
|
+
store.dispatch({ type: CLOSE_SNACKBAR });
|
|
35
|
+
this.action.callback();
|
|
36
|
+
}}
|
|
37
|
+
>${this.action.label}</mwc-button
|
|
38
|
+
>
|
|
39
|
+
`
|
|
40
|
+
: html ``}
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
stateChanged(state) {
|
|
44
|
+
var { level, message, snackbarOpened, action } = state.snackbar || {};
|
|
45
|
+
this.level = level;
|
|
46
|
+
this.message = message;
|
|
47
|
+
this.active = snackbarOpened;
|
|
48
|
+
this.action = action;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
SnackBar.styles = css `
|
|
52
|
+
:host {
|
|
53
|
+
display: block;
|
|
54
|
+
position: fixed;
|
|
55
|
+
top: 100%;
|
|
56
|
+
left: 0;
|
|
57
|
+
right: 0;
|
|
58
|
+
padding: 12px;
|
|
59
|
+
background-color: black;
|
|
60
|
+
color: white;
|
|
61
|
+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
|
|
62
|
+
text-align: center;
|
|
63
|
+
will-change: transform;
|
|
64
|
+
transform: translate3d(0, 0, 0);
|
|
65
|
+
transition-property: visibility, transform;
|
|
66
|
+
transition-duration: 0.2s;
|
|
67
|
+
visibility: hidden;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
:host([active]) {
|
|
71
|
+
visibility: visible;
|
|
72
|
+
transform: translate3d(0, -100%, 0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
mwc-icon {
|
|
76
|
+
--mdc-icon-size: 1.2em;
|
|
77
|
+
vertical-align: middle;
|
|
78
|
+
max-width: 20px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
mwc-button {
|
|
82
|
+
display: block;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.info {
|
|
86
|
+
color: green;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.warn {
|
|
90
|
+
color: yellow;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.error {
|
|
94
|
+
color: red;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@media (min-width: 460px) {
|
|
98
|
+
:host {
|
|
99
|
+
width: 320px;
|
|
100
|
+
margin: auto;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
`;
|
|
104
|
+
__decorate([
|
|
105
|
+
property({ type: String })
|
|
106
|
+
], SnackBar.prototype, "level", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
property({ type: String })
|
|
109
|
+
], SnackBar.prototype, "message", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
property({ type: Boolean, reflect: true })
|
|
112
|
+
], SnackBar.prototype, "active", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
property({ type: Object })
|
|
115
|
+
], SnackBar.prototype, "action", void 0);
|
|
116
|
+
SnackBar = __decorate([
|
|
117
|
+
customElement('ox-snack-bar')
|
|
118
|
+
], SnackBar);
|
|
119
|
+
//# sourceMappingURL=ox-snack-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ox-snack-bar.js","sourceRoot":"","sources":["../../../src/layouts/ox-snack-bar.ts"],"names":[],"mappings":";AAAA,OAAO,sBAAsB,CAAA;AAC7B,OAAO,oBAAoB,CAAA;AAE3B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,MAAM,mBAAmB,CAAA;AAGrC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;IAAjD;;QAuD8B,UAAK,GAA8B,MAAM,CAAA;QACzC,YAAO,GAAW,EAAE,CAAA;QACJ,WAAM,GAAY,KAAK,CAAA;IAuCrE,CAAC;IApCC,MAAM;QACJ,OAAO,IAAI,CAAA;;0BAEW,IAAI,CAAC,KAAK;aACvB,IAAI,CAAC,KAAK,IAAI,MAAM;YACrB,CAAC,CAAC,IAAI,CAAA,0BAA0B;YAChC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM;gBACtB,CAAC,CAAC,IAAI,CAAA,WAAW;gBACjB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO;oBACvB,CAAC,CAAC,IAAI,CAAA,SAAS;oBACf,CAAC,CAAC,IAAI,CAAA,EAAE;;;cAGN,IAAI,CAAC,OAAO;QAClB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK;YAChC,CAAC,CAAC,IAAI,CAAA;;uBAES,GAAG,EAAE;gBACZ,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;gBACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACxB,CAAC;iBACE,IAAI,CAAC,MAAM,CAAC,KAAK;;WAEvB;YACH,CAAC,CAAC,IAAI,CAAA,EAAE;KACX,CAAA;IACH,CAAC;IAED,YAAY,CAAC,KAAU;QACrB,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAA;QAErE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF,CAAA;AA/FQ,eAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDlB,CAAA;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uCAA0C;AACzC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCAAqB;AACJ;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wCAAwB;AACvC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAY;AA1DnC,QAAQ;IADb,aAAa,CAAC,cAAc,CAAC;GACxB,QAAQ,CAgGb","sourcesContent":["import '@material/mwc-button'\nimport '@material/mwc-icon'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { CLOSE_SNACKBAR } from '../actions/snackbar'\nimport store from '../initializer.js'\n\n@customElement('ox-snack-bar')\nclass SnackBar extends connect(store)(LitElement) {\n static styles = css`\n :host {\n display: block;\n position: fixed;\n top: 100%;\n left: 0;\n right: 0;\n padding: 12px;\n background-color: black;\n color: white;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n text-align: center;\n will-change: transform;\n transform: translate3d(0, 0, 0);\n transition-property: visibility, transform;\n transition-duration: 0.2s;\n visibility: hidden;\n }\n\n :host([active]) {\n visibility: visible;\n transform: translate3d(0, -100%, 0);\n }\n\n mwc-icon {\n --mdc-icon-size: 1.2em;\n vertical-align: middle;\n max-width: 20px;\n }\n\n mwc-button {\n display: block;\n }\n\n .info {\n color: green;\n }\n\n .warn {\n color: yellow;\n }\n\n .error {\n color: red;\n }\n\n @media (min-width: 460px) {\n :host {\n width: 320px;\n margin: auto;\n }\n }\n `\n\n @property({ type: String }) level: 'info' | 'warn' | 'error' = 'info'\n @property({ type: String }) message: string = ''\n @property({ type: Boolean, reflect: true }) active: boolean = false\n @property({ type: Object }) action: any\n\n render() {\n return html`\n <span>\n <mwc-icon class=${this.level}\n >${this.level == 'info'\n ? html` notification_important `\n : this.level == 'warn'\n ? html` warning `\n : this.level == 'error'\n ? html` error `\n : html``}</mwc-icon\n >\n </span>\n <span>${this.message}</span>\n ${this.action && this.action.label\n ? html`\n <mwc-button\n @click=${() => {\n store.dispatch({ type: CLOSE_SNACKBAR })\n this.action.callback()\n }}\n >${this.action.label}</mwc-button\n >\n `\n : html``}\n `\n }\n\n stateChanged(state: any) {\n var { level, message, snackbarOpened, action } = state.snackbar || {}\n\n this.level = level\n this.message = message\n this.active = snackbarOpened\n this.action = action\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Viewpart } from '../actions/layout';
|
|
2
|
+
declare const layout: (state: {
|
|
3
|
+
viewparts: {
|
|
4
|
+
[name: string]: Viewpart;
|
|
5
|
+
};
|
|
6
|
+
width: 'WIDE' | 'NARROW';
|
|
7
|
+
} | undefined, action: any) => {
|
|
8
|
+
width: any;
|
|
9
|
+
viewparts: {
|
|
10
|
+
[name: string]: Viewpart;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export default layout;
|