@things-factory/board-ui 10.1.41 → 10.1.44

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 (81) hide show
  1. package/dist-client/board-list/board-thumb.d.ts +33 -0
  2. package/dist-client/board-list/board-thumb.js +119 -0
  3. package/dist-client/board-list/board-thumb.js.map +1 -0
  4. package/dist-client/graphql/favorite-board.js +3 -0
  5. package/dist-client/graphql/favorite-board.js.map +1 -1
  6. package/dist-client/graphql/my-board.js +3 -0
  7. package/dist-client/graphql/my-board.js.map +1 -1
  8. package/dist-client/graphql/play-group.js +2 -0
  9. package/dist-client/graphql/play-group.js.map +1 -1
  10. package/dist-client/index.d.ts +1 -0
  11. package/dist-client/index.js +1 -0
  12. package/dist-client/index.js.map +1 -1
  13. package/dist-client/pages/board-list-page.d.ts +39 -42
  14. package/dist-client/pages/board-list-page.js +388 -284
  15. package/dist-client/pages/board-list-page.js.map +1 -1
  16. package/dist-client/pages/board-modeller-page.d.ts +2 -0
  17. package/dist-client/pages/board-modeller-page.js +18 -1
  18. package/dist-client/pages/board-modeller-page.js.map +1 -1
  19. package/dist-client/pages/board-template/board-template-list-page.d.ts +21 -10
  20. package/dist-client/pages/board-template/board-template-list-page.js +147 -136
  21. package/dist-client/pages/board-template/board-template-list-page.js.map +1 -1
  22. package/dist-client/pages/play-list-page.d.ts +22 -12
  23. package/dist-client/pages/play-list-page.js +264 -113
  24. package/dist-client/pages/play-list-page.js.map +1 -1
  25. package/dist-client/route.d.ts +1 -1
  26. package/dist-client/setting-let/board-modeller-setting-let.d.ts +21 -0
  27. package/dist-client/setting-let/board-modeller-setting-let.js +144 -0
  28. package/dist-client/setting-let/board-modeller-setting-let.js.map +1 -0
  29. package/dist-client/styles/board-card-styles.d.ts +11 -0
  30. package/dist-client/styles/board-card-styles.js +90 -0
  31. package/dist-client/styles/board-card-styles.js.map +1 -0
  32. package/dist-client/themes/board-theme.css +32 -19
  33. package/dist-client/tsconfig.tsbuildinfo +1 -1
  34. package/dist-client/utils/board-meta.d.ts +10 -0
  35. package/dist-client/utils/board-meta.js +34 -0
  36. package/dist-client/utils/board-meta.js.map +1 -0
  37. package/dist-client/viewparts/board-basic-info.d.ts +38 -7
  38. package/dist-client/viewparts/board-basic-info.js +378 -349
  39. package/dist-client/viewparts/board-basic-info.js.map +1 -1
  40. package/dist-client/viewparts/board-info-link.d.ts +5 -1
  41. package/dist-client/viewparts/board-info-link.js +79 -21
  42. package/dist-client/viewparts/board-info-link.js.map +1 -1
  43. package/dist-client/viewparts/board-info-template.d.ts +15 -0
  44. package/dist-client/viewparts/board-info-template.js +97 -0
  45. package/dist-client/viewparts/board-info-template.js.map +1 -0
  46. package/dist-client/viewparts/board-info.d.ts +5 -0
  47. package/dist-client/viewparts/board-info.js +24 -73
  48. package/dist-client/viewparts/board-info.js.map +1 -1
  49. package/dist-client/viewparts/board-template-builder.d.ts +1 -0
  50. package/dist-client/viewparts/board-template-builder.js +37 -65
  51. package/dist-client/viewparts/board-template-builder.js.map +1 -1
  52. package/dist-client/viewparts/board-template-info.d.ts +3 -0
  53. package/dist-client/viewparts/board-template-info.js +75 -134
  54. package/dist-client/viewparts/board-template-info.js.map +1 -1
  55. package/dist-client/viewparts/group-info-basic.d.ts +8 -3
  56. package/dist-client/viewparts/group-info-basic.js +54 -190
  57. package/dist-client/viewparts/group-info-basic.js.map +1 -1
  58. package/dist-client/viewparts/group-info-import.d.ts +3 -1
  59. package/dist-client/viewparts/group-info-import.js +29 -62
  60. package/dist-client/viewparts/group-info-import.js.map +1 -1
  61. package/dist-client/viewparts/group-info.d.ts +4 -0
  62. package/dist-client/viewparts/group-info.js +21 -55
  63. package/dist-client/viewparts/group-info.js.map +1 -1
  64. package/dist-client/viewparts/info-dialog-styles.d.ts +19 -0
  65. package/dist-client/viewparts/info-dialog-styles.js +194 -0
  66. package/dist-client/viewparts/info-dialog-styles.js.map +1 -0
  67. package/dist-client/viewparts/link-builder.d.ts +3 -0
  68. package/dist-client/viewparts/link-builder.js +87 -81
  69. package/dist-client/viewparts/link-builder.js.map +1 -1
  70. package/dist-client/viewparts/play-group-info-basic.d.ts +4 -3
  71. package/dist-client/viewparts/play-group-info-basic.js +49 -188
  72. package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
  73. package/dist-client/viewparts/play-group-info.d.ts +4 -0
  74. package/dist-client/viewparts/play-group-info.js +22 -53
  75. package/dist-client/viewparts/play-group-info.js.map +1 -1
  76. package/package.json +6 -6
  77. package/translations/en.json +30 -0
  78. package/translations/ja.json +9 -0
  79. package/translations/ko.json +35 -5
  80. package/translations/ms.json +8 -1
  81. package/translations/zh.json +9 -0
@@ -1,194 +1,68 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import '@material/web/icon/icon.js';
3
- import '@material/web/textfield/filled-text-field.js';
4
- import '@material/web/button/elevated-button.js';
5
- import { css, html, LitElement } from 'lit';
3
+ import '@material/web/button/filled-button.js';
4
+ import '@material/web/button/text-button.js';
5
+ import { html, LitElement } from 'lit';
6
6
  import { customElement, property, state } from 'lit/decorators.js';
7
7
  import { i18next } from '@operato/i18n';
8
+ import { CommonPopupStyles } from '@operato/styles';
8
9
  import { fetchPlayGroup } from '../graphql/index.js';
10
+ import { InfoFormStyles } from './info-dialog-styles.js';
11
+ /** The play-group form - the same shape as group-info-basic.ts, on purpose. */
9
12
  let PlayGroupInfoBasic = class PlayGroupInfoBasic extends LitElement {
10
13
  constructor() {
11
14
  super(...arguments);
12
15
  this.playGroup = { name: '', description: '' };
13
16
  }
14
- static { this.styles = [
15
- css `
16
- :host {
17
- display: block;
18
- color: var(--md-sys-color-on-surface);
19
- background-color: var(--md-sys-color-surface);
20
- height: 100%;
21
- min-width: 360px;
22
- overflow: auto;
23
- position: relative;
24
-
25
- --form-grid-gap: 2px 0;
26
- --input-field-padding: var(--spacing-medium);
27
- --legend-padding: var(--spacing-medium) 0 var(--spacing-small) 0;
28
- }
29
-
30
- form {
31
- display: grid;
32
- grid-template-columns: repeat(12, 1fr);
33
- grid-gap: var(--form-grid-gap);
34
- grid-auto-rows: minmax(24px, auto);
35
- padding: var(--spacing-large);
36
- align-items: center;
37
- }
38
-
39
- md-filled-text-field {
40
- grid-column: span 12;
41
- padding: 10px 0;
42
- }
43
-
44
- [buttons] {
45
- grid-column: span 12;
46
- padding: var(--spacing-medium) 0;
47
- text-align: right;
48
-
49
- display: flex;
50
- gap: var(--spacing-small);
51
- align-items: center;
52
- }
53
-
54
- [buttons] * {
55
- margin: 0 0 0 auto;
56
- }
57
-
58
- [danger] {
59
- float: left;
60
- margin: 0;
61
- --md-elevated-button-icon-color: var(--md-sys-color-on-error);
62
- --md-elevated-button-label-text-color: var(--md-sys-color-on-error);
63
- --md-elevated-button-container-color: var(--md-sys-color-error);
64
- }
65
-
66
- fieldset {
67
- display: contents;
68
- }
69
-
70
- legend {
71
- grid-column: span 12;
72
- padding: var(--legend-padding);
73
- font: var(--legend-font);
74
- color: var(--md-sys-color-primary);
75
- text-transform: capitalize;
76
- }
77
-
78
- label {
79
- grid-column: span 12;
80
- text-transform: capitalize;
81
- color: var(--md-sys-color-primary);
82
- font: var(--label-font);
83
- }
84
-
85
- span {
86
- grid-column: span 12;
87
- border-bottom: var(--border-dim-color);
88
- margin-bottom: var(--spacing-medium);
89
- padding-bottom: var(--spacing-small);
90
- font: var(--input-field-font);
91
- }
92
- span md-icon {
93
- font-variation-settings: 'FILL' 1;
94
-
95
- vertical-align: middle;
96
- font-size: var(--fontsize-large);
97
- color: var(--md-sys-color-primary);
98
- }
99
-
100
- input,
101
- table,
102
- select,
103
- textarea,
104
- [custom-input] {
105
- grid-column: span 12;
106
-
107
- border: var(--input-field-border);
108
- border-radius: var(--input-field-border-radius);
109
- margin-bottom: var(--spacing-medium);
110
- padding: var(--input-field-padding);
111
- font: var(--input-field-font);
112
- }
113
-
114
- input[type='checkbox'],
115
- input[type='radio'] {
116
- place-self: center;
117
- margin: 0;
118
- grid-column: 1;
119
- }
120
-
121
- input[type='checkbox'] + label,
122
- input[type='radio'] + label {
123
- text-align: left;
124
- grid-column: span 11 / auto;
125
-
126
- font: var(--form-sublabel-font);
127
- color: var(--md-sys-color-secondary);
128
- }
129
-
130
- input:focus {
131
- outline: none;
132
- border: 1px solid var(--focus-background-color);
133
- }
134
-
135
- @media screen and (max-width: 460px) {
136
- :host {
137
- width: 100vw;
138
- }
139
- }
140
- `
141
- ]; }
17
+ static { this.styles = [CommonPopupStyles, InfoFormStyles]; }
142
18
  render() {
143
19
  const playGroup = this.playGroup || { name: '', description: '' };
144
20
  return html `
145
- <form>
146
- <fieldset>
147
- <legend>playgroup information</legend>
148
- <md-filled-text-field
21
+ <div class="fields">
22
+ <label>
23
+ ${i18next.t('label.name')}
24
+ <input type="text" .value=${playGroup.name || ''} @change=${e => (this.playGroup.name = e.target.value)} autofocus />
25
+ </label>
26
+
27
+ <label>
28
+ ${i18next.t('label.description')}
29
+ <input
149
30
  type="text"
150
- label=${String(i18next.t('label.name'))}
151
- .value=${playGroup.name || ''}
152
- @change=${e => (this.playGroup.name = e.target.value)}
153
- ></md-filled-text-field>
154
-
155
- <md-filled-text-field
156
- type="text"
157
- label=${String(i18next.t('label.description'))}
158
31
  .value=${playGroup.description || ''}
159
32
  @change=${e => (this.playGroup.description = e.target.value)}
160
- ></md-filled-text-field>
161
-
162
- <label>${i18next.t('label.creator')}</label>
163
- <span>
164
- <md-icon>person</md-icon> ${playGroup.creator && playGroup.creator.name}
165
- <md-icon>schedule</md-icon> ${new Date(playGroup.createdAt).toLocaleString()}
166
- </span>
33
+ />
34
+ </label>
35
+ </div>
167
36
 
168
- <label>${i18next.t('label.updater')}</label>
169
- <span>
170
- <md-icon>person</md-icon> ${playGroup.updater && playGroup.updater.name}
171
- <md-icon>schedule</md-icon> ${new Date(playGroup.updatedAt).toLocaleString()}
172
- </span>
37
+ ${this.playGroupId ? this.renderProvenance(playGroup) : ''}
173
38
 
174
- <div buttons>
175
- ${this.playGroupId
39
+ <div class="buttons">
40
+ ${this.playGroupId
176
41
  ? html `
177
- <md-elevated-button danger @click=${this.deletePlayGroup.bind(this)}
178
- ><md-icon slot="icon">delete_outline</md-icon>${String(i18next.t('button.delete'))}</md-elevated-button
179
- >
180
- <md-elevated-button @click=${this.updateGroup.bind(this)}
181
- ><md-icon slot="icon">save</md-icon>${String(i18next.t('button.save'))}</md-elevated-button
182
- >
183
- `
42
+ <md-text-button cap danger @click=${this.deletePlayGroup.bind(this)}>
43
+ <md-icon slot="icon">delete_outline</md-icon>${i18next.t('button.delete')}
44
+ </md-text-button>
45
+ <div filler></div>
46
+ <md-filled-button cap @click=${this.updateGroup.bind(this)}>
47
+ <md-icon slot="icon">save</md-icon>${i18next.t('button.save')}
48
+ </md-filled-button>
49
+ `
184
50
  : html `
185
- <md-elevated-button @click=${this.createPlayGroup.bind(this)}
186
- ><md-icon slot="icon">create_new_folder</md-icon>${String(i18next.t('button.create'))}</md-elevated-button
187
- >
188
- `}
189
- </div>
190
- </fieldset>
191
- </form>
51
+ <div filler></div>
52
+ <md-filled-button cap @click=${this.createPlayGroup.bind(this)}>
53
+ <md-icon slot="icon">create_new_folder</md-icon>${i18next.t('button.create')}
54
+ </md-filled-button>
55
+ `}
56
+ </div>
57
+ `;
58
+ }
59
+ renderProvenance(playGroup) {
60
+ const when = (value) => (value ? new Date(value).toLocaleString() : '');
61
+ return html `
62
+ <div class="provenance">
63
+ <span>${i18next.t('label.creator')} <b>${playGroup.creator?.name || '-'}</b> ${when(playGroup.createdAt)}</span>
64
+ <span>${i18next.t('label.updater')} <b>${playGroup.updater?.name || '-'}</b> ${when(playGroup.updatedAt)}</span>
65
+ </div>
192
66
  `;
193
67
  }
194
68
  updated(changes) {
@@ -199,12 +73,11 @@ let PlayGroupInfoBasic = class PlayGroupInfoBasic extends LitElement {
199
73
  firstUpdated() {
200
74
  setTimeout(() => {
201
75
  ;
202
- this.renderRoot.querySelector('[type=text]').focus();
76
+ this.renderRoot.querySelector('input')?.focus();
203
77
  }, 100);
204
78
  }
205
79
  async refresh() {
206
80
  if (!this.playGroupId) {
207
- /* model이 없으므로, 기본 모델을 제공함. */
208
81
  this.playGroup = { name: '', description: '' };
209
82
  }
210
83
  else {
@@ -213,27 +86,15 @@ let PlayGroupInfoBasic = class PlayGroupInfoBasic extends LitElement {
213
86
  }
214
87
  }
215
88
  async createPlayGroup() {
216
- this.dispatchEvent(new CustomEvent('create-play-group', {
217
- detail: this.playGroup,
218
- bubbles: true,
219
- composed: true
220
- }));
89
+ this.dispatchEvent(new CustomEvent('create-play-group', { detail: this.playGroup, bubbles: true, composed: true }));
221
90
  this.close();
222
91
  }
223
92
  async updateGroup() {
224
- this.dispatchEvent(new CustomEvent('update-play-group', {
225
- detail: this.playGroup,
226
- bubbles: true,
227
- composed: true
228
- }));
93
+ this.dispatchEvent(new CustomEvent('update-play-group', { detail: this.playGroup, bubbles: true, composed: true }));
229
94
  this.close();
230
95
  }
231
96
  async deletePlayGroup() {
232
- this.dispatchEvent(new CustomEvent('delete-play-group', {
233
- detail: this.playGroup,
234
- bubbles: true,
235
- composed: true
236
- }));
97
+ this.dispatchEvent(new CustomEvent('delete-play-group', { detail: this.playGroup, bubbles: true, composed: true }));
237
98
  this.close();
238
99
  }
239
100
  close() {
@@ -1 +1 @@
1
- {"version":3,"file":"play-group-info-basic.js","sourceRoot":"","sources":["../../client/viewparts/play-group-info-basic.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/textfield/filled-text-field.js'\nimport '@material/web/button/elevated-button.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nimport { fetchPlayGroup } from '../graphql/index.js'\n\n@customElement('play-group-info-basic')\nexport class PlayGroupInfoBasic extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n color: var(--md-sys-color-on-surface);\n background-color: var(--md-sys-color-surface);\n height: 100%;\n min-width: 360px;\n overflow: auto;\n position: relative;\n\n --form-grid-gap: 2px 0;\n --input-field-padding: var(--spacing-medium);\n --legend-padding: var(--spacing-medium) 0 var(--spacing-small) 0;\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(--spacing-large);\n align-items: center;\n }\n\n md-filled-text-field {\n grid-column: span 12;\n padding: 10px 0;\n }\n\n [buttons] {\n grid-column: span 12;\n padding: var(--spacing-medium) 0;\n text-align: right;\n\n display: flex;\n gap: var(--spacing-small);\n align-items: center;\n }\n\n [buttons] * {\n margin: 0 0 0 auto;\n }\n\n [danger] {\n float: left;\n margin: 0;\n --md-elevated-button-icon-color: var(--md-sys-color-on-error);\n --md-elevated-button-label-text-color: var(--md-sys-color-on-error);\n --md-elevated-button-container-color: var(--md-sys-color-error);\n }\n\n fieldset {\n display: contents;\n }\n\n legend {\n grid-column: span 12;\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--md-sys-color-primary);\n text-transform: capitalize;\n }\n\n label {\n grid-column: span 12;\n text-transform: capitalize;\n color: var(--md-sys-color-primary);\n font: var(--label-font);\n }\n\n span {\n grid-column: span 12;\n border-bottom: var(--border-dim-color);\n margin-bottom: var(--spacing-medium);\n padding-bottom: var(--spacing-small);\n font: var(--input-field-font);\n }\n span md-icon {\n font-variation-settings: 'FILL' 1;\n\n vertical-align: middle;\n font-size: var(--fontsize-large);\n color: var(--md-sys-color-primary);\n }\n\n input,\n table,\n select,\n textarea,\n [custom-input] {\n grid-column: span 12;\n\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n margin-bottom: var(--spacing-medium);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n\n input[type='checkbox'],\n input[type='radio'] {\n place-self: center;\n margin: 0;\n grid-column: 1;\n }\n\n input[type='checkbox'] + label,\n input[type='radio'] + label {\n text-align: left;\n grid-column: span 11 / auto;\n\n font: var(--form-sublabel-font);\n color: var(--md-sys-color-secondary);\n }\n\n input:focus {\n outline: none;\n border: 1px solid var(--focus-background-color);\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: String }) playGroupId?: string\n\n @state() playGroup: any = { name: '', description: '' }\n\n private link?: string\n\n render() {\n const playGroup = this.playGroup || { name: '', description: '' }\n\n return html`\n <form>\n <fieldset>\n <legend>playgroup information</legend>\n <md-filled-text-field\n type=\"text\"\n label=${String(i18next.t('label.name'))}\n .value=${playGroup.name || ''}\n @change=${e => (this.playGroup.name = e.target.value)}\n ></md-filled-text-field>\n\n <md-filled-text-field\n type=\"text\"\n label=${String(i18next.t('label.description'))}\n .value=${playGroup.description || ''}\n @change=${e => (this.playGroup.description = e.target.value)}\n ></md-filled-text-field>\n\n <label>${i18next.t('label.creator')}</label>\n <span>\n <md-icon>person</md-icon> ${playGroup.creator && playGroup.creator.name}\n <md-icon>schedule</md-icon> ${new Date(playGroup.createdAt).toLocaleString()}\n </span>\n\n <label>${i18next.t('label.updater')}</label>\n <span>\n <md-icon>person</md-icon> ${playGroup.updater && playGroup.updater.name}\n <md-icon>schedule</md-icon> ${new Date(playGroup.updatedAt).toLocaleString()}\n </span>\n\n <div buttons>\n ${this.playGroupId\n ? html`\n <md-elevated-button danger @click=${this.deletePlayGroup.bind(this)}\n ><md-icon slot=\"icon\">delete_outline</md-icon>${String(\n i18next.t('button.delete')\n )}</md-elevated-button\n >\n <md-elevated-button @click=${this.updateGroup.bind(this)}\n ><md-icon slot=\"icon\">save</md-icon>${String(i18next.t('button.save'))}</md-elevated-button\n >\n `\n : html`\n <md-elevated-button @click=${this.createPlayGroup.bind(this)}\n ><md-icon slot=\"icon\">create_new_folder</md-icon>${String(\n i18next.t('button.create')\n )}</md-elevated-button\n >\n `}\n </div>\n </fieldset>\n </form>\n `\n }\n\n updated(changes) {\n if (changes.has('playGroupId')) {\n this.refresh()\n }\n }\n\n firstUpdated() {\n setTimeout(() => {\n ;(this.renderRoot.querySelector('[type=text]') as any).focus()\n }, 100)\n }\n\n async refresh() {\n if (!this.playGroupId) {\n /* model이 없으므로, 기본 모델을 제공함. */\n this.playGroup = { name: '', description: '' }\n } else {\n const response = await fetchPlayGroup(this.playGroupId)\n this.playGroup = response.playGroup\n }\n }\n\n async createPlayGroup() {\n this.dispatchEvent(\n new CustomEvent('create-play-group', {\n detail: this.playGroup,\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n async updateGroup() {\n this.dispatchEvent(\n new CustomEvent('update-play-group', {\n detail: this.playGroup,\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n async deletePlayGroup() {\n this.dispatchEvent(\n new CustomEvent('delete-play-group', {\n detail: this.playGroup,\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"play-group-info-basic.js","sourceRoot":"","sources":["../../client/viewparts/play-group-info-basic.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/text-button.js'\n\nimport { html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { CommonPopupStyles } from '@operato/styles'\n\nimport { fetchPlayGroup } from '../graphql/index.js'\nimport { InfoFormStyles } from './info-dialog-styles.js'\n\n/** The play-group form - the same shape as group-info-basic.ts, on purpose. */\n@customElement('play-group-info-basic')\nexport class PlayGroupInfoBasic extends LitElement {\n static styles = [CommonPopupStyles, InfoFormStyles]\n\n @property({ type: String }) playGroupId?: string\n\n @state() playGroup: any = { name: '', description: '' }\n\n render() {\n const playGroup = this.playGroup || { name: '', description: '' }\n\n return html`\n <div class=\"fields\">\n <label>\n ${i18next.t('label.name')}\n <input type=\"text\" .value=${playGroup.name || ''} @change=${e => (this.playGroup.name = e.target.value)} autofocus />\n </label>\n\n <label>\n ${i18next.t('label.description')}\n <input\n type=\"text\"\n .value=${playGroup.description || ''}\n @change=${e => (this.playGroup.description = e.target.value)}\n />\n </label>\n </div>\n\n ${this.playGroupId ? this.renderProvenance(playGroup) : ''}\n\n <div class=\"buttons\">\n ${this.playGroupId\n ? html`\n <md-text-button cap danger @click=${this.deletePlayGroup.bind(this)}>\n <md-icon slot=\"icon\">delete_outline</md-icon>${i18next.t('button.delete')}\n </md-text-button>\n <div filler></div>\n <md-filled-button cap @click=${this.updateGroup.bind(this)}>\n <md-icon slot=\"icon\">save</md-icon>${i18next.t('button.save')}\n </md-filled-button>\n `\n : html`\n <div filler></div>\n <md-filled-button cap @click=${this.createPlayGroup.bind(this)}>\n <md-icon slot=\"icon\">create_new_folder</md-icon>${i18next.t('button.create')}\n </md-filled-button>\n `}\n </div>\n `\n }\n\n private renderProvenance(playGroup: any) {\n const when = (value?: string) => (value ? new Date(value).toLocaleString() : '')\n\n return html`\n <div class=\"provenance\">\n <span>${i18next.t('label.creator')} <b>${playGroup.creator?.name || '-'}</b> ${when(playGroup.createdAt)}</span>\n <span>${i18next.t('label.updater')} <b>${playGroup.updater?.name || '-'}</b> ${when(playGroup.updatedAt)}</span>\n </div>\n `\n }\n\n updated(changes) {\n if (changes.has('playGroupId')) {\n this.refresh()\n }\n }\n\n firstUpdated() {\n setTimeout(() => {\n ;(this.renderRoot.querySelector('input') as any)?.focus()\n }, 100)\n }\n\n async refresh() {\n if (!this.playGroupId) {\n this.playGroup = { name: '', description: '' }\n } else {\n const response = await fetchPlayGroup(this.playGroupId)\n this.playGroup = response.playGroup\n }\n }\n\n async createPlayGroup() {\n this.dispatchEvent(new CustomEvent('create-play-group', { detail: this.playGroup, bubbles: true, composed: true }))\n this.close()\n }\n\n async updateGroup() {\n this.dispatchEvent(new CustomEvent('update-play-group', { detail: this.playGroup, bubbles: true, composed: true }))\n this.close()\n }\n\n async deletePlayGroup() {\n this.dispatchEvent(new CustomEvent('delete-play-group', { detail: this.playGroup, bubbles: true, composed: true }))\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
@@ -1,6 +1,10 @@
1
1
  import { LitElement } from 'lit';
2
2
  import './play-group-info-basic.js';
3
3
  import './play-group-info-link.js';
4
+ /**
5
+ * The play-group dialog. A new play group is one short form with no tabs; an existing one adds
6
+ * the link tab (a headless player URL needs a group id to point at).
7
+ */
4
8
  export declare class PlayGroupInfo extends LitElement {
5
9
  static styles: import("lit").CSSResult[];
6
10
  playGroup?: {
@@ -1,70 +1,39 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { css, html, LitElement } from 'lit';
2
+ import { 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
+ import { i18next } from '@operato/i18n';
5
6
  import { ScrollbarStyles } from '@operato/styles';
6
7
  import './play-group-info-basic.js';
7
8
  import './play-group-info-link.js';
9
+ import { InfoDialogStyles } from './info-dialog-styles.js';
10
+ /**
11
+ * The play-group dialog. A new play group is one short form with no tabs; an existing one adds
12
+ * the link tab (a headless player URL needs a group id to point at).
13
+ */
8
14
  let PlayGroupInfo = class PlayGroupInfo extends LitElement {
9
15
  constructor() {
10
16
  super(...arguments);
11
17
  this.tab = 'basic';
12
18
  }
13
- static { this.styles = [
14
- ScrollbarStyles,
15
- css `
16
- :host {
17
- height: 100%;
18
- min-width: 360px;
19
-
20
- display: flex;
21
- flex-direction: column;
22
- position: relative;
23
- background-color: var(--md-sys-color-surface);
24
- }
25
-
26
- [tab] {
27
- width: 100%;
28
- display: flex;
29
- }
30
-
31
- [tab] > * {
32
- flex: 1;
33
- }
34
-
35
- [content] {
36
- flex: 1;
37
- overflow-y: auto;
38
- }
39
-
40
- span {
41
- padding: 5px 4px 1px;
42
- font: var(--group-bar-textbutton);
43
- background-color: var(--md-sys-color-secondary);
44
- color: rgba(255, 255, 255, 0.8);
45
- text-align: center;
46
- text-transform: uppercase;
47
- }
48
-
49
- span[active] {
50
- background-color: var(--md-sys-color-primary);
51
- }
52
-
53
- @media screen and (max-width: 460px) {
54
- :host {
55
- width: 100vw;
56
- }
57
- }
58
- `
59
- ]; }
19
+ static { this.styles = [ScrollbarStyles, InfoDialogStyles]; }
60
20
  render() {
21
+ const existing = !!this.playGroup?.id;
61
22
  return html `
62
- <div tab>
63
- <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>basic</span>
64
- <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>link</span>
65
- </div>
23
+ ${existing
24
+ ? html `
25
+ <div tab>
26
+ <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>
27
+ ${i18next.t('label.basic', { defaultValue: 'Basic' })}
28
+ </span>
29
+ <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>
30
+ ${i18next.t('label.link', { defaultValue: 'Link' })}
31
+ </span>
32
+ </div>
33
+ `
34
+ : ''}
66
35
  <div content>
67
- ${this.tab == 'basic'
36
+ ${this.tab == 'basic' || !existing
68
37
  ? html `<play-group-info-basic playGroupId=${ifDefined(this.playGroup?.id)}></play-group-info-basic>`
69
38
  : html `<play-group-info-link .playGroup=${this.playGroup}></play-group-info-link>`}
70
39
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"play-group-info.js","sourceRoot":"","sources":["../../client/viewparts/play-group-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,4BAA4B,CAAA;AACnC,OAAO,2BAA2B,CAAA;AAG3B,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAAtC;;QAmDI,QAAG,GAAW,OAAO,CAAA;IAmBhC,CAAC;aArEQ,WAAM,GAAG;QACd,eAAe;QACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CF;KACF,AA9CY,CA8CZ;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,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,MAAM;;;UAGpE,IAAI,CAAC,GAAG,IAAI,OAAO;YACnB,CAAC,CAAC,IAAI,CAAA,sCAAsC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,2BAA2B;YACpG,CAAC,CAAC,IAAI,CAAA,oCAAoC,IAAI,CAAC,SAAS,0BAA0B;;KAEvF,CAAA;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AApB2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDAAyC;AAE3D;IAAR,KAAK,EAAE;;0CAAsB;AAnDnB,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CAsEzB","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 './play-group-info-basic.js'\nimport './play-group-info-link.js'\n\n@customElement('play-group-info')\nexport class PlayGroupInfo 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 }) playGroup?: { 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 = 'link')} ?active=${this.tab == 'link'}>link</span>\n </div>\n <div content>\n ${this.tab == 'basic'\n ? html`<play-group-info-basic playGroupId=${ifDefined(this.playGroup?.id)}></play-group-info-basic>`\n : html`<play-group-info-link .playGroup=${this.playGroup}></play-group-info-link>`}\n </div>\n `\n }\n\n close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"play-group-info.js","sourceRoot":"","sources":["../../client/viewparts/play-group-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,4BAA4B,CAAA;AACnC,OAAO,2BAA2B,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D;;;GAGG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAAtC;;QAKI,QAAG,GAAW,OAAO,CAAA;IA6BhC,CAAC;aAjCQ,WAAM,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,AAAtC,CAAsC;IAMnD,MAAM;QACJ,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAA;QAErC,OAAO,IAAI,CAAA;QACP,QAAQ;YACR,CAAC,CAAC,IAAI,CAAA;;6BAEe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,OAAO;kBACpE,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;;6BAExC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,MAAM;kBAClE,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;;WAGxD;YACH,CAAC,CAAC,EAAE;;UAEF,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAA,sCAAsC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,2BAA2B;YACpG,CAAC,CAAC,IAAI,CAAA,oCAAoC,IAAI,CAAC,SAAS,0BAA0B;;KAEvF,CAAA;IACH,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AA9B2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDAAyC;AAE3D;IAAR,KAAK,EAAE;;0CAAsB;AALnB,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CAkCzB","sourcesContent":["import { html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { i18next } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport './play-group-info-basic.js'\nimport './play-group-info-link.js'\nimport { InfoDialogStyles } from './info-dialog-styles.js'\n\n/**\n * The play-group dialog. A new play group is one short form with no tabs; an existing one adds\n * the link tab (a headless player URL needs a group id to point at).\n */\n@customElement('play-group-info')\nexport class PlayGroupInfo extends LitElement {\n static styles = [ScrollbarStyles, InfoDialogStyles]\n\n @property({ type: Object }) playGroup?: { id: string; name: string }\n\n @state() tab: string = 'basic'\n\n render() {\n const existing = !!this.playGroup?.id\n\n return html`\n ${existing\n ? html`\n <div tab>\n <span @click=${() => (this.tab = 'basic')} ?active=${this.tab == 'basic'}>\n ${i18next.t('label.basic', { defaultValue: 'Basic' })}\n </span>\n <span @click=${() => (this.tab = 'link')} ?active=${this.tab == 'link'}>\n ${i18next.t('label.link', { defaultValue: 'Link' })}\n </span>\n </div>\n `\n : ''}\n <div content>\n ${this.tab == 'basic' || !existing\n ? html`<play-group-info-basic playGroupId=${ifDefined(this.playGroup?.id)}></play-group-info-basic>`\n : html`<play-group-info-link .playGroup=${this.playGroup}></play-group-info-link>`}\n </div>\n `\n }\n\n close() {\n history.back()\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/board-ui",
3
- "version": "10.1.41",
3
+ "version": "10.1.44",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -43,11 +43,11 @@
43
43
  "@operato/shell": "^10.0.0",
44
44
  "@operato/styles": "^10.0.0",
45
45
  "@operato/utils": "^10.0.0",
46
- "@things-factory/barcode-base": "^10.1.40",
47
- "@things-factory/board-ai": "^10.1.41",
48
- "@things-factory/fav-base": "^10.1.40",
49
- "@things-factory/setting-base": "^10.1.40",
46
+ "@things-factory/barcode-base": "^10.1.44",
47
+ "@things-factory/board-ai": "^10.1.44",
48
+ "@things-factory/fav-base": "^10.1.44",
49
+ "@things-factory/setting-base": "^10.1.44",
50
50
  "@things-factory/utils": "^10.1.20"
51
51
  },
52
- "gitHead": "4f41243edca4c965bc6992a10fb52d75a58fd3a9"
52
+ "gitHead": "7c95c4e75e155e51c714409e865d96f317232c23"
53
53
  }
@@ -25,6 +25,7 @@
25
25
  "button.confirm": "confirm",
26
26
  "button.copy": "copy",
27
27
  "button.copy to draft": "copy to draft",
28
+ "button.copy-link": "Copy headless link",
28
29
  "button.create": "create",
29
30
  "button.create board": "create board",
30
31
  "button.decrease-font": "decrease font",
@@ -32,9 +33,11 @@
32
33
  "button.detail": "detail",
33
34
  "button.diff with draft": "diff with draft",
34
35
  "button.diff with previous": "diff with previous",
36
+ "button.duplicate": "Duplicate…",
35
37
  "button.edit": "edit",
36
38
  "button.edit-group": "Edit Group",
37
39
  "button.export": "export",
40
+ "button.export-json": "Export as JSON",
38
41
  "button.export-locale-file": "export locale files",
39
42
  "button.font-selector": "Font Selector",
40
43
  "button.fullscreen": "fullscreen",
@@ -52,6 +55,7 @@
52
55
  "button.new-group": "New Group",
53
56
  "button.open modeller": "open modeller",
54
57
  "button.open-import": "Import",
58
+ "button.open-modeller": "Open in modeller",
55
59
  "button.profile": "profile",
56
60
  "button.redo": "redo",
57
61
  "button.refresh": "refresh",
@@ -163,6 +167,7 @@
163
167
  "label.back-side-template": "back side template",
164
168
  "label.background-color": "background color",
165
169
  "label.base-url": "Base URL",
170
+ "label.basic": "basic",
166
171
  "label.begin-size": "begin size",
167
172
  "label.begin-type": "begin type",
168
173
  "label.bevel": "bevel",
@@ -352,6 +357,7 @@
352
357
  "label.line-type": "line type",
353
358
  "label.line-width": "Line Width",
354
359
  "label.lines": "Lines",
360
+ "label.link": "link",
355
361
  "label.locale": "Locale",
356
362
  "label.location": "location",
357
363
  "label.location-field": "Location Field",
@@ -386,6 +392,9 @@
386
392
  "label.mm": "mm",
387
393
  "label.modal": "modal",
388
394
  "label.mode": "mode",
395
+ "label.modeller toolbar contextual": "Floating, next to the selection",
396
+ "label.modeller toolbar docked": "Docked at the top of the canvas",
397
+ "label.modeller toolbar fixed": "Classic toolbar with every tool",
389
398
  "label.move_to_admin": "Move to Administrator Page",
390
399
  "label.multi-axis": "Multi Axis",
391
400
  "label.multiple": "multiple",
@@ -408,6 +417,7 @@
408
417
  "label.opacity": "opacity",
409
418
  "label.opinion": "opinion",
410
419
  "label.options": "options",
420
+ "label.overwrite": "overwrite",
411
421
  "label.padding": "padding",
412
422
  "label.page": "page",
413
423
  "label.parsing": "parsing",
@@ -608,6 +618,7 @@
608
618
  "label.variable-list": "variable list",
609
619
  "label.variables": "Variables",
610
620
  "label.version": "Version",
621
+ "label.versions": "versions",
611
622
  "label.vertical": "vertical",
612
623
  "label.view type": "drawing type",
613
624
  "label.viewer-option": "viewer option",
@@ -669,6 +680,7 @@
669
680
  "text.Sure to X": "Are you sure to {x}",
670
681
  "text.add_files": "text.Add Files",
671
682
  "text.ai_assistant": "ai assistant",
683
+ "text.appliance token needs security privilege": "Adding an access token needs domain-owner or security query permission.",
672
684
  "text.backfilling thumbnails": "generating thumbnails...",
673
685
  "text.board cloned": "board '{board}' is cloned successfully",
674
686
  "text.board created": "board '{board}' is created successfully",
@@ -677,6 +689,7 @@
677
689
  "text.board reverted": "board '{board}' is reverted to version-'{version}' successfully",
678
690
  "text.board updated": "board '{board}' is updated successfully",
679
691
  "text.board-template deleted": "board template is deleted successfully",
692
+ "text.board-template hint": "Keeps a copy of this board as a starting point for new boards.",
680
693
  "text.board-template updated": "board template is updated successfully",
681
694
  "text.boards imported": "{count} boards are imported into group {group}",
682
695
  "text.can-not-change-group": "You don't have authority to change group information!",
@@ -695,6 +708,9 @@
695
708
  "text.drop or click to upload": "Drop a drawing here or click to browse",
696
709
  "text.drop_file_here": "text.Drop file here...",
697
710
  "text.drop_files_here": "text.Drop files here...",
711
+ "text.duplicate": "Duplicate",
712
+ "text.duplicate hint": "Copies this board into a domain and group. Give it a new name when copying within this domain.",
713
+ "text.edit group": "Edit",
698
714
  "text.empty-admin-url-allowed": "Administrator Page URL should not be empty! Please set the Administrator Page URL at Settings page",
699
715
  "text.empty-base-url-not-allowed": "Base URL should not be empty! Please set the Base URL",
700
716
  "text.emptyDataMessage": "Search Result is Nothing.",
@@ -707,6 +723,7 @@
707
723
  "text.group deleted": "group '{group}' is deleted successfully",
708
724
  "text.group updated": "group '{group}' is updated successfully",
709
725
  "text.group-required": "Label Group is Required!",
726
+ "text.headless-link hint": "Opens this board full screen with no application chrome - for a wall display or a kiosk.",
710
727
  "text.import success": "Board created successfully",
711
728
  "text.incorrect_file_type": "text.Incorrect File Type.",
712
729
  "text.info_invalid": "Typed information is not valid.",
@@ -718,17 +735,23 @@
718
735
  "text.joined into play-group": "board '{board}' joined into play-group '{playGroup}'",
719
736
  "text.latest": "latest",
720
737
  "text.leaved from play-group": "board '{board}' leaved from play-group '{playGroup}'",
738
+ "text.link copied": "Link copied",
721
739
  "text.loading": "Loading...",
722
740
  "text.login_failure": "Login failure.",
723
741
  "text.model-overlay": "Because this label is status of {1} \n, you can not edit more.",
724
742
  "text.model-overlay-authority-not-allow-change": "Cause of your authority, you can not edit more.",
725
743
  "text.model-overlay-status-not-allow-change": "Because this label is status of {1} \n, you can not edit more.",
744
+ "text.modeller toolbar contextual": "Shows only the tools that apply to what is selected. The top row keeps undo, redo, fit, preview and the panel.",
745
+ "text.modeller toolbar docked": "The same selection tools, pinned top-centre of the canvas so they never cover a shape or a handle.",
746
+ "text.modeller toolbar fixed": "Every tool in one row across the top, all the time.",
726
747
  "text.modeller-release-msg": "The version now you edit is older version, do you want to create and release new version base on the version?",
727
748
  "text.modeller-release-title": "Release:Version Warning",
728
749
  "text.modeller-save-msg": "The version now you edit is older version, do you want to create new version base on the version?",
729
750
  "text.modeller-save-title": "Save:Version Warning",
730
751
  "text.move-to-home": "It will be moved to home.",
731
752
  "text.name-and-group-required": "Label Name and Label Group is Required!",
753
+ "text.new group": "New Group",
754
+ "text.new play-group": "New Play Group",
732
755
  "text.no board to design": "no board is specified in the address, or the specified board was not found.",
733
756
  "text.no board to show": "no board is specified in the address, or the specified board was not found.",
734
757
  "text.no comment": "no comment",
@@ -745,7 +768,9 @@
745
768
  "text.perspective notice": "Perspective drawings are difficult to infer floor plan positions — positional accuracy may be low. Please verify and adjust.",
746
769
  "text.play-group created": "play-group '{playGroup}' is created successfully",
747
770
  "text.play-group deleted": "play-group '{playGroup}' is deleted successfully",
771
+ "text.play-group membership applies at once": "Tap a play group to add or remove this board. This applies right away.",
748
772
  "text.play-group updated": "play-group '{playGroup}' is updated successfully",
773
+ "text.plays in": "Plays in",
749
774
  "text.pls-name-board": "Type board name",
750
775
  "text.processing_file": "Processing File...",
751
776
  "text.processing_msg": "Your Request is Processing.",
@@ -758,8 +783,11 @@
758
783
  "text.reorder play-group": "play-group '{playGroup}' is reordered successfully",
759
784
  "text.request-role-success": "Role requested and admin will check it at e-mail.",
760
785
  "text.required_error": "Value Required.",
786
+ "text.save before release": "Save your changes first",
761
787
  "text.saved": "saved",
762
788
  "text.saving": "Saving...",
789
+ "text.search boards by name": "Search boards by name",
790
+ "text.search templates by name": "Search templates by name",
763
791
  "text.search with type, id or tag": "search with type, id or tag",
764
792
  "text.select_file": "Select File",
765
793
  "text.server_unavailable": "text.Server Unavailable",
@@ -773,6 +801,7 @@
773
801
  "text.too_many_files": "Too Many Files.",
774
802
  "text.unexpected_server_error": "Unexpected Server Error",
775
803
  "text.unknown_remaining_time": "unknown remaining time",
804
+ "text.updated by": "updated by",
776
805
  "text.uploading": "Uploading...",
777
806
  "text.user-active-confirm": "Would you like to active this user?",
778
807
  "text.want-to-cancel-request-confirm": "Do you want to change this version to eidting version?",
@@ -780,6 +809,7 @@
780
809
  "text.want-to-request-confirm": "Do you want to change this to finished version?",
781
810
  "text.want-to-version-up": "Do you want to version up?",
782
811
  "title.attachment list": "attachment list",
812
+ "title.board modeller setting": "Modeller contextual edit toolbar",
783
813
  "title.board view setting": "Board UI setting",
784
814
  "title.board-template list": "board template list",
785
815
  "title.copy": "Copy",