@customafk/lunas-ui 0.1.85 → 0.1.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{button-BACBDBid.d.cts → button-D2qx5QHI.d.cts} +5 -5
- package/dist/{button-j-XyI_BU.d.mts → button-eheC-7Id.d.mts} +7 -7
- package/dist/cards/simple-card.d.mts +2 -2
- package/dist/data-display/date-tooltip.cjs +1 -1
- package/dist/data-display/date-tooltip.mjs +1 -1
- package/dist/data-display/empty.d.mts +2 -2
- package/dist/data-display/name.cjs +1 -1
- package/dist/data-display/name.mjs +1 -1
- package/dist/data-display/phone-number.cjs +1 -1
- package/dist/data-display/phone-number.mjs +1 -1
- package/dist/data-display/statistic.d.cts +4 -4
- package/dist/{dialog-B8BAhR8k.d.cts → dialog-5imw84-8.d.cts} +12 -12
- package/dist/{dialog-DXBsPqiq.d.mts → dialog-T7CVHrm2.d.mts} +12 -12
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +26 -26
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +26 -26
- package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
- package/dist/dialogs/detail-dialog/index.cjs +1 -1
- package/dist/dialogs/detail-dialog/index.mjs +1 -1
- package/dist/features/descriptions/index.cjs +1 -1
- package/dist/features/descriptions/index.cjs.map +1 -1
- package/dist/features/descriptions/index.d.cts +4 -4
- package/dist/features/descriptions/index.mjs +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/search-modal/index.d.cts +2 -2
- package/dist/features/search-modal/index.d.mts +2 -2
- package/dist/features/tables/index.cjs +1 -1
- package/dist/features/tables/index.cjs.map +1 -1
- package/dist/features/tables/index.d.cts +17 -8
- package/dist/features/tables/index.d.mts +11 -2
- package/dist/features/tables/index.mjs +1 -1
- package/dist/features/tables/index.mjs.map +1 -1
- package/dist/features/tanstack-form/index.d.cts +90 -90
- package/dist/features/tanstack-form/index.d.mts +90 -90
- package/dist/{input-B4W9MM2a.d.cts → input-BYz8teIQ.d.mts} +5 -5
- package/dist/{input-CmnQ1O79.d.mts → input-CbpWzuai.d.cts} +6 -6
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +8 -8
- package/dist/layouts/flex.d.mts +8 -8
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/pages/FeatureDeveloping.d.cts +2 -2
- package/dist/pages/FeatureDeveloping.d.mts +2 -2
- package/dist/pages/FeatureFixing.d.cts +2 -2
- package/dist/pages/FeatureFixing.d.mts +2 -2
- package/dist/pages/NotAuthorized.d.cts +2 -2
- package/dist/pages/NotAuthorized.d.mts +2 -2
- package/dist/pages/NotFound.d.cts +2 -2
- package/dist/pages/NotFound.d.mts +2 -2
- package/dist/{tooltip-wJtgRj1d.cjs → tooltip-DMFoP_sB.cjs} +2 -2
- package/dist/{tooltip-wJtgRj1d.cjs.map → tooltip-DMFoP_sB.cjs.map} +1 -1
- package/dist/{tooltip-KihXLXJa.mjs → tooltip-Dd1torAV.mjs} +2 -2
- package/dist/{tooltip-KihXLXJa.mjs.map → tooltip-Dd1torAV.mjs.map} +1 -1
- package/dist/typography/paragraph.d.cts +2 -2
- package/dist/typography/paragraph.d.mts +2 -2
- package/dist/typography/title.d.cts +2 -2
- package/dist/typography/title.d.mts +2 -2
- package/dist/ui/alert-dialog.d.cts +12 -12
- package/dist/ui/alert-dialog.d.mts +12 -12
- package/dist/ui/alert.d.cts +7 -7
- package/dist/ui/alert.d.mts +7 -7
- package/dist/ui/aspect-ratio.d.cts +2 -2
- package/dist/ui/aspect-ratio.d.mts +2 -2
- package/dist/ui/avatar.d.cts +4 -4
- package/dist/ui/avatar.d.mts +4 -4
- package/dist/ui/badge.d.cts +4 -4
- package/dist/ui/badge.d.mts +2 -2
- package/dist/ui/breadcrumb.d.cts +8 -8
- package/dist/ui/breadcrumb.d.mts +8 -8
- package/dist/ui/button-group.d.cts +7 -7
- package/dist/ui/button-group.d.mts +5 -5
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/calendar.d.cts +4 -4
- package/dist/ui/calendar.d.mts +4 -4
- package/dist/ui/card.cjs +1 -1
- package/dist/ui/card.cjs.map +1 -1
- package/dist/ui/card.d.cts +8 -8
- package/dist/ui/card.d.mts +8 -8
- package/dist/ui/card.mjs +1 -1
- package/dist/ui/card.mjs.map +1 -1
- package/dist/ui/carousel.d.cts +7 -7
- package/dist/ui/carousel.d.mts +7 -7
- package/dist/ui/checkbox.d.cts +2 -2
- package/dist/ui/checkbox.d.mts +2 -2
- package/dist/ui/collapsible.d.cts +4 -4
- package/dist/ui/collapsible.d.mts +4 -4
- package/dist/ui/command.d.cts +11 -11
- package/dist/ui/command.d.mts +11 -11
- package/dist/ui/context-menu.d.cts +16 -16
- package/dist/ui/context-menu.d.mts +16 -16
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/drawer.d.cts +11 -11
- package/dist/ui/drawer.d.mts +11 -11
- package/dist/ui/dropdown-menu.d.cts +16 -16
- package/dist/ui/dropdown-menu.d.mts +16 -16
- package/dist/ui/empty.d.cts +9 -9
- package/dist/ui/empty.d.mts +9 -9
- package/dist/ui/field.d.cts +25 -25
- package/dist/ui/field.d.mts +25 -25
- package/dist/ui/file-uploader.d.cts +2 -2
- package/dist/ui/file-uploader.d.mts +2 -2
- package/dist/ui/form.d.cts +11 -11
- package/dist/ui/form.d.mts +11 -11
- package/dist/ui/hover-card.d.cts +4 -4
- package/dist/ui/hover-card.d.mts +4 -4
- package/dist/ui/input-otp.d.cts +5 -5
- package/dist/ui/input-otp.d.mts +5 -5
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +3 -3
- package/dist/ui/inputs/search-input.d.mts +3 -3
- package/dist/ui/item.d.cts +16 -16
- package/dist/ui/item.d.mts +16 -16
- package/dist/ui/label.d.cts +2 -2
- package/dist/ui/label.d.mts +2 -2
- package/dist/ui/menubar.d.cts +17 -17
- package/dist/ui/menubar.d.mts +17 -17
- package/dist/ui/multi-select.d.cts +2 -2
- package/dist/ui/multi-select.d.mts +3 -3
- package/dist/ui/navigation-menu.d.cts +11 -11
- package/dist/ui/navigation-menu.d.mts +11 -11
- package/dist/ui/pagination.d.cts +9 -9
- package/dist/ui/pagination.d.mts +9 -9
- package/dist/ui/popover.d.cts +5 -5
- package/dist/ui/popover.d.mts +5 -5
- package/dist/ui/progress.d.cts +2 -2
- package/dist/ui/progress.d.mts +2 -2
- package/dist/ui/radio-group.d.cts +3 -3
- package/dist/ui/radio-group.d.mts +3 -3
- package/dist/ui/resizable.d.cts +4 -4
- package/dist/ui/resizable.d.mts +4 -4
- package/dist/ui/scroll-area.d.cts +6 -6
- package/dist/ui/scroll-area.d.mts +6 -6
- package/dist/ui/select.d.cts +11 -11
- package/dist/ui/select.d.mts +11 -11
- package/dist/ui/separator.d.cts +2 -2
- package/dist/ui/separator.d.mts +2 -2
- package/dist/ui/sheet.d.cts +9 -9
- package/dist/ui/sheet.d.mts +9 -9
- package/dist/ui/sidebar.cjs +1 -1
- package/dist/ui/sidebar.d.cts +26 -26
- package/dist/ui/sidebar.d.mts +28 -28
- package/dist/ui/sidebar.mjs +1 -1
- package/dist/ui/skeleton.d.cts +2 -2
- package/dist/ui/skeleton.d.mts +2 -2
- package/dist/ui/slider.d.cts +2 -2
- package/dist/ui/slider.d.mts +2 -2
- package/dist/ui/sonner.d.cts +2 -2
- package/dist/ui/sonner.d.mts +2 -2
- package/dist/ui/spinner.d.cts +2 -2
- package/dist/ui/spinner.d.mts +2 -2
- package/dist/ui/switch.d.cts +2 -2
- package/dist/ui/switch.d.mts +2 -2
- package/dist/ui/table.d.cts +18 -18
- package/dist/ui/table.d.mts +9 -9
- package/dist/ui/tabs.d.cts +5 -5
- package/dist/ui/tabs.d.mts +5 -5
- package/dist/ui/textarea.d.cts +2 -2
- package/dist/ui/textarea.d.mts +2 -2
- package/dist/ui/toggle-group.d.cts +3 -3
- package/dist/ui/toggle-group.d.mts +3 -3
- package/dist/ui/toggle.d.cts +4 -4
- package/dist/ui/toggle.d.mts +4 -4
- package/dist/ui/tooltip.cjs +1 -1
- package/dist/ui/tooltip.d.cts +5 -5
- package/dist/ui/tooltip.d.mts +5 -5
- package/dist/ui/tooltip.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../chunk-Bmb41Sf3.cjs`);require(`../../button.variants-Bo2vzQp5.cjs`);const t=require(`../../button-BLYTfCyl.cjs`),n=require(`../../flex-DGPQRbN6.cjs`),r=require(`../../paragraph-B9_-MKH8.cjs`),i=require(`../../date-CuRT4hmU.cjs`),a=require(`../../badge-CsDmp3ys.cjs`),o=require(`../../tooltip-wJtgRj1d.cjs`),s=require(`../../avatar-dAu1c0bC.cjs`),c=require(`../../separator-DSZyCT2g.cjs`),l=require(`../../dropdown-menu-5Zyw5t_J.cjs`),u=require(`../../checkbox-DDuYFG0R.cjs`),d=require(`../../resizable-BS63Xwia.cjs`),f=require(`../../input-qnlHzDDm.cjs`);let p=require(`@customafk/react-toolkit/utils`),m=require(`react/jsx-runtime`),h=require(`lucide-react`),g=require(`react`),_=require(`@customafk/react-toolkit/color-hash`),v=require(`@tanstack/react-table`),y=require(`@tanstack/react-virtual`);const b=()=>(0,m.jsxs)(`div`,{className:`flex gap-0 text-text-positive-weak`,children:[(0,m.jsx)(h.MinusIcon,{size:16}),(0,m.jsx)(h.MinusIcon,{size:16})]}),x=({label:e,onClick:t,onRemove:n})=>e?n?(0,m.jsxs)(`div`,{className:`flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs`,onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:[e,(0,m.jsx)(`button`,{className:`cursor-pointer text-text-positive-weak hover:text-text-positive-strong`,onClick:e=>{n?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.XIcon,{size:12})})]}):(0,m.jsx)(`button`,{className:`w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs`,onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:e}):(0,m.jsx)(b,{}),S=({value:e})=>e==null?(0,m.jsx)(b,{}):e===!1?(0,m.jsx)(`div`,{className:`text-danger-strong`,children:(0,m.jsx)(h.XIcon,{})}):(0,m.jsx)(`div`,{className:`text-success-strong`,children:(0,m.jsx)(h.CheckIcon,{})}),C=({date:e})=>e==null?(0,m.jsx)(b,{}):(0,m.jsx)(o.r,{children:(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(a.t,{className:`h-fit`,children:(0,m.jsx)(i.t,{date:e,format:`medium`,className:`font-normal text-white`})})}),(0,m.jsx)(o.n,{children:(0,m.jsx)(i.t,{date:e,format:`full`,showTime:!0,className:`font-medium text-xs`})})]})}),w=({content:e})=>e==null?(0,m.jsx)(b,{}):(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(`div`,{className:`line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak`,children:e})}),(0,m.jsx)(o.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,m.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,m.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,m.jsxs)(`p`,{className:`w-full text-end`,children:[e.toString().length,` chars`]})]})})]}),T=({items:e=[]})=>(0,m.jsxs)(l.t,{children:[(0,m.jsx)(l.h,{asChild:!0,children:(0,m.jsx)(t.t,{size:`sm`,variant:`ghost`,color:`secondary`,className:`size-9 rounded-full`,children:(0,m.jsx)(h.MoreVerticalIcon,{})})}),(0,m.jsx)(l.r,{children:(0,m.jsx)(l.i,{children:e.map(e=>(0,m.jsx)(l.a,{className:`px-3`,onSelect:()=>e.onClick(e.id),children:e.label},e.id))})})]}),E=({name:e})=>e?(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{children:(0,m.jsx)(r.t,{variant:`sm`,className:`line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm`,children:e})}),(0,m.jsx)(o.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,m.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,m.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,m.jsxs)(`p`,{className:`w-full text-end`,children:[e.length,` chars`]})]})})]}):(0,m.jsx)(b,{}),D=({value:e})=>(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(`p`,{className:`font-number text-secondary-foreground text-sm tabular-nums`,children:e.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,m.jsx)(o.n,{align:`start`,children:(0,m.jsx)(`p`,{className:`tabular-nums`,children:e.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),O=({title:e,onClick:n})=>(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{children:(0,m.jsx)(t.t,{type:`button`,variant:`ghost`,color:`danger`,size:`icon`,onClick:(0,g.useCallback)(async e=>{e.preventDefault(),e.stopPropagation(),await n?.()},[n]),children:(0,m.jsx)(h.Trash2Icon,{})})}),(0,m.jsx)(o.n,{children:(0,m.jsx)(`p`,{children:e||`Remove item from list table`})})]}),k=(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}},A=(0,g.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:r,suffix:i,precision:a,roundingMode:o=`round`,showTrailingZeros:s=!1,size:c=`lg`,value:l=0})=>{let u=(0,g.useMemo)(()=>{let e={};return typeof a==`number`&&a>=0&&s&&(e.minimumFractionDigits=a),e.maximumFractionDigits=a,e},[a,s]),d=(0,g.useCallback)(e=>{let t=e;return typeof a==`number`&&a>=0&&(t=k(e,a,o)),t.toLocaleString(`en-US`,u)},[o,u,a]),f=(0,g.useMemo)(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:d(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`:d(t)}return`N/A`},[l,d]),h=(0,g.useMemo)(()=>e===`.`&&t===`,`?f:f.replace(/,/g,t).replace(/\./g,e),[f,e,t]);return h===`0`||h===`N/A`||!h?(0,m.jsx)(b,{}):(0,m.jsxs)(n.t,{padding:`none`,className:(0,p.cn)(`font-number text-lg text-secondary-foreground tabular-nums`,c===`xs`&&`text-xs`,c===`sm`&&`text-sm`,c===`md`&&`text-base`,c===`lg`&&`text-lg`,c===`xl`&&`text-xl`),children:[r,(0,m.jsx)(`p`,{children:h}),i]})});A.displayName=`UITableStatisticDisplay`;const j=({uuid:e,username:t,email:i})=>(0,m.jsxs)(n.t,{wrap:!1,gap:`sm`,padding:`none`,children:[!e&&(0,m.jsx)(s.t,{className:`size-10 shadow-card`,children:(0,m.jsx)(s.n,{className:`bg-muted-weak`,children:(0,m.jsx)(h.UserRoundIcon,{size:28,className:`text-text-negative`})})}),e&&(0,m.jsx)(s.t,{className:`size-10 shadow-card`,children:(0,m.jsx)(s.n,{style:{backgroundColor:_.colorHashLight.hex(e)},children:(0,m.jsx)(h.UserRoundIcon,{size:28,className:`text-white`})})}),(0,m.jsxs)(n.t,{vertical:!0,padding:`none`,gap:`none`,align:`start`,children:[(0,m.jsx)(r.t,{className:`font-medium text-sm text-text-positive-weak`,children:t??`Unknown User`}),(0,m.jsx)(r.t,{variant:`sm`,className:`mt-0! text-text-positive-weak text-xs`,children:i})]})]}),M=(0,g.createContext)(null),N=()=>{let e=(0,g.use)(M);if(!e)throw Error(`useUITableClickRowContext must be used within a TableClickRowProvider`);return e},P=(0,g.createContext)(null),F=()=>{let e=(0,g.use)(P);if(!e)throw Error(`useTableContext must be used within a TableProvider`);return e},ee=60,te=20,ne=20,I=e=>{let t=e.getIsPinned();return{zIndex:t?20:void 0,left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0}},L=({className:e,children:t,...n})=>(0,m.jsx)(`div`,{"data-slot":`table-wrapper`,className:`relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2 py-2.5 text-sm`,...n,children:t}),R=(0,g.memo)(({children:e})=>(0,m.jsx)(`thead`,{"data-slot":`table-header`,style:{zIndex:20},className:(0,p.cn)(`sticky top-0 grid bg-muted-bg-subtle text-[13px] text-text-positive-weak`,`[&_tr:not(:last-child)_td]:border-b`,`[&_th]:flex`,`[&_th]:h-9`,`[&_th]:select-none`,`[&_th]:items-center`,`[&_th]:whitespace-nowrap`,`[&_th]:border-border`,`[&_th]:font-medium`,`[&_th]:text-left`,`[&_th]:align-middle`,`[&_th]:last:border-r-0`,`[&_th]:first:border-l-0`,`[&_th]:data-[pinned=right]:border-l`,`[&_th]:data-[pinned=right]:border-r-0`,`[&_th]:data-[pinned=left]:border-r`,`[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle`),children:e}));R.displayName=`TableHeader`;const z=(0,g.memo)(({children:e})=>(0,m.jsx)(`tr`,{"data-slot":`table-header-row`,className:`flex w-full border-border border-b shadow`,children:e}));z.displayName=`TableHeaderRow`;const B=({header:e,isPinned:t,isResizing:n,isAllRowsSelected:r,children:i,...a})=>{let o=I(e.column),s=`calc(var(--header-${e.id}-size) * 1px)`;return e.id===`select`?(0,m.jsx)(`th`,{"data-slot":`table-header-cell`,style:{...o,width:60},className:(0,p.cn)(t?`sticky`:`relative`),...a,children:(0,m.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,m.jsx)(u.t,{"aria-label":`Select All Rows`,checked:r,onCheckedChange:t=>{e.getContext().table.toggleAllRowsSelected(!!t)}})})}):(0,m.jsxs)(`th`,{"data-slot":`table-header-cell`,"data-pinned":t,style:{...o,width:s},colSpan:e.colSpan,className:(0,p.cn)(`group relative`,t?`sticky`:`relative`),...a,children:[(0,m.jsx)(`div`,{className:`absolute inset-0 gap-1 truncate`,children:(0,m.jsx)(`div`,{className:`flex h-full flex-1 cursor-pointer select-none items-center justify-between`,children:(0,m.jsx)(`div`,{className:`flex size-full flex-1 items-center truncate pl-4`,children:(0,v.flexRender)(e.column.columnDef.header,e.getContext())})})}),![`select`,`actions`].includes(e.id)&&(0,m.jsx)(V,{isPinned:t,isVisible:e.column.getIsVisible(),className:`invisible absolute right-2 z-10 group-hover:visible`,onLeftPin:e.column.pin,onRightPin:e.column.pin,onUnpin:e.column.pin,onToggleVisibilityHandler:e.column.toggleVisibility}),(0,m.jsx)(g.Activity,{mode:t?`hidden`:`visible`,children:(0,m.jsx)(`div`,{onDoubleClick:e.column.resetSize,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:(0,p.cn)(`absolute inset-y-0 -right-0.5 w-1 cursor-e-resize bg-transparent hover:bg-border`,n&&`bg-border`)})})]})},V=({isPinned:e,className:t,onLeftPin:n,onRightPin:r,onUnpin:i,onToggleVisibilityHandler:a})=>{let o=(0,g.useCallback)(()=>{n(`left`)},[n]),s=(0,g.useCallback)(()=>{r(`right`)},[r]),c=(0,g.useCallback)(()=>{i(!1)},[i]);return(0,m.jsxs)(l.t,{children:[(0,m.jsx)(l.h,{asChild:!0,children:(0,m.jsx)(`button`,{className:(0,p.cn)(`cursor-pointer rounded-full p-0.5 text-text-positive-weak hover:bg-muted-muted hover:text-text-positive [&>svg]:size-4`,t),children:(0,m.jsx)(h.EllipsisVerticalIcon,{})})}),(0,m.jsxs)(l.r,{align:`end`,className:`w-64 p-4`,children:[(0,m.jsxs)(l.i,{className:`*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2`,children:[(0,m.jsx)(g.Activity,{mode:e?`visible`:`hidden`,children:(0,m.jsxs)(l.a,{onClick:c,children:[!!e&&`Unpin`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.PinOffIcon,{className:`size-4`})})]})}),(0,m.jsxs)(g.Activity,{mode:e?`hidden`:`visible`,children:[(0,m.jsxs)(l.a,{onClick:o,children:[e?`Unpin`:`Pin to Left`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.MoveLeftIcon,{className:`size-4`})})]}),(0,m.jsxs)(l.a,{onClick:s,children:[e?`Unpin`:`Pin to Right`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.MoveRightIcon,{className:`size-4`})})]})]})]}),(0,m.jsx)(l.u,{}),(0,m.jsx)(l.i,{className:`*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2`,children:(0,m.jsxs)(l.a,{onClick:()=>a(!1),children:[`Hide Field`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.EyeOffIcon,{className:`size-4`})})]})})]})]})},H=({height:e,children:t,...n})=>(0,m.jsx)(`tbody`,{"data-slot":`table-body`,style:{height:`${e}px`},className:(0,p.cn)(`relative grid w-full bg-card`,`[&_tr]:absolute [&_tr]:flex [&_tr]:w-full [&_tr]:cursor-pointer [&_tr]:border-b [&_tr]:border-b-border [&_tr]:focus:outline-none`,`[&_td]:z-10`,`[&_td]:flex`,`[&_td]:overflow-hidden`,`[&_td]:whitespace-nowrap`,`[&_td]:px-4`,`[&_td]:py-2.5`,`[&_td]:align-middle`,`[&_td]:border-border`,`[&_td]:data-[pinned=right]:border-l`,`[&_td]:data-[pinned=left]:border-r`,`[&_td:not([data-pinned=false])]:bg-card`,`[&_td:not([data-pinned=false])]:shadow-xs`),...n,children:t}),U=(0,g.memo)(({children:e,keyOfClickRow:t,row:n,virtualRow:r,rowVirtualizer:i,onClickRow:a,className:o,...s})=>{let{columnPinning:c}=F(),l=(0,g.useCallback)(e=>{let i=t?n.original?.[t]:void 0;typeof i==`string`||typeof i==`number`?a?.(r.index,i):a?.(r.index),e.preventDefault(),e.stopPropagation()},[t,a,n.original,r.index]);return(0,m.jsx)(`tr`,{"data-slot":`table-row`,"data-index":r.index,ref:e=>i.measureElement(e),style:{transform:`translateY(${r.start}px)`},className:(0,p.cn)(`group`,o),onClick:l,...s,children:n.getVisibleCells().map(e=>(0,m.jsx)(W,{cell:e,className:`group-hover:bg-muted-bg-subtle!`},e.id))})});U.displayName=`TableRow`;const W=(0,g.memo)(({cell:e,children:t,className:n,...r})=>{let{rowSelection:i}=F(),a=e.column.getIsPinned(),o=I(e.column),s=`calc(var(--col-${e.column.id}-size) * 1px)`,c=e.column.columnDef.meta?.position??`start`;return e.column.id===`select`?(0,m.jsx)(`td`,{"data-slot":`table-cell`,style:{...o,width:60},className:(0,p.cn)(`border-none! bg-transparent! shadow-none!`,a?`sticky`:`relative`,n),...r,children:(0,m.jsx)(`div`,{"data-slot":`table-cell-inner`,className:`inline-flex w-full items-center justify-center bg-transparent text-center align-middle`,children:(0,m.jsx)(u.t,{"aria-label":`Select Row`,checked:e.row.getIsSelected(),onCheckedChange:t=>{e.row.toggleSelected(!!t)}})})}):(0,m.jsx)(`td`,{"data-slot":`table-cell`,"data-pinned":a,style:{...o,width:s},className:(0,p.cn)(a&&e.column.getPinnedIndex()===0&&`shadow!`,a&&`sticky`,!a&&`relative`,n),...r,children:(0,m.jsx)(`div`,{"data-slot":`table-cell-inner`,className:(0,p.cn)(`inline-flex w-full items-center bg-transparent text-center align-middle`,c===`start`&&`justify-start`,c===`center`&&`justify-center`,c===`end`&&`justify-end`),children:(0,v.flexRender)(e.column.columnDef.cell,e.getContext())})})});W.displayName=`TableCell`;const G=()=>(0,m.jsx)(`div`,{className:`sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100`,children:(0,m.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,m.jsx)(h.BoxIcon,{strokeWidth:1,size:48}),(0,m.jsx)(`p`,{children:`No data available`})]})}),K=({children:e})=>(0,m.jsx)(`tfoot`,{"data-slot":`table-footer`,className:`flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0`,children:e}),q=({children:e})=>{let{table:t,isEmpty:n,isFetching:r,data:i,totalRows:a,fetchMoreData:o}=F(),{keyOfClickRow:s,onClickRow:c}=N(),l=(0,g.useRef)(null),u=(0,g.useMemo)(()=>{let e=t.getFlatHeaders(),n={};return e.forEach(e=>{n[`--header-${e.id}-size`]=e.getSize()||0,n[`--col-${e.column.id}-size`]=e.column.getSize()||0}),n},[t.getState().columnSizingInfo,t.getState().columnSizing]),f=(0,g.useCallback)(async e=>{if(!e)return null;let{scrollHeight:t,scrollTop:n,clientHeight:s}=e;t-n-s<500&&!r&&a&&i.length<a&&o?.()},[r,i.length,a,o]);(0,g.useEffect)(()=>{f(l.current)},[f]);let{rows:p}=t.getRowModel(),h=(0,y.useVirtualizer)({count:p.length,estimateSize:()=>40,getScrollElement:()=>l.current,measureElement:typeof window<`u`&&navigator.userAgent.indexOf(`Firefox`)===-1?e=>e?.getBoundingClientRect().height:void 0,overscan:2});return(0,m.jsxs)(d.r,{direction:`horizontal`,style:{direction:t.options.columnResizeDirection},className:`relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border bg-slate-50 p-0 text-sm`,children:[(0,m.jsx)(d.n,{className:`overflow-auto`,children:(0,m.jsxs)(`div`,{ref:l,className:`relative size-full overflow-auto border-b border-b-border border-l border-l-border`,onScroll:e=>f(e.currentTarget),children:[(0,m.jsxs)(`table`,{"data-slot":`table`,style:{...u,width:t.getTotalSize()},className:`grid w-full max-w-full caption-bottom border-collapse border-spacing-0 flex-col content-start bg-card text-sm tabular-nums [&_tfoot_td]:border-t`,children:[(0,m.jsx)(R,{children:t.getHeaderGroups().map(e=>(0,m.jsx)(z,{children:e.headers.map(e=>(0,m.jsx)(B,{header:e,isPinned:e.column.getIsPinned(),isResizing:e.column.getIsResizing(),isAllRowsSelected:t.getIsAllRowsSelected()},e.id))},e.id))}),(0,m.jsx)(H,{"data-slot":`table-body`,height:h.getTotalSize(),children:h.getVirtualItems().map(e=>{let t=p[e.index];return(0,m.jsx)(U,{"data-index":e.index,keyOfClickRow:s,row:t,virtualRow:e,rowVirtualizer:h,onClickRow:c},t.id)})})]}),n&&(0,m.jsx)(G,{})]})}),(0,m.jsx)(d.t,{}),e]})},J=({checked:e,title:t,onCheckedChange:n})=>(0,m.jsxs)(`div`,{className:`flex h-fit items-center gap-2`,children:[(0,m.jsx)(u.t,{checked:e,onCheckedChange:n}),(0,m.jsx)(`p`,{className:`text-sm`,children:t})]}),Y=()=>{let{table:e}=F(),[n,r]=(0,g.useState)(null);return(0,m.jsx)(d.n,{defaultSize:25,className:(0,p.cn)(`bg-card`,n===null?`max-w-8!`:`min-w-64`),children:(0,m.jsxs)(`div`,{className:`relative z-20 flex size-full bg-muted-bg-subtle`,children:[(0,m.jsxs)(`div`,{className:`flex-1`,children:[(0,m.jsx)(g.Activity,{mode:n===`columns`?`visible`:`hidden`,children:(0,m.jsxs)(`div`,{className:`flex size-full flex-col gap-2 p-4`,children:[(0,m.jsx)(`p`,{className:`px-2 font-medium`,children:`Columns Visibility`}),(0,m.jsx)(c.t,{}),(0,m.jsx)(`div`,{className:`flex flex-col gap-4 pt-4`,children:e.getAllColumns().map(e=>[`select`,`actions`].includes(e.id)?null:(0,m.jsx)(J,{checked:e.getIsVisible(),title:String(e.columnDef.header),onCheckedChange:t=>e.toggleVisibility(!!t)},e.id))})]})}),(0,m.jsx)(g.Activity,{mode:n===`filters`?`visible`:`hidden`,children:(0,m.jsx)(`div`,{className:`flex size-full flex-col p-2`,children:(0,m.jsxs)(t.t,{variant:`outline`,color:`muted`,children:[(0,m.jsx)(h.ListFilterPlus,{}),`Add Filter`]})})})]}),(0,m.jsxs)(`div`,{className:`flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm`,children:[(0,m.jsxs)(`button`,{className:(0,p.cn)(`flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4`,n===`columns`&&`bg-card`),onClick:()=>r(n===`columns`?null:`columns`),children:[(0,m.jsx)(h.Columns4Icon,{size:18}),(0,m.jsx)(`span`,{className:`text-nowrap [writing-mode:vertical-lr]`,children:`Columns`})]}),(0,m.jsx)(c.t,{}),(0,m.jsxs)(`button`,{className:(0,p.cn)(`flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4`,n===`filters`&&`bg-card`),onClick:()=>r(n===`filters`?null:`filters`),children:[(0,m.jsx)(h.ListFilterIcon,{size:18}),(0,m.jsx)(`span`,{className:`text-nowrap [writing-mode:vertical-lr]`,children:`Filters`})]}),(0,m.jsx)(c.t,{})]})]})})},X=({title:e,isFetching:t=!1,data:n,columns:r,totalRows:i,leftPinnedColumns:a,rightPinnedColumns:o,keyOfClickRow:s,onClickRow:c,fetchMoreData:l,children:u})=>{let[d,f]=(0,g.useState)({}),[p,h]=(0,g.useState)({right:o,left:a}),[_,y]=(0,g.useState)({}),b=(0,v.useReactTable)({data:n,columns:r,state:{rowSelection:d,columnPinning:p,columnVisibility:_},defaultColumn:{minSize:40,size:150,maxSize:800},columnResizeMode:`onChange`,columnResizeDirection:`ltr`,enableColumnPinning:!0,enableRowSelection:!0,enableColumnResizing:!0,enableMultiRowSelection:!0,getCoreRowModel:(0,v.getCoreRowModel)(),onRowSelectionChange:f,onColumnPinningChange:h,onColumnVisibilityChange:y}),x=(0,g.useMemo)(()=>{let{rows:e}=b.getRowModel();return e},[b.getRowModel().rows,b.getState().columnPinning]),S=(0,g.useMemo)(()=>!t&&x.length===0,[x,t]),C=(0,g.useMemo)(()=>({title:e,table:b,data:n,isEmpty:S,isFetching:t,totalRows:i,fetchMoreData:l,rowSelection:b.getState().rowSelection,columnPinning:b.getState().columnPinning}),[e,b,n,S,t,i,l,b.getState().columnVisibility,b.getState().rowSelection,b.getState().columnPinning]),w=(0,g.useMemo)(()=>({keyOfClickRow:s,onClickRow:c}),[s,c]);return(0,m.jsx)(P.Provider,{value:C,children:(0,m.jsx)(M.Provider,{value:w,children:u})})},Z=({className:e,...t})=>(0,m.jsxs)(`div`,{className:`relative`,children:[(0,m.jsx)(f.t,{...t,size:`lg`,type:`search`,placeholder:`Search records...`,className:`ps-9 pe-9`}),(0,m.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50`,children:(0,m.jsx)(h.SearchIcon,{size:16})}),(0,m.jsx)(`button`,{className:`absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,"aria-label":`Submit search`,type:`submit`,children:(0,m.jsx)(h.ArrowRightIcon,{size:16,"aria-hidden":`true`})})]}),Q=({children:e,onClick:t})=>(0,m.jsx)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive [&_svg]:size-3.5`,onClick:t,children:e}),re=({onCreate:e,onDownload:t,onRefresh:n})=>(0,m.jsxs)(`div`,{className:`flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none`,children:[(0,m.jsx)(Q,{onClick:t=>{e?.(),t.stopPropagation(),t.preventDefault()},children:(0,m.jsx)(h.CirclePlus,{})}),(0,m.jsx)(Q,{onClick:e=>{n?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.RefreshCwIcon,{})}),(0,m.jsx)(Q,{onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.DownloadIcon,{})})]}),$=({children:e})=>{let{title:t}=F();return(0,m.jsxs)(`div`,{"data-slot":`table-tooltip`,className:`relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm`,children:[(0,m.jsx)(`h3`,{className:`font-semibold text-base text-text-positive`,children:t}),(0,m.jsx)(`div`,{className:`flex w-full flex-1 justify-between`,children:e})]})};$.displayName=`TableTooltip`,exports.UITableBadgeDisplay=x,exports.UITableBooleanDisplay=S,exports.UITableContainer=q,exports.UITableDateDisplay=C,exports.UITableDescriptionDisplay=w,exports.UITableFilter=Y,exports.UITableFooter=K,exports.UITableMoreButton=T,exports.UITableNameDisplay=E,exports.UITablePhoneNumberDisplay=D,exports.UITableProvider=X,exports.UITableRemoveButton=O,exports.UITableStatisticDisplay=A,exports.UITableTooltip=$,exports.UITableTooltipActions=re,exports.UITableTooltipFilter=Z,exports.UITableUserDataDisplay=j,exports.UITableWrapper=L;
|
|
1
|
+
const e=require(`../../chunk-Bmb41Sf3.cjs`);require(`../../button.variants-Bo2vzQp5.cjs`);const t=require(`../../button-BLYTfCyl.cjs`),n=require(`../../flex-DGPQRbN6.cjs`),r=require(`../../paragraph-B9_-MKH8.cjs`),i=require(`../../date-CuRT4hmU.cjs`),a=require(`../../badge-CsDmp3ys.cjs`),o=require(`../../tooltip-DMFoP_sB.cjs`),s=require(`../../avatar-dAu1c0bC.cjs`),c=require(`../../separator-DSZyCT2g.cjs`),l=require(`../../dropdown-menu-5Zyw5t_J.cjs`),u=require(`../../checkbox-DDuYFG0R.cjs`),d=require(`../../resizable-BS63Xwia.cjs`),f=require(`../../input-qnlHzDDm.cjs`);let p=require(`@customafk/react-toolkit/utils`),m=require(`react/jsx-runtime`),h=require(`lucide-react`),g=require(`react`),_=require(`@customafk/react-toolkit/color-hash`),v=require(`@tanstack/react-table`),y=require(`@tanstack/react-virtual`);const b=()=>(0,m.jsxs)(`div`,{className:`flex gap-0 text-text-positive-weak`,children:[(0,m.jsx)(h.MinusIcon,{size:16}),(0,m.jsx)(h.MinusIcon,{size:16})]}),x=({label:e,onClick:t,onRemove:n})=>e?n?(0,m.jsxs)(`div`,{className:`flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs`,onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:[e,(0,m.jsx)(`button`,{className:`cursor-pointer text-text-positive-weak hover:text-text-positive-strong`,onClick:e=>{n?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.XIcon,{size:12})})]}):(0,m.jsx)(`button`,{className:`w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs`,onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:e}):(0,m.jsx)(b,{}),S=({value:e})=>e==null?(0,m.jsx)(b,{}):e===!1?(0,m.jsx)(`div`,{className:`text-danger-strong`,children:(0,m.jsx)(h.XIcon,{})}):(0,m.jsx)(`div`,{className:`text-success-strong`,children:(0,m.jsx)(h.CheckIcon,{})}),C=({date:e})=>e==null?(0,m.jsx)(b,{}):(0,m.jsx)(o.r,{children:(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(a.t,{className:`h-fit`,children:(0,m.jsx)(i.t,{date:e,format:`medium`,className:`font-normal text-white`})})}),(0,m.jsx)(o.n,{className:`rounded`,children:(0,m.jsx)(i.t,{date:e,format:`full`,showTime:!0,className:`font-medium text-text-negative text-xs`})})]})}),w=({content:e})=>e==null?(0,m.jsx)(b,{}):(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(`div`,{className:`line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak`,children:e})}),(0,m.jsx)(o.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,m.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,m.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,m.jsxs)(`p`,{className:`w-full text-end`,children:[e.toString().length,` chars`]})]})})]}),T=({items:e=[]})=>(0,m.jsxs)(l.t,{children:[(0,m.jsx)(l.h,{asChild:!0,children:(0,m.jsx)(t.t,{size:`sm`,variant:`ghost`,color:`secondary`,className:`size-9 rounded-full`,children:(0,m.jsx)(h.MoreVerticalIcon,{})})}),(0,m.jsx)(l.r,{children:(0,m.jsx)(l.i,{children:e.map(e=>(0,m.jsx)(l.a,{className:`px-3`,onSelect:()=>e.onClick(e.id),children:e.label},e.id))})})]}),E=({name:e})=>e?(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{children:(0,m.jsx)(r.t,{variant:`sm`,className:`line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm`,children:e})}),(0,m.jsx)(o.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,m.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,m.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,m.jsxs)(`p`,{className:`w-full text-end`,children:[e.length,` chars`]})]})})]}):(0,m.jsx)(b,{}),D=({href:e,label:t})=>(0,m.jsxs)(`a`,{href:e,target:`_blank`,className:`inline-flex items-center gap-1 truncate text-primary text-sm underline`,rel:`noopener noreferrer`,children:[(0,m.jsx)(`span`,{children:t||e}),(0,m.jsx)(h.ExternalLinkIcon,{size:14})]}),O=({value:e})=>(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{asChild:!0,children:(0,m.jsx)(`p`,{className:`font-number text-secondary-foreground text-sm tabular-nums`,children:e.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,m.jsx)(o.n,{align:`start`,children:(0,m.jsx)(`p`,{className:`tabular-nums`,children:e.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),k=({title:e,onClick:n})=>(0,m.jsxs)(o.t,{children:[(0,m.jsx)(o.i,{children:(0,m.jsx)(t.t,{type:`button`,variant:`ghost`,color:`danger`,size:`icon`,onClick:(0,g.useCallback)(async e=>{e.preventDefault(),e.stopPropagation(),await n?.()},[n]),children:(0,m.jsx)(h.Trash2Icon,{})})}),(0,m.jsx)(o.n,{children:(0,m.jsx)(`p`,{children:e||`Remove item from list table`})})]}),A=(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}},j=(0,g.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:r,suffix:i,precision:a,roundingMode:o=`round`,showTrailingZeros:s=!1,size:c=`lg`,value:l=0})=>{let u=(0,g.useMemo)(()=>{let e={};return typeof a==`number`&&a>=0&&s&&(e.minimumFractionDigits=a),e.maximumFractionDigits=a,e},[a,s]),d=(0,g.useCallback)(e=>{let t=e;return typeof a==`number`&&a>=0&&(t=A(e,a,o)),t.toLocaleString(`en-US`,u)},[o,u,a]),f=(0,g.useMemo)(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:d(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`:d(t)}return`N/A`},[l,d]),h=(0,g.useMemo)(()=>e===`.`&&t===`,`?f:f.replace(/,/g,t).replace(/\./g,e),[f,e,t]);return h===`0`||h===`N/A`||!h?(0,m.jsx)(b,{}):(0,m.jsxs)(n.t,{padding:`none`,className:(0,p.cn)(`font-number text-lg text-secondary-foreground tabular-nums`,c===`xs`&&`text-xs`,c===`sm`&&`text-sm`,c===`md`&&`text-base`,c===`lg`&&`text-lg`,c===`xl`&&`text-xl`),children:[r,(0,m.jsx)(`p`,{children:h}),i]})});j.displayName=`UITableStatisticDisplay`;const ee=({uuid:e,username:t,email:i})=>(0,m.jsxs)(n.t,{wrap:!1,gap:`sm`,padding:`none`,children:[!e&&(0,m.jsx)(s.t,{className:`size-10 shadow-card`,children:(0,m.jsx)(s.n,{className:`bg-muted-weak`,children:(0,m.jsx)(h.UserRoundIcon,{size:28,className:`text-text-negative`})})}),e&&(0,m.jsx)(s.t,{className:`size-10 shadow-card`,children:(0,m.jsx)(s.n,{style:{backgroundColor:_.colorHashLight.hex(e)},children:(0,m.jsx)(h.UserRoundIcon,{size:28,className:`text-white`})})}),(0,m.jsxs)(n.t,{vertical:!0,padding:`none`,gap:`none`,align:`start`,children:[(0,m.jsx)(r.t,{className:`font-medium text-sm text-text-positive-weak`,children:t??`Unknown User`}),(0,m.jsx)(r.t,{variant:`sm`,className:`mt-0! text-text-positive-weak text-xs`,children:i})]})]}),M=(0,g.createContext)(null),N=()=>{let e=(0,g.use)(M);if(!e)throw Error(`useUITableClickRowContext must be used within a TableClickRowProvider`);return e},P=(0,g.createContext)(null),F=()=>{let e=(0,g.use)(P);if(!e)throw Error(`useTableContext must be used within a TableProvider`);return e},te=60,ne=20,re=20,I=e=>{let t=e.getIsPinned();return{zIndex:t?20:void 0,left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0}},L=({className:e,children:t,...n})=>(0,m.jsx)(`div`,{"data-slot":`table-wrapper`,className:`relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2 py-2.5 text-sm`,...n,children:t}),R=(0,g.memo)(({children:e})=>(0,m.jsx)(`thead`,{"data-slot":`table-header`,style:{zIndex:20},className:(0,p.cn)(`sticky top-0 grid bg-muted-bg-subtle text-[13px] text-text-positive-weak`,`[&_tr:not(:last-child)_td]:border-b`,`[&_th]:flex`,`[&_th]:h-9`,`[&_th]:select-none`,`[&_th]:items-center`,`[&_th]:whitespace-nowrap`,`[&_th]:border-border`,`[&_th]:font-medium`,`[&_th]:text-left`,`[&_th]:align-middle`,`[&_th]:last:border-r-0`,`[&_th]:first:border-l-0`,`[&_th]:data-[pinned=right]:border-l`,`[&_th]:data-[pinned=right]:border-r-0`,`[&_th]:data-[pinned=left]:border-r`,`[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle`),children:e}));R.displayName=`TableHeader`;const z=(0,g.memo)(({children:e})=>(0,m.jsx)(`tr`,{"data-slot":`table-header-row`,className:`flex w-full border-border border-b shadow`,children:e}));z.displayName=`TableHeaderRow`;const B=({header:e,isPinned:t,isResizing:n,isAllRowsSelected:r,children:i,...a})=>{let o=I(e.column),s=`calc(var(--header-${e.id}-size) * 1px)`;return e.id===`select`?(0,m.jsx)(`th`,{"data-slot":`table-header-cell`,style:{...o,width:60},className:(0,p.cn)(t?`sticky`:`relative`),...a,children:(0,m.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:(0,m.jsx)(u.t,{"aria-label":`Select All Rows`,checked:r,onCheckedChange:t=>{e.getContext().table.toggleAllRowsSelected(!!t)}})})}):(0,m.jsxs)(`th`,{"data-slot":`table-header-cell`,"data-pinned":t,style:{...o,width:s},colSpan:e.colSpan,className:(0,p.cn)(`group relative`,t?`sticky`:`relative`),...a,children:[(0,m.jsx)(`div`,{className:`absolute inset-0 gap-1 truncate`,children:(0,m.jsx)(`div`,{className:`flex h-full flex-1 cursor-pointer select-none items-center justify-between`,children:(0,m.jsx)(`div`,{className:`flex size-full flex-1 items-center truncate pl-4`,children:(0,v.flexRender)(e.column.columnDef.header,e.getContext())})})}),![`select`,`actions`].includes(e.id)&&(0,m.jsx)(V,{isPinned:t,isVisible:e.column.getIsVisible(),className:`invisible absolute right-2 z-10 group-hover:visible`,onLeftPin:e.column.pin,onRightPin:e.column.pin,onUnpin:e.column.pin,onToggleVisibilityHandler:e.column.toggleVisibility}),(0,m.jsx)(g.Activity,{mode:t?`hidden`:`visible`,children:(0,m.jsx)(`div`,{onDoubleClick:e.column.resetSize,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:(0,p.cn)(`absolute inset-y-0 -right-0.5 w-1 cursor-e-resize bg-transparent hover:bg-border`,n&&`bg-border`)})})]})},V=({isPinned:e,className:t,onLeftPin:n,onRightPin:r,onUnpin:i,onToggleVisibilityHandler:a})=>{let o=(0,g.useCallback)(()=>{n(`left`)},[n]),s=(0,g.useCallback)(()=>{r(`right`)},[r]),c=(0,g.useCallback)(()=>{i(!1)},[i]);return(0,m.jsxs)(l.t,{children:[(0,m.jsx)(l.h,{asChild:!0,children:(0,m.jsx)(`button`,{className:(0,p.cn)(`cursor-pointer rounded-full p-0.5 text-text-positive-weak hover:bg-muted-muted hover:text-text-positive [&>svg]:size-4`,t),children:(0,m.jsx)(h.EllipsisVerticalIcon,{})})}),(0,m.jsxs)(l.r,{align:`end`,className:`w-64 p-4`,children:[(0,m.jsxs)(l.i,{className:`*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2`,children:[(0,m.jsx)(g.Activity,{mode:e?`visible`:`hidden`,children:(0,m.jsxs)(l.a,{onClick:c,children:[!!e&&`Unpin`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.PinOffIcon,{className:`size-4`})})]})}),(0,m.jsxs)(g.Activity,{mode:e?`hidden`:`visible`,children:[(0,m.jsxs)(l.a,{onClick:o,children:[e?`Unpin`:`Pin to Left`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.MoveLeftIcon,{className:`size-4`})})]}),(0,m.jsxs)(l.a,{onClick:s,children:[e?`Unpin`:`Pin to Right`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.MoveRightIcon,{className:`size-4`})})]})]})]}),(0,m.jsx)(l.u,{}),(0,m.jsx)(l.i,{className:`*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2`,children:(0,m.jsxs)(l.a,{onClick:()=>a(!1),children:[`Hide Field`,(0,m.jsx)(l.d,{children:(0,m.jsx)(h.EyeOffIcon,{className:`size-4`})})]})})]})]})},H=({height:e,children:t,...n})=>(0,m.jsx)(`tbody`,{"data-slot":`table-body`,style:{height:`${e}px`},className:(0,p.cn)(`relative grid w-full bg-card`,`[&_tr]:absolute [&_tr]:flex [&_tr]:w-full [&_tr]:cursor-pointer [&_tr]:border-b [&_tr]:border-b-border [&_tr]:focus:outline-none`,`[&_td]:z-10`,`[&_td]:flex`,`[&_td]:overflow-hidden`,`[&_td]:whitespace-nowrap`,`[&_td]:px-4`,`[&_td]:py-2.5`,`[&_td]:align-middle`,`[&_td]:border-border`,`[&_td]:data-[pinned=right]:border-l`,`[&_td]:data-[pinned=left]:border-r`,`[&_td:not([data-pinned=false])]:bg-card`,`[&_td:not([data-pinned=false])]:shadow-xs`),...n,children:t}),U=(0,g.memo)(({children:e,keyOfClickRow:t,row:n,virtualRow:r,rowVirtualizer:i,onClickRow:a,className:o,...s})=>{let{columnPinning:c}=F(),l=(0,g.useCallback)(e=>{let i=t?n.original?.[t]:void 0;typeof i==`string`||typeof i==`number`?a?.(r.index,i):a?.(r.index),e.preventDefault(),e.stopPropagation()},[t,a,n.original,r.index]);return(0,m.jsx)(`tr`,{"data-slot":`table-row`,"data-index":r.index,ref:e=>i.measureElement(e),style:{transform:`translateY(${r.start}px)`},className:(0,p.cn)(`group`,o),onClick:l,...s,children:n.getVisibleCells().map(e=>(0,m.jsx)(W,{cell:e,className:`group-hover:bg-muted-bg-subtle!`},e.id))})});U.displayName=`TableRow`;const W=(0,g.memo)(({cell:e,children:t,className:n,...r})=>{let{rowSelection:i}=F(),a=e.column.getIsPinned(),o=I(e.column),s=`calc(var(--col-${e.column.id}-size) * 1px)`,c=e.column.columnDef.meta?.position??`start`;return e.column.id===`select`?(0,m.jsx)(`td`,{"data-slot":`table-cell`,style:{...o,width:60},className:(0,p.cn)(`border-none! bg-transparent! shadow-none!`,a?`sticky`:`relative`,n),...r,children:(0,m.jsx)(`div`,{"data-slot":`table-cell-inner`,className:`inline-flex w-full items-center justify-center bg-transparent text-center align-middle`,children:(0,m.jsx)(u.t,{"aria-label":`Select Row`,checked:e.row.getIsSelected(),onCheckedChange:t=>{e.row.toggleSelected(!!t)}})})}):(0,m.jsx)(`td`,{"data-slot":`table-cell`,"data-pinned":a,style:{...o,width:s},className:(0,p.cn)(a&&e.column.getPinnedIndex()===0&&`shadow!`,a&&`sticky`,!a&&`relative`,n),...r,children:(0,m.jsx)(`div`,{"data-slot":`table-cell-inner`,className:(0,p.cn)(`inline-flex w-full items-center bg-transparent text-center align-middle`,c===`start`&&`justify-start`,c===`center`&&`justify-center`,c===`end`&&`justify-end`),children:(0,v.flexRender)(e.column.columnDef.cell,e.getContext())})})});W.displayName=`TableCell`;const G=(0,g.memo)(()=>(0,m.jsx)(`div`,{className:`sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100`,children:(0,m.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,m.jsx)(h.BoxIcon,{strokeWidth:1,size:48}),(0,m.jsx)(`p`,{children:`No data available`})]})}));G.displayName=`EmptyDisplay`;const K=(0,g.memo)(()=>(0,m.jsx)(`div`,{className:`absolute top-0 z-30 flex size-full items-center justify-center bg-black/10`,children:(0,m.jsx)(h.LoaderIcon,{className:`animate-spin text-text-positive`})}));K.displayName=`RefetchingDisplay`;const q=({children:e})=>(0,m.jsx)(`tfoot`,{"data-slot":`table-footer`,className:`flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0`,children:e}),J=({children:e})=>{let{table:t,isEmpty:n,isRefetching:r,isFetching:i,data:a,totalRows:o,fetchMoreData:s}=F(),{keyOfClickRow:c,onClickRow:l}=N(),u=(0,g.useRef)(null),f=(0,g.useMemo)(()=>{let e=t.getFlatHeaders(),n={};return e.forEach(e=>{n[`--header-${e.id}-size`]=e.getSize()||0,n[`--col-${e.column.id}-size`]=e.column.getSize()||0}),n},[t.getState().columnSizingInfo,t.getState().columnSizing]),h=(0,g.useCallback)(async e=>{if(!e)return null;let{scrollHeight:t,scrollTop:n,clientHeight:r}=e;t-n-r<500&&!i&&o&&a.length<o&&s?.()},[i,a.length,o,s]);(0,g.useEffect)(()=>{h(u.current)},[h]);let{rows:_}=t.getRowModel(),v=(0,y.useVirtualizer)({count:_.length,estimateSize:()=>40,getScrollElement:()=>u.current,measureElement:typeof window<`u`&&navigator.userAgent.indexOf(`Firefox`)===-1?e=>e?.getBoundingClientRect().height:void 0,overscan:2});return(0,m.jsxs)(d.r,{direction:`horizontal`,style:{direction:t.options.columnResizeDirection},className:(0,p.cn)(`relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border bg-slate-50 p-0 text-sm`,!e&&`border-r border-r-border`),children:[(0,m.jsxs)(d.n,{className:`relative overflow-auto`,children:[(0,m.jsxs)(`div`,{ref:u,className:`relative size-full overflow-auto border-b border-b-border border-l border-l-border`,onScroll:e=>h(e.currentTarget),children:[(0,m.jsxs)(`table`,{"data-slot":`table`,style:{...f,width:t.getTotalSize()},className:`grid w-full max-w-full caption-bottom border-collapse border-spacing-0 flex-col content-start bg-card text-sm tabular-nums [&_tfoot_td]:border-t`,children:[(0,m.jsx)(R,{children:t.getHeaderGroups().map(e=>(0,m.jsx)(z,{children:e.headers.map(e=>(0,m.jsx)(B,{header:e,isPinned:e.column.getIsPinned(),isResizing:e.column.getIsResizing(),isAllRowsSelected:t.getIsAllRowsSelected()},e.id))},e.id))}),(0,m.jsx)(H,{"data-slot":`table-body`,height:v.getTotalSize(),children:v.getVirtualItems().map(e=>{let t=_[e.index];return(0,m.jsx)(U,{"data-index":e.index,keyOfClickRow:c,row:t,virtualRow:e,rowVirtualizer:v,onClickRow:l},t.id)})})]}),n&&(0,m.jsx)(G,{})]}),r&&(0,m.jsx)(K,{})]}),!!e&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(d.t,{}),e]})]})},Y=({checked:e,title:t,onCheckedChange:n})=>(0,m.jsxs)(`div`,{className:`flex h-fit items-center gap-2`,children:[(0,m.jsx)(u.t,{checked:e,onCheckedChange:n}),(0,m.jsx)(`p`,{className:`text-sm`,children:t})]}),X=()=>{let{table:e}=F(),[n,r]=(0,g.useState)(null);return(0,m.jsx)(d.n,{defaultSize:25,className:(0,p.cn)(`bg-card`,n===null?`max-w-8!`:`min-w-64`),children:(0,m.jsxs)(`div`,{className:`relative z-20 flex size-full bg-muted-bg-subtle`,children:[(0,m.jsxs)(`div`,{className:`flex-1`,children:[(0,m.jsx)(g.Activity,{mode:n===`columns`?`visible`:`hidden`,children:(0,m.jsxs)(`div`,{className:`flex size-full flex-col gap-2 p-4`,children:[(0,m.jsx)(`p`,{className:`px-2 font-medium`,children:`Columns Visibility`}),(0,m.jsx)(c.t,{}),(0,m.jsx)(`div`,{className:`flex flex-col gap-4 pt-4`,children:e.getAllColumns().map(e=>[`select`,`actions`].includes(e.id)?null:(0,m.jsx)(Y,{checked:e.getIsVisible(),title:String(e.columnDef.header),onCheckedChange:t=>e.toggleVisibility(!!t)},e.id))})]})}),(0,m.jsx)(g.Activity,{mode:n===`filters`?`visible`:`hidden`,children:(0,m.jsx)(`div`,{className:`flex size-full flex-col p-2`,children:(0,m.jsxs)(t.t,{variant:`outline`,color:`muted`,children:[(0,m.jsx)(h.ListFilterPlus,{}),`Add Filter`]})})})]}),(0,m.jsxs)(`div`,{className:`flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm`,children:[(0,m.jsxs)(`button`,{className:(0,p.cn)(`flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4`,n===`columns`&&`bg-card`),onClick:()=>r(n===`columns`?null:`columns`),children:[(0,m.jsx)(h.Columns4Icon,{size:18}),(0,m.jsx)(`span`,{className:`text-nowrap [writing-mode:vertical-lr]`,children:`Columns`})]}),(0,m.jsx)(c.t,{}),(0,m.jsxs)(`button`,{className:(0,p.cn)(`flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4`,n===`filters`&&`bg-card`),onClick:()=>r(n===`filters`?null:`filters`),children:[(0,m.jsx)(h.ListFilterIcon,{size:18}),(0,m.jsx)(`span`,{className:`text-nowrap [writing-mode:vertical-lr]`,children:`Filters`})]}),(0,m.jsx)(c.t,{})]})]})})},Z=({title:e,isFetching:t=!1,isRefetching:n=!1,data:r,columns:i,totalRows:a,leftPinnedColumns:o,rightPinnedColumns:s,keyOfClickRow:c,onClickRow:l,fetchMoreData:u,children:d})=>{let[f,p]=(0,g.useState)({}),[h,_]=(0,g.useState)({right:s,left:o}),[y,b]=(0,g.useState)({}),x=(0,v.useReactTable)({data:r,columns:i,state:{rowSelection:f,columnPinning:h,columnVisibility:y},defaultColumn:{minSize:40,size:150,maxSize:800},columnResizeMode:`onChange`,columnResizeDirection:`ltr`,enableColumnPinning:!0,enableRowSelection:!0,enableColumnResizing:!0,enableMultiRowSelection:!0,getCoreRowModel:(0,v.getCoreRowModel)(),onRowSelectionChange:p,onColumnPinningChange:_,onColumnVisibilityChange:b}),S=(0,g.useMemo)(()=>{let{rows:e}=x.getRowModel();return e},[x.getRowModel().rows,x.getState().columnPinning]),C=(0,g.useMemo)(()=>!t&&S.length===0,[S,t]),w=(0,g.useMemo)(()=>({title:e,table:x,data:r,isEmpty:C,isFetching:t,isRefetching:n,totalRows:a,fetchMoreData:u,rowSelection:x.getState().rowSelection,columnPinning:x.getState().columnPinning}),[e,x,r,C,n,t,a,u,x.getState().columnVisibility,x.getState().rowSelection,x.getState().columnPinning]),T=(0,g.useMemo)(()=>({keyOfClickRow:c,onClickRow:l}),[c,l]);return(0,m.jsx)(P.Provider,{value:w,children:(0,m.jsx)(M.Provider,{value:T,children:d})})},ie=({className:e,...t})=>(0,m.jsxs)(`div`,{className:`relative`,children:[(0,m.jsx)(f.t,{...t,size:`lg`,type:`search`,placeholder:`Search records...`,className:`ps-9 pe-9`}),(0,m.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50`,children:(0,m.jsx)(h.SearchIcon,{size:16})}),(0,m.jsx)(`button`,{className:`absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,"aria-label":`Submit search`,type:`submit`,children:(0,m.jsx)(h.ArrowRightIcon,{size:16,"aria-hidden":`true`})})]}),Q=({children:e,onClick:t})=>(0,m.jsx)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive [&_svg]:size-3.5`,onClick:t,children:e}),ae=({onCreate:e,onDownload:t,onRefresh:n})=>(0,m.jsxs)(`div`,{className:`flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none`,children:[(0,m.jsx)(Q,{onClick:t=>{e?.(),t.stopPropagation(),t.preventDefault()},children:(0,m.jsx)(h.CirclePlus,{})}),(0,m.jsx)(Q,{onClick:e=>{n?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.RefreshCwIcon,{})}),(0,m.jsx)(Q,{onClick:e=>{t?.(),e.stopPropagation(),e.preventDefault()},children:(0,m.jsx)(h.DownloadIcon,{})})]}),$=({children:e})=>{let{title:t}=F();return(0,m.jsxs)(`div`,{"data-slot":`table-tooltip`,className:`relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm`,children:[(0,m.jsx)(`h3`,{className:`font-semibold text-base text-text-positive`,children:t}),(0,m.jsx)(`div`,{className:`flex w-full flex-1 justify-between`,children:e})]})};$.displayName=`TableTooltip`,exports.UITableBadgeDisplay=x,exports.UITableBooleanDisplay=S,exports.UITableContainer=J,exports.UITableDateDisplay=C,exports.UITableDescriptionDisplay=w,exports.UITableFilter=X,exports.UITableFooter=q,exports.UITableMoreButton=T,exports.UITableNameDisplay=E,exports.UITablePermalink=D,exports.UITablePhoneNumberDisplay=O,exports.UITableProvider=Z,exports.UITableRemoveButton=k,exports.UITableStatisticDisplay=j,exports.UITableTooltip=$,exports.UITableTooltipActions=ae,exports.UITableTooltipFilter=ie,exports.UITableUserDataDisplay=ee,exports.UITableWrapper=L;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["UITableEmpty: React.FC","MinusIcon","UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}>","XIcon","UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}>","XIcon","CheckIcon","UITableDateDisplay: React.FC<Props>","TooltipProvider","Tooltip","TooltipTrigger","Badge","DateDisplay","TooltipContent","UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","TooltipContent","UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}>","DropdownMenu","DropdownMenuTrigger","Button","MoreVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","UITableNameDisplay: React.FC<NameDisplayProps>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>>","Tooltip","TooltipTrigger","TooltipContent","UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}>","Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent","options: Intl.NumberFormatOptions","Flex","UITableUserDataDisplay: React.FC<Props>","Flex","Avatar","AvatarFallback","UserRoundIcon","colorHashLight","Paragraph","UITableWrapper: React.FC<React.PropsWithChildren<React.ComponentProps<'div'>>>","UITableHeader: React.FC<React.PropsWithChildren>","UITableHeaderRow: React.FC<React.PropsWithChildren>","UITableHeaderCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'th'> & {\n header: Header<unknown, unknown>;\n isPinned: ColumnPinningPosition;\n isResizing: boolean;\n isAllRowsSelected: boolean;\n }\n >\n>","Checkbox","Activity","UITableHeaderCellOption: React.FC<{\n isPinned: ColumnPinningPosition;\n className?: string;\n isVisible?: boolean;\n onLeftPin: (pos: 'left' | 'right' | false) => void;\n onRightPin: (pos: 'left' | 'right' | false) => void;\n onUnpin: (pos: 'left' | 'right' | false) => void;\n onToggleVisibilityHandler: (visible: AnyEntity) => void;\n}>","DropdownMenu","DropdownMenuTrigger","EllipsisVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuShortcut","PinOffIcon","MoveLeftIcon","MoveRightIcon","DropdownMenuSeparator","EyeOffIcon","UITableBody: React.FC<React.PropsWithChildren<React.ComponentProps<'tbody'> & { height: number }>>","UITableRow: React.FC<\n React.ComponentProps<'tr'> & {\n keyOfClickRow?: string;\n row: Row<any>;\n virtualRow: VirtualItem;\n rowVirtualizer: Virtualizer<HTMLDivElement, HTMLTableRowElement>;\n\n onClickRow?: (rowIndex: number, rowId?: AnyEntity) => void;\n }\n>","UITableCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'td'> & {\n cell: Cell<unknown, unknown>;\n }\n >\n>","EmptyDisplay: React.FC","BoxIcon","UITableFooter: React.FC<React.PropsWithChildren>","UITableContainer: React.FC<React.PropsWithChildren>","colSizes: { [key: string]: number | undefined }","ResizablePanelGroup","ResizablePanel","ResizableHandle","ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}>","Checkbox","ResizablePanel","Activity","Separator","Button","ListFilterPlus","Columns4Icon","ListFilterIcon","rows","UITableTooltipFilter: React.FC<React.ComponentProps<typeof Input>>","Input","SearchIcon","ArrowRightIcon","ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>>","UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}>","CirclePlus","RefreshCwIcon","DownloadIcon","UITableTooltip: React.FC<React.PropsWithChildren>"],"sources":["../../../packages/components/features/tables/components/atoms/empty.tsx","../../../packages/components/features/tables/components/atoms/badge-display.tsx","../../../packages/components/features/tables/components/atoms/boolean-display.tsx","../../../packages/components/features/tables/components/atoms/date-display.tsx","../../../packages/components/features/tables/components/atoms/description-display.tsx","../../../packages/components/features/tables/components/atoms/more-button.tsx","../../../packages/components/features/tables/components/atoms/name-display.tsx","../../../packages/components/features/tables/components/atoms/phone-number.tsx","../../../packages/components/features/tables/components/atoms/remove-button.tsx","../../../packages/components/features/tables/components/atoms/statistic.tsx","../../../packages/components/features/tables/components/atoms/user.tsx","../../../packages/components/features/tables/hooks/use-click-row.ts","../../../packages/components/features/tables/hooks/use-table-context.ts","../../../packages/components/features/tables/components/table.tsx","../../../packages/components/features/tables/components/table/filter.tsx","../../../packages/components/features/tables/components/table/provider.tsx","../../../packages/components/features/tables/components/table/tooltip.tsx"],"sourcesContent":["import { MinusIcon } from 'lucide-react';\n\nexport const UITableEmpty: React.FC = () => {\n return (\n <div className=\"flex gap-0 text-text-positive-weak\">\n <MinusIcon size={16} />\n <MinusIcon size={16} />\n </div>\n );\n};\n","import { XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}> = ({ label, onClick, onRemove }) => {\n if (!label) return <UITableEmpty />;\n if (onRemove) {\n return (\n <div\n className=\"flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n <button\n className=\"cursor-pointer text-text-positive-weak hover:text-text-positive-strong\"\n onClick={e => {\n onRemove?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <XIcon size={12} />\n </button>\n </div>\n );\n }\n return (\n <button\n className=\"w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n </button>\n );\n};\n","import { CheckIcon, XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}> = ({ value }) => {\n if (value === null || value === undefined) return <UITableEmpty />;\n if (value === false) {\n return (\n <div className=\"text-danger-strong\">\n <XIcon />\n </div>\n );\n }\n return (\n <div className=\"text-success-strong\">\n <CheckIcon />\n </div>\n );\n};\n","import { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from '@/components/data-display/date';\nimport { UITableEmpty } from './empty';\n\ntype Props = {\n date: Date | string | number | null | undefined;\n};\nexport const UITableDateDisplay: React.FC<Props> = ({ date }) => {\n if (typeof date === 'undefined' || date === null) return <UITableEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"font-normal text-white\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"font-medium text-xs\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content === undefined || content === null) {\n return <UITableEmpty />;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak\">{content}</div>\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\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { MoreVerticalIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nexport const UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}> = ({ items = [] }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" color=\"secondary\" className=\"size-9 rounded-full\">\n <MoreVerticalIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {items.map(item => (\n <DropdownMenuItem key={item.id} className=\"px-3\" onSelect={() => item.onClick(item.id)}>\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Paragraph } from '@/components/typography/paragraph';\nimport { UITableEmpty } from './empty';\n\ntype NameDisplayProps = {\n name?: string | null | undefined;\n};\n\nexport const UITableNameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n if (!name) return <UITableEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm\">\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\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p className=\"font-number text-secondary-foreground text-sm tabular-nums\">{value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}</p>\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","import { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\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\ntype Props = {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number; // Số chữ số thập phân\n roundingMode?: 'round' | 'floor' | 'ceil'; // Kiểu làm tròn\n showTrailingZeros?: boolean; // Hiển thị số 0 cuối\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; // Kích thước của component\n value: number | string | null | undefined;\n};\n\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && 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\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number text-lg text-secondary-foreground tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n","import { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Paragraph } from '@/components/typography/paragraph';\n\ntype Props = {\n uuid?: string | null | undefined;\n username?: string | null | undefined;\n email?: string | null | undefined;\n};\n\nexport const UITableUserDataDisplay: React.FC<Props> = ({ uuid, username, email }) => {\n return (\n <Flex wrap={false} gap=\"sm\" padding=\"none\">\n {!uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback className=\"bg-muted-weak\">\n <UserRoundIcon size={28} className=\"text-text-negative\" />\n </AvatarFallback>\n </Avatar>\n )}\n {uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n )}\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"font-medium text-sm text-text-positive-weak\">{username ?? 'Unknown User'}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-text-positive-weak text-xs\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n","import { createContext, use } from 'react';\n\nimport type { RowData } from '@tanstack/react-table';\n\nimport type { TTableClickRow } from '../types';\n\nexport const TableClickRowContext = createContext<TTableClickRow<RowData> | null>(null);\n\nexport const useUITableClickRowContext = () => {\n const context = use(TableClickRowContext);\n if (!context) {\n throw new Error('useUITableClickRowContext must be used within a TableClickRowProvider');\n }\n return context;\n};\n","import { createContext, use } from 'react';\n\nimport type { RowData } from '@tanstack/react-table';\n\nimport type { TTableContext } from '../types';\n\nexport const TableContext = createContext<TTableContext<RowData> | null>(null);\n\nexport const useUITableContext = <TData extends RowData>() => {\n const context = use(TableContext) as TTableContext<TData>;\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context;\n};\n","'use client';\nimport { Activity, memo, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { type Cell, type Column, type ColumnPinningPosition, flexRender, type Header, type Row } from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualItem, type Virtualizer } from '@tanstack/react-virtual';\n\nimport { BoxIcon, EllipsisVerticalIcon, EyeOffIcon, MoveLeftIcon, MoveRightIcon, PinOffIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';\n\nimport type { AnyEntity } from '@/types';\nimport { useUITableClickRowContext } from '../hooks/use-click-row';\nimport { useUITableContext } from '../hooks/use-table-context';\n\nconst SELECT_WIDTH = 60;\nconst TABLE_HEADER_Z_INDEX = 20;\nconst PINNED_COLUMN_Z_INDEX = 20;\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<unknown>): React.CSSProperties => {\n const isPinned = column.getIsPinned();\n return {\n zIndex: isPinned ? PINNED_COLUMN_Z_INDEX : undefined,\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n // position: isPinned ? 'sticky' : 'relative',\n };\n};\n\nexport const UITableWrapper: React.FC<React.PropsWithChildren<React.ComponentProps<'div'>>> = ({ className, children, ...props }) => {\n return (\n <div data-slot=\"table-wrapper\" className=\"relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2 py-2.5 text-sm\" {...props}>\n {children}\n </div>\n );\n};\n\nconst UITableHeader: React.FC<React.PropsWithChildren> = memo(({ children }) => {\n return (\n <thead\n data-slot=\"table-header\"\n style={{ zIndex: TABLE_HEADER_Z_INDEX }}\n className={cn(\n 'sticky top-0 grid bg-muted-bg-subtle text-[13px] text-text-positive-weak',\n '[&_tr:not(:last-child)_td]:border-b',\n '[&_th]:flex',\n '[&_th]:h-9',\n '[&_th]:select-none',\n '[&_th]:items-center',\n '[&_th]:whitespace-nowrap',\n '[&_th]:border-border',\n '[&_th]:font-medium',\n // '[&_th]:border-r',\n // '[&_th]:border-b-border',\n '[&_th]:text-left',\n '[&_th]:align-middle',\n '[&_th]:last:border-r-0',\n '[&_th]:first:border-l-0',\n '[&_th]:data-[pinned=right]:border-l',\n '[&_th]:data-[pinned=right]:border-r-0',\n '[&_th]:data-[pinned=left]:border-r',\n '[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle'\n )}\n >\n {children}\n </thead>\n );\n});\nUITableHeader.displayName = 'TableHeader';\n\nconst UITableHeaderRow: React.FC<React.PropsWithChildren> = memo(({ children }) => {\n return (\n <tr data-slot=\"table-header-row\" className=\"flex w-full border-border border-b shadow\">\n {children}\n </tr>\n );\n});\nUITableHeaderRow.displayName = 'TableHeaderRow';\n\nconst UITableHeaderCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'th'> & {\n header: Header<unknown, unknown>;\n isPinned: ColumnPinningPosition;\n isResizing: boolean;\n isAllRowsSelected: boolean;\n }\n >\n> = ({ header, isPinned, isResizing, isAllRowsSelected, children, ...props }) => {\n const style = getCommonPinningStyles(header.column);\n const width = `calc(var(--header-${header.id}-size) * 1px)`;\n\n if (header.id === 'select') {\n return (\n <th data-slot=\"table-header-cell\" style={{ ...style, width: SELECT_WIDTH }} className={cn(isPinned ? 'sticky' : 'relative')} {...props}>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <Checkbox\n aria-label=\"Select All Rows\"\n checked={isAllRowsSelected}\n onCheckedChange={value => {\n header.getContext().table.toggleAllRowsSelected(!!value);\n }}\n />\n </div>\n </th>\n );\n }\n return (\n <th\n data-slot=\"table-header-cell\"\n data-pinned={isPinned}\n style={{ ...style, width }}\n colSpan={header.colSpan}\n className={cn('group relative', isPinned ? 'sticky' : 'relative')}\n {...props}\n >\n <div className=\"absolute inset-0 gap-1 truncate\">\n <div className=\"flex h-full flex-1 cursor-pointer select-none items-center justify-between\">\n <div className=\"flex size-full flex-1 items-center truncate pl-4\">{flexRender(header.column.columnDef.header, header.getContext())}</div>\n </div>\n </div>\n {!['select', 'actions'].includes(header.id) && (\n <UITableHeaderCellOption\n isPinned={isPinned}\n isVisible={header.column.getIsVisible()}\n className=\"invisible absolute right-2 z-10 group-hover:visible\"\n onLeftPin={header.column.pin}\n onRightPin={header.column.pin}\n onUnpin={header.column.pin}\n onToggleVisibilityHandler={header.column.toggleVisibility}\n />\n )}\n <Activity mode={isPinned ? 'hidden' : 'visible'}>\n <div\n onDoubleClick={header.column.resetSize}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn('absolute inset-y-0 -right-0.5 w-1 cursor-e-resize bg-transparent hover:bg-border', isResizing && 'bg-border')}\n />\n </Activity>\n </th>\n );\n};\n\nconst UITableHeaderCellOption: React.FC<{\n isPinned: ColumnPinningPosition;\n className?: string;\n isVisible?: boolean;\n onLeftPin: (pos: 'left' | 'right' | false) => void;\n onRightPin: (pos: 'left' | 'right' | false) => void;\n onUnpin: (pos: 'left' | 'right' | false) => void;\n onToggleVisibilityHandler: (visible: AnyEntity) => void;\n}> = ({ isPinned, className, onLeftPin, onRightPin, onUnpin, onToggleVisibilityHandler }) => {\n const handleLeftPin = useCallback(() => {\n onLeftPin('left');\n }, [onLeftPin]);\n\n const handleRightPin = useCallback(() => {\n onRightPin('right');\n }, [onRightPin]);\n\n const handleUnpin = useCallback(() => {\n onUnpin(false);\n }, [onUnpin]);\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn('cursor-pointer rounded-full p-0.5 text-text-positive-weak hover:bg-muted-muted hover:text-text-positive [&>svg]:size-4', className)}\n >\n <EllipsisVerticalIcon />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64 p-4\">\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <Activity mode={isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleUnpin}>\n {!!isPinned && 'Unpin'}\n <DropdownMenuShortcut>\n <PinOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n <Activity mode={!isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleLeftPin}>\n {isPinned ? 'Unpin' : 'Pin to Left'}\n <DropdownMenuShortcut>\n <MoveLeftIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={handleRightPin}>\n {isPinned ? 'Unpin' : 'Pin to Right'}\n <DropdownMenuShortcut>\n <MoveRightIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <DropdownMenuItem onClick={() => onToggleVisibilityHandler(false)}>\n Hide Field\n <DropdownMenuShortcut>\n <EyeOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nconst UITableBody: React.FC<React.PropsWithChildren<React.ComponentProps<'tbody'> & { height: number }>> = ({ height, children, ...props }) => {\n return (\n <tbody\n data-slot=\"table-body\"\n style={{ height: `${height}px` }}\n className={cn(\n 'relative grid w-full bg-card',\n '[&_tr]:absolute [&_tr]:flex [&_tr]:w-full [&_tr]:cursor-pointer [&_tr]:border-b [&_tr]:border-b-border [&_tr]:focus:outline-none',\n '[&_td]:z-10',\n '[&_td]:flex',\n '[&_td]:overflow-hidden',\n '[&_td]:whitespace-nowrap',\n '[&_td]:px-4',\n '[&_td]:py-2.5',\n '[&_td]:align-middle',\n '[&_td]:border-border',\n '[&_td]:data-[pinned=right]:border-l',\n '[&_td]:data-[pinned=left]:border-r',\n '[&_td:not([data-pinned=false])]:bg-card',\n '[&_td:not([data-pinned=false])]:shadow-xs'\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n};\n\nconst UITableRow: React.FC<\n React.ComponentProps<'tr'> & {\n keyOfClickRow?: string;\n row: Row<any>;\n virtualRow: VirtualItem;\n rowVirtualizer: Virtualizer<HTMLDivElement, HTMLTableRowElement>;\n\n onClickRow?: (rowIndex: number, rowId?: AnyEntity) => void;\n }\n> = memo(({ children, keyOfClickRow, row, virtualRow, rowVirtualizer, onClickRow, className, ...props }) => {\n const { columnPinning: _ } = useUITableContext();\n const handleClick = useCallback<React.MouseEventHandler<HTMLTableRowElement>>(\n e => {\n const value = keyOfClickRow ? row.original?.[keyOfClickRow] : undefined;\n if (typeof value === 'string' || typeof value === 'number') {\n onClickRow?.(virtualRow.index, value);\n } else {\n onClickRow?.(virtualRow.index);\n }\n e.preventDefault();\n e.stopPropagation();\n },\n [keyOfClickRow, onClickRow, row.original, virtualRow.index]\n );\n return (\n <tr\n data-slot=\"table-row\"\n data-index={virtualRow.index}\n ref={node => rowVirtualizer.measureElement(node)}\n style={{\n transform: `translateY(${virtualRow.start}px)`,\n }}\n className={cn('group', className)}\n onClick={handleClick}\n {...props}\n >\n {row.getVisibleCells().map(cell => {\n return <UITableCell key={cell.id} cell={cell} className=\"group-hover:bg-muted-bg-subtle!\" />;\n })}\n </tr>\n );\n});\nUITableRow.displayName = 'TableRow';\n\nconst UITableCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'td'> & {\n cell: Cell<unknown, unknown>;\n }\n >\n> = memo(({ cell, children, className, ...props }) => {\n const { rowSelection: _ } = useUITableContext();\n const isPinned = cell.column.getIsPinned();\n const style = getCommonPinningStyles(cell.column);\n const width = `calc(var(--col-${cell.column.id}-size) * 1px)`;\n\n const position = ((cell.column.columnDef.meta as any)?.position ?? 'start') as unknown as 'start' | 'center' | 'end';\n\n if (cell.column.id === 'select') {\n return (\n <td\n data-slot=\"table-cell\"\n style={{ ...style, width: SELECT_WIDTH }}\n className={cn('border-none! bg-transparent! shadow-none!', isPinned ? 'sticky' : 'relative', className)}\n {...props}\n >\n <div data-slot=\"table-cell-inner\" className=\"inline-flex w-full items-center justify-center bg-transparent text-center align-middle\">\n <Checkbox\n aria-label=\"Select Row\"\n checked={cell.row.getIsSelected()}\n onCheckedChange={value => {\n cell.row.toggleSelected(!!value);\n }}\n />\n </div>\n </td>\n );\n }\n\n return (\n <td\n data-slot=\"table-cell\"\n data-pinned={isPinned}\n style={{ ...style, width }}\n className={cn(isPinned && cell.column.getPinnedIndex() === 0 && 'shadow!', isPinned && 'sticky', !isPinned && 'relative', className)}\n {...props}\n >\n <div\n data-slot=\"table-cell-inner\"\n className={cn(\n 'inline-flex w-full items-center bg-transparent text-center align-middle',\n position === 'start' && 'justify-start',\n position === 'center' && 'justify-center',\n position === 'end' && 'justify-end'\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </div>\n </td>\n );\n});\nUITableCell.displayName = 'TableCell';\n\nconst EmptyDisplay: React.FC = () => {\n return (\n <div className=\"sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100\">\n <div className=\"flex flex-col items-center gap-1\">\n <BoxIcon strokeWidth={1} size={48} />\n <p>No data available</p>\n </div>\n </div>\n );\n};\n\nexport const UITableFooter: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <tfoot data-slot=\"table-footer\" className=\"flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0\">\n {children}\n </tfoot>\n );\n};\n\nexport const UITableContainer: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { table, isEmpty, isFetching, data, totalRows, fetchMoreData } = useUITableContext();\n const { keyOfClickRow, onClickRow } = useUITableClickRowContext();\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n /**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: <table> element.\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: { [key: string]: number | undefined } = {};\n headers.forEach(header => {\n colSizes[`--header-${header.id}-size`] = header.getSize() || 0;\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize() || 0;\n });\n return colSizes;\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]);\n\n //called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnButtonReached = useCallback(\n async (containerRefEl?: HTMLDivElement | null) => {\n if (!containerRefEl) return null;\n const { scrollHeight, scrollTop, clientHeight } = containerRefEl;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isFetching && totalRows && data.length < totalRows) {\n fetchMoreData?.();\n }\n },\n [isFetching, data.length, totalRows, fetchMoreData]\n );\n\n //a check on mount and after a fetch to see if the table is already scrolled to the bottom and immediately needs to fetch more data\n useEffect(() => {\n fetchMoreOnButtonReached(tableContainerRef.current);\n }, [fetchMoreOnButtonReached]);\n\n const { rows } = table.getRowModel();\n\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, // estimated row height\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1 ? element => element?.getBoundingClientRect().height : undefined,\n overscan: 2, // Render additional rows beyond viewport for smoother scrolling\n });\n\n return (\n <ResizablePanelGroup\n direction=\"horizontal\"\n style={{ direction: table.options.columnResizeDirection }}\n className=\"relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border bg-slate-50 p-0 text-sm\"\n >\n <ResizablePanel className=\"overflow-auto\">\n <div\n ref={tableContainerRef}\n className=\"relative size-full overflow-auto border-b border-b-border border-l border-l-border\"\n onScroll={e => fetchMoreOnButtonReached(e.currentTarget)}\n >\n <table\n data-slot=\"table\"\n style={{\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n className=\"grid w-full max-w-full caption-bottom border-collapse border-spacing-0 flex-col content-start bg-card text-sm tabular-nums [&_tfoot_td]:border-t\"\n >\n <UITableHeader>\n {table.getHeaderGroups().map(headerGroup => (\n <UITableHeaderRow key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <UITableHeaderCell\n key={header.id}\n header={header}\n isPinned={header.column.getIsPinned()}\n isResizing={header.column.getIsResizing()}\n isAllRowsSelected={table.getIsAllRowsSelected()}\n />\n ))}\n </UITableHeaderRow>\n ))}\n </UITableHeader>\n <UITableBody data-slot=\"table-body\" height={rowVirtualizer.getTotalSize()}>\n {rowVirtualizer.getVirtualItems().map(virtualRow => {\n const row = rows[virtualRow.index] as Row<AnyEntity>;\n return (\n <UITableRow\n data-index={virtualRow.index}\n key={row.id}\n keyOfClickRow={keyOfClickRow}\n row={row}\n virtualRow={virtualRow}\n rowVirtualizer={rowVirtualizer}\n onClickRow={onClickRow}\n />\n );\n })}\n </UITableBody>\n </table>\n {isEmpty && <EmptyDisplay />}\n </div>\n </ResizablePanel>\n <ResizableHandle />\n {children}\n </ResizablePanelGroup>\n );\n};\n","import { Activity, useState } from 'react';\n\nimport { Columns4Icon, ListFilterIcon, ListFilterPlus } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { ResizablePanel } from '@/components/ui/resizable';\nimport { Separator } from '@/components/ui/separator';\n\nimport { useUITableContext } from '../../hooks/use-table-context';\n\nconst ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}> = ({ checked, title, onCheckedChange }) => {\n return (\n <div className=\"flex h-fit items-center gap-2\">\n <Checkbox checked={checked} onCheckedChange={onCheckedChange} />\n <p className=\"text-sm\">{title}</p>\n </div>\n );\n};\n\nexport const UITableFilter = () => {\n const { table } = useUITableContext();\n const [tab, setTab] = useState<'columns' | 'filters' | null>(null);\n\n return (\n <ResizablePanel defaultSize={25} className={cn('bg-card', tab === null ? 'max-w-8!' : 'min-w-64')}>\n <div className=\"relative z-20 flex size-full bg-muted-bg-subtle\">\n <div className=\"flex-1\">\n <Activity mode={tab === 'columns' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col gap-2 p-4\">\n <p className=\"px-2 font-medium\">Columns Visibility</p>\n <Separator />\n <div className=\"flex flex-col gap-4 pt-4\">\n {table.getAllColumns().map(column => {\n if (['select', 'actions'].includes(column.id)) return null;\n return (\n <ColumnVisibility\n key={column.id}\n checked={column.getIsVisible()}\n title={String(column.columnDef.header)}\n onCheckedChange={value => column.toggleVisibility(!!value)}\n />\n );\n })}\n </div>\n </div>\n </Activity>\n <Activity mode={tab === 'filters' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col p-2\">\n <Button variant=\"outline\" color=\"muted\">\n <ListFilterPlus />\n Add Filter\n </Button>\n </div>\n </Activity>\n </div>\n <div className=\"flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm\">\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'columns' && 'bg-card')}\n onClick={() => setTab(tab === 'columns' ? null : 'columns')}\n >\n <Columns4Icon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Columns</span>\n </button>\n <Separator />\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'filters' && 'bg-card')}\n onClick={() => setTab(tab === 'filters' ? null : 'filters')}\n >\n <ListFilterIcon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Filters</span>\n </button>\n <Separator />\n </div>\n </div>\n </ResizablePanel>\n );\n};\n","import { useMemo, useState } from 'react';\n\nimport type { ColumnPinningState, RowData, RowSelectionState, VisibilityState } from '@tanstack/react-table';\nimport { getCoreRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { TableClickRowContext } from '../../hooks/use-click-row';\nimport { TableContext } from '../../hooks/use-table-context';\nimport type { TableProviderProps, TTableClickRow, TTableContext } from '../../types';\n\nexport const UITableProvider = <TData extends RowData, TKey extends keyof TData>({\n title,\n isFetching = false,\n data,\n columns,\n totalRows,\n\n leftPinnedColumns,\n rightPinnedColumns,\n\n keyOfClickRow,\n onClickRow,\n\n fetchMoreData,\n children,\n}: React.PropsWithChildren<TableProviderProps<TData, TKey>>) => {\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({ right: rightPinnedColumns, left: leftPinnedColumns });\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n\n const table = useReactTable<TData>({\n data: data,\n columns,\n state: {\n rowSelection,\n columnPinning,\n columnVisibility,\n },\n defaultColumn: {\n minSize: 40,\n size: 150,\n maxSize: 800,\n },\n columnResizeMode: 'onChange',\n columnResizeDirection: 'ltr',\n\n enableColumnPinning: true,\n enableRowSelection: true,\n enableColumnResizing: true,\n enableMultiRowSelection: true,\n\n getCoreRowModel: getCoreRowModel(),\n\n onRowSelectionChange: setRowSelection,\n onColumnPinningChange: setColumnPinning,\n onColumnVisibilityChange: setColumnVisibility,\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rows\n const rows = useMemo(() => {\n const { rows } = table.getRowModel();\n return rows;\n }, [table.getRowModel().rows, table.getState().columnPinning]);\n\n const isEmpty = useMemo<boolean>(() => {\n return !isFetching && rows.length === 0;\n }, [rows, isFetching]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const value = useMemo<TTableContext<TData>>(\n () => ({\n title,\n table,\n data,\n\n isEmpty,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n\n rowSelection: table.getState().rowSelection,\n columnPinning: table.getState().columnPinning,\n }),\n [\n title,\n table,\n data,\n\n isEmpty,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n\n table.getState().columnVisibility,\n\n table.getState().rowSelection,\n table.getState().columnPinning,\n ]\n );\n\n const clickRowValue = useMemo(\n () => ({\n keyOfClickRow,\n onClickRow,\n }),\n [keyOfClickRow, onClickRow]\n );\n\n return (\n <TableContext.Provider value={value as TTableContext<unknown>}>\n <TableClickRowContext.Provider value={clickRowValue as TTableClickRow<unknown>}>{children}</TableClickRowContext.Provider>\n </TableContext.Provider>\n );\n};\n","import { ArrowRightIcon, CirclePlus, DownloadIcon, RefreshCwIcon, SearchIcon } from 'lucide-react';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useUITableContext } from '../../hooks/use-table-context';\n\nexport const UITableTooltipFilter: React.FC<React.ComponentProps<typeof Input>> = ({ className: _, ...props }) => {\n return (\n <div className=\"relative\">\n <Input {...props} size=\"lg\" type=\"search\" placeholder=\"Search records...\" className=\"ps-9 pe-9\" />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Submit search\"\n type=\"submit\"\n >\n <ArrowRightIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n};\n\nconst ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>> = ({ children, onClick }) => {\n return (\n <button\n type=\"button\"\n className=\"flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive [&_svg]:size-3.5\"\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n\nexport const UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}> = ({ onCreate, onDownload, onRefresh }) => {\n return (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\">\n <ActionButton\n onClick={e => {\n onCreate?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <CirclePlus />\n </ActionButton>\n <ActionButton\n onClick={e => {\n onRefresh?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <RefreshCwIcon />\n </ActionButton>\n <ActionButton\n onClick={e => {\n onDownload?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <DownloadIcon />\n </ActionButton>\n </div>\n );\n};\n\nexport const UITableTooltip: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { title } = useUITableContext();\n return (\n <div data-slot=\"table-tooltip\" className=\"relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm\">\n <h3 className=\"font-semibold text-base text-text-positive\">{title}</h3>\n <div className=\"flex w-full flex-1 justify-between\">{children}</div>\n </div>\n );\n};\nUITableTooltip.displayName = 'TableTooltip';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["UITableEmpty: React.FC","MinusIcon","UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}>","XIcon","UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}>","XIcon","CheckIcon","UITableDateDisplay: React.FC<Props>","TooltipProvider","Tooltip","TooltipTrigger","Badge","DateDisplay","TooltipContent","UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","TooltipContent","UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}>","DropdownMenu","DropdownMenuTrigger","Button","MoreVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","UITableNameDisplay: React.FC<NameDisplayProps>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","UITablePermalink: React.FC<{ href: string; label?: string }>","ExternalLinkIcon","UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>>","Tooltip","TooltipTrigger","TooltipContent","UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}>","Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent","options: Intl.NumberFormatOptions","Flex","UITableUserDataDisplay: React.FC<Props>","Flex","Avatar","AvatarFallback","UserRoundIcon","colorHashLight","Paragraph","UITableWrapper: React.FC<React.PropsWithChildren<React.ComponentProps<'div'>>>","UITableHeader: React.FC<React.PropsWithChildren>","UITableHeaderRow: React.FC<React.PropsWithChildren>","UITableHeaderCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'th'> & {\n header: Header<unknown, unknown>;\n isPinned: ColumnPinningPosition;\n isResizing: boolean;\n isAllRowsSelected: boolean;\n }\n >\n>","Checkbox","Activity","UITableHeaderCellOption: React.FC<{\n isPinned: ColumnPinningPosition;\n className?: string;\n isVisible?: boolean;\n onLeftPin: (pos: 'left' | 'right' | false) => void;\n onRightPin: (pos: 'left' | 'right' | false) => void;\n onUnpin: (pos: 'left' | 'right' | false) => void;\n onToggleVisibilityHandler: (visible: AnyEntity) => void;\n}>","DropdownMenu","DropdownMenuTrigger","EllipsisVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuShortcut","PinOffIcon","MoveLeftIcon","MoveRightIcon","DropdownMenuSeparator","EyeOffIcon","UITableBody: React.FC<React.PropsWithChildren<React.ComponentProps<'tbody'> & { height: number }>>","UITableRow: React.FC<\n React.ComponentProps<'tr'> & {\n keyOfClickRow?: string;\n row: Row<any>;\n virtualRow: VirtualItem;\n rowVirtualizer: Virtualizer<HTMLDivElement, HTMLTableRowElement>;\n\n onClickRow?: (rowIndex: number, rowId?: AnyEntity) => void;\n }\n>","UITableCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'td'> & {\n cell: Cell<unknown, unknown>;\n }\n >\n>","BoxIcon","LoaderIcon","UITableFooter: React.FC<React.PropsWithChildren>","UITableContainer: React.FC<React.PropsWithChildren>","colSizes: { [key: string]: number | undefined }","ResizablePanelGroup","ResizablePanel","ResizableHandle","ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}>","Checkbox","ResizablePanel","Activity","Separator","Button","ListFilterPlus","Columns4Icon","ListFilterIcon","rows","UITableTooltipFilter: React.FC<React.ComponentProps<typeof Input>>","Input","SearchIcon","ArrowRightIcon","ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>>","UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}>","CirclePlus","RefreshCwIcon","DownloadIcon","UITableTooltip: React.FC<React.PropsWithChildren>"],"sources":["../../../packages/components/features/tables/components/atoms/empty.tsx","../../../packages/components/features/tables/components/atoms/badge-display.tsx","../../../packages/components/features/tables/components/atoms/boolean-display.tsx","../../../packages/components/features/tables/components/atoms/date-display.tsx","../../../packages/components/features/tables/components/atoms/description-display.tsx","../../../packages/components/features/tables/components/atoms/more-button.tsx","../../../packages/components/features/tables/components/atoms/name-display.tsx","../../../packages/components/features/tables/components/atoms/permalink.tsx","../../../packages/components/features/tables/components/atoms/phone-number.tsx","../../../packages/components/features/tables/components/atoms/remove-button.tsx","../../../packages/components/features/tables/components/atoms/statistic.tsx","../../../packages/components/features/tables/components/atoms/user.tsx","../../../packages/components/features/tables/hooks/use-click-row.ts","../../../packages/components/features/tables/hooks/use-table-context.ts","../../../packages/components/features/tables/components/table.tsx","../../../packages/components/features/tables/components/table/filter.tsx","../../../packages/components/features/tables/components/table/provider.tsx","../../../packages/components/features/tables/components/table/tooltip.tsx"],"sourcesContent":["import { MinusIcon } from 'lucide-react';\n\nexport const UITableEmpty: React.FC = () => {\n return (\n <div className=\"flex gap-0 text-text-positive-weak\">\n <MinusIcon size={16} />\n <MinusIcon size={16} />\n </div>\n );\n};\n","import { XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}> = ({ label, onClick, onRemove }) => {\n if (!label) return <UITableEmpty />;\n if (onRemove) {\n return (\n <div\n className=\"flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n <button\n className=\"cursor-pointer text-text-positive-weak hover:text-text-positive-strong\"\n onClick={e => {\n onRemove?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <XIcon size={12} />\n </button>\n </div>\n );\n }\n return (\n <button\n className=\"w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n </button>\n );\n};\n","import { CheckIcon, XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}> = ({ value }) => {\n if (value === null || value === undefined) return <UITableEmpty />;\n if (value === false) {\n return (\n <div className=\"text-danger-strong\">\n <XIcon />\n </div>\n );\n }\n return (\n <div className=\"text-success-strong\">\n <CheckIcon />\n </div>\n );\n};\n","import { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from '@/components/data-display/date';\nimport { UITableEmpty } from './empty';\n\ntype Props = {\n date: Date | string | number | null | undefined;\n};\nexport const UITableDateDisplay: React.FC<Props> = ({ date }) => {\n if (typeof date === 'undefined' || date === null) return <UITableEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"font-normal text-white\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent className='rounded'>\n <DateDisplay date={date} format=\"full\" showTime className=\"font-medium text-text-negative text-xs\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content === undefined || content === null) {\n return <UITableEmpty />;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak\">{content}</div>\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\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { MoreVerticalIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nexport const UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}> = ({ items = [] }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" color=\"secondary\" className=\"size-9 rounded-full\">\n <MoreVerticalIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {items.map(item => (\n <DropdownMenuItem key={item.id} className=\"px-3\" onSelect={() => item.onClick(item.id)}>\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Paragraph } from '@/components/typography/paragraph';\nimport { UITableEmpty } from './empty';\n\ntype NameDisplayProps = {\n name?: string | null | undefined;\n};\n\nexport const UITableNameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n if (!name) return <UITableEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm\">\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\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { ExternalLinkIcon } from 'lucide-react';\n\nexport const UITablePermalink: React.FC<{ href: string; label?: string }> = ({ href, label }) => {\n return (\n <a href={href} target=\"_blank\" className=\"inline-flex items-center gap-1 truncate text-primary text-sm underline\" rel=\"noopener noreferrer\">\n <span>{label || href}</span>\n <ExternalLinkIcon size={14} />\n </a>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p className=\"font-number text-secondary-foreground text-sm tabular-nums\">{value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}</p>\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","import { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\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\ntype Props = {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number; // Số chữ số thập phân\n roundingMode?: 'round' | 'floor' | 'ceil'; // Kiểu làm tròn\n showTrailingZeros?: boolean; // Hiển thị số 0 cuối\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; // Kích thước của component\n value: number | string | null | undefined;\n};\n\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && 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\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number text-lg text-secondary-foreground tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n","import { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Paragraph } from '@/components/typography/paragraph';\n\ntype Props = {\n uuid?: string | null | undefined;\n username?: string | null | undefined;\n email?: string | null | undefined;\n};\n\nexport const UITableUserDataDisplay: React.FC<Props> = ({ uuid, username, email }) => {\n return (\n <Flex wrap={false} gap=\"sm\" padding=\"none\">\n {!uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback className=\"bg-muted-weak\">\n <UserRoundIcon size={28} className=\"text-text-negative\" />\n </AvatarFallback>\n </Avatar>\n )}\n {uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n )}\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"font-medium text-sm text-text-positive-weak\">{username ?? 'Unknown User'}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-text-positive-weak text-xs\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n","import { createContext, use } from 'react';\n\nimport type { RowData } from '@tanstack/react-table';\n\nimport type { TTableClickRow } from '../types';\n\nexport const TableClickRowContext = createContext<TTableClickRow<RowData> | null>(null);\n\nexport const useUITableClickRowContext = () => {\n const context = use(TableClickRowContext);\n if (!context) {\n throw new Error('useUITableClickRowContext must be used within a TableClickRowProvider');\n }\n return context;\n};\n","import { createContext, use } from 'react';\n\nimport type { RowData } from '@tanstack/react-table';\n\nimport type { TTableContext } from '../types';\n\nexport const TableContext = createContext<TTableContext<RowData> | null>(null);\n\nexport const useUITableContext = <TData extends RowData>() => {\n const context = use(TableContext) as TTableContext<TData>;\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context;\n};\n","'use client';\nimport { Activity, memo, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { type Cell, type Column, type ColumnPinningPosition, flexRender, type Header, type Row } from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualItem, type Virtualizer } from '@tanstack/react-virtual';\n\nimport { BoxIcon, EllipsisVerticalIcon, EyeOffIcon, LoaderIcon, MoveLeftIcon, MoveRightIcon, PinOffIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';\n\nimport type { AnyEntity } from '@/types';\nimport { useUITableClickRowContext } from '../hooks/use-click-row';\nimport { useUITableContext } from '../hooks/use-table-context';\n\nconst SELECT_WIDTH = 60;\nconst TABLE_HEADER_Z_INDEX = 20;\nconst PINNED_COLUMN_Z_INDEX = 20;\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<unknown>): React.CSSProperties => {\n const isPinned = column.getIsPinned();\n return {\n zIndex: isPinned ? PINNED_COLUMN_Z_INDEX : undefined,\n left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n // position: isPinned ? 'sticky' : 'relative',\n };\n};\n\nexport const UITableWrapper: React.FC<React.PropsWithChildren<React.ComponentProps<'div'>>> = ({ className, children, ...props }) => {\n return (\n <div data-slot=\"table-wrapper\" className=\"relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2 py-2.5 text-sm\" {...props}>\n {children}\n </div>\n );\n};\n\nconst UITableHeader: React.FC<React.PropsWithChildren> = memo(({ children }) => {\n return (\n <thead\n data-slot=\"table-header\"\n style={{ zIndex: TABLE_HEADER_Z_INDEX }}\n className={cn(\n 'sticky top-0 grid bg-muted-bg-subtle text-[13px] text-text-positive-weak',\n '[&_tr:not(:last-child)_td]:border-b',\n '[&_th]:flex',\n '[&_th]:h-9',\n '[&_th]:select-none',\n '[&_th]:items-center',\n '[&_th]:whitespace-nowrap',\n '[&_th]:border-border',\n '[&_th]:font-medium',\n // '[&_th]:border-r',\n // '[&_th]:border-b-border',\n '[&_th]:text-left',\n '[&_th]:align-middle',\n '[&_th]:last:border-r-0',\n '[&_th]:first:border-l-0',\n '[&_th]:data-[pinned=right]:border-l',\n '[&_th]:data-[pinned=right]:border-r-0',\n '[&_th]:data-[pinned=left]:border-r',\n '[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle'\n )}\n >\n {children}\n </thead>\n );\n});\nUITableHeader.displayName = 'TableHeader';\n\nconst UITableHeaderRow: React.FC<React.PropsWithChildren> = memo(({ children }) => {\n return (\n <tr data-slot=\"table-header-row\" className=\"flex w-full border-border border-b shadow\">\n {children}\n </tr>\n );\n});\nUITableHeaderRow.displayName = 'TableHeaderRow';\n\nconst UITableHeaderCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'th'> & {\n header: Header<unknown, unknown>;\n isPinned: ColumnPinningPosition;\n isResizing: boolean;\n isAllRowsSelected: boolean;\n }\n >\n> = ({ header, isPinned, isResizing, isAllRowsSelected, children, ...props }) => {\n const style = getCommonPinningStyles(header.column);\n const width = `calc(var(--header-${header.id}-size) * 1px)`;\n\n if (header.id === 'select') {\n return (\n <th data-slot=\"table-header-cell\" style={{ ...style, width: SELECT_WIDTH }} className={cn(isPinned ? 'sticky' : 'relative')} {...props}>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <Checkbox\n aria-label=\"Select All Rows\"\n checked={isAllRowsSelected}\n onCheckedChange={value => {\n header.getContext().table.toggleAllRowsSelected(!!value);\n }}\n />\n </div>\n </th>\n );\n }\n return (\n <th\n data-slot=\"table-header-cell\"\n data-pinned={isPinned}\n style={{ ...style, width }}\n colSpan={header.colSpan}\n className={cn('group relative', isPinned ? 'sticky' : 'relative')}\n {...props}\n >\n <div className=\"absolute inset-0 gap-1 truncate\">\n <div className=\"flex h-full flex-1 cursor-pointer select-none items-center justify-between\">\n <div className=\"flex size-full flex-1 items-center truncate pl-4\">{flexRender(header.column.columnDef.header, header.getContext())}</div>\n </div>\n </div>\n {!['select', 'actions'].includes(header.id) && (\n <UITableHeaderCellOption\n isPinned={isPinned}\n isVisible={header.column.getIsVisible()}\n className=\"invisible absolute right-2 z-10 group-hover:visible\"\n onLeftPin={header.column.pin}\n onRightPin={header.column.pin}\n onUnpin={header.column.pin}\n onToggleVisibilityHandler={header.column.toggleVisibility}\n />\n )}\n <Activity mode={isPinned ? 'hidden' : 'visible'}>\n <div\n onDoubleClick={header.column.resetSize}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn('absolute inset-y-0 -right-0.5 w-1 cursor-e-resize bg-transparent hover:bg-border', isResizing && 'bg-border')}\n />\n </Activity>\n </th>\n );\n};\n\nconst UITableHeaderCellOption: React.FC<{\n isPinned: ColumnPinningPosition;\n className?: string;\n isVisible?: boolean;\n onLeftPin: (pos: 'left' | 'right' | false) => void;\n onRightPin: (pos: 'left' | 'right' | false) => void;\n onUnpin: (pos: 'left' | 'right' | false) => void;\n onToggleVisibilityHandler: (visible: AnyEntity) => void;\n}> = ({ isPinned, className, onLeftPin, onRightPin, onUnpin, onToggleVisibilityHandler }) => {\n const handleLeftPin = useCallback(() => {\n onLeftPin('left');\n }, [onLeftPin]);\n\n const handleRightPin = useCallback(() => {\n onRightPin('right');\n }, [onRightPin]);\n\n const handleUnpin = useCallback(() => {\n onUnpin(false);\n }, [onUnpin]);\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn('cursor-pointer rounded-full p-0.5 text-text-positive-weak hover:bg-muted-muted hover:text-text-positive [&>svg]:size-4', className)}\n >\n <EllipsisVerticalIcon />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64 p-4\">\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <Activity mode={isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleUnpin}>\n {!!isPinned && 'Unpin'}\n <DropdownMenuShortcut>\n <PinOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n <Activity mode={!isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleLeftPin}>\n {isPinned ? 'Unpin' : 'Pin to Left'}\n <DropdownMenuShortcut>\n <MoveLeftIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={handleRightPin}>\n {isPinned ? 'Unpin' : 'Pin to Right'}\n <DropdownMenuShortcut>\n <MoveRightIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <DropdownMenuItem onClick={() => onToggleVisibilityHandler(false)}>\n Hide Field\n <DropdownMenuShortcut>\n <EyeOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nconst UITableBody: React.FC<React.PropsWithChildren<React.ComponentProps<'tbody'> & { height: number }>> = ({ height, children, ...props }) => {\n return (\n <tbody\n data-slot=\"table-body\"\n style={{ height: `${height}px` }}\n className={cn(\n 'relative grid w-full bg-card',\n '[&_tr]:absolute [&_tr]:flex [&_tr]:w-full [&_tr]:cursor-pointer [&_tr]:border-b [&_tr]:border-b-border [&_tr]:focus:outline-none',\n '[&_td]:z-10',\n '[&_td]:flex',\n '[&_td]:overflow-hidden',\n '[&_td]:whitespace-nowrap',\n '[&_td]:px-4',\n '[&_td]:py-2.5',\n '[&_td]:align-middle',\n '[&_td]:border-border',\n '[&_td]:data-[pinned=right]:border-l',\n '[&_td]:data-[pinned=left]:border-r',\n '[&_td:not([data-pinned=false])]:bg-card',\n '[&_td:not([data-pinned=false])]:shadow-xs'\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n};\n\nconst UITableRow: React.FC<\n React.ComponentProps<'tr'> & {\n keyOfClickRow?: string;\n row: Row<any>;\n virtualRow: VirtualItem;\n rowVirtualizer: Virtualizer<HTMLDivElement, HTMLTableRowElement>;\n\n onClickRow?: (rowIndex: number, rowId?: AnyEntity) => void;\n }\n> = memo(({ children, keyOfClickRow, row, virtualRow, rowVirtualizer, onClickRow, className, ...props }) => {\n const { columnPinning: _ } = useUITableContext();\n const handleClick = useCallback<React.MouseEventHandler<HTMLTableRowElement>>(\n e => {\n const value = keyOfClickRow ? row.original?.[keyOfClickRow] : undefined;\n if (typeof value === 'string' || typeof value === 'number') {\n onClickRow?.(virtualRow.index, value);\n } else {\n onClickRow?.(virtualRow.index);\n }\n e.preventDefault();\n e.stopPropagation();\n },\n [keyOfClickRow, onClickRow, row.original, virtualRow.index]\n );\n return (\n <tr\n data-slot=\"table-row\"\n data-index={virtualRow.index}\n ref={node => rowVirtualizer.measureElement(node)}\n style={{\n transform: `translateY(${virtualRow.start}px)`,\n }}\n className={cn('group', className)}\n onClick={handleClick}\n {...props}\n >\n {row.getVisibleCells().map(cell => {\n return <UITableCell key={cell.id} cell={cell} className=\"group-hover:bg-muted-bg-subtle!\" />;\n })}\n </tr>\n );\n});\nUITableRow.displayName = 'TableRow';\n\nconst UITableCell: React.FC<\n React.PropsWithChildren<\n React.ComponentProps<'td'> & {\n cell: Cell<unknown, unknown>;\n }\n >\n> = memo(({ cell, children, className, ...props }) => {\n const { rowSelection: _ } = useUITableContext();\n const isPinned = cell.column.getIsPinned();\n const style = getCommonPinningStyles(cell.column);\n const width = `calc(var(--col-${cell.column.id}-size) * 1px)`;\n\n const position = ((cell.column.columnDef.meta as any)?.position ?? 'start') as unknown as 'start' | 'center' | 'end';\n\n if (cell.column.id === 'select') {\n return (\n <td\n data-slot=\"table-cell\"\n style={{ ...style, width: SELECT_WIDTH }}\n className={cn('border-none! bg-transparent! shadow-none!', isPinned ? 'sticky' : 'relative', className)}\n {...props}\n >\n <div data-slot=\"table-cell-inner\" className=\"inline-flex w-full items-center justify-center bg-transparent text-center align-middle\">\n <Checkbox\n aria-label=\"Select Row\"\n checked={cell.row.getIsSelected()}\n onCheckedChange={value => {\n cell.row.toggleSelected(!!value);\n }}\n />\n </div>\n </td>\n );\n }\n\n return (\n <td\n data-slot=\"table-cell\"\n data-pinned={isPinned}\n style={{ ...style, width }}\n className={cn(isPinned && cell.column.getPinnedIndex() === 0 && 'shadow!', isPinned && 'sticky', !isPinned && 'relative', className)}\n {...props}\n >\n <div\n data-slot=\"table-cell-inner\"\n className={cn(\n 'inline-flex w-full items-center bg-transparent text-center align-middle',\n position === 'start' && 'justify-start',\n position === 'center' && 'justify-center',\n position === 'end' && 'justify-end'\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </div>\n </td>\n );\n});\nUITableCell.displayName = 'TableCell';\n\nconst EmptyDisplay = memo(() => {\n return (\n <div className=\"sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100\">\n <div className=\"flex flex-col items-center gap-1\">\n <BoxIcon strokeWidth={1} size={48} />\n <p>No data available</p>\n </div>\n </div>\n );\n});\nEmptyDisplay.displayName = 'EmptyDisplay';\n\nconst RefetchingDisplay = memo(() => {\n return (\n <div className=\"absolute top-0 z-30 flex size-full items-center justify-center bg-black/10\">\n <LoaderIcon className=\"animate-spin text-text-positive\" />\n </div>\n );\n});\nRefetchingDisplay.displayName = 'RefetchingDisplay';\n\nexport const UITableFooter: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <tfoot data-slot=\"table-footer\" className=\"flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0\">\n {children}\n </tfoot>\n );\n};\n\nexport const UITableContainer: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { table, isEmpty, isRefetching, isFetching, data, totalRows, fetchMoreData } = useUITableContext();\n const { keyOfClickRow, onClickRow } = useUITableClickRowContext();\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n /**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: <table> element.\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: { [key: string]: number | undefined } = {};\n headers.forEach(header => {\n colSizes[`--header-${header.id}-size`] = header.getSize() || 0;\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize() || 0;\n });\n return colSizes;\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]);\n\n //called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnButtonReached = useCallback(\n async (containerRefEl?: HTMLDivElement | null) => {\n if (!containerRefEl) return null;\n const { scrollHeight, scrollTop, clientHeight } = containerRefEl;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isFetching && totalRows && data.length < totalRows) {\n fetchMoreData?.();\n }\n },\n [isFetching, data.length, totalRows, fetchMoreData]\n );\n\n //a check on mount and after a fetch to see if the table is already scrolled to the bottom and immediately needs to fetch more data\n useEffect(() => {\n fetchMoreOnButtonReached(tableContainerRef.current);\n }, [fetchMoreOnButtonReached]);\n\n const { rows } = table.getRowModel();\n\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, // estimated row height\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1 ? element => element?.getBoundingClientRect().height : undefined,\n overscan: 2, // Render additional rows beyond viewport for smoother scrolling\n });\n\n return (\n <ResizablePanelGroup\n direction=\"horizontal\"\n style={{ direction: table.options.columnResizeDirection }}\n className={cn(\n 'relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border bg-slate-50 p-0 text-sm',\n !children && 'border-r border-r-border'\n )}\n >\n <ResizablePanel className=\"relative overflow-auto\">\n <div\n ref={tableContainerRef}\n className=\"relative size-full overflow-auto border-b border-b-border border-l border-l-border\"\n onScroll={e => fetchMoreOnButtonReached(e.currentTarget)}\n >\n <table\n data-slot=\"table\"\n style={{\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n className=\"grid w-full max-w-full caption-bottom border-collapse border-spacing-0 flex-col content-start bg-card text-sm tabular-nums [&_tfoot_td]:border-t\"\n >\n <UITableHeader>\n {table.getHeaderGroups().map(headerGroup => (\n <UITableHeaderRow key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <UITableHeaderCell\n key={header.id}\n header={header}\n isPinned={header.column.getIsPinned()}\n isResizing={header.column.getIsResizing()}\n isAllRowsSelected={table.getIsAllRowsSelected()}\n />\n ))}\n </UITableHeaderRow>\n ))}\n </UITableHeader>\n <UITableBody data-slot=\"table-body\" height={rowVirtualizer.getTotalSize()}>\n {rowVirtualizer.getVirtualItems().map(virtualRow => {\n const row = rows[virtualRow.index] as Row<AnyEntity>;\n return (\n <UITableRow\n data-index={virtualRow.index}\n key={row.id}\n keyOfClickRow={keyOfClickRow}\n row={row}\n virtualRow={virtualRow}\n rowVirtualizer={rowVirtualizer}\n onClickRow={onClickRow}\n />\n );\n })}\n </UITableBody>\n </table>\n {isEmpty && <EmptyDisplay />}\n </div>\n {isRefetching && <RefetchingDisplay />}\n </ResizablePanel>\n {!!children && (\n <>\n <ResizableHandle />\n {children}\n </>\n )}\n </ResizablePanelGroup>\n );\n};\n","import { Activity, useState } from 'react';\n\nimport { Columns4Icon, ListFilterIcon, ListFilterPlus } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { ResizablePanel } from '@/components/ui/resizable';\nimport { Separator } from '@/components/ui/separator';\n\nimport { useUITableContext } from '../../hooks/use-table-context';\n\nconst ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}> = ({ checked, title, onCheckedChange }) => {\n return (\n <div className=\"flex h-fit items-center gap-2\">\n <Checkbox checked={checked} onCheckedChange={onCheckedChange} />\n <p className=\"text-sm\">{title}</p>\n </div>\n );\n};\n\nexport const UITableFilter = () => {\n const { table } = useUITableContext();\n const [tab, setTab] = useState<'columns' | 'filters' | null>(null);\n\n return (\n <ResizablePanel defaultSize={25} className={cn('bg-card', tab === null ? 'max-w-8!' : 'min-w-64')}>\n <div className=\"relative z-20 flex size-full bg-muted-bg-subtle\">\n <div className=\"flex-1\">\n <Activity mode={tab === 'columns' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col gap-2 p-4\">\n <p className=\"px-2 font-medium\">Columns Visibility</p>\n <Separator />\n <div className=\"flex flex-col gap-4 pt-4\">\n {table.getAllColumns().map(column => {\n if (['select', 'actions'].includes(column.id)) return null;\n return (\n <ColumnVisibility\n key={column.id}\n checked={column.getIsVisible()}\n title={String(column.columnDef.header)}\n onCheckedChange={value => column.toggleVisibility(!!value)}\n />\n );\n })}\n </div>\n </div>\n </Activity>\n <Activity mode={tab === 'filters' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col p-2\">\n <Button variant=\"outline\" color=\"muted\">\n <ListFilterPlus />\n Add Filter\n </Button>\n </div>\n </Activity>\n </div>\n <div className=\"flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm\">\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'columns' && 'bg-card')}\n onClick={() => setTab(tab === 'columns' ? null : 'columns')}\n >\n <Columns4Icon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Columns</span>\n </button>\n <Separator />\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'filters' && 'bg-card')}\n onClick={() => setTab(tab === 'filters' ? null : 'filters')}\n >\n <ListFilterIcon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Filters</span>\n </button>\n <Separator />\n </div>\n </div>\n </ResizablePanel>\n );\n};\n","import { useMemo, useState } from 'react';\n\nimport type { ColumnPinningState, RowData, RowSelectionState, VisibilityState } from '@tanstack/react-table';\nimport { getCoreRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { TableClickRowContext } from '../../hooks/use-click-row';\nimport { TableContext } from '../../hooks/use-table-context';\nimport type { TableProviderProps, TTableClickRow, TTableContext } from '../../types';\n\nexport const UITableProvider = <TData extends RowData, TKey extends keyof TData>({\n title,\n\n isFetching = false,\n isRefetching = false,\n\n data,\n columns,\n totalRows,\n\n leftPinnedColumns,\n rightPinnedColumns,\n\n keyOfClickRow,\n onClickRow,\n\n fetchMoreData,\n children,\n}: React.PropsWithChildren<TableProviderProps<TData, TKey>>) => {\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({ right: rightPinnedColumns, left: leftPinnedColumns });\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n\n const table = useReactTable<TData>({\n data: data,\n columns,\n state: {\n rowSelection,\n columnPinning,\n columnVisibility,\n },\n defaultColumn: {\n minSize: 40,\n size: 150,\n maxSize: 800,\n },\n columnResizeMode: 'onChange',\n columnResizeDirection: 'ltr',\n\n enableColumnPinning: true,\n enableRowSelection: true,\n enableColumnResizing: true,\n enableMultiRowSelection: true,\n\n getCoreRowModel: getCoreRowModel(),\n\n onRowSelectionChange: setRowSelection,\n onColumnPinningChange: setColumnPinning,\n onColumnVisibilityChange: setColumnVisibility,\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rows\n const rows = useMemo(() => {\n const { rows } = table.getRowModel();\n return rows;\n }, [table.getRowModel().rows, table.getState().columnPinning]);\n\n const isEmpty = useMemo<boolean>(() => {\n return !isFetching && rows.length === 0;\n }, [rows, isFetching]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const value = useMemo<TTableContext<TData>>(\n () => ({\n title,\n table,\n data,\n\n isEmpty,\n isFetching,\n isRefetching,\n\n totalRows,\n\n fetchMoreData,\n\n rowSelection: table.getState().rowSelection,\n columnPinning: table.getState().columnPinning,\n }),\n [\n title,\n table,\n data,\n\n isEmpty,\n isRefetching,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n\n table.getState().columnVisibility,\n\n table.getState().rowSelection,\n table.getState().columnPinning,\n ]\n );\n\n const clickRowValue = useMemo(\n () => ({\n keyOfClickRow,\n onClickRow,\n }),\n [keyOfClickRow, onClickRow]\n );\n\n return (\n <TableContext.Provider value={value as TTableContext<unknown>}>\n <TableClickRowContext.Provider value={clickRowValue as TTableClickRow<unknown>}>{children}</TableClickRowContext.Provider>\n </TableContext.Provider>\n );\n};\n","import { ArrowRightIcon, CirclePlus, DownloadIcon, RefreshCwIcon, SearchIcon } from 'lucide-react';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useUITableContext } from '../../hooks/use-table-context';\n\nexport const UITableTooltipFilter: React.FC<React.ComponentProps<typeof Input>> = ({ className: _, ...props }) => {\n return (\n <div className=\"relative\">\n <Input {...props} size=\"lg\" type=\"search\" placeholder=\"Search records...\" className=\"ps-9 pe-9\" />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Submit search\"\n type=\"submit\"\n >\n <ArrowRightIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n};\n\nconst ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>> = ({ children, onClick }) => {\n return (\n <button\n type=\"button\"\n className=\"flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive [&_svg]:size-3.5\"\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n\nexport const UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}> = ({ onCreate, onDownload, onRefresh }) => {\n return (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\">\n <ActionButton\n onClick={e => {\n onCreate?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <CirclePlus />\n </ActionButton>\n <ActionButton\n onClick={e => {\n onRefresh?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <RefreshCwIcon />\n </ActionButton>\n <ActionButton\n onClick={e => {\n onDownload?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <DownloadIcon />\n </ActionButton>\n </div>\n );\n};\n\nexport const UITableTooltip: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { title } = useUITableContext();\n return (\n <div data-slot=\"table-tooltip\" className=\"relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm\">\n <h3 className=\"font-semibold text-base text-text-positive\">{title}</h3>\n <div className=\"flex w-full flex-1 justify-between\">{children}</div>\n </div>\n );\n};\nUITableTooltip.displayName = 'TableTooltip';\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Input } from "../../input-
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
1
|
+
import { t as Input } from "../../input-CbpWzuai.cjs";
|
|
2
|
+
import * as react_jsx_runtime294 from "react/jsx-runtime";
|
|
3
|
+
import * as react186 from "react";
|
|
4
4
|
import { AccessorKeyColumnDef, ColumnPinningState, RowData, RowSelectionState, Table } from "@tanstack/react-table";
|
|
5
5
|
import { VirtualItem, Virtualizer } from "@tanstack/react-virtual";
|
|
6
6
|
|
|
@@ -43,6 +43,12 @@ type NameDisplayProps = {
|
|
|
43
43
|
};
|
|
44
44
|
declare const UITableNameDisplay: React.FC<NameDisplayProps>;
|
|
45
45
|
//#endregion
|
|
46
|
+
//#region packages/components/features/tables/components/atoms/permalink.d.ts
|
|
47
|
+
declare const UITablePermalink: React.FC<{
|
|
48
|
+
href: string;
|
|
49
|
+
label?: string;
|
|
50
|
+
}>;
|
|
51
|
+
//#endregion
|
|
46
52
|
//#region packages/components/features/tables/components/atoms/phone-number.d.ts
|
|
47
53
|
declare const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{
|
|
48
54
|
value: string;
|
|
@@ -66,7 +72,7 @@ type Props$1 = {
|
|
|
66
72
|
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
67
73
|
value: number | string | null | undefined;
|
|
68
74
|
};
|
|
69
|
-
declare const UITableStatisticDisplay:
|
|
75
|
+
declare const UITableStatisticDisplay: react186.MemoExoticComponent<({
|
|
70
76
|
decimalSeparator,
|
|
71
77
|
groupSeparator,
|
|
72
78
|
prefix: Prefix,
|
|
@@ -76,7 +82,7 @@ declare const UITableStatisticDisplay: react187.MemoExoticComponent<({
|
|
|
76
82
|
showTrailingZeros,
|
|
77
83
|
size,
|
|
78
84
|
value
|
|
79
|
-
}: Props$1) =>
|
|
85
|
+
}: Props$1) => react_jsx_runtime294.JSX.Element>;
|
|
80
86
|
//#endregion
|
|
81
87
|
//#region packages/components/features/tables/components/atoms/user.d.ts
|
|
82
88
|
type Props = {
|
|
@@ -92,7 +98,7 @@ declare const UITableFooter: React.FC<React.PropsWithChildren>;
|
|
|
92
98
|
declare const UITableContainer: React.FC<React.PropsWithChildren>;
|
|
93
99
|
//#endregion
|
|
94
100
|
//#region packages/components/features/tables/components/table/filter.d.ts
|
|
95
|
-
declare const UITableFilter: () =>
|
|
101
|
+
declare const UITableFilter: () => react_jsx_runtime294.JSX.Element;
|
|
96
102
|
//#endregion
|
|
97
103
|
//#region packages/components/features/tables/types.d.ts
|
|
98
104
|
type TUITableColumn<TData extends RowData> = Pick<AccessorKeyColumnDef<TData, unknown>, 'id' | 'accessorKey' | 'size' | 'maxSize' | 'minSize' | 'header' | 'cell' | 'meta'> & {
|
|
@@ -106,6 +112,7 @@ type TTableContext<TData extends RowData> = {
|
|
|
106
112
|
data: TData[];
|
|
107
113
|
isEmpty: boolean;
|
|
108
114
|
isFetching?: boolean;
|
|
115
|
+
isRefetching?: boolean;
|
|
109
116
|
totalRows?: number;
|
|
110
117
|
rowSelection: RowSelectionState;
|
|
111
118
|
columnPinning: ColumnPinningState;
|
|
@@ -122,6 +129,7 @@ type TTableVirtualizerContext = {
|
|
|
122
129
|
type TableProviderProps<TData extends RowData, TKey extends keyof TData> = {
|
|
123
130
|
title: string;
|
|
124
131
|
isFetching?: boolean;
|
|
132
|
+
isRefetching?: boolean;
|
|
125
133
|
data: TData[];
|
|
126
134
|
columns: TUITableColumn<TData>[];
|
|
127
135
|
totalRows?: number;
|
|
@@ -136,6 +144,7 @@ type TableProviderProps<TData extends RowData, TKey extends keyof TData> = {
|
|
|
136
144
|
declare const UITableProvider: <TData extends RowData, TKey extends keyof TData>({
|
|
137
145
|
title,
|
|
138
146
|
isFetching,
|
|
147
|
+
isRefetching,
|
|
139
148
|
data,
|
|
140
149
|
columns,
|
|
141
150
|
totalRows,
|
|
@@ -145,7 +154,7 @@ declare const UITableProvider: <TData extends RowData, TKey extends keyof TData>
|
|
|
145
154
|
onClickRow,
|
|
146
155
|
fetchMoreData,
|
|
147
156
|
children
|
|
148
|
-
}: React.PropsWithChildren<TableProviderProps<TData, TKey>>) =>
|
|
157
|
+
}: React.PropsWithChildren<TableProviderProps<TData, TKey>>) => react_jsx_runtime294.JSX.Element;
|
|
149
158
|
//#endregion
|
|
150
159
|
//#region packages/components/features/tables/components/table/tooltip.d.ts
|
|
151
160
|
declare const UITableTooltipFilter: React.FC<React.ComponentProps<typeof Input>>;
|
|
@@ -156,5 +165,5 @@ declare const UITableTooltipActions: React.FC<{
|
|
|
156
165
|
}>;
|
|
157
166
|
declare const UITableTooltip: React.FC<React.PropsWithChildren>;
|
|
158
167
|
//#endregion
|
|
159
|
-
export { TTableClickRow, TTableContext, TTableVirtualizerContext, TUITableColumn, TableProviderProps, UITableBadgeDisplay, UITableBooleanDisplay, UITableContainer, UITableDateDisplay, UITableDescriptionDisplay, UITableFilter, UITableFooter, UITableMoreButton, UITableNameDisplay, UITablePhoneNumberDisplay, UITableProvider, UITableRemoveButton, UITableStatisticDisplay, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
|
|
168
|
+
export { TTableClickRow, TTableContext, TTableVirtualizerContext, TUITableColumn, TableProviderProps, UITableBadgeDisplay, UITableBooleanDisplay, UITableContainer, UITableDateDisplay, UITableDescriptionDisplay, UITableFilter, UITableFooter, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProvider, UITableRemoveButton, UITableStatisticDisplay, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
|
|
160
169
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Input } from "../../input-
|
|
1
|
+
import { t as Input } from "../../input-BYz8teIQ.mjs";
|
|
2
2
|
import * as react_jsx_runtime295 from "react/jsx-runtime";
|
|
3
3
|
import * as react187 from "react";
|
|
4
4
|
import { AccessorKeyColumnDef, ColumnPinningState, RowData, RowSelectionState, Table } from "@tanstack/react-table";
|
|
@@ -43,6 +43,12 @@ type NameDisplayProps = {
|
|
|
43
43
|
};
|
|
44
44
|
declare const UITableNameDisplay: React.FC<NameDisplayProps>;
|
|
45
45
|
//#endregion
|
|
46
|
+
//#region packages/components/features/tables/components/atoms/permalink.d.ts
|
|
47
|
+
declare const UITablePermalink: React.FC<{
|
|
48
|
+
href: string;
|
|
49
|
+
label?: string;
|
|
50
|
+
}>;
|
|
51
|
+
//#endregion
|
|
46
52
|
//#region packages/components/features/tables/components/atoms/phone-number.d.ts
|
|
47
53
|
declare const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{
|
|
48
54
|
value: string;
|
|
@@ -106,6 +112,7 @@ type TTableContext<TData extends RowData> = {
|
|
|
106
112
|
data: TData[];
|
|
107
113
|
isEmpty: boolean;
|
|
108
114
|
isFetching?: boolean;
|
|
115
|
+
isRefetching?: boolean;
|
|
109
116
|
totalRows?: number;
|
|
110
117
|
rowSelection: RowSelectionState;
|
|
111
118
|
columnPinning: ColumnPinningState;
|
|
@@ -122,6 +129,7 @@ type TTableVirtualizerContext = {
|
|
|
122
129
|
type TableProviderProps<TData extends RowData, TKey extends keyof TData> = {
|
|
123
130
|
title: string;
|
|
124
131
|
isFetching?: boolean;
|
|
132
|
+
isRefetching?: boolean;
|
|
125
133
|
data: TData[];
|
|
126
134
|
columns: TUITableColumn<TData>[];
|
|
127
135
|
totalRows?: number;
|
|
@@ -136,6 +144,7 @@ type TableProviderProps<TData extends RowData, TKey extends keyof TData> = {
|
|
|
136
144
|
declare const UITableProvider: <TData extends RowData, TKey extends keyof TData>({
|
|
137
145
|
title,
|
|
138
146
|
isFetching,
|
|
147
|
+
isRefetching,
|
|
139
148
|
data,
|
|
140
149
|
columns,
|
|
141
150
|
totalRows,
|
|
@@ -156,5 +165,5 @@ declare const UITableTooltipActions: React.FC<{
|
|
|
156
165
|
}>;
|
|
157
166
|
declare const UITableTooltip: React.FC<React.PropsWithChildren>;
|
|
158
167
|
//#endregion
|
|
159
|
-
export { TTableClickRow, TTableContext, TTableVirtualizerContext, TUITableColumn, TableProviderProps, UITableBadgeDisplay, UITableBooleanDisplay, UITableContainer, UITableDateDisplay, UITableDescriptionDisplay, UITableFilter, UITableFooter, UITableMoreButton, UITableNameDisplay, UITablePhoneNumberDisplay, UITableProvider, UITableRemoveButton, UITableStatisticDisplay, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
|
|
168
|
+
export { TTableClickRow, TTableContext, TTableVirtualizerContext, TUITableColumn, TableProviderProps, UITableBadgeDisplay, UITableBooleanDisplay, UITableContainer, UITableDateDisplay, UITableDescriptionDisplay, UITableFilter, UITableFooter, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProvider, UITableRemoveButton, UITableStatisticDisplay, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper };
|
|
160
169
|
//# sourceMappingURL=index.d.mts.map
|