@sth87/shadcn-design-system 0.1.5 → 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.
Files changed (65) hide show
  1. package/dist/AI_CONTEXT.md +1 -0
  2. package/dist/cjs/components/Button/Button.cjs +1 -1
  3. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  4. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
  5. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
  6. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
  7. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
  8. package/dist/cjs/components/Input/Input.cjs +1 -1
  9. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  10. package/dist/cjs/components/Table/data-table.cjs +1 -1
  11. package/dist/cjs/components/Table/data-table.cjs.map +1 -1
  12. package/dist/cjs/hooks/use-data-table.cjs +1 -1
  13. package/dist/cjs/hooks/use-data-table.cjs.map +1 -1
  14. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
  15. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
  16. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  17. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  18. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
  19. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
  20. package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
  21. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
  22. package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
  23. package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
  24. package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
  25. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
  26. package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
  27. package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
  28. package/dist/cjs/styles/index.css +1 -1
  29. package/dist/esm/components/Button/Button.js +22 -24
  30. package/dist/esm/components/Button/Button.js.map +1 -1
  31. package/dist/esm/components/DatePicker/RangePicker.js +41 -41
  32. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
  33. package/dist/esm/components/ImageViewer/ImageViewer.js +3 -3
  34. package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
  35. package/dist/esm/components/Input/Input.js +37 -36
  36. package/dist/esm/components/Input/Input.js.map +1 -1
  37. package/dist/esm/components/Table/data-table.js +22 -16
  38. package/dist/esm/components/Table/data-table.js.map +1 -1
  39. package/dist/esm/hooks/use-data-table.js +68 -64
  40. package/dist/esm/hooks/use-data-table.js.map +1 -1
  41. package/dist/esm/packages/ui/src/components/alert-dialog.js +7 -7
  42. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
  43. package/dist/esm/packages/ui/src/components/calendar.js +1 -1
  44. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  45. package/dist/esm/packages/ui/src/components/combobox.js +1 -1
  46. package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
  47. package/dist/esm/packages/ui/src/components/context-menu.js +1 -1
  48. package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
  49. package/dist/esm/packages/ui/src/components/popover.js +1 -1
  50. package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
  51. package/dist/esm/packages/ui/src/components/sidebar.js +2 -2
  52. package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
  53. package/dist/esm/packages/ui/src/components/table.js +5 -5
  54. package/dist/esm/packages/ui/src/components/table.js.map +1 -1
  55. package/dist/esm/styles/index.css +1 -1
  56. package/dist/types/components/Button/Button.d.ts.map +1 -1
  57. package/dist/types/components/Input/Input.d.ts +1 -0
  58. package/dist/types/components/Input/Input.d.ts.map +1 -1
  59. package/dist/types/components/Table/data-table-toolbar.d.ts +3 -1
  60. package/dist/types/components/Table/data-table-toolbar.d.ts.map +1 -1
  61. package/dist/types/components/Table/data-table-view-options.d.ts +12 -3
  62. package/dist/types/components/Table/data-table-view-options.d.ts.map +1 -1
  63. package/dist/types/components/Table/data-table.d.ts.map +1 -1
  64. package/dist/types/hooks/use-data-table.d.ts.map +1 -1
  65. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ImageViewer.js","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.js","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,13 +1,13 @@
1
1
  import { jsx as t, jsxs as o } from "react/jsx-runtime";
2
2
  import r from "react";
3
- import { Input as Q } from "../../packages/ui/src/components/input.js";
3
+ import { Input as W } from "../../packages/ui/src/components/input.js";
4
4
  import { cn as a } from "../../packages/ui/src/lib/utils.js";
5
- import { FloatingLabel as W } from "../FloatLabel.js";
6
- import { Info as Y, ChevronUp as Z, ChevronDown as T, X as q, EyeOff as F, Eye as L } from "lucide-react";
7
- import { withMask as ee } from "use-mask-input";
8
- import { Tooltip as se } from "../Tooltip/Tooltip.js";
9
- import { Label as te } from "../../packages/ui/src/components/label.js";
10
- const de = r.forwardRef(
5
+ import { FloatingLabel as Y } from "../FloatLabel.js";
6
+ import { Info as Z, ChevronUp as T, ChevronDown as q, X as F, EyeOff as L, Eye as ee } from "lucide-react";
7
+ import { withMask as se } from "use-mask-input";
8
+ import { Tooltip as te } from "../Tooltip/Tooltip.js";
9
+ import { Label as de } from "../../packages/ui/src/components/label.js";
10
+ const ne = r.forwardRef(
11
11
  ({
12
12
  className: _,
13
13
  label: x,
@@ -27,11 +27,12 @@ const de = r.forwardRef(
27
27
  suffixIcon: i,
28
28
  placeholder: B = " ",
29
29
  required: C,
30
+ inputClassName: H,
30
31
  ...e
31
- }, H) => {
32
- const [f, M] = r.useState(() => typeof e.value == "string" ? e.value.length : typeof e.defaultValue == "string" ? e.defaultValue.length : 0), U = (s) => {
32
+ }, U) => {
33
+ const [f, M] = r.useState(() => typeof e.value == "string" ? e.value.length : typeof e.defaultValue == "string" ? e.defaultValue.length : 0), X = (s) => {
33
34
  M(s.target.value.length), e.onChange && e.onChange(s);
34
- }, X = () => {
35
+ }, $ = () => {
35
36
  if (d.current) {
36
37
  d.current.value = "", M(0);
37
38
  const s = {
@@ -40,17 +41,17 @@ const de = r.forwardRef(
40
41
  };
41
42
  e.onChange?.(s), I && I();
42
43
  }
43
- }, y = r.useId(), d = r.useRef(null), $ = r.useCallback(
44
+ }, y = r.useId(), d = r.useRef(null), A = r.useCallback(
44
45
  (s) => {
45
46
  if (d && (d.current = s), g && s) {
46
- const m = ee(g, P);
47
+ const m = se(g, P);
47
48
  typeof m == "function" && m(s);
48
49
  }
49
50
  },
50
51
  [g, P]
51
52
  );
52
- r.useImperativeHandle(H, () => d.current);
53
- const [R, A] = r.useState(!1), G = {
53
+ r.useImperativeHandle(U, () => d.current);
54
+ const [R, G] = r.useState(!1), J = {
54
55
  default: "ds:text-muted-foreground",
55
56
  success: "ds:text-success",
56
57
  warning: "ds:text-warning",
@@ -70,7 +71,7 @@ const de = r.forwardRef(
70
71
  normal: "ds:size-4",
71
72
  lg: "ds:size-4",
72
73
  xl: "ds:size-4"
73
- }[z] || "ds:size-4", J = () => {
74
+ }[z] || "ds:size-4", K = () => {
74
75
  const s = n === "number" || n === "password" || n === "datetime" || p && (f > 0 || e?.value);
75
76
  return s && i ? n === "password" && p && (f > 0 || e?.value) ? "ds:pr-20" : "ds:pr-16" : s ? n === "password" && p && (f > 0 || e?.value) ? "ds:pr-16" : "ds:pr-10" : i ? k.suffix : "";
76
77
  }, D = (() => {
@@ -82,14 +83,14 @@ const de = r.forwardRef(
82
83
  xl: { left: "ds:left-4", right: "ds:right-4" }
83
84
  };
84
85
  return s[z] || s.normal;
85
- })(), K = () => {
86
+ })(), O = () => {
86
87
  if (d.current) {
87
88
  const s = Number(e.step || 1), m = e.max ? Number(e.max) : 1 / 0, S = Number(d.current.value || 0), E = Math.min(S + s, m);
88
89
  d.current.value = String(E);
89
90
  const h = new Event("input", { bubbles: !0 });
90
91
  d.current.dispatchEvent(h), e.onChange?.(h);
91
92
  }
92
- }, O = () => {
93
+ }, Q = () => {
93
94
  if (d.current) {
94
95
  const s = Number(e.step || 1), m = e.min ? Number(e.min) : -1 / 0, S = Number(d.current.value || 0), E = Math.max(S - s, m);
95
96
  d.current.value = String(E);
@@ -105,7 +106,7 @@ const de = r.forwardRef(
105
106
  }),
106
107
  children: [
107
108
  !c && x && /* @__PURE__ */ o(
108
- te,
109
+ de,
109
110
  {
110
111
  htmlFor: y,
111
112
  className: "ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70",
@@ -114,7 +115,7 @@ const de = r.forwardRef(
114
115
  x,
115
116
  C && /* @__PURE__ */ t("span", { className: "ds:text-error ds:ml-0.5", children: "*" })
116
117
  ] }),
117
- w && /* @__PURE__ */ t(se, { content: w, children: /* @__PURE__ */ t(Y, { className: "ds:size-3.5 ds:min-w-3.5" }) })
118
+ w && /* @__PURE__ */ t(te, { content: w, children: /* @__PURE__ */ t(Z, { className: "ds:size-3.5 ds:min-w-3.5" }) })
118
119
  ]
119
120
  }
120
121
  ),
@@ -135,9 +136,9 @@ const de = r.forwardRef(
135
136
  }
136
137
  ),
137
138
  /* @__PURE__ */ t(
138
- Q,
139
+ W,
139
140
  {
140
- ref: $,
141
+ ref: A,
141
142
  id: y,
142
143
  className: a(
143
144
  "ds:peer",
@@ -148,21 +149,21 @@ const de = r.forwardRef(
148
149
  },
149
150
  u && k.prefix,
150
151
  g && "ds:placeholder:text-slate-400 ds:placeholder:opacity-100",
151
- J()
152
- // className,
152
+ K(),
153
+ H
153
154
  ),
154
155
  state: N,
155
156
  size: c ? l === "xl" || l === "lg" ? l : "xl" : l,
156
157
  type: n === "password" ? R ? "text" : "password" : n,
157
158
  placeholder: B,
158
159
  maxLength: b,
159
- onChange: U,
160
+ onChange: X,
160
161
  required: C,
161
162
  ...e
162
163
  }
163
164
  ),
164
165
  c && /* @__PURE__ */ t(
165
- W,
166
+ Y,
166
167
  {
167
168
  htmlFor: y,
168
169
  size: l,
@@ -176,28 +177,28 @@ const de = r.forwardRef(
176
177
  "button",
177
178
  {
178
179
  type: "button",
179
- onClick: K,
180
+ onClick: O,
180
181
  disabled: e.disabled,
181
182
  className: a(
182
183
  "ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform",
183
184
  "ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent"
184
185
  ),
185
186
  tabIndex: -1,
186
- children: /* @__PURE__ */ t(Z, { className: "ds:size-3" })
187
+ children: /* @__PURE__ */ t(T, { className: "ds:size-3" })
187
188
  }
188
189
  ),
189
190
  /* @__PURE__ */ t(
190
191
  "button",
191
192
  {
192
193
  type: "button",
193
- onClick: O,
194
+ onClick: Q,
194
195
  disabled: e.disabled,
195
196
  className: a(
196
197
  "ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform",
197
198
  "ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent"
198
199
  ),
199
200
  tabIndex: -1,
200
- children: /* @__PURE__ */ t(T, { className: "ds:size-3" })
201
+ children: /* @__PURE__ */ t(q, { className: "ds:size-3" })
201
202
  }
202
203
  )
203
204
  ] }),
@@ -210,9 +211,9 @@ const de = r.forwardRef(
210
211
  "ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors ds:cursor-pointer",
211
212
  n === "password" ? i ? "ds:right-14" : "ds:right-10" : i ? "ds:right-10" : "ds:right-2"
212
213
  ),
213
- onClick: X,
214
+ onClick: $,
214
215
  disabled: e.disabled,
215
- children: /* @__PURE__ */ t(q, { className: "ds:size-4" })
216
+ children: /* @__PURE__ */ t(F, { className: "ds:size-4" })
216
217
  }
217
218
  ),
218
219
  n === "password" && /* @__PURE__ */ t(
@@ -224,9 +225,9 @@ const de = r.forwardRef(
224
225
  "ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors",
225
226
  i ? "ds:right-10" : "ds:right-2"
226
227
  ),
227
- onClick: () => A((s) => !s),
228
+ onClick: () => G((s) => !s),
228
229
  disabled: e.disabled,
229
- children: R ? /* @__PURE__ */ t(F, { className: "ds:size-4" }) : /* @__PURE__ */ t(L, { className: "ds:size-4" })
230
+ children: R ? /* @__PURE__ */ t(L, { className: "ds:size-4" }) : /* @__PURE__ */ t(ee, { className: "ds:size-4" })
230
231
  }
231
232
  ),
232
233
  i && /* @__PURE__ */ t(
@@ -251,7 +252,7 @@ const de = r.forwardRef(
251
252
  {
252
253
  className: a(
253
254
  "ds:text-xs",
254
- N ? G?.[N] : ""
255
+ N ? J?.[N] : ""
255
256
  ),
256
257
  children: v
257
258
  }
@@ -267,8 +268,8 @@ const de = r.forwardRef(
267
268
  ) });
268
269
  }
269
270
  );
270
- de.displayName = "Input";
271
+ ne.displayName = "Input";
271
272
  export {
272
- de as default
273
+ ne as default
273
274
  };
274
275
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["import React, { type ChangeEvent } from \"react\";\nimport {\n Input as SInput,\n type InputProps as SInputProps,\n} from \"@dsui/ui/components/input\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Eye, EyeOff, ChevronDown, ChevronUp, Info, X } from \"lucide-react\";\nimport { withMask, type Options } from \"use-mask-input\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { Label } from \"../Label\";\n\n// Re-export base input props to avoid external dependency issues\nexport type BaseInputProps = Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: \"normal\" | \"sm\" | \"xs\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"error\" | \"warning\";\n};\n\nexport type InputProps = BaseInputProps & {\n label?: string;\n helperText?: React.ReactNode;\n isFloatLabel?: boolean;\n mask?: string;\n maskOptions?: {\n placeholder?: string;\n inputFormat?: string;\n outputFormat?: string;\n showMaskOnHover?: boolean;\n showMaskOnFocus?: boolean;\n separate?: boolean;\n } & Options;\n maxLength?: number;\n showCharCount?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n required?: boolean;\n};\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n label,\n helperText,\n state,\n size,\n isFloatLabel,\n type,\n mask,\n maskOptions,\n maxLength,\n showCharCount,\n infoTooltip,\n clearable,\n onClear,\n prefixIcon,\n suffixIcon,\n placeholder = \" \",\n required,\n ...props\n },\n ref\n ) => {\n // Character count state\n const [charCount, setCharCount] = React.useState(() => {\n if (typeof props.value === \"string\") return props.value.length;\n if (typeof props.defaultValue === \"string\")\n return props.defaultValue.length;\n return 0;\n });\n\n const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n setCharCount(e.target.value.length);\n if (props.onChange) props.onChange(e);\n };\n\n const handleClear = () => {\n if (innerRef.current) {\n innerRef.current.value = \"\";\n setCharCount(0);\n const event = {\n target: innerRef.current,\n currentTarget: innerRef.current,\n } as React.ChangeEvent<HTMLInputElement>;\n props.onChange?.(event);\n if (onClear) onClear();\n }\n };\n\n const inputId = React.useId();\n const innerRef = React.useRef<HTMLInputElement>(null);\n\n // Combine refs\n const combinedRef = React.useCallback(\n (element: HTMLInputElement | null) => {\n // Set innerRef\n if (innerRef) {\n (\n innerRef as React.MutableRefObject<HTMLInputElement | null>\n ).current = element;\n }\n\n // Apply mask if provided\n if (mask && element) {\n const maskRefCallback = withMask(mask, maskOptions);\n if (typeof maskRefCallback === \"function\") {\n maskRefCallback(element);\n }\n }\n },\n [mask, maskOptions]\n );\n\n // Expose ref to parent\n React.useImperativeHandle(ref, () => innerRef.current!);\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n // State\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size || \"normal\";\n\n // Calculate padding based on size and icons\n const getPadding = () => {\n const sizeMap = {\n xs: { prefix: \"ds:pl-8\", suffix: \"ds:pr-8\" },\n sm: { prefix: \"ds:pl-9\", suffix: \"ds:pr-9\" },\n normal: { prefix: \"ds:pl-10\", suffix: \"ds:pr-10\" },\n lg: { prefix: \"ds:pl-11\", suffix: \"ds:pr-11\" },\n xl: { prefix: \"ds:pl-12\", suffix: \"ds:pr-12\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const padding = getPadding();\n\n // Get icon size class based on current size\n const getIconSizeClass = () => {\n const sizeMap = {\n xs: \"ds:size-3\",\n sm: \"ds:size-3.5\",\n normal: \"ds:size-4\",\n lg: \"ds:size-4\",\n xl: \"ds:size-4\",\n };\n return sizeMap[currentSize as keyof typeof sizeMap] || \"ds:size-4\";\n };\n\n const iconSizeClass = getIconSizeClass();\n\n // Calculate right padding considering built-in icons\n const getRightPadding = () => {\n const hasBuiltInSuffix =\n type === \"number\" ||\n type === \"password\" ||\n type === \"datetime\" ||\n (clearable && (charCount > 0 || props?.value));\n\n if (hasBuiltInSuffix && suffixIcon) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"ds:pr-20\" // password + clear + custom icon\n : \"ds:pr-16\"; // one built-in + custom icon\n }\n\n if (hasBuiltInSuffix) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"ds:pr-16\" // password + clear\n : \"ds:pr-10\"; // single built-in icon\n }\n\n if (suffixIcon) {\n return padding.suffix;\n }\n\n return \"\";\n };\n\n // Icon position calculations\n const getIconPosition = () => {\n const sizeMap = {\n xs: { left: \"ds:left-2.5\", right: \"ds:right-2.5\" },\n sm: { left: \"ds:left-3\", right: \"ds:right-3\" },\n normal: { left: \"ds:left-3\", right: \"ds:right-3\" },\n lg: { left: \"ds:left-3.5\", right: \"ds:right-3.5\" },\n xl: { left: \"ds:left-4\", right: \"ds:right-4\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const iconPosition = getIconPosition();\n\n /* Spinner Button Handlers */\n const handleIncrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const max = props.max ? Number(props.max) : Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.min(currentValue + step, max);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n props.onChange?.(event as unknown as ChangeEvent<HTMLInputElement>);\n }\n };\n\n const handleDecrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const min = props.min ? Number(props.min) : -Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.max(currentValue - step, min);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n props.onChange?.(event as unknown as ChangeEvent<HTMLInputElement>);\n }\n };\n /* End Spinner Button Handlers */\n\n return (\n <div className={className}>\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative ds:flex-auto\", {\n \"ds:floating-label ds:relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <Label\n htmlFor={inputId}\n className=\"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5\" />\n </Tooltip>\n )}\n </Label>\n )}\n\n <div className=\"ds:relative\">\n {/* Prefix Icon */}\n {prefixIcon && (\n <div\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:text-muted-foreground ds:leading-0\",\n iconPosition.left\n )}\n >\n {React.isValidElement(prefixIcon)\n ? React.cloneElement(prefixIcon, {\n className: cn(\n iconSizeClass,\n (prefixIcon.props as any)?.className\n ),\n } as Partial<unknown>)\n : prefixIcon}\n </div>\n )}\n\n <SInput\n ref={combinedRef}\n id={inputId}\n className={cn(\n \"ds:peer\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n \"ds:[&::-webkit-outer-spin-button]:appearance-none ds:[&::-webkit-inner-spin-button]:appearance-none ds:[-moz-appearance:textfield] ds:pr-8\":\n type === \"number\",\n // \"[-webkit-text-fill-color:var(--foreground)]\": mask,\n },\n prefixIcon && padding.prefix,\n mask && \"ds:placeholder:text-slate-400 ds:placeholder:opacity-100\",\n getRightPadding()\n // className,\n )}\n state={state}\n size={\n isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size\n }\n type={\n type === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : type\n }\n placeholder={placeholder}\n maxLength={maxLength}\n onChange={handleInput}\n required={required}\n {...props}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={inputId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n >\n {label}\n </FloatingLabel>\n )}\n\n {/* Spinner Buttons */}\n {type === \"number\" && (\n <div className=\"ds:absolute ds:right-1 ds:top-0 ds:h-full ds:flex ds:flex-col ds:gap-0.5\">\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={props.disabled}\n className={cn(\n \"ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform\",\n \"ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent\"\n )}\n tabIndex={-1}\n >\n <ChevronUp className=\"ds:size-3\" />\n </button>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={props.disabled}\n className={cn(\n \"ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform\",\n \"ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent\"\n )}\n tabIndex={-1}\n >\n <ChevronDown className=\"ds:size-3\" />\n </button>\n </div>\n )}\n\n {/* Clear Button */}\n {clearable &&\n (charCount > 0 || props?.value) &&\n !props.disabled &&\n type !== \"number\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors ds:cursor-pointer\",\n type === \"password\"\n ? suffixIcon\n ? \"ds:right-14\"\n : \"ds:right-10\"\n : suffixIcon\n ? \"ds:right-10\"\n : \"ds:right-2\"\n )}\n onClick={handleClear}\n disabled={props.disabled}\n >\n <X className=\"ds:size-4\" />\n </button>\n )}\n\n {/* Show/Hide Password Button */}\n {type === \"password\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors\",\n suffixIcon ? \"ds:right-10\" : \"ds:right-2\"\n )}\n onClick={() => setShowPassword((prev) => !prev)}\n disabled={props.disabled}\n >\n {showPassword ? (\n <EyeOff className=\"ds:size-4\" />\n ) : (\n <Eye className=\"ds:size-4\" />\n )}\n </button>\n )}\n\n {/* Suffix Icon */}\n {suffixIcon && (\n <div\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:text-muted-foreground ds:leading-0\",\n iconPosition.right\n )}\n >\n {React.isValidElement(suffixIcon)\n ? React.cloneElement(suffixIcon, {\n className: cn(\n iconSizeClass,\n (suffixIcon.props as any)?.className\n ),\n } as Partial<unknown>)\n : suffixIcon}\n </div>\n )}\n </div>\n\n {(helperText || (showCharCount && typeof maxLength === \"number\")) && (\n <div className=\"ds:flex ds:items-center ds:justify-between ds:text-xs ds:gap-2\">\n {helperText && (\n <p\n className={cn(\n \"ds:text-xs\",\n state ? helperTextStyles?.[state] : \"\"\n )}\n >\n {helperText}\n </p>\n )}\n {showCharCount && typeof maxLength === \"number\" && (\n <span className=\"ds:ml-auto ds:text-muted-foreground\">\n {charCount} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\nexport default Input;\n"],"names":["Input","React","className","label","helperText","state","size","isFloatLabel","type","mask","maskOptions","maxLength","showCharCount","infoTooltip","clearable","onClear","prefixIcon","suffixIcon","placeholder","required","props","ref","charCount","setCharCount","handleInput","e","handleClear","innerRef","event","inputId","combinedRef","element","maskRefCallback","withMask","showPassword","setShowPassword","helperTextStyles","currentSize","padding","sizeMap","iconSizeClass","getRightPadding","hasBuiltInSuffix","iconPosition","handleIncrement","step","max","currentValue","newValue","handleDecrement","min","jsx","jsxs","cn","Label","Tooltip","Info","SInput","FloatingLabel","ChevronUp","ChevronDown","X","prev","EyeOff","Eye"],"mappings":";;;;;;;;;AAyCA,MAAMA,KAAQC,EAAM;AAAA,EAClB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AAEH,UAAM,CAACC,GAAWC,CAAY,IAAItB,EAAM,SAAS,MAC3C,OAAOmB,EAAM,SAAU,WAAiBA,EAAM,MAAM,SACpD,OAAOA,EAAM,gBAAiB,WACzBA,EAAM,aAAa,SACrB,CACR,GAEKI,IAAc,CAACC,MAA2C;AAC9D,MAAAF,EAAaE,EAAE,OAAO,MAAM,MAAM,GAC9BL,EAAM,YAAUA,EAAM,SAASK,CAAC;AAAA,IACtC,GAEMC,IAAc,MAAM;AACxB,UAAIC,EAAS,SAAS;AACpB,QAAAA,EAAS,QAAQ,QAAQ,IACzBJ,EAAa,CAAC;AACd,cAAMK,IAAQ;AAAA,UACZ,QAAQD,EAAS;AAAA,UACjB,eAAeA,EAAS;AAAA,QAAA;AAE1B,QAAAP,EAAM,WAAWQ,CAAK,GAClBb,KAASA,EAAA;AAAA,MACf;AAAA,IACF,GAEMc,IAAU5B,EAAM,MAAA,GAChB0B,IAAW1B,EAAM,OAAyB,IAAI,GAG9C6B,IAAc7B,EAAM;AAAA,MACxB,CAAC8B,MAAqC;AASpC,YAPIJ,MAEAA,EACA,UAAUI,IAIVtB,KAAQsB,GAAS;AACnB,gBAAMC,IAAkBC,GAASxB,GAAMC,CAAW;AAClD,UAAI,OAAOsB,KAAoB,cAC7BA,EAAgBD,CAAO;AAAA,QAE3B;AAAA,MACF;AAAA,MACA,CAACtB,GAAMC,CAAW;AAAA,IAAA;AAIpBT,IAAAA,EAAM,oBAAoBoB,GAAK,MAAMM,EAAS,OAAQ;AAEtD,UAAM,CAACO,GAAcC,CAAe,IAAIlC,EAAM,SAAS,EAAK,GAGtDmC,IAAmB;AAAA,MACvB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAIHC,IAAc9B,IAChBD,MAAS,QAAQA,MAAS,OACxBA,IACA,OACFA,KAAQ,UAeNgC,KAZa,MAAM;AACvB,YAAMC,IAAU;AAAA,QACd,IAAI,EAAE,QAAQ,WAAW,QAAQ,UAAA;AAAA,QACjC,IAAI,EAAE,QAAQ,WAAW,QAAQ,UAAA;AAAA,QACjC,QAAQ,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,QACtC,IAAI,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,QAClC,IAAI,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,MAAW;AAG/C,aAAOA,EAAQF,CAAmC,KAAKE,EAAQ;AAAA,IACjE,GAEgB,GAcVC,IAVY;AAAA,MACd,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,EAESH,CAAmC,KAAK,aAMnDI,IAAkB,MAAM;AAC5B,YAAMC,IACJlC,MAAS,YACTA,MAAS,cACTA,MAAS,cACRM,MAAcQ,IAAY,KAAKF,GAAO;AAEzC,aAAIsB,KAAoBzB,IACfT,MAAS,cACdM,MACCQ,IAAY,KAAKF,GAAO,SACvB,aACA,aAGFsB,IACKlC,MAAS,cACdM,MACCQ,IAAY,KAAKF,GAAO,SACvB,aACA,aAGFH,IACKqB,EAAQ,SAGV;AAAA,IACT,GAeMK,KAZkB,MAAM;AAC5B,YAAMJ,IAAU;AAAA,QACd,IAAI,EAAE,MAAM,eAAe,OAAO,eAAA;AAAA,QAClC,IAAI,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,QAChC,QAAQ,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,QACpC,IAAI,EAAE,MAAM,eAAe,OAAO,eAAA;AAAA,QAClC,IAAI,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,MAAa;AAG/C,aAAOA,EAAQF,CAAmC,KAAKE,EAAQ;AAAA,IACjE,GAEqB,GAGfK,IAAkB,MAAM;AAC5B,UAAIjB,EAAS,SAAS;AACpB,cAAMkB,IAAO,OAAOzB,EAAM,QAAQ,CAAC,GAC7B0B,IAAM1B,EAAM,MAAM,OAAOA,EAAM,GAAG,IAAI,OACtC2B,IAAe,OAAOpB,EAAS,QAAQ,SAAS,CAAC,GACjDqB,IAAW,KAAK,IAAID,IAAeF,GAAMC,CAAG;AAElD,QAAAnB,EAAS,QAAQ,QAAQ,OAAOqB,CAAQ;AACxC,cAAMpB,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAClD,QAAAD,EAAS,QAAQ,cAAcC,CAAK,GACpCR,EAAM,WAAWQ,CAAiD;AAAA,MACpE;AAAA,IACF,GAEMqB,IAAkB,MAAM;AAC5B,UAAItB,EAAS,SAAS;AACpB,cAAMkB,IAAO,OAAOzB,EAAM,QAAQ,CAAC,GAC7B8B,IAAM9B,EAAM,MAAM,OAAOA,EAAM,GAAG,IAAI,QACtC2B,IAAe,OAAOpB,EAAS,QAAQ,SAAS,CAAC,GACjDqB,IAAW,KAAK,IAAID,IAAeF,GAAMK,CAAG;AAElD,QAAAvB,EAAS,QAAQ,QAAQ,OAAOqB,CAAQ;AACxC,cAAMpB,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAClD,QAAAD,EAAS,QAAQ,cAAcC,CAAK,GACpCR,EAAM,WAAWQ,CAAiD;AAAA,MACpE;AAAA,IACF;AAGA,WACE,gBAAAuB,EAAC,SAAI,WAAAjD,GACH,UAAA,gBAAAkD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAG,2DAA2D;AAAA,UACvE,iCAAiC9C;AAAA,QAAA,CAClC;AAAA,QAEA,UAAA;AAAA,UAAA,CAACA,KAAgBJ,KAChB,gBAAAiD;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAASzB;AAAA,cACT,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAuB,EAAC,QAAA,EACE,UAAA;AAAA,kBAAAjD;AAAA,kBACAgB,KAAY,gBAAAgC,EAAC,QAAA,EAAK,WAAU,2BAA0B,UAAA,IAAA,CAAC;AAAA,gBAAA,GAC1D;AAAA,gBACCtC,uBACE0C,IAAA,EAAQ,SAAS1C,GAChB,UAAA,gBAAAsC,EAACK,GAAA,EAAK,WAAU,2BAAA,CAA2B,EAAA,CAC7C;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKN,gBAAAJ,EAAC,OAAA,EAAI,WAAU,eAEZ,UAAA;AAAA,YAAApC,KACC,gBAAAmC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAV,EAAa;AAAA,gBAAA;AAAA,gBAGd,YAAM,eAAe3B,CAAU,IAC5Bf,EAAM,aAAae,GAAY;AAAA,kBAC7B,WAAWqC;AAAA,oBACTb;AAAA,oBACCxB,EAAW,OAAe;AAAA,kBAAA;AAAA,gBAC7B,CACmB,IACrBA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIR,gBAAAmC;AAAA,cAACM;AAAAA,cAAA;AAAA,gBACC,KAAK3B;AAAA,gBACL,IAAID;AAAA,gBACJ,WAAWwB;AAAA,kBACT;AAAA,kBACA;AAAA,oBACE,mBAAmB9C,KAAgBD,MAAS;AAAA,oBAC5C,8IACEE,MAAS;AAAA;AAAA,kBAAA;AAAA,kBAGbQ,KAAcsB,EAAQ;AAAA,kBACtB7B,KAAQ;AAAA,kBACRgC,EAAA;AAAA;AAAA,gBAAgB;AAAA,gBAGlB,OAAApC;AAAA,gBACA,MACEE,IACID,MAAS,QAAQA,MAAS,OACxBA,IACA,OACFA;AAAA,gBAEN,MACEE,MAAS,aACL0B,IACE,SACA,aACF1B;AAAA,gBAEN,aAAAU;AAAA,gBACA,WAAAP;AAAA,gBACA,UAAUa;AAAA,gBACV,UAAAL;AAAA,gBACC,GAAGC;AAAA,cAAA;AAAA,YAAA;AAAA,YAELb,KACC,gBAAA4C;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAS7B;AAAA,gBACT,MAAAvB;AAAA,gBACA,aAAAO;AAAA,gBACA,UAAAM;AAAA,gBAEC,UAAAhB;AAAA,cAAA;AAAA,YAAA;AAAA,YAKJK,MAAS,YACR,gBAAA4C,EAAC,OAAA,EAAI,WAAU,4EACb,UAAA;AAAA,cAAA,gBAAAD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASP;AAAA,kBACT,UAAUxB,EAAM;AAAA,kBAChB,WAAWiC;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAEF,UAAU;AAAA,kBAEV,UAAA,gBAAAF,EAACQ,GAAA,EAAU,WAAU,YAAA,CAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEnC,gBAAAR;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASF;AAAA,kBACT,UAAU7B,EAAM;AAAA,kBAChB,WAAWiC;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAEF,UAAU;AAAA,kBAEV,UAAA,gBAAAF,EAACS,GAAA,EAAY,WAAU,YAAA,CAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,YACrC,GACF;AAAA,YAID9C,MACEQ,IAAY,KAAKF,GAAO,UACzB,CAACA,EAAM,YACPZ,MAAS,YACP,gBAAA2C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,WAAWE;AAAA,kBACT;AAAA,kBACA7C,MAAS,aACLS,IACE,gBACA,gBACFA,IACE,gBACA;AAAA,gBAAA;AAAA,gBAER,SAASS;AAAA,gBACT,UAAUN,EAAM;AAAA,gBAEhB,UAAA,gBAAA+B,EAACU,GAAA,EAAE,WAAU,YAAA,CAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAK9BrD,MAAS,cACR,gBAAA2C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,WAAWE;AAAA,kBACT;AAAA,kBACApC,IAAa,gBAAgB;AAAA,gBAAA;AAAA,gBAE/B,SAAS,MAAMkB,EAAgB,CAAC2B,MAAS,CAACA,CAAI;AAAA,gBAC9C,UAAU1C,EAAM;AAAA,gBAEf,UAAAc,sBACE6B,GAAA,EAAO,WAAU,aAAY,IAE9B,gBAAAZ,EAACa,GAAA,EAAI,WAAU,YAAA,CAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAMhC/C,KACC,gBAAAkC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAV,EAAa;AAAA,gBAAA;AAAA,gBAGd,YAAM,eAAe1B,CAAU,IAC5BhB,EAAM,aAAagB,GAAY;AAAA,kBAC7B,WAAWoC;AAAA,oBACTb;AAAA,oBACCvB,EAAW,OAAe;AAAA,kBAAA;AAAA,gBAC7B,CACmB,IACrBA;AAAA,cAAA;AAAA,YAAA;AAAA,UACN,GAEJ;AAAA,WAEEb,KAAeQ,KAAiB,OAAOD,KAAc,aACrD,gBAAAyC,EAAC,OAAA,EAAI,WAAU,kEACZ,UAAA;AAAA,YAAAhD,KACC,gBAAA+C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAhD,IAAQ+B,IAAmB/B,CAAK,IAAI;AAAA,gBAAA;AAAA,gBAGrC,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,YAGJQ,KAAiB,OAAOD,KAAc,YACrC,gBAAAyC,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA;AAAA,cAAA9B;AAAA,cAAU;AAAA,cAAIX;AAAA,YAAA,EAAA,CACjB;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,EAEJ;AACF;AAEAX,GAAM,cAAc;"}
1
+ {"version":3,"file":"Input.js","sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["import React, { type ChangeEvent } from \"react\";\nimport {\n Input as SInput,\n type InputProps as SInputProps,\n} from \"@dsui/ui/components/input\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Eye, EyeOff, ChevronDown, ChevronUp, Info, X } from \"lucide-react\";\nimport { withMask, type Options } from \"use-mask-input\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { Label } from \"../Label\";\n\n// Re-export base input props to avoid external dependency issues\nexport type BaseInputProps = Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: \"normal\" | \"sm\" | \"xs\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"error\" | \"warning\";\n};\n\nexport type InputProps = BaseInputProps & {\n label?: string;\n helperText?: React.ReactNode;\n isFloatLabel?: boolean;\n mask?: string;\n maskOptions?: {\n placeholder?: string;\n inputFormat?: string;\n outputFormat?: string;\n showMaskOnHover?: boolean;\n showMaskOnFocus?: boolean;\n separate?: boolean;\n } & Options;\n maxLength?: number;\n showCharCount?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n required?: boolean;\n inputClassName?: string;\n};\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n label,\n helperText,\n state,\n size,\n isFloatLabel,\n type,\n mask,\n maskOptions,\n maxLength,\n showCharCount,\n infoTooltip,\n clearable,\n onClear,\n prefixIcon,\n suffixIcon,\n placeholder = \" \",\n required,\n inputClassName,\n ...props\n },\n ref\n ) => {\n // Character count state\n const [charCount, setCharCount] = React.useState(() => {\n if (typeof props.value === \"string\") return props.value.length;\n if (typeof props.defaultValue === \"string\")\n return props.defaultValue.length;\n return 0;\n });\n\n const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n setCharCount(e.target.value.length);\n if (props.onChange) props.onChange(e);\n };\n\n const handleClear = () => {\n if (innerRef.current) {\n innerRef.current.value = \"\";\n setCharCount(0);\n const event = {\n target: innerRef.current,\n currentTarget: innerRef.current,\n } as React.ChangeEvent<HTMLInputElement>;\n props.onChange?.(event);\n if (onClear) onClear();\n }\n };\n\n const inputId = React.useId();\n const innerRef = React.useRef<HTMLInputElement>(null);\n\n // Combine refs\n const combinedRef = React.useCallback(\n (element: HTMLInputElement | null) => {\n // Set innerRef\n if (innerRef) {\n (\n innerRef as React.MutableRefObject<HTMLInputElement | null>\n ).current = element;\n }\n\n // Apply mask if provided\n if (mask && element) {\n const maskRefCallback = withMask(mask, maskOptions);\n if (typeof maskRefCallback === \"function\") {\n maskRefCallback(element);\n }\n }\n },\n [mask, maskOptions]\n );\n\n // Expose ref to parent\n React.useImperativeHandle(ref, () => innerRef.current!);\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n // State\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size || \"normal\";\n\n // Calculate padding based on size and icons\n const getPadding = () => {\n const sizeMap = {\n xs: { prefix: \"ds:pl-8\", suffix: \"ds:pr-8\" },\n sm: { prefix: \"ds:pl-9\", suffix: \"ds:pr-9\" },\n normal: { prefix: \"ds:pl-10\", suffix: \"ds:pr-10\" },\n lg: { prefix: \"ds:pl-11\", suffix: \"ds:pr-11\" },\n xl: { prefix: \"ds:pl-12\", suffix: \"ds:pr-12\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const padding = getPadding();\n\n // Get icon size class based on current size\n const getIconSizeClass = () => {\n const sizeMap = {\n xs: \"ds:size-3\",\n sm: \"ds:size-3.5\",\n normal: \"ds:size-4\",\n lg: \"ds:size-4\",\n xl: \"ds:size-4\",\n };\n return sizeMap[currentSize as keyof typeof sizeMap] || \"ds:size-4\";\n };\n\n const iconSizeClass = getIconSizeClass();\n\n // Calculate right padding considering built-in icons\n const getRightPadding = () => {\n const hasBuiltInSuffix =\n type === \"number\" ||\n type === \"password\" ||\n type === \"datetime\" ||\n (clearable && (charCount > 0 || props?.value));\n\n if (hasBuiltInSuffix && suffixIcon) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"ds:pr-20\" // password + clear + custom icon\n : \"ds:pr-16\"; // one built-in + custom icon\n }\n\n if (hasBuiltInSuffix) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"ds:pr-16\" // password + clear\n : \"ds:pr-10\"; // single built-in icon\n }\n\n if (suffixIcon) {\n return padding.suffix;\n }\n\n return \"\";\n };\n\n // Icon position calculations\n const getIconPosition = () => {\n const sizeMap = {\n xs: { left: \"ds:left-2.5\", right: \"ds:right-2.5\" },\n sm: { left: \"ds:left-3\", right: \"ds:right-3\" },\n normal: { left: \"ds:left-3\", right: \"ds:right-3\" },\n lg: { left: \"ds:left-3.5\", right: \"ds:right-3.5\" },\n xl: { left: \"ds:left-4\", right: \"ds:right-4\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const iconPosition = getIconPosition();\n\n /* Spinner Button Handlers */\n const handleIncrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const max = props.max ? Number(props.max) : Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.min(currentValue + step, max);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n props.onChange?.(event as unknown as ChangeEvent<HTMLInputElement>);\n }\n };\n\n const handleDecrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const min = props.min ? Number(props.min) : -Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.max(currentValue - step, min);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n props.onChange?.(event as unknown as ChangeEvent<HTMLInputElement>);\n }\n };\n /* End Spinner Button Handlers */\n\n return (\n <div className={className}>\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative ds:flex-auto\", {\n \"ds:floating-label ds:relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <Label\n htmlFor={inputId}\n className=\"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5\" />\n </Tooltip>\n )}\n </Label>\n )}\n\n <div className=\"ds:relative\">\n {/* Prefix Icon */}\n {prefixIcon && (\n <div\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:text-muted-foreground ds:leading-0\",\n iconPosition.left\n )}\n >\n {React.isValidElement(prefixIcon)\n ? React.cloneElement(prefixIcon, {\n className: cn(\n iconSizeClass,\n (prefixIcon.props as any)?.className\n ),\n } as Partial<unknown>)\n : prefixIcon}\n </div>\n )}\n\n <SInput\n ref={combinedRef}\n id={inputId}\n className={cn(\n \"ds:peer\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n \"ds:[&::-webkit-outer-spin-button]:appearance-none ds:[&::-webkit-inner-spin-button]:appearance-none ds:[-moz-appearance:textfield] ds:pr-8\":\n type === \"number\",\n // \"[-webkit-text-fill-color:var(--foreground)]\": mask,\n },\n prefixIcon && padding.prefix,\n mask && \"ds:placeholder:text-slate-400 ds:placeholder:opacity-100\",\n getRightPadding(),\n inputClassName,\n )}\n state={state}\n size={\n isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size\n }\n type={\n type === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : type\n }\n placeholder={placeholder}\n maxLength={maxLength}\n onChange={handleInput}\n required={required}\n {...props}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={inputId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n >\n {label}\n </FloatingLabel>\n )}\n\n {/* Spinner Buttons */}\n {type === \"number\" && (\n <div className=\"ds:absolute ds:right-1 ds:top-0 ds:h-full ds:flex ds:flex-col ds:gap-0.5\">\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={props.disabled}\n className={cn(\n \"ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform\",\n \"ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent\"\n )}\n tabIndex={-1}\n >\n <ChevronUp className=\"ds:size-3\" />\n </button>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={props.disabled}\n className={cn(\n \"ds:h-1/2 ds:w-6 ds:flex ds:items-center ds:justify-center ds:rounded ds:cursor-pointer ds:hover:scale-150 ds:transition-transform\",\n \"ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:disabled:hover:bg-transparent\"\n )}\n tabIndex={-1}\n >\n <ChevronDown className=\"ds:size-3\" />\n </button>\n </div>\n )}\n\n {/* Clear Button */}\n {clearable &&\n (charCount > 0 || props?.value) &&\n !props.disabled &&\n type !== \"number\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors ds:cursor-pointer\",\n type === \"password\"\n ? suffixIcon\n ? \"ds:right-14\"\n : \"ds:right-10\"\n : suffixIcon\n ? \"ds:right-10\"\n : \"ds:right-2\"\n )}\n onClick={handleClear}\n disabled={props.disabled}\n >\n <X className=\"ds:size-4\" />\n </button>\n )}\n\n {/* Show/Hide Password Button */}\n {type === \"password\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors\",\n suffixIcon ? \"ds:right-10\" : \"ds:right-2\"\n )}\n onClick={() => setShowPassword((prev) => !prev)}\n disabled={props.disabled}\n >\n {showPassword ? (\n <EyeOff className=\"ds:size-4\" />\n ) : (\n <Eye className=\"ds:size-4\" />\n )}\n </button>\n )}\n\n {/* Suffix Icon */}\n {suffixIcon && (\n <div\n className={cn(\n \"ds:absolute ds:top-1/2 ds:-translate-y-1/2 ds:text-muted-foreground ds:leading-0\",\n iconPosition.right\n )}\n >\n {React.isValidElement(suffixIcon)\n ? React.cloneElement(suffixIcon, {\n className: cn(\n iconSizeClass,\n (suffixIcon.props as any)?.className\n ),\n } as Partial<unknown>)\n : suffixIcon}\n </div>\n )}\n </div>\n\n {(helperText || (showCharCount && typeof maxLength === \"number\")) && (\n <div className=\"ds:flex ds:items-center ds:justify-between ds:text-xs ds:gap-2\">\n {helperText && (\n <p\n className={cn(\n \"ds:text-xs\",\n state ? helperTextStyles?.[state] : \"\"\n )}\n >\n {helperText}\n </p>\n )}\n {showCharCount && typeof maxLength === \"number\" && (\n <span className=\"ds:ml-auto ds:text-muted-foreground\">\n {charCount} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\nexport default Input;\n"],"names":["Input","React","className","label","helperText","state","size","isFloatLabel","type","mask","maskOptions","maxLength","showCharCount","infoTooltip","clearable","onClear","prefixIcon","suffixIcon","placeholder","required","inputClassName","props","ref","charCount","setCharCount","handleInput","e","handleClear","innerRef","event","inputId","combinedRef","element","maskRefCallback","withMask","showPassword","setShowPassword","helperTextStyles","currentSize","padding","sizeMap","iconSizeClass","getRightPadding","hasBuiltInSuffix","iconPosition","handleIncrement","step","max","currentValue","newValue","handleDecrement","min","jsx","jsxs","cn","Label","Tooltip","Info","SInput","FloatingLabel","ChevronUp","ChevronDown","X","prev","EyeOff","Eye"],"mappings":";;;;;;;;;AA0CA,MAAMA,KAAQC,EAAM;AAAA,EAClB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AAEH,UAAM,CAACC,GAAWC,CAAY,IAAIvB,EAAM,SAAS,MAC3C,OAAOoB,EAAM,SAAU,WAAiBA,EAAM,MAAM,SACpD,OAAOA,EAAM,gBAAiB,WACzBA,EAAM,aAAa,SACrB,CACR,GAEKI,IAAc,CAACC,MAA2C;AAC9D,MAAAF,EAAaE,EAAE,OAAO,MAAM,MAAM,GAC9BL,EAAM,YAAUA,EAAM,SAASK,CAAC;AAAA,IACtC,GAEMC,IAAc,MAAM;AACxB,UAAIC,EAAS,SAAS;AACpB,QAAAA,EAAS,QAAQ,QAAQ,IACzBJ,EAAa,CAAC;AACd,cAAMK,IAAQ;AAAA,UACZ,QAAQD,EAAS;AAAA,UACjB,eAAeA,EAAS;AAAA,QAAA;AAE1B,QAAAP,EAAM,WAAWQ,CAAK,GAClBd,KAASA,EAAA;AAAA,MACf;AAAA,IACF,GAEMe,IAAU7B,EAAM,MAAA,GAChB2B,IAAW3B,EAAM,OAAyB,IAAI,GAG9C8B,IAAc9B,EAAM;AAAA,MACxB,CAAC+B,MAAqC;AASpC,YAPIJ,MAEAA,EACA,UAAUI,IAIVvB,KAAQuB,GAAS;AACnB,gBAAMC,IAAkBC,GAASzB,GAAMC,CAAW;AAClD,UAAI,OAAOuB,KAAoB,cAC7BA,EAAgBD,CAAO;AAAA,QAE3B;AAAA,MACF;AAAA,MACA,CAACvB,GAAMC,CAAW;AAAA,IAAA;AAIpBT,IAAAA,EAAM,oBAAoBqB,GAAK,MAAMM,EAAS,OAAQ;AAEtD,UAAM,CAACO,GAAcC,CAAe,IAAInC,EAAM,SAAS,EAAK,GAGtDoC,IAAmB;AAAA,MACvB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAIHC,IAAc/B,IAChBD,MAAS,QAAQA,MAAS,OACxBA,IACA,OACFA,KAAQ,UAeNiC,KAZa,MAAM;AACvB,YAAMC,IAAU;AAAA,QACd,IAAI,EAAE,QAAQ,WAAW,QAAQ,UAAA;AAAA,QACjC,IAAI,EAAE,QAAQ,WAAW,QAAQ,UAAA;AAAA,QACjC,QAAQ,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,QACtC,IAAI,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,QAClC,IAAI,EAAE,QAAQ,YAAY,QAAQ,WAAA;AAAA,MAAW;AAG/C,aAAOA,EAAQF,CAAmC,KAAKE,EAAQ;AAAA,IACjE,GAEgB,GAcVC,IAVY;AAAA,MACd,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,EAESH,CAAmC,KAAK,aAMnDI,IAAkB,MAAM;AAC5B,YAAMC,IACJnC,MAAS,YACTA,MAAS,cACTA,MAAS,cACRM,MAAcS,IAAY,KAAKF,GAAO;AAEzC,aAAIsB,KAAoB1B,IACfT,MAAS,cACdM,MACCS,IAAY,KAAKF,GAAO,SACvB,aACA,aAGFsB,IACKnC,MAAS,cACdM,MACCS,IAAY,KAAKF,GAAO,SACvB,aACA,aAGFJ,IACKsB,EAAQ,SAGV;AAAA,IACT,GAeMK,KAZkB,MAAM;AAC5B,YAAMJ,IAAU;AAAA,QACd,IAAI,EAAE,MAAM,eAAe,OAAO,eAAA;AAAA,QAClC,IAAI,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,QAChC,QAAQ,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,QACpC,IAAI,EAAE,MAAM,eAAe,OAAO,eAAA;AAAA,QAClC,IAAI,EAAE,MAAM,aAAa,OAAO,aAAA;AAAA,MAAa;AAG/C,aAAOA,EAAQF,CAAmC,KAAKE,EAAQ;AAAA,IACjE,GAEqB,GAGfK,IAAkB,MAAM;AAC5B,UAAIjB,EAAS,SAAS;AACpB,cAAMkB,IAAO,OAAOzB,EAAM,QAAQ,CAAC,GAC7B0B,IAAM1B,EAAM,MAAM,OAAOA,EAAM,GAAG,IAAI,OACtC2B,IAAe,OAAOpB,EAAS,QAAQ,SAAS,CAAC,GACjDqB,IAAW,KAAK,IAAID,IAAeF,GAAMC,CAAG;AAElD,QAAAnB,EAAS,QAAQ,QAAQ,OAAOqB,CAAQ;AACxC,cAAMpB,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAClD,QAAAD,EAAS,QAAQ,cAAcC,CAAK,GACpCR,EAAM,WAAWQ,CAAiD;AAAA,MACpE;AAAA,IACF,GAEMqB,IAAkB,MAAM;AAC5B,UAAItB,EAAS,SAAS;AACpB,cAAMkB,IAAO,OAAOzB,EAAM,QAAQ,CAAC,GAC7B8B,IAAM9B,EAAM,MAAM,OAAOA,EAAM,GAAG,IAAI,QACtC2B,IAAe,OAAOpB,EAAS,QAAQ,SAAS,CAAC,GACjDqB,IAAW,KAAK,IAAID,IAAeF,GAAMK,CAAG;AAElD,QAAAvB,EAAS,QAAQ,QAAQ,OAAOqB,CAAQ;AACxC,cAAMpB,IAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAClD,QAAAD,EAAS,QAAQ,cAAcC,CAAK,GACpCR,EAAM,WAAWQ,CAAiD;AAAA,MACpE;AAAA,IACF;AAGA,WACE,gBAAAuB,EAAC,SAAI,WAAAlD,GACH,UAAA,gBAAAmD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAG,2DAA2D;AAAA,UACvE,iCAAiC/C;AAAA,QAAA,CAClC;AAAA,QAEA,UAAA;AAAA,UAAA,CAACA,KAAgBJ,KAChB,gBAAAkD;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAASzB;AAAA,cACT,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAuB,EAAC,QAAA,EACE,UAAA;AAAA,kBAAAlD;AAAA,kBACAgB,KAAY,gBAAAiC,EAAC,QAAA,EAAK,WAAU,2BAA0B,UAAA,IAAA,CAAC;AAAA,gBAAA,GAC1D;AAAA,gBACCvC,uBACE2C,IAAA,EAAQ,SAAS3C,GAChB,UAAA,gBAAAuC,EAACK,GAAA,EAAK,WAAU,2BAAA,CAA2B,EAAA,CAC7C;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKN,gBAAAJ,EAAC,OAAA,EAAI,WAAU,eAEZ,UAAA;AAAA,YAAArC,KACC,gBAAAoC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAV,EAAa;AAAA,gBAAA;AAAA,gBAGd,YAAM,eAAe5B,CAAU,IAC5Bf,EAAM,aAAae,GAAY;AAAA,kBAC7B,WAAWsC;AAAA,oBACTb;AAAA,oBACCzB,EAAW,OAAe;AAAA,kBAAA;AAAA,gBAC7B,CACmB,IACrBA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIR,gBAAAoC;AAAA,cAACM;AAAAA,cAAA;AAAA,gBACC,KAAK3B;AAAA,gBACL,IAAID;AAAA,gBACJ,WAAWwB;AAAA,kBACT;AAAA,kBACA;AAAA,oBACE,mBAAmB/C,KAAgBD,MAAS;AAAA,oBAC5C,8IACEE,MAAS;AAAA;AAAA,kBAAA;AAAA,kBAGbQ,KAAcuB,EAAQ;AAAA,kBACtB9B,KAAQ;AAAA,kBACRiC,EAAA;AAAA,kBACAtB;AAAA,gBAAA;AAAA,gBAEF,OAAAf;AAAA,gBACA,MACEE,IACID,MAAS,QAAQA,MAAS,OACxBA,IACA,OACFA;AAAA,gBAEN,MACEE,MAAS,aACL2B,IACE,SACA,aACF3B;AAAA,gBAEN,aAAAU;AAAA,gBACA,WAAAP;AAAA,gBACA,UAAUc;AAAA,gBACV,UAAAN;AAAA,gBACC,GAAGE;AAAA,cAAA;AAAA,YAAA;AAAA,YAELd,KACC,gBAAA6C;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAAS7B;AAAA,gBACT,MAAAxB;AAAA,gBACA,aAAAO;AAAA,gBACA,UAAAM;AAAA,gBAEC,UAAAhB;AAAA,cAAA;AAAA,YAAA;AAAA,YAKJK,MAAS,YACR,gBAAA6C,EAAC,OAAA,EAAI,WAAU,4EACb,UAAA;AAAA,cAAA,gBAAAD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASP;AAAA,kBACT,UAAUxB,EAAM;AAAA,kBAChB,WAAWiC;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAEF,UAAU;AAAA,kBAEV,UAAA,gBAAAF,EAACQ,GAAA,EAAU,WAAU,YAAA,CAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEnC,gBAAAR;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASF;AAAA,kBACT,UAAU7B,EAAM;AAAA,kBAChB,WAAWiC;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAEF,UAAU;AAAA,kBAEV,UAAA,gBAAAF,EAACS,GAAA,EAAY,WAAU,YAAA,CAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,YACrC,GACF;AAAA,YAID/C,MACES,IAAY,KAAKF,GAAO,UACzB,CAACA,EAAM,YACPb,MAAS,YACP,gBAAA4C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,WAAWE;AAAA,kBACT;AAAA,kBACA9C,MAAS,aACLS,IACE,gBACA,gBACFA,IACE,gBACA;AAAA,gBAAA;AAAA,gBAER,SAASU;AAAA,gBACT,UAAUN,EAAM;AAAA,gBAEhB,UAAA,gBAAA+B,EAACU,GAAA,EAAE,WAAU,YAAA,CAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAK9BtD,MAAS,cACR,gBAAA4C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,WAAWE;AAAA,kBACT;AAAA,kBACArC,IAAa,gBAAgB;AAAA,gBAAA;AAAA,gBAE/B,SAAS,MAAMmB,EAAgB,CAAC2B,MAAS,CAACA,CAAI;AAAA,gBAC9C,UAAU1C,EAAM;AAAA,gBAEf,UAAAc,sBACE6B,GAAA,EAAO,WAAU,aAAY,IAE9B,gBAAAZ,EAACa,IAAA,EAAI,WAAU,YAAA,CAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAMhChD,KACC,gBAAAmC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAV,EAAa;AAAA,gBAAA;AAAA,gBAGd,YAAM,eAAe3B,CAAU,IAC5BhB,EAAM,aAAagB,GAAY;AAAA,kBAC7B,WAAWqC;AAAA,oBACTb;AAAA,oBACCxB,EAAW,OAAe;AAAA,kBAAA;AAAA,gBAC7B,CACmB,IACrBA;AAAA,cAAA;AAAA,YAAA;AAAA,UACN,GAEJ;AAAA,WAEEb,KAAeQ,KAAiB,OAAOD,KAAc,aACrD,gBAAA0C,EAAC,OAAA,EAAI,WAAU,kEACZ,UAAA;AAAA,YAAAjD,KACC,gBAAAgD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWE;AAAA,kBACT;AAAA,kBACAjD,IAAQgC,IAAmBhC,CAAK,IAAI;AAAA,gBAAA;AAAA,gBAGrC,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,YAGJQ,KAAiB,OAAOD,KAAc,YACrC,gBAAA0C,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA;AAAA,cAAA9B;AAAA,cAAU;AAAA,cAAIZ;AAAA,YAAA,EAAA,CACjB;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,EAEJ;AACF;AAEAX,GAAM,cAAc;"}
@@ -34,11 +34,11 @@ import "../../packages/ui/src/components/sidebar.js";
34
34
  import "@radix-ui/react-slider";
35
35
  import "../../packages/ui/src/components/tabs.js";
36
36
  import "../../packages/ui/src/components/toggle.js";
37
- import { Table as b, TableHeader as w, TableRow as r, TableHead as T, TableBody as C, TableCell as d } from "../../packages/ui/src/components/table.js";
37
+ import { Table as b, TableHeader as w, TableRow as t, TableHead as T, TableBody as C, TableCell as d } from "../../packages/ui/src/components/table.js";
38
38
  import { getCommonPinningStyles as u } from "../../utils/data-table.js";
39
39
  import { DataTableColumnHeader as y } from "./data-table-column-header.js";
40
40
  function po({
41
- table: l,
41
+ table: r,
42
42
  actionBar: n,
43
43
  children: f,
44
44
  className: g,
@@ -52,7 +52,10 @@ function po({
52
52
  return /* @__PURE__ */ i(
53
53
  "div",
54
54
  {
55
- className: a("ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative", g),
55
+ className: a(
56
+ "ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative",
57
+ g
58
+ ),
56
59
  ...h,
57
60
  children: [
58
61
  f,
@@ -60,9 +63,12 @@ function po({
60
63
  /* @__PURE__ */ o(
61
64
  "div",
62
65
  {
63
- className: a("ds:overflow-auto ds:rounded-md ds:border", s && "ds:blur-sm"),
66
+ className: a(
67
+ "ds:overflow-auto ds:rounded-md ds:border ds:border-border",
68
+ s && "ds:blur-sm"
69
+ ),
64
70
  children: /* @__PURE__ */ i(b, { children: [
65
- /* @__PURE__ */ o(w, { children: l.getHeaderGroups().map((t) => /* @__PURE__ */ o(r, { children: t.headers.map((e) => /* @__PURE__ */ o(
71
+ /* @__PURE__ */ o(w, { children: r.getHeaderGroups().map((l) => /* @__PURE__ */ o(t, { children: l.headers.map((e) => /* @__PURE__ */ o(
66
72
  T,
67
73
  {
68
74
  colSpan: e.colSpan,
@@ -75,12 +81,12 @@ function po({
75
81
  ) : /* @__PURE__ */ o(y, { column: e.column }) : null
76
82
  },
77
83
  e.id
78
- )) }, t.id)) }),
79
- /* @__PURE__ */ o(C, { children: l.getRowModel().rows?.length ? l.getRowModel().rows.map((t) => /* @__PURE__ */ o(
80
- r,
84
+ )) }, l.id)) }),
85
+ /* @__PURE__ */ o(C, { children: r.getRowModel().rows?.length ? r.getRowModel().rows.map((l) => /* @__PURE__ */ o(
86
+ t,
81
87
  {
82
- "data-state": t.getIsSelected() && "selected",
83
- children: t.getVisibleCells().map((e) => /* @__PURE__ */ o(
88
+ "data-state": l.getIsSelected() && "selected",
89
+ children: l.getVisibleCells().map((e) => /* @__PURE__ */ o(
84
90
  d,
85
91
  {
86
92
  style: {
@@ -94,16 +100,16 @@ function po({
94
100
  e.id
95
101
  ))
96
102
  },
97
- t.id
98
- )) : /* @__PURE__ */ o(r, { children: /* @__PURE__ */ o(
103
+ l.id
104
+ )) : /* @__PURE__ */ o(t, { children: /* @__PURE__ */ o(
99
105
  d,
100
106
  {
101
- colSpan: l.getAllColumns().length,
107
+ colSpan: r.getAllColumns().length,
102
108
  className: "ds:h-24 ds:text-center",
103
109
  children: "No results."
104
110
  }
105
111
  ) }) }),
106
- c && /* @__PURE__ */ o("tfoot", { children: /* @__PURE__ */ o(r, { children: /* @__PURE__ */ o(d, { colSpan: l.getAllColumns().length, children: c(l.getRowModel().rows.map((t) => t.original)) }) }) })
112
+ c && /* @__PURE__ */ o("tfoot", { children: /* @__PURE__ */ o(t, { children: /* @__PURE__ */ o(d, { colSpan: r.getAllColumns().length, children: c(r.getRowModel().rows.map((l) => l.original)) }) }) })
107
113
  ] })
108
114
  }
109
115
  ),
@@ -111,11 +117,11 @@ function po({
111
117
  m && /* @__PURE__ */ o(
112
118
  x,
113
119
  {
114
- table: l,
120
+ table: r,
115
121
  ...m === !0 ? {} : m
116
122
  }
117
123
  ),
118
- n && l.getFilteredSelectedRowModel().rows.length > 0 && n
124
+ n && r.getFilteredSelectedRowModel().rows.length > 0 && n
119
125
  ] })
120
126
  ]
121
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","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(\"ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative\", className)}\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(\"ds:overflow-auto ds:rounded-md ds:border\", loading && \"ds:blur-sm\")}\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":"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"}
1
+ {"version":3,"file":"data-table.js","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":"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"}