@xiping/react-components 1.0.54 → 1.0.57

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.
Files changed (149) hide show
  1. package/dist/cjs/components/blur-text/BlurText.d.ts +16 -0
  2. package/dist/cjs/components/blur-text/BlurText.js +1 -0
  3. package/dist/cjs/components/blur-text/index.d.ts +2 -0
  4. package/dist/cjs/components/button/Button.css +1 -0
  5. package/dist/cjs/components/button/Button.js +1 -1
  6. package/dist/cjs/components/comic-text/ComicText.css +1 -0
  7. package/dist/cjs/components/comic-text/ComicText.js +2 -2
  8. package/dist/cjs/components/dock/Duck.css +1 -0
  9. package/dist/cjs/components/dock/Duck.d.ts +2 -4
  10. package/dist/cjs/components/dock/Duck.js +1 -1
  11. package/dist/cjs/components/flip-text/FlipText.css +1 -0
  12. package/dist/cjs/components/flip-text/FlipText.js +1 -1
  13. package/dist/cjs/components/gradient-text/index.css +1 -0
  14. package/dist/cjs/components/gradient-text/index.js +1 -1
  15. package/dist/cjs/components/hyper-text/HyperText.css +1 -0
  16. package/dist/cjs/components/hyper-text/index.js +1 -1
  17. package/dist/cjs/components/image-compare/ImageCompare.css +1 -0
  18. package/dist/cjs/components/image-compare/ImageCompare.d.ts +4 -2
  19. package/dist/cjs/components/image-compare/ImageCompare.js +1 -1
  20. package/dist/cjs/components/image-viewer/ImageThumbnails.css +1 -0
  21. package/dist/cjs/components/image-viewer/ImageThumbnails.js +1 -1
  22. package/dist/cjs/components/image-viewer/ImageViewer.css +1 -0
  23. package/dist/cjs/components/image-viewer/ImageViewer.js +1 -1
  24. package/dist/cjs/components/message/Message.css +1 -0
  25. package/dist/cjs/components/message/Message.js +1 -1
  26. package/dist/cjs/components/pointer/Pointer.css +1 -0
  27. package/dist/cjs/components/pointer/Pointer.js +1 -1
  28. package/dist/cjs/components/scratch-to-reveal/ScratchToReveal.css +1 -0
  29. package/dist/cjs/components/scratch-to-reveal/ScratchToReveal.js +1 -1
  30. package/dist/cjs/components/shimmer-button/ShimmerButton.css +1 -0
  31. package/dist/cjs/components/shimmer-button/ShimmerButton.js +1 -1
  32. package/dist/cjs/components/shiny-button/ShinyButton.css +1 -0
  33. package/dist/cjs/components/shiny-button/ShinyButton.js +1 -1
  34. package/dist/cjs/components/shiny-text/ShinyText.css +1 -0
  35. package/dist/cjs/components/shiny-text/ShinyText.d.ts +16 -0
  36. package/dist/cjs/components/shiny-text/ShinyText.js +1 -0
  37. package/dist/cjs/components/shiny-text/index.d.ts +2 -0
  38. package/dist/cjs/components/sparkles-text/SparklesText.css +1 -0
  39. package/dist/cjs/components/sparkles-text/SparklesText.js +1 -1
  40. package/dist/cjs/components/split-text/SplitText.css +1 -0
  41. package/dist/cjs/components/split-text/SplitText.js +1 -1
  42. package/dist/cjs/components/subtitle-player/CurrentMode.css +1 -0
  43. package/dist/cjs/components/subtitle-player/CurrentMode.d.ts +2 -0
  44. package/dist/cjs/components/subtitle-player/CurrentMode.js +2 -2
  45. package/dist/cjs/components/subtitle-player/LyricsMode.css +1 -0
  46. package/dist/cjs/components/subtitle-player/LyricsMode.d.ts +2 -0
  47. package/dist/cjs/components/subtitle-player/LyricsMode.js +2 -2
  48. package/dist/cjs/components/subtitle-player/SubtitlePlayer.css +1 -0
  49. package/dist/cjs/components/subtitle-player/SubtitlePlayer.d.ts +2 -0
  50. package/dist/cjs/components/subtitle-player/SubtitlePlayer.js +1 -1
  51. package/dist/cjs/components/text-animate/TextAnimate.css +1 -0
  52. package/dist/cjs/components/text-animate/TextAnimate.js +2 -2
  53. package/dist/cjs/components/text-type/TextType.css +1 -0
  54. package/dist/cjs/components/text-type/TextType.js +1 -1
  55. package/dist/cjs/components/txt-reader/index.module.css +1 -0
  56. package/dist/cjs/components/txt-reader/index.module.css.js +1 -1
  57. package/dist/cjs/components/typing-animation/index.css +1 -0
  58. package/dist/cjs/components/typing-animation/index.js +1 -1
  59. package/dist/cjs/components/variable-proximity/index.css +1 -0
  60. package/dist/cjs/components/variable-proximity/index.js +1 -1
  61. package/dist/cjs/components/video-dialog/VideoDialog.css +1 -0
  62. package/dist/cjs/components/video-dialog/VideoDialog.js +1 -1
  63. package/dist/cjs/components/video-subtitle-player/VideoSubtitlePlayer.css +1 -0
  64. package/dist/cjs/components/video-subtitle-player/VideoSubtitlePlayer.d.ts +1 -1
  65. package/dist/cjs/components/video-subtitle-player/VideoSubtitlePlayer.js +1 -1
  66. package/dist/cjs/index.d.ts +2 -1
  67. package/dist/cjs/index.js +1 -1
  68. package/dist/cjs/llms.txt +2 -13
  69. package/dist/cjs/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/dist/index.min.css +1 -0
  70. package/dist/es/components/blur-text/BlurText.d.ts +16 -0
  71. package/dist/es/components/blur-text/BlurText.js +77 -0
  72. package/dist/es/components/blur-text/index.d.ts +2 -0
  73. package/dist/es/components/button/Button.css +1 -0
  74. package/dist/es/components/button/Button.js +35 -46
  75. package/dist/es/components/comic-text/ComicText.css +1 -0
  76. package/dist/es/components/comic-text/ComicText.js +13 -12
  77. package/dist/es/components/dock/Duck.css +1 -0
  78. package/dist/es/components/dock/Duck.d.ts +2 -4
  79. package/dist/es/components/dock/Duck.js +60 -64
  80. package/dist/es/components/flip-text/FlipText.css +1 -0
  81. package/dist/es/components/flip-text/FlipText.js +8 -8
  82. package/dist/es/components/gradient-text/index.css +1 -0
  83. package/dist/es/components/gradient-text/index.js +9 -8
  84. package/dist/es/components/hyper-text/HyperText.css +1 -0
  85. package/dist/es/components/hyper-text/index.js +16 -13
  86. package/dist/es/components/image-compare/ImageCompare.css +1 -0
  87. package/dist/es/components/image-compare/ImageCompare.d.ts +4 -2
  88. package/dist/es/components/image-compare/ImageCompare.js +55 -48
  89. package/dist/es/components/image-viewer/ImageThumbnails.css +1 -0
  90. package/dist/es/components/image-viewer/ImageThumbnails.js +41 -42
  91. package/dist/es/components/image-viewer/ImageViewer.css +1 -0
  92. package/dist/es/components/image-viewer/ImageViewer.js +34 -35
  93. package/dist/es/components/message/Message.css +1 -0
  94. package/dist/es/components/message/Message.js +65 -54
  95. package/dist/es/components/pointer/Pointer.css +1 -0
  96. package/dist/es/components/pointer/Pointer.js +23 -25
  97. package/dist/es/components/scratch-to-reveal/ScratchToReveal.css +1 -0
  98. package/dist/es/components/scratch-to-reveal/ScratchToReveal.js +17 -16
  99. package/dist/es/components/shimmer-button/ShimmerButton.css +1 -0
  100. package/dist/es/components/shimmer-button/ShimmerButton.js +8 -8
  101. package/dist/es/components/shiny-button/ShinyButton.css +1 -0
  102. package/dist/es/components/shiny-button/ShinyButton.js +13 -13
  103. package/dist/es/components/shiny-text/ShinyText.css +1 -0
  104. package/dist/es/components/shiny-text/ShinyText.d.ts +16 -0
  105. package/dist/es/components/shiny-text/ShinyText.js +76 -0
  106. package/dist/es/components/shiny-text/index.d.ts +2 -0
  107. package/dist/es/components/sparkles-text/SparklesText.css +1 -0
  108. package/dist/es/components/sparkles-text/SparklesText.js +14 -14
  109. package/dist/es/components/split-text/SplitText.css +1 -0
  110. package/dist/es/components/split-text/SplitText.js +1 -1
  111. package/dist/es/components/subtitle-player/CurrentMode.css +1 -0
  112. package/dist/es/components/subtitle-player/CurrentMode.d.ts +2 -0
  113. package/dist/es/components/subtitle-player/CurrentMode.js +75 -40
  114. package/dist/es/components/subtitle-player/LyricsMode.css +1 -0
  115. package/dist/es/components/subtitle-player/LyricsMode.d.ts +2 -0
  116. package/dist/es/components/subtitle-player/LyricsMode.js +139 -57
  117. package/dist/es/components/subtitle-player/SubtitlePlayer.css +1 -0
  118. package/dist/es/components/subtitle-player/SubtitlePlayer.d.ts +2 -0
  119. package/dist/es/components/subtitle-player/SubtitlePlayer.js +63 -60
  120. package/dist/es/components/text-animate/TextAnimate.css +1 -0
  121. package/dist/es/components/text-animate/TextAnimate.js +57 -55
  122. package/dist/es/components/text-type/TextType.css +1 -0
  123. package/dist/es/components/text-type/TextType.js +24 -19
  124. package/dist/es/components/txt-reader/index.module.css +1 -0
  125. package/dist/es/components/txt-reader/index.module.css.js +1 -1
  126. package/dist/es/components/typing-animation/index.css +1 -0
  127. package/dist/es/components/typing-animation/index.js +12 -12
  128. package/dist/es/components/variable-proximity/index.css +1 -0
  129. package/dist/es/components/variable-proximity/index.js +19 -18
  130. package/dist/es/components/video-dialog/VideoDialog.css +1 -0
  131. package/dist/es/components/video-dialog/VideoDialog.js +1 -1
  132. package/dist/es/components/video-subtitle-player/VideoSubtitlePlayer.css +1 -0
  133. package/dist/es/components/video-subtitle-player/VideoSubtitlePlayer.d.ts +1 -1
  134. package/dist/es/components/video-subtitle-player/VideoSubtitlePlayer.js +83 -73
  135. package/dist/es/index.d.ts +2 -1
  136. package/dist/es/index.js +59 -60
  137. package/dist/es/llms.txt +2 -13
  138. package/dist/es/node_modules/.pnpm/xgplayer@3.0.23_core-js@3.47.0/node_modules/xgplayer/dist/index.min.css +1 -0
  139. package/package.json +16 -14
  140. package/dist/cjs/components/animated-list/AnimatedList.d.ts +0 -9
  141. package/dist/cjs/components/animated-list/AnimatedList.js +0 -1
  142. package/dist/cjs/components/animated-list/index.d.ts +0 -1
  143. package/dist/cjs/react-components.css +0 -1
  144. package/dist/cjs/utils/utils.js +0 -1
  145. package/dist/es/components/animated-list/AnimatedList.d.ts +0 -9
  146. package/dist/es/components/animated-list/AnimatedList.js +0 -44
  147. package/dist/es/components/animated-list/index.d.ts +0 -1
  148. package/dist/es/react-components.css +0 -1
  149. package/dist/es/utils/utils.js +0 -8
@@ -0,0 +1,16 @@
1
+ type BlurTextProps = {
2
+ text?: string;
3
+ delay?: number;
4
+ className?: string;
5
+ animateBy?: 'words' | 'letters';
6
+ direction?: 'top' | 'bottom';
7
+ threshold?: number;
8
+ rootMargin?: string;
9
+ animationFrom?: Record<string, string | number>;
10
+ animationTo?: Array<Record<string, string | number>>;
11
+ easing?: (t: number) => number;
12
+ onAnimationComplete?: () => void;
13
+ stepDuration?: number;
14
+ };
15
+ declare const BlurText: React.FC<BlurTextProps>;
16
+ export default BlurText;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("react/jsx-runtime"),C=require("motion/react"),l=require("react"),I=(n,a)=>{const p=new Set([...Object.keys(n),...a.flatMap(e=>Object.keys(e))]),r={};return p.forEach(e=>{r[e]=[n[e],...a.map(i=>i[e])]}),r},R=({text:n="",delay:a=200,className:p="",animateBy:r="words",direction:e="top",threshold:i=.1,rootMargin:y="0px",animationFrom:d,animationTo:w,easing:h=o=>o,onAnimationComplete:v,stepDuration:x=.35})=>{const o=r==="words"?n.split(" "):n.split(""),[g,j]=l.useState(!1),c=l.useRef(null);l.useEffect(()=>{if(!c.current)return;const s=new IntersectionObserver(([t])=>{t.isIntersecting&&(j(!0),s.unobserve(c.current))},{threshold:i,rootMargin:y});return s.observe(c.current),()=>s.disconnect()},[i,y]);const S=l.useMemo(()=>e==="top"?{filter:"blur(10px)",opacity:0,y:-50}:{filter:"blur(10px)",opacity:0,y:50},[e]),M=l.useMemo(()=>[{filter:"blur(5px)",opacity:.5,y:e==="top"?5:-5},{filter:"blur(0px)",opacity:1,y:0}],[e]),f=d??S,m=w??M,u=m.length+1,O=x*(u-1),T=Array.from({length:u},(s,t)=>u===1?0:t/(u-1));return b.jsx("p",{ref:c,className:p,style:{display:"flex",flexWrap:"wrap"},children:o.map((s,t)=>{const k=I(f,m),q={duration:O,times:T,delay:t*a/1e3,ease:h};return b.jsxs(C.motion.span,{initial:f,animate:g?k:f,transition:q,onAnimationComplete:t===o.length-1?v:void 0,style:{display:"inline-block",willChange:"transform, filter, opacity"},children:[s===" "?" ":s,r==="words"&&t<o.length-1&&" "]},t)})})};exports.default=R;
@@ -0,0 +1,2 @@
1
+ import { default as BlurText } from './BlurText';
2
+ export { BlurText };
@@ -0,0 +1 @@
1
+ .xiping-button{display:inline-flex;align-items:center;justify-content:center;border-radius:6px;font-weight:500;transition:all .2s ease;cursor:pointer;border:none;outline:none}.xiping-button:focus{outline:2px solid transparent;outline-offset:2px;box-shadow:0 0 0 3px #3b82f680}.xiping-button--small{padding:6px 12px;font-size:14px}.xiping-button--medium{padding:8px 16px;font-size:16px}.xiping-button--large{padding:12px 24px;font-size:18px}.xiping-button--primary{background-color:#2563eb;color:#fff}.xiping-button--primary:hover:not(:disabled){background-color:#1d4ed8}.xiping-button--primary:focus{box-shadow:0 0 0 3px #2563eb80}.xiping-button--secondary{background-color:#4b5563;color:#fff}.xiping-button--secondary:hover:not(:disabled){background-color:#374151}.xiping-button--secondary:focus{box-shadow:0 0 0 3px #4b556380}.xiping-button--outline{background-color:transparent;border:1px solid #d1d5db;color:#374151}.xiping-button--outline:hover:not(:disabled){background-color:#f9fafb}.xiping-button--outline:focus{box-shadow:0 0 0 3px #4b556380}.xiping-button--ghost{background-color:transparent;color:#374151}.xiping-button--ghost:hover:not(:disabled){background-color:#f3f4f6}.xiping-button--ghost:focus{box-shadow:0 0 0 3px #4b556380}.xiping-button--disabled{opacity:.5;cursor:not-allowed}.xiping-button--loading{cursor:wait}.xiping-button--full-width{width:100%}.xiping-button__icon-left{margin-right:8px}.xiping-button__icon-right{margin-left:8px}.xiping-button__spinner{margin-left:-4px;margin-right:8px;width:16px;height:16px;animation:xiping-spin 1s linear infinite}.xiping-button__spinner-circle{opacity:.25}.xiping-button__spinner-path{opacity:.75}@keyframes xiping-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("../../utils/utils.js"),f=({variant:n="primary",size:a="medium",className:l,children:c,leftIcon:t,rightIcon:s,isLoading:r=!1,isDisabled:o=!1,fullWidth:i=!1,type:u="button",...m})=>{const g="inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2",y={primary:"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500",secondary:"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500",outline:"border border-gray-300 bg-transparent hover:bg-gray-50 focus:ring-gray-500",ghost:"bg-transparent hover:bg-gray-100 focus:ring-gray-500"},b={small:"px-3 py-1.5 text-sm",medium:"px-4 py-2 text-base",large:"px-6 py-3 text-lg"},p=x.cn(g,y[n],b[a],{"opacity-50 cursor-not-allowed":o,"w-full":i,"cursor-wait":r},l);return e.jsxs("button",{type:u,className:p,disabled:o||r,...m,children:[r&&e.jsxs("svg",{className:"animate-spin -ml-1 mr-2 h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),!r&&t&&e.jsx("span",{className:"mr-2",children:t}),c,!r&&s&&e.jsx("span",{className:"ml-2",children:s})]})};exports.Button=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./Button.css');const t=require("react/jsx-runtime");;/* empty css */const b=({variant:l="primary",size:r="medium",className:o,children:u,leftIcon:e,rightIcon:i,isLoading:n=!1,isDisabled:s=!1,fullWidth:c=!1,type:a="button",...p})=>{const x=["xiping-button",`xiping-button--${l}`,`xiping-button--${r}`,s&&"xiping-button--disabled",c&&"xiping-button--full-width",n&&"xiping-button--loading",o].filter(Boolean).join(" ");return t.jsxs("button",{type:a,className:x,disabled:s||n,...p,children:[n&&t.jsxs("svg",{className:"xiping-button__spinner",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[t.jsx("circle",{className:"xiping-button__spinner-circle",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),t.jsx("path",{className:"xiping-button__spinner-path",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),!n&&e&&t.jsx("span",{className:"xiping-button__icon-left",children:e}),u,!n&&i&&t.jsx("span",{className:"xiping-button__icon-right",children:i})]})};exports.Button=b;
@@ -0,0 +1 @@
1
+ .xiping-comic-text{-webkit-user-select:none;-moz-user-select:none;user-select:none;text-align:center}
@@ -1,4 +1,4 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),i=require("../../utils/utils.js"),s=require("motion/react");function c({children:t,className:o,style:n,fontSize:e=5}){if(typeof t!="string")throw new Error("children must be a string");const r="#EF4444";return a.jsx(s.motion.div,{className:i.cn("select-none text-center",o),style:{fontSize:`${e}rem`,fontFamily:"'Bangers', 'Comic Sans MS', 'Impact', sans-serif",fontWeight:"900",WebkitTextStroke:`${e*.35}px #000000`,transform:"skewX(-10deg)",textTransform:"uppercase",filter:`
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./ComicText.css');const a=require("react/jsx-runtime"),n=require("motion/react"),s=require("clsx");;/* empty css */function c({children:t,className:o,style:i,fontSize:e=5}){if(typeof t!="string")throw new Error("children must be a string");const r="#EF4444";return a.jsx(n.motion.div,{className:s("xiping-comic-text",o),style:{fontSize:`${e}rem`,fontFamily:"'Bangers', 'Comic Sans MS', 'Impact', sans-serif",fontWeight:"900",WebkitTextStroke:`${e*.35}px #000000`,transform:"skewX(-10deg)",textTransform:"uppercase",filter:`
2
2
  drop-shadow(5px 5px 0px #000000)
3
3
  drop-shadow(3px 3px 0px ${r})
4
- `,backgroundColor:"#FACC15",backgroundImage:`radial-gradient(circle at 1px 1px, ${r} 1px, transparent 0)`,backgroundSize:"8px 8px",backgroundClip:"text",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent",...n},initial:{opacity:0,scale:.8,rotate:-2},animate:{opacity:1,scale:1,rotate:0},transition:{duration:.6,ease:[.175,.885,.32,1.275],type:"spring"},children:t})}exports.ComicText=c;
4
+ `,backgroundColor:"#FACC15",backgroundImage:`radial-gradient(circle at 1px 1px, ${r} 1px, transparent 0)`,backgroundSize:"8px 8px",backgroundClip:"text",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent",...i},initial:{opacity:0,scale:.8,rotate:-2},animate:{opacity:1,scale:1,rotate:0},transition:{duration:.6,ease:[.175,.885,.32,1.275],type:"spring"},children:t})}exports.ComicText=c;
@@ -0,0 +1 @@
1
+ .xiping-dock{margin-left:auto;margin-right:auto;margin-top:2rem;display:flex;height:58px;width:-moz-max-content;width:max-content;align-items:center;justify-content:center;gap:.5rem;border-radius:1rem;border:1px solid;padding:.5rem;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports (backdrop-filter: blur(12px)){.xiping-dock{background-color:#ffffff1a}.dark .xiping-dock{background-color:#0000001a}}.xiping-dock--top{align-items:flex-start}.xiping-dock--middle{align-items:center}.xiping-dock--bottom{align-items:flex-end}.xiping-dock-icon{display:flex;aspect-ratio:1 / 1;cursor:pointer;align-items:center;justify-content:center;border-radius:9999px}
@@ -1,7 +1,6 @@
1
- import { VariantProps } from 'class-variance-authority';
2
1
  import { MotionProps, MotionValue } from 'motion/react';
3
2
  import { default as React, PropsWithChildren } from 'react';
4
- export interface DockProps extends VariantProps<typeof dockVariants> {
3
+ export interface DockProps {
5
4
  className?: string;
6
5
  iconSize?: number;
7
6
  iconMagnification?: number;
@@ -9,7 +8,6 @@ export interface DockProps extends VariantProps<typeof dockVariants> {
9
8
  direction?: "top" | "middle" | "bottom";
10
9
  children: React.ReactNode;
11
10
  }
12
- declare const dockVariants: (props?: import('class-variance-authority/types').ClassProp) => string;
13
11
  declare const Dock: React.ForwardRefExoticComponent<DockProps & React.RefAttributes<HTMLDivElement>>;
14
12
  export interface DockIconProps extends Omit<MotionProps & React.HTMLAttributes<HTMLDivElement>, "children"> {
15
13
  size?: number;
@@ -24,4 +22,4 @@ declare const DockIcon: {
24
22
  ({ size, magnification, distance, mouseX, className, children, ...props }: DockIconProps): import("react/jsx-runtime").JSX.Element;
25
23
  displayName: string;
26
24
  };
27
- export { Dock, DockIcon, dockVariants };
25
+ export { Dock, DockIcon };
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react/jsx-runtime"),A=require("class-variance-authority"),t=require("motion/react"),r=require("react"),k=require("../../utils/utils.js"),x=40,y=60,I=140,D=A.cva("supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 mx-auto mt-8 flex h-[58px] w-max items-center justify-center gap-2 rounded-2xl border p-2 backdrop-blur-md"),M=r.forwardRef(({className:n,children:a,iconSize:c=x,iconMagnification:u=y,iconDistance:d=I,direction:s="middle",...l},i)=>{const o=t.useMotionValue(1/0),m=()=>r.Children.map(a,e=>r.isValidElement(e)&&e.type===p?r.cloneElement(e,{...e.props,mouseX:o,size:c,magnification:u,distance:d}):e);return g.jsx(t.motion.div,{ref:i,onMouseMove:e=>o.set(e.pageX),onMouseLeave:()=>o.set(1/0),...l,className:k.cn(D({className:n}),{"items-start":s==="top","items-center":s==="middle","items-end":s==="bottom"}),children:m()})});M.displayName="Dock";const p=({size:n=x,magnification:a=y,distance:c=I,mouseX:u,className:d,children:s,...l})=>{const i=r.useRef(null),o=Math.max(6,n*.2),m=t.useMotionValue(1/0),e=t.useTransform(u??m,h=>{const b=i.current?.getBoundingClientRect()??{x:0,width:0};return h-b.x-b.width/2}),T=t.useTransform(e,[-c,0,c],[n,a,n]),f=t.useSpring(T,{mass:.1,stiffness:150,damping:12});return g.jsx(t.motion.div,{ref:i,style:{width:f,height:f,padding:o},className:k.cn("flex aspect-square cursor-pointer items-center justify-center rounded-full",d),...l,children:s})};p.displayName="DockIcon";exports.Dock=M;exports.DockIcon=p;exports.dockVariants=D;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./Duck.css');const x=require("react/jsx-runtime"),n=require("motion/react"),i=require("react"),k=require("clsx");;/* empty css */const I=40,D=60,y=140,M=i.forwardRef(({className:o,children:a,iconSize:c=I,iconMagnification:u=D,iconDistance:d=y,direction:t="middle",...l},r)=>{const s=n.useMotionValue(1/0),m=()=>i.Children.map(a,e=>i.isValidElement(e)&&e.type===p?i.cloneElement(e,{...e.props,mouseX:s,size:c,magnification:u,distance:d}):e);return x.jsx(n.motion.div,{ref:r,onMouseMove:e=>s.set(e.pageX),onMouseLeave:()=>s.set(1/0),...l,className:k("xiping-dock",t==="top"&&"xiping-dock--top",t==="bottom"&&"xiping-dock--bottom",t==="middle"&&"xiping-dock--middle",o),children:m()})});M.displayName="Dock";const p=({size:o=I,magnification:a=D,distance:c=y,mouseX:u,className:d,children:t,...l})=>{const r=i.useRef(null),s=Math.max(6,o*.2),m=n.useMotionValue(1/0),e=n.useTransform(u??m,E=>{const g=r.current?.getBoundingClientRect()??{x:0,width:0};return E-g.x-g.width/2}),T=n.useTransform(e,[-c,0,c],[o,a,o]),f=n.useSpring(T,{mass:.1,stiffness:150,damping:12});return x.jsx(n.motion.div,{ref:r,style:{width:f,height:f,padding:s},className:k("xiping-dock-icon",d),...l,children:t})};p.displayName="DockIcon";exports.Dock=M;exports.DockIcon=p;
@@ -0,0 +1 @@
1
+ .xiping-flip-container{display:flex;justify-content:center;gap:.5rem}.xiping-flip-char{transform-origin:center;filter:drop-shadow(0 1px 1px rgb(0 0 0 / .05))}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("motion/react"),m=require("../../utils/utils.js"),h=require("react");;/* empty css */const x={hidden:{rotateX:-90,opacity:0},visible:{rotateX:0,opacity:1}};function j({children:n,duration:r=.5,delayMultiple:a=.08,className:s,as:c="span",variants:o,...l}){const d=t.motion.create(c),u=h.Children.toArray(n).join("").split("");return e.jsx("div",{className:"xiping-flip-container",children:e.jsx(t.AnimatePresence,{mode:"wait",children:u.map((p,i)=>e.jsx(d,{initial:"hidden",animate:"visible",exit:"hidden",variants:o||x,transition:{duration:r,delay:i*a},className:m.cn("xiping-flip-char",s),...l,children:p},i))})})}exports.FlipText=j;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./FlipText.css');const e=require("react/jsx-runtime"),t=require("motion/react"),m=require("react"),x=require("clsx");;/* empty css */const h={hidden:{rotateX:-90,opacity:0},visible:{rotateX:0,opacity:1}};function j({children:n,duration:r=.5,delayMultiple:a=.08,className:s,as:c="span",variants:o,...l}){const d=t.motion.create(c),p=m.Children.toArray(n).join("").split("");return e.jsx("div",{className:"xiping-flip-container",children:e.jsx(t.AnimatePresence,{mode:"wait",children:p.map((u,i)=>e.jsx(d,{initial:"hidden",animate:"visible",exit:"hidden",variants:o||h,transition:{duration:r,delay:i*a},className:x("xiping-flip-char",s),...l,children:u},i))})})}exports.FlipText=j;
@@ -0,0 +1 @@
1
+ .xiping-gradient-text{position:relative;margin:0 auto;display:flex;max-width:-moz-fit-content;max-width:fit-content;flex-direction:row;align-items:center;justify-content:center;border-radius:1.25rem;font-weight:500;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:box-shadow .5s ease-out;overflow:hidden;cursor:pointer}.xiping-gradient-text__overlay{position:absolute;inset:0;background-size:300% 100%;animation:xiping-gradient linear infinite;border-radius:inherit;z-index:0;pointer-events:none}.xiping-gradient-text__overlay:before{content:"";position:absolute;border-radius:inherit;width:calc(100% - 2px);height:calc(100% - 2px);left:50%;top:50%;transform:translate(-50%,-50%);background-color:#060010;z-index:-1}@keyframes xiping-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.xiping-gradient-text__content{display:inline-block;position:relative;z-index:2;background-size:300% 100%;background-clip:text;-webkit-background-clip:text;color:transparent;animation:xiping-gradient linear infinite}
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");;/* empty css */function a({children:i,className:n="",colors:r=["#40ffaa","#4079ff","#40ffaa","#4079ff","#40ffaa"],animationSpeed:s=8,showBorder:d=!1}){const t={backgroundImage:`linear-gradient(to right, ${r.join(", ")})`,animationDuration:`${s}s`};return e.jsxs("div",{className:`xiping-gradient-text ${n}`,children:[d&&e.jsx("div",{className:"xiping-gradient-text__overlay",style:t}),e.jsx("div",{className:"xiping-gradient-text__content",style:t,children:i})]})}exports.GradientText=a;exports.default=a;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const e=require("react/jsx-runtime"),d=require("clsx");;/* empty css */function i({children:a,className:n="",colors:r=["#40ffaa","#4079ff","#40ffaa","#4079ff","#40ffaa"],animationSpeed:s=8,showBorder:l=!1}){const t={backgroundImage:`linear-gradient(to right, ${r.join(", ")})`,animationDuration:`${s}s`};return e.jsxs("div",{className:d("xiping-gradient-text",n),children:[l&&e.jsx("div",{className:"xiping-gradient-text__overlay",style:t}),e.jsx("div",{className:"xiping-gradient-text__content",style:t,children:a})]})}exports.GradientText=i;exports.default=i;
@@ -0,0 +1 @@
1
+ .xiping-hyper-container{overflow:hidden;padding-top:.5rem;padding-bottom:.5rem;font-size:2.25rem;line-height:2.5rem;font-weight:700}.xiping-hyper-char{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.xiping-hyper-space{width:.75rem}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react/jsx-runtime"),d=require("../../utils/utils.js"),f=require("motion/react"),r=require("react");;/* empty css */const H=Object.freeze("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")),P=n=>Math.floor(Math.random()*n);function S({children:n,className:M,duration:l=800,delay:o=0,as:R="div",startOnView:g=!1,animateOnHover:q=!0,characterSet:i=H,...y}){const E=f.motion.create(R,{forwardMotionProps:!0}),[I,b]=r.useState(()=>n.split("")),[a,s]=r.useState(!1),c=r.useRef(0),u=r.useRef(null),j=()=>{q&&!a&&(c.current=0,s(!0))};return r.useEffect(()=>{if(!g){const t=setTimeout(()=>{s(!0)},o);return()=>clearTimeout(t)}const e=new IntersectionObserver(([t])=>{t.isIntersecting&&(setTimeout(()=>{s(!0)},o),e.disconnect())},{threshold:.1,rootMargin:"-30% 0px -30% 0px"});return u.current&&e.observe(u.current),()=>e.disconnect()},[o,g]),r.useEffect(()=>{if(!a)return;const e=n.length,t=performance.now();let m;const T=C=>{const F=C-t,x=Math.min(F/l,1);c.current=x*e,b(v=>v.map((A,h)=>A===" "?A:h<=c.current?n[h]:i[P(i.length)])),x<1?m=requestAnimationFrame(T):s(!1)};return m=requestAnimationFrame(T),()=>cancelAnimationFrame(m)},[n,l,a,i]),p.jsx(E,{ref:u,className:d.cn("xiping-hyper-container",M),onMouseEnter:j,...y,children:p.jsx(f.AnimatePresence,{children:I.map((e,t)=>p.jsx(f.motion.span,{className:d.cn("xiping-hyper-char",e===" "?"xiping-hyper-space":""),children:e.toUpperCase()},t))})})}exports.HyperText=S;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./HyperText.css');const p=require("react/jsx-runtime"),f=require("motion/react"),r=require("react"),d=require("clsx");;/* empty css */const H=Object.freeze("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")),P=n=>Math.floor(Math.random()*n);function S({children:n,className:M,duration:l=800,delay:o=0,as:R="div",startOnView:g=!1,animateOnHover:q=!0,characterSet:i=H,...y}){const E=f.motion.create(R,{forwardMotionProps:!0}),[I,b]=r.useState(()=>n.split("")),[a,s]=r.useState(!1),c=r.useRef(0),u=r.useRef(null),j=()=>{q&&!a&&(c.current=0,s(!0))};return r.useEffect(()=>{if(!g){const t=setTimeout(()=>{s(!0)},o);return()=>clearTimeout(t)}const e=new IntersectionObserver(([t])=>{t.isIntersecting&&(setTimeout(()=>{s(!0)},o),e.disconnect())},{threshold:.1,rootMargin:"-30% 0px -30% 0px"});return u.current&&e.observe(u.current),()=>e.disconnect()},[o,g]),r.useEffect(()=>{if(!a)return;const e=n.length,t=performance.now();let m;const T=C=>{const F=C-t,x=Math.min(F/l,1);c.current=x*e,b(v=>v.map((A,h)=>A===" "?A:h<=c.current?n[h]:i[P(i.length)])),x<1?m=requestAnimationFrame(T):s(!1)};return m=requestAnimationFrame(T),()=>cancelAnimationFrame(m)},[n,l,a,i]),p.jsx(E,{ref:u,className:d("xiping-hyper-container",M),onMouseEnter:j,...y,children:p.jsx(f.AnimatePresence,{children:I.map((e,t)=>p.jsx(f.motion.span,{className:d("xiping-hyper-char",e===" "&&"xiping-hyper-space"),children:e.toUpperCase()},t))})})}exports.HyperText=S;
@@ -0,0 +1 @@
1
+ .xiping-image-compare-container{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;width:100%}.xiping-image-compare-label{position:absolute;top:1rem;padding:.25rem .5rem;background-color:#0009;color:#fff;font-size:.75rem;font-weight:500;border-radius:.25rem;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10}.xiping-image-compare-label-original{right:1rem}.xiping-image-compare-label-modified{left:1rem}.xiping-image-compare-overlay{position:absolute;inset:0;height:100%;overflow:hidden}.xiping-image-compare-divider{position:absolute;top:0;bottom:0;background-color:#ffffffe6;cursor:ew-resize;box-shadow:0 0 0 1px #0000004d,0 0 0 1px #ffffff80 inset,0 0 8px #0003}.xiping-image-compare-divider-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2rem;height:2rem;border-radius:50%;background-color:#fffffff2;border:2px solid rgba(0,0,0,.2);box-shadow:0 0 0 1px #fffc,0 4px 12px #0000004d,0 2px 4px #0003;display:flex;align-items:center;justify-content:center;transition:box-shadow .2s ease,transform .2s ease}.xiping-image-compare-divider-button:hover{box-shadow:0 0 0 1px #ffffffe6,0 6px 16px #0006,0 3px 6px #0000004d;transform:translate(-50%,-50%) scale(1.05)}.xiping-image-compare-divider-button:active{transform:translate(-50%,-50%) scale(.95)}.xiping-image-compare-divider-icon{width:1.5rem;height:1.5rem;color:#1f2937}.xiping-image-compare-divider-theme-dark{background-color:#000000e6;box-shadow:0 0 0 1px #ffffff4d,0 0 0 1px #00000080 inset,0 0 8px #fff3}.xiping-image-compare-divider-button-theme-dark{background-color:#000000f2;border:2px solid rgba(255,255,255,.2);box-shadow:0 0 0 1px #000c,0 4px 12px #ffffff4d,0 2px 4px #fff3}.xiping-image-compare-divider-button-theme-dark:hover{box-shadow:0 0 0 1px #000000e6,0 6px 16px #fff6,0 3px 6px #ffffff4d}.xiping-image-compare-divider-theme-dark .xiping-image-compare-divider-icon{color:#f3f4f6}
@@ -4,10 +4,12 @@ interface ImageCompareProps {
4
4
  modifiedImage: string;
5
5
  /** 中间分隔线的宽度,可以是数字(px)或字符串(如 '2px', '0.5px'),默认为 1px */
6
6
  dividerWidth?: number | string;
7
- /** 原图标签文本,默认为 "原图" */
7
+ /** 原图标签文本,默认为 "Original" */
8
8
  originalLabel?: string;
9
- /** 处理过的图标签文本,默认为 "处理过的图" */
9
+ /** 处理过的图标签文本,默认为 "Modified" */
10
10
  modifiedLabel?: string;
11
+ /** 主题模式,默认为 "light"(浅色主题) */
12
+ theme?: "light" | "dark";
11
13
  }
12
14
  declare const ImageCompare: (props: ImageCompareProps) => import("react/jsx-runtime").JSX.Element;
13
15
  export default ImageCompare;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),q=require("clsx"),e=require("react");;/* empty css */const T=M=>{const{originalImage:a,modifiedImage:h,className:E,dividerWidth:c=1,originalLabel:L="原图",modifiedLabel:j="处理过的图"}=M,[s,S]=e.useState(50),[b,y]=e.useState(16/9),p=e.useRef(null),l=e.useRef(!1),r=e.useRef(null),u=e.useRef(null),o=e.useRef(null),w=e.useCallback(n=>{if(!p.current)return;(!u.current||!l.current)&&(u.current=p.current.getBoundingClientRect());const i=u.current,m=(n-i.left)/i.width*100,g=Math.min(100,Math.max(0,m));S(g)},[]),d=e.useCallback(n=>{l.current&&(r.current!==null&&cancelAnimationFrame(r.current),r.current=requestAnimationFrame(()=>{w(n)}))},[w]),x=e.useCallback(n=>{d(n.clientX)},[d]),R=e.useCallback(n=>{n.touches.length>0&&d(n.touches[0].clientX)},[d]),k=e.useCallback(()=>{l.current=!0,u.current=null;const n=v=>x(v),i=v=>R(v),f=()=>{l.current=!1,r.current!==null&&(cancelAnimationFrame(r.current),r.current=null),o.current&&(o.current(),o.current=null)},m=()=>f(),g=()=>f();window.addEventListener("mousemove",n),window.addEventListener("touchmove",i,{passive:!1}),window.addEventListener("mouseup",m),window.addEventListener("touchend",g);const P=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("touchmove",i),window.removeEventListener("mouseup",m),window.removeEventListener("touchend",g)};o.current=P},[x,R]);e.useEffect(()=>()=>{o.current&&(o.current(),o.current=null)},[]),e.useEffect(()=>{const n=new Image;n.onload=()=>{y(n.width/n.height)},n.src=a},[a]);const C=e.useMemo(()=>({backgroundRepeat:"no-repeat",backgroundPosition:"top left",backgroundImage:`url(${a})`,backgroundSize:"contain",aspectRatio:b}),[a,b]),N=e.useMemo(()=>({width:`${s}%`,backgroundImage:`url(${h})`,backgroundRepeat:"no-repeat",backgroundPosition:"top left",backgroundSize:"auto 100%"}),[s,h]),I=e.useMemo(()=>({left:`${s}%`,transform:"translateX(-50%)",width:typeof c=="number"?`${c}px`:c}),[s,c]);return t.jsxs("div",{ref:p,className:q("xiping-image-compare-container",E),style:C,children:[t.jsx("div",{className:"xiping-image-compare-label xiping-image-compare-label-original",children:L}),t.jsx("div",{className:"xiping-image-compare-overlay",style:N,children:t.jsx("div",{className:"xiping-image-compare-label xiping-image-compare-label-modified",children:j})}),t.jsx("div",{className:"xiping-image-compare-divider",style:I,onMouseDown:k,onTouchStart:k,children:t.jsx("div",{className:"xiping-image-compare-divider-button",children:t.jsx("svg",{className:"xiping-image-compare-divider-icon",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 9l4-4 4 4m0 6l-4 4-4-4"})})})})]})};exports.default=T;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ImageCompare.css');const t=require("react/jsx-runtime"),f=require("clsx"),e=require("react");;/* empty css */const T=L=>{const{originalImage:a,modifiedImage:b,className:j,dividerWidth:c=1,originalLabel:S="Original",modifiedLabel:y="Modified",theme:x="light"}=L,[s,C]=e.useState(50),[w,N]=e.useState(16/9),p=e.useRef(null),l=e.useRef(!1),i=e.useRef(null),u=e.useRef(null),o=e.useRef(null),R=e.useCallback(n=>{if(!p.current)return;(!u.current||!l.current)&&(u.current=p.current.getBoundingClientRect());const r=u.current,m=(n-r.left)/r.width*100,g=Math.min(100,Math.max(0,m));C(g)},[]),d=e.useCallback(n=>{l.current&&(i.current!==null&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>{R(n)}))},[R]),M=e.useCallback(n=>{d(n.clientX)},[d]),k=e.useCallback(n=>{n.touches.length>0&&d(n.touches[0].clientX)},[d]),E=e.useCallback(()=>{l.current=!0,u.current=null;const n=v=>M(v),r=v=>k(v),h=()=>{l.current=!1,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null),o.current&&(o.current(),o.current=null)},m=()=>h(),g=()=>h();window.addEventListener("mousemove",n),window.addEventListener("touchmove",r,{passive:!1}),window.addEventListener("mouseup",m),window.addEventListener("touchend",g);const q=()=>{window.removeEventListener("mousemove",n),window.removeEventListener("touchmove",r),window.removeEventListener("mouseup",m),window.removeEventListener("touchend",g)};o.current=q},[M,k]);e.useEffect(()=>()=>{o.current&&(o.current(),o.current=null)},[]),e.useEffect(()=>{const n=new Image;n.onload=()=>{N(n.width/n.height)},n.src=a},[a]);const I=e.useMemo(()=>({backgroundRepeat:"no-repeat",backgroundPosition:"top left",backgroundImage:`url(${a})`,backgroundSize:"contain",aspectRatio:w}),[a,w]),P=e.useMemo(()=>({width:`${s}%`,backgroundImage:`url(${b})`,backgroundRepeat:"no-repeat",backgroundPosition:"top left",backgroundSize:"auto 100%"}),[s,b]),$=e.useMemo(()=>({left:`${s}%`,transform:"translateX(-50%)",width:typeof c=="number"?`${c}px`:c}),[s,c]);return t.jsxs("div",{ref:p,className:f("xiping-image-compare-container",j),style:I,children:[t.jsx("div",{className:"xiping-image-compare-label xiping-image-compare-label-original",children:S}),t.jsx("div",{className:"xiping-image-compare-overlay",style:P,children:t.jsx("div",{className:"xiping-image-compare-label xiping-image-compare-label-modified",children:y})}),t.jsx("div",{className:f("xiping-image-compare-divider",`xiping-image-compare-divider-theme-${x}`),style:$,onMouseDown:E,onTouchStart:E,children:t.jsx("div",{className:f("xiping-image-compare-divider-button",`xiping-image-compare-divider-button-theme-${x}`),children:t.jsx("svg",{className:"xiping-image-compare-divider-icon",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 9l4-4 4 4m0 6l-4 4-4-4"})})})})]})};exports.default=T;
@@ -0,0 +1 @@
1
+ .xiping-thumbnails-wrapper{height:6rem;background-color:#00000080;flex-shrink:0;z-index:10;padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.xiping-thumbnails-wrapper--hidden{display:none}.xiping-thumbnails-scroll{height:6rem;width:100vw;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.xiping-thumbnails-scroll::-webkit-scrollbar{display:none}.xiping-thumbnails-container{display:flex;gap:.5rem;padding:.5rem;height:6rem;min-width:-moz-max-content;min-width:max-content}.xiping-thumbnail-item{height:100%;aspect-ratio:1 / 1;flex-shrink:0;cursor:pointer;border:2px solid transparent;transition:all .2s}.xiping-thumbnail-item--active{border-color:#fff}.xiping-thumbnail-image{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),t=require("motion/react"),h=require("../../utils/utils.js"),m=require("lodash-es"),b=require("react"),f="0%",v="100%",d="20%",o="80%",a="#0000",e="#000";function p(s){const n=t.useMotionValue(`linear-gradient(90deg, ${e}, ${e} ${f}, ${e} ${o}, ${a})`);return t.useMotionValueEvent(s,"change",l=>{l===0?t.animate(n,`linear-gradient(90deg, ${e}, ${e} ${f}, ${e} ${o}, ${a})`):l===1?t.animate(n,`linear-gradient(90deg, ${a}, ${e} ${d}, ${e} ${v}, ${e})`):(s.getPrevious()===0||s.getPrevious()===1)&&t.animate(n,`linear-gradient(90deg, ${a}, ${e} ${d}, ${e} ${o}, ${a})`)}),n}const w=({images:s,currentIndex:n,onImageSelect:l})=>{const i=b.useRef(null),{scrollXProgress:$}=t.useScroll({container:i}),g=p($);return r.jsx("div",{className:h.cn("h-24 bg-black/50 shrink-0 z-10 pb-safe-offset-0 pl-safe-offset-0 pr-safe-offset-0",{hidden:m.size(s)<=1}),children:r.jsx(t.motion.div,{ref:i,style:{maskImage:g,WebkitOverflowScrolling:"touch",scrollbarWidth:"none",msOverflowStyle:"none"},className:"h-24 w-screen overflow-x-auto overflow-y-hidden scrollbar-hide",children:r.jsx("div",{className:"flex gap-2 p-2 h-24 min-w-max",children:s.map((c,u)=>r.jsx("div",{className:`h-full aspect-square flex-shrink-0 cursor-pointer border-2 transition-all ${u===n?"border-white":"border-transparent"}`,onClick:()=>l(u),children:r.jsx("img",{src:c,alt:"",className:"w-full h-full object-contain",draggable:"false"})},c))})})})};exports.default=w;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ImageThumbnails.css');const a=require("react/jsx-runtime"),i=require("motion/react"),p=require("lodash-es"),f=require("react"),m=require("clsx");;/* empty css */const g="0%",x="100%",$="20%",l="80%",s="#0000",e="#000";function b(n){const t=i.useMotionValue(`linear-gradient(90deg, ${e}, ${e} ${g}, ${e} ${l}, ${s})`);return i.useMotionValueEvent(n,"change",r=>{r===0?i.animate(t,`linear-gradient(90deg, ${e}, ${e} ${g}, ${e} ${l}, ${s})`):r===1?i.animate(t,`linear-gradient(90deg, ${s}, ${e} ${$}, ${e} ${x}, ${e})`):(n.getPrevious()===0||n.getPrevious()===1)&&i.animate(t,`linear-gradient(90deg, ${s}, ${e} ${$}, ${e} ${l}, ${s})`)}),t}const v=({images:n,currentIndex:t,onImageSelect:r})=>{const c=f.useRef(null),{scrollXProgress:d}=i.useScroll({container:c}),h=b(d);return a.jsx("div",{className:m("xiping-thumbnails-wrapper",p.size(n)<=1&&"xiping-thumbnails-wrapper--hidden"),children:a.jsx(i.motion.div,{ref:c,style:{maskImage:h},className:"xiping-thumbnails-scroll",children:a.jsx("div",{className:"xiping-thumbnails-container",children:n.map((o,u)=>a.jsx("div",{className:m("xiping-thumbnail-item",u===t&&"xiping-thumbnail-item--active"),onClick:()=>r(u),children:a.jsx("img",{src:o,alt:"",className:"xiping-thumbnail-image",draggable:"false"})},o))})})})};exports.default=v;
@@ -0,0 +1 @@
1
+ .xiping-wrapper{width:100vw;height:100vh;position:relative;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0)}.xiping-tool-wrapper{position:absolute;top:16px;right:16px;display:flex;gap:16px;z-index:10}.xiping-close-icon,.xiping-download-icon{color:#fff;cursor:pointer}.xiping-main-content{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center}.xiping-pinch-content{width:100%;height:100%}.xiping-image{width:100vw;height:100%;-o-object-fit:contain;object-fit:contain;pointer-events:none}.xiping-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#00000080}.xiping-modal-content{overflow:hidden}.xiping-modal-overlay{background-color:#000000b3}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),x=require("@heroui/react"),T=require("../pinch-content/PinchContent.js"),O=require("./ImageThumbnails.js"),o=require("react"),U=require("clsx"),b=require("lucide-react"),v=require("motion/react"),f=require("../../utils/utils.js");;/* empty css */const C=l=>{l.target.closest(".xiping-main-content")&&l.preventDefault()},z=l=>{const{isOpen:a,onClose:w,imgSrc:m,thumbnailImages:N,canDownload:j=!1,wrapperClassName:y,closeClassName:I,downloadClassName:E,toolWrapperClassName:L,initialIndex:k=0}=l,s=Array.isArray(m)?m:[m],q=N||s,R=Math.max(0,Math.min(k,s.length-1)),[d,g]=o.useState(R),[D,p]=o.useState(!0),u=o.useCallback(()=>{p(!0),w()},[w]),A=async()=>{const i=s[d];try{const r=await(await fetch(i)).blob(),t=window.URL.createObjectURL(r),c=document.createElement("a");c.href=t,c.download=i.split("/").pop()||"image",document.body.appendChild(c),c.click(),window.URL.revokeObjectURL(t),document.body.removeChild(c)}catch(n){console.error("Error downloading image:",n)}},M=()=>{p(!1)},S=()=>{p(!1)};o.useEffect(()=>{if(a)return document.addEventListener("touchmove",C,{passive:!1}),()=>{document.removeEventListener("touchmove",C)}},[a]);const h=o.useCallback(()=>{"vibrate"in navigator&&navigator.vibrate([50,50,50])},[]);return o.useEffect(()=>{if(!a)return;const i=n=>{const r=n.target;if(!(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable))switch(n.key){case"ArrowLeft":n.preventDefault(),g(t=>t>0?t-1:(h(),t));break;case"ArrowRight":n.preventDefault(),g(t=>t<s.length-1?t+1:(h(),t));break;case"Escape":n.preventDefault(),u();break}};return document.addEventListener("keydown",i),()=>{document.removeEventListener("keydown",i)}},[a,s.length,u,h]),e.jsx(x.Modal,{isOpen:a,size:"full",onClose:u,classNames:{wrapper:U(y)},className:"xiping-modal-overlay",hideCloseButton:!0,portalContainer:document.body,children:e.jsx(x.ModalContent,{className:"xiping-modal-content",children:e.jsxs("div",{className:"xiping-wrapper",children:[e.jsxs("div",{className:f.cn("xiping-tool-wrapper",L),children:[j&&e.jsx(b.Download,{size:24,className:f.cn("xiping-download-icon",E),onClick:A}),e.jsx(b.X,{size:24,className:f.cn("xiping-close-icon",I),onClick:u})]}),e.jsxs("div",{className:"xiping-main-content",children:[e.jsx(T.default,{canRotate:!1,className:"xiping-pinch-content",children:e.jsx(v.AnimatePresence,{mode:"wait",children:e.jsx(v.motion.img,{draggable:"false",src:s[d],alt:"",className:"xiping-image",onLoad:M,onError:S,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:1.05},transition:{duration:.3,ease:"easeInOut"}},d)})}),D&&e.jsx("div",{className:"xiping-loading",children:e.jsx(x.Spinner,{color:"white",size:"lg"})})]}),e.jsx(O.default,{images:q,currentIndex:d,onImageSelect:g})]})})})};exports.default=z;
1
+ "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ImageViewer.css');const e=require("react/jsx-runtime"),f=require("@heroui/react"),T=require("../pinch-content/PinchContent.js"),O=require("./ImageThumbnails.js"),o=require("react"),m=require("clsx"),b=require("lucide-react"),v=require("motion/react");;/* empty css */const C=l=>{l.target.closest(".xiping-main-content")&&l.preventDefault()},U=l=>{const{isOpen:a,onClose:w,imgSrc:g,thumbnailImages:N,canDownload:j=!1,wrapperClassName:y,closeClassName:I,downloadClassName:E,toolWrapperClassName:L,initialIndex:k=0}=l,s=Array.isArray(g)?g:[g],R=N||s,q=Math.max(0,Math.min(k,s.length-1)),[d,p]=o.useState(q),[D,h]=o.useState(!0),u=o.useCallback(()=>{h(!0),w()},[w]),A=async()=>{const i=s[d];try{const r=await(await fetch(i)).blob(),t=window.URL.createObjectURL(r),c=document.createElement("a");c.href=t,c.download=i.split("/").pop()||"image",document.body.appendChild(c),c.click(),window.URL.revokeObjectURL(t),document.body.removeChild(c)}catch(n){console.error("Error downloading image:",n)}},M=()=>{h(!1)},S=()=>{h(!1)};o.useEffect(()=>{if(a)return document.addEventListener("touchmove",C,{passive:!1}),()=>{document.removeEventListener("touchmove",C)}},[a]);const x=o.useCallback(()=>{"vibrate"in navigator&&navigator.vibrate([50,50,50])},[]);return o.useEffect(()=>{if(!a)return;const i=n=>{const r=n.target;if(!(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable))switch(n.key){case"ArrowLeft":n.preventDefault(),p(t=>t>0?t-1:(x(),t));break;case"ArrowRight":n.preventDefault(),p(t=>t<s.length-1?t+1:(x(),t));break;case"Escape":n.preventDefault(),u();break}};return document.addEventListener("keydown",i),()=>{document.removeEventListener("keydown",i)}},[a,s.length,u,x]),e.jsx(f.Modal,{isOpen:a,size:"full",onClose:u,classNames:{wrapper:m(y)},className:"xiping-modal-overlay",hideCloseButton:!0,portalContainer:document.body,children:e.jsx(f.ModalContent,{className:"xiping-modal-content",children:e.jsxs("div",{className:"xiping-wrapper",children:[e.jsxs("div",{className:m("xiping-tool-wrapper",L),children:[j&&e.jsx(b.Download,{size:24,className:m("xiping-download-icon",E),onClick:A}),e.jsx(b.X,{size:24,className:m("xiping-close-icon",I),onClick:u})]}),e.jsxs("div",{className:"xiping-main-content",children:[e.jsx(T.default,{canRotate:!1,className:"xiping-pinch-content",children:e.jsx(v.AnimatePresence,{mode:"wait",children:e.jsx(v.motion.img,{draggable:"false",src:s[d],alt:"",className:"xiping-image",onLoad:M,onError:S,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:1.05},transition:{duration:.3,ease:"easeInOut"}},d)})}),D&&e.jsx("div",{className:"xiping-loading",children:e.jsx(f.Spinner,{color:"white",size:"lg"})})]}),e.jsx(O.default,{images:R,currentIndex:d,onImageSelect:p})]})})})};exports.default=U;
@@ -0,0 +1 @@
1
+ .xiping-message{display:flex;align-items:flex-start;max-width:80%;margin-bottom:16px}.xiping-message.user{align-self:flex-end;flex-direction:row-reverse;margin-left:auto}.xiping-message.assistant{align-self:flex-start;margin-right:auto}.xiping-message__avatar{width:36px;height:36px;border-radius:50%;overflow:hidden;margin:0 8px;background-color:#e0e0e0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.xiping-message__content{background-color:#fff;padding:12px 16px;border-radius:12px;box-shadow:0 1px 2px #0000001a;position:relative;max-width:100%}.xiping-message:not(:has(.xiping-message__avatar)) .xiping-message__content{margin:0}.xiping-message.user .xiping-message__content{background-color:#007bff;color:#fff}.xiping-message__text{word-break:break-word;line-height:1.5}.xiping-message__timestamp{font-size:.75rem;color:#888;margin-top:4px;text-align:right}.xiping-message.user .xiping-message__timestamp{color:#fffc}.xiping-message__thinking{display:flex;align-items:center;margin-top:8px}.xiping-message__thinking-dots{display:flex;align-items:center;margin-right:8px}.xiping-message__thinking-dots span{width:8px;height:8px;margin:0 2px;background-color:#888;border-radius:50%;display:inline-block;animation:xiping-thinking 1.4s infinite ease-in-out both}.xiping-message__thinking-dots span:nth-child(1){animation-delay:-.32s}.xiping-message__thinking-dots span:nth-child(2){animation-delay:-.16s}.xiping-message__thinking-text{font-size:.9rem;color:#888}.xiping-message.user .xiping-message__thinking-text{color:#fffc}@keyframes xiping-thinking{0%,80%,to{transform:scale(.6)}40%{transform:scale(1)}}.xiping-message__loading{display:flex;align-items:center;justify-content:center;padding:8px}.xiping-message__loading-spinner{width:24px;height:24px;border:3px solid rgba(0,123,255,.3);border-radius:50%;border-top-color:#007bff;animation:xiping-spin 1s ease-in-out infinite}@keyframes xiping-spin{to{transform:rotate(360deg)}}.xiping-message__think{margin-top:12px;padding:8px 12px;background-color:#0000000d;border-radius:8px;font-size:.9rem}.xiping-message.user .xiping-message__think{background-color:#ffffff1a}.xiping-message__think-header{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-weight:500}.xiping-message__think-toggle{background:none;border:none;padding:4px;cursor:pointer;color:#666;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background-color .2s ease}.xiping-message__think-toggle:hover{background-color:#0000000d}.xiping-message__think-content{max-height:1000px;opacity:1;overflow:hidden;transition:all .3s ease-in-out}.xiping-message__think-content.hidden{max-height:0;opacity:0;margin:0;padding:0}.xiping-message__knowledge-sources{margin-top:8px;padding:8px;background-color:#00000008;border-radius:4px;font-size:.9em}.xiping-message__knowledge-sources-header{font-weight:500;margin-bottom:4px;color:#666}.xiping-message__knowledge-sources-list{list-style:none;padding:0;margin:0}.xiping-message__knowledge-source-item{margin-bottom:4px}.xiping-message__knowledge-source-item:last-child{margin-bottom:0}.xiping-message__knowledge-source-item a{color:#06c;text-decoration:none}.xiping-message__knowledge-source-item a:hover{text-decoration:underline}.xiping-message__knowledge-source-description{font-size:.9em;color:#666;margin-top:2px;margin-left:8px}.xiping-message__text-container{position:relative;display:flex;flex-direction:column;gap:4px}.xiping-message__copy-button{align-self:flex-end;padding:4px;background:none;border:none;cursor:pointer;color:#666;opacity:0;transition:all .2s ease;border-radius:4px;display:flex;align-items:center;justify-content:center}.xiping-message__text-container:hover .xiping-message__copy-button{opacity:1}.xiping-message__copy-button:hover{color:#333;background-color:#0000000d}.xiping-message__copy-tooltip{position:absolute;top:-24px;right:0;background-color:#333;color:#fff;padding:4px 8px;border-radius:4px;font-size:12px;white-space:nowrap;animation:xiping-fadeInOut 2s ease-in-out}@keyframes xiping-fadeInOut{0%{opacity:0;transform:translateY(4px)}10%{opacity:1;transform:translateY(0)}90%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),f=require("react"),r=require("react-markdown");;/* empty css */const C=({id:b,content:l,sender:i,timestamp:o,isThinking:d=!1,isLoading:L=!1,className:y="",style:M={},showTimestamp:c=!0,avatarUser:g,avatarAssistant:x,thinkingText:S="思考中...",customThinkingComponent:h,customUserMessageComponent:m,customAssistantMessageComponent:p,parseContent:V=!1,parsedContent:_,thinkContent:t,knowledgeSources:a})=>{const[n,u]=f.useState(!0),[q,j]=f.useState("idle");console.log(b,"id");const v=s=>s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),B=async()=>{try{await navigator.clipboard.writeText(l),j("copied"),setTimeout(()=>j("idle"),2e3)}catch(s){console.error("复制失败:",s)}},k=()=>h||e.jsxs("div",{className:"xiping-message__thinking",children:[e.jsxs("div",{className:"xiping-message__thinking-dots",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}),e.jsx("span",{className:"xiping-message__thinking-text",children:S})]}),H=()=>e.jsx("div",{className:"xiping-message__loading",children:e.jsx("div",{className:"xiping-message__loading-spinner"})}),N=()=>!a||a.length===0?null:e.jsxs("div",{className:"xiping-message__knowledge-sources",children:[e.jsx("div",{className:"xiping-message__knowledge-sources-header",children:"知识来源:"}),e.jsx("ul",{className:"xiping-message__knowledge-sources-list",children:a.map((s,W)=>e.jsxs("li",{className:"xiping-message__knowledge-source-item",children:[s.url?e.jsx("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",children:s.title}):e.jsx("span",{children:s.title}),s.description&&e.jsx("div",{className:"xiping-message__knowledge-source-description",children:s.description})]},W))})]}),w=()=>i==="user"?null:e.jsxs("button",{className:"xiping-message__copy-button",onClick:B,"aria-label":"Copy message",title:"Copy message",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M13.3333 6H7.33333C6.59695 6 6 6.59695 6 7.33333V13.3333C6 14.0697 6.59695 14.6667 7.33333 14.6667H13.3333C14.0697 14.6667 14.6667 14.0697 14.6667 13.3333V7.33333C14.6667 6.59695 14.0697 6 13.3333 6Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M3.33333 10H2.66667C2.31305 10 1.97391 9.85953 1.72386 9.60948C1.47381 9.35943 1.33334 9.02029 1.33334 8.66667V2.66667C1.33334 2.31305 1.47381 1.97391 1.72386 1.72386C1.97391 1.47381 2.31305 1.33334 2.66667 1.33334H8.66667C9.02029 1.33334 9.35943 1.47381 9.60948 1.72386C9.85953 1.97391 10 2.31305 10 2.66667V3.33334",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),q==="copied"&&e.jsx("span",{className:"xiping-message__copy-tooltip",children:"Copied"})]});return i==="user"&&m?m:i==="assistant"&&p?p:e.jsxs("div",{className:`xiping-message ${i==="user"?"user":"assistant"} ${y}`,style:M,children:[i==="user"&&g||i==="assistant"&&x?e.jsx("div",{className:"xiping-message__avatar",children:i==="user"?g:x}):null,e.jsx("div",{className:"xiping-message__content",children:L?H():V&&i==="assistant"?e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>u(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:`xiping-message__think-content ${n?"visible":"hidden"}`,children:e.jsx(r,{children:t})})]}),d&&k(),_&&e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:_})}),w()]}),N(),c&&e.jsx("div",{className:"xiping-message__timestamp",children:v(o)})]}):e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>u(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:`xiping-message__think-content ${n?"visible":"hidden"}`,children:e.jsx(r,{children:t})})]}),e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:l})}),w()]}),d&&k(),N(),c&&e.jsx("div",{className:"xiping-message__timestamp",children:v(o)})]})})]})};exports.Message=C;exports.default=C;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Message.css');const e=require("react/jsx-runtime"),C=require("react"),r=require("react-markdown"),l=require("clsx");;/* empty css */const b=({id:L,content:o,sender:i,timestamp:d,isThinking:c=!1,isLoading:y=!1,className:M="",style:S={},showTimestamp:g=!0,avatarUser:x,avatarAssistant:h,thinkingText:V="思考中...",customThinkingComponent:m,customUserMessageComponent:p,customAssistantMessageComponent:_,parseContent:q=!1,parsedContent:u,thinkContent:t,knowledgeSources:a})=>{const[n,j]=C.useState(!0),[B,v]=C.useState("idle");console.log(L,"id");const k=s=>s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),H=async()=>{try{await navigator.clipboard.writeText(o),v("copied"),setTimeout(()=>v("idle"),2e3)}catch(s){console.error("复制失败:",s)}},N=()=>m||e.jsxs("div",{className:"xiping-message__thinking",children:[e.jsxs("div",{className:"xiping-message__thinking-dots",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}),e.jsx("span",{className:"xiping-message__thinking-text",children:V})]}),W=()=>e.jsx("div",{className:"xiping-message__loading",children:e.jsx("div",{className:"xiping-message__loading-spinner"})}),w=()=>!a||a.length===0?null:e.jsxs("div",{className:"xiping-message__knowledge-sources",children:[e.jsx("div",{className:"xiping-message__knowledge-sources-header",children:"知识来源:"}),e.jsx("ul",{className:"xiping-message__knowledge-sources-list",children:a.map((s,I)=>e.jsxs("li",{className:"xiping-message__knowledge-source-item",children:[s.url?e.jsx("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",children:s.title}):e.jsx("span",{children:s.title}),s.description&&e.jsx("div",{className:"xiping-message__knowledge-source-description",children:s.description})]},I))})]}),f=()=>i==="user"?null:e.jsxs("button",{className:"xiping-message__copy-button",onClick:H,"aria-label":"Copy message",title:"Copy message",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M13.3333 6H7.33333C6.59695 6 6 6.59695 6 7.33333V13.3333C6 14.0697 6.59695 14.6667 7.33333 14.6667H13.3333C14.0697 14.6667 14.6667 14.0697 14.6667 13.3333V7.33333C14.6667 6.59695 14.0697 6 13.3333 6Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M3.33333 10H2.66667C2.31305 10 1.97391 9.85953 1.72386 9.60948C1.47381 9.35943 1.33334 9.02029 1.33334 8.66667V2.66667C1.33334 2.31305 1.47381 1.97391 1.72386 1.72386C1.97391 1.47381 2.31305 1.33334 2.66667 1.33334H8.66667C9.02029 1.33334 9.35943 1.47381 9.60948 1.72386C9.85953 1.97391 10 2.31305 10 2.66667V3.33334",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),B==="copied"&&e.jsx("span",{className:"xiping-message__copy-tooltip",children:"Copied"})]});return i==="user"&&p?p:i==="assistant"&&_?_:e.jsxs("div",{className:l("xiping-message",i==="user"?"user":"assistant",M),style:S,children:[i==="user"&&x||i==="assistant"&&h?e.jsx("div",{className:"xiping-message__avatar",children:i==="user"?x:h}):null,e.jsx("div",{className:"xiping-message__content",children:y?W():q&&i==="assistant"?e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>j(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:l("xiping-message__think-content",n?"visible":"hidden"),children:e.jsx(r,{children:t})})]}),c&&N(),u&&e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:u})}),f()]}),w(),g&&e.jsx("div",{className:"xiping-message__timestamp",children:k(d)})]}):e.jsxs(e.Fragment,{children:[t&&e.jsxs("div",{className:"xiping-message__think",children:[e.jsxs("div",{className:"xiping-message__think-header",children:["思考过程:",e.jsx("button",{className:"xiping-message__think-toggle",onClick:()=>j(!n),"aria-label":n?"隐藏思考过程":"显示思考过程",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.3s ease"},children:e.jsx("path",{d:"M2 4L6 8L10 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),e.jsx("div",{className:l("xiping-message__think-content",n?"visible":"hidden"),children:e.jsx(r,{children:t})})]}),e.jsxs("div",{className:"xiping-message__text-container",children:[e.jsx("div",{className:"xiping-message__text",children:e.jsx(r,{children:o})}),f()]}),c&&N(),w(),g&&e.jsx("div",{className:"xiping-message__timestamp",children:k(d)})]})})]})};exports.Message=b;exports.default=b;
@@ -0,0 +1 @@
1
+ .xiping-pointer{position:fixed;z-index:50;pointer-events:none;transform:translate(-50%,-50%)}.xiping-pointer-icon{transform:rotate(-70deg);stroke:#fff;color:#000}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),p=require("../../utils/utils.js"),n=require("motion/react"),i=require("react");function y({className:v,style:m,children:f,...h}){const s=n.useMotionValue(0),r=n.useMotionValue(0),[x,a]=i.useState(!1),o=i.useRef(null);return i.useEffect(()=>{if(typeof window<"u"&&o.current){const e=o.current.parentElement;if(e){e.style.cursor="none";const c=d=>{s.set(d.clientX),r.set(d.clientY)},l=()=>{a(!0)},u=()=>{a(!1)};return e.addEventListener("mousemove",c),e.addEventListener("mouseenter",l),e.addEventListener("mouseleave",u),()=>{e.style.cursor="",e.removeEventListener("mousemove",c),e.removeEventListener("mouseenter",l),e.removeEventListener("mouseleave",u)}}}},[s,r]),t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:o}),t.jsx(n.AnimatePresence,{children:x&&t.jsx(n.motion.div,{className:"transform-[translate(-50%,-50%)] pointer-events-none fixed z-50",style:{top:r,left:s,...m},initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},...h,children:f||t.jsx("svg",{stroke:"currentColor",fill:"currentColor",strokeWidth:"1",viewBox:"0 0 16 16",height:"24",width:"24",xmlns:"http://www.w3.org/2000/svg",className:p.cn("rotate-[-70deg] stroke-white text-black",v),children:t.jsx("path",{d:"M14.082 2.182a.5.5 0 0 1 .103.557L8.528 15.467a.5.5 0 0 1-.917-.007L5.57 10.694.803 8.652a.5.5 0 0 1-.006-.916l12.728-5.657a.5.5 0 0 1 .556.103z"})})})})]})}exports.Pointer=y;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./Pointer.css');const t=require("react/jsx-runtime"),n=require("motion/react"),i=require("react"),h=require("clsx");;/* empty css */function y({className:v,style:m,children:f,...p}){const s=n.useMotionValue(0),r=n.useMotionValue(0),[x,c]=i.useState(!1),o=i.useRef(null);return i.useEffect(()=>{if(typeof window<"u"&&o.current){const e=o.current.parentElement;if(e){e.style.cursor="none";const a=d=>{s.set(d.clientX),r.set(d.clientY)},l=()=>{c(!0)},u=()=>{c(!1)};return e.addEventListener("mousemove",a),e.addEventListener("mouseenter",l),e.addEventListener("mouseleave",u),()=>{e.style.cursor="",e.removeEventListener("mousemove",a),e.removeEventListener("mouseenter",l),e.removeEventListener("mouseleave",u)}}}},[s,r]),t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:o}),t.jsx(n.AnimatePresence,{children:x&&t.jsx(n.motion.div,{className:h("xiping-pointer",v),style:{top:r,left:s,...m},initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},...p,children:f||t.jsx("svg",{stroke:"currentColor",fill:"currentColor",strokeWidth:"1",viewBox:"0 0 16 16",height:"24",width:"24",xmlns:"http://www.w3.org/2000/svg",className:"xiping-pointer-icon",children:t.jsx("path",{d:"M14.082 2.182a.5.5 0 0 1 .103.557L8.528 15.467a.5.5 0 0 1-.917-.007L5.57 10.694.803 8.652a.5.5 0 0 1-.006-.916l12.728-5.657a.5.5 0 0 1 .556.103z"})})})})]})}exports.Pointer=y;
@@ -0,0 +1 @@
1
+ .xiping-scratch-to-reveal{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.xiping-scratch-canvas{position:absolute;left:0;top:0}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react/jsx-runtime"),P=require("../../utils/utils.js"),x=require("motion/react"),a=require("react"),b=({width:m,height:h,minScratchPercentage:E=50,onComplete:v,children:M,className:L,gradientColors:i=["#A97CF8","#F38CB8","#FDCC92"]})=>{const r=a.useRef(null),[d,u]=a.useState(!1),[y,C]=a.useState(!1),f=x.useAnimation();a.useEffect(()=>{const e=r.current,t=e?.getContext("2d");if(e&&t){t.fillStyle="#ccc",t.fillRect(0,0,e.width,e.height);const o=t.createLinearGradient(0,0,e.width,e.height);o.addColorStop(0,i[0]),o.addColorStop(.5,i[1]),o.addColorStop(1,i[2]),t.fillStyle=o,t.fillRect(0,0,e.width,e.height)}},[i]),a.useEffect(()=>{const e=c=>{d&&g(c.clientX,c.clientY)},t=c=>{if(!d)return;const s=c.touches[0];g(s.clientX,s.clientY)},o=()=>{u(!1),I()},n=()=>{u(!1),I()};return document.addEventListener("mousedown",e),document.addEventListener("mousemove",e),document.addEventListener("touchstart",t),document.addEventListener("touchmove",t),document.addEventListener("mouseup",o),document.addEventListener("touchend",n),document.addEventListener("touchcancel",n),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("mousemove",e),document.removeEventListener("touchstart",t),document.removeEventListener("touchmove",t),document.removeEventListener("mouseup",o),document.removeEventListener("touchend",n),document.removeEventListener("touchcancel",n)}},[d]);const D=()=>u(!0),w=()=>u(!0),g=(e,t)=>{const o=r.current,n=o?.getContext("2d");if(o&&n){const c=o.getBoundingClientRect(),s=e-c.left+16,S=t-c.top+16;n.globalCompositeOperation="destination-out",n.beginPath(),n.arc(s,S,30,0,Math.PI*2),n.fill()}},R=async()=>{await f.start({scale:[1,1.5,1],rotate:[0,10,-10,10,-10,0],transition:{duration:.5}}),v&&v()},I=()=>{if(y)return;const e=r.current,t=e?.getContext("2d");if(e&&t){const n=t.getImageData(0,0,e.width,e.height).data,c=n.length/4;let s=0;for(let l=3;l<n.length;l+=4)n[l]===0&&s++;s/c*100>=E&&(C(!0),t.clearRect(0,0,e.width,e.height),R())}};return p.jsxs(x.motion.div,{className:P.cn("relative select-none",L),style:{width:m,height:h,cursor:"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj4KICA8Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNSIgc3R5bGU9ImZpbGw6I2ZmZjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MXB4OyIgLz4KPC9zdmc+'), auto"},animate:f,children:[p.jsx("canvas",{ref:r,width:m,height:h,className:"absolute left-0 top-0",onMouseDown:D,onTouchStart:w}),M]})};exports.ScratchToReveal=b;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./ScratchToReveal.css');const p=require("react/jsx-runtime"),S=require("motion/react"),a=require("react"),P=require("clsx");;/* empty css */const z=({width:m,height:h,minScratchPercentage:E=50,onComplete:v,children:M,className:L,gradientColors:i=["#A97CF8","#F38CB8","#FDCC92"]})=>{const r=a.useRef(null),[d,u]=a.useState(!1),[y,C]=a.useState(!1),g=S.useAnimation();a.useEffect(()=>{const e=r.current,t=e?.getContext("2d");if(e&&t){t.fillStyle="#ccc",t.fillRect(0,0,e.width,e.height);const c=t.createLinearGradient(0,0,e.width,e.height);c.addColorStop(0,i[0]),c.addColorStop(.5,i[1]),c.addColorStop(1,i[2]),t.fillStyle=c,t.fillRect(0,0,e.width,e.height)}},[i]),a.useEffect(()=>{const e=o=>{d&&f(o.clientX,o.clientY)},t=o=>{if(!d)return;const s=o.touches[0];f(s.clientX,s.clientY)},c=()=>{u(!1),I()},n=()=>{u(!1),I()};return document.addEventListener("mousedown",e),document.addEventListener("mousemove",e),document.addEventListener("touchstart",t),document.addEventListener("touchmove",t),document.addEventListener("mouseup",c),document.addEventListener("touchend",n),document.addEventListener("touchcancel",n),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("mousemove",e),document.removeEventListener("touchstart",t),document.removeEventListener("touchmove",t),document.removeEventListener("mouseup",c),document.removeEventListener("touchend",n),document.removeEventListener("touchcancel",n)}},[d]);const D=()=>u(!0),w=()=>u(!0),f=(e,t)=>{const c=r.current,n=c?.getContext("2d");if(c&&n){const o=c.getBoundingClientRect(),s=e-o.left+16,x=t-o.top+16;n.globalCompositeOperation="destination-out",n.beginPath(),n.arc(s,x,30,0,Math.PI*2),n.fill()}},R=async()=>{await g.start({scale:[1,1.5,1],rotate:[0,10,-10,10,-10,0],transition:{duration:.5}}),v&&v()},I=()=>{if(y)return;const e=r.current,t=e?.getContext("2d");if(e&&t){const n=t.getImageData(0,0,e.width,e.height).data,o=n.length/4;let s=0;for(let l=3;l<n.length;l+=4)n[l]===0&&s++;s/o*100>=E&&(C(!0),t.clearRect(0,0,e.width,e.height),R())}};return p.jsxs(S.motion.div,{className:P("xiping-scratch-to-reveal",L),style:{width:m,height:h,cursor:"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj4KICA8Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNSIgc3R5bGU9ImZpbGw6I2ZmZjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MXB4OyIgLz4KPC9zdmc+'), auto"},animate:g,children:[p.jsx("canvas",{ref:r,width:m,height:h,className:"xiping-scratch-canvas",onMouseDown:D,onTouchStart:w}),M]})};exports.ScratchToReveal=z;
@@ -0,0 +1 @@
1
+ .xiping-shimmer-button{position:relative;z-index:0;display:flex;cursor:pointer;align-items:center;justify-content:center;overflow:hidden;white-space:nowrap;border:1px solid rgba(255,255,255,.1);padding:.75rem 1.5rem;color:#fff;background:var(--bg);border-radius:var(--radius);transform:translateZ(0);transition:transform .3s ease-in-out}.xiping-shimmer-button:active{transform:translateY(1px) translateZ(0)}@media(prefers-color-scheme:dark){.xiping-shimmer-button{color:#000}}.xiping-shimmer-button-spark-container{position:absolute;z-index:-30;inset:0;overflow:visible;filter:blur(2px);container-type:size}.xiping-shimmer-button-spark{position:absolute;inset:0;height:100cqh;aspect-ratio:1;border-radius:0;-webkit-mask:none;mask:none;animation:xiping-shimmer-slide var(--speed) ease-in-out infinite alternate}.xiping-shimmer-button-spark-before{position:absolute;inset:-100%;width:auto;transform:rotate(0);background:conic-gradient(from calc(270deg - (var(--spread) * .5)),transparent 0,var(--shimmer-color) var(--spread),transparent var(--spread));animation:xiping-spin-around calc(var(--speed) * 2) infinite linear}.xiping-shimmer-button-highlight{position:absolute;inset:0;width:100%;height:100%;border-radius:1rem;box-shadow:inset 0 -8px 10px #ffffff1f;transform:translateZ(0);transition:all .3s ease-in-out}.xiping-shimmer-button:hover .xiping-shimmer-button-highlight{box-shadow:inset 0 -6px 10px #ffffff40}.xiping-shimmer-button:active .xiping-shimmer-button-highlight{box-shadow:inset 0 -10px 10px #ffffff40}.xiping-shimmer-button-backdrop{position:absolute;z-index:-20;background:var(--bg);border-radius:var(--radius);inset:var(--cut)}@keyframes xiping-shimmer-slide{to{transform:translate(calc(100cqw - 100%))}}@keyframes xiping-spin-around{0%{transform:translateZ(0) rotate(0)}15%,35%{transform:translateZ(0) rotate(90deg)}65%,85%{transform:translateZ(0) rotate(270deg)}to{transform:translateZ(0) rotate(360deg)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),l=require("react"),d=require("../../utils/utils.js");;/* empty css */const i=l.forwardRef(({shimmerColor:s="#ffffff",shimmerSize:r="0.05em",shimmerDuration:t="3s",borderRadius:m="100px",background:n="rgba(0, 0, 0, 1)",className:a,children:u,...o},c)=>e.jsxs("button",{style:{"--spread":"90deg","--shimmer-color":s,"--radius":m,"--speed":t,"--cut":r,"--bg":n},className:d.cn("xiping-shimmer-button",a),ref:c,...o,children:[e.jsx("div",{className:"xiping-shimmer-button-spark-container",children:e.jsx("div",{className:"xiping-shimmer-button-spark",children:e.jsx("div",{className:"xiping-shimmer-button-spark-before"})})}),u,e.jsx("div",{className:"xiping-shimmer-button-highlight"}),e.jsx("div",{className:"xiping-shimmer-button-backdrop"})]}));i.displayName="ShimmerButton";exports.ShimmerButton=i;exports.default=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ShimmerButton.css');const e=require("react/jsx-runtime"),l=require("react"),d=require("clsx");;/* empty css */const s=l.forwardRef(({shimmerColor:i="#ffffff",shimmerSize:r="0.05em",shimmerDuration:t="3s",borderRadius:m="100px",background:n="rgba(0, 0, 0, 1)",className:a,children:o,...u},c)=>e.jsxs("button",{style:{"--spread":"90deg","--shimmer-color":i,"--radius":m,"--speed":t,"--cut":r,"--bg":n},className:d("xiping-shimmer-button",a),ref:c,...u,children:[e.jsx("div",{className:"xiping-shimmer-button-spark-container",children:e.jsx("div",{className:"xiping-shimmer-button-spark",children:e.jsx("div",{className:"xiping-shimmer-button-spark-before"})})}),o,e.jsx("div",{className:"xiping-shimmer-button-highlight"}),e.jsx("div",{className:"xiping-shimmer-button-backdrop"})]}));s.displayName="ShimmerButton";exports.ShimmerButton=s;exports.default=s;
@@ -0,0 +1 @@
1
+ .xiping-shiny-button{position:relative;cursor:pointer;border-radius:.5rem;padding:.5rem 1.5rem;font-weight:500;-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);border:1px solid;transition:box-shadow .3s ease-in-out}.xiping-shiny-button:hover{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}@media(prefers-color-scheme:dark){.xiping-shiny-button{background:radial-gradient(circle at 50% 0%,var(--primary) 10%,transparent 60%)}.xiping-shiny-button:hover{box-shadow:0 0 20px var(--primary) / 10%}}.xiping-shiny-button-text{position:relative;display:block;width:100%;height:100%;font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:#000000a6}@media(prefers-color-scheme:dark){.xiping-shiny-button-text{font-weight:300;color:#ffffffe5}}.xiping-shiny-button-border{position:absolute;inset:0;z-index:10;display:block;border-radius:inherit;padding:1px}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("../../utils/utils.js"),c=require("motion/react"),l=require("react");;/* empty css */const o={initial:{"--x":"100%",scale:.8},animate:{"--x":"-100%",scale:1},whileTap:{scale:.95},transition:{repeat:1/0,repeatType:"loop",repeatDelay:1,type:"spring",stiffness:20,damping:15,mass:2,scale:{type:"spring",stiffness:200,damping:5,mass:.5}}},e=l.forwardRef(({children:r,className:n,...t},i)=>a.jsxs(c.motion.button,{ref:i,className:s.cn("xiping-shiny-button",n),...o,...t,children:[a.jsx("span",{className:"xiping-shiny-button-text",style:{maskImage:"linear-gradient(-75deg,var(--primary) calc(var(--x) + 20%),transparent calc(var(--x) + 30%),var(--primary) calc(var(--x) + 100%))"},children:r}),a.jsx("span",{style:{mask:"linear-gradient(rgb(0,0,0), rgb(0,0,0)) content-box exclude,linear-gradient(rgb(0,0,0), rgb(0,0,0))",WebkitMask:"linear-gradient(rgb(0,0,0), rgb(0,0,0)) content-box exclude,linear-gradient(rgb(0,0,0), rgb(0,0,0))",backgroundImage:"linear-gradient(-75deg,var(--primary)/10% calc(var(--x)+20%),var(--primary)/50% calc(var(--x)+25%),var(--primary)/10% calc(var(--x)+100%))"},className:"xiping-shiny-button-border"})]}));e.displayName="ShinyButton";exports.ShinyButton=e;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./ShinyButton.css');const a=require("react/jsx-runtime"),s=require("motion/react"),c=require("react"),l=require("clsx");;/* empty css */const o={initial:{"--x":"100%",scale:.8},animate:{"--x":"-100%",scale:1},whileTap:{scale:.95},transition:{repeat:1/0,repeatType:"loop",repeatDelay:1,type:"spring",stiffness:20,damping:15,mass:2,scale:{type:"spring",stiffness:200,damping:5,mass:.5}}},e=c.forwardRef(({children:r,className:n,...t},i)=>a.jsxs(s.motion.button,{ref:i,className:l("xiping-shiny-button",n),...o,...t,children:[a.jsx("span",{className:"xiping-shiny-button-text",style:{maskImage:"linear-gradient(-75deg,var(--primary) calc(var(--x) + 20%),transparent calc(var(--x) + 30%),var(--primary) calc(var(--x) + 100%))"},children:r}),a.jsx("span",{style:{mask:"linear-gradient(rgb(0,0,0), rgb(0,0,0)) content-box exclude,linear-gradient(rgb(0,0,0), rgb(0,0,0))",WebkitMask:"linear-gradient(rgb(0,0,0), rgb(0,0,0)) content-box exclude,linear-gradient(rgb(0,0,0), rgb(0,0,0))",backgroundImage:"linear-gradient(-75deg,var(--primary)/10% calc(var(--x)+20%),var(--primary)/50% calc(var(--x)+25%),var(--primary)/10% calc(var(--x)+100%))"},className:"xiping-shiny-button-border"})]}));e.displayName="ShinyButton";exports.ShinyButton=e;
@@ -0,0 +1 @@
1
+ .shiny-text{display:inline-block}
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ interface ShinyTextProps {
3
+ text: string;
4
+ disabled?: boolean;
5
+ speed?: number;
6
+ className?: string;
7
+ color?: string;
8
+ shineColor?: string;
9
+ spread?: number;
10
+ yoyo?: boolean;
11
+ pauseOnHover?: boolean;
12
+ direction?: 'left' | 'right';
13
+ delay?: number;
14
+ }
15
+ declare const ShinyText: React.FC<ShinyTextProps>;
16
+ export default ShinyText;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./ShinyText.css');const E=require("react/jsx-runtime"),r=require("react"),d=require("motion/react");;/* empty css */const F=({text:k,disabled:R=!1,speed:$=2,className:p="",color:a="#b5b5b5",shineColor:x="#ffffff",spread:M=120,yoyo:C=!1,pauseOnHover:o=!1,direction:b="left",delay:S=0})=>{const[h,g]=r.useState(!1),e=d.useMotionValue(0),i=r.useRef(0),u=r.useRef(null),s=r.useRef(b==="left"?1:-1),t=$*1e3,y=S*1e3;d.useAnimationFrame(l=>{if(R||h){u.current=null;return}if(u.current===null){u.current=l;return}const v=l-u.current;if(u.current=l,i.current+=v,C){const c=t+y,f=c*2,n=i.current%f;if(n<t){const m=n/t*100;e.set(s.current===1?m:100-m)}else if(n<c)e.set(s.current===1?100:0);else if(n<c+t){const T=100-(n-c)/t*100;e.set(s.current===1?T:100-T)}else e.set(s.current===1?0:100)}else{const c=t+y,f=i.current%c;if(f<t){const n=f/t*100;e.set(s.current===1?n:100-n)}else e.set(s.current===1?100:0)}}),r.useEffect(()=>{s.current=b==="left"?1:-1,i.current=0,e.set(0)},[b]);const q=d.useTransform(e,l=>`${150-l*2}% center`),D=r.useCallback(()=>{o&&g(!0)},[o]),P=r.useCallback(()=>{o&&g(!1)},[o]),j={backgroundImage:`linear-gradient(${M}deg, ${a} 0%, ${a} 35%, ${x} 50%, ${a} 65%, ${a} 100%)`,backgroundSize:"200% auto",WebkitBackgroundClip:"text",backgroundClip:"text",WebkitTextFillColor:"transparent"};return E.jsx(d.motion.span,{className:`shiny-text ${p}`,style:{...j,backgroundPosition:q},onMouseEnter:D,onMouseLeave:P,children:k})};exports.default=F;
@@ -0,0 +1,2 @@
1
+ import { default as ShinyText } from './ShinyText';
2
+ export { ShinyText };
@@ -0,0 +1 @@
1
+ .xiping-sparkle{pointer-events:none;position:absolute;z-index:20}.xiping-sparkles-text{font-size:3.75rem;font-weight:700}.xiping-sparkles-text-wrapper{position:relative;display:inline-block}
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),g=require("motion/react"),d=require("react"),k=require("../../utils/utils.js");;/* empty css */const y=({id:i,x:e,y:o,color:a,delay:c,scale:l})=>n.jsx(g.motion.svg,{className:"xiping-sparkle",initial:{opacity:0,left:e,top:o},animate:{opacity:[0,1,0],scale:[0,l,0],rotate:[75,120,150]},transition:{duration:.8,repeat:1/0,delay:c},width:"21",height:"21",viewBox:"0 0 21 21",children:n.jsx("path",{d:"M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z",fill:a})},i),j=({children:i,colors:e={first:"#9E7AFF",second:"#FE8BBB"},className:o,sparklesCount:a=10,...c})=>{const[l,p]=d.useState([]);return d.useEffect(()=>{const r=()=>{const t=`${Math.random()*100}%`,s=`${Math.random()*100}%`,x=Math.random()>.5?e.first:e.second,h=Math.random()*2,C=Math.random()*1+.3,S=Math.random()*10+5;return{id:`${t}-${s}-${Date.now()}`,x:t,y:s,color:x,delay:h,scale:C,lifespan:S}},u=()=>{const t=Array.from({length:a},r);p(t)},f=()=>{p(t=>t.map(s=>s.lifespan<=0?r():{...s,lifespan:s.lifespan-.1}))};u();const m=setInterval(f,100);return()=>clearInterval(m)},[e.first,e.second,a]),n.jsx("div",{className:k.cn("xiping-sparkles-text",o),...c,style:{"--sparkles-first-color":`${e.first}`,"--sparkles-second-color":`${e.second}`},children:n.jsxs("span",{className:"xiping-sparkles-text-wrapper",children:[l.map(r=>n.jsx(y,{...r},r.id)),n.jsx("strong",{children:i})]})})};exports.SparklesText=j;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./SparklesText.css');const n=require("react/jsx-runtime"),g=require("motion/react"),d=require("react"),k=require("clsx");;/* empty css */const y=({id:i,x:e,y:o,color:a,delay:c,scale:l})=>n.jsx(g.motion.svg,{className:"xiping-sparkle",initial:{opacity:0,left:e,top:o},animate:{opacity:[0,1,0],scale:[0,l,0],rotate:[75,120,150]},transition:{duration:.8,repeat:1/0,delay:c},width:"21",height:"21",viewBox:"0 0 21 21",children:n.jsx("path",{d:"M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z",fill:a})},i),j=({children:i,colors:e={first:"#9E7AFF",second:"#FE8BBB"},className:o,sparklesCount:a=10,...c})=>{const[l,p]=d.useState([]);return d.useEffect(()=>{const r=()=>{const t=`${Math.random()*100}%`,s=`${Math.random()*100}%`,m=Math.random()>.5?e.first:e.second,h=Math.random()*2,C=Math.random()*1+.3,S=Math.random()*10+5;return{id:`${t}-${s}-${Date.now()}`,x:t,y:s,color:m,delay:h,scale:C,lifespan:S}},u=()=>{const t=Array.from({length:a},r);p(t)},f=()=>{p(t=>t.map(s=>s.lifespan<=0?r():{...s,lifespan:s.lifespan-.1}))};u();const x=setInterval(f,100);return()=>clearInterval(x)},[e.first,e.second,a]),n.jsx("div",{className:k("xiping-sparkles-text",o),...c,style:{"--sparkles-first-color":`${e.first}`,"--sparkles-second-color":`${e.second}`},children:n.jsxs("span",{className:"xiping-sparkles-text-wrapper",children:[l.map(r=>n.jsx(y,{...r},r.id)),n.jsx("strong",{children:i})]})})};exports.SparklesText=j;
@@ -0,0 +1 @@
1
+ .xiping-split-parent{overflow:hidden;display:inline-block;white-space:normal}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("react/jsx-runtime"),l=require("react"),o=require("gsap"),D=require("gsap/ScrollTrigger"),$=require("gsap/SplitText"),E=require("clsx");;/* empty css */o.gsap.registerPlugin(D.ScrollTrigger,$.SplitText);const F=({text:c,className:k="",delay:d=100,duration:m=.6,ease:x="power3.out",splitType:n="chars",from:h={opacity:0,y:40},to:a={opacity:1,y:0},threshold:w=.1,rootMargin:T="-100px",textAlign:q="center",onLetterAnimationComplete:S})=>{const u=l.useRef(null),y=l.useRef(!1),s=l.useRef(null);return l.useEffect(()=>{if(typeof window>"u"||!u.current||!c)return;const g=u.current;y.current=!1;const b=n==="lines";b&&(g.style.position="relative");let r;try{r=new $.SplitText(g,{type:n,absolute:b,linesClass:"split-line"})}catch(t){console.error("Failed to create SplitText:",t);return}let e;switch(n){case"lines":e=r.lines;break;case"words":e=r.words;break;case"chars":e=r.chars;break;default:e=r.chars}if(!e||e.length===0){console.warn("No targets found for SplitText animation"),r.revert();return}e.forEach(t=>{t.style.willChange="transform, opacity"});const C=(1-w)*100,i=/^(-?\d+(?:\.\d+)?)(px|em|rem|%)?$/.exec(T),p=i?parseFloat(i[1]):0,R=i&&i[2]||"px",v=p<0?`-=${Math.abs(p)}${R}`:`+=${p}${R}`,P=`top ${C}%${v}`,f=o.gsap.timeline({scrollTrigger:{trigger:g,start:P,toggleActions:"play none none none",once:!0,onToggle:t=>{s.current=t}},smoothChildTiming:!0,onComplete:()=>{y.current=!0,o.gsap.set(e,{...a,clearProps:"willChange",immediateRender:!0}),S?.()}});return f.set(e,{...h,immediateRender:!1,force3D:!0}),f.to(e,{...a,duration:m,ease:x,stagger:d/1e3,force3D:!0}),()=>{f.kill(),s.current&&(s.current.kill(),s.current=null),o.gsap.killTweensOf(e),r&&r.revert()}},[c,d,m,x,n,h,a,w,T,S]),j.jsx("p",{ref:u,className:E("xiping-split-parent",k),style:{textAlign:q,wordWrap:"break-word"},children:c})};exports.SplitText=F;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./SplitText.css');const j=require("react/jsx-runtime"),l=require("react"),o=require("gsap"),D=require("gsap/ScrollTrigger"),$=require("gsap/SplitText"),E=require("clsx");;/* empty css */o.gsap.registerPlugin(D.ScrollTrigger,$.SplitText);const F=({text:c,className:k="",delay:d=100,duration:m=.6,ease:x="power3.out",splitType:n="chars",from:h={opacity:0,y:40},to:a={opacity:1,y:0},threshold:w=.1,rootMargin:T="-100px",textAlign:q="center",onLetterAnimationComplete:S})=>{const u=l.useRef(null),y=l.useRef(!1),s=l.useRef(null);return l.useEffect(()=>{if(typeof window>"u"||!u.current||!c)return;const g=u.current;y.current=!1;const b=n==="lines";b&&(g.style.position="relative");let r;try{r=new $.SplitText(g,{type:n,absolute:b,linesClass:"split-line"})}catch(t){console.error("Failed to create SplitText:",t);return}let e;switch(n){case"lines":e=r.lines;break;case"words":e=r.words;break;case"chars":e=r.chars;break;default:e=r.chars}if(!e||e.length===0){console.warn("No targets found for SplitText animation"),r.revert();return}e.forEach(t=>{t.style.willChange="transform, opacity"});const C=(1-w)*100,i=/^(-?\d+(?:\.\d+)?)(px|em|rem|%)?$/.exec(T),p=i?parseFloat(i[1]):0,R=i&&i[2]||"px",v=p<0?`-=${Math.abs(p)}${R}`:`+=${p}${R}`,P=`top ${C}%${v}`,f=o.gsap.timeline({scrollTrigger:{trigger:g,start:P,toggleActions:"play none none none",once:!0,onToggle:t=>{s.current=t}},smoothChildTiming:!0,onComplete:()=>{y.current=!0,o.gsap.set(e,{...a,clearProps:"willChange",immediateRender:!0}),S?.()}});return f.set(e,{...h,immediateRender:!1,force3D:!0}),f.to(e,{...a,duration:m,ease:x,stagger:d/1e3,force3D:!0}),()=>{f.kill(),s.current&&(s.current.kill(),s.current=null),o.gsap.killTweensOf(e),r&&r.revert()}},[c,d,m,x,n,h,a,w,T,S]),j.jsx("p",{ref:u,className:E("xiping-split-parent",k),style:{textAlign:q,wordWrap:"break-word"},children:c})};exports.SplitText=F;
@@ -0,0 +1 @@
1
+ .xiping-subtitle-player__current-item{display:flex;flex-direction:column;gap:.25rem;transition:all .2s ease}.xiping-subtitle-player__current-label{font-size:.75rem;font-weight:600;color:#ffffffb3;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem}.xiping-subtitle-player__current-text{font-size:1rem;font-weight:500;text-shadow:0 2px 4px rgba(0,0,0,.5)}.xiping-subtitle-player__current-line{margin:.25rem 0}.xiping-subtitle-player__current-line:first-child{margin-top:0}.xiping-subtitle-player__current-line:last-child{margin-bottom:0}.xiping-subtitle-player__current-hover-layer{position:absolute;inset:0;pointer-events:none}@media(max-width:768px){.xiping-subtitle-player__current-text{font-size:.9rem}}
@@ -15,6 +15,8 @@ export interface CurrentModeProps {
15
15
  overlayNode: React.ReactNode;
16
16
  /** 整条字幕点击处理器 */
17
17
  onSubtitleClick?: (event: React.MouseEvent<HTMLDivElement>, entry: SubtitleEntry, label?: string) => void;
18
+ /** 文本对齐方式 */
19
+ textAlign?: "left" | "center";
18
20
  }
19
21
  /**
20
22
  * 当前模式组件:只显示当前时间对应的字幕
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("./utils.js"),m=({currentEntries:n,wordHoverFactory:o,enableWordHover:d,overlayNode:c,onSubtitleClick:t})=>n.some(({entry:s})=>s!==null)?e.jsxs(e.Fragment,{children:[n.map(({entry:s,label:i},p)=>s?e.jsxs("div",{className:"xiping-subtitle-player__item","data-label":i||void 0,onClick:t?r=>t(r,s,i):void 0,style:t?{cursor:"pointer"}:void 0,children:[i&&e.jsx("span",{className:"xiping-subtitle-player__label",children:i}),e.jsx("div",{className:"xiping-subtitle-player__text",children:(()=>{let r=0;return s.text.split(`
2
- `).map((u,l)=>{if(!s.words||s.words.length===0)return e.jsx("div",{className:"xiping-subtitle-player__line",children:u},l);const a=x.renderTextWithWords(u,s.words,r,l,d?o(s,i):void 0);return r=a.nextWordIndex,e.jsx("div",{className:"xiping-subtitle-player__line",children:a.nodes},l)})})()})]},p):null),d&&e.jsx("div",{className:"xiping-subtitle-player__hover-layer",children:c})]}):null;exports.CurrentMode=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./CurrentMode.css');const t=require("react/jsx-runtime"),v=require("./utils.js");;/* empty css */const g=({currentEntries:l,wordHoverFactory:c,enableWordHover:o,overlayNode:x,onSubtitleClick:r,textAlign:a="left"})=>l.some(({entry:e})=>e!==null)?t.jsxs(t.Fragment,{children:[l.map(({entry:e,label:s})=>{if(!e)return null;const p=e.text.split(`
2
+ `),h=o?c(e,s):void 0,m=p.reduce((n,d,i)=>{if(!e.words||e.words.length===0)return n.content.push(t.jsx("div",{className:"xiping-subtitle-player__current-line",children:d},i)),n;const u=v.renderTextWithWords(d,e.words,n.nextWordIndex,i,h);return n.content.push(t.jsx("div",{className:"xiping-subtitle-player__current-line",children:u.nodes},i)),{content:n.content,nextWordIndex:u.nextWordIndex}},{content:[],nextWordIndex:0}).content,_=r?n=>r(n,e,s):void 0;return t.jsxs("div",{className:"xiping-subtitle-player__current-item","data-label":s||void 0,onClick:_,style:r?{cursor:"pointer"}:void 0,children:[s&&t.jsx("span",{className:"xiping-subtitle-player__current-label",children:s}),t.jsx("div",{className:"xiping-subtitle-player__current-text",style:{textAlign:a},children:m})]},`${e.index}-${s||""}`)}),o&&t.jsx("div",{className:"xiping-subtitle-player__current-hover-layer",children:x})]}):null;exports.CurrentMode=g;
@@ -0,0 +1 @@
1
+ .xiping-subtitle-player__lyrics-time{font-size:.7rem;font-weight:500;color:#ffffff80;font-family:Monaco,Menlo,Ubuntu Mono,monospace;margin-bottom:.25rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}.xiping-subtitle-player__lyrics-item{display:flex;flex-direction:column;gap:.25rem;transition:all .2s ease}.xiping-subtitle-player__lyrics-item--active{color:#fbbf24;font-weight:600;transition:all .3s ease;position:relative}.xiping-subtitle-player__lyrics-item--active:before{content:"";position:absolute;left:-1rem;top:50%;transform:translateY(-50%);width:4px;height:92%;background:#fbbf24;border-radius:2px}.xiping-subtitle-player__lyrics-item--past{opacity:.5;color:#fff9}.xiping-subtitle-player__lyrics-label{font-size:.75rem;font-weight:600;color:#ffffffb3;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem}.xiping-subtitle-player__lyrics-text{font-size:1rem;font-weight:500;text-shadow:0 2px 4px rgba(0,0,0,.5)}.xiping-subtitle-player__lyrics-line{margin:.25rem 0}.xiping-subtitle-player__lyrics-line:first-child{margin-top:0}.xiping-subtitle-player__lyrics-line:last-child{margin-bottom:0}.xiping-subtitle-player__lyrics-hover-layer{position:absolute;inset:0;pointer-events:none}.xiping-subtitle-player--lyrics{max-height:600px;overflow-y:auto;gap:.5rem;scroll-behavior:smooth}.xiping-subtitle-player--lyrics::-webkit-scrollbar{width:8px}.xiping-subtitle-player--lyrics::-webkit-scrollbar-track{background:#ffffff1a;border-radius:4px}.xiping-subtitle-player--lyrics::-webkit-scrollbar-thumb{background:#ffffff4d;border-radius:4px}.xiping-subtitle-player--lyrics::-webkit-scrollbar-thumb:hover{background:#ffffff80}.xiping-subtitle-player__group{display:flex;flex-direction:column;gap:.5rem;width:100%;border-radius:.5rem;padding:.5rem;margin:-.5rem;transition:all .2s ease}.xiping-subtitle-player__group:hover{background-color:#ffffff1a}.xiping-subtitle-player__group:hover .xiping-subtitle-player__lyrics-item{transform:translate(4px)}.xiping-subtitle-player__group:hover .xiping-subtitle-player__lyrics-item--active{background-color:#fbbf2426}.xiping-subtitle-player__lyrics-item--active .xiping-subtitle-word{color:#fbbf24;font-weight:600}@media(max-width:768px){.xiping-subtitle-player__lyrics-text{font-size:.9rem}}
@@ -21,6 +21,8 @@ export interface LyricsModeProps {
21
21
  containerRef: React.RefObject<HTMLDivElement | null>;
22
22
  /** 整条字幕点击处理器 */
23
23
  onSubtitleClick?: (event: React.MouseEvent<HTMLDivElement>, entry: SubtitleEntry, label?: string) => void;
24
+ /** 文本对齐方式 */
25
+ textAlign?: "left" | "center";
24
26
  }
25
27
  /**
26
28
  * 歌词模式组件:显示全部字幕并高亮当前字幕
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),j=require("react"),S=require("clsx"),y=require("./utils.js"),H=({groupedEntriesByTime:f,currentTime:c,wordHoverFactory:b,enableWordHover:m,overlayNode:N,containerRef:l,onSubtitleClick:o})=>{const a=j.useRef(null);return j.useEffect(()=>{if(a.current&&l.current){const i=l.current,r=a.current,p=r.offsetTop,u=i.clientHeight,s=r.clientHeight,e=p-u/2+s/2;i.scrollTo({top:e,behavior:"smooth"})}},[c,l]),t.jsxs(t.Fragment,{children:[f.map((i,r)=>{const p=i[0]?.startTime??0,u=y.secondsToTimeString(p);return t.jsx("div",{className:"xiping-subtitle-player__group",children:i.map(({entry:s,label:e,startTime:T,endTime:x},g)=>{const _=c>=T&&c<=x,q=c>x,w=g===0;let h=0;return t.jsxs("div",{ref:_?a:null,className:S("xiping-subtitle-player__item",{"xiping-subtitle-player__item--active":_,"xiping-subtitle-player__item--past":q}),"data-label":e||void 0,onClick:o?n=>o(n,s,e):void 0,style:o?{cursor:"pointer"}:void 0,children:[w&&t.jsx("span",{className:"xiping-subtitle-player__time",children:u}),e&&t.jsx("span",{className:"xiping-subtitle-player__label",children:e}),t.jsx("div",{className:"xiping-subtitle-player__text",children:s.text.split(`
2
- `).map((n,d)=>{if(!s.words||s.words.length===0)return t.jsx("div",{className:"xiping-subtitle-player__line",children:n},d);const v=y.renderTextWithWords(n,s.words,h,d,m?b(s,e):void 0);return h=v.nextWordIndex,t.jsx("div",{className:"xiping-subtitle-player__line",children:v.nodes},d)})})]},`${r}-${g}`)})},r)}),m&&t.jsx("div",{className:"xiping-subtitle-player__hover-layer",children:N})]})};exports.LyricsMode=H;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./LyricsMode.css');const n=require("react/jsx-runtime"),d=require("react"),q=require("clsx"),I=require("./utils.js");;/* empty css */const R=({entry:t,label:e,endTime:y,currentTime:_,isActive:j,isFirstItem:m,timeString:v,textAlign:N,enableWordHover:p,wordHoverFactory:h,onSubtitleClick:r,itemRef:s})=>{const c=_>y,i=d.useCallback(x=>{r&&r(x,t,e)},[r,t,e]),o=d.useMemo(()=>p?h(t,e):void 0,[p,h,t,e]),l=d.useMemo(()=>t.text.split(`
2
+ `).reduce((u,g,a)=>{if(!t.words||t.words.length===0)return u.content.push(n.jsx("div",{className:"xiping-subtitle-player__lyrics-line",children:g},a)),u;const f=I.renderTextWithWords(g,t.words,u.nextWordIndex,a,o);return u.content.push(n.jsx("div",{className:"xiping-subtitle-player__lyrics-line",children:f.nodes},a)),{content:u.content,nextWordIndex:f.nextWordIndex}},{content:[],nextWordIndex:0}).content,[t.text,t.words,o]);return n.jsxs("div",{ref:s,className:q("xiping-subtitle-player__lyrics-item",{"xiping-subtitle-player__lyrics-item--active":j,"xiping-subtitle-player__lyrics-item--past":c}),"data-label":e||void 0,onClick:r?i:void 0,style:r?{cursor:"pointer"}:void 0,children:[m&&v&&n.jsx("span",{className:"xiping-subtitle-player__lyrics-time",children:v}),e&&n.jsx("span",{className:"xiping-subtitle-player__lyrics-label",children:e}),n.jsx("div",{className:"xiping-subtitle-player__lyrics-text",style:{textAlign:N},children:l})]})},b=({groupedEntriesByTime:t,currentTime:e,wordHoverFactory:y,enableWordHover:_,overlayNode:j,containerRef:m,onSubtitleClick:v,textAlign:N="left"})=>{const p=d.useRef(null),h=d.useRef(null),r=d.useMemo(()=>{for(let s=0;s<t.length;s++){const c=t[s];for(let i=0;i<c.length;i++){const{startTime:o,endTime:l}=c[i];if(e>=o&&e<=l)return`${s}-${i}`}}return null},[t,e]);return d.useEffect(()=>{if(r&&r!==h.current&&p.current&&m.current){const s=m.current,c=p.current,i=c.offsetTop,o=s.clientHeight,l=c.clientHeight,x=i-o/2+l/2;s.scrollTo({top:x,behavior:"smooth"}),h.current=r}},[r,m]),n.jsxs(n.Fragment,{children:[t.map((s,c)=>{const i=s[0];if(!i)return null;const o=I.secondsToTimeString(i.startTime);return n.jsx("div",{className:"xiping-subtitle-player__group",children:s.map(({entry:l,label:x,startTime:u,endTime:g},a)=>{const f=e>=u&&e<=g,M=`${c}-${a}`;return n.jsx(R,{entry:l,label:x,endTime:g,currentTime:e,isActive:f,isFirstItem:a===0,timeString:a===0?o:void 0,textAlign:N,enableWordHover:_,wordHoverFactory:y,onSubtitleClick:v,itemRef:f?p:void 0},M)})},c)}),_&&n.jsx("div",{className:"xiping-subtitle-player__lyrics-hover-layer",children:j})]})};exports.LyricsMode=b;
@@ -0,0 +1 @@
1
+ .xiping-subtitle-player{display:flex;flex-direction:column;gap:.75rem;padding:1rem;background:#000000bf;border-radius:.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.6;max-width:100%;box-sizing:border-box;position:relative}.xiping-subtitle-player__hover-overlay{position:absolute;transform:translate(-50%,.5rem);z-index:10;pointer-events:auto}.xiping-subtitle-player:has(.xiping-subtitle-player__current-item:only-child){align-items:center}.xiping-subtitle-player:has(.xiping-subtitle-player__current-item:not(:only-child)){align-items:flex-start}.xiping-subtitle-word{display:inline-block;position:relative;transition:all .2s ease;padding:0 .05em;margin:0 .05em;border-radius:2px}.xiping-subtitle-word:hover{background-color:#ffffff1a;transform:translateY(-1px)}.xiping-subtitle-word-before,.xiping-subtitle-word-after{display:inline}@media(max-width:768px){.xiping-subtitle-player{padding:.75rem;font-size:.9rem}}
@@ -19,6 +19,8 @@ export interface SubtitlePlayerProps {
19
19
  currentTime: number;
20
20
  /** 显示模式:'current' 只显示当前字幕,'lyrics' 显示全部字幕并高亮当前 */
21
21
  mode?: SubtitleDisplayMode;
22
+ /** 文本对齐方式:'left' 左对齐,'center' 居中,默认为 'left' */
23
+ textAlign?: "left" | "center";
22
24
  /** 自定义类名 */
23
25
  className?: string;
24
26
  /** 自定义样式 */
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("react/jsx-runtime"),o=require("react"),l=require("../../packages/subtitle/lib/src/parser.js"),P=require("../../packages/subtitle/lib/src/json-converter.js"),J=require("clsx"),V=require("./CurrentMode.js"),W=require("./LyricsMode.js"),M=require("./utils.js");;/* empty css */const O=({subtitles:g,currentTime:y,mode:T="current",className:L="",style:N,onWordHoverChange:i,renderWordOverlay:f,onWordClick:m,onSubtitleClick:R})=>{const u=o.useMemo(()=>Array.isArray(g)?g:[g],[g]),p=o.useRef(null),[a,b]=o.useState(null),[S,v]=o.useState([]);o.useEffect(()=>{let r=!0;async function c(){try{const t=await Promise.all(u.map(async e=>{try{const n=e.language||"zh",s=e.type==="srt"?await P.srtToJson(e.content,n):await P.vttToJson(e.content,n);return{entries:JSON.parse(s),label:e.label}}catch(n){return console.error("字幕解析失败:",n),{entries:e.type==="srt"?l.parseSRT(e.content):l.parseVTT(e.content),label:e.label}}}));r&&v(t)}catch(t){if(console.error("加载字幕失败:",t),r){const e=u.map(n=>{try{return{entries:n.type==="srt"?l.parseSRT(n.content):l.parseVTT(n.content),label:n.label}}catch(s){return console.error("字幕解析失败:",s),{entries:[],label:n.label}}});v(e)}}}return c(),()=>{r=!1}},[u]);const h=o.useMemo(()=>S.length>0?S:u.map(r=>{try{return{entries:r.type==="srt"?l.parseSRT(r.content):l.parseVTT(r.content),label:r.label}}catch(c){return console.error("字幕解析失败:",c),{entries:[],label:r.label}}}),[S,u]),_=o.useMemo(()=>h.map(({entries:r,label:c})=>({entry:M.getCurrentSubtitleEntry(r,y),label:c,entries:r})),[h,y]),A=o.useMemo(()=>{const r=[];h.forEach(({entries:e,label:n})=>{e.forEach(s=>{r.push({entry:s,label:n,startTime:M.timeStringToSeconds(s.startTime),endTime:M.timeStringToSeconds(s.endTime)})})}),r.sort((e,n)=>e.startTime-n.startTime);const c=[];let t=[];for(const e of r)if(t.length===0)t.push(e);else{const n=t[t.length-1];e.startTime<=n.endTime?t.push(e):(c.push(t),t=[e])}return t.length>0&&c.push(t),c},[h]),C=o.useCallback((r,c)=>{const t=r.currentTarget.getBoundingClientRect(),e=p.current?.getBoundingClientRect(),n=e!==void 0?new DOMRect(t.left-e.left,t.top-e.top,t.width,t.height):t,s={...c,rect:n,element:r.currentTarget};b(s),i?.(s)},[i]),w=o.useCallback(()=>{b(null),i?.(null)},[i]),x=o.useCallback((r,c)=>{if(!m)return;r.stopPropagation();const t=r.currentTarget.getBoundingClientRect(),e=p.current?.getBoundingClientRect(),n=e!==void 0?new DOMRect(t.left-e.left,t.top-e.top,t.width,t.height):t,s={type:"word",...c,rect:n,element:r.currentTarget};m(s)},[m]),q=o.useCallback((r,c,t)=>{if(!R||r.target.closest(".xiping-subtitle-word"))return;const n=r.currentTarget.getBoundingClientRect(),s=p.current?.getBoundingClientRect(),B=s!==void 0?new DOMRect(n.left-s.left,n.top-s.top,n.width,n.height):n,D={type:"subtitle",entry:c,label:t,rect:B,element:r.currentTarget};R(D)},[R]),E=o.useCallback((r,c)=>(t,e,n)=>({onMouseEnter:s=>C(s,{word:t,wordIndex:e,lineIndex:n,entry:r,label:c}),onMouseLeave:w,onClick:s=>x(s,{word:t,wordIndex:e,lineIndex:n,entry:r,label:c})}),[C,w,x]),j=f&&a?d.jsx("div",{className:"xiping-subtitle-player__hover-overlay",style:{left:a.rect.x+a.rect.width/2,top:a.rect.y+a.rect.height},children:f(a)}):null,k=!!(f||i);return d.jsxs("div",{ref:p,className:J("xiping-subtitle-player",T==="lyrics"?"xiping-subtitle-player--lyrics":"xiping-subtitle-player--current",L),style:N,children:[T==="current"&&d.jsx(V.CurrentMode,{currentEntries:_,wordHoverFactory:E,enableWordHover:k,overlayNode:j,onSubtitleClick:q}),T==="lyrics"&&d.jsx(W.LyricsMode,{groupedEntriesByTime:A,currentTime:y,wordHoverFactory:E,enableWordHover:k,overlayNode:j,containerRef:p,onSubtitleClick:q})]})};exports.SubtitlePlayer=O;exports.default=O;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./SubtitlePlayer.css');const d=require("react/jsx-runtime"),o=require("react"),l=require("../../packages/subtitle/lib/src/parser.js"),O=require("../../packages/subtitle/lib/src/json-converter.js"),A=require("clsx"),W=require("./CurrentMode.js"),z=require("./LyricsMode.js"),M=require("./utils.js");;/* empty css */const L=({subtitles:g,currentTime:y,mode:f="current",textAlign:b="left",className:N="",style:_,onWordHoverChange:i,renderWordOverlay:T,onWordClick:m,onSubtitleClick:R})=>{const u=o.useMemo(()=>Array.isArray(g)?g:[g],[g]),p=o.useRef(null),[a,v]=o.useState(null),[S,C]=o.useState([]);o.useEffect(()=>{let r=!0;async function c(){try{const t=await Promise.all(u.map(async e=>{try{const n=e.language||"zh",s=e.type==="srt"?await O.srtToJson(e.content,n):await O.vttToJson(e.content,n);return{entries:JSON.parse(s),label:e.label}}catch(n){return console.error("字幕解析失败:",n),{entries:e.type==="srt"?l.parseSRT(e.content):l.parseVTT(e.content),label:e.label}}}));r&&C(t)}catch(t){if(console.error("加载字幕失败:",t),r){const e=u.map(n=>{try{return{entries:n.type==="srt"?l.parseSRT(n.content):l.parseVTT(n.content),label:n.label}}catch(s){return console.error("字幕解析失败:",s),{entries:[],label:n.label}}});C(e)}}}return c(),()=>{r=!1}},[u]);const h=o.useMemo(()=>S.length>0?S:u.map(r=>{try{return{entries:r.type==="srt"?l.parseSRT(r.content):l.parseVTT(r.content),label:r.label}}catch(c){return console.error("字幕解析失败:",c),{entries:[],label:r.label}}}),[S,u]),D=o.useMemo(()=>h.map(({entries:r,label:c})=>({entry:M.getCurrentSubtitleEntry(r,y),label:c,entries:r})),[h,y]),J=o.useMemo(()=>{const r=[];h.forEach(({entries:e,label:n})=>{e.forEach(s=>{r.push({entry:s,label:n,startTime:M.timeStringToSeconds(s.startTime),endTime:M.timeStringToSeconds(s.endTime)})})}),r.sort((e,n)=>e.startTime-n.startTime);const c=[];let t=[];for(const e of r)if(t.length===0)t.push(e);else{const n=t[t.length-1];e.startTime<=n.endTime?t.push(e):(c.push(t),t=[e])}return t.length>0&&c.push(t),c},[h]),w=o.useCallback((r,c)=>{const t=r.currentTarget.getBoundingClientRect(),e=p.current?.getBoundingClientRect(),n=e!==void 0?new DOMRect(t.left-e.left,t.top-e.top,t.width,t.height):t,s={...c,rect:n,element:r.currentTarget};v(s),i?.(s)},[i]),q=o.useCallback(()=>{v(null),i?.(null)},[i]),x=o.useCallback((r,c)=>{if(!m)return;r.stopPropagation();const t=r.currentTarget.getBoundingClientRect(),e=p.current?.getBoundingClientRect(),n=e!==void 0?new DOMRect(t.left-e.left,t.top-e.top,t.width,t.height):t,s={type:"word",...c,rect:n,element:r.currentTarget};m(s)},[m]),E=o.useCallback((r,c,t)=>{if(!R||r.target.closest(".xiping-subtitle-word"))return;const n=r.currentTarget.getBoundingClientRect(),s=p.current?.getBoundingClientRect(),P=s!==void 0?new DOMRect(n.left-s.left,n.top-s.top,n.width,n.height):n,V={type:"subtitle",entry:c,label:t,rect:P,element:r.currentTarget};R(V)},[R]),j=o.useCallback((r,c)=>(t,e,n)=>({onMouseEnter:s=>w(s,{word:t,wordIndex:e,lineIndex:n,entry:r,label:c}),onMouseLeave:q,onClick:s=>x(s,{word:t,wordIndex:e,lineIndex:n,entry:r,label:c})}),[w,q,x]),k=T&&a?d.jsx("div",{className:"xiping-subtitle-player__hover-overlay",style:{left:a.rect.x+a.rect.width/2,top:a.rect.y+a.rect.height},children:T(a)}):null,B=!!(T||i);return d.jsxs("div",{ref:p,className:A("xiping-subtitle-player",f==="lyrics"?"xiping-subtitle-player--lyrics":"xiping-subtitle-player--current",N),style:_,children:[f==="current"&&d.jsx(W.CurrentMode,{currentEntries:D,wordHoverFactory:j,enableWordHover:B,overlayNode:k,onSubtitleClick:E,textAlign:b}),f==="lyrics"&&d.jsx(z.LyricsMode,{groupedEntriesByTime:J,currentTime:y,wordHoverFactory:j,enableWordHover:B,overlayNode:k,containerRef:p,onSubtitleClick:E,textAlign:b})]})};exports.SubtitlePlayer=L;exports.default=L;
@@ -0,0 +1 @@
1
+ .xiping-text-animate{white-space:pre-wrap}.xiping-text-animate-segment{display:inline-block;white-space:pre}.xiping-text-animate-segment--line{display:block}
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),u=require("../../utils/utils.js"),s=require("motion/react"),c={text:.06,word:.05,character:.03,line:.06},i={hidden:{opacity:1},show:{opacity:1,transition:{staggerChildren:.05}},exit:{opacity:0,transition:{staggerChildren:.05,staggerDirection:-1}}},g={hidden:{opacity:0},show:{opacity:1},exit:{opacity:0}},o={fadeIn:{container:i,item:{hidden:{opacity:0,y:20},show:t=>({opacity:1,y:0,transition:{delay:t,duration:.3}}),exit:{opacity:0,y:20,transition:{duration:.3}}}},blurIn:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)"},show:t=>({opacity:1,filter:"blur(0px)",transition:{delay:t*.1,duration:.3}}),exit:{opacity:0,filter:"blur(10px)",transition:{duration:.3}}}},blurInUp:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}),exit:{opacity:0,filter:"blur(10px)",y:20,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}}},blurInDown:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:-20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}})}},slideUp:{container:i,item:{hidden:{y:20,opacity:0},show:t=>({y:0,opacity:1,transition:{delay:t,duration:.3}}),exit:{y:-20,opacity:0,transition:{duration:.3}}}},slideDown:{container:i,item:{hidden:{y:-20,opacity:0},show:{y:0,opacity:1,transition:{duration:.3}},exit:{y:20,opacity:0,transition:{duration:.3}}}},slideLeft:{container:i,item:{hidden:{x:20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:-20,opacity:0,transition:{duration:.3}}}},slideRight:{container:i,item:{hidden:{x:-20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:20,opacity:0,transition:{duration:.3}}}},scaleUp:{container:i,item:{hidden:{scale:.5,opacity:0},show:{scale:1,opacity:1,transition:{duration:.3,scale:{type:"spring",damping:15,stiffness:300}}},exit:{scale:.5,opacity:0,transition:{duration:.3}}}},scaleDown:{container:i,item:{hidden:{scale:1.5,opacity:0},show:t=>({scale:1,opacity:1,transition:{delay:t,duration:.3,scale:{type:"spring",damping:15,stiffness:300}}}),exit:{scale:1.5,opacity:0,transition:{duration:.3}}}}};function b({children:t,delay:I=0,duration:k=.3,variants:v,className:h,segmentClassName:x,as:m="p",startOnView:d=!0,once:C=!1,by:n="word",animation:a="fadeIn",...w}){const f=s.motion.create(m),p=a?{container:{...o[a].container,show:{...o[a].container.show,transition:{staggerChildren:c[n]}},exit:{...o[a].container.exit,transition:{staggerChildren:c[n],staggerDirection:-1}}},item:o[a].item}:{container:i,item:g};let e=[];switch(n){case"word":e=t.split(/(\s+)/);break;case"character":e=t.split("");break;case"line":e=t.split(`
2
- `);break;default:e=[t];break}return r.jsx(s.AnimatePresence,{mode:"popLayout",children:r.jsx(f,{variants:p.container,initial:"hidden",whileInView:d?"show":void 0,animate:d?void 0:"show",exit:"exit",className:u.cn("whitespace-pre-wrap",h),...w,children:e.map((l,y)=>r.jsx(s.motion.span,{variants:p.item,custom:y*c[n],className:u.cn(n==="line"?"block":"inline-block whitespace-pre",x),children:l},`${n}-${l}-${y}`))})})}exports.TextAnimate=b;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./TextAnimate.css');const r=require("react/jsx-runtime"),s=require("motion/react"),u=require("clsx");;/* empty css */const c={text:.06,word:.05,character:.03,line:.06},i={hidden:{opacity:1},show:{opacity:1,transition:{staggerChildren:.05}},exit:{opacity:0,transition:{staggerChildren:.05,staggerDirection:-1}}},w={hidden:{opacity:0},show:{opacity:1},exit:{opacity:0}},o={fadeIn:{container:i,item:{hidden:{opacity:0,y:20},show:t=>({opacity:1,y:0,transition:{delay:t,duration:.3}}),exit:{opacity:0,y:20,transition:{duration:.3}}}},blurIn:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)"},show:t=>({opacity:1,filter:"blur(0px)",transition:{delay:t*.1,duration:.3}}),exit:{opacity:0,filter:"blur(10px)",transition:{duration:.3}}}},blurInUp:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}),exit:{opacity:0,filter:"blur(10px)",y:20,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}}}},blurInDown:{container:i,item:{hidden:{opacity:0,filter:"blur(10px)",y:-20},show:t=>({opacity:1,filter:"blur(0px)",y:0,transition:{y:{duration:.3},opacity:{duration:.4},filter:{duration:.3}}})}},slideUp:{container:i,item:{hidden:{y:20,opacity:0},show:t=>({y:0,opacity:1,transition:{delay:t,duration:.3}}),exit:{y:-20,opacity:0,transition:{duration:.3}}}},slideDown:{container:i,item:{hidden:{y:-20,opacity:0},show:{y:0,opacity:1,transition:{duration:.3}},exit:{y:20,opacity:0,transition:{duration:.3}}}},slideLeft:{container:i,item:{hidden:{x:20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:-20,opacity:0,transition:{duration:.3}}}},slideRight:{container:i,item:{hidden:{x:-20,opacity:0},show:{x:0,opacity:1,transition:{duration:.3}},exit:{x:20,opacity:0,transition:{duration:.3}}}},scaleUp:{container:i,item:{hidden:{scale:.5,opacity:0},show:{scale:1,opacity:1,transition:{duration:.3,scale:{type:"spring",damping:15,stiffness:300}}},exit:{scale:.5,opacity:0,transition:{duration:.3}}}},scaleDown:{container:i,item:{hidden:{scale:1.5,opacity:0},show:t=>({scale:1,opacity:1,transition:{delay:t,duration:.3,scale:{type:"spring",damping:15,stiffness:300}}}),exit:{scale:1.5,opacity:0,transition:{duration:.3}}}}};function b({children:t,delay:I=0,duration:v=.3,variants:C,className:x,segmentClassName:h,as:m="p",startOnView:d=!0,once:j=!1,by:n="word",animation:e="fadeIn",...g}){const f=s.motion.create(m),p=e?{container:{...o[e].container,show:{...o[e].container.show,transition:{staggerChildren:c[n]}},exit:{...o[e].container.exit,transition:{staggerChildren:c[n],staggerDirection:-1}}},item:o[e].item}:{container:i,item:w};let a=[];switch(n){case"word":a=t.split(/(\s+)/);break;case"character":a=t.split("");break;case"line":a=t.split(`
2
+ `);break;default:a=[t];break}return r.jsx(s.AnimatePresence,{mode:"popLayout",children:r.jsx(f,{variants:p.container,initial:"hidden",whileInView:d?"show":void 0,animate:d?void 0:"show",exit:"exit",className:u("xiping-text-animate",x),...g,children:a.map((l,y)=>r.jsx(s.motion.span,{variants:p.item,custom:y*c[n],className:u("xiping-text-animate-segment",n==="line"&&"xiping-text-animate-segment--line",h),children:l},`${n}-${l}-${y}`))})})}exports.TextAnimate=b;