@everymatrix/lottery-game-page 0.1.5 → 0.1.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 (73) hide show
  1. package/dist/cjs/helper-accordion.cjs.entry.js +92 -0
  2. package/dist/cjs/{lottery-draw-results.cjs.entry.js → helper-filters_2.cjs.entry.js} +131 -2
  3. package/dist/cjs/helper-modal.cjs.entry.js +1 -1
  4. package/dist/cjs/helper-pagination.cjs.entry.js +188 -0
  5. package/dist/cjs/helper-tab.cjs.entry.js +36 -0
  6. package/dist/cjs/helper-tabs.cjs.entry.js +38 -0
  7. package/dist/cjs/{index-614098f4.js → index-5701a895.js} +47 -1
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/lottery-bullet_2.cjs.entry.js +202 -0
  10. package/dist/cjs/lottery-draw-results-history.cjs.entry.js +161 -0
  11. package/dist/cjs/lottery-game-details.cjs.entry.js +19 -0
  12. package/dist/cjs/lottery-game-page.cjs.entry.js +1 -4
  13. package/dist/cjs/lottery-game-page.cjs.js +2 -2
  14. package/dist/cjs/lottery-ticket-controller.cjs.entry.js +69 -0
  15. package/dist/cjs/lottery-ticket.cjs.entry.js +169 -0
  16. package/dist/collection/collection-manifest.json +61 -0
  17. package/dist/components/helper-accordion.js +6 -0
  18. package/dist/components/helper-accordion2.js +116 -0
  19. package/dist/components/helper-filters.js +6 -0
  20. package/dist/components/helper-filters2.js +166 -0
  21. package/dist/components/helper-pagination.js +216 -0
  22. package/dist/components/helper-tab.js +6 -0
  23. package/dist/components/helper-tab2.js +52 -0
  24. package/dist/components/helper-tabs.js +6 -0
  25. package/dist/components/helper-tabs2.js +63 -0
  26. package/dist/components/lottery-bullet.js +6 -0
  27. package/dist/components/lottery-bullet2.js +57 -0
  28. package/dist/components/lottery-draw-results-history.js +6 -0
  29. package/dist/components/lottery-draw-results-history2.js +216 -0
  30. package/dist/components/lottery-draw-results2.js +13 -2
  31. package/dist/components/lottery-game-details.js +6 -0
  32. package/dist/components/lottery-game-details2.js +49 -0
  33. package/dist/components/lottery-game-page.js +64 -7
  34. package/dist/components/lottery-grid.js +6 -0
  35. package/dist/components/lottery-grid2.js +197 -0
  36. package/dist/components/lottery-ticket-controller.js +6 -0
  37. package/dist/components/lottery-ticket-controller2.js +118 -0
  38. package/dist/components/lottery-ticket.js +6 -0
  39. package/dist/components/lottery-ticket2.js +209 -0
  40. package/dist/esm/helper-accordion.entry.js +88 -0
  41. package/dist/esm/{lottery-draw-results.entry.js → helper-filters_2.entry.js} +131 -3
  42. package/dist/esm/helper-modal.entry.js +1 -1
  43. package/dist/esm/helper-pagination.entry.js +184 -0
  44. package/dist/esm/helper-tab.entry.js +32 -0
  45. package/dist/esm/helper-tabs.entry.js +34 -0
  46. package/dist/esm/{index-0fa076cd.js → index-ade3d0ab.js} +47 -1
  47. package/dist/esm/loader.js +2 -2
  48. package/dist/esm/lottery-bullet_2.entry.js +197 -0
  49. package/dist/esm/lottery-draw-results-history.entry.js +157 -0
  50. package/dist/esm/lottery-game-details.entry.js +15 -0
  51. package/dist/esm/lottery-game-page.entry.js +1 -4
  52. package/dist/esm/lottery-game-page.js +2 -2
  53. package/dist/esm/lottery-ticket-controller.entry.js +65 -0
  54. package/dist/esm/lottery-ticket.entry.js +165 -0
  55. package/dist/lottery-game-page/lottery-game-page.esm.js +1 -1
  56. package/dist/lottery-game-page/p-07cca45e.entry.js +1 -0
  57. package/dist/lottery-game-page/p-1196396b.entry.js +1 -0
  58. package/dist/lottery-game-page/p-2197c8ae.entry.js +1 -0
  59. package/dist/lottery-game-page/p-2a4e9984.entry.js +1 -0
  60. package/dist/lottery-game-page/p-4b390390.entry.js +1 -0
  61. package/dist/lottery-game-page/p-4bfd0112.entry.js +1 -0
  62. package/dist/lottery-game-page/p-5e12dbf9.entry.js +1 -0
  63. package/dist/lottery-game-page/p-a10368b2.entry.js +1 -0
  64. package/dist/lottery-game-page/p-a26ebf45.entry.js +1 -0
  65. package/dist/lottery-game-page/p-b301a9d4.js +1 -0
  66. package/dist/lottery-game-page/{p-6183a920.entry.js → p-d4b6a11a.entry.js} +1 -1
  67. package/dist/lottery-game-page/p-dd63fcc6.entry.js +1 -0
  68. package/dist/lottery-game-page/p-f59dc9e1.entry.js +1 -0
  69. package/dist/stencil.config.js +0 -1
  70. package/package.json +2 -2
  71. package/dist/lottery-game-page/p-2d7ccc96.js +0 -1
  72. package/dist/lottery-game-page/p-9ca649d9.entry.js +0 -1
  73. package/dist/lottery-game-page/p-e98ee83a.entry.js +0 -1
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-5701a895.js');
6
+
7
+ const DEFAULT_LANGUAGE = 'en';
8
+ const SUPPORTED_LANGUAGES = ['ro', 'en'];
9
+ const TRANSLATIONS = {
10
+ en: {
11
+ loading: 'Loading, please wait ...',
12
+ error: 'It was an error while trying to fetch the data',
13
+ grid: 'Grid',
14
+ multiplier: 'Multiplier',
15
+ numberOfDraws: 'Number of draws',
16
+ wagerPerDraw: 'Wager per draw',
17
+ resetButton: 'Reset',
18
+ autoButton: 'I feel lucky'
19
+ },
20
+ ro: {
21
+ loading: 'Se incarca, va rugam asteptati ...',
22
+ error: 'A fost o eroare in timp ce asteptam datele',
23
+ grid: 'Grid',
24
+ multiplier: 'Multiplicator',
25
+ numberOfDraws: 'Numarul de extrageri',
26
+ wagerPerDraw: 'Pariul per extragere',
27
+ resetButton: 'Reseteaza',
28
+ autoButton: 'Ma simt norocos'
29
+ },
30
+ };
31
+ const translate = (key, customLang) => {
32
+ const lang = customLang;
33
+ return TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
34
+ };
35
+
36
+ const lotteryTicketCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.TicketTitle{font-size:16px;font-weight:bold}.ButtonContainer{display:flex;justify-content:flex-end}.Toggle{cursor:pointer;margin-top:20px;display:inline-block}.ToggleSwitch{display:inline-block;background:#707070;border-radius:16px;width:58px;height:24px;position:relative;vertical-align:middle;transition:background 0.25s}.ToggleSwitch:before,.ToggleSwitch:after{content:\"\"}.ToggleSwitch:before{display:block;background:linear-gradient(to bottom, #fff 0%, #F1F1F1 100%);border-radius:50%;box-shadow:0 0 0 1px rgba(0, 0, 0, 0.25);width:16px;height:16px;position:absolute;top:4px;left:4px;transition:left 0.25s}.Toggle:hover .ToggleSwitch:before{background:linear-gradient(to bottom, #fff 0%, #fff 100%);box-shadow:0 0 0 1px rgba(0, 0, 0, 0.5)}.ToggleCheckbox:checked+.ToggleSwitch{background:#00ABA4}.ToggleCheckbox:checked+.ToggleSwitch:before{left:38px}.ToggleCheckbox{position:absolute;visibility:hidden}.Label{margin-right:5px;position:relative;top:2px;font-size:14px;font-weight:lighter;color:#000}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.NumberInput,.WagerInput{margin-top:10px;display:inline-flex;align-items:center}.NumberInput,.NumberInput *{box-sizing:border-box}.NumberInput button{cursor:pointer;outline:none;-webkit-appearance:none;border:none;align-items:center;justify-content:center;height:20px;position:relative}.NumberInput button:after{display:inline-block;position:absolute;transform:translate(-50%, -50%) rotate(180deg);align-items:center;text-align:center}.NumberInput button.Plus:after{transform:translate(-50%, -50%) rotate(0deg);width:30px;display:inline-flex;align-items:center;text-align:center}.NumberInput input[type=number],.WagerInput input[type=number]{max-width:50px;display:inline-flex;align-items:center;padding:4px 10px;text-align:center}.NumberInput input[type=number] .WagerInputTitle,.WagerInput input[type=number] .WagerInputTitle{font-size:14px;color:#000;padding:10px}.InputDefault{background-color:#F1F1F1;border-radius:4px;padding:5px;border:solid 1px #D4D4D4;color:#707070}.AutoButton{cursor:pointer;display:inline-block;border-radius:4px;padding:8px 20px;width:max-content;margin:5px 0;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}.AutoButton:active{background:#00958f;color:#FFF}.ResetButton{cursor:pointer;display:inline-block;border-radius:4px;padding:8px 20px;width:max-content;margin:5px 0;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}.ResetButton:hover{background:#FF6536;border:1px solid #FF3D00}.TicketGridBullets{background:#f1f1f1;border-radius:4px;padding:20px;margin-top:5px}.TicketGridBullets .TicketGridTitle{margin-top:0px}.Minus{border-radius:4px;width:30px;height:24px !important;margin-right:10px;color:#FFF;background:#009993}.Plus{border-radius:4px;width:30px;height:24px !important;margin-left:10px;color:#FFF;background:#009993}.SelectWrapper{width:auto;padding:5px;margin:0 auto;border:1px solid #ccc;border-radius:5px;position:relative}.SelectButton,.SelectOptions li{display:flex;align-items:center;cursor:pointer}.SelectButton{display:flex;padding:0 5px;border-radius:7px;align-items:center;justify-content:space-between;font-size:14px}.SelectButton span:first-child{padding-right:10px}.SelectExpand{transition:transform 0.3s linear;font-size:12px}.SelectActive .SelectExpand{transform:rotate(180deg)}.SelectContent{display:none;padding:5px;border-radius:7px}.SelectWrapper.SelectActive .SelectContent{width:100%;display:block;position:absolute;left:0;top:32px;padding:0;border:1px solid #ccc;overflow:hidden;background:#fff}.SelectContent .SelectOptions{max-height:100px;margin:0;overflow-y:auto;padding:0}.SelectContent .SelectOptions .SelectedValue{background-color:#009993;color:#fff}.SelectOptions::-webkit-scrollbar{width:7px}.SelectOptions::-webkit-scrollbar-track{background:#f1f1f1;border-radius:25px}.SelectOptions::-webkit-scrollbar-thumb{background:#ccc;border-radius:25px}.SelectOptions li{height:20px;padding:0 13px;font-size:14px}.SelectOptions li:hover{background:#f2f2f2}";
37
+
38
+ const LotteryTicket = class {
39
+ constructor(hostRef) {
40
+ index.registerInstance(this, hostRef);
41
+ this.ticketCompleted = index.createEvent(this, "ticketCompleted", 7);
42
+ this.autoSelection = index.createEvent(this, "autoSelection", 7);
43
+ this.resetSelection = index.createEvent(this, "resetSelection", 7);
44
+ this.stakeChange = index.createEvent(this, "stakeChange", 7);
45
+ this.multiplierChange = index.createEvent(this, "multiplierChange", 7);
46
+ /**
47
+ * Number of grids of a ticket
48
+ */
49
+ this.numberOfGrids = 1;
50
+ /**
51
+ * Option to have the ticket registered for multiple draws
52
+ */
53
+ this.multipleDraws = true;
54
+ /**
55
+ * Shows the reset button
56
+ */
57
+ this.resetButton = false;
58
+ /**
59
+ * Shows the auto-pick button
60
+ */
61
+ this.autoPick = false;
62
+ /**
63
+ * Language
64
+ */
65
+ this.language = 'en';
66
+ this.multiplier = false;
67
+ this.numberOfDraws = 1;
68
+ this.isLoading = true;
69
+ this.hasErrors = false;
70
+ this.ticketDone = false;
71
+ this.isCustomSelect = false;
72
+ this.amountInfo = {};
73
+ }
74
+ /**
75
+ * @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
76
+ */
77
+ checkForClickOutside(ev) {
78
+ if (ev.composedPath()[0].getAttribute('data-cluster') !== 'SelectComponent') {
79
+ this.isCustomSelect = false;
80
+ }
81
+ }
82
+ connectedCallback() {
83
+ let url = new URL(`${this.endpoint}/games/${this.gameId}`);
84
+ fetch(url.href)
85
+ .then((response) => {
86
+ if (response.ok) {
87
+ return response.json();
88
+ }
89
+ else {
90
+ // Throw error
91
+ this.hasErrors = true;
92
+ }
93
+ })
94
+ .then((data) => {
95
+ this.isLoading = false;
96
+ this.gameData = data;
97
+ this.grids = [...Array(data.rules.boards.length).keys()];
98
+ this.amountInfo = this.gameData.rules.stakes[0]; // initial value for select
99
+ })
100
+ .catch((err) => {
101
+ this.isLoading = false;
102
+ this.hasErrors = true;
103
+ console.error('Error!', err);
104
+ });
105
+ }
106
+ multiplierChangeHandler(e) {
107
+ this.multiplier = e.target ? e.target.checked : false;
108
+ this.multiplierChange.emit(this.multiplier);
109
+ }
110
+ drawsChangeHandler(event) {
111
+ this.ticket = Object.assign(Object.assign({}, this.ticket), { draws: event });
112
+ this.ticketCompleted.emit(this.ticket);
113
+ }
114
+ gridFilledHandler(event) {
115
+ this.ticket = Object.assign(Object.assign({}, event.detail), { draws: this.numberOfDraws });
116
+ this.ticketDone = true;
117
+ this.ticketCompleted.emit(this.ticket);
118
+ }
119
+ toggleAutoSelection() {
120
+ this.ticketDone = true;
121
+ this.autoSelection.emit(this.ticketId);
122
+ }
123
+ toggleResetSelection() {
124
+ this.ticketDone = false;
125
+ this.resetSelection.emit(this.ticketId);
126
+ }
127
+ changeStake(ticketid, amount) {
128
+ this.stakeChange.emit({
129
+ ticketId: ticketid,
130
+ stake: amount
131
+ });
132
+ }
133
+ toggleClass() {
134
+ this.isCustomSelect = !this.isCustomSelect;
135
+ }
136
+ setDropdownItem(item) {
137
+ this.amountInfo = {
138
+ amount: item.amount,
139
+ currency: item.currency
140
+ };
141
+ this.isCustomSelect = false;
142
+ this.changeStake(this.ticketId, item.amount);
143
+ }
144
+ render() {
145
+ if (this.isLoading) {
146
+ return (index.h("div", null, index.h("p", null, translate('loading', this.language))));
147
+ }
148
+ else {
149
+ if (this.hasErrors) {
150
+ return (index.h("div", null, index.h("p", null, translate('error', this.language))));
151
+ }
152
+ else {
153
+ const { rules } = this.gameData;
154
+ return (index.h("div", { class: "TicketContainer" }, index.h("p", { class: "TicketTitle" }, this.gameData.name), this.resetButton && this.ticketDone &&
155
+ index.h("div", { class: "ButtonContainer" }, index.h("a", { class: "ResetButton", onClick: () => this.toggleResetSelection() }, translate('resetButton', this.language))), this.autoPick && !this.ticketDone &&
156
+ index.h("div", { class: "ButtonContainer" }, index.h("a", { class: "AutoButton", onClick: () => this.toggleAutoSelection() }, translate('autoButton', this.language))), this.grids.map((item, index$1) => index.h("div", { class: "TicketGridBullets" }, index.h("p", { class: "TicketGridTitle" }, translate('grid', this.language), " ", item), index.h("lottery-grid", { "grid-index": index$1, "maximum-allowed": rules.boards[index$1].maximumAllowed, "minimum-allowed": rules.boards[index$1].minimumAllowed, "total-numbers": rules.boards[index$1].totalNumbers, selectable: true, "reset-button": true, "auto-pick": true, "game-id": this.gameId, "ticket-id": this.ticketId, language: this.language }))), rules.multiplier &&
157
+ index.h("div", null, index.h("label", { class: "Toggle" }, index.h("label", { class: "Label" }, translate('multiplier', this.language), ": "), index.h("input", { class: "ToggleCheckbox", type: "checkbox", onInput: (e) => this.multiplierChangeHandler(e) }), index.h("div", { class: "ToggleSwitch" }))), this.multipleDraws &&
158
+ index.h("div", { class: "TicketDraws" }, index.h("label", { class: "Label" }, translate('numberOfDraws', this.language), ": "), index.h("div", { class: "NumberInput" }, index.h("button", { onClick: () => this.numberOfDraws > 1 ? this.numberOfDraws-- : this.numberOfDraws = 1, class: "Minus" }, "-"), index.h("input", { class: "InputDefault", min: "1", value: this.numberOfDraws, type: "number" }), index.h("button", { onClick: () => this.numberOfDraws++, class: "Plus" }, "+"))), index.h("div", null, index.h("label", { class: "Label" }, translate('wagerPerDraw', this.language), ": "), index.h("div", { class: "WagerInput" }, rules.stakes.length > 1 ?
159
+ (index.h("div", { "data-cluster": "SelectComponent", class: this.isCustomSelect ? "SelectWrapper SelectActive" : "SelectWrapper" }, index.h("div", { "data-cluster": "SelectComponent", class: "SelectButton", onClick: () => this.toggleClass() }, index.h("span", { "data-cluster": "SelectComponent" }, this.amountInfo.amount, " ", this.amountInfo.currency), index.h("span", { "data-cluster": "SelectComponent", class: "SelectExpand" }, "\u25BC")), index.h("div", { "data-cluster": "SelectComponent", class: "SelectContent" }, index.h("ul", { "data-cluster": "SelectComponent", class: "SelectOptions" }, rules.stakes.map((item) => index.h("li", { "data-cluster": "SelectComponent", class: this.amountInfo.amount == item.amount ? 'SelectedValue' : '', value: item.amount, onClick: () => this.setDropdownItem(item) }, item.amount, " ", item.currency)))))) : (index.h("div", null, index.h("input", { min: "1", value: rules.stakes[0].amount, type: "number", disabled: true }), index.h("p", { class: "WagerInputTitle" }, rules.stakes[0].currency)))))));
160
+ }
161
+ }
162
+ }
163
+ static get watchers() { return {
164
+ "numberOfDraws": ["drawsChangeHandler"]
165
+ }; }
166
+ };
167
+ LotteryTicket.style = lotteryTicketCss;
168
+
169
+ exports.lottery_ticket = LotteryTicket;
@@ -8,17 +8,78 @@
8
8
  "typescriptVersion": "4.5.4"
9
9
  },
10
10
  "collections": [
11
+ {
12
+ "name": "@everymatrix/helper-accordion",
13
+ "tags": [
14
+ "helper-accordion"
15
+ ]
16
+ },
17
+ {
18
+ "name": "@everymatrix/helper-filters",
19
+ "tags": [
20
+ "helper-filters"
21
+ ]
22
+ },
11
23
  {
12
24
  "name": "@everymatrix/helper-modal",
13
25
  "tags": [
14
26
  "helper-modal"
15
27
  ]
16
28
  },
29
+ {
30
+ "name": "@everymatrix/helper-pagination",
31
+ "tags": [
32
+ "helper-pagination"
33
+ ]
34
+ },
35
+ {
36
+ "name": "@everymatrix/helper-tabs",
37
+ "tags": [
38
+ "helper-tab",
39
+ "helper-tabs"
40
+ ]
41
+ },
42
+ {
43
+ "name": "@everymatrix/lottery-bullet",
44
+ "tags": [
45
+ "lottery-bullet"
46
+ ]
47
+ },
17
48
  {
18
49
  "name": "@everymatrix/lottery-draw-results",
19
50
  "tags": [
20
51
  "lottery-draw-results"
21
52
  ]
53
+ },
54
+ {
55
+ "name": "@everymatrix/lottery-draw-results-history",
56
+ "tags": [
57
+ "lottery-draw-results-history"
58
+ ]
59
+ },
60
+ {
61
+ "name": "@everymatrix/lottery-game-details",
62
+ "tags": [
63
+ "lottery-game-details"
64
+ ]
65
+ },
66
+ {
67
+ "name": "@everymatrix/lottery-grid",
68
+ "tags": [
69
+ "lottery-grid"
70
+ ]
71
+ },
72
+ {
73
+ "name": "@everymatrix/lottery-ticket",
74
+ "tags": [
75
+ "lottery-ticket"
76
+ ]
77
+ },
78
+ {
79
+ "name": "@everymatrix/lottery-ticket-controller",
80
+ "tags": [
81
+ "lottery-ticket-controller"
82
+ ]
22
83
  }
23
84
  ],
24
85
  "bundles": [
@@ -0,0 +1,6 @@
1
+ import { A as Accordion, d as defineCustomElement$1 } from './helper-accordion2.js';
2
+
3
+ const HelperAccordion = Accordion;
4
+ const defineCustomElement = defineCustomElement$1;
5
+
6
+ export { HelperAccordion, defineCustomElement };
@@ -0,0 +1,116 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+
3
+ const DEFAULT_LANGUAGE = 'en';
4
+ const SUPPORTED_LANGUAGES = ['ro', 'en'];
5
+ const TRANSLATIONS = {
6
+ en: {
7
+ deleteTicket: 'Delete ticket'
8
+ },
9
+ ro: {
10
+ deleteTicket: 'Sterge biletul'
11
+ },
12
+ };
13
+ const translate = (key, customLang) => {
14
+ const lang = customLang;
15
+ return TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
16
+ };
17
+
18
+ const helperAccordionCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.Header{border-radius:4px 4px 0 0;background:#009993;display:flex;gap:30px;border:1px solid #009993;padding:8px 10px;user-select:none}.Header:hover{background:#00ABA4}.Header .Title,.Header .Subtitle,.Header .Description{margin:0;font-size:14px;color:#fff}.Header .Expand{margin-left:auto;color:#FFF;width:17px;height:17px;cursor:pointer;text-align:center;transform:rotate(90deg);font-size:20px;user-select:none}.HeaderTicketHistory{border-radius:4px;background:#F1F1F1;display:flex;gap:30px;border:1px solid #009993;padding:8px 10px;user-select:none;margin-bottom:5px}.HeaderTicketHistory:hover{background:#00ABA4}.HeaderTicketHistory .Title,.HeaderTicketHistory .Subtitle,.HeaderTicketHistory .Description{margin:0;font-size:14px;color:#000}.HeaderTicketHistory .Expand{margin-left:auto;color:#FFF;width:17px;height:17px;cursor:pointer;text-align:center;transform:rotate(90deg);font-size:20px;user-select:none}.Content{border-radius:0 0 4px 4px;background:#fff;border:1px solid #009993;padding:10px 15px;user-select:none;color:#000;margin-bottom:10px}.ActionButton{cursor:pointer;display:inline-block;border-radius:4px;margin:20px 0 10px;text-transform:uppercase;font-size:12px;text-align:center;padding:8px 20px;min-width:80px;background:#FF3D00;border:1px solid #FF3D00;color:#FFF}.ActionButton:hover{background:#FF6536;border:1px solid #FF3D00}";
19
+
20
+ const Accordion = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
21
+ constructor() {
22
+ super();
23
+ this.__registerHost();
24
+ this.__attachShadow();
25
+ this.accordionEvent = createEvent(this, "helperAccordionAction", 7);
26
+ /**
27
+ * Flag for ticket history
28
+ */
29
+ this.ticketHistoryFlag = false;
30
+ /**
31
+ * Title (top header)
32
+ */
33
+ this.headerTitle = '';
34
+ /**
35
+ * SubTitle (top header)
36
+ */
37
+ this.headerSubtitle = '';
38
+ /**
39
+ * Description
40
+ */
41
+ this.description = '';
42
+ /**
43
+ * Enables footer content
44
+ */
45
+ this.footer = false;
46
+ /**
47
+ * Enables footer button for tab deletion
48
+ */
49
+ this.deleteTab = false;
50
+ /**
51
+ * Activates postMessages as events for actions from the widget
52
+ */
53
+ this.postMessage = false;
54
+ /**
55
+ * Name of the event emitter by the action button
56
+ */
57
+ this.eventName = 'helperAccordionAction';
58
+ /**
59
+ * Collapsed
60
+ */
61
+ this.collapsed = true;
62
+ /**
63
+ * Language
64
+ */
65
+ this.language = 'en';
66
+ }
67
+ // @TODO fix the `any` type :)
68
+ connectedCallback() {
69
+ this.showContent = !this.collapsed;
70
+ }
71
+ toggleContent() {
72
+ this.showContent = !this.showContent;
73
+ }
74
+ deleteAction() {
75
+ if (this.postMessage) {
76
+ // @TODO maybe change the name type, this one sucks
77
+ window.postMessage({ type: this.eventName }, window.location.href);
78
+ }
79
+ this.accordionEvent.emit();
80
+ }
81
+ render() {
82
+ return (h("div", { class: "Wrapper" }, h("div", { class: this.ticketHistoryFlag === true ? 'HeaderTicketHistory' : 'Header' }, h("p", { class: "Title" }, this.headerTitle), h("p", { class: "Subtitle" }, this.headerSubtitle), h("p", { class: "Subtitle" }, this.description), h("span", { class: "Expand", onClick: () => this.toggleContent() }, this.showContent ? '<' : '>')), this.showContent &&
83
+ h("div", null, h("div", { class: "Content" }, h("slot", { name: 'accordionContent' }), this.footer && this.showContent &&
84
+ h("div", null, this.deleteTab &&
85
+ h("span", { class: "ActionButton", onClick: () => this.deleteAction() }, translate('deleteTicket', this.language)))))));
86
+ }
87
+ static get style() { return helperAccordionCss; }
88
+ }, [1, "helper-accordion", {
89
+ "ticketHistoryFlag": [4, "ticket-history-flag"],
90
+ "headerTitle": [1, "header-title"],
91
+ "headerSubtitle": [1, "header-subtitle"],
92
+ "description": [1],
93
+ "footer": [4],
94
+ "deleteTab": [4, "delete-tab"],
95
+ "postMessage": [4, "post-message"],
96
+ "eventName": [1, "event-name"],
97
+ "collapsed": [4],
98
+ "language": [1],
99
+ "showContent": [32]
100
+ }]);
101
+ function defineCustomElement() {
102
+ if (typeof customElements === "undefined") {
103
+ return;
104
+ }
105
+ const components = ["helper-accordion"];
106
+ components.forEach(tagName => { switch (tagName) {
107
+ case "helper-accordion":
108
+ if (!customElements.get(tagName)) {
109
+ customElements.define(tagName, Accordion);
110
+ }
111
+ break;
112
+ } });
113
+ }
114
+ defineCustomElement();
115
+
116
+ export { Accordion as A, defineCustomElement as d };
@@ -0,0 +1,6 @@
1
+ import { H as HelperFilters$1, d as defineCustomElement$1 } from './helper-filters2.js';
2
+
3
+ const HelperFilters = HelperFilters$1;
4
+ const defineCustomElement = defineCustomElement$1;
5
+
6
+ export { HelperFilters, defineCustomElement };
@@ -0,0 +1,166 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$1 } from './helper-modal2.js';
3
+
4
+ const DEFAULT_LANGUAGE = 'en';
5
+ const SUPPORTED_LANGUAGES = ['ro', 'en'];
6
+ const TRANSLATIONS = {
7
+ en: {
8
+ filterOpen: 'Filter',
9
+ filterClear: 'Clear',
10
+ filterModalTicketTitle: 'Ticket Results',
11
+ filterModalDrawTitle: 'Draws Results History',
12
+ filterTicketPlaceholder: 'Search for a ticket ID',
13
+ filterDrawPlaceholder: 'Search for a draw ID',
14
+ filterDateRangePlaceholder: 'Date Range',
15
+ filterModalButton: 'Search',
16
+ filterFromCalendar: 'From',
17
+ filterToCalendar: 'To',
18
+ filterOrDate: 'or search by date'
19
+ },
20
+ ro: {
21
+ filterOpen: 'Filtrare',
22
+ filterClear: 'Stergere',
23
+ filterModalTicketTitle: 'Rezultatele biletelor',
24
+ filterModalDrawTitle: 'Rezultatele draw-urilor',
25
+ filterTicketPlaceholder: 'Cauta ID bilet',
26
+ filterDrawPlaceholder: 'Cauta ID draw',
27
+ filterDateRangePlaceholder: 'Perioada',
28
+ filterModalButton: 'Cauta',
29
+ filterOrDate: 'sau cauta dupa data'
30
+ },
31
+ };
32
+ const translate = (key, customLang) => {
33
+ const lang = customLang;
34
+ return TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
35
+ };
36
+
37
+ const helperFiltersCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.FilterButtonsWrapper{display:flex;justify-content:flex-end;gap:5px}.FilterButtonsWrapper .FilterOpen{cursor:pointer;border-radius:4px;padding:8px 15px;width:max-content;border:1px solid #00958f;background:#00958f;color:#FFF;font-size:12px;transition:all 0.2s linear;text-align:center;letter-spacing:0}.FilterButtonsWrapper .FilterOpen:hover{background:#00958f;color:#FFF}.FilterButtonsWrapper .FilterClear{cursor:pointer;border-radius:4px;padding:8px 15px;width:max-content;border:1px solid #00958f;background:#FFF;color:#000;font-size:12px;transition:all 0.2s linear;text-align:center;letter-spacing:0}.FilterButtonsWrapper .FilterClear:hover{background:#00958f;color:#FFF}.FilterModalHeader,.FilterModalBody,.FilterModalFooter{display:flex;flex-direction:column;gap:5px;align-items:center;margin:20px 0}.FilterModalHeader .FilterModalTitle,.FilterModalBody .FilterModalTitle,.FilterModalFooter .FilterModalTitle{margin:0;padding:0;font-weight:700;font-size:16px;color:#009993;text-transform:uppercase}.FilterModalHeader .FilterModalSearch,.FilterModalBody .FilterModalSearch,.FilterModalFooter .FilterModalSearch{border-radius:4px;background:#e8ebef;color:#263445;width:100%;height:26px;max-width:280px;padding:5px;font-size:15px;border:none;outline:#009993}.FilterModalHeader .FilterCalendarWrapper,.FilterModalBody .FilterCalendarWrapper,.FilterModalFooter .FilterCalendarWrapper{display:flex;gap:5px}.FilterModalHeader .FilterCalendarWrapper .VaadinDatePicker,.FilterModalBody .FilterCalendarWrapper .VaadinDatePicker,.FilterModalFooter .FilterCalendarWrapper .VaadinDatePicker{width:50%;max-width:143px}.FilterModalHeader .FilterModalButton,.FilterModalBody .FilterModalButton,.FilterModalFooter .FilterModalButton{cursor:pointer;border-radius:4px;padding:8px 60px;width:max-content;margin:5px;border:1px solid #00958f;background:#00958f;color:#FFF;font-size:12px;transition:all 0.2s linear;text-transform:uppercase;text-align:center;letter-spacing:0}.FilterModalHeader .FilterModalButton:hover,.FilterModalBody .FilterModalButton:hover,.FilterModalFooter .FilterModalButton:hover{background:#00958f;color:#FFF}.FilterModalHeader p,.FilterModalBody p,.FilterModalFooter p{margin:5px 0}";
38
+
39
+ const HelperFilters = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
40
+ constructor() {
41
+ super();
42
+ this.__registerHost();
43
+ this.__attachShadow();
44
+ this.filterDraw = createEvent(this, "filterDraw", 7);
45
+ this.filterSelection = createEvent(this, "filterSelection", 7);
46
+ this.filterSelectionReset = createEvent(this, "filterSelectionReset", 7);
47
+ /**
48
+ * Check if show the filter option by id
49
+ */
50
+ this.showFilterId = true;
51
+ /**
52
+ * Choose if filter by draw ID or ticket ID. By default is draw ID.
53
+ */
54
+ this.activateTicketSearch = false;
55
+ /**
56
+ * Game ID
57
+ */
58
+ this.gameId = '';
59
+ /**
60
+ * Player ID
61
+ */
62
+ this.playerId = '';
63
+ /**
64
+ * Session ID
65
+ */
66
+ this.session = '';
67
+ /**
68
+ * Instead of customEvents the widget triggers postMessages
69
+ */
70
+ this.postMessage = false;
71
+ /**
72
+ * Language
73
+ */
74
+ this.language = 'en';
75
+ this.showFilterModal = false;
76
+ this.showClearButton = false;
77
+ this.filterData = {};
78
+ this.filterDataReset = { ticketDrawId: '', filterFromCalendar: '', filterToCalendar: '' };
79
+ }
80
+ // reset field values each time the filter modal opens
81
+ componentDidRender() {
82
+ this.filterData.ticketDrawId = null;
83
+ this.filterData.filterFromCalendar = null;
84
+ this.filterData.filterToCalendar = null;
85
+ // @TODO: to way binding?
86
+ if (document.getElementById('#FilterById'))
87
+ document.getElementById('#FilterById').value = '';
88
+ }
89
+ filterSelectionHandler(event) {
90
+ if (this.postMessage)
91
+ window.postMessage({ type: 'filterSelection', event }, window.location.href);
92
+ if (this.filterData.ticketDrawId)
93
+ this.filterDraw.emit(event);
94
+ if (this.filterData.filterFromCalendar || this.filterData.filterToCalendar)
95
+ this.filterSelection.emit(event);
96
+ }
97
+ filterSelectionResetHandler(event) {
98
+ if (this.postMessage)
99
+ window.postMessage({ type: 'filterSelectionReset', event }, window.location.href);
100
+ this.filterSelectionReset.emit(event);
101
+ }
102
+ modalCloseEvent() {
103
+ this.showFilterModal = false;
104
+ }
105
+ // Toggle filter modal
106
+ toggleFilterModal() {
107
+ this.showFilterModal = true;
108
+ }
109
+ // Filter search
110
+ filterSearch() {
111
+ this.modalCloseEvent();
112
+ this.showClearButton = true;
113
+ this.filterSelectionHandler(this.filterData);
114
+ }
115
+ resetSearch() {
116
+ this.showClearButton = false;
117
+ this.filterSelectionResetHandler(this.filterDataReset);
118
+ this.filterData = {};
119
+ }
120
+ handleTicketDrawId(event) {
121
+ this.filterData.ticketDrawId = event.target.value;
122
+ }
123
+ handleFilterFrom(event) {
124
+ this.filterData.filterFromCalendar = new Date(event.target.value).toISOString();
125
+ }
126
+ handleFilterTo(event) {
127
+ this.filterData.filterToCalendar = new Date(event.target.value).toISOString();
128
+ }
129
+ render() {
130
+ return (h("div", { class: "HelperFilters" }, h("div", { class: "FilterButtonsWrapper" }, h("button", { class: "FilterOpen", onClick: () => this.toggleFilterModal() }, translate('filterOpen', this.language)), this.showClearButton ? h("button", { class: "FilterClear", onClick: () => this.resetSearch() }, translate('filterClear', this.language)) : null), h("helper-modal", { "title-modal": "Filter Modal", visible: this.showFilterModal }, h("div", { class: "FilterModalHeader" }, h("h3", { class: "FilterModalTitle" }, this.activateTicketSearch ? translate('filterModalTicketTitle', this.language) : translate('filterModalDrawTitle', this.language))), h("div", { class: "FilterModalBody" }, h("input", { id: "FilterById", type: "text", value: this.filterData.ticketDrawId, onInput: (event) => this.handleTicketDrawId(event), class: "FilterModalSearch", placeholder: this.activateTicketSearch ? translate('filterTicketPlaceholder', this.language) : translate('filterDrawPlaceholder', this.language) }), h("p", null, translate('filterOrDate', this.language)), h("div", { class: "FilterCalendarWrapper" })), h("div", { class: "FilterModalFooter" }, h("button", { class: "FilterModalButton", onClick: () => this.filterSearch() }, translate('filterModalButton', this.language))))));
131
+ }
132
+ static get style() { return helperFiltersCss; }
133
+ }, [1, "helper-filters", {
134
+ "showFilterId": [4, "show-filter-id"],
135
+ "activateTicketSearch": [4, "activate-ticket-search"],
136
+ "gameId": [1, "game-id"],
137
+ "playerId": [1, "player-id"],
138
+ "session": [1],
139
+ "postMessage": [4, "post-message"],
140
+ "language": [1],
141
+ "showFilterModal": [32],
142
+ "showClearButton": [32],
143
+ "filterData": [32],
144
+ "filterDataReset": [32]
145
+ }, [[0, "modalCloseEvent", "modalCloseEvent"]]]);
146
+ function defineCustomElement() {
147
+ if (typeof customElements === "undefined") {
148
+ return;
149
+ }
150
+ const components = ["helper-filters", "helper-modal"];
151
+ components.forEach(tagName => { switch (tagName) {
152
+ case "helper-filters":
153
+ if (!customElements.get(tagName)) {
154
+ customElements.define(tagName, HelperFilters);
155
+ }
156
+ break;
157
+ case "helper-modal":
158
+ if (!customElements.get(tagName)) {
159
+ defineCustomElement$1();
160
+ }
161
+ break;
162
+ } });
163
+ }
164
+ defineCustomElement();
165
+
166
+ export { HelperFilters as H, defineCustomElement as d };