@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.
Files changed (75) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/src/actions/layout.d.ts +89 -0
  3. package/dist/src/actions/layout.js +159 -0
  4. package/dist/src/actions/layout.js.map +1 -0
  5. package/dist/src/actions/snackbar.d.ts +22 -0
  6. package/dist/src/actions/snackbar.js +24 -0
  7. package/dist/src/actions/snackbar.js.map +1 -0
  8. package/dist/src/components/ox-floating-overlay.d.ts +2 -0
  9. package/dist/src/components/ox-floating-overlay.js +333 -0
  10. package/dist/src/components/ox-floating-overlay.js.map +1 -0
  11. package/dist/src/components/ox-resize-splitter.d.ts +13 -0
  12. package/dist/src/components/ox-resize-splitter.js +108 -0
  13. package/dist/src/components/ox-resize-splitter.js.map +1 -0
  14. package/dist/src/index.d.ts +8 -1
  15. package/dist/src/index.js +8 -1
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/initializer.d.ts +2 -0
  18. package/dist/src/initializer.js +91 -0
  19. package/dist/src/initializer.js.map +1 -0
  20. package/dist/src/layouts/ox-aside-bar.d.ts +2 -0
  21. package/dist/src/layouts/ox-aside-bar.js +106 -0
  22. package/dist/src/layouts/ox-aside-bar.js.map +1 -0
  23. package/dist/src/layouts/ox-footer-bar.d.ts +2 -0
  24. package/dist/src/layouts/ox-footer-bar.js +107 -0
  25. package/dist/src/layouts/ox-footer-bar.js.map +1 -0
  26. package/dist/src/layouts/ox-header-bar.d.ts +2 -0
  27. package/dist/src/layouts/ox-header-bar.js +104 -0
  28. package/dist/src/layouts/ox-header-bar.js.map +1 -0
  29. package/dist/src/layouts/ox-nav-bar.d.ts +2 -0
  30. package/dist/src/layouts/ox-nav-bar.js +108 -0
  31. package/dist/src/layouts/ox-nav-bar.js.map +1 -0
  32. package/dist/src/layouts/ox-snack-bar.d.ts +2 -0
  33. package/dist/src/layouts/ox-snack-bar.js +119 -0
  34. package/dist/src/layouts/ox-snack-bar.js.map +1 -0
  35. package/dist/src/reducers/layout.d.ts +13 -0
  36. package/dist/src/reducers/layout.js +62 -0
  37. package/dist/src/reducers/layout.js.map +1 -0
  38. package/dist/src/reducers/snackbar.d.ts +18 -0
  39. package/dist/src/reducers/snackbar.js +30 -0
  40. package/dist/src/reducers/snackbar.js.map +1 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +15 -7
  43. package/src/actions/layout.ts +233 -0
  44. package/src/actions/snackbar.ts +60 -0
  45. package/src/components/ox-floating-overlay.ts +319 -0
  46. package/src/components/ox-resize-splitter.ts +126 -0
  47. package/src/index.ts +10 -1
  48. package/src/initializer.ts +113 -0
  49. package/src/layouts/ox-aside-bar.ts +106 -0
  50. package/src/layouts/ox-footer-bar.ts +106 -0
  51. package/src/layouts/ox-header-bar.ts +103 -0
  52. package/src/layouts/ox-nav-bar.ts +108 -0
  53. package/src/layouts/ox-snack-bar.ts +108 -0
  54. package/src/reducers/layout.ts +72 -0
  55. package/src/reducers/snackbar.ts +32 -0
  56. package/dist/src/ox-layout.d.ts +0 -45
  57. package/dist/src/ox-layout.js +0 -148
  58. package/dist/src/ox-layout.js.map +0 -1
  59. package/dist/src/ox-toolbar-style.d.ts +0 -4
  60. package/dist/src/ox-toolbar-style.js +0 -207
  61. package/dist/src/ox-toolbar-style.js.map +0 -1
  62. package/dist/src/ox-toolbar.d.ts +0 -4
  63. package/dist/src/ox-toolbar.js +0 -123
  64. package/dist/src/ox-toolbar.js.map +0 -1
  65. package/dist/stories/index.stories.d.ts +0 -33
  66. package/dist/stories/index.stories.js +0 -33
  67. package/dist/stories/index.stories.js.map +0 -1
  68. package/dist/test/ox-layout.test.d.ts +0 -1
  69. package/dist/test/ox-layout.test.js +0 -24
  70. package/dist/test/ox-layout.test.js.map +0 -1
  71. package/src/ox-layout.ts +0 -191
  72. package/src/ox-toolbar-style.ts +0 -208
  73. package/src/ox-toolbar.ts +0 -135
  74. package/stories/index.stories.ts +0 -52
  75. 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,2 @@
1
+ import '../components/ox-floating-overlay.js';
2
+ import '../components/ox-resize-splitter.js';
@@ -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,2 @@
1
+ import '../components/ox-floating-overlay.js';
2
+ import '../components/ox-resize-splitter.js';
@@ -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,2 @@
1
+ import '../components/ox-floating-overlay.js';
2
+ import '../components/ox-resize-splitter.js';
@@ -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,2 @@
1
+ import '@material/mwc-button';
2
+ import '@material/mwc-icon';
@@ -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;