@sth87/shadcn-design-system 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),F=require("lucide-react");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const I=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");typeof window<"u"&&Promise.resolve().then(()=>require("../../_virtual/index.cjs")).then(t=>t.index).then(t=>{t.default});const v=({images:t,visible:c=!1,onClose:i,activeIndex:o=0,onIndexChange:l,zoomSpeed:h=.1,disableKeyboardSupport:u=!1,noNavbar:d=!1,noToolbar:f=!1,rotatable:b=!0,scalable:g=!0,changeable:V=!0,noClose:N=!1,minScale:x=.1,maxScale:q=50,defaultScale:p=1,className:j,downloadable:P=!1,noImgDetails:C=!1,noResetZoomAfterChange:L=!1,drag:S=!1})=>{const[m,k]=r.useState(o),[w,U]=r.useState(null);r.useEffect(()=>{typeof window<"u"&&!w&&Promise.resolve().then(()=>require("../../_virtual/index.cjs")).then(s=>s.index).then(s=>{U(()=>s.default)})},[w]),r.useEffect(()=>{k(o)},[o]);const y=r.useCallback(()=>{i?.()},[i]),R=r.useCallback((s,n)=>{k(n),l?.(n)},[l]),T=r.useCallback(()=>{const s=t[m],n=s.downloadUrl||s.src,a=document.createElement("a");a.href=n,a.download=s.alt||`image-${m+1}`,fetch(n).then(E=>E.blob()).then(E=>{const O=window.URL.createObjectURL(E);a.href=O,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(O)}).catch(()=>{})},[t,m]),D=t.map(s=>({src:s.src,alt:s.alt||"",downloadUrl:s.downloadUrl||s.src}));return w?e.jsx(w,{visible:c,onClose:y,onMaskClick:y,images:D,activeIndex:m,onChange:R,zoomSpeed:h,disableKeyboardSupport:u,noNavbar:d,noToolbar:f,rotatable:b,scalable:g,changeable:V,noClose:N,minScale:x,maxScale:q,defaultScale:p,className:I.cn("ds:image-viewer-antd-style",j),downloadable:P,noImgDetails:C,noResetZoomAfterChange:L,showTotal:!0,drag:S,customToolbar:s=>s.map(n=>n.key==="download"?{...n,actionType:void 0,onClick:void 0,render:e.jsx("button",{type:"button",className:"ds:react-viewer-icon ds:react-viewer-download",title:"Download",style:{background:"none",border:"none",cursor:"pointer",padding:0},onClick:a=>{a.preventDefault(),a.stopPropagation(),T()},children:e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M10 3v10m0 0l-4-4m4 4l4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("rect",{x:"4",y:"17",width:"12",height:"2",rx:"1",fill:"currentColor"})]})})}:n)}):null};v.displayName="ImageViewer";const G=({src:t,alt:c="",width:i,height:o,preview:l=!0,previewSrc:h,fallback:u,placeholder:d,className:f,wrapperClassName:b,onPreviewClick:g,onError:V,...N})=>{const[x,q]=r.useState(!0),[p,j]=r.useState(!1),[P,C]=r.useState(!1),L=()=>{q(!1),j(!1)},S=R=>{q(!1),j(!0),V?.(R)},m=()=>{l&&(C(!0),g?.())},k=()=>{C(!1)},w=x&&d,U=p&&u,y=l&&!x&&!p;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:I.cn("ds:ds-image-viewer-root ds:relative ds:inline-block",b),children:e.jsxs("div",{className:"ds:relative ds:inline-block",children:[w&&e.jsx("div",{className:"ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:bg-muted ds:animate-pulse",style:{width:i,height:o},children:d===!0?e.jsx("div",{className:"ds:w-8 ds:h-8 ds:border-2 ds:border-primary ds:border-t-transparent ds:rounded-full ds:animate-spin"}):d}),e.jsx("img",{src:U?u:t,alt:c,width:i,height:o,className:I.cn("ds:ds-image-viewer-img ds:max-w-full ds:h-auto ds:align-middle",x&&"ds:opacity-0",f),onLoad:L,onError:S,...N}),y&&e.jsx("div",{onClick:m,className:I.cn("ds:ds-image-viewer-mask ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:opacity-0 ds:hover:opacity-100 ds:transition-opacity ds:cursor-pointer","ds:bg-black/50 ds:backdrop-blur-sm"),children:e.jsxs("div",{className:"ds:text-white ds:text-sm ds:flex ds:items-center ds:gap-2",children:[e.jsx(F.ZoomIn,{className:"ds:w-5 ds:h-5"}),e.jsx("span",{children:"Preview"})]})})]})}),e.jsx(v,{images:[{src:h||t,alt:c}],visible:P,onClose:k,rotatable:!0,scalable:!0,downloadable:!0})]})};G.displayName="ImageViewer.Image";const M=({children:t,images:c,preview:i=!0})=>{const[o,l]=r.useState(!1),[h,u]=r.useState(0),d=r.useCallback(g=>{u(g),l(!0)},[]),f=r.useCallback(()=>{l(!1)},[]),b=r.useMemo(()=>({handlePreview:d,preview:i}),[d,i]);return e.jsxs(e.Fragment,{children:[e.jsx(B.Provider,{value:b,children:t}),e.jsx(v,{images:c,visible:o,onClose:f,activeIndex:h,onIndexChange:u,rotatable:!0,scalable:!0,downloadable:!0})]})};M.displayName="ImageViewer.Group";const B=r.createContext(null);Object.assign(v,{Image:G,Group:M});exports.ImageViewer=v;exports.ImageViewerGroup=M;exports.ImageViewerImage=G;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),F=require("lucide-react");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const I=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");typeof window<"u"&&Promise.resolve().then(()=>require("../../_virtual/index.cjs")).then(t=>t.index).then(t=>{t.default});const v=({images:t,visible:c=!1,onClose:i,activeIndex:o=0,onIndexChange:l,zoomSpeed:h=.1,disableKeyboardSupport:u=!1,noNavbar:d=!1,noToolbar:f=!1,rotatable:b=!0,scalable:g=!0,changeable:V=!0,noClose:N=!1,minScale:x=.1,maxScale:q=50,defaultScale:p=1,className:j,downloadable:P=!1,noImgDetails:C=!1,noResetZoomAfterChange:L=!1,drag:S=!1})=>{const[m,k]=r.useState(o),[w,U]=r.useState(null);r.useEffect(()=>{typeof window<"u"&&!w&&Promise.resolve().then(()=>require("../../_virtual/index.cjs")).then(s=>s.index).then(s=>{U(()=>s.default)})},[w]),r.useEffect(()=>{k(o)},[o]);const y=r.useCallback(()=>{i?.()},[i]),R=r.useCallback((s,n)=>{k(n),l?.(n)},[l]),T=r.useCallback(()=>{const s=t[m],n=s.downloadUrl||s.src,a=document.createElement("a");a.href=n,a.download=s.alt||`image-${m+1}`,fetch(n).then(E=>E.blob()).then(E=>{const O=window.URL.createObjectURL(E);a.href=O,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(O)}).catch(()=>{})},[t,m]),D=t.map(s=>({src:s.src,alt:s.alt||"",downloadUrl:s.downloadUrl||s.src}));return w?e.jsx(w,{visible:c,onClose:y,onMaskClick:y,images:D,activeIndex:m,onChange:R,zoomSpeed:h,disableKeyboardSupport:u,noNavbar:d,noToolbar:f,rotatable:b,scalable:g,changeable:V,noClose:N,minScale:x,maxScale:q,defaultScale:p,className:I.cn("ds:image-viewer-antd-style",j),downloadable:P,noImgDetails:C,noResetZoomAfterChange:L,showTotal:!0,drag:S,customToolbar:s=>s.map(n=>n.key==="download"?{...n,actionType:void 0,onClick:void 0,render:e.jsx("button",{type:"button",className:"ds:react-viewer-icon ds:react-viewer-download",title:"Download",style:{background:"none",border:"none",cursor:"pointer",padding:0},onClick:a=>{a.preventDefault(),a.stopPropagation(),T()},children:e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M10 3v10m0 0l-4-4m4 4l4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("rect",{x:"4",y:"17",width:"12",height:"2",rx:"1",fill:"currentColor"})]})})}:n)}):null};v.displayName="ImageViewer";const G=({src:t,alt:c="",width:i,height:o,preview:l=!0,previewSrc:h,fallback:u,placeholder:d,className:f,wrapperClassName:b,onPreviewClick:g,onError:V,...N})=>{const[x,q]=r.useState(!0),[p,j]=r.useState(!1),[P,C]=r.useState(!1),L=()=>{q(!1),j(!1)},S=R=>{q(!1),j(!0),V?.(R)},m=()=>{l&&(C(!0),g?.())},k=()=>{C(!1)},w=x&&d,U=p&&u,y=l&&!x&&!p;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:I.cn("ds:image-viewer-root ds:relative ds:inline-block",b),children:e.jsxs("div",{className:"ds:relative ds:inline-block",children:[w&&e.jsx("div",{className:"ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:bg-muted ds:animate-pulse",style:{width:i,height:o},children:d===!0?e.jsx("div",{className:"ds:w-8 ds:h-8 ds:border-2 ds:border-primary ds:border-t-transparent ds:rounded-full ds:animate-spin"}):d}),e.jsx("img",{src:U?u:t,alt:c,width:i,height:o,className:I.cn("ds:image-viewer-img ds:max-w-full ds:h-auto ds:align-middle",x&&"ds:opacity-0",f),onLoad:L,onError:S,...N}),y&&e.jsx("div",{onClick:m,className:I.cn("ds:image-viewer-mask ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:opacity-0 ds:hover:opacity-100 ds:transition-opacity ds:cursor-pointer","ds:bg-black/50 ds:backdrop-blur-sm"),children:e.jsxs("div",{className:"ds:text-white ds:text-sm ds:flex ds:items-center ds:gap-2",children:[e.jsx(F.ZoomIn,{className:"ds:w-5 ds:h-5"}),e.jsx("span",{children:"Preview"})]})})]})}),e.jsx(v,{images:[{src:h||t,alt:c}],visible:P,onClose:k,rotatable:!0,scalable:!0,downloadable:!0})]})};G.displayName="ImageViewer.Image";const M=({children:t,images:c,preview:i=!0})=>{const[o,l]=r.useState(!1),[h,u]=r.useState(0),d=r.useCallback(g=>{u(g),l(!0)},[]),f=r.useCallback(()=>{l(!1)},[]),b=r.useMemo(()=>({handlePreview:d,preview:i}),[d,i]);return e.jsxs(e.Fragment,{children:[e.jsx(B.Provider,{value:b,children:t}),e.jsx(v,{images:c,visible:o,onClose:f,activeIndex:h,onIndexChange:u,rotatable:!0,scalable:!0,downloadable:!0})]})};M.displayName="ImageViewer.Group";const B=r.createContext(null);Object.assign(v,{Image:G,Group:M});exports.ImageViewer=v;exports.ImageViewerGroup=M;exports.ImageViewerImage=G;
2
2
  //# sourceMappingURL=ImageViewer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageViewer.cjs","sources":["../../../../src/components/ImageViewer/ImageViewer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from \"react\";\nimport { ZoomIn } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\n// Dynamic import for react-viewer to avoid SSR issues\nlet Viewer: any = null;\nif (typeof window !== \"undefined\") {\n import(\"react-viewer\").then((module) => {\n Viewer = module.default;\n });\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ImageInfo {\n src: string;\n alt?: string;\n downloadUrl?: string;\n}\n\nexport interface ImageViewerProps {\n images: ImageInfo[];\n visible?: boolean;\n onClose?: () => void;\n activeIndex?: number;\n onIndexChange?: (_index: number) => void;\n zoomSpeed?: number;\n disableKeyboardSupport?: boolean;\n noNavbar?: boolean;\n noToolbar?: boolean;\n rotatable?: boolean;\n scalable?: boolean;\n changeable?: boolean;\n noClose?: boolean;\n minScale?: number;\n maxScale?: number;\n defaultScale?: number;\n className?: string;\n downloadable?: boolean;\n noImgDetails?: boolean;\n noResetZoomAfterChange?: boolean;\n drag?: boolean;\n}\n\nexport interface ImageViewerImageProps\n extends React.ImgHTMLAttributes<HTMLImageElement> {\n src: string;\n alt?: string;\n width?: string | number;\n height?: string | number;\n preview?: boolean;\n previewSrc?: string;\n fallback?: string;\n placeholder?: React.ReactNode | boolean;\n className?: string;\n wrapperClassName?: string;\n onPreviewClick?: () => void;\n}\n\n// ============================================================================\n// ImageViewer Component\n// ============================================================================\n\nexport const ImageViewer: React.FC<ImageViewerProps> = ({\n images,\n visible = false,\n onClose,\n activeIndex = 0,\n onIndexChange,\n zoomSpeed = 0.1,\n disableKeyboardSupport = false,\n noNavbar = false,\n noToolbar = false,\n rotatable = true,\n scalable = true,\n changeable = true,\n noClose = false,\n minScale = 0.1,\n maxScale = 50,\n defaultScale = 1,\n className,\n downloadable = false,\n noImgDetails = false,\n noResetZoomAfterChange = false,\n drag = false,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex);\n const [ViewerComponent, setViewerComponent] = useState<any>(null);\n\n // Load Viewer dynamically on client-side only\n useEffect(() => {\n if (typeof window !== \"undefined\" && !ViewerComponent) {\n import(\"react-viewer\").then((module) => {\n setViewerComponent(() => module.default);\n });\n }\n }, [ViewerComponent]);\n\n useEffect(() => {\n setCurrentIndex(activeIndex);\n }, [activeIndex]);\n\n const handleClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const handleIndexChange = useCallback(\n (_activeImage: any, index: number) => {\n setCurrentIndex(index);\n onIndexChange?.(index);\n },\n [onIndexChange]\n );\n\n // Handle download to save file locally\n const handleDownload = useCallback(() => {\n const currentImage = images[currentIndex];\n const downloadUrl = currentImage.downloadUrl || currentImage.src;\n\n // Create a temporary anchor element to trigger download\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.download = currentImage.alt || `image-${currentIndex + 1}`;\n\n // For cross-origin images, try to download via fetch\n fetch(downloadUrl)\n .then((response) => response.blob())\n .then((blob) => {\n const url = window.URL.createObjectURL(blob);\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n })\n .catch(() => {\n // Fallback: do nothing if fetch fails\n });\n }, [images, currentIndex]);\n\n // Transform images to include downloadUrl\n const viewerImages = images.map((img) => ({\n src: img.src,\n alt: img.alt || \"\",\n downloadUrl: img.downloadUrl || img.src,\n }));\n\n // Don't render until Viewer is loaded\n if (!ViewerComponent) {\n return null;\n }\n\n return (\n <ViewerComponent\n visible={visible}\n onClose={handleClose}\n onMaskClick={handleClose}\n images={viewerImages}\n activeIndex={currentIndex}\n onChange={handleIndexChange}\n zoomSpeed={zoomSpeed}\n disableKeyboardSupport={disableKeyboardSupport}\n noNavbar={noNavbar}\n noToolbar={noToolbar}\n rotatable={rotatable}\n scalable={scalable}\n changeable={changeable}\n noClose={noClose}\n minScale={minScale}\n maxScale={maxScale}\n defaultScale={defaultScale}\n className={cn(\"ds:image-viewer-antd-style\", className)}\n downloadable={downloadable}\n noImgDetails={noImgDetails}\n noResetZoomAfterChange={noResetZoomAfterChange}\n showTotal={true}\n drag={drag}\n customToolbar={(toolbars: any) => {\n // Replace download button with a custom-rendered button to prevent viewer state change\n return toolbars.map((toolbar: any) => {\n if (toolbar.key === \"download\") {\n return {\n ...toolbar,\n actionType: undefined, // Remove default action\n onClick: undefined,\n render: (\n <button\n type=\"button\"\n className=\"ds:react-viewer-icon ds:react-viewer-download\"\n title=\"Download\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleDownload();\n }}\n >\n {/* SVG icon for download (Ant Design style) */}\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3v10m0 0l-4-4m4 4l4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"4\"\n y=\"17\"\n width=\"12\"\n height=\"2\"\n rx=\"1\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n ),\n };\n }\n return toolbar;\n });\n }}\n />\n );\n};\n\nImageViewer.displayName = \"ImageViewer\";\n\n// ============================================================================\n// ImageViewerImage Component (Wrapper for single image with preview)\n// ============================================================================\n\nexport const ImageViewerImage: React.FC<ImageViewerImageProps> = ({\n src,\n alt = \"\",\n width,\n height,\n preview = true,\n previewSrc,\n fallback,\n placeholder,\n className,\n wrapperClassName,\n onPreviewClick,\n onError,\n ...props\n}) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [viewerVisible, setViewerVisible] = useState(false);\n\n const handleLoad = () => {\n setLoading(false);\n setError(false);\n };\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setLoading(false);\n setError(true);\n onError?.(e);\n };\n\n const handlePreview = () => {\n if (!preview) return;\n setViewerVisible(true);\n onPreviewClick?.();\n };\n\n const handleCloseViewer = () => {\n setViewerVisible(false);\n };\n\n const showPlaceholder = loading && placeholder;\n const showFallback = error && fallback;\n const showPreviewMask = preview && !loading && !error;\n\n return (\n <>\n <div\n className={cn(\n \"ds:ds-image-viewer-root ds:relative ds:inline-block\",\n wrapperClassName\n )}\n >\n <div className=\"ds:relative ds:inline-block\">\n {showPlaceholder && (\n <div\n className=\"ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:bg-muted ds:animate-pulse\"\n style={{ width, height }}\n >\n {placeholder === true ? (\n <div className=\"ds:w-8 ds:h-8 ds:border-2 ds:border-primary ds:border-t-transparent ds:rounded-full ds:animate-spin\" />\n ) : (\n placeholder\n )}\n </div>\n )}\n\n <img\n src={showFallback ? fallback : src}\n alt={alt}\n width={width}\n height={height}\n className={cn(\n \"ds:ds-image-viewer-img ds:max-w-full ds:h-auto ds:align-middle\",\n loading && \"ds:opacity-0\",\n className\n )}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n\n {showPreviewMask && (\n <div\n onClick={handlePreview}\n className={cn(\n \"ds:ds-image-viewer-mask ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:opacity-0 ds:hover:opacity-100 ds:transition-opacity ds:cursor-pointer\",\n \"ds:bg-black/50 ds:backdrop-blur-sm\"\n )}\n >\n <div className=\"ds:text-white ds:text-sm ds:flex ds:items-center ds:gap-2\">\n <ZoomIn className=\"ds:w-5 ds:h-5\" />\n <span>Preview</span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Viewer Modal */}\n <ImageViewer\n images={[{ src: previewSrc || src, alt }]}\n visible={viewerVisible}\n onClose={handleCloseViewer}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerImage.displayName = \"ImageViewer.Image\";\n\n// ============================================================================\n// ImageViewerGroup Component\n// ============================================================================\n\ninterface ImageViewerGroupProps {\n children: React.ReactNode;\n images: ImageInfo[];\n preview?: boolean;\n}\n\nexport const ImageViewerGroup: React.FC<ImageViewerGroupProps> = ({\n children,\n images,\n preview = true,\n}) => {\n const [viewerVisible, setViewerVisible] = useState(false);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const handlePreview = useCallback((index: number) => {\n setCurrentIndex(index);\n setViewerVisible(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setViewerVisible(false);\n }, []);\n\n const contextValue = React.useMemo(\n () => ({\n handlePreview,\n preview,\n }),\n [handlePreview, preview]\n );\n\n return (\n <>\n <ImageViewerGroupContext.Provider value={contextValue}>\n {children}\n </ImageViewerGroupContext.Provider>\n\n <ImageViewer\n images={images}\n visible={viewerVisible}\n onClose={handleClose}\n activeIndex={currentIndex}\n onIndexChange={setCurrentIndex}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerGroup.displayName = \"ImageViewer.Group\";\n\n// Context for Group\nconst ImageViewerGroupContext = React.createContext<{\n handlePreview?: (_index: number) => void;\n preview?: boolean;\n} | null>(null);\n\n// Export with namespace\nconst ImageViewerNamespace = Object.assign(ImageViewer, {\n Image: ImageViewerImage,\n Group: ImageViewerGroup,\n});\n\nexport default ImageViewerNamespace;\n"],"names":["n","module","ImageViewer","images","visible","onClose","activeIndex","onIndexChange","zoomSpeed","disableKeyboardSupport","noNavbar","noToolbar","rotatable","scalable","changeable","noClose","minScale","maxScale","defaultScale","className","downloadable","noImgDetails","noResetZoomAfterChange","drag","currentIndex","setCurrentIndex","useState","ViewerComponent","setViewerComponent","useEffect","handleClose","useCallback","handleIndexChange","_activeImage","index","handleDownload","currentImage","downloadUrl","link","response","blob","url","viewerImages","img","jsx","cn","toolbars","toolbar","e","jsxs","ImageViewerImage","src","alt","width","height","preview","previewSrc","fallback","placeholder","wrapperClassName","onPreviewClick","onError","props","loading","setLoading","error","setError","viewerVisible","setViewerVisible","handleLoad","handleError","handlePreview","handleCloseViewer","showPlaceholder","showFallback","showPreviewMask","Fragment","ZoomIn","ImageViewerGroup","children","contextValue","React","ImageViewerGroupContext"],"mappings":"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"}
1
+ {"version":3,"file":"ImageViewer.cjs","sources":["../../../../src/components/ImageViewer/ImageViewer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from \"react\";\nimport { ZoomIn } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\n// Dynamic import for react-viewer to avoid SSR issues\nlet Viewer: any = null;\nif (typeof window !== \"undefined\") {\n import(\"react-viewer\").then((module) => {\n Viewer = module.default;\n });\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ImageInfo {\n src: string;\n alt?: string;\n downloadUrl?: string;\n}\n\nexport interface ImageViewerProps {\n images: ImageInfo[];\n visible?: boolean;\n onClose?: () => void;\n activeIndex?: number;\n onIndexChange?: (_index: number) => void;\n zoomSpeed?: number;\n disableKeyboardSupport?: boolean;\n noNavbar?: boolean;\n noToolbar?: boolean;\n rotatable?: boolean;\n scalable?: boolean;\n changeable?: boolean;\n noClose?: boolean;\n minScale?: number;\n maxScale?: number;\n defaultScale?: number;\n className?: string;\n downloadable?: boolean;\n noImgDetails?: boolean;\n noResetZoomAfterChange?: boolean;\n drag?: boolean;\n}\n\nexport interface ImageViewerImageProps\n extends React.ImgHTMLAttributes<HTMLImageElement> {\n src: string;\n alt?: string;\n width?: string | number;\n height?: string | number;\n preview?: boolean;\n previewSrc?: string;\n fallback?: string;\n placeholder?: React.ReactNode | boolean;\n className?: string;\n wrapperClassName?: string;\n onPreviewClick?: () => void;\n}\n\n// ============================================================================\n// ImageViewer Component\n// ============================================================================\n\nexport const ImageViewer: React.FC<ImageViewerProps> = ({\n images,\n visible = false,\n onClose,\n activeIndex = 0,\n onIndexChange,\n zoomSpeed = 0.1,\n disableKeyboardSupport = false,\n noNavbar = false,\n noToolbar = false,\n rotatable = true,\n scalable = true,\n changeable = true,\n noClose = false,\n minScale = 0.1,\n maxScale = 50,\n defaultScale = 1,\n className,\n downloadable = false,\n noImgDetails = false,\n noResetZoomAfterChange = false,\n drag = false,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex);\n const [ViewerComponent, setViewerComponent] = useState<any>(null);\n\n // Load Viewer dynamically on client-side only\n useEffect(() => {\n if (typeof window !== \"undefined\" && !ViewerComponent) {\n import(\"react-viewer\").then((module) => {\n setViewerComponent(() => module.default);\n });\n }\n }, [ViewerComponent]);\n\n useEffect(() => {\n setCurrentIndex(activeIndex);\n }, [activeIndex]);\n\n const handleClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const handleIndexChange = useCallback(\n (_activeImage: any, index: number) => {\n setCurrentIndex(index);\n onIndexChange?.(index);\n },\n [onIndexChange]\n );\n\n // Handle download to save file locally\n const handleDownload = useCallback(() => {\n const currentImage = images[currentIndex];\n const downloadUrl = currentImage.downloadUrl || currentImage.src;\n\n // Create a temporary anchor element to trigger download\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.download = currentImage.alt || `image-${currentIndex + 1}`;\n\n // For cross-origin images, try to download via fetch\n fetch(downloadUrl)\n .then((response) => response.blob())\n .then((blob) => {\n const url = window.URL.createObjectURL(blob);\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n })\n .catch(() => {\n // Fallback: do nothing if fetch fails\n });\n }, [images, currentIndex]);\n\n // Transform images to include downloadUrl\n const viewerImages = images.map((img) => ({\n src: img.src,\n alt: img.alt || \"\",\n downloadUrl: img.downloadUrl || img.src,\n }));\n\n // Don't render until Viewer is loaded\n if (!ViewerComponent) {\n return null;\n }\n\n return (\n <ViewerComponent\n visible={visible}\n onClose={handleClose}\n onMaskClick={handleClose}\n images={viewerImages}\n activeIndex={currentIndex}\n onChange={handleIndexChange}\n zoomSpeed={zoomSpeed}\n disableKeyboardSupport={disableKeyboardSupport}\n noNavbar={noNavbar}\n noToolbar={noToolbar}\n rotatable={rotatable}\n scalable={scalable}\n changeable={changeable}\n noClose={noClose}\n minScale={minScale}\n maxScale={maxScale}\n defaultScale={defaultScale}\n className={cn(\"ds:image-viewer-antd-style\", className)}\n downloadable={downloadable}\n noImgDetails={noImgDetails}\n noResetZoomAfterChange={noResetZoomAfterChange}\n showTotal={true}\n drag={drag}\n customToolbar={(toolbars: any) => {\n // Replace download button with a custom-rendered button to prevent viewer state change\n return toolbars.map((toolbar: any) => {\n if (toolbar.key === \"download\") {\n return {\n ...toolbar,\n actionType: undefined, // Remove default action\n onClick: undefined,\n render: (\n <button\n type=\"button\"\n className=\"ds:react-viewer-icon ds:react-viewer-download\"\n title=\"Download\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleDownload();\n }}\n >\n {/* SVG icon for download (Ant Design style) */}\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3v10m0 0l-4-4m4 4l4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"4\"\n y=\"17\"\n width=\"12\"\n height=\"2\"\n rx=\"1\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n ),\n };\n }\n return toolbar;\n });\n }}\n />\n );\n};\n\nImageViewer.displayName = \"ImageViewer\";\n\n// ============================================================================\n// ImageViewerImage Component (Wrapper for single image with preview)\n// ============================================================================\n\nexport const ImageViewerImage: React.FC<ImageViewerImageProps> = ({\n src,\n alt = \"\",\n width,\n height,\n preview = true,\n previewSrc,\n fallback,\n placeholder,\n className,\n wrapperClassName,\n onPreviewClick,\n onError,\n ...props\n}) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [viewerVisible, setViewerVisible] = useState(false);\n\n const handleLoad = () => {\n setLoading(false);\n setError(false);\n };\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setLoading(false);\n setError(true);\n onError?.(e);\n };\n\n const handlePreview = () => {\n if (!preview) return;\n setViewerVisible(true);\n onPreviewClick?.();\n };\n\n const handleCloseViewer = () => {\n setViewerVisible(false);\n };\n\n const showPlaceholder = loading && placeholder;\n const showFallback = error && fallback;\n const showPreviewMask = preview && !loading && !error;\n\n return (\n <>\n <div\n className={cn(\n \"ds:image-viewer-root ds:relative ds:inline-block\",\n wrapperClassName\n )}\n >\n <div className=\"ds:relative ds:inline-block\">\n {showPlaceholder && (\n <div\n className=\"ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:bg-muted ds:animate-pulse\"\n style={{ width, height }}\n >\n {placeholder === true ? (\n <div className=\"ds:w-8 ds:h-8 ds:border-2 ds:border-primary ds:border-t-transparent ds:rounded-full ds:animate-spin\" />\n ) : (\n placeholder\n )}\n </div>\n )}\n\n <img\n src={showFallback ? fallback : src}\n alt={alt}\n width={width}\n height={height}\n className={cn(\n \"ds:image-viewer-img ds:max-w-full ds:h-auto ds:align-middle\",\n loading && \"ds:opacity-0\",\n className\n )}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n\n {showPreviewMask && (\n <div\n onClick={handlePreview}\n className={cn(\n \"ds:image-viewer-mask ds:absolute ds:inset-0 ds:flex ds:items-center ds:justify-center ds:opacity-0 ds:hover:opacity-100 ds:transition-opacity ds:cursor-pointer\",\n \"ds:bg-black/50 ds:backdrop-blur-sm\"\n )}\n >\n <div className=\"ds:text-white ds:text-sm ds:flex ds:items-center ds:gap-2\">\n <ZoomIn className=\"ds:w-5 ds:h-5\" />\n <span>Preview</span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Viewer Modal */}\n <ImageViewer\n images={[{ src: previewSrc || src, alt }]}\n visible={viewerVisible}\n onClose={handleCloseViewer}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerImage.displayName = \"ImageViewer.Image\";\n\n// ============================================================================\n// ImageViewerGroup Component\n// ============================================================================\n\ninterface ImageViewerGroupProps {\n children: React.ReactNode;\n images: ImageInfo[];\n preview?: boolean;\n}\n\nexport const ImageViewerGroup: React.FC<ImageViewerGroupProps> = ({\n children,\n images,\n preview = true,\n}) => {\n const [viewerVisible, setViewerVisible] = useState(false);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const handlePreview = useCallback((index: number) => {\n setCurrentIndex(index);\n setViewerVisible(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setViewerVisible(false);\n }, []);\n\n const contextValue = React.useMemo(\n () => ({\n handlePreview,\n preview,\n }),\n [handlePreview, preview]\n );\n\n return (\n <>\n <ImageViewerGroupContext.Provider value={contextValue}>\n {children}\n </ImageViewerGroupContext.Provider>\n\n <ImageViewer\n images={images}\n visible={viewerVisible}\n onClose={handleClose}\n activeIndex={currentIndex}\n onIndexChange={setCurrentIndex}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerGroup.displayName = \"ImageViewer.Group\";\n\n// Context for Group\nconst ImageViewerGroupContext = React.createContext<{\n handlePreview?: (_index: number) => void;\n preview?: boolean;\n} | null>(null);\n\n// Export with namespace\nconst ImageViewerNamespace = Object.assign(ImageViewer, {\n Image: ImageViewerImage,\n Group: ImageViewerGroup,\n});\n\nexport default ImageViewerNamespace;\n"],"names":["n","module","ImageViewer","images","visible","onClose","activeIndex","onIndexChange","zoomSpeed","disableKeyboardSupport","noNavbar","noToolbar","rotatable","scalable","changeable","noClose","minScale","maxScale","defaultScale","className","downloadable","noImgDetails","noResetZoomAfterChange","drag","currentIndex","setCurrentIndex","useState","ViewerComponent","setViewerComponent","useEffect","handleClose","useCallback","handleIndexChange","_activeImage","index","handleDownload","currentImage","downloadUrl","link","response","blob","url","viewerImages","img","jsx","cn","toolbars","toolbar","e","jsxs","ImageViewerImage","src","alt","width","height","preview","previewSrc","fallback","placeholder","wrapperClassName","onPreviewClick","onError","props","loading","setLoading","error","setError","viewerVisible","setViewerVisible","handleLoad","handleError","handlePreview","handleCloseViewer","showPlaceholder","showFallback","showPreviewMask","Fragment","ZoomIn","ImageViewerGroup","children","contextValue","React","ImageViewerGroupContext"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("@tanstack/react-table"),b=require("./data-table-pagination.cjs");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const c=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const l=require("../../packages/ui/src/components/table.cjs"),a=require("../../utils/data-table.cjs"),g=require("./data-table-column-header.cjs");function j({table:s,actionBar:u,children:q,className:m,pagination:n=!0,sticky:T,bordered:f,loading:d,footer:o,...x}){return e.jsxs("div",{className:c.cn("ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative",m),...x,children:[q,d&&e.jsx("div",{className:"ds:absolute ds:inset-0 ds:bg-background/50 ds:flex ds:items-center ds:justify-center ds:z-20",children:"Loading..."}),e.jsx("div",{className:c.cn("ds:overflow-auto ds:rounded-md ds:border ds-border-border",d&&"ds:blur-sm"),children:e.jsxs(l.Table,{children:[e.jsx(l.TableHeader,{children:s.getHeaderGroups().map(i=>e.jsx(l.TableRow,{children:i.headers.map(r=>e.jsx(l.TableHead,{colSpan:r.colSpan,style:{...a.getCommonPinningStyles({column:r.column})},children:r.isPlaceholder?null:r.column.columnDef.header?typeof r.column.columnDef.header=="function"?t.flexRender(r.column.columnDef.header,r.getContext()):e.jsx(g.DataTableColumnHeader,{column:r.column}):null},r.id))},i.id))}),e.jsx(l.TableBody,{children:s.getRowModel().rows?.length?s.getRowModel().rows.map(i=>e.jsx(l.TableRow,{"data-state":i.getIsSelected()&&"selected",children:i.getVisibleCells().map(r=>e.jsx(l.TableCell,{style:{...a.getCommonPinningStyles({column:r.column})},children:t.flexRender(r.column.columnDef.cell,r.getContext())},r.id))},i.id)):e.jsx(l.TableRow,{children:e.jsx(l.TableCell,{colSpan:s.getAllColumns().length,className:"ds:h-24 ds:text-center",children:"No results."})})}),o&&e.jsx("tfoot",{children:e.jsx(l.TableRow,{children:e.jsx(l.TableCell,{colSpan:s.getAllColumns().length,children:o(s.getRowModel().rows.map(i=>i.original))})})})]})}),e.jsxs("div",{className:"ds:flex ds:flex-col ds:gap-2.5",children:[n&&e.jsx(b.DataTablePagination,{table:s,...n===!0?{}:n}),u&&s.getFilteredSelectedRowModel().rows.length>0&&u]})]})}exports.DataTable=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("@tanstack/react-table"),b=require("./data-table-pagination.cjs");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const c=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const l=require("../../packages/ui/src/components/table.cjs"),a=require("../../utils/data-table.cjs"),g=require("./data-table-column-header.cjs");function j({table:s,actionBar:u,children:q,className:m,pagination:n=!0,sticky:T,bordered:f,loading:d,footer:o,...x}){return e.jsxs("div",{className:c.cn("ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative",m),...x,children:[q,d&&e.jsx("div",{className:"ds:absolute ds:inset-0 ds:bg-background/50 ds:flex ds:items-center ds:justify-center ds:z-20",children:"Loading..."}),e.jsx("div",{className:c.cn("ds:overflow-auto ds:rounded-md ds:border ds:border-border",d&&"ds:blur-sm"),children:e.jsxs(l.Table,{children:[e.jsx(l.TableHeader,{children:s.getHeaderGroups().map(i=>e.jsx(l.TableRow,{children:i.headers.map(r=>e.jsx(l.TableHead,{colSpan:r.colSpan,style:{...a.getCommonPinningStyles({column:r.column})},children:r.isPlaceholder?null:r.column.columnDef.header?typeof r.column.columnDef.header=="function"?t.flexRender(r.column.columnDef.header,r.getContext()):e.jsx(g.DataTableColumnHeader,{column:r.column}):null},r.id))},i.id))}),e.jsx(l.TableBody,{children:s.getRowModel().rows?.length?s.getRowModel().rows.map(i=>e.jsx(l.TableRow,{"data-state":i.getIsSelected()&&"selected",children:i.getVisibleCells().map(r=>e.jsx(l.TableCell,{style:{...a.getCommonPinningStyles({column:r.column})},children:t.flexRender(r.column.columnDef.cell,r.getContext())},r.id))},i.id)):e.jsx(l.TableRow,{children:e.jsx(l.TableCell,{colSpan:s.getAllColumns().length,className:"ds:h-24 ds:text-center",children:"No results."})})}),o&&e.jsx("tfoot",{children:e.jsx(l.TableRow,{children:e.jsx(l.TableCell,{colSpan:s.getAllColumns().length,children:o(s.getRowModel().rows.map(i=>i.original))})})})]})}),e.jsxs("div",{className:"ds:flex ds:flex-col ds:gap-2.5",children:[n&&e.jsx(b.DataTablePagination,{table:s,...n===!0?{}:n}),u&&s.getFilteredSelectedRowModel().rows.length>0&&u]})]})}exports.DataTable=j;
2
2
  //# sourceMappingURL=data-table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.cjs","sources":["../../../../src/components/Table/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport type * as React from \"react\";\n\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport {\n cn,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@dsui/ui\";\nimport { getCommonPinningStyles } from \"@/utils/data-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\n\nexport interface DataTableProps<TData> extends React.ComponentProps<\"div\"> {\n table: TanstackTable<TData>;\n actionBar?: React.ReactNode;\n pagination?:\n | boolean\n | Omit<React.ComponentProps<typeof DataTablePagination<TData>>, \"table\">;\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number };\n bordered?: boolean;\n loading?: boolean;\n footer?: (currentPageData: TData[]) => React.ReactNode;\n}\n\nexport function DataTable<TData>({\n table,\n actionBar,\n children,\n className,\n pagination = true,\n sticky,\n bordered,\n loading,\n footer,\n ...props\n}: DataTableProps<TData>) {\n return (\n <div\n className={cn(\n \"ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative\",\n className\n )}\n {...props}\n >\n {children}\n {loading && (\n <div className=\"ds:absolute ds:inset-0 ds:bg-background/50 ds:flex ds:items-center ds:justify-center ds:z-20\">\n Loading...\n </div>\n )}\n <div\n className={cn(\n \"ds:overflow-auto ds:rounded-md ds:border ds-border-border\",\n loading && \"ds:blur-sm\"\n )}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n colSpan={header.colSpan}\n style={{\n ...getCommonPinningStyles({ column: header.column }),\n }}\n >\n {header.isPlaceholder ? null : header.column.columnDef\n .header ? (\n typeof header.column.columnDef.header === \"function\" ? (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n ) : (\n <DataTableColumnHeader column={header.column} />\n )\n ) : null}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles({ column: cell.column }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getAllColumns().length}\n className=\"ds:h-24 ds:text-center\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {footer && (\n <tfoot>\n <TableRow>\n <TableCell colSpan={table.getAllColumns().length}>\n {footer(table.getRowModel().rows.map((row) => row.original))}\n </TableCell>\n </TableRow>\n </tfoot>\n )}\n </Table>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-2.5\">\n {pagination && (\n <DataTablePagination\n table={table}\n {...(pagination === true ? {} : pagination)}\n />\n )}\n {actionBar &&\n table.getFilteredSelectedRowModel().rows.length > 0 &&\n actionBar}\n </div>\n </div>\n );\n}\n"],"names":["DataTable","table","actionBar","children","className","pagination","sticky","bordered","loading","footer","props","jsxs","cn","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","getCommonPinningStyles","flexRender","DataTableColumnHeader","TableBody","row","cell","TableCell","DataTablePagination"],"mappings":"kwDA4BO,SAASA,EAAiB,CAAA,MAC/BC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,WAAAC,EAAa,GACb,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uDACAR,CAAA,EAED,GAAGM,EAEH,SAAA,CAAAP,EACAK,GACCK,EAAAA,IAAC,MAAA,CAAI,UAAU,+FAA+F,SAAA,aAE9G,EAEFA,EAAAA,IAAC,MAAA,CACC,UAAWD,EAAAA,GACT,4DACAJ,GAAW,YAAA,EAGb,gBAACM,QAAA,CACC,SAAA,CAAAD,EAAAA,IAACE,EAAAA,YAAA,CACE,SAAAd,EAAM,gBAAA,EAAkB,IAAKe,GAC5BH,EAAAA,IAACI,EAAAA,SAAA,CACE,SAAAD,EAAY,QAAQ,IAAKE,GACxBL,EAAAA,IAACM,EAAAA,UAAA,CAEC,QAASD,EAAO,QAChB,MAAO,CACL,GAAGE,yBAAuB,CAAE,OAAQF,EAAO,OAAQ,CAAA,EAGpD,SAAAA,EAAO,cAAgB,KAAOA,EAAO,OAAO,UACxC,OACH,OAAOA,EAAO,OAAO,UAAU,QAAW,WACxCG,EAAAA,WACEH,EAAO,OAAO,UAAU,OACxBA,EAAO,WAAA,CAAW,EAGpBL,EAAAA,IAACS,EAAAA,sBAAA,CAAsB,OAAQJ,EAAO,OAAQ,EAE9C,IAAA,EAhBCA,EAAO,EAAA,CAkBf,GArBYF,EAAY,EAsB3B,CACD,CAAA,CACH,EACAH,EAAAA,IAACU,EAAAA,UAAA,CACE,SAAAtB,EAAM,YAAA,EAAc,MAAM,OACzBA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAC5BX,EAAAA,IAACI,EAAAA,SAAA,CAEC,aAAYO,EAAI,cAAA,GAAmB,WAElC,SAAAA,EAAI,gBAAA,EAAkB,IAAKC,GAC1BZ,EAAAA,IAACa,EAAAA,UAAA,CAEC,MAAO,CACL,GAAGN,yBAAuB,CAAE,OAAQK,EAAK,OAAQ,CAAA,EAGlD,SAAAJ,EAAAA,WACCI,EAAK,OAAO,UAAU,KACtBA,EAAK,WAAA,CAAW,CAClB,EARKA,EAAK,EAAA,CAUb,CAAA,EAfID,EAAI,EAAA,CAiBZ,EAEDX,EAAAA,IAACI,WAAA,CACC,SAAAJ,EAAAA,IAACa,EAAAA,UAAA,CACC,QAASzB,EAAM,cAAA,EAAgB,OAC/B,UAAU,yBACX,SAAA,aAAA,CAAA,EAGH,CAAA,CAEJ,EACCQ,GACCI,EAAAA,IAAC,QAAA,CACC,SAAAA,EAAAA,IAACI,EAAAA,SAAA,CACC,eAACS,EAAAA,UAAA,CAAU,QAASzB,EAAM,cAAA,EAAgB,OACvC,WAAOA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAAQA,EAAI,QAAQ,CAAC,CAAA,CAC7D,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,EAEFb,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACZ,SAAA,CAAAN,GACCQ,EAAAA,IAACc,EAAAA,oBAAA,CAAA,MACC1B,EACC,GAAII,IAAe,GAAO,GAAKA,CAAA,CAAA,EAGnCH,GACCD,EAAM,4BAAA,EAA8B,KAAK,OAAS,GAClDC,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CAGN"}
1
+ {"version":3,"file":"data-table.cjs","sources":["../../../../src/components/Table/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport type * as React from \"react\";\n\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport {\n cn,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@dsui/ui\";\nimport { getCommonPinningStyles } from \"@/utils/data-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\n\nexport interface DataTableProps<TData> extends React.ComponentProps<\"div\"> {\n table: TanstackTable<TData>;\n actionBar?: React.ReactNode;\n pagination?:\n | boolean\n | Omit<React.ComponentProps<typeof DataTablePagination<TData>>, \"table\">;\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number };\n bordered?: boolean;\n loading?: boolean;\n footer?: (currentPageData: TData[]) => React.ReactNode;\n}\n\nexport function DataTable<TData>({\n table,\n actionBar,\n children,\n className,\n pagination = true,\n sticky,\n bordered,\n loading,\n footer,\n ...props\n}: DataTableProps<TData>) {\n return (\n <div\n className={cn(\n \"ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative\",\n className\n )}\n {...props}\n >\n {children}\n {loading && (\n <div className=\"ds:absolute ds:inset-0 ds:bg-background/50 ds:flex ds:items-center ds:justify-center ds:z-20\">\n Loading...\n </div>\n )}\n <div\n className={cn(\n \"ds:overflow-auto ds:rounded-md ds:border ds:border-border\",\n loading && \"ds:blur-sm\"\n )}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n colSpan={header.colSpan}\n style={{\n ...getCommonPinningStyles({ column: header.column }),\n }}\n >\n {header.isPlaceholder ? null : header.column.columnDef\n .header ? (\n typeof header.column.columnDef.header === \"function\" ? (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n ) : (\n <DataTableColumnHeader column={header.column} />\n )\n ) : null}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles({ column: cell.column }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getAllColumns().length}\n className=\"ds:h-24 ds:text-center\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {footer && (\n <tfoot>\n <TableRow>\n <TableCell colSpan={table.getAllColumns().length}>\n {footer(table.getRowModel().rows.map((row) => row.original))}\n </TableCell>\n </TableRow>\n </tfoot>\n )}\n </Table>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-2.5\">\n {pagination && (\n <DataTablePagination\n table={table}\n {...(pagination === true ? {} : pagination)}\n />\n )}\n {actionBar &&\n table.getFilteredSelectedRowModel().rows.length > 0 &&\n actionBar}\n </div>\n </div>\n );\n}\n"],"names":["DataTable","table","actionBar","children","className","pagination","sticky","bordered","loading","footer","props","jsxs","cn","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","getCommonPinningStyles","flexRender","DataTableColumnHeader","TableBody","row","cell","TableCell","DataTablePagination"],"mappings":"kwDA4BO,SAASA,EAAiB,CAAA,MAC/BC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,WAAAC,EAAa,GACb,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uDACAR,CAAA,EAED,GAAGM,EAEH,SAAA,CAAAP,EACAK,GACCK,EAAAA,IAAC,MAAA,CAAI,UAAU,+FAA+F,SAAA,aAE9G,EAEFA,EAAAA,IAAC,MAAA,CACC,UAAWD,EAAAA,GACT,4DACAJ,GAAW,YAAA,EAGb,gBAACM,QAAA,CACC,SAAA,CAAAD,EAAAA,IAACE,EAAAA,YAAA,CACE,SAAAd,EAAM,gBAAA,EAAkB,IAAKe,GAC5BH,EAAAA,IAACI,EAAAA,SAAA,CACE,SAAAD,EAAY,QAAQ,IAAKE,GACxBL,EAAAA,IAACM,EAAAA,UAAA,CAEC,QAASD,EAAO,QAChB,MAAO,CACL,GAAGE,yBAAuB,CAAE,OAAQF,EAAO,OAAQ,CAAA,EAGpD,SAAAA,EAAO,cAAgB,KAAOA,EAAO,OAAO,UACxC,OACH,OAAOA,EAAO,OAAO,UAAU,QAAW,WACxCG,EAAAA,WACEH,EAAO,OAAO,UAAU,OACxBA,EAAO,WAAA,CAAW,EAGpBL,EAAAA,IAACS,EAAAA,sBAAA,CAAsB,OAAQJ,EAAO,OAAQ,EAE9C,IAAA,EAhBCA,EAAO,EAAA,CAkBf,GArBYF,EAAY,EAsB3B,CACD,CAAA,CACH,EACAH,EAAAA,IAACU,EAAAA,UAAA,CACE,SAAAtB,EAAM,YAAA,EAAc,MAAM,OACzBA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAC5BX,EAAAA,IAACI,EAAAA,SAAA,CAEC,aAAYO,EAAI,cAAA,GAAmB,WAElC,SAAAA,EAAI,gBAAA,EAAkB,IAAKC,GAC1BZ,EAAAA,IAACa,EAAAA,UAAA,CAEC,MAAO,CACL,GAAGN,yBAAuB,CAAE,OAAQK,EAAK,OAAQ,CAAA,EAGlD,SAAAJ,EAAAA,WACCI,EAAK,OAAO,UAAU,KACtBA,EAAK,WAAA,CAAW,CAClB,EARKA,EAAK,EAAA,CAUb,CAAA,EAfID,EAAI,EAAA,CAiBZ,EAEDX,EAAAA,IAACI,WAAA,CACC,SAAAJ,EAAAA,IAACa,EAAAA,UAAA,CACC,QAASzB,EAAM,cAAA,EAAgB,OAC/B,UAAU,yBACX,SAAA,aAAA,CAAA,EAGH,CAAA,CAEJ,EACCQ,GACCI,EAAAA,IAAC,QAAA,CACC,SAAAA,EAAAA,IAACI,EAAAA,SAAA,CACC,eAACS,EAAAA,UAAA,CAAU,QAASzB,EAAM,cAAA,EAAgB,OACvC,WAAOA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAAQA,EAAI,QAAQ,CAAC,CAAA,CAC7D,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,EAEFb,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACZ,SAAA,CAAAN,GACCQ,EAAAA,IAACc,EAAAA,oBAAA,CAAA,MACC1B,EACC,GAAII,IAAe,GAAO,GAAKA,CAAA,CAAA,EAGnCH,GACCD,EAAM,4BAAA,EAA8B,KAAK,OAAS,GAClDC,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CAGN"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@tanstack/react-table"),l=require("nuqs"),te=require("react"),ne=require("./use-debounced-callback.cjs"),oe=require("../utils/parsers.cjs");function se(d){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(d){for(const f in d)if(f!=="default"){const s=Object.getOwnPropertyDescriptor(d,f);Object.defineProperty(a,f,s.get?s:{enumerable:!0,get:()=>d[f]})}}return a.default=d,Object.freeze(a)}const t=se(te),ie="page",ae="perPage",re="sort",le="filters",ce="joinOperator",ue=",",ge=300,de=50;function fe(d){const{columns:a,pageCount:f,initialState:s,queryKeys:b,history:_="replace",debounceMs:y=ge,throttleMs:M=de,clearOnDefault:q=!1,enableAdvancedFilter:c=!1,scroll:K=!1,shallow:R=!0,startTransition:D,enableNuqs:i=!1,...P}=d,I=b?.page??ie,j=b?.perPage??ae,x=b?.sort??re,k=b?.filters??le,N=b?.joinOperator??ce,p=t.useMemo(()=>({history:_,scroll:K,shallow:R,throttleMs:M,debounceMs:y,clearOnDefault:q,startTransition:D}),[_,K,R,M,y,q,D]),[Q,U]=t.useState(s?.rowSelection??{}),[V,B]=t.useState(s?.columnVisibility??{}),[C,w]=i?l.useQueryState(I,l.parseAsInteger.withOptions(p).withDefault(1)):t.useState(s?.pagination?.pageIndex??0),[v,F]=i?l.useQueryState(j,l.parseAsInteger.withOptions(p).withDefault(s?.pagination?.pageSize??10)):t.useState(s?.pagination?.pageSize??10),A=t.useMemo(()=>({pageIndex:i?C-1:C,pageSize:v}),[C,v,i]),G=t.useCallback(e=>{if(typeof e=="function"){const n=e(A);w(i?n.pageIndex+1:n.pageIndex),F(n.pageSize)}else w(i?e.pageIndex+1:e.pageIndex),F(e.pageSize)},[A,w,F,i]),H=t.useMemo(()=>new Set(a.map(e=>e.id).filter(Boolean)),[a]),[O,h]=i?l.useQueryState(x,oe.getSortingStateParser(H).withOptions(p).withDefault(s?.sorting??[])):t.useState(s?.sorting??[]),L=t.useCallback(e=>{if(typeof e=="function"){const n=e(O);h(n)}else h(e)},[O,h]),S=t.useMemo(()=>c?[]:a.filter(e=>e.enableColumnFilter),[a,c]),Z=t.useMemo(()=>c?{}:S.reduce((e,n)=>(n.meta?.variant==="multiSelect"?e[n.id??""]=l.parseAsArrayOf(l.parseAsString,ue).withOptions(p):e[n.id??""]=l.parseAsString.withOptions(p),e),{}),[S,p,c]),[z,J]=i?l.useQueryStates(Z):t.useState({}),Y=ne.useDebouncedCallback(e=>{w(1),J(e)},y),W=t.useMemo(()=>c?[]:Object.entries(z).reduce((e,[n,o])=>{if(o!==null){const r=S.find(m=>m.id===n)?.meta?.variant==="multiSelect",u=Array.isArray(o)?o:r&&typeof o=="string"&&/[^a-zA-Z0-9]/.test(o)?o.split(/[^a-zA-Z0-9]+/).filter(Boolean):r?[o]:o;e.push({id:n,value:u})}return e},[]),[z,c,S]),[X,$]=t.useState(W),ee=t.useCallback(e=>{c||$(n=>{const o=typeof e=="function"?e(n):e,E=o.reduce((r,u)=>{const m=S.find(T=>T.id===u.id);if(m){const T=m.meta?.variant==="multiSelect";r[u.id]=u.value}return console.log("filterParsers",m,r),r},{});for(const r of n)o.some(u=>u.id===r.id)||(E[r.id]=null);return i&&Y(E),o})},[Y,S,c,i]);return{table:g.useReactTable({initialState:s,pageCount:f,state:{pagination:A,sorting:O,columnVisibility:V,rowSelection:Q,columnFilters:X},defaultColumn:{...P.defaultColumn,enableColumnFilter:!0,enableSorting:!1,enableHiding:!0,enablePinning:!0},enableRowSelection:!0,onRowSelectionChange:U,onPaginationChange:G,onSortingChange:L,onColumnFiltersChange:ee,onColumnVisibilityChange:B,getCoreRowModel:g.getCoreRowModel(),getFilteredRowModel:g.getFilteredRowModel(),getPaginationRowModel:g.getPaginationRowModel(),getSortedRowModel:g.getSortedRowModel(),getFacetedRowModel:g.getFacetedRowModel(),getFacetedUniqueValues:g.getFacetedUniqueValues(),getFacetedMinMaxValues:g.getFacetedMinMaxValues(),meta:{...P.meta,queryKeys:{page:I,perPage:j,sort:x,filters:k,joinOperator:N}},...P,columns:a}),shallow:R,debounceMs:y,throttleMs:M}}exports.useDataTable=fe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@tanstack/react-table"),l=require("nuqs"),oe=require("react"),se=require("./use-debounced-callback.cjs"),ie=require("../utils/parsers.cjs");function re(d){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(d){for(const f in d)if(f!=="default"){const o=Object.getOwnPropertyDescriptor(d,f);Object.defineProperty(r,f,o.get?o:{enumerable:!0,get:()=>d[f]})}}return r.default=d,Object.freeze(r)}const t=re(oe),ae="page",le="perPage",ue="sort",ce="filters",ge="joinOperator",de=",",fe=300,pe=50;function Se(d){const{columns:r,pageCount:f,initialState:o,queryKeys:m,history:_="replace",debounceMs:y=fe,throttleMs:M=pe,clearOnDefault:q=!1,enableAdvancedFilter:u=!1,scroll:K=!1,shallow:C=!0,startTransition:D,enableNuqs:i=!1,...R}=d,I=m?.page??ae,j=m?.perPage??le,x=m?.sort??ue,k=m?.filters??ce,N=m?.joinOperator??ge,p=t.useMemo(()=>({history:_,scroll:K,shallow:C,throttleMs:M,debounceMs:y,clearOnDefault:q,startTransition:D}),[_,K,C,M,y,q,D]),[Q,U]=t.useState(o?.rowSelection??{}),[V,B]=t.useState(o?.columnVisibility??{}),[G,H]=t.useState(o?.columnOrder??[]),[P,w]=i?l.useQueryState(I,l.parseAsInteger.withOptions(p).withDefault(1)):t.useState(o?.pagination?.pageIndex??0),[v,O]=i?l.useQueryState(j,l.parseAsInteger.withOptions(p).withDefault(o?.pagination?.pageSize??10)):t.useState(o?.pagination?.pageSize??10),F=t.useMemo(()=>({pageIndex:i?P-1:P,pageSize:v}),[P,v,i]),L=t.useCallback(e=>{if(typeof e=="function"){const n=e(F);w(i?n.pageIndex+1:n.pageIndex),O(n.pageSize)}else w(i?e.pageIndex+1:e.pageIndex),O(e.pageSize)},[F,w,O,i]),Z=t.useMemo(()=>new Set(r.map(e=>e.id).filter(Boolean)),[r]),[h,A]=i?l.useQueryState(x,ie.getSortingStateParser(Z).withOptions(p).withDefault(o?.sorting??[])):t.useState(o?.sorting??[]),J=t.useCallback(e=>{if(typeof e=="function"){const n=e(h);A(n)}else A(e)},[h,A]),S=t.useMemo(()=>u?[]:r.filter(e=>e.enableColumnFilter),[r,u]),W=t.useMemo(()=>u?{}:S.reduce((e,n)=>(n.meta?.variant==="multiSelect"?e[n.id??""]=l.parseAsArrayOf(l.parseAsString,de).withOptions(p):e[n.id??""]=l.parseAsString.withOptions(p),e),{}),[S,p,u]),[z,X]=i?l.useQueryStates(W):t.useState({}),Y=se.useDebouncedCallback(e=>{w(1),X(e)},y),$=t.useMemo(()=>u?[]:Object.entries(z).reduce((e,[n,s])=>{if(s!==null){const a=S.find(b=>b.id===n)?.meta?.variant==="multiSelect",c=Array.isArray(s)?s:a&&typeof s=="string"&&/[^a-zA-Z0-9]/.test(s)?s.split(/[^a-zA-Z0-9]+/).filter(Boolean):a?[s]:s;e.push({id:n,value:c})}return e},[]),[z,u,S]),[ee,te]=t.useState($),ne=t.useCallback(e=>{u||te(n=>{const s=typeof e=="function"?e(n):e,E=s.reduce((a,c)=>{const b=S.find(T=>T.id===c.id);if(b){const T=b.meta?.variant==="multiSelect";a[c.id]=c.value}return console.log("filterParsers",b,a),a},{});for(const a of n)s.some(c=>c.id===a.id)||(E[a.id]=null);return i&&Y(E),s})},[Y,S,u,i]);return{table:g.useReactTable({initialState:o,pageCount:f,state:{pagination:F,sorting:h,columnVisibility:V,columnOrder:G,rowSelection:Q,columnFilters:ee},defaultColumn:{...R.defaultColumn,enableColumnFilter:!0,enableSorting:!1,enableHiding:!0,enablePinning:!0},enableRowSelection:!0,onRowSelectionChange:U,onPaginationChange:L,onSortingChange:J,onColumnFiltersChange:ne,onColumnVisibilityChange:B,onColumnOrderChange:H,getCoreRowModel:g.getCoreRowModel(),getFilteredRowModel:g.getFilteredRowModel(),getPaginationRowModel:g.getPaginationRowModel(),getSortedRowModel:g.getSortedRowModel(),getFacetedRowModel:g.getFacetedRowModel(),getFacetedUniqueValues:g.getFacetedUniqueValues(),getFacetedMinMaxValues:g.getFacetedMinMaxValues(),meta:{...R.meta,queryKeys:{page:I,perPage:j,sort:x,filters:k,joinOperator:N}},...R,columns:r}),shallow:C,debounceMs:y,throttleMs:M}}exports.useDataTable=Se;
2
2
  //# sourceMappingURL=use-data-table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-data-table.cjs","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
1
+ {"version":3,"file":"use-data-table.cjs","sources":["../../../src/hooks/use-data-table.ts"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nimport {\n type ColumnFiltersState,\n type ColumnOrderState,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type TableOptions,\n type TableState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport {\n parseAsArrayOf,\n parseAsInteger,\n parseAsString,\n type SingleParser,\n type UseQueryStateOptions,\n useQueryState,\n useQueryStates,\n} from \"nuqs\";\nimport * as React from \"react\";\n\nimport { useDebouncedCallback } from \"@/hooks/use-debounced-callback\";\nimport { getSortingStateParser } from \"@/utils/parsers\";\nimport type { ExtendedColumnSort, QueryKeys } from \"@/types/data-table\";\n\nconst PAGE_KEY = \"page\";\nconst PER_PAGE_KEY = \"perPage\";\nconst SORT_KEY = \"sort\";\nconst FILTERS_KEY = \"filters\";\nconst JOIN_OPERATOR_KEY = \"joinOperator\";\nconst ARRAY_SEPARATOR = \",\";\nconst DEBOUNCE_MS = 300;\nconst THROTTLE_MS = 50;\n\ninterface UseDataTableProps<TData>\n extends Omit<\n TableOptions<TData>,\n // | \"state\"\n // | \"pageCount\"\n \"getCoreRowModel\"\n > {\n initialState?: Omit<Partial<TableState>, \"sorting\"> & {\n sorting?: ExtendedColumnSort<TData>[];\n };\n queryKeys?: Partial<QueryKeys>;\n history?: \"push\" | \"replace\";\n debounceMs?: number;\n throttleMs?: number;\n clearOnDefault?: boolean;\n enableAdvancedFilter?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n startTransition?: React.TransitionStartFunction;\n enableNuqs?: boolean;\n}\n\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\n const {\n columns,\n pageCount,\n initialState,\n queryKeys,\n history = \"replace\",\n debounceMs = DEBOUNCE_MS,\n throttleMs = THROTTLE_MS,\n clearOnDefault = false,\n enableAdvancedFilter = false,\n scroll = false,\n shallow = true,\n startTransition,\n enableNuqs = false,\n ...tableProps\n } = props;\n const pageKey = queryKeys?.page ?? PAGE_KEY;\n const perPageKey = queryKeys?.perPage ?? PER_PAGE_KEY;\n const sortKey = queryKeys?.sort ?? SORT_KEY;\n const filtersKey = queryKeys?.filters ?? FILTERS_KEY;\n const joinOperatorKey = queryKeys?.joinOperator ?? JOIN_OPERATOR_KEY;\n\n const queryStateOptions = React.useMemo<\n Omit<UseQueryStateOptions<string>, \"parse\">\n >(\n () => ({\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition: startTransition as any,\n }),\n [\n history,\n scroll,\n shallow,\n throttleMs,\n debounceMs,\n clearOnDefault,\n startTransition,\n ]\n );\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n initialState?.rowSelection ?? {}\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n initialState?.columnOrder ?? []\n );\n\n const [page, setPage] = enableNuqs\n ? useQueryState(\n pageKey,\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\n )\n : React.useState(initialState?.pagination?.pageIndex ?? 0);\n\n const [perPage, setPerPage] = enableNuqs\n ? useQueryState(\n perPageKey,\n parseAsInteger\n .withOptions(queryStateOptions)\n .withDefault(initialState?.pagination?.pageSize ?? 10)\n )\n : React.useState(initialState?.pagination?.pageSize ?? 10);\n\n const pagination: PaginationState = React.useMemo(() => {\n return {\n pageIndex: enableNuqs ? page - 1 : page, // zero-based index\n pageSize: perPage,\n };\n }, [page, perPage, enableNuqs]);\n\n const onPaginationChange = React.useCallback(\n (updaterOrValue: Updater<PaginationState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newPagination = updaterOrValue(pagination);\n void setPage(\n enableNuqs ? newPagination.pageIndex + 1 : newPagination.pageIndex\n );\n void setPerPage(newPagination.pageSize);\n } else {\n void setPage(\n enableNuqs ? updaterOrValue.pageIndex + 1 : updaterOrValue.pageIndex\n );\n void setPerPage(updaterOrValue.pageSize);\n }\n },\n [pagination, setPage, setPerPage, enableNuqs]\n );\n\n const columnIds = React.useMemo(() => {\n return new Set(\n columns.map((column) => column.id).filter(Boolean) as string[]\n );\n }, [columns]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n // to avoid violating React hooks rules. If it changes, it may cause issues.\n const [sorting, setSorting] = enableNuqs\n ? useQueryState(\n sortKey,\n getSortingStateParser<TData>(columnIds)\n .withOptions(queryStateOptions)\n .withDefault(initialState?.sorting ?? [])\n )\n : React.useState(initialState?.sorting ?? []);\n\n const onSortingChange = React.useCallback(\n (updaterOrValue: Updater<SortingState>) => {\n if (typeof updaterOrValue === \"function\") {\n const newSorting = updaterOrValue(sorting);\n setSorting(newSorting as ExtendedColumnSort<TData>[]);\n } else {\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[]);\n }\n },\n [sorting, setSorting]\n );\n\n const filterableColumns = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return columns.filter((column) => column.enableColumnFilter);\n }, [columns, enableAdvancedFilter]);\n\n const filterParsers = React.useMemo(() => {\n if (enableAdvancedFilter) return {};\n\n return filterableColumns.reduce<\n Record<string, SingleParser<string> | SingleParser<string[]>>\n >((acc, column) => {\n if (column.meta?.variant === \"multiSelect\") {\n acc[column.id ?? \"\"] = parseAsArrayOf(\n parseAsString,\n ARRAY_SEPARATOR\n ).withOptions(queryStateOptions);\n } else {\n acc[column.id ?? \"\"] = parseAsString.withOptions(queryStateOptions);\n }\n return acc;\n }, {});\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter]);\n\n // Note: enableNuqs should be stable (not change during component lifecycle)\n const [filterValues, setFilterValues] = enableNuqs\n ? useQueryStates(filterParsers)\n : React.useState<Record<string, string | string[] | null>>({});\n\n const debouncedSetFilterValues = useDebouncedCallback(\n (values: typeof filterValues) => {\n void setPage(1);\n void setFilterValues(values);\n },\n debounceMs\n );\n\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\n if (enableAdvancedFilter) return [];\n\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\n (filters, [key, value]) => {\n if (value !== null) {\n const column = filterableColumns.find((col) => col.id === key);\n const isMultiSelect = column?.meta?.variant === \"multiSelect\";\n\n const processedValue = Array.isArray(value)\n ? value\n : isMultiSelect &&\n typeof value === \"string\" &&\n /[^a-zA-Z0-9]/.test(value)\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n : isMultiSelect\n ? [value]\n : value;\n\n filters.push({\n id: key,\n value: processedValue,\n });\n }\n return filters;\n },\n []\n );\n }, [filterValues, enableAdvancedFilter, filterableColumns]);\n\n const [columnFilters, setColumnFilters] =\n React.useState<ColumnFiltersState>(initialColumnFilters);\n\n const onColumnFiltersChange = React.useCallback(\n (updaterOrValue: Updater<ColumnFiltersState>) => {\n if (enableAdvancedFilter) return;\n\n setColumnFilters((prev) => {\n const next =\n typeof updaterOrValue === \"function\"\n ? updaterOrValue(prev)\n : updaterOrValue;\n\n const filterUpdates = next.reduce<\n Record<string, string | string[] | null>\n >((acc, filter) => {\n const column = filterableColumns.find((col) => col.id === filter.id);\n if (column) {\n const isMultiSelect = column.meta?.variant === \"multiSelect\";\n acc[filter.id] = isMultiSelect\n ? (filter.value as string[])\n : (filter.value as string);\n }\n console.log(\"filterParsers\", column, acc);\n return acc;\n }, {});\n\n for (const prevFilter of prev) {\n if (!next.some((filter) => filter.id === prevFilter.id)) {\n filterUpdates[prevFilter.id] = null;\n }\n }\n\n if (enableNuqs) {\n debouncedSetFilterValues(filterUpdates);\n }\n return next;\n });\n },\n [\n debouncedSetFilterValues,\n filterableColumns,\n enableAdvancedFilter,\n enableNuqs,\n ]\n );\n\n const table = useReactTable({\n initialState,\n pageCount,\n state: {\n pagination,\n sorting,\n columnVisibility,\n columnOrder,\n rowSelection,\n columnFilters,\n },\n defaultColumn: {\n ...tableProps.defaultColumn,\n enableColumnFilter: true,\n enableSorting: false,\n enableHiding: true,\n enablePinning: true,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n meta: {\n ...tableProps.meta,\n queryKeys: {\n page: pageKey,\n perPage: perPageKey,\n sort: sortKey,\n filters: filtersKey,\n joinOperator: joinOperatorKey,\n },\n },\n ...tableProps,\n columns,\n });\n\n return { table, shallow, debounceMs, throttleMs };\n}\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","FILTERS_KEY","JOIN_OPERATOR_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","queryKeys","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","enableNuqs","tableProps","pageKey","perPageKey","sortKey","filtersKey","joinOperatorKey","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnOrder","setColumnOrder","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","column","sorting","setSorting","getSortingStateParser","onSortingChange","newSorting","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","filters","key","value","isMultiSelect","col","processedValue","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("../lib/utils.cjs");function l({className:e,...t}){return a.jsx("div",{"data-slot":"table-container",className:"ds:relative ds:w-full ds:overflow-x-auto",children:a.jsx("table",{"data-slot":"table",className:s.cn("ds:w-full ds:caption-bottom ds:text-sm",e),...t})})}function d({className:e,...t}){return a.jsx("thead",{"data-slot":"table-header",className:s.cn("ds:[&_tr]:border-b",e),...t})}function o({className:e,...t}){return a.jsx("tbody",{"data-slot":"table-body",className:s.cn("ds:[&_tr:last-child]:border-0",e),...t})}function r({className:e,...t}){return a.jsx("tr",{"data-slot":"table-row",className:s.cn("ds:hover:bg-muted/50 ds:data-[state=selected]:bg-muted ds:border-b ds:transition-colors",e),...t})}function n({className:e,...t}){return a.jsx("th",{"data-slot":"table-head",className:s.cn("ds:text-foreground ds:h-10 ds:px-2 ds:text-left ds:align-middle ds:font-medium ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]",e),...t})}function c({className:e,...t}){return a.jsx("td",{"data-slot":"table-cell",className:s.cn("ds:p-2 ds:align-middle ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]",e),...t})}exports.Table=l;exports.TableBody=o;exports.TableCell=c;exports.TableHead=n;exports.TableHeader=d;exports.TableRow=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("../lib/utils.cjs");function d({className:e,...t}){return a.jsx("div",{"data-slot":"table-container",className:"ds:relative ds:w-full ds:overflow-x-auto",children:a.jsx("table",{"data-slot":"table",className:s.cn("ds:w-full ds:caption-bottom ds:text-sm",e),...t})})}function l({className:e,...t}){return a.jsx("thead",{"data-slot":"table-header",className:s.cn("ds:[&_tr]:border-b",e),...t})}function r({className:e,...t}){return a.jsx("tbody",{"data-slot":"table-body",className:s.cn("ds:[&_tr:last-child]:border-0",e),...t})}function o({className:e,...t}){return a.jsx("tr",{"data-slot":"table-row",className:s.cn("ds:hover:bg-muted/50 ds:data-[state=selected]:bg-muted ds:border-b ds:border-border ds:transition-colors",e),...t})}function n({className:e,...t}){return a.jsx("th",{"data-slot":"table-head",className:s.cn("ds:text-foreground ds:h-10 ds:px-2 ds:text-left ds:align-middle ds:font-medium ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]",e),...t})}function b({className:e,...t}){return a.jsx("td",{"data-slot":"table-cell",className:s.cn("ds:p-2 ds:align-middle ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]",e),...t})}exports.Table=d;exports.TableBody=r;exports.TableCell=b;exports.TableHead=n;exports.TableHeader=l;exports.TableRow=o;
2
2
  //# sourceMappingURL=table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.cjs","sources":["../../../../../../../../packages/ui/src/components/table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"ds:relative ds:w-full ds:overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"ds:w-full ds:caption-bottom ds:text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"ds:[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"ds:[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"ds:bg-muted/50 ds:border-t ds:font-medium ds:[&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"ds:hover:bg-muted/50 ds:data-[state=selected]:bg-muted ds:border-b ds:transition-colors\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"ds:text-foreground ds:h-10 ds:px-2 ds:text-left ds:align-middle ds:font-medium ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"ds:p-2 ds:align-middle ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"ds:text-muted-foreground ds:mt-4 ds:text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableRow","TableHead","TableCell"],"mappings":"mJAMA,SAASA,EAAM,CAAE,UAAAC,EAAW,GAAGC,GAAwC,CACrE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,kBACV,UAAU,2CAEV,SAAAA,EAAAA,IAAC,QAAA,CACC,YAAU,QACV,UAAWC,EAAAA,GAAG,yCAA0CH,CAAS,EAChE,GAAGC,CAAA,CAAA,CACN,CAAA,CAGN,CAEA,SAASG,EAAY,CAAE,UAAAJ,EAAW,GAAGC,GAAwC,CAC3E,OACEC,EAAAA,IAAC,QAAA,CACC,YAAU,eACV,UAAWC,EAAAA,GAAG,qBAAsBH,CAAS,EAC5C,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASI,EAAU,CAAE,UAAAL,EAAW,GAAGC,GAAwC,CACzE,OACEC,EAAAA,IAAC,QAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GAAG,gCAAiCH,CAAS,EACvD,GAAGC,CAAA,CAAA,CAGV,CAeA,SAASK,EAAS,CAAE,UAAAN,EAAW,GAAGC,GAAqC,CACrE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,YACV,UAAWC,EAAAA,GACT,0FACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASM,EAAU,CAAE,UAAAP,EAAW,GAAGC,GAAqC,CACtE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GACT,+IACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASO,EAAU,CAAE,UAAAR,EAAW,GAAGC,GAAqC,CACtE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GACT,uFACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV"}
1
+ {"version":3,"file":"table.cjs","sources":["../../../../../../../../packages/ui/src/components/table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"ds:relative ds:w-full ds:overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"ds:w-full ds:caption-bottom ds:text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"ds:[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"ds:[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"ds:bg-muted/50 ds:border-t ds:font-medium ds:[&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"ds:hover:bg-muted/50 ds:data-[state=selected]:bg-muted ds:border-b ds:border-border ds:transition-colors\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"ds:text-foreground ds:h-10 ds:px-2 ds:text-left ds:align-middle ds:font-medium ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"ds:p-2 ds:align-middle ds:whitespace-nowrap ds:[&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"ds:text-muted-foreground ds:mt-4 ds:text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableRow","TableHead","TableCell"],"mappings":"mJAMA,SAASA,EAAM,CAAE,UAAAC,EAAW,GAAGC,GAAwC,CACrE,OACEC,EAAAA,IAAC,MAAA,CACC,YAAU,kBACV,UAAU,2CAEV,SAAAA,EAAAA,IAAC,QAAA,CACC,YAAU,QACV,UAAWC,EAAAA,GAAG,yCAA0CH,CAAS,EAChE,GAAGC,CAAA,CAAA,CACN,CAAA,CAGN,CAEA,SAASG,EAAY,CAAE,UAAAJ,EAAW,GAAGC,GAAwC,CAC3E,OACEC,EAAAA,IAAC,QAAA,CACC,YAAU,eACV,UAAWC,EAAAA,GAAG,qBAAsBH,CAAS,EAC5C,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASI,EAAU,CAAE,UAAAL,EAAW,GAAGC,GAAwC,CACzE,OACEC,EAAAA,IAAC,QAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GAAG,gCAAiCH,CAAS,EACvD,GAAGC,CAAA,CAAA,CAGV,CAeA,SAASK,EAAS,CAAE,UAAAN,EAAW,GAAGC,GAAqC,CACrE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,YACV,UAAWC,EAAAA,GACT,2GACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASM,EAAU,CAAE,UAAAP,EAAW,GAAGC,GAAqC,CACtE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GACT,+IACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASO,EAAU,CAAE,UAAAR,EAAW,GAAGC,GAAqC,CACtE,OACEC,EAAAA,IAAC,KAAA,CACC,YAAU,aACV,UAAWC,EAAAA,GACT,uFACAH,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV"}