@energy8platform/platform-core 0.27.0 → 0.28.0
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/index.cjs.js +0 -3682
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -403
- package/dist/index.esm.js +1 -3680
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -7
- package/src/index.ts +2 -17
- package/dist/shell.cjs.js +0 -3739
- package/dist/shell.cjs.js.map +0 -1
- package/dist/shell.d.ts +0 -436
- package/dist/shell.esm.js +0 -3732
- package/dist/shell.esm.js.map +0 -1
- package/scripts/gen-version.mjs +0 -21
- package/src/shell/GameShell.ts +0 -431
- package/src/shell/INTER-LICENSE.txt +0 -93
- package/src/shell/colors.ts +0 -32
- package/src/shell/components/BottomBar.ts +0 -255
- package/src/shell/components/BuyBonus.ts +0 -329
- package/src/shell/components/GameInfo.ts +0 -384
- package/src/shell/components/Modal.ts +0 -36
- package/src/shell/components/ReplayModal.ts +0 -57
- package/src/shell/components/Settings.ts +0 -59
- package/src/shell/components/icons.svg +0 -139
- package/src/shell/components/icons.ts +0 -45
- package/src/shell/components/pickers.ts +0 -150
- package/src/shell/components/primitives.ts +0 -85
- package/src/shell/fonts-digits.ts +0 -12
- package/src/shell/fonts.ts +0 -13
- package/src/shell/format.ts +0 -39
- package/src/shell/i18n.ts +0 -56
- package/src/shell/index.ts +0 -22
- package/src/shell/keyboard.ts +0 -229
- package/src/shell/locales.ts +0 -864
- package/src/shell/motion.ts +0 -43
- package/src/shell/shell.css.ts +0 -499
- package/src/shell/state.ts +0 -31
- package/src/shell/theme.ts +0 -59
- package/src/shell/types.ts +0 -262
- package/src/shell/version.ts +0 -3
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 384" width="576" height="384">
|
|
2
|
-
<!-- Energy8 shell icon set — generated from packages/platform-core/src/shell/components/icons.ts.
|
|
3
|
-
Reusable as a sprite: <use href="shell-icons.svg#ge-icon-<name>"/>. -->
|
|
4
|
-
<rect width="576" height="384" fill="#0c111c"/>
|
|
5
|
-
<defs>
|
|
6
|
-
<symbol id="ge-icon-spin" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M17.92 4.68 L13.91 2.81 L10.55 1.6 L12.05 3.47 L11.95 3.56 L10.93 3.65 L9.25 4.12 L7.94 4.77 L7.01 5.42 L5.61 6.82 L4.58 8.41 L4.03 9.53 L3.28 11.67 L2.91 13.91 L4.49 16.52 L4.68 16.62 L6.54 14.94 L6.17 14.01 L6.08 13.17 L5.98 13.07 L5.98 11.49 L6.08 10.93 L6.45 9.71 L6.82 8.97 L7.48 8.04 L8.22 7.29 L9.25 6.54 L9.99 6.17 L11.21 5.8 L11.77 5.7 L13.73 5.7 L13.82 5.8 L14.57 5.89 L15.87 6.45 L16.06 6.45 L17.92 4.86Z"/><path d="M19.6 7.66 L19.42 7.57 L17.83 9.16 L18.11 9.9 L18.2 10.74 L18.3 10.83 L18.3 12.7 L18.2 12.79 L18.11 13.54 L17.46 15.03 L16.9 15.87 L15.87 16.9 L14.94 17.55 L14.1 17.92 L13.17 18.2 L12.05 18.39 L11.02 18.39 L10.93 18.3 L9.9 18.2 L9.06 17.92 L8.41 17.55 L8.22 17.55 L6.73 18.76 L6.26 19.32 L11.21 21.56 L12.7 22.03 L13.45 22.4 L13.73 22.4 L12.23 20.53 L12.33 20.44 L13.54 20.35 L15.31 19.79 L16.8 18.95 L17.64 18.3 L18.76 17.08 L19.51 15.96 L20.16 14.66 L20.25 14.19 L20.53 13.63 L20.72 12.98 L20.72 12.61 L20.91 12.14 L21.09 10.37 L19.97 8.5Z"/></g></symbol>
|
|
7
|
-
<symbol id="ge-icon-turbo" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M19.16 1.71 L16.47 1.71 L16.36 1.6 L13.23 1.6 L12.78 1.71 L11.78 3.39 L10.55 5.85 L10.32 6.07 L8.31 9.99 L8.09 10.21 L7.19 12.11 L12 12.34 L14.46 9.88 L14.24 9.65 L12.89 9.54 L12.89 9.2 L17.03 4.4Z"/><path d="M19.83 6.97 L18.93 7.64 L16.36 9.99 L9.65 16.47 L4.17 21.62 L4.17 22.4 L5.4 21.39 L13.34 13.9 L13.45 14.12 L10.43 20.16 L10.21 20.83 L9.65 21.95 L9.76 21.95 L19.27 10.32 L19.27 10.21 L17.59 10.1 L17.48 9.88 L18.71 8.53Z"/></g></symbol>
|
|
8
|
-
<symbol id="ge-icon-turbo1" viewBox="0 0 24 24"><g fill="currentColor" transform="translate(6.94 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g></symbol>
|
|
9
|
-
<symbol id="ge-icon-turbo2" viewBox="0 0 24 24"><g fill="currentColor" transform="translate(3.81 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(133.33 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g></symbol>
|
|
10
|
-
<symbol id="ge-icon-turbo3" viewBox="0 0 24 24"><g fill="currentColor" transform="translate(0.69 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(133.33 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(266.67 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g></symbol>
|
|
11
|
-
<symbol id="ge-icon-autoplay" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M19.48 5.36 L15.02 1.6 L14.82 1.6 L15.62 3.28 L15.52 3.78 L14.82 3.78 L14.72 3.88 L12.64 3.88 L12.54 3.78 L5.71 3.78 L3.23 6.35 L3.23 16.26 L3.33 16.26 L4.82 14.48 L4.82 12.5 L4.72 12.4 L4.72 7.25 L4.82 7.05 L6.4 5.56 L8.29 5.56 L8.38 5.46 L19.48 5.46Z"/><path d="M9.87 8.83 L9.87 15.27 L9.97 15.27 L11.26 14.38 L15.12 12.1 L15.12 12 L11.16 9.62 L10.66 9.23Z"/><path d="M20.67 7.94 L20.17 8.34 L19.18 9.52 L19.18 16.85 L17.5 18.44 L17.1 18.54 L4.42 18.54 L4.42 18.64 L7.3 21.21 L8.78 22.4 L8.78 22 L8.09 20.42 L8.19 20.22 L18.29 20.22 L20.77 17.65 L20.67 17.35Z"/></g></symbol>
|
|
12
|
-
<symbol id="ge-icon-stop" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M22.4 3.04 L21.1 4.82 L21.1 9.47 L21.03 9.54 L21.03 12.41 L21.1 12.96 L21.03 18.84 L21.1 19.18 L20.35 20.01 L19.39 20.89 L17.27 20.89 L16.72 20.96 L4.75 20.96 L4.68 20.89 L3.04 22.33 L4.13 22.33 L4.2 22.4 L6.66 22.4 L6.73 22.33 L9.13 22.33 L9.19 22.4 L20.48 22.4 L22.4 20.48Z"/><path d="M20.96 1.6 L3.38 1.6 L1.6 3.45 L1.6 20.96 L2.9 19.12 L2.9 4.75 L4.54 3.11 L19.12 3.11 L19.46 2.97Z"/></g></symbol>
|
|
13
|
-
<symbol id="ge-icon-menu" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M1.6 13.52 L19.61 13.52 L22.27 10.73 L22.4 10.35 L4.39 10.35 L2.36 12.51Z"/><path d="M1.6 6.04 L19.61 6.04 L22.15 3.38 L22.4 2.87 L4.39 2.87 L2.36 5.02Z"/><path d="M1.6 21 L3.25 21 L3.38 21.13 L4.9 21.13 L5.02 21 L19.61 21 L22.4 17.96 L4.52 17.83 L4.26 17.96 L2.36 19.99Z"/></g></symbol>
|
|
14
|
-
<symbol id="ge-icon-betUp" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M21.01 15.43 L19.18 13.07 L14.68 6.75 L12.32 3.64 L12 3.42 L8.57 7.93 L6.42 11.04 L2.89 15.75 L2.78 16.07 L12 8.14 L12.21 8.14 L20.68 15.43Z"/><path d="M22.4 20.26 L20.04 17.79 L12.21 10.28 L12 10.28 L6.53 15.43 L6.42 15.65 L1.81 20.15 L1.6 20.58 L12 14.04 L12.21 14.04 L12.75 14.47 L18.11 17.68 L18.65 18.11 L19.51 18.54 L22.29 20.36Z"/></g></symbol>
|
|
15
|
-
<symbol id="ge-icon-betDown" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M1.6 2.74 L1.84 3.22 L5.57 7.43 L11.7 14.04 L12.06 14.28 L12.42 14.04 L18.79 7.19 L22.4 2.98 L22.28 2.86 L18.55 5.51 L12.06 10.44 L5.81 5.63Z"/><path d="M20.84 9.35 L18.07 11.52 L12.18 16.57 L11.94 16.57 L4.49 10.2 L3.52 9.48 L3.4 9.6 L8.57 16.57 L8.81 17.05 L10.26 18.85 L10.5 19.33 L11.34 20.3 L11.58 20.78 L12.18 21.26 L18.43 12.84Z"/></g></symbol>
|
|
16
|
-
<symbol id="ge-icon-minus" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M1.6 13.26 L12.42 13.26 L12.5 13.18 L19.81 13.26 L22.4 10.82 L4.27 10.74Z"/></g></symbol>
|
|
17
|
-
<symbol id="ge-icon-plus" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M13.16 1.6 L12.26 3.17 L10.77 5.42 L10.77 10.73 L10.69 10.8 L4.33 10.8 L1.79 13.2 L10.69 13.2 L10.77 13.27 L10.77 22.4 L12.41 19.71 L13.16 18.66 L13.16 13.27 L13.23 13.2 L19.59 13.2 L22.21 10.8 L13.23 10.8 L13.16 10.73Z"/></g></symbol>
|
|
18
|
-
<symbol id="ge-icon-gift" viewBox="0 0 24 24"><rect x="4" y="9" width="16" height="11" rx="2" fill="currentColor"/><path d="M9 9a2.5 2.5 0 1 1 3-3 2.5 2.5 0 1 1 3 3z" fill="currentColor"/><rect x="11" y="9" width="2" height="11" fill="rgba(0,0,0,.35)"/></symbol>
|
|
19
|
-
<symbol id="ge-icon-ticket" viewBox="0 0 24 24"><g transform="translate(12 12) scale(0.0354) translate(-518.2 -535.2)"><g transform="rotate(-15 512 512)"><path d="M250 392H774L774 462C739 474 720 504 720 536C720 568 739 598 774 610V680H250V610C285 598 304 568 304 536C304 504 285 474 250 462V392Z" fill="none" stroke="currentColor" stroke-width="52" stroke-linejoin="miter" stroke-linecap="square"/><path d="M562.9 408.3L441.5 553.9L506.9 546.3L472.9 664.1L604 504L528.9 514.3Z" fill="currentColor"/></g></g></symbol>
|
|
20
|
-
<symbol id="ge-icon-info" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M14.22 7.78 L11.13 7.86 L9.4 9.21 L9.17 9.29 L10.15 9.29 L10.23 9.59 L9.32 13.73 L8.87 17.12 L8.57 18.78 L8.5 19.69 L8.27 20.74 L8.12 22.32 L8.04 22.4 L13.62 17.95 L11.96 17.95 L11.89 17.58 L12.41 15.69 L12.49 15.01 L12.87 13.73 L12.87 13.43 L13.24 12.15 L13.77 9.97 L14 8.68 L14.22 8.08Z"/><path d="M15.96 1.6 L12.94 1.6 L11.74 3.18 L11.51 3.63 L10.08 5.67 L12.79 5.59 L14.37 3.71Z"/></g></symbol>
|
|
21
|
-
<symbol id="ge-icon-soundOn" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M16.61 6.68 L17.16 8.4 L17.4 9.97 L17.4 13.88 L17.32 13.95 L17.16 15.44 L16.61 17.16 L18.88 13.72 L18.88 12.86 L18.96 12.78 L18.88 10.12Z"/><path d="M19.27 4.34 L19.58 4.88 L19.66 5.28 L20.05 6.14 L20.6 7.93 L20.91 9.5 L20.91 10.44 L20.99 10.51 L20.99 13.25 L20.91 13.33 L20.91 14.19 L20.76 15.13 L20.05 17.63 L19.27 19.43 L20.29 18.02 L21.15 16.61 L22.4 14.19 L22.4 9.58 L21.31 7.39 L20.29 5.74Z"/><path d="M13.17 1.76 L10.28 4.34 L6.29 8.17 L1.6 8.25 L1.6 15.6 L2.15 15.75 L6.29 16.3 L9.97 19.58 L13.17 22.24Z"/><path d="M11.69 5.59 L11.92 5.67 L11.92 19.04 L11.69 19.12 L7.07 14.82 L4.57 14.5 L4.42 14.35 L4.42 10.51 L4.57 10.36 L7.07 10.28Z"/></g></symbol>
|
|
22
|
-
<symbol id="ge-icon-soundOff" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M13.68 13.18 L12.53 14.4 L12.53 18.44 L12.3 18.51 L10.4 16.76 L9.33 17.83 L12.84 20.88 L13.75 21.56 L13.75 13.18Z"/><path d="M17.71 8.69 L17.49 8.91 L17.56 9.9 L17.64 9.98 L17.64 13.1 L17.33 14.7 L17.03 15.39 L18.78 12.88 L18.78 11.66 L18.86 11.58 L18.78 10.29Z"/><path d="M19.47 6.63 L19.85 7.47 L20.46 9.6 L20.53 10.13 L20.53 13.03 L20.08 15.01 L19.31 16.91 L20.61 14.93 L21.3 13.49 L21.52 13.18 L21.52 9.9 L20.76 8.53Z"/><path d="M20.91 2.21 L16.5 6.63 L13.98 9.3 L13.75 9.22 L13.75 1.6 L10.86 4.19 L7.05 7.85 L2.4 7.92 L2.48 8 L2.48 15.16 L6.51 15.7 L7.73 14.32 L5.3 14.02 L5.22 13.94 L5.22 10.13 L5.75 9.98 L7.81 9.9 L12.3 5.33 L12.53 5.41 L12.53 10.9 L10.32 13.26 L6.9 17.14 L2.55 22.4 L6.9 18.36 L9.79 15.47 L13.52 11.5 L18.25 5.71Z"/></g></symbol>
|
|
23
|
-
<symbol id="ge-icon-close" viewBox="0 0 24 24"><g fill="currentColor" fill-rule="evenodd"><path d="M22.16 1.6 L21.3 2.09 L20.44 2.82 L16.89 5.27 L12.12 10.29 L10.53 8.82 L7.35 5.39 L2.21 2.09 L5.88 7.23 L8.21 9.55 L10.41 12 L5.76 16.89 L2.33 21.54 L1.84 22.4 L2.58 22.03 L2.95 21.67 L4.17 20.93 L5.88 19.59 L7.23 18.73 L12 13.71 L12.12 13.71 L17.02 18.73 L22.16 22.16 L22.16 21.91 L20.2 19.46 L18.48 17.02 L13.71 12.12 L13.71 11.88 L18.48 6.86 L20.32 4.17 L21.67 2.46Z"/></g></symbol>
|
|
24
|
-
<symbol id="ge-icon-back" viewBox="0 0 24 24"><path d="M15 6l-6 6 6 6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
25
|
-
<symbol id="ge-icon-chevronRight" viewBox="0 0 24 24"><path d="M9 6l6 6-6 6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
|
26
|
-
<symbol id="ge-icon-star" viewBox="0 0 24 24"><path d="M12 3l2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 16.9 6.6 19.5l1.2-6L3.3 9.3l6.1-.7z" fill="currentColor"/></symbol>
|
|
27
|
-
<symbol id="ge-icon-lightning" viewBox="0 0 24 24"><path transform="scale(0.019139)" d="M747,205L433,629L622,633L497,986L801,550L614,547Z" fill="currentColor"/></symbol>
|
|
28
|
-
</defs>
|
|
29
|
-
<g>
|
|
30
|
-
<rect x="4" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
31
|
-
<use href="#ge-icon-spin" x="26" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
32
|
-
<text x="48" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">spin</text>
|
|
33
|
-
</g>
|
|
34
|
-
<g>
|
|
35
|
-
<rect x="100" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
36
|
-
<use href="#ge-icon-turbo" x="122" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
37
|
-
<text x="144" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">turbo</text>
|
|
38
|
-
</g>
|
|
39
|
-
<g>
|
|
40
|
-
<rect x="196" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
41
|
-
<use href="#ge-icon-turbo1" x="218" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
42
|
-
<text x="240" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">turbo1</text>
|
|
43
|
-
</g>
|
|
44
|
-
<g>
|
|
45
|
-
<rect x="292" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
46
|
-
<use href="#ge-icon-turbo2" x="314" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
47
|
-
<text x="336" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">turbo2</text>
|
|
48
|
-
</g>
|
|
49
|
-
<g>
|
|
50
|
-
<rect x="388" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
51
|
-
<use href="#ge-icon-turbo3" x="410" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
52
|
-
<text x="432" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">turbo3</text>
|
|
53
|
-
</g>
|
|
54
|
-
<g>
|
|
55
|
-
<rect x="484" y="4" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
56
|
-
<use href="#ge-icon-autoplay" x="506" y="14" width="44" height="44" color="#f4f6fb"/>
|
|
57
|
-
<text x="528" y="82" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">autoplay</text>
|
|
58
|
-
</g>
|
|
59
|
-
<g>
|
|
60
|
-
<rect x="4" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
61
|
-
<use href="#ge-icon-stop" x="26" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
62
|
-
<text x="48" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">stop</text>
|
|
63
|
-
</g>
|
|
64
|
-
<g>
|
|
65
|
-
<rect x="100" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
66
|
-
<use href="#ge-icon-menu" x="122" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
67
|
-
<text x="144" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">menu</text>
|
|
68
|
-
</g>
|
|
69
|
-
<g>
|
|
70
|
-
<rect x="196" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
71
|
-
<use href="#ge-icon-betUp" x="218" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
72
|
-
<text x="240" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">betUp</text>
|
|
73
|
-
</g>
|
|
74
|
-
<g>
|
|
75
|
-
<rect x="292" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
76
|
-
<use href="#ge-icon-betDown" x="314" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
77
|
-
<text x="336" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">betDown</text>
|
|
78
|
-
</g>
|
|
79
|
-
<g>
|
|
80
|
-
<rect x="388" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
81
|
-
<use href="#ge-icon-minus" x="410" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
82
|
-
<text x="432" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">minus</text>
|
|
83
|
-
</g>
|
|
84
|
-
<g>
|
|
85
|
-
<rect x="484" y="100" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
86
|
-
<use href="#ge-icon-plus" x="506" y="110" width="44" height="44" color="#f4f6fb"/>
|
|
87
|
-
<text x="528" y="178" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">plus</text>
|
|
88
|
-
</g>
|
|
89
|
-
<g>
|
|
90
|
-
<rect x="4" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
91
|
-
<use href="#ge-icon-gift" x="26" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
92
|
-
<text x="48" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">gift</text>
|
|
93
|
-
</g>
|
|
94
|
-
<g>
|
|
95
|
-
<rect x="100" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
96
|
-
<use href="#ge-icon-ticket" x="122" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
97
|
-
<text x="144" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">ticket</text>
|
|
98
|
-
</g>
|
|
99
|
-
<g>
|
|
100
|
-
<rect x="196" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
101
|
-
<use href="#ge-icon-info" x="218" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
102
|
-
<text x="240" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">info</text>
|
|
103
|
-
</g>
|
|
104
|
-
<g>
|
|
105
|
-
<rect x="292" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
106
|
-
<use href="#ge-icon-soundOn" x="314" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
107
|
-
<text x="336" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">soundOn</text>
|
|
108
|
-
</g>
|
|
109
|
-
<g>
|
|
110
|
-
<rect x="388" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
111
|
-
<use href="#ge-icon-soundOff" x="410" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
112
|
-
<text x="432" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">soundOff</text>
|
|
113
|
-
</g>
|
|
114
|
-
<g>
|
|
115
|
-
<rect x="484" y="196" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
116
|
-
<use href="#ge-icon-close" x="506" y="206" width="44" height="44" color="#f4f6fb"/>
|
|
117
|
-
<text x="528" y="274" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">close</text>
|
|
118
|
-
</g>
|
|
119
|
-
<g>
|
|
120
|
-
<rect x="4" y="292" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
121
|
-
<use href="#ge-icon-back" x="26" y="302" width="44" height="44" color="#f4f6fb"/>
|
|
122
|
-
<text x="48" y="370" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">back</text>
|
|
123
|
-
</g>
|
|
124
|
-
<g>
|
|
125
|
-
<rect x="100" y="292" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
126
|
-
<use href="#ge-icon-chevronRight" x="122" y="302" width="44" height="44" color="#f4f6fb"/>
|
|
127
|
-
<text x="144" y="370" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">chevronRight</text>
|
|
128
|
-
</g>
|
|
129
|
-
<g>
|
|
130
|
-
<rect x="196" y="292" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
131
|
-
<use href="#ge-icon-star" x="218" y="302" width="44" height="44" color="#f4f6fb"/>
|
|
132
|
-
<text x="240" y="370" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">star</text>
|
|
133
|
-
</g>
|
|
134
|
-
<g>
|
|
135
|
-
<rect x="292" y="292" width="88" height="88" rx="12" fill="#11161f" stroke="#222a38"/>
|
|
136
|
-
<use href="#ge-icon-lightning" x="314" y="302" width="44" height="44" color="#f4f6fb"/>
|
|
137
|
-
<text x="336" y="370" text-anchor="middle" font-family="ui-monospace,Menlo,monospace" font-size="10" fill="#9aa3b6">lightning</text>
|
|
138
|
-
</g>
|
|
139
|
-
</svg>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// Sharp monochrome icon set, traced from the brand sheet. Every glyph uses
|
|
2
|
-
// currentColor so the caller's color cascades (active states recolour via CSS);
|
|
3
|
-
// hollow shapes set fill-rule="evenodd". All return an inline <svg> sized 1em.
|
|
4
|
-
const SVGS: Record<string, string> = {
|
|
5
|
-
// sharp angular set, traced from the brand sheet — monochrome currentColor
|
|
6
|
-
// (glow via CSS drop-shadow). Hollow shapes rely on fill-rule="evenodd".
|
|
7
|
-
// hollow loop ring + two arrowheads (renders dark-on-bright inside SPIN)
|
|
8
|
-
spin: `<g fill="currentColor" fill-rule="evenodd"><path d="M17.92 4.68 L13.91 2.81 L10.55 1.6 L12.05 3.47 L11.95 3.56 L10.93 3.65 L9.25 4.12 L7.94 4.77 L7.01 5.42 L5.61 6.82 L4.58 8.41 L4.03 9.53 L3.28 11.67 L2.91 13.91 L4.49 16.52 L4.68 16.62 L6.54 14.94 L6.17 14.01 L6.08 13.17 L5.98 13.07 L5.98 11.49 L6.08 10.93 L6.45 9.71 L6.82 8.97 L7.48 8.04 L8.22 7.29 L9.25 6.54 L9.99 6.17 L11.21 5.8 L11.77 5.7 L13.73 5.7 L13.82 5.8 L14.57 5.89 L15.87 6.45 L16.06 6.45 L17.92 4.86Z"/><path d="M19.6 7.66 L19.42 7.57 L17.83 9.16 L18.11 9.9 L18.2 10.74 L18.3 10.83 L18.3 12.7 L18.2 12.79 L18.11 13.54 L17.46 15.03 L16.9 15.87 L15.87 16.9 L14.94 17.55 L14.1 17.92 L13.17 18.2 L12.05 18.39 L11.02 18.39 L10.93 18.3 L9.9 18.2 L9.06 17.92 L8.41 17.55 L8.22 17.55 L6.73 18.76 L6.26 19.32 L11.21 21.56 L12.7 22.03 L13.45 22.4 L13.73 22.4 L12.23 20.53 L12.33 20.44 L13.54 20.35 L15.31 19.79 L16.8 18.95 L17.64 18.3 L18.76 17.08 L19.51 15.96 L20.16 14.66 L20.25 14.19 L20.53 13.63 L20.72 12.98 L20.72 12.61 L20.91 12.14 L21.09 10.37 L19.97 8.5Z"/></g>`,
|
|
9
|
-
turbo: `<g fill="currentColor" fill-rule="evenodd"><path d="M19.16 1.71 L16.47 1.71 L16.36 1.6 L13.23 1.6 L12.78 1.71 L11.78 3.39 L10.55 5.85 L10.32 6.07 L8.31 9.99 L8.09 10.21 L7.19 12.11 L12 12.34 L14.46 9.88 L14.24 9.65 L12.89 9.54 L12.89 9.2 L17.03 4.4Z"/><path d="M19.83 6.97 L18.93 7.64 L16.36 9.99 L9.65 16.47 L4.17 21.62 L4.17 22.4 L5.4 21.39 L13.34 13.9 L13.45 14.12 L10.43 20.16 L10.21 20.83 L9.65 21.95 L9.76 21.95 L19.27 10.32 L19.27 10.21 L17.59 10.1 L17.48 9.88 L18.71 8.53Z"/></g>`,
|
|
10
|
-
// Lightning bolt(s) — escalating turbo level (1/2/3 overlapping bolts). The bolt is authored in a
|
|
11
|
-
// 216×512 space (M118 0…Z); each glyph scales it into 24×24 (×0.046875) and centres the cluster.
|
|
12
|
-
// Sibling bolts are offset by 133.33 (= 96/0.72, the source sheet's spacing) so they overlap.
|
|
13
|
-
turbo1: `<g fill="currentColor" transform="translate(6.94 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g>`,
|
|
14
|
-
turbo2: `<g fill="currentColor" transform="translate(3.81 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(133.33 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g>`,
|
|
15
|
-
turbo3: `<g fill="currentColor" transform="translate(0.69 0) scale(0.046875)"><path d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(133.33 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/><path transform="translate(266.67 0)" d="M118 0L0 232L86 232L28 512L216 220L126 220Z"/></g>`,
|
|
16
|
-
autoplay: `<g fill="currentColor" fill-rule="evenodd"><path d="M19.48 5.36 L15.02 1.6 L14.82 1.6 L15.62 3.28 L15.52 3.78 L14.82 3.78 L14.72 3.88 L12.64 3.88 L12.54 3.78 L5.71 3.78 L3.23 6.35 L3.23 16.26 L3.33 16.26 L4.82 14.48 L4.82 12.5 L4.72 12.4 L4.72 7.25 L4.82 7.05 L6.4 5.56 L8.29 5.56 L8.38 5.46 L19.48 5.46Z"/><path d="M9.87 8.83 L9.87 15.27 L9.97 15.27 L11.26 14.38 L15.12 12.1 L15.12 12 L11.16 9.62 L10.66 9.23Z"/><path d="M20.67 7.94 L20.17 8.34 L19.18 9.52 L19.18 16.85 L17.5 18.44 L17.1 18.54 L4.42 18.54 L4.42 18.64 L7.3 21.21 L8.78 22.4 L8.78 22 L8.09 20.42 L8.19 20.22 L18.29 20.22 L20.77 17.65 L20.67 17.35Z"/></g>`,
|
|
17
|
-
// hollow square — stop autoplay / halt
|
|
18
|
-
stop: `<g fill="currentColor" fill-rule="evenodd"><path d="M22.4 3.04 L21.1 4.82 L21.1 9.47 L21.03 9.54 L21.03 12.41 L21.1 12.96 L21.03 18.84 L21.1 19.18 L20.35 20.01 L19.39 20.89 L17.27 20.89 L16.72 20.96 L4.75 20.96 L4.68 20.89 L3.04 22.33 L4.13 22.33 L4.2 22.4 L6.66 22.4 L6.73 22.33 L9.13 22.33 L9.19 22.4 L20.48 22.4 L22.4 20.48Z"/><path d="M20.96 1.6 L3.38 1.6 L1.6 3.45 L1.6 20.96 L2.9 19.12 L2.9 4.75 L4.54 3.11 L19.12 3.11 L19.46 2.97Z"/></g>`,
|
|
19
|
-
menu: `<g fill="currentColor" fill-rule="evenodd"><path d="M1.6 13.52 L19.61 13.52 L22.27 10.73 L22.4 10.35 L4.39 10.35 L2.36 12.51Z"/><path d="M1.6 6.04 L19.61 6.04 L22.15 3.38 L22.4 2.87 L4.39 2.87 L2.36 5.02Z"/><path d="M1.6 21 L3.25 21 L3.38 21.13 L4.9 21.13 L5.02 21 L19.61 21 L22.4 17.96 L4.52 17.83 L4.26 17.96 L2.36 19.99Z"/></g>`,
|
|
20
|
-
betUp: `<g fill="currentColor" fill-rule="evenodd"><path d="M21.01 15.43 L19.18 13.07 L14.68 6.75 L12.32 3.64 L12 3.42 L8.57 7.93 L6.42 11.04 L2.89 15.75 L2.78 16.07 L12 8.14 L12.21 8.14 L20.68 15.43Z"/><path d="M22.4 20.26 L20.04 17.79 L12.21 10.28 L12 10.28 L6.53 15.43 L6.42 15.65 L1.81 20.15 L1.6 20.58 L12 14.04 L12.21 14.04 L12.75 14.47 L18.11 17.68 L18.65 18.11 L19.51 18.54 L22.29 20.36Z"/></g>`,
|
|
21
|
-
betDown: `<g fill="currentColor" fill-rule="evenodd"><path d="M1.6 2.74 L1.84 3.22 L5.57 7.43 L11.7 14.04 L12.06 14.28 L12.42 14.04 L18.79 7.19 L22.4 2.98 L22.28 2.86 L18.55 5.51 L12.06 10.44 L5.81 5.63Z"/><path d="M20.84 9.35 L18.07 11.52 L12.18 16.57 L11.94 16.57 L4.49 10.2 L3.52 9.48 L3.4 9.6 L8.57 16.57 L8.81 17.05 L10.26 18.85 L10.5 19.33 L11.34 20.3 L11.58 20.78 L12.18 21.26 L18.43 12.84Z"/></g>`,
|
|
22
|
-
minus: `<g fill="currentColor" fill-rule="evenodd"><path d="M1.6 13.26 L12.42 13.26 L12.5 13.18 L19.81 13.26 L22.4 10.82 L4.27 10.74Z"/></g>`,
|
|
23
|
-
plus: `<g fill="currentColor" fill-rule="evenodd"><path d="M13.16 1.6 L12.26 3.17 L10.77 5.42 L10.77 10.73 L10.69 10.8 L4.33 10.8 L1.79 13.2 L10.69 13.2 L10.77 13.27 L10.77 22.4 L12.41 19.71 L13.16 18.66 L13.16 13.27 L13.23 13.2 L19.59 13.2 L22.21 10.8 L13.23 10.8 L13.16 10.73Z"/></g>`,
|
|
24
|
-
gift: `<rect x="4" y="9" width="16" height="11" rx="2" fill="currentColor"/><path d="M9 9a2.5 2.5 0 1 1 3-3 2.5 2.5 0 1 1 3 3z" fill="currentColor"/><rect x="11" y="9" width="2" height="11" fill="rgba(0,0,0,.35)"/>`,
|
|
25
|
-
// bonus ticket — a perforated ticket (stroke) with a lightning bolt (fill), tilted −15°.
|
|
26
|
-
// Authored in a 1024 space; the outer transform fits the rotated cluster into 24×24 (currentColor).
|
|
27
|
-
ticket: `<g transform="translate(12 12) scale(0.0354) translate(-518.2 -535.2)"><g transform="rotate(-15 512 512)"><path d="M250 392H774L774 462C739 474 720 504 720 536C720 568 739 598 774 610V680H250V610C285 598 304 568 304 536C304 504 285 474 250 462V392Z" fill="none" stroke="currentColor" stroke-width="52" stroke-linejoin="miter" stroke-linecap="square"/><path d="M562.9 408.3L441.5 553.9L506.9 546.3L472.9 664.1L604 504L528.9 514.3Z" fill="currentColor"/></g></g>`,
|
|
28
|
-
info: `<g fill="currentColor" fill-rule="evenodd"><path d="M14.22 7.78 L11.13 7.86 L9.4 9.21 L9.17 9.29 L10.15 9.29 L10.23 9.59 L9.32 13.73 L8.87 17.12 L8.57 18.78 L8.5 19.69 L8.27 20.74 L8.12 22.32 L8.04 22.4 L13.62 17.95 L11.96 17.95 L11.89 17.58 L12.41 15.69 L12.49 15.01 L12.87 13.73 L12.87 13.43 L13.24 12.15 L13.77 9.97 L14 8.68 L14.22 8.08Z"/><path d="M15.96 1.6 L12.94 1.6 L11.74 3.18 L11.51 3.63 L10.08 5.67 L12.79 5.59 L14.37 3.71Z"/></g>`,
|
|
29
|
-
soundOn: `<g fill="currentColor" fill-rule="evenodd"><path d="M16.61 6.68 L17.16 8.4 L17.4 9.97 L17.4 13.88 L17.32 13.95 L17.16 15.44 L16.61 17.16 L18.88 13.72 L18.88 12.86 L18.96 12.78 L18.88 10.12Z"/><path d="M19.27 4.34 L19.58 4.88 L19.66 5.28 L20.05 6.14 L20.6 7.93 L20.91 9.5 L20.91 10.44 L20.99 10.51 L20.99 13.25 L20.91 13.33 L20.91 14.19 L20.76 15.13 L20.05 17.63 L19.27 19.43 L20.29 18.02 L21.15 16.61 L22.4 14.19 L22.4 9.58 L21.31 7.39 L20.29 5.74Z"/><path d="M13.17 1.76 L10.28 4.34 L6.29 8.17 L1.6 8.25 L1.6 15.6 L2.15 15.75 L6.29 16.3 L9.97 19.58 L13.17 22.24Z"/><path d="M11.69 5.59 L11.92 5.67 L11.92 19.04 L11.69 19.12 L7.07 14.82 L4.57 14.5 L4.42 14.35 L4.42 10.51 L4.57 10.36 L7.07 10.28Z"/></g>`,
|
|
30
|
-
soundOff: `<g fill="currentColor" fill-rule="evenodd"><path d="M13.68 13.18 L12.53 14.4 L12.53 18.44 L12.3 18.51 L10.4 16.76 L9.33 17.83 L12.84 20.88 L13.75 21.56 L13.75 13.18Z"/><path d="M17.71 8.69 L17.49 8.91 L17.56 9.9 L17.64 9.98 L17.64 13.1 L17.33 14.7 L17.03 15.39 L18.78 12.88 L18.78 11.66 L18.86 11.58 L18.78 10.29Z"/><path d="M19.47 6.63 L19.85 7.47 L20.46 9.6 L20.53 10.13 L20.53 13.03 L20.08 15.01 L19.31 16.91 L20.61 14.93 L21.3 13.49 L21.52 13.18 L21.52 9.9 L20.76 8.53Z"/><path d="M20.91 2.21 L16.5 6.63 L13.98 9.3 L13.75 9.22 L13.75 1.6 L10.86 4.19 L7.05 7.85 L2.4 7.92 L2.48 8 L2.48 15.16 L6.51 15.7 L7.73 14.32 L5.3 14.02 L5.22 13.94 L5.22 10.13 L5.75 9.98 L7.81 9.9 L12.3 5.33 L12.53 5.41 L12.53 10.9 L10.32 13.26 L6.9 17.14 L2.55 22.4 L6.9 18.36 L9.79 15.47 L13.52 11.5 L18.25 5.71Z"/></g>`,
|
|
31
|
-
close: `<g fill="currentColor" fill-rule="evenodd"><path d="M22.16 1.6 L21.3 2.09 L20.44 2.82 L16.89 5.27 L12.12 10.29 L10.53 8.82 L7.35 5.39 L2.21 2.09 L5.88 7.23 L8.21 9.55 L10.41 12 L5.76 16.89 L2.33 21.54 L1.84 22.4 L2.58 22.03 L2.95 21.67 L4.17 20.93 L5.88 19.59 L7.23 18.73 L12 13.71 L12.12 13.71 L17.02 18.73 L22.16 22.16 L22.16 21.91 L20.2 19.46 L18.48 17.02 L13.71 12.12 L13.71 11.88 L18.48 6.86 L20.32 4.17 L21.67 2.46Z"/></g>`,
|
|
32
|
-
back: `<path d="M15 6l-6 6 6 6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>`,
|
|
33
|
-
chevronRight: `<path d="M9 6l6 6-6 6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>`,
|
|
34
|
-
star: `<path d="M12 3l2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 16.9 6.6 19.5l1.2-6L3.3 9.3l6.1-.7z" fill="currentColor"/>`,
|
|
35
|
-
// volatility bolt (buy-bonus cards) — supplied art, scaled from its 1254 viewBox into 24×24
|
|
36
|
-
lightning: `<path transform="scale(0.019139)" d="M747,205L433,629L622,633L497,986L801,550L614,547Z" fill="currentColor"/>`,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type IconName = keyof typeof SVGS;
|
|
40
|
-
export const ICON_NAMES = Object.keys(SVGS) as IconName[];
|
|
41
|
-
|
|
42
|
-
/** Inline SVG string for an icon, sized to 1em (scale via font-size/width). */
|
|
43
|
-
export function icon(name: IconName): string {
|
|
44
|
-
return `<svg viewBox="0 0 24 24" width="1em" height="1em" aria-hidden="true">${SVGS[name]}</svg>`;
|
|
45
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import type { GameShell } from '../GameShell';
|
|
2
|
-
import { formatCurrency } from '../format';
|
|
3
|
-
import { createCardModal } from './primitives';
|
|
4
|
-
|
|
5
|
-
interface Choice { id: string; label: string }
|
|
6
|
-
|
|
7
|
-
interface SheetOpts {
|
|
8
|
-
ge: string;
|
|
9
|
-
title: string;
|
|
10
|
-
choices: Choice[];
|
|
11
|
-
selected: string;
|
|
12
|
-
/** Chips per row. A single number is fixed across layouts; `{ wide, mobile }` reflows
|
|
13
|
-
* with the shell's mobile breakpoint (driven by CSS custom props, so an open modal
|
|
14
|
-
* re-columns live on resize/rotate without being rebuilt). */
|
|
15
|
-
columns: number | { wide: number; mobile: number };
|
|
16
|
-
confirmLabel: string;
|
|
17
|
-
onConfirm: (id: string) => void;
|
|
18
|
-
/** Called to dismiss the picker (should invoke shell.closeModal()). */
|
|
19
|
-
onClose: () => void;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Result of buildSheet — the root DOM element plus a keyboard handler. */
|
|
23
|
-
interface Sheet {
|
|
24
|
-
root: HTMLElement;
|
|
25
|
-
/** Route keydown events here. Returns true if the event was consumed. */
|
|
26
|
-
onKey: (e: KeyboardEvent) => boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** A centred picker (chips grid + accent Confirm) on the shared card modal. */
|
|
30
|
-
function buildSheet(opts: SheetOpts): Sheet {
|
|
31
|
-
const ui = createCardModal({ ge: opts.ge, title: opts.title, onClose: () => opts.onClose() });
|
|
32
|
-
|
|
33
|
-
const grid = document.createElement('div'); grid.className = 'ge-sheet-grid';
|
|
34
|
-
const cols = typeof opts.columns === 'number' ? { wide: opts.columns, mobile: opts.columns } : opts.columns;
|
|
35
|
-
grid.style.setProperty('--cols', String(cols.wide));
|
|
36
|
-
grid.style.setProperty('--cols-m', String(cols.mobile));
|
|
37
|
-
let selected = opts.selected;
|
|
38
|
-
let focusIndex = opts.choices.findIndex((c) => c.id === selected);
|
|
39
|
-
if (focusIndex < 0) focusIndex = 0;
|
|
40
|
-
const chips: HTMLButtonElement[] = [];
|
|
41
|
-
|
|
42
|
-
/** Update chip visuals to reflect the current selected/focused index. */
|
|
43
|
-
function setHighlight(newIndex: number): void {
|
|
44
|
-
focusIndex = newIndex;
|
|
45
|
-
selected = opts.choices[focusIndex].id;
|
|
46
|
-
for (let i = 0; i < chips.length; i++) {
|
|
47
|
-
chips[i].classList.toggle('ge-on', i === focusIndex);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
for (let i = 0; i < opts.choices.length; i++) {
|
|
52
|
-
const c = opts.choices[i];
|
|
53
|
-
const chip = document.createElement('button');
|
|
54
|
-
chip.className = 'ge-chip' + (i === focusIndex ? ' ge-on' : '');
|
|
55
|
-
chip.dataset.id = c.id; chip.textContent = c.label;
|
|
56
|
-
const idx = i; // capture for closure
|
|
57
|
-
chip.addEventListener('click', () => {
|
|
58
|
-
setHighlight(idx);
|
|
59
|
-
});
|
|
60
|
-
chips.push(chip); grid.appendChild(chip);
|
|
61
|
-
}
|
|
62
|
-
ui.body.appendChild(grid);
|
|
63
|
-
|
|
64
|
-
function doConfirm(): void {
|
|
65
|
-
opts.onConfirm(selected);
|
|
66
|
-
opts.onClose();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Single full-bleed Confirm; dismissal is the ✕ (top-right). No Cancel button.
|
|
70
|
-
const confirm = document.createElement('button');
|
|
71
|
-
confirm.className = 'ge-modal-btn ge-modal-btn--accent'; confirm.dataset.ge = 'sheet-confirm';
|
|
72
|
-
confirm.textContent = opts.confirmLabel;
|
|
73
|
-
confirm.addEventListener('click', doConfirm);
|
|
74
|
-
ui.card.appendChild(confirm);
|
|
75
|
-
|
|
76
|
-
function onKey(e: KeyboardEvent): boolean {
|
|
77
|
-
const last = opts.choices.length - 1;
|
|
78
|
-
switch (e.code) {
|
|
79
|
-
case 'ArrowRight':
|
|
80
|
-
case 'ArrowDown':
|
|
81
|
-
case 'Equal': // + on most keyboards
|
|
82
|
-
case 'NumpadAdd':
|
|
83
|
-
if (focusIndex < last) setHighlight(focusIndex + 1);
|
|
84
|
-
return true;
|
|
85
|
-
case 'ArrowLeft':
|
|
86
|
-
case 'ArrowUp':
|
|
87
|
-
case 'Minus':
|
|
88
|
-
case 'NumpadSubtract':
|
|
89
|
-
if (focusIndex > 0) setHighlight(focusIndex - 1);
|
|
90
|
-
return true;
|
|
91
|
-
case 'Enter':
|
|
92
|
-
case 'Space':
|
|
93
|
-
doConfirm();
|
|
94
|
-
return true;
|
|
95
|
-
case 'Escape':
|
|
96
|
-
opts.onClose();
|
|
97
|
-
return true;
|
|
98
|
-
default:
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return { root: ui.root, onKey };
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Bet picker — all available bets as chips (6 per row, 3 on mobile), accent Confirm applies it. */
|
|
107
|
-
export function openBetModal(shell: GameShell): { root: HTMLElement; onKey: (e: KeyboardEvent) => boolean } {
|
|
108
|
-
return buildSheet({
|
|
109
|
-
ge: 'bet-modal', title: shell.t('Bet'), columns: { wide: 6, mobile: 3 }, confirmLabel: shell.t('Confirm'),
|
|
110
|
-
choices: shell.state.availableBets.map((b) => ({ id: String(b), label: formatCurrency(b, shell.config.currency) })),
|
|
111
|
-
selected: String(shell.state.bet),
|
|
112
|
-
onClose: () => shell.closeModal(),
|
|
113
|
-
onConfirm: (id) => {
|
|
114
|
-
const v = Number(id);
|
|
115
|
-
if (v !== shell.state.bet) { shell.state.bet = v; shell.emit('betChange', v); }
|
|
116
|
-
shell.render();
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const AUTOPLAY_COUNTS = [10, 25, 50, 100, 250, 500, 1000, 2000, Infinity];
|
|
122
|
-
|
|
123
|
-
/** The selectable spin counts, honouring an optional jurisdiction max. With a `maxCount`:
|
|
124
|
-
* drop ∞, keep presets ≤ max, and append the max itself when it isn't already a preset
|
|
125
|
-
* (so the cap is always offered). Without one: the default presets including ∞. */
|
|
126
|
-
function autoplayCounts(maxCount?: number): number[] {
|
|
127
|
-
if (maxCount == null) return AUTOPLAY_COUNTS;
|
|
128
|
-
const capped = AUTOPLAY_COUNTS.filter((n) => Number.isFinite(n) && n <= maxCount);
|
|
129
|
-
if (!capped.includes(maxCount)) capped.push(maxCount);
|
|
130
|
-
return capped;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** Autoplay picker — spin counts (incl. ∞ unless a maxCount caps them); Confirm starts autoplay. */
|
|
134
|
-
export function openAutoplayModal(shell: GameShell): { root: HTMLElement; onKey: (e: KeyboardEvent) => boolean } {
|
|
135
|
-
const maxCount = shell.config.features.autoplay?.maxCount;
|
|
136
|
-
const counts = autoplayCounts(maxCount);
|
|
137
|
-
return buildSheet({
|
|
138
|
-
ge: 'autoplay-modal', title: shell.t('Autoplay'), columns: 3, confirmLabel: shell.t('Start'),
|
|
139
|
-
choices: counts.map((n) => ({ id: String(n), label: Number.isFinite(n) ? String(n) : '∞' })),
|
|
140
|
-
selected: String(shell.state.autoplay.remaining || counts[0]),
|
|
141
|
-
onClose: () => shell.closeModal(),
|
|
142
|
-
onConfirm: (id) => {
|
|
143
|
-
let remaining = Number(id); // "Infinity" → Infinity
|
|
144
|
-
if (maxCount != null) remaining = Math.min(remaining, maxCount); // defensive cap
|
|
145
|
-
shell.state.autoplay = { active: true, remaining };
|
|
146
|
-
shell.emit('autoplayStart', { active: true, remaining });
|
|
147
|
-
shell.render();
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { icon } from './icons';
|
|
2
|
-
|
|
3
|
-
/** Render a (possibly socialised) two-word label across two lines — the BUY BONUS badge.
|
|
4
|
-
* Shared so the bottom-bar button and the Game-info control legend break identically. */
|
|
5
|
-
export function twoLine(label: string): string {
|
|
6
|
-
return label.split(/\s+/).join('<br>');
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface CardModalOpts {
|
|
10
|
-
ge: string;
|
|
11
|
-
title: string;
|
|
12
|
-
/** Accent for the title heading + accent footer button (defaults to the shell accent). */
|
|
13
|
-
accent?: string;
|
|
14
|
-
onClose: () => void;
|
|
15
|
-
/** Render the ✕ in the overlay's top-right corner (default true). */
|
|
16
|
-
closable?: boolean;
|
|
17
|
-
/** Backdrop blur in px; omit to use the stylesheet's default blur. */
|
|
18
|
-
blur?: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** A centred CARD modal — frosted backdrop + opaque card with an accent title heading and an
|
|
22
|
-
* overlay ✕ in the top-right. The shared chrome for every centred modal (buy-bonus confirm,
|
|
23
|
-
* bet, autoplay, generic openModal). Append content to `body`; append full-bleed footer
|
|
24
|
-
* button(s) directly to `card`. Closes only via the ✕ / footer buttons — the backdrop does NOT. */
|
|
25
|
-
export function createCardModal(
|
|
26
|
-
opts: CardModalOpts,
|
|
27
|
-
): { root: HTMLDivElement; card: HTMLDivElement; body: HTMLDivElement } {
|
|
28
|
-
const root = document.createElement('div');
|
|
29
|
-
root.className = 'ge-sheet'; root.dataset.ge = opts.ge;
|
|
30
|
-
if (opts.blur != null) root.style.setProperty('--ge-sheet-blur', `${opts.blur}px`);
|
|
31
|
-
const card = document.createElement('div'); card.className = 'ge-modal-card';
|
|
32
|
-
if (opts.accent) card.style.setProperty('--card-acc', opts.accent);
|
|
33
|
-
const body = document.createElement('div'); body.className = 'ge-modal-body';
|
|
34
|
-
const h = document.createElement('h4'); h.className = 'ge-modal-title'; h.textContent = opts.title;
|
|
35
|
-
body.appendChild(h);
|
|
36
|
-
card.appendChild(body);
|
|
37
|
-
root.appendChild(card);
|
|
38
|
-
// ✕ lives on the overlay itself (top-right of the screen), not on the card
|
|
39
|
-
if (opts.closable !== false) {
|
|
40
|
-
const close = document.createElement('button');
|
|
41
|
-
close.className = 'ge-modal-close'; close.dataset.ge = 'modal-close';
|
|
42
|
-
close.setAttribute('aria-label', 'Close'); close.innerHTML = icon('close');
|
|
43
|
-
close.addEventListener('click', opts.onClose);
|
|
44
|
-
root.appendChild(close);
|
|
45
|
-
}
|
|
46
|
-
return { root, card, body };
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface OverlayOpts {
|
|
50
|
-
title: string;
|
|
51
|
-
onClose: () => void;
|
|
52
|
-
onBack?: () => void;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** Full-screen overlay. Returns { root, body, scroll }; append content to body.
|
|
56
|
-
* The `scroll` element is the scrollable container (overflow-y: auto). */
|
|
57
|
-
export function createOverlay(opts: OverlayOpts): { root: HTMLDivElement; body: HTMLDivElement; scroll: HTMLDivElement } {
|
|
58
|
-
const root = document.createElement('div');
|
|
59
|
-
root.className = 'ge-shell-overlay';
|
|
60
|
-
const head = document.createElement('div');
|
|
61
|
-
head.className = 'ge-ov-head';
|
|
62
|
-
if (opts.onBack) {
|
|
63
|
-
const back = document.createElement('button');
|
|
64
|
-
back.className = 'ge-ov-nav'; back.dataset.ge = 'info-back'; back.innerHTML = icon('back');
|
|
65
|
-
back.addEventListener('click', opts.onBack);
|
|
66
|
-
head.appendChild(back);
|
|
67
|
-
} else {
|
|
68
|
-
// reserve a slot equal to the close button so the title stays centred
|
|
69
|
-
const spacer = document.createElement('div');
|
|
70
|
-
spacer.className = 'ge-ov-spacer';
|
|
71
|
-
head.appendChild(spacer);
|
|
72
|
-
}
|
|
73
|
-
const h = document.createElement('h4'); h.className = 'ge-ov-title'; h.textContent = opts.title; head.appendChild(h);
|
|
74
|
-
const close = document.createElement('button');
|
|
75
|
-
close.className = 'ge-ov-nav'; close.setAttribute('aria-label', 'Close'); close.innerHTML = icon('close');
|
|
76
|
-
close.addEventListener('click', opts.onClose);
|
|
77
|
-
head.appendChild(close);
|
|
78
|
-
// Header stays fixed; only this wrapper scrolls — the X never scrolls away,
|
|
79
|
-
// and vh-clamped padding keeps it usable on small popouts (e.g. 400×225).
|
|
80
|
-
const scroll = document.createElement('div'); scroll.className = 'ge-ov-scroll';
|
|
81
|
-
const body = document.createElement('div'); body.className = 'ge-ov-body';
|
|
82
|
-
scroll.appendChild(body);
|
|
83
|
-
root.append(head, scroll);
|
|
84
|
-
return { root, body, scroll };
|
|
85
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
// Oswald — subset to numerals + currency/separator glyphs only — embedded as base64 woff2, used for
|
|
3
|
-
// the shell's numeric readouts (balance/bet/win/FS counter, autoplay countdown). Digit-only, so it's
|
|
4
|
-
// language-independent and tiny. Oswald is licensed under the SIL Open Font License 1.1.
|
|
5
|
-
// GENERATED by scripts/build-digit-font.mjs — regenerate, don't hand-edit.
|
|
6
|
-
|
|
7
|
-
export const SHELL_DIGIT_FONT_FAMILY = 'OswaldNum';
|
|
8
|
-
|
|
9
|
-
export const SHELL_DIGIT_FONT_CSS =
|
|
10
|
-
`@font-face{font-family:'OswaldNum';font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format('woff2');}` +
|
|
11
|
-
`@font-face{font-family:'OswaldNum';font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format('woff2');}` +
|
|
12
|
-
`@font-face{font-family:'OswaldNum';font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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) format('woff2');}`;
|