@anker-in/headless-ui 1.1.74 → 1.1.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/biz-components/ActiveShelf/ProductCard.js +1 -1
- package/dist/cjs/biz-components/ActiveShelf/ProductCard.js.map +2 -2
- package/dist/cjs/biz-components/ActivityMechanism/index.d.ts +9 -0
- package/dist/cjs/biz-components/ActivityMechanism/index.js +2 -0
- package/dist/cjs/biz-components/ActivityMechanism/index.js.map +7 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.d.ts +43 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.js +2 -0
- package/dist/cjs/biz-components/ActivityMechanism/types.js.map +7 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +3 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.js +2 -0
- package/dist/cjs/biz-components/ActivitySchedule/index.js.map +7 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.d.ts +44 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.js +2 -0
- package/dist/cjs/biz-components/ActivitySchedule/types.js.map +7 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +20 -0
- package/dist/cjs/biz-components/AnchorNavigation/index.js +1 -1
- package/dist/cjs/biz-components/AnchorNavigation/index.js.map +3 -3
- package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
- package/dist/cjs/biz-components/EventSchedule/index.js.map +2 -2
- package/dist/cjs/biz-components/FooterNavigation/index.js +1 -1
- package/dist/cjs/biz-components/FooterNavigation/index.js.map +3 -3
- package/dist/cjs/biz-components/FooterNavigation/types.d.ts +7 -0
- package/dist/cjs/biz-components/FooterNavigation/types.js +1 -1
- package/dist/cjs/biz-components/FooterNavigation/types.js.map +2 -2
- package/dist/cjs/biz-components/GiftShelf/index.d.ts +3 -0
- package/dist/cjs/biz-components/GiftShelf/index.js +2 -0
- package/dist/cjs/biz-components/GiftShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/GiftShelf/types.d.ts +120 -0
- package/dist/cjs/biz-components/GiftShelf/types.js +2 -0
- package/dist/cjs/biz-components/GiftShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +3 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.js +2 -0
- package/dist/cjs/biz-components/GiftTierShelf/index.js.map +7 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.d.ts +75 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.js +2 -0
- package/dist/cjs/biz-components/GiftTierShelf/types.js.map +7 -0
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +2 -2
- package/dist/cjs/biz-components/HeroBanner/types.d.ts +2 -0
- package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
- package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/cjs/biz-components/Ksp/index.d.ts +45 -6
- package/dist/cjs/biz-components/Ksp/index.js +1 -1
- package/dist/cjs/biz-components/Ksp/index.js.map +3 -3
- package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
- package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
- package/dist/cjs/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +2 -2
- package/dist/cjs/biz-components/Title/index.js +1 -1
- package/dist/cjs/biz-components/Title/index.js.map +3 -3
- package/dist/cjs/biz-components/Title/types.d.ts +10 -1
- package/dist/cjs/biz-components/Title/types.js +1 -1
- package/dist/cjs/biz-components/Title/types.js.map +1 -1
- package/dist/cjs/biz-components/VideoModal/index.js +1 -1
- package/dist/cjs/biz-components/VideoModal/index.js.map +2 -2
- package/dist/cjs/biz-components/WheelLottery/BaseModal.d.ts +61 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.d.ts +29 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.d.ts +56 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.d.ts +79 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/index.d.ts +48 -0
- package/dist/cjs/biz-components/WheelLottery/index.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/cjs/biz-components/WheelLottery/types.d.ts +1229 -0
- package/dist/cjs/biz-components/WheelLottery/types.js +2 -0
- package/dist/cjs/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/cjs/biz-components/index.d.ts +11 -0
- package/dist/cjs/biz-components/index.js +1 -1
- package/dist/cjs/biz-components/index.js.map +3 -3
- package/dist/cjs/components/Countdown.d.ts +27 -4
- package/dist/cjs/components/Countdown.js +1 -1
- package/dist/cjs/components/Countdown.js.map +3 -3
- package/dist/cjs/hooks/useCountDown.js +1 -1
- package/dist/cjs/hooks/useCountDown.js.map +3 -3
- package/dist/cjs/hooks/useDraggableScroll.d.ts +77 -0
- package/dist/cjs/hooks/useDraggableScroll.js +2 -0
- package/dist/cjs/hooks/useDraggableScroll.js.map +7 -0
- package/dist/esm/biz-components/ActiveShelf/ProductCard.js +1 -1
- package/dist/esm/biz-components/ActiveShelf/ProductCard.js.map +2 -2
- package/dist/esm/biz-components/ActivityMechanism/index.d.ts +9 -0
- package/dist/esm/biz-components/ActivityMechanism/index.js +2 -0
- package/dist/esm/biz-components/ActivityMechanism/index.js.map +7 -0
- package/dist/esm/biz-components/ActivityMechanism/types.d.ts +43 -0
- package/dist/esm/biz-components/ActivityMechanism/types.js +1 -0
- package/dist/esm/biz-components/ActivityMechanism/types.js.map +7 -0
- package/dist/esm/biz-components/ActivitySchedule/index.d.ts +3 -0
- package/dist/esm/biz-components/ActivitySchedule/index.js +2 -0
- package/dist/esm/biz-components/ActivitySchedule/index.js.map +7 -0
- package/dist/esm/biz-components/ActivitySchedule/types.d.ts +44 -0
- package/dist/esm/biz-components/ActivitySchedule/types.js +1 -0
- package/dist/esm/biz-components/ActivitySchedule/types.js.map +7 -0
- package/dist/esm/biz-components/AnchorNavigation/index.d.ts +20 -0
- package/dist/esm/biz-components/AnchorNavigation/index.js +1 -1
- package/dist/esm/biz-components/AnchorNavigation/index.js.map +3 -3
- package/dist/esm/biz-components/EventSchedule/index.js +1 -1
- package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
- package/dist/esm/biz-components/FooterNavigation/index.js +1 -1
- package/dist/esm/biz-components/FooterNavigation/index.js.map +3 -3
- package/dist/esm/biz-components/FooterNavigation/types.d.ts +7 -0
- package/dist/esm/biz-components/FooterNavigation/types.js.map +2 -2
- package/dist/esm/biz-components/GiftShelf/index.d.ts +3 -0
- package/dist/esm/biz-components/GiftShelf/index.js +2 -0
- package/dist/esm/biz-components/GiftShelf/index.js.map +7 -0
- package/dist/esm/biz-components/GiftShelf/types.d.ts +120 -0
- package/dist/esm/biz-components/GiftShelf/types.js +1 -0
- package/dist/esm/biz-components/GiftShelf/types.js.map +7 -0
- package/dist/esm/biz-components/GiftTierShelf/index.d.ts +3 -0
- package/dist/esm/biz-components/GiftTierShelf/index.js +2 -0
- package/dist/esm/biz-components/GiftTierShelf/index.js.map +7 -0
- package/dist/esm/biz-components/GiftTierShelf/types.d.ts +75 -0
- package/dist/esm/biz-components/GiftTierShelf/types.js +1 -0
- package/dist/esm/biz-components/GiftTierShelf/types.js.map +7 -0
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
- package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +2 -2
- package/dist/esm/biz-components/HeroBanner/types.d.ts +2 -0
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
- package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +2 -2
- package/dist/esm/biz-components/Ksp/index.d.ts +45 -6
- package/dist/esm/biz-components/Ksp/index.js +1 -1
- package/dist/esm/biz-components/Ksp/index.js.map +3 -3
- package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
- package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
- package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
- package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js +1 -1
- package/dist/esm/biz-components/ThreeDCarousel/ThreeDCarousel.js.map +2 -2
- package/dist/esm/biz-components/Title/index.js +1 -1
- package/dist/esm/biz-components/Title/index.js.map +3 -3
- package/dist/esm/biz-components/Title/types.d.ts +10 -1
- package/dist/esm/biz-components/VideoModal/index.js +1 -1
- package/dist/esm/biz-components/VideoModal/index.js.map +2 -2
- package/dist/esm/biz-components/WheelLottery/BaseModal.d.ts +61 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.d.ts +29 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js +2 -0
- package/dist/esm/biz-components/WheelLottery/PrizePool.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.d.ts +56 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/RulesModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.d.ts +79 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/ShareModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.d.ts +27 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js +2 -0
- package/dist/esm/biz-components/WheelLottery/Wheel.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js +2 -0
- package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/index.d.ts +48 -0
- package/dist/esm/biz-components/WheelLottery/index.js +2 -0
- package/dist/esm/biz-components/WheelLottery/index.js.map +7 -0
- package/dist/esm/biz-components/WheelLottery/types.d.ts +1229 -0
- package/dist/esm/biz-components/WheelLottery/types.js +2 -0
- package/dist/esm/biz-components/WheelLottery/types.js.map +7 -0
- package/dist/esm/biz-components/index.d.ts +11 -0
- package/dist/esm/biz-components/index.js +1 -1
- package/dist/esm/biz-components/index.js.map +2 -2
- package/dist/esm/components/Countdown.d.ts +27 -4
- package/dist/esm/components/Countdown.js +1 -1
- package/dist/esm/components/Countdown.js.map +3 -3
- package/dist/esm/hooks/useCountDown.js +1 -1
- package/dist/esm/hooks/useCountDown.js.map +3 -3
- package/dist/esm/hooks/useDraggableScroll.d.ts +77 -0
- package/dist/esm/hooks/useDraggableScroll.js +2 -0
- package/dist/esm/hooks/useDraggableScroll.js.map +7 -0
- package/package.json +1 -1
- package/style.css +6252 -862
- package/tailwind.config.js +18 -2
- package/dist/cjs/biz-components/HeroBanner/Countdown.d.ts +0 -10
- package/dist/cjs/biz-components/HeroBanner/Countdown.js +0 -2
- package/dist/cjs/biz-components/HeroBanner/Countdown.js.map +0 -7
- package/dist/cjs/biz-components/Title/Countdown.d.ts +0 -14
- package/dist/cjs/biz-components/Title/Countdown.js +0 -2
- package/dist/cjs/biz-components/Title/Countdown.js.map +0 -7
- package/dist/esm/biz-components/HeroBanner/Countdown.d.ts +0 -10
- package/dist/esm/biz-components/HeroBanner/Countdown.js +0 -2
- package/dist/esm/biz-components/HeroBanner/Countdown.js.map +0 -7
- package/dist/esm/biz-components/Title/Countdown.d.ts +0 -14
- package/dist/esm/biz-components/Title/Countdown.js +0 -2
- package/dist/esm/biz-components/Title/Countdown.js.map +0 -7
package/tailwind.config.js
CHANGED
|
@@ -2,6 +2,7 @@ module.exports = {
|
|
|
2
2
|
darkMode: ['selector', '.aiui-dark'],
|
|
3
3
|
content: [
|
|
4
4
|
'./src/components/**/*.{js,jsx,ts,tsx}',
|
|
5
|
+
'./src/biz-components/**/*.{js,jsx,ts,tsx}',
|
|
5
6
|
'./src/icons/**/*.{js,jsx,ts,tsx}',
|
|
6
7
|
'../storybook/.storybook/**/*.{js,jsx,ts,tsx}',
|
|
7
8
|
],
|
|
@@ -19,7 +20,11 @@ module.exports = {
|
|
|
19
20
|
'lg-desktop': '1920px', // ≥1920px 超大屏
|
|
20
21
|
},
|
|
21
22
|
keyframes: {
|
|
22
|
-
'marquee-
|
|
23
|
+
'marquee-x': {
|
|
24
|
+
'0%': { transform: 'translateX(0)' },
|
|
25
|
+
'100%': { transform: 'translateX(-50%)' },
|
|
26
|
+
},
|
|
27
|
+
'marquee-y': {
|
|
23
28
|
from: { transform: 'translateY(0%)' },
|
|
24
29
|
to: { transform: 'translateY(-50%)' },
|
|
25
30
|
},
|
|
@@ -33,11 +38,22 @@ module.exports = {
|
|
|
33
38
|
from: { transform: 'translate3d(-100%, 0, 0)' },
|
|
34
39
|
to: { transform: 'translate3d(0, 0, 0)' },
|
|
35
40
|
},
|
|
41
|
+
'fade-in-overlay': {
|
|
42
|
+
'0%': { opacity: '0' },
|
|
43
|
+
'100%': { opacity: '1' },
|
|
44
|
+
},
|
|
45
|
+
'fade-in-modal': {
|
|
46
|
+
'0%': { opacity: '0', transform: 'scale(0.95)' },
|
|
47
|
+
'100%': { opacity: '1', transform: 'scale(1)' },
|
|
48
|
+
},
|
|
36
49
|
},
|
|
37
50
|
animation: {
|
|
38
|
-
'marquee-
|
|
51
|
+
'marquee-y': 'marquee-y 20s linear infinite',
|
|
52
|
+
'marquee-x': 'marquee-x var(--scroll-duration, 30s) linear infinite',
|
|
39
53
|
'scroll-text': 'scroll-text 2s ease-in-out infinite',
|
|
40
54
|
'progress-bar': 'progress-bar var(--interval-time) ease-out',
|
|
55
|
+
'fade-in-overlay': 'fade-in-overlay 0.3s cubic-bezier(0.4,0,0.2,1) both',
|
|
56
|
+
'fade-in-modal': 'fade-in-modal 0.4s cubic-bezier(0.4,0,0.2,1) both',
|
|
41
57
|
},
|
|
42
58
|
maskImage: {
|
|
43
59
|
'fade-vertical': 'linear-gradient(to bottom, transparent, black 20%, black 80%, transparent)',
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";"use client";var N=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var j=(n,s)=>{for(var c in s)N(n,c,{get:s[c],enumerable:!0})},B=(n,s,c,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of W(s))!Z.call(n,i)&&i!==c&&N(n,i,{get:()=>s[i],enumerable:!(l=P(s,i))||l.enumerable});return n};var J=n=>B(N({},"__esModule",{value:!0}),n);var _={};j(_,{CountdownByEndDate:()=>k,default:()=>L});module.exports=J(_);var t=require("react/jsx-runtime"),d=require("../../helpers/index.js"),o=require("react");const m=(n,s=2)=>String(Math.abs(n)).padStart(s,"0"),f="h-full flex-1 max-w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box",p="w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold whitespace-nowrap",k=({endDate:n,endDate_tz:s,locale:c,dateFormat:l,onExpire:i})=>{const h=()=>({day:"Day",hour:"Hours",minute:"Mins",second:"Secs"});function C(e){try{let a=e?.trim?.();return!a?.startsWith?.("{")||!a?.endsWith?.("}")?{}:(a=a?.replace?.(/(\w+)\s*:/g,'"$1":'),JSON.parse(a))}catch{return h()}}const u=(0,o.useMemo)(()=>l?C(l):h(),[l]),r=(0,o.useRef)(Date.parse(n)),[I,g]=(0,o.useState)(()=>{const e=r.current;return isNaN(e)?0:Math.max(0,e-Date.now())}),[x,w]=(0,o.useState)(()=>{const e=r.current;return!isNaN(e)&&e<=Date.now()});(0,o.useEffect)(()=>{r.current=Date.parse(n),g(isNaN(r.current)?0:Math.max(0,r.current-Date.now()));const e=r.current;w(!isNaN(e)&&e<=Date.now())},[n]),(0,o.useEffect)(()=>{if(x||isNaN(r.current))return;let e=!1;const a=()=>{const F=Date.now(),S=Math.max(0,r.current-F);g(S),S<=0&&!e&&(e=!0,w(!0),i?.())};a();const E=window.setInterval(a,1e3);return()=>clearInterval(E)},[i,x]);const b=Math.floor(I/1e3),R=b%60,D=Math.floor(b/60),T=D%60,y=Math.floor(D/60),H=y%24,O=Math.floor(y/24),z=s||Intl.DateTimeFormat().resolvedOptions().timeZone;let M="\u2014";const v=r.current;if(!isNaN(v))try{const e=new Date(v);M=new Intl.DateTimeFormat(c||navigator.language,{timeZone:z,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(e)}catch{M=new Date(v).toISOString()}return x?null:(0,t.jsxs)("div",{className:"countdown-box flex w-full items-center gap-1","aria-live":"polite",children:[(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-days-box"),children:[(0,t.jsx)("p",{className:p,children:m(O,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.day||"Day"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-hours-box"),children:[(0,t.jsx)("p",{className:p,children:m(H,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.hour||"Hours"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-minutes-box"),children:[(0,t.jsx)("p",{className:p,children:m(T,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.minute||"Mins"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-seconds-box"),children:[(0,t.jsx)("p",{className:p,children:m(R,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.second||"Secs"})]})]})};var L=k;
|
|
2
|
-
//# sourceMappingURL=Countdown.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/biz-components/HeroBanner/Countdown.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport { cn } from '../../helpers/index.js'\nimport React, { useEffect, useRef, useState, useMemo } from 'react'\n\ntype Props = {\n endDate: string // ISO UTC \u5B57\u7B26\u4E32\uFF0C\u4F8B\u5982 \"2025-11-02T07:42:00.000Z\"\n endDate_tz?: string // \u65F6\u533A\uFF0C\u4F8B\u5982 \"Asia/Dhaka\"\uFF08\u53EF\u9009\uFF09\n locale?: string // \u683C\u5F0F\u5316\u7528\u7684 locale\uFF0C\u9ED8\u8BA4 navigator.language\n dateFormat?: any\n onExpire?: () => void // \u5230\u671F\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n}\n\nconst pad = (n: number, len = 2) => String(Math.abs(n)).padStart(len, '0')\n\nconst baseClass =\n 'h-full flex-1 max-w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box'\n\nconst textClass =\n 'w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold whitespace-nowrap'\n\nexport const CountdownByEndDate: React.FC<Props> = ({ endDate, endDate_tz, locale, dateFormat, onExpire }) => {\n const getDefaultDateLabels = () => ({\n day: 'Day',\n hour: 'Hours',\n minute: 'Mins',\n second: 'Secs',\n })\n\n function safeStringToObject(str: string) {\n try {\n let jsonStr = str?.trim?.()\n if (!jsonStr?.startsWith?.('{') || !jsonStr?.endsWith?.('}')) {\n return {}\n }\n jsonStr = jsonStr?.replace?.(/(\\w+)\\s*:/g, '\"$1\":')\n return JSON.parse(jsonStr)\n } catch (err) {\n return getDefaultDateLabels()\n }\n }\n\n const bannerDate = useMemo(() => {\n if (!dateFormat) return getDefaultDateLabels()\n return safeStringToObject(dateFormat)\n }, [dateFormat])\n\n // \u89E3\u6790\u76EE\u6807\u65F6\u95F4\uFF08\u4F7F\u7528 provided ISO\uFF0C\u82E5\u975E\u6CD5\u5219\u4E3A NaN\uFF09\n const targetMsRef = useRef<number>(Date.parse(endDate))\n const [remainingMs, setRemainingMs] = useState<number>(() => {\n const t = targetMsRef.current\n return isNaN(t) ? 0 : Math.max(0, t - Date.now())\n })\n // \u4EC5\u5728\u521D\u59CB\u65F6\u5224\u65AD\u662F\u5426\u5DF2\u8FC7\u671F\uFF1A\u82E5\u5DF2\u8FC7\u671F\u5219\u9690\u85CF\u7EC4\u4EF6\u5E76\u4E0D\u7EE7\u7EED\u8BA1\u65F6\n const [hidden, setHidden] = useState<boolean>(() => {\n const t = targetMsRef.current\n return !isNaN(t) && t <= Date.now()\n })\n\n // \u82E5 props.endDate \u6539\u53D8\uFF0C\u66F4\u65B0 ref \u4E0E remaining\n useEffect(() => {\n targetMsRef.current = Date.parse(endDate)\n setRemainingMs(isNaN(targetMsRef.current) ? 0 : Math.max(0, targetMsRef.current - Date.now()))\n // \u5F53 endDate \u66F4\u65B0\u65F6\uFF0C\u4EC5\u8FDB\u884C\u4E00\u6B21\u662F\u5426\u8FC7\u671F\u7684\u5224\u65AD\uFF0C\u7528\u4E8E\u51B3\u5B9A\u662F\u5426\u9690\u85CF\n const t = targetMsRef.current\n setHidden(!isNaN(t) && t <= Date.now())\n }, [endDate])\n\n // Tick \u6BCF\u79D2\u66F4\u65B0\u5269\u4F59\u65F6\u95F4\n useEffect(() => {\n if (hidden) return // \u521D\u59CB\u5DF2\u8FC7\u671F\u5219\u4E0D\u542F\u52A8\u8BA1\u65F6\u5668\n if (isNaN(targetMsRef.current)) return // \u65E0\u6548\u65E5\u671F\u4E0D\u542F\u52A8\u8BA1\u65F6\u5668\n let expiredCalled = false\n const tick = () => {\n const now = Date.now()\n const rem = Math.max(0, targetMsRef.current - now)\n setRemainingMs(rem)\n if (rem <= 0 && !expiredCalled) {\n expiredCalled = true\n setHidden(true) // \u5230\u70B9\u540E\u9690\u85CF\u7EC4\u4EF6\n onExpire?.()\n }\n }\n tick() // \u7ACB\u5373\u540C\u6B65\u4E00\u6B21\n const id = window.setInterval(tick, 1000)\n return () => clearInterval(id)\n }, [onExpire, hidden])\n\n // \u8BA1\u7B97\u5929/\u65F6/\u5206/\u79D2\n const totalSeconds = Math.floor(remainingMs / 1000)\n const seconds = totalSeconds % 60\n const totalMinutes = Math.floor(totalSeconds / 60)\n const minutes = totalMinutes % 60\n const totalHours = Math.floor(totalMinutes / 60)\n const hours = totalHours % 24\n const days = Math.floor(totalHours / 24)\n\n // \u683C\u5F0F\u5316\u76EE\u6807\u65F6\u95F4\u5E76\u663E\u793A\u5176\u65F6\u533A\uFF08\u4F7F\u7528 endDate_tz \u6216\u8005\u6D4F\u89C8\u5668\u65F6\u533A\uFF09\n const displayTz = endDate_tz || Intl.DateTimeFormat().resolvedOptions().timeZone\n let formattedTarget = '\u2014'\n const tms = targetMsRef.current\n if (!isNaN(tms)) {\n try {\n const dt = new Date(tms)\n const fmt = new Intl.DateTimeFormat(locale || navigator.language, {\n timeZone: displayTz,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n formattedTarget = fmt.format(dt)\n } catch (e) {\n // \u82E5\u4F20\u5165\u4E86\u975E\u6CD5\u65F6\u533A\uFF0CIntl \u53EF\u80FD\u629B\u9519\uFF1B\u56DE\u9000\u663E\u793A UTC \u65F6\u95F4\n formattedTarget = new Date(tms).toISOString()\n }\n }\n\n if (hidden) return null\n\n return (\n <div className=\"countdown-box flex w-full items-center gap-1\" aria-live=\"polite\">\n {/* \u5929 */}\n <div className={cn(baseClass, 'time-days-box')}>\n <p className={textClass}>{pad(days, 2)}</p>\n <div className=\"truncate\">{bannerDate?.day || 'Day'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u65F6 */}\n <div className={cn(baseClass, 'time-hours-box')}>\n <p className={textClass}>{pad(hours, 2)}</p>\n <div className=\"truncate\">{bannerDate?.hour || 'Hours'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u5206 */}\n <div className={cn(baseClass, 'time-minutes-box')}>\n <p className={textClass}>{pad(minutes, 2)}</p>\n <div className=\"truncate\">{bannerDate?.minute || 'Mins'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u79D2 */}\n <div className={cn(baseClass, 'time-seconds-box')}>\n <p className={textClass}>{pad(seconds, 2)}</p>\n <div className=\"truncate\">{bannerDate?.second || 'Secs'}</div>\n </div>\n </div>\n )\n}\n\nexport default CountdownByEndDate\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Countdown_exports", "__export", "CountdownByEndDate", "Countdown_default", "__toCommonJS", "import_jsx_runtime", "import_helpers", "import_react", "pad", "len", "baseClass", "textClass", "endDate", "endDate_tz", "locale", "dateFormat", "onExpire", "getDefaultDateLabels", "safeStringToObject", "str", "jsonStr", "bannerDate", "targetMsRef", "remainingMs", "setRemainingMs", "t", "hidden", "setHidden", "expiredCalled", "tick", "now", "rem", "id", "totalSeconds", "seconds", "totalMinutes", "minutes", "totalHours", "hours", "days", "displayTz", "formattedTarget", "tms", "dt"]
|
|
7
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { CountdownConfig } from './types.js';
|
|
3
|
-
import type { Theme } from '../../types/props.js';
|
|
4
|
-
interface CountdownProps {
|
|
5
|
-
config: CountdownConfig;
|
|
6
|
-
className?: string;
|
|
7
|
-
onCountdownEnd?: () => void;
|
|
8
|
-
theme?: Theme;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Countdown - 倒计时组件
|
|
12
|
-
*/
|
|
13
|
-
declare const Countdown: React.ForwardRefExoticComponent<CountdownProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
-
export default Countdown;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";"use client";var S=Object.create;var p=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var s in t)p(e,s,{get:t[s],enumerable:!0})},v=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of V(t))!F.call(e,a)&&a!==s&&p(e,a,{get:()=>t[a],enumerable:!(n=D(t,a))||n.enumerable});return e};var w=(e,t,s)=>(s=e!=null?S(j(e)):{},v(t||!e||!e.__esModule?p(s,"default",{value:e,enumerable:!0}):s,e)),I=e=>v(p({},"__esModule",{value:!0}),e);var U={};H(U,{default:()=>P});module.exports=I(U);var o=require("react/jsx-runtime"),i=w(require("react")),b=w(require("dayjs")),h=require("../../helpers/utils.js"),y=require("class-variance-authority");const T=e=>{const t=(0,b.default)(),n=(0,b.default)(e).diff(t,"second");if(n<=0)return{days:0,hours:0,minutes:0,seconds:0};const a=Math.floor(n/(24*60*60)),c=Math.floor(n%(24*60*60)/(60*60)),g=Math.floor(n%(60*60)/60),x=n%60;return{days:a,hours:c,minutes:g,seconds:x}},R=(0,y.cva)("lg-desktop:size-12 lg-desktop:px-1 flex size-10 flex-col items-center justify-center px-[2px] text-center",{variants:{theme:{light:"bg-info-primary",dark:"bg-[#f5f6f7]"}},defaultVariants:{theme:"light"}}),k=(0,y.cva)("",{variants:{theme:{light:"text-white",dark:"text-[#080A0F]"}},defaultVariants:{theme:"light"}}),z=({value:e,label:t,theme:s="light"})=>(0,o.jsxs)("div",{className:R({theme:s}),children:[(0,o.jsx)("p",{className:(0,h.cn)("lg-desktop:text-2xl text-[20px] font-bold leading-[1.2] tracking-[-0.96px]",k({theme:s})),children:String(e).padStart(2,"0")}),(0,o.jsx)("p",{className:(0,h.cn)("mt-[-6px] text-[12px] font-bold leading-[1.4] tracking-[-0.24px]",k({theme:s})),children:t})]}),E=()=>(0,o.jsx)("p",{className:"lg-desktop:text-2xl text-info-primary text-center text-xl font-bold leading-[1.2] tracking-[-0.96px]",children:":"}),C=i.default.forwardRef(({config:e,className:t,onCountdownEnd:s,theme:n="light"},a)=>{const{targetDate:c,showDays:g=!0,showHours:x=!0,showMinutes:L=!0,showSeconds:N=!0,labels:m={}}=e,[d,M]=(0,i.useState)(()=>T(c));(0,i.useEffect)(()=>{const u=setInterval(()=>{const r=T(c);M(r),r.days===0&&r.hours===0&&r.minutes===0&&r.seconds===0&&(s?.(),clearInterval(u))},1e3);return()=>clearInterval(u)},[c,s]);const f={days:m.days||"Day",hours:m.hours||"Hours",minutes:m.minutes||"Mins",seconds:m.seconds||"Secs"},l=[];return g&&l.push({value:d.days,label:f.days}),x&&l.push({value:d.hours,label:f.hours}),L&&l.push({value:d.minutes,label:f.minutes}),N&&l.push({value:d.seconds,label:f.seconds}),(0,o.jsx)("div",{ref:a,className:(0,h.cn)("flex items-center gap-1",t),children:l.map((u,r)=>(0,o.jsxs)(i.default.Fragment,{children:[(0,o.jsx)(z,{value:u.value,label:u.label,theme:n}),r<l.length-1&&(0,o.jsx)(E,{})]},u.label))})});C.displayName="Countdown";var P=C;
|
|
2
|
-
//# sourceMappingURL=Countdown.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/biz-components/Title/Countdown.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport React, { useState, useEffect } from 'react'\nimport dayjs from 'dayjs'\nimport { cn } from '../../helpers/utils.js'\nimport { cva } from 'class-variance-authority'\nimport type { CountdownConfig } from './types.js'\nimport type { Theme } from '../../types/props.js'\n\ninterface CountdownProps {\n config: CountdownConfig\n className?: string\n onCountdownEnd?: () => void\n theme?: Theme\n}\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\n/**\n * \u8BA1\u7B97\u5269\u4F59\u65F6\u95F4\n */\nconst calculateTimeLeft = (targetDate: string): TimeLeft => {\n const now = dayjs()\n const target = dayjs(targetDate)\n const diff = target.diff(now, 'second')\n\n if (diff <= 0) {\n return { days: 0, hours: 0, minutes: 0, seconds: 0 }\n }\n\n const days = Math.floor(diff / (24 * 60 * 60))\n const hours = Math.floor((diff % (24 * 60 * 60)) / (60 * 60))\n const minutes = Math.floor((diff % (60 * 60)) / 60)\n const seconds = diff % 60\n\n return { days, hours, minutes, seconds }\n}\n\n/**\n * \u5012\u8BA1\u65F6\u6570\u5B57\u5757\u80CC\u666F\u8272\u6837\u5F0F\u53D8\u4F53\n */\nconst countdownUnitVariants = cva(\n 'lg-desktop:size-12 lg-desktop:px-1 flex size-10 flex-col items-center justify-center px-[2px] text-center',\n {\n variants: {\n theme: {\n light: 'bg-info-primary',\n dark: 'bg-[#f5f6f7]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\n/**\n * \u5012\u8BA1\u65F6\u6587\u5B57\u989C\u8272\u6837\u5F0F\u53D8\u4F53\n */\nconst countdownTextVariants = cva('', {\n variants: {\n theme: {\n light: 'text-white',\n dark: 'text-[#080A0F]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\n/**\n * \u5012\u8BA1\u65F6\u6570\u5B57\u5757\u7EC4\u4EF6\n */\nconst CountdownUnit = ({ value, label, theme = 'light' }: { value: number; label: string; theme?: Theme }) => {\n return (\n <div className={countdownUnitVariants({ theme })}>\n <p\n className={cn(\n 'lg-desktop:text-2xl text-[20px] font-bold leading-[1.2] tracking-[-0.96px]',\n countdownTextVariants({ theme })\n )}\n >\n {String(value).padStart(2, '0')}\n </p>\n <p\n className={cn(\n 'mt-[-6px] text-[12px] font-bold leading-[1.4] tracking-[-0.24px]',\n countdownTextVariants({ theme })\n )}\n >\n {label}\n </p>\n </div>\n )\n}\n\n/**\n * \u5012\u8BA1\u65F6\u5206\u9694\u7B26\n */\nconst CountdownSeparator = () => {\n return (\n <p className=\"lg-desktop:text-2xl text-info-primary text-center text-xl font-bold leading-[1.2] tracking-[-0.96px]\">\n :\n </p>\n )\n}\n\n/**\n * Countdown - \u5012\u8BA1\u65F6\u7EC4\u4EF6\n */\nconst Countdown = React.forwardRef<HTMLDivElement, CountdownProps>(\n ({ config, className, onCountdownEnd, theme = 'light' }, ref) => {\n const {\n targetDate,\n showDays = true,\n showHours = true,\n showMinutes = true,\n showSeconds = true,\n labels = {},\n } = config\n\n const [timeLeft, setTimeLeft] = useState<TimeLeft>(() => calculateTimeLeft(targetDate))\n\n useEffect(() => {\n const timer = setInterval(() => {\n const newTimeLeft = calculateTimeLeft(targetDate)\n setTimeLeft(newTimeLeft)\n\n // \u68C0\u67E5\u5012\u8BA1\u65F6\u662F\u5426\u7ED3\u675F\n if (\n newTimeLeft.days === 0 &&\n newTimeLeft.hours === 0 &&\n newTimeLeft.minutes === 0 &&\n newTimeLeft.seconds === 0\n ) {\n onCountdownEnd?.()\n clearInterval(timer)\n }\n }, 1000)\n\n return () => clearInterval(timer)\n }, [targetDate, onCountdownEnd])\n\n const defaultLabels = {\n days: labels.days || 'Day',\n hours: labels.hours || 'Hours',\n minutes: labels.minutes || 'Mins',\n seconds: labels.seconds || 'Secs',\n }\n\n const units = []\n if (showDays) units.push({ value: timeLeft.days, label: defaultLabels.days })\n if (showHours) units.push({ value: timeLeft.hours, label: defaultLabels.hours })\n if (showMinutes) units.push({ value: timeLeft.minutes, label: defaultLabels.minutes })\n if (showSeconds) units.push({ value: timeLeft.seconds, label: defaultLabels.seconds })\n\n return (\n <div ref={ref} className={cn('flex items-center gap-1', className)}>\n {units.map((unit, index) => (\n <React.Fragment key={unit.label}>\n <CountdownUnit value={unit.value} label={unit.label} theme={theme} />\n {index < units.length - 1 && <CountdownSeparator />}\n </React.Fragment>\n ))}\n </div>\n )\n }\n)\n\nCountdown.displayName = 'Countdown'\n\nexport default Countdown\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Countdown_exports", "__export", "Countdown_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_dayjs", "import_utils", "import_class_variance_authority", "calculateTimeLeft", "targetDate", "now", "dayjs", "diff", "days", "hours", "minutes", "seconds", "countdownUnitVariants", "countdownTextVariants", "CountdownUnit", "value", "label", "theme", "CountdownSeparator", "Countdown", "React", "config", "className", "onCountdownEnd", "ref", "showDays", "showHours", "showMinutes", "showSeconds", "labels", "timeLeft", "setTimeLeft", "timer", "newTimeLeft", "defaultLabels", "units", "unit", "index"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as o}from"react/jsx-runtime";import{cn as i}from"../../helpers/index.js";import{useEffect as M,useRef as P,useState as S,useMemo as W}from"react";const c=(a,u=2)=>String(Math.abs(a)).padStart(u,"0"),l="h-full flex-1 max-w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box",d="w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold whitespace-nowrap",Z=({endDate:a,endDate_tz:u,locale:k,dateFormat:m,onExpire:x})=>{const v=()=>({day:"Day",hour:"Hours",minute:"Mins",second:"Secs"});function C(t){try{let n=t?.trim?.();return!n?.startsWith?.("{")||!n?.endsWith?.("}")?{}:(n=n?.replace?.(/(\w+)\s*:/g,'"$1":'),JSON.parse(n))}catch{return v()}}const r=W(()=>m?C(m):v(),[m]),s=P(Date.parse(a)),[I,N]=S(()=>{const t=s.current;return isNaN(t)?0:Math.max(0,t-Date.now())}),[f,h]=S(()=>{const t=s.current;return!isNaN(t)&&t<=Date.now()});M(()=>{s.current=Date.parse(a),N(isNaN(s.current)?0:Math.max(0,s.current-Date.now()));const t=s.current;h(!isNaN(t)&&t<=Date.now())},[a]),M(()=>{if(f||isNaN(s.current))return;let t=!1;const n=()=>{const F=Date.now(),y=Math.max(0,s.current-F);N(y),y<=0&&!t&&(t=!0,h(!0),x?.())};n();const E=window.setInterval(n,1e3);return()=>clearInterval(E)},[x,f]);const g=Math.floor(I/1e3),R=g%60,w=Math.floor(g/60),T=w%60,b=Math.floor(w/60),H=b%24,O=Math.floor(b/24),z=u||Intl.DateTimeFormat().resolvedOptions().timeZone;let D="\u2014";const p=s.current;if(!isNaN(p))try{const t=new Date(p);D=new Intl.DateTimeFormat(k||navigator.language,{timeZone:z,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(t)}catch{D=new Date(p).toISOString()}return f?null:o("div",{className:"countdown-box flex w-full items-center gap-1","aria-live":"polite",children:[o("div",{className:i(l,"time-days-box"),children:[e("p",{className:d,children:c(O,2)}),e("div",{className:"truncate",children:r?.day||"Day"})]}),e("div",{className:"text-info-white text-2xl font-bold",children:":"}),o("div",{className:i(l,"time-hours-box"),children:[e("p",{className:d,children:c(H,2)}),e("div",{className:"truncate",children:r?.hour||"Hours"})]}),e("div",{className:"text-info-white text-2xl font-bold",children:":"}),o("div",{className:i(l,"time-minutes-box"),children:[e("p",{className:d,children:c(T,2)}),e("div",{className:"truncate",children:r?.minute||"Mins"})]}),e("div",{className:"text-info-white text-2xl font-bold",children:":"}),o("div",{className:i(l,"time-seconds-box"),children:[e("p",{className:d,children:c(R,2)}),e("div",{className:"truncate",children:r?.second||"Secs"})]})]})};var L=Z;export{Z as CountdownByEndDate,L as default};
|
|
2
|
-
//# sourceMappingURL=Countdown.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/biz-components/HeroBanner/Countdown.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport { cn } from '../../helpers/index.js'\nimport React, { useEffect, useRef, useState, useMemo } from 'react'\n\ntype Props = {\n endDate: string // ISO UTC \u5B57\u7B26\u4E32\uFF0C\u4F8B\u5982 \"2025-11-02T07:42:00.000Z\"\n endDate_tz?: string // \u65F6\u533A\uFF0C\u4F8B\u5982 \"Asia/Dhaka\"\uFF08\u53EF\u9009\uFF09\n locale?: string // \u683C\u5F0F\u5316\u7528\u7684 locale\uFF0C\u9ED8\u8BA4 navigator.language\n dateFormat?: any\n onExpire?: () => void // \u5230\u671F\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n}\n\nconst pad = (n: number, len = 2) => String(Math.abs(n)).padStart(len, '0')\n\nconst baseClass =\n 'h-full flex-1 max-w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box'\n\nconst textClass =\n 'w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold whitespace-nowrap'\n\nexport const CountdownByEndDate: React.FC<Props> = ({ endDate, endDate_tz, locale, dateFormat, onExpire }) => {\n const getDefaultDateLabels = () => ({\n day: 'Day',\n hour: 'Hours',\n minute: 'Mins',\n second: 'Secs',\n })\n\n function safeStringToObject(str: string) {\n try {\n let jsonStr = str?.trim?.()\n if (!jsonStr?.startsWith?.('{') || !jsonStr?.endsWith?.('}')) {\n return {}\n }\n jsonStr = jsonStr?.replace?.(/(\\w+)\\s*:/g, '\"$1\":')\n return JSON.parse(jsonStr)\n } catch (err) {\n return getDefaultDateLabels()\n }\n }\n\n const bannerDate = useMemo(() => {\n if (!dateFormat) return getDefaultDateLabels()\n return safeStringToObject(dateFormat)\n }, [dateFormat])\n\n // \u89E3\u6790\u76EE\u6807\u65F6\u95F4\uFF08\u4F7F\u7528 provided ISO\uFF0C\u82E5\u975E\u6CD5\u5219\u4E3A NaN\uFF09\n const targetMsRef = useRef<number>(Date.parse(endDate))\n const [remainingMs, setRemainingMs] = useState<number>(() => {\n const t = targetMsRef.current\n return isNaN(t) ? 0 : Math.max(0, t - Date.now())\n })\n // \u4EC5\u5728\u521D\u59CB\u65F6\u5224\u65AD\u662F\u5426\u5DF2\u8FC7\u671F\uFF1A\u82E5\u5DF2\u8FC7\u671F\u5219\u9690\u85CF\u7EC4\u4EF6\u5E76\u4E0D\u7EE7\u7EED\u8BA1\u65F6\n const [hidden, setHidden] = useState<boolean>(() => {\n const t = targetMsRef.current\n return !isNaN(t) && t <= Date.now()\n })\n\n // \u82E5 props.endDate \u6539\u53D8\uFF0C\u66F4\u65B0 ref \u4E0E remaining\n useEffect(() => {\n targetMsRef.current = Date.parse(endDate)\n setRemainingMs(isNaN(targetMsRef.current) ? 0 : Math.max(0, targetMsRef.current - Date.now()))\n // \u5F53 endDate \u66F4\u65B0\u65F6\uFF0C\u4EC5\u8FDB\u884C\u4E00\u6B21\u662F\u5426\u8FC7\u671F\u7684\u5224\u65AD\uFF0C\u7528\u4E8E\u51B3\u5B9A\u662F\u5426\u9690\u85CF\n const t = targetMsRef.current\n setHidden(!isNaN(t) && t <= Date.now())\n }, [endDate])\n\n // Tick \u6BCF\u79D2\u66F4\u65B0\u5269\u4F59\u65F6\u95F4\n useEffect(() => {\n if (hidden) return // \u521D\u59CB\u5DF2\u8FC7\u671F\u5219\u4E0D\u542F\u52A8\u8BA1\u65F6\u5668\n if (isNaN(targetMsRef.current)) return // \u65E0\u6548\u65E5\u671F\u4E0D\u542F\u52A8\u8BA1\u65F6\u5668\n let expiredCalled = false\n const tick = () => {\n const now = Date.now()\n const rem = Math.max(0, targetMsRef.current - now)\n setRemainingMs(rem)\n if (rem <= 0 && !expiredCalled) {\n expiredCalled = true\n setHidden(true) // \u5230\u70B9\u540E\u9690\u85CF\u7EC4\u4EF6\n onExpire?.()\n }\n }\n tick() // \u7ACB\u5373\u540C\u6B65\u4E00\u6B21\n const id = window.setInterval(tick, 1000)\n return () => clearInterval(id)\n }, [onExpire, hidden])\n\n // \u8BA1\u7B97\u5929/\u65F6/\u5206/\u79D2\n const totalSeconds = Math.floor(remainingMs / 1000)\n const seconds = totalSeconds % 60\n const totalMinutes = Math.floor(totalSeconds / 60)\n const minutes = totalMinutes % 60\n const totalHours = Math.floor(totalMinutes / 60)\n const hours = totalHours % 24\n const days = Math.floor(totalHours / 24)\n\n // \u683C\u5F0F\u5316\u76EE\u6807\u65F6\u95F4\u5E76\u663E\u793A\u5176\u65F6\u533A\uFF08\u4F7F\u7528 endDate_tz \u6216\u8005\u6D4F\u89C8\u5668\u65F6\u533A\uFF09\n const displayTz = endDate_tz || Intl.DateTimeFormat().resolvedOptions().timeZone\n let formattedTarget = '\u2014'\n const tms = targetMsRef.current\n if (!isNaN(tms)) {\n try {\n const dt = new Date(tms)\n const fmt = new Intl.DateTimeFormat(locale || navigator.language, {\n timeZone: displayTz,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n formattedTarget = fmt.format(dt)\n } catch (e) {\n // \u82E5\u4F20\u5165\u4E86\u975E\u6CD5\u65F6\u533A\uFF0CIntl \u53EF\u80FD\u629B\u9519\uFF1B\u56DE\u9000\u663E\u793A UTC \u65F6\u95F4\n formattedTarget = new Date(tms).toISOString()\n }\n }\n\n if (hidden) return null\n\n return (\n <div className=\"countdown-box flex w-full items-center gap-1\" aria-live=\"polite\">\n {/* \u5929 */}\n <div className={cn(baseClass, 'time-days-box')}>\n <p className={textClass}>{pad(days, 2)}</p>\n <div className=\"truncate\">{bannerDate?.day || 'Day'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u65F6 */}\n <div className={cn(baseClass, 'time-hours-box')}>\n <p className={textClass}>{pad(hours, 2)}</p>\n <div className=\"truncate\">{bannerDate?.hour || 'Hours'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u5206 */}\n <div className={cn(baseClass, 'time-minutes-box')}>\n <p className={textClass}>{pad(minutes, 2)}</p>\n <div className=\"truncate\">{bannerDate?.minute || 'Mins'}</div>\n </div>\n <div className=\"text-info-white text-2xl font-bold\">:</div>\n {/* \u79D2 */}\n <div className={cn(baseClass, 'time-seconds-box')}>\n <p className={textClass}>{pad(seconds, 2)}</p>\n <div className=\"truncate\">{bannerDate?.second || 'Secs'}</div>\n </div>\n </div>\n )\n}\n\nexport default CountdownByEndDate\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["jsx", "jsxs", "cn", "useEffect", "useRef", "useState", "useMemo", "pad", "n", "len", "baseClass", "textClass", "CountdownByEndDate", "endDate", "endDate_tz", "locale", "dateFormat", "onExpire", "getDefaultDateLabels", "safeStringToObject", "str", "jsonStr", "bannerDate", "targetMsRef", "remainingMs", "setRemainingMs", "hidden", "setHidden", "expiredCalled", "tick", "now", "rem", "id", "totalSeconds", "seconds", "totalMinutes", "minutes", "totalHours", "hours", "days", "displayTz", "formattedTarget", "tms", "dt", "Countdown_default"]
|
|
7
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { CountdownConfig } from './types.js';
|
|
3
|
-
import type { Theme } from '../../types/props.js';
|
|
4
|
-
interface CountdownProps {
|
|
5
|
-
config: CountdownConfig;
|
|
6
|
-
className?: string;
|
|
7
|
-
onCountdownEnd?: () => void;
|
|
8
|
-
theme?: Theme;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Countdown - 倒计时组件
|
|
12
|
-
*/
|
|
13
|
-
declare const Countdown: React.ForwardRefExoticComponent<CountdownProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
-
export default Countdown;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";import{jsx as a,jsxs as T}from"react/jsx-runtime";import g,{useState as N,useEffect as M}from"react";import x from"dayjs";import{cn as h}from"../../helpers/utils.js";import{cva as b}from"class-variance-authority";const y=r=>{const i=x(),t=x(r).diff(i,"second");if(t<=0)return{days:0,hours:0,minutes:0,seconds:0};const d=Math.floor(t/(24*60*60)),l=Math.floor(t%(24*60*60)/(60*60)),f=Math.floor(t%(60*60)/60),p=t%60;return{days:d,hours:l,minutes:f,seconds:p}},S=b("lg-desktop:size-12 lg-desktop:px-1 flex size-10 flex-col items-center justify-center px-[2px] text-center",{variants:{theme:{light:"bg-info-primary",dark:"bg-[#f5f6f7]"}},defaultVariants:{theme:"light"}}),v=b("",{variants:{theme:{light:"text-white",dark:"text-[#080A0F]"}},defaultVariants:{theme:"light"}}),D=({value:r,label:i,theme:e="light"})=>T("div",{className:S({theme:e}),children:[a("p",{className:h("lg-desktop:text-2xl text-[20px] font-bold leading-[1.2] tracking-[-0.96px]",v({theme:e})),children:String(r).padStart(2,"0")}),a("p",{className:h("mt-[-6px] text-[12px] font-bold leading-[1.4] tracking-[-0.24px]",v({theme:e})),children:i})]}),V=()=>a("p",{className:"lg-desktop:text-2xl text-info-primary text-center text-xl font-bold leading-[1.2] tracking-[-0.96px]",children:":"}),w=g.forwardRef(({config:r,className:i,onCountdownEnd:e,theme:t="light"},d)=>{const{targetDate:l,showDays:f=!0,showHours:p=!0,showMinutes:k=!0,showSeconds:C=!0,labels:u={}}=r,[c,L]=N(()=>y(l));M(()=>{const o=setInterval(()=>{const s=y(l);L(s),s.days===0&&s.hours===0&&s.minutes===0&&s.seconds===0&&(e?.(),clearInterval(o))},1e3);return()=>clearInterval(o)},[l,e]);const m={days:u.days||"Day",hours:u.hours||"Hours",minutes:u.minutes||"Mins",seconds:u.seconds||"Secs"},n=[];return f&&n.push({value:c.days,label:m.days}),p&&n.push({value:c.hours,label:m.hours}),k&&n.push({value:c.minutes,label:m.minutes}),C&&n.push({value:c.seconds,label:m.seconds}),a("div",{ref:d,className:h("flex items-center gap-1",i),children:n.map((o,s)=>T(g.Fragment,{children:[a(D,{value:o.value,label:o.label,theme:t}),s<n.length-1&&a(V,{})]},o.label))})});w.displayName="Countdown";var R=w;export{R as default};
|
|
2
|
-
//# sourceMappingURL=Countdown.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/biz-components/Title/Countdown.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\nimport React, { useState, useEffect } from 'react'\nimport dayjs from 'dayjs'\nimport { cn } from '../../helpers/utils.js'\nimport { cva } from 'class-variance-authority'\nimport type { CountdownConfig } from './types.js'\nimport type { Theme } from '../../types/props.js'\n\ninterface CountdownProps {\n config: CountdownConfig\n className?: string\n onCountdownEnd?: () => void\n theme?: Theme\n}\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\n/**\n * \u8BA1\u7B97\u5269\u4F59\u65F6\u95F4\n */\nconst calculateTimeLeft = (targetDate: string): TimeLeft => {\n const now = dayjs()\n const target = dayjs(targetDate)\n const diff = target.diff(now, 'second')\n\n if (diff <= 0) {\n return { days: 0, hours: 0, minutes: 0, seconds: 0 }\n }\n\n const days = Math.floor(diff / (24 * 60 * 60))\n const hours = Math.floor((diff % (24 * 60 * 60)) / (60 * 60))\n const minutes = Math.floor((diff % (60 * 60)) / 60)\n const seconds = diff % 60\n\n return { days, hours, minutes, seconds }\n}\n\n/**\n * \u5012\u8BA1\u65F6\u6570\u5B57\u5757\u80CC\u666F\u8272\u6837\u5F0F\u53D8\u4F53\n */\nconst countdownUnitVariants = cva(\n 'lg-desktop:size-12 lg-desktop:px-1 flex size-10 flex-col items-center justify-center px-[2px] text-center',\n {\n variants: {\n theme: {\n light: 'bg-info-primary',\n dark: 'bg-[#f5f6f7]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\n/**\n * \u5012\u8BA1\u65F6\u6587\u5B57\u989C\u8272\u6837\u5F0F\u53D8\u4F53\n */\nconst countdownTextVariants = cva('', {\n variants: {\n theme: {\n light: 'text-white',\n dark: 'text-[#080A0F]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\n/**\n * \u5012\u8BA1\u65F6\u6570\u5B57\u5757\u7EC4\u4EF6\n */\nconst CountdownUnit = ({ value, label, theme = 'light' }: { value: number; label: string; theme?: Theme }) => {\n return (\n <div className={countdownUnitVariants({ theme })}>\n <p\n className={cn(\n 'lg-desktop:text-2xl text-[20px] font-bold leading-[1.2] tracking-[-0.96px]',\n countdownTextVariants({ theme })\n )}\n >\n {String(value).padStart(2, '0')}\n </p>\n <p\n className={cn(\n 'mt-[-6px] text-[12px] font-bold leading-[1.4] tracking-[-0.24px]',\n countdownTextVariants({ theme })\n )}\n >\n {label}\n </p>\n </div>\n )\n}\n\n/**\n * \u5012\u8BA1\u65F6\u5206\u9694\u7B26\n */\nconst CountdownSeparator = () => {\n return (\n <p className=\"lg-desktop:text-2xl text-info-primary text-center text-xl font-bold leading-[1.2] tracking-[-0.96px]\">\n :\n </p>\n )\n}\n\n/**\n * Countdown - \u5012\u8BA1\u65F6\u7EC4\u4EF6\n */\nconst Countdown = React.forwardRef<HTMLDivElement, CountdownProps>(\n ({ config, className, onCountdownEnd, theme = 'light' }, ref) => {\n const {\n targetDate,\n showDays = true,\n showHours = true,\n showMinutes = true,\n showSeconds = true,\n labels = {},\n } = config\n\n const [timeLeft, setTimeLeft] = useState<TimeLeft>(() => calculateTimeLeft(targetDate))\n\n useEffect(() => {\n const timer = setInterval(() => {\n const newTimeLeft = calculateTimeLeft(targetDate)\n setTimeLeft(newTimeLeft)\n\n // \u68C0\u67E5\u5012\u8BA1\u65F6\u662F\u5426\u7ED3\u675F\n if (\n newTimeLeft.days === 0 &&\n newTimeLeft.hours === 0 &&\n newTimeLeft.minutes === 0 &&\n newTimeLeft.seconds === 0\n ) {\n onCountdownEnd?.()\n clearInterval(timer)\n }\n }, 1000)\n\n return () => clearInterval(timer)\n }, [targetDate, onCountdownEnd])\n\n const defaultLabels = {\n days: labels.days || 'Day',\n hours: labels.hours || 'Hours',\n minutes: labels.minutes || 'Mins',\n seconds: labels.seconds || 'Secs',\n }\n\n const units = []\n if (showDays) units.push({ value: timeLeft.days, label: defaultLabels.days })\n if (showHours) units.push({ value: timeLeft.hours, label: defaultLabels.hours })\n if (showMinutes) units.push({ value: timeLeft.minutes, label: defaultLabels.minutes })\n if (showSeconds) units.push({ value: timeLeft.seconds, label: defaultLabels.seconds })\n\n return (\n <div ref={ref} className={cn('flex items-center gap-1', className)}>\n {units.map((unit, index) => (\n <React.Fragment key={unit.label}>\n <CountdownUnit value={unit.value} label={unit.label} theme={theme} />\n {index < units.length - 1 && <CountdownSeparator />}\n </React.Fragment>\n ))}\n </div>\n )\n }\n)\n\nCountdown.displayName = 'Countdown'\n\nexport default Countdown\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["jsx", "jsxs", "React", "useState", "useEffect", "dayjs", "cn", "cva", "calculateTimeLeft", "targetDate", "now", "diff", "days", "hours", "minutes", "seconds", "countdownUnitVariants", "countdownTextVariants", "CountdownUnit", "value", "label", "theme", "CountdownSeparator", "Countdown", "config", "className", "onCountdownEnd", "ref", "showDays", "showHours", "showMinutes", "showSeconds", "labels", "timeLeft", "setTimeLeft", "timer", "newTimeLeft", "defaultLabels", "units", "unit", "index", "Countdown_default"]
|
|
7
|
-
}
|