|
@@ -256,7 +256,7 @@ else
|
|
|
<div class="ball-circle ball-empty"></div>
|
|
<div class="ball-circle ball-empty"></div>
|
|
|
@if (Model.termType == Constants.Millions_CODE && j == 5)
|
|
@if (Model.termType == Constants.Millions_CODE && j == 5)
|
|
|
{
|
|
{
|
|
|
- <div class="absolute -bottom-1 -right-1 bg-[#FFD700] text-black text-[9px] font-black px-[3px] py-[2px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>
|
|
|
|
|
|
|
+ <div class="absolute -bottom-[6px] -right-[4px] bg-[#FFD700] text-black text-[8.5px] font-black px-[2.5px] py-[1.5px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>
|
|
|
}
|
|
}
|
|
|
</div>
|
|
</div>
|
|
|
}
|
|
}
|
|
@@ -505,13 +505,26 @@ else
|
|
|
var card = $(btn).closest('.ticket-card');
|
|
var card = $(btn).closest('.ticket-card');
|
|
|
var balls = card.find('.ball-circle');
|
|
var balls = card.find('.ball-circle');
|
|
|
|
|
|
|
|
- // Generate unique random numbers 1-80
|
|
|
|
|
|
|
+ // Generate unique random numbers
|
|
|
var numbers = [];
|
|
var numbers = [];
|
|
|
- while(numbers.length < maxBalls){
|
|
|
|
|
- var r = Math.floor(Math.random() * 80) + 1;
|
|
|
|
|
- if(numbers.indexOf(r) === -1) numbers.push(r);
|
|
|
|
|
|
|
+ if ("@Model.termType" === "@Constants.Millions_CODE") {
|
|
|
|
|
+ // First 5 standard balls (1-70)
|
|
|
|
|
+ while(numbers.length < 5){
|
|
|
|
|
+ var r = Math.floor(Math.random() * 70) + 1;
|
|
|
|
|
+ if(numbers.indexOf(r) === -1) numbers.push(r);
|
|
|
|
|
+ }
|
|
|
|
|
+ numbers.sort((a, b) => a - b);
|
|
|
|
|
+
|
|
|
|
|
+ // 6th Mega Ball (1-24)
|
|
|
|
|
+ var mb = Math.floor(Math.random() * 24) + 1;
|
|
|
|
|
+ numbers.push(mb);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ while(numbers.length < maxBalls){
|
|
|
|
|
+ var r = Math.floor(Math.random() * 80) + 1;
|
|
|
|
|
+ if(numbers.indexOf(r) === -1) numbers.push(r);
|
|
|
|
|
+ }
|
|
|
|
|
+ numbers.sort((a, b) => a - b);
|
|
|
}
|
|
}
|
|
|
- numbers.sort((a, b) => a - b);
|
|
|
|
|
|
|
|
|
|
// Update balls with staggered animation
|
|
// Update balls with staggered animation
|
|
|
balls.each(function(index) {
|
|
balls.each(function(index) {
|
|
@@ -590,7 +603,6 @@ else
|
|
|
title.text("Pick Number");
|
|
title.text("Pick Number");
|
|
|
countArea.addClass('hidden');
|
|
countArea.addClass('hidden');
|
|
|
confirmBtn.removeClass('hidden').text("@Lang.confirm");
|
|
confirmBtn.removeClass('hidden').text("@Lang.confirm");
|
|
|
- // Single mode logic is handled by setting selectedNumbers previously or here
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
updateSelectionCount();
|
|
updateSelectionCount();
|
|
@@ -603,61 +615,146 @@ else
|
|
|
container.stop().animate({ scrollTop: scrollPos - 15 }, 500);
|
|
container.stop().animate({ scrollTop: scrollPos - 15 }, 500);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Populate Grid
|
|
|
|
|
- for (var i = 1; i <= 80; i++) {
|
|
|
|
|
- var formatted = i.toString().padStart(2, '0');
|
|
|
|
|
- var isSelected = selectedNumbers.includes(formatted);
|
|
|
|
|
|
|
+ var isMillions = "@Model.termType" === "@Constants.Millions_CODE";
|
|
|
|
|
+
|
|
|
|
|
+ if (isMillions) {
|
|
|
|
|
+ // Millions Split UI: 1-70 (cols-7) | Divider | 1-24 (cols-3)
|
|
|
|
|
+ var splitHtml = `
|
|
|
|
|
+ <div class="flex gap-3 h-full">
|
|
|
|
|
+ <!-- Left: Standard (1-70) -->
|
|
|
|
|
+ <div class="flex-1 flex flex-col h-full min-w-0">
|
|
|
|
|
+ <span class="text-[10px] font-black text-blue-600 mb-1 uppercase tracking-wider shrink-0">Standard (1-70)</span>
|
|
|
|
|
+ <div class="flex-1 overflow-y-auto grid grid-cols-7 gap-1 pr-1 pb-2" id="standardGrid" style="scrollbar-width: thin; scrollbar-color: #0062FF transparent;"></div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <!-- Divider -->
|
|
|
|
|
+ <div class="w-[1px] bg-gray-300 self-stretch my-1 shrink-0"></div>
|
|
|
|
|
+ <!-- Right: Mega Ball (1-24) -->
|
|
|
|
|
+ <div class="w-[105px] flex flex-col h-full shrink-0">
|
|
|
|
|
+ <span class="text-[10px] font-black text-red-600 mb-1 uppercase tracking-wider shrink-0 text-center">Mega (1-24)</span>
|
|
|
|
|
+ <div class="flex-1 overflow-y-auto grid grid-cols-3 gap-1 pl-1 pb-2" id="megaGrid" style="scrollbar-width: thin; scrollbar-color: #E3132D transparent;"></div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ `;
|
|
|
|
|
+ grid.append(splitHtml);
|
|
|
|
|
|
|
|
- var btnClass = isSelected
|
|
|
|
|
- ? 'bg-[#0062FF] text-white shadow-md scale-105 active-num'
|
|
|
|
|
- : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
|
|
|
|
|
|
|
+ var standardContainer = $("#standardGrid");
|
|
|
|
|
+ var megaContainer = $("#megaGrid");
|
|
|
|
|
|
|
|
- grid.append(`<button type="button" class="num-btn w-8 h-8 rounded-full font-black text-[11px] transition-all focus:outline-none flex items-center justify-center ${btnClass}">${formatted}</button>`);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Cleanup old listeners and add new one to the grid (event delegation)
|
|
|
|
|
- grid.off('click', '.num-btn').on('click', '.num-btn', function(e) {
|
|
|
|
|
- e.preventDefault();
|
|
|
|
|
- var $btn = $(this);
|
|
|
|
|
- var picked = $btn.text().trim();
|
|
|
|
|
|
|
+ // Populate Standard (1-70)
|
|
|
|
|
+ for (var i = 1; i <= 70; i++) {
|
|
|
|
|
+ var formatted = i.toString().padStart(2, '0');
|
|
|
|
|
+ var isSelected = selectedNumbers.slice(0, 5).includes(formatted);
|
|
|
|
|
+ var btnClass = isSelected
|
|
|
|
|
+ ? 'bg-[#0062FF] text-white shadow-sm'
|
|
|
|
|
+ : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
|
|
|
|
|
+
|
|
|
|
|
+ standardContainer.append(`<button type="button" class="std-num-btn w-[26px] h-[26px] rounded-full font-black text-[9.5px] transition-all flex items-center justify-center ${btnClass}">${formatted}</button>`);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (isMultiMode) {
|
|
|
|
|
- if (selectedNumbers.includes(picked)) {
|
|
|
|
|
- // Remove
|
|
|
|
|
- let idx = selectedNumbers.indexOf(picked);
|
|
|
|
|
- if (idx !== -1) selectedNumbers[idx] = null;
|
|
|
|
|
- $btn.removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
- } else {
|
|
|
|
|
- // Add
|
|
|
|
|
- let firstEmpty = selectedNumbers.indexOf(null);
|
|
|
|
|
- if (firstEmpty !== -1) {
|
|
|
|
|
- selectedNumbers[firstEmpty] = picked;
|
|
|
|
|
- $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- liveUpdateTicket();
|
|
|
|
|
- } else {
|
|
|
|
|
- // Single Select mode
|
|
|
|
|
- var exists = false;
|
|
|
|
|
- if (activeTicketCard) {
|
|
|
|
|
- activeTicketCard.find('.ball-filled').each(function() {
|
|
|
|
|
- if (activeBall && this !== activeBall[0] && $(this).text().trim() === picked) {
|
|
|
|
|
- exists = true;
|
|
|
|
|
|
|
+ // Populate Mega (1-24)
|
|
|
|
|
+ for (var i = 1; i <= 24; i++) {
|
|
|
|
|
+ var formatted = i.toString().padStart(2, '0');
|
|
|
|
|
+ var isSelected = selectedNumbers[5] === formatted;
|
|
|
|
|
+ var btnClass = isSelected
|
|
|
|
|
+ ? 'bg-[#E3132D] text-white shadow-sm'
|
|
|
|
|
+ : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
|
|
|
|
|
+
|
|
|
|
|
+ megaContainer.append(`<button type="button" class="mega-num-btn w-[26px] h-[26px] rounded-full font-black text-[9.5px] transition-all flex items-center justify-center ${btnClass}">${formatted}</button>`);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Standard Grid Click Handler
|
|
|
|
|
+ standardContainer.on('click', '.std-num-btn', function(e) {
|
|
|
|
|
+ e.preventDefault();
|
|
|
|
|
+ var $btn = $(this);
|
|
|
|
|
+ var picked = $btn.text().trim();
|
|
|
|
|
+
|
|
|
|
|
+ if (isMultiMode) {
|
|
|
|
|
+ var stdSelected = selectedNumbers.slice(0, 5);
|
|
|
|
|
+ if (stdSelected.includes(picked)) {
|
|
|
|
|
+ // Deselect
|
|
|
|
|
+ let idx = selectedNumbers.indexOf(picked);
|
|
|
|
|
+ if (idx !== -1 && idx < 5) selectedNumbers[idx] = null;
|
|
|
|
|
+ $btn.removeClass('bg-[#0062FF] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // Select standard ball (first empty slot in 0-4)
|
|
|
|
|
+ let emptyIdx = -1;
|
|
|
|
|
+ for (var k = 0; k < 5; k++) {
|
|
|
|
|
+ if (selectedNumbers[k] === null) {
|
|
|
|
|
+ emptyIdx = k;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+ if (emptyIdx !== -1) {
|
|
|
|
|
+ selectedNumbers[emptyIdx] = picked;
|
|
|
|
|
+ $btn.addClass('bg-[#0062FF] text-white shadow-sm').removeClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ liveUpdateTicket();
|
|
|
}
|
|
}
|
|
|
- if (exists) {
|
|
|
|
|
- if (typeof showNotification === "function") {
|
|
|
|
|
- showNotification("Number already selected", "warning");
|
|
|
|
|
|
|
+ updateSelectionCount();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // Mega Grid Click Handler
|
|
|
|
|
+ megaContainer.on('click', '.mega-num-btn', function(e) {
|
|
|
|
|
+ e.preventDefault();
|
|
|
|
|
+ var $btn = $(this);
|
|
|
|
|
+ var picked = $btn.text().trim();
|
|
|
|
|
+
|
|
|
|
|
+ if (isMultiMode) {
|
|
|
|
|
+ if (selectedNumbers[5] === picked) {
|
|
|
|
|
+ // Deselect Mega Ball
|
|
|
|
|
+ selectedNumbers[5] = null;
|
|
|
|
|
+ $btn.removeClass('bg-[#E3132D] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // Overwrite Mega Ball
|
|
|
|
|
+ selectedNumbers[5] = picked;
|
|
|
|
|
+ megaContainer.find('.mega-num-btn').removeClass('bg-[#E3132D] text-white shadow-sm').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ $btn.addClass('bg-[#E3132D] text-white shadow-sm').removeClass('bg-white text-gray-700 border border-gray-100');
|
|
|
}
|
|
}
|
|
|
- return;
|
|
|
|
|
|
|
+ liveUpdateTicket();
|
|
|
}
|
|
}
|
|
|
- grid.find('.num-btn').removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
- selectedNumbers = [picked];
|
|
|
|
|
- $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
|
|
+ updateSelectionCount();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // Default Pick 10 UI: 1-80 Grid
|
|
|
|
|
+ var normalHtml = `<div class="grid grid-cols-10 gap-1.5 w-full pb-2 h-full overflow-y-auto" id="normalGrid"></div>`;
|
|
|
|
|
+ grid.append(normalHtml);
|
|
|
|
|
+ var normalContainer = $("#normalGrid");
|
|
|
|
|
+
|
|
|
|
|
+ for (var i = 1; i <= 80; i++) {
|
|
|
|
|
+ var formatted = i.toString().padStart(2, '0');
|
|
|
|
|
+ var isSelected = selectedNumbers.includes(formatted);
|
|
|
|
|
+
|
|
|
|
|
+ var btnClass = isSelected
|
|
|
|
|
+ ? 'bg-[#0062FF] text-white shadow-md scale-105 active-num'
|
|
|
|
|
+ : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
|
|
|
|
|
+
|
|
|
|
|
+ normalContainer.append(`<button type="button" class="num-btn w-8 h-8 rounded-full font-black text-[11px] transition-all focus:outline-none flex items-center justify-center ${btnClass}">${formatted}</button>`);
|
|
|
}
|
|
}
|
|
|
- updateSelectionCount();
|
|
|
|
|
- });
|
|
|
|
|
|
|
+
|
|
|
|
|
+ normalContainer.on('click', '.num-btn', function(e) {
|
|
|
|
|
+ e.preventDefault();
|
|
|
|
|
+ var $btn = $(this);
|
|
|
|
|
+ var picked = $btn.text().trim();
|
|
|
|
|
+
|
|
|
|
|
+ if (isMultiMode) {
|
|
|
|
|
+ if (selectedNumbers.includes(picked)) {
|
|
|
|
|
+ let idx = selectedNumbers.indexOf(picked);
|
|
|
|
|
+ if (idx !== -1) selectedNumbers[idx] = null;
|
|
|
|
|
+ $btn.removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ let firstEmpty = selectedNumbers.indexOf(null);
|
|
|
|
|
+ if (firstEmpty !== -1) {
|
|
|
|
|
+ selectedNumbers[firstEmpty] = picked;
|
|
|
|
|
+ $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ liveUpdateTicket();
|
|
|
|
|
+ }
|
|
|
|
|
+ updateSelectionCount();
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
modal.removeClass('hidden').addClass('flex');
|
|
modal.removeClass('hidden').addClass('flex');
|
|
|
modal.find('.modal-content').removeClass('animate__zoomOut').addClass('animate__zoomIn');
|
|
modal.find('.modal-content').removeClass('animate__zoomOut').addClass('animate__zoomIn');
|
|
@@ -723,8 +820,28 @@ else
|
|
|
if (count === 0) return;
|
|
if (count === 0) return;
|
|
|
|
|
|
|
|
if (isMultiMode && activeTicketCard && activeTicketCard.length > 0) {
|
|
if (isMultiMode && activeTicketCard && activeTicketCard.length > 0) {
|
|
|
- // Collect and sort for final storage/display (lottery numbers are usually sorted)
|
|
|
|
|
- var finalSorted = selectedNumbers.filter(n => n !== null && n !== "").sort((a, b) => parseInt(a) - parseInt(b));
|
|
|
|
|
|
|
+ // Double check validation for Mega Ball before confirming
|
|
|
|
|
+ if ("@Model.termType" === "@Constants.Millions_CODE") {
|
|
|
|
|
+ var mbVal = selectedNumbers[5];
|
|
|
|
|
+ if (mbVal) {
|
|
|
|
|
+ var mbValInt = parseInt(mbVal);
|
|
|
|
|
+ if (mbValInt < 1 || mbValInt > 24) {
|
|
|
|
|
+ showNotification("🎱 @Lang.millions_megaball_invalid_title\n@Lang.millions_megaball_invalid_desc", "warning");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Keep exact selected order, do not sort!
|
|
|
|
|
+ var finalSorted = [];
|
|
|
|
|
+ if ("@Model.termType" === "@Constants.Millions_CODE") {
|
|
|
|
|
+ var first5 = selectedNumbers.slice(0, 5).filter(n => n !== null && n !== "");
|
|
|
|
|
+ var mb = selectedNumbers[5];
|
|
|
|
|
+ finalSorted = first5;
|
|
|
|
|
+ if (mb) finalSorted.push(mb);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ finalSorted = selectedNumbers.filter(n => n !== null && n !== "");
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
var balls = activeTicketCard.find('.ball-circle');
|
|
var balls = activeTicketCard.find('.ball-circle');
|
|
|
balls.removeClass('ball-filled').addClass('ball-empty').text('');
|
|
balls.removeClass('ball-filled').addClass('ball-empty').text('');
|
|
@@ -795,7 +912,7 @@ else
|
|
|
var ballsHtml = '';
|
|
var ballsHtml = '';
|
|
|
var isMillions = @(Model.termType == Constants.Millions_CODE ? "true" : "false");
|
|
var isMillions = @(Model.termType == Constants.Millions_CODE ? "true" : "false");
|
|
|
for (var i = 0; i < maxBalls; i++) {
|
|
for (var i = 0; i < maxBalls; i++) {
|
|
|
- var mbIndicator = (isMillions && i === 5) ? '<div class="absolute -bottom-1 -right-1 bg-[#FFD700] text-black text-[9px] font-black px-[3px] py-[2px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>' : '';
|
|
|
|
|
|
|
+ var mbIndicator = (isMillions && i === 5) ? '<div class="absolute -bottom-[6px] -right-[4px] bg-[#FFD700] text-black text-[8.5px] font-black px-[2.5px] py-[1.5px] rounded-[3px] shadow-sm leading-none z-10 border border-[#EAA800]">MB</div>' : '';
|
|
|
ballsHtml += '<div class="relative w-fit"><div class="ball-circle ball-empty"></div>' + mbIndicator + '</div>';
|
|
ballsHtml += '<div class="relative w-fit"><div class="ball-circle ball-empty"></div>' + mbIndicator + '</div>';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1133,7 +1250,7 @@ else
|
|
|
if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE" || gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") {
|
|
if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE" || gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") {
|
|
|
choiceText = $("#summaryTicketList .flex.items-center span.font-black").first().text().trim();
|
|
choiceText = $("#summaryTicketList .flex.items-center span.font-black").first().text().trim();
|
|
|
} else {
|
|
} else {
|
|
|
- choiceText = gameTypeStr === "@Constants.Millions_CODE" ? "Millions 6" : "PICK 10";
|
|
|
|
|
|
|
+ choiceText = gameTypeStr === "@Constants.Millions_CODE" ? "Millions" : "PICK 10";
|
|
|
}
|
|
}
|
|
|
$("#receiptChoice").text(choiceText);
|
|
$("#receiptChoice").text(choiceText);
|
|
|
|
|
|
|
@@ -1201,7 +1318,11 @@ else
|
|
|
const iconEl = $("#notificationModal img");
|
|
const iconEl = $("#notificationModal img");
|
|
|
const btnEl = $("#notificationModal button");
|
|
const btnEl = $("#notificationModal button");
|
|
|
|
|
|
|
|
- msgEl.text(message);
|
|
|
|
|
|
|
+ if (message && message.includes("\n")) {
|
|
|
|
|
+ msgEl.html(message.replace(/\n/g, '<br/>'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ msgEl.text(message);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if (code === "-2" || (message && message.includes("System is upgrading"))) {
|
|
if (code === "-2" || (message && message.includes("System is upgrading"))) {
|
|
|
systemUpgrading = true;
|
|
systemUpgrading = true;
|
|
@@ -1325,8 +1446,8 @@ else
|
|
|
#numberGrid::-webkit-scrollbar-thumb { background: #FFD700; border-radius: 10px; }
|
|
#numberGrid::-webkit-scrollbar-thumb { background: #FFD700; border-radius: 10px; }
|
|
|
#numberGrid { scrollbar-width: thin; scrollbar-color: #FFD700 transparent; }
|
|
#numberGrid { scrollbar-width: thin; scrollbar-color: #FFD700 transparent; }
|
|
|
</style>
|
|
</style>
|
|
|
- <div class="p-1 px-2 grid grid-cols-10 gap-1.5 h-[160px] overflow-y-auto bg-gray-50 border-b" id="numberGrid">
|
|
|
|
|
- <!-- 1-80 populated via JS -->
|
|
|
|
|
|
|
+ <div class="p-2 h-[220px] overflow-hidden bg-gray-50 border-b" id="numberGrid">
|
|
|
|
|
+ <!-- Populated via JS -->
|
|
|
</div>
|
|
</div>
|
|
|
<div class="p-3 bg-white border-t flex gap-3">
|
|
<div class="p-3 bg-white border-t flex gap-3">
|
|
|
<button onclick="closeNumberPicker()" class="flex-1 py-1 bg-gray-100 text-gray-600 rounded-lg font-black text-[12px] active:bg-gray-200 transition-all uppercase">
|
|
<button onclick="closeNumberPicker()" class="flex-1 py-1 bg-gray-100 text-gray-600 rounded-lg font-black text-[12px] active:bg-gray-200 transition-all uppercase">
|