@opexa/portal-components 0.0.243 → 0.0.244
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/client/hooks/useCamera.js +13 -4
- package/dist/client/hooks/useFeatureFlag.d.ts +2 -5
- package/dist/client/hooks/useFeatureFlag.js +29 -36
- package/dist/components/KYC/AutoOpen.js +8 -3
- package/dist/components/PortalProvider/FeatureFlag.js +14 -6
- package/dist/components/SignUp/SignUpForm.js +1 -2
- package/dist/components/shared/SelfieField.js +6 -7
- package/dist/ui/AlertDialog/AlertDialog.d.ts +88 -88
- package/dist/ui/AlertDialog/alertDialog.recipe.d.ts +8 -8
- package/dist/ui/Combobox/Combobox.d.ts +42 -42
- package/dist/ui/Combobox/combobox.recipe.d.ts +3 -3
- package/dist/ui/DatePicker/DatePicker.d.ts +72 -72
- package/dist/ui/DatePicker/datePicker.recipe.d.ts +3 -3
- package/dist/ui/Dialog/Dialog.d.ts +88 -88
- package/dist/ui/Dialog/dialog.recipe.d.ts +8 -8
- package/dist/ui/Drawer/Drawer.d.ts +33 -33
- package/dist/ui/Drawer/drawer.recipe.d.ts +3 -3
- package/dist/ui/Field/Field.d.ts +21 -21
- package/dist/ui/Field/field.recipe.d.ts +3 -3
- package/dist/ui/Popover/Popover.d.ts +55 -55
- package/dist/ui/Popover/popover.recipe.d.ts +5 -5
- package/dist/ui/Select/Select.d.ts +45 -45
- package/dist/ui/Select/select.recipe.d.ts +3 -3
- package/package.json +8 -8
- package/dist/components/KYC/backup/Header.d.ts +0 -1
- package/dist/components/KYC/backup/Header.js +0 -8
- package/dist/components/KYC/backup/Indicator.d.ts +0 -1
- package/dist/components/KYC/backup/Indicator.js +0 -9
- package/dist/components/KYC/backup/KYC.d.ts +0 -1
- package/dist/components/KYC/backup/KYC.js +0 -14
- package/dist/components/KYC/backup/KYC.lazy.d.ts +0 -1
- package/dist/components/KYC/backup/KYC.lazy.js +0 -26
- package/dist/components/KYC/backup/KYCContext.d.ts +0 -6
- package/dist/components/KYC/backup/KYCContext.js +0 -2
- package/dist/components/KYC/backup/Step1.d.ts +0 -1
- package/dist/components/KYC/backup/Step1.js +0 -13
- package/dist/components/KYC/backup/Step2.d.ts +0 -1
- package/dist/components/KYC/backup/Step2.js +0 -13
- package/dist/components/KYC/backup/Step3.d.ts +0 -1
- package/dist/components/KYC/backup/Step3.js +0 -13
- package/dist/components/KYC/backup/Step4.d.ts +0 -1
- package/dist/components/KYC/backup/Step4.js +0 -7
- package/dist/components/KYC/backup/useKYC.d.ts +0 -10
- package/dist/components/KYC/backup/useKYC.js +0 -8
- package/dist/components/KYC/loadModels.d.ts +0 -1
- package/dist/components/KYC/loadModels.js +0 -9
- package/dist/components/Messages/Message.d.ts +0 -1
- package/dist/components/Messages/Message.js +0 -35
- package/dist/components/Messages/MessageContext.d.ts +0 -6
- package/dist/components/Messages/MessageContext.js +0 -2
- package/dist/components/Messages/MessagePopup.d.ts +0 -1
- package/dist/components/Messages/MessagePopup.js +0 -20
- package/dist/components/Messages/MessageTrigger.d.ts +0 -8
- package/dist/components/Messages/MessageTrigger.js +0 -19
- package/dist/components/Quests/CountdownTimer.d.ts +0 -15
- package/dist/components/Quests/CountdownTimer.js +0 -33
- package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.d.ts +0 -4
- package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.js +0 -78
- package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.d.ts +0 -8
- package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.js +0 -9
- package/dist/components/Quests/OnboardingQuest/OnboardingQuest.d.ts +0 -4
- package/dist/components/Quests/OnboardingQuest/OnboardingQuest.js +0 -4
- package/dist/components/Quests/WageringQuest/WageringQuest.d.ts +0 -4
- package/dist/components/Quests/WageringQuest/WageringQuest.js +0 -20
- package/dist/components/Quests/WageringQuest/WageringQuestModal.d.ts +0 -9
- package/dist/components/Quests/WageringQuest/WageringQuestModal.js +0 -9
- package/dist/constants/BranchCode.d.ts +0 -4
- package/dist/constants/BranchCode.js +0 -42
- package/dist/icons/BellRingIcon.d.ts +0 -2
- package/dist/icons/BellRingIcon.js +0 -4
- package/dist/utils/dataUrlToBlob.d.ts +0 -1
- package/dist/utils/dataUrlToBlob.js +0 -11
- package/dist/utils/resizeImageSize.d.ts +0 -2
- package/dist/utils/resizeImageSize.js +0 -11
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import Image from 'next/image';
|
|
3
|
-
import { CheckIcon } from '../../../icons/CheckIcon.js';
|
|
4
|
-
import { XIcon } from '../../../icons/XIcon.js';
|
|
5
|
-
import uploadId from '../../../images/capture-id-banner.png';
|
|
6
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
7
|
-
import { useKYCContext } from './KYCContext.js';
|
|
8
|
-
export function Step1() {
|
|
9
|
-
const context = useKYCContext();
|
|
10
|
-
return (_jsxs("div", { className: "mt-2xl px-xl lg:mt-3xl lg:px-0", children: [_jsx("p", { className: "lg:text-text-secondary-700 text-center text-2xl font-semibold lg:text-base", children: "Prepare to upload your ID" }), _jsxs("div", { className: "border-border-secondary bg-bg-primary-alt mt-6 rounded-xl border p-4 lg:mt-2xl lg:border-0 lg:bg-transparent lg:p-0", children: [_jsx(Image, { src: uploadId, alt: "", className: "h-auto w-full", width: 600, height: 352 }), _jsxs("ul", { className: "mt-2xl space-y-3", children: [_jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(CheckIcon, { className: "text-text-featured-icon-light-success size-6" }), "Upload front side of your ID"] }), _jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(CheckIcon, { className: "text-text-featured-icon-light-success size-6" }), "Take a photo in a well lit room"] }), _jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(XIcon, { className: "text-text-featured-icon-light-error size-6" }), "Don't edit image of your ID"] })] }), _jsxs("div", { className: "mt-4xl space-y-lg", children: [_jsx(Button, { onClick: () => {
|
|
11
|
-
context.setStep(2);
|
|
12
|
-
}, children: "Continue" }), _jsx(Button, { variant: "outline", children: "Continue on phone" })] })] })] }));
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Step2(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import Image from 'next/image';
|
|
3
|
-
import { CheckIcon } from '../../../icons/CheckIcon.js';
|
|
4
|
-
import { XIcon } from '../../../icons/XIcon.js';
|
|
5
|
-
import selfie from '../../../images/capture-selfie-banner.png';
|
|
6
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
7
|
-
import { useKYCContext } from './KYCContext.js';
|
|
8
|
-
export function Step2() {
|
|
9
|
-
const context = useKYCContext();
|
|
10
|
-
return (_jsxs("div", { className: "mt-2xl px-xl lg:mt-3xl lg:px-0", children: [_jsx("p", { className: "lg:text-text-secondary-700 text-center text-2xl font-semibold lg:text-base", children: "Take a selfie holding your ID" }), _jsxs("div", { className: "border-border-secondary bg-bg-primary-alt mt-6 rounded-xl border p-4 lg:mt-2xl lg:border-0 lg:bg-transparent lg:p-0", children: [_jsx(Image, { src: selfie, alt: "", className: "h-auto w-full", width: 600, height: 352 }), _jsxs("ul", { className: "mt-2xl space-y-3", children: [_jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(CheckIcon, { className: "text-text-featured-icon-light-success size-6" }), "Face and ID must be clearly visible"] }), _jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(CheckIcon, { className: "text-text-featured-icon-light-success size-6" }), "Take a photo in a well lit room"] }), _jsxs("li", { className: "text-text-secondary-700 flex items-center gap-lg", children: [_jsx(XIcon, { className: "text-text-featured-icon-light-error size-6" }), "No hats, sunglasses, or masks"] })] }), _jsxs("div", { className: "mt-4xl space-y-lg", children: [_jsx(Button, { size: "sm", onClick: () => {
|
|
11
|
-
context.setStep(3);
|
|
12
|
-
}, children: "Continue" }), _jsx(Button, { variant: "outline", children: "Continue on phone" })] })] })] }));
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Step3(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CheckIcon } from '../../../icons/CheckIcon.js';
|
|
3
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
4
|
-
import { Checkbox } from '../../../ui/Checkbox/index.js';
|
|
5
|
-
import { Field } from '../../../ui/Field/index.js';
|
|
6
|
-
import { useKYCContext } from './KYCContext.js';
|
|
7
|
-
export function Step3() {
|
|
8
|
-
const context = useKYCContext();
|
|
9
|
-
return (_jsxs("div", { className: "mt-2xl px-xl lg:mt-3xl lg:px-0", children: [_jsx("p", { className: "lg:text-text-secondary-700 text-center text-2xl font-semibold lg:text-base", children: "Enter your basic and work-related information" }), _jsxs("form", { className: "border-border-secondary bg-bg-primary-alt mt-6 rounded-xl border p-4 lg:mt-2xl lg:border-0 lg:bg-transparent lg:p-0", onSubmit: (e) => {
|
|
10
|
-
e.preventDefault();
|
|
11
|
-
context.setStep(4);
|
|
12
|
-
}, children: [_jsxs(Field.Root, { children: [_jsx(Field.Label, { children: "Permanent address" }), _jsx(Field.Input, { placeholder: "Enter your permanent address" })] }), _jsxs(Checkbox.Root, { className: "mt-2xl", children: [_jsx(Checkbox.Control, { children: _jsx(Checkbox.Indicator, { asChild: true, children: _jsx(CheckIcon, {}) }) }), _jsx(Checkbox.Label, { children: "Same as permanent address" }), _jsx(Checkbox.HiddenInput, {})] }), _jsxs(Field.Root, { className: "mt-sm", children: [_jsx(Field.Label, { children: "Current address" }), _jsx(Field.Input, { placeholder: "Enter your current address" })] }), _jsxs(Field.Root, { className: "mt-2xl", children: [_jsx(Field.Label, { children: "Source of income" }), _jsx(Field.Input, { placeholder: "Enter your source of income" })] }), _jsxs(Field.Root, { className: "mt-2xl", children: [_jsx(Field.Label, { children: "Work Description" }), _jsx(Field.Input, { placeholder: "Enter your work description" })] }), _jsxs(Field.Root, { className: "mt-2xl", children: [_jsx(Field.Label, { children: "Place of birth" }), _jsx(Field.Input, { placeholder: "Enter your place of birth" })] }), _jsxs(Field.Root, { className: "mt-2xl", children: [_jsx(Field.Label, { children: "Nationality" }), _jsx(Field.Input, { placeholder: "Enter your nationality" })] }), _jsx(Button, { type: "submit", className: "mt-4xl", children: "Submit" })] })] }));
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Step4(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CheckCircleIcon } from '../../../icons/CheckCircleIcon.js';
|
|
3
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
4
|
-
import { Dialog } from '../../../ui/Dialog/index.js';
|
|
5
|
-
export function Step4() {
|
|
6
|
-
return (_jsxs("div", { children: [_jsx("div", { className: "bg-bg-success-secondary text-text-featured-icon-light-success mx-auto flex size-12 items-center justify-center rounded-full", children: _jsx(CheckCircleIcon, {}) }), _jsx("h2", { className: "mt-3 text-center", children: "Submission Successful" }), _jsx("p", { className: "text-text-tertiary-600 text-center", children: "Your documents have been submitted successfully. They\u2019re now under review, and you\u2019ll receive a notification as soon as your account is verified." }), _jsx(Dialog.Context, { children: (api) => (_jsx(Button, { className: "mt-3xl", onClick: () => api.setOpen(false), children: "Ok" })) })] }));
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function loadFaceApiModels(): Promise<void>;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as faceapi from 'face-api.js';
|
|
2
|
-
export async function loadFaceApiModels() {
|
|
3
|
-
const MODEL_URL = '/models';
|
|
4
|
-
await Promise.all([
|
|
5
|
-
faceapi.nets.tinyFaceDetector.loadFromUri(MODEL_URL),
|
|
6
|
-
faceapi.nets.faceLandmark68Net.loadFromUri(MODEL_URL),
|
|
7
|
-
faceapi.nets.faceRecognitionNet.loadFromUri(MODEL_URL),
|
|
8
|
-
]);
|
|
9
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Message(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { tz } from '@date-fns/tz';
|
|
3
|
-
import { format } from 'date-fns';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { useShallow } from 'zustand/shallow';
|
|
6
|
-
import { useGlobalStore } from '../../client/hooks/useGlobalStore.js';
|
|
7
|
-
import { useLocaleInfo } from '../../client/hooks/useLocaleInfo.js';
|
|
8
|
-
import { useMarkMessageAsReadMutation } from '../../client/hooks/useMarkMessageAsReadMutation.js';
|
|
9
|
-
import { useMessageContext } from './MessageContext.js';
|
|
10
|
-
import { getMessageIcon } from './utils.js';
|
|
11
|
-
export function Message() {
|
|
12
|
-
const message = useMessageContext();
|
|
13
|
-
const localeInfo = useLocaleInfo();
|
|
14
|
-
const globalStore = useGlobalStore(useShallow((ctx) => ({
|
|
15
|
-
message: ctx.message,
|
|
16
|
-
messages: ctx.messages,
|
|
17
|
-
})));
|
|
18
|
-
const markMessageAsReadMutation = useMarkMessageAsReadMutation();
|
|
19
|
-
const Icon = getMessageIcon(message.icon);
|
|
20
|
-
const handleViewMessage = async () => {
|
|
21
|
-
globalStore.message.setData(message);
|
|
22
|
-
globalStore.message.setOpen(true);
|
|
23
|
-
globalStore.messages.setOpen(false);
|
|
24
|
-
if (!message.markedAsRead)
|
|
25
|
-
markMessageAsReadMutation.mutate(message.id);
|
|
26
|
-
};
|
|
27
|
-
const handleActionClick = (e) => {
|
|
28
|
-
e.stopPropagation();
|
|
29
|
-
globalStore.messages.setOpen(false);
|
|
30
|
-
globalStore.messages.setTab('ALL');
|
|
31
|
-
};
|
|
32
|
-
return (_jsxs("div", { role: "button", tabIndex: 0, className: "border-border-secondary rounded-xs bg-bg-secondary flex h-auto flex-shrink-0 cursor-pointer flex-col border px-3.5 py-2.5", onClick: handleViewMessage, "aria-pressed": "false", children: [_jsxs("div", { className: "flex items-center space-x-2", children: [_jsx("p", { className: "text-text-tertiary-600 text-xs font-normal", children: format(new Date(message.dateTimeCreated), 'M/d/yyyy - h:mma', {
|
|
33
|
-
in: tz(localeInfo.timezone),
|
|
34
|
-
}) }), !message.markedAsRead && (_jsx("div", { className: "bg-utility-success-500 h-2.5 w-2.5 rounded-full" }))] }), _jsxs("div", { className: "mb-2 flex items-center space-x-2", children: [_jsx(Icon, { className: "text-brand-400" }), _jsx("p", { className: "text-text-primary-brand text-sm font-semibold", children: message.title })] }), _jsx("p", { className: "line-clamp-3 text-wrap text-sm font-normal", dangerouslySetInnerHTML: { __html: message.content } }), message.actions.length > 0 && (_jsx("div", { className: "mt-2 flex flex-wrap items-center justify-end gap-2", children: message.actions.map((action, index) => (_jsx(Link, { className: "border-button-secondary-border text-button-secondary-fg rounded-md border px-3 py-2 text-sm", href: action.url, onClick: handleActionClick, children: action.name }, index))) }))] }));
|
|
35
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const MessagePopup: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import Link from 'next/link';
|
|
4
|
-
import { useShallow } from 'zustand/shallow';
|
|
5
|
-
import { useGlobalStore } from '../../client/hooks/useGlobalStore.js';
|
|
6
|
-
import { XIcon } from '../../icons/XIcon.js';
|
|
7
|
-
import { Dialog } from '../../ui/Dialog/index.js';
|
|
8
|
-
import { Portal } from '../../ui/Portal/index.js';
|
|
9
|
-
import { getMessageIcon } from './utils.js';
|
|
10
|
-
export const MessagePopup = () => {
|
|
11
|
-
const globalStore = useGlobalStore(useShallow((ctx) => ({ message: ctx.message })));
|
|
12
|
-
const Icon = getMessageIcon(globalStore.message.data?.icon ?? 'MESSAGE');
|
|
13
|
-
return (_jsx(Dialog.Root, { lazyMount: true, unmountOnExit: true, open: globalStore.message.open, onOpenChange: ({ open }) => {
|
|
14
|
-
globalStore.message.setOpen(open);
|
|
15
|
-
}, closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(Dialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+1)]" }), _jsx(Dialog.Positioner, { className: "!z-[calc(var(--z-dialog)+2)] flex items-center justify-center", children: _jsxs(Dialog.Content, { className: "min-h-auto mx-auto min-w-[21.438rem] max-w-[21.438rem] rounded-xl px-xl pb-0 pt-5 shadow-xl", children: [_jsx(Dialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsxs("div", { className: "pb-6", children: [_jsx("div", { className: "bg-bg-brand-secondary mx-auto w-fit rounded-full p-3", children: _jsx(Icon, { className: "text-text-brand", height: "24", width: "24" }) }), _jsx("p", { className: "text-text-primary-brand mt-lg text-center text-lg font-semibold leading-tight", children: globalStore.message.data?.title }), _jsx("div", { className: "text-shadow-text-secondary-700 mt-xs text-center text-sm font-normal leading-tight", dangerouslySetInnerHTML: {
|
|
16
|
-
__html: globalStore.message.data?.content ?? '',
|
|
17
|
-
} })] }), globalStore.message.data?.actions.length ? (_jsx("div", { className: "flex flex-col space-y-2 px-4 pb-8 pt-6 text-center", children: globalStore.message.data.actions.map((action, index) => (_jsx(Link, { className: "bg-button-primary-bg rounded-xs text-button-primary-fg w-full px-4 py-2.5 text-base font-semibold", href: action.url, onClick: () => {
|
|
18
|
-
globalStore.message.setOpen(false);
|
|
19
|
-
}, children: action.name }, index))) })) : null] }) })] }) }));
|
|
20
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithRef } from 'react';
|
|
2
|
-
import type { Message } from '../../types';
|
|
3
|
-
interface MessageTriggerProps extends ComponentPropsWithRef<'button'> {
|
|
4
|
-
message: Message;
|
|
5
|
-
asChild?: boolean;
|
|
6
|
-
}
|
|
7
|
-
export declare function MessageTrigger(props: MessageTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export {};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { ark } from '@ark-ui/react/factory';
|
|
4
|
-
import { useShallow } from 'zustand/shallow';
|
|
5
|
-
import { useGlobalStore } from '../../client/hooks/useGlobalStore.js';
|
|
6
|
-
import { useMarkMessageAsReadMutation } from '../../client/hooks/useMarkMessageAsReadMutation.js';
|
|
7
|
-
export function MessageTrigger(props) {
|
|
8
|
-
const globalStore = useGlobalStore(useShallow((ctx) => ({
|
|
9
|
-
message: ctx.message,
|
|
10
|
-
})));
|
|
11
|
-
const markMessageAsReadMutation = useMarkMessageAsReadMutation();
|
|
12
|
-
return (_jsx(ark.button, { type: "button", "aria-label": "View message", "data-state": globalStore.message.open ? 'open' : 'closed', ...props, onClick: (e) => {
|
|
13
|
-
globalStore.message.setData(props.message);
|
|
14
|
-
globalStore.message.setOpen(true);
|
|
15
|
-
if (!props.message.markedAsRead)
|
|
16
|
-
markMessageAsReadMutation.mutate(props.message.id);
|
|
17
|
-
return props.onClick?.(e);
|
|
18
|
-
} }));
|
|
19
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
2
|
-
type TimeLeft = {
|
|
3
|
-
days: number;
|
|
4
|
-
hours: number;
|
|
5
|
-
minutes: number;
|
|
6
|
-
seconds: number;
|
|
7
|
-
};
|
|
8
|
-
interface CountdownTimerProps {
|
|
9
|
-
startDateTime?: string;
|
|
10
|
-
endDateTime?: string;
|
|
11
|
-
renderAction: (timeLeft: TimeLeft) => ReactNode;
|
|
12
|
-
onEnd?: () => void;
|
|
13
|
-
}
|
|
14
|
-
export default function CountdownTimer({ startDateTime, endDateTime, renderAction, onEnd, }: CountdownTimerProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { differenceInSeconds, parseISO } from 'date-fns';
|
|
4
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
5
|
-
export default function CountdownTimer({ startDateTime, endDateTime, renderAction, onEnd, }) {
|
|
6
|
-
const calculateTimeLeft = useCallback(() => {
|
|
7
|
-
const start = startDateTime ? parseISO(startDateTime) : new Date();
|
|
8
|
-
const end = endDateTime ? parseISO(endDateTime) : new Date();
|
|
9
|
-
const totalSeconds = Math.max(differenceInSeconds(end, start), 0);
|
|
10
|
-
const days = Math.floor(totalSeconds / (60 * 60 * 24));
|
|
11
|
-
const hours = Math.floor((totalSeconds % (60 * 60 * 24)) / (60 * 60));
|
|
12
|
-
const minutes = Math.floor((totalSeconds % (60 * 60)) / 60);
|
|
13
|
-
const seconds = totalSeconds % 60;
|
|
14
|
-
return { days, hours, minutes, seconds };
|
|
15
|
-
}, [startDateTime, endDateTime]);
|
|
16
|
-
const [timeLeft, setTimeLeft] = useState(calculateTimeLeft);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
const interval = setInterval(() => {
|
|
19
|
-
const newTimeLeft = calculateTimeLeft();
|
|
20
|
-
setTimeLeft(newTimeLeft);
|
|
21
|
-
const isZero = newTimeLeft.days === 0 &&
|
|
22
|
-
newTimeLeft.hours === 0 &&
|
|
23
|
-
newTimeLeft.minutes === 0 &&
|
|
24
|
-
newTimeLeft.seconds === 0;
|
|
25
|
-
if (isZero) {
|
|
26
|
-
clearInterval(interval);
|
|
27
|
-
onEnd?.();
|
|
28
|
-
}
|
|
29
|
-
}, 1000);
|
|
30
|
-
return () => clearInterval(interval);
|
|
31
|
-
}, [calculateTimeLeft, onEnd]);
|
|
32
|
-
return _jsx(_Fragment, { children: renderAction(timeLeft) });
|
|
33
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { addDays, isEqual, startOfDay } from 'date-fns';
|
|
4
|
-
import { useState } from 'react';
|
|
5
|
-
import { twMerge } from 'tailwind-merge';
|
|
6
|
-
import { useCheckInDailyCheckInQuestMutation } from '../../../client/hooks/useCheckInDailyCheckInQuestMutation.js';
|
|
7
|
-
import { toaster } from '../../../client/utils/toaster.js';
|
|
8
|
-
import { CalendarIcon } from '../../../icons/CalendarIcon.js';
|
|
9
|
-
import { CheckIcon } from '../../../icons/CheckIcon.js';
|
|
10
|
-
import { ClockStopWatchIcon } from '../../../icons/ClockStopWatchIcon.js';
|
|
11
|
-
import { InfoCircleIcon } from '../../../icons/InfoCircleIcon.js';
|
|
12
|
-
import { Badge } from '../../../ui/Badge/index.js';
|
|
13
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
14
|
-
import { getQueryClient } from '../../../utils/getQueryClient.js';
|
|
15
|
-
import { getAvailableQuestsQueryKey } from '../../../utils/queryKeys.js';
|
|
16
|
-
import CountdownTimer from '../CountdownTimer.js';
|
|
17
|
-
import { DailyCheckInQuestModal } from './DailyCheckInQuestModal.js';
|
|
18
|
-
export function DailyCheckInQuest({ quest }) {
|
|
19
|
-
const queryClient = getQueryClient();
|
|
20
|
-
const [showRules, setShowRules] = useState(false);
|
|
21
|
-
const [isExpired, setIsExpired] = useState(false);
|
|
22
|
-
const { name, description, status, lastCheckInDate, progressPercentage, checkInStreak, thirdDayBonusAmount, sixthDayBonusAmount, seventhDayBonusAmount, endDateTime, id, } = quest;
|
|
23
|
-
const today = startOfDay(new Date());
|
|
24
|
-
const hasCheckedInToday = lastCheckInDate
|
|
25
|
-
? isEqual(today, startOfDay(new Date(lastCheckInDate)))
|
|
26
|
-
: false;
|
|
27
|
-
const checkedInRewards = {
|
|
28
|
-
3: thirdDayBonusAmount,
|
|
29
|
-
6: sixthDayBonusAmount,
|
|
30
|
-
7: seventhDayBonusAmount,
|
|
31
|
-
};
|
|
32
|
-
const dailyCheckedInData = Array.from({ length: 7 }, (_, i) => {
|
|
33
|
-
const day = i + 1;
|
|
34
|
-
return {
|
|
35
|
-
day,
|
|
36
|
-
reward: checkedInRewards[day] ?? 0,
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
const { mutate } = useCheckInDailyCheckInQuestMutation({
|
|
40
|
-
onSuccess() {
|
|
41
|
-
toaster.success({
|
|
42
|
-
title: 'Check-in successful 🎉',
|
|
43
|
-
description: 'You’ve successfully checked in for today! Keep it up to maintain your streak!',
|
|
44
|
-
});
|
|
45
|
-
queryClient.invalidateQueries({
|
|
46
|
-
queryKey: getAvailableQuestsQueryKey(),
|
|
47
|
-
});
|
|
48
|
-
},
|
|
49
|
-
onError(e) {
|
|
50
|
-
toaster.error({
|
|
51
|
-
title: 'Check-in successful 🎉',
|
|
52
|
-
description: e.message ?? 'Check-In Failed',
|
|
53
|
-
});
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
const handleCheckIn = async () => mutate(id);
|
|
57
|
-
return (_jsxs(_Fragment, { children: [_jsx(DailyCheckInQuestModal, { modalState: {
|
|
58
|
-
isOpen: showRules,
|
|
59
|
-
setIsOpen: setShowRules,
|
|
60
|
-
} }), _jsxs("div", { className: "border-border-primary bg-bg-tertiary flex h-full w-full flex-col space-y-6 rounded-2xl border px-4 pb-6 pt-5", children: [_jsxs("div", { className: "flex flex-col space-y-2", children: [_jsxs("div", { className: "flex max-h-7.5 items-start justify-between", children: [_jsx(CountdownTimer, { endDateTime: endDateTime, renderAction: (timeLeft) => (_jsxs(Badge.Root, { size: "lg", colorScheme: "brand", round: false, children: [_jsx(Badge.Icon, { children: _jsx(ClockStopWatchIcon, {}) }), _jsxs(Badge.Label, { children: [timeLeft.days, "d:", timeLeft.hours, "h:", timeLeft.minutes, "m:", timeLeft.seconds, "s"] })] })), onEnd: () => setIsExpired(true) }), _jsx("div", { role: "button", className: "bg-bg-primary border-border-secondary flex size-9 cursor-pointer items-center justify-center rounded-md border", onClick: () => setShowRules((prev) => !prev), children: _jsx(InfoCircleIcon, { className: "text-text-disabled size-5" }) })] }), _jsx("p", { className: "text-xl font-semibold", children: name }), _jsx("p", { className: "text-text-secondary-700 text-wrap text-sm font-normal", dangerouslySetInnerHTML: { __html: description } })] }), _jsxs("div", { className: "flex w-full flex-col space-y-2", children: [_jsx("div", { className: "grid grid-cols-7", children: dailyCheckedInData.map((item) => {
|
|
61
|
-
const reward = item.reward ? `+₱${item.reward}` : '-';
|
|
62
|
-
return (_jsx("div", { className: twMerge('flex items-center justify-center', item.day <= (checkInStreak || 0)
|
|
63
|
-
? 'text-brand-400'
|
|
64
|
-
: 'text-text-secondary-700'), children: _jsx("p", { children: reward }) }, item.day));
|
|
65
|
-
}) }), _jsx("div", { className: "bg-bg-primary h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "bg-utility-brand-600 h-full rounded-full transition-all duration-300", style: { width: `${progressPercentage}%` } }) }), _jsx("div", { className: "grid grid-cols-7", children: dailyCheckedInData.map((item) => (_jsx("div", { className: "flex items-center justify-center", children: _jsx(CalendarWithDayNumber, { day: item.day, currentCheckedInDays: checkInStreak || 0 }, item.day) }, item.day))) })] }), _jsx(Button, { onClick: handleCheckIn, className: "disabled:bg-bg-primary disabled:text-text-disabled", disabled: isExpired ||
|
|
66
|
-
status === 'COMPLETED' ||
|
|
67
|
-
status === 'FAILED' ||
|
|
68
|
-
hasCheckedInToday, children: hasCheckedInToday && status === 'IN_PROGRESS' ? (_jsx(CountdownTimer, { endDateTime: startOfDay(addDays(new Date(), 1)).toISOString(), renderAction: (timeLeft) => (_jsxs("div", { className: "flex items-center space-x-0.5", children: [_jsx(CheckIcon, {}), _jsxs("p", { children: [timeLeft.hours, "h:", timeLeft.minutes, "m:", timeLeft.seconds, "s"] })] })), onEnd: () => {
|
|
69
|
-
queryClient.invalidateQueries({
|
|
70
|
-
queryKey: getAvailableQuestsQueryKey(),
|
|
71
|
-
});
|
|
72
|
-
} })) : ('Check-In') })] })] }));
|
|
73
|
-
}
|
|
74
|
-
function CalendarWithDayNumber({ day, currentCheckedInDays, }) {
|
|
75
|
-
return (_jsxs("div", { className: twMerge('group relative h-fit w-fit', day <= currentCheckedInDays
|
|
76
|
-
? 'text-brand-400'
|
|
77
|
-
: 'text-text-secondary-700'), children: [_jsx(CalendarIcon, {}), _jsx("div", { className: "absolute inset-0 mt-1 flex items-center justify-center text-2xs lg:mt-[2px]", children: _jsx("p", { className: "text-center", children: day }) })] }));
|
|
78
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { XIcon } from '../../../icons/XIcon.js';
|
|
4
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
5
|
-
import { Dialog } from '../../../ui/Dialog/index.js';
|
|
6
|
-
import { Portal } from '../../../ui/Portal/index.js';
|
|
7
|
-
export function DailyCheckInQuestModal(props) {
|
|
8
|
-
return (_jsx(Dialog.Root, { lazyMount: true, unmountOnExit: true, open: props.modalState.isOpen, onOpenChange: ({ open }) => props.modalState.setIsOpen(open), closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(Dialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+1)]" }), _jsx(Dialog.Positioner, { className: "!z-[calc(var(--z-dialog)+2)] flex items-center justify-center", children: _jsxs(Dialog.Content, { className: "min-h-auto mx-auto max-w-[343px] rounded-xl px-4 pb-0 pt-5", children: [_jsx(Dialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsxs("div", { className: "flex flex-col space-y-5", children: [_jsx("p", { className: "text-text-primary-900 text-lg font-semibold", children: "Daily Check-In Rules" }), _jsxs("ul", { className: "text-text-tertiary-600 group list-disc text-wrap pl-4 text-sm font-normal", children: [_jsx("li", { children: "Earn rewards just for checking in each day!" }), _jsx("li", { children: "Stay consistent to unlock special rewards on the 3rd, 5th, and 7th day." }), _jsx("li", { children: "Missing a day will reset your streak, starting again from Day 1." }), _jsx("li", { children: "Each check-in unlocks the next one on the following day." }), _jsx("li", { children: "Successfully check in for 7 consecutive days to complete the quest and reset the cycle." })] })] }), _jsx("div", { className: "pb-4 pt-6", children: _jsx(Button, { onClick: () => props.modalState.setIsOpen(false), children: "Ok" }) })] }) })] }) }));
|
|
9
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from 'react';
|
|
4
|
-
import { twMerge } from 'tailwind-merge';
|
|
5
|
-
import { ClockStopWatchIcon } from '../../../icons/ClockStopWatchIcon.js';
|
|
6
|
-
import { InfoCircleIcon } from '../../../icons/InfoCircleIcon.js';
|
|
7
|
-
import { Badge } from '../../../ui/Badge/index.js';
|
|
8
|
-
import CountdownTimer from '../CountdownTimer.js';
|
|
9
|
-
import { WageringQuestModal } from './WageringQuestModal.js';
|
|
10
|
-
export function WageringQuest({ quest }) {
|
|
11
|
-
const [showRules, setShowRules] = useState(false);
|
|
12
|
-
const [isExpired, setIsExpired] = useState(false);
|
|
13
|
-
const { progressPercentage, turnover, targetTurnover, name, description, endDateTime, bonus, status, } = quest;
|
|
14
|
-
return (_jsxs(_Fragment, { children: [_jsx(WageringQuestModal, { questName: name, modalState: {
|
|
15
|
-
isOpen: showRules,
|
|
16
|
-
setIsOpen: setShowRules,
|
|
17
|
-
} }), _jsxs("div", { className: "border-border-primary bg-bg-tertiary flex h-full w-full flex-col space-y-6 rounded-2xl border px-4 pb-6 pt-5", children: [_jsxs("div", { className: "flex flex-col space-y-2", children: [_jsxs("div", { className: "flex max-h-7.5 items-start justify-between", children: [_jsx(CountdownTimer, { endDateTime: endDateTime, renderAction: (timeLeft) => (_jsxs(Badge.Root, { size: "lg", colorScheme: "brand", round: false, children: [_jsx(Badge.Icon, { children: _jsx(ClockStopWatchIcon, {}) }), _jsxs(Badge.Label, { children: [timeLeft.days, "d:", timeLeft.hours, "h:", timeLeft.minutes, "m:", timeLeft.seconds, "s"] })] })), onEnd: () => setIsExpired(true) }), _jsx("div", { role: "button", className: "bg-bg-primary border-border-secondary flex size-9 cursor-pointer items-center justify-center rounded-md border", onClick: () => setShowRules((prev) => !prev), children: _jsx(InfoCircleIcon, { className: "text-text-disabled size-5" }) })] }), _jsx("p", { className: "text-xl font-semibold", children: name }), _jsx("p", { className: "text-text-secondary-700 text-wrap text-sm font-normal", dangerouslySetInnerHTML: { __html: description } })] }), _jsxs("div", { className: "flex w-full flex-col space-y-2", children: [_jsxs("div", { className: "text-text-primary-brand group flex items-center justify-between", children: [_jsxs("p", { children: ["Progress ", parseInt(progressPercentage).toFixed(2), "%"] }), _jsxs("p", { children: [turnover, _jsxs("span", { className: "text-text-quarterary-brand", children: ["/", targetTurnover, " PHP"] })] })] }), _jsx("div", { className: "bg-bg-primary h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "bg-utility-brand-600 h-full rounded-full transition-all duration-300", style: { width: `${progressPercentage}%` } }) })] }), _jsx("div", { className: "flex h-full items-end", children: _jsx("div", { className: "bg-button-secondary-bg border-bg-primary-hover w-full rounded-md border px-3.5 py-2.5 text-center text-white", children: _jsxs("p", { className: twMerge(isExpired || status === 'COMPLETED' || status === 'FAILED'
|
|
18
|
-
? ['opacity-50 grayscale']
|
|
19
|
-
: ''), children: ["Complete to get ", _jsxs("span", { className: "text-brand-400", children: ["\u20B1", bonus] }), ' ', "bonus!"] }) }) })] })] }));
|
|
20
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { XIcon } from '../../../icons/XIcon.js';
|
|
4
|
-
import { Button } from '../../../ui/Button/index.js';
|
|
5
|
-
import { Dialog } from '../../../ui/Dialog/index.js';
|
|
6
|
-
import { Portal } from '../../../ui/Portal/index.js';
|
|
7
|
-
export function WageringQuestModal(props) {
|
|
8
|
-
return (_jsx(Dialog.Root, { lazyMount: true, unmountOnExit: true, open: props.modalState.isOpen, onOpenChange: ({ open }) => props.modalState.setIsOpen(open), closeOnEscape: false, closeOnInteractOutside: false, children: _jsxs(Portal, { children: [_jsx(Dialog.Backdrop, { className: "!z-[calc(var(--z-dialog)+1)]" }), _jsx(Dialog.Positioner, { className: "!z-[calc(var(--z-dialog)+2)] flex items-center justify-center", children: _jsxs(Dialog.Content, { className: "min-h-auto mx-auto max-w-[343px] rounded-xl px-4 pb-0 pt-5", children: [_jsx(Dialog.CloseTrigger, { children: _jsx(XIcon, {}) }), _jsxs("div", { className: "flex flex-col space-y-5", children: [_jsx("p", { className: "text-text-primary-900 text-lg font-semibold", children: props.questName }), _jsxs("ul", { className: "text-text-tertiary-600 group list-disc text-wrap pl-4 text-sm font-normal", children: [_jsx("li", { children: "Earn extra rewards just by playing Slots, every bet counts, win or lose!" }), _jsx("li", { children: "Reach the wagering requirement in bets to complete the quest and claim your reward." })] })] }), _jsx("div", { className: "pb-4 pt-6", children: _jsx(Button, { onClick: () => props.modalState.setIsOpen(false), children: "Ok" }) })] }) })] }) }));
|
|
9
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
export const BRANCH_CODES = [
|
|
2
|
-
{
|
|
3
|
-
code: 'BRCAL',
|
|
4
|
-
name: 'Bingo Republic 2nd floor Primark Center Deparo St., Caloocan City',
|
|
5
|
-
},
|
|
6
|
-
{
|
|
7
|
-
code: 'BRNAG',
|
|
8
|
-
name: 'Bingo Republic 3rd floor Robinsons Mall, Naga City, Camarines Sur',
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
code: 'BRANT',
|
|
12
|
-
name: 'Bingo Republic 2nd floor Robinsons Mall, San Vicente,Antique',
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
code: 'BRCLA',
|
|
16
|
-
name: 'Clark',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
code: 'BRLAG',
|
|
20
|
-
name: 'Laguna',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
code: 'BREAS',
|
|
24
|
-
name: 'Eastwood City, Quezon City',
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: 'BRMAR',
|
|
28
|
-
name: 'Bingo ng Bayan 4th floor Marikina Public Market, Marikina City',
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
code: 'BRILO',
|
|
32
|
-
name: 'Iloilo',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
code: 'BRFIM',
|
|
36
|
-
name: 'Fisher Mall,Quezon City',
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
code: 'BRCAC',
|
|
40
|
-
name: 'Villa Caceres Hotel, Naga City,Camsur',
|
|
41
|
-
},
|
|
42
|
-
];
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
export function BellRingIcon(props) {
|
|
3
|
-
return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 25 24", fill: "none", stroke: "currentColor", ...props, children: _jsx("path", { d: "M15.5002 19C15.5002 20.6569 14.1571 22 12.5002 22C10.8434 22 9.50025 20.6569 9.50025 19M14.2968 6.23856C14.7322 5.78864 15.0002 5.17562 15.0002 4.5C15.0002 3.11929 13.881 2 12.5002 2C11.1195 2 10.0002 3.11929 10.0002 4.5C10.0002 5.17562 10.2683 5.78864 10.7037 6.23856M3.04707 8.32296C3.03272 6.87161 3.8152 5.51631 5.07928 4.80306M21.9534 8.32296C21.9678 6.87161 21.1853 5.51631 19.9212 4.80306M18.5002 11.2C18.5002 9.82087 17.8681 8.49823 16.7429 7.52304C15.6177 6.54786 14.0915 6 12.5002 6C10.9089 6 9.38283 6.54786 8.25761 7.52304C7.13239 8.49823 6.50025 9.82087 6.50025 11.2C6.50025 13.4818 5.93438 15.1506 5.22831 16.3447C4.42359 17.7056 4.02122 18.3861 4.03711 18.5486C4.05529 18.7346 4.08876 18.7933 4.23959 18.9036C4.37142 19 5.03376 19 6.35844 19H18.6421C19.9667 19 20.6291 19 20.7609 18.9036C20.9117 18.7933 20.9452 18.7346 20.9634 18.5486C20.9793 18.3861 20.5769 17.7056 19.7722 16.3447C19.0661 15.1506 18.5002 13.4818 18.5002 11.2Z", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
4
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function dataURLtoBlob(dataURL: string): Blob;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function dataURLtoBlob(dataURL) {
|
|
2
|
-
const parts = dataURL.split(';base64,');
|
|
3
|
-
const contentType = parts[0].split(':')[1];
|
|
4
|
-
const raw = window.atob(parts[1]);
|
|
5
|
-
const rawLength = raw.length;
|
|
6
|
-
const uInt8Array = new Uint8Array(rawLength);
|
|
7
|
-
for (let i = 0; i < rawLength; ++i) {
|
|
8
|
-
uInt8Array[i] = raw.charCodeAt(i);
|
|
9
|
-
}
|
|
10
|
-
return new Blob([uInt8Array], { type: contentType });
|
|
11
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import Resizer from 'react-image-file-resizer';
|
|
2
|
-
export const resizeFile = (file) => new Promise((resolve) => {
|
|
3
|
-
Resizer.imageFileResizer(file, 300, 300, 'jpeg', 100, 0, (uri) => {
|
|
4
|
-
resolve(uri);
|
|
5
|
-
}, 'file');
|
|
6
|
-
});
|
|
7
|
-
export const resizeFileBase64 = (file) => new Promise((resolve) => {
|
|
8
|
-
Resizer.imageFileResizer(file, 1200, 300, 'WEBP', 100, 0, (uri) => {
|
|
9
|
-
resolve(uri);
|
|
10
|
-
}, 'base64');
|
|
11
|
-
});
|