@everymatrix/lottery-game-page 0.0.6 → 0.0.9

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 (78) hide show
  1. package/dist/cjs/helper-accordion_13.cjs.entry.js +23492 -0
  2. package/dist/cjs/helper-pagination.cjs.entry.js +188 -0
  3. package/dist/cjs/index-81cb3b3b.js +1277 -0
  4. package/dist/cjs/index.cjs.js +2 -0
  5. package/dist/cjs/loader.cjs.js +21 -0
  6. package/dist/cjs/lottery-game-page.cjs.js +19 -0
  7. package/dist/collection/collection-manifest.json +86 -0
  8. package/dist/collection/components/lottery-game-page/lottery-game-page.css +305 -0
  9. package/dist/collection/components/lottery-game-page/lottery-game-page.js +496 -0
  10. package/dist/collection/index.js +1 -0
  11. package/dist/collection/utils/locale.utils.js +50 -0
  12. package/dist/collection/utils/utils.js +12 -0
  13. package/dist/components/assets/chrono_desktop.png +0 -0
  14. package/dist/components/assets/chrono_lottery_mobile.png +0 -0
  15. package/dist/components/helper-accordion.js +6 -0
  16. package/dist/components/helper-accordion2.js +110 -0
  17. package/dist/components/helper-filters.js +6 -0
  18. package/dist/components/helper-filters2.js +22347 -0
  19. package/dist/components/helper-modal.js +6 -0
  20. package/dist/components/helper-modal2.js +58 -0
  21. package/dist/components/helper-pagination.js +215 -0
  22. package/dist/components/helper-tab.js +6 -0
  23. package/dist/components/helper-tab2.js +47 -0
  24. package/dist/components/helper-tabs.js +6 -0
  25. package/dist/components/helper-tabs2.js +62 -0
  26. package/dist/components/index.d.ts +22 -0
  27. package/dist/components/index.js +15 -0
  28. package/dist/components/lottery-bullet.js +6 -0
  29. package/dist/components/lottery-bullet2.js +56 -0
  30. package/dist/components/lottery-draw-results-history.js +6 -0
  31. package/dist/components/lottery-draw-results-history2.js +174 -0
  32. package/dist/components/lottery-draw-results.js +6 -0
  33. package/dist/components/lottery-draw-results2.js +217 -0
  34. package/dist/components/lottery-game-details.js +6 -0
  35. package/dist/components/lottery-game-details2.js +48 -0
  36. package/dist/components/lottery-game-page.d.ts +11 -0
  37. package/dist/components/lottery-game-page.js +407 -0
  38. package/dist/components/lottery-grid.js +6 -0
  39. package/dist/components/lottery-grid2.js +196 -0
  40. package/dist/components/lottery-ticket-controller.js +6 -0
  41. package/dist/components/lottery-ticket-controller2.js +117 -0
  42. package/dist/components/lottery-ticket.js +6 -0
  43. package/dist/components/lottery-ticket2.js +183 -0
  44. package/dist/esm/helper-accordion_13.entry.js +23476 -0
  45. package/dist/esm/helper-pagination.entry.js +184 -0
  46. package/dist/esm/index-be84da79.js +1250 -0
  47. package/dist/esm/index.js +1 -0
  48. package/dist/esm/loader.js +17 -0
  49. package/dist/esm/lottery-game-page.js +17 -0
  50. package/dist/esm/polyfills/core-js.js +11 -0
  51. package/dist/esm/polyfills/css-shim.js +1 -0
  52. package/dist/esm/polyfills/dom.js +79 -0
  53. package/dist/esm/polyfills/es5-html-element.js +1 -0
  54. package/dist/esm/polyfills/index.js +34 -0
  55. package/dist/esm/polyfills/system.js +6 -0
  56. package/dist/index.cjs.js +1 -0
  57. package/dist/index.js +1 -0
  58. package/dist/lottery-game-page/index.esm.js +0 -0
  59. package/dist/lottery-game-page/lottery-game-page.esm.js +1 -0
  60. package/dist/lottery-game-page/p-08581ede.entry.js +1 -0
  61. package/dist/lottery-game-page/p-49bd2864.entry.js +2849 -0
  62. package/dist/lottery-game-page/p-91420518.js +2 -0
  63. package/dist/stencil.config.js +29 -0
  64. package/dist/types/Users/user/workspace/everymatrix/widgets-stencil/packages/lottery-game-page/.stencil/packages/lottery-game-page/stencil.config.d.ts +2 -0
  65. package/dist/types/components/lottery-game-page/lottery-game-page.d.ts +74 -0
  66. package/dist/types/components.d.ts +93 -0
  67. package/dist/types/index.d.ts +1 -0
  68. package/dist/types/stencil-public-runtime.d.ts +1565 -0
  69. package/dist/types/utils/locale.utils.d.ts +1 -0
  70. package/dist/types/utils/utils.d.ts +7 -0
  71. package/loader/cdn.js +3 -0
  72. package/loader/index.cjs.js +3 -0
  73. package/loader/index.d.ts +12 -0
  74. package/loader/index.es2017.js +3 -0
  75. package/loader/index.js +4 -0
  76. package/loader/package.json +10 -0
  77. package/package.json +1 -1
  78. package/LICENSE +0 -21
@@ -0,0 +1,407 @@
1
+ import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$d } from './helper-accordion2.js';
3
+ import { d as defineCustomElement$c } from './helper-filters2.js';
4
+ import { d as defineCustomElement$b } from './helper-modal2.js';
5
+ import { d as defineCustomElement$a } from './helper-tab2.js';
6
+ import { d as defineCustomElement$9 } from './helper-tabs2.js';
7
+ import { d as defineCustomElement$8 } from './lottery-bullet2.js';
8
+ import { d as defineCustomElement$7 } from './lottery-draw-results2.js';
9
+ import { d as defineCustomElement$6 } from './lottery-draw-results-history2.js';
10
+ import { d as defineCustomElement$5 } from './lottery-game-details2.js';
11
+ import { d as defineCustomElement$4 } from './lottery-grid2.js';
12
+ import { d as defineCustomElement$3 } from './lottery-ticket2.js';
13
+ import { d as defineCustomElement$2 } from './lottery-ticket-controller2.js';
14
+
15
+ const DEFAULT_LANGUAGE = 'en';
16
+ const SUPPORTED_LANGUAGES = ['ro', 'en'];
17
+ const TRANSLATIONS = {
18
+ en: {
19
+ error: 'Error',
20
+ title: 'Chrono',
21
+ backButton: 'Back',
22
+ lobbyButton: 'Lobby',
23
+ prize: 'Prize',
24
+ winUpTo: 'Win up to',
25
+ nextDraw: 'Next draw in: ',
26
+ buy: 'Buy tickets',
27
+ viewLatest: 'View latest results',
28
+ createTicket: 'Create Ticket',
29
+ modalSuccess: 'Purchase will be successfull soon!',
30
+ deleteTicketModalTitle: 'Delete Ticket',
31
+ deleteTicketModalText: 'Are you sure you want to delete this ticket?',
32
+ deleteTicketModalCancel: 'Cancel',
33
+ deleteTicketModalConfirm: 'Delete',
34
+ orderSummaryTitle: 'Order Summary',
35
+ orderSummaryTickets: 'Ticket',
36
+ orderSummaryTotal: 'Total',
37
+ orderSummarySubmit: 'Submit'
38
+ },
39
+ ro: {
40
+ error: 'Eroare',
41
+ title: 'Loto 6/49',
42
+ backButton: 'Inapoi',
43
+ lobbyButton: 'Lobby',
44
+ prize: 'MARELE JACKPOT OMG',
45
+ winUpTo: 'Castiga pana la',
46
+ nextDraw: 'In cat timp devii milionar daca cumperi acum!!!',
47
+ buy: 'Cumpara bilet',
48
+ viewLatest: 'Ultimile extrageri',
49
+ createTicket: 'Creeaza bilet',
50
+ modalSuccess: 'Achiziția va avea succes în curând!',
51
+ deleteTicketModalTitle: 'Sterge biletul',
52
+ deleteTicketModalText: 'Esti sigur ca vrei sa stergi acest bilet?',
53
+ deleteTicketModalCancel: 'Anuleaza',
54
+ deleteTicketModalConfirm: 'Sterge',
55
+ orderSummaryTitle: 'Rezumat comanda',
56
+ orderSummaryTickets: 'Bilet',
57
+ orderSummaryTotal: 'Total',
58
+ orderSummarySubmit: 'Trimite'
59
+ },
60
+ };
61
+ const translate = (key, customLang) => {
62
+ const lang = customLang;
63
+ return TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
64
+ };
65
+
66
+ const lotteryGamePageCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.GamePage .GridBanner{background-color:#009993;background-repeat:no-repeat;background-position:center;color:#111;padding:0 20px 10px;height:220px;display:flex;flex-direction:column;justify-content:space-between}.GamePage .GridBanner .BannerButtonsWrapper{display:flex;justify-content:space-between;padding-top:16px}.GamePage .GridBanner .BannerButtonsWrapper .BannerBackButton,.GamePage .GridBanner .BannerButtonsWrapper .BannerLobbyButton{background:#fff;border:1px solid #D4D4D4;border-radius:4px;padding:7px 15px;font-size:12px;text-transform:uppercase;width:80px}.GamePage .GridBanner .GridBannerArea{padding-top:30px;display:flex;flex-direction:column;align-items:center}.GamePage .TotalWinnings{color:#00958f;font-size:18px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px}.GamePage .TotalWinnings span{font-size:22px;font-weight:700}.GamePage .NextDraw{color:#00958f;font-size:24px;font-weight:600;margin:0 auto;text-align:center;text-transform:capitalize;display:flex;justify-content:center;align-items:center;flex-direction:column}.GamePage .NextDraw .BannerText{font-weight:400;font-size:18px}.GamePage .NextDraw .BannerCountdown{font-size:22px;color:#00958f;display:flex;gap:20px}.GamePage .Tabs{display:flex;justify-content:center;gap:10px}.GamePage .Tabs .TabButton{border-radius:4px;cursor:pointer;padding:8px 0;width:50%;max-width:200px;border:1px solid #00958f;background:#F1F1F1;color:#000;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0}.GamePage .Tabs .TabButton.Active{background:#00958f;color:#FFF}.NextDrawWrapper{padding:10px 15px;background:#fff}.NextDrawWrapper .BannerText{font-size:16px;font-weight:700;text-align:center}.NextDrawWrapper .BannerCountdown{font-size:22px;display:flex;gap:8px;color:#009993;font-weight:bolder;justify-content:center}.GamePageContent{padding:10px 15px;max-width:1200px;margin:0 auto}.GameDetails{padding-bottom:10px;margin-bottom:20px;border-bottom:1px solid #e9e9e9}.CreateNewTicket{background:#004D4A;height:100px;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.CreateNewTicket button{cursor:pointer;display:inline-block;border-radius:50%;width:40px;height:40px;margin:5px;border:1px solid #FFF;background:#FFF;color:#004D4A;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0}.CreateNewTicket button:hover{background:#F1F1F1}.CreateNewTicket span{display:inline-block;font-size:12px;text-align:center;margin:0 auto;color:#FFF}.OrderSummary{min-width:200px;border-radius:4px;display:flex;flex-direction:column;justify-content:center;margin-top:20px;background:#fff}.OrderSummary .OrderSummaryTitle{font-size:16px;color:#009993;text-transform:uppercase;text-align:center}.OrderSummary .Ticket{display:inline-block;color:#000;font-size:14px;height:50px;border-bottom:solid 1px #D4D4D4;line-height:50px}.OrderSummary .Ticket span{text-align:right}.OrderSummary .Total{display:inline-block;color:#000;font-size:14px;height:50px;line-height:50px}.OrderSummary .Total span{text-align:right}.ButtonWrapper{display:flex;align-items:center;justify-content:center}.ButtonWrapper .Button{cursor:pointer;border-radius:4px;padding:8px 60px;width:max-content;margin:5px;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0;background:#009993;border:1px solid #009993;color:#FFF}.ButtonWrapper .Button:hover{background:#00ABA4}.SubmitModalSuccess{text-align:center;font-size:18px;padding:20px}.DeleteTicketModalWrapper{padding:20px;text-align:center}.DeleteTicketModalWrapper .DeleteTicketModalTitle{font-size:16px;color:#00958f;font-weight:400;text-transform:uppercase;margin:20px 0 40px}.DeleteTicketModalWrapper .DeleteTicketModalText{font-size:14px;color:#000;line-height:22px;margin-bottom:40px}.DeleteTicketModalWrapper .DeleteTicketModalButtons{display:flex;gap:10px;justify-content:center}.DeleteTicketModalWrapper .DeleteTicketModalButtons .DeleteTicketModalConfirm{cursor:pointer;border-radius:4px;padding:8px 25px;width:max-content;margin:5px;color:#000;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0;background:#FF3D00;border:1px solid #FF3D00;color:#FFF}.DeleteTicketModalWrapper .DeleteTicketModalButtons .DeleteTicketModalConfirm:hover{background:#FF6536;border:1px solid #FF3D00}.DeleteTicketModalWrapper .DeleteTicketModalButtons .DeleteTicketModalCancel{cursor:pointer;width:max-content;border-radius:4px;padding:10px 25px;margin:5px;border:1px solid #00958f;background:#FFF;color:#000;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0}.DeleteTicketModalWrapper .DeleteTicketModalButtons .DeleteTicketModalCancel:hover{background:#F1F1F1}@media (min-width: 1200px){.GamePageContent .TicketsWrapper{float:left;width:49%}.GamePageContent .GameDetails{float:right;width:49%}.GamePageContent .OrderSummary{float:right;width:49%}}";
67
+
68
+ const LotteryGamePage$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
69
+ constructor() {
70
+ super();
71
+ this.__registerHost();
72
+ this.__attachShadow();
73
+ /**
74
+ * Language of the widget
75
+ */
76
+ this.language = 'en';
77
+ /**
78
+ * Shows the auto-pick button
79
+ */
80
+ this.autoPick = false;
81
+ /**
82
+ * Shows the reset button
83
+ */
84
+ this.resetButton = false;
85
+ this.tickets = [];
86
+ this.tabIndex = 0;
87
+ this.hasErrors = false;
88
+ this.totalAmount = 0;
89
+ this.successVisible = false;
90
+ this.deleteVisible = false;
91
+ this.latestDraw = {};
92
+ this.totalWinningsAmount = 0;
93
+ this.multiplier = false;
94
+ this.quickPick = false;
95
+ }
96
+ // @TODO fix `any` type later, I'm lazy now
97
+ connectedCallback() {
98
+ this.getGameDetails();
99
+ this.getDraws();
100
+ }
101
+ countdownLogic(date) {
102
+ this.interval = setInterval(() => {
103
+ this.daysRemaining = Math.floor((Date.parse(date) - new Date().getTime()) / (1000 * 60 * 60 * 24));
104
+ this.hoursRemaining = Math.floor((Date.parse(date) - new Date().getTime()) / (1000 * 60 * 60) - this.daysRemaining * 24);
105
+ this.minutesRemaining = Math.floor((Date.parse(date) - new Date().getTime()) / (1000 * 60) - this.daysRemaining * 24 * 60 - this.hoursRemaining * 60);
106
+ this.secondsRemaining = Math.floor((Date.parse(date) - new Date().getTime()) / 1000 - this.daysRemaining * 24 * 60 * 60 - this.hoursRemaining * 60 * 60 - this.minutesRemaining * 60);
107
+ }, 1000);
108
+ }
109
+ disconnectedCallback() {
110
+ clearInterval(this.interval);
111
+ }
112
+ getGameDetails() {
113
+ let url = new URL(`${this.endpoint}/games/${this.gameId}`);
114
+ fetch(url.href)
115
+ .then((res) => {
116
+ if (res.status >= 300) {
117
+ this.hasErrors = true;
118
+ throw new Error('There was an error while fetching the data');
119
+ }
120
+ return res.json();
121
+ })
122
+ .then((data) => {
123
+ this.gameData = data;
124
+ this.basicStake = this.gameData.rules.stakes[0].amount;
125
+ let draws = this.gameData.draws.filter((item) => !item.winningNumbers);
126
+ console.log('draws', draws);
127
+ this.nextDraw = draws[0].id;
128
+ this.createNewTicket();
129
+ })
130
+ .catch((err) => {
131
+ this.hasErrors = true;
132
+ console.log('Error', err);
133
+ });
134
+ }
135
+ calculateTotalAmount() {
136
+ const { currency } = this.gameData.rules.stakes[0];
137
+ this.totalAmount = 0;
138
+ this.tickets.forEach((item) => {
139
+ if (item.completed) {
140
+ this.totalAmount += item.amount * item.stake;
141
+ }
142
+ });
143
+ this.currency = currency;
144
+ }
145
+ // @TODO CustomEvent type
146
+ gridFilledHandler(event) {
147
+ // @TODO item ts
148
+ this.tickets = this.tickets.map((item) => {
149
+ if (item.ticketId == event.detail.id) {
150
+ let arr = item.selectedNumbers || [];
151
+ arr[event.detail.index] = event.detail.selectedNumbers.map((item) => parseInt(item, 10));
152
+ return {
153
+ gameId: item.gameId,
154
+ ticketId: item.ticketId,
155
+ completed: true,
156
+ amount: event.detail.draws,
157
+ stake: item.stake,
158
+ selectedNumbers: arr
159
+ };
160
+ }
161
+ return item;
162
+ });
163
+ this.calculateTotalAmount();
164
+ }
165
+ // @TODO fix any type
166
+ gridDirtyHandler(event) {
167
+ // @TODO item ts
168
+ this.tickets = this.tickets.map((item) => {
169
+ if (item.gameId == event.detail.id) {
170
+ return {
171
+ gameId: item.gameId,
172
+ ticketId: item.ticketId,
173
+ completed: false,
174
+ amount: item.amount,
175
+ stake: item.stake,
176
+ grids: []
177
+ };
178
+ }
179
+ return item;
180
+ });
181
+ }
182
+ // @TODO CustomEvent type
183
+ deleteTicketHandler(event) {
184
+ this.deleteVisible = true;
185
+ this.deleteEventData = event;
186
+ }
187
+ modalCloseEvent() {
188
+ this.deleteVisible = false;
189
+ }
190
+ stakeChangeHandler(event) {
191
+ const { ticketId, stake } = event.detail;
192
+ this.tickets[ticketId - 1].stake = stake;
193
+ this.calculateTotalAmount();
194
+ }
195
+ multiplierChangeHandler(event) {
196
+ this.multiplier = event.detail;
197
+ }
198
+ getDraws() {
199
+ // append from query param with the current date value in order to get the next draw
200
+ let url = new URL(`${this.endpoint}/games/${this.gameId}/draws`);
201
+ let drawOptions = {
202
+ method: "GET",
203
+ headers: {
204
+ 'Content-Type': "application/json",
205
+ 'Accept': 'application/json',
206
+ },
207
+ };
208
+ fetch(url.href, drawOptions)
209
+ .then((response) => {
210
+ return response.json();
211
+ })
212
+ .then((data) => {
213
+ var _a;
214
+ let upcoming = data.items.filter((item) => {
215
+ if (Date.parse(item.date) > new Date().getTime()) {
216
+ return !item.winningNumbers;
217
+ }
218
+ });
219
+ let past = data.items.filter((item) => item.winningNumbers);
220
+ this.latestDraw = upcoming[0];
221
+ this.nextDate = this.latestDraw.date;
222
+ this.countdownLogic(this.nextDate);
223
+ this.lastDrawId = past[past.length - 1].id;
224
+ // calculate total winnings
225
+ // @TODO fix any type
226
+ (_a = this.latestDraw) === null || _a === void 0 ? void 0 : _a.prizes.forEach((element) => {
227
+ this.totalWinningsAmount += JSON.parse(element.amount);
228
+ });
229
+ });
230
+ }
231
+ ;
232
+ // @TODO fix any type
233
+ confirmDeleteTicketHandler(event) {
234
+ // @TODO fix any type
235
+ this.tickets = this.tickets.filter((item) => {
236
+ if (item.ticketId == event.detail.ticketId) {
237
+ return false;
238
+ }
239
+ return true;
240
+ });
241
+ this.calculateTotalAmount();
242
+ this.deleteVisible = false;
243
+ }
244
+ createNewTicket() {
245
+ this.tickets = [
246
+ ...this.tickets,
247
+ { gameId: this.gameId, ticketId: this.tickets.length + 1, completed: false, amount: 1, stake: this.basicStake, grids: [] }
248
+ ];
249
+ }
250
+ submitTickets() {
251
+ let url = new URL(`${this.endpoint}/tickets`);
252
+ // @TODO Body TS type
253
+ let body = {
254
+ gameId: this.gameId,
255
+ tickets: []
256
+ };
257
+ console.log('body', body);
258
+ this.tickets.forEach((item) => {
259
+ body.tickets.push({
260
+ startingDrawId: this.nextDraw,
261
+ amount: item.stake,
262
+ gameId: this.gameId,
263
+ currency: this.currency,
264
+ selection: item.selectedNumbers,
265
+ multiplier: this.multiplier,
266
+ drawCount: item.amount,
267
+ quickPick: this.quickPick,
268
+ });
269
+ });
270
+ // @TODO Options TS type
271
+ let options = {
272
+ method: 'POST',
273
+ headers: {
274
+ 'Content-Type': 'application/json',
275
+ 'Accept': 'application/json',
276
+ 'Authorization': `Bearer ${this.sessionId}`
277
+ },
278
+ body: JSON.stringify(body)
279
+ };
280
+ fetch(url.href, options)
281
+ .then((res) => {
282
+ if (res.status > 300) {
283
+ throw new Error('err');
284
+ }
285
+ return res.json();
286
+ })
287
+ .then((data) => {
288
+ console.log('data', data);
289
+ });
290
+ this.successVisible = true;
291
+ }
292
+ render() {
293
+ // const backgroundSrc = getAssetPath('./static/chrono_lottery_mobile.png');
294
+ // const backgroundDesktopSrc = getAssetPath('./static/chrono_desktop.png');
295
+ if (this.hasErrors) {
296
+ return (h("div", { class: "GamePage" }, h("div", { class: "Title" }, translate('error', this.language))));
297
+ }
298
+ return (
299
+ /* Game details */
300
+ h("div", { class: "GamePage" }, h("div", { class: "GridBanner" }, h("div", { class: "BannerButtonsWrapper" }, h("button", { class: "BannerBackButton" }, h("span", { class: "BannerBackButtonArrow" }, "\u1438 "), translate('backButton', this.language)), h("button", { class: "BannerLobbyButton" }, translate('lobbyButton', this.language))), h("div", { class: "Tabs" }, h("div", { class: 'TabButton' + (this.tabIndex == 0 ? ' Active' : ''), onClick: () => this.tabIndex = 0 }, translate('buy', this.language)), h("div", { class: 'TabButton' + (this.tabIndex == 1 ? ' Active' : ''), onClick: () => this.tabIndex = 1 }, translate('viewLatest', this.language)))), h("div", { class: "NextDrawWrapper" }, h("div", { class: "TotalWinnings" }, translate('winUpTo', this.language), ": ", h("span", null, "$", this.totalWinningsAmount.toLocaleString('en-US', { maximumFractionDigits: 2 }))), h("div", { class: "NextDraw" }, h("p", { class: "BannerText" }, translate('nextDraw', this.language)), h("div", { class: "BannerCountdown" }, h("span", { class: "CountdownDays" }, this.daysRemaining, "D"), h("span", { class: "CountdownHours" }, this.hoursRemaining, "H"), h("span", { class: "CountdownMinutes" }, this.minutesRemaining, "M"), h("span", { class: "CountdownSeconds" }, this.secondsRemaining, "S")))), this.tabIndex == 0 &&
301
+ h("div", { class: "GamePageContent" }, h("div", { class: "GameDetails" }, h("lottery-game-details", null)), h("div", { class: "TicketsWrapper" }, this.tickets.map((item) => h("lottery-ticket-controller", { endpoint: this.endpoint, "ticket-id": item.ticketId, "game-id": item.gameId, collapsed: false, last: true, language: this.language, "auto-pick": this.autoPick, "reset-button": this.resetButton })), h("div", { class: "CreateNewTicket" }, h("button", { onClick: () => this.createNewTicket() }, "+"), h("span", null, translate('createTicket', this.language)))), h("div", { class: "OrderSummary" }, h("h3", { class: "OrderSummaryTitle" }, translate('orderSummaryTitle', this.language)), h("div", { class: "Ticket" }, translate('orderSummaryTickets', this.language), ": ", h("span", null, this.tickets.length)), h("div", { class: "Total" }, translate('orderSummaryTotal', this.language), ": ", h("span", null, this.totalAmount, " ", this.currency)), h("div", { class: "ButtonWrapper" }, h("span", { class: "Button", onClick: () => this.submitTickets() }, translate('orderSummarySubmit', this.language))))), this.tabIndex == 1 &&
302
+ h("div", null, h("lottery-draw-results", { endpoint: this.endpoint, "game-id": this.gameId, language: this.language, "draw-id": this.lastDrawId, "draw-mode": true }), h("lottery-draw-results-history", { endpoint: this.endpoint, "game-id": this.gameId, language: this.language })), h("helper-modal", { "title-modal": "Success", visible: this.successVisible }, h("p", { class: "SubmitModalSuccess" }, translate('modalSuccess', this.language))), h("helper-modal", { "title-modal": "Delete Ticket", visible: this.deleteVisible }, h("div", { class: "DeleteTicketModalWrapper" }, h("h3", { class: "DeleteTicketModalTitle" }, translate('deleteTicketModalTitle', this.language)), h("p", { class: "DeleteTicketModalText" }, translate('deleteTicketModalText', this.language)), h("div", { class: "DeleteTicketModalButtons" }, h("button", { class: "DeleteTicketModalCancel", onClick: () => this.modalCloseEvent() }, translate('deleteTicketModalCancel', this.language)), h("button", { class: "DeleteTicketModalConfirm", onClick: () => this.confirmDeleteTicketHandler(this.deleteEventData) }, translate('deleteTicketModalConfirm', this.language)))))));
303
+ }
304
+ static get assetsDirs() { return ["static"]; }
305
+ get element() { return this; }
306
+ static get style() { return lotteryGamePageCss; }
307
+ }, [1, "lottery-game-page", {
308
+ "endpoint": [1],
309
+ "gameId": [1, "game-id"],
310
+ "playerId": [2, "player-id"],
311
+ "sessionId": [1, "session-id"],
312
+ "language": [1],
313
+ "autoPick": [4, "auto-pick"],
314
+ "resetButton": [4, "reset-button"],
315
+ "tickets": [32],
316
+ "tabIndex": [32],
317
+ "hasErrors": [32],
318
+ "totalAmount": [32],
319
+ "successVisible": [32],
320
+ "deleteVisible": [32],
321
+ "deleteEventData": [32],
322
+ "daysRemaining": [32],
323
+ "hoursRemaining": [32],
324
+ "minutesRemaining": [32],
325
+ "secondsRemaining": [32],
326
+ "latestDraw": [32],
327
+ "totalWinningsAmount": [32],
328
+ "nextDate": [32]
329
+ }, [[0, "ticketCompleted", "gridFilledHandler"], [0, "gridDirty", "gridDirtyHandler"], [0, "deleteTicket", "deleteTicketHandler"], [0, "modalCloseEvent", "modalCloseEvent"], [0, "stakeChange", "stakeChangeHandler"], [0, "multiplierChange", "multiplierChangeHandler"]]]);
330
+ function defineCustomElement$1() {
331
+ if (typeof customElements === "undefined") {
332
+ return;
333
+ }
334
+ const components = ["lottery-game-page", "helper-accordion", "helper-filters", "helper-modal", "helper-tab", "helper-tabs", "lottery-bullet", "lottery-draw-results", "lottery-draw-results-history", "lottery-game-details", "lottery-grid", "lottery-ticket", "lottery-ticket-controller"];
335
+ components.forEach(tagName => { switch (tagName) {
336
+ case "lottery-game-page":
337
+ if (!customElements.get(tagName)) {
338
+ customElements.define(tagName, LotteryGamePage$1);
339
+ }
340
+ break;
341
+ case "helper-accordion":
342
+ if (!customElements.get(tagName)) {
343
+ defineCustomElement$d();
344
+ }
345
+ break;
346
+ case "helper-filters":
347
+ if (!customElements.get(tagName)) {
348
+ defineCustomElement$c();
349
+ }
350
+ break;
351
+ case "helper-modal":
352
+ if (!customElements.get(tagName)) {
353
+ defineCustomElement$b();
354
+ }
355
+ break;
356
+ case "helper-tab":
357
+ if (!customElements.get(tagName)) {
358
+ defineCustomElement$a();
359
+ }
360
+ break;
361
+ case "helper-tabs":
362
+ if (!customElements.get(tagName)) {
363
+ defineCustomElement$9();
364
+ }
365
+ break;
366
+ case "lottery-bullet":
367
+ if (!customElements.get(tagName)) {
368
+ defineCustomElement$8();
369
+ }
370
+ break;
371
+ case "lottery-draw-results":
372
+ if (!customElements.get(tagName)) {
373
+ defineCustomElement$7();
374
+ }
375
+ break;
376
+ case "lottery-draw-results-history":
377
+ if (!customElements.get(tagName)) {
378
+ defineCustomElement$6();
379
+ }
380
+ break;
381
+ case "lottery-game-details":
382
+ if (!customElements.get(tagName)) {
383
+ defineCustomElement$5();
384
+ }
385
+ break;
386
+ case "lottery-grid":
387
+ if (!customElements.get(tagName)) {
388
+ defineCustomElement$4();
389
+ }
390
+ break;
391
+ case "lottery-ticket":
392
+ if (!customElements.get(tagName)) {
393
+ defineCustomElement$3();
394
+ }
395
+ break;
396
+ case "lottery-ticket-controller":
397
+ if (!customElements.get(tagName)) {
398
+ defineCustomElement$2();
399
+ }
400
+ break;
401
+ } });
402
+ }
403
+
404
+ const LotteryGamePage = LotteryGamePage$1;
405
+ const defineCustomElement = defineCustomElement$1;
406
+
407
+ export { LotteryGamePage, defineCustomElement };
@@ -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:350px}.Grid{margin-top:10px 0 10px 0;display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}";
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 };
@@ -0,0 +1,6 @@
1
+ import { L as LotteryTicketController$1, d as defineCustomElement$1 } from './lottery-ticket-controller2.js';
2
+
3
+ const LotteryTicketController = LotteryTicketController$1;
4
+ const defineCustomElement = defineCustomElement$1;
5
+
6
+ export { LotteryTicketController, defineCustomElement };