noorui-rtl 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,84 @@ All notable changes to Noor UI will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.4.4] - 2025-12-06
11
+
12
+ ### Fixed
13
+ - **Popover Component**: Fixed RTL positioning issues by adding automatic direction detection (similar to DropdownMenu)
14
+ - Added MutationObserver to detect document direction changes
15
+ - Popover Root now automatically passes `dir` prop to Radix UI for proper RTL support
16
+ - Fixes notification popups, time pickers, and all popover-based components appearing on wrong side in RTL mode
17
+ - **NotificationCenter**: Fixed RTL positioning - popup now appears on correct side in RTL mode
18
+ - Updated align logic to `direction === 'rtl' ? 'start' : 'end'` for consistent right-side positioning
19
+ - **TimePicker & TimeRangePicker**: Fixed RTL positioning - popups now appear on correct side in RTL mode
20
+ - Updated align logic from `isRTL ? 'end' : 'start'` to `isRTL ? 'start' : 'end'`
21
+ - **Documentation Pages**: Fixed inconsistent section title spacing across component pages
22
+ - **number-input**: Fixed Use Cases, API Reference, and Features sections
23
+ - **date-picker**: Fixed Use Cases, Type Definition, API Reference (2x), and Features sections
24
+ - **time-picker**: Fixed Use Cases, Type Definition, API Reference (2x), and Features sections
25
+ - All sections now use standard pattern: `<section className="mb-16">` with `<h2 className="text-2xl font-bold tracking-tight mb-6">`
26
+
27
+ ### Changed
28
+ - **Popover Component**: Improved architecture to match DropdownMenu pattern for better RTL support
29
+ - **Component Documentation**: Standardized section spacing for consistent visual hierarchy
30
+
31
+ ### Notes
32
+ This release focuses on fixing RTL positioning issues in portal-rendered components (Popover) and improving documentation consistency. All popover-based components (notifications, time pickers, etc.) now position correctly in RTL mode.
33
+
34
+ ## [0.4.3] - 2025-12-05
35
+
36
+ ### Fixed
37
+ - **Code Quality**: Resolved all React Hooks exhaustive-deps warnings (zero warnings achieved)
38
+ - **DataTable**: Wrapped `sampleUsers` in `useMemo` and added to dependency arrays in sorting, filtering, and pagination hooks
39
+ - **useRelativeTime Hook**: Wrapped `targetDate` in `useMemo` and `getRelativeTime` in `useCallback` with proper dependencies
40
+ - **Calendar**: Wrapped calendar days generation in `useMemo` with complete dependencies including `getHijriDate`
41
+ - **Translations**: Fixed missing i18n keys across 11+ experimental component pages
42
+ - Added `rtlDemo` object with `ltr` and `rtl` keys to common.ts (EN/AR)
43
+ - Added missing example keys: `fullFeatured`, `compactMode`, `withPresets`, `customPresets`, `withoutPresets`, `inContext`
44
+ - Fixed incorrect key references: `rtl` → `rtlSupport`, `interface` → `typeDefinitions`, `sizes` → `examples.sizes`, `inContext` → `examples.inContext`
45
+ - **NotificationCenter**: Fixed PropDefinition type error by changing `defaultValue` to `default` property
46
+ - **WorkflowCanvas & WorkflowNode**: Fixed missing imports for `useDirection` and `content` from i18n
47
+ - **ThinkingIndicator**: Fixed incorrect translation key references in examples section
48
+ - **ParameterSlider**: Fixed non-existent translation key reference
49
+
50
+ ### Added
51
+ - **Website**: Added "Starters" link to main navigation (both desktop and mobile)
52
+ - **Website**: Added i18n translations for "Starters" menu item (English: "Starters", Arabic: "نماذج البداية")
53
+ - **Website**: Added /starters page to sitemap.ts for SEO (priority: 0.8, weekly updates)
54
+ - **SEO**: Added 3 OG images (bilingual, Arabic, English) at 1200×630px for social sharing
55
+ - **SEO**: Updated root layout metadata with comprehensive OpenGraph and Twitter Card metadata
56
+ - **Documentation**: Added OG image to main README.md for visual impact on GitHub
57
+ - **Documentation**: Added OG image to npm package README (packages/noorui/README.md)
58
+ - **Documentation**: Updated /starters page with Kitab Blog Starter information
59
+ - **Documentation**: Added Kitab live demo link (kitab.noorui.com) and GitHub repository
60
+ - **Documentation**: Updated README.md to include Starters page in documentation links
61
+ - **Documentation**: Updated ROADMAP.md to highlight Kitab as completed deliverable
62
+ - **Documentation**: Updated starters/README.md with full Kitab feature list
63
+ - **Code Standards**: Added ESLint disable comments for intentional img usage (component library design decision)
64
+ - NotificationCenter: Avatar display using dynamic user-provided URLs
65
+ - ListingCard: Product image display
66
+ - FileUpload: Image preview using blob URLs from FileReader
67
+
68
+ ### Changed
69
+ - **Website**: Improved visibility of /starters page through navigation integration
70
+ - **Starters Page**: Replaced placeholder "Blog Dashboard" with production-ready "Kitab - Blog Starter"
71
+ - **Starters Page**: Updated GitHub button to link to https://github.com/topics/noor-ui for broader project discovery
72
+ - **Roadmap**: Updated current status to "READY FOR PUBLIC LAUNCH" with technical pre-launch checklist completed
73
+ - **Roadmap**: Added Kitab to recent wins and next actions focused on marketing launch
74
+ - **Website**: Updated all version references from v0.4.2 to v0.4.3
75
+ - Homepage (app/page.tsx)
76
+ - English home translations (lib/i18n/en/home.ts)
77
+ - Arabic home translations (lib/i18n/ar/home.ts)
78
+ - Launch plan documentation (LAUNCH_PLAN.md - 7 references)
79
+ - Roadmap documentation (ROADMAP.md - 4 references)
80
+ - **Build Process**: Achieved zero build warnings and zero compilation errors
81
+ - **Code Quality**: Improved React performance patterns with proper memoization and callback usage
82
+
83
+ ### Notes
84
+ This release focuses on code quality improvements and documentation completeness. All 74+ components maintain full RTL/LTR support with zero build warnings. The codebase is now optimized for production use with proper React performance patterns.
85
+
8
86
  ## [0.4.2] - 2025-11-29
9
87
 
10
88
  ### Added
package/CONTRIBUTING.md CHANGED
@@ -300,6 +300,7 @@ hooks/
300
300
 
301
301
  ## Questions?
302
302
 
303
+ - 💬 Discord: [Join our community](https://discord.gg/gvrqU2WG)
303
304
  - 💬 Open an issue for questions
304
305
  - 📧 Email: info@ositaka.com
305
306
  - 🐛 Report bugs via GitHub issues
package/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  [![npm version](https://badge.fury.io/js/noorui-rtl.svg)](https://www.npmjs.com/package/noorui-rtl)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
+ ![Noor UI - Beautiful RTL-first React components for bilingual applications](https://raw.githubusercontent.com/ositaka/noor-ui/main/public/noorui--og-image--bilingual.png)
9
+
8
10
  Beautiful RTL-first React components for bilingual applications. Built with Radix UI, Tailwind CSS, and full Arabic/English support.
9
11
 
10
12
  **[Documentation](https://noorui.com)** · **[Examples](https://noorui.com/examples)** · **[npm](https://www.npmjs.com/package/noorui-rtl)**
@@ -298,6 +300,7 @@ Full documentation, examples, and guides available at **[noorui.com](https://noo
298
300
  - [Components](https://noorui.com/components)
299
301
  - [RTL Guide](https://noorui.com/rtl-guide)
300
302
  - [Examples](https://noorui.com/examples)
303
+ - [Starters](https://noorui.com/starters)
301
304
  - [Design Tokens](https://noorui.com/tokens)
302
305
 
303
306
  ## 🤝 Contributing
@@ -318,6 +321,7 @@ Built with:
318
321
 
319
322
  ## 💬 Support
320
323
 
324
+ - 💬 Discord: [Join our community](https://discord.gg/gvrqU2WG)
321
325
  - 📧 Email: info@ositaka.com
322
326
  - 🐛 Issues: [GitHub Issues](https://github.com/ositaka/noor-ui/issues)
323
327
  - 💬 Discussions: [GitHub Discussions](https://github.com/ositaka/noor-ui/discussions)
package/dist/index.d.mts CHANGED
@@ -345,11 +345,11 @@ declare const CollapsibleContent: React$1.ForwardRefExoticComponent<CollapsibleP
345
345
 
346
346
  declare const Command: React$1.ForwardRefExoticComponent<Omit<{
347
347
  children?: React$1.ReactNode;
348
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
348
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
349
349
  ref?: React$1.Ref<HTMLDivElement>;
350
350
  } & {
351
351
  asChild?: boolean;
352
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
352
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
353
353
  label?: string;
354
354
  shouldFilter?: boolean;
355
355
  filter?: (value: string, search: string, keywords?: string[]) => number;
@@ -373,45 +373,45 @@ declare const CommandInput: React$1.ForwardRefExoticComponent<Omit<Omit<Pick<Pic
373
373
  } & React$1.RefAttributes<HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
374
374
  declare const CommandList: React$1.ForwardRefExoticComponent<Omit<{
375
375
  children?: React$1.ReactNode;
376
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
376
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
377
377
  ref?: React$1.Ref<HTMLDivElement>;
378
378
  } & {
379
379
  asChild?: boolean;
380
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
380
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
381
381
  label?: string;
382
382
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
383
383
  declare const CommandEmpty: React$1.ForwardRefExoticComponent<Omit<{
384
384
  children?: React$1.ReactNode;
385
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
385
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
386
386
  ref?: React$1.Ref<HTMLDivElement>;
387
387
  } & {
388
388
  asChild?: boolean;
389
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
389
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
390
390
  declare const CommandGroup: React$1.ForwardRefExoticComponent<Omit<{
391
391
  children?: React$1.ReactNode;
392
- } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
392
+ } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
393
393
  ref?: React$1.Ref<HTMLDivElement>;
394
394
  } & {
395
395
  asChild?: boolean;
396
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key">, "value" | "heading"> & {
396
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "value" | "heading"> & {
397
397
  heading?: React$1.ReactNode;
398
398
  value?: string;
399
399
  forceMount?: boolean;
400
400
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
401
- declare const CommandSeparator: React$1.ForwardRefExoticComponent<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
401
+ declare const CommandSeparator: React$1.ForwardRefExoticComponent<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
402
402
  ref?: React$1.Ref<HTMLDivElement>;
403
403
  } & {
404
404
  asChild?: boolean;
405
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
405
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
406
406
  alwaysRender?: boolean;
407
407
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
408
408
  declare const CommandItem: React$1.ForwardRefExoticComponent<Omit<{
409
409
  children?: React$1.ReactNode;
410
- } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
410
+ } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
411
411
  ref?: React$1.Ref<HTMLDivElement>;
412
412
  } & {
413
413
  asChild?: boolean;
414
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key">, "value" | "disabled" | "onSelect"> & {
414
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "value" | "disabled" | "onSelect"> & {
415
415
  disabled?: boolean;
416
416
  onSelect?: (value: string) => void;
417
417
  value?: string;
@@ -673,6 +673,9 @@ interface DataTableProps<T> {
673
673
  totalPages?: number;
674
674
  pageSize?: number;
675
675
  onPageChange?: (page: number) => void;
676
+ nextLabel?: string;
677
+ previousLabel?: string;
678
+ pageLabel?: string;
676
679
  mobileView?: 'table' | 'cards';
677
680
  /** Show sort buttons on mobile cards */
678
681
  mobileSorting?: boolean;
@@ -683,7 +686,7 @@ interface DataTableProps<T> {
683
686
  hoverable?: boolean;
684
687
  compact?: boolean;
685
688
  }
686
- declare function DataTable<T>({ data, columns, isLoading, sortBy: externalSortBy, sortDirection: externalSortDirection, onSort: externalOnSort, enableSorting, defaultSortBy, defaultSortDirection, searchable, searchPlaceholder, searchPlaceholderAr, searchValue, onSearchChange, pagination, currentPage, totalPages, pageSize, onPageChange, mobileView, mobileSorting, emptyMessage, emptyMessageAr, className, striped, hoverable, compact, }: DataTableProps<T>): React$1.JSX.Element;
689
+ declare function DataTable<T>({ data, columns, isLoading, sortBy: externalSortBy, sortDirection: externalSortDirection, onSort: externalOnSort, enableSorting, defaultSortBy, defaultSortDirection, searchable, searchPlaceholder, searchPlaceholderAr, searchValue, onSearchChange, pagination, currentPage, totalPages, pageSize, onPageChange, nextLabel, previousLabel, pageLabel, mobileView, mobileSorting, emptyMessage, emptyMessageAr, className, striped, hoverable, compact, }: DataTableProps<T>): React$1.JSX.Element;
687
690
 
688
691
  interface DatePickerProps {
689
692
  date?: Date;
package/dist/index.d.ts CHANGED
@@ -345,11 +345,11 @@ declare const CollapsibleContent: React$1.ForwardRefExoticComponent<CollapsibleP
345
345
 
346
346
  declare const Command: React$1.ForwardRefExoticComponent<Omit<{
347
347
  children?: React$1.ReactNode;
348
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
348
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
349
349
  ref?: React$1.Ref<HTMLDivElement>;
350
350
  } & {
351
351
  asChild?: boolean;
352
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
352
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
353
353
  label?: string;
354
354
  shouldFilter?: boolean;
355
355
  filter?: (value: string, search: string, keywords?: string[]) => number;
@@ -373,45 +373,45 @@ declare const CommandInput: React$1.ForwardRefExoticComponent<Omit<Omit<Pick<Pic
373
373
  } & React$1.RefAttributes<HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
374
374
  declare const CommandList: React$1.ForwardRefExoticComponent<Omit<{
375
375
  children?: React$1.ReactNode;
376
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
376
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
377
377
  ref?: React$1.Ref<HTMLDivElement>;
378
378
  } & {
379
379
  asChild?: boolean;
380
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
380
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
381
381
  label?: string;
382
382
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
383
383
  declare const CommandEmpty: React$1.ForwardRefExoticComponent<Omit<{
384
384
  children?: React$1.ReactNode;
385
- } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
385
+ } & Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
386
386
  ref?: React$1.Ref<HTMLDivElement>;
387
387
  } & {
388
388
  asChild?: boolean;
389
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
389
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
390
390
  declare const CommandGroup: React$1.ForwardRefExoticComponent<Omit<{
391
391
  children?: React$1.ReactNode;
392
- } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
392
+ } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
393
393
  ref?: React$1.Ref<HTMLDivElement>;
394
394
  } & {
395
395
  asChild?: boolean;
396
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key">, "value" | "heading"> & {
396
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "value" | "heading"> & {
397
397
  heading?: React$1.ReactNode;
398
398
  value?: string;
399
399
  forceMount?: boolean;
400
400
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
401
- declare const CommandSeparator: React$1.ForwardRefExoticComponent<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
401
+ declare const CommandSeparator: React$1.ForwardRefExoticComponent<Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
402
402
  ref?: React$1.Ref<HTMLDivElement>;
403
403
  } & {
404
404
  asChild?: boolean;
405
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
405
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
406
406
  alwaysRender?: boolean;
407
407
  } & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
408
408
  declare const CommandItem: React$1.ForwardRefExoticComponent<Omit<{
409
409
  children?: React$1.ReactNode;
410
- } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React$1.HTMLAttributes<HTMLDivElement> | "key"> & {
410
+ } & Omit<Pick<Pick<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React$1.HTMLAttributes<HTMLDivElement>> & {
411
411
  ref?: React$1.Ref<HTMLDivElement>;
412
412
  } & {
413
413
  asChild?: boolean;
414
- }, "asChild" | keyof React$1.HTMLAttributes<HTMLDivElement> | "key">, "value" | "disabled" | "onSelect"> & {
414
+ }, "asChild" | "key" | keyof React$1.HTMLAttributes<HTMLDivElement>>, "value" | "disabled" | "onSelect"> & {
415
415
  disabled?: boolean;
416
416
  onSelect?: (value: string) => void;
417
417
  value?: string;
@@ -673,6 +673,9 @@ interface DataTableProps<T> {
673
673
  totalPages?: number;
674
674
  pageSize?: number;
675
675
  onPageChange?: (page: number) => void;
676
+ nextLabel?: string;
677
+ previousLabel?: string;
678
+ pageLabel?: string;
676
679
  mobileView?: 'table' | 'cards';
677
680
  /** Show sort buttons on mobile cards */
678
681
  mobileSorting?: boolean;
@@ -683,7 +686,7 @@ interface DataTableProps<T> {
683
686
  hoverable?: boolean;
684
687
  compact?: boolean;
685
688
  }
686
- declare function DataTable<T>({ data, columns, isLoading, sortBy: externalSortBy, sortDirection: externalSortDirection, onSort: externalOnSort, enableSorting, defaultSortBy, defaultSortDirection, searchable, searchPlaceholder, searchPlaceholderAr, searchValue, onSearchChange, pagination, currentPage, totalPages, pageSize, onPageChange, mobileView, mobileSorting, emptyMessage, emptyMessageAr, className, striped, hoverable, compact, }: DataTableProps<T>): React$1.JSX.Element;
689
+ declare function DataTable<T>({ data, columns, isLoading, sortBy: externalSortBy, sortDirection: externalSortDirection, onSort: externalOnSort, enableSorting, defaultSortBy, defaultSortDirection, searchable, searchPlaceholder, searchPlaceholderAr, searchValue, onSearchChange, pagination, currentPage, totalPages, pageSize, onPageChange, nextLabel, previousLabel, pageLabel, mobileView, mobileSorting, emptyMessage, emptyMessageAr, className, striped, hoverable, compact, }: DataTableProps<T>): React$1.JSX.Element;
687
690
 
688
691
  interface DatePickerProps {
689
692
  date?: Date;