@wwog/react 1.2.15 → 1.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -373,10 +373,6 @@ interface ToggleProps<T = boolean> {
373
373
  declare const Toggle: <T>(props: ToggleProps<T>) => React$1.ReactNode;
374
374
 
375
375
  interface ClampProps {
376
- /**
377
- * @default 20
378
- */
379
- lineHeight?: number;
380
376
  /**
381
377
  * @description 最大行数
382
378
  * @description_en maximum number of lines
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import r,{useMemo as p,Children as J,Fragment as S,isValidElement as _,cloneElement as R,useEffect as W,useState as C,useCallback as B}from"react";function T(t,n){if(t===void 0)return;let e=0;if(Array.isArray(t)){for(const l of t)if(n(l,e++)===!1)break}else n(t,e)}const V=(t,n)=>t===n,E=t=>r.createElement(r.Fragment,null,t.children);E.displayName="Switch_Case";const w=t=>r.createElement(r.Fragment,null,t.children);w.displayName="Switch_Default";const y=t=>{const{value:n,compare:e=V,children:l,strict:a=!1}=t,o=new Set;let i=null,s=null,u=!1;return T(l,(c,d)=>{if(!r.isValidElement(c))throw new Error(`Switch Children only accepts valid React elements at index ${d}`);const m=c.type;if(m.displayName===E.displayName){const f=c.props;if(o.has(f.value))throw new Error(`Switch found duplicate Case value at index ${d}: ${JSON.stringify(f.value)}${a?" (detected in strict mode)":""}`);if(o.add(f.value),!i&&e(n,f.value)&&(i=f.children,a===!1))return!1}else if(m.displayName===w.displayName){if(u)throw new Error(`Switch can only have one Default child at index ${d}`);if(u=!0,s=c.props.children,!a&&i)return!1}else throw new Error(`Switch Children only accepts 'Case' or 'Default' elements, found: ${String(m.displayName||m.name||m)} at index ${d}`)}),r.createElement(r.Fragment,null,i??s)};y.displayName="Switch",y.Case=E,y.Default=w,y.createTyped=function(){return{Switch:y,Case:E,Default:w}};const v=t=>r.createElement(r.Fragment,null,t.children),N=({children:t})=>r.createElement(r.Fragment,null,t),b=t=>r.createElement(r.Fragment,null,t.children);v.displayName="If_Then",N.displayName="If_Else",b.displayName="If_ElseIf";const h=({condition:t,children:n})=>{let e=null,l=null;const a=[];if(r.Children.forEach(n,o=>{if(!r.isValidElement(o))throw new Error("If component only accepts valid React elements");const i=o.type;if(i.displayName===v.displayName){if(e)throw new Error("If component can only have one Then child");e=o}else if(i.displayName===b.displayName)a.push(o);else if(i.displayName===N.displayName){if(l)throw new Error("If component can only have one Else child");l=o}else throw new Error(`If component only accepts 'Then', 'ElseIf', or 'Else' elements as children, found: ${String(i.displayName||i.name||i)}`)}),t)return e?r.createElement(r.Fragment,null,e.props.children):null;for(const o of a)if(o.props.condition)return r.createElement(r.Fragment,null,o.props.children);return l?r.createElement(r.Fragment,null,l.props.children):null};h.displayName="If",h.Then=v,h.ElseIf=b,h.Else=N,h.createTyped=function(){return{If:h,Then:v,ElseIf:b,Else:N}};const k=({condition:t,children:n})=>t?r.createElement(r.Fragment,null,n):null,Z=({condition:t,children:n})=>t===!1?r.createElement(r.Fragment,null,n):null,L=({all:t,any:n,none:e,children:l,fallback:a})=>p(()=>(t&&(n||e)&&console.warn('When: Multiple condition types (all, any, none) provided; "all" takes precedence.'),!!(t&&t.length>0&&t.every(Boolean)||n&&n.length>0&&n.some(Boolean)||e&&e.length>0&&e.every(o=>!o))),[t,n,e])?r.createElement(r.Fragment,null,l):r.createElement(r.Fragment,null,a||null),z=({data:t,transform:n,render:e,fallback:l})=>{const a=p(()=>n.reduce((o,i)=>i(o),t),[t,n]);return a==null?r.createElement(r.Fragment,null,l||null):r.createElement(r.Fragment,null,e(a))},G=t=>{const{children:n,h:e,w:l,size:a,height:o,width:i,className:s}=t;return r.createElement("div",{style:{width:a||l||i,height:a||e||o,flexShrink:0},className:s},n)},$=({let:t,props:n,children:e,fallback:l})=>{const a=p(()=>typeof t=="function"?t(n):t,[t,n]);return!e||!Object.keys(a).length?r.createElement(r.Fragment,null,l||null):r.createElement(r.Fragment,null,e(a))};function F(...t){const n=new Set;for(const e of t)if(e){if(typeof e=="string")n.add(e);else if(Array.isArray(e))e.forEach(l=>n.add(l));else if(typeof e=="object")for(const[l,a]of Object.entries(e))a&&n.add(l)}return Array.from(n).join(" ")}const q=t=>typeof t=="object"&&!!t,M=({className:t,children:n,asWrapper:e=!1})=>{if(!n)return null;if(J.count(n)>1)return console.error("<Styles>: children has more than one child. Please check your code."),r.createElement(S,null,n);if(!t)return r.createElement(S,null,n);const l=typeof t=="string"?t:F(...Object.values(t));if(e)return r.createElement(e===!0?"div":e,{className:l},n);if(_(n)){const a=n;let o=a?.props?.className;return a?.type?.displayName===M.displayName&&q(o)&&(o=F(...Object.values(o))),R(n,{className:F(l,o)})}return console.error("<Styles>: children is not a valid React element. Please check your code."),r.createElement(S,null,n)};M.displayName="W/Styles";const K=t=>{const{index:n=0,options:e,next:l,render:a}=t;W(()=>{if(e.length<n+1)throw new Error(`Index ${n} is out of bounds for options array of length ${e.length}. Defaulting to first option.`)},[n,e]);const[o,i]=C(n),s=()=>{i(u=>e.length?l?l(u,e):(u+1)%e.length:u)};return a(e[o],s)},Q=t=>{const{lineHeight:n=20,maxLine:e=1,text:l,extraHeight:a=20,extraContent:o,bgColor:i="#fff",ellipsis:s=!1,ellipsisContent:u=r.createElement("span",null,"\u2026"),wrapperStyle:c}=t;return r.createElement("div",{style:{display:"flex",overflow:"hidden",position:"relative",background:i,...c}},r.createElement("div",{style:{lineHeight:`${n}px`,maxHeight:`${n*e}px`,overflow:"hidden",wordBreak:"break-all"}},r.createElement("div",{style:{float:"right",height:`calc(100% - ${a-2}px)`}}),r.createElement("div",{style:{float:"right",clear:"both",height:a}},r.createElement(k,{condition:s},u),o),l,r.createElement("div",{style:{display:"inline-block",width:"100%",height:"100%",position:"absolute",background:i}})))};function U(t){const{items:n,renderItem:e,filter:l}=t;return n?r.createElement(S,null,n.map((a,o)=>l&&!l(a)?null:e(a,o))):(console.error("ArrayRender: items is null"),null)}function X({source:t,format:n,children:e}){const l=p(()=>{if(t instanceof Date)return t;if(typeof t=="string"||typeof t=="number"){const o=new Date(t);return isNaN(o.getTime())?null:o}return null},[t]),a=p(()=>l?n?n(l):l.toLocaleString():null,[l,n]);return!a||!e?null:r.createElement(r.Fragment,null,e(a))}const ee="onChange",te="value";function ne(t){const{defaultValue:n,onBeforeChange:e,trigger:l=ee,valuePropName:a=te,props:o}=t,i=Object.prototype.hasOwnProperty.call(o,a),[s,u]=C(n),c=i?o[a]:s,d=p(()=>o[l],[o,l]),m=B(f=>{const g=typeof f=="function"?f(c):f;e&&e(g,c)===!1||(i||u(g),d&&d(g))},[i,e,c,d]);return[c,m]}function re(t,...n){try{const e=t(...n);return e instanceof Promise?e:Promise.resolve(e)}catch(e){return Promise.reject(e)}}const I=typeof Promise.try=="function"?Promise.try.bind(Promise):re;function le(t,n){let e=typeof t=="function"?t():t;const l=[],a=()=>e,o=s=>{const u=e;e=typeof s=="function"?s():s,l.forEach(c=>c(e)),n&&I(n,e,u).catch(c=>{console.error("Error in external state side effect, Please do it within side effects:",c)})},i=()=>{const[s,u]=r.useState(e);return r.useEffect(()=>(l.push(u),()=>{const c=l.indexOf(u);c>-1&&l.splice(c,1)}),[]),[s,o]};return{get:a,set:o,use:i,useGetter:()=>{const[s]=i();return s},__listeners:l}}function ae(t,n){const e=n||new Date,l=e.getFullYear(),a=e.getMonth()+1,o=e.getDate(),i=e.getHours(),s=e.getMinutes(),u=e.getSeconds(),c=e.getMilliseconds(),d=e.getDay(),m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],f=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],g=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],A=["January","February","March","April","May","June","July","August","September","October","November","December"],P=f[d],x=m[d],D=a-1,Y=A[D],O=g[D],j={YY:l.toString().slice(2),YYYY:l.toString(),M:a.toString(),MM:a.toString().padStart(2,"0"),MMM:O,MMMM:Y,D:o.toString(),DD:o.toString().padStart(2,"0"),d:d.toString(),dd:x,ddd:x,dddd:P,H:i.toString(),HH:i.toString().padStart(2,"0"),h:(i%12).toString(),hh:(i%12).toString().padStart(2,"0"),m:s.toString(),mm:s.toString().padStart(2,"0"),s:u.toString(),ss:u.toString().padStart(2,"0"),SSS:c.toString().padStart(3,"0"),Z:"+08:00",ZZ:"+0800",A:i<12?"AM":"PM",a:i<12?"am":"pm"};return t.replace(/YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|SSS|Z{1,2}|A|a/g,H=>j[H])}class oe{count=0;next(){return this.count++}}export{U as ArrayRender,Q as Clamp,oe as Counter,X as DateRender,Z as False,h as If,z as Pipe,$ as Scope,G as SizeBox,M as Styles,y as Switch,K as Toggle,k as True,L as When,T as childrenLoop,le as createExternalState,F as cx,ae as formatDate,I as safePromiseTry,ne as useControlled};
1
+ import r,{useMemo as h,Children as W,Fragment as S,isValidElement as J,cloneElement as _,useEffect as H,useState as M,useRef as T,useLayoutEffect as L,useCallback as V}from"react";function I(t,n){if(t===void 0)return;let e=0;if(Array.isArray(t)){for(const l of t)if(n(l,e++)===!1)break}else n(t,e)}const Z=(t,n)=>t===n,E=t=>r.createElement(r.Fragment,null,t.children);E.displayName="Switch_Case";const w=t=>r.createElement(r.Fragment,null,t.children);w.displayName="Switch_Default";const y=t=>{const{value:n,compare:e=Z,children:l,strict:o=!1}=t,a=new Set;let i=null,c=null,d=!1;return I(l,(u,s)=>{if(!r.isValidElement(u))throw new Error(`Switch Children only accepts valid React elements at index ${s}`);const f=u.type;if(f.displayName===E.displayName){const m=u.props;if(a.has(m.value))throw new Error(`Switch found duplicate Case value at index ${s}: ${JSON.stringify(m.value)}${o?" (detected in strict mode)":""}`);if(a.add(m.value),!i&&e(n,m.value)&&(i=m.children,o===!1))return!1}else if(f.displayName===w.displayName){if(d)throw new Error(`Switch can only have one Default child at index ${s}`);if(d=!0,c=u.props.children,!o&&i)return!1}else throw new Error(`Switch Children only accepts 'Case' or 'Default' elements, found: ${String(f.displayName||f.name||f)} at index ${s}`)}),r.createElement(r.Fragment,null,i??c)};y.displayName="Switch",y.Case=E,y.Default=w,y.createTyped=function(){return{Switch:y,Case:E,Default:w}};const v=t=>r.createElement(r.Fragment,null,t.children),N=({children:t})=>r.createElement(r.Fragment,null,t),b=t=>r.createElement(r.Fragment,null,t.children);v.displayName="If_Then",N.displayName="If_Else",b.displayName="If_ElseIf";const p=({condition:t,children:n})=>{let e=null,l=null;const o=[];if(r.Children.forEach(n,a=>{if(!r.isValidElement(a))throw new Error("If component only accepts valid React elements");const i=a.type;if(i.displayName===v.displayName){if(e)throw new Error("If component can only have one Then child");e=a}else if(i.displayName===b.displayName)o.push(a);else if(i.displayName===N.displayName){if(l)throw new Error("If component can only have one Else child");l=a}else throw new Error(`If component only accepts 'Then', 'ElseIf', or 'Else' elements as children, found: ${String(i.displayName||i.name||i)}`)}),t)return e?r.createElement(r.Fragment,null,e.props.children):null;for(const a of o)if(a.props.condition)return r.createElement(r.Fragment,null,a.props.children);return l?r.createElement(r.Fragment,null,l.props.children):null};p.displayName="If",p.Then=v,p.ElseIf=b,p.Else=N,p.createTyped=function(){return{If:p,Then:v,ElseIf:b,Else:N}};const C=({condition:t,children:n})=>t?r.createElement(r.Fragment,null,n):null,z=({condition:t,children:n})=>t===!1?r.createElement(r.Fragment,null,n):null,G=({all:t,any:n,none:e,children:l,fallback:o})=>h(()=>(t&&(n||e)&&console.warn('When: Multiple condition types (all, any, none) provided; "all" takes precedence.'),!!(t&&t.length>0&&t.every(Boolean)||n&&n.length>0&&n.some(Boolean)||e&&e.length>0&&e.every(a=>!a))),[t,n,e])?r.createElement(r.Fragment,null,l):r.createElement(r.Fragment,null,o||null),q=({data:t,transform:n,render:e,fallback:l})=>{const o=h(()=>n.reduce((a,i)=>i(a),t),[t,n]);return o==null?r.createElement(r.Fragment,null,l||null):r.createElement(r.Fragment,null,e(o))},K=t=>{const{children:n,h:e,w:l,size:o,height:a,width:i,className:c}=t;return r.createElement("div",{style:{width:o||l||i,height:o||e||a,flexShrink:0},className:c},n)},Q=({let:t,props:n,children:e,fallback:l})=>{const o=h(()=>typeof t=="function"?t(n):t,[t,n]);return!e||!Object.keys(o).length?r.createElement(r.Fragment,null,l||null):r.createElement(r.Fragment,null,e(o))};function F(...t){const n=new Set;for(const e of t)if(e){if(typeof e=="string")n.add(e);else if(Array.isArray(e))e.forEach(l=>n.add(l));else if(typeof e=="object")for(const[l,o]of Object.entries(e))o&&n.add(l)}return Array.from(n).join(" ")}const U=t=>typeof t=="object"&&!!t,x=({className:t,children:n,asWrapper:e=!1})=>{if(!n)return null;if(W.count(n)>1)return console.error("<Styles>: children has more than one child. Please check your code."),r.createElement(S,null,n);if(!t)return r.createElement(S,null,n);const l=typeof t=="string"?t:F(...Object.values(t));if(e)return r.createElement(e===!0?"div":e,{className:l},n);if(J(n)){const o=n;let a=o?.props?.className;return o?.type?.displayName===x.displayName&&U(a)&&(a=F(...Object.values(a))),_(n,{className:F(l,a)})}return console.error("<Styles>: children is not a valid React element. Please check your code."),r.createElement(S,null,n)};x.displayName="W/Styles";const X=t=>{const{index:n=0,options:e,next:l,render:o}=t;H(()=>{if(e.length<n+1)throw new Error(`Index ${n} is out of bounds for options array of length ${e.length}. Defaulting to first option.`)},[n,e]);const[a,i]=M(n),c=()=>{i(d=>e.length?l?l(d,e):(d+1)%e.length:d)};return o(e[a],c)},$=t=>{const{maxLine:n=1,text:e,extraHeight:l=22,extraContent:o,wrapperStyle:a}=t;T(null);const i=T(null),[c,d]=M(!1),u=h(()=>!(e==null||e===""),[e]);return L(()=>{if(!i.current)return;const s=document.createElement("div");s.textContent=e,s.style.position="absolute",s.style.width="100%",s.style.wordBreak="break-all",s.style.top="100%",i.current.appendChild(s);const f=document.createRange();f.setStart(s.firstChild,0),f.setEnd(s.firstChild,e.length),f.getClientRects().length>n?d(!0):d(!1),i.current.removeChild(s)},[n,e]),r.createElement(C,{condition:u},r.createElement("div",{ref:i,style:{overflow:"hidden",position:"relative",width:"100%",display:"flex",...a}},r.createElement("div",{style:{display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:n,overflow:"hidden",wordBreak:"break-all"}},r.createElement(C,{condition:c},r.createElement("div",{style:{float:"right",height:"100%",marginBottom:-l}}),r.createElement("div",{style:{float:"right",clear:"both",height:l}},o)),e)))};function ee(t){const{items:n,renderItem:e,filter:l}=t;return n?r.createElement(S,null,n.map((o,a)=>l&&!l(o)?null:e(o,a))):(console.error("ArrayRender: items is null"),null)}function te({source:t,format:n,children:e}){const l=h(()=>{if(t instanceof Date)return t;if(typeof t=="string"||typeof t=="number"){const a=new Date(t);return isNaN(a.getTime())?null:a}return null},[t]),o=h(()=>l?n?n(l):l.toLocaleString():null,[l,n]);return!o||!e?null:r.createElement(r.Fragment,null,e(o))}const ne="onChange",re="value";function le(t){const{defaultValue:n,onBeforeChange:e,trigger:l=ne,valuePropName:o=re,props:a}=t,i=Object.prototype.hasOwnProperty.call(a,o),[c,d]=M(n),u=i?a[o]:c,s=h(()=>a[l],[a,l]),f=V(m=>{const g=typeof m=="function"?m(u):m;e&&e(g,u)===!1||(i||d(g),s&&s(g))},[i,e,u,s]);return[u,f]}function ae(t,...n){try{const e=t(...n);return e instanceof Promise?e:Promise.resolve(e)}catch(e){return Promise.reject(e)}}const A=typeof Promise.try=="function"?Promise.try.bind(Promise):ae;function oe(t,n){let e=typeof t=="function"?t():t;const l=[],o=()=>e,a=c=>{const d=e;e=typeof c=="function"?c():c,l.forEach(u=>u(e)),n&&A(n,e,d).catch(u=>{console.error("Error in external state side effect, Please do it within side effects:",u)})},i=()=>{const[c,d]=r.useState(e);return r.useEffect(()=>(l.push(d),()=>{const u=l.indexOf(d);u>-1&&l.splice(u,1)}),[]),[c,a]};return{get:o,set:a,use:i,useGetter:()=>{const[c]=i();return c},__listeners:l}}function ie(t,n){const e=n||new Date,l=e.getFullYear(),o=e.getMonth()+1,a=e.getDate(),i=e.getHours(),c=e.getMinutes(),d=e.getSeconds(),u=e.getMilliseconds(),s=e.getDay(),f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],g=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],P=["January","February","March","April","May","June","July","August","September","October","November","December"],Y=m[s],D=f[s],k=o-1,O=P[k],j=g[k],R={YY:l.toString().slice(2),YYYY:l.toString(),M:o.toString(),MM:o.toString().padStart(2,"0"),MMM:j,MMMM:O,D:a.toString(),DD:a.toString().padStart(2,"0"),d:s.toString(),dd:D,ddd:D,dddd:Y,H:i.toString(),HH:i.toString().padStart(2,"0"),h:(i%12).toString(),hh:(i%12).toString().padStart(2,"0"),m:c.toString(),mm:c.toString().padStart(2,"0"),s:d.toString(),ss:d.toString().padStart(2,"0"),SSS:u.toString().padStart(3,"0"),Z:"+08:00",ZZ:"+0800",A:i<12?"AM":"PM",a:i<12?"am":"pm"};return t.replace(/YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|SSS|Z{1,2}|A|a/g,B=>R[B])}class se{count=0;next(){return this.count++}}export{ee as ArrayRender,$ as Clamp,se as Counter,te as DateRender,z as False,p as If,q as Pipe,Q as Scope,K as SizeBox,x as Styles,y as Switch,X as Toggle,C as True,G as When,I as childrenLoop,oe as createExternalState,F as cx,ie as formatDate,A as safePromiseTry,le as useControlled};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wwog/react",
3
- "version": "1.2.15",
3
+ "version": "1.2.17",
4
4
  "description": "A practical React component library providing declarative flow control and common UI utility components to make your React code more concise and readable.",
5
5
  "keywords": [
6
6
  "react",
@@ -1,11 +1,7 @@
1
- import React, { FC } from "react";
1
+ import React, { FC, useLayoutEffect, useMemo, useRef, useState } from "react";
2
2
  import { True } from "../ProcessControl/If";
3
3
 
4
4
  export interface ClampProps {
5
- /**
6
- * @default 20
7
- */
8
- lineHeight?: number;
9
5
  /**
10
6
  * @description 最大行数
11
7
  * @description_en maximum number of lines
@@ -52,61 +48,86 @@ export interface ClampProps {
52
48
  */
53
49
  export const Clamp: FC<ClampProps> = (props) => {
54
50
  const {
55
- lineHeight = 20,
56
51
  maxLine = 1,
57
52
  text,
58
- extraHeight = 20,
53
+ extraHeight = 22,
59
54
  extraContent,
60
- bgColor = "#fff",
61
- ellipsis = false,
62
- ellipsisContent = <span>&hellip;</span>,
63
55
  wrapperStyle,
64
56
  } = props;
57
+ const fullTextRef = useRef<HTMLDivElement>(null);
58
+ const wrapperRef = useRef<HTMLDivElement>(null);
59
+ const [showExtra, setShowExtra] = useState(false);
60
+ const isValidText = useMemo(() => {
61
+ if (text === undefined || text === null || text === "") return false;
62
+ return true;
63
+ }, [text]);
64
+
65
+ useLayoutEffect(() => {
66
+ if (!wrapperRef.current) {
67
+ return;
68
+ }
69
+ const measureWrapper = document.createElement("div");
70
+ measureWrapper.textContent = text;
71
+ measureWrapper.style.position = "absolute";
72
+ measureWrapper.style.width = "100%";
73
+ measureWrapper.style.wordBreak = "break-all";
74
+ measureWrapper.style.top = "100%";
75
+
76
+ wrapperRef.current.appendChild(measureWrapper);
77
+ const range = document.createRange();
78
+ range.setStart(measureWrapper.firstChild!, 0);
79
+ range.setEnd(measureWrapper.firstChild!, text.length);
80
+ const rects = range.getClientRects();
81
+ if (rects.length > maxLine) {
82
+ setShowExtra(true);
83
+ } else {
84
+ setShowExtra(false);
85
+ }
86
+
87
+ wrapperRef.current.removeChild(measureWrapper);
88
+ }, [maxLine, text]);
65
89
  return (
66
- <div
67
- style={{
68
- display: "flex",
69
- overflow: "hidden",
70
- position: "relative",
71
- background: bgColor,
72
- ...wrapperStyle,
73
- }}
74
- >
90
+ <True condition={isValidText}>
75
91
  <div
92
+ ref={wrapperRef}
76
93
  style={{
77
- lineHeight: `${lineHeight}px`,
78
- maxHeight: `${lineHeight * maxLine}px`,
79
94
  overflow: "hidden",
80
- wordBreak: "break-all"
95
+ position: "relative",
96
+ width: "100%",
97
+ display: "flex",
98
+ ...wrapperStyle,
81
99
  }}
82
100
  >
83
101
  <div
84
102
  style={{
85
- float: "right",
86
- height: `calc(100% - ${extraHeight - 2}px)`,
87
- }}
88
- ></div>
89
- <div
90
- style={{
91
- float: "right",
92
- clear: "both",
93
- height: extraHeight,
103
+ display: "-webkit-box",
104
+ WebkitBoxOrient: "vertical",
105
+ WebkitLineClamp: maxLine,
106
+ overflow: "hidden",
107
+ wordBreak: "break-all",
94
108
  }}
95
109
  >
96
- <True condition={ellipsis}>{ellipsisContent}</True>
97
- {extraContent}
110
+ <True condition={showExtra}>
111
+ <div
112
+ style={{
113
+ float: "right",
114
+ height: "100%",
115
+ marginBottom: -extraHeight,
116
+ }}
117
+ ></div>
118
+ <div
119
+ style={{
120
+ float: "right",
121
+ clear: "both",
122
+ height: extraHeight,
123
+ }}
124
+ >
125
+ {extraContent}
126
+ </div>
127
+ </True>
128
+ {text}
98
129
  </div>
99
- {text}
100
- <div
101
- style={{
102
- display: "inline-block",
103
- width: "100%",
104
- height: "100%",
105
- position: "absolute",
106
- background: bgColor,
107
- }}
108
- ></div>
109
130
  </div>
110
- </div>
131
+ </True>
111
132
  );
112
133
  };