-
-
-
+
+
+
+
+
+
+ {floatingBadgeDescription}
+
+
-
-
+
+ {shouldAllowCustomValue && (
+
+ )}
);
};
-function getProgress(points: number[], value: number) {
+function getProgress(points: number[], value: number, minValue: number) {
const pointIndex = points.findIndex((point) => value <= point);
- const prevPoint = points[pointIndex - 1] || 1;
+ const prevPoint = points[pointIndex - 1] || minValue;
const nextPoint = points[pointIndex] || points[points.length - 1];
+ if (nextPoint === prevPoint) return pointIndex;
const progress = (value - prevPoint) / (nextPoint - prevPoint);
return pointIndex + progress;
}
-function getValue(points: number[], progress: number) {
+function getValue(points: number[], progress: number, minValue: number) {
const pointIndex = Math.floor(progress);
- const prevPoint = points[pointIndex - 1] || 1;
+ const prevPoint = points[pointIndex - 1] || minValue;
const nextPoint = points[pointIndex] || points[points.length - 1];
const value = prevPoint + (nextPoint - prevPoint) * (progress - pointIndex);
return Math.round(value);
}
+function calcBadgePosition(
+ containerWidth: number,
+ badgeWidth: number,
+ progress: number,
+) {
+ const halfBadgeWidth = badgeWidth / 2;
+ const halfThumbSize = THUMB_SIZE_IN_PIXELS / 2;
+
+ const baseTargetX = halfThumbSize + progress * (containerWidth - THUMB_SIZE_IN_PIXELS);
+ const cornerTargetX = progress * containerWidth;
+
+ const edgeZone = THUMB_SIZE_IN_PIXELS / 2;
+ const distanceToLeftEdge = cornerTargetX;
+ const distanceToRightEdge = containerWidth - cornerTargetX;
+ const minEdgeDistance = Math.min(distanceToLeftEdge, distanceToRightEdge);
+
+ const t = Math.min(1, minEdgeDistance / edgeZone);
+ const targetX = cornerTargetX + t * (baseTargetX - cornerTargetX);
+ const minBadgeX = halfBadgeWidth;
+ const maxBadgeX = containerWidth - halfBadgeWidth;
+ const clampedBadgeX = Math.max(minBadgeX, Math.min(targetX, maxBadgeX));
+
+ const beakOffset = targetX - clampedBadgeX;
+
+ const thresholdPx = DEFAULT_RADIUS_IN_REM / 2 * REM;
+ const beakHalfWidth = BEAK_WIDTH_IN_PIXELS / 2;
+
+ const distanceToEdge = halfBadgeWidth - Math.abs(beakOffset);
+ const normalizedDistance = Math.max(0, distanceToEdge - beakHalfWidth);
+
+ let edgeRadius = DEFAULT_RADIUS_IN_REM;
+ if (normalizedDistance < thresholdPx) {
+ const radiusT = 1 - (normalizedDistance / thresholdPx);
+ edgeRadius = DEFAULT_RADIUS_IN_REM - radiusT * (DEFAULT_RADIUS_IN_REM - MIN_RADIUS_IN_REM);
+ }
+
+ const leftRadius = beakOffset < 0 ? edgeRadius : DEFAULT_RADIUS_IN_REM;
+ const rightRadius = beakOffset > 0 ? edgeRadius : DEFAULT_RADIUS_IN_REM;
+
+ return {
+ minBadgeX,
+ maxBadgeX,
+ beakOffset,
+ cornerRadius: { left: leftRadius, right: rightRadius },
+ };
+}
+
export default memo(StarSlider);
diff --git a/src/components/modals/stars/helpers/transaction.ts b/src/components/modals/stars/helpers/transaction.ts
index 7cb84b050..c00bbfb8d 100644
--- a/src/components/modals/stars/helpers/transaction.ts
+++ b/src/components/modals/stars/helpers/transaction.ts
@@ -37,6 +37,12 @@ export function getTransactionTitle(oldLang: OldLangFn, lang: LangFn, transactio
return lang('GiftPrepaidUpgradeTransactionTitle');
}
+ if (transaction.isStarGiftAuctionBid) {
+ return isNegativeAmount(transaction.amount)
+ ? lang('StarGiftAuctionBidTransaction')
+ : lang('StarGiftAuctionBidRefundedTransaction');
+ }
+
if (transaction.starRefCommision) {
return oldLang('StarTransactionCommission', formatPercent(transaction.starRefCommision));
}
diff --git a/src/components/modals/stars/transaction/StarsTransactionModal.tsx b/src/components/modals/stars/transaction/StarsTransactionModal.tsx
index a74b1b556..ce9aac09b 100644
--- a/src/components/modals/stars/transaction/StarsTransactionModal.tsx
+++ b/src/components/modals/stars/transaction/StarsTransactionModal.tsx
@@ -260,7 +260,7 @@ const StarsTransactionModal: FC
= ({
peerLabel = oldLang('Stars.Transaction.Via');
}
- if (!transaction.isPostsSearch && !isDropOriginalDetails) {
+ if (!transaction.isPostsSearch && !isDropOriginalDetails && !transaction.isStarGiftAuctionBid) {
tableData.push([
peerLabel,
peerId ? { chatId: peerId } : toName || '',
@@ -312,6 +312,18 @@ const StarsTransactionModal: FC = ({
formatDateTimeToString(transaction.date * 1000, oldLang.code, true),
]);
+ if (transaction.isStarGiftAuctionBid && gift?.type === 'starGift' && gift.availabilityTotal) {
+ tableData.push([
+ lang('GiftInfoAvailability'),
+ lang('GiftInfoAvailabilityValue', {
+ count: gift.availabilityRemains || 0,
+ total: gift.availabilityTotal,
+ }, {
+ pluralValue: gift.availabilityRemains || 0,
+ }),
+ ]);
+ }
+
const footerText = oldLang('lng_credits_box_out_about');
const footerTextParts = footerText.split('{link}');
diff --git a/src/components/ui/TextTimer.tsx b/src/components/ui/TextTimer.tsx
index 6aee9ed87..2941d7080 100644
--- a/src/components/ui/TextTimer.tsx
+++ b/src/components/ui/TextTimer.tsx
@@ -10,12 +10,13 @@ import AnimatedCounter from '../common/AnimatedCounter';
type OwnProps = {
endsAt: number;
+ shouldShowZeroOnEnd?: boolean;
onEnd?: NoneToVoidFunction;
};
const UPDATE_FREQUENCY = 500; // Sometimes second gets skipped if using 1000
-const TextTimer = ({ endsAt, onEnd }: OwnProps) => {
+const TextTimer = ({ endsAt, shouldShowZeroOnEnd, onEnd }: OwnProps) => {
const forceUpdate = useForceUpdate();
const serverTime = getServerTime();
@@ -28,9 +29,9 @@ const TextTimer = ({ endsAt, onEnd }: OwnProps) => {
}
}, [isActive, onEnd]);
- if (!isActive) return undefined;
+ if (!isActive && !shouldShowZeroOnEnd) return undefined;
- const timeLeft = endsAt - serverTime;
+ const timeLeft = Math.max(0, endsAt - serverTime);
const time = formatMediaDuration(timeLeft);
const timeParts = time.split(':');
diff --git a/src/global/actions/api/payments.ts b/src/global/actions/api/payments.ts
index 6e874e398..dca1b3984 100644
--- a/src/global/actions/api/payments.ts
+++ b/src/global/actions/api/payments.ts
@@ -1,5 +1,6 @@
import type {
- ApiInputInvoice, ApiInputInvoicePremiumGiftStars, ApiInputInvoiceStarGift, ApiInputInvoiceStarGiftResale,
+ ApiInputInvoice, ApiInputInvoicePremiumGiftStars, ApiInputInvoiceStarGift,
+ ApiInputInvoiceStarGiftAuctionBid, ApiInputInvoiceStarGiftResale,
ApiRequestInputInvoice,
} from '../../../api/types';
import type { ApiCredentials } from '../../../components/payment/PaymentModal';
@@ -575,7 +576,7 @@ addActionHandler('checkCanSendGift', async (global, actions, payload): Promise => {
const {
- forUserId, selectedResaleGift, tabId = getCurrentTabId(),
+ forUserId, selectedGift, selectedResaleGift, tabId = getCurrentTabId(),
} = payload;
if (selectIsCurrentUserFrozen(global)) {
@@ -592,6 +593,7 @@ addActionHandler('openGiftModal', async (global, actions, payload): Promise {
+ const {
+ giftId, bidAmount, peerId, message, shouldHideName, isUpdateBid, tabId = getCurrentTabId(),
+ } = payload;
+
+ const invoice: ApiInputInvoiceStarGiftAuctionBid = {
+ type: 'stargiftAuctionBid',
+ giftId,
+ bidAmount,
+ peerId,
+ message,
+ shouldHideName,
+ isUpdateBid,
+ };
+
+ payInputStarInvoice(global, invoice, bidAmount, tabId);
+});
+
async function payInputStarInvoice(
global: T, inputInvoice: ApiInputInvoice, price: number,
...[tabId = getCurrentTabId()]: TabArgs
@@ -1229,6 +1249,26 @@ addActionHandler('openUniqueGiftBySlug', async (global, actions, payload): Promi
actions.openGiftInfoModal({ gift, tabId });
});
+addActionHandler('openGiftAuctionBySlug', async (global, actions, payload): Promise => {
+ const {
+ slug, tabId = getCurrentTabId(),
+ } = payload;
+
+ const auctionState = await callApi('fetchStarGiftAuctionState', { slug });
+
+ if (!auctionState) {
+ actions.showNotification({
+ message: {
+ key: 'GiftWasNotFound',
+ },
+ tabId,
+ });
+ return;
+ }
+
+ actions.openGiftAuctionModal({ gift: auctionState.gift, tabId });
+});
+
addActionHandler('processStarGiftWithdrawal', async (global, actions, payload): Promise => {
const {
gift, password, tabId = getCurrentTabId(),
diff --git a/src/global/actions/api/stars.ts b/src/global/actions/api/stars.ts
index ab4bfd283..9e9d08d31 100644
--- a/src/global/actions/api/stars.ts
+++ b/src/global/actions/api/stars.ts
@@ -12,11 +12,12 @@ import { getServerTime } from '../../../util/serverTime';
import { callApi } from '../../../api/gramjs';
import { RESALE_GIFTS_LIMIT } from '../../../limits';
import { areInputSavedGiftsEqual, getRequestInputSavedStarGift } from '../../helpers/payments';
-import { addActionHandler, getGlobal, setGlobal } from '../../index';
+import { addActionHandler, getGlobal, getPromiseActions, setGlobal } from '../../index';
import {
appendStarsSubscriptions,
appendStarsTransactions,
replacePeerSavedGifts,
+ updateActiveGiftAuction,
updateChats,
updatePeerStarGiftCollections,
updateStarsBalance,
@@ -579,6 +580,43 @@ addActionHandler('shiftGiftUpgradeNextPrice', async (global, _actions, payload):
setGlobal(global);
});
+addActionHandler('openGiftAuctionModal', async (global, _actions, payload): Promise => {
+ const { gift, tabId = getCurrentTabId() } = payload;
+
+ await getPromiseActions().loadActiveGiftAuction({ giftId: gift.id, tabId });
+
+ global = getGlobal();
+ global = updateTabState(global, {
+ giftAuctionModal: { isOpen: true },
+ }, tabId);
+ setGlobal(global);
+});
+
+addActionHandler('loadActiveGiftAuction', async (global, _actions, payload): Promise => {
+ const { giftId, tabId = getCurrentTabId() } = payload;
+
+ const currentAuction = selectTabState(global, tabId).activeGiftAuction;
+ const currentVersion = currentAuction?.state.type === 'active' ? currentAuction.state.version : 0;
+
+ const auctionState = await callApi('fetchStarGiftAuctionState', {
+ giftId,
+ version: currentVersion,
+ });
+ if (!auctionState) return;
+
+ global = getGlobal();
+ global = updateActiveGiftAuction(global, auctionState, tabId);
+ setGlobal(global);
+});
+
+addActionHandler('clearActiveGiftAuction', (global, _actions, payload): ActionReturnType => {
+ const { tabId = getCurrentTabId() } = payload || {};
+
+ return updateTabState(global, {
+ activeGiftAuction: undefined,
+ }, tabId);
+});
+
addActionHandler('toggleSavedGiftPinned', async (global, actions, payload): Promise => {
const { gift, peerId, tabId = getCurrentTabId() } = payload;
@@ -650,3 +688,26 @@ addActionHandler('loadStarGiftCollections', async (global, actions, payload): Pr
global = updatePeerStarGiftCollections(global, peerId, result.collections);
setGlobal(global);
});
+
+addActionHandler('openGiftAuctionAcquiredModal', async (global, actions, payload): Promise => {
+ const {
+ giftId, giftTitle, giftSticker, tabId = getCurrentTabId(),
+ } = payload;
+
+ const result = await callApi('fetchStarGiftAuctionAcquiredGifts', { giftId });
+
+ if (!result) return;
+
+ global = getGlobal();
+
+ global = updateTabState(global, {
+ giftAuctionAcquiredModal: {
+ giftId,
+ giftTitle,
+ giftSticker,
+ acquiredGifts: result.gifts,
+ },
+ }, tabId);
+
+ setGlobal(global);
+});
diff --git a/src/global/actions/apiUpdaters/misc.ts b/src/global/actions/apiUpdaters/misc.ts
index 399c8f476..8bdc25bb3 100644
--- a/src/global/actions/apiUpdaters/misc.ts
+++ b/src/global/actions/apiUpdaters/misc.ts
@@ -240,6 +240,40 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => {
case 'newMessage': {
const action = update.message.content?.action;
+
+ if (action?.type === 'starGift' && update.message.isOutgoing) {
+ const { gift } = action;
+ if (!gift.isAuction || update.message.chatId === SERVICE_NOTIFICATIONS_USER_ID) return undefined;
+
+ const { chatId, id } = update.message;
+
+ if (!chatId || !id) return;
+
+ Object.values(global.byTabId).forEach(({ id: tabId }) => {
+ actions.focusMessage({
+ chatId,
+ messageId: id,
+ tabId,
+ });
+ actions.closeGiftAuctionBidModal({ tabId });
+ actions.closeGiftModal({ tabId });
+
+ actions.showNotification({
+ icon: 'auction-filled',
+ message: {
+ key: 'GiftAuctionWonNotification',
+ variables: {
+ gift: gift.title,
+ },
+ },
+ tabId,
+ });
+
+ actions.requestConfetti({ withStars: true, tabId });
+ });
+ return undefined;
+ }
+
if (!update.message.isOutgoing && update.message.chatId !== SERVICE_NOTIFICATIONS_USER_ID) return undefined;
if (action?.type !== 'starGiftUnique') return undefined;
const actionStarGift = action.gift;
diff --git a/src/global/actions/apiUpdaters/payments.ts b/src/global/actions/apiUpdaters/payments.ts
index 3a2565581..3fd068987 100644
--- a/src/global/actions/apiUpdaters/payments.ts
+++ b/src/global/actions/apiUpdaters/payments.ts
@@ -4,7 +4,12 @@ import { formatCurrencyAsString } from '../../../util/formatCurrency';
import * as langProvider from '../../../util/oldLangProvider';
import { getPeerTitle } from '../../helpers/peers';
import { addActionHandler, getGlobal, setGlobal } from '../../index';
-import { removeGiftInfoOriginalDetails, updateStarsBalance } from '../../reducers';
+import {
+ removeGiftInfoOriginalDetails,
+ updateActiveGiftAuctionState,
+ updateActiveGiftAuctionUserState,
+ updateStarsBalance,
+} from '../../reducers';
import { updateTabState } from '../../reducers/tabs';
import { selectPeer, selectTabState } from '../../selectors';
@@ -210,6 +215,27 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => {
});
}
+ if (inputInvoice?.type === 'stargiftAuctionBid') {
+ const { activeGiftAuction } = selectTabState(global, tabId);
+ const giftsPerRound = activeGiftAuction?.gift.giftsPerRound;
+
+ actions.showNotification({
+ icon: 'auction-filled',
+ title: {
+ key: inputInvoice.isUpdateBid ? 'GiftAuctionBidIncreasedTitle' : 'GiftAuctionBidPlacedTitle',
+ },
+ message: {
+ key: 'GiftAuctionBidPlacedMessage',
+ variables: { count: giftsPerRound },
+ },
+ tabId,
+ });
+
+ if (activeGiftAuction?.gift.id === inputInvoice.giftId) {
+ actions.loadActiveGiftAuction({ giftId: inputInvoice.giftId, tabId });
+ }
+ }
+
break;
}
@@ -221,5 +247,29 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => {
actions.loadStarStatus();
break;
}
+
+ case 'updateStarGiftAuctionState': {
+ const { giftId, state } = update;
+
+ Object.keys(global.byTabId).forEach((tabIdStr) => {
+ const tabId = Number(tabIdStr);
+ global = updateActiveGiftAuctionState(global, giftId, state, tabId);
+ });
+
+ setGlobal(global);
+ break;
+ }
+
+ case 'updateStarGiftAuctionUserState': {
+ const { giftId, userState } = update;
+
+ Object.keys(global.byTabId).forEach((tabIdStr) => {
+ const tabId = Number(tabIdStr);
+ global = updateActiveGiftAuctionUserState(global, giftId, userState, tabId);
+ });
+
+ setGlobal(global);
+ break;
+ }
}
});
diff --git a/src/global/actions/ui/stars.ts b/src/global/actions/ui/stars.ts
index b176d3a29..57839f902 100644
--- a/src/global/actions/ui/stars.ts
+++ b/src/global/actions/ui/stars.ts
@@ -11,8 +11,7 @@ import { callApi } from '../../../api/gramjs';
import { addTabStateResetterAction } from '../../helpers/meta';
import { getPrizeStarsTransactionFromGiveaway, getStarsTransactionFromGift } from '../../helpers/payments';
import { addActionHandler, getGlobal, setGlobal } from '../../index';
-import {
- clearStarPayment, openStarsTransactionModal,
+import { clearStarPayment, openStarsTransactionModal,
} from '../../reducers';
import { updateTabState } from '../../reducers/tabs';
import {
@@ -206,6 +205,31 @@ addTabStateResetterAction('closeStarsSubscriptionModal', 'starsSubscriptionModal
addTabStateResetterAction('closeGiftModal', 'giftModal');
+addActionHandler('setGiftModalSelectedGift', (global, actions, payload): ActionReturnType => {
+ const { gift, tabId = getCurrentTabId() } = payload;
+
+ const tabState = selectTabState(global, tabId);
+ const giftModal = tabState?.giftModal;
+ if (giftModal) {
+ return updateTabState(global, {
+ giftModal: {
+ ...giftModal,
+ selectedGift: gift,
+ },
+ }, tabId);
+ }
+
+ if (gift && 'id' in gift) {
+ actions.openGiftModal({
+ forUserId: global.currentUserId!,
+ selectedGift: gift,
+ tabId,
+ });
+ }
+
+ return undefined;
+});
+
addActionHandler('closeStarsGiftModal', (global, actions, payload): ActionReturnType => {
const { tabId = getCurrentTabId() } = payload || {};
return updateTabState(global, {
@@ -387,6 +411,52 @@ addTabStateResetterAction('closeGiftResalePriceComposerModal', 'giftResalePriceC
addTabStateResetterAction('closeGiftUpgradeModal', 'giftUpgradeModal');
+addActionHandler('closeGiftAuctionModal', (global, _actions, payload): ActionReturnType => {
+ const { shouldKeepActiveAuction, tabId = getCurrentTabId() } = payload || {};
+ const tabState = selectTabState(global, tabId);
+
+ return updateTabState(global, {
+ giftAuctionModal: undefined,
+ activeGiftAuction: shouldKeepActiveAuction ? tabState?.activeGiftAuction : undefined,
+ }, tabId);
+});
+
+addActionHandler('openGiftAuctionBidModal', (global, _actions, payload): ActionReturnType => {
+ const { peerId, message, shouldHideName, tabId = getCurrentTabId() } = payload || {};
+
+ return updateTabState(global, {
+ giftAuctionBidModal: { isOpen: true, peerId, message, shouldHideName },
+ }, tabId);
+});
+
+addTabStateResetterAction('closeGiftAuctionBidModal', 'giftAuctionBidModal');
+
+addActionHandler('openGiftAuctionInfoModal', (global, _actions, payload): ActionReturnType => {
+ const { tabId = getCurrentTabId() } = payload || {};
+
+ return updateTabState(global, {
+ giftAuctionInfoModal: { isOpen: true },
+ }, tabId);
+});
+
+addTabStateResetterAction('closeGiftAuctionInfoModal', 'giftAuctionInfoModal');
+
+addActionHandler('openGiftAuctionChangeRecipientModal', (global, _actions, payload): ActionReturnType => {
+ const {
+ oldPeerId, newPeerId, message, shouldHideName, tabId = getCurrentTabId(),
+ } = payload;
+
+ return updateTabState(global, {
+ giftAuctionChangeRecipientModal: {
+ isOpen: true, oldPeerId, newPeerId, message, shouldHideName,
+ },
+ }, tabId);
+});
+
+addTabStateResetterAction('closeGiftAuctionChangeRecipientModal', 'giftAuctionChangeRecipientModal');
+
+addTabStateResetterAction('closeGiftAuctionAcquiredModal', 'giftAuctionAcquiredModal');
+
addActionHandler('openStarGiftPriceDecreaseInfoModal', (global, actions, payload): ActionReturnType => {
const {
prices, currentPrice, minPrice, maxPrice, tabId = getCurrentTabId(),
diff --git a/src/global/helpers/payments.ts b/src/global/helpers/payments.ts
index 13b2f2289..dac43c3f7 100644
--- a/src/global/helpers/payments.ts
+++ b/src/global/helpers/payments.ts
@@ -261,6 +261,23 @@ export function getRequestInputInvoice(
};
}
+ if (inputInvoice.type === 'stargiftAuctionBid') {
+ const {
+ giftId, bidAmount, peerId, message, shouldHideName, isUpdateBid,
+ } = inputInvoice;
+ const peer = peerId ? selectPeer(global, peerId) : undefined;
+
+ return {
+ type: 'stargiftAuctionBid',
+ giftId,
+ bidAmount,
+ peer,
+ message,
+ shouldHideName,
+ isUpdateBid,
+ };
+ }
+
return undefined;
}
diff --git a/src/global/reducers/gifts.ts b/src/global/reducers/gifts.ts
index 928160efe..59251e80e 100644
--- a/src/global/reducers/gifts.ts
+++ b/src/global/reducers/gifts.ts
@@ -1,7 +1,13 @@
-import type { ApiSavedStarGift } from '../../api/types';
+import type {
+ ApiSavedStarGift,
+ ApiStarGiftAuctionState,
+ ApiStarGiftAuctionUserState,
+ ApiTypeStarGiftAuctionState,
+} from '../../api/types';
import type { GlobalState } from '../types';
import { getCurrentTabId } from '../../util/establishMultitabRole';
+import { selectTabState } from '../selectors';
import { updateTabState } from './tabs';
export function removeGiftInfoOriginalDetails(
@@ -46,3 +52,73 @@ export function removeGiftInfoOriginalDetails(
},
}, tabId);
}
+
+function getAuctionStateVersion(state: ApiTypeStarGiftAuctionState): number {
+ return state.type === 'active' ? state.version : 0;
+}
+
+export function updateActiveGiftAuction(
+ global: T,
+ auctionState: ApiStarGiftAuctionState,
+ tabId: number = getCurrentTabId(),
+): T {
+ const currentAuction = selectTabState(global, tabId).activeGiftAuction;
+
+ const serverVersion = getAuctionStateVersion(auctionState.state);
+ const clientVersion = currentAuction ? getAuctionStateVersion(currentAuction.state) : -1;
+
+ if (serverVersion >= clientVersion) {
+ return updateTabState(global, {
+ activeGiftAuction: auctionState,
+ }, tabId);
+ }
+
+ return global;
+}
+
+export function updateActiveGiftAuctionState(
+ global: T,
+ giftId: string,
+ state: ApiTypeStarGiftAuctionState,
+ tabId: number,
+): T {
+ const activeAuction = selectTabState(global, tabId).activeGiftAuction;
+
+ if (!activeAuction || activeAuction.gift.id !== giftId) {
+ return global;
+ }
+
+ const serverVersion = getAuctionStateVersion(state);
+ const clientVersion = getAuctionStateVersion(activeAuction.state);
+
+ if (serverVersion > clientVersion) {
+ return updateTabState(global, {
+ activeGiftAuction: {
+ ...activeAuction,
+ state,
+ },
+ }, tabId);
+ }
+
+ return global;
+}
+
+export function updateActiveGiftAuctionUserState(
+ global: T,
+ giftId: string,
+ userState: ApiStarGiftAuctionUserState,
+ tabId: number,
+): T {
+ const activeAuction = selectTabState(global, tabId).activeGiftAuction;
+
+ if (!activeAuction || activeAuction.gift.id !== giftId) {
+ return global;
+ }
+
+ return updateTabState(global, {
+ activeGiftAuction: {
+ ...activeAuction,
+ userState,
+ },
+ }, tabId);
+}
diff --git a/src/global/types/actions.ts b/src/global/types/actions.ts
index ce1b6543f..550e4ee1d 100644
--- a/src/global/types/actions.ts
+++ b/src/global/types/actions.ts
@@ -33,6 +33,7 @@ import type {
ApiPaymentStatus,
ApiPeer,
ApiPhoto,
+ ApiPremiumGiftCodeOption,
ApiPremiumSection,
ApiPreparedInlineMessage,
ApiPrivacyKey,
@@ -46,6 +47,7 @@ import type {
ApiSessionData,
ApiStarGift,
ApiStarGiftAttributeOriginalDetails,
+ ApiStarGiftRegular,
ApiStarGiftUnique,
ApiStarGiftUpgradePrice,
ApiStarsSubscription,
@@ -1653,6 +1655,9 @@ export interface ActionPayloads {
openUniqueGiftBySlug: {
slug: string;
} & WithTabId;
+ openGiftAuctionBySlug: {
+ slug: string;
+ } & WithTabId;
openPreviousStory: WithTabId | undefined;
openNextStory: WithTabId | undefined;
setStoryViewerMuted: {
@@ -2600,9 +2605,13 @@ export interface ActionPayloads {
openGiftModal: {
forUserId: string;
+ selectedGift?: ApiStarGift;
selectedResaleGift?: ApiStarGift;
} & WithTabId;
closeGiftModal: WithTabId | undefined;
+ setGiftModalSelectedGift: {
+ gift: ApiPremiumGiftCodeOption | ApiStarGift | undefined;
+ } & WithTabId;
sendStarGift: StarGiftInfo & WithTabId;
buyStarGift: {
peerId: string;
@@ -2686,6 +2695,45 @@ export interface ActionPayloads {
gift: ApiStarGiftUnique;
} & WithTabId;
closeGiftInfoValueModal: WithTabId | undefined;
+ openGiftAuctionModal: {
+ gift: ApiStarGiftRegular;
+ } & WithTabId;
+ closeGiftAuctionModal: {
+ shouldKeepActiveAuction?: boolean;
+ } & WithTabId | undefined;
+ openGiftAuctionBidModal: {
+ peerId?: string;
+ message?: string;
+ shouldHideName?: boolean;
+ } & WithTabId | undefined;
+ closeGiftAuctionBidModal: WithTabId | undefined;
+ openGiftAuctionInfoModal: WithTabId | undefined;
+ closeGiftAuctionInfoModal: WithTabId | undefined;
+ openGiftAuctionChangeRecipientModal: {
+ oldPeerId: string;
+ newPeerId: string;
+ message?: string;
+ shouldHideName?: boolean;
+ } & WithTabId;
+ closeGiftAuctionChangeRecipientModal: WithTabId | undefined;
+ openGiftAuctionAcquiredModal: {
+ giftId: string;
+ giftTitle?: string;
+ giftSticker?: ApiSticker;
+ } & WithTabId;
+ closeGiftAuctionAcquiredModal: WithTabId | undefined;
+ sendStarGiftAuctionBid: {
+ giftId: string;
+ bidAmount: number;
+ peerId?: string;
+ message?: ApiFormattedText;
+ shouldHideName?: boolean;
+ isUpdateBid?: boolean;
+ } & WithTabId;
+ loadActiveGiftAuction: {
+ giftId: string;
+ } & WithTabId;
+ clearActiveGiftAuction: WithTabId | undefined;
processStarGiftWithdrawal: {
gift: ApiInputSavedStarGift;
password: string;
diff --git a/src/global/types/tabState.ts b/src/global/types/tabState.ts
index e6ccf51e2..007ee303c 100644
--- a/src/global/types/tabState.ts
+++ b/src/global/types/tabState.ts
@@ -44,6 +44,8 @@ import type {
ApiStarGiftAttribute,
ApiStarGiftAttributeCounter,
ApiStarGiftAttributeOriginalDetails,
+ ApiStarGiftAuctionAcquiredGift,
+ ApiStarGiftAuctionState,
ApiStarGiftUnique,
ApiStarGiftUpgradePrice,
ApiStarGiveawayOption,
@@ -703,7 +705,9 @@ export type TabState = {
forPeerId: string;
gifts?: ApiPremiumGiftCodeOption[];
selectedResaleGift?: ApiStarGift;
+ selectedGift?: ApiPremiumGiftCodeOption | ApiStarGift;
};
+ activeGiftAuction?: ApiStarGiftAuctionState;
chatRefundModal?: {
userId: string;
starsToRefund: number;
@@ -889,6 +893,36 @@ export type TabState = {
emojiStatus: ApiEmojiStatusCollectible;
};
+ giftAuctionModal?: {
+ isOpen?: boolean;
+ };
+
+ giftAuctionBidModal?: {
+ isOpen?: boolean;
+ peerId?: string;
+ message?: string;
+ shouldHideName?: boolean;
+ };
+
+ giftAuctionInfoModal?: {
+ isOpen?: boolean;
+ };
+
+ giftAuctionChangeRecipientModal?: {
+ isOpen?: boolean;
+ oldPeerId?: string;
+ newPeerId?: string;
+ message?: string;
+ shouldHideName?: boolean;
+ };
+
+ giftAuctionAcquiredModal?: {
+ giftId?: string;
+ giftTitle?: string;
+ giftSticker?: ApiSticker;
+ acquiredGifts?: ApiStarGiftAuctionAcquiredGift[];
+ };
+
starGiftPriceDecreaseInfoModal?: {
prices: ApiStarGiftUpgradePrice[];
currentPrice: number;
diff --git a/src/hooks/useScrollNotch.ts b/src/hooks/useScrollNotch.ts
index bd71db1de..183782d56 100644
--- a/src/hooks/useScrollNotch.ts
+++ b/src/hooks/useScrollNotch.ts
@@ -12,10 +12,12 @@ const useScrollNotch = ({
containerRef,
selector,
isBottomNotch,
+ shouldHideTopNotch,
}: {
containerRef: ElementRef;
selector: string;
isBottomNotch?: boolean;
+ shouldHideTopNotch?: boolean;
}, deps: unknown[]) => {
useLayoutEffect(() => {
const elements = containerRef.current?.querySelectorAll(selector);
@@ -28,19 +30,21 @@ const useScrollNotch = ({
const isAtEnd = scrollHeight - scrollTop - clientHeight < SCROLL_THRESHOLD;
requestMutation(() => {
+ if (!shouldHideTopNotch) {
+ toggleExtraClass(target, 'scrolled', isScrolled);
+ }
if (isBottomNotch) {
toggleExtraClass(target, 'scrolled-to-end', isAtEnd);
- } else {
- toggleExtraClass(target, 'scrolled', isScrolled);
}
});
}, THROTTLE_DELAY);
elements.forEach((el) => {
+ if (!shouldHideTopNotch) {
+ addExtraClass(el, 'with-notch');
+ }
if (isBottomNotch) {
addExtraClass(el, 'with-bottom-notch');
- } else {
- addExtraClass(el, 'with-notch');
}
el.addEventListener('scroll', handleScroll, { passive: true });
});
@@ -55,7 +59,7 @@ const useScrollNotch = ({
});
};
// eslint-disable-next-line react-hooks-static-deps/exhaustive-deps
- }, [containerRef, selector, isBottomNotch, ...deps]);
+ }, [containerRef, selector, isBottomNotch, shouldHideTopNotch, ...deps]);
useEffect(() => {
const elements = containerRef.current?.querySelectorAll(selector);
@@ -67,15 +71,16 @@ const useScrollNotch = ({
const isAtEnd = scrollHeight - scrollTop - clientHeight < SCROLL_THRESHOLD;
requestMutation(() => {
+ if (!shouldHideTopNotch) {
+ toggleExtraClass(el, 'scrolled', isScrolled);
+ }
if (isBottomNotch) {
toggleExtraClass(el, 'scrolled-to-end', isAtEnd);
- } else {
- toggleExtraClass(el, 'scrolled', isScrolled);
}
});
});
// eslint-disable-next-line react-hooks-static-deps/exhaustive-deps
- }, [containerRef, selector, isBottomNotch, ...deps]);
+ }, [containerRef, selector, isBottomNotch, shouldHideTopNotch, ...deps]);
};
export default useScrollNotch;
diff --git a/src/lib/gramjs/tl/apiTl.ts b/src/lib/gramjs/tl/apiTl.ts
index 0cbbfdb8c..8e8fadab7 100644
--- a/src/lib/gramjs/tl/apiTl.ts
+++ b/src/lib/gramjs/tl/apiTl.ts
@@ -1881,6 +1881,8 @@ payments.updateStarGiftPrice#edbe6ccb stargift:InputSavedStarGift resell_amount:
payments.getStarGiftCollections#981b91dd peer:InputPeer hash:long = payments.StarGiftCollections;
payments.getUniqueStarGiftValueInfo#4365af6b slug:string = payments.UniqueStarGiftValueInfo;
payments.checkCanSendGift#c0c4edc9 gift_id:long = payments.CheckCanSendGiftResult;
+payments.getStarGiftAuctionState#5c9ff4d6 auction:InputStarGiftAuction version:int = payments.StarGiftAuctionState;
+payments.getStarGiftAuctionAcquiredGifts#6ba2cbec gift_id:long = payments.StarGiftAuctionAcquiredGifts;
phone.requestCall#42ff96ed flags:# video:flags.0?true user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall;
diff --git a/src/lib/gramjs/tl/static/api.json b/src/lib/gramjs/tl/static/api.json
index 04593281e..e56105753 100644
--- a/src/lib/gramjs/tl/static/api.json
+++ b/src/lib/gramjs/tl/static/api.json
@@ -352,6 +352,8 @@
"payments.getResaleStarGifts",
"payments.updateStarGiftPrice",
"payments.getStarGiftCollections",
+ "payments.getStarGiftAuctionState",
+ "payments.getStarGiftAuctionAcquiredGifts",
"langpack.getLangPack",
"langpack.getStrings",
"langpack.getLanguages",
diff --git a/src/styles/icons.css b/src/styles/icons.css
index 5c280a21d..ba26a5b5b 100644
--- a/src/styles/icons.css
+++ b/src/styles/icons.css
@@ -3,8 +3,8 @@
font-weight: normal;
font-style: normal;
font-display: block;
- src: url("./icons.woff2?a07bab7d97a4c6540cca18b1d787228b") format("woff2"),
-url("./icons.woff?a07bab7d97a4c6540cca18b1d787228b") format("woff");
+ src: url("./icons.woff2?78af88c0f83feccd1a41bd4d851b003d") format("woff2"),
+url("./icons.woff?78af88c0f83feccd1a41bd4d851b003d") format("woff");
}
.icon-char::before {
@@ -78,867 +78,876 @@ url("./icons.woff?a07bab7d97a4c6540cca18b1d787228b") format("woff");
.icon-attach::before {
content: "\f113";
}
-.icon-auction::before {
+.icon-auction-drop::before {
content: "\f114";
}
-.icon-author-hidden::before {
+.icon-auction-filled::before {
content: "\f115";
}
-.icon-avatar-archived-chats::before {
+.icon-auction-next-round::before {
content: "\f116";
}
-.icon-avatar-deleted-account::before {
+.icon-auction::before {
content: "\f117";
}
-.icon-avatar-saved-messages::before {
+.icon-author-hidden::before {
content: "\f118";
}
-.icon-bold::before {
+.icon-avatar-archived-chats::before {
content: "\f119";
}
-.icon-boost-outline::before {
+.icon-avatar-deleted-account::before {
content: "\f11a";
}
-.icon-boost::before {
+.icon-avatar-saved-messages::before {
content: "\f11b";
}
-.icon-boostcircle::before {
+.icon-bold::before {
content: "\f11c";
}
-.icon-boosts::before {
+.icon-boost-outline::before {
content: "\f11d";
}
-.icon-bot-command::before {
+.icon-boost::before {
content: "\f11e";
}
-.icon-bot-commands-filled::before {
+.icon-boostcircle::before {
content: "\f11f";
}
-.icon-bots::before {
+.icon-boosts::before {
content: "\f120";
}
-.icon-bug::before {
+.icon-bot-command::before {
content: "\f121";
}
-.icon-calendar-filter::before {
+.icon-bot-commands-filled::before {
content: "\f122";
}
-.icon-calendar::before {
+.icon-bots::before {
content: "\f123";
}
-.icon-camera-add::before {
+.icon-bug::before {
content: "\f124";
}
-.icon-camera::before {
+.icon-calendar-filter::before {
content: "\f125";
}
-.icon-car::before {
+.icon-calendar::before {
content: "\f126";
}
-.icon-card::before {
+.icon-camera-add::before {
content: "\f127";
}
-.icon-cash-circle::before {
+.icon-camera::before {
content: "\f128";
}
-.icon-channel-filled::before {
+.icon-car::before {
content: "\f129";
}
-.icon-channel::before {
+.icon-card::before {
content: "\f12a";
}
-.icon-channelviews::before {
+.icon-cash-circle::before {
content: "\f12b";
}
-.icon-chat-badge::before {
+.icon-channel-filled::before {
content: "\f12c";
}
-.icon-chats-badge::before {
+.icon-channel::before {
content: "\f12d";
}
-.icon-check::before {
+.icon-channelviews::before {
content: "\f12e";
}
-.icon-clock-edit::before {
+.icon-chat-badge::before {
content: "\f12f";
}
-.icon-clock::before {
+.icon-chats-badge::before {
content: "\f130";
}
-.icon-close-circle::before {
+.icon-check::before {
content: "\f131";
}
-.icon-close-topic::before {
+.icon-clock-edit::before {
content: "\f132";
}
-.icon-close::before {
+.icon-clock::before {
content: "\f133";
}
-.icon-closed-gift::before {
+.icon-close-circle::before {
content: "\f134";
}
-.icon-cloud-download::before {
+.icon-close-topic::before {
content: "\f135";
}
-.icon-collapse-modal::before {
+.icon-close::before {
content: "\f136";
}
-.icon-collapse::before {
+.icon-closed-gift::before {
content: "\f137";
}
-.icon-colorize::before {
+.icon-cloud-download::before {
content: "\f138";
}
-.icon-comments-sticker::before {
+.icon-collapse-modal::before {
content: "\f139";
}
-.icon-comments::before {
+.icon-collapse::before {
content: "\f13a";
}
-.icon-copy-media::before {
+.icon-colorize::before {
content: "\f13b";
}
-.icon-copy::before {
+.icon-comments-sticker::before {
content: "\f13c";
}
-.icon-crown-take-off-outline::before {
+.icon-comments::before {
content: "\f13d";
}
-.icon-crown-take-off::before {
+.icon-copy-media::before {
content: "\f13e";
}
-.icon-crown-wear-outline::before {
+.icon-copy::before {
content: "\f13f";
}
-.icon-crown-wear::before {
+.icon-crown-take-off-outline::before {
content: "\f140";
}
-.icon-darkmode::before {
+.icon-crown-take-off::before {
content: "\f141";
}
-.icon-data::before {
+.icon-crown-wear-outline::before {
content: "\f142";
}
-.icon-delete-filled::before {
+.icon-crown-wear::before {
content: "\f143";
}
-.icon-delete-left::before {
+.icon-darkmode::before {
content: "\f144";
}
-.icon-delete-user::before {
+.icon-data::before {
content: "\f145";
}
-.icon-delete::before {
+.icon-delete-filled::before {
content: "\f146";
}
-.icon-diamond::before {
+.icon-delete-left::before {
content: "\f147";
}
-.icon-document::before {
+.icon-delete-user::before {
content: "\f148";
}
-.icon-double-badge::before {
+.icon-delete::before {
content: "\f149";
}
-.icon-down::before {
+.icon-diamond::before {
content: "\f14a";
}
-.icon-download::before {
+.icon-document::before {
content: "\f14b";
}
-.icon-dropdown-arrows::before {
+.icon-double-badge::before {
content: "\f14c";
}
-.icon-eats::before {
+.icon-down::before {
content: "\f14d";
}
-.icon-edit::before {
+.icon-download::before {
content: "\f14e";
}
-.icon-email::before {
+.icon-dropdown-arrows::before {
content: "\f14f";
}
-.icon-enter::before {
+.icon-eats::before {
content: "\f150";
}
-.icon-expand-modal::before {
+.icon-edit::before {
content: "\f151";
}
-.icon-expand::before {
+.icon-email::before {
content: "\f152";
}
-.icon-eye-crossed-outline::before {
+.icon-enter::before {
content: "\f153";
}
-.icon-eye-crossed::before {
+.icon-expand-modal::before {
content: "\f154";
}
-.icon-eye-outline::before {
+.icon-expand::before {
content: "\f155";
}
-.icon-eye::before {
+.icon-eye-crossed-outline::before {
content: "\f156";
}
-.icon-favorite-filled::before {
+.icon-eye-crossed::before {
content: "\f157";
}
-.icon-favorite::before {
+.icon-eye-outline::before {
content: "\f158";
}
-.icon-file-badge::before {
+.icon-eye::before {
content: "\f159";
}
-.icon-flag::before {
+.icon-favorite-filled::before {
content: "\f15a";
}
-.icon-folder-badge::before {
+.icon-favorite::before {
content: "\f15b";
}
-.icon-folder-tabs-bot::before {
+.icon-file-badge::before {
content: "\f15c";
}
-.icon-folder-tabs-channel::before {
+.icon-flag::before {
content: "\f15d";
}
-.icon-folder-tabs-chat::before {
+.icon-folder-badge::before {
content: "\f15e";
}
-.icon-folder-tabs-chats::before {
+.icon-folder-tabs-bot::before {
content: "\f15f";
}
-.icon-folder-tabs-folder::before {
+.icon-folder-tabs-channel::before {
content: "\f160";
}
-.icon-folder-tabs-group::before {
+.icon-folder-tabs-chat::before {
content: "\f161";
}
-.icon-folder-tabs-star::before {
+.icon-folder-tabs-chats::before {
content: "\f162";
}
-.icon-folder-tabs-user::before {
+.icon-folder-tabs-folder::before {
content: "\f163";
}
-.icon-folder::before {
+.icon-folder-tabs-group::before {
content: "\f164";
}
-.icon-fontsize::before {
+.icon-folder-tabs-star::before {
content: "\f165";
}
-.icon-forums::before {
+.icon-folder-tabs-user::before {
content: "\f166";
}
-.icon-forward::before {
+.icon-folder::before {
content: "\f167";
}
-.icon-fragment::before {
+.icon-fontsize::before {
content: "\f168";
}
-.icon-frozen-time::before {
+.icon-forums::before {
content: "\f169";
}
-.icon-fullscreen::before {
+.icon-forward::before {
content: "\f16a";
}
-.icon-gifs::before {
+.icon-fragment::before {
content: "\f16b";
}
-.icon-gift-transfer-inline::before {
+.icon-frozen-time::before {
content: "\f16c";
}
-.icon-gift::before {
+.icon-fullscreen::before {
content: "\f16d";
}
-.icon-group-filled::before {
+.icon-gifs::before {
content: "\f16e";
}
-.icon-group::before {
+.icon-gift-transfer-inline::before {
content: "\f16f";
}
-.icon-grouped-disable::before {
+.icon-gift::before {
content: "\f170";
}
-.icon-grouped::before {
+.icon-group-filled::before {
content: "\f171";
}
-.icon-hand-stop::before {
+.icon-group::before {
content: "\f172";
}
-.icon-hashtag::before {
+.icon-grouped-disable::before {
content: "\f173";
}
-.icon-hd-photo::before {
+.icon-grouped::before {
content: "\f174";
}
-.icon-heart-outline::before {
+.icon-hand-stop::before {
content: "\f175";
}
-.icon-heart::before {
+.icon-hashtag::before {
content: "\f176";
}
-.icon-help::before {
+.icon-hd-photo::before {
content: "\f177";
}
-.icon-info-filled::before {
+.icon-heart-outline::before {
content: "\f178";
}
-.icon-info::before {
+.icon-heart::before {
content: "\f179";
}
-.icon-install::before {
+.icon-help::before {
content: "\f17a";
}
-.icon-italic::before {
+.icon-info-filled::before {
content: "\f17b";
}
-.icon-key::before {
+.icon-info::before {
content: "\f17c";
}
-.icon-keyboard::before {
+.icon-install::before {
content: "\f17d";
}
-.icon-lamp::before {
+.icon-italic::before {
content: "\f17e";
}
-.icon-language::before {
+.icon-key::before {
content: "\f17f";
}
-.icon-large-pause::before {
+.icon-keyboard::before {
content: "\f180";
}
-.icon-large-play::before {
+.icon-lamp::before {
content: "\f181";
}
-.icon-link-badge::before {
+.icon-language::before {
content: "\f182";
}
-.icon-link-broken::before {
+.icon-large-pause::before {
content: "\f183";
}
-.icon-link::before {
+.icon-large-play::before {
content: "\f184";
}
-.icon-location::before {
+.icon-link-badge::before {
content: "\f185";
}
-.icon-lock-badge::before {
+.icon-link-broken::before {
content: "\f186";
}
-.icon-lock::before {
+.icon-link::before {
content: "\f187";
}
-.icon-logout::before {
+.icon-location::before {
content: "\f188";
}
-.icon-loop::before {
+.icon-lock-badge::before {
content: "\f189";
}
-.icon-mention::before {
+.icon-lock::before {
content: "\f18a";
}
-.icon-menu::before {
+.icon-logout::before {
content: "\f18b";
}
-.icon-message-failed::before {
+.icon-loop::before {
content: "\f18c";
}
-.icon-message-pending::before {
+.icon-mention::before {
content: "\f18d";
}
-.icon-message-read::before {
+.icon-menu::before {
content: "\f18e";
}
-.icon-message-succeeded::before {
+.icon-message-failed::before {
content: "\f18f";
}
-.icon-message::before {
+.icon-message-pending::before {
content: "\f190";
}
-.icon-microphone-alt::before {
+.icon-message-read::before {
content: "\f191";
}
-.icon-microphone::before {
+.icon-message-succeeded::before {
content: "\f192";
}
-.icon-monospace::before {
+.icon-message::before {
content: "\f193";
}
-.icon-more-circle::before {
+.icon-microphone-alt::before {
content: "\f194";
}
-.icon-more::before {
+.icon-microphone::before {
content: "\f195";
}
-.icon-move-caption-down::before {
+.icon-monospace::before {
content: "\f196";
}
-.icon-move-caption-up::before {
+.icon-more-circle::before {
content: "\f197";
}
-.icon-mute::before {
+.icon-more::before {
content: "\f198";
}
-.icon-muted::before {
+.icon-move-caption-down::before {
content: "\f199";
}
-.icon-my-notes::before {
+.icon-move-caption-up::before {
content: "\f19a";
}
-.icon-new-chat-filled::before {
+.icon-mute::before {
content: "\f19b";
}
-.icon-next::before {
+.icon-muted::before {
content: "\f19c";
}
-.icon-nochannel::before {
+.icon-my-notes::before {
content: "\f19d";
}
-.icon-noise-suppression::before {
+.icon-new-chat-filled::before {
content: "\f19e";
}
-.icon-non-contacts::before {
+.icon-next::before {
content: "\f19f";
}
-.icon-note::before {
+.icon-nochannel::before {
content: "\f1a0";
}
-.icon-one-filled::before {
+.icon-noise-suppression::before {
content: "\f1a1";
}
-.icon-open-in-new-tab::before {
+.icon-non-contacts::before {
content: "\f1a2";
}
-.icon-password-off::before {
+.icon-note::before {
content: "\f1a3";
}
-.icon-pause::before {
+.icon-one-filled::before {
content: "\f1a4";
}
-.icon-permissions::before {
+.icon-open-in-new-tab::before {
content: "\f1a5";
}
-.icon-phone-discard-outline::before {
+.icon-password-off::before {
content: "\f1a6";
}
-.icon-phone-discard::before {
+.icon-pause::before {
content: "\f1a7";
}
-.icon-phone::before {
+.icon-permissions::before {
content: "\f1a8";
}
-.icon-photo::before {
+.icon-phone-discard-outline::before {
content: "\f1a9";
}
-.icon-pin-badge::before {
+.icon-phone-discard::before {
content: "\f1aa";
}
-.icon-pin-list::before {
+.icon-phone::before {
content: "\f1ab";
}
-.icon-pin::before {
+.icon-photo::before {
content: "\f1ac";
}
-.icon-pinned-chat::before {
+.icon-pin-badge::before {
content: "\f1ad";
}
-.icon-pinned-message::before {
+.icon-pin-list::before {
content: "\f1ae";
}
-.icon-pip::before {
+.icon-pin::before {
content: "\f1af";
}
-.icon-play-story::before {
+.icon-pinned-chat::before {
content: "\f1b0";
}
-.icon-play::before {
+.icon-pinned-message::before {
content: "\f1b1";
}
-.icon-poll::before {
+.icon-pip::before {
content: "\f1b2";
}
-.icon-previous::before {
+.icon-play-story::before {
content: "\f1b3";
}
-.icon-privacy-policy::before {
+.icon-play::before {
content: "\f1b4";
}
-.icon-proof-of-ownership::before {
+.icon-poll::before {
content: "\f1b5";
}
-.icon-quote-text::before {
+.icon-previous::before {
content: "\f1b6";
}
-.icon-quote::before {
+.icon-privacy-policy::before {
content: "\f1b7";
}
-.icon-radial-badge::before {
+.icon-proof-of-ownership::before {
content: "\f1b8";
}
-.icon-rating-icons-level1::before {
+.icon-quote-text::before {
content: "\f1b9";
}
-.icon-rating-icons-level10::before {
+.icon-quote::before {
content: "\f1ba";
}
-.icon-rating-icons-level2::before {
+.icon-radial-badge::before {
content: "\f1bb";
}
-.icon-rating-icons-level20::before {
+.icon-rating-icons-level1::before {
content: "\f1bc";
}
-.icon-rating-icons-level3::before {
+.icon-rating-icons-level10::before {
content: "\f1bd";
}
-.icon-rating-icons-level30::before {
+.icon-rating-icons-level2::before {
content: "\f1be";
}
-.icon-rating-icons-level4::before {
+.icon-rating-icons-level20::before {
content: "\f1bf";
}
-.icon-rating-icons-level40::before {
+.icon-rating-icons-level3::before {
content: "\f1c0";
}
-.icon-rating-icons-level5::before {
+.icon-rating-icons-level30::before {
content: "\f1c1";
}
-.icon-rating-icons-level50::before {
+.icon-rating-icons-level4::before {
content: "\f1c2";
}
-.icon-rating-icons-level6::before {
+.icon-rating-icons-level40::before {
content: "\f1c3";
}
-.icon-rating-icons-level60::before {
+.icon-rating-icons-level5::before {
content: "\f1c4";
}
-.icon-rating-icons-level7::before {
+.icon-rating-icons-level50::before {
content: "\f1c5";
}
-.icon-rating-icons-level70::before {
+.icon-rating-icons-level6::before {
content: "\f1c6";
}
-.icon-rating-icons-level8::before {
+.icon-rating-icons-level60::before {
content: "\f1c7";
}
-.icon-rating-icons-level80::before {
+.icon-rating-icons-level7::before {
content: "\f1c8";
}
-.icon-rating-icons-level9::before {
+.icon-rating-icons-level70::before {
content: "\f1c9";
}
-.icon-rating-icons-level90::before {
+.icon-rating-icons-level8::before {
content: "\f1ca";
}
-.icon-rating-icons-negative::before {
+.icon-rating-icons-level80::before {
content: "\f1cb";
}
-.icon-readchats::before {
+.icon-rating-icons-level9::before {
content: "\f1cc";
}
-.icon-recent::before {
+.icon-rating-icons-level90::before {
content: "\f1cd";
}
-.icon-refund::before {
+.icon-rating-icons-negative::before {
content: "\f1ce";
}
-.icon-reload::before {
+.icon-readchats::before {
content: "\f1cf";
}
-.icon-remove-quote::before {
+.icon-recent::before {
content: "\f1d0";
}
-.icon-remove::before {
+.icon-refund::before {
content: "\f1d1";
}
-.icon-reopen-topic::before {
+.icon-reload::before {
content: "\f1d2";
}
-.icon-reorder-tabs::before {
+.icon-remove-quote::before {
content: "\f1d3";
}
-.icon-replace::before {
+.icon-remove::before {
content: "\f1d4";
}
-.icon-replies::before {
+.icon-reopen-topic::before {
content: "\f1d5";
}
-.icon-reply-filled::before {
+.icon-reorder-tabs::before {
content: "\f1d6";
}
-.icon-reply::before {
+.icon-replace::before {
content: "\f1d7";
}
-.icon-revenue-split::before {
+.icon-replies::before {
content: "\f1d8";
}
-.icon-revote::before {
+.icon-reply-filled::before {
content: "\f1d9";
}
-.icon-save-story::before {
+.icon-reply::before {
content: "\f1da";
}
-.icon-saved-messages::before {
+.icon-revenue-split::before {
content: "\f1db";
}
-.icon-schedule::before {
+.icon-revote::before {
content: "\f1dc";
}
-.icon-scheduled::before {
+.icon-save-story::before {
content: "\f1dd";
}
-.icon-sd-photo::before {
+.icon-saved-messages::before {
content: "\f1de";
}
-.icon-search::before {
+.icon-schedule::before {
content: "\f1df";
}
-.icon-select::before {
+.icon-scheduled::before {
content: "\f1e0";
}
-.icon-sell-outline::before {
+.icon-sd-photo::before {
content: "\f1e1";
}
-.icon-sell::before {
+.icon-search::before {
content: "\f1e2";
}
-.icon-send-outline::before {
+.icon-select::before {
content: "\f1e3";
}
-.icon-send::before {
+.icon-sell-outline::before {
content: "\f1e4";
}
-.icon-settings-filled::before {
+.icon-sell::before {
content: "\f1e5";
}
-.icon-settings::before {
+.icon-send-outline::before {
content: "\f1e6";
}
-.icon-share-filled::before {
+.icon-send::before {
content: "\f1e7";
}
-.icon-share-screen-outlined::before {
+.icon-settings-filled::before {
content: "\f1e8";
}
-.icon-share-screen-stop::before {
+.icon-settings::before {
content: "\f1e9";
}
-.icon-share-screen::before {
+.icon-share-filled::before {
content: "\f1ea";
}
-.icon-show-message::before {
+.icon-share-screen-outlined::before {
content: "\f1eb";
}
-.icon-sidebar::before {
+.icon-share-screen-stop::before {
content: "\f1ec";
}
-.icon-skip-next::before {
+.icon-share-screen::before {
content: "\f1ed";
}
-.icon-skip-previous::before {
+.icon-show-message::before {
content: "\f1ee";
}
-.icon-smallscreen::before {
+.icon-sidebar::before {
content: "\f1ef";
}
-.icon-smile::before {
+.icon-skip-next::before {
content: "\f1f0";
}
-.icon-sort-by-date::before {
+.icon-skip-previous::before {
content: "\f1f1";
}
-.icon-sort-by-number::before {
+.icon-smallscreen::before {
content: "\f1f2";
}
-.icon-sort-by-price::before {
+.icon-smile::before {
content: "\f1f3";
}
-.icon-sort::before {
+.icon-sort-by-date::before {
content: "\f1f4";
}
-.icon-speaker-muted-story::before {
+.icon-sort-by-number::before {
content: "\f1f5";
}
-.icon-speaker-outline::before {
+.icon-sort-by-price::before {
content: "\f1f6";
}
-.icon-speaker-story::before {
+.icon-sort::before {
content: "\f1f7";
}
-.icon-speaker::before {
+.icon-speaker-muted-story::before {
content: "\f1f8";
}
-.icon-spoiler-disable::before {
+.icon-speaker-outline::before {
content: "\f1f9";
}
-.icon-spoiler::before {
+.icon-speaker-story::before {
content: "\f1fa";
}
-.icon-sport::before {
+.icon-speaker::before {
content: "\f1fb";
}
-.icon-star::before {
+.icon-spoiler-disable::before {
content: "\f1fc";
}
-.icon-stars-lock::before {
+.icon-spoiler::before {
content: "\f1fd";
}
-.icon-stars-refund::before {
+.icon-sport::before {
content: "\f1fe";
}
-.icon-stats::before {
+.icon-star::before {
content: "\f1ff";
}
-.icon-stealth-future::before {
+.icon-stars-lock::before {
content: "\f200";
}
-.icon-stealth-past::before {
+.icon-stars-refund::before {
content: "\f201";
}
-.icon-stickers::before {
+.icon-stats::before {
content: "\f202";
}
-.icon-stop-raising-hand::before {
+.icon-stealth-future::before {
content: "\f203";
}
-.icon-stop::before {
+.icon-stealth-past::before {
content: "\f204";
}
-.icon-story-caption::before {
+.icon-stickers::before {
content: "\f205";
}
-.icon-story-expired::before {
+.icon-stop-raising-hand::before {
content: "\f206";
}
-.icon-story-priority::before {
+.icon-stop::before {
content: "\f207";
}
-.icon-story-reply::before {
+.icon-story-caption::before {
content: "\f208";
}
-.icon-strikethrough::before {
+.icon-story-expired::before {
content: "\f209";
}
-.icon-tag-add::before {
+.icon-story-priority::before {
content: "\f20a";
}
-.icon-tag-crossed::before {
+.icon-story-reply::before {
content: "\f20b";
}
-.icon-tag-filter::before {
+.icon-strikethrough::before {
content: "\f20c";
}
-.icon-tag-name::before {
+.icon-tag-add::before {
content: "\f20d";
}
-.icon-tag::before {
+.icon-tag-crossed::before {
content: "\f20e";
}
-.icon-timer::before {
+.icon-tag-filter::before {
content: "\f20f";
}
-.icon-toncoin::before {
+.icon-tag-name::before {
content: "\f210";
}
-.icon-tools::before {
+.icon-tag::before {
content: "\f211";
}
-.icon-topic-new::before {
+.icon-timer::before {
content: "\f212";
}
-.icon-trade::before {
+.icon-toncoin::before {
content: "\f213";
}
-.icon-transcribe::before {
+.icon-tools::before {
content: "\f214";
}
-.icon-truck::before {
+.icon-topic-new::before {
content: "\f215";
}
-.icon-unarchive::before {
+.icon-trade::before {
content: "\f216";
}
-.icon-underlined::before {
+.icon-transcribe::before {
content: "\f217";
}
-.icon-understood::before {
+.icon-truck::before {
content: "\f218";
}
-.icon-unique-profile::before {
+.icon-unarchive::before {
content: "\f219";
}
-.icon-unlist-outline::before {
+.icon-underlined::before {
content: "\f21a";
}
-.icon-unlist::before {
+.icon-understood::before {
content: "\f21b";
}
-.icon-unlock-badge::before {
+.icon-unique-profile::before {
content: "\f21c";
}
-.icon-unlock::before {
+.icon-unlist-outline::before {
content: "\f21d";
}
-.icon-unmute::before {
+.icon-unlist::before {
content: "\f21e";
}
-.icon-unpin::before {
+.icon-unlock-badge::before {
content: "\f21f";
}
-.icon-unread::before {
+.icon-unlock::before {
content: "\f220";
}
-.icon-up::before {
+.icon-unmute::before {
content: "\f221";
}
-.icon-user-filled::before {
+.icon-unpin::before {
content: "\f222";
}
-.icon-user-online::before {
+.icon-unread::before {
content: "\f223";
}
-.icon-user-stars::before {
+.icon-up::before {
content: "\f224";
}
-.icon-user::before {
+.icon-user-filled::before {
content: "\f225";
}
-.icon-video-outlined::before {
+.icon-user-online::before {
content: "\f226";
}
-.icon-video-stop::before {
+.icon-user-stars::before {
content: "\f227";
}
-.icon-video::before {
+.icon-user::before {
content: "\f228";
}
-.icon-view-once::before {
+.icon-video-outlined::before {
content: "\f229";
}
-.icon-voice-chat::before {
+.icon-video-stop::before {
content: "\f22a";
}
-.icon-volume-1::before {
+.icon-video::before {
content: "\f22b";
}
-.icon-volume-2::before {
+.icon-view-once::before {
content: "\f22c";
}
-.icon-volume-3::before {
+.icon-voice-chat::before {
content: "\f22d";
}
-.icon-warning::before {
+.icon-volume-1::before {
content: "\f22e";
}
-.icon-web::before {
+.icon-volume-2::before {
content: "\f22f";
}
-.icon-webapp::before {
+.icon-volume-3::before {
content: "\f230";
}
-.icon-word-wrap::before {
+.icon-warning::before {
content: "\f231";
}
-.icon-zoom-in::before {
+.icon-web::before {
content: "\f232";
}
-.icon-zoom-out::before {
+.icon-webapp::before {
content: "\f233";
}
+.icon-word-wrap::before {
+ content: "\f234";
+}
+.icon-zoom-in::before {
+ content: "\f235";
+}
+.icon-zoom-out::before {
+ content: "\f236";
+}
diff --git a/src/styles/icons.scss b/src/styles/icons.scss
index f779cff39..9b0906817 100644
--- a/src/styles/icons.scss
+++ b/src/styles/icons.scss
@@ -35,292 +35,295 @@ $icons-map: (
"arrow-right": "\f111",
"ask-support": "\f112",
"attach": "\f113",
- "auction": "\f114",
- "author-hidden": "\f115",
- "avatar-archived-chats": "\f116",
- "avatar-deleted-account": "\f117",
- "avatar-saved-messages": "\f118",
- "bold": "\f119",
- "boost-outline": "\f11a",
- "boost": "\f11b",
- "boostcircle": "\f11c",
- "boosts": "\f11d",
- "bot-command": "\f11e",
- "bot-commands-filled": "\f11f",
- "bots": "\f120",
- "bug": "\f121",
- "calendar-filter": "\f122",
- "calendar": "\f123",
- "camera-add": "\f124",
- "camera": "\f125",
- "car": "\f126",
- "card": "\f127",
- "cash-circle": "\f128",
- "channel-filled": "\f129",
- "channel": "\f12a",
- "channelviews": "\f12b",
- "chat-badge": "\f12c",
- "chats-badge": "\f12d",
- "check": "\f12e",
- "clock-edit": "\f12f",
- "clock": "\f130",
- "close-circle": "\f131",
- "close-topic": "\f132",
- "close": "\f133",
- "closed-gift": "\f134",
- "cloud-download": "\f135",
- "collapse-modal": "\f136",
- "collapse": "\f137",
- "colorize": "\f138",
- "comments-sticker": "\f139",
- "comments": "\f13a",
- "copy-media": "\f13b",
- "copy": "\f13c",
- "crown-take-off-outline": "\f13d",
- "crown-take-off": "\f13e",
- "crown-wear-outline": "\f13f",
- "crown-wear": "\f140",
- "darkmode": "\f141",
- "data": "\f142",
- "delete-filled": "\f143",
- "delete-left": "\f144",
- "delete-user": "\f145",
- "delete": "\f146",
- "diamond": "\f147",
- "document": "\f148",
- "double-badge": "\f149",
- "down": "\f14a",
- "download": "\f14b",
- "dropdown-arrows": "\f14c",
- "eats": "\f14d",
- "edit": "\f14e",
- "email": "\f14f",
- "enter": "\f150",
- "expand-modal": "\f151",
- "expand": "\f152",
- "eye-crossed-outline": "\f153",
- "eye-crossed": "\f154",
- "eye-outline": "\f155",
- "eye": "\f156",
- "favorite-filled": "\f157",
- "favorite": "\f158",
- "file-badge": "\f159",
- "flag": "\f15a",
- "folder-badge": "\f15b",
- "folder-tabs-bot": "\f15c",
- "folder-tabs-channel": "\f15d",
- "folder-tabs-chat": "\f15e",
- "folder-tabs-chats": "\f15f",
- "folder-tabs-folder": "\f160",
- "folder-tabs-group": "\f161",
- "folder-tabs-star": "\f162",
- "folder-tabs-user": "\f163",
- "folder": "\f164",
- "fontsize": "\f165",
- "forums": "\f166",
- "forward": "\f167",
- "fragment": "\f168",
- "frozen-time": "\f169",
- "fullscreen": "\f16a",
- "gifs": "\f16b",
- "gift-transfer-inline": "\f16c",
- "gift": "\f16d",
- "group-filled": "\f16e",
- "group": "\f16f",
- "grouped-disable": "\f170",
- "grouped": "\f171",
- "hand-stop": "\f172",
- "hashtag": "\f173",
- "hd-photo": "\f174",
- "heart-outline": "\f175",
- "heart": "\f176",
- "help": "\f177",
- "info-filled": "\f178",
- "info": "\f179",
- "install": "\f17a",
- "italic": "\f17b",
- "key": "\f17c",
- "keyboard": "\f17d",
- "lamp": "\f17e",
- "language": "\f17f",
- "large-pause": "\f180",
- "large-play": "\f181",
- "link-badge": "\f182",
- "link-broken": "\f183",
- "link": "\f184",
- "location": "\f185",
- "lock-badge": "\f186",
- "lock": "\f187",
- "logout": "\f188",
- "loop": "\f189",
- "mention": "\f18a",
- "menu": "\f18b",
- "message-failed": "\f18c",
- "message-pending": "\f18d",
- "message-read": "\f18e",
- "message-succeeded": "\f18f",
- "message": "\f190",
- "microphone-alt": "\f191",
- "microphone": "\f192",
- "monospace": "\f193",
- "more-circle": "\f194",
- "more": "\f195",
- "move-caption-down": "\f196",
- "move-caption-up": "\f197",
- "mute": "\f198",
- "muted": "\f199",
- "my-notes": "\f19a",
- "new-chat-filled": "\f19b",
- "next": "\f19c",
- "nochannel": "\f19d",
- "noise-suppression": "\f19e",
- "non-contacts": "\f19f",
- "note": "\f1a0",
- "one-filled": "\f1a1",
- "open-in-new-tab": "\f1a2",
- "password-off": "\f1a3",
- "pause": "\f1a4",
- "permissions": "\f1a5",
- "phone-discard-outline": "\f1a6",
- "phone-discard": "\f1a7",
- "phone": "\f1a8",
- "photo": "\f1a9",
- "pin-badge": "\f1aa",
- "pin-list": "\f1ab",
- "pin": "\f1ac",
- "pinned-chat": "\f1ad",
- "pinned-message": "\f1ae",
- "pip": "\f1af",
- "play-story": "\f1b0",
- "play": "\f1b1",
- "poll": "\f1b2",
- "previous": "\f1b3",
- "privacy-policy": "\f1b4",
- "proof-of-ownership": "\f1b5",
- "quote-text": "\f1b6",
- "quote": "\f1b7",
- "radial-badge": "\f1b8",
- "rating-icons-level1": "\f1b9",
- "rating-icons-level10": "\f1ba",
- "rating-icons-level2": "\f1bb",
- "rating-icons-level20": "\f1bc",
- "rating-icons-level3": "\f1bd",
- "rating-icons-level30": "\f1be",
- "rating-icons-level4": "\f1bf",
- "rating-icons-level40": "\f1c0",
- "rating-icons-level5": "\f1c1",
- "rating-icons-level50": "\f1c2",
- "rating-icons-level6": "\f1c3",
- "rating-icons-level60": "\f1c4",
- "rating-icons-level7": "\f1c5",
- "rating-icons-level70": "\f1c6",
- "rating-icons-level8": "\f1c7",
- "rating-icons-level80": "\f1c8",
- "rating-icons-level9": "\f1c9",
- "rating-icons-level90": "\f1ca",
- "rating-icons-negative": "\f1cb",
- "readchats": "\f1cc",
- "recent": "\f1cd",
- "refund": "\f1ce",
- "reload": "\f1cf",
- "remove-quote": "\f1d0",
- "remove": "\f1d1",
- "reopen-topic": "\f1d2",
- "reorder-tabs": "\f1d3",
- "replace": "\f1d4",
- "replies": "\f1d5",
- "reply-filled": "\f1d6",
- "reply": "\f1d7",
- "revenue-split": "\f1d8",
- "revote": "\f1d9",
- "save-story": "\f1da",
- "saved-messages": "\f1db",
- "schedule": "\f1dc",
- "scheduled": "\f1dd",
- "sd-photo": "\f1de",
- "search": "\f1df",
- "select": "\f1e0",
- "sell-outline": "\f1e1",
- "sell": "\f1e2",
- "send-outline": "\f1e3",
- "send": "\f1e4",
- "settings-filled": "\f1e5",
- "settings": "\f1e6",
- "share-filled": "\f1e7",
- "share-screen-outlined": "\f1e8",
- "share-screen-stop": "\f1e9",
- "share-screen": "\f1ea",
- "show-message": "\f1eb",
- "sidebar": "\f1ec",
- "skip-next": "\f1ed",
- "skip-previous": "\f1ee",
- "smallscreen": "\f1ef",
- "smile": "\f1f0",
- "sort-by-date": "\f1f1",
- "sort-by-number": "\f1f2",
- "sort-by-price": "\f1f3",
- "sort": "\f1f4",
- "speaker-muted-story": "\f1f5",
- "speaker-outline": "\f1f6",
- "speaker-story": "\f1f7",
- "speaker": "\f1f8",
- "spoiler-disable": "\f1f9",
- "spoiler": "\f1fa",
- "sport": "\f1fb",
- "star": "\f1fc",
- "stars-lock": "\f1fd",
- "stars-refund": "\f1fe",
- "stats": "\f1ff",
- "stealth-future": "\f200",
- "stealth-past": "\f201",
- "stickers": "\f202",
- "stop-raising-hand": "\f203",
- "stop": "\f204",
- "story-caption": "\f205",
- "story-expired": "\f206",
- "story-priority": "\f207",
- "story-reply": "\f208",
- "strikethrough": "\f209",
- "tag-add": "\f20a",
- "tag-crossed": "\f20b",
- "tag-filter": "\f20c",
- "tag-name": "\f20d",
- "tag": "\f20e",
- "timer": "\f20f",
- "toncoin": "\f210",
- "tools": "\f211",
- "topic-new": "\f212",
- "trade": "\f213",
- "transcribe": "\f214",
- "truck": "\f215",
- "unarchive": "\f216",
- "underlined": "\f217",
- "understood": "\f218",
- "unique-profile": "\f219",
- "unlist-outline": "\f21a",
- "unlist": "\f21b",
- "unlock-badge": "\f21c",
- "unlock": "\f21d",
- "unmute": "\f21e",
- "unpin": "\f21f",
- "unread": "\f220",
- "up": "\f221",
- "user-filled": "\f222",
- "user-online": "\f223",
- "user-stars": "\f224",
- "user": "\f225",
- "video-outlined": "\f226",
- "video-stop": "\f227",
- "video": "\f228",
- "view-once": "\f229",
- "voice-chat": "\f22a",
- "volume-1": "\f22b",
- "volume-2": "\f22c",
- "volume-3": "\f22d",
- "warning": "\f22e",
- "web": "\f22f",
- "webapp": "\f230",
- "word-wrap": "\f231",
- "zoom-in": "\f232",
- "zoom-out": "\f233",
+ "auction-drop": "\f114",
+ "auction-filled": "\f115",
+ "auction-next-round": "\f116",
+ "auction": "\f117",
+ "author-hidden": "\f118",
+ "avatar-archived-chats": "\f119",
+ "avatar-deleted-account": "\f11a",
+ "avatar-saved-messages": "\f11b",
+ "bold": "\f11c",
+ "boost-outline": "\f11d",
+ "boost": "\f11e",
+ "boostcircle": "\f11f",
+ "boosts": "\f120",
+ "bot-command": "\f121",
+ "bot-commands-filled": "\f122",
+ "bots": "\f123",
+ "bug": "\f124",
+ "calendar-filter": "\f125",
+ "calendar": "\f126",
+ "camera-add": "\f127",
+ "camera": "\f128",
+ "car": "\f129",
+ "card": "\f12a",
+ "cash-circle": "\f12b",
+ "channel-filled": "\f12c",
+ "channel": "\f12d",
+ "channelviews": "\f12e",
+ "chat-badge": "\f12f",
+ "chats-badge": "\f130",
+ "check": "\f131",
+ "clock-edit": "\f132",
+ "clock": "\f133",
+ "close-circle": "\f134",
+ "close-topic": "\f135",
+ "close": "\f136",
+ "closed-gift": "\f137",
+ "cloud-download": "\f138",
+ "collapse-modal": "\f139",
+ "collapse": "\f13a",
+ "colorize": "\f13b",
+ "comments-sticker": "\f13c",
+ "comments": "\f13d",
+ "copy-media": "\f13e",
+ "copy": "\f13f",
+ "crown-take-off-outline": "\f140",
+ "crown-take-off": "\f141",
+ "crown-wear-outline": "\f142",
+ "crown-wear": "\f143",
+ "darkmode": "\f144",
+ "data": "\f145",
+ "delete-filled": "\f146",
+ "delete-left": "\f147",
+ "delete-user": "\f148",
+ "delete": "\f149",
+ "diamond": "\f14a",
+ "document": "\f14b",
+ "double-badge": "\f14c",
+ "down": "\f14d",
+ "download": "\f14e",
+ "dropdown-arrows": "\f14f",
+ "eats": "\f150",
+ "edit": "\f151",
+ "email": "\f152",
+ "enter": "\f153",
+ "expand-modal": "\f154",
+ "expand": "\f155",
+ "eye-crossed-outline": "\f156",
+ "eye-crossed": "\f157",
+ "eye-outline": "\f158",
+ "eye": "\f159",
+ "favorite-filled": "\f15a",
+ "favorite": "\f15b",
+ "file-badge": "\f15c",
+ "flag": "\f15d",
+ "folder-badge": "\f15e",
+ "folder-tabs-bot": "\f15f",
+ "folder-tabs-channel": "\f160",
+ "folder-tabs-chat": "\f161",
+ "folder-tabs-chats": "\f162",
+ "folder-tabs-folder": "\f163",
+ "folder-tabs-group": "\f164",
+ "folder-tabs-star": "\f165",
+ "folder-tabs-user": "\f166",
+ "folder": "\f167",
+ "fontsize": "\f168",
+ "forums": "\f169",
+ "forward": "\f16a",
+ "fragment": "\f16b",
+ "frozen-time": "\f16c",
+ "fullscreen": "\f16d",
+ "gifs": "\f16e",
+ "gift-transfer-inline": "\f16f",
+ "gift": "\f170",
+ "group-filled": "\f171",
+ "group": "\f172",
+ "grouped-disable": "\f173",
+ "grouped": "\f174",
+ "hand-stop": "\f175",
+ "hashtag": "\f176",
+ "hd-photo": "\f177",
+ "heart-outline": "\f178",
+ "heart": "\f179",
+ "help": "\f17a",
+ "info-filled": "\f17b",
+ "info": "\f17c",
+ "install": "\f17d",
+ "italic": "\f17e",
+ "key": "\f17f",
+ "keyboard": "\f180",
+ "lamp": "\f181",
+ "language": "\f182",
+ "large-pause": "\f183",
+ "large-play": "\f184",
+ "link-badge": "\f185",
+ "link-broken": "\f186",
+ "link": "\f187",
+ "location": "\f188",
+ "lock-badge": "\f189",
+ "lock": "\f18a",
+ "logout": "\f18b",
+ "loop": "\f18c",
+ "mention": "\f18d",
+ "menu": "\f18e",
+ "message-failed": "\f18f",
+ "message-pending": "\f190",
+ "message-read": "\f191",
+ "message-succeeded": "\f192",
+ "message": "\f193",
+ "microphone-alt": "\f194",
+ "microphone": "\f195",
+ "monospace": "\f196",
+ "more-circle": "\f197",
+ "more": "\f198",
+ "move-caption-down": "\f199",
+ "move-caption-up": "\f19a",
+ "mute": "\f19b",
+ "muted": "\f19c",
+ "my-notes": "\f19d",
+ "new-chat-filled": "\f19e",
+ "next": "\f19f",
+ "nochannel": "\f1a0",
+ "noise-suppression": "\f1a1",
+ "non-contacts": "\f1a2",
+ "note": "\f1a3",
+ "one-filled": "\f1a4",
+ "open-in-new-tab": "\f1a5",
+ "password-off": "\f1a6",
+ "pause": "\f1a7",
+ "permissions": "\f1a8",
+ "phone-discard-outline": "\f1a9",
+ "phone-discard": "\f1aa",
+ "phone": "\f1ab",
+ "photo": "\f1ac",
+ "pin-badge": "\f1ad",
+ "pin-list": "\f1ae",
+ "pin": "\f1af",
+ "pinned-chat": "\f1b0",
+ "pinned-message": "\f1b1",
+ "pip": "\f1b2",
+ "play-story": "\f1b3",
+ "play": "\f1b4",
+ "poll": "\f1b5",
+ "previous": "\f1b6",
+ "privacy-policy": "\f1b7",
+ "proof-of-ownership": "\f1b8",
+ "quote-text": "\f1b9",
+ "quote": "\f1ba",
+ "radial-badge": "\f1bb",
+ "rating-icons-level1": "\f1bc",
+ "rating-icons-level10": "\f1bd",
+ "rating-icons-level2": "\f1be",
+ "rating-icons-level20": "\f1bf",
+ "rating-icons-level3": "\f1c0",
+ "rating-icons-level30": "\f1c1",
+ "rating-icons-level4": "\f1c2",
+ "rating-icons-level40": "\f1c3",
+ "rating-icons-level5": "\f1c4",
+ "rating-icons-level50": "\f1c5",
+ "rating-icons-level6": "\f1c6",
+ "rating-icons-level60": "\f1c7",
+ "rating-icons-level7": "\f1c8",
+ "rating-icons-level70": "\f1c9",
+ "rating-icons-level8": "\f1ca",
+ "rating-icons-level80": "\f1cb",
+ "rating-icons-level9": "\f1cc",
+ "rating-icons-level90": "\f1cd",
+ "rating-icons-negative": "\f1ce",
+ "readchats": "\f1cf",
+ "recent": "\f1d0",
+ "refund": "\f1d1",
+ "reload": "\f1d2",
+ "remove-quote": "\f1d3",
+ "remove": "\f1d4",
+ "reopen-topic": "\f1d5",
+ "reorder-tabs": "\f1d6",
+ "replace": "\f1d7",
+ "replies": "\f1d8",
+ "reply-filled": "\f1d9",
+ "reply": "\f1da",
+ "revenue-split": "\f1db",
+ "revote": "\f1dc",
+ "save-story": "\f1dd",
+ "saved-messages": "\f1de",
+ "schedule": "\f1df",
+ "scheduled": "\f1e0",
+ "sd-photo": "\f1e1",
+ "search": "\f1e2",
+ "select": "\f1e3",
+ "sell-outline": "\f1e4",
+ "sell": "\f1e5",
+ "send-outline": "\f1e6",
+ "send": "\f1e7",
+ "settings-filled": "\f1e8",
+ "settings": "\f1e9",
+ "share-filled": "\f1ea",
+ "share-screen-outlined": "\f1eb",
+ "share-screen-stop": "\f1ec",
+ "share-screen": "\f1ed",
+ "show-message": "\f1ee",
+ "sidebar": "\f1ef",
+ "skip-next": "\f1f0",
+ "skip-previous": "\f1f1",
+ "smallscreen": "\f1f2",
+ "smile": "\f1f3",
+ "sort-by-date": "\f1f4",
+ "sort-by-number": "\f1f5",
+ "sort-by-price": "\f1f6",
+ "sort": "\f1f7",
+ "speaker-muted-story": "\f1f8",
+ "speaker-outline": "\f1f9",
+ "speaker-story": "\f1fa",
+ "speaker": "\f1fb",
+ "spoiler-disable": "\f1fc",
+ "spoiler": "\f1fd",
+ "sport": "\f1fe",
+ "star": "\f1ff",
+ "stars-lock": "\f200",
+ "stars-refund": "\f201",
+ "stats": "\f202",
+ "stealth-future": "\f203",
+ "stealth-past": "\f204",
+ "stickers": "\f205",
+ "stop-raising-hand": "\f206",
+ "stop": "\f207",
+ "story-caption": "\f208",
+ "story-expired": "\f209",
+ "story-priority": "\f20a",
+ "story-reply": "\f20b",
+ "strikethrough": "\f20c",
+ "tag-add": "\f20d",
+ "tag-crossed": "\f20e",
+ "tag-filter": "\f20f",
+ "tag-name": "\f210",
+ "tag": "\f211",
+ "timer": "\f212",
+ "toncoin": "\f213",
+ "tools": "\f214",
+ "topic-new": "\f215",
+ "trade": "\f216",
+ "transcribe": "\f217",
+ "truck": "\f218",
+ "unarchive": "\f219",
+ "underlined": "\f21a",
+ "understood": "\f21b",
+ "unique-profile": "\f21c",
+ "unlist-outline": "\f21d",
+ "unlist": "\f21e",
+ "unlock-badge": "\f21f",
+ "unlock": "\f220",
+ "unmute": "\f221",
+ "unpin": "\f222",
+ "unread": "\f223",
+ "up": "\f224",
+ "user-filled": "\f225",
+ "user-online": "\f226",
+ "user-stars": "\f227",
+ "user": "\f228",
+ "video-outlined": "\f229",
+ "video-stop": "\f22a",
+ "video": "\f22b",
+ "view-once": "\f22c",
+ "voice-chat": "\f22d",
+ "volume-1": "\f22e",
+ "volume-2": "\f22f",
+ "volume-3": "\f230",
+ "warning": "\f231",
+ "web": "\f232",
+ "webapp": "\f233",
+ "word-wrap": "\f234",
+ "zoom-in": "\f235",
+ "zoom-out": "\f236",
);
diff --git a/src/styles/icons.woff b/src/styles/icons.woff
index cdbd4c2e2..6ed95509a 100644
Binary files a/src/styles/icons.woff and b/src/styles/icons.woff differ
diff --git a/src/styles/icons.woff2 b/src/styles/icons.woff2
index e993561d9..39db27fcc 100644
Binary files a/src/styles/icons.woff2 and b/src/styles/icons.woff2 differ
diff --git a/src/types/icons/font.ts b/src/types/icons/font.ts
index f16e15bcd..fc0cf13bd 100644
--- a/src/types/icons/font.ts
+++ b/src/types/icons/font.ts
@@ -18,6 +18,9 @@ export type FontIconName =
| 'arrow-right'
| 'ask-support'
| 'attach'
+ | 'auction-drop'
+ | 'auction-filled'
+ | 'auction-next-round'
| 'auction'
| 'author-hidden'
| 'avatar-archived-chats'
diff --git a/src/types/language.d.ts b/src/types/language.d.ts
index 20a2e7321..6b1bb309f 100644
--- a/src/types/language.d.ts
+++ b/src/types/language.d.ts
@@ -1268,6 +1268,7 @@ export interface LangPair {
'GiftInfoDescriptionFreeUpgrade': undefined;
'GiftInfoDescriptionUpgrade2': undefined;
'GiftInfoDescriptionUpgraded': undefined;
+ 'GiftInfoDescriptionRefunded': undefined;
'GiftInfoFrom': undefined;
'GiftInfoDate': undefined;
'GiftInfoValue': undefined;
@@ -1745,6 +1746,8 @@ export interface LangPair {
'StarGiftReasonDropOriginalDetails': undefined;
'GiftAnUpgradeButton': undefined;
'GiftPrepaidUpgradeTransactionTitle': undefined;
+ 'StarGiftAuctionBidTransaction': undefined;
+ 'StarGiftAuctionBidRefundedTransaction': undefined;
'ActionStarGiftPrepaidUpgradedYou': undefined;
'UserNoteTitle': undefined;
'UserNoteHint': undefined;
@@ -1787,6 +1790,39 @@ export interface LangPair {
'StarGiftPriceDecreaseInfoLink': undefined;
'StarGiftUpgradeCostModalTitle': undefined;
'StarGiftUpgradeCostHint': undefined;
+ 'GiftRibbonAuction': undefined;
+ 'GiftAuctionJoin': undefined;
+ 'GiftAuctionLearnMore': undefined;
+ 'GiftAuctionStarted': undefined;
+ 'GiftAuctionEnds': undefined;
+ 'GiftAuctionCurrentRound': undefined;
+ 'GiftAuctionPlaceBid': undefined;
+ 'GiftAuctionMinimumBid': undefined;
+ 'GiftAuctionUntilNextRound': undefined;
+ 'GiftAuctionLeft': undefined;
+ 'GiftAuctionYourBidWillBe': undefined;
+ 'GiftAuctionYoureWinning': undefined;
+ 'GiftAuctionBalance': undefined;
+ 'GiftAuctionInfoTitle': undefined;
+ 'GiftAuctionInfoSubtitle': undefined;
+ 'GiftAuctionInfoBidCarryoverTitle': undefined;
+ 'GiftAuctionInfoMissedBiddersTitle': undefined;
+ 'GiftAuctionInfoMissedBiddersSubtitle': undefined;
+ 'GiftAuctionRecipient': undefined;
+ 'GiftAuctionDate': undefined;
+ 'GiftAuctionAcceptedBid': undefined;
+ 'GiftAuctionCustomBidTitle': undefined;
+ 'GiftAuctionCustomBidPlaceholder': undefined;
+ 'GiftAuctionCustomBidButton': undefined;
+ 'GiftAuctionBidPlacedTitle': undefined;
+ 'GiftAuctionBidIncreasedTitle': undefined;
+ 'GiftAuctionFinished': undefined;
+ 'GiftAuctionEnded': undefined;
+ 'GiftAuctionSoldOut': undefined;
+ 'GiftAuctionChangeRecipientTitle': undefined;
+ 'GiftAuctionAveragePrice': undefined;
+ 'GiftAuctionTapToBidMore': undefined;
+ 'StarGift': undefined;
'SettingsItemPrivacyPasskeys': undefined;
'SettingsItemPrivacyOn': undefined;
'SettingsItemPrivacyOff': undefined;
@@ -2645,6 +2681,15 @@ export interface LangPairWithVariables {
'ActionStarGiftLimitedRibbon': {
'total': V;
};
+ 'ActionStarGiftAuctionWon': {
+ 'cost': V;
+ };
+ 'ActionStarGiftAuctionFor': {
+ 'peer': V;
+ };
+ 'ActionStarGiftAuctionBought': {
+ 'cost': V;
+ };
'ActionSuggestedPhotoYou': {
'user': V;
};
@@ -3120,6 +3165,43 @@ export interface LangPairWithVariables {
'StarGiftPriceDecreaseTimer': {
'timer': V;
};
+ 'GiftAuctionRoundValue': {
+ 'current': V;
+ 'total': V;
+ };
+ 'GiftAuctionPlaceBidButton': {
+ 'amount': V;
+ };
+ 'GiftAuctionTimeLeft': {
+ 'time': V;
+ };
+ 'GiftAuctionAddToBid': {
+ 'amount': V;
+ };
+ 'GiftAuctionInfoBidCarryoverSubtitle': {
+ 'count': V;
+ };
+ 'GiftAuctionBoughtGiftHeader': {
+ 'gift': V;
+ 'giftNumber': V;
+ 'round': V;
+ };
+ 'GiftAuctionTopPosition': {
+ 'position': V;
+ };
+ 'GiftAuctionCustomBidDescription': {
+ 'count': V;
+ };
+ 'GiftAuctionBidPlacedMessage': {
+ 'count': V;
+ };
+ 'GiftAuctionChangeRecipientDescription': {
+ 'oldPeer': V;
+ 'newPeer': V;
+ };
+ 'GiftAuctionWonNotification': {
+ 'gift': V;
+ };
'SettingsPasskeyUsedAt': {
'date': V;
};
@@ -3527,6 +3609,34 @@ export interface LangPairPluralWithVariables {
'list': V;
'count': V;
};
+ 'GiftAuctionTopBidders': {
+ 'count': V;
+ 'gift': V;
+ 'link': V;
+ };
+ 'GiftAuctionDescription': {
+ 'count': V;
+ 'link': V;
+ };
+ 'GiftAuctionTopWinners': {
+ 'count': V;
+ };
+ 'GiftAuctionInfoTopBiddersTitle': {
+ 'count': V;
+ };
+ 'GiftAuctionInfoTopBiddersSubtitle': {
+ 'count': V;
+ };
+ 'GiftAuctionItemsBought': {
+ 'count': V;
+ 'gift': V;
+ };
+ 'GiftAuctionBoughtGiftsTitle': {
+ 'count': V;
+ };
+ 'GiftAuctionGifts': {
+ 'count': V;
+ };
}
export type RegularLangKey = keyof LangPair;
export type RegularLangKeyWithVariables = keyof LangPairWithVariables;
diff --git a/src/util/deepLinkParser.ts b/src/util/deepLinkParser.ts
index 21fe2efb9..e4c033143 100644
--- a/src/util/deepLinkParser.ts
+++ b/src/util/deepLinkParser.ts
@@ -10,7 +10,7 @@ import { isUsernameValid } from './entities/username';
export type DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'addemoji' |
'setlanguage' | 'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url' |
'invoice' | 'addlist' | 'boost' | 'giftcode' | 'message' | 'premium_offer' | 'premium_multigift' | 'stars_topup'
- | 'nft' | 'stars' | 'ton';
+ | 'nft' | 'stars' | 'ton' | 'stargift_auction';
interface PublicMessageLink {
type: 'publicMessageLink';
@@ -104,6 +104,11 @@ interface GiftUniqueLink {
slug: string;
}
+interface GiftAuctionLink {
+ type: 'giftAuctionLink';
+ slug: string;
+}
+
interface StarsModalLink {
type: 'stars';
}
@@ -131,6 +136,7 @@ type DeepLink =
PremiumMultigiftLink |
ChatBoostLink |
GiftUniqueLink |
+ GiftAuctionLink |
StarsModalLink |
TonModalLink |
SettingsScreenLink;
@@ -269,6 +275,8 @@ function parseTgLink(url: URL) {
return buildChatBoostLink({ username: queryParams.domain, id: queryParams.channel });
case 'giftUniqueLink':
return buildGiftUniqueLink({ slug: queryParams.slug });
+ case 'giftAuctionLink':
+ return buildGiftAuctionLink({ slug: queryParams.slug });
case 'stars':
return { type: 'stars' } satisfies StarsModalLink;
case 'ton':
@@ -384,6 +392,11 @@ function parseHttpLink(url: URL) {
slug,
});
}
+ case 'giftAuctionLink': {
+ return buildGiftAuctionLink({
+ slug: pathParams[1],
+ });
+ }
default:
break;
}
@@ -409,6 +422,7 @@ function getHttpDeepLinkType(
if (method === 'm') return 'businessChatLink';
if (method === 'boost') return 'chatBoostLink';
if (method === 'nft') return 'giftUniqueLink';
+ if (method === 'auction') return 'giftAuctionLink';
if (method === 'c') {
if (queryParams.boost !== undefined) return 'chatBoostLink';
return 'privateChannelLink';
@@ -481,6 +495,8 @@ function getTgDeepLinkType(
return 'chatBoostLink';
case 'nft':
return 'giftUniqueLink';
+ case 'stargift_auction':
+ return 'giftAuctionLink';
case 'stars':
return 'stars';
case 'ton':
@@ -710,6 +726,21 @@ function buildGiftUniqueLink(params: BuilderParams): BuilderRetu
};
}
+function buildGiftAuctionLink(params: BuilderParams): BuilderReturnType {
+ const {
+ slug,
+ } = params;
+
+ if (!slug) {
+ return undefined;
+ }
+
+ return {
+ type: 'giftAuctionLink',
+ slug,
+ };
+}
+
function buildSettingsScreen(screenParam: string) {
switch (screenParam) {
case 'devices':
diff --git a/src/util/deeplink.ts b/src/util/deeplink.ts
index f53304340..b0db574f5 100644
--- a/src/util/deeplink.ts
+++ b/src/util/deeplink.ts
@@ -79,6 +79,9 @@ export const processDeepLink = (url: string, linkContext?: LinkContext): boolean
case 'giftUniqueLink':
actions.openUniqueGiftBySlug({ slug: parsedLink.slug });
return true;
+ case 'giftAuctionLink':
+ actions.openGiftAuctionBySlug({ slug: parsedLink.slug });
+ return true;
case 'settings':
if (!parsedLink.screen) {
actions.openLeftColumnContent({ contentKey: LeftColumnContent.Settings });