tembro 3.1.9 → 3.1.11
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/CHANGELOG.md +6 -0
- package/dist/components/charts/demo.cjs +1 -0
- package/dist/components/charts/demo.d.ts +6 -0
- package/dist/components/charts/demo.js +1 -0
- package/dist/components/data-table/data-table.d.ts +3 -1
- package/dist/showcase/package-meta.d.ts +2 -2
- package/dist/src/components/charts/demo.cjs +1 -0
- package/dist/src/components/charts/demo.js +5 -0
- package/dist/src/components/data-table/data-table.cjs +1 -1
- package/dist/src/components/data-table/data-table.js +146 -111
- package/dist/src/components/display/kanban.cjs +1 -1
- package/dist/src/components/display/kanban.js +1 -1
- package/dist/src/showcase/index.cjs +1 -1
- package/dist/src/showcase/index.js +18 -16
- package/dist/src/showcase/package-meta.cjs +1 -1
- package/dist/src/showcase/package-meta.js +1 -1
- package/dist/src/showcase/preview-registry.cjs +1 -1
- package/dist/src/showcase/preview-registry.js +290 -288
- package/dist/src/showcase/render-registry-preview.cjs +1 -1
- package/dist/src/showcase/render-registry-preview.js +257 -182
- package/dist/src/showcase/site-data.cjs +1 -1
- package/dist/src/showcase/site-data.js +1 -1
- package/dist/src/showcase/tembro-registry.json.cjs +1 -1
- package/dist/src/showcase/tembro-registry.json.js +2 -2
- package/package.json +1 -1
- package/packages/cli/dist/index.cjs +14 -14
- package/packages/cli/vendor/src/components/charts/demo.tsx +5 -0
- package/packages/cli/vendor/src/components/data-table/data-table.tsx +112 -41
- package/packages/cli/vendor/src/components/display/kanban.tsx +4 -4
- package/packages/cli/vendor/src/showcase/index.ts +6 -4
- package/packages/cli/vendor/src/showcase/package-meta.ts +1 -1
- package/packages/cli/vendor/src/showcase/preview-registry.tsx +2 -0
- package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +36 -0
- package/packages/cli/vendor/src/showcase/tembro-registry.json +5 -2
- package/packages/cli/vendor/templates/showcase/src/App.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/layout/HeroSection.tsx +3 -3
- package/packages/cli/vendor/templates/showcase/src/showcase/layout/WorkbenchSidebar.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/CalendarSection.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/ComponentLivePreview.tsx +286 -13
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/CoreUiSection.tsx +2 -2
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/FormsSection.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/OverlaySection.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/PatternsSection.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/VerificationSection.tsx +1 -1
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/WizardSection.tsx +1 -1
- package/registry.json +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 3.1.11 - 2026-07-16
|
|
6
|
+
|
|
7
|
+
- Removed the fixed max-width shell from the generated showcase workbench so `tembro init` projects can use the full viewport for component QA.
|
|
8
|
+
- Updated generated showcase grids to align items at the start, preventing cards from stretching to unrelated sibling heights on wide dashboards.
|
|
9
|
+
- Synced the full-width showcase template into the vendored CLI assets used by the published package.
|
|
10
|
+
|
|
5
11
|
## 3.1.6 - 2026-07-13
|
|
6
12
|
|
|
7
13
|
- Fixed duplicate selected indicators in Select options.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require("../../src/components/charts/demo.cjs")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../src/components/charts/demo.js"
|
|
@@ -9,6 +9,7 @@ import { type LoadingStateProps } from "@/components/feedback/loading-state";
|
|
|
9
9
|
import { type InputSearchProps } from "@/components/ui/input";
|
|
10
10
|
export type DataTableDensity = "compact" | "default" | "comfortable";
|
|
11
11
|
export type DataTableLoadingVariant = "skeleton" | "state";
|
|
12
|
+
export type DataTableMobileLayout = "auto" | "cards" | "scroll";
|
|
12
13
|
export type DataTableVirtualizationRange = {
|
|
13
14
|
startIndex: number;
|
|
14
15
|
endIndex: number;
|
|
@@ -78,6 +79,7 @@ export type DataTableProps<TData, TValue = unknown> = Omit<React.ComponentProps<
|
|
|
78
79
|
onRowSelectionChange?: OnChangeFn<RowSelectionState>;
|
|
79
80
|
enableRowSelection?: boolean | ((row: Row<TData>) => boolean);
|
|
80
81
|
renderMobileCard?: (row: Row<TData>) => React.ReactNode;
|
|
82
|
+
mobileLayout?: DataTableMobileLayout;
|
|
81
83
|
onRowClick?: (row: Row<TData>) => void;
|
|
82
84
|
onRowDoubleClick?: (row: Row<TData>) => void;
|
|
83
85
|
getRowDisabled?: (row: Row<TData>) => boolean;
|
|
@@ -101,5 +103,5 @@ export type DataTableProps<TData, TValue = unknown> = Omit<React.ComponentProps<
|
|
|
101
103
|
onColumnPinningChange?: OnChangeFn<ColumnPinningState>;
|
|
102
104
|
virtualization?: DataTableVirtualizationConfig | false;
|
|
103
105
|
};
|
|
104
|
-
declare function DataTable<TData, TValue = unknown>({ className, columns, data, title, description, features, search, filters, summary, toolbarActions, rowActions, bulkActions, onRefresh, onExport, refreshLabel, exportLabel, getRowId, isLoading, isError, emptyState, errorState, loadingState, loadingVariant, toolbar, toolbarProps, pagination, sorting, onSortingChange, columnVisibility, onColumnVisibilityChange, rowSelection, onRowSelectionChange, enableRowSelection, renderMobileCard, onRowClick, onRowDoubleClick, getRowDisabled, density, striped, bordered, stickyHeader, skeletonRows, skeletonCellClassName, cellFallback, tableClassName, tableWrapperClassName, headerCellClassName, cellClassName, rowClassName, renderExpandedRow, expanded, onExpandedChange, getRowCanExpand, columnPinning, onColumnPinningChange, virtualization, ...props }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
106
|
+
declare function DataTable<TData, TValue = unknown>({ className, columns, data, title, description, features, search, filters, summary, toolbarActions, rowActions, bulkActions, onRefresh, onExport, refreshLabel, exportLabel, getRowId, isLoading, isError, emptyState, errorState, loadingState, loadingVariant, toolbar, toolbarProps, pagination, sorting, onSortingChange, columnVisibility, onColumnVisibilityChange, rowSelection, onRowSelectionChange, enableRowSelection, renderMobileCard, mobileLayout, onRowClick, onRowDoubleClick, getRowDisabled, density, striped, bordered, stickyHeader, skeletonRows, skeletonCellClassName, cellFallback, tableClassName, tableWrapperClassName, headerCellClassName, cellClassName, rowClassName, renderExpandedRow, expanded, onExpandedChange, getRowCanExpand, columnPinning, onColumnPinningChange, virtualization, ...props }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
105
107
|
export { DataTable };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const PACKAGE_LATEST_VERSION = "3.1.
|
|
1
|
+
export declare const PACKAGE_LATEST_VERSION = "3.1.11";
|
|
2
2
|
export declare const PACKAGE_LATEST_RELEASE_DATE = "July 15, 2026";
|
|
3
|
-
export declare const PACKAGE_DEPENDENCY_RANGE = "3.1.
|
|
3
|
+
export declare const PACKAGE_DEPENDENCY_RANGE = "3.1.11";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../showcase/create-demo.cjs");var t=e.createShowcaseDemoRegistry([e.component(`charts`,`ChartFrame`,`display`,`Chart primitives for dashboard metrics, distribution and trend views.`,`ChartFrame`)]);exports.chartsShowcaseDemoRegistry=t;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { component as e, createShowcaseDemoRegistry as t } from "../../showcase/create-demo.js";
|
|
2
|
+
//#region src/components/charts/demo.tsx
|
|
3
|
+
var n = t([e("charts", "ChartFrame", "display", "Chart primitives for dashboard metrics, distribution and trend views.", "ChartFrame")]);
|
|
4
|
+
//#endregion
|
|
5
|
+
export { n as chartsShowcaseDemoRegistry };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/button/index.cjs"),r=require("../ui/input/index.cjs"),i=require("../ui/table/index.cjs"),a=require("../feedback/loading-state.cjs"),o=require("../display/data-state.cjs"),ee=require("../../../node_modules/@tanstack/react-virtual/dist/esm/index.cjs"),te=require("./data-table-actions-column.cjs"),ne=require("./data-table-bulk-actions.cjs"),re=require("./data-table-column-visibility-menu.cjs"),ie=require("./data-table-pagination.cjs"),ae=require("./data-table-toolbar.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("react/jsx-runtime"),l=require("@tanstack/react-table");var oe={compact:`h-8 px-2 py-1.5`,default:`h-10 px-2 py-2`,comfortable:`h-12 px-3 py-3`},se={compact:`px-2 py-1.5`,default:`p-2`,comfortable:`px-3 py-3`};function ce(e,t){return typeof t==`function`?t(e):t}function le(e,t){return typeof t==`function`?t(e):t}function ue(e,t){return typeof t==`function`?t(e):t}function de(e){return e==null||e===``}function u({className:e,columns:u,data:d,title:f,description:p,features:m,search:h,filters:g,summary:_,toolbarActions:v,rowActions:y,bulkActions:b,onRefresh:x,onExport:S,refreshLabel:fe=`Refresh`,exportLabel:pe=`Export`,getRowId:me,isLoading:C=!1,isError:he=!1,emptyState:ge,errorState:_e,loadingState:ve,loadingVariant:ye=`skeleton`,toolbar:w,toolbarProps:T,pagination:E,sorting:be,onSortingChange:xe,columnVisibility:Se,onColumnVisibilityChange:Ce,rowSelection:we,onRowSelectionChange:Te,enableRowSelection:Ee,renderMobileCard:D,onRowClick:O,onRowDoubleClick:De,getRowDisabled:Oe,density:k=`default`,striped:A=!1,bordered:j=!1,stickyHeader:M=!1,skeletonRows:ke=6,skeletonCellClassName:Ae,cellFallback:je=`-`,tableClassName:Me,tableWrapperClassName:Ne,headerCellClassName:Pe,cellClassName:Fe,rowClassName:Ie,renderExpandedRow:N,expanded:Le,onExpandedChange:Re,getRowCanExpand:ze,columnPinning:P,onColumnPinningChange:Be,virtualization:F,...Ve}){let He=s.useMemo(()=>{let e=u;return!y||m?.rowActions===!1?e:[...e,te.createDataTableActionsColumn({getActions:y})]},[u,m?.rowActions,y]),I=E===!1?void 0:E,Ue=I?{pageIndex:I.pageIndex,pageSize:I.pageSize}:void 0,L=!!(I&&I.manual!==!1),We=we??{},R=(0,l.useReactTable)({data:d,columns:He,getRowId:me,getCoreRowModel:(0,l.getCoreRowModel)(),getPaginationRowModel:I&&!L?(0,l.getPaginationRowModel)():void 0,manualPagination:L,pageCount:I?.pageCount,state:{sorting:be,columnVisibility:Se,rowSelection:We,pagination:Ue,expanded:Le,...P?{columnPinning:P}:{}},onSortingChange:xe,onColumnVisibilityChange:Ce,onRowSelectionChange:Te,onExpandedChange:Re,onColumnPinningChange:Be,enableRowSelection:Ee,getRowCanExpand:ze,getExpandedRowModel:(0,l.getExpandedRowModel)()}),z=R.getRowModel().rows,Ge=s.useRef(null),B=F===!1?void 0:F,V=!!(B&&B.enabled!==!1&&z.length>0),H=B?.height??480,Ke=B?.onRangeChange,U=ee.useVirtualizer({count:V?z.length:0,getScrollElement:()=>Ge.current,estimateSize:()=>B?.estimateRowHeight??48,getItemKey:e=>z[e]?.id??e,overscan:B?.overscan??8,initialRect:{width:0,height:typeof H==`number`?H:480},onChange(e){if(!Ke)return;let t=e.getVirtualItems();Ke({startIndex:t[0]?.index??-1,endIndex:t.at(-1)?.index??-1})}}),qe=V?U.getVirtualItems():[],W=B?.estimateRowHeight??48,Je=V?Math.min(z.length,Math.ceil((typeof H==`number`?H:480)/W)+(B?.overscan??8)):0,G=qe.length>0?qe:Array.from({length:Je},(e,t)=>({key:z[t]?.id??t,index:t,start:t*W,end:(t+1)*W,size:W,lane:0})),Ye=G[0]?.start??0,Xe=G.length?Math.max(U.getTotalSize()-G[G.length-1].end,0):0,K=R.getSelectedRowModel().rows.map(e=>e.original),Ze=K.length,q=s.useMemo(()=>({table:R,data:d,selectedRows:K}),[d,K,R]),Qe=R.getVisibleLeafColumns(),$e=Math.max(Qe.length,1),et=typeof w==`function`?w(R):w,tt=typeof T==`function`?T(R):T,J=typeof g==`function`?g(q):g,Y=typeof _==`function`?_(q):_,nt=!!(h&&m?.search!==!1),rt=!!(m?.columnVisibility&&R.getAllLeafColumns().some(e=>e.getCanHide())),X=!!(m?.refresh&&x),Z=!!(m?.export&&S),it=!!(m?.bulkActions!==!1&&b?.length),at=rt&&!!(f||p||h||J||Y||v||X||Z),ot=nt&&h?(0,c.jsx)(r.Input,{type:`search`,value:h.value,onValueChange:h.onValueChange,placeholder:h.placeholder??`Search...`,wrapperClassName:h.wrapperClassName??h.className,inputClassName:h.inputClassName,disabled:h.disabled,clearable:h.clearable,clearLabel:h.clearLabel,searchIcon:h.searchIcon}):void 0,st=(0,c.jsxs)(c.Fragment,{children:[typeof v==`function`?v(q):v,at&&(0,c.jsx)(re.DataTableColumnVisibilityMenu,{table:R}),X&&(0,c.jsx)(n.Button,{type:`button`,variant:`outline`,size:`sm`,disabled:C,onClick:()=>x?.(q),children:fe}),Z&&(0,c.jsx)(n.Button,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>S?.(q),children:pe})]}),ct=it?(0,c.jsx)(ne.DataTableBulkActions,{rows:K,actions:b??[],selectedLabel:()=>`Actions`,clearLabel:null,onClearSelection:()=>R.resetRowSelection(),hideWhenEmpty:!1}):void 0,lt=!!(et||tt||f||p||ot||J||Y||v||at||X||Z||ct),ut=!!(I&&!I.hidden),Q=C&&ye===`skeleton`,dt=(e,t)=>t>0?(0,c.jsx)(i.TableRow,{"aria-hidden":`true`,className:`pointer-events-none border-0 hover:bg-transparent`,children:(0,c.jsx)(i.TableCell,{colSpan:$e,className:`border-0 p-0`,style:{height:t}})},e):null,ft=e=>(0,c.jsx)(i.TableRow,{children:(0,c.jsx)(i.TableCell,{colSpan:$e,className:`p-0`,children:e})}),pt=()=>Array.from({length:Math.max(ke,1)},(e,n)=>(0,c.jsx)(i.TableRow,{"aria-hidden":`true`,children:Qe.map(e=>(0,c.jsx)(i.TableCell,{className:t.cn(se[k],j&&`border-r last:border-r-0`),children:(0,c.jsx)(`div`,{className:t.cn(`h-4 w-full max-w-40 animate-pulse rounded-md bg-muted`,n%3==1&&`max-w-24`,n%3==2&&`max-w-32`,Ae)})},`${e.id}-${n}`))},`skeleton-${n}`)),$=Q?null:C?(0,c.jsx)(a.LoadingState,{label:`Loading data...`,...ve}):he?(0,c.jsx)(o.DataState,{status:`error`,title:`Could not load data`,description:`Please try again.`,variant:`plain`,..._e}):z.length===0?(0,c.jsx)(o.DataState,{status:`empty`,variant:`plain`,...ge}):null,mt=(e,n,r)=>{let a=Oe?.(e)??!1;return(0,c.jsxs)(s.Fragment,{children:[(0,c.jsx)(i.TableRow,{ref:r&&B?.measureRows!==!1?U.measureElement:void 0,"data-index":r?.index,"data-state":e.getIsSelected()?`selected`:void 0,"data-striped":A&&n%2==1?`true`:void 0,"data-disabled":a||void 0,className:t.cn(O&&!a&&`cursor-pointer`,!a&&`transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)] data-[state=selected]:bg-[color:color-mix(in_oklch,var(--primary),transparent_90%)]`,a&&`pointer-events-none opacity-55`,ce(e,Ie)),onClick:()=>{a||O?.(e)},onDoubleClick:()=>{a||De?.(e)},children:e.getVisibleCells().map(e=>{let n=(0,l.flexRender)(e.column.columnDef.cell,e.getContext());return(0,c.jsx)(i.TableCell,{style:{...e.column.getIsPinned()===`left`?{left:`${e.column.getStart(`left`)}px`,position:`sticky`,zIndex:10}:{},...e.column.getIsPinned()===`right`?{right:`${e.column.getAfter(`right`)}px`,position:`sticky`,zIndex:10}:{}},className:t.cn(se[k],e.column.getIsPinned()&&`bg-card shadow-[1px_0_0_var(--border)]`,j&&`border-r last:border-r-0`,ue(e,Fe)),children:de(n)?je:n},e.id)})}),e.getIsExpanded()&&N?(0,c.jsx)(i.TableRow,{className:`bg-muted/50 hover:bg-muted/50`,children:(0,c.jsx)(i.TableCell,{colSpan:e.getVisibleCells().length,children:N(e)})}):null]},e.id)};return(0,c.jsxs)(`div`,{"data-slot":`data-table`,className:t.cn(`grid gap-3`,e),...Ve,children:[lt&&(et??(0,c.jsx)(ae.DataTableToolbar,{title:f,description:p,search:ot,filters:J,summary:Y,actions:st,selectionActions:ct,selectedCount:Ze,totalCount:I?I.rowCount??d.length:d.length,variant:`plain`,...tt})),D&&(0,c.jsx)(`div`,{className:`grid gap-3 md:hidden`,children:$??(Q?(0,c.jsx)(a.LoadingState,{label:`Loading data...`,...ve}):z.map(e=>(0,c.jsx)(s.Fragment,{children:D(e)},e.id)))}),(0,c.jsxs)(`div`,{"data-slot":`data-table-wrapper`,"data-density":k,"data-striped":A||void 0,"data-bordered":j||void 0,"data-virtualized":V||void 0,className:t.cn(`overflow-hidden rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))] backdrop-blur`,D&&`hidden md:block`,Ne),children:[(0,c.jsxs)(i.Table,{containerRef:Ge,containerStyle:V?{height:H,overscrollBehavior:`contain`}:void 0,containerClassName:t.cn(`rounded-none border-0 bg-transparent shadow-none ring-0`,V&&`overflow-auto`),className:t.cn(`text-[0.95rem]`,Me),"aria-rowcount":z.length,children:[(0,c.jsx)(i.TableHeader,{className:t.cn((M||V)&&`sticky top-0 z-10 shadow-sm backdrop-blur`),children:R.getHeaderGroups().map(e=>(0,c.jsx)(i.TableRow,{children:e.headers.map(e=>(0,c.jsx)(i.TableHead,{style:{width:e.getSize(),...e.column.getIsPinned()===`left`?{left:`${e.column.getStart(`left`)}px`,position:`sticky`,zIndex:M?20:11}:{},...e.column.getIsPinned()===`right`?{right:`${e.column.getAfter(`right`)}px`,position:`sticky`,zIndex:M?20:11}:{}},className:t.cn(oe[k],`bg-[color:color-mix(in_oklch,var(--card),var(--background)_10%)] text-muted-foreground`,(M||V)&&`bg-[color:color-mix(in_oklch,var(--card),transparent_12%)] backdrop-blur`,e.column.getIsPinned()&&`bg-card shadow-[1px_0_0_var(--border)]`,j&&`border-r last:border-r-0`,le(e,Pe)),children:e.isPlaceholder?null:(0,l.flexRender)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,c.jsx)(i.TableBody,{children:$?ft($):Q?pt():V?[dt(`virtual-top`,Ye),...G.map(e=>mt(z[e.index],e.index,e)),dt(`virtual-bottom`,Xe)]:z.map((e,t)=>mt(e,t))})]}),ut&&I&&(0,c.jsx)(ie.DataTablePagination,{pageIndex:I.pageIndex,pageSize:I.pageSize,pageCount:I.pageCount,rowCount:I.rowCount,pageSizeOptions:I.pageSizeOptions,showPageSize:I.showPageSize,labels:I.labels,disabled:C,onPageChange:I.onPageChange,onPageSizeChange:I.onPageSizeChange})]})]})}exports.DataTable=u;
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/button/index.cjs"),r=require("../ui/input/index.cjs"),i=require("../ui/table/index.cjs"),a=require("../../hooks/use-is-mobile.cjs"),o=require("../feedback/loading-state.cjs"),s=require("../display/data-state.cjs"),ee=require("../../../node_modules/@tanstack/react-virtual/dist/esm/index.cjs"),te=require("./data-table-actions-column.cjs"),ne=require("./data-table-bulk-actions.cjs"),re=require("./data-table-column-visibility-menu.cjs"),ie=require("./data-table-pagination.cjs"),ae=require("./data-table-toolbar.cjs");let c=require("react");c=e.__toESM(c,1);let l=require("react/jsx-runtime"),u=require("@tanstack/react-table");var oe={compact:`h-8 px-2 py-1.5`,default:`h-10 px-2 py-2`,comfortable:`h-12 px-3 py-3`},se={compact:`px-2 py-1.5`,default:`p-2`,comfortable:`px-3 py-3`};function ce(e,t){return typeof t==`function`?t(e):t}function le(e,t){return typeof t==`function`?t(e):t}function ue(e,t){return typeof t==`function`?t(e):t}function de(e){return e==null||e===``}function fe(e){let t=e.column.columnDef.header;return typeof t==`string`?t:typeof t==`number`?String(t):e.column.id===`actions`?`Actions`:e.column.id}function d({className:e,columns:d,data:f,title:p,description:m,features:h,search:g,filters:_,summary:v,toolbarActions:y,rowActions:b,bulkActions:x,onRefresh:pe,onExport:S,refreshLabel:me=`Refresh`,exportLabel:he=`Export`,getRowId:ge,isLoading:C=!1,isError:_e=!1,emptyState:ve,errorState:ye,loadingState:be,loadingVariant:xe=`skeleton`,toolbar:w,toolbarProps:T,pagination:E,sorting:Se,onSortingChange:Ce,columnVisibility:we,onColumnVisibilityChange:Te,rowSelection:Ee,onRowSelectionChange:De,enableRowSelection:Oe,renderMobileCard:D,mobileLayout:ke=`auto`,onRowClick:O,onRowDoubleClick:Ae,getRowDisabled:k,density:A=`default`,striped:j=!1,bordered:M=!1,stickyHeader:N=!1,skeletonRows:je=6,skeletonCellClassName:Me,cellFallback:P=`-`,tableClassName:Ne,tableWrapperClassName:Pe,headerCellClassName:Fe,cellClassName:Ie,rowClassName:F,renderExpandedRow:Le,expanded:Re,onExpandedChange:ze,getRowCanExpand:Be,columnPinning:Ve,onColumnPinningChange:He,virtualization:Ue,...We}){let Ge=c.useMemo(()=>{let e=d;return!b||h?.rowActions===!1?e:[...e,te.createDataTableActionsColumn({getActions:b})]},[d,h?.rowActions,b]),I=E===!1?void 0:E,Ke=I?{pageIndex:I.pageIndex,pageSize:I.pageSize}:void 0,qe=!!(I&&I.manual!==!1),Je=Ee??{},L=(0,u.useReactTable)({data:f,columns:Ge,getRowId:ge,getCoreRowModel:(0,u.getCoreRowModel)(),getPaginationRowModel:I&&!qe?(0,u.getPaginationRowModel)():void 0,manualPagination:qe,pageCount:I?.pageCount,state:{sorting:Se,columnVisibility:we,rowSelection:Je,pagination:Ke,expanded:Re,...Ve?{columnPinning:Ve}:{}},onSortingChange:Ce,onColumnVisibilityChange:Te,onRowSelectionChange:De,onExpandedChange:ze,onColumnPinningChange:He,enableRowSelection:Oe,getRowCanExpand:Be,getExpandedRowModel:(0,u.getExpandedRowModel)()}),R=L.getRowModel().rows,Ye=c.useRef(null),z=Ue===!1?void 0:Ue,B=!!(z&&z.enabled!==!1&&R.length>0),V=z?.height??480,Xe=z?.onRangeChange,H=ee.useVirtualizer({count:B?R.length:0,getScrollElement:()=>Ye.current,estimateSize:()=>z?.estimateRowHeight??48,getItemKey:e=>R[e]?.id??e,overscan:z?.overscan??8,initialRect:{width:0,height:typeof V==`number`?V:480},onChange(e){if(!Xe)return;let t=e.getVirtualItems();Xe({startIndex:t[0]?.index??-1,endIndex:t.at(-1)?.index??-1})}}),Ze=B?H.getVirtualItems():[],U=z?.estimateRowHeight??48,Qe=B?Math.min(R.length,Math.ceil((typeof V==`number`?V:480)/U)+(z?.overscan??8)):0,W=Ze.length>0?Ze:Array.from({length:Qe},(e,t)=>({key:R[t]?.id??t,index:t,start:t*U,end:(t+1)*U,size:U,lane:0})),$e=W[0]?.start??0,et=W.length?Math.max(H.getTotalSize()-W[W.length-1].end,0):0,G=L.getSelectedRowModel().rows.map(e=>e.original),tt=G.length,K=c.useMemo(()=>({table:L,data:f,selectedRows:G}),[f,G,L]),nt=L.getVisibleLeafColumns(),rt=Math.max(nt.length,1),it=typeof w==`function`?w(L):w,at=typeof T==`function`?T(L):T,q=typeof _==`function`?_(K):_,J=typeof v==`function`?v(K):v,ot=!!(g&&h?.search!==!1),st=!!(h?.columnVisibility&&L.getAllLeafColumns().some(e=>e.getCanHide())),Y=!!(h?.refresh&&pe),X=!!(h?.export&&S),ct=!!(h?.bulkActions!==!1&&x?.length),lt=st&&!!(p||m||g||q||J||y||Y||X),ut=ot&&g?(0,l.jsx)(r.Input,{type:`search`,value:g.value,onValueChange:g.onValueChange,placeholder:g.placeholder??`Search...`,wrapperClassName:g.wrapperClassName??g.className,inputClassName:g.inputClassName,disabled:g.disabled,clearable:g.clearable,clearLabel:g.clearLabel,searchIcon:g.searchIcon}):void 0,dt=(0,l.jsxs)(l.Fragment,{children:[typeof y==`function`?y(K):y,lt&&(0,l.jsx)(re.DataTableColumnVisibilityMenu,{table:L}),Y&&(0,l.jsx)(n.Button,{type:`button`,variant:`outline`,size:`sm`,disabled:C,onClick:()=>pe?.(K),children:me}),X&&(0,l.jsx)(n.Button,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>S?.(K),children:he})]}),ft=ct?(0,l.jsx)(ne.DataTableBulkActions,{rows:G,actions:x??[],selectedLabel:()=>`Actions`,clearLabel:null,onClearSelection:()=>L.resetRowSelection(),hideWhenEmpty:!1}):void 0,pt=!!(it||at||p||m||ut||q||J||y||lt||Y||X||ft),mt=!!(I&&!I.hidden),Z=C&&xe===`skeleton`,ht=a.useIsMobile(),gt=ke!==`scroll`&&ht,_t=(e,t)=>t>0?(0,l.jsx)(i.TableRow,{"aria-hidden":`true`,className:`pointer-events-none border-0 hover:bg-transparent`,children:(0,l.jsx)(i.TableCell,{colSpan:rt,className:`border-0 p-0`,style:{height:t}})},e):null,vt=e=>(0,l.jsx)(i.TableRow,{children:(0,l.jsx)(i.TableCell,{colSpan:rt,className:`p-0`,children:e})}),yt=()=>Array.from({length:Math.max(je,1)},(e,n)=>(0,l.jsx)(i.TableRow,{"aria-hidden":`true`,children:nt.map(e=>(0,l.jsx)(i.TableCell,{className:t.cn(se[A],M&&`border-r last:border-r-0`),children:(0,l.jsx)(`div`,{className:t.cn(`h-4 w-full max-w-40 animate-pulse rounded-md bg-muted`,n%3==1&&`max-w-24`,n%3==2&&`max-w-32`,Me)})},`${e.id}-${n}`))},`skeleton-${n}`)),Q=Z?null:C?(0,l.jsx)(o.LoadingState,{label:`Loading data...`,...be}):_e?(0,l.jsx)(s.DataState,{status:`error`,title:`Could not load data`,description:`Please try again.`,variant:`plain`,...ye}):R.length===0?(0,l.jsx)(s.DataState,{status:`empty`,variant:`plain`,...ve}):null,$=(e,n,r)=>{let a=k?.(e)??!1;return(0,l.jsxs)(c.Fragment,{children:[(0,l.jsx)(i.TableRow,{ref:r&&z?.measureRows!==!1?H.measureElement:void 0,"data-index":r?.index,"data-state":e.getIsSelected()?`selected`:void 0,"data-striped":j&&n%2==1?`true`:void 0,"data-disabled":a||void 0,className:t.cn(O&&!a&&`cursor-pointer`,!a&&`transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)] data-[state=selected]:bg-[color:color-mix(in_oklch,var(--primary),transparent_90%)]`,a&&`pointer-events-none opacity-55`,ce(e,F)),onClick:()=>{a||O?.(e)},onDoubleClick:()=>{a||Ae?.(e)},children:e.getVisibleCells().map(e=>{let n=(0,u.flexRender)(e.column.columnDef.cell,e.getContext());return(0,l.jsx)(i.TableCell,{style:{...e.column.getIsPinned()===`left`?{left:`${e.column.getStart(`left`)}px`,position:`sticky`,zIndex:10}:{},...e.column.getIsPinned()===`right`?{right:`${e.column.getAfter(`right`)}px`,position:`sticky`,zIndex:10}:{}},className:t.cn(se[A],e.column.getIsPinned()&&`bg-card shadow-[1px_0_0_var(--border)]`,M&&`border-r last:border-r-0`,ue(e,Ie)),children:de(n)?P:n},e.id)})}),e.getIsExpanded()&&Le?(0,l.jsx)(i.TableRow,{className:`bg-muted/50 hover:bg-muted/50`,children:(0,l.jsx)(i.TableCell,{colSpan:e.getVisibleCells().length,children:Le(e)})}):null]},e.id)},bt=e=>{let n=k?.(e)??!1,r=e.getVisibleCells();return(0,l.jsx)(`article`,{"data-slot":`data-table-mobile-card`,"data-state":e.getIsSelected()?`selected`:void 0,"data-disabled":n||void 0,className:t.cn(`grid gap-3 rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card p-3 shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))]`,O&&!n&&`cursor-pointer transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)]`,n&&`pointer-events-none opacity-55`,ce(e,F)),role:O&&!n?`button`:void 0,tabIndex:O&&!n?0:void 0,onClick:()=>{n||O?.(e)},onKeyDown:t=>{t.target!==t.currentTarget||n||!O||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),O(e))},children:r.map(e=>{let t=(0,u.flexRender)(e.column.columnDef.cell,e.getContext());return(0,l.jsxs)(`div`,{"data-slot":`data-table-mobile-cell`,className:`grid grid-cols-[minmax(7rem,0.42fr)_minmax(0,1fr)] items-start gap-3 text-sm`,children:[(0,l.jsx)(`span`,{className:`min-w-0 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:fe(e)}),(0,l.jsx)(`div`,{className:`min-w-0 text-right text-foreground/92 [&>*]:ml-auto`,children:de(t)?P:t})]},e.id)})},e.id)};return(0,l.jsxs)(`div`,{"data-slot":`data-table`,className:t.cn(`grid gap-3`,e),...We,children:[pt&&(it??(0,l.jsx)(ae.DataTableToolbar,{title:p,description:m,search:ut,filters:q,summary:J,actions:dt,selectionActions:ft,selectedCount:tt,totalCount:I?I.rowCount??f.length:f.length,variant:`plain`,...at})),gt&&(0,l.jsx)(`div`,{className:`grid gap-3`,children:Q??(Z?(0,l.jsx)(o.LoadingState,{label:`Loading data...`,...be}):R.map(e=>(0,l.jsx)(c.Fragment,{children:D?D(e):bt(e)},e.id)))}),!gt&&(0,l.jsxs)(`div`,{"data-slot":`data-table-wrapper`,"data-density":A,"data-striped":j||void 0,"data-bordered":M||void 0,"data-virtualized":B||void 0,className:t.cn(`overflow-hidden rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))] backdrop-blur`,Pe),children:[(0,l.jsxs)(i.Table,{containerRef:Ye,containerStyle:B?{height:V,overscrollBehavior:`contain`}:void 0,containerClassName:t.cn(`rounded-none border-0 bg-transparent shadow-none ring-0`,B&&`overflow-auto`),className:t.cn(`text-[0.95rem]`,Ne),"aria-rowcount":R.length,children:[(0,l.jsx)(i.TableHeader,{className:t.cn((N||B)&&`sticky top-0 z-10 shadow-sm backdrop-blur`),children:L.getHeaderGroups().map(e=>(0,l.jsx)(i.TableRow,{children:e.headers.map(e=>(0,l.jsx)(i.TableHead,{style:{width:e.getSize(),...e.column.getIsPinned()===`left`?{left:`${e.column.getStart(`left`)}px`,position:`sticky`,zIndex:N?20:11}:{},...e.column.getIsPinned()===`right`?{right:`${e.column.getAfter(`right`)}px`,position:`sticky`,zIndex:N?20:11}:{}},className:t.cn(oe[A],`bg-[color:color-mix(in_oklch,var(--card),var(--background)_10%)] text-muted-foreground`,(N||B)&&`bg-[color:color-mix(in_oklch,var(--card),transparent_12%)] backdrop-blur`,e.column.getIsPinned()&&`bg-card shadow-[1px_0_0_var(--border)]`,M&&`border-r last:border-r-0`,le(e,Fe)),children:e.isPlaceholder?null:(0,u.flexRender)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,l.jsx)(i.TableBody,{children:Q?vt(Q):Z?yt():B?[_t(`virtual-top`,$e),...W.map(e=>$(R[e.index],e.index,e)),_t(`virtual-bottom`,et)]:R.map((e,t)=>$(e,t))})]}),mt&&I&&(0,l.jsx)(ie.DataTablePagination,{pageIndex:I.pageIndex,pageSize:I.pageSize,pageCount:I.pageCount,rowCount:I.rowCount,pageSizeOptions:I.pageSizeOptions,showPageSize:I.showPageSize,labels:I.labels,disabled:C,onPageChange:I.onPageChange,onPageSizeChange:I.onPageSizeChange})]})]})}exports.DataTable=d;
|
|
@@ -3,77 +3,82 @@ import { cn as e } from "../../lib/utils.js";
|
|
|
3
3
|
import { Button as t } from "../ui/button/index.js";
|
|
4
4
|
import { Input as n } from "../ui/input/index.js";
|
|
5
5
|
import { Table as r, TableBody as i, TableCell as a, TableHead as ee, TableHeader as te, TableRow as o } from "../ui/table/index.js";
|
|
6
|
+
import { useIsMobile as ne } from "../../hooks/use-is-mobile.js";
|
|
6
7
|
import { LoadingState as s } from "../feedback/loading-state.js";
|
|
7
|
-
import { DataState as
|
|
8
|
-
import { useVirtualizer as
|
|
9
|
-
import { createDataTableActionsColumn as
|
|
10
|
-
import { DataTableBulkActions as
|
|
11
|
-
import { DataTableColumnVisibilityMenu as
|
|
12
|
-
import { DataTablePagination as
|
|
13
|
-
import { DataTableToolbar as
|
|
8
|
+
import { DataState as re } from "../display/data-state.js";
|
|
9
|
+
import { useVirtualizer as ie } from "../../../node_modules/@tanstack/react-virtual/dist/esm/index.js";
|
|
10
|
+
import { createDataTableActionsColumn as ae } from "./data-table-actions-column.js";
|
|
11
|
+
import { DataTableBulkActions as oe } from "./data-table-bulk-actions.js";
|
|
12
|
+
import { DataTableColumnVisibilityMenu as se } from "./data-table-column-visibility-menu.js";
|
|
13
|
+
import { DataTablePagination as ce } from "./data-table-pagination.js";
|
|
14
|
+
import { DataTableToolbar as le } from "./data-table-toolbar.js";
|
|
14
15
|
import * as c from "react";
|
|
15
|
-
import { Fragment as
|
|
16
|
-
import { flexRender as d, getCoreRowModel as
|
|
16
|
+
import { Fragment as ue, jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
17
|
+
import { flexRender as d, getCoreRowModel as de, getExpandedRowModel as fe, getPaginationRowModel as pe, useReactTable as me } from "@tanstack/react-table";
|
|
17
18
|
//#region src/components/data-table/data-table.tsx
|
|
18
|
-
var
|
|
19
|
+
var he = {
|
|
19
20
|
compact: "h-8 px-2 py-1.5",
|
|
20
21
|
default: "h-10 px-2 py-2",
|
|
21
22
|
comfortable: "h-12 px-3 py-3"
|
|
22
|
-
},
|
|
23
|
+
}, ge = {
|
|
23
24
|
compact: "px-2 py-1.5",
|
|
24
25
|
default: "p-2",
|
|
25
26
|
comfortable: "px-3 py-3"
|
|
26
27
|
};
|
|
27
|
-
function ge(e, t) {
|
|
28
|
-
return typeof t == "function" ? t(e) : t;
|
|
29
|
-
}
|
|
30
28
|
function _e(e, t) {
|
|
31
29
|
return typeof t == "function" ? t(e) : t;
|
|
32
30
|
}
|
|
33
31
|
function ve(e, t) {
|
|
34
32
|
return typeof t == "function" ? t(e) : t;
|
|
35
33
|
}
|
|
36
|
-
function ye(e) {
|
|
34
|
+
function ye(e, t) {
|
|
35
|
+
return typeof t == "function" ? t(e) : t;
|
|
36
|
+
}
|
|
37
|
+
function be(e) {
|
|
37
38
|
return e == null || e === "";
|
|
38
39
|
}
|
|
39
|
-
function
|
|
40
|
-
let
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
function xe(e) {
|
|
41
|
+
let t = e.column.columnDef.header;
|
|
42
|
+
return typeof t == "string" ? t : typeof t == "number" ? String(t) : e.column.id === "actions" ? "Actions" : e.column.id;
|
|
43
|
+
}
|
|
44
|
+
function Se({ className: Se, columns: Ce, data: f, title: p, description: m, features: h, search: g, filters: _, summary: v, toolbarActions: y, rowActions: b, bulkActions: we, onRefresh: Te, onExport: x, refreshLabel: Ee = "Refresh", exportLabel: De = "Export", getRowId: Oe, isLoading: S = !1, isError: ke = !1, emptyState: Ae, errorState: je, loadingState: C, loadingVariant: Me = "skeleton", toolbar: w, toolbarProps: T, pagination: E, sorting: Ne, onSortingChange: Pe, columnVisibility: Fe, onColumnVisibilityChange: Ie, rowSelection: Le, onRowSelectionChange: Re, enableRowSelection: ze, renderMobileCard: D, mobileLayout: Be = "auto", onRowClick: O, onRowDoubleClick: Ve, getRowDisabled: k, density: A = "default", striped: j = !1, bordered: M = !1, stickyHeader: N = !1, skeletonRows: He = 6, skeletonCellClassName: Ue, cellFallback: P = "-", tableClassName: We, tableWrapperClassName: Ge, headerCellClassName: Ke, cellClassName: qe, rowClassName: F, renderExpandedRow: Je, expanded: Ye, onExpandedChange: Xe, getRowCanExpand: Ze, columnPinning: Qe, onColumnPinningChange: $e, virtualization: et, ...tt }) {
|
|
45
|
+
let nt = c.useMemo(() => {
|
|
46
|
+
let e = Ce;
|
|
47
|
+
return !b || h?.rowActions === !1 ? e : [...e, ae({ getActions: b })];
|
|
43
48
|
}, [
|
|
44
|
-
|
|
49
|
+
Ce,
|
|
45
50
|
h?.rowActions,
|
|
46
51
|
b
|
|
47
|
-
]), I = E === !1 ? void 0 : E,
|
|
52
|
+
]), I = E === !1 ? void 0 : E, rt = I ? {
|
|
48
53
|
pageIndex: I.pageIndex,
|
|
49
54
|
pageSize: I.pageSize
|
|
50
|
-
} : void 0,
|
|
55
|
+
} : void 0, it = !!(I && I.manual !== !1), at = Le ?? {}, L = me({
|
|
51
56
|
data: f,
|
|
52
|
-
columns:
|
|
53
|
-
getRowId:
|
|
54
|
-
getCoreRowModel:
|
|
55
|
-
getPaginationRowModel: I && !
|
|
56
|
-
manualPagination:
|
|
57
|
+
columns: nt,
|
|
58
|
+
getRowId: Oe,
|
|
59
|
+
getCoreRowModel: de(),
|
|
60
|
+
getPaginationRowModel: I && !it ? pe() : void 0,
|
|
61
|
+
manualPagination: it,
|
|
57
62
|
pageCount: I?.pageCount,
|
|
58
63
|
state: {
|
|
59
|
-
sorting:
|
|
60
|
-
columnVisibility:
|
|
61
|
-
rowSelection:
|
|
62
|
-
pagination:
|
|
63
|
-
expanded:
|
|
64
|
-
...
|
|
64
|
+
sorting: Ne,
|
|
65
|
+
columnVisibility: Fe,
|
|
66
|
+
rowSelection: at,
|
|
67
|
+
pagination: rt,
|
|
68
|
+
expanded: Ye,
|
|
69
|
+
...Qe ? { columnPinning: Qe } : {}
|
|
65
70
|
},
|
|
66
|
-
onSortingChange:
|
|
67
|
-
onColumnVisibilityChange:
|
|
68
|
-
onRowSelectionChange:
|
|
69
|
-
onExpandedChange:
|
|
70
|
-
onColumnPinningChange:
|
|
71
|
-
enableRowSelection:
|
|
72
|
-
getRowCanExpand:
|
|
73
|
-
getExpandedRowModel:
|
|
74
|
-
}), R = L.getRowModel().rows,
|
|
71
|
+
onSortingChange: Pe,
|
|
72
|
+
onColumnVisibilityChange: Ie,
|
|
73
|
+
onRowSelectionChange: Re,
|
|
74
|
+
onExpandedChange: Xe,
|
|
75
|
+
onColumnPinningChange: $e,
|
|
76
|
+
enableRowSelection: ze,
|
|
77
|
+
getRowCanExpand: Ze,
|
|
78
|
+
getExpandedRowModel: fe()
|
|
79
|
+
}), R = L.getRowModel().rows, ot = c.useRef(null), z = et === !1 ? void 0 : et, B = !!(z && z.enabled !== !1 && R.length > 0), V = z?.height ?? 480, st = z?.onRangeChange, H = ie({
|
|
75
80
|
count: B ? R.length : 0,
|
|
76
|
-
getScrollElement: () =>
|
|
81
|
+
getScrollElement: () => ot.current,
|
|
77
82
|
estimateSize: () => z?.estimateRowHeight ?? 48,
|
|
78
83
|
getItemKey: (e) => R[e]?.id ?? e,
|
|
79
84
|
overscan: z?.overscan ?? 8,
|
|
@@ -82,21 +87,21 @@ function be({ className: be, columns: xe, data: f, title: p, description: m, fea
|
|
|
82
87
|
height: typeof V == "number" ? V : 480
|
|
83
88
|
},
|
|
84
89
|
onChange(e) {
|
|
85
|
-
if (!
|
|
90
|
+
if (!st) return;
|
|
86
91
|
let t = e.getVirtualItems();
|
|
87
|
-
|
|
92
|
+
st({
|
|
88
93
|
startIndex: t[0]?.index ?? -1,
|
|
89
94
|
endIndex: t.at(-1)?.index ?? -1
|
|
90
95
|
});
|
|
91
96
|
}
|
|
92
|
-
}),
|
|
97
|
+
}), ct = B ? H.getVirtualItems() : [], U = z?.estimateRowHeight ?? 48, lt = B ? Math.min(R.length, Math.ceil((typeof V == "number" ? V : 480) / U) + (z?.overscan ?? 8)) : 0, W = ct.length > 0 ? ct : Array.from({ length: lt }, (e, t) => ({
|
|
93
98
|
key: R[t]?.id ?? t,
|
|
94
99
|
index: t,
|
|
95
100
|
start: t * U,
|
|
96
101
|
end: (t + 1) * U,
|
|
97
102
|
size: U,
|
|
98
103
|
lane: 0
|
|
99
|
-
})),
|
|
104
|
+
})), ut = W[0]?.start ?? 0, dt = W.length ? Math.max(H.getTotalSize() - W[W.length - 1].end, 0) : 0, G = L.getSelectedRowModel().rows.map((e) => e.original), ft = G.length, K = c.useMemo(() => ({
|
|
100
105
|
table: L,
|
|
101
106
|
data: f,
|
|
102
107
|
selectedRows: G
|
|
@@ -104,7 +109,7 @@ function be({ className: be, columns: xe, data: f, title: p, description: m, fea
|
|
|
104
109
|
f,
|
|
105
110
|
G,
|
|
106
111
|
L
|
|
107
|
-
]),
|
|
112
|
+
]), pt = L.getVisibleLeafColumns(), mt = Math.max(pt.length, 1), ht = typeof w == "function" ? w(L) : w, gt = typeof T == "function" ? T(L) : T, q = typeof _ == "function" ? _(K) : _, J = typeof v == "function" ? v(K) : v, _t = !!(g && h?.search !== !1), vt = !!(h?.columnVisibility && L.getAllLeafColumns().some((e) => e.getCanHide())), Y = !!(h?.refresh && Te), X = !!(h?.export && x), yt = !!(h?.bulkActions !== !1 && we?.length), bt = vt && !!(p || m || g || q || J || y || Y || X), xt = _t && g ? /* @__PURE__ */ l(n, {
|
|
108
113
|
type: "search",
|
|
109
114
|
value: g.value,
|
|
110
115
|
onValueChange: g.onValueChange,
|
|
@@ -115,76 +120,76 @@ function be({ className: be, columns: xe, data: f, title: p, description: m, fea
|
|
|
115
120
|
clearable: g.clearable,
|
|
116
121
|
clearLabel: g.clearLabel,
|
|
117
122
|
searchIcon: g.searchIcon
|
|
118
|
-
}) : void 0,
|
|
123
|
+
}) : void 0, St = /* @__PURE__ */ u(ue, { children: [
|
|
119
124
|
typeof y == "function" ? y(K) : y,
|
|
120
|
-
|
|
121
|
-
|
|
125
|
+
bt && /* @__PURE__ */ l(se, { table: L }),
|
|
126
|
+
Y && /* @__PURE__ */ l(t, {
|
|
122
127
|
type: "button",
|
|
123
128
|
variant: "outline",
|
|
124
129
|
size: "sm",
|
|
125
130
|
disabled: S,
|
|
126
|
-
onClick: () =>
|
|
127
|
-
children:
|
|
131
|
+
onClick: () => Te?.(K),
|
|
132
|
+
children: Ee
|
|
128
133
|
}),
|
|
129
|
-
|
|
134
|
+
X && /* @__PURE__ */ l(t, {
|
|
130
135
|
type: "button",
|
|
131
136
|
variant: "outline",
|
|
132
137
|
size: "sm",
|
|
133
138
|
onClick: () => x?.(K),
|
|
134
|
-
children:
|
|
139
|
+
children: De
|
|
135
140
|
})
|
|
136
|
-
] }),
|
|
141
|
+
] }), Ct = yt ? /* @__PURE__ */ l(oe, {
|
|
137
142
|
rows: G,
|
|
138
|
-
actions:
|
|
143
|
+
actions: we ?? [],
|
|
139
144
|
selectedLabel: () => "Actions",
|
|
140
145
|
clearLabel: null,
|
|
141
146
|
onClearSelection: () => L.resetRowSelection(),
|
|
142
147
|
hideWhenEmpty: !1
|
|
143
|
-
}) : void 0,
|
|
148
|
+
}) : void 0, wt = !!(ht || gt || p || m || xt || q || J || y || bt || Y || X || Ct), Tt = !!(I && !I.hidden), Z = S && Me === "skeleton", Et = ne(), Q = Be !== "scroll" && Et, Dt = (e, t) => t > 0 ? /* @__PURE__ */ l(o, {
|
|
144
149
|
"aria-hidden": "true",
|
|
145
150
|
className: "pointer-events-none border-0 hover:bg-transparent",
|
|
146
151
|
children: /* @__PURE__ */ l(a, {
|
|
147
|
-
colSpan:
|
|
152
|
+
colSpan: mt,
|
|
148
153
|
className: "border-0 p-0",
|
|
149
154
|
style: { height: t }
|
|
150
155
|
})
|
|
151
|
-
}, e) : null,
|
|
152
|
-
colSpan:
|
|
156
|
+
}, e) : null, Ot = (e) => /* @__PURE__ */ l(o, { children: /* @__PURE__ */ l(a, {
|
|
157
|
+
colSpan: mt,
|
|
153
158
|
className: "p-0",
|
|
154
159
|
children: e
|
|
155
|
-
}) }),
|
|
160
|
+
}) }), kt = () => Array.from({ length: Math.max(He, 1) }, (t, n) => /* @__PURE__ */ l(o, {
|
|
156
161
|
"aria-hidden": "true",
|
|
157
|
-
children:
|
|
158
|
-
className: e(
|
|
159
|
-
children: /* @__PURE__ */ l("div", { className: e("h-4 w-full max-w-40 animate-pulse rounded-md bg-muted", n % 3 == 1 && "max-w-24", n % 3 == 2 && "max-w-32",
|
|
162
|
+
children: pt.map((t) => /* @__PURE__ */ l(a, {
|
|
163
|
+
className: e(ge[A], M && "border-r last:border-r-0"),
|
|
164
|
+
children: /* @__PURE__ */ l("div", { className: e("h-4 w-full max-w-40 animate-pulse rounded-md bg-muted", n % 3 == 1 && "max-w-24", n % 3 == 2 && "max-w-32", Ue) })
|
|
160
165
|
}, `${t.id}-${n}`))
|
|
161
|
-
}, `skeleton-${n}`)), $ =
|
|
166
|
+
}, `skeleton-${n}`)), $ = Z ? null : S ? /* @__PURE__ */ l(s, {
|
|
162
167
|
label: "Loading data...",
|
|
163
168
|
...C
|
|
164
|
-
}) :
|
|
169
|
+
}) : ke ? /* @__PURE__ */ l(re, {
|
|
165
170
|
status: "error",
|
|
166
171
|
title: "Could not load data",
|
|
167
172
|
description: "Please try again.",
|
|
168
173
|
variant: "plain",
|
|
169
|
-
...
|
|
170
|
-
}) : R.length === 0 ? /* @__PURE__ */ l(
|
|
174
|
+
...je
|
|
175
|
+
}) : R.length === 0 ? /* @__PURE__ */ l(re, {
|
|
171
176
|
status: "empty",
|
|
172
177
|
variant: "plain",
|
|
173
|
-
...
|
|
174
|
-
}) : null,
|
|
175
|
-
let i =
|
|
178
|
+
...Ae
|
|
179
|
+
}) : null, At = (t, n, r) => {
|
|
180
|
+
let i = k?.(t) ?? !1;
|
|
176
181
|
return /* @__PURE__ */ u(c.Fragment, { children: [/* @__PURE__ */ l(o, {
|
|
177
182
|
ref: r && z?.measureRows !== !1 ? H.measureElement : void 0,
|
|
178
183
|
"data-index": r?.index,
|
|
179
184
|
"data-state": t.getIsSelected() ? "selected" : void 0,
|
|
180
|
-
"data-striped":
|
|
185
|
+
"data-striped": j && n % 2 == 1 ? "true" : void 0,
|
|
181
186
|
"data-disabled": i || void 0,
|
|
182
|
-
className: e(O && !i && "cursor-pointer", !i && "transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)] data-[state=selected]:bg-[color:color-mix(in_oklch,var(--primary),transparent_90%)]", i && "pointer-events-none opacity-55",
|
|
187
|
+
className: e(O && !i && "cursor-pointer", !i && "transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)] data-[state=selected]:bg-[color:color-mix(in_oklch,var(--primary),transparent_90%)]", i && "pointer-events-none opacity-55", _e(t, F)),
|
|
183
188
|
onClick: () => {
|
|
184
189
|
i || O?.(t);
|
|
185
190
|
},
|
|
186
191
|
onDoubleClick: () => {
|
|
187
|
-
i ||
|
|
192
|
+
i || Ve?.(t);
|
|
188
193
|
},
|
|
189
194
|
children: t.getVisibleCells().map((t) => {
|
|
190
195
|
let n = d(t.column.columnDef.cell, t.getContext());
|
|
@@ -201,84 +206,114 @@ function be({ className: be, columns: xe, data: f, title: p, description: m, fea
|
|
|
201
206
|
zIndex: 10
|
|
202
207
|
} : {}
|
|
203
208
|
},
|
|
204
|
-
className: e(
|
|
205
|
-
children:
|
|
209
|
+
className: e(ge[A], t.column.getIsPinned() && "bg-card shadow-[1px_0_0_var(--border)]", M && "border-r last:border-r-0", ye(t, qe)),
|
|
210
|
+
children: be(n) ? P : n
|
|
206
211
|
}, t.id);
|
|
207
212
|
})
|
|
208
|
-
}), t.getIsExpanded() &&
|
|
213
|
+
}), t.getIsExpanded() && Je ? /* @__PURE__ */ l(o, {
|
|
209
214
|
className: "bg-muted/50 hover:bg-muted/50",
|
|
210
215
|
children: /* @__PURE__ */ l(a, {
|
|
211
216
|
colSpan: t.getVisibleCells().length,
|
|
212
|
-
children:
|
|
217
|
+
children: Je(t)
|
|
213
218
|
})
|
|
214
219
|
}) : null] }, t.id);
|
|
220
|
+
}, jt = (t) => {
|
|
221
|
+
let n = k?.(t) ?? !1, r = t.getVisibleCells();
|
|
222
|
+
return /* @__PURE__ */ l("article", {
|
|
223
|
+
"data-slot": "data-table-mobile-card",
|
|
224
|
+
"data-state": t.getIsSelected() ? "selected" : void 0,
|
|
225
|
+
"data-disabled": n || void 0,
|
|
226
|
+
className: e("grid gap-3 rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card p-3 shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))]", O && !n && "cursor-pointer transition-colors hover:bg-[color:color-mix(in_oklch,var(--primary),transparent_96%)]", n && "pointer-events-none opacity-55", _e(t, F)),
|
|
227
|
+
role: O && !n ? "button" : void 0,
|
|
228
|
+
tabIndex: O && !n ? 0 : void 0,
|
|
229
|
+
onClick: () => {
|
|
230
|
+
n || O?.(t);
|
|
231
|
+
},
|
|
232
|
+
onKeyDown: (e) => {
|
|
233
|
+
e.target !== e.currentTarget || n || !O || (e.key === "Enter" || e.key === " ") && (e.preventDefault(), O(t));
|
|
234
|
+
},
|
|
235
|
+
children: r.map((e) => {
|
|
236
|
+
let t = d(e.column.columnDef.cell, e.getContext());
|
|
237
|
+
return /* @__PURE__ */ u("div", {
|
|
238
|
+
"data-slot": "data-table-mobile-cell",
|
|
239
|
+
className: "grid grid-cols-[minmax(7rem,0.42fr)_minmax(0,1fr)] items-start gap-3 text-sm",
|
|
240
|
+
children: [/* @__PURE__ */ l("span", {
|
|
241
|
+
className: "min-w-0 text-xs font-semibold uppercase tracking-wide text-muted-foreground",
|
|
242
|
+
children: xe(e)
|
|
243
|
+
}), /* @__PURE__ */ l("div", {
|
|
244
|
+
className: "min-w-0 text-right text-foreground/92 [&>*]:ml-auto",
|
|
245
|
+
children: be(t) ? P : t
|
|
246
|
+
})]
|
|
247
|
+
}, e.id);
|
|
248
|
+
})
|
|
249
|
+
}, t.id);
|
|
215
250
|
};
|
|
216
251
|
return /* @__PURE__ */ u("div", {
|
|
217
252
|
"data-slot": "data-table",
|
|
218
|
-
className: e("grid gap-3",
|
|
219
|
-
...
|
|
253
|
+
className: e("grid gap-3", Se),
|
|
254
|
+
...tt,
|
|
220
255
|
children: [
|
|
221
|
-
|
|
256
|
+
wt && (ht ?? /* @__PURE__ */ l(le, {
|
|
222
257
|
title: p,
|
|
223
258
|
description: m,
|
|
224
|
-
search:
|
|
225
|
-
filters:
|
|
226
|
-
summary:
|
|
227
|
-
actions:
|
|
228
|
-
selectionActions:
|
|
229
|
-
selectedCount:
|
|
259
|
+
search: xt,
|
|
260
|
+
filters: q,
|
|
261
|
+
summary: J,
|
|
262
|
+
actions: St,
|
|
263
|
+
selectionActions: Ct,
|
|
264
|
+
selectedCount: ft,
|
|
230
265
|
totalCount: I ? I.rowCount ?? f.length : f.length,
|
|
231
266
|
variant: "plain",
|
|
232
|
-
...
|
|
267
|
+
...gt
|
|
233
268
|
})),
|
|
234
|
-
|
|
235
|
-
className: "grid gap-3
|
|
236
|
-
children: $ ?? (
|
|
269
|
+
Q && /* @__PURE__ */ l("div", {
|
|
270
|
+
className: "grid gap-3",
|
|
271
|
+
children: $ ?? (Z ? /* @__PURE__ */ l(s, {
|
|
237
272
|
label: "Loading data...",
|
|
238
273
|
...C
|
|
239
|
-
}) : R.map((e) => /* @__PURE__ */ l(c.Fragment, { children: D(e) }, e.id)))
|
|
274
|
+
}) : R.map((e) => /* @__PURE__ */ l(c.Fragment, { children: D ? D(e) : jt(e) }, e.id)))
|
|
240
275
|
}),
|
|
241
|
-
/* @__PURE__ */ u("div", {
|
|
276
|
+
!Q && /* @__PURE__ */ u("div", {
|
|
242
277
|
"data-slot": "data-table-wrapper",
|
|
243
|
-
"data-density":
|
|
244
|
-
"data-striped":
|
|
245
|
-
"data-bordered":
|
|
278
|
+
"data-density": A,
|
|
279
|
+
"data-striped": j || void 0,
|
|
280
|
+
"data-bordered": M || void 0,
|
|
246
281
|
"data-virtualized": B || void 0,
|
|
247
|
-
className: e("overflow-hidden rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))] backdrop-blur",
|
|
282
|
+
className: e("overflow-hidden rounded-[var(--aui-card-radius,var(--radius-lg))] border border-[color:var(--aui-card-border,var(--border))] bg-card shadow-[var(--aui-card-shadow,0_10px_24px_rgba(15,23,42,0.07))] backdrop-blur", Ge),
|
|
248
283
|
children: [/* @__PURE__ */ u(r, {
|
|
249
|
-
containerRef:
|
|
284
|
+
containerRef: ot,
|
|
250
285
|
containerStyle: B ? {
|
|
251
286
|
height: V,
|
|
252
287
|
overscrollBehavior: "contain"
|
|
253
288
|
} : void 0,
|
|
254
289
|
containerClassName: e("rounded-none border-0 bg-transparent shadow-none ring-0", B && "overflow-auto"),
|
|
255
|
-
className: e("text-[0.95rem]",
|
|
290
|
+
className: e("text-[0.95rem]", We),
|
|
256
291
|
"aria-rowcount": R.length,
|
|
257
292
|
children: [/* @__PURE__ */ l(te, {
|
|
258
|
-
className: e((
|
|
293
|
+
className: e((N || B) && "sticky top-0 z-10 shadow-sm backdrop-blur"),
|
|
259
294
|
children: L.getHeaderGroups().map((t) => /* @__PURE__ */ l(o, { children: t.headers.map((t) => /* @__PURE__ */ l(ee, {
|
|
260
295
|
style: {
|
|
261
296
|
width: t.getSize(),
|
|
262
297
|
...t.column.getIsPinned() === "left" ? {
|
|
263
298
|
left: `${t.column.getStart("left")}px`,
|
|
264
299
|
position: "sticky",
|
|
265
|
-
zIndex:
|
|
300
|
+
zIndex: N ? 20 : 11
|
|
266
301
|
} : {},
|
|
267
302
|
...t.column.getIsPinned() === "right" ? {
|
|
268
303
|
right: `${t.column.getAfter("right")}px`,
|
|
269
304
|
position: "sticky",
|
|
270
|
-
zIndex:
|
|
305
|
+
zIndex: N ? 20 : 11
|
|
271
306
|
} : {}
|
|
272
307
|
},
|
|
273
|
-
className: e(
|
|
308
|
+
className: e(he[A], "bg-[color:color-mix(in_oklch,var(--card),var(--background)_10%)] text-muted-foreground", (N || B) && "bg-[color:color-mix(in_oklch,var(--card),transparent_12%)] backdrop-blur", t.column.getIsPinned() && "bg-card shadow-[1px_0_0_var(--border)]", M && "border-r last:border-r-0", ve(t, Ke)),
|
|
274
309
|
children: t.isPlaceholder ? null : d(t.column.columnDef.header, t.getContext())
|
|
275
310
|
}, t.id)) }, t.id))
|
|
276
|
-
}), /* @__PURE__ */ l(i, { children: $ ?
|
|
277
|
-
|
|
278
|
-
...W.map((e) =>
|
|
279
|
-
|
|
280
|
-
] : R.map((e, t) =>
|
|
281
|
-
}),
|
|
311
|
+
}), /* @__PURE__ */ l(i, { children: $ ? Ot($) : Z ? kt() : B ? [
|
|
312
|
+
Dt("virtual-top", ut),
|
|
313
|
+
...W.map((e) => At(R[e.index], e.index, e)),
|
|
314
|
+
Dt("virtual-bottom", dt)
|
|
315
|
+
] : R.map((e, t) => At(e, t)) })]
|
|
316
|
+
}), Tt && I && /* @__PURE__ */ l(ce, {
|
|
282
317
|
pageIndex: I.pageIndex,
|
|
283
318
|
pageSize: I.pageSize,
|
|
284
319
|
pageCount: I.pageCount,
|
|
@@ -295,4 +330,4 @@ function be({ className: be, columns: xe, data: f, title: p, description: m, fea
|
|
|
295
330
|
});
|
|
296
331
|
}
|
|
297
332
|
//#endregion
|
|
298
|
-
export {
|
|
333
|
+
export { Se as DataTable };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs"),r=require("../../../node_modules/@dnd-kit/helpers/dist/index.cjs"),i=require("../../../node_modules/@dnd-kit/react/index.cjs"),a=require("../../../node_modules/@dnd-kit/dom/sortable.cjs"),o=require("../../../node_modules/@dnd-kit/react/sortable.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("lucide-react"),l=require("react/jsx-runtime");var u=`tembro-kanban-card:`,d=`tembro-kanban-column:`;function f(e){return`${u}${e}`}function p(e){return`${d}${e}`}function m(e){return e.startsWith(u)?e.slice(19):e}function h(e){let t=e===void 0?``:String(e);return t.startsWith(d)?t.slice(21):t}function g(e){return new Map(e.flatMap(e=>e.cards.map(e=>[f(e.key),e])))}function _(e,t){let n=g(e),i=r.move(Object.fromEntries(e.map(e=>[p(e.key),e.cards.map(e=>f(e.key))])),t);return e.map(e=>({...e,cards:(i[p(e.key)]??[]).map(e=>n.get(String(e))).filter(e=>!!e)}))}var v=s.forwardRef(function({label:e,disabled:t},n){return(0,l.jsx)(`button`,{ref:n,type:`button`,className:`inline-flex size-8 shrink-0 touch-none items-center justify-center rounded-md text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-45`,"aria-label":e,disabled:t,onClick:e=>e.stopPropagation(),children:(0,l.jsx)(c.GripVerticalIcon,{className:`size-4`,"aria-hidden":`true`})})});function y({card:e,handle:t}){return(0,l.jsxs)(n.Card,{className:`transition-colors hover:bg-muted/40`,children:[(0,l.jsx)(n.CardHeader,{className:`p-3 pb-1`,children:(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,l.jsx)(n.CardTitle,{className:`text-sm`,children:e.title}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1`,children:[e.extra,t]})]})}),e.description||e.meta?(0,l.jsxs)(n.CardContent,{className:`grid gap-2 p-3 pt-0 text-xs text-muted-foreground`,children:[e.description,e.meta?(0,l.jsx)(`div`,{children:e.meta}):null]}):null]})}function b({card:e,column:n,index:r,boardDisabled:i,renderCard:a,onCardClick:s,dragHandleLabel:c,cardClassName:u}){let d=i||n.disabled===!0||e.disabled===!0,{ref:m,handleRef:h,isDragging:g,isDropTarget:_}=o.useSortable({id:f(e.key),index:r,group:p(n.key),type:`tembro-kanban-card`,accept:`tembro-kanban-card`,disabled:d,data:{cardKey:e.key,columnKey:n.key},transition:{duration:180,easing:`cubic-bezier(0.2, 0, 0, 1)`,idle:!0}}),b=(0,l.jsx)(v,{ref:h,label:c?.(e,n)??`Move ${String(e.title)}`,disabled:d}),x={index:r,isDragging:g,isDropTarget:_,handle:b};return(0,l.jsx)(`article`,{ref:m,"data-slot":`kanban-card`,"data-dragging":g||void 0,"data-drop-target":_||void 0,"data-disabled":d||void 0,role:s&&!d?`button`:void 0,tabIndex:s&&!d?0:void 0,"aria-label":typeof e.title==`string`?e.title:void 0,className:t.cn(`rounded-lg outline-none transition-[opacity,box-shadow]`,s&&!d&&`cursor-pointer focus-visible:ring-2 focus-visible:ring-ring`,_&&`ring-2 ring-primary/30`,g&&`opacity-30`,d&&`opacity-55`,u),onClick:()=>{d||s?.(e,n)},onKeyDown:t=>{t.target!==t.currentTarget||d||!s||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),s(e,n))},children:a?.(e,n,x)??(0,l.jsx)(y,{card:e,handle:b})})}function x({column:e,boardDisabled:n,renderCard:r,onCardClick:a,dragHandleLabel:o,emptyColumn:s,columnClassName:c,cardClassName:u}){let{ref:d,isDropTarget:f}=i.useDroppable({id:p(e.key),type:`tembro-kanban-column`,accept:`tembro-kanban-card`,disabled:n||e.disabled===!0,collisionPriority:1,data:{columnKey:e.key}});return(0,l.jsxs)(`section`,{ref:d,"data-slot":`kanban-column`,"data-drop-target":f||void 0,"data-disabled":e.disabled||void 0,"aria-label":typeof e.title==`string`?e.title:void 0,className:t.cn(`grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3 transition-[border-color,background-color,box-shadow]`,f&&`border-primary/60 bg-primary/5 ring-2 ring-primary/15`,e.disabled&&`opacity-60`,c),children:[(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,l.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e.title}),e.description?(0,l.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description}):null]}),(0,l.jsx)(`div`,{className:`rounded-full bg-background px-2 py-0.5 text-xs text-muted-foreground`,children:e.count??e.cards.length})]}),(0,l.jsx)(`div`,{className:`grid min-h-16 content-start gap-2`,children:e.cards.length===0?(0,l.jsxs)(`div`,{className:`grid min-h-20 place-items-center rounded-lg border border-dashed p-3 text-center text-xs text-muted-foreground`,children:[(0,l.jsx)(`span`,{children:s}),(0,l.jsx)(`span`,{className:`sr-only`,children:`No cards yet.`})]}):e.cards.map((t,i)=>(0,l.jsx)(b,{card:t,column:e,index:i,boardDisabled:n,renderCard:r,onCardClick:a,dragHandleLabel:o,cardClassName:u},t.key))})]})}function S({columns:e,defaultColumns:n=[],onColumnsChange:r,onCardMove:o,renderCard:c,onCardClick:u,disabled:d=!1,emptyColumn:p=`Drop cards here.`,dragHandleLabel:g,columnClassName:v,cardClassName:b,overlayClassName:S,className:C,"aria-label":w=`Kanban board`,...T}){let[E,D]=s.useState(()=>n),[O,k]=s.useState(null),[A,j]=s.useState(null),M=s.useRef(null),N=e??E,P=O??N,F=e!==void 0;function I(e){let t=e.operation.source;if(!t)return;let n=String(t.id);M.current=N,k(N),j(n)}function L(e){let t=e.operation.source;if(!t||!a.isSortable(t))return;let n=_(M.current??N,e);M.current=n,k(n)}function R(e){let t=e.operation.source;if(j(null),e.canceled||!t||!a.isSortable(t)){M.current=null,k(null);return}let n=M.current??_(N,e),i=m(String(t.id)),s=h(t.initialGroup),c=h(t.group),l=N.find(e=>e.key===s),u=n.find(e=>e.key===c),d=l?.cards.find(e=>e.key===i);if(M.current=null,k(null),!d||!l||!u)return;let f={card:d,fromColumn:l,toColumn:u,fromIndex:t.initialIndex,toIndex:t.index};F||D(n),r?.(n,f),o?.(f)}let z=A?P.flatMap(e=>e.cards.map(t=>({card:t,column:e}))).find(({card:e})=>f(e.key)===A):void 0;return(0,l.jsxs)(i.DragDropProvider,{onDragStart:I,onDragOver:L,onDragEnd:R,children:[(0,l.jsx)(`div`,{...T,role:`group`,"aria-label":w,"data-slot":`kanban-board`,className:t.cn(`grid auto-cols-[minmax(280px,1fr)] grid-flow-col
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs"),r=require("../../../node_modules/@dnd-kit/helpers/dist/index.cjs"),i=require("../../../node_modules/@dnd-kit/react/index.cjs"),a=require("../../../node_modules/@dnd-kit/dom/sortable.cjs"),o=require("../../../node_modules/@dnd-kit/react/sortable.cjs");let s=require("react");s=e.__toESM(s,1);let c=require("lucide-react"),l=require("react/jsx-runtime");var u=`tembro-kanban-card:`,d=`tembro-kanban-column:`;function f(e){return`${u}${e}`}function p(e){return`${d}${e}`}function m(e){return e.startsWith(u)?e.slice(19):e}function h(e){let t=e===void 0?``:String(e);return t.startsWith(d)?t.slice(21):t}function g(e){return new Map(e.flatMap(e=>e.cards.map(e=>[f(e.key),e])))}function _(e,t){let n=g(e),i=r.move(Object.fromEntries(e.map(e=>[p(e.key),e.cards.map(e=>f(e.key))])),t);return e.map(e=>({...e,cards:(i[p(e.key)]??[]).map(e=>n.get(String(e))).filter(e=>!!e)}))}var v=s.forwardRef(function({label:e,disabled:t},n){return(0,l.jsx)(`button`,{ref:n,type:`button`,className:`inline-flex size-8 shrink-0 touch-none items-center justify-center rounded-md text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-45`,"aria-label":e,disabled:t,onClick:e=>e.stopPropagation(),children:(0,l.jsx)(c.GripVerticalIcon,{className:`size-4`,"aria-hidden":`true`})})});function y({card:e,handle:t}){return(0,l.jsxs)(n.Card,{className:`transition-colors hover:bg-muted/40`,children:[(0,l.jsx)(n.CardHeader,{className:`p-3 pb-1`,children:(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,l.jsx)(n.CardTitle,{className:`text-sm`,children:e.title}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1`,children:[e.extra,t]})]})}),e.description||e.meta?(0,l.jsxs)(n.CardContent,{className:`grid gap-2 p-3 pt-0 text-xs text-muted-foreground`,children:[e.description,e.meta?(0,l.jsx)(`div`,{children:e.meta}):null]}):null]})}function b({card:e,column:n,index:r,boardDisabled:i,renderCard:a,onCardClick:s,dragHandleLabel:c,cardClassName:u}){let d=i||n.disabled===!0||e.disabled===!0,{ref:m,handleRef:h,isDragging:g,isDropTarget:_}=o.useSortable({id:f(e.key),index:r,group:p(n.key),type:`tembro-kanban-card`,accept:`tembro-kanban-card`,disabled:d,data:{cardKey:e.key,columnKey:n.key},transition:{duration:180,easing:`cubic-bezier(0.2, 0, 0, 1)`,idle:!0}}),b=(0,l.jsx)(v,{ref:h,label:c?.(e,n)??`Move ${String(e.title)}`,disabled:d}),x={index:r,isDragging:g,isDropTarget:_,handle:b};return(0,l.jsx)(`article`,{ref:m,"data-slot":`kanban-card`,"data-dragging":g||void 0,"data-drop-target":_||void 0,"data-disabled":d||void 0,role:s&&!d?`button`:void 0,tabIndex:s&&!d?0:void 0,"aria-label":typeof e.title==`string`?e.title:void 0,className:t.cn(`rounded-lg outline-none transition-[opacity,box-shadow]`,s&&!d&&`cursor-pointer focus-visible:ring-2 focus-visible:ring-ring`,_&&`ring-2 ring-primary/30`,g&&`opacity-30`,d&&`opacity-55`,u),onClick:()=>{d||s?.(e,n)},onKeyDown:t=>{t.target!==t.currentTarget||d||!s||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),s(e,n))},children:a?.(e,n,x)??(0,l.jsx)(y,{card:e,handle:b})})}function x({column:e,boardDisabled:n,renderCard:r,onCardClick:a,dragHandleLabel:o,emptyColumn:s,columnClassName:c,cardClassName:u}){let{ref:d,isDropTarget:f}=i.useDroppable({id:p(e.key),type:`tembro-kanban-column`,accept:`tembro-kanban-card`,disabled:n||e.disabled===!0,collisionPriority:1,data:{columnKey:e.key}});return(0,l.jsxs)(`section`,{ref:d,"data-slot":`kanban-column`,"data-drop-target":f||void 0,"data-disabled":e.disabled||void 0,"aria-label":typeof e.title==`string`?e.title:void 0,className:t.cn(`grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3 transition-[border-color,background-color,box-shadow]`,f&&`border-primary/60 bg-primary/5 ring-2 ring-primary/15`,e.disabled&&`opacity-60`,c),children:[(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,l.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e.title}),e.description?(0,l.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description}):null]}),(0,l.jsx)(`div`,{className:`rounded-full bg-background px-2 py-0.5 text-xs text-muted-foreground`,children:e.count??e.cards.length})]}),(0,l.jsx)(`div`,{className:`grid min-h-16 content-start gap-2`,children:e.cards.length===0?(0,l.jsxs)(`div`,{className:`grid min-h-20 place-items-center rounded-lg border border-dashed p-3 text-center text-xs text-muted-foreground`,children:[(0,l.jsx)(`span`,{children:s}),(0,l.jsx)(`span`,{className:`sr-only`,children:`No cards yet.`})]}):e.cards.map((t,i)=>(0,l.jsx)(b,{card:t,column:e,index:i,boardDisabled:n,renderCard:r,onCardClick:a,dragHandleLabel:o,cardClassName:u},t.key))})]})}function S({columns:e,defaultColumns:n=[],onColumnsChange:r,onCardMove:o,renderCard:c,onCardClick:u,disabled:d=!1,emptyColumn:p=`Drop cards here.`,dragHandleLabel:g,columnClassName:v,cardClassName:b,overlayClassName:S,className:C,"aria-label":w=`Kanban board`,...T}){let[E,D]=s.useState(()=>n),[O,k]=s.useState(null),[A,j]=s.useState(null),M=s.useRef(null),N=e??E,P=O??N,F=e!==void 0;function I(e){let t=e.operation.source;if(!t)return;let n=String(t.id);M.current=N,k(N),j(n)}function L(e){let t=e.operation.source;if(!t||!a.isSortable(t))return;let n=_(M.current??N,e);M.current=n,k(n)}function R(e){let t=e.operation.source;if(j(null),e.canceled||!t||!a.isSortable(t)){M.current=null,k(null);return}let n=M.current??_(N,e),i=m(String(t.id)),s=h(t.initialGroup),c=h(t.group),l=N.find(e=>e.key===s),u=n.find(e=>e.key===c),d=l?.cards.find(e=>e.key===i);if(M.current=null,k(null),!d||!l||!u)return;let f={card:d,fromColumn:l,toColumn:u,fromIndex:t.initialIndex,toIndex:t.index};F||D(n),r?.(n,f),o?.(f)}let z=A?P.flatMap(e=>e.cards.map(t=>({card:t,column:e}))).find(({card:e})=>f(e.key)===A):void 0;return(0,l.jsxs)(i.DragDropProvider,{onDragStart:I,onDragOver:L,onDragEnd:R,children:[(0,l.jsx)(`div`,{...T,role:`group`,"aria-label":w,"data-slot":`kanban-board`,className:t.cn(`grid gap-4 sm:auto-cols-[minmax(280px,1fr)] sm:grid-flow-col sm:overflow-x-auto sm:pb-2`,C),children:P.map(e=>(0,l.jsx)(x,{column:e,boardDisabled:d,renderCard:c,onCardClick:u,dragHandleLabel:g,emptyColumn:p,columnClassName:v,cardClassName:b},e.key))}),(0,l.jsx)(i.DragOverlay,{children:z?(0,l.jsx)(`div`,{className:t.cn(`min-w-64 rotate-1 opacity-95 shadow-2xl`,S),children:c?.(z.card,z.column,{index:z.column.cards.findIndex(e=>e.key===z.card.key),isDragging:!0,isDropTarget:!1,handle:null})??(0,l.jsx)(y,{card:z.card,handle:null})}):null})]})}exports.KanbanBoard=S;
|
|
@@ -213,7 +213,7 @@ function D({ columns: t, defaultColumns: n = [], onColumnsChange: r, onCardMove:
|
|
|
213
213
|
role: "group",
|
|
214
214
|
"aria-label": T,
|
|
215
215
|
"data-slot": "kanban-board",
|
|
216
|
-
className: e("grid auto-cols-[minmax(280px,1fr)] grid-flow-col
|
|
216
|
+
className: e("grid gap-4 sm:auto-cols-[minmax(280px,1fr)] sm:grid-flow-col sm:overflow-x-auto sm:pb-2", C),
|
|
217
217
|
children: I.map((e) => /* @__PURE__ */ p(E, {
|
|
218
218
|
column: e,
|
|
219
219
|
boardDisabled: u,
|