@everymatrix/lottery-ticket 0.0.3 → 0.1.4

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.
@@ -4,6 +4,16 @@
4
4
  font-family: "Roboto", sans-serif;
5
5
  }
6
6
 
7
+ .TicketTitle {
8
+ font-size: 16px;
9
+ font-weight: bold;
10
+ }
11
+
12
+ .ButtonContainer {
13
+ display: flex;
14
+ justify-content: flex-end;
15
+ }
16
+
7
17
  .Toggle {
8
18
  cursor: pointer;
9
19
  margin-top: 20px;
@@ -90,12 +100,10 @@ input[type=number]::-webkit-outer-spin-button {
90
100
  cursor: pointer;
91
101
  outline: none;
92
102
  -webkit-appearance: none;
93
- background-color: transparent;
94
103
  border: none;
95
104
  align-items: center;
96
105
  justify-content: center;
97
106
  height: 20px;
98
- margin: 0;
99
107
  position: relative;
100
108
  }
101
109
 
@@ -103,7 +111,6 @@ input[type=number]::-webkit-outer-spin-button {
103
111
  display: inline-block;
104
112
  position: absolute;
105
113
  transform: translate(-50%, -50%) rotate(180deg);
106
- width: 30px;
107
114
  align-items: center;
108
115
  text-align: center;
109
116
  }
@@ -141,9 +148,9 @@ input[type=number]::-webkit-outer-spin-button {
141
148
 
142
149
  .AutoButton {
143
150
  cursor: pointer;
144
- display: block;
151
+ display: inline-block;
145
152
  border-radius: 4px;
146
- padding: 8px 25px;
153
+ padding: 8px 20px;
147
154
  width: max-content;
148
155
  margin: 5px 0;
149
156
  border: 1px solid #00958f;
@@ -162,9 +169,9 @@ input[type=number]::-webkit-outer-spin-button {
162
169
 
163
170
  .ResetButton {
164
171
  cursor: pointer;
165
- display: block;
172
+ display: inline-block;
166
173
  border-radius: 4px;
167
- padding: 8px 25px;
174
+ padding: 8px 20px;
168
175
  width: max-content;
169
176
  margin: 5px 0;
170
177
  color: #000;
@@ -190,4 +197,111 @@ input[type=number]::-webkit-outer-spin-button {
190
197
  }
191
198
  .TicketGridBullets .TicketGridTitle {
192
199
  margin-top: 0px;
200
+ }
201
+
202
+ .Minus {
203
+ border-radius: 4px;
204
+ width: 30px;
205
+ height: 24px !important;
206
+ margin-right: 10px;
207
+ color: #FFF;
208
+ background: #009993;
209
+ }
210
+
211
+ .Plus {
212
+ border-radius: 4px;
213
+ width: 30px;
214
+ height: 24px !important;
215
+ margin-left: 10px;
216
+ color: #FFF;
217
+ background: #009993;
218
+ }
219
+
220
+ .SelectWrapper {
221
+ width: auto;
222
+ padding: 5px;
223
+ margin: 0 auto;
224
+ border: 1px solid #ccc;
225
+ border-radius: 5px;
226
+ position: relative;
227
+ }
228
+
229
+ .SelectButton, .SelectOptions li {
230
+ display: flex;
231
+ align-items: center;
232
+ cursor: pointer;
233
+ }
234
+
235
+ .SelectButton {
236
+ display: flex;
237
+ padding: 0 5px;
238
+ border-radius: 7px;
239
+ align-items: center;
240
+ justify-content: space-between;
241
+ font-size: 14px;
242
+ }
243
+ .SelectButton span:first-child {
244
+ padding-right: 10px;
245
+ }
246
+
247
+ .SelectExpand {
248
+ transition: transform 0.3s linear;
249
+ font-size: 12px;
250
+ }
251
+
252
+ .SelectActive .SelectExpand {
253
+ transform: rotate(180deg);
254
+ }
255
+
256
+ .SelectContent {
257
+ display: none;
258
+ padding: 5px;
259
+ border-radius: 7px;
260
+ }
261
+
262
+ .SelectWrapper.SelectActive .SelectContent {
263
+ width: 100%;
264
+ display: block;
265
+ position: absolute;
266
+ left: 0;
267
+ top: 32px;
268
+ padding: 0;
269
+ border: 1px solid #ccc;
270
+ overflow: hidden;
271
+ background: #fff;
272
+ }
273
+
274
+ .SelectContent .SelectOptions {
275
+ max-height: 100px;
276
+ margin: 0;
277
+ overflow-y: auto;
278
+ padding: 0;
279
+ }
280
+ .SelectContent .SelectOptions .SelectedValue {
281
+ background-color: #009993;
282
+ color: #fff;
283
+ }
284
+
285
+ .SelectOptions::-webkit-scrollbar {
286
+ width: 7px;
287
+ }
288
+
289
+ .SelectOptions::-webkit-scrollbar-track {
290
+ background: #f1f1f1;
291
+ border-radius: 25px;
292
+ }
293
+
294
+ .SelectOptions::-webkit-scrollbar-thumb {
295
+ background: #ccc;
296
+ border-radius: 25px;
297
+ }
298
+
299
+ .SelectOptions li {
300
+ height: 20px;
301
+ padding: 0 13px;
302
+ font-size: 14px;
303
+ }
304
+
305
+ .SelectOptions li:hover {
306
+ background: #f2f2f2;
193
307
  }
@@ -28,6 +28,16 @@ export class LotteryTicket {
28
28
  this.isLoading = true;
29
29
  this.hasErrors = false;
30
30
  this.ticketDone = false;
31
+ this.isCustomSelect = false;
32
+ this.amountInfo = {};
33
+ }
34
+ /**
35
+ * @TODO find a better way to implement click outside the custom select, so that we don't have to use the 'data-cluster' attribute on each element
36
+ */
37
+ checkForClickOutside(ev) {
38
+ if (ev.composedPath()[0].getAttribute('data-cluster') !== 'SelectComponent') {
39
+ this.isCustomSelect = false;
40
+ }
31
41
  }
32
42
  connectedCallback() {
33
43
  let url = new URL(`${this.endpoint}/games/${this.gameId}`);
@@ -45,6 +55,7 @@ export class LotteryTicket {
45
55
  this.isLoading = false;
46
56
  this.gameData = data;
47
57
  this.grids = [...Array(data.rules.boards.length).keys()];
58
+ this.amountInfo = this.gameData.rules.stakes[0]; // initial value for select
48
59
  })
49
60
  .catch((err) => {
50
61
  this.isLoading = false;
@@ -73,12 +84,23 @@ export class LotteryTicket {
73
84
  this.ticketDone = false;
74
85
  this.resetSelection.emit(this.ticketId);
75
86
  }
76
- changeStake(event) {
87
+ changeStake(ticketid, amount) {
77
88
  this.stakeChange.emit({
78
- ticketId: this.ticketId,
79
- stake: event.target.value
89
+ ticketId: ticketid,
90
+ stake: amount
80
91
  });
81
92
  }
93
+ toggleClass() {
94
+ this.isCustomSelect = !this.isCustomSelect;
95
+ }
96
+ setDropdownItem(item) {
97
+ this.amountInfo = {
98
+ amount: item.amount,
99
+ currency: item.currency
100
+ };
101
+ this.isCustomSelect = false;
102
+ this.changeStake(this.ticketId, item.amount);
103
+ }
82
104
  render() {
83
105
  if (this.isLoading) {
84
106
  return (h("div", null,
@@ -92,11 +114,13 @@ export class LotteryTicket {
92
114
  else {
93
115
  const { rules } = this.gameData;
94
116
  return (h("div", { class: "TicketContainer" },
95
- h("p", null, this.gameData.name),
117
+ h("p", { class: "TicketTitle" }, this.gameData.name),
96
118
  this.resetButton && this.ticketDone &&
97
- h("a", { class: "ResetButton", onClick: () => this.toggleResetSelection() }, translate('resetButton', this.language)),
119
+ h("div", { class: "ButtonContainer" },
120
+ h("a", { class: "ResetButton", onClick: () => this.toggleResetSelection() }, translate('resetButton', this.language))),
98
121
  this.autoPick && !this.ticketDone &&
99
- h("a", { class: "AutoButton", onClick: () => this.toggleAutoSelection() }, translate('autoButton', this.language)),
122
+ h("div", { class: "ButtonContainer" },
123
+ h("a", { class: "AutoButton", onClick: () => this.toggleAutoSelection() }, translate('autoButton', this.language))),
100
124
  this.grids.map((item, index) => h("div", { class: "TicketGridBullets" },
101
125
  h("p", { class: "TicketGridTitle" },
102
126
  translate('grid', this.language),
@@ -120,16 +144,25 @@ export class LotteryTicket {
120
144
  h("button", { onClick: () => this.numberOfDraws > 1 ? this.numberOfDraws-- : this.numberOfDraws = 1, class: "Minus" }, "-"),
121
145
  h("input", { class: "InputDefault", min: "1", value: this.numberOfDraws, type: "number" }),
122
146
  h("button", { onClick: () => this.numberOfDraws++, class: "Plus" }, "+"))),
123
- h("label", { class: "Label" },
124
- translate('wagerPerDraw', this.language),
125
- ": "),
126
- h("div", { class: "WagerInput" }, rules.stakes.length > 1 ? h("div", null,
127
- h("select", { class: "InputDefault", onChange: (event) => this.changeStake(event) }, rules.stakes.map((item) => h("option", { value: item.amount },
128
- item.amount,
129
- " ",
130
- item.currency)))) : h("div", null,
131
- h("input", { min: "1", value: rules.stakes[0].amount, type: "number", disabled: true }),
132
- h("p", { class: "WagerInputTitle" }, rules.stakes[0].currency)))));
147
+ h("div", null,
148
+ h("label", { class: "Label" },
149
+ translate('wagerPerDraw', this.language),
150
+ ": "),
151
+ h("div", { class: "WagerInput" }, rules.stakes.length > 1 ?
152
+ (h("div", { "data-cluster": "SelectComponent", class: this.isCustomSelect ? "SelectWrapper SelectActive" : "SelectWrapper" },
153
+ h("div", { "data-cluster": "SelectComponent", class: "SelectButton", onClick: () => this.toggleClass() },
154
+ h("span", { "data-cluster": "SelectComponent" },
155
+ this.amountInfo.amount,
156
+ " ",
157
+ this.amountInfo.currency),
158
+ h("span", { "data-cluster": "SelectComponent", class: "SelectExpand" }, "\u25BC")),
159
+ h("div", { "data-cluster": "SelectComponent", class: "SelectContent" },
160
+ h("ul", { "data-cluster": "SelectComponent", class: "SelectOptions" }, rules.stakes.map((item) => h("li", { "data-cluster": "SelectComponent", class: this.amountInfo.amount == item.amount ? 'SelectedValue' : '', value: item.amount, onClick: () => this.setDropdownItem(item) },
161
+ item.amount,
162
+ " ",
163
+ item.currency)))))) : (h("div", null,
164
+ h("input", { min: "1", value: rules.stakes[0].amount, type: "number", disabled: true }),
165
+ h("p", { class: "WagerInputTitle" }, rules.stakes[0].currency)))))));
133
166
  }
134
167
  }
135
168
  }
@@ -289,7 +322,9 @@ export class LotteryTicket {
289
322
  "numberOfDraws": {},
290
323
  "isLoading": {},
291
324
  "hasErrors": {},
292
- "ticketDone": {}
325
+ "ticketDone": {},
326
+ "isCustomSelect": {},
327
+ "amountInfo": {}
293
328
  }; }
294
329
  static get events() { return [{
295
330
  "method": "ticketCompleted",
@@ -375,6 +410,12 @@ export class LotteryTicket {
375
410
  "methodName": "drawsChangeHandler"
376
411
  }]; }
377
412
  static get listeners() { return [{
413
+ "name": "click",
414
+ "method": "checkForClickOutside",
415
+ "target": "window",
416
+ "capture": false,
417
+ "passive": false
418
+ }, {
378
419
  "name": "gridFilled",
379
420
  "method": "gridFilledHandler",
380
421
  "target": undefined,
@@ -1,5 +1,6 @@
1
1
  /* LotteryTicket custom elements */
2
- export { LotteryTicket as LotteryTicket } from '../types/components/lottery-ticket/lottery-ticket';
2
+
3
+ import type { Components, JSX } from "../types/components";
3
4
 
4
5
  /**
5
6
  * Used to manually set the base path where assets can be found.
@@ -19,4 +20,7 @@ export interface SetPlatformOptions {
19
20
  rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
20
21
  }
21
22
  export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;
23
+
24
+ export type { Components, JSX };
25
+
22
26
  export * from '../types';
@@ -1,2 +1 @@
1
1
  export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
2
- export { LotteryTicket, defineCustomElement as defineCustomElementLotteryTicket } from './lottery-ticket.js';
@@ -0,0 +1,6 @@
1
+ import { L as LotteryBullet$1, d as defineCustomElement$1 } from './lottery-bullet2.js';
2
+
3
+ const LotteryBullet = LotteryBullet$1;
4
+ const defineCustomElement = defineCustomElement$1;
5
+
6
+ export { LotteryBullet, defineCustomElement };
@@ -0,0 +1,56 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+
3
+ const lotteryBulletCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}@-webkit-keyframes Circle{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes Circle{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hover-rotate{0%{-webkit-transform:scale(1) rotateZ(0);transform:scale(1) rotateZ(0)}50%{-webkit-transform:scale(1.2) rotateZ(180deg);transform:scale(1.22) rotateZ(180deg)}100%{-webkit-transform:scale(1) rotateZ(360deg);transform:scale(1) rotateZ(360deg)}}@keyframes hover-rotate{0%{-webkit-transform:scale(1) rotateZ(0);transform:scale(1) rotateZ(0)}50%{-webkit-transform:scale(1.2) rotateZ(180deg);transform:scale(1.2) rotateZ(180deg)}100%{-webkit-transform:scale(1) rotateZ(360deg);transform:scale(1) rotateZ(360deg)}}@-webkit-keyframes selected-scaleUp{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes selected-scaleUp{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}.Circle{-webkit-animation:Circle 0.8s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:Circle 0.8s cubic-bezier(0.39, 0.575, 0.565, 1) both;cursor:pointer;color:#000000;display:block;height:30px;width:30px;margin:0;display:flex;align-items:center;justify-content:center;justify-content:center;align-items:center;border:solid 2px #ffffff;background:radial-gradient(circle at top, white 0%, white 100%);font-weight:bold;border-radius:50%;box-shadow:0 2px 4px 0 rgba(0, 0, 0, 0.5);user-select:none;font-size:16px;line-height:16px;font-weight:600;position:relative}.Circle:hover{-webkit-animation:hover-rotate 0.4s linear both;animation:hover-rotate 0.4s linear both;background:radial-gradient(circle at top, white 0%, #f1f1f1 100%)}.Circle.Selected{-webkit-animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;color:#ffffff;background:#9EC258;background:-webkit-radial-gradient(top, #00958f, #004D4A);background:-moz-radial-gradient(top, #00958f, #004D4A);background:radial-gradient(to bottom, #00958f, #004D4A);border:solid 2px #00958f}.Circle.Disabled{-webkit-animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;color:#f1f1f1;background:#D4D4D4;border:solid 2px #D4D4D4;cursor:default}.Circle.DisabledSelected{-webkit-animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:selected-scaleUp 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both;color:#f1f1f1;background:#9EC258;background:-webkit-radial-gradient(top, #00958f, #004D4A);background:-moz-radial-gradient(top, #00958f, #004D4A);background:radial-gradient(to bottom, #00958f, #004D4A);border:solid 2px #D4D4D4;cursor:default}";
4
+
5
+ const LotteryBullet = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
10
+ this.bulletEvent = createEvent(this, "lotteryBulletSelection", 7);
11
+ /**
12
+ * Value of the bullet
13
+ */
14
+ this.value = '0';
15
+ /**
16
+ * Marks if the bullet should be selectable
17
+ */
18
+ this.selectable = true;
19
+ /**
20
+ * Marks if the bullet should be selected
21
+ */
22
+ this.isSelected = false;
23
+ this.select = () => {
24
+ if (this.selectable) {
25
+ this.isSelected = !this.isSelected;
26
+ this.bulletEvent.emit({
27
+ value: this.value,
28
+ selected: this.isSelected
29
+ });
30
+ }
31
+ };
32
+ }
33
+ render() {
34
+ return (h("div", { class: 'Circle ' + (this.selectable ? '' : 'Disabled') + (this.isSelected ? 'Selected' : ''), onClick: () => this.select() }, this.value));
35
+ }
36
+ static get style() { return lotteryBulletCss; }
37
+ }, [1, "lottery-bullet", {
38
+ "value": [1],
39
+ "selectable": [4],
40
+ "isSelected": [4, "is-selected"]
41
+ }]);
42
+ function defineCustomElement() {
43
+ if (typeof customElements === "undefined") {
44
+ return;
45
+ }
46
+ const components = ["lottery-bullet"];
47
+ components.forEach(tagName => { switch (tagName) {
48
+ case "lottery-bullet":
49
+ if (!customElements.get(tagName)) {
50
+ customElements.define(tagName, LotteryBullet);
51
+ }
52
+ break;
53
+ } });
54
+ }
55
+
56
+ export { LotteryBullet as L, defineCustomElement as d };
@@ -0,0 +1,6 @@
1
+ import { L as LotteryGrid$1, d as defineCustomElement$1 } from './lottery-grid2.js';
2
+
3
+ const LotteryGrid = LotteryGrid$1;
4
+ const defineCustomElement = defineCustomElement$1;
5
+
6
+ export { LotteryGrid, defineCustomElement };
@@ -0,0 +1,196 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$1 } from './lottery-bullet2.js';
3
+
4
+ const lotteryGridCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.GridContainer{display:flex;flex-direction:column;max-width:1200px}.Grid{margin-top:10px 0 10px 0;display:flex;flex-direction:row;flex-wrap:wrap;gap:25px}";
5
+
6
+ const LotteryGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ this.__registerHost();
10
+ this.__attachShadow();
11
+ this.gridFilledEvent = createEvent(this, "gridFilled", 7);
12
+ this.gridDirtyEvent = createEvent(this, "gridDirty", 7);
13
+ /**
14
+ * Number of bullets of grid
15
+ */
16
+ this.totalNumbers = 0;
17
+ /**
18
+ * Number of maximum bullets that can be selected
19
+ */
20
+ this.maximumAllowed = 0;
21
+ /**
22
+ * Minimum allowed of bullets
23
+ */
24
+ this.minimumAllowed = 1;
25
+ /**
26
+ * Allows the user to select numbers on the grid
27
+ */
28
+ this.selectable = true;
29
+ /**
30
+ * Numbers that should be showed as selected on the grid (as a string of those numbers e.g. '1,2,3,4,5,6')
31
+ */
32
+ this.selectedNumbers = '';
33
+ /**
34
+ * Show only selected numbers
35
+ */
36
+ this.displaySelected = false;
37
+ /**
38
+ * Language
39
+ */
40
+ this.language = 'en';
41
+ this.numbers = [];
42
+ this.selectedCounter = 0;
43
+ }
44
+ connectedCallback() {
45
+ let selected = [];
46
+ if (this.selectedNumbers.length > 0) {
47
+ selected = this.selectedNumbers.split(',');
48
+ this.selectedCounter = selected.length;
49
+ }
50
+ if (this.displaySelected) {
51
+ selected.forEach((item) => {
52
+ this.numbers.push({
53
+ number: item,
54
+ selected: true,
55
+ selectable: this.selectable
56
+ });
57
+ });
58
+ }
59
+ else {
60
+ [...Array(this.totalNumbers).keys()]
61
+ .map(number => (number + 1).toString())
62
+ .forEach((number) => {
63
+ this.numbers.push({
64
+ number,
65
+ selected: selected.indexOf(number) >= 0 ? true : false,
66
+ selectable: this.selectedCounter == this.maximumAllowed ? false : this.selectable
67
+ });
68
+ });
69
+ }
70
+ }
71
+ lotteryBulletSelectionHandler(event) {
72
+ this.numbers = this.numbers.map((item) => {
73
+ if (item.number == event.detail.value) {
74
+ return {
75
+ number: item.number,
76
+ selected: event.detail.selected,
77
+ selectable: item.selectable
78
+ };
79
+ }
80
+ return {
81
+ number: item.number,
82
+ selected: item.selected,
83
+ selectable: item.selectable
84
+ };
85
+ });
86
+ if (event.detail.selected) {
87
+ this.selectedCounter += 1;
88
+ if (this.selectedCounter == this.maximumAllowed) {
89
+ this.numbers = this.numbers.map((item) => {
90
+ return {
91
+ number: item.number,
92
+ selected: item.selected,
93
+ selectable: item.selected ? true : false
94
+ };
95
+ });
96
+ this.gridFilledEvent.emit({
97
+ id: this.ticketId,
98
+ index: this.gridIndex,
99
+ selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
100
+ });
101
+ }
102
+ }
103
+ else {
104
+ if (this.selectedCounter == this.maximumAllowed) {
105
+ this.numbers = this.numbers.map((item) => {
106
+ return {
107
+ number: item.number,
108
+ selected: item.selected,
109
+ selectable: true
110
+ };
111
+ });
112
+ this.gridDirtyEvent.emit({
113
+ id: this.ticketId,
114
+ index: this.gridIndex,
115
+ selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
116
+ });
117
+ }
118
+ this.selectedCounter -= 1;
119
+ }
120
+ }
121
+ async resetSelectionHandler(event) {
122
+ if (event.detail && event.detail == this.ticketId) {
123
+ this.selectedCounter = 0;
124
+ this.numbers = this.numbers.map((item) => {
125
+ return {
126
+ number: item.number,
127
+ selected: false,
128
+ selectable: this.selectable
129
+ };
130
+ });
131
+ this.gridDirtyEvent.emit({
132
+ id: this.ticketId,
133
+ index: this.gridIndex,
134
+ selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
135
+ });
136
+ }
137
+ }
138
+ async autoSelectionHandler(event) {
139
+ if (event.detail && event.detail == this.ticketId) {
140
+ this.resetSelectionHandler(event);
141
+ let array = [...Array(this.totalNumbers).keys()]
142
+ .map(number => number + 1)
143
+ .sort(() => 0.5 - Math.random());
144
+ array = array.slice(0, this.minimumAllowed);
145
+ this.numbers = this.numbers.map((item) => {
146
+ return {
147
+ number: item.number,
148
+ selected: array.indexOf(parseInt(item.number, 10)) >= 0 ? true : false,
149
+ selectable: array.indexOf(parseInt(item.number, 10)) >= 0 ? true : false,
150
+ };
151
+ });
152
+ this.gridFilledEvent.emit({
153
+ id: this.ticketId,
154
+ index: this.gridIndex,
155
+ selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
156
+ });
157
+ this.selectedCounter = this.maximumAllowed;
158
+ }
159
+ }
160
+ render() {
161
+ return (h("div", { class: "GridContainer" }, h("div", { class: "Grid" }, this.numbers.map((item) => h("div", null, h("lottery-bullet", { value: item.number, selectable: item.selectable, "is-selected": item.selected }))))));
162
+ }
163
+ static get style() { return lotteryGridCss; }
164
+ }, [1, "lottery-grid", {
165
+ "ticketId": [2, "ticket-id"],
166
+ "totalNumbers": [2, "total-numbers"],
167
+ "gameId": [1, "game-id"],
168
+ "maximumAllowed": [2, "maximum-allowed"],
169
+ "minimumAllowed": [2, "minimum-allowed"],
170
+ "selectable": [4],
171
+ "selectedNumbers": [1, "selected-numbers"],
172
+ "displaySelected": [4, "display-selected"],
173
+ "language": [1],
174
+ "gridIndex": [2, "grid-index"],
175
+ "numbers": [32]
176
+ }, [[0, "lotteryBulletSelection", "lotteryBulletSelectionHandler"], [4, "resetSelection", "resetSelectionHandler"], [4, "autoSelection", "autoSelectionHandler"]]]);
177
+ function defineCustomElement() {
178
+ if (typeof customElements === "undefined") {
179
+ return;
180
+ }
181
+ const components = ["lottery-grid", "lottery-bullet"];
182
+ components.forEach(tagName => { switch (tagName) {
183
+ case "lottery-grid":
184
+ if (!customElements.get(tagName)) {
185
+ customElements.define(tagName, LotteryGrid);
186
+ }
187
+ break;
188
+ case "lottery-bullet":
189
+ if (!customElements.get(tagName)) {
190
+ defineCustomElement$1();
191
+ }
192
+ break;
193
+ } });
194
+ }
195
+
196
+ export { LotteryGrid as L, defineCustomElement as d };