@operato/process 1.1.35 → 1.1.36

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 (44) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +1 -5
  3. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -1
  4. package/dist/src/modeller/property-sidebar/effects/property-event-tap.d.ts +1 -0
  5. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +2 -5
  6. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -1
  7. package/dist/src/modeller/property-sidebar/inspector/inspector.d.ts +1 -1
  8. package/dist/src/ox-editor-process-selector.d.ts +15 -0
  9. package/dist/src/ox-editor-process-selector.js +86 -0
  10. package/dist/src/ox-editor-process-selector.js.map +1 -0
  11. package/dist/src/ox-process-selector.d.ts +15 -0
  12. package/dist/src/ox-process-selector.js +86 -0
  13. package/dist/src/ox-process-selector.js.map +1 -0
  14. package/dist/src/ox-property-editor-process-selector.d.ts +4 -0
  15. package/dist/src/ox-property-editor-process-selector.js +22 -0
  16. package/dist/src/ox-property-editor-process-selector.js.map +1 -0
  17. package/dist/src/selector/ox-process-creation-card.d.ts +14 -0
  18. package/dist/src/selector/ox-process-creation-card.js +87 -0
  19. package/dist/src/selector/ox-process-creation-card.js.map +1 -0
  20. package/dist/src/selector/ox-process-selector.d.ts +44 -0
  21. package/dist/src/selector/ox-process-selector.js +306 -0
  22. package/dist/src/selector/ox-process-selector.js.map +1 -0
  23. package/dist/src/selector/process-creation-card.d.ts +14 -0
  24. package/dist/src/selector/process-creation-card.js +87 -0
  25. package/dist/src/selector/process-creation-card.js.map +1 -0
  26. package/dist/src/selector/process-creation-popup.d.ts +19 -0
  27. package/dist/src/selector/process-creation-popup.js +100 -0
  28. package/dist/src/selector/process-creation-popup.js.map +1 -0
  29. package/dist/src/selector/process-selector.d.ts +44 -0
  30. package/dist/src/selector/process-selector.js +306 -0
  31. package/dist/src/selector/process-selector.js.map +1 -0
  32. package/dist/src/selector/process-thumbnail-card.d.ts +15 -0
  33. package/dist/src/selector/process-thumbnail-card.js +169 -0
  34. package/dist/src/selector/process-thumbnail-card.js.map +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +24 -8
  37. package/src/modeller/property-sidebar/effects/property-event-hover.ts +1 -5
  38. package/src/modeller/property-sidebar/effects/property-event-tap.ts +2 -5
  39. package/src/ox-editor-process-selector.ts +91 -0
  40. package/src/ox-property-editor-process-selector.ts +23 -0
  41. package/src/selector/ox-process-creation-card.ts +94 -0
  42. package/src/selector/ox-process-selector.ts +321 -0
  43. package/src/selector/process-creation-popup.ts +102 -0
  44. package/src/selector/process-thumbnail-card.ts +175 -0
@@ -0,0 +1,306 @@
1
+ import { __decorate } from "tslib";
2
+ import './process-creation-card';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ import { buildArgs, client, gqlContext } from '@operato/graphql';
7
+ import { i18next, localize } from '@operato/i18n';
8
+ import { ScrollbarStyles } from '@operato/styles';
9
+ import InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js';
10
+ const FETCH_PROCESS_LIST_GQL = (listParam) => {
11
+ return gql `
12
+ {
13
+ processes(${buildArgs(listParam)}) {
14
+ items {
15
+ id
16
+ name
17
+ description
18
+ thumbnail
19
+ }
20
+ total
21
+ }
22
+ }
23
+ `;
24
+ };
25
+ const FETCH_PROCESS_GROUP_LIST_GQL = gql `
26
+ {
27
+ processGroups {
28
+ items {
29
+ id
30
+ name
31
+ description
32
+ }
33
+ total
34
+ }
35
+ }
36
+ `;
37
+ const CREATE_PROCESS_GQL = gql `
38
+ mutation CreateProcess($process: NewProcess!) {
39
+ createProcess(process: $process) {
40
+ id
41
+ name
42
+ description
43
+ model
44
+ createdAt
45
+ updatedAt
46
+ }
47
+ }
48
+ `;
49
+ let ProcessSelector = class ProcessSelector extends InfiniteScrollable(localize(i18next)(LitElement)) {
50
+ static get styles() {
51
+ return [
52
+ ScrollbarStyles,
53
+ css `
54
+ :host {
55
+ display: grid;
56
+ grid-template-rows: auto auto 1fr;
57
+ overflow: hidden;
58
+ background-color: var(--popup-content-background-color);
59
+ }
60
+
61
+ #main {
62
+ overflow: auto;
63
+ padding: var(--popup-content-padding);
64
+ display: grid;
65
+ grid-template-columns: var(--card-list-template);
66
+ grid-auto-rows: var(--card-list-rows-height);
67
+ grid-gap: 20px;
68
+ }
69
+
70
+ .card {
71
+ display: flex;
72
+ flex-direction: column;
73
+ align-items: center;
74
+ overflow: hidden;
75
+ border-radius: var(--card-list-border-radius);
76
+ background-color: var(--card-list-background-color);
77
+ }
78
+
79
+ .card[selected] {
80
+ border: red solid;
81
+ }
82
+
83
+ .card.create {
84
+ overflow: visible;
85
+ }
86
+
87
+ .card:hover {
88
+ cursor: pointer;
89
+ }
90
+
91
+ .card > .name {
92
+ background-color: var(--board-renderer-name-background-color);
93
+ opacity: 0.8;
94
+ margin-top: -35px;
95
+ width: 100%;
96
+ color: #fff;
97
+ font-weight: bolder;
98
+ font-size: 13px;
99
+ text-indent: 7px;
100
+ }
101
+
102
+ .card > .description {
103
+ background-color: rgba(0, 0, 0, 0.7);
104
+ width: 100%;
105
+ min-height: 15px;
106
+ font-size: 0.6rem;
107
+ color: #fff;
108
+ text-indent: 7px;
109
+ }
110
+ .card img {
111
+ max-height: 100%;
112
+ min-height: 100%;
113
+ }
114
+
115
+ #filter {
116
+ padding: var(--popup-content-padding);
117
+ background-color: #fff;
118
+ box-shadow: var(--box-shadow);
119
+ }
120
+
121
+ #filter * {
122
+ font-size: 15px;
123
+ }
124
+
125
+ select {
126
+ text-transform: capitalize;
127
+ float: right;
128
+ }
129
+ `
130
+ ];
131
+ }
132
+ constructor() {
133
+ super();
134
+ this.groups = [];
135
+ this.processes = [];
136
+ this.creatable = false;
137
+ this._page = 1;
138
+ this._total = 0;
139
+ this._infiniteScrollOptions.limit = 20;
140
+ }
141
+ render() {
142
+ return html `
143
+ <div id="filter">
144
+ <select
145
+ @change=${(e) => {
146
+ var _a;
147
+ this.group = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
148
+ this.requestUpdate();
149
+ }}
150
+ >
151
+ <option value="">${i18next.t('label.all')}</option>
152
+ ${this.groups.map(group => html ` <option value=${group.id}>${group.description}</option> `)}
153
+ </select>
154
+ </div>
155
+
156
+ <div
157
+ id="main"
158
+ @scroll=${(e) => {
159
+ this.onScroll(e);
160
+ }}
161
+ >
162
+ ${this.creatable
163
+ ? html `
164
+ <process-creation-card
165
+ class="card create"
166
+ .groups=${this.groups}
167
+ .defaultGroup=${this.group}
168
+ @create-process=${(e) => this.onCreateProcess(e)}
169
+ ></process-creation-card>
170
+ `
171
+ : html ``}
172
+ ${this.processes.map(process => html `
173
+ <div
174
+ class="card"
175
+ @click=${(e) => this.onClickSelect(process)}
176
+ ?selected=${this.value === process.id}
177
+ >
178
+ <img src=${process.thumbnail} />
179
+ <div class="name">${process.name}</div>
180
+ <div class="description">${process.description}</div>
181
+ </div>
182
+ `)}
183
+ </div>
184
+ `;
185
+ }
186
+ //@ts-ignore
187
+ get scrollTargetEl() {
188
+ return this.renderRoot.querySelector('#main');
189
+ }
190
+ async scrollAction() {
191
+ return this.appendProcesses();
192
+ }
193
+ firstUpdated() {
194
+ this.refreshGroups();
195
+ }
196
+ async updated(changed) {
197
+ if (changed.has('group')) {
198
+ this.refreshProcesses();
199
+ }
200
+ }
201
+ onClickSelect(process) {
202
+ this.dispatchEvent(new CustomEvent('process-selected', {
203
+ composed: true,
204
+ bubbles: true,
205
+ detail: {
206
+ process
207
+ }
208
+ }));
209
+ }
210
+ async onCreateProcess(e) {
211
+ var { name, description, groupId } = e.detail;
212
+ await this.createProcess(name, description, groupId);
213
+ this.refreshProcesses();
214
+ }
215
+ async refreshGroups() {
216
+ var groupListResponse = await client.query({
217
+ query: FETCH_PROCESS_GROUP_LIST_GQL,
218
+ context: gqlContext()
219
+ });
220
+ if (!groupListResponse || !groupListResponse.data)
221
+ return;
222
+ var groups = groupListResponse.data.processGroups.items;
223
+ this.groups = [...groups];
224
+ this.group = groups.filter((group) => group.id == this.group).length > 0 ? this.group : '';
225
+ }
226
+ async refreshProcesses() {
227
+ var processes = await this.getProcesses();
228
+ this.processes = [...processes];
229
+ var creationCard = this.renderRoot.querySelector('process-creation-card');
230
+ if (creationCard) {
231
+ ;
232
+ creationCard.reset();
233
+ }
234
+ }
235
+ async appendProcesses() {
236
+ var processes = await this.getProcesses({ page: this._page + 1 });
237
+ this.processes = [...this.processes, ...processes];
238
+ }
239
+ async getProcesses({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {
240
+ var filters = [];
241
+ var sortings = [];
242
+ var pagination = {
243
+ limit,
244
+ page
245
+ };
246
+ if (this.group)
247
+ filters.push({
248
+ name: 'groupId',
249
+ operator: 'eq',
250
+ value: this.group
251
+ });
252
+ var params = {
253
+ filters,
254
+ sortings,
255
+ pagination
256
+ };
257
+ var processListResponse = await client.query({
258
+ query: FETCH_PROCESS_LIST_GQL(params),
259
+ context: gqlContext()
260
+ });
261
+ if (!processListResponse || !processListResponse.data)
262
+ return [];
263
+ this._total = processListResponse.data.processes.total;
264
+ this._page = page;
265
+ return processListResponse.data.processes.items;
266
+ }
267
+ async createProcess(name, description, groupId) {
268
+ var model = JSON.stringify({
269
+ width: 800,
270
+ height: 600
271
+ });
272
+ const response = await client.mutate({
273
+ mutation: CREATE_PROCESS_GQL,
274
+ variables: {
275
+ process: {
276
+ name,
277
+ description,
278
+ groupId,
279
+ model
280
+ }
281
+ },
282
+ context: gqlContext()
283
+ });
284
+ return response.data;
285
+ }
286
+ };
287
+ __decorate([
288
+ property({ type: Array })
289
+ ], ProcessSelector.prototype, "groups", void 0);
290
+ __decorate([
291
+ property({ type: Array })
292
+ ], ProcessSelector.prototype, "processes", void 0);
293
+ __decorate([
294
+ property({ type: String })
295
+ ], ProcessSelector.prototype, "group", void 0);
296
+ __decorate([
297
+ property({ type: Boolean })
298
+ ], ProcessSelector.prototype, "creatable", void 0);
299
+ __decorate([
300
+ property({ type: String })
301
+ ], ProcessSelector.prototype, "value", void 0);
302
+ ProcessSelector = __decorate([
303
+ customElement('process-selector')
304
+ ], ProcessSelector);
305
+ export { ProcessSelector };
306
+ //# sourceMappingURL=process-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-selector.js","sourceRoot":"","sources":["../../../src/selector/process-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import './process-creation-card'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { buildArgs, client, gqlContext } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js'\n\nconst FETCH_PROCESS_LIST_GQL = (listParam: any) => {\n return gql`\n {\n processes(${buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n }\n total\n }\n }\n`\n}\n\nconst FETCH_PROCESS_GROUP_LIST_GQL = gql`\n {\n processGroups {\n items {\n id\n name\n description\n }\n total\n }\n }\n`\n\nconst CREATE_PROCESS_GQL = gql`\n mutation CreateProcess($process: NewProcess!) {\n createProcess(process: $process) {\n id\n name\n description\n model\n createdAt\n updatedAt\n }\n }\n`\n\n@customElement('process-selector')\nexport class ProcessSelector extends InfiniteScrollable(localize(i18next)(LitElement)) {\n static get styles() {\n return [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto auto 1fr;\n overflow: hidden;\n background-color: var(--popup-content-background-color);\n }\n\n #main {\n overflow: auto;\n padding: var(--popup-content-padding);\n display: grid;\n grid-template-columns: var(--card-list-template);\n grid-auto-rows: var(--card-list-rows-height);\n grid-gap: 20px;\n }\n\n .card {\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: hidden;\n border-radius: var(--card-list-border-radius);\n background-color: var(--card-list-background-color);\n }\n\n .card[selected] {\n border: red solid;\n }\n\n .card.create {\n overflow: visible;\n }\n\n .card:hover {\n cursor: pointer;\n }\n\n .card > .name {\n background-color: var(--board-renderer-name-background-color);\n opacity: 0.8;\n margin-top: -35px;\n width: 100%;\n color: #fff;\n font-weight: bolder;\n font-size: 13px;\n text-indent: 7px;\n }\n\n .card > .description {\n background-color: rgba(0, 0, 0, 0.7);\n width: 100%;\n min-height: 15px;\n font-size: 0.6rem;\n color: #fff;\n text-indent: 7px;\n }\n .card img {\n max-height: 100%;\n min-height: 100%;\n }\n\n #filter {\n padding: var(--popup-content-padding);\n background-color: #fff;\n box-shadow: var(--box-shadow);\n }\n\n #filter * {\n font-size: 15px;\n }\n\n select {\n text-transform: capitalize;\n float: right;\n }\n `\n ]\n }\n\n @property({ type: Array }) groups: { id: string; name: string; description: string }[] = []\n @property({ type: Array }) processes: any[] = []\n @property({ type: String }) group?: string\n @property({ type: Boolean }) creatable: boolean = false\n @property({ type: String }) value?: string\n\n private _page: number = 1\n private _total: number = 0\n\n constructor() {\n super()\n\n this._infiniteScrollOptions.limit = 20\n }\n\n render() {\n return html`\n <div id=\"filter\">\n <select\n @change=${(e: Event) => {\n this.group = (e.currentTarget as any)?.value\n this.requestUpdate()\n }}\n >\n <option value=\"\">${i18next.t('label.all')}</option>\n ${this.groups.map(group => html` <option value=${group.id}>${group.description}</option> `)}\n </select>\n </div>\n\n <div\n id=\"main\"\n @scroll=${(e: Event) => {\n this.onScroll(e)\n }}\n >\n ${this.creatable\n ? html`\n <process-creation-card\n class=\"card create\"\n .groups=${this.groups}\n .defaultGroup=${this.group}\n @create-process=${(e: CustomEvent) => this.onCreateProcess(e)}\n ></process-creation-card>\n `\n : html``}\n ${this.processes.map(\n process => html`\n <div\n class=\"card\"\n @click=${(e: Event) => this.onClickSelect(process)}\n ?selected=${this.value === process.id}\n >\n <img src=${process.thumbnail} />\n <div class=\"name\">${process.name}</div>\n <div class=\"description\">${process.description}</div>\n </div>\n `\n )}\n </div>\n `\n }\n\n //@ts-ignore\n get scrollTargetEl(): HTMLElement | null {\n return this.renderRoot.querySelector('#main') as HTMLElement\n }\n\n async scrollAction() {\n return this.appendProcesses()\n }\n\n firstUpdated() {\n this.refreshGroups()\n }\n\n async updated(changed: PropertyValues<this>) {\n if (changed.has('group')) {\n this.refreshProcesses()\n }\n }\n\n onClickSelect(process: any) {\n this.dispatchEvent(\n new CustomEvent('process-selected', {\n composed: true,\n bubbles: true,\n detail: {\n process\n }\n })\n )\n }\n\n async onCreateProcess(e: CustomEvent) {\n var { name, description, groupId } = e.detail\n\n await this.createProcess(name, description, groupId)\n this.refreshProcesses()\n }\n\n async refreshGroups() {\n var groupListResponse = await client.query({\n query: FETCH_PROCESS_GROUP_LIST_GQL,\n context: gqlContext()\n })\n\n if (!groupListResponse || !groupListResponse.data) return\n\n var groups = groupListResponse.data.processGroups.items\n this.groups = [...groups]\n\n this.group = groups.filter((group: { id: string }) => group.id == this.group).length > 0 ? this.group : ''\n }\n\n async refreshProcesses() {\n var processes = await this.getProcesses()\n this.processes = [...processes]\n\n var creationCard = this.renderRoot.querySelector('process-creation-card')\n if (creationCard) {\n ;(creationCard as any).reset()\n }\n }\n\n async appendProcesses() {\n var processes = await this.getProcesses({ page: this._page + 1 })\n this.processes = [...this.processes, ...processes]\n }\n\n async getProcesses({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n var filters = []\n var sortings = [] as any[]\n var pagination = {\n limit,\n page\n }\n\n if (this.group)\n filters.push({\n name: 'groupId',\n operator: 'eq',\n value: this.group\n })\n\n var params = {\n filters,\n sortings,\n pagination\n }\n var processListResponse = await client.query({\n query: FETCH_PROCESS_LIST_GQL(params),\n context: gqlContext()\n })\n\n if (!processListResponse || !processListResponse.data) return []\n this._total = processListResponse.data.processes.total\n this._page = page\n\n return processListResponse.data.processes.items\n }\n\n async createProcess(name: string, description: string, groupId: string) {\n var model = JSON.stringify({\n width: 800,\n height: 600\n })\n\n const response = await client.mutate({\n mutation: CREATE_PROCESS_GQL,\n variables: {\n process: {\n name,\n description,\n groupId,\n model\n }\n },\n context: gqlContext()\n })\n\n return response.data\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { LitElement } from 'lit';
2
+ declare const ProcessThumbnailCard_base: (new (...args: any[]) => LitElement) & typeof LitElement;
3
+ export declare class ProcessThumbnailCard extends ProcessThumbnailCard_base {
4
+ static get styles(): import("lit").CSSResult[];
5
+ defaultGroup?: string;
6
+ groups?: {
7
+ id: string;
8
+ name: string;
9
+ }[];
10
+ render(): import("lit-html").TemplateResult<1>;
11
+ onClickFlip(e: Event): void;
12
+ onClickSubmit(e: Event): void;
13
+ reset(): void;
14
+ }
15
+ export {};
@@ -0,0 +1,169 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { i18next, localize } from '@operato/i18n';
5
+ let ProcessThumbnailCard = class ProcessThumbnailCard extends localize(i18next)(LitElement) {
6
+ static get styles() {
7
+ return [
8
+ css `
9
+ :host {
10
+ position: relative;
11
+
12
+ padding: 0;
13
+ margin: 0;
14
+ height: 100%;
15
+
16
+ -webkit-transform-style: preserve-3d;
17
+ transform-style: preserve-3d;
18
+ -webkit-transition: all 0.5s ease-in-out;
19
+ transition: all 0.5s ease-in-out;
20
+ }
21
+
22
+ :host(.flipped) {
23
+ -webkit-transform: var(--card-list-flip-transform);
24
+ transform: var(--card-list-flip-transform);
25
+ }
26
+
27
+ [front],
28
+ [back] {
29
+ position: absolute;
30
+
31
+ width: 100%;
32
+ height: 100%;
33
+ margin: 0;
34
+ padding: 0;
35
+
36
+ border: var(--card-list-create-border);
37
+ border-radius: var(--card-list-create-border-radius);
38
+
39
+ background-color: #fff;
40
+
41
+ -webkit-backface-visibility: hidden;
42
+ backface-visibility: hidden;
43
+ }
44
+
45
+ [front] {
46
+ text-align: center;
47
+ font-size: 0.8em;
48
+ color: var(--card-list-create-color);
49
+ text-transform: capitalize;
50
+ }
51
+
52
+ [front] mwc-icon {
53
+ margin-top: 15%;
54
+ display: block;
55
+ font-size: 3.5em;
56
+ color: var(--card-list-create-icon-color);
57
+ }
58
+
59
+ [back] {
60
+ -webkit-transform: var(--card-list-flip-transform);
61
+ transform: var(--card-list-flip-transform);
62
+ }
63
+
64
+ [back] form {
65
+ padding: var(--card-list-create-form-padding);
66
+ display: flex;
67
+ flex-flow: row wrap;
68
+ }
69
+
70
+ [back] form label {
71
+ flex: 1 1 25%;
72
+ font: var(--card-list-create-label-font);
73
+ color: var(--card-list-create-label-color);
74
+ }
75
+
76
+ [back] form input,
77
+ [back] form select {
78
+ flex: 1 1 60%;
79
+ width: 10px;
80
+ background-color: #fff;
81
+ border: var(--card-list-create-input-border);
82
+ border-radius: var(--card-list-create-input-border-radius);
83
+ padding: var(--card-list-create-input-padding);
84
+ font: var(--card-list-create-input-font);
85
+ color: var(--card-list-create-input-color);
86
+ }
87
+
88
+ form * {
89
+ margin: var(--card-list-create-margin);
90
+ }
91
+
92
+ input[type='submit'] {
93
+ background-color: var(--button-background-color) !important;
94
+ margin: var(--button-margin);
95
+ font: var(--button-font);
96
+ color: var(--button-color) !important;
97
+ border-radius: var(--button-radius);
98
+ border: var(--button-border);
99
+ }
100
+ `
101
+ ];
102
+ }
103
+ render() {
104
+ var groups = this.groups || [];
105
+ return html `
106
+ <div @click=${(e) => this.onClickFlip(e)} front><mwc-icon>add_circle_outline</mwc-icon>create process</div>
107
+
108
+ <div @click=${(e) => this.onClickFlip(e)} back>
109
+ <form @submit=${(e) => this.onClickSubmit(e)}>
110
+ <label>${i18next.t('label.name')}</label>
111
+ <input type="text" name="name" />
112
+
113
+ <label>${i18next.t('label.description')}</label>
114
+ <input type="text" name="description" />
115
+
116
+ <label>${i18next.t('label.group')}</label>
117
+ <select .value=${this.defaultGroup || ''} name="groupId">
118
+ ${groups.map(group => html `
119
+ <option value=${group.id} ?selected=${this.defaultGroup == group.id}>${group.name}</option>
120
+ `)}
121
+ </select>
122
+
123
+ <input type="submit" value=${String(i18next.t('button.create'))} />
124
+ </form>
125
+ </div>
126
+ `;
127
+ }
128
+ onClickFlip(e) {
129
+ var _a, _b;
130
+ if (((_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.hasAttribute('front')) || ((_b = e.target) === null || _b === void 0 ? void 0 : _b.hasAttribute('back'))) {
131
+ this.classList.toggle('flipped');
132
+ }
133
+ e.stopPropagation();
134
+ }
135
+ onClickSubmit(e) {
136
+ e.preventDefault();
137
+ e.stopPropagation();
138
+ var form = e.target;
139
+ var name = form.elements['name'].value;
140
+ var description = form.elements['description'].value;
141
+ var groupId = form.elements['groupId'].value;
142
+ this.dispatchEvent(new CustomEvent('create-process', {
143
+ detail: {
144
+ name,
145
+ description,
146
+ groupId
147
+ }
148
+ }));
149
+ }
150
+ reset() {
151
+ var _a;
152
+ var form = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('form');
153
+ if (form) {
154
+ form.reset();
155
+ }
156
+ this.classList.remove('flipped');
157
+ }
158
+ };
159
+ __decorate([
160
+ property({ type: String })
161
+ ], ProcessThumbnailCard.prototype, "defaultGroup", void 0);
162
+ __decorate([
163
+ property({ type: Array })
164
+ ], ProcessThumbnailCard.prototype, "groups", void 0);
165
+ ProcessThumbnailCard = __decorate([
166
+ customElement('process-thumbnail-card')
167
+ ], ProcessThumbnailCard);
168
+ export { ProcessThumbnailCard };
169
+ //# sourceMappingURL=process-thumbnail-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-thumbnail-card.js","sourceRoot":"","sources":["../../../src/selector/process-thumbnail-card.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\n\n@customElement('process-thumbnail-card')\nexport class ProcessThumbnailCard extends localize(i18next)(LitElement) {\n static get styles() {\n return [\n css`\n :host {\n position: relative;\n\n padding: 0;\n margin: 0;\n height: 100%;\n\n -webkit-transform-style: preserve-3d;\n transform-style: preserve-3d;\n -webkit-transition: all 0.5s ease-in-out;\n transition: all 0.5s ease-in-out;\n }\n\n :host(.flipped) {\n -webkit-transform: var(--card-list-flip-transform);\n transform: var(--card-list-flip-transform);\n }\n\n [front],\n [back] {\n position: absolute;\n\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n\n border: var(--card-list-create-border);\n border-radius: var(--card-list-create-border-radius);\n\n background-color: #fff;\n\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n }\n\n [front] {\n text-align: center;\n font-size: 0.8em;\n color: var(--card-list-create-color);\n text-transform: capitalize;\n }\n\n [front] mwc-icon {\n margin-top: 15%;\n display: block;\n font-size: 3.5em;\n color: var(--card-list-create-icon-color);\n }\n\n [back] {\n -webkit-transform: var(--card-list-flip-transform);\n transform: var(--card-list-flip-transform);\n }\n\n [back] form {\n padding: var(--card-list-create-form-padding);\n display: flex;\n flex-flow: row wrap;\n }\n\n [back] form label {\n flex: 1 1 25%;\n font: var(--card-list-create-label-font);\n color: var(--card-list-create-label-color);\n }\n\n [back] form input,\n [back] form select {\n flex: 1 1 60%;\n width: 10px;\n background-color: #fff;\n border: var(--card-list-create-input-border);\n border-radius: var(--card-list-create-input-border-radius);\n padding: var(--card-list-create-input-padding);\n font: var(--card-list-create-input-font);\n color: var(--card-list-create-input-color);\n }\n\n form * {\n margin: var(--card-list-create-margin);\n }\n\n input[type='submit'] {\n background-color: var(--button-background-color) !important;\n margin: var(--button-margin);\n font: var(--button-font);\n color: var(--button-color) !important;\n border-radius: var(--button-radius);\n border: var(--button-border);\n }\n `\n ]\n }\n\n @property({ type: String }) defaultGroup?: string\n @property({ type: Array }) groups?: { id: string; name: string }[]\n\n render() {\n var groups = this.groups || []\n\n return html`\n <div @click=${(e: Event) => this.onClickFlip(e)} front><mwc-icon>add_circle_outline</mwc-icon>create process</div>\n\n <div @click=${(e: Event) => this.onClickFlip(e)} back>\n <form @submit=${(e: Event) => this.onClickSubmit(e)}>\n <label>${i18next.t('label.name')}</label>\n <input type=\"text\" name=\"name\" />\n\n <label>${i18next.t('label.description')}</label>\n <input type=\"text\" name=\"description\" />\n\n <label>${i18next.t('label.group')}</label>\n <select .value=${this.defaultGroup || ''} name=\"groupId\">\n ${groups.map(\n group => html`\n <option value=${group.id} ?selected=${this.defaultGroup == group.id}>${group.name}</option>\n `\n )}\n </select>\n\n <input type=\"submit\" value=${String(i18next.t('button.create'))} />\n </form>\n </div>\n `\n }\n\n onClickFlip(e: Event) {\n if ((e.currentTarget as any)?.hasAttribute('front') || (e.target as any)?.hasAttribute('back')) {\n this.classList.toggle('flipped')\n }\n\n e.stopPropagation()\n }\n\n onClickSubmit(e: Event) {\n e.preventDefault()\n e.stopPropagation()\n\n var form = e.target as any\n\n var name = form.elements['name'].value\n var description = form.elements['description'].value\n var groupId = form.elements['groupId'].value\n\n this.dispatchEvent(\n new CustomEvent('create-process', {\n detail: {\n name,\n description,\n groupId\n }\n })\n )\n }\n\n reset() {\n var form = this.shadowRoot?.querySelector('form')\n if (form) {\n form.reset()\n }\n\n this.classList.remove('flipped')\n }\n}\n"]}