@customafk/lunas-ui 0.2.72 → 0.2.73

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.
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../typography/paragraph.cjs"),t=require("../../ui/image.cjs"),n=require("../../date-B3cozmfV.cjs"),r=require("../../ui/badge.cjs"),i=require("../../ui/tooltip.cjs"),a=require("../../data-display/user.cjs");let o=require("lucide-react"),s=require("react"),c=require("@customafk/react-toolkit/utils"),l=require("class-variance-authority"),u=require("react/jsx-runtime");const d=()=>(0,u.jsx)(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),f=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?(0,u.jsx)(r.Badge,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):(0,u.jsx)(d,{}),p=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?(0,u.jsx)(d,{}):(0,u.jsx)(r.Badge,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),m=({value:e,truncate:t=!0})=>{let[n,r]=(0,s.useState)(!1),i=(0,s.useCallback)(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?(0,u.jsxs)(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:(0,c.cn)(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[(0,u.jsx)(`span`,{className:(0,c.cn)(`tabular-nums`,t&&`truncate`),children:e}),n?(0,u.jsx)(o.CheckIcon,{size:12,className:`shrink-0 text-success`}):(0,u.jsx)(o.CopyIcon,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):(0,u.jsx)(d,{})},h=({date:e})=>e==null?(0,u.jsx)(d,{}):(0,u.jsx)(i.TooltipProvider,{children:(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(n.t,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),(0,u.jsx)(i.TooltipContent,{children:(0,u.jsx)(n.t,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),g=({images:e})=>{if(!e?.length)return(0,u.jsx)(d,{});let n=e.length===1;return(0,u.jsx)(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>(0,u.jsx)(`div`,{className:n?`group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`,children:(0,u.jsx)(t.Image,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},_=({href:e,label:t,external:n=!0,className:r})=>e?(0,u.jsxs)(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:(0,c.cn)(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&(0,u.jsx)(o.LinkIcon,{size:12,className:`shrink-0 opacity-70`}),(0,u.jsx)(`span`,{className:`truncate`,children:t??e}),n&&(0,u.jsx)(o.ExternalLinkIcon,{size:12,className:`shrink-0 opacity-70`})]}):(0,u.jsx)(d,{}),v=({content:t})=>t==null?(0,u.jsx)(d,{}):(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(e.Paragraph,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:t})}),(0,u.jsx)(i.TooltipContent,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,u.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,u.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),(0,u.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),y=({name:t})=>t?(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(e.Paragraph,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:t})}),(0,u.jsx)(i.TooltipContent,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,u.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,u.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),(0,u.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):(0,u.jsx)(d,{}),b=({value:t})=>(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{"data-slot":`description-phone`,children:(0,u.jsx)(e.Paragraph,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,u.jsx)(i.TooltipContent,{align:`start`,children:(0,u.jsx)(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),x=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},S=(0,l.cva)(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),C=(0,s.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:l=`sm`,trend:f=`neutral`,value:p=0,className:m})=>{let h=(0,s.useMemo)(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),g=(0,s.useCallback)(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=x(e,i,a)),t.toLocaleString(`en-US`,h)},[a,h,i]),_=(0,s.useMemo)(()=>{if(typeof p==`number`)return Number.isNaN(p)||!Number.isFinite(p)?`N/A`:g(p);if(typeof p==`string`){let e=p.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:g(t)}return`N/A`},[p,g]),v=(0,s.useMemo)(()=>e===`.`&&t===`,`?_:_.replace(/,/g,t).replace(/\./g,e),[_,e,t]);return v===`0`||v===`N/A`||!v?(0,u.jsx)(d,{}):(0,u.jsxs)(`div`,{"data-slot":`description-statistic`,className:(0,c.cn)(S({size:l,trend:f}),m),children:[n&&(0,u.jsx)(`span`,{"data-slot":`description-statistic-prefix`,children:n}),(0,u.jsx)(`p`,{"data-slot":`description-statistic-value`,children:v}),r&&(0,u.jsx)(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});C.displayName=`DescriptionStatistic`;const w={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},T=({label:e,color:t=`info`,dot:n=!0})=>e?(0,u.jsxs)(r.Badge,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&(0,u.jsx)(`span`,{className:(0,c.cn)(`inline-block size-1.5 shrink-0 rounded-full`,w[t])}),e]}):(0,u.jsx)(d,{}),E=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return(0,u.jsx)(d,{});let a=e.slice(0,t),o=e.length-a.length;return(0,u.jsxs)(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>(0,u.jsx)(r.Badge,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&(0,u.jsxs)(r.Badge,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},D=({uuid:e,username:t,email:n})=>!e||!t||!n?(0,u.jsx)(d,{}):(0,u.jsx)(a.UserDataDisplay,{uuid:e,username:t,email:n}),O=(0,s.createContext)(!1),k=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?(0,u.jsxs)(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[(0,u.jsxs)(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[(0,u.jsx)(`span`,{children:e}),r&&(0,u.jsx)(`div`,{className:`shrink-0`,children:r})]}),(0,u.jsx)(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):(0,u.jsxs)(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,u.jsxs)(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[(0,u.jsx)(`span`,{children:e}),r&&(0,u.jsx)(`div`,{className:`shrink-0 pr-1`,children:r})]}),(0,u.jsx)(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),A=({title:e,description:t,extra:n,className:r})=>(0,u.jsxs)(`div`,{"data-slot":`description-header`,className:(0,c.cn)(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[(0,u.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,u.jsx)(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&(0,u.jsx)(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&(0,u.jsx)(`div`,{className:`shrink-0`,children:n})]}),j=({title:e,className:t})=>(0,u.jsxs)(`div`,{"data-slot":`description-section`,className:(0,c.cn)(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&(0,u.jsx)(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),(0,u.jsx)(`div`,{className:`h-px flex-1 bg-border`})]}),M=({rows:e})=>(0,u.jsxs)(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[(0,u.jsxs)(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[(0,u.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,u.jsx)(`div`,{className:`h-3.5 w-36 rounded bg-border`}),(0,u.jsx)(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),(0,u.jsx)(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>(0,u.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,u.jsx)(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:(0,u.jsx)(`div`,{className:`h-3 w-20 rounded bg-border`})}),(0,u.jsx)(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:(0,u.jsx)(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),N=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>(0,u.jsx)(`div`,{"data-slot":`description`,className:(0,c.cn)(`relative flex flex-col bg-card`,(0,s.useContext)(O)?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?(0,u.jsx)(M,{rows:i}):e}),P=({children:e,className:t})=>(0,u.jsx)(O.Provider,{value:!0,children:(0,u.jsx)(`div`,{"data-slot":`description-group`,className:(0,c.cn)(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});exports.Description=N,exports.DescriptionBadge=f,exports.DescriptionBoolean=p,exports.DescriptionCopy=m,exports.DescriptionDate=h,exports.DescriptionEmpty=d,exports.DescriptionGroup=P,exports.DescriptionHeader=A,exports.DescriptionImages=g,exports.DescriptionItem=k,exports.DescriptionLink=_,exports.DescriptionLongText=v,exports.DescriptionName=y,exports.DescriptionNumberPhone=b,exports.DescriptionSection=j,exports.DescriptionStatistic=C,exports.DescriptionStatus=T,exports.DescriptionTagList=E,exports.DescriptionUser=D;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../typography/paragraph.cjs"),t=require("../../ui/image.cjs"),n=require("../../date-B3cozmfV.cjs"),r=require("../../ui/badge.cjs"),i=require("../../ui/tooltip.cjs"),a=require("../../data-display/user.cjs");let o=require("lucide-react"),s=require("react"),c=require("@customafk/react-toolkit/utils"),l=require("class-variance-authority"),u=require("react/jsx-runtime");const d=()=>(0,u.jsx)(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),f=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?(0,u.jsx)(r.Badge,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):(0,u.jsx)(d,{}),p=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?(0,u.jsx)(d,{}):(0,u.jsx)(r.Badge,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),m=({value:e,truncate:t=!0})=>{let[n,r]=(0,s.useState)(!1),i=(0,s.useCallback)(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?(0,u.jsxs)(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:(0,c.cn)(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[(0,u.jsx)(`span`,{className:(0,c.cn)(`tabular-nums`,t&&`truncate`),children:e}),n?(0,u.jsx)(o.CheckIcon,{size:12,className:`shrink-0 text-success`}):(0,u.jsx)(o.CopyIcon,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):(0,u.jsx)(d,{})},h=({date:e})=>e==null?(0,u.jsx)(d,{}):(0,u.jsx)(i.TooltipProvider,{children:(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(n.t,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),(0,u.jsx)(i.TooltipContent,{children:(0,u.jsx)(n.t,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),g=({images:e})=>{if(!e?.length)return(0,u.jsx)(d,{});let n=e.length===1;return(0,u.jsx)(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>(0,u.jsx)(`div`,{className:n?`group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`,children:(0,u.jsx)(t.Image,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},_=({href:e,label:t,external:n=!0,className:r})=>e?(0,u.jsxs)(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:(0,c.cn)(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&(0,u.jsx)(o.LinkIcon,{size:12,className:`shrink-0 opacity-70`}),(0,u.jsx)(`span`,{className:`truncate`,children:t??e}),n&&(0,u.jsx)(o.ExternalLinkIcon,{size:12,className:`shrink-0 opacity-70`})]}):(0,u.jsx)(d,{}),v=({content:t})=>t==null?(0,u.jsx)(d,{}):(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(e.Paragraph,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:t})}),(0,u.jsx)(i.TooltipContent,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,u.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,u.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),(0,u.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),y=({name:t})=>t?(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{asChild:!0,children:(0,u.jsx)(e.Paragraph,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:t})}),(0,u.jsx)(i.TooltipContent,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,u.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,u.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),(0,u.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):(0,u.jsx)(d,{}),b=({value:t})=>(0,u.jsxs)(i.Tooltip,{children:[(0,u.jsx)(i.TooltipTrigger,{"data-slot":`description-phone`,children:(0,u.jsx)(e.Paragraph,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,u.jsx)(i.TooltipContent,{align:`start`,children:(0,u.jsx)(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),x=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},S=(0,l.cva)(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),C=(0,s.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:l=`sm`,trend:f=`neutral`,value:p=0,className:m})=>{let h=(0,s.useMemo)(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),g=(0,s.useCallback)(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=x(e,i,a)),t.toLocaleString(`en-US`,h)},[a,h,i]),_=(0,s.useMemo)(()=>{if(typeof p==`number`)return Number.isNaN(p)||!Number.isFinite(p)?`N/A`:g(p);if(typeof p==`string`){let e=p.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:g(t)}return`N/A`},[p,g]),v=(0,s.useMemo)(()=>e===`.`&&t===`,`?_:_.replace(/,/g,t).replace(/\./g,e),[_,e,t]);return v===`0`||v===`N/A`||!v?(0,u.jsx)(d,{}):(0,u.jsxs)(`div`,{"data-slot":`description-statistic`,className:(0,c.cn)(S({size:l,trend:f}),m),children:[n&&(0,u.jsx)(`span`,{"data-slot":`description-statistic-prefix`,children:n}),(0,u.jsx)(`p`,{"data-slot":`description-statistic-value`,children:v}),r&&(0,u.jsx)(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});C.displayName=`DescriptionStatistic`;const w={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},T=({label:e,color:t=`info`,dot:n=!0})=>e?(0,u.jsxs)(r.Badge,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&(0,u.jsx)(`span`,{className:(0,c.cn)(`inline-block size-1.5 shrink-0 rounded-full`,w[t])}),e]}):(0,u.jsx)(d,{}),E=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return(0,u.jsx)(d,{});let a=e.slice(0,t),o=e.length-a.length;return(0,u.jsxs)(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>(0,u.jsx)(r.Badge,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&(0,u.jsxs)(r.Badge,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},D=({uuid:e,username:t,email:n})=>!e||!t||!n?(0,u.jsx)(d,{}):(0,u.jsx)(a.UserDataDisplay,{uuid:e,username:t,email:n}),O=(0,s.createContext)(!1),k=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,labelAlign:i=`start`,children:a})=>n===`vertical`?(0,u.jsxs)(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[(0,u.jsxs)(`div`,{"data-slot":`description-item-label`,className:(0,c.cn)(`flex items-center border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 font-medium text-sm text-text-positive-weak`,i===`end`?`justify-end`:`justify-between`),children:[(0,u.jsx)(`span`,{children:e}),r&&(0,u.jsx)(`div`,{className:`shrink-0`,children:r})]}),(0,u.jsx)(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:a})]}):(0,u.jsxs)(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,u.jsxs)(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:(0,c.cn)(`flex min-w-full items-center overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 font-medium text-sm text-text-positive-weak tabular-nums`,i===`end`?`justify-end`:`justify-between`),children:[(0,u.jsx)(`span`,{children:e}),r&&(0,u.jsx)(`div`,{className:`shrink-0 pr-1`,children:r})]}),(0,u.jsx)(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:a})]}),A=({title:e,description:t,extra:n,className:r})=>(0,u.jsxs)(`div`,{"data-slot":`description-header`,className:(0,c.cn)(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[(0,u.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,u.jsx)(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&(0,u.jsx)(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&(0,u.jsx)(`div`,{className:`shrink-0`,children:n})]}),j=({title:e,className:t})=>(0,u.jsxs)(`div`,{"data-slot":`description-section`,className:(0,c.cn)(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&(0,u.jsx)(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),(0,u.jsx)(`div`,{className:`h-px flex-1 bg-border`})]}),M=({rows:e})=>(0,u.jsxs)(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[(0,u.jsxs)(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[(0,u.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,u.jsx)(`div`,{className:`h-3.5 w-36 rounded bg-border`}),(0,u.jsx)(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),(0,u.jsx)(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>(0,u.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,u.jsx)(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:(0,u.jsx)(`div`,{className:`h-3 w-20 rounded bg-border`})}),(0,u.jsx)(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:(0,u.jsx)(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),N=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>(0,u.jsx)(`div`,{"data-slot":`description`,className:(0,c.cn)(`relative flex flex-col bg-card`,(0,s.useContext)(O)?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?(0,u.jsx)(M,{rows:i}):e}),P=({children:e,className:t})=>(0,u.jsx)(O.Provider,{value:!0,children:(0,u.jsx)(`div`,{"data-slot":`description-group`,className:(0,c.cn)(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});exports.Description=N,exports.DescriptionBadge=f,exports.DescriptionBoolean=p,exports.DescriptionCopy=m,exports.DescriptionDate=h,exports.DescriptionEmpty=d,exports.DescriptionGroup=P,exports.DescriptionHeader=A,exports.DescriptionImages=g,exports.DescriptionItem=k,exports.DescriptionLink=_,exports.DescriptionLongText=v,exports.DescriptionName=y,exports.DescriptionNumberPhone=b,exports.DescriptionSection=j,exports.DescriptionStatistic=C,exports.DescriptionStatus=T,exports.DescriptionTagList=E,exports.DescriptionUser=D;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Badge","Badge","CheckIcon","CopyIcon","TooltipProvider","Tooltip","TooltipTrigger","DateDisplay","TooltipContent","Image","LinkIcon","ExternalLinkIcon","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Badge","Badge","UserDataDisplay"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay data-slot=\"description-date\" date={date} format=\"medium\" className=\"cursor-help\" />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph data-slot=\"description-name\" variant=\"sm\" className=\"line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className=\"flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className=\"flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-muted\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border px-4 py-2.5', className)}>\n {title && <p className=\"shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"odAEA,MAAa,OAET,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,oBAAoB,aAAW,cAAc,UAAU,oEAA2D,GAE5H,CAAA,ECQG,GAAqD,CAAE,QAAO,QAAQ,YAAa,UAAU,OAAQ,OAAO,QAClH,GAEH,EAAA,EAAA,IAAA,CAACA,EAAAA,MAAD,CAAO,YAAU,oBAA2B,QAAgB,UAAe,gBACxE,CACI,CAAA,GAJU,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECH3B,GAAyD,CAAE,QAAO,YAAY,MAAO,aAAa,QACzG,GAAS,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE3C,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,YAAU,sBAAsB,QAAQ,OAAO,MAAO,EAAQ,UAAY,SAAU,KAAK,cAC7F,EAAQ,EAAY,CAChB,CAAA,ECJE,GAAmD,CAAE,QAAO,WAAW,MAAW,CAC7F,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,SAAA,CAAsB,EAAK,EAEpC,GAAA,EAAA,EAAA,YAAA,CAAyB,SAAY,CACpC,IACL,MAAM,UAAU,UAAU,UAAU,CAAK,EACzC,EAAU,EAAI,EACd,eAAiB,EAAU,EAAK,EAAG,IAAI,EACzC,EAAG,CAAC,CAAK,CAAC,EAIV,OAFK,GAGH,EAAA,EAAA,KAAA,CAAC,SAAD,CACE,KAAK,SACL,YAAU,mBACV,QAAS,EACT,WAAA,EAAA,EAAA,GAAA,CACE,yRACA,GAAY,SACd,WAPF,EASE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,WAAA,EAAA,EAAA,GAAA,CAAc,eAAgB,GAAY,UAAU,WAAI,CAAY,CAAA,EACzE,GAAS,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,KAAM,GAAI,UAAU,uBAAyB,CAAA,GAAI,EAAA,EAAA,IAAA,CAACC,EAAAA,SAAD,CAAU,KAAM,GAAI,UAAU,6CAA+C,CAAA,CAC7I,KAdS,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,CAgBxC,EC5Ba,GAAmD,CAAE,UAC5D,GAAQ,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE1C,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAA,UACE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAa,YAAU,mBAAyB,OAAM,OAAO,SAAS,UAAU,aAAe,CAAA,CACjF,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACD,EAAAA,EAAD,CAAmB,OAAM,OAAO,OAAO,SAAA,GAAS,UAAU,qBAAuB,CAAA,CACnE,CAAA,CACT,CAAA,CAAA,CACM,CAAA,ECfR,GAEP,CAAE,YAAa,CACnB,GAAI,CAAC,GAAQ,OAAQ,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,EAE/C,IAAM,EAAW,EAAO,SAAW,EAEnC,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,qBAAqB,UAAU,gCAC3C,EAAO,IAAI,IACV,EAAA,EAAA,IAAA,CAAC,MAAD,CAEE,UACE,EACI,oHACA,8HAGN,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CAAO,IAAK,EAAM,IAAK,IAAK,EAAM,IAAK,MAAM,OAAO,OAAO,OAAO,UAAU,yDAA2D,CAAA,CACpI,EARE,EAAM,EAQR,CACN,CACE,CAAA,CAET,ECjBa,GAAmD,CAAE,OAAM,QAAO,WAAW,GAAM,eACzF,GAGH,EAAA,EAAA,KAAA,CAAC,IAAD,CACE,YAAU,mBACJ,OACN,OAAQ,EAAW,SAAW,IAAA,GAC9B,IAAK,EAAW,sBAAwB,IAAA,GACxC,WAAA,EAAA,EAAA,GAAA,CACE,mLACA,CACF,WARF,CAUG,CAAC,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,SAAD,CAAU,KAAM,GAAI,UAAU,qBAAuB,CAAA,GACnE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,oBAAY,GAAS,CAAW,CAAA,EAC/C,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAkB,KAAM,GAAI,UAAU,qBAAuB,CAAA,CACzE,KAhBa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECR1B,GAAkF,CAAE,aAC3F,GAAW,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE7C,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CACE,YAAU,uBACV,QAAQ,KACR,UAAU,mIAET,CACQ,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,QAAQ,UAAU,yCACtC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAW,CAAA,GACpE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAQ,SAAS,CAAC,CAAC,OAAO,QAAS,GAC1F,GACS,CAAA,CACT,CAAA,CAAA,ECnBA,GAEP,CAAE,UACD,GAEH,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,YAAU,mBAAmB,QAAQ,KAAK,UAAU,kGAC5D,CACQ,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,QAAQ,UAAU,yCACtC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAQ,CAAA,GACjE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAK,OAAO,QAAS,GAC5E,GACS,CAAA,CACT,CAAA,CAAA,GAdO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECL1B,GAAuD,CAAE,YAElE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,YAAU,8BACxB,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,QAAQ,KAAK,UAAU,0CAC/B,EAAM,QAAQ,wBAAyB,YAAY,CAC3C,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,kBACpB,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,wBAAgB,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,wBAAyB,uBAAuB,CAAK,CAAA,CAC3F,CAAA,CACT,CAAA,CAAA,ECRP,GAAiB,EAAa,EAAwB,IAA8C,CACxG,IAAM,EAAa,IAAM,EACzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,CAAU,EAAI,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,CAC1C,CACF,EAEM,GAAA,EAAA,EAAA,IAAA,CAAmC,4EAA6E,CACpH,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,SACN,EACA,MAAO,CACL,QAAS,qBACT,GAAI,eACJ,KAAM,aACR,CACF,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAcY,GAAA,EAAA,EAAA,KAAA,EACV,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,UACR,QAAQ,EACR,eAC+B,CAC/B,IAAM,GAAA,EAAA,EAAA,QAAA,KAAwD,CAC5D,IAAM,EAAoC,CAAC,EAS3C,OARI,OAAO,GAAc,UAAY,GAAa,IAC5C,IACF,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,GAG7B,CACT,EAAG,CAAC,EAAW,CAAiB,CAAC,EAE3B,GAAA,EAAA,EAAA,YAAA,CACH,GAAwB,CACvB,IAAI,EAAe,EAInB,OAHI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAW,CAAY,GAEpD,EAAa,eAAe,QAAS,CAAa,CAC3D,EACA,CAAC,EAAc,EAAe,CAAS,CACzC,EAEM,GAAA,EAAA,EAAA,QAAA,KAAuC,CAC3C,GAAI,OAAO,GAAU,SAEnB,OADI,OAAO,MAAM,CAAK,GAAK,CAAC,OAAO,SAAS,CAAK,EAAU,MACpD,EAAa,CAAK,EAE3B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,KAAK,EAChC,GAAI,CAAC,EAAc,MAAO,MAC1B,IAAM,EAAW,OAAO,CAAY,EAEpC,OADI,OAAO,MAAM,CAAQ,GAAK,CAAC,OAAO,SAAS,CAAQ,EAAU,MAC1D,EAAa,CAAQ,CAC9B,CACA,MAAO,KACT,EAAG,CAAC,EAAO,CAAY,CAAC,EAElB,GAAA,EAAA,EAAA,QAAA,KACA,IAAqB,KAAO,IAAmB,IAAY,EACxD,EAAe,QAAQ,KAAM,CAAc,CAAC,CAAC,QAAQ,MAAO,CAAgB,EAClF,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAMrD,OAJI,IAAwB,KAAO,IAAwB,OAAS,CAAC,GAC5D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAI1B,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,wBAAwB,WAAA,EAAA,EAAA,GAAA,CAAc,EAA6B,CAAE,OAAM,OAAM,CAAC,EAAG,CAAS,WAA7G,CACG,IAAU,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,YAAU,uCAA+B,CAAuB,CAAA,EAClE,IAAU,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,CACrE,GAET,CACF,EACA,EAAqB,YAAc,uBCjHnC,MAAM,EAA2C,CAC/C,QAAS,aACT,UAAW,eACX,MAAO,WACP,OAAQ,YACR,KAAM,UACN,QAAS,aACT,QAAS,aACT,OAAQ,WACV,EAQa,GAAuD,CAAE,QAAO,QAAQ,OAAQ,MAAM,MAC5F,GAEH,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAO,YAAU,qBAAqB,QAAQ,OAAc,QAAO,KAAK,KAAK,UAAU,mBAAvF,CACG,IAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,WAAA,EAAA,EAAA,GAAA,CAAc,8CAA+C,EAAY,EAAM,CAAI,CAAA,EAChG,CACI,KALU,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECf3B,GAAyD,CAAE,OAAM,MAAM,EAAG,QAAQ,YAAa,UAAU,UAAa,CACjI,GAAI,CAAC,GAAM,OAAQ,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,EAE7C,IAAM,EAAU,EAAK,MAAM,EAAG,CAAG,EAC3B,EAAW,EAAK,OAAS,EAAQ,OAEvC,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,uBAAuB,UAAU,gCAAhD,CACG,EAAQ,KAAK,EAAK,KAEjB,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAwB,UAAgB,QAAO,KAAK,cACjD,CACI,EAFK,CAEL,CACR,EACA,EAAW,IACV,EAAA,EAAA,KAAA,CAACA,EAAAA,MAAD,CAAO,QAAQ,UAAU,MAAM,QAAQ,KAAK,cAA5C,CAAiD,IAC7C,CACG,GAEN,GAET,ECvBa,GAAmD,CAAE,OAAM,WAAU,WAC5E,CAAC,GAAQ,CAAC,GAAY,CAAC,GAAc,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GACrD,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAuB,OAAgB,WAAiB,OAAQ,CAAA,ECNnE,GAAA,EAAA,EAAA,cAAA,CAAwC,EAAK,EAatC,GAmBR,CAAE,QAAO,eAAe,EAAG,cAAc,aAAc,SAAQ,cAC9D,IAAgB,YAEhB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,mBAAmB,UAAU,kEAA5C,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,yBACV,UAAU,oJAFZ,EAIE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oBAAY,CAAY,CAAA,CAC/C,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,yBAAyB,UAAU,8EAC/C,UACE,CAAA,CACF,KAKP,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,mBACV,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAC5E,UAAU,yDAHZ,EAKE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,EAAa,UAAU,GAAe,EACnE,UAAU,kNAHZ,EAKE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yBAAiB,CAAY,CAAA,CACpD,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,GAAK,EAAa,UAAU,GAAK,GAAe,EAC7E,UAAU,8EAET,UACE,CAAA,CACF,IAcI,GASP,CAAE,QAAO,cAAa,QAAO,gBAE/B,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,qBACV,WAAA,EAAA,EAAA,GAAA,CAAc,uGAAwG,CAAS,WAFjI,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAS,CAAA,EACjE,IAAe,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,4CAAoC,CAAe,CAAA,CAC7E,IACJ,IAAS,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oBAAY,CAAW,CAAA,CAC7C,IAeI,GAKP,CAAE,QAAO,gBAEX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,sBAAsB,WAAA,EAAA,EAAA,GAAA,CAAc,+DAAgE,CAAS,WAA5H,CACG,IAAS,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,6FAAqF,CAAS,CAAA,GACrH,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uBAAyB,CAAA,CACrC,IAIH,GAA0D,CAAE,WAChE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,sBAAsB,UAAU,yBAA/C,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gFAAf,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,8BAAgC,CAAA,GAC/C,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,mCAAqC,CAAA,CACjD,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,IACJ,MAAM,KAAK,CAAE,OAAQ,CAAK,CAAC,CAAC,CAAC,KAAK,EAAG,KACpC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAa,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAAG,UAAU,yDAAtG,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,yFACvD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BAA8B,CAAA,CAC1C,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,6CACvD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,CAAA,CACF,GAPK,CAOL,CACN,CACE,IAkBM,GAWR,CAAE,WAAU,YAAW,SAAS,GAAO,UAAU,GAAO,cAAc,MAIvE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,cACV,WAAA,EAAA,EAAA,GAAA,CACE,kCAAA,EAAA,EAAA,WAAA,CANqB,CAOf,EACF,2CACA,EACE,yDACA,gGACN,CACF,WAEC,GAAU,EAAA,EAAA,IAAA,CAAC,EAAD,CAA4B,KAAM,CAAc,CAAA,EAAI,CAC5D,CAAA,EAuBI,GAKR,CAAE,WAAU,gBAEb,EAAA,EAAA,IAAA,CAAC,EAAwB,SAAzB,CAAkC,MAAO,aACvC,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,oBACV,WAAA,EAAA,EAAA,GAAA,CAAc,iHAAkH,CAAS,EAExI,UACE,CAAA,CAC2B,CAAA"}
1
+ {"version":3,"file":"index.cjs","names":["Badge","Badge","CheckIcon","CopyIcon","TooltipProvider","Tooltip","TooltipTrigger","DateDisplay","TooltipContent","Image","LinkIcon","ExternalLinkIcon","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Tooltip","TooltipTrigger","Paragraph","TooltipContent","Badge","Badge","UserDataDisplay"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay data-slot=\"description-date\" date={date} format=\"medium\" className=\"cursor-help\" />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph data-slot=\"description-name\" variant=\"sm\" className=\"line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n /**\n * Horizontal alignment of the label text within its column.\n * @default 'start'\n */\n labelAlign?: 'start' | 'end';\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, labelAlign = 'start', children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className={cn(\n 'flex items-center border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 font-medium text-sm text-text-positive-weak',\n labelAlign === 'end' ? 'justify-end' : 'justify-between'\n )}\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className={cn(\n 'flex min-w-full items-center overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 font-medium text-sm text-text-positive-weak tabular-nums',\n labelAlign === 'end' ? 'justify-end' : 'justify-between'\n )}\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-muted\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border px-4 py-2.5', className)}>\n {title && <p className=\"shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"odAEA,MAAa,OAET,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,oBAAoB,aAAW,cAAc,UAAU,oEAA2D,GAE5H,CAAA,ECQG,GAAqD,CAAE,QAAO,QAAQ,YAAa,UAAU,OAAQ,OAAO,QAClH,GAEH,EAAA,EAAA,IAAA,CAACA,EAAAA,MAAD,CAAO,YAAU,oBAA2B,QAAgB,UAAe,gBACxE,CACI,CAAA,GAJU,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECH3B,GAAyD,CAAE,QAAO,YAAY,MAAO,aAAa,QACzG,GAAS,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE3C,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,YAAU,sBAAsB,QAAQ,OAAO,MAAO,EAAQ,UAAY,SAAU,KAAK,cAC7F,EAAQ,EAAY,CAChB,CAAA,ECJE,GAAmD,CAAE,QAAO,WAAW,MAAW,CAC7F,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,SAAA,CAAsB,EAAK,EAEpC,GAAA,EAAA,EAAA,YAAA,CAAyB,SAAY,CACpC,IACL,MAAM,UAAU,UAAU,UAAU,CAAK,EACzC,EAAU,EAAI,EACd,eAAiB,EAAU,EAAK,EAAG,IAAI,EACzC,EAAG,CAAC,CAAK,CAAC,EAIV,OAFK,GAGH,EAAA,EAAA,KAAA,CAAC,SAAD,CACE,KAAK,SACL,YAAU,mBACV,QAAS,EACT,WAAA,EAAA,EAAA,GAAA,CACE,yRACA,GAAY,SACd,WAPF,EASE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,WAAA,EAAA,EAAA,GAAA,CAAc,eAAgB,GAAY,UAAU,WAAI,CAAY,CAAA,EACzE,GAAS,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,KAAM,GAAI,UAAU,uBAAyB,CAAA,GAAI,EAAA,EAAA,IAAA,CAACC,EAAAA,SAAD,CAAU,KAAM,GAAI,UAAU,6CAA+C,CAAA,CAC7I,KAdS,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,CAgBxC,EC5Ba,GAAmD,CAAE,UAC5D,GAAQ,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE1C,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAA,UACE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAa,YAAU,mBAAyB,OAAM,OAAO,SAAS,UAAU,aAAe,CAAA,CACjF,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACD,EAAAA,EAAD,CAAmB,OAAM,OAAO,OAAO,SAAA,GAAS,UAAU,qBAAuB,CAAA,CACnE,CAAA,CACT,CAAA,CAAA,CACM,CAAA,ECfR,GAEP,CAAE,YAAa,CACnB,GAAI,CAAC,GAAQ,OAAQ,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,EAE/C,IAAM,EAAW,EAAO,SAAW,EAEnC,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,qBAAqB,UAAU,gCAC3C,EAAO,IAAI,IACV,EAAA,EAAA,IAAA,CAAC,MAAD,CAEE,UACE,EACI,oHACA,8HAGN,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CAAO,IAAK,EAAM,IAAK,IAAK,EAAM,IAAK,MAAM,OAAO,OAAO,OAAO,UAAU,yDAA2D,CAAA,CACpI,EARE,EAAM,EAQR,CACN,CACE,CAAA,CAET,ECjBa,GAAmD,CAAE,OAAM,QAAO,WAAW,GAAM,eACzF,GAGH,EAAA,EAAA,KAAA,CAAC,IAAD,CACE,YAAU,mBACJ,OACN,OAAQ,EAAW,SAAW,IAAA,GAC9B,IAAK,EAAW,sBAAwB,IAAA,GACxC,WAAA,EAAA,EAAA,GAAA,CACE,mLACA,CACF,WARF,CAUG,CAAC,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,SAAD,CAAU,KAAM,GAAI,UAAU,qBAAuB,CAAA,GACnE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,oBAAY,GAAS,CAAW,CAAA,EAC/C,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAkB,KAAM,GAAI,UAAU,qBAAuB,CAAA,CACzE,KAhBa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECR1B,GAAkF,CAAE,aAC3F,GAAW,MAAa,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAE7C,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CACE,YAAU,uBACV,QAAQ,KACR,UAAU,mIAET,CACQ,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,QAAQ,UAAU,yCACtC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAW,CAAA,GACpE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAQ,SAAS,CAAC,CAAC,OAAO,QAAS,GAC1F,GACS,CAAA,CACT,CAAA,CAAA,ECnBA,GAEP,CAAE,UACD,GAEH,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,aACd,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,YAAU,mBAAmB,QAAQ,KAAK,UAAU,kGAC5D,CACQ,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,QAAQ,UAAU,yCACtC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAQ,CAAA,GACjE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAK,OAAO,QAAS,GAC5E,GACS,CAAA,CACT,CAAA,CAAA,GAdO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECL1B,GAAuD,CAAE,YAElE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,YAAU,8BACxB,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,QAAQ,KAAK,UAAU,0CAC/B,EAAM,QAAQ,wBAAyB,YAAY,CAC3C,CAAA,CACG,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAM,kBACpB,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,wBAAgB,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,wBAAyB,uBAAuB,CAAK,CAAA,CAC3F,CAAA,CACT,CAAA,CAAA,ECRP,GAAiB,EAAa,EAAwB,IAA8C,CACxG,IAAM,EAAa,IAAM,EACzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,CAAU,EAAI,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,CAC1C,CACF,EAEM,GAAA,EAAA,EAAA,IAAA,CAAmC,4EAA6E,CACpH,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,SACN,EACA,MAAO,CACL,QAAS,qBACT,GAAI,eACJ,KAAM,aACR,CACF,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAcY,GAAA,EAAA,EAAA,KAAA,EACV,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,UACR,QAAQ,EACR,eAC+B,CAC/B,IAAM,GAAA,EAAA,EAAA,QAAA,KAAwD,CAC5D,IAAM,EAAoC,CAAC,EAS3C,OARI,OAAO,GAAc,UAAY,GAAa,IAC5C,IACF,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,GAG7B,CACT,EAAG,CAAC,EAAW,CAAiB,CAAC,EAE3B,GAAA,EAAA,EAAA,YAAA,CACH,GAAwB,CACvB,IAAI,EAAe,EAInB,OAHI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAW,CAAY,GAEpD,EAAa,eAAe,QAAS,CAAa,CAC3D,EACA,CAAC,EAAc,EAAe,CAAS,CACzC,EAEM,GAAA,EAAA,EAAA,QAAA,KAAuC,CAC3C,GAAI,OAAO,GAAU,SAEnB,OADI,OAAO,MAAM,CAAK,GAAK,CAAC,OAAO,SAAS,CAAK,EAAU,MACpD,EAAa,CAAK,EAE3B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,KAAK,EAChC,GAAI,CAAC,EAAc,MAAO,MAC1B,IAAM,EAAW,OAAO,CAAY,EAEpC,OADI,OAAO,MAAM,CAAQ,GAAK,CAAC,OAAO,SAAS,CAAQ,EAAU,MAC1D,EAAa,CAAQ,CAC9B,CACA,MAAO,KACT,EAAG,CAAC,EAAO,CAAY,CAAC,EAElB,GAAA,EAAA,EAAA,QAAA,KACA,IAAqB,KAAO,IAAmB,IAAY,EACxD,EAAe,QAAQ,KAAM,CAAc,CAAC,CAAC,QAAQ,MAAO,CAAgB,EAClF,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAMrD,OAJI,IAAwB,KAAO,IAAwB,OAAS,CAAC,GAC5D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GAI1B,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,wBAAwB,WAAA,EAAA,EAAA,GAAA,CAAc,EAA6B,CAAE,OAAM,OAAM,CAAC,EAAG,CAAS,WAA7G,CACG,IAAU,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,YAAU,uCAA+B,CAAuB,CAAA,EAClE,IAAU,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,CACrE,GAET,CACF,EACA,EAAqB,YAAc,uBCjHnC,MAAM,EAA2C,CAC/C,QAAS,aACT,UAAW,eACX,MAAO,WACP,OAAQ,YACR,KAAM,UACN,QAAS,aACT,QAAS,aACT,OAAQ,WACV,EAQa,GAAuD,CAAE,QAAO,QAAQ,OAAQ,MAAM,MAC5F,GAEH,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAO,YAAU,qBAAqB,QAAQ,OAAc,QAAO,KAAK,KAAK,UAAU,mBAAvF,CACG,IAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,WAAA,EAAA,EAAA,GAAA,CAAc,8CAA+C,EAAY,EAAM,CAAI,CAAA,EAChG,CACI,KALU,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,ECf3B,GAAyD,CAAE,OAAM,MAAM,EAAG,QAAQ,YAAa,UAAU,UAAa,CACjI,GAAI,CAAC,GAAM,OAAQ,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,EAE7C,IAAM,EAAU,EAAK,MAAM,EAAG,CAAG,EAC3B,EAAW,EAAK,OAAS,EAAQ,OAEvC,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,uBAAuB,UAAU,gCAAhD,CACG,EAAQ,KAAK,EAAK,KAEjB,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAwB,UAAgB,QAAO,KAAK,cACjD,CACI,EAFK,CAEL,CACR,EACA,EAAW,IACV,EAAA,EAAA,KAAA,CAACA,EAAAA,MAAD,CAAO,QAAQ,UAAU,MAAM,QAAQ,KAAK,cAA5C,CAAiD,IAC7C,CACG,GAEN,GAET,ECvBa,GAAmD,CAAE,OAAM,WAAU,WAC5E,CAAC,GAAQ,CAAC,GAAY,CAAC,GAAc,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,CAAA,GACrD,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAuB,OAAgB,WAAiB,OAAQ,CAAA,ECNnE,GAAA,EAAA,EAAA,cAAA,CAAwC,EAAK,EAatC,GAwBR,CAAE,QAAO,eAAe,EAAG,cAAc,aAAc,SAAQ,aAAa,QAAS,cACpF,IAAgB,YAEhB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,mBAAmB,UAAU,kEAA5C,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,yBACV,WAAA,EAAA,EAAA,GAAA,CACE,2HACA,IAAe,MAAQ,cAAgB,iBACzC,WALF,EAOE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oBAAY,CAAY,CAAA,CAC/C,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,yBAAyB,UAAU,8EAC/C,UACE,CAAA,CACF,KAKP,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,mBACV,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAC5E,UAAU,yDAHZ,EAKE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,EAAa,UAAU,GAAe,EACnE,WAAA,EAAA,EAAA,GAAA,CACE,yLACA,IAAe,MAAQ,cAAgB,iBACzC,WANF,EAQE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yBAAiB,CAAY,CAAA,CACpD,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,GAAK,EAAa,UAAU,GAAK,GAAe,EAC7E,UAAU,8EAET,UACE,CAAA,CACF,IAcI,GASP,CAAE,QAAO,cAAa,QAAO,gBAE/B,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,qBACV,WAAA,EAAA,EAAA,GAAA,CAAc,uGAAwG,CAAS,WAFjI,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,oDAA4C,CAAS,CAAA,EACjE,IAAe,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,4CAAoC,CAAe,CAAA,CAC7E,IACJ,IAAS,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oBAAY,CAAW,CAAA,CAC7C,IAeI,GAKP,CAAE,QAAO,gBAEX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,sBAAsB,WAAA,EAAA,EAAA,GAAA,CAAc,+DAAgE,CAAS,WAA5H,CACG,IAAS,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,6FAAqF,CAAS,CAAA,GACrH,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uBAAyB,CAAA,CACrC,IAIH,GAA0D,CAAE,WAChE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,sBAAsB,UAAU,yBAA/C,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gFAAf,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,8BAAgC,CAAA,GAC/C,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,mCAAqC,CAAA,CACjD,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,IACJ,MAAM,KAAK,CAAE,OAAQ,CAAK,CAAC,CAAC,CAAC,KAAK,EAAG,KACpC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAa,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAAG,UAAU,yDAAtG,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,yFACvD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BAA8B,CAAA,CAC1C,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,6CACvD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,CAAA,CACF,GAPK,CAOL,CACN,CACE,IAkBM,GAWR,CAAE,WAAU,YAAW,SAAS,GAAO,UAAU,GAAO,cAAc,MAIvE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,cACV,WAAA,EAAA,EAAA,GAAA,CACE,kCAAA,EAAA,EAAA,WAAA,CANqB,CAOf,EACF,2CACA,EACE,yDACA,gGACN,CACF,WAEC,GAAU,EAAA,EAAA,IAAA,CAAC,EAAD,CAA4B,KAAM,CAAc,CAAA,EAAI,CAC5D,CAAA,EAuBI,GAKR,CAAE,WAAU,gBAEb,EAAA,EAAA,IAAA,CAAC,EAAwB,SAAzB,CAAkC,MAAO,aACvC,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,oBACV,WAAA,EAAA,EAAA,GAAA,CAAc,iHAAkH,CAAS,EAExI,UACE,CAAA,CAC2B,CAAA"}
@@ -1,2 +1,2 @@
1
- import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, n as DescriptionGroup, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "../../index-fZChR7MS.cjs";
1
+ import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, n as DescriptionGroup, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "../../index-CS7oydGk.cjs";
2
2
  export { Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionGroup, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser };
@@ -1,2 +1,2 @@
1
- import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, n as DescriptionGroup, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "../../index-C2HFO3a9.mjs";
1
+ import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, n as DescriptionGroup, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "../../index-DmvXR2Cn.mjs";
2
2
  export { Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionGroup, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser };
@@ -1,2 +1,2 @@
1
- "use client";import{Paragraph as e}from"../../typography/paragraph.mjs";import{Image as t}from"../../ui/image.mjs";import{t as n}from"../../date-Nsz0Pewe.mjs";import{Badge as r}from"../../ui/badge.mjs";import{Tooltip as i,TooltipContent as a,TooltipProvider as o,TooltipTrigger as s}from"../../ui/tooltip.mjs";import{UserDataDisplay as c}from"../../data-display/user.mjs";import{CheckIcon as l,CopyIcon as u,ExternalLinkIcon as d,LinkIcon as f}from"lucide-react";import{createContext as p,memo as m,useCallback as h,useContext as g,useMemo as _,useState as v}from"react";import{cn as y}from"@customafk/react-toolkit/utils";import{cva as b}from"class-variance-authority";import{jsx as x,jsxs as S}from"react/jsx-runtime";const C=()=>x(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),w=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?x(r,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):x(C,{}),T=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?x(C,{}):x(r,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),E=({value:e,truncate:t=!0})=>{let[n,r]=v(!1),i=h(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?S(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:y(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[x(`span`,{className:y(`tabular-nums`,t&&`truncate`),children:e}),n?x(l,{size:12,className:`shrink-0 text-success`}):x(u,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):x(C,{})},D=({date:e})=>e==null?x(C,{}):x(o,{children:S(i,{children:[x(s,{asChild:!0,children:x(n,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),x(a,{children:x(n,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),O=({images:e})=>{if(!e?.length)return x(C,{});let n=e.length===1;return x(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>x(`div`,{className:n?`group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`,children:x(t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},k=({href:e,label:t,external:n=!0,className:r})=>e?S(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:y(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&x(f,{size:12,className:`shrink-0 opacity-70`}),x(`span`,{className:`truncate`,children:t??e}),n&&x(d,{size:12,className:`shrink-0 opacity-70`})]}):x(C,{}),A=({content:t})=>t==null?x(C,{}):S(i,{children:[x(s,{asChild:!0,children:x(e,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),j=({name:t})=>t?S(i,{children:[x(s,{asChild:!0,children:x(e,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):x(C,{}),M=({value:t})=>S(i,{children:[x(s,{"data-slot":`description-phone`,children:x(e,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),x(a,{align:`start`,children:x(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),N=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},P=b(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),F=m(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:c=`neutral`,value:l=0,className:u})=>{let d=_(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),f=h(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=N(e,i,a)),t.toLocaleString(`en-US`,d)},[a,d,i]),p=_(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:f(l);if(typeof l==`string`){let e=l.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:f(t)}return`N/A`},[l,f]),m=_(()=>e===`.`&&t===`,`?p:p.replace(/,/g,t).replace(/\./g,e),[p,e,t]);return m===`0`||m===`N/A`||!m?x(C,{}):S(`div`,{"data-slot":`description-statistic`,className:y(P({size:s,trend:c}),u),children:[n&&x(`span`,{"data-slot":`description-statistic-prefix`,children:n}),x(`p`,{"data-slot":`description-statistic-value`,children:m}),r&&x(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});F.displayName=`DescriptionStatistic`;const I={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},L=({label:e,color:t=`info`,dot:n=!0})=>e?S(r,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&x(`span`,{className:y(`inline-block size-1.5 shrink-0 rounded-full`,I[t])}),e]}):x(C,{}),R=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return x(C,{});let a=e.slice(0,t),o=e.length-a.length;return S(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>x(r,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&S(r,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},z=({uuid:e,username:t,email:n})=>!e||!t||!n?x(C,{}):x(c,{uuid:e,username:t,email:n}),B=p(!1),V=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?S(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):S(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0 pr-1`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),H=({title:e,description:t,extra:n,className:r})=>S(`div`,{"data-slot":`description-header`,className:y(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[S(`div`,{className:`flex flex-col gap-0.5`,children:[x(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&x(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&x(`div`,{className:`shrink-0`,children:n})]}),U=({title:e,className:t})=>S(`div`,{"data-slot":`description-section`,className:y(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&x(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),x(`div`,{className:`h-px flex-1 bg-border`})]}),W=({rows:e})=>S(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[S(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[S(`div`,{className:`flex flex-col gap-1.5`,children:[x(`div`,{className:`h-3.5 w-36 rounded bg-border`}),x(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),x(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>S(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[x(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-20 rounded bg-border`})}),x(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),G=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>x(`div`,{"data-slot":`description`,className:y(`relative flex flex-col bg-card`,g(B)?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?x(W,{rows:i}):e}),K=({children:e,className:t})=>x(B.Provider,{value:!0,children:x(`div`,{"data-slot":`description-group`,className:y(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});export{G as Description,w as DescriptionBadge,T as DescriptionBoolean,E as DescriptionCopy,D as DescriptionDate,C as DescriptionEmpty,K as DescriptionGroup,H as DescriptionHeader,O as DescriptionImages,V as DescriptionItem,k as DescriptionLink,A as DescriptionLongText,j as DescriptionName,M as DescriptionNumberPhone,U as DescriptionSection,F as DescriptionStatistic,L as DescriptionStatus,R as DescriptionTagList,z as DescriptionUser};
1
+ "use client";import{Paragraph as e}from"../../typography/paragraph.mjs";import{Image as t}from"../../ui/image.mjs";import{t as n}from"../../date-Nsz0Pewe.mjs";import{Badge as r}from"../../ui/badge.mjs";import{Tooltip as i,TooltipContent as a,TooltipProvider as o,TooltipTrigger as s}from"../../ui/tooltip.mjs";import{UserDataDisplay as c}from"../../data-display/user.mjs";import{CheckIcon as l,CopyIcon as u,ExternalLinkIcon as d,LinkIcon as f}from"lucide-react";import{createContext as p,memo as m,useCallback as h,useContext as g,useMemo as _,useState as v}from"react";import{cn as y}from"@customafk/react-toolkit/utils";import{cva as b}from"class-variance-authority";import{jsx as x,jsxs as S}from"react/jsx-runtime";const C=()=>x(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),w=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?x(r,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):x(C,{}),T=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?x(C,{}):x(r,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),E=({value:e,truncate:t=!0})=>{let[n,r]=v(!1),i=h(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?S(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:y(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[x(`span`,{className:y(`tabular-nums`,t&&`truncate`),children:e}),n?x(l,{size:12,className:`shrink-0 text-success`}):x(u,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):x(C,{})},D=({date:e})=>e==null?x(C,{}):x(o,{children:S(i,{children:[x(s,{asChild:!0,children:x(n,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),x(a,{children:x(n,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),O=({images:e})=>{if(!e?.length)return x(C,{});let n=e.length===1;return x(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>x(`div`,{className:n?`group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card`,children:x(t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},k=({href:e,label:t,external:n=!0,className:r})=>e?S(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:y(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&x(f,{size:12,className:`shrink-0 opacity-70`}),x(`span`,{className:`truncate`,children:t??e}),n&&x(d,{size:12,className:`shrink-0 opacity-70`})]}):x(C,{}),A=({content:t})=>t==null?x(C,{}):S(i,{children:[x(s,{asChild:!0,children:x(e,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),j=({name:t})=>t?S(i,{children:[x(s,{asChild:!0,children:x(e,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):x(C,{}),M=({value:t})=>S(i,{children:[x(s,{"data-slot":`description-phone`,children:x(e,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),x(a,{align:`start`,children:x(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),N=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},P=b(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),F=m(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:c=`neutral`,value:l=0,className:u})=>{let d=_(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),f=h(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=N(e,i,a)),t.toLocaleString(`en-US`,d)},[a,d,i]),p=_(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:f(l);if(typeof l==`string`){let e=l.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:f(t)}return`N/A`},[l,f]),m=_(()=>e===`.`&&t===`,`?p:p.replace(/,/g,t).replace(/\./g,e),[p,e,t]);return m===`0`||m===`N/A`||!m?x(C,{}):S(`div`,{"data-slot":`description-statistic`,className:y(P({size:s,trend:c}),u),children:[n&&x(`span`,{"data-slot":`description-statistic-prefix`,children:n}),x(`p`,{"data-slot":`description-statistic-value`,children:m}),r&&x(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});F.displayName=`DescriptionStatistic`;const I={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},L=({label:e,color:t=`info`,dot:n=!0})=>e?S(r,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&x(`span`,{className:y(`inline-block size-1.5 shrink-0 rounded-full`,I[t])}),e]}):x(C,{}),R=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return x(C,{});let a=e.slice(0,t),o=e.length-a.length;return S(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>x(r,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&S(r,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},z=({uuid:e,username:t,email:n})=>!e||!t||!n?x(C,{}):x(c,{uuid:e,username:t,email:n}),B=p(!1),V=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,labelAlign:i=`start`,children:a})=>n===`vertical`?S(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,className:y(`flex items-center border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 font-medium text-sm text-text-positive-weak`,i===`end`?`justify-end`:`justify-between`),children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:a})]}):S(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:y(`flex min-w-full items-center overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 font-medium text-sm text-text-positive-weak tabular-nums`,i===`end`?`justify-end`:`justify-between`),children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0 pr-1`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:a})]}),H=({title:e,description:t,extra:n,className:r})=>S(`div`,{"data-slot":`description-header`,className:y(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[S(`div`,{className:`flex flex-col gap-0.5`,children:[x(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&x(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&x(`div`,{className:`shrink-0`,children:n})]}),U=({title:e,className:t})=>S(`div`,{"data-slot":`description-section`,className:y(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&x(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),x(`div`,{className:`h-px flex-1 bg-border`})]}),W=({rows:e})=>S(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[S(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[S(`div`,{className:`flex flex-col gap-1.5`,children:[x(`div`,{className:`h-3.5 w-36 rounded bg-border`}),x(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),x(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>S(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[x(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-20 rounded bg-border`})}),x(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),G=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>x(`div`,{"data-slot":`description`,className:y(`relative flex flex-col bg-card`,g(B)?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?x(W,{rows:i}):e}),K=({children:e,className:t})=>x(B.Provider,{value:!0,children:x(`div`,{"data-slot":`description-group`,className:y(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});export{G as Description,w as DescriptionBadge,T as DescriptionBoolean,E as DescriptionCopy,D as DescriptionDate,C as DescriptionEmpty,K as DescriptionGroup,H as DescriptionHeader,O as DescriptionImages,V as DescriptionItem,k as DescriptionLink,A as DescriptionLongText,j as DescriptionName,M as DescriptionNumberPhone,U as DescriptionSection,F as DescriptionStatistic,L as DescriptionStatus,R as DescriptionTagList,z as DescriptionUser};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Image"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay data-slot=\"description-date\" date={date} format=\"medium\" className=\"cursor-help\" />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph data-slot=\"description-name\" variant=\"sm\" className=\"line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className=\"flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className=\"flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-muted\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border px-4 py-2.5', className)}>\n {title && <p className=\"shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Image"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay data-slot=\"description-date\" date={date} format=\"medium\" className=\"cursor-help\" />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-20 overflow-hidden rounded border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph data-slot=\"description-name\" variant=\"sm\" className=\"line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n /**\n * Horizontal alignment of the label text within its column.\n * @default 'start'\n */\n labelAlign?: 'start' | 'end';\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, labelAlign = 'start', children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className={cn(\n 'flex items-center border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 font-medium text-sm text-text-positive-weak',\n labelAlign === 'end' ? 'justify-end' : 'justify-between'\n )}\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className={cn(\n 'flex min-w-full items-center overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 font-medium text-sm text-text-positive-weak tabular-nums',\n labelAlign === 'end' ? 'justify-end' : 'justify-between'\n )}\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-muted\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border px-4 py-2.5', className)}>\n {title && <p className=\"shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"gtBAEA,MAAa,MAET,EAAC,OAAD,CAAM,YAAU,oBAAoB,aAAW,cAAc,UAAU,oEAA2D,GAE5H,CAAA,ECQG,GAAqD,CAAE,QAAO,QAAQ,YAAa,UAAU,OAAQ,OAAO,QAClH,EAEH,EAAC,EAAD,CAAO,YAAU,oBAA2B,QAAgB,UAAe,gBACxE,CACI,CAAA,EAJU,EAAC,EAAD,CAAmB,CAAA,ECH3B,GAAyD,CAAE,QAAO,YAAY,MAAO,aAAa,QACzG,GAAS,KAAa,EAAC,EAAD,CAAmB,CAAA,EAE3C,EAAC,EAAD,CAAO,YAAU,sBAAsB,QAAQ,OAAO,MAAO,EAAQ,UAAY,SAAU,KAAK,cAC7F,EAAQ,EAAY,CAChB,CAAA,ECJE,GAAmD,CAAE,QAAO,WAAW,MAAW,CAC7F,GAAM,CAAC,EAAQ,GAAa,EAAS,EAAK,EAEpC,EAAa,EAAY,SAAY,CACpC,IACL,MAAM,UAAU,UAAU,UAAU,CAAK,EACzC,EAAU,EAAI,EACd,eAAiB,EAAU,EAAK,EAAG,IAAI,EACzC,EAAG,CAAC,CAAK,CAAC,EAIV,OAFK,EAGH,EAAC,SAAD,CACE,KAAK,SACL,YAAU,mBACV,QAAS,EACT,UAAW,EACT,yRACA,GAAY,SACd,WAPF,CASE,EAAC,OAAD,CAAM,UAAW,EAAG,eAAgB,GAAY,UAAU,WAAI,CAAY,CAAA,EACzE,EAAS,EAAC,EAAD,CAAW,KAAM,GAAI,UAAU,uBAAyB,CAAA,EAAI,EAAC,EAAD,CAAU,KAAM,GAAI,UAAU,6CAA+C,CAAA,CAC7I,IAdS,EAAC,EAAD,CAAmB,CAAA,CAgBxC,EC5Ba,GAAmD,CAAE,UAC5D,GAAQ,KAAa,EAAC,EAAD,CAAmB,CAAA,EAE1C,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,QAAA,YACd,EAAC,EAAD,CAAa,YAAU,mBAAyB,OAAM,OAAO,SAAS,UAAU,aAAe,CAAA,CACjF,CAAA,EAChB,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAmB,OAAM,OAAO,OAAO,SAAA,GAAS,UAAU,qBAAuB,CAAA,CACnE,CAAA,CACT,CAAA,CAAA,CACM,CAAA,ECfR,GAEP,CAAE,YAAa,CACnB,GAAI,CAAC,GAAQ,OAAQ,OAAO,EAAC,EAAD,CAAmB,CAAA,EAE/C,IAAM,EAAW,EAAO,SAAW,EAEnC,OACE,EAAC,MAAD,CAAK,YAAU,qBAAqB,UAAU,gCAC3C,EAAO,IAAI,GACV,EAAC,MAAD,CAEE,UACE,EACI,oHACA,6HAGN,EAACA,EAAD,CAAO,IAAK,EAAM,IAAK,IAAK,EAAM,IAAK,MAAM,OAAO,OAAO,OAAO,UAAU,yDAA2D,CAAA,CACpI,EARE,EAAM,EAQR,CACN,CACE,CAAA,CAET,ECjBa,GAAmD,CAAE,OAAM,QAAO,WAAW,GAAM,eACzF,EAGH,EAAC,IAAD,CACE,YAAU,mBACJ,OACN,OAAQ,EAAW,SAAW,IAAA,GAC9B,IAAK,EAAW,sBAAwB,IAAA,GACxC,UAAW,EACT,mLACA,CACF,WARF,CAUG,CAAC,GAAY,EAAC,EAAD,CAAU,KAAM,GAAI,UAAU,qBAAuB,CAAA,EACnE,EAAC,OAAD,CAAM,UAAU,oBAAY,GAAS,CAAW,CAAA,EAC/C,GAAY,EAAC,EAAD,CAAkB,KAAM,GAAI,UAAU,qBAAuB,CAAA,CACzE,IAhBa,EAAC,EAAD,CAAmB,CAAA,ECR1B,GAAkF,CAAE,aAC3F,GAAW,KAAa,EAAC,EAAD,CAAmB,CAAA,EAE7C,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,QAAA,YACd,EAAC,EAAD,CACE,YAAU,uBACV,QAAQ,KACR,UAAU,mIAET,CACQ,CAAA,CACG,CAAA,EAChB,EAAC,EAAD,CAAgB,MAAM,QAAQ,UAAU,wCACtC,EAAC,MAAD,CAAK,UAAU,iCAAf,CACE,EAAC,IAAD,CAAG,UAAU,oDAA4C,CAAW,CAAA,EACpE,EAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAQ,SAAS,CAAC,CAAC,OAAO,QAAS,GAC1F,GACS,CAAA,CACT,CAAA,CAAA,ECnBA,GAEP,CAAE,UACD,EAEH,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,QAAA,YACd,EAAC,EAAD,CAAW,YAAU,mBAAmB,QAAQ,KAAK,UAAU,kGAC5D,CACQ,CAAA,CACG,CAAA,EAChB,EAAC,EAAD,CAAgB,MAAM,QAAQ,UAAU,wCACtC,EAAC,MAAD,CAAK,UAAU,iCAAf,CACE,EAAC,IAAD,CAAG,UAAU,oDAA4C,CAAQ,CAAA,EACjE,EAAC,IAAD,CAAG,UAAU,qDAAb,CAA0D,EAAK,OAAO,QAAS,GAC5E,GACS,CAAA,CACT,CAAA,CAAA,EAdO,EAAC,EAAD,CAAmB,CAAA,ECL1B,GAAuD,CAAE,WAElE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,YAAU,6BACxB,EAAC,EAAD,CAAW,QAAQ,KAAK,UAAU,0CAC/B,EAAM,QAAQ,wBAAyB,YAAY,CAC3C,CAAA,CACG,CAAA,EAChB,EAAC,EAAD,CAAgB,MAAM,iBACpB,EAAC,IAAD,CAAG,UAAU,wBAAgB,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,wBAAyB,uBAAuB,CAAK,CAAA,CAC3F,CAAA,CACT,CAAA,CAAA,ECRP,GAAiB,EAAa,EAAwB,IAA8C,CACxG,IAAM,EAAa,IAAM,EACzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,CAAU,EAAI,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,CAAU,EAAI,CAC1C,CACF,EAEM,EAA+B,EAAI,4EAA6E,CACpH,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,SACN,EACA,MAAO,CACL,QAAS,qBACT,GAAI,eACJ,KAAM,aACR,CACF,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAcY,EAAuB,GACjC,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,UACR,QAAQ,EACR,eAC+B,CAC/B,IAAM,EAAgB,MAAwC,CAC5D,IAAM,EAAoC,CAAC,EAS3C,OARI,OAAO,GAAc,UAAY,GAAa,IAC5C,IACF,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,GAG7B,CACT,EAAG,CAAC,EAAW,CAAiB,CAAC,EAE3B,EAAe,EAClB,GAAwB,CACvB,IAAI,EAAe,EAInB,OAHI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAW,CAAY,GAEpD,EAAa,eAAe,QAAS,CAAa,CAC3D,EACA,CAAC,EAAc,EAAe,CAAS,CACzC,EAEM,EAAiB,MAAsB,CAC3C,GAAI,OAAO,GAAU,SAEnB,OADI,OAAO,MAAM,CAAK,GAAK,CAAC,OAAO,SAAS,CAAK,EAAU,MACpD,EAAa,CAAK,EAE3B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,KAAK,EAChC,GAAI,CAAC,EAAc,MAAO,MAC1B,IAAM,EAAW,OAAO,CAAY,EAEpC,OADI,OAAO,MAAM,CAAQ,GAAK,CAAC,OAAO,SAAS,CAAQ,EAAU,MAC1D,EAAa,CAAQ,CAC9B,CACA,MAAO,KACT,EAAG,CAAC,EAAO,CAAY,CAAC,EAElB,EAAsB,MACtB,IAAqB,KAAO,IAAmB,IAAY,EACxD,EAAe,QAAQ,KAAM,CAAc,CAAC,CAAC,QAAQ,MAAO,CAAgB,EAClF,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAMrD,OAJI,IAAwB,KAAO,IAAwB,OAAS,CAAC,EAC5D,EAAC,EAAD,CAAmB,CAAA,EAI1B,EAAC,MAAD,CAAK,YAAU,wBAAwB,UAAW,EAAG,EAA6B,CAAE,OAAM,OAAM,CAAC,EAAG,CAAS,WAA7G,CACG,GAAU,EAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,EACxE,EAAC,IAAD,CAAG,YAAU,uCAA+B,CAAuB,CAAA,EAClE,GAAU,EAAC,OAAD,CAAM,YAAU,wCAAgC,CAAa,CAAA,CACrE,GAET,CACF,EACA,EAAqB,YAAc,uBCjHnC,MAAM,EAA2C,CAC/C,QAAS,aACT,UAAW,eACX,MAAO,WACP,OAAQ,YACR,KAAM,UACN,QAAS,aACT,QAAS,aACT,OAAQ,WACV,EAQa,GAAuD,CAAE,QAAO,QAAQ,OAAQ,MAAM,MAC5F,EAEH,EAAC,EAAD,CAAO,YAAU,qBAAqB,QAAQ,OAAc,QAAO,KAAK,KAAK,UAAU,mBAAvF,CACG,GAAO,EAAC,OAAD,CAAM,UAAW,EAAG,8CAA+C,EAAY,EAAM,CAAI,CAAA,EAChG,CACI,IALU,EAAC,EAAD,CAAmB,CAAA,ECf3B,GAAyD,CAAE,OAAM,MAAM,EAAG,QAAQ,YAAa,UAAU,UAAa,CACjI,GAAI,CAAC,GAAM,OAAQ,OAAO,EAAC,EAAD,CAAmB,CAAA,EAE7C,IAAM,EAAU,EAAK,MAAM,EAAG,CAAG,EAC3B,EAAW,EAAK,OAAS,EAAQ,OAEvC,OACE,EAAC,MAAD,CAAK,YAAU,uBAAuB,UAAU,gCAAhD,CACG,EAAQ,KAAK,EAAK,IAEjB,EAAC,EAAD,CAAwB,UAAgB,QAAO,KAAK,cACjD,CACI,EAFK,CAEL,CACR,EACA,EAAW,GACV,EAAC,EAAD,CAAO,QAAQ,UAAU,MAAM,QAAQ,KAAK,cAA5C,CAAiD,IAC7C,CACG,GAEN,GAET,ECvBa,GAAmD,CAAE,OAAM,WAAU,WAC5E,CAAC,GAAQ,CAAC,GAAY,CAAC,EAAc,EAAC,EAAD,CAAmB,CAAA,EACrD,EAAC,EAAD,CAAuB,OAAgB,WAAiB,OAAQ,CAAA,ECNnE,EAA0B,EAAc,EAAK,EAatC,GAwBR,CAAE,QAAO,eAAe,EAAG,cAAc,aAAc,SAAQ,aAAa,QAAS,cACpF,IAAgB,WAEhB,EAAC,MAAD,CAAK,YAAU,mBAAmB,UAAU,kEAA5C,CACE,EAAC,MAAD,CACE,YAAU,yBACV,UAAW,EACT,2HACA,IAAe,MAAQ,cAAgB,iBACzC,WALF,CAOE,EAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,GAAU,EAAC,MAAD,CAAK,UAAU,oBAAY,CAAY,CAAA,CAC/C,IACL,EAAC,MAAD,CAAK,YAAU,yBAAyB,UAAU,8EAC/C,UACE,CAAA,CACF,IAKP,EAAC,MAAD,CACE,YAAU,mBACV,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAC5E,UAAU,yDAHZ,CAKE,EAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,EAAa,UAAU,GAAe,EACnE,UAAW,EACT,yLACA,IAAe,MAAQ,cAAgB,iBACzC,WANF,CAQE,EAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAClB,GAAU,EAAC,MAAD,CAAK,UAAU,yBAAiB,CAAY,CAAA,CACpD,IACL,EAAC,MAAD,CACE,YAAU,yBACV,MAAO,CAAE,WAAY,QAAQ,GAAK,EAAa,UAAU,GAAK,GAAe,EAC7E,UAAU,8EAET,UACE,CAAA,CACF,IAcI,GASP,CAAE,QAAO,cAAa,QAAO,eAE/B,EAAC,MAAD,CACE,YAAU,qBACV,UAAW,EAAG,uGAAwG,CAAS,WAFjI,CAIE,EAAC,MAAD,CAAK,UAAU,iCAAf,CACE,EAAC,IAAD,CAAG,UAAU,oDAA4C,CAAS,CAAA,EACjE,GAAe,EAAC,IAAD,CAAG,UAAU,4CAAoC,CAAe,CAAA,CAC7E,IACJ,GAAS,EAAC,MAAD,CAAK,UAAU,oBAAY,CAAW,CAAA,CAC7C,IAeI,GAKP,CAAE,QAAO,eAEX,EAAC,MAAD,CAAK,YAAU,sBAAsB,UAAW,EAAG,+DAAgE,CAAS,WAA5H,CACG,GAAS,EAAC,IAAD,CAAG,UAAU,6FAAqF,CAAS,CAAA,EACrH,EAAC,MAAD,CAAK,UAAU,uBAAyB,CAAA,CACrC,IAIH,GAA0D,CAAE,UAChE,EAAC,MAAD,CAAK,YAAU,sBAAsB,UAAU,yBAA/C,CACE,EAAC,MAAD,CAAK,UAAU,gFAAf,CACE,EAAC,MAAD,CAAK,UAAU,iCAAf,CACE,EAAC,MAAD,CAAK,UAAU,8BAAgC,CAAA,EAC/C,EAAC,MAAD,CAAK,UAAU,mCAAqC,CAAA,CACjD,IACL,EAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,IACJ,MAAM,KAAK,CAAE,OAAQ,CAAK,CAAC,CAAC,CAAC,KAAK,EAAG,IACpC,EAAC,MAAD,CAAa,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,EAAG,UAAU,yDAAtG,CACE,EAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,wFACvD,EAAC,MAAD,CAAK,UAAU,4BAA8B,CAAA,CAC1C,CAAA,EACL,EAAC,MAAD,CAAK,MAAO,CAAE,WAAY,iBAAkB,EAAG,UAAU,4CACvD,EAAC,MAAD,CAAK,UAAU,iCAAmC,CAAA,CAC/C,CAAA,CACF,GAPK,CAOL,CACN,CACE,IAkBM,GAWR,CAAE,WAAU,YAAW,SAAS,GAAO,UAAU,GAAO,cAAc,KAIvE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EACT,iCANU,EAAW,CAOf,EACF,2CACA,EACE,yDACA,gGACN,CACF,WAEC,EAAU,EAAC,EAAD,CAA4B,KAAM,CAAc,CAAA,EAAI,CAC5D,CAAA,EAuBI,GAKR,CAAE,WAAU,eAEb,EAAC,EAAwB,SAAzB,CAAkC,MAAO,YACvC,EAAC,MAAD,CACE,YAAU,oBACV,UAAW,EAAG,iHAAkH,CAAS,EAExI,UACE,CAAA,CAC2B,CAAA"}
@@ -1,2 +1,2 @@
1
- import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "../../index-By6nfR2q.cjs";
1
+ import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "../../index-FEMPGfwO.cjs";
2
2
  export { ActiveFilter, BooleanFilterValue, ColumnAggregation, ColumnAggregationType, CsvCell, DateRangeFilterValue, FilterDefinition, FilterOption, FilterType, FilterValue, NumberFilterValue, RowData, SingleTagFilterValue, SummaryItem, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TTableSummaryContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, TableProviderProps, TagFilterValue, TextFilterValue, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmpty, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
@@ -1,2 +1,2 @@
1
- import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "../../index-5R8gTzkQ.mjs";
1
+ import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "../../index-_GTjwUdG.mjs";
2
2
  export { ActiveFilter, BooleanFilterValue, ColumnAggregation, ColumnAggregationType, CsvCell, DateRangeFilterValue, FilterDefinition, FilterOption, FilterType, FilterValue, NumberFilterValue, RowData, SingleTagFilterValue, SummaryItem, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TTableSummaryContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, TableProviderProps, TagFilterValue, TextFilterValue, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmpty, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
@@ -3,13 +3,13 @@ import { VariantProps } from "class-variance-authority";
3
3
  //#region packages/components/layouts/flex.d.ts
4
4
  declare const flexVariants: (props?: ({
5
5
  vertical?: boolean | null | undefined;
6
- width?: "auto" | "full" | "fit" | "screen" | "min" | "max" | "null" | null | undefined;
6
+ width?: "auto" | "max" | "min" | "full" | "fit" | "screen" | "null" | null | undefined;
7
7
  wrap?: boolean | null | undefined;
8
8
  margin?: "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
9
9
  padding?: "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
10
10
  gap?: "xs" | "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
11
- justify?: "start" | "center" | "end" | "between" | "around" | "evenly" | "stretch" | null | undefined;
12
- align?: "start" | "center" | "end" | "stretch" | "baseline" | null | undefined;
11
+ justify?: "center" | "start" | "end" | "between" | "around" | "evenly" | "stretch" | null | undefined;
12
+ align?: "center" | "start" | "end" | "stretch" | "baseline" | null | undefined;
13
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
14
  type Props = {
15
15
  /** Additional Tailwind classes merged on top of the variant-generated classes. */className?: string;
@@ -111,4 +111,4 @@ declare const Flex: import("react").MemoExoticComponent<({
111
111
  }: React.PropsWithChildren<Props>) => import("react").JSX.Element>;
112
112
  //#endregion
113
113
  export { Flex as t };
114
- //# sourceMappingURL=flex-DGVZd6c6.d.cts.map
114
+ //# sourceMappingURL=flex-CT71VV-I.d.cts.map
@@ -3,13 +3,13 @@ import { VariantProps } from "class-variance-authority";
3
3
  //#region packages/components/layouts/flex.d.ts
4
4
  declare const flexVariants: (props?: ({
5
5
  vertical?: boolean | null | undefined;
6
- width?: "auto" | "full" | "fit" | "screen" | "min" | "max" | "null" | null | undefined;
6
+ width?: "auto" | "max" | "min" | "full" | "fit" | "screen" | "null" | null | undefined;
7
7
  wrap?: boolean | null | undefined;
8
8
  margin?: "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
9
9
  padding?: "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
10
10
  gap?: "xs" | "sm" | "md" | "lg" | "xl" | "none" | null | undefined;
11
- justify?: "start" | "center" | "end" | "between" | "around" | "evenly" | "stretch" | null | undefined;
12
- align?: "start" | "center" | "end" | "stretch" | "baseline" | null | undefined;
11
+ justify?: "center" | "start" | "end" | "between" | "around" | "evenly" | "stretch" | null | undefined;
12
+ align?: "center" | "start" | "end" | "stretch" | "baseline" | null | undefined;
13
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
14
14
  type Props = {
15
15
  /** Additional Tailwind classes merged on top of the variant-generated classes. */className?: string;
@@ -111,4 +111,4 @@ declare const Flex: import("react").MemoExoticComponent<({
111
111
  }: React.PropsWithChildren<Props>) => import("react").JSX.Element>;
112
112
  //#endregion
113
113
  export { Flex as t };
114
- //# sourceMappingURL=flex-DGVZd6c6.d.mts.map
114
+ //# sourceMappingURL=flex-CT71VV-I.d.mts.map
@@ -151,6 +151,11 @@ declare const DescriptionItem: React.FC<React.PropsWithChildren<{
151
151
  */
152
152
  orientation?: 'horizontal' | 'vertical'; /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */
153
153
  action?: React.ReactNode;
154
+ /**
155
+ * Horizontal alignment of the label text within its column.
156
+ * @default 'start'
157
+ */
158
+ labelAlign?: 'start' | 'end';
154
159
  }>>;
155
160
  /**
156
161
  * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.
@@ -228,4 +233,4 @@ declare const DescriptionGroup: React.FC<React.PropsWithChildren<{
228
233
  }>>;
229
234
  //#endregion
230
235
  export { DescriptionDate as _, DescriptionSection as a, DescriptionBadge as b, DescriptionStatus as c, DescriptionNumberPhone as d, DescriptionName as f, DescriptionEmpty as g, DescriptionImages as h, DescriptionItem as i, DescriptionStatistic as l, DescriptionLink as m, DescriptionGroup as n, DescriptionUser as o, DescriptionLongText as p, DescriptionHeader as r, DescriptionTagList as s, Description as t, DescriptionStatisticProps as u, DescriptionCopy as v, DescriptionBoolean as y };
231
- //# sourceMappingURL=index-fZChR7MS.d.cts.map
236
+ //# sourceMappingURL=index-CS7oydGk.d.cts.map
@@ -151,6 +151,11 @@ declare const DescriptionItem: React.FC<React.PropsWithChildren<{
151
151
  */
152
152
  orientation?: 'horizontal' | 'vertical'; /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */
153
153
  action?: React.ReactNode;
154
+ /**
155
+ * Horizontal alignment of the label text within its column.
156
+ * @default 'start'
157
+ */
158
+ labelAlign?: 'start' | 'end';
154
159
  }>>;
155
160
  /**
156
161
  * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.
@@ -228,4 +233,4 @@ declare const DescriptionGroup: React.FC<React.PropsWithChildren<{
228
233
  }>>;
229
234
  //#endregion
230
235
  export { DescriptionDate as _, DescriptionSection as a, DescriptionBadge as b, DescriptionStatus as c, DescriptionNumberPhone as d, DescriptionName as f, DescriptionEmpty as g, DescriptionImages as h, DescriptionItem as i, DescriptionStatistic as l, DescriptionLink as m, DescriptionGroup as n, DescriptionUser as o, DescriptionLongText as p, DescriptionHeader as r, DescriptionTagList as s, Description as t, DescriptionStatisticProps as u, DescriptionCopy as v, DescriptionBoolean as y };
231
- //# sourceMappingURL=index-C2HFO3a9.d.mts.map
236
+ //# sourceMappingURL=index-DmvXR2Cn.d.mts.map
@@ -1,5 +1,5 @@
1
1
  import { t as AnyEntity } from "./types-cKvPPVBe.cjs";
2
- import { n as InputVariantProps } from "./input-BQJV7ryj.cjs";
2
+ import { n as InputVariantProps } from "./input-BieGEIDf.cjs";
3
3
  import { ComponentType } from "react";
4
4
  import { AccessorKeyColumnDef, CellContext, Column, ColumnPinningPosition, ColumnPinningState, Header, HeaderGroup, Row, RowSelectionState, Table } from "@tanstack/react-table";
5
5
 
@@ -575,4 +575,4 @@ declare const UITableTooltipActions: ComponentType<{
575
575
  }>;
576
576
  //#endregion
577
577
  export { FilterType as $, UITableLoadMore as A, TUITableWrapper as At, UITableEmptyDisplay as B, UITableTooltipActions as C, TUITableHeadCellOption as Ct, UITableContainer as D, TUITableInnerWrapper as Dt, UITableProvider as E, TUITableInnerTable as Et, UITableHeadCellOption as F, ActiveFilter as G, UITableCellActions as H, UITableHeadCell as I, ColumnAggregationType as J, BooleanFilterValue as K, UITableHead as L, UITableInnerTable as M, TagFilterValue as Mt, UITableHeadRow as N, TextFilterValue as Nt, UITableWrapper as O, TUITableLoadMore as Ot, UITableHeadCellSelect as P, UITableEmpty as Pt, FilterOption as Q, UITableFooterRow as R, UITableTooltip as S, TUITableHeadCell as St, UITableUserDataDisplay as T, TUITableHeadRow as Tt, UITableCell as U, UITableCellSelect as V, UITableBody as W, DateRangeFilterValue as X, CsvCell as Y, FilterDefinition as Z, UITableRemoveButton as _, TUITableCellSelect as _t, UITableCurrencyDisplay as a, TTableAnalysisContext as at, UITableSummaryBar as b, TUITableFooter as bt, UITableEditButton as c, TTableFilterContext as ct, UITableListDisplay as d, TTableInnerWrapperContext as dt, FilterValue as et, UITableMoreButton as f, TTableRowContext as ft, UITableProgressDisplay as g, TUITableCellActions as gt, UITablePhoneNumberDisplay as h, TUITableCell as ht, UITableBooleanDisplay as i, SummaryItem as it, UITableInnerWrapper as j, TableProviderProps as jt, UITableRow as k, TUITableRow as kt, UITableEmailDisplay as l, TTableHeadRowContext as lt, UITablePermalink as m, TUITableBody as mt, UITableAvatarNameDisplay as n, RowData as nt, UITableDateDisplay as o, TTableBodyContext as ot, UITableNameDisplay as p, TTableSummaryContext as pt, ColumnAggregation as q, UITableBadgeDisplay as r, SingleTagFilterValue as rt, UITableDescriptionDisplay as s, TTableContext as st, UITableAnalysisPanel as t, NumberFilterValue as tt, UITableFilter as u, TTableInnerTableContext as ut, UITableStatisticDisplay as v, TUITableColumn as vt, UITableTooltipFilter as w, TUITableHeadCellSelect as wt, UITableToggleButton as x, TUITableHead as xt, UITableStatusDisplay as y, TUITableEmptyDisplay as yt, UITableFooter as z };
578
- //# sourceMappingURL=index-By6nfR2q.d.cts.map
578
+ //# sourceMappingURL=index-FEMPGfwO.d.cts.map
@@ -1,5 +1,5 @@
1
1
  import { t as AnyEntity } from "./types-cKvPPVBe.mjs";
2
- import { n as InputVariantProps } from "./input-BQJV7ryj.mjs";
2
+ import { n as InputVariantProps } from "./input-BieGEIDf.mjs";
3
3
  import { ComponentType } from "react";
4
4
  import { AccessorKeyColumnDef, CellContext, Column, ColumnPinningPosition, ColumnPinningState, Header, HeaderGroup, Row, RowSelectionState, Table } from "@tanstack/react-table";
5
5
 
@@ -575,4 +575,4 @@ declare const UITableTooltipActions: ComponentType<{
575
575
  }>;
576
576
  //#endregion
577
577
  export { FilterType as $, UITableLoadMore as A, TUITableWrapper as At, UITableEmptyDisplay as B, UITableTooltipActions as C, TUITableHeadCellOption as Ct, UITableContainer as D, TUITableInnerWrapper as Dt, UITableProvider as E, TUITableInnerTable as Et, UITableHeadCellOption as F, ActiveFilter as G, UITableCellActions as H, UITableHeadCell as I, ColumnAggregationType as J, BooleanFilterValue as K, UITableHead as L, UITableInnerTable as M, TagFilterValue as Mt, UITableHeadRow as N, TextFilterValue as Nt, UITableWrapper as O, TUITableLoadMore as Ot, UITableHeadCellSelect as P, UITableEmpty as Pt, FilterOption as Q, UITableFooterRow as R, UITableTooltip as S, TUITableHeadCell as St, UITableUserDataDisplay as T, TUITableHeadRow as Tt, UITableCell as U, UITableCellSelect as V, UITableBody as W, DateRangeFilterValue as X, CsvCell as Y, FilterDefinition as Z, UITableRemoveButton as _, TUITableCellSelect as _t, UITableCurrencyDisplay as a, TTableAnalysisContext as at, UITableSummaryBar as b, TUITableFooter as bt, UITableEditButton as c, TTableFilterContext as ct, UITableListDisplay as d, TTableInnerWrapperContext as dt, FilterValue as et, UITableMoreButton as f, TTableRowContext as ft, UITableProgressDisplay as g, TUITableCellActions as gt, UITablePhoneNumberDisplay as h, TUITableCell as ht, UITableBooleanDisplay as i, SummaryItem as it, UITableInnerWrapper as j, TableProviderProps as jt, UITableRow as k, TUITableRow as kt, UITableEmailDisplay as l, TTableHeadRowContext as lt, UITablePermalink as m, TUITableBody as mt, UITableAvatarNameDisplay as n, RowData as nt, UITableDateDisplay as o, TTableBodyContext as ot, UITableNameDisplay as p, TTableSummaryContext as pt, ColumnAggregation as q, UITableBadgeDisplay as r, SingleTagFilterValue as rt, UITableDescriptionDisplay as s, TTableContext as st, UITableAnalysisPanel as t, NumberFilterValue as tt, UITableFilter as u, TTableInnerTableContext as ut, UITableStatisticDisplay as v, TUITableColumn as vt, UITableTooltipFilter as w, TUITableHeadCellSelect as wt, UITableToggleButton as x, TUITableHead as xt, UITableStatusDisplay as y, TUITableEmptyDisplay as yt, UITableFooter as z };
578
- //# sourceMappingURL=index-5R8gTzkQ.d.mts.map
578
+ //# sourceMappingURL=index-_GTjwUdG.d.mts.map
package/dist/index.d.cts CHANGED
@@ -20,13 +20,13 @@ import { n as ErrorDialogProps, t as ErrorDialog } from "./error-dialog-D4jOPhmw
20
20
  import { n as LoadingDialogProps, t as LoadingDialog } from "./loading-dialog-C73EJx9s.cjs";
21
21
  import { $ as formatSignedPercent, A as SalesTargetRadialChartProps, B as IndexedPerformanceLineChartProps, C as VolumeBarChartProps, D as SankeyFlowChartProps, E as SparklineChartProps, F as PortfolioAllocationTreemapProps, G as ConversionFunnelChartProps, H as DonutChartProps, I as OrdersBarChartProps, J as ActivityHeatmapChartProps, K as FunnelStage, L as MirroredBarChartProps, M as RevenueOrdersPoint, N as RevenueAreaChartProps, O as SankeyFlowLink, P as PriceRangeAreaChartProps, Q as formatPercent, R as MirroredBarRow, S as WaterfallChartProps, T as StackedAreaChartProps, U as DonutChartSegment, V as GainLossBarChartProps, W as CorrelationScatterChartProps, X as formatCompactNumber, Y as computeIndexedSeries, Z as formatCurrency, _ as SparklineChart, a as DonutChart, at as ChartSeries, b as VolumeBarChart, c as MetricRadarChart, ct as OHLCPoint, d as PortfolioAllocationTreemap, dt as TimeSeriesPoint, et as getChartColor, f as PriceRangeAreaChart, ft as WaterfallPoint, g as SankeyFlowChart, h as SalesTargetRadialChart, i as CorrelationScatterChart, it as BaseChartProps, j as RevenueOrdersComposedChartProps, k as SankeyFlowNode, l as MirroredBarChart, lt as PortfolioHolding, m as RevenueOrdersComposedChart, n as CandlestickChart, nt as toDateLabel, o as GainLossBarChart, ot as ChartTrend, p as RevenueAreaChart, q as CandlestickChartProps, r as ConversionFunnelChart, rt as ActivityPoint, s as IndexedPerformanceLineChart, st as NamedValue, t as ActivityHeatmapChart, tt as getDirectionColor, u as OrdersBarChart, ut as ScatterPoint, v as StackedAreaChart, w as TopProductsBarChartProps, x as WaterfallChart, y as TopProductsBarChart, z as MetricRadarChartProps } from "./index-CBntsHIg.cjs";
22
22
  import { n as BadgeProps, r as badgeVariants, t as Badge } from "./badge-MRT40pxM.cjs";
23
- import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "./index-fZChR7MS.cjs";
23
+ import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "./index-CS7oydGk.cjs";
24
24
  import { t as SearchModal } from "./index-DtIL69PB.cjs";
25
25
  import { $ as EmailFieldProps, A as TanStackActionSubmit, B as TextField, C as SimpleNumberField, D as SimpleTextField, E as SimpleSelectField, F as TanStackFieldGroup, G as useTanStackFieldContext, H as useTanStackForm, I as TanStackPopoverForm, J as BooleanFieldValue, K as useTanStackFormContext, L as TanStackSectionForm, M as TanStackCardForm, N as TanStackContainerForm, O as SimpleTextareaField, P as TanStackDialogForm, Q as DateFieldValue, R as TanStackTitleField, S as SimpleEmailField, T as SimpleRadioGroupField, U as withTanStackFieldGroup, V as TextareaField, W as withTanStackForm, X as ComboboxFieldProps, Y as CheckboxFieldProps, Z as DateFieldProps, _ as SelectField, a as DateField, at as NumberFieldValue, b as SimpleComboboxField, c as FieldContent, ct as RadioOption, d as FieldGroup, dt as SimpleTextFieldProps, et as FieldOrientation, f as FieldLabel, ft as SwitchFieldProps, g as RadioGroupField, gt as TextareaFieldProps, h as PasswordField, ht as TextFieldValue, i as ComboboxField, it as NumberFieldProps, j as TanStackActionsForm, k as SwitchField, l as FieldContentMain, lt as SelectFieldProps, m as NumberField, mt as TextFieldProps, n as ArrayHeaderRow, nt as FieldType, o as EmailField, ot as PasswordFieldProps, p as FieldSeparator, pt as TextEditorFieldProps, q as AnyFieldProps, r as CheckboxField, rt as MultiSelectFieldValue, s as Field, st as RadioGroupFieldProps, t as ArrayCol, tt as FieldRounding, u as FieldError, ut as SelectOption, v as SimpleArrayField, w as SimplePasswordField, x as SimpleDateField, y as SimpleBooleanField, z as TextEditorField } from "./index-BGnN6Vax.cjs";
26
26
  import { i as TextEditorProps, n as TextEditorToolbarProps, r as TextEditor, t as TextEditorToolbar } from "./index-D9bKlLiM.cjs";
27
27
  import { n as CMSLayoutProps, r as CMSLayoutUser, t as CMSLayout } from "./index-teY5hw2R.cjs";
28
28
  import { n as PaymentLayoutUser, t as PaymentLayout } from "./index-DJiiPHPf.cjs";
29
- import { t as Flex } from "./flex-DGVZd6c6.cjs";
29
+ import { t as Flex } from "./flex-CT71VV-I.cjs";
30
30
  import { t as Grid } from "./grid-i7Oz2Izf.cjs";
31
31
  import { t as FeatureDeveloping } from "./FeatureDeveloping-zuTTDIh_.cjs";
32
32
  import { t as FeatureFixing } from "./FeatureFixing-DYQlgHPk.cjs";
@@ -43,8 +43,8 @@ import { t as EditBtn } from "./edit-qfS5kOtM.cjs";
43
43
  import { t as RefreshBtn } from "./refresh-BiyrZAXL.cjs";
44
44
  import { t as TrashBtn } from "./trash-BfWSqlL4.cjs";
45
45
  import { t as UploadImageBtn } from "./upload-image-D4VZU3IA.cjs";
46
- import { n as InputVariantProps, t as Input } from "./input-BQJV7ryj.cjs";
47
- import { t as SearchInput } from "./search-input-CE9lDDeD.cjs";
46
+ import { n as InputVariantProps, t as Input } from "./input-BieGEIDf.cjs";
47
+ import { t as SearchInput } from "./search-input-Bq4enQzR.cjs";
48
48
  import { a as AlertTitle, i as AlertProps, n as AlertDescription, o as AlertTitleProps, r as AlertDescriptionProps, t as Alert } from "./alert-Bip5XjBw.cjs";
49
49
  import { a as AlertDialogDescription, c as AlertDialogOverlay, d as AlertDialogTrigger, i as AlertDialogContent, l as AlertDialogPortal, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog, u as AlertDialogTitle } from "./alert-dialog-Cdhz7jSj.cjs";
50
50
  import { t as AspectRatio } from "./aspect-ratio-huscluwJ.cjs";
@@ -91,5 +91,5 @@ import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./
91
91
  import { t as Textarea } from "./textarea-C8ZIZh-y.cjs";
92
92
  import { n as toggleVariants, t as Toggle } from "./toggle-Bh4EazxT.cjs";
93
93
  import { n as ToggleGroupItem, t as ToggleGroup } from "./toggle-group-BpqkL1ds.cjs";
94
- import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "./index-By6nfR2q.cjs";
94
+ import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "./index-FEMPGfwO.cjs";
95
95
  export { ActiveFilter, ActivityHeatmapChart, type ActivityHeatmapChartProps, ActivityPoint, AddNewBtn, Alert, AlertDescription, AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertProps, AlertTitle, AlertTitleProps, AnyFieldProps, ArrayCol, ArrayHeaderRow, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BaseChartProps, BooleanFieldValue, BooleanFilterValue, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, CMSLayout, CMSLayoutProps, type CMSLayoutUser, Calendar, CalendarDayButton, CandlestickChart, type CandlestickChartProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartConfig, ChartContainer, ChartContainerProps, ChartLegend, ChartLegendContent, ChartLegendContentProps, ChartSeries, ChartStyle, ChartTooltip, ChartTooltipContent, ChartTooltipContentProps, ChartTrend, Checkbox, CheckboxField, CheckboxFieldProps, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnAggregation, ColumnAggregationType, ComboboxField, ComboboxFieldProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversionFunnelChart, type ConversionFunnelChartProps, CorrelationScatterChart, type CorrelationScatterChartProps, CountryDisplay, CsvCell, DataList, DataListItem, DateDisplay, DateField, DateFieldProps, DateFieldValue, DateRangeFilterValue, DateTooltip, Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser, DetailDialog, type DetailDialogProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DonutChart, type DonutChartProps, type DonutChartSegment, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditBtn, EmailField, EmailFieldProps, Empty, EmptyContent, EmptyDescription, EmptyDisplay, EmptyHeader, EmptyMedia, EmptyTitle, ErrorDialog, type ErrorDialogProps, FeatureDeveloping, FeatureFixing, Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldOrientation, FieldRounding, FieldSeparator, FieldType, FileUploader, FilterDefinition, FilterOption, FilterType, FilterValue, Flex, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FunnelStage, GainLossBarChart, type GainLossBarChartProps, Google, Grid, GridProductCard, HoverCard, HoverCardContent, HoverCardTrigger, Image, IndexedPerformanceLineChart, type IndexedPerformanceLineChartProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputVariantProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LoadingDialog, type LoadingDialogProps, LoginPage, type LoginPageProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricRadarChart, type MetricRadarChartProps, MirroredBarChart, type MirroredBarChartProps, type MirroredBarRow, MultiSelectFieldValue, MultipleSelector, MultipleSelectorRef, NameDisplay, NamedValue, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotAuthorized, NotFound, type NotFoundProps, NumberField, NumberFieldProps, NumberFieldValue, NumberFilterValue, OHLCPoint, Option, OrdersBarChart, type OrdersBarChartProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Paragraph, type ParagraphProps, PasswordField, PasswordFieldProps, PaymentLayout, PaymentLayoutUser, PhoneNumberDisplay, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, PortfolioAllocationTreemap, type PortfolioAllocationTreemapProps, PortfolioHolding, PriceRangeAreaChart, type PriceRangeAreaChartProps, ProductCard, Progress, RadioGroup, RadioGroupField, RadioGroupFieldProps, RadioGroupItem, RadioOption, RefreshBtn, RegisterPage, type RegisterPageProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RevenueAreaChart, type RevenueAreaChartProps, RevenueOrdersComposedChart, type RevenueOrdersComposedChartProps, type RevenueOrdersPoint, RoleBadge, RowData, SalesTargetRadialChart, type SalesTargetRadialChartProps, SankeyFlowChart, type SankeyFlowChartProps, type SankeyFlowLink, type SankeyFlowNode, ScatterPoint, ScrollArea, ScrollBar, SearchInput, SearchModal, Select, SelectContent, SelectField, SelectFieldProps, SelectGroup, SelectItem, SelectLabel, SelectOption, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SimpleArrayField, SimpleBooleanField, SimpleCard, SimpleComboboxField, SimpleDateField, SimpleEmailField, SimpleNumberField, SimplePasswordField, SimpleRadioGroupField, SimpleSelectField, SimpleTextField, SimpleTextFieldProps, SimpleTextareaField, SingleTagFilterValue, Skeleton, Slider, SparklineChart, type SparklineChartProps, Spinner, StackedAreaChart, type StackedAreaChartProps, Statistic, type StatisticProps, SummaryItem, Switch, SwitchField, SwitchFieldProps, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TTableSummaryContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableProviderProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagFilterValue, TanStackActionSubmit, TanStackActionsForm, TanStackCardForm, TanStackContainerForm, TanStackDialogForm, TanStackFieldGroup, TanStackPopoverForm, TanStackSectionForm, TanStackTitleField, TextEditor, TextEditorField, TextEditorFieldProps, type TextEditorProps, TextEditorToolbar, type TextEditorToolbarProps, TextField, TextFieldProps, TextFieldValue, TextFilterValue, Textarea, TextareaField, TextareaFieldProps, TimeSeriesPoint, Title, type TitleProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopProductsBarChart, type TopProductsBarChartProps, TrashBtn, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmpty, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper, UploadImageBtn, UserDataDisplay, VerifyEmailPage, type VerifyEmailPageProps, VolumeBarChart, type VolumeBarChartProps, WaterfallChart, type WaterfallChartProps, WaterfallPoint, badgeVariants, buttonGroupVariants, computeIndexedSeries, formatCompactNumber, formatCurrency, formatPercent, formatSignedPercent, getChartColor, getDirectionColor, navigationMenuTriggerStyle, paragraphVariants, toDateLabel, toast, toggleVariants, useChart, useDebounce, useFormField, useTanStackFieldContext, useTanStackForm, useTanStackFormContext, withTanStackFieldGroup, withTanStackForm };
package/dist/index.d.mts CHANGED
@@ -20,13 +20,13 @@ import { n as ErrorDialogProps, t as ErrorDialog } from "./error-dialog-D4jOPhmw
20
20
  import { n as LoadingDialogProps, t as LoadingDialog } from "./loading-dialog-C73EJx9s.mjs";
21
21
  import { $ as formatSignedPercent, A as SalesTargetRadialChartProps, B as IndexedPerformanceLineChartProps, C as VolumeBarChartProps, D as SankeyFlowChartProps, E as SparklineChartProps, F as PortfolioAllocationTreemapProps, G as ConversionFunnelChartProps, H as DonutChartProps, I as OrdersBarChartProps, J as ActivityHeatmapChartProps, K as FunnelStage, L as MirroredBarChartProps, M as RevenueOrdersPoint, N as RevenueAreaChartProps, O as SankeyFlowLink, P as PriceRangeAreaChartProps, Q as formatPercent, R as MirroredBarRow, S as WaterfallChartProps, T as StackedAreaChartProps, U as DonutChartSegment, V as GainLossBarChartProps, W as CorrelationScatterChartProps, X as formatCompactNumber, Y as computeIndexedSeries, Z as formatCurrency, _ as SparklineChart, a as DonutChart, at as ChartSeries, b as VolumeBarChart, c as MetricRadarChart, ct as OHLCPoint, d as PortfolioAllocationTreemap, dt as TimeSeriesPoint, et as getChartColor, f as PriceRangeAreaChart, ft as WaterfallPoint, g as SankeyFlowChart, h as SalesTargetRadialChart, i as CorrelationScatterChart, it as BaseChartProps, j as RevenueOrdersComposedChartProps, k as SankeyFlowNode, l as MirroredBarChart, lt as PortfolioHolding, m as RevenueOrdersComposedChart, n as CandlestickChart, nt as toDateLabel, o as GainLossBarChart, ot as ChartTrend, p as RevenueAreaChart, q as CandlestickChartProps, r as ConversionFunnelChart, rt as ActivityPoint, s as IndexedPerformanceLineChart, st as NamedValue, t as ActivityHeatmapChart, tt as getDirectionColor, u as OrdersBarChart, ut as ScatterPoint, v as StackedAreaChart, w as TopProductsBarChartProps, x as WaterfallChart, y as TopProductsBarChart, z as MetricRadarChartProps } from "./index-CBntsHIg.mjs";
22
22
  import { n as BadgeProps, r as badgeVariants, t as Badge } from "./badge-MRT40pxM.mjs";
23
- import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "./index-C2HFO3a9.mjs";
23
+ import { _ as DescriptionDate, a as DescriptionSection, b as DescriptionBadge, c as DescriptionStatus, d as DescriptionNumberPhone, f as DescriptionName, g as DescriptionEmpty, h as DescriptionImages, i as DescriptionItem, l as DescriptionStatistic, m as DescriptionLink, o as DescriptionUser, p as DescriptionLongText, r as DescriptionHeader, s as DescriptionTagList, t as Description, u as DescriptionStatisticProps, v as DescriptionCopy, y as DescriptionBoolean } from "./index-DmvXR2Cn.mjs";
24
24
  import { t as SearchModal } from "./index-DtIL69PB.mjs";
25
25
  import { $ as EmailFieldProps, A as TanStackActionSubmit, B as TextField, C as SimpleNumberField, D as SimpleTextField, E as SimpleSelectField, F as TanStackFieldGroup, G as useTanStackFieldContext, H as useTanStackForm, I as TanStackPopoverForm, J as BooleanFieldValue, K as useTanStackFormContext, L as TanStackSectionForm, M as TanStackCardForm, N as TanStackContainerForm, O as SimpleTextareaField, P as TanStackDialogForm, Q as DateFieldValue, R as TanStackTitleField, S as SimpleEmailField, T as SimpleRadioGroupField, U as withTanStackFieldGroup, V as TextareaField, W as withTanStackForm, X as ComboboxFieldProps, Y as CheckboxFieldProps, Z as DateFieldProps, _ as SelectField, a as DateField, at as NumberFieldValue, b as SimpleComboboxField, c as FieldContent, ct as RadioOption, d as FieldGroup, dt as SimpleTextFieldProps, et as FieldOrientation, f as FieldLabel, ft as SwitchFieldProps, g as RadioGroupField, gt as TextareaFieldProps, h as PasswordField, ht as TextFieldValue, i as ComboboxField, it as NumberFieldProps, j as TanStackActionsForm, k as SwitchField, l as FieldContentMain, lt as SelectFieldProps, m as NumberField, mt as TextFieldProps, n as ArrayHeaderRow, nt as FieldType, o as EmailField, ot as PasswordFieldProps, p as FieldSeparator, pt as TextEditorFieldProps, q as AnyFieldProps, r as CheckboxField, rt as MultiSelectFieldValue, s as Field, st as RadioGroupFieldProps, t as ArrayCol, tt as FieldRounding, u as FieldError, ut as SelectOption, v as SimpleArrayField, w as SimplePasswordField, x as SimpleDateField, y as SimpleBooleanField, z as TextEditorField } from "./index-BGnN6Vax.mjs";
26
26
  import { i as TextEditorProps, n as TextEditorToolbarProps, r as TextEditor, t as TextEditorToolbar } from "./index-D9bKlLiM.mjs";
27
27
  import { n as CMSLayoutProps, r as CMSLayoutUser, t as CMSLayout } from "./index-teY5hw2R.mjs";
28
28
  import { n as PaymentLayoutUser, t as PaymentLayout } from "./index-DJiiPHPf.mjs";
29
- import { t as Flex } from "./flex-DGVZd6c6.mjs";
29
+ import { t as Flex } from "./flex-CT71VV-I.mjs";
30
30
  import { t as Grid } from "./grid-i7Oz2Izf.mjs";
31
31
  import { t as FeatureDeveloping } from "./FeatureDeveloping-zuTTDIh_.mjs";
32
32
  import { t as FeatureFixing } from "./FeatureFixing-DYQlgHPk.mjs";
@@ -43,8 +43,8 @@ import { t as EditBtn } from "./edit-qfS5kOtM.mjs";
43
43
  import { t as RefreshBtn } from "./refresh-BiyrZAXL.mjs";
44
44
  import { t as TrashBtn } from "./trash-BfWSqlL4.mjs";
45
45
  import { t as UploadImageBtn } from "./upload-image-D4VZU3IA.mjs";
46
- import { n as InputVariantProps, t as Input } from "./input-BQJV7ryj.mjs";
47
- import { t as SearchInput } from "./search-input-D2rEfTmY.mjs";
46
+ import { n as InputVariantProps, t as Input } from "./input-BieGEIDf.mjs";
47
+ import { t as SearchInput } from "./search-input-D51_mAY-.mjs";
48
48
  import { a as AlertTitle, i as AlertProps, n as AlertDescription, o as AlertTitleProps, r as AlertDescriptionProps, t as Alert } from "./alert-Bip5XjBw.mjs";
49
49
  import { a as AlertDialogDescription, c as AlertDialogOverlay, d as AlertDialogTrigger, i as AlertDialogContent, l as AlertDialogPortal, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog, u as AlertDialogTitle } from "./alert-dialog-Cdhz7jSj.mjs";
50
50
  import { t as AspectRatio } from "./aspect-ratio-huscluwJ.mjs";
@@ -91,5 +91,5 @@ import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./
91
91
  import { t as Textarea } from "./textarea-C8ZIZh-y.mjs";
92
92
  import { n as toggleVariants, t as Toggle } from "./toggle-Bh4EazxT.mjs";
93
93
  import { n as ToggleGroupItem, t as ToggleGroup } from "./toggle-group-DzNE38v5.mjs";
94
- import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "./index-5R8gTzkQ.mjs";
94
+ import { $ as FilterType, A as UITableLoadMore, At as TUITableWrapper, B as UITableEmptyDisplay, C as UITableTooltipActions, Ct as TUITableHeadCellOption, D as UITableContainer, Dt as TUITableInnerWrapper, E as UITableProvider, Et as TUITableInnerTable, F as UITableHeadCellOption, G as ActiveFilter, H as UITableCellActions, I as UITableHeadCell, J as ColumnAggregationType, K as BooleanFilterValue, L as UITableHead, M as UITableInnerTable, Mt as TagFilterValue, N as UITableHeadRow, Nt as TextFilterValue, O as UITableWrapper, Ot as TUITableLoadMore, P as UITableHeadCellSelect, Pt as UITableEmpty, Q as FilterOption, R as UITableFooterRow, S as UITableTooltip, St as TUITableHeadCell, T as UITableUserDataDisplay, Tt as TUITableHeadRow, U as UITableCell, V as UITableCellSelect, W as UITableBody, X as DateRangeFilterValue, Y as CsvCell, Z as FilterDefinition, _ as UITableRemoveButton, _t as TUITableCellSelect, a as UITableCurrencyDisplay, at as TTableAnalysisContext, b as UITableSummaryBar, bt as TUITableFooter, c as UITableEditButton, ct as TTableFilterContext, d as UITableListDisplay, dt as TTableInnerWrapperContext, et as FilterValue, f as UITableMoreButton, ft as TTableRowContext, g as UITableProgressDisplay, gt as TUITableCellActions, h as UITablePhoneNumberDisplay, ht as TUITableCell, i as UITableBooleanDisplay, it as SummaryItem, j as UITableInnerWrapper, jt as TableProviderProps, k as UITableRow, kt as TUITableRow, l as UITableEmailDisplay, lt as TTableHeadRowContext, m as UITablePermalink, mt as TUITableBody, n as UITableAvatarNameDisplay, nt as RowData, o as UITableDateDisplay, ot as TTableBodyContext, p as UITableNameDisplay, pt as TTableSummaryContext, q as ColumnAggregation, r as UITableBadgeDisplay, rt as SingleTagFilterValue, s as UITableDescriptionDisplay, st as TTableContext, t as UITableAnalysisPanel, tt as NumberFilterValue, u as UITableFilter, ut as TTableInnerTableContext, v as UITableStatisticDisplay, vt as TUITableColumn, w as UITableTooltipFilter, wt as TUITableHeadCellSelect, x as UITableToggleButton, xt as TUITableHead, y as UITableStatusDisplay, yt as TUITableEmptyDisplay, z as UITableFooter } from "./index-_GTjwUdG.mjs";
95
95
  export { ActiveFilter, ActivityHeatmapChart, type ActivityHeatmapChartProps, ActivityPoint, AddNewBtn, Alert, AlertDescription, AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertProps, AlertTitle, AlertTitleProps, AnyFieldProps, ArrayCol, ArrayHeaderRow, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BaseChartProps, BooleanFieldValue, BooleanFilterValue, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, CMSLayout, CMSLayoutProps, type CMSLayoutUser, Calendar, CalendarDayButton, CandlestickChart, type CandlestickChartProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartConfig, ChartContainer, ChartContainerProps, ChartLegend, ChartLegendContent, ChartLegendContentProps, ChartSeries, ChartStyle, ChartTooltip, ChartTooltipContent, ChartTooltipContentProps, ChartTrend, Checkbox, CheckboxField, CheckboxFieldProps, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnAggregation, ColumnAggregationType, ComboboxField, ComboboxFieldProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversionFunnelChart, type ConversionFunnelChartProps, CorrelationScatterChart, type CorrelationScatterChartProps, CountryDisplay, CsvCell, DataList, DataListItem, DateDisplay, DateField, DateFieldProps, DateFieldValue, DateRangeFilterValue, DateTooltip, Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser, DetailDialog, type DetailDialogProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DonutChart, type DonutChartProps, type DonutChartSegment, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditBtn, EmailField, EmailFieldProps, Empty, EmptyContent, EmptyDescription, EmptyDisplay, EmptyHeader, EmptyMedia, EmptyTitle, ErrorDialog, type ErrorDialogProps, FeatureDeveloping, FeatureFixing, Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldOrientation, FieldRounding, FieldSeparator, FieldType, FileUploader, FilterDefinition, FilterOption, FilterType, FilterValue, Flex, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FunnelStage, GainLossBarChart, type GainLossBarChartProps, Google, Grid, GridProductCard, HoverCard, HoverCardContent, HoverCardTrigger, Image, IndexedPerformanceLineChart, type IndexedPerformanceLineChartProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputVariantProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LoadingDialog, type LoadingDialogProps, LoginPage, type LoginPageProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricRadarChart, type MetricRadarChartProps, MirroredBarChart, type MirroredBarChartProps, type MirroredBarRow, MultiSelectFieldValue, MultipleSelector, MultipleSelectorRef, NameDisplay, NamedValue, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotAuthorized, NotFound, type NotFoundProps, NumberField, NumberFieldProps, NumberFieldValue, NumberFilterValue, OHLCPoint, Option, OrdersBarChart, type OrdersBarChartProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Paragraph, type ParagraphProps, PasswordField, PasswordFieldProps, PaymentLayout, PaymentLayoutUser, PhoneNumberDisplay, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, PortfolioAllocationTreemap, type PortfolioAllocationTreemapProps, PortfolioHolding, PriceRangeAreaChart, type PriceRangeAreaChartProps, ProductCard, Progress, RadioGroup, RadioGroupField, RadioGroupFieldProps, RadioGroupItem, RadioOption, RefreshBtn, RegisterPage, type RegisterPageProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RevenueAreaChart, type RevenueAreaChartProps, RevenueOrdersComposedChart, type RevenueOrdersComposedChartProps, type RevenueOrdersPoint, RoleBadge, RowData, SalesTargetRadialChart, type SalesTargetRadialChartProps, SankeyFlowChart, type SankeyFlowChartProps, type SankeyFlowLink, type SankeyFlowNode, ScatterPoint, ScrollArea, ScrollBar, SearchInput, SearchModal, Select, SelectContent, SelectField, SelectFieldProps, SelectGroup, SelectItem, SelectLabel, SelectOption, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SimpleArrayField, SimpleBooleanField, SimpleCard, SimpleComboboxField, SimpleDateField, SimpleEmailField, SimpleNumberField, SimplePasswordField, SimpleRadioGroupField, SimpleSelectField, SimpleTextField, SimpleTextFieldProps, SimpleTextareaField, SingleTagFilterValue, Skeleton, Slider, SparklineChart, type SparklineChartProps, Spinner, StackedAreaChart, type StackedAreaChartProps, Statistic, type StatisticProps, SummaryItem, Switch, SwitchField, SwitchFieldProps, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TTableSummaryContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableProviderProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagFilterValue, TanStackActionSubmit, TanStackActionsForm, TanStackCardForm, TanStackContainerForm, TanStackDialogForm, TanStackFieldGroup, TanStackPopoverForm, TanStackSectionForm, TanStackTitleField, TextEditor, TextEditorField, TextEditorFieldProps, type TextEditorProps, TextEditorToolbar, type TextEditorToolbarProps, TextField, TextFieldProps, TextFieldValue, TextFilterValue, Textarea, TextareaField, TextareaFieldProps, TimeSeriesPoint, Title, type TitleProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopProductsBarChart, type TopProductsBarChartProps, TrashBtn, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmpty, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper, UploadImageBtn, UserDataDisplay, VerifyEmailPage, type VerifyEmailPageProps, VolumeBarChart, type VolumeBarChartProps, WaterfallChart, type WaterfallChartProps, WaterfallPoint, badgeVariants, buttonGroupVariants, computeIndexedSeries, formatCompactNumber, formatCurrency, formatPercent, formatSignedPercent, getChartColor, getDirectionColor, navigationMenuTriggerStyle, paragraphVariants, toDateLabel, toast, toggleVariants, useChart, useDebounce, useFormField, useTanStackFieldContext, useTanStackForm, useTanStackFormContext, withTanStackFieldGroup, withTanStackForm };
@@ -3,7 +3,7 @@ import { VariantProps } from "class-variance-authority";
3
3
  //#region packages/components/ui/input.d.ts
4
4
  /** CVA variant definitions for the `Input` component — controls sizing and visual style. */
5
5
  declare const inputVariants: (props?: ({
6
- variant?: "none" | "soft" | "outline" | "ghost" | "subtle" | null | undefined;
6
+ variant?: "soft" | "outline" | "ghost" | "none" | "subtle" | null | undefined;
7
7
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
9
  type InputVariantProps = VariantProps<typeof inputVariants>;
@@ -36,4 +36,4 @@ declare function Input({
36
36
  }): import("react").JSX.Element;
37
37
  //#endregion
38
38
  export { InputVariantProps as n, inputVariants as r, Input as t };
39
- //# sourceMappingURL=input-BQJV7ryj.d.cts.map
39
+ //# sourceMappingURL=input-BieGEIDf.d.cts.map
@@ -3,7 +3,7 @@ import { VariantProps } from "class-variance-authority";
3
3
  //#region packages/components/ui/input.d.ts
4
4
  /** CVA variant definitions for the `Input` component — controls sizing and visual style. */
5
5
  declare const inputVariants: (props?: ({
6
- variant?: "none" | "soft" | "outline" | "ghost" | "subtle" | null | undefined;
6
+ variant?: "soft" | "outline" | "ghost" | "none" | "subtle" | null | undefined;
7
7
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
9
  type InputVariantProps = VariantProps<typeof inputVariants>;
@@ -36,4 +36,4 @@ declare function Input({
36
36
  }): import("react").JSX.Element;
37
37
  //#endregion
38
38
  export { InputVariantProps as n, inputVariants as r, Input as t };
39
- //# sourceMappingURL=input-BQJV7ryj.d.mts.map
39
+ //# sourceMappingURL=input-BieGEIDf.d.mts.map
@@ -1,2 +1,2 @@
1
- import { t as Flex } from "../flex-DGVZd6c6.cjs";
1
+ import { t as Flex } from "../flex-CT71VV-I.cjs";
2
2
  export { Flex };
@@ -1,2 +1,2 @@
1
- import { t as Flex } from "../flex-DGVZd6c6.mjs";
1
+ import { t as Flex } from "../flex-CT71VV-I.mjs";
2
2
  export { Flex };
@@ -1,4 +1,4 @@
1
- import { t as Input } from "./input-BQJV7ryj.cjs";
1
+ import { t as Input } from "./input-BieGEIDf.cjs";
2
2
 
3
3
  //#region packages/components/ui/inputs/search-input.d.ts
4
4
  /**
@@ -24,4 +24,4 @@ declare const SearchInput: ({
24
24
  }: Props) => import("react").JSX.Element;
25
25
  //#endregion
26
26
  export { SearchInput as t };
27
- //# sourceMappingURL=search-input-CE9lDDeD.d.cts.map
27
+ //# sourceMappingURL=search-input-Bq4enQzR.d.cts.map
@@ -1,4 +1,4 @@
1
- import { t as Input } from "./input-BQJV7ryj.mjs";
1
+ import { t as Input } from "./input-BieGEIDf.mjs";
2
2
 
3
3
  //#region packages/components/ui/inputs/search-input.d.ts
4
4
  /**
@@ -24,4 +24,4 @@ declare const SearchInput: ({
24
24
  }: Props) => import("react").JSX.Element;
25
25
  //#endregion
26
26
  export { SearchInput as t };
27
- //# sourceMappingURL=search-input-D2rEfTmY.d.mts.map
27
+ //# sourceMappingURL=search-input-D51_mAY-.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-BQJV7ryj.cjs";
1
+ import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-BieGEIDf.cjs";
2
2
  export { Input, InputVariantProps, inputVariants };
@@ -1,2 +1,2 @@
1
- import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-BQJV7ryj.mjs";
1
+ import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-BieGEIDf.mjs";
2
2
  export { Input, InputVariantProps, inputVariants };
@@ -1,2 +1,2 @@
1
- import { t as SearchInput } from "../../search-input-CE9lDDeD.cjs";
1
+ import { t as SearchInput } from "../../search-input-Bq4enQzR.cjs";
2
2
  export { SearchInput };
@@ -1,2 +1,2 @@
1
- import { t as SearchInput } from "../../search-input-D2rEfTmY.mjs";
1
+ import { t as SearchInput } from "../../search-input-D51_mAY-.mjs";
2
2
  export { SearchInput };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@customafk/lunas-ui",
3
- "version": "0.2.72",
3
+ "version": "0.2.73",
4
4
  "description": "UI library for Lunas Enterprise",
5
5
  "type": "module",
6
6
  "author": {