@things-factory/board-ui 9.0.0-beta.8 → 9.0.0

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 (147) hide show
  1. package/dist-client/apptools/favorite-tool.js +12 -12
  2. package/dist-client/apptools/favorite-tool.js.map +1 -1
  3. package/dist-client/board-list/board-tile-list.js +97 -98
  4. package/dist-client/board-list/board-tile-list.js.map +1 -1
  5. package/dist-client/board-list/group-bar-styles.js +1 -0
  6. package/dist-client/board-list/group-bar-styles.js.map +1 -1
  7. package/dist-client/board-list/group-bar.d.ts +2 -0
  8. package/dist-client/board-list/group-bar.js +33 -5
  9. package/dist-client/board-list/group-bar.js.map +1 -1
  10. package/dist-client/board-list/play-group-bar.js +2 -2
  11. package/dist-client/board-list/play-group-bar.js.map +1 -1
  12. package/dist-client/board-provider.js +1 -6
  13. package/dist-client/board-provider.js.map +1 -1
  14. package/dist-client/bootstrap.js +4 -4
  15. package/dist-client/bootstrap.js.map +1 -1
  16. package/dist-client/data-grist/board-editor.d.ts +1 -1
  17. package/dist-client/data-grist/board-editor.js +39 -37
  18. package/dist-client/data-grist/board-editor.js.map +1 -1
  19. package/dist-client/data-grist/board-renderer.js +55 -46
  20. package/dist-client/data-grist/board-renderer.js.map +1 -1
  21. package/dist-client/data-grist/color-map-editor.js +7 -3
  22. package/dist-client/data-grist/color-map-editor.js.map +1 -1
  23. package/dist-client/data-grist/color-ranges-editor.js +7 -3
  24. package/dist-client/data-grist/color-ranges-editor.js.map +1 -1
  25. package/dist-client/entries/headless-scene-components.d.ts +1 -0
  26. package/dist-client/entries/headless-scene-components.js +4 -0
  27. package/dist-client/entries/headless-scene-components.js.map +1 -0
  28. package/dist-client/entries/scene-player.d.ts +5 -0
  29. package/dist-client/entries/scene-player.js +84 -0
  30. package/dist-client/entries/scene-player.js.map +1 -0
  31. package/dist-client/entries/scene-viewer.d.ts +5 -0
  32. package/dist-client/entries/scene-viewer.js +85 -0
  33. package/dist-client/entries/scene-viewer.js.map +1 -0
  34. package/dist-client/entries/things-scene-components.import +1 -0
  35. package/dist-client/graphql/board.js +9 -2
  36. package/dist-client/graphql/board.js.map +1 -1
  37. package/dist-client/graphql/index.d.ts +6 -6
  38. package/dist-client/graphql/index.js +6 -6
  39. package/dist-client/graphql/index.js.map +1 -1
  40. package/dist-client/index.d.ts +8 -8
  41. package/dist-client/index.js +8 -8
  42. package/dist-client/index.js.map +1 -1
  43. package/dist-client/pages/attachment-list-page.js +8 -9
  44. package/dist-client/pages/attachment-list-page.js.map +1 -1
  45. package/dist-client/pages/board-list-page.d.ts +12 -24
  46. package/dist-client/pages/board-list-page.js +49 -31
  47. package/dist-client/pages/board-list-page.js.map +1 -1
  48. package/dist-client/pages/board-modeller-page.js +36 -35
  49. package/dist-client/pages/board-modeller-page.js.map +1 -1
  50. package/dist-client/pages/board-player-by-name-page.d.ts +3 -2
  51. package/dist-client/pages/board-player-by-name-page.js +1 -1
  52. package/dist-client/pages/board-player-by-name-page.js.map +1 -1
  53. package/dist-client/pages/board-player-page.d.ts +2 -1
  54. package/dist-client/pages/board-player-page.js +41 -43
  55. package/dist-client/pages/board-player-page.js.map +1 -1
  56. package/dist-client/pages/board-template/board-template-list-page.d.ts +3 -1
  57. package/dist-client/pages/board-template/board-template-list-page.js +57 -29
  58. package/dist-client/pages/board-template/board-template-list-page.js.map +1 -1
  59. package/dist-client/pages/board-viewer-by-name-page.d.ts +3 -2
  60. package/dist-client/pages/board-viewer-by-name-page.js +1 -1
  61. package/dist-client/pages/board-viewer-by-name-page.js.map +1 -1
  62. package/dist-client/pages/board-viewer-page.d.ts +2 -1
  63. package/dist-client/pages/board-viewer-page.js +48 -47
  64. package/dist-client/pages/board-viewer-page.js.map +1 -1
  65. package/dist-client/pages/font-list-page.js +11 -11
  66. package/dist-client/pages/font-list-page.js.map +1 -1
  67. package/dist-client/pages/play-list-page.d.ts +3 -3
  68. package/dist-client/pages/play-list-page.js +27 -27
  69. package/dist-client/pages/play-list-page.js.map +1 -1
  70. package/dist-client/pages/printable-board-viewer-page.d.ts +1 -1
  71. package/dist-client/pages/printable-board-viewer-page.js +14 -6
  72. package/dist-client/pages/printable-board-viewer-page.js.map +1 -1
  73. package/dist-client/pages/theme/theme-editors.js +1 -1
  74. package/dist-client/pages/theme/theme-editors.js.map +1 -1
  75. package/dist-client/pages/theme/theme-list-page.js +36 -29
  76. package/dist-client/pages/theme/theme-list-page.js.map +1 -1
  77. package/dist-client/setting-let/board-view-setting-let.js +15 -17
  78. package/dist-client/setting-let/board-view-setting-let.js.map +1 -1
  79. package/dist-client/tsconfig.tsbuildinfo +1 -1
  80. package/dist-client/viewparts/board-basic-info.d.ts +1 -0
  81. package/dist-client/viewparts/board-basic-info.js +173 -133
  82. package/dist-client/viewparts/board-basic-info.js.map +1 -1
  83. package/dist-client/viewparts/board-info-link.js +15 -16
  84. package/dist-client/viewparts/board-info-link.js.map +1 -1
  85. package/dist-client/viewparts/board-info.d.ts +4 -3
  86. package/dist-client/viewparts/board-info.js +31 -28
  87. package/dist-client/viewparts/board-info.js.map +1 -1
  88. package/dist-client/viewparts/board-template-builder.js +61 -62
  89. package/dist-client/viewparts/board-template-builder.js.map +1 -1
  90. package/dist-client/viewparts/board-template-info.d.ts +22 -0
  91. package/dist-client/viewparts/board-template-info.js +248 -0
  92. package/dist-client/viewparts/board-template-info.js.map +1 -0
  93. package/dist-client/viewparts/board-versions.js +77 -69
  94. package/dist-client/viewparts/board-versions.js.map +1 -1
  95. package/dist-client/viewparts/group-info-basic.js +103 -103
  96. package/dist-client/viewparts/group-info-basic.js.map +1 -1
  97. package/dist-client/viewparts/group-info-import.js +54 -54
  98. package/dist-client/viewparts/group-info-import.js.map +1 -1
  99. package/dist-client/viewparts/group-info.d.ts +2 -2
  100. package/dist-client/viewparts/group-info.js +25 -25
  101. package/dist-client/viewparts/group-info.js.map +1 -1
  102. package/dist-client/viewparts/index.d.ts +3 -3
  103. package/dist-client/viewparts/index.js +3 -3
  104. package/dist-client/viewparts/index.js.map +1 -1
  105. package/dist-client/viewparts/link-builder.js +77 -79
  106. package/dist-client/viewparts/link-builder.js.map +1 -1
  107. package/dist-client/viewparts/play-group-info-basic.js +105 -105
  108. package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
  109. package/dist-client/viewparts/play-group-info-link.js +13 -14
  110. package/dist-client/viewparts/play-group-info-link.js.map +1 -1
  111. package/dist-client/viewparts/play-group-info.d.ts +2 -2
  112. package/dist-client/viewparts/play-group-info.js +23 -24
  113. package/dist-client/viewparts/play-group-info.js.map +1 -1
  114. package/dist-server/tsconfig.tsbuildinfo +1 -1
  115. package/helps/board-modeller/effects/hover-event.ko.md +3 -3
  116. package/helps/board-modeller/effects/hover-event.md +6 -4
  117. package/helps/board-modeller/effects/hover-event.zh.md +3 -3
  118. package/package.json +20 -19
  119. package/things-factory.config.js +12 -48
  120. package/translations/en.json +25 -3
  121. package/translations/ja.json +24 -2
  122. package/translations/ko.json +24 -2
  123. package/translations/ms.json +13 -6
  124. package/translations/zh.json +24 -2
  125. package/assets/images/bg-blue.png +0 -0
  126. package/assets/images/bg-green.png +0 -0
  127. package/assets/images/bg-input-select.png +0 -0
  128. package/assets/images/bg-rail.png +0 -0
  129. package/assets/images/forklift.png +0 -0
  130. package/assets/images/icon-backinfo.png +0 -0
  131. package/assets/images/icon-brand.png +0 -0
  132. package/assets/images/icon-close.png +0 -0
  133. package/assets/images/icon-editor-gradient-direction.png +0 -0
  134. package/assets/images/icon-mobile-brand.png +0 -0
  135. package/assets/images/icon-nametag.png +0 -0
  136. package/assets/images/icon-properties-label.png +0 -0
  137. package/assets/images/icon-properties-line-type.png +0 -0
  138. package/assets/images/icon-properties-table.png +0 -0
  139. package/assets/images/icon-resource-select.png +0 -0
  140. package/assets/images/person.png +0 -0
  141. package/assets/images/profile.png +0 -0
  142. package/images/icon-properties-arrow-type.png +0 -0
  143. package/images/icon-properties-gradient-direction.png +0 -0
  144. package/images/icon-properties-line-type.png +0 -0
  145. package/images/icon-properties-padding.png +0 -0
  146. package/images/icon-properties-table.png +0 -0
  147. package/images/icon-shell-inspector.png +0 -0
@@ -3,38 +3,17 @@ import { css, html, LitElement } from 'lit';
3
3
  import { customElement, property, state } from 'lit/decorators.js';
4
4
  import { ifDefined } from 'lit/directives/if-defined.js';
5
5
  import { ScrollbarStyles } from '@operato/styles';
6
- import './board-basic-info';
7
- import './board-versions';
8
- import './board-info-link';
6
+ import './board-basic-info.js';
7
+ import './board-versions.js';
8
+ import './board-info-link.js';
9
9
  let BoardInfo = class BoardInfo extends LitElement {
10
10
  constructor() {
11
11
  super(...arguments);
12
12
  this.tab = 'basic';
13
13
  }
14
- render() {
15
- var _a, _b;
16
- return html `
17
- <div tab>
18
- <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>basic</span>
19
- <span @click=${() => (this.tab = 'versions')} ?active=${this.tab == 'versions'}>versions</span>
20
- <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>link</span>
21
- </div>
22
- <div content>
23
- ${this.tab == 'basic'
24
- ? html `<board-basic-info boardId=${ifDefined((_a = this.board) === null || _a === void 0 ? void 0 : _a.id)}></board-basic-info>`
25
- : this.tab == 'versions'
26
- ? html `<board-versions boardId=${ifDefined((_b = this.board) === null || _b === void 0 ? void 0 : _b.id)}></board-versions>`
27
- : html `<board-info-link .board=${this.board}></board-info-link>`}
28
- </div>
29
- `;
30
- }
31
- close() {
32
- history.back();
33
- }
34
- };
35
- BoardInfo.styles = [
36
- ScrollbarStyles,
37
- css `
14
+ static { this.styles = [
15
+ ScrollbarStyles,
16
+ css `
38
17
  :host {
39
18
  height: 100%;
40
19
  min-width: 360px;
@@ -59,6 +38,10 @@ BoardInfo.styles = [
59
38
  overflow-y: auto;
60
39
  }
61
40
 
41
+ board-versions {
42
+ height: 100%;
43
+ }
44
+
62
45
  span {
63
46
  padding: 5px 4px 1px;
64
47
  font: var(--group-bar-textbutton);
@@ -78,7 +61,27 @@ BoardInfo.styles = [
78
61
  }
79
62
  }
80
63
  `
81
- ];
64
+ ]; }
65
+ render() {
66
+ return html `
67
+ <div tab>
68
+ <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>basic</span>
69
+ <span @click=${() => (this.tab = 'versions')} ?active=${this.tab == 'versions'}>versions</span>
70
+ <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>link</span>
71
+ </div>
72
+ <div content>
73
+ ${this.tab == 'basic'
74
+ ? html `<board-basic-info boardId=${ifDefined(this.board?.id)}></board-basic-info>`
75
+ : this.tab == 'versions'
76
+ ? html `<board-versions boardId=${ifDefined(this.board?.id)}></board-versions>`
77
+ : html `<board-info-link .board=${this.board}></board-info-link>`}
78
+ </div>
79
+ `;
80
+ }
81
+ close() {
82
+ history.back();
83
+ }
84
+ };
82
85
  __decorate([
83
86
  property({ type: Object }),
84
87
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"board-info.js","sourceRoot":"","sources":["../../client/viewparts/board-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,oBAAoB,CAAA;AAC3B,OAAO,kBAAkB,CAAA;AACzB,OAAO,mBAAmB,CAAA;AAGnB,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAmDI,QAAG,GAAW,OAAO,CAAA;IAsBhC,CAAC;IApBC,MAAM;;QACJ,OAAO,IAAI,CAAA;;uBAEQ,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,OAAO;uBACzD,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,UAAU;uBAC/D,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,MAAM;;;UAGpE,IAAI,CAAC,GAAG,IAAI,OAAO;YACnB,CAAC,CAAC,IAAI,CAAA,6BAA6B,SAAS,CAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,EAAE,CAAC,sBAAsB;YAClF,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU;gBACtB,CAAC,CAAC,IAAI,CAAA,2BAA2B,SAAS,CAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,EAAE,CAAC,oBAAoB;gBAC9E,CAAC,CAAC,IAAI,CAAA,2BAA2B,IAAI,CAAC,KAAK,qBAAqB;;KAEvE,CAAA;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AAvEM,gBAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CF;CACF,AA9CY,CA8CZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;wCAAqC;AAEvD;IAAR,KAAK,EAAE;;sCAAsB;AAnDnB,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CAyErB","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport './board-basic-info'\nimport './board-versions'\nimport './board-info-link'\n\n@customElement('board-info')\nexport class BoardInfo extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n height: 100%;\n min-width: 360px;\n\n display: flex;\n flex-direction: column;\n position: relative;\n background-color: var(--md-sys-color-surface);\n }\n\n [tab] {\n width: 100%;\n display: flex;\n }\n\n [tab] > * {\n flex: 1;\n }\n\n [content] {\n flex: 1;\n overflow-y: auto;\n }\n\n span {\n padding: 5px 4px 1px;\n font: var(--group-bar-textbutton);\n background-color: var(--md-sys-color-secondary);\n color: rgba(255, 255, 255, 0.8);\n text-align: center;\n text-transform: uppercase;\n }\n\n span[active] {\n background-color: var(--md-sys-color-primary);\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: Object }) board?: { id: string; name: string }\n\n @state() tab: string = 'basic'\n\n render() {\n return html`\n <div tab>\n <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>basic</span>\n <span @click=${() => (this.tab = 'versions')} ?active=${this.tab == 'versions'}>versions</span>\n <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>link</span>\n </div>\n <div content>\n ${this.tab == 'basic'\n ? html`<board-basic-info boardId=${ifDefined(this.board?.id)}></board-basic-info>`\n : this.tab == 'versions'\n ? html`<board-versions boardId=${ifDefined(this.board?.id)}></board-versions>`\n : html`<board-info-link .board=${this.board}></board-info-link>`}\n </div>\n `\n }\n\n close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"board-info.js","sourceRoot":"","sources":["../../client/viewparts/board-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,sBAAsB,CAAA;AAGtB,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAuDI,QAAG,GAAW,OAAO,CAAA;IAsBhC,CAAC;aA5EQ,WAAM,GAAG;QACd,eAAe;QACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CF;KACF,AAlDY,CAkDZ;IAMD,MAAM;QACJ,OAAO,IAAI,CAAA;;uBAEQ,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,OAAO;uBACzD,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,UAAU;uBAC/D,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,MAAM;;;UAGpE,IAAI,CAAC,GAAG,IAAI,OAAO;YACnB,CAAC,CAAC,IAAI,CAAA,6BAA6B,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB;YAClF,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU;gBACtB,CAAC,CAAC,IAAI,CAAA,2BAA2B,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB;gBAC9E,CAAC,CAAC,IAAI,CAAA,2BAA2B,IAAI,CAAC,KAAK,qBAAqB;;KAEvE,CAAA;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AAvB2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;wCAA0D;AAE5E;IAAR,KAAK,EAAE;;sCAAsB;AAvDnB,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CA6ErB","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport './board-basic-info.js'\nimport './board-versions.js'\nimport './board-info-link.js'\n\n@customElement('board-info')\nexport class BoardInfo extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n height: 100%;\n min-width: 360px;\n\n display: flex;\n flex-direction: column;\n position: relative;\n background-color: var(--md-sys-color-surface);\n }\n\n [tab] {\n width: 100%;\n display: flex;\n }\n\n [tab] > * {\n flex: 1;\n }\n\n [content] {\n flex: 1;\n overflow-y: auto;\n }\n\n board-versions {\n height: 100%;\n }\n\n span {\n padding: 5px 4px 1px;\n font: var(--group-bar-textbutton);\n background-color: var(--md-sys-color-secondary);\n color: rgba(255, 255, 255, 0.8);\n text-align: center;\n text-transform: uppercase;\n }\n\n span[active] {\n background-color: var(--md-sys-color-primary);\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: Object }) board?: { id: string; name: string; description: string }\n\n @state() tab: string = 'basic'\n\n render() {\n return html`\n <div tab>\n <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>basic</span>\n <span @click=${() => (this.tab = 'versions')} ?active=${this.tab == 'versions'}>versions</span>\n <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>link</span>\n </div>\n <div content>\n ${this.tab == 'basic'\n ? html`<board-basic-info boardId=${ifDefined(this.board?.id)}></board-basic-info>`\n : this.tab == 'versions'\n ? html`<board-versions boardId=${ifDefined(this.board?.id)}></board-versions>`\n : html`<board-info-link .board=${this.board}></board-info-link>`}\n </div>\n `\n }\n\n close() {\n history.back()\n }\n}\n"]}
@@ -4,6 +4,7 @@ import { css, html, LitElement, nothing } from 'lit';
4
4
  import { customElement, property, state } from 'lit/decorators.js';
5
5
  import { ScrollbarStyles } from '@operato/styles';
6
6
  import { i18next } from '@operato/i18n';
7
+ import { getPathInfo } from '@operato/utils';
7
8
  import { OxPrompt } from '@operato/popup/ox-prompt.js';
8
9
  let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
9
10
  constructor() {
@@ -12,10 +13,62 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
12
13
  this.name = '';
13
14
  this.description = '';
14
15
  }
16
+ static { this.styles = [
17
+ ScrollbarStyles,
18
+ css `
19
+ :host {
20
+ display: flex;
21
+ padding: var(--spacing-large);
22
+
23
+ /* for narrow mode */
24
+ flex-direction: column;
25
+ }
26
+
27
+ div[template] {
28
+ display: grid;
29
+ position: relative;
30
+ border-top: 1px solid var(--md-sys-color-primary);
31
+ }
32
+
33
+ label {
34
+ font: var(--label-font);
35
+ color: var(--md-sys-color-on-surface);
36
+ text-transform: capitalize;
37
+ }
38
+
39
+ input,
40
+ select,
41
+ textarea {
42
+ border: var(--border-dim-color);
43
+ border-radius: var(--border-radius);
44
+ margin: var(--input-margin);
45
+ padding: var(--input-padding);
46
+ font: var(--input-font);
47
+ flex: 1 1 0%;
48
+ }
49
+
50
+ textarea {
51
+ min-height: 132px;
52
+ resize: none;
53
+ }
54
+
55
+ select:focus,
56
+ input:focus,
57
+ textarea:focus,
58
+ button {
59
+ outline: none;
60
+ }
61
+
62
+ button:hover {
63
+ border: var(--button-activ-border);
64
+ box-shadow: var(--button-active-box-shadow);
65
+ }
66
+ `
67
+ ]; }
15
68
  render() {
16
- var _a, _b;
17
- const name = this.name || ((_a = this.board) === null || _a === void 0 ? void 0 : _a.name) || '';
18
- const description = this.description || ((_b = this.board) === null || _b === void 0 ? void 0 : _b.description) || '';
69
+ const name = this.name || this.board?.name || '';
70
+ const description = this.description || this.board?.description || '';
71
+ const { domain } = getPathInfo(window.location.pathname);
19
72
  return html `
20
73
  <div template>
21
74
  <h3>
@@ -29,7 +82,7 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
29
82
  <label for="description">${i18next.t('field.description')}</label>
30
83
  <textarea
31
84
  id="description"
32
- .value=${this.description}
85
+ .value=${this.description || ''}
33
86
  @change=${e => (this.description = e.target.value)}
34
87
  ></textarea>
35
88
 
@@ -37,12 +90,10 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
37
90
  <select
38
91
  @change=${e => (this.visibility = e.target.value)}
39
92
  placeholder="choose visibility ..."
40
- .value=${this.visibility}
93
+ .value=${this.visibility || 'private'}
41
94
  >
42
95
  <option value="private">${i18next.t('label.visibility-private')}</option>
43
- ${window.location.pathname.startsWith('/domain/')
44
- ? html ` <option value="domain">${i18next.t('label.visibility-domain')}</option> `
45
- : nothing}
96
+ ${domain ? html ` <option value="domain">${i18next.t('label.visibility-domain')}</option> ` : nothing}
46
97
  <option value="public">${i18next.t('label.visibility-public')}</option>
47
98
  </select>
48
99
 
@@ -51,7 +102,6 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
51
102
  `;
52
103
  }
53
104
  async registerBoardAsTemplate() {
54
- var _a, _b;
55
105
  if (await OxPrompt.open({
56
106
  title: i18next.t('text.are_you_sure'),
57
107
  text: i18next.t('text.sure_to_x', { x: i18next.t('text.register-template') }),
@@ -62,8 +112,8 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
62
112
  this.dispatchEvent(new CustomEvent('register-template', {
63
113
  detail: {
64
114
  id,
65
- name: this.name || ((_a = this.board) === null || _a === void 0 ? void 0 : _a.name),
66
- description: this.description || ((_b = this.board) === null || _b === void 0 ? void 0 : _b.description),
115
+ name: this.name || this.board?.name,
116
+ description: this.description || this.board?.description,
67
117
  visibility: this.visibility
68
118
  },
69
119
  bubbles: true,
@@ -72,57 +122,6 @@ let BoardTemplateBuilder = class BoardTemplateBuilder extends LitElement {
72
122
  }
73
123
  }
74
124
  };
75
- BoardTemplateBuilder.styles = [
76
- ScrollbarStyles,
77
- css `
78
- :host {
79
- display: flex;
80
- padding: var(--spacing-large);
81
-
82
- /* for narrow mode */
83
- flex-direction: column;
84
- }
85
-
86
- div[template] {
87
- display: grid;
88
- position: relative;
89
- }
90
-
91
- label {
92
- font: var(--label-font);
93
- color: var(--label-color, var(--md-sys-color-on-surface));
94
- text-transform: capitalize;
95
- }
96
-
97
- input,
98
- select,
99
- textarea {
100
- border: var(--border-dim-color);
101
- border-radius: var(--border-radius);
102
- margin: var(--input-margin);
103
- padding: var(--input-padding);
104
- font: var(--input-font);
105
- flex: 1 1 0%;
106
- }
107
-
108
- textarea {
109
- min-height: 132px;
110
- resize: none;
111
- }
112
-
113
- select:focus,
114
- input:focus,
115
- textarea:focus,
116
- button {
117
- outline: none;
118
- }
119
-
120
- button:hover {
121
- border: var(--button-activ-border);
122
- box-shadow: var(--button-active-box-shadow);
123
- }
124
- `
125
- ];
126
125
  __decorate([
127
126
  property({ type: Object }),
128
127
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"board-template-builder.js","sourceRoot":"","sources":["../../client/viewparts/board-template-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/i18n/ox-i18n.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { i18next } from '@operato/i18n'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\n@customElement('board-template-builder')\nexport class BoardTemplateBuilder extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n padding: var(--spacing-large);\n\n /* for narrow mode */\n flex-direction: column;\n }\n\n div[template] {\n display: grid;\n position: relative;\n }\n\n label {\n font: var(--label-font);\n color: var(--label-color, var(--md-sys-color-on-surface));\n text-transform: capitalize;\n }\n\n input,\n select,\n textarea {\n border: var(--border-dim-color);\n border-radius: var(--border-radius);\n margin: var(--input-margin);\n padding: var(--input-padding);\n font: var(--input-font);\n flex: 1 1 0%;\n }\n\n textarea {\n min-height: 132px;\n resize: none;\n }\n\n select:focus,\n input:focus,\n textarea:focus,\n button {\n outline: none;\n }\n\n button:hover {\n border: var(--button-activ-border);\n box-shadow: var(--button-active-box-shadow);\n }\n `\n ]\n\n @property({ type: Object }) board?: { id: string; name: string; description: string }\n\n @state() visibility?: string = 'private'\n @state() name?: string = ''\n @state() description?: string = ''\n\n render() {\n const name = this.name || this.board?.name || ''\n const description = this.description || this.board?.description || ''\n\n return html`\n <div template>\n <h3>\n <ox-title-with-help topic=\"board-service/board-template\" msgid=\"label.board-template\"\n >board template</ox-title-with-help\n >\n </h3>\n <label for=\"name\">${i18next.t('field.name')}</label>\n <input id=\"name\" type=\"text\" .value=${name} @change=${e => (this.name = e.target.value)} />\n\n <label for=\"description\">${i18next.t('field.description')}</label>\n <textarea\n id=\"description\"\n .value=${this.description}\n @change=${e => (this.description = e.target.value)}\n ></textarea>\n\n <label>${i18next.t('field.visibility')}</label>\n <select\n @change=${e => (this.visibility = e.target.value)}\n placeholder=\"choose visibility ...\"\n .value=${this.visibility}\n >\n <option value=\"private\">${i18next.t('label.visibility-private')}</option>\n ${window.location.pathname.startsWith('/domain/')\n ? html` <option value=\"domain\">${i18next.t('label.visibility-domain')}</option> `\n : nothing}\n <option value=\"public\">${i18next.t('label.visibility-public')}</option>\n </select>\n\n <button @click=${this.registerBoardAsTemplate}>${i18next.t('text.register-template')}</button>\n </div>\n `\n }\n\n async registerBoardAsTemplate() {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.sure_to_x', { x: i18next.t('text.register-template') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const { id } = this.board || {}\n\n this.dispatchEvent(\n new CustomEvent('register-template', {\n detail: {\n id,\n name: this.name || this.board?.name,\n description: this.description || this.board?.description,\n visibility: this.visibility\n },\n bubbles: true,\n composed: true\n })\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"board-template-builder.js","sourceRoot":"","sources":["../../client/viewparts/board-template-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/i18n/ox-i18n.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { i18next } from '@operato/i18n'\nimport { getPathInfo } from '@operato/utils'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\n@customElement('board-template-builder')\nexport class BoardTemplateBuilder extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n padding: var(--spacing-large);\n\n /* for narrow mode */\n flex-direction: column;\n }\n\n div[template] {\n display: grid;\n position: relative;\n border-top: 1px solid var(--md-sys-color-primary);\n }\n\n label {\n font: var(--label-font);\n color: var(--md-sys-color-on-surface);\n text-transform: capitalize;\n }\n\n input,\n select,\n textarea {\n border: var(--border-dim-color);\n border-radius: var(--border-radius);\n margin: var(--input-margin);\n padding: var(--input-padding);\n font: var(--input-font);\n flex: 1 1 0%;\n }\n\n textarea {\n min-height: 132px;\n resize: none;\n }\n\n select:focus,\n input:focus,\n textarea:focus,\n button {\n outline: none;\n }\n\n button:hover {\n border: var(--button-activ-border);\n box-shadow: var(--button-active-box-shadow);\n }\n `\n ]\n\n @property({ type: Object }) board?: { id: string; name: string; description: string }\n\n @state() visibility?: string = 'private'\n @state() name?: string = ''\n @state() description?: string = ''\n\n render() {\n const name = this.name || this.board?.name || ''\n const description = this.description || this.board?.description || ''\n const { domain } = getPathInfo(window.location.pathname)\n\n return html`\n <div template>\n <h3>\n <ox-title-with-help topic=\"board-service/board-template\" msgid=\"label.board-template\"\n >board template</ox-title-with-help\n >\n </h3>\n <label for=\"name\">${i18next.t('field.name')}</label>\n <input id=\"name\" type=\"text\" .value=${name} @change=${e => (this.name = e.target.value)} />\n\n <label for=\"description\">${i18next.t('field.description')}</label>\n <textarea\n id=\"description\"\n .value=${this.description || ''}\n @change=${e => (this.description = e.target.value)}\n ></textarea>\n\n <label>${i18next.t('field.visibility')}</label>\n <select\n @change=${e => (this.visibility = e.target.value)}\n placeholder=\"choose visibility ...\"\n .value=${this.visibility || 'private'}\n >\n <option value=\"private\">${i18next.t('label.visibility-private')}</option>\n ${domain ? html` <option value=\"domain\">${i18next.t('label.visibility-domain')}</option> ` : nothing}\n <option value=\"public\">${i18next.t('label.visibility-public')}</option>\n </select>\n\n <button @click=${this.registerBoardAsTemplate}>${i18next.t('text.register-template')}</button>\n </div>\n `\n }\n\n async registerBoardAsTemplate() {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.sure_to_x', { x: i18next.t('text.register-template') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const { id } = this.board || {}\n\n this.dispatchEvent(\n new CustomEvent('register-template', {\n detail: {\n id,\n name: this.name || this.board?.name,\n description: this.description || this.board?.description,\n visibility: this.visibility\n },\n bubbles: true,\n composed: true\n })\n )\n }\n }\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { LitElement } from 'lit';
2
+ declare const BoardTemplateInfo_base: (new (...args: any[]) => {
3
+ _storeUnsubscribe: import("redux").Unsubscribe;
4
+ connectedCallback(): void;
5
+ disconnectedCallback(): void;
6
+ stateChanged(_state: unknown): void;
7
+ readonly isConnected: boolean;
8
+ }) & typeof LitElement;
9
+ export declare class BoardTemplateInfo extends BoardTemplateInfo_base {
10
+ static styles: import("lit").CSSResult[];
11
+ constructor();
12
+ template: any;
13
+ username: string;
14
+ form: HTMLFormElement;
15
+ stateChanged(state: any): void;
16
+ get isMine(): boolean;
17
+ render(): import("lit-html").TemplateResult<1>;
18
+ onUpdate(): Promise<void>;
19
+ onDelete(): Promise<void>;
20
+ notify(level: any, message: any, ex?: Error | any): void;
21
+ }
22
+ export {};
@@ -0,0 +1,248 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { html, css, LitElement } from 'lit';
3
+ import { customElement, property, query, state } from 'lit/decorators.js';
4
+ import gql from 'graphql-tag';
5
+ import { connect } from 'pwa-helpers/connect-mixin';
6
+ import { store } from '@operato/shell';
7
+ import { client } from '@operato/graphql';
8
+ import { i18next } from '@operato/i18n';
9
+ import { OxPrompt } from '@operato/popup';
10
+ import { ScrollbarStyles } from '@operato/styles';
11
+ let BoardTemplateInfo = class BoardTemplateInfo extends connect(store)(LitElement) {
12
+ static { this.styles = [
13
+ ScrollbarStyles,
14
+ css `
15
+ :host {
16
+ height: 100%;
17
+ min-width: 360px;
18
+
19
+ display: flex;
20
+ flex-direction: column;
21
+ position: relative;
22
+ background-color: var(--md-sys-color-surface);
23
+ }
24
+
25
+ form {
26
+ display: grid;
27
+ grid-template-columns: repeat(12, 1fr);
28
+ grid-gap: var(--form-grid-gap);
29
+ grid-auto-rows: minmax(24px, auto);
30
+ padding: var(--padding-wide);
31
+ align-items: center;
32
+
33
+ --form-grid-gap: 2px 0;
34
+ --input-field-padding: var(--padding-default);
35
+ --legend-padding: var(--padding-default) 0 var(--padding-narrow) 0;
36
+ --mdc-button-horizontal-padding: var(--padding-default);
37
+ }
38
+
39
+ [buttons] {
40
+ grid-column: span 12;
41
+ padding: var(--padding-default) 0;
42
+ text-align: right;
43
+ }
44
+
45
+ [buttons] * {
46
+ margin: 0 0 0 var(--margin-narrow);
47
+ }
48
+
49
+ [danger] {
50
+ --md-assist-chip-elevated-container-color: var(--md-sys-color-error);
51
+ --md-assist-chip-label-text-color: var(--md-sys-color-on-error);
52
+ --md-assist-chip-leading-icon-color: var(--md-sys-color-on-error);
53
+ }
54
+
55
+ fieldset {
56
+ display: contents;
57
+ }
58
+ legend {
59
+ grid-column: span 12;
60
+ padding: var(--legend-padding);
61
+ font: var(--legend-font);
62
+ color: var(--primary-color);
63
+ text-transform: capitalize;
64
+ }
65
+ label {
66
+ grid-column: span 12;
67
+ text-transform: capitalize;
68
+ color: var(--label-color);
69
+ font: var(--label-font);
70
+ }
71
+
72
+ input,
73
+ textarea,
74
+ select {
75
+ grid-column: span 12;
76
+ border: 1px solid #ccc;
77
+ border-radius: 4px;
78
+ padding: 6px 8px;
79
+ font-size: 1rem;
80
+ margin-bottom: 8px;
81
+ }
82
+ textarea {
83
+ min-height: 100px;
84
+ resize: none;
85
+ }
86
+ div[buttons] {
87
+ grid-column: span 12;
88
+ text-align: right;
89
+ margin-top: 12px;
90
+ }
91
+ button {
92
+ margin-left: 8px;
93
+ padding: 6px 16px;
94
+ border-radius: 4px;
95
+ border: none;
96
+ background: var(--md-sys-color-tertiary, #1976d2);
97
+ color: #fff;
98
+ font-weight: 500;
99
+ cursor: pointer;
100
+ }
101
+ button[disabled] {
102
+ background: #ccc;
103
+ cursor: not-allowed;
104
+ }
105
+
106
+ @media screen and (max-width: 460px) {
107
+ :host {
108
+ width: 100vw;
109
+ }
110
+ }
111
+ `
112
+ ]; }
113
+ constructor() {
114
+ super();
115
+ this.username = '';
116
+ this.template = {
117
+ name: '',
118
+ description: '',
119
+ visibility: 'private'
120
+ };
121
+ }
122
+ stateChanged(state) {
123
+ this.username = state.auth?.user?.username || '';
124
+ }
125
+ get isMine() {
126
+ return this.template?.creator?.username === this.username;
127
+ }
128
+ render() {
129
+ return html `
130
+ <form>
131
+ <fieldset>
132
+ <legend>${i18next.t('label.board-template')}</legend>
133
+ <label>${i18next.t('field.name')}</label>
134
+ <input
135
+ name="name"
136
+ .value=${this.template.name}
137
+ @input=${e => (this.template.name = e.target.value)}
138
+ ?disabled=${!this.isMine}
139
+ />
140
+ <label>${i18next.t('field.description')}</label>
141
+ <textarea
142
+ name="description"
143
+ .value=${this.template.description}
144
+ @input=${e => (this.template.description = e.target.value)}
145
+ ?disabled=${!this.isMine}
146
+ ></textarea>
147
+ <label>${i18next.t('field.visibility')}</label>
148
+ <select
149
+ name="visibility"
150
+ .value=${this.template.visibility}
151
+ @change=${e => (this.template.visibility = e.target.value)}
152
+ ?disabled=${!this.isMine}
153
+ >
154
+ <option value="private">${i18next.t('label.visibility-private')}</option>
155
+ <option value="domain">${i18next.t('label.visibility-domain')}</option>
156
+ <option value="public">${i18next.t('label.visibility-public')}</option>
157
+ </select>
158
+ <div buttons>
159
+ ${this.isMine
160
+ ? html `
161
+ <button type="button" @click=${this.onUpdate}>${i18next.t('button.save')}</button>
162
+ <button type="button" @click=${this.onDelete}>${i18next.t('button.delete')}</button>
163
+ `
164
+ : ''}
165
+ </div>
166
+ </fieldset>
167
+ </form>
168
+ `;
169
+ }
170
+ async onUpdate() {
171
+ const formData = new FormData(this.form);
172
+ const patch = {};
173
+ for (const [key, value] of formData.entries()) {
174
+ patch[key] = value;
175
+ }
176
+ try {
177
+ await client.mutate({
178
+ mutation: gql `
179
+ mutation ($id: String!, $patch: BoardTemplatePatch!) {
180
+ updateBoardTemplate(id: $id, patch: $patch) {
181
+ id
182
+ }
183
+ }
184
+ `,
185
+ variables: {
186
+ id: this.template.id,
187
+ patch
188
+ }
189
+ });
190
+ this.notify('info', i18next.t('text.board-template updated'));
191
+ this.dispatchEvent(new CustomEvent('updated', { bubbles: true, composed: true }));
192
+ }
193
+ catch (ex) {
194
+ this.notify('error', ex, ex);
195
+ }
196
+ }
197
+ async onDelete() {
198
+ if (await OxPrompt.open({
199
+ title: i18next.t('text.are_you_sure'),
200
+ text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
201
+ confirmButton: { text: i18next.t('button.confirm') },
202
+ cancelButton: { text: i18next.t('button.cancel') }
203
+ })) {
204
+ try {
205
+ await client.mutate({
206
+ mutation: gql `
207
+ mutation ($id: String!) {
208
+ deleteBoardTemplate(id: $id)
209
+ }
210
+ `,
211
+ variables: { id: this.template.id }
212
+ });
213
+ this.notify('info', i18next.t('text.board-template deleted'));
214
+ this.dispatchEvent(new CustomEvent('deleted', { bubbles: true, composed: true }));
215
+ }
216
+ catch (ex) {
217
+ this.notify('error', ex, ex);
218
+ }
219
+ }
220
+ }
221
+ notify(level, message, ex) {
222
+ document.dispatchEvent(new CustomEvent('notify', {
223
+ detail: {
224
+ level,
225
+ message,
226
+ ex
227
+ }
228
+ }));
229
+ }
230
+ };
231
+ __decorate([
232
+ property({ type: Object }),
233
+ __metadata("design:type", Object)
234
+ ], BoardTemplateInfo.prototype, "template", void 0);
235
+ __decorate([
236
+ state(),
237
+ __metadata("design:type", String)
238
+ ], BoardTemplateInfo.prototype, "username", void 0);
239
+ __decorate([
240
+ query('form'),
241
+ __metadata("design:type", HTMLFormElement)
242
+ ], BoardTemplateInfo.prototype, "form", void 0);
243
+ BoardTemplateInfo = __decorate([
244
+ customElement('board-template-info'),
245
+ __metadata("design:paramtypes", [])
246
+ ], BoardTemplateInfo);
247
+ export { BoardTemplateInfo };
248
+ //# sourceMappingURL=board-template-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-template-info.js","sourceRoot":"","sources":["../../client/viewparts/board-template-info.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, css, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport gql from 'graphql-tag'\nimport { connect } from 'pwa-helpers/connect-mixin'\n\nimport { store } from '@operato/shell'\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { OxPrompt } from '@operato/popup'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('board-template-info')\nexport class BoardTemplateInfo extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n height: 100%;\n min-width: 360px;\n\n display: flex;\n flex-direction: column;\n position: relative;\n background-color: var(--md-sys-color-surface);\n }\n\n form {\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n grid-gap: var(--form-grid-gap);\n grid-auto-rows: minmax(24px, auto);\n padding: var(--padding-wide);\n align-items: center;\n\n --form-grid-gap: 2px 0;\n --input-field-padding: var(--padding-default);\n --legend-padding: var(--padding-default) 0 var(--padding-narrow) 0;\n --mdc-button-horizontal-padding: var(--padding-default);\n }\n\n [buttons] {\n grid-column: span 12;\n padding: var(--padding-default) 0;\n text-align: right;\n }\n\n [buttons] * {\n margin: 0 0 0 var(--margin-narrow);\n }\n\n [danger] {\n --md-assist-chip-elevated-container-color: var(--md-sys-color-error);\n --md-assist-chip-label-text-color: var(--md-sys-color-on-error);\n --md-assist-chip-leading-icon-color: var(--md-sys-color-on-error);\n }\n\n fieldset {\n display: contents;\n }\n legend {\n grid-column: span 12;\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--primary-color);\n text-transform: capitalize;\n }\n label {\n grid-column: span 12;\n text-transform: capitalize;\n color: var(--label-color);\n font: var(--label-font);\n }\n\n input,\n textarea,\n select {\n grid-column: span 12;\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 6px 8px;\n font-size: 1rem;\n margin-bottom: 8px;\n }\n textarea {\n min-height: 100px;\n resize: none;\n }\n div[buttons] {\n grid-column: span 12;\n text-align: right;\n margin-top: 12px;\n }\n button {\n margin-left: 8px;\n padding: 6px 16px;\n border-radius: 4px;\n border: none;\n background: var(--md-sys-color-tertiary, #1976d2);\n color: #fff;\n font-weight: 500;\n cursor: pointer;\n }\n button[disabled] {\n background: #ccc;\n cursor: not-allowed;\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n constructor() {\n super()\n this.template = {\n name: '',\n description: '',\n visibility: 'private'\n }\n }\n\n @property({ type: Object }) template: any\n @state() username: string = ''\n\n @query('form') form!: HTMLFormElement\n\n stateChanged(state: any) {\n this.username = state.auth?.user?.username || ''\n }\n\n get isMine() {\n return this.template?.creator?.username === this.username\n }\n\n render() {\n return html`\n <form>\n <fieldset>\n <legend>${i18next.t('label.board-template')}</legend>\n <label>${i18next.t('field.name')}</label>\n <input\n name=\"name\"\n .value=${this.template.name}\n @input=${e => (this.template.name = e.target.value)}\n ?disabled=${!this.isMine}\n />\n <label>${i18next.t('field.description')}</label>\n <textarea\n name=\"description\"\n .value=${this.template.description}\n @input=${e => (this.template.description = e.target.value)}\n ?disabled=${!this.isMine}\n ></textarea>\n <label>${i18next.t('field.visibility')}</label>\n <select\n name=\"visibility\"\n .value=${this.template.visibility}\n @change=${e => (this.template.visibility = e.target.value)}\n ?disabled=${!this.isMine}\n >\n <option value=\"private\">${i18next.t('label.visibility-private')}</option>\n <option value=\"domain\">${i18next.t('label.visibility-domain')}</option>\n <option value=\"public\">${i18next.t('label.visibility-public')}</option>\n </select>\n <div buttons>\n ${this.isMine\n ? html`\n <button type=\"button\" @click=${this.onUpdate}>${i18next.t('button.save')}</button>\n <button type=\"button\" @click=${this.onDelete}>${i18next.t('button.delete')}</button>\n `\n : ''}\n </div>\n </fieldset>\n </form>\n `\n }\n\n async onUpdate() {\n const formData = new FormData(this.form)\n const patch: any = {}\n for (const [key, value] of formData.entries()) {\n patch[key] = value\n }\n\n try {\n await client.mutate({\n mutation: gql`\n mutation ($id: String!, $patch: BoardTemplatePatch!) {\n updateBoardTemplate(id: $id, patch: $patch) {\n id\n }\n }\n `,\n variables: {\n id: this.template.id,\n patch\n }\n })\n this.notify('info', i18next.t('text.board-template updated'))\n this.dispatchEvent(new CustomEvent('updated', { bubbles: true, composed: true }))\n } catch (ex) {\n this.notify('error', ex, ex)\n }\n }\n\n async onDelete() {\n if (\n await OxPrompt.open({\n title: i18next.t('text.are_you_sure'),\n text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n try {\n await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteBoardTemplate(id: $id)\n }\n `,\n variables: { id: this.template.id }\n })\n this.notify('info', i18next.t('text.board-template deleted'))\n this.dispatchEvent(new CustomEvent('deleted', { bubbles: true, composed: true }))\n } catch (ex) {\n this.notify('error', ex, ex)\n }\n }\n }\n\n notify(level, message, ex?: Error | any) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level,\n message,\n ex\n }\n })\n )\n }\n}\n"]}