@operato/layout 0.3.21 → 0.3.22

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 +9 -0
  2. package/dist/src/actions/layout.d.ts +89 -0
  3. package/dist/src/actions/layout.js +140 -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 +331 -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 +105 -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 +106 -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 +103 -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 +107 -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 +14 -6
  43. package/src/actions/layout.ts +233 -0
  44. package/src/actions/snackbar.ts +60 -0
  45. package/src/components/ox-floating-overlay.ts +317 -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,103 @@
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 store from '../initializer.js';
8
+ let HeaderBar = class HeaderBar extends connect(store)(LitElement) {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.fullbleed = false;
12
+ this.viewparts = {};
13
+ this._startHeight = 0;
14
+ }
15
+ render() {
16
+ var viewparts = this.viewparts;
17
+ var headerbars = Object.keys(viewparts)
18
+ .map(name => {
19
+ return {
20
+ name,
21
+ ...viewparts[name]
22
+ };
23
+ })
24
+ .filter(viewpart => viewpart.position == 'headerbar' && (!this.fullbleed || viewpart.hovering));
25
+ headerbars = [
26
+ ...headerbars.filter(viewpart => viewpart.level == "TOPMOST" /* TOPMOST */),
27
+ ...headerbars.filter(viewpart => viewpart.level !== "TOPMOST" /* TOPMOST */)
28
+ ];
29
+ return html `
30
+ ${headerbars.map(headerbar => !headerbar.show
31
+ ? html ``
32
+ : headerbar.hovering
33
+ ? html `
34
+ <ox-floating-overlay
35
+ .backdrop=${headerbar.backdrop}
36
+ direction="down"
37
+ .hovering=${headerbar.hovering}
38
+ .name=${headerbar.name}
39
+ .title=${headerbar.title}
40
+ .help=${headerbar.help}
41
+ .size=${headerbar.size}
42
+ .closable=${headerbar.closable}
43
+ .templateProperties=${headerbar.templateProperties}
44
+ >${headerbar.template}</ox-floating-overlay
45
+ >
46
+ `
47
+ : html `
48
+ <div headerbar>${headerbar.template}</div>
49
+ ${headerbar.resizable
50
+ ? html `
51
+ <ox-resize-splitter
52
+ @splitter-dragstart=${(e) => this.resizeStart(e)}
53
+ @splitter-drag=${(e) => this.resizeDrag(e)}
54
+ ></ox-resize-splitter>
55
+ `
56
+ : html ``}
57
+ `)}
58
+ `;
59
+ }
60
+ resizeStart(e) {
61
+ var _a;
62
+ this._startHeight = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).offsetHeight;
63
+ }
64
+ resizeDrag(e) {
65
+ var _a;
66
+ var delta = e.detail;
67
+ var x = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).querySelectorAll('*');
68
+ Array.from(x).forEach(ele => {
69
+ ;
70
+ ele.style.height = `${this._startHeight + delta.y}px`;
71
+ });
72
+ }
73
+ stateChanged(state) {
74
+ this.viewparts = state.layout.viewparts || {};
75
+ }
76
+ };
77
+ HeaderBar.styles = [
78
+ css `
79
+ :host {
80
+ display: flex;
81
+ flex-flow: column nowrap;
82
+ align-items: stretch;
83
+
84
+ position: relative;
85
+
86
+ background-color: var(--header-bar-background-color);
87
+ }
88
+
89
+ *[headerbar] {
90
+ display: block;
91
+ }
92
+ `
93
+ ];
94
+ __decorate([
95
+ property({ type: Boolean, attribute: 'fullbleed' })
96
+ ], HeaderBar.prototype, "fullbleed", void 0);
97
+ __decorate([
98
+ state()
99
+ ], HeaderBar.prototype, "viewparts", void 0);
100
+ HeaderBar = __decorate([
101
+ customElement('ox-header-bar')
102
+ ], HeaderBar);
103
+ //# 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,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 { ScrollbarStyles } from '@operato/styles';
8
+ import store from '../initializer.js';
9
+ let NavBar = class NavBar extends connect(store)(LitElement) {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.fullbleed = false;
13
+ this.viewparts = {};
14
+ this._startWidth = 0;
15
+ }
16
+ render() {
17
+ var viewparts = this.viewparts;
18
+ var navbars = Object.keys(viewparts)
19
+ .map(name => {
20
+ return {
21
+ name,
22
+ ...viewparts[name]
23
+ };
24
+ })
25
+ .filter(viewpart => viewpart.position == 'navbar' && (!this.fullbleed || viewpart.hovering));
26
+ navbars = [
27
+ ...navbars.filter(viewpart => viewpart.level == "TOPMOST" /* TOPMOST */),
28
+ ...navbars.filter(viewpart => viewpart.level !== "TOPMOST" /* TOPMOST */)
29
+ ];
30
+ return html `
31
+ ${navbars.map(navbar => !navbar.show
32
+ ? html ``
33
+ : navbar.hovering
34
+ ? html `
35
+ <ox-floating-overlay
36
+ .backdrop=${navbar.backdrop}
37
+ direction="right"
38
+ .hovering=${navbar.hovering}
39
+ .name=${navbar.name}
40
+ .title=${navbar.title}
41
+ .help=${navbar.help}
42
+ .size=${navbar.size}
43
+ .closable=${navbar.closable}
44
+ .templateProperties=${navbar.templateProperties}
45
+ >${navbar.template}</ox-floating-overlay
46
+ >
47
+ `
48
+ : html `
49
+ <div navbar>${navbar.template}</div>
50
+ ${navbar.resizable
51
+ ? html `
52
+ <ox-resize-splitter
53
+ @splitter-dragstart=${(e) => this.resizeStart(e)}
54
+ @splitter-drag=${(e) => this.resizeDrag(e)}
55
+ vertical
56
+ ></ox-resize-splitter>
57
+ `
58
+ : html ``}
59
+ `)}
60
+ `;
61
+ }
62
+ resizeStart(e) {
63
+ var _a;
64
+ this._startWidth = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).offsetWidth;
65
+ }
66
+ resizeDrag(e) {
67
+ var _a;
68
+ var delta = e.detail;
69
+ var x = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.previousElementSibling).querySelectorAll('*');
70
+ Array.from(x).forEach(ele => {
71
+ ;
72
+ ele.style.width = `${this._startWidth + delta.x}px`;
73
+ });
74
+ }
75
+ stateChanged(state) {
76
+ this.viewparts = state.layout.viewparts || {};
77
+ }
78
+ };
79
+ NavBar.styles = [
80
+ ScrollbarStyles,
81
+ css `
82
+ :host {
83
+ display: flex;
84
+ flex-flow: row nowrap;
85
+ align-items: stretch;
86
+
87
+ position: relative;
88
+
89
+ background-color: var(--nav-bar-background-color);
90
+ }
91
+
92
+ *[navbar] {
93
+ display: flex;
94
+ flex-direction: row;
95
+ }
96
+ `
97
+ ];
98
+ __decorate([
99
+ property({ type: Boolean, attribute: 'fullbleed' })
100
+ ], NavBar.prototype, "fullbleed", void 0);
101
+ __decorate([
102
+ state()
103
+ ], NavBar.prototype, "viewparts", void 0);
104
+ NavBar = __decorate([
105
+ customElement('ox-nav-bar')
106
+ ], NavBar);
107
+ //# 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;
@@ -0,0 +1,62 @@
1
+ import { APPEND_VIEWPART, REMOVE_VIEWPART, UPDATE_VIEWPART, UPDATE_VIEWPORT_WIDTH } from '../actions/layout';
2
+ const INITIAL_STATE = {
3
+ viewparts: {},
4
+ width: 'WIDE'
5
+ };
6
+ const layout = (state = INITIAL_STATE, action) => {
7
+ let viewparts = { ...state.viewparts };
8
+ switch (action.type) {
9
+ case APPEND_VIEWPART:
10
+ return {
11
+ ...state,
12
+ viewparts: {
13
+ ...state.viewparts,
14
+ [action.name]: {
15
+ ...action.viewpart,
16
+ position: action.position
17
+ }
18
+ }
19
+ };
20
+ case REMOVE_VIEWPART:
21
+ delete viewparts[action.name];
22
+ return {
23
+ ...state,
24
+ viewparts
25
+ };
26
+ case UPDATE_VIEWPART:
27
+ let viewpart = viewparts[action.name];
28
+ if (!viewpart) {
29
+ return state;
30
+ }
31
+ let override = action.override || {};
32
+ if (viewpart.temporary && override.show === false) {
33
+ /* temporary viewpart는 show=false가 될 때, 제거되어야 한다. */
34
+ delete viewparts[action.name];
35
+ return {
36
+ ...state,
37
+ viewparts
38
+ };
39
+ }
40
+ else {
41
+ return {
42
+ ...state,
43
+ viewparts: {
44
+ ...state.viewparts,
45
+ [action.name]: {
46
+ ...viewpart,
47
+ ...action.override
48
+ }
49
+ }
50
+ };
51
+ }
52
+ case UPDATE_VIEWPORT_WIDTH:
53
+ return {
54
+ ...state,
55
+ width: action.width
56
+ };
57
+ default:
58
+ return state;
59
+ }
60
+ };
61
+ export default layout;
62
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/reducers/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAY,MAAM,mBAAmB,CAAA;AAEtH,MAAM,aAAa,GAGf;IACF,SAAS,EAAE,EAAE;IACb,KAAK,EAAE,MAAM;CACd,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,MAAW,EAAE,EAAE;IACpD,IAAI,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IAEtC,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,eAAe;YAClB,OAAO;gBACL,GAAG,KAAK;gBACR,SAAS,EAAE;oBACT,GAAG,KAAK,CAAC,SAAS;oBAClB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBACb,GAAG,MAAM,CAAC,QAAQ;wBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B;iBACF;aACF,CAAA;QAEH,KAAK,eAAe;YAClB,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC7B,OAAO;gBACL,GAAG,KAAK;gBACR,SAAS;aACV,CAAA;QAEH,KAAK,eAAe;YAClB,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,KAAK,CAAA;aACb;YACD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;YAEpC,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gBACjD,oDAAoD;gBACpD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7B,OAAO;oBACL,GAAG,KAAK;oBACR,SAAS;iBACV,CAAA;aACF;iBAAM;gBACL,OAAO;oBACL,GAAG,KAAK;oBACR,SAAS,EAAE;wBACT,GAAG,KAAK,CAAC,SAAS;wBAClB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BACb,GAAG,QAAQ;4BACX,GAAG,MAAM,CAAC,QAAQ;yBACnB;qBACF;iBACF,CAAA;aACF;QAEH,KAAK,qBAAqB;YACxB,OAAO;gBACL,GAAG,KAAK;gBACR,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAA;QAEH;YACE,OAAO,KAAK,CAAA;KACf;AACH,CAAC,CAAA;AAED,eAAe,MAAM,CAAA","sourcesContent":["import { APPEND_VIEWPART, REMOVE_VIEWPART, UPDATE_VIEWPART, UPDATE_VIEWPORT_WIDTH, Viewpart } from '../actions/layout'\n\nconst INITIAL_STATE: {\n viewparts: { [name: string]: Viewpart }\n width: 'WIDE' | 'NARROW'\n} = {\n viewparts: {},\n width: 'WIDE'\n}\n\nconst layout = (state = INITIAL_STATE, action: any) => {\n let viewparts = { ...state.viewparts }\n\n switch (action.type) {\n case APPEND_VIEWPART:\n return {\n ...state,\n viewparts: {\n ...state.viewparts,\n [action.name]: {\n ...action.viewpart,\n position: action.position\n }\n }\n }\n\n case REMOVE_VIEWPART:\n delete viewparts[action.name]\n return {\n ...state,\n viewparts\n }\n\n case UPDATE_VIEWPART:\n let viewpart = viewparts[action.name]\n if (!viewpart) {\n return state\n }\n let override = action.override || {}\n\n if (viewpart.temporary && override.show === false) {\n /* temporary viewpart는 show=false가 될 때, 제거되어야 한다. */\n delete viewparts[action.name]\n return {\n ...state,\n viewparts\n }\n } else {\n return {\n ...state,\n viewparts: {\n ...state.viewparts,\n [action.name]: {\n ...viewpart,\n ...action.override\n }\n }\n }\n }\n\n case UPDATE_VIEWPORT_WIDTH:\n return {\n ...state,\n width: action.width\n }\n\n default:\n return state\n }\n}\n\nexport default layout\n"]}
@@ -0,0 +1,18 @@
1
+ import { SnackbarAction } from '../actions/snackbar.js';
2
+ declare const snackbar: (state: {
3
+ snackbarOpened: boolean;
4
+ level: string;
5
+ message: string;
6
+ action: {};
7
+ } | undefined, action: SnackbarAction) => {
8
+ snackbarOpened: boolean;
9
+ level: string;
10
+ message: string;
11
+ action: {};
12
+ } | {
13
+ snackbarOpened: boolean;
14
+ level: import("../actions/snackbar.js").NotificationLevel;
15
+ message: string | undefined;
16
+ action: any;
17
+ };
18
+ export default snackbar;
@@ -0,0 +1,30 @@
1
+ import { CLOSE_SNACKBAR, OPEN_SNACKBAR } from '../actions/snackbar.js';
2
+ const INITIAL_STATE = {
3
+ snackbarOpened: false,
4
+ level: '',
5
+ message: '',
6
+ action: {}
7
+ };
8
+ const snackbar = (state = INITIAL_STATE, action) => {
9
+ switch (action.type) {
10
+ case OPEN_SNACKBAR:
11
+ return {
12
+ ...state,
13
+ snackbarOpened: true,
14
+ level: action.level || 'info',
15
+ message: action.message,
16
+ action: {
17
+ ...action.action
18
+ }
19
+ };
20
+ case CLOSE_SNACKBAR:
21
+ return {
22
+ ...state,
23
+ snackbarOpened: false
24
+ };
25
+ default:
26
+ return state;
27
+ }
28
+ };
29
+ export default snackbar;
30
+ //# sourceMappingURL=snackbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snackbar.js","sourceRoot":"","sources":["../../../src/reducers/snackbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkB,MAAM,wBAAwB,CAAA;AAEtF,MAAM,aAAa,GAAG;IACpB,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;CACX,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,MAAsB,EAAE,EAAE;IACjE,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,KAAK;gBACR,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;gBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE;oBACN,GAAG,MAAM,CAAC,MAAM;iBACjB;aACF,CAAA;QACH,KAAK,cAAc;YACjB,OAAO;gBACL,GAAG,KAAK;gBACR,cAAc,EAAE,KAAK;aACtB,CAAA;QACH;YACE,OAAO,KAAK,CAAA;KACf;AACH,CAAC,CAAA;AAED,eAAe,QAAQ,CAAA","sourcesContent":["import { CLOSE_SNACKBAR, OPEN_SNACKBAR, SnackbarAction } from '../actions/snackbar.js'\n\nconst INITIAL_STATE = {\n snackbarOpened: false,\n level: '',\n message: '',\n action: {}\n}\n\nconst snackbar = (state = INITIAL_STATE, action: SnackbarAction) => {\n switch (action.type) {\n case OPEN_SNACKBAR:\n return {\n ...state,\n snackbarOpened: true,\n level: action.level || 'info',\n message: action.message,\n action: {\n ...action.action\n }\n }\n case CLOSE_SNACKBAR:\n return {\n ...state,\n snackbarOpened: false\n }\n default:\n return state\n }\n}\n\nexport default snackbar\n"]}