@things-factory/board-ui 6.1.195 → 6.1.196

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 (45) hide show
  1. package/client/board-list/board-tile-list.js +3 -3
  2. package/client/board-list/play-group-bar.ts +143 -0
  3. package/client/data-grist/board-renderer.ts +2 -1
  4. package/client/pages/board-list-page.js +2 -2
  5. package/client/pages/play-list-page.js +5 -5
  6. package/client/viewparts/board-info-link.ts +8 -2
  7. package/client/viewparts/board-info.ts +4 -4
  8. package/client/viewparts/link-builder.ts +16 -2
  9. package/client/viewparts/play-group-info-link.ts +8 -2
  10. package/client/viewparts/play-group-info.ts +3 -3
  11. package/dist-client/board-list/board-tile-list.d.ts +1 -1
  12. package/dist-client/board-list/board-tile-list.js +3 -3
  13. package/dist-client/board-list/board-tile-list.js.map +1 -1
  14. package/dist-client/board-list/play-group-bar.d.ts +14 -9
  15. package/dist-client/board-list/play-group-bar.js +87 -73
  16. package/dist-client/board-list/play-group-bar.js.map +1 -1
  17. package/dist-client/data-grist/board-renderer.js +2 -1
  18. package/dist-client/data-grist/board-renderer.js.map +1 -1
  19. package/dist-client/pages/board-list-page.js +2 -2
  20. package/dist-client/pages/board-list-page.js.map +1 -1
  21. package/dist-client/pages/play-list-page.js +5 -5
  22. package/dist-client/pages/play-list-page.js.map +1 -1
  23. package/dist-client/tsconfig.tsbuildinfo +1 -1
  24. package/dist-client/viewparts/board-info-link.d.ts +4 -1
  25. package/dist-client/viewparts/board-info-link.js +11 -4
  26. package/dist-client/viewparts/board-info-link.js.map +1 -1
  27. package/dist-client/viewparts/board-info.d.ts +4 -1
  28. package/dist-client/viewparts/board-info.js +7 -6
  29. package/dist-client/viewparts/board-info.js.map +1 -1
  30. package/dist-client/viewparts/link-builder.d.ts +3 -1
  31. package/dist-client/viewparts/link-builder.js +23 -3
  32. package/dist-client/viewparts/link-builder.js.map +1 -1
  33. package/dist-client/viewparts/play-group-info-link.d.ts +4 -1
  34. package/dist-client/viewparts/play-group-info-link.js +11 -4
  35. package/dist-client/viewparts/play-group-info-link.js.map +1 -1
  36. package/dist-client/viewparts/play-group-info.d.ts +4 -1
  37. package/dist-client/viewparts/play-group-info.js +6 -5
  38. package/dist-client/viewparts/play-group-info.js.map +1 -1
  39. package/package.json +2 -2
  40. package/translations/en.json +1 -0
  41. package/translations/ja.json +1 -0
  42. package/translations/ko.json +1 -0
  43. package/translations/ms.json +1 -0
  44. package/translations/zh.json +1 -0
  45. package/client/board-list/play-group-bar.js +0 -147
@@ -206,7 +206,7 @@ export default class BoardTileList extends LitElement {
206
206
  iconBtn
207
207
  info
208
208
  @click=${e => {
209
- this.infoBoard(board.id)
209
+ this.infoBoard(board)
210
210
  e.preventDefault()
211
211
  }}
212
212
  >info</mwc-icon
@@ -237,10 +237,10 @@ export default class BoardTileList extends LitElement {
237
237
  )
238
238
  }
239
239
 
240
- infoBoard(boardId) {
240
+ infoBoard(board) {
241
241
  this.dispatchEvent(
242
242
  new CustomEvent('info-board', {
243
- detail: boardId
243
+ detail: board
244
244
  })
245
245
  )
246
246
  }
@@ -0,0 +1,143 @@
1
+ import '@material/mwc-icon'
2
+
3
+ import { css, html, LitElement } from 'lit'
4
+ import { customElement, property, state } from 'lit/decorators.js'
5
+ import ScrollBooster from 'scrollbooster'
6
+
7
+ import { longpressable } from '@things-factory/utils'
8
+
9
+ @customElement('play-group-bar')
10
+ export default class PlayGroupBar extends LitElement {
11
+ static styles = [
12
+ css`
13
+ :host {
14
+ background-color: var(--group-bar-background-color);
15
+
16
+ overflow-x: hidden;
17
+ }
18
+
19
+ ul {
20
+ display: flex;
21
+ list-style: none;
22
+ margin: 0;
23
+ padding: 0;
24
+ white-space: nowrap;
25
+ }
26
+
27
+ li {
28
+ display: inline-block;
29
+ padding: 0px 3px;
30
+
31
+ border-bottom: var(--group-bar-line);
32
+ }
33
+
34
+ li[active] {
35
+ border-color: var(--group-bar-active-line-color);
36
+ }
37
+
38
+ li a {
39
+ display: block;
40
+ padding: 5px 4px 1px 4px;
41
+ text-decoration: none;
42
+ font: var(--group-bar-textbutton);
43
+ color: rgba(255, 255, 255, 0.8);
44
+ }
45
+
46
+ li[active] a {
47
+ font: var(--group-bar-textbutton-active);
48
+ color: rgba(255, 255, 255, 1);
49
+ }
50
+
51
+ li[padding] {
52
+ flex: 1;
53
+ }
54
+
55
+ li[add] {
56
+ padding: 5px 4px 1px 4px;
57
+ }
58
+
59
+ li[add] * {
60
+ color: rgba(255, 255, 255, 0.5);
61
+ }
62
+
63
+ mwc-icon {
64
+ vertical-align: middle;
65
+ }
66
+ `
67
+ ]
68
+
69
+ @property({ type: Array }) groups: { id: string; name: string }[] = []
70
+ @property({ type: String }) groupId: string = ''
71
+ @property({ type: String, attribute: 'target-page' }) targetPage: string = ''
72
+
73
+ private __sb?: ScrollBooster
74
+
75
+ render() {
76
+ return html`
77
+ <ul>
78
+ ${(this.groups || []).map(
79
+ group => html`
80
+ <li ?active=${this.groupId === group.id} @long-press=${e => this._infoGroup(group)}>
81
+ <a href=${`${this.targetPage}/${group.id}`}>${group.name}</a>
82
+ </li>
83
+ `
84
+ )}
85
+
86
+ <li padding></li>
87
+
88
+ <li add>
89
+ <mwc-icon @click=${e => this._infoGroup()}>add</mwc-icon>
90
+ </li>
91
+ </ul>
92
+ `
93
+ }
94
+
95
+ _infoGroup(group?: { id: string; name: string }) {
96
+ this.dispatchEvent(
97
+ new CustomEvent('info-play-group', {
98
+ detail: group
99
+ })
100
+ )
101
+ }
102
+
103
+ _onWheelEvent(e) {
104
+ var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail))
105
+ this.scrollLeft -= delta * 40
106
+
107
+ e.preventDefault()
108
+ }
109
+
110
+ _onClickAdd(e) {
111
+ // TODO Implements
112
+ }
113
+
114
+ updated(change) {
115
+ if (change.has('groups')) {
116
+ /* groups가 바뀔 때마다, contents의 폭이 달라지므로, 다시 폭을 계산해준다. */
117
+ this.__sb && this.__sb.updateMetrics()
118
+ }
119
+
120
+ if (change.has('groupId')) {
121
+ var active = this.renderRoot.querySelector('li[active]')
122
+ active && active.scrollIntoView()
123
+ }
124
+ }
125
+
126
+ firstUpdated() {
127
+ var scrollTarget = this.renderRoot.querySelector('ul')
128
+
129
+ /* long-press */
130
+ longpressable(scrollTarget)
131
+
132
+ scrollTarget!.addEventListener('mousewheel', this._onWheelEvent.bind(this), false)
133
+
134
+ this.__sb = new ScrollBooster({
135
+ viewport: this,
136
+ content: scrollTarget,
137
+ mode: 'x',
138
+ onUpdate: data => {
139
+ this.scrollLeft = data.position.x
140
+ }
141
+ })
142
+ }
143
+ }
@@ -25,7 +25,8 @@ class BoardRendererElement extends LitElement {
25
25
  static styles = [
26
26
  css`
27
27
  :host {
28
- display: block;
28
+ display: flex;
29
+ justify-content: center;
29
30
  position: relative;
30
31
 
31
32
  max-width: var(--board-renderer-max-width);
@@ -281,11 +281,11 @@ class BoardListPage extends localize(i18next)(connect(store)(InfiniteScrollable(
281
281
  })
282
282
  }
283
283
 
284
- async onInfoBoard(boardId) {
284
+ async onInfoBoard(board) {
285
285
  openOverlay('viewpart-info', {
286
286
  template: html`
287
287
  <board-info
288
- .boardId=${boardId}
288
+ .board=${board}
289
289
  .groupId=${this.groupId}
290
290
  ?enable-modeller=${this.boardPermissions?.includes('Modeller')}
291
291
  @clone-board=${e => this.onCloneBoard(e.detail)}
@@ -81,7 +81,7 @@ class PlayListPage extends localize(i18next)(connect(store)(PageView)) {
81
81
  <play-group-bar
82
82
  .groups=${this.groups}
83
83
  .groupId=${this.groupId}
84
- targetPage="play-list"
84
+ target-page="play-list"
85
85
  @info-play-group=${e => this.onInfoPlayGroup(e.detail)}
86
86
  ></play-group-bar>
87
87
 
@@ -213,11 +213,11 @@ class PlayListPage extends localize(i18next)(connect(store)(PageView)) {
213
213
  }
214
214
  }
215
215
 
216
- async onInfoBoard(boardId) {
216
+ async onInfoBoard(board) {
217
217
  openOverlay('viewpart-info', {
218
218
  template: html`
219
219
  <board-info
220
- .boardId=${boardId}
220
+ .board=${board}
221
221
  .groupId=${this.groupId}
222
222
  @update-board=${e => this.onUpdateBoard(e.detail)}
223
223
  @delete-board=${e => this.onDeleteBoard(e.detail)}
@@ -228,11 +228,11 @@ class PlayListPage extends localize(i18next)(connect(store)(PageView)) {
228
228
  })
229
229
  }
230
230
 
231
- async onInfoPlayGroup(groupId) {
231
+ async onInfoPlayGroup(group) {
232
232
  openOverlay('viewpart-info', {
233
233
  template: html`
234
234
  <play-group-info
235
- .playGroupId=${groupId}
235
+ .playGroup=${group}
236
236
  @update-play-group=${e => this.onUpdatePlayGroup(e.detail)}
237
237
  @delete-play-group=${e => this.onDeletePlayGroup(e.detail)}
238
238
  @create-play-group=${e => this.onCreatePlayGroup(e.detail)}
@@ -29,9 +29,15 @@ export class BoardInfoLink extends LitElement {
29
29
  `
30
30
  ]
31
31
 
32
- @property({ type: String }) boardId?: string
32
+ @property({ type: Object }) board?: { id: string; name: string }
33
33
 
34
34
  render() {
35
- return html` <link-builder command="headless-full" target=${this.boardId || ''}></link-builder> `
35
+ return html`
36
+ <link-builder
37
+ command="headless-full"
38
+ target-id=${this.board?.id || ''}
39
+ target-name=${this.board?.name || ''}
40
+ ></link-builder>
41
+ `
36
42
  }
37
43
  }
@@ -58,7 +58,7 @@ export class BoardInfo extends LitElement {
58
58
  `
59
59
  ]
60
60
 
61
- @property({ type: String }) boardId?: string
61
+ @property({ type: Object }) board?: { id: string; name: string }
62
62
  @property({ type: Boolean, attribute: 'enable-modeller' }) enableModeller?: boolean
63
63
 
64
64
  @state() tab: string = 'basic'
@@ -73,12 +73,12 @@ export class BoardInfo extends LitElement {
73
73
  <div content>
74
74
  ${this.tab == 'basic'
75
75
  ? html`<board-basic-info
76
- boardId=${ifDefined(this.boardId)}
76
+ boardId=${ifDefined(this.board?.id)}
77
77
  ?enable-modeller=${this.enableModeller}
78
78
  ></board-basic-info>`
79
79
  : this.tab == 'versions'
80
- ? html`<board-versions boardId=${ifDefined(this.boardId)}></board-versions>`
81
- : html`<board-info-link boardId=${ifDefined(this.boardId)}></board-info-link>`}
80
+ ? html`<board-versions boardId=${ifDefined(this.board?.id)}></board-versions>`
81
+ : html`<board-info-link .board=${this.board}></board-info-link>`}
82
82
  </div>
83
83
  `
84
84
  }
@@ -83,13 +83,15 @@ export class LinkBuilder extends LitElement {
83
83
  ]
84
84
 
85
85
  @property({ type: String, attribute: true }) command?: string
86
- @property({ type: String, attribute: true }) target?: string
86
+ @property({ type: String, attribute: 'target-id' }) targetId?: string
87
+ @property({ type: String, attribute: 'target-name' }) targetName?: string
87
88
 
88
89
  @state() link?: string
89
90
  @state() keyvalues: any
90
91
  @state() appliances: any[] = []
91
92
  @state() targetAppliance: any
92
93
  @state() key?: string
94
+ @state() byname: boolean = false
93
95
 
94
96
  private clipboard?: Clipboard
95
97
 
@@ -132,6 +134,15 @@ export class LinkBuilder extends LitElement {
132
134
  <span warn>To add an access token, you need to be a domain owner or have security query permissions.</span>
133
135
  `
134
136
  )}
137
+
138
+ <div>
139
+ <input
140
+ type="checkbox"
141
+ id="by-name"
142
+ @change=${(e: Event) => (this.byname = !!(e.target as HTMLInputElement)?.checked)}
143
+ />
144
+ <label for="by-name">${i18next.t('label.headless-link by-name')}</label>
145
+ </div>
135
146
  </div>
136
147
  `
137
148
  }
@@ -147,8 +158,11 @@ export class LinkBuilder extends LitElement {
147
158
  }
148
159
 
149
160
  updated(changes: PropertyValues<this>) {
161
+ const command = (this.command || '') + (this.byname ? '-by-name' : '')
162
+ const target = encodeURIComponent((this.byname ? this.targetName : this.targetId) || '')
163
+
150
164
  const baseUrl = document.querySelector('base')?.href
151
- const fullUrl = new URL(this.command + '/' + this.target, baseUrl).href
165
+ const fullUrl = new URL(command + '/' + target, baseUrl).href
152
166
 
153
167
  const query = {
154
168
  ...(this.key ? { [this.key]: JSON.stringify(this.keyvalues) } : this.keyvalues),
@@ -32,9 +32,15 @@ export class PlayGroupInfoLink extends LitElement {
32
32
  `
33
33
  ]
34
34
 
35
- @property({ type: String }) playGroupId?: string
35
+ @property({ type: Object }) playGroup?: { id: string; name: string }
36
36
 
37
37
  render() {
38
- return html` <link-builder command="headless-player" target=${this.playGroupId}></link-builder> `
38
+ return html`
39
+ <link-builder
40
+ command="headless-player"
41
+ target-id=${this.playGroup?.id || ''}
42
+ target-name=${this.playGroup?.name || ''}
43
+ ></link-builder>
44
+ `
39
45
  }
40
46
  }
@@ -57,7 +57,7 @@ export class PlayGroupInfo extends LitElement {
57
57
  `
58
58
  ]
59
59
 
60
- @property({ type: String }) playGroupId?: string
60
+ @property({ type: Object }) playGroup?: { id: string; name: string }
61
61
 
62
62
  @state() tab: string = 'basic'
63
63
 
@@ -69,8 +69,8 @@ export class PlayGroupInfo extends LitElement {
69
69
  </div>
70
70
  <div content>
71
71
  ${this.tab == 'basic'
72
- ? html`<play-group-info-basic playGroupId=${ifDefined(this.playGroupId)}></play-group-info-basic>`
73
- : html`<play-group-info-link playGroupId=${ifDefined(this.playGroupId)}></play-group-info-link>`}
72
+ ? html`<play-group-info-basic playGroupId=${ifDefined(this.playGroup?.id)}></play-group-info-basic>`
73
+ : html`<play-group-info-link .playGroup=${this.playGroup}></play-group-info-link>`}
74
74
  </div>
75
75
  `
76
76
  }
@@ -19,7 +19,7 @@ export default class BoardTileList extends LitElement {
19
19
  render(): import("lit-html").TemplateResult<1>;
20
20
  updated(changes: any): void;
21
21
  onCreateBoard(e: any): void;
22
- infoBoard(boardId: any): void;
22
+ infoBoard(board: any): void;
23
23
  removeFavorite(boardId: any): Promise<void>;
24
24
  addFavorite(boardId: any): Promise<void>;
25
25
  refreshFavorites(): Promise<void>;
@@ -185,7 +185,7 @@ export default class BoardTileList extends LitElement {
185
185
  iconBtn
186
186
  info
187
187
  @click=${e => {
188
- this.infoBoard(board.id);
188
+ this.infoBoard(board);
189
189
  e.preventDefault();
190
190
  }}
191
191
  >info</mwc-icon
@@ -209,9 +209,9 @@ export default class BoardTileList extends LitElement {
209
209
  detail: e.detail
210
210
  }));
211
211
  }
212
- infoBoard(boardId) {
212
+ infoBoard(board) {
213
213
  this.dispatchEvent(new CustomEvent('info-board', {
214
- detail: boardId
214
+ detail: board
215
215
  }));
216
216
  }
217
217
  async removeFavorite(boardId) {
@@ -1 +1 @@
1
- {"version":3,"file":"board-tile-list.js","sourceRoot":"","sources":["../../client/board-list/board-tile-list.js"],"names":[],"mappings":"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","sourcesContent":["import '@operato/board/ox-board-creation-card.js'\nimport '@material/mwc-icon'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { keyed } from 'lit/directives/keyed.js'\n\nimport { client } from '@things-factory/shell'\n\nexport default class BoardTileList extends LitElement {\n static get styles() {\n return [\n css`\n :host {\n overflow: auto;\n padding: var(--popup-content-padding);\n display: grid;\n\n grid-template-columns: var(--card-list-template);\n grid-auto-rows: var(--card-list-rows-height);\n grid-gap: 20px;\n --mdc-button-horizontal-padding: var(--padding-default);\n }\n\n [card] {\n position: relative;\n align-items: center;\n overflow: hidden;\n }\n\n [card][create] {\n overflow: visible;\n background-color: initial;\n }\n\n [card] > a {\n display: flex;\n }\n\n [card]:hover {\n cursor: pointer;\n }\n\n [name] {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n margin-top: var(--margin-narrow);\n width: calc(100% - 45px);\n color: var(--primary-text-color);\n font-weight: bolder;\n font-size: var(--fontsize-small);\n }\n\n img {\n display: block;\n\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n }\n\n mwc-icon[iconBtn] {\n float: right;\n margin-top: -20px;\n margin-left: 2px;\n color: var(--board-list-star-color);\n font-size: 1.4em;\n }\n mwc-icon[info] {\n color: var(--primary-color);\n }\n\n mwc-icon[iconBtn][favored],\n mwc-icon[info]:hover {\n color: var(--board-list-star-active-color);\n }\n\n a {\n display: block;\n border-radius: var(--card-list-border-radius);\n border: var(--border-dark-color);\n box-sizing: border-box;\n background-color: var(--card-list-background-color);\n margin: 0px;\n height: calc(100% - 25px);\n }\n\n :host > *:hover [info] {\n opacity: 1;\n -webkit-transition: opacity 0.8s;\n -moz-transition: opacity 0.8s;\n -o-transition: opacity 0.8s;\n transition: opacity 0.8s;\n }\n\n [draggable='true'] {\n cursor: grab;\n }\n\n @media screen and (max-width: 800px), screen and (max-height: 600px) {\n ox-board-creation-card {\n display: none;\n }\n }\n `\n ]\n }\n\n static get properties() {\n return {\n creatable: {\n type: Boolean,\n attribute: 'creatable'\n },\n boards: Array,\n favorites: Array,\n groups: Array,\n group: String,\n reorderable: {\n type: Boolean,\n attribute: 'reorderable'\n }\n }\n }\n\n draggingItem\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.reorderable) {\n this.renderRoot.addEventListener('dragstart', e => {\n // if (!e.target.getAttribute('draggable')) {\n // e.preventDefault()\n // }\n\n // this.draggedItem = e.target\n this.draggedItem = e.target.closest('[card]')\n e.dataTransfer.setData('text/plain', e.target.innerHTML)\n })\n\n this.renderRoot.addEventListener('dragover', e => {\n e.preventDefault()\n const targetItem = e.target.closest('[card]')\n if (targetItem !== this.draggedItem) {\n const targetRect = targetItem.getBoundingClientRect()\n const mousePos = e.clientX - targetRect.left\n\n if (mousePos < targetRect.width / 2) {\n // 마우스 위치가 아이템 좌측 반절에 있을 때\n this.renderRoot.insertBefore(this.draggedItem, targetItem)\n } else {\n // 마우스 위치가 아이템 우측 반절에 있을 때\n this.renderRoot.insertBefore(this.draggedItem, targetItem.nextSibling)\n }\n }\n })\n\n this.renderRoot.addEventListener('drop', e => {\n e.preventDefault()\n\n const boardIds = Array.from(this.renderRoot.querySelectorAll('[card]'))\n .map(board => board.getAttribute('id'))\n .filter(Boolean)\n\n this.dispatchEvent(\n new CustomEvent('reordered', {\n detail: {\n groupId: this.group,\n boardIds\n }\n })\n )\n })\n }\n }\n\n render() {\n var boards = this.boards || []\n\n return html`\n ${this.creatable\n ? html`\n <ox-board-creation-card\n .groups=${this.groups}\n .defaultGroup=${this.group}\n @create-board=${e => this.onCreateBoard(e)}\n card\n create\n ></ox-board-creation-card>\n `\n : html``}\n ${keyed(\n Date.now(),\n boards.map(\n board =>\n html`\n <div card draggable=\"true\" id=${board.id}>\n <a href=\"board-viewer/${board.id}\"> <img src=${board.thumbnail} /> </a>\n\n <div name>${board.name}</div>\n <!-- <div description>${board.description}</div> -->\n\n <mwc-icon\n iconBtn\n info\n @click=${e => {\n this.infoBoard(board.id)\n e.preventDefault()\n }}\n >info</mwc-icon\n >\n\n ${(this.favorites || []).includes(board.id)\n ? html` <mwc-icon iconBtn favored @click=${e => this.removeFavorite(board.id)}>star</mwc-icon> `\n : html` <mwc-icon iconBtn @click=${e => this.addFavorite(board.id)}>star_border</mwc-icon> `}\n </div>\n `\n )\n )}\n `\n }\n\n updated(changes) {\n var creationCard = this.shadowRoot.querySelector('ox-board-creation-card')\n if (creationCard) {\n creationCard.reset()\n }\n }\n\n onCreateBoard(e) {\n this.dispatchEvent(\n new CustomEvent('create-board', {\n detail: e.detail\n })\n )\n }\n\n infoBoard(boardId) {\n this.dispatchEvent(\n new CustomEvent('info-board', {\n detail: boardId\n })\n )\n }\n\n async removeFavorite(boardId) {\n await client.query({\n query: gql`\n mutation {\n deleteFavorite(routing: \"${boardId}\")\n }\n `\n })\n\n this.refreshFavorites()\n }\n\n async addFavorite(boardId) {\n await client.query({\n query: gql`\n mutation {\n createFavorite(favorite: {\n routing: \"${boardId}\"\n }) {\n id\n routing\n }\n }\n `\n })\n\n this.refreshFavorites()\n }\n\n async refreshFavorites() {\n this.dispatchEvent(new CustomEvent('refresh-favorites'))\n }\n}\n\nwindow.customElements.define('board-tile-list', BoardTileList)\n"]}
1
+ {"version":3,"file":"board-tile-list.js","sourceRoot":"","sources":["../../client/board-list/board-tile-list.js"],"names":[],"mappings":"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","sourcesContent":["import '@operato/board/ox-board-creation-card.js'\nimport '@material/mwc-icon'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { keyed } from 'lit/directives/keyed.js'\n\nimport { client } from '@things-factory/shell'\n\nexport default class BoardTileList extends LitElement {\n static get styles() {\n return [\n css`\n :host {\n overflow: auto;\n padding: var(--popup-content-padding);\n display: grid;\n\n grid-template-columns: var(--card-list-template);\n grid-auto-rows: var(--card-list-rows-height);\n grid-gap: 20px;\n --mdc-button-horizontal-padding: var(--padding-default);\n }\n\n [card] {\n position: relative;\n align-items: center;\n overflow: hidden;\n }\n\n [card][create] {\n overflow: visible;\n background-color: initial;\n }\n\n [card] > a {\n display: flex;\n }\n\n [card]:hover {\n cursor: pointer;\n }\n\n [name] {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n margin-top: var(--margin-narrow);\n width: calc(100% - 45px);\n color: var(--primary-text-color);\n font-weight: bolder;\n font-size: var(--fontsize-small);\n }\n\n img {\n display: block;\n\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n }\n\n mwc-icon[iconBtn] {\n float: right;\n margin-top: -20px;\n margin-left: 2px;\n color: var(--board-list-star-color);\n font-size: 1.4em;\n }\n mwc-icon[info] {\n color: var(--primary-color);\n }\n\n mwc-icon[iconBtn][favored],\n mwc-icon[info]:hover {\n color: var(--board-list-star-active-color);\n }\n\n a {\n display: block;\n border-radius: var(--card-list-border-radius);\n border: var(--border-dark-color);\n box-sizing: border-box;\n background-color: var(--card-list-background-color);\n margin: 0px;\n height: calc(100% - 25px);\n }\n\n :host > *:hover [info] {\n opacity: 1;\n -webkit-transition: opacity 0.8s;\n -moz-transition: opacity 0.8s;\n -o-transition: opacity 0.8s;\n transition: opacity 0.8s;\n }\n\n [draggable='true'] {\n cursor: grab;\n }\n\n @media screen and (max-width: 800px), screen and (max-height: 600px) {\n ox-board-creation-card {\n display: none;\n }\n }\n `\n ]\n }\n\n static get properties() {\n return {\n creatable: {\n type: Boolean,\n attribute: 'creatable'\n },\n boards: Array,\n favorites: Array,\n groups: Array,\n group: String,\n reorderable: {\n type: Boolean,\n attribute: 'reorderable'\n }\n }\n }\n\n draggingItem\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.reorderable) {\n this.renderRoot.addEventListener('dragstart', e => {\n // if (!e.target.getAttribute('draggable')) {\n // e.preventDefault()\n // }\n\n // this.draggedItem = e.target\n this.draggedItem = e.target.closest('[card]')\n e.dataTransfer.setData('text/plain', e.target.innerHTML)\n })\n\n this.renderRoot.addEventListener('dragover', e => {\n e.preventDefault()\n const targetItem = e.target.closest('[card]')\n if (targetItem !== this.draggedItem) {\n const targetRect = targetItem.getBoundingClientRect()\n const mousePos = e.clientX - targetRect.left\n\n if (mousePos < targetRect.width / 2) {\n // 마우스 위치가 아이템 좌측 반절에 있을 때\n this.renderRoot.insertBefore(this.draggedItem, targetItem)\n } else {\n // 마우스 위치가 아이템 우측 반절에 있을 때\n this.renderRoot.insertBefore(this.draggedItem, targetItem.nextSibling)\n }\n }\n })\n\n this.renderRoot.addEventListener('drop', e => {\n e.preventDefault()\n\n const boardIds = Array.from(this.renderRoot.querySelectorAll('[card]'))\n .map(board => board.getAttribute('id'))\n .filter(Boolean)\n\n this.dispatchEvent(\n new CustomEvent('reordered', {\n detail: {\n groupId: this.group,\n boardIds\n }\n })\n )\n })\n }\n }\n\n render() {\n var boards = this.boards || []\n\n return html`\n ${this.creatable\n ? html`\n <ox-board-creation-card\n .groups=${this.groups}\n .defaultGroup=${this.group}\n @create-board=${e => this.onCreateBoard(e)}\n card\n create\n ></ox-board-creation-card>\n `\n : html``}\n ${keyed(\n Date.now(),\n boards.map(\n board =>\n html`\n <div card draggable=\"true\" id=${board.id}>\n <a href=\"board-viewer/${board.id}\"> <img src=${board.thumbnail} /> </a>\n\n <div name>${board.name}</div>\n <!-- <div description>${board.description}</div> -->\n\n <mwc-icon\n iconBtn\n info\n @click=${e => {\n this.infoBoard(board)\n e.preventDefault()\n }}\n >info</mwc-icon\n >\n\n ${(this.favorites || []).includes(board.id)\n ? html` <mwc-icon iconBtn favored @click=${e => this.removeFavorite(board.id)}>star</mwc-icon> `\n : html` <mwc-icon iconBtn @click=${e => this.addFavorite(board.id)}>star_border</mwc-icon> `}\n </div>\n `\n )\n )}\n `\n }\n\n updated(changes) {\n var creationCard = this.shadowRoot.querySelector('ox-board-creation-card')\n if (creationCard) {\n creationCard.reset()\n }\n }\n\n onCreateBoard(e) {\n this.dispatchEvent(\n new CustomEvent('create-board', {\n detail: e.detail\n })\n )\n }\n\n infoBoard(board) {\n this.dispatchEvent(\n new CustomEvent('info-board', {\n detail: board\n })\n )\n }\n\n async removeFavorite(boardId) {\n await client.query({\n query: gql`\n mutation {\n deleteFavorite(routing: \"${boardId}\")\n }\n `\n })\n\n this.refreshFavorites()\n }\n\n async addFavorite(boardId) {\n await client.query({\n query: gql`\n mutation {\n createFavorite(favorite: {\n routing: \"${boardId}\"\n }) {\n id\n routing\n }\n }\n `\n })\n\n this.refreshFavorites()\n }\n\n async refreshFavorites() {\n this.dispatchEvent(new CustomEvent('refresh-favorites'))\n }\n}\n\nwindow.customElements.define('board-tile-list', BoardTileList)\n"]}
@@ -1,16 +1,21 @@
1
+ import '@material/mwc-icon';
2
+ import { LitElement } from 'lit';
1
3
  export default class PlayGroupBar extends LitElement {
2
- static get styles(): import("lit").CSSResult[];
3
- static get properties(): {
4
- groups: ArrayConstructor;
5
- groupId: StringConstructor;
6
- targetPage: StringConstructor;
7
- };
4
+ static styles: import("lit").CSSResult[];
5
+ groups: {
6
+ id: string;
7
+ name: string;
8
+ }[];
9
+ groupId: string;
10
+ targetPage: string;
11
+ private __sb?;
8
12
  render(): import("lit-html").TemplateResult<1>;
9
- _infoGroup(groupId: any): void;
13
+ _infoGroup(group?: {
14
+ id: string;
15
+ name: string;
16
+ }): void;
10
17
  _onWheelEvent(e: any): void;
11
18
  _onClickAdd(e: any): void;
12
19
  updated(change: any): void;
13
20
  firstUpdated(): void;
14
- __sb: any;
15
21
  }
16
- import { LitElement } from "lit-element/lit-element";
@@ -1,79 +1,21 @@
1
+ import { __decorate, __metadata } from "tslib";
1
2
  import '@material/mwc-icon';
2
3
  import { css, html, LitElement } from 'lit';
4
+ import { customElement, property } from 'lit/decorators.js';
3
5
  import ScrollBooster from 'scrollbooster';
4
6
  import { longpressable } from '@things-factory/utils';
5
- export default class PlayGroupBar extends LitElement {
6
- static get styles() {
7
- return [
8
- css `
9
- :host {
10
- background-color: var(--group-bar-background-color);
11
-
12
- overflow-x: hidden;
13
- }
14
-
15
- ul {
16
- display: flex;
17
- list-style: none;
18
- margin: 0;
19
- padding: 0;
20
- white-space: nowrap;
21
- }
22
-
23
- li {
24
- display: inline-block;
25
- padding: 0px 3px;
26
-
27
- border-bottom: var(--group-bar-line);
28
- }
29
-
30
- li[active] {
31
- border-color: var(--group-bar-active-line-color);
32
- }
33
-
34
- li a {
35
- display: block;
36
- padding: 5px 4px 1px 4px;
37
- text-decoration: none;
38
- font: var(--group-bar-textbutton);
39
- color: rgba(255, 255, 255, 0.8);
40
- }
41
-
42
- li[active] a {
43
- font: var(--group-bar-textbutton-active);
44
- color: rgba(255, 255, 255, 1);
45
- }
46
-
47
- li[padding] {
48
- flex: 1;
49
- }
50
-
51
- li[add] {
52
- padding: 5px 4px 1px 4px;
53
- }
54
-
55
- li[add] * {
56
- color: rgba(255, 255, 255, 0.5);
57
- }
58
-
59
- mwc-icon {
60
- vertical-align: middle;
61
- }
62
- `
63
- ];
64
- }
65
- static get properties() {
66
- return {
67
- groups: Array,
68
- groupId: String,
69
- targetPage: String
70
- };
7
+ let PlayGroupBar = class PlayGroupBar extends LitElement {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.groups = [];
11
+ this.groupId = '';
12
+ this.targetPage = '';
71
13
  }
72
14
  render() {
73
15
  return html `
74
16
  <ul>
75
17
  ${(this.groups || []).map(group => html `
76
- <li ?active=${this.groupId === group.id} @long-press=${e => this._infoGroup(group.id)}>
18
+ <li ?active=${this.groupId === group.id} @long-press=${e => this._infoGroup(group)}>
77
19
  <a href=${`${this.targetPage}/${group.id}`}>${group.name}</a>
78
20
  </li>
79
21
  `)}
@@ -86,9 +28,9 @@ export default class PlayGroupBar extends LitElement {
86
28
  </ul>
87
29
  `;
88
30
  }
89
- _infoGroup(groupId) {
31
+ _infoGroup(group) {
90
32
  this.dispatchEvent(new CustomEvent('info-play-group', {
91
- detail: groupId
33
+ detail: group
92
34
  }));
93
35
  }
94
36
  _onWheelEvent(e) {
@@ -105,12 +47,12 @@ export default class PlayGroupBar extends LitElement {
105
47
  this.__sb && this.__sb.updateMetrics();
106
48
  }
107
49
  if (change.has('groupId')) {
108
- var active = this.shadowRoot.querySelector('li[active]');
50
+ var active = this.renderRoot.querySelector('li[active]');
109
51
  active && active.scrollIntoView();
110
52
  }
111
53
  }
112
54
  firstUpdated() {
113
- var scrollTarget = this.shadowRoot.querySelector('ul');
55
+ var scrollTarget = this.renderRoot.querySelector('ul');
114
56
  /* long-press */
115
57
  longpressable(scrollTarget);
116
58
  scrollTarget.addEventListener('mousewheel', this._onWheelEvent.bind(this), false);
@@ -123,6 +65,78 @@ export default class PlayGroupBar extends LitElement {
123
65
  }
124
66
  });
125
67
  }
126
- }
127
- window.customElements.define('play-group-bar', PlayGroupBar);
68
+ };
69
+ PlayGroupBar.styles = [
70
+ css `
71
+ :host {
72
+ background-color: var(--group-bar-background-color);
73
+
74
+ overflow-x: hidden;
75
+ }
76
+
77
+ ul {
78
+ display: flex;
79
+ list-style: none;
80
+ margin: 0;
81
+ padding: 0;
82
+ white-space: nowrap;
83
+ }
84
+
85
+ li {
86
+ display: inline-block;
87
+ padding: 0px 3px;
88
+
89
+ border-bottom: var(--group-bar-line);
90
+ }
91
+
92
+ li[active] {
93
+ border-color: var(--group-bar-active-line-color);
94
+ }
95
+
96
+ li a {
97
+ display: block;
98
+ padding: 5px 4px 1px 4px;
99
+ text-decoration: none;
100
+ font: var(--group-bar-textbutton);
101
+ color: rgba(255, 255, 255, 0.8);
102
+ }
103
+
104
+ li[active] a {
105
+ font: var(--group-bar-textbutton-active);
106
+ color: rgba(255, 255, 255, 1);
107
+ }
108
+
109
+ li[padding] {
110
+ flex: 1;
111
+ }
112
+
113
+ li[add] {
114
+ padding: 5px 4px 1px 4px;
115
+ }
116
+
117
+ li[add] * {
118
+ color: rgba(255, 255, 255, 0.5);
119
+ }
120
+
121
+ mwc-icon {
122
+ vertical-align: middle;
123
+ }
124
+ `
125
+ ];
126
+ __decorate([
127
+ property({ type: Array }),
128
+ __metadata("design:type", Array)
129
+ ], PlayGroupBar.prototype, "groups", void 0);
130
+ __decorate([
131
+ property({ type: String }),
132
+ __metadata("design:type", String)
133
+ ], PlayGroupBar.prototype, "groupId", void 0);
134
+ __decorate([
135
+ property({ type: String, attribute: 'target-page' }),
136
+ __metadata("design:type", String)
137
+ ], PlayGroupBar.prototype, "targetPage", void 0);
138
+ PlayGroupBar = __decorate([
139
+ customElement('play-group-bar')
140
+ ], PlayGroupBar);
141
+ export default PlayGroupBar;
128
142
  //# sourceMappingURL=play-group-bar.js.map