@everymatrix/lottery-draw-results 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.
- package/dist/cjs/{index-03778cb9.js → index-62f030ff.js} +81 -7
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/lottery-bullet_3.cjs.entry.js +383 -0
- package/dist/cjs/lottery-draw-results.cjs.js +3 -3
- package/dist/collection/collection-manifest.json +15 -2
- package/dist/collection/components/lottery-draw-results/lottery-draw-results.css +18 -7
- package/dist/collection/components/lottery-draw-results/lottery-draw-results.js +169 -56
- package/dist/collection/utils/locale.utils.js +14 -2
- package/dist/components/index.d.ts +5 -1
- package/dist/components/index.js +0 -1
- package/dist/components/lottery-bullet.js +6 -0
- package/dist/components/lottery-bullet2.js +56 -0
- package/dist/components/lottery-draw-results.js +73 -48
- package/dist/components/lottery-grid.js +6 -0
- package/dist/components/lottery-grid2.js +196 -0
- package/dist/esm/{index-17920f23.js → index-98326ddd.js} +81 -8
- package/dist/esm/loader.js +3 -3
- package/dist/esm/lottery-bullet_3.entry.js +377 -0
- package/dist/esm/lottery-draw-results.js +3 -3
- package/dist/lottery-draw-results/lottery-draw-results.esm.js +1 -1
- package/dist/lottery-draw-results/p-bb429486.js +1 -0
- package/dist/lottery-draw-results/p-d653e278.entry.js +1 -0
- package/dist/types/components/lottery-draw-results/lottery-draw-results.d.ts +28 -3
- package/dist/types/components.d.ts +56 -2
- package/package.json +1 -1
- package/dist/cjs/lottery-draw-results.cjs.entry.js +0 -179
- package/dist/esm/lottery-draw-results.entry.js +0 -175
- package/dist/lottery-draw-results/p-62092f31.js +0 -2
- package/dist/lottery-draw-results/p-c6628b24.entry.js +0 -1
|
@@ -47,6 +47,40 @@ const supportsConstructibleStylesheets = /*@__PURE__*/ (() => {
|
|
|
47
47
|
return false;
|
|
48
48
|
})()
|
|
49
49
|
;
|
|
50
|
+
const addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
|
|
51
|
+
if (listeners) {
|
|
52
|
+
listeners.map(([flags, name, method]) => {
|
|
53
|
+
const target = getHostListenerTarget(elm, flags) ;
|
|
54
|
+
const handler = hostListenerProxy(hostRef, method);
|
|
55
|
+
const opts = hostListenerOpts(flags);
|
|
56
|
+
plt.ael(target, name, handler, opts);
|
|
57
|
+
(hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const hostListenerProxy = (hostRef, methodName) => (ev) => {
|
|
62
|
+
try {
|
|
63
|
+
{
|
|
64
|
+
if (hostRef.$flags$ & 256 /* isListenReady */) {
|
|
65
|
+
// instance is ready, let's call it's member method for this event
|
|
66
|
+
hostRef.$lazyInstance$[methodName](ev);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
(hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
consoleError(e);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const getHostListenerTarget = (elm, flags) => {
|
|
78
|
+
if (flags & 4 /* TargetDocument */)
|
|
79
|
+
return doc;
|
|
80
|
+
return elm;
|
|
81
|
+
};
|
|
82
|
+
// prettier-ignore
|
|
83
|
+
const hostListenerOpts = (flags) => (flags & 2 /* Capture */) !== 0;
|
|
50
84
|
const HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';
|
|
51
85
|
const createTime = (fnName, tagName = '') => {
|
|
52
86
|
{
|
|
@@ -76,7 +110,7 @@ const registerStyle = (scopeId, cssText, allowCS) => {
|
|
|
76
110
|
};
|
|
77
111
|
const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
|
|
78
112
|
let scopeId = getScopeId(cmpMeta);
|
|
79
|
-
|
|
113
|
+
let style = styles.get(scopeId);
|
|
80
114
|
// if an element is NOT connected then getRootNode() will return the wrong root node
|
|
81
115
|
// so the fallback is to always use the document for the root node in those cases
|
|
82
116
|
styleContainerNode = styleContainerNode.nodeType === 11 /* DocumentFragment */ ? styleContainerNode : doc;
|
|
@@ -156,7 +190,7 @@ const h = (nodeName, vnodeData, ...children) => {
|
|
|
156
190
|
let child = null;
|
|
157
191
|
let simple = false;
|
|
158
192
|
let lastSimple = false;
|
|
159
|
-
|
|
193
|
+
let vNodeChildren = [];
|
|
160
194
|
const walk = (c) => {
|
|
161
195
|
for (let i = 0; i < c.length; i++) {
|
|
162
196
|
child = c[i];
|
|
@@ -279,7 +313,7 @@ const setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags) => {
|
|
|
279
313
|
if ((isProp || (isComplex && newValue !== null)) && !isSvg) {
|
|
280
314
|
try {
|
|
281
315
|
if (!elm.tagName.includes('-')) {
|
|
282
|
-
|
|
316
|
+
let n = newValue == null ? '' : newValue;
|
|
283
317
|
// Workaround for Safari, moving the <input> caret when re-assigning the same valued
|
|
284
318
|
if (memberName === 'list') {
|
|
285
319
|
isProp = false;
|
|
@@ -336,7 +370,7 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
|
|
|
336
370
|
};
|
|
337
371
|
const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
|
|
338
372
|
// tslint:disable-next-line: prefer-const
|
|
339
|
-
|
|
373
|
+
let newVNode = newParentVNode.$children$[childIndex];
|
|
340
374
|
let i = 0;
|
|
341
375
|
let elm;
|
|
342
376
|
let childNode;
|
|
@@ -523,6 +557,20 @@ const renderVdom = (hostRef, renderFnResults) => {
|
|
|
523
557
|
// synchronous patch
|
|
524
558
|
patch(oldVNode, rootVnode);
|
|
525
559
|
};
|
|
560
|
+
const getElement = (ref) => (getHostRef(ref).$hostElement$ );
|
|
561
|
+
const createEvent = (ref, name, flags) => {
|
|
562
|
+
const elm = getElement(ref);
|
|
563
|
+
return {
|
|
564
|
+
emit: (detail) => {
|
|
565
|
+
return emitEvent(elm, name, {
|
|
566
|
+
bubbles: !!(flags & 4 /* Bubbles */),
|
|
567
|
+
composed: !!(flags & 2 /* Composed */),
|
|
568
|
+
cancelable: !!(flags & 1 /* Cancellable */),
|
|
569
|
+
detail,
|
|
570
|
+
});
|
|
571
|
+
},
|
|
572
|
+
};
|
|
573
|
+
};
|
|
526
574
|
/**
|
|
527
575
|
* Helper function to create & dispatch a custom Event on a provided target
|
|
528
576
|
* @param elm the target of the Event
|
|
@@ -559,6 +607,15 @@ const dispatchHooks = (hostRef, isInitialLoad) => {
|
|
|
559
607
|
const endSchedule = createTime('scheduleUpdate', hostRef.$cmpMeta$.$tagName$);
|
|
560
608
|
const instance = hostRef.$lazyInstance$ ;
|
|
561
609
|
let promise;
|
|
610
|
+
if (isInitialLoad) {
|
|
611
|
+
{
|
|
612
|
+
hostRef.$flags$ |= 256 /* isListenReady */;
|
|
613
|
+
if (hostRef.$queuedListeners$) {
|
|
614
|
+
hostRef.$queuedListeners$.map(([methodName, event]) => safeCall(instance, methodName, event));
|
|
615
|
+
hostRef.$queuedListeners$ = null;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
562
619
|
endSchedule();
|
|
563
620
|
return then(promise, () => updateComponent(hostRef, instance, isInitialLoad));
|
|
564
621
|
};
|
|
@@ -715,6 +772,10 @@ const parsePropertyValue = (propValue, propType) => {
|
|
|
715
772
|
// but we'll cheat here and say that the string "false" is the boolean false
|
|
716
773
|
return propValue === 'false' ? false : propValue === '' || !!propValue;
|
|
717
774
|
}
|
|
775
|
+
if (propType & 2 /* Number */) {
|
|
776
|
+
// force it to be a number
|
|
777
|
+
return parseFloat(propValue);
|
|
778
|
+
}
|
|
718
779
|
if (propType & 1 /* String */) {
|
|
719
780
|
// could have been passed as a number or boolean
|
|
720
781
|
// but we still want it as a string
|
|
@@ -956,6 +1017,10 @@ const connectedCallback = (elm) => {
|
|
|
956
1017
|
}
|
|
957
1018
|
}
|
|
958
1019
|
else {
|
|
1020
|
+
// not the first time this has connected
|
|
1021
|
+
// reattach any event listeners to the host
|
|
1022
|
+
// since they would have been removed when disconnected
|
|
1023
|
+
addHostEventListeners(elm, hostRef, cmpMeta.$listeners$);
|
|
959
1024
|
// fire off connectedCallback() on component instance
|
|
960
1025
|
fireConnectedCallback(hostRef.$lazyInstance$);
|
|
961
1026
|
}
|
|
@@ -964,7 +1029,13 @@ const connectedCallback = (elm) => {
|
|
|
964
1029
|
};
|
|
965
1030
|
const disconnectedCallback = (elm) => {
|
|
966
1031
|
if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {
|
|
967
|
-
getHostRef(elm);
|
|
1032
|
+
const hostRef = getHostRef(elm);
|
|
1033
|
+
{
|
|
1034
|
+
if (hostRef.$rmListeners$) {
|
|
1035
|
+
hostRef.$rmListeners$.map((rmListener) => rmListener());
|
|
1036
|
+
hostRef.$rmListeners$ = undefined;
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
968
1039
|
}
|
|
969
1040
|
};
|
|
970
1041
|
const bootstrapLazy = (lazyBundles, options = {}) => {
|
|
@@ -991,6 +1062,9 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
|
|
|
991
1062
|
{
|
|
992
1063
|
cmpMeta.$members$ = compactMeta[2];
|
|
993
1064
|
}
|
|
1065
|
+
{
|
|
1066
|
+
cmpMeta.$listeners$ = compactMeta[3];
|
|
1067
|
+
}
|
|
994
1068
|
const tagName = cmpMeta.$tagName$;
|
|
995
1069
|
const HostElement = class extends HTMLElement {
|
|
996
1070
|
// StencilLazyHost
|
|
@@ -1071,6 +1145,7 @@ const registerHost = (elm, cmpMeta) => {
|
|
|
1071
1145
|
elm['s-p'] = [];
|
|
1072
1146
|
elm['s-rc'] = [];
|
|
1073
1147
|
}
|
|
1148
|
+
addHostEventListeners(elm, hostRef, cmpMeta.$listeners$);
|
|
1074
1149
|
return hostRefs.set(elm, hostRef);
|
|
1075
1150
|
};
|
|
1076
1151
|
const isMemberInElement = (elm, memberName) => memberName in elm;
|
|
@@ -1084,9 +1159,7 @@ const loadModule = (cmpMeta, hostRef, hmrVersionId) => {
|
|
|
1084
1159
|
if (module) {
|
|
1085
1160
|
return module[exportName];
|
|
1086
1161
|
}
|
|
1087
|
-
/*!__STENCIL_STATIC_IMPORT_SWITCH__*/
|
|
1088
1162
|
return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(
|
|
1089
|
-
/* @vite-ignore */
|
|
1090
1163
|
/* webpackInclude: /\.entry\.js$/ */
|
|
1091
1164
|
/* webpackExclude: /\.system\.entry\.js$/ */
|
|
1092
1165
|
/* webpackMode: "lazy" */
|
|
@@ -1142,6 +1215,7 @@ const nextTick = /*@__PURE__*/ (cb) => promiseResolve().then(cb);
|
|
|
1142
1215
|
const writeTask = /*@__PURE__*/ queueTask(queueDomWrites, true);
|
|
1143
1216
|
|
|
1144
1217
|
exports.bootstrapLazy = bootstrapLazy;
|
|
1218
|
+
exports.createEvent = createEvent;
|
|
1145
1219
|
exports.h = h;
|
|
1146
1220
|
exports.promiseResolve = promiseResolve;
|
|
1147
1221
|
exports.registerInstance = registerInstance;
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const index = require('./index-
|
|
5
|
+
const index = require('./index-62f030ff.js');
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
|
-
Stencil Client Patch Esm v2.
|
|
8
|
+
Stencil Client Patch Esm v2.15.2 | MIT Licensed | https://stenciljs.com
|
|
9
9
|
*/
|
|
10
10
|
const patchEsm = () => {
|
|
11
11
|
return index.promiseResolve();
|
|
@@ -14,7 +14,7 @@ const patchEsm = () => {
|
|
|
14
14
|
const defineCustomElements = (win, options) => {
|
|
15
15
|
if (typeof window === 'undefined') return Promise.resolve();
|
|
16
16
|
return patchEsm().then(() => {
|
|
17
|
-
return index.bootstrapLazy([["lottery-
|
|
17
|
+
return index.bootstrapLazy([["lottery-bullet_3.cjs",[[1,"lottery-draw-results",{"endpoint":[1],"gameId":[1,"game-id"],"language":[1],"playerId":[1,"player-id"],"drawMode":[4,"draw-mode"],"drawId":[1,"draw-id"],"gameName":[1,"game-name"],"ticketDate":[1,"ticket-date"],"ticketStatus":[1,"ticket-status"],"ticketId":[1,"ticket-id"],"ticketAmount":[1,"ticket-amount"],"ticketMultiplier":[4,"ticket-multiplier"],"ticketDrawCount":[2,"ticket-draw-count"],"multiplier":[32],"isLoading":[32],"drawResults":[32],"rules":[32],"toggleDrawer":[32],"hasErrors":[32],"errorText":[32]}],[1,"lottery-grid",{"ticketId":[2,"ticket-id"],"totalNumbers":[2,"total-numbers"],"gameId":[1,"game-id"],"maximumAllowed":[2,"maximum-allowed"],"minimumAllowed":[2,"minimum-allowed"],"selectable":[4],"selectedNumbers":[1,"selected-numbers"],"displaySelected":[4,"display-selected"],"language":[1],"gridIndex":[2,"grid-index"],"numbers":[32]},[[0,"lotteryBulletSelection","lotteryBulletSelectionHandler"],[4,"resetSelection","resetSelectionHandler"],[4,"autoSelection","autoSelectionHandler"]]],[1,"lottery-bullet",{"value":[1],"selectable":[4],"isSelected":[4,"is-selected"]}]]]], options);
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const index = require('./index-62f030ff.js');
|
|
6
|
+
|
|
7
|
+
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}";
|
|
8
|
+
|
|
9
|
+
const LotteryBullet = class {
|
|
10
|
+
constructor(hostRef) {
|
|
11
|
+
index.registerInstance(this, hostRef);
|
|
12
|
+
this.bulletEvent = index.createEvent(this, "lotteryBulletSelection", 7);
|
|
13
|
+
/**
|
|
14
|
+
* Value of the bullet
|
|
15
|
+
*/
|
|
16
|
+
this.value = '0';
|
|
17
|
+
/**
|
|
18
|
+
* Marks if the bullet should be selectable
|
|
19
|
+
*/
|
|
20
|
+
this.selectable = true;
|
|
21
|
+
/**
|
|
22
|
+
* Marks if the bullet should be selected
|
|
23
|
+
*/
|
|
24
|
+
this.isSelected = false;
|
|
25
|
+
this.select = () => {
|
|
26
|
+
if (this.selectable) {
|
|
27
|
+
this.isSelected = !this.isSelected;
|
|
28
|
+
this.bulletEvent.emit({
|
|
29
|
+
value: this.value,
|
|
30
|
+
selected: this.isSelected
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
render() {
|
|
36
|
+
return (index.h("div", { class: 'Circle ' + (this.selectable ? '' : 'Disabled') + (this.isSelected ? 'Selected' : ''), onClick: () => this.select() }, this.value));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
LotteryBullet.style = lotteryBulletCss;
|
|
40
|
+
|
|
41
|
+
const DEFAULT_LANGUAGE = 'en';
|
|
42
|
+
const SUPPORTED_LANGUAGES = ['ro', 'en'];
|
|
43
|
+
const TRANSLATIONS = {
|
|
44
|
+
en: {
|
|
45
|
+
drawResultsHeader: 'Last draw results',
|
|
46
|
+
drawId: 'Draw ID',
|
|
47
|
+
drawName: 'Game name',
|
|
48
|
+
drawDate: 'Draw Date',
|
|
49
|
+
drawNumbersGridDraw: 'Draw numbers Grid A',
|
|
50
|
+
drawNumbersGridTicket: 'Draw numbers Grid B',
|
|
51
|
+
ticketResult: 'Ticket result',
|
|
52
|
+
amountWon: 'Amount won',
|
|
53
|
+
numberOfDraws: 'Number of draws',
|
|
54
|
+
multiplier: 'Multiplier:',
|
|
55
|
+
ticketPurchaseDate: 'Ticket Purchase Date',
|
|
56
|
+
ticketStatus: 'Ticket Status',
|
|
57
|
+
ticketId: 'Ticket ID',
|
|
58
|
+
ticketAmount: 'Ticket Amount',
|
|
59
|
+
winUpTo: 'Win up to',
|
|
60
|
+
},
|
|
61
|
+
ro: {
|
|
62
|
+
drawResultsHeader: 'Ultimele rezultate extragere',
|
|
63
|
+
drawId: 'Id extragere',
|
|
64
|
+
drawName: 'Numele jocului',
|
|
65
|
+
drawDate: 'Data extragerii',
|
|
66
|
+
drawNumbersGridDraw: 'Numerele extrase Grid A',
|
|
67
|
+
drawNumbersGridTicket: 'Numerele extrase Grid B',
|
|
68
|
+
ticketResult: 'Rezultatul biletului',
|
|
69
|
+
amountWon: 'Suma castigata',
|
|
70
|
+
numberOfDraws: 'Numarul de extrageri',
|
|
71
|
+
multiplier: 'Multiplicator:',
|
|
72
|
+
ticketPurchaseDate: 'Data achizitionarii biletului',
|
|
73
|
+
ticketStatus: 'Statusul biletului',
|
|
74
|
+
ticketId: 'Id biletul',
|
|
75
|
+
ticketAmount: 'Valoarea biletului',
|
|
76
|
+
winUpTo: 'Poti castiga'
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
const translate = (key, customLang) => {
|
|
80
|
+
const lang = customLang;
|
|
81
|
+
return TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const lotteryDrawResultsCss = "@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap\");:host{display:block;font-family:\"Roboto\", sans-serif}.TicketInfo{display:flex;flex-direction:row;gap:15px;background-color:#009993;color:#fff;padding:12px;font-size:14px}.DrawResultsArea{margin-top:15px}.DrawResultsSection{max-width:600px;margin:0px auto;border-radius:4px}.DrawResultsHeader{display:flex;justify-content:space-between;padding:10px 20px;background-color:#009993;color:#fff;font-size:14px;border-radius:4px 4px 0 0}.DrawResultsHeader h4{text-transform:uppercase;font-weight:400;margin:0;padding-top:15px}.DrawMultipler label{display:block;margin:15px 0}.DrawResultsBody{padding:0px 20px;margin-bottom:5px;border-radius:0 0 4px 4px;border:1px solid #009993}.DrawResultsBody .DrawNumbersGrid{font-size:14px}.DrawResultsBody .NumberOfDrawsContainer{display:table;width:100%}.Toggle{cursor:pointer;display:inline-block}.ToggleSwitch{display:inline-block;background:#ccc;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%, #eee 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:#56c080}.ToggleCheckbox:checked+.ToggleSwitch:before{left:38px}.ToggleCheckbox{position:absolute;visibility:hidden}.Label{margin-right:5px;position:relative;top:2px}.DrawTicketsContainer{margin:30px auto}.ExpandableBoxes{position:relative}.ExpandableBox{line-height:12px;font-weight:lighter;width:100%;height:100%;max-height:70px;float:left;margin:0 0 20px 0;border:1px solid #f1f1f1;background:#fff;border-radius:4px;padding:10px;-webkit-transition:all 0.6s ease-in-out;-moz-transition:all 0.6s ease-in-out;-o-transition:all 0.6s ease-in-out;-ms-transition:all 0.6s ease-in-out;transition:all 0.6s ease-in-out;overflow:hidden;box-shadow:rgba(99, 99, 99, 0.2) 0px 2px 8px 0px}.ExpandableBox.ShowBox{max-height:400px;margin:0px 0px 20p 0px}.ExpandableBox.HideBox{width:0;height:0;overflow:hidden;border:none;padding:0;margin:0;opacity:0}";
|
|
85
|
+
|
|
86
|
+
const LotteryDrawResults = class {
|
|
87
|
+
constructor(hostRef) {
|
|
88
|
+
index.registerInstance(this, hostRef);
|
|
89
|
+
/**
|
|
90
|
+
* Language of the widget
|
|
91
|
+
*/
|
|
92
|
+
this.language = 'en';
|
|
93
|
+
/**
|
|
94
|
+
* Shows only the last draw
|
|
95
|
+
*/
|
|
96
|
+
this.drawMode = false;
|
|
97
|
+
/**
|
|
98
|
+
* The drawID (option)
|
|
99
|
+
*/
|
|
100
|
+
this.drawId = '';
|
|
101
|
+
/**
|
|
102
|
+
* The game name
|
|
103
|
+
*/
|
|
104
|
+
this.gameName = '';
|
|
105
|
+
/**
|
|
106
|
+
* The ticket submission date
|
|
107
|
+
*/
|
|
108
|
+
this.ticketDate = '';
|
|
109
|
+
/**
|
|
110
|
+
* The ticket status
|
|
111
|
+
*/
|
|
112
|
+
this.ticketStatus = '';
|
|
113
|
+
/**
|
|
114
|
+
* The ticket id
|
|
115
|
+
*/
|
|
116
|
+
this.ticketId = '';
|
|
117
|
+
/**
|
|
118
|
+
* The ticket amount
|
|
119
|
+
*/
|
|
120
|
+
this.ticketAmount = '';
|
|
121
|
+
/**
|
|
122
|
+
* The ticket multiplier
|
|
123
|
+
*/
|
|
124
|
+
this.ticketMultiplier = false;
|
|
125
|
+
/**
|
|
126
|
+
* The ticket draw count
|
|
127
|
+
*/
|
|
128
|
+
this.ticketDrawCount = 0;
|
|
129
|
+
this.multiplier = 3;
|
|
130
|
+
this.isLoading = true;
|
|
131
|
+
this.drawResults = [];
|
|
132
|
+
this.rules = {};
|
|
133
|
+
this.toggleDrawer = [false];
|
|
134
|
+
this.hasErrors = false;
|
|
135
|
+
this.errorText = '';
|
|
136
|
+
this.changeBox = (index) => {
|
|
137
|
+
this.toggleDrawer = this.toggleDrawer.map((item, itemIndex) => {
|
|
138
|
+
if (itemIndex == index) {
|
|
139
|
+
return !item;
|
|
140
|
+
}
|
|
141
|
+
return item;
|
|
142
|
+
});
|
|
143
|
+
if (index >= this.toggleDrawer.length) {
|
|
144
|
+
this.toggleDrawer.push(true);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
connectedCallback() {
|
|
149
|
+
let promises = [];
|
|
150
|
+
promises.push(this.getGameData());
|
|
151
|
+
if (this.drawId) {
|
|
152
|
+
promises.push(this.getDrawData());
|
|
153
|
+
}
|
|
154
|
+
Promise.all(promises)
|
|
155
|
+
.then(() => {
|
|
156
|
+
this.isLoading = false;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
getDrawData() {
|
|
160
|
+
return new Promise((resolve, reject) => {
|
|
161
|
+
let url = new URL(`${this.endpoint}/games/${this.gameId}/draws/${this.drawId}`);
|
|
162
|
+
fetch(url.href)
|
|
163
|
+
.then((response) => {
|
|
164
|
+
// @TODO EXCEPTIONS
|
|
165
|
+
return response.json();
|
|
166
|
+
})
|
|
167
|
+
.then((data) => {
|
|
168
|
+
this.drawData = data;
|
|
169
|
+
resolve(true);
|
|
170
|
+
this.isLoading = false;
|
|
171
|
+
})
|
|
172
|
+
.catch((err) => {
|
|
173
|
+
reject(err);
|
|
174
|
+
this.isLoading = false;
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
getGameData() {
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
let url = new URL(`${this.endpoint}/games/${this.gameId}`);
|
|
181
|
+
fetch(url.href)
|
|
182
|
+
.then((response) => {
|
|
183
|
+
return response.json();
|
|
184
|
+
})
|
|
185
|
+
.then((data) => {
|
|
186
|
+
this.rules = {
|
|
187
|
+
maximumAllowed: data.rules.boards[0].maximumAllowed,
|
|
188
|
+
totalNumbers: data.rules.boards[0].totalNumbers
|
|
189
|
+
};
|
|
190
|
+
resolve(true);
|
|
191
|
+
this.isLoading = false;
|
|
192
|
+
this.hasErrors = false;
|
|
193
|
+
})
|
|
194
|
+
.catch((err) => {
|
|
195
|
+
this.isLoading = false;
|
|
196
|
+
this.hasErrors = true;
|
|
197
|
+
this.errorText = err;
|
|
198
|
+
reject(err);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
render() {
|
|
203
|
+
if (this.isLoading) {
|
|
204
|
+
return (index.h("p", null, "Loading, please wait ..."));
|
|
205
|
+
}
|
|
206
|
+
else if (this.hasErrors) {
|
|
207
|
+
index.h("p", null, this.errorText);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return (index.h("section", { class: "DrawResultsSection" }, !this.drawMode ?
|
|
211
|
+
index.h("div", { class: "DrawResultsArea" }, index.h("div", { class: "TicketInfo" }, index.h("div", { class: "TicketGameName" }, translate('drawName', this.language), ": ", index.h("span", null, this.gameName)), index.h("div", { class: "TicketDate" }, translate('ticketPurchaseDate', this.language), ": ", index.h("span", null, this.ticketDate.slice(0, 10))), index.h("div", { class: "TicketStatus" }, translate('ticketStatus', this.language), ": ", index.h("span", null, this.ticketStatus))), index.h("div", { class: "DrawResultsBody" }, index.h("div", { class: "TicketIdContainer" }, index.h("p", null, translate('ticketId', this.language), ": ", index.h("span", null, this.ticketId))), index.h("div", { class: "TicketAmountContainer" }, index.h("p", null, translate('ticketAmount', this.language), " ", index.h("span", null, this.ticketAmount))), index.h("div", { class: "DrawNumbersGrid" }, index.h("p", null, translate('drawNumbersGridTicket', this.language), ":"), index.h("div", { class: "BulletContainer" }, index.h("lottery-grid", { "maximum-allowed": this.rules.maximumAllowed, "total-numbers": this.rules.totalNumbers, "selected-numbers": this.selection, selectable: false, "display-selected": true, language: this.language }))), index.h("div", { class: "DrawMultipler" }, index.h("label", { class: "Label" }, translate('winUpTo', this.language), " ", index.h("span", null, JSON.stringify(this.ticketMultiplier)))), index.h("div", { class: "NumberOfDrawsContainer" }, index.h("p", null, translate('numberOfDraws', this.language), ": ", this.ticketDrawCount), index.h("div", { class: "DrawTicketsContainer" }, this.drawResults.map((item, index$1) => index.h("div", { class: "ExpandableBoxes" }, index.h("div", { class: this.toggleDrawer[index$1] ? 'ExpandableBox ShowBox' : 'ExpandableBox', onClick: () => this.changeBox(index$1) }, index.h("div", { class: "TicketResultContainer" }, index.h("p", null, translate('ticketResult', this.language), ": ", item.status)), item.state == 'won' &&
|
|
212
|
+
index.h("div", { class: "AmountWonContainer" }, index.h("p", null, translate('amountWon', this.language), ": ", Number(item.amount).toLocaleString('en'), " ", item.currency)), index.h("div", { class: "DrawIdContainer" }, index.h("p", null, translate('drawId', this.language), ": ", item.drawId)), index.h("div", { class: "DrawDateContainer" }, index.h("p", null, translate('drawDate', this.language), ": ", item.updatedAt.slice(0, 10), " | ", item.updatedAt.slice(11, 19))), index.h("div", { class: "DrawNumbersGrid" }), index.h("div", { class: "DrawMultipler" }, index.h("label", { class: "Label" }, translate('winUpTo', this.language), " ", item.multiplier)))))))))
|
|
213
|
+
:
|
|
214
|
+
index.h("div", { class: "DrawResultsArea" }, this.drawData &&
|
|
215
|
+
index.h("div", null, index.h("div", { class: "DrawResultsHeader" }, index.h("span", null, translate('drawId', this.language), ": ", this.drawData.id), index.h("span", null, translate('drawDate', this.language), ": ", this.drawData.date.slice(0, 10))), index.h("div", { class: "DrawResultsBody" }, index.h("div", { class: "DrawNumbersGrid" }, index.h("p", null, translate('drawNumbersGridDraw', this.language), ":"), index.h("div", { class: "BulletContainer" }, index.h("lottery-grid", { "maximum-allowed": this.rules.maximumAllowed, "total-numbers": this.rules.totalNumbers, selectedNumbers: this.drawData.winningNumbers.join(','), "display-selected": true, selectable: false, language: this.language })), index.h("div", { class: "DrawMultipler" }, index.h("label", { class: "Label" }, translate('multiplier', this.language), " ", this.multiplier))))))));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
LotteryDrawResults.style = lotteryDrawResultsCss;
|
|
220
|
+
|
|
221
|
+
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}";
|
|
222
|
+
|
|
223
|
+
const LotteryGrid = class {
|
|
224
|
+
constructor(hostRef) {
|
|
225
|
+
index.registerInstance(this, hostRef);
|
|
226
|
+
this.gridFilledEvent = index.createEvent(this, "gridFilled", 7);
|
|
227
|
+
this.gridDirtyEvent = index.createEvent(this, "gridDirty", 7);
|
|
228
|
+
/**
|
|
229
|
+
* Number of bullets of grid
|
|
230
|
+
*/
|
|
231
|
+
this.totalNumbers = 0;
|
|
232
|
+
/**
|
|
233
|
+
* Number of maximum bullets that can be selected
|
|
234
|
+
*/
|
|
235
|
+
this.maximumAllowed = 0;
|
|
236
|
+
/**
|
|
237
|
+
* Minimum allowed of bullets
|
|
238
|
+
*/
|
|
239
|
+
this.minimumAllowed = 1;
|
|
240
|
+
/**
|
|
241
|
+
* Allows the user to select numbers on the grid
|
|
242
|
+
*/
|
|
243
|
+
this.selectable = true;
|
|
244
|
+
/**
|
|
245
|
+
* Numbers that should be showed as selected on the grid (as a string of those numbers e.g. '1,2,3,4,5,6')
|
|
246
|
+
*/
|
|
247
|
+
this.selectedNumbers = '';
|
|
248
|
+
/**
|
|
249
|
+
* Show only selected numbers
|
|
250
|
+
*/
|
|
251
|
+
this.displaySelected = false;
|
|
252
|
+
/**
|
|
253
|
+
* Language
|
|
254
|
+
*/
|
|
255
|
+
this.language = 'en';
|
|
256
|
+
this.numbers = [];
|
|
257
|
+
this.selectedCounter = 0;
|
|
258
|
+
}
|
|
259
|
+
connectedCallback() {
|
|
260
|
+
let selected = [];
|
|
261
|
+
if (this.selectedNumbers.length > 0) {
|
|
262
|
+
selected = this.selectedNumbers.split(',');
|
|
263
|
+
this.selectedCounter = selected.length;
|
|
264
|
+
}
|
|
265
|
+
if (this.displaySelected) {
|
|
266
|
+
selected.forEach((item) => {
|
|
267
|
+
this.numbers.push({
|
|
268
|
+
number: item,
|
|
269
|
+
selected: true,
|
|
270
|
+
selectable: this.selectable
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
[...Array(this.totalNumbers).keys()]
|
|
276
|
+
.map(number => (number + 1).toString())
|
|
277
|
+
.forEach((number) => {
|
|
278
|
+
this.numbers.push({
|
|
279
|
+
number,
|
|
280
|
+
selected: selected.indexOf(number) >= 0 ? true : false,
|
|
281
|
+
selectable: this.selectedCounter == this.maximumAllowed ? false : this.selectable
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
lotteryBulletSelectionHandler(event) {
|
|
287
|
+
this.numbers = this.numbers.map((item) => {
|
|
288
|
+
if (item.number == event.detail.value) {
|
|
289
|
+
return {
|
|
290
|
+
number: item.number,
|
|
291
|
+
selected: event.detail.selected,
|
|
292
|
+
selectable: item.selectable
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
number: item.number,
|
|
297
|
+
selected: item.selected,
|
|
298
|
+
selectable: item.selectable
|
|
299
|
+
};
|
|
300
|
+
});
|
|
301
|
+
if (event.detail.selected) {
|
|
302
|
+
this.selectedCounter += 1;
|
|
303
|
+
if (this.selectedCounter == this.maximumAllowed) {
|
|
304
|
+
this.numbers = this.numbers.map((item) => {
|
|
305
|
+
return {
|
|
306
|
+
number: item.number,
|
|
307
|
+
selected: item.selected,
|
|
308
|
+
selectable: item.selected ? true : false
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
this.gridFilledEvent.emit({
|
|
312
|
+
id: this.ticketId,
|
|
313
|
+
index: this.gridIndex,
|
|
314
|
+
selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
if (this.selectedCounter == this.maximumAllowed) {
|
|
320
|
+
this.numbers = this.numbers.map((item) => {
|
|
321
|
+
return {
|
|
322
|
+
number: item.number,
|
|
323
|
+
selected: item.selected,
|
|
324
|
+
selectable: true
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
this.gridDirtyEvent.emit({
|
|
328
|
+
id: this.ticketId,
|
|
329
|
+
index: this.gridIndex,
|
|
330
|
+
selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
this.selectedCounter -= 1;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
async resetSelectionHandler(event) {
|
|
337
|
+
if (event.detail && event.detail == this.ticketId) {
|
|
338
|
+
this.selectedCounter = 0;
|
|
339
|
+
this.numbers = this.numbers.map((item) => {
|
|
340
|
+
return {
|
|
341
|
+
number: item.number,
|
|
342
|
+
selected: false,
|
|
343
|
+
selectable: this.selectable
|
|
344
|
+
};
|
|
345
|
+
});
|
|
346
|
+
this.gridDirtyEvent.emit({
|
|
347
|
+
id: this.ticketId,
|
|
348
|
+
index: this.gridIndex,
|
|
349
|
+
selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async autoSelectionHandler(event) {
|
|
354
|
+
if (event.detail && event.detail == this.ticketId) {
|
|
355
|
+
this.resetSelectionHandler(event);
|
|
356
|
+
let array = [...Array(this.totalNumbers).keys()]
|
|
357
|
+
.map(number => number + 1)
|
|
358
|
+
.sort(() => 0.5 - Math.random());
|
|
359
|
+
array = array.slice(0, this.minimumAllowed);
|
|
360
|
+
this.numbers = this.numbers.map((item) => {
|
|
361
|
+
return {
|
|
362
|
+
number: item.number,
|
|
363
|
+
selected: array.indexOf(parseInt(item.number, 10)) >= 0 ? true : false,
|
|
364
|
+
selectable: array.indexOf(parseInt(item.number, 10)) >= 0 ? true : false,
|
|
365
|
+
};
|
|
366
|
+
});
|
|
367
|
+
this.gridFilledEvent.emit({
|
|
368
|
+
id: this.ticketId,
|
|
369
|
+
index: this.gridIndex,
|
|
370
|
+
selectedNumbers: this.numbers.filter((item) => item.selected).map((item) => item.number)
|
|
371
|
+
});
|
|
372
|
+
this.selectedCounter = this.maximumAllowed;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
render() {
|
|
376
|
+
return (index.h("div", { class: "GridContainer" }, index.h("div", { class: "Grid" }, this.numbers.map((item) => index.h("div", null, index.h("lottery-bullet", { value: item.number, selectable: item.selectable, "is-selected": item.selected }))))));
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
LotteryGrid.style = lotteryGridCss;
|
|
380
|
+
|
|
381
|
+
exports.lottery_bullet = LotteryBullet;
|
|
382
|
+
exports.lottery_draw_results = LotteryDrawResults;
|
|
383
|
+
exports.lottery_grid = LotteryGrid;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const index = require('./index-
|
|
3
|
+
const index = require('./index-62f030ff.js');
|
|
4
4
|
|
|
5
5
|
/*
|
|
6
|
-
Stencil Client Patch Browser v2.
|
|
6
|
+
Stencil Client Patch Browser v2.15.2 | MIT Licensed | https://stenciljs.com
|
|
7
7
|
*/
|
|
8
8
|
const patchBrowser = () => {
|
|
9
9
|
const importMeta = (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('lottery-draw-results.cjs.js', document.baseURI).href));
|
|
@@ -15,5 +15,5 @@ const patchBrowser = () => {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
patchBrowser().then(options => {
|
|
18
|
-
return index.bootstrapLazy([["lottery-
|
|
18
|
+
return index.bootstrapLazy([["lottery-bullet_3.cjs",[[1,"lottery-draw-results",{"endpoint":[1],"gameId":[1,"game-id"],"language":[1],"playerId":[1,"player-id"],"drawMode":[4,"draw-mode"],"drawId":[1,"draw-id"],"gameName":[1,"game-name"],"ticketDate":[1,"ticket-date"],"ticketStatus":[1,"ticket-status"],"ticketId":[1,"ticket-id"],"ticketAmount":[1,"ticket-amount"],"ticketMultiplier":[4,"ticket-multiplier"],"ticketDrawCount":[2,"ticket-draw-count"],"multiplier":[32],"isLoading":[32],"drawResults":[32],"rules":[32],"toggleDrawer":[32],"hasErrors":[32],"errorText":[32]}],[1,"lottery-grid",{"ticketId":[2,"ticket-id"],"totalNumbers":[2,"total-numbers"],"gameId":[1,"game-id"],"maximumAllowed":[2,"maximum-allowed"],"minimumAllowed":[2,"minimum-allowed"],"selectable":[4],"selectedNumbers":[1,"selected-numbers"],"displaySelected":[4,"display-selected"],"language":[1],"gridIndex":[2,"grid-index"],"numbers":[32]},[[0,"lotteryBulletSelection","lotteryBulletSelectionHandler"],[4,"resetSelection","resetSelectionHandler"],[4,"autoSelection","autoSelectionHandler"]]],[1,"lottery-bullet",{"value":[1],"selectable":[4],"isSelected":[4,"is-selected"]}]]]], options);
|
|
19
19
|
});
|
|
@@ -4,9 +4,22 @@
|
|
|
4
4
|
],
|
|
5
5
|
"compiler": {
|
|
6
6
|
"name": "@stencil/core",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.15.2",
|
|
8
8
|
"typescriptVersion": "4.5.4"
|
|
9
9
|
},
|
|
10
|
-
"collections": [
|
|
10
|
+
"collections": [
|
|
11
|
+
{
|
|
12
|
+
"name": "@everymatrix/lottery-bullet",
|
|
13
|
+
"tags": [
|
|
14
|
+
"lottery-bullet"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "@everymatrix/lottery-grid",
|
|
19
|
+
"tags": [
|
|
20
|
+
"lottery-grid"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
11
24
|
"bundles": []
|
|
12
25
|
}
|