@scalably/ui 0.4.4 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import react__default, { ReactNode, HTMLAttributes, ForwardRefExoticComponent, SVGProps, RefAttributes, MemoExoticComponent } from 'react';
3
+ import { Point, Area } from 'react-easy-crop';
3
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
5
  import * as date_fns from 'date-fns';
5
6
  export { addMonths, endOfMonth, isSameDay, startOfMonth } from 'date-fns';
@@ -703,6 +704,9 @@ declare const Divider: react.ForwardRefExoticComponent<react.HTMLAttributes<HTML
703
704
  colorClassName?: string;
704
705
  } & react.RefAttributes<HTMLDivElement>>;
705
706
 
707
+ /**
708
+ * File upload component types and interfaces.
709
+ */
706
710
  type FileUploadVariant = "default" | "dragOver" | "error" | "disabled";
707
711
  type FileUploadSize = "sm" | "md" | "lg";
708
712
  type FileUploadIconType = "file" | "image" | "video";
@@ -736,6 +740,24 @@ interface FileUploadProps {
736
740
  onUploadSuccess?: (files: File[]) => void;
737
741
  onUploadError?: (error: FileUploadError) => void;
738
742
  onFileRemove?: (fileId: string) => void;
743
+ /**
744
+ * Accepted file types. Can be:
745
+ * - MIME types (e.g., 'image/jpeg', 'image/png') - **Recommended**
746
+ * - MIME type wildcards (e.g., 'image/*', 'video/*')
747
+ * - File extensions (e.g., '.jpg', '.png') - Will be converted to MIME types internally
748
+ *
749
+ * @example
750
+ * ```tsx
751
+ * // MIME types (recommended)
752
+ * acceptedFileTypes={['image/jpeg', 'image/png', 'image/gif']}
753
+ *
754
+ * // With wildcards
755
+ * acceptedFileTypes={['image/*', 'video/*']}
756
+ *
757
+ * // Extensions (supported but will be normalized to MIME types)
758
+ * acceptedFileTypes={['.jpg', '.png', '.gif']}
759
+ * ```
760
+ */
739
761
  acceptedFileTypes?: string[];
740
762
  maxFileSize?: number;
741
763
  maxFiles?: number;
@@ -746,7 +768,78 @@ interface FileUploadProps {
746
768
  /** Optional helper text displayed under the dropzone when no error */
747
769
  helperText?: string;
748
770
  variant?: FileUploadVariant;
771
+ /**
772
+ * Size variant (optional). If not provided, the component uses full width
773
+ * with a default min-height of 160px. For custom sizing, use `className` instead.
774
+ *
775
+ * **Best Practice:** Omit `size` and control dimensions via `className` for
776
+ * maximum flexibility. The component automatically adjusts icon sizes, text,
777
+ * and spacing based on detected dimensions.
778
+ */
749
779
  size?: FileUploadSize;
780
+ /**
781
+ * Custom CSS classes for styling the upload zone.
782
+ *
783
+ * **Default Behavior:**
784
+ * - Full width (`sui-w-full`)
785
+ * - Default min-height: 160px (best practice)
786
+ * - Default padding: 24px (1.5rem)
787
+ * - Icon size: 24px (auto-scales based on dimensions)
788
+ *
789
+ * **Custom Sizing:**
790
+ * Control dimensions using Tailwind classes. The component automatically adjusts
791
+ * icon sizes, text sizes, and spacing to fit your layout:
792
+ * - `sui-min-h-[124px]` - Set minimum height
793
+ * - `sui-max-w-[200px]` - Set maximum width
794
+ * - `sui-w-full` - Full width (default)
795
+ *
796
+ * **Responsive Sizing:**
797
+ * When custom dimensions are detected from `className`, the component automatically:
798
+ * - Scales icon size based on container dimensions:
799
+ * - ≤100px: 16px icon
800
+ * - ≤150px: 20px icon
801
+ * - ≤200px: 24px icon
802
+ * - >200px: 28px icon
803
+ * - Adjusts text sizes for compact layouts
804
+ * - Optimizes spacing for smaller containers
805
+ *
806
+ * **Best Practice Examples:**
807
+ *
808
+ * @example
809
+ * ```tsx
810
+ * // Full width, default height (160px) - recommended
811
+ * <FileUpload onFilesChange={setFiles} />
812
+ *
813
+ * // Full width, custom height
814
+ * <FileUpload
815
+ * className="sui-min-h-[200px]"
816
+ * onFilesChange={setFiles}
817
+ * />
818
+ *
819
+ * // Compact custom size (200x124) - icon and text auto-scale
820
+ * <FileUpload
821
+ * className="sui-min-h-[124px] sui-max-w-[200px]"
822
+ * onFilesChange={setFiles}
823
+ * />
824
+ *
825
+ * // Square crop (1:1) with matching zone size
826
+ * <FileUpload
827
+ * enableImageCrop
828
+ * imageCropAspect={1}
829
+ * className="sui-min-h-[300px] sui-max-w-[300px]"
830
+ * />
831
+ *
832
+ * // Widescreen crop (16:9) with matching zone size
833
+ * <FileUpload
834
+ * enableImageCrop
835
+ * imageCropAspect={16 / 9}
836
+ * className="sui-min-h-[200px] sui-max-w-[356px]"
837
+ * />
838
+ * ```
839
+ *
840
+ * After cropping, the preview will render at exactly the zone dimensions,
841
+ * ensuring the cropped image fills the zone perfectly.
842
+ */
750
843
  className?: string;
751
844
  iconType?: FileUploadIconType;
752
845
  uploadIcon?: React.ReactNode;
@@ -775,18 +868,178 @@ interface FileUploadProps {
775
868
  * Provides the Blob (image/jpeg) and a data URL for immediate preview.
776
869
  */
777
870
  onThumbnailCapture?: (thumbnail: Blob, dataUrl: string, file: FileUploadFile) => void;
871
+ /** Enable image crop UI via modal when an image file is selected. */
872
+ enableImageCrop?: boolean;
873
+ /**
874
+ * Aspect ratio constraint for image crop (width/height), undefined = free crop.
875
+ * Common values: 1 (square), 16/9 (widescreen), 4/3 (standard).
876
+ *
877
+ * **Tip:** To match the upload zone size to the crop aspect ratio, use `className`
878
+ * with matching dimensions. For example, with `imageCropAspect={1}` (square),
879
+ * use `className="sui-min-h-[300px] sui-max-w-[300px]"` to create a 300×300px zone.
880
+ * The preview will then render at exactly that size after cropping.
881
+ *
882
+ * @example
883
+ * ```tsx
884
+ * // Square crop with matching zone
885
+ * <FileUpload
886
+ * enableImageCrop
887
+ * imageCropAspect={1}
888
+ * className="sui-min-h-[300px] sui-max-w-[300px]"
889
+ * />
890
+ * ```
891
+ */
892
+ imageCropAspect?: number;
893
+ /**
894
+ * Called when an image is cropped.
895
+ * Provides the cropped Blob (image/jpeg) and a data URL for immediate preview.
896
+ *
897
+ * **Note:** When using custom zone sizing with `className`, update the file's
898
+ * `preview` property with the `dataUrl` to ensure the preview renders at the
899
+ * correct size within the zone.
900
+ *
901
+ * @example
902
+ * ```tsx
903
+ * <FileUpload
904
+ * enableImageCrop
905
+ * imageCropAspect={1}
906
+ * className="sui-min-h-[300px] sui-max-w-[300px]"
907
+ * onImageCrop={(blob, dataUrl, file) => {
908
+ * // Update the file preview to show the cropped image
909
+ * setFiles(prev =>
910
+ * prev.map(f =>
911
+ * f.id === file.id ? { ...f, preview: dataUrl } : f
912
+ * )
913
+ * );
914
+ * }}
915
+ * />
916
+ * ```
917
+ */
918
+ onImageCrop?: (croppedBlob: Blob, dataUrl: string, file: FileUploadFile) => void;
919
+ }
920
+
921
+ declare const FileUpload: react.ForwardRefExoticComponent<FileUploadProps & react.RefAttributes<HTMLDivElement>>;
922
+
923
+ interface ImageCropProps {
924
+ /** Image source (data URL or object URL) */
925
+ imageSrc: string;
926
+ /** Aspect ratio (width/height), undefined = free */
927
+ aspect?: number;
928
+ /** Current crop position */
929
+ crop: Point;
930
+ /** Current zoom level */
931
+ zoom: number;
932
+ /** Current rotation in degrees */
933
+ rotation: number;
934
+ /** Called when crop position changes (on drag) */
935
+ onCropChange: (crop: Point) => void;
936
+ /** Called when zoom changes */
937
+ onZoomChange: (zoom: number) => void;
938
+ /** Called when rotation changes */
939
+ onRotationChange: (rotation: number) => void;
940
+ /** Called when crop completes - stores coordinates only (fires on drag) */
941
+ onCropComplete: (croppedArea: Area, croppedAreaPixels: Area) => void;
942
+ /** Crop shape */
943
+ cropShape?: "rect" | "round";
944
+ /** Show grid overlay */
945
+ showGrid?: boolean;
946
+ /** Minimum zoom level */
947
+ minZoom?: number;
948
+ /** Maximum zoom level */
949
+ maxZoom?: number;
950
+ /** Accessibility label */
951
+ "aria-label"?: string;
952
+ /** Additional class name */
953
+ className?: string;
954
+ }
955
+ /**
956
+ * Image crop component wrapping react-easy-crop with controls for zoom, rotation, and crop area.
957
+ * This component only manages the UI and stores crop coordinates. Blob generation happens
958
+ * separately when the user confirms the crop.
959
+ */
960
+ declare const ImageCrop: react.ForwardRefExoticComponent<ImageCropProps & react.RefAttributes<HTMLDivElement>>;
961
+
962
+ interface ImageCropModalProps {
963
+ /** Controls visibility of the modal */
964
+ isOpen: boolean;
965
+ /** Called when the modal should close */
966
+ onClose: () => void;
967
+ /** Image source (File object URL or data URL) */
968
+ imageSrc: string;
969
+ /** Aspect ratio constraint (width/height), undefined = free */
970
+ aspect?: number;
971
+ /** Called when crop is confirmed with final result */
972
+ onConfirm: (croppedBlob: Blob, dataUrl: string) => void;
973
+ /** Crop shape */
974
+ cropShape?: "rect" | "round";
975
+ /** Show grid overlay */
976
+ showGrid?: boolean;
977
+ /** Customizable content */
978
+ title?: string;
979
+ cancelButtonText?: string;
980
+ saveButtonText?: string;
778
981
  }
779
982
  /**
780
- * File upload component with drag-and-drop, validation, previews, and accessibility support.
781
- * Supports multiple files, file type validation, size limits, and comprehensive error handling.
983
+ * Modal component for cropping images with zoom, rotation, and aspect ratio controls.
984
+ * Manages all crop state and generates the final Blob only when the user clicks "Save".
782
985
  */
986
+ declare const ImageCropModal: {
987
+ ({ isOpen, onClose, imageSrc, aspect, onConfirm, cropShape, showGrid, title, cancelButtonText, saveButtonText, }: ImageCropModalProps): react_jsx_runtime.JSX.Element | null;
988
+ displayName: string;
989
+ };
990
+
783
991
  /**
784
- * Note on uploading state:
785
- * - The component does not perform uploads; the parent owns upload lifecycle.
786
- * - To show progress or uploading state, manage `files` as a controlled prop and
787
- * update each item's `status` ("uploading" | "success" | "error") and `progress`.
992
+ * Options for cropping an image
788
993
  */
789
- declare const FileUpload: react.ForwardRefExoticComponent<FileUploadProps & react.RefAttributes<HTMLDivElement>>;
994
+ interface GetCroppedImgOptions {
995
+ /** Image source (data URL, object URL, or remote URL) */
996
+ imageSrc: string;
997
+ /** Crop area in pixels from react-easy-crop's onCropComplete */
998
+ pixelCrop: Area;
999
+ /** Rotation in degrees (default: 0) */
1000
+ rotation?: number;
1001
+ /** Flip configuration */
1002
+ flip?: {
1003
+ horizontal: boolean;
1004
+ vertical: boolean;
1005
+ };
1006
+ /** Output image format (default: 'image/jpeg') */
1007
+ outputFormat?: "image/jpeg" | "image/png";
1008
+ /** Output quality for JPEG (0-1, default: 0.9) */
1009
+ outputQuality?: number;
1010
+ }
1011
+ /**
1012
+ * Result of image cropping operation
1013
+ */
1014
+ interface CroppedImageResult {
1015
+ /** Cropped image as Blob */
1016
+ blob: Blob;
1017
+ /** Cropped image as data URL for immediate preview */
1018
+ dataUrl: string;
1019
+ }
1020
+ /**
1021
+ * Crops an image based on the provided crop area and applies rotation/flip transformations.
1022
+ * Returns both a Blob (for upload) and a data URL (for immediate preview).
1023
+ *
1024
+ * @param options - Cropping options including image source, crop area, rotation, and output format
1025
+ * @returns Promise resolving to cropped image result or null if operation fails
1026
+ *
1027
+ * @example
1028
+ * ```tsx
1029
+ * const result = await getCroppedImg({
1030
+ * imageSrc: imageUrl,
1031
+ * pixelCrop: { x: 100, y: 100, width: 300, height: 300 },
1032
+ * rotation: 90,
1033
+ * outputFormat: 'image/jpeg',
1034
+ * outputQuality: 0.9
1035
+ * });
1036
+ * if (result) {
1037
+ * // Use result.blob for upload
1038
+ * // Use result.dataUrl for preview
1039
+ * }
1040
+ * ```
1041
+ */
1042
+ declare function getCroppedImg(options: GetCroppedImgOptions): Promise<CroppedImageResult | null>;
790
1043
 
791
1044
  type FormBaseProps = Omit<React.FormHTMLAttributes<HTMLFormElement>, "onSubmit">;
792
1045
  interface FormProps extends FormBaseProps {
@@ -1086,6 +1339,7 @@ interface SelectProps extends SelectBaseProps {
1086
1339
  onSearch?: (searchTerm: string) => void;
1087
1340
  clearable?: boolean;
1088
1341
  maxHeight?: number;
1342
+ dropdownClassName?: string;
1089
1343
  renderValue?: (props: {
1090
1344
  selectedValue: string | string[];
1091
1345
  selectedOption: SelectOption | null;
@@ -1912,16 +2166,6 @@ interface LoadingScreenProps extends Omit<react__default.HTMLAttributes<HTMLDivE
1912
2166
  * Optional loading message displayed below the logo.
1913
2167
  */
1914
2168
  message?: string;
1915
- /**
1916
- * Backdrop blur amount. Set to 0 to disable blur.
1917
- * @default 8
1918
- */
1919
- backdropBlur?: number;
1920
- /**
1921
- * Backdrop opacity (0-1).
1922
- * @default 0.8
1923
- */
1924
- backdropOpacity?: number;
1925
2169
  /**
1926
2170
  * Logo size in pixels. Responsive: smaller on mobile, larger on desktop.
1927
2171
  * @default { mobile: 64, desktop: 80 }
@@ -1940,7 +2184,7 @@ interface LoadingScreenProps extends Omit<react__default.HTMLAttributes<HTMLDivE
1940
2184
  * Full-screen loading overlay component with animated Scalably logo.
1941
2185
  *
1942
2186
  * Features:
1943
- * - Full-screen overlay with customizable backdrop
2187
+ * - Full-screen transparent overlay
1944
2188
  * - Animated logo with pulse and rotate combination
1945
2189
  * - Optional loading message
1946
2190
  * - Full accessibility support
@@ -1955,8 +2199,8 @@ interface LoadingScreenProps extends Omit<react__default.HTMLAttributes<HTMLDivE
1955
2199
  * // With message
1956
2200
  * <LoadingScreen message="Loading your data..." />
1957
2201
  *
1958
- * // Custom backdrop
1959
- * <LoadingScreen backdropBlur={12} backdropOpacity={0.9} />
2202
+ * // With backdrop blur via className
2203
+ * <LoadingScreen className="backdrop-blur-md" />
1960
2204
  *
1961
2205
  * // Custom size
1962
2206
  * <LoadingScreen size={{ mobile: 48, desktop: 96 }} />
@@ -1964,6 +2208,53 @@ interface LoadingScreenProps extends Omit<react__default.HTMLAttributes<HTMLDivE
1964
2208
  */
1965
2209
  declare const LoadingScreen: react__default.ForwardRefExoticComponent<LoadingScreenProps & react__default.RefAttributes<HTMLDivElement>>;
1966
2210
 
2211
+ interface LoadingSpinnerProps extends Omit<react__default.HTMLAttributes<HTMLDivElement>, "children"> {
2212
+ /**
2213
+ * Size of the spinner in pixels.
2214
+ * @default 24
2215
+ */
2216
+ size?: number;
2217
+ /**
2218
+ * Accessible label for screen readers.
2219
+ * @default "Loading"
2220
+ */
2221
+ "aria-label"?: string;
2222
+ }
2223
+ /**
2224
+ * Inline loading spinner component with animated Scalably logo.
2225
+ *
2226
+ * Features:
2227
+ * - Compact spinner for inline use (buttons, cards, tables, etc.)
2228
+ * - Animated logo with pulse and rotate combination
2229
+ * - Full accessibility support
2230
+ * - Respects reduced motion preferences
2231
+ * - Customizable size
2232
+ *
2233
+ * @example
2234
+ * ```tsx
2235
+ * // Basic usage
2236
+ * <LoadingSpinner />
2237
+ *
2238
+ * // Custom size
2239
+ * <LoadingSpinner size={32} />
2240
+ *
2241
+ * // In a button
2242
+ * <Button disabled>
2243
+ * <LoadingSpinner size={16} className="sui-mr-2" />
2244
+ * Loading...
2245
+ * </Button>
2246
+ *
2247
+ * // In a card
2248
+ * <Card>
2249
+ * <div className="sui-flex sui-items-center sui-gap-2">
2250
+ * <LoadingSpinner size={20} />
2251
+ * <span>Processing...</span>
2252
+ * </div>
2253
+ * </Card>
2254
+ * ```
2255
+ */
2256
+ declare const LoadingSpinner: react__default.ForwardRefExoticComponent<LoadingSpinnerProps & react__default.RefAttributes<HTMLDivElement>>;
2257
+
1967
2258
  interface WelcomeAssetProps extends Omit<SVGProps<SVGSVGElement>, "ref"> {
1968
2259
  /**
1969
2260
  * Optional square dimension override; falls back to intrinsic size.
@@ -2116,6 +2407,15 @@ interface RichTextEditorProps {
2116
2407
  max: number;
2117
2408
  current: number;
2118
2409
  }) => void;
2410
+ /**
2411
+ * Controls when Tiptap renders the editor content.
2412
+ *
2413
+ * - Set to `false` when using SSR (e.g., Next.js) to prevent hydration mismatches.
2414
+ * - Set to `true` or leave undefined for client-side only rendering.
2415
+ *
2416
+ * @default undefined (Tiptap auto-detects, but you should explicitly set `false` for SSR)
2417
+ */
2418
+ immediatelyRender?: boolean;
2119
2419
  }
2120
2420
  /**
2121
2421
  * RichTextEditor - Controlled rich text editor built on top of Tiptap.
@@ -2138,7 +2438,12 @@ interface RichTextEditorProps {
2138
2438
  *
2139
2439
  * return (
2140
2440
  * <div>
2141
- * <RichTextEditor value={content} onChange={setContent} />
2441
+ * {/* For SSR (Next.js, etc.), set immediatelyRender={false} *\/}
2442
+ * <RichTextEditor
2443
+ * value={content}
2444
+ * onChange={setContent}
2445
+ * immediatelyRender={false}
2446
+ * />
2142
2447
  * <RichTextViewer content={content} />
2143
2448
  * </div>
2144
2449
  * );
@@ -2148,7 +2453,7 @@ interface RichTextEditorProps {
2148
2453
  * @see RichTextViewer - Read-only viewer component for displaying rich text content
2149
2454
  */
2150
2455
  declare const RichTextEditor: {
2151
- ({ value, onChange, label, error, helperText, placeholder, minHeight, simple, disabled, "data-testid": dataTestId, containerClassName, onImageUpload, imageSourceMode, maxCharacters, onMaxLengthExceed, }: RichTextEditorProps): react_jsx_runtime.JSX.Element;
2456
+ ({ value, onChange, label, error, helperText, placeholder, minHeight, simple, disabled, "data-testid": dataTestId, containerClassName, onImageUpload, imageSourceMode, maxCharacters, onMaxLengthExceed, immediatelyRender, }: RichTextEditorProps): react_jsx_runtime.JSX.Element;
2152
2457
  displayName: string;
2153
2458
  };
2154
2459
 
@@ -2327,6 +2632,102 @@ declare const zodErrorsToSummary: (errors: Record<string, FieldErrorLike>) => {
2327
2632
  message: string;
2328
2633
  }[];
2329
2634
 
2635
+ type BasicFileValidationErrorType = "fileType" | "fileSize";
2636
+ interface BasicFileValidationError {
2637
+ type: BasicFileValidationErrorType;
2638
+ message: string;
2639
+ }
2640
+ /**
2641
+ * Converts a file extension (e.g., '.jpg') to its corresponding MIME type (e.g., 'image/jpeg').
2642
+ * Returns null if the extension is not recognized.
2643
+ *
2644
+ * @param extension - File extension with or without leading dot (e.g., '.jpg' or 'jpg')
2645
+ * @returns The corresponding MIME type or null if not found
2646
+ *
2647
+ * @example
2648
+ * ```ts
2649
+ * extensionToMimeType('.jpg') // 'image/jpeg'
2650
+ * extensionToMimeType('png') // 'image/png'
2651
+ * extensionToMimeType('.xyz') // null
2652
+ * ```
2653
+ */
2654
+ declare function extensionToMimeType(extension: string): string | null;
2655
+ /**
2656
+ * Converts a MIME type to a user-friendly display name (extension format).
2657
+ * Returns the extension name in uppercase (e.g., 'image/jpeg' → 'JPEG').
2658
+ * For wildcards, returns a category name (e.g., 'image/*' → 'All images').
2659
+ *
2660
+ * @param mimeType - MIME type (e.g., 'image/jpeg') or wildcard (e.g., 'image/*')
2661
+ * @returns User-friendly display name
2662
+ *
2663
+ * @example
2664
+ * ```ts
2665
+ * mimeTypeToDisplayName('image/jpeg') // 'JPEG'
2666
+ * mimeTypeToDisplayName('image/*') // 'All images'
2667
+ * mimeTypeToDisplayName('video/mp4') // 'MP4'
2668
+ * ```
2669
+ */
2670
+ declare function mimeTypeToDisplayName(mimeType: string): string;
2671
+ /**
2672
+ * Converts an array of MIME types to a user-friendly display string.
2673
+ * Shows extensions in uppercase (e.g., 'JPEG, PNG, GIF') or category names for wildcards.
2674
+ *
2675
+ * @param mimeTypes - Array of MIME types
2676
+ * @returns User-friendly comma-separated string
2677
+ *
2678
+ * @example
2679
+ * ```ts
2680
+ * formatAcceptedFileTypes(['image/jpeg', 'image/png', 'image/gif'])
2681
+ * // 'JPEG, PNG, GIF'
2682
+ *
2683
+ * formatAcceptedFileTypes(['image/*', 'video/*'])
2684
+ * // 'All images, All videos'
2685
+ * ```
2686
+ */
2687
+ declare function formatAcceptedFileTypes(mimeTypes: string[]): string;
2688
+ /**
2689
+ * Normalizes an array of accepted file types to MIME types only.
2690
+ * Converts file extensions (e.g., '.jpg') to MIME types (e.g., 'image/jpeg').
2691
+ * MIME types and wildcards (e.g., 'image/*') are passed through unchanged.
2692
+ *
2693
+ * @param acceptedFileTypes - Array of file types (extensions or MIME types)
2694
+ * @returns Array of normalized MIME types
2695
+ *
2696
+ * @example
2697
+ * ```ts
2698
+ * normalizeAcceptedFileTypes(['.jpg', 'image/png', 'image/*'])
2699
+ * // ['image/jpeg', 'image/png', 'image/*']
2700
+ * ```
2701
+ */
2702
+ declare function normalizeAcceptedFileTypes(acceptedFileTypes: string[]): string[];
2703
+ /**
2704
+ * Validate a File against accepted MIME types and max size.
2705
+ * Returns null when valid, or a BasicFileValidationError when invalid.
2706
+ *
2707
+ * **Note:** This function only accepts MIME types (e.g., 'image/jpeg', 'image/png').
2708
+ * Use `normalizeAcceptedFileTypes()` to convert extensions to MIME types before calling this function.
2709
+ *
2710
+ * @param file - The file to validate
2711
+ * @param acceptedMimeTypes - Array of accepted MIME types. Supports:
2712
+ * - Exact MIME types (e.g., 'image/png', 'image/jpeg')
2713
+ * - MIME type wildcards (e.g., 'image/*', 'video/*')
2714
+ * @param maxFileSize - Maximum file size in bytes
2715
+ *
2716
+ * @example
2717
+ * ```ts
2718
+ * // MIME types
2719
+ * validateFileTypeAndSize(file, ['image/png', 'image/jpeg'], 5 * 1024 * 1024);
2720
+ *
2721
+ * // With wildcards
2722
+ * validateFileTypeAndSize(file, ['image/*', 'video/*'], 5 * 1024 * 1024);
2723
+ *
2724
+ * // Converting extensions to MIME types first
2725
+ * const mimeTypes = normalizeAcceptedFileTypes(['.jpg', '.png']);
2726
+ * validateFileTypeAndSize(file, mimeTypes, 5 * 1024 * 1024);
2727
+ * ```
2728
+ */
2729
+ declare function validateFileTypeAndSize(file: File, acceptedMimeTypes: string[], maxFileSize: number): BasicFileValidationError | null;
2730
+
2330
2731
  /**
2331
2732
  * Props for the CalendarIcon component
2332
2733
  */
@@ -2335,8 +2736,6 @@ interface CalendarIconProps extends React.SVGProps<SVGSVGElement> {
2335
2736
  size?: number;
2336
2737
  /** Additional CSS classes to apply to the icon */
2337
2738
  className?: string;
2338
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2339
- strokeWidth?: number;
2340
2739
  }
2341
2740
  /**
2342
2741
  * Calendar icon component - displays a calendar with date indicators.
@@ -2383,8 +2782,6 @@ interface CheckIconProps extends React.SVGProps<SVGSVGElement> {
2383
2782
  size?: number;
2384
2783
  /** Additional CSS classes to apply to the icon */
2385
2784
  className?: string;
2386
- /** Stroke width of the icon in pixels. Defaults to 2.2. */
2387
- strokeWidth?: number;
2388
2785
  }
2389
2786
  /**
2390
2787
  * Check icon component - displays a checkmark in a green gradient circle.
@@ -2408,8 +2805,6 @@ interface CloseIconProps extends React.SVGProps<SVGSVGElement> {
2408
2805
  size?: number;
2409
2806
  /** Additional CSS classes to apply to the icon */
2410
2807
  className?: string;
2411
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2412
- strokeWidth?: number;
2413
2808
  }
2414
2809
  /**
2415
2810
  * Close icon component - displays a cross icon.
@@ -2431,13 +2826,23 @@ interface CopyIconProps extends React.SVGProps<SVGSVGElement> {
2431
2826
  }
2432
2827
  declare const CopyIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<CopyIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2433
2828
 
2829
+ interface CropIconProps extends React.SVGProps<SVGSVGElement> {
2830
+ size?: number;
2831
+ className?: string;
2832
+ }
2833
+ declare const CropIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<CropIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2834
+
2835
+ interface DeleteIconProps extends React.SVGProps<SVGSVGElement> {
2836
+ size?: number;
2837
+ className?: string;
2838
+ }
2839
+ declare const DeleteIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<DeleteIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2840
+
2434
2841
  interface DropdownIconProps extends React.SVGProps<SVGSVGElement> {
2435
2842
  /** Size of the icon in pixels. Defaults to 24. */
2436
2843
  size?: number;
2437
2844
  /** Additional CSS classes to apply to the icon */
2438
2845
  className?: string;
2439
- /** Stroke width of the icon in pixels. Defaults to 2. */
2440
- strokeWidth?: number;
2441
2846
  }
2442
2847
  /**
2443
2848
  * Dropdown icon component - displays a down arrow icon.
@@ -2458,8 +2863,6 @@ interface DropUpIconProps extends React.SVGProps<SVGSVGElement> {
2458
2863
  size?: number;
2459
2864
  /** Additional CSS classes to apply to the icon */
2460
2865
  className?: string;
2461
- /** Stroke width of the icon in pixels. Defaults to 2. */
2462
- strokeWidth?: number;
2463
2866
  }
2464
2867
  /**
2465
2868
  * DropUp icon component - displays an up arrow icon.
@@ -2475,13 +2878,17 @@ interface DropUpIconProps extends React.SVGProps<SVGSVGElement> {
2475
2878
  */
2476
2879
  declare const DropUpIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<DropUpIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2477
2880
 
2881
+ interface EditIconProps extends React.SVGProps<SVGSVGElement> {
2882
+ size?: number;
2883
+ className?: string;
2884
+ }
2885
+ declare const EditIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<EditIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2886
+
2478
2887
  interface ErrorIconProps extends React.SVGProps<SVGSVGElement> {
2479
2888
  /** Size of the icon in pixels. Defaults to 24. */
2480
2889
  size?: number;
2481
2890
  /** Additional CSS classes to apply to the icon */
2482
2891
  className?: string;
2483
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2484
- strokeWidth?: number;
2485
2892
  }
2486
2893
  /**
2487
2894
  * Error icon component - displays an error icon.
@@ -2497,6 +2904,46 @@ interface ErrorIconProps extends React.SVGProps<SVGSVGElement> {
2497
2904
  */
2498
2905
  declare const ErrorIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<ErrorIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2499
2906
 
2907
+ interface EyeIconProps extends React.SVGProps<SVGSVGElement> {
2908
+ /** Size of the icon in pixels. Defaults to 24. */
2909
+ size?: number;
2910
+ /** Additional CSS classes to apply to the icon */
2911
+ className?: string;
2912
+ }
2913
+ /**
2914
+ * Eye icon component - displays an eye icon.
2915
+ *
2916
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
2917
+ *
2918
+ * @example
2919
+ * ```tsx
2920
+ * import { EyeIcon } from '@scalably/ui';
2921
+ *
2922
+ * <EyeIcon size={24} className="sui-text-primary" />
2923
+ * ```
2924
+ */
2925
+ declare const EyeIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<EyeIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2926
+
2927
+ interface EyeSlashIconProps extends React.SVGProps<SVGSVGElement> {
2928
+ /** Size of the icon in pixels. Defaults to 24. */
2929
+ size?: number;
2930
+ /** Additional CSS classes to apply to the icon */
2931
+ className?: string;
2932
+ }
2933
+ /**
2934
+ * Eye slash icon component - displays an eye slash icon.
2935
+ *
2936
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
2937
+ *
2938
+ * @example
2939
+ * ```tsx
2940
+ * import { EyeSlashIcon } from '@scalably/ui';
2941
+ *
2942
+ * <EyeSlashIcon size={24} className="sui-text-primary" />
2943
+ * ```
2944
+ */
2945
+ declare const EyeSlashIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<EyeSlashIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2946
+
2500
2947
  interface FileIconProps extends React.SVGProps<SVGSVGElement> {
2501
2948
  /** Size of the icon in pixels. Defaults to 24. */
2502
2949
  size?: number;
@@ -2520,8 +2967,6 @@ declare const FileIcon: react.MemoExoticComponent<react.ForwardRefExoticComponen
2520
2967
  interface FileUploadIconProps extends React.SVGProps<SVGSVGElement> {
2521
2968
  /** Size of the icon in pixels. Defaults to 24. */
2522
2969
  size?: number;
2523
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2524
- strokeWidth?: number;
2525
2970
  /** Additional CSS classes to apply to the icon */
2526
2971
  className?: string;
2527
2972
  }
@@ -2544,8 +2989,6 @@ interface GridIconProps extends React.SVGProps<SVGSVGElement> {
2544
2989
  size?: number;
2545
2990
  /** Additional CSS classes to apply to the icon */
2546
2991
  className?: string;
2547
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2548
- strokeWidth?: number;
2549
2992
  }
2550
2993
  /**
2551
2994
  * Grid icon component - displays a grid icon.
@@ -2584,8 +3027,6 @@ declare const ImageIcon: react.MemoExoticComponent<react.ForwardRefExoticCompone
2584
3027
  interface ImageUploadIconProps extends React.SVGProps<SVGSVGElement> {
2585
3028
  /** Size of the icon in pixels. Defaults to 24. */
2586
3029
  size?: number;
2587
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2588
- strokeWidth?: number;
2589
3030
  /** Additional CSS classes to apply to the icon */
2590
3031
  className?: string;
2591
3032
  }
@@ -2608,8 +3049,6 @@ interface IndeterminateIconProps extends React.SVGProps<SVGSVGElement> {
2608
3049
  size?: number;
2609
3050
  /** Additional CSS classes to apply to the icon */
2610
3051
  className?: string;
2611
- /** Stroke width of the icon in pixels. Defaults to 2. */
2612
- strokeWidth?: number;
2613
3052
  }
2614
3053
  /**
2615
3054
  * Indeterminate icon component - displays an indeterminate icon.
@@ -2630,8 +3069,6 @@ interface InfoIconProps extends React.SVGProps<SVGSVGElement> {
2630
3069
  size?: number;
2631
3070
  /** Additional CSS classes to apply to the icon */
2632
3071
  className?: string;
2633
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2634
- strokeWidth?: number;
2635
3072
  }
2636
3073
  /**
2637
3074
  * Info icon component - displays an info icon.
@@ -2652,8 +3089,6 @@ interface ListIconProps extends React.SVGProps<SVGSVGElement> {
2652
3089
  size?: number;
2653
3090
  /** Additional CSS classes to apply to the icon */
2654
3091
  className?: string;
2655
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2656
- strokeWidth?: number;
2657
3092
  }
2658
3093
  /**
2659
3094
  * List icon component - displays a list icon.
@@ -2674,8 +3109,6 @@ interface MinusIconProps extends React.SVGProps<SVGSVGElement> {
2674
3109
  size?: number;
2675
3110
  /** Additional CSS classes to apply to the icon */
2676
3111
  className?: string;
2677
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2678
- strokeWidth?: number;
2679
3112
  }
2680
3113
  /**
2681
3114
  * Minus icon component - displays a minus icon.
@@ -2719,8 +3152,6 @@ interface PlusIconProps extends React.SVGProps<SVGSVGElement> {
2719
3152
  size?: number;
2720
3153
  /** Additional CSS classes to apply to the icon */
2721
3154
  className?: string;
2722
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2723
- strokeWidth?: number;
2724
3155
  }
2725
3156
  /**
2726
3157
  * Plus icon component - displays a plus icon.
@@ -2736,6 +3167,67 @@ interface PlusIconProps extends React.SVGProps<SVGSVGElement> {
2736
3167
  */
2737
3168
  declare const PlusIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<PlusIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2738
3169
 
3170
+ interface ResetIconProps extends React.SVGProps<SVGSVGElement> {
3171
+ /** Size of the icon in pixels. Defaults to 24. */
3172
+ size?: number;
3173
+ /** Additional CSS classes to apply to the icon */
3174
+ className?: string;
3175
+ }
3176
+ /**
3177
+ * Reset icon component - displays a reset icon.
3178
+ *
3179
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
3180
+ *
3181
+ * @example
3182
+ * ```tsx
3183
+ * import { ResetIcon } from '@scalably/ui';
3184
+ *
3185
+ * <ResetIcon size={24} className="sui-text-primary" />
3186
+ * ```
3187
+ */
3188
+ declare const ResetIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<ResetIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3189
+
3190
+ interface RotateLeftIconProps extends React.SVGProps<SVGSVGElement> {
3191
+ /** Size of the icon in pixels. Defaults to 24. */
3192
+ size?: number;
3193
+ /** Additional CSS classes to apply to the icon */
3194
+ className?: string;
3195
+ }
3196
+ /**
3197
+ * RotateLeft icon component - displays a rotate left icon.
3198
+ *
3199
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
3200
+ *
3201
+ * @example
3202
+ * ```tsx
3203
+ * import { RotateLeftIcon } from '@scalably/ui';
3204
+ *
3205
+ * <RotateLeftIcon size={24} className="sui-text-primary" />
3206
+ * ```
3207
+ */
3208
+ declare const RotateLeftIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<RotateLeftIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3209
+
3210
+ interface RotateRightIconProps extends React.SVGProps<SVGSVGElement> {
3211
+ /** Size of the icon in pixels. Defaults to 24. */
3212
+ size?: number;
3213
+ /** Stroke width of the icon in pixels. Defaults to 1.5. */
3214
+ /** Additional CSS classes to apply to the icon */
3215
+ className?: string;
3216
+ }
3217
+ /**
3218
+ * RotateRight icon component - displays a rotate right icon.
3219
+ *
3220
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
3221
+ *
3222
+ * @example
3223
+ * ```tsx
3224
+ * import { RotateRightIcon } from '@scalably/ui';
3225
+ *
3226
+ * <RotateRightIcon size={24} className="sui-text-primary" />
3227
+ * ```
3228
+ */
3229
+ declare const RotateRightIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<RotateRightIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3230
+
2739
3231
  /**
2740
3232
  * Props for the SearchIcon component
2741
3233
  */
@@ -2744,8 +3236,6 @@ interface SearchIconProps extends React.SVGProps<SVGSVGElement> {
2744
3236
  size?: number;
2745
3237
  /** Additional CSS classes to apply to the icon */
2746
3238
  className?: string;
2747
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2748
- strokeWidth?: number;
2749
3239
  }
2750
3240
  /**
2751
3241
  * Search icon component - a magnifying glass icon for search functionality.
@@ -2766,8 +3256,6 @@ interface SettingsIconProps extends React.SVGProps<SVGSVGElement> {
2766
3256
  size?: number;
2767
3257
  /** Additional CSS classes to apply to the icon */
2768
3258
  className?: string;
2769
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2770
- strokeWidth?: number;
2771
3259
  }
2772
3260
  /**
2773
3261
  * Settings icon component - displays a settings icon.
@@ -2791,8 +3279,6 @@ interface SuccessIconProps extends React.SVGProps<SVGSVGElement> {
2791
3279
  size?: number;
2792
3280
  /** Additional CSS classes to apply to the icon */
2793
3281
  className?: string;
2794
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2795
- strokeWidth?: number;
2796
3282
  }
2797
3283
  /**
2798
3284
  * Success icon component - displays a checkmark in a green gradient circle.
@@ -2814,8 +3300,6 @@ interface TickIconProps extends React.SVGProps<SVGSVGElement> {
2814
3300
  size?: number;
2815
3301
  /** Additional CSS classes to apply to the icon */
2816
3302
  className?: string;
2817
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2818
- strokeWidth?: number;
2819
3303
  }
2820
3304
  /**
2821
3305
  * Tick icon component - displays a tick icon.
@@ -2836,8 +3320,6 @@ interface ToFirstIconProps extends React.SVGProps<SVGSVGElement> {
2836
3320
  size?: number;
2837
3321
  /** Additional CSS classes to apply to the icon */
2838
3322
  className?: string;
2839
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2840
- strokeWidth?: number;
2841
3323
  }
2842
3324
  /**
2843
3325
  * ToFirst icon component - displays a to first icon.
@@ -2858,8 +3340,6 @@ interface ToLastIconProps extends React.SVGProps<SVGSVGElement> {
2858
3340
  size?: number;
2859
3341
  /** Additional CSS classes to apply to the icon */
2860
3342
  className?: string;
2861
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2862
- strokeWidth?: number;
2863
3343
  }
2864
3344
  /**
2865
3345
  * ToLast icon component - displays a to last icon.
@@ -2880,8 +3360,6 @@ interface ToNextIconProps extends React.SVGProps<SVGSVGElement> {
2880
3360
  size?: number;
2881
3361
  /** Additional CSS classes to apply to the icon */
2882
3362
  className?: string;
2883
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2884
- strokeWidth?: number;
2885
3363
  }
2886
3364
  /**
2887
3365
  * ToNext icon component - displays a to next icon.
@@ -2902,8 +3380,6 @@ interface ToPreviousIconProps extends React.SVGProps<SVGSVGElement> {
2902
3380
  size?: number;
2903
3381
  /** Additional CSS classes to apply to the icon */
2904
3382
  className?: string;
2905
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2906
- strokeWidth?: number;
2907
3383
  }
2908
3384
  /**
2909
3385
  * ToPrevious icon component - displays a to previous icon.
@@ -2919,6 +3395,26 @@ interface ToPreviousIconProps extends React.SVGProps<SVGSVGElement> {
2919
3395
  */
2920
3396
  declare const ToPreviousIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<ToPreviousIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
2921
3397
 
3398
+ interface TranslateIconProps extends React.SVGProps<SVGSVGElement> {
3399
+ /** Size of the icon in pixels. Defaults to 24. */
3400
+ size?: number;
3401
+ /** Additional CSS classes to apply to the icon */
3402
+ className?: string;
3403
+ }
3404
+ /**
3405
+ * Translate icon component - displays a translate icon.
3406
+ *
3407
+ * This icon uses `currentColor`, so it can be styled with Tailwind classes.
3408
+ *
3409
+ * @example
3410
+ * ```tsx
3411
+ * import { TranslateIcon } from '@scalably/ui';
3412
+ *
3413
+ * <TranslateIcon size={24} className="sui-text-primary" />
3414
+ * ```
3415
+ */
3416
+ declare const TranslateIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<TranslateIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3417
+
2922
3418
  interface VideoIconProps extends React.SVGProps<SVGSVGElement> {
2923
3419
  /** Size of the icon in pixels. Defaults to 24. */
2924
3420
  size?: number;
@@ -2942,8 +3438,6 @@ declare const VideoIcon: react.MemoExoticComponent<react.ForwardRefExoticCompone
2942
3438
  interface VideoUploadIconProps extends React.SVGProps<SVGSVGElement> {
2943
3439
  /** Size of the icon in pixels. Defaults to 24. */
2944
3440
  size?: number;
2945
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2946
- strokeWidth?: number;
2947
3441
  /** Additional CSS classes to apply to the icon */
2948
3442
  className?: string;
2949
3443
  }
@@ -2966,8 +3460,6 @@ interface WarnIconProps extends React.SVGProps<SVGSVGElement> {
2966
3460
  size?: number;
2967
3461
  /** Additional CSS classes to apply to the icon */
2968
3462
  className?: string;
2969
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
2970
- strokeWidth?: number;
2971
3463
  }
2972
3464
  /**
2973
3465
  * Warn icon component - displays a warn icon.
@@ -3331,8 +3823,6 @@ interface AlignCenterIconProps extends React.SVGProps<SVGSVGElement> {
3331
3823
  size?: number;
3332
3824
  /** Additional CSS classes to apply to the icon */
3333
3825
  className?: string;
3334
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3335
- strokeWidth?: number;
3336
3826
  }
3337
3827
  declare const AlignCenterIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AlignCenterIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3338
3828
 
@@ -3341,8 +3831,6 @@ interface AlignLeftIconProps extends React.SVGProps<SVGSVGElement> {
3341
3831
  size?: number;
3342
3832
  /** Additional CSS classes to apply to the icon */
3343
3833
  className?: string;
3344
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3345
- strokeWidth?: number;
3346
3834
  }
3347
3835
  declare const AlignLeftIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AlignLeftIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3348
3836
 
@@ -3351,8 +3839,6 @@ interface AlignRightIconProps extends React.SVGProps<SVGSVGElement> {
3351
3839
  size?: number;
3352
3840
  /** Additional CSS classes to apply to the icon */
3353
3841
  className?: string;
3354
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3355
- strokeWidth?: number;
3356
3842
  }
3357
3843
  declare const AlignRightIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AlignRightIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3358
3844
 
@@ -3361,8 +3847,6 @@ interface BoldIconProps extends React.SVGProps<SVGSVGElement> {
3361
3847
  size?: number;
3362
3848
  /** Additional CSS classes to apply to the icon */
3363
3849
  className?: string;
3364
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3365
- strokeWidth?: number;
3366
3850
  }
3367
3851
  /**
3368
3852
  * Bold icon component - displays a bold icon.
@@ -3399,8 +3883,6 @@ interface ItalicIconProps extends React.SVGProps<SVGSVGElement> {
3399
3883
  size?: number;
3400
3884
  /** Additional CSS classes to apply to the icon */
3401
3885
  className?: string;
3402
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3403
- strokeWidth?: number;
3404
3886
  }
3405
3887
  /**
3406
3888
  * Italic icon component - displays an italic icon.
@@ -3445,8 +3927,6 @@ interface UnderlineIconProps extends React.SVGProps<SVGSVGElement> {
3445
3927
  size?: number;
3446
3928
  /** Additional CSS classes to apply to the icon */
3447
3929
  className?: string;
3448
- /** Stroke width of the icon in pixels. Defaults to 1.5. */
3449
- strokeWidth?: number;
3450
3930
  }
3451
3931
  /**
3452
3932
  * Underline icon component - displays an underline icon.
@@ -3462,4 +3942,4 @@ interface UnderlineIconProps extends React.SVGProps<SVGSVGElement> {
3462
3942
  */
3463
3943
  declare const UnderlineIcon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<UnderlineIconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
3464
3944
 
3465
- export { AlignCenterIcon, type AlignCenterIconProps, AlignLeftIcon, type AlignLeftIconProps, AlignRightIcon, type AlignRightIconProps, AppLogo, AuthPrompt, type AuthPromptProps, AvatarPlaceholder, type AvatarPlaceholderCategory, type AvatarPlaceholderProps, type AvatarPlaceholderVariant, BackToTop, type BackToTopProps, BoldIcon, type BoldIconProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, type CalendarIconProps, CampaignLogo, CaptureIcon, type CaptureIconProps, CelebrationModal, type CelebrationModalProps, CheckBox, CheckBoxGroup, type CheckBoxGroupOption, type CheckBoxGroupProps, type CheckBoxProps, CheckIcon, type CheckIconProps, CloseIcon, type CloseIconProps, CopyIcon, type CopyIconProps, Countdown, type CountdownProps, type CountdownSize, type CountdownTimeValues, type CountdownUnit, DateInput, type DateInputMode, type DateInputProps, DatePicker, type DatePickerMode, type DatePickerProps, type DefaultAssetCategory, type DefaultAssetComponent, type DefaultAssetProps, type DefaultAssetVariant, type DefaultAssets, DiscordIcon, type DiscordIconProps, Divider, type DividerProps, type DividerVariant, DropUpIcon, type DropUpIconProps, DropdownIcon, type DropdownIconProps, ErrorIcon, type ErrorIconProps, FacebookIcon, type FacebookIconProps, type FieldErrorLike, FileIcon, type FileIconProps, FileUpload, type FileUploadError, type FileUploadFile, FileUploadIcon, type FileUploadIconProps, type FileUploadIconType, type FileUploadProps, type FileUploadSize, type FileUploadVariant, Form, type FormErrorItem, FormErrorSummary, type FormErrorSummaryProps, FormField, type FormFieldProps, type FormProps, GmailIcon, type GmailIconProps, GridIcon, type GridIconProps, GroupAvatar, IconBigLogo, IconLogo, ImageIcon, type ImageIconProps, ImagePlaceholder, type ImageSourceMode, ImageUploadIcon, type ImageUploadIconProps, IndeterminateIcon, type IndeterminateIconProps, InfoIcon, type InfoIconProps, Input, type InputProps, type InputVariant, InsertImageIcon, type InsertImageIconProps, InsertVideoIcon, type InsertVideoIconProps, InstagramIcon, type InstagramIconProps, ItalicIcon, type ItalicIconProps, KakaoTalkIcon, type KakaoTalkIconProps, LineIcon, type LineIconProps, LinkIcon, type LinkIconProps, LinkedInIcon, type LinkedInIconProps, ListBulletIcon, type ListBulletIconProps, ListIcon, type ListIconProps, ListNumberIcon, type ListNumberIconProps, LoadingScreen, type LoadingScreenProps, Logo, type LogoAssetComponent, type LogoAssetProps, type LogoAssets, type LogoFormat, type LogoProps, type LogoVariant, MessengerIcon, type MessengerIconProps, MinusIcon, type MinusIconProps, MultipleSelectionButton, type MultipleSelectionButtonProps, MultipleSelectionIcon, type MultipleSelectionIconProps, Pagination, type PaginationProps, PlusIcon, type PlusIconProps, ProfileAvatar, QuantityInput, type QuantityInputProps, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, type RangeValue, RedditIcon, type RedditIconProps, RichTextEditor, type RichTextEditorProps, RichTextViewer, type RichTextViewerProps, ScalablyUIProvider, type ScalablyUIProviderProps, SearchIcon, type SearchIconProps, SearchInput, type SearchInputProps, type SearchInputVariant, Select, type SelectOption, type SelectProps, type SelectVariant, SettingsIcon, type SettingsIconProps, SignalIcon, type SignalIconProps, Skeleton, type SkeletonProps, type SkeletonSize, SkeletonText, type SkeletonTextProps, type SkeletonVariant, SlackIcon, type SlackIconProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, type StatusBadgeStatus, type StatusBadgeVariant, SuccessIcon, type SuccessIconProps, Switch, type SwitchProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TelegramIcon, type TelegramIconProps, TickIcon, type TickIconProps, TiktokIcon, type TiktokIconProps, TimePicker, type TimePickerProps, ToFirstIcon, type ToFirstIconProps, ToLastIcon, type ToLastIconProps, ToNextIcon, type ToNextIconProps, ToPreviousIcon, type ToPreviousIconProps, Toast, type ToastAction, ToastContainer, type ToastContainerProps, type ToastPosition, type ToastProps, type ToastStatus, Tooltip, type TooltipAlign, type TooltipProps, type TooltipSide, TwitchIcon, type TwitchIconProps, UnderlineIcon, type UnderlineIconProps, VideoIcon, type VideoIconProps, VideoUploadIcon, type VideoUploadIconProps, type ViewMode, ViewToggle, type ViewToggleProps, WarnIcon, type WarnIconProps, WelcomeBackground, type WelcomeBackgroundProps, WhatsAppIcon, type WhatsAppIconProps, XIcon, type XIconProps, YoutubeIcon, type YoutubeIconProps, clampDate, cn, daysGrid, debounce, defaultAssets, fieldErrorToProps, formatDateLocalized, logoAssets, monthsForLocale, scopeClass, throttle, toDateKey, weekdaysForLocale, welcomeAssets, zodErrorsToSummary };
3945
+ export { AlignCenterIcon, type AlignCenterIconProps, AlignLeftIcon, type AlignLeftIconProps, AlignRightIcon, type AlignRightIconProps, AppLogo, AuthPrompt, type AuthPromptProps, AvatarPlaceholder, type AvatarPlaceholderCategory, type AvatarPlaceholderProps, type AvatarPlaceholderVariant, BackToTop, type BackToTopProps, type BasicFileValidationError, BoldIcon, type BoldIconProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CalendarIcon, type CalendarIconProps, CampaignLogo, CaptureIcon, type CaptureIconProps, CelebrationModal, type CelebrationModalProps, CheckBox, CheckBoxGroup, type CheckBoxGroupOption, type CheckBoxGroupProps, type CheckBoxProps, CheckIcon, type CheckIconProps, CloseIcon, type CloseIconProps, CopyIcon, type CopyIconProps, Countdown, type CountdownProps, type CountdownSize, type CountdownTimeValues, type CountdownUnit, CropIcon, type CropIconProps, type CroppedImageResult, DateInput, type DateInputMode, type DateInputProps, DatePicker, type DatePickerMode, type DatePickerProps, type DefaultAssetCategory, type DefaultAssetComponent, type DefaultAssetProps, type DefaultAssetVariant, type DefaultAssets, DeleteIcon, type DeleteIconProps, DiscordIcon, type DiscordIconProps, Divider, type DividerProps, type DividerVariant, DropUpIcon, type DropUpIconProps, DropdownIcon, type DropdownIconProps, EditIcon, type EditIconProps, ErrorIcon, type ErrorIconProps, EyeIcon, type EyeIconProps, EyeSlashIcon, type EyeSlashIconProps, FacebookIcon, type FacebookIconProps, type FieldErrorLike, FileIcon, type FileIconProps, FileUpload, type FileUploadError, type FileUploadFile, FileUploadIcon, type FileUploadIconProps, type FileUploadIconType, type FileUploadProps, type FileUploadSize, type FileUploadVariant, Form, type FormErrorItem, FormErrorSummary, type FormErrorSummaryProps, FormField, type FormFieldProps, type FormProps, type GetCroppedImgOptions, GmailIcon, type GmailIconProps, GridIcon, type GridIconProps, GroupAvatar, IconBigLogo, IconLogo, ImageCrop, ImageCropModal, type ImageCropModalProps, type ImageCropProps, ImageIcon, type ImageIconProps, ImagePlaceholder, type ImageSourceMode, ImageUploadIcon, type ImageUploadIconProps, IndeterminateIcon, type IndeterminateIconProps, InfoIcon, type InfoIconProps, Input, type InputProps, type InputVariant, InsertImageIcon, type InsertImageIconProps, InsertVideoIcon, type InsertVideoIconProps, InstagramIcon, type InstagramIconProps, ItalicIcon, type ItalicIconProps, KakaoTalkIcon, type KakaoTalkIconProps, LineIcon, type LineIconProps, LinkIcon, type LinkIconProps, LinkedInIcon, type LinkedInIconProps, ListBulletIcon, type ListBulletIconProps, ListIcon, type ListIconProps, ListNumberIcon, type ListNumberIconProps, LoadingScreen, type LoadingScreenProps, LoadingSpinner, type LoadingSpinnerProps, Logo, type LogoAssetComponent, type LogoAssetProps, type LogoAssets, type LogoFormat, type LogoProps, type LogoVariant, MessengerIcon, type MessengerIconProps, MinusIcon, type MinusIconProps, MultipleSelectionButton, type MultipleSelectionButtonProps, MultipleSelectionIcon, type MultipleSelectionIconProps, Pagination, type PaginationProps, PlusIcon, type PlusIconProps, ProfileAvatar, QuantityInput, type QuantityInputProps, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, type RangeValue, RedditIcon, type RedditIconProps, ResetIcon, type ResetIconProps, RichTextEditor, type RichTextEditorProps, RichTextViewer, type RichTextViewerProps, RotateLeftIcon, type RotateLeftIconProps, RotateRightIcon, type RotateRightIconProps, ScalablyUIProvider, type ScalablyUIProviderProps, SearchIcon, type SearchIconProps, SearchInput, type SearchInputProps, type SearchInputVariant, Select, type SelectOption, type SelectProps, type SelectVariant, SettingsIcon, type SettingsIconProps, SignalIcon, type SignalIconProps, Skeleton, type SkeletonProps, type SkeletonSize, SkeletonText, type SkeletonTextProps, type SkeletonVariant, SlackIcon, type SlackIconProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, type StatusBadgeStatus, type StatusBadgeVariant, SuccessIcon, type SuccessIconProps, Switch, type SwitchProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TelegramIcon, type TelegramIconProps, TickIcon, type TickIconProps, TiktokIcon, type TiktokIconProps, TimePicker, type TimePickerProps, ToFirstIcon, type ToFirstIconProps, ToLastIcon, type ToLastIconProps, ToNextIcon, type ToNextIconProps, ToPreviousIcon, type ToPreviousIconProps, Toast, type ToastAction, ToastContainer, type ToastContainerProps, type ToastPosition, type ToastProps, type ToastStatus, Tooltip, type TooltipAlign, type TooltipProps, type TooltipSide, TranslateIcon, type TranslateIconProps, TwitchIcon, type TwitchIconProps, UnderlineIcon, type UnderlineIconProps, VideoIcon, type VideoIconProps, VideoUploadIcon, type VideoUploadIconProps, type ViewMode, ViewToggle, type ViewToggleProps, WarnIcon, type WarnIconProps, WelcomeBackground, type WelcomeBackgroundProps, WhatsAppIcon, type WhatsAppIconProps, XIcon, type XIconProps, YoutubeIcon, type YoutubeIconProps, clampDate, cn, daysGrid, debounce, defaultAssets, extensionToMimeType, fieldErrorToProps, formatAcceptedFileTypes, formatDateLocalized, getCroppedImg, logoAssets, mimeTypeToDisplayName, monthsForLocale, normalizeAcceptedFileTypes, scopeClass, throttle, toDateKey, validateFileTypeAndSize, weekdaysForLocale, welcomeAssets, zodErrorsToSummary };