noorui-rtl 0.3.8 → 0.3.10

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,41 @@ 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
+ ## [0.3.9] - 2025-11-22
9
+
10
+ ### Added
11
+ - **DashboardShell**: New `headerActions` prop to add custom actions (like theme/language switchers) to the header before notifications and user menu.
12
+
13
+ ---
14
+
15
+ ## [0.3.8] - 2025-11-22
16
+
17
+ ### Fixed
18
+ - **DashboardShell**: Fixed accessibility warning by adding visually hidden `SheetTitle` to mobile sidebar. This resolves the console warning about `DialogContent requires a DialogTitle`.
19
+ - **DashboardShell**: Fixed mobile sidebar RTL positioning. Changed from `side={direction === 'rtl' ? 'end' : 'start'}` to `side="start"` since CSS logical properties handle RTL automatically. The sidebar now correctly appears on the right side for RTL locales.
20
+
21
+ ---
22
+
23
+ ## [0.3.7] - 2025-11-21
24
+
25
+ ### Added
26
+ - Proper build process for npm package with tsup
27
+ - CSS output with Tailwind compilation
28
+
29
+ ### Changed
30
+ - Updated exports for proper module resolution
31
+ - Added .js extensions for ESM compatibility
32
+
33
+ ---
34
+
35
+ ## [0.3.0] - 2025-11-21
36
+
37
+ ### Added
38
+ - Complete restructuring of package build process
39
+ - Better TypeScript support and type exports
40
+
41
+ ---
42
+
8
43
  ## [0.2.1] - 2025-11-20
9
44
 
10
45
  ### Changed
package/dist/index.d.mts CHANGED
@@ -39,6 +39,11 @@ declare function DirectionProvider({ children }: {
39
39
  children: React.ReactNode;
40
40
  }): React.JSX.Element;
41
41
  declare function useDirection(): DirectionContextType;
42
+ /**
43
+ * Safe version of useDirection that doesn't throw if no provider is available.
44
+ * Falls back to detecting direction from DOM or defaults to LTR.
45
+ */
46
+ declare function useDirectionSafe(): DirectionContextType;
42
47
 
43
48
  declare function ClientProviders({ children }: {
44
49
  children: React.ReactNode;
@@ -447,13 +452,17 @@ interface DashboardShellProps {
447
452
  logoHref?: string;
448
453
  sidebarWidth?: string;
449
454
  className?: string;
455
+ /**
456
+ * Custom actions to display in the header (before notifications and user menu)
457
+ */
458
+ headerActions?: React.ReactNode;
450
459
  /**
451
460
  * Use relative positioning instead of fixed (useful for embedded examples)
452
461
  * @default false
453
462
  */
454
463
  relative?: boolean;
455
464
  }
456
- declare function DashboardShell({ children, navItems, user, notifications, onProfileClick, onSettingsClick, onBillingClick, onTeamClick, onSupportClick, onLogout, onNotificationClick, onMarkAsRead, onMarkAllAsRead, onClearAll, onRemove, logo, logoHref, sidebarWidth, className, relative, }: DashboardShellProps): React.JSX.Element;
465
+ declare function DashboardShell({ children, navItems, user, notifications, onProfileClick, onSettingsClick, onBillingClick, onTeamClick, onSupportClick, onLogout, onNotificationClick, onMarkAsRead, onMarkAllAsRead, onClearAll, onRemove, logo, logoHref, sidebarWidth, className, headerActions, relative, }: DashboardShellProps): React.JSX.Element;
457
466
 
458
467
  type SortDirection = 'asc' | 'desc' | null;
459
468
  interface ColumnDef<T> {
@@ -1517,4 +1526,4 @@ declare const ZakatCalculator: React.ForwardRefExoticComponent<ZakatCalculatorPr
1517
1526
  */
1518
1527
  declare function cn(...inputs: ClassValue[]): string;
1519
1528
 
1520
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, ArabicNumber, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatMessage, Checkbox, ClientProviders, Collapsible, CollapsibleContent, CollapsibleTrigger, type ColumnDef, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationHistory, DashboardShell, DataTable, type DataTableProps, DatePicker, DesignSystemProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FeatureCard, FileUpload, Form, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FormProps, HijriDate, Input, type InputProps, Label, ListingCard, LoadingSpinner, MessageActions, ModelSelector, NotificationCenter, NumberInput, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, ParameterSlider, Popover, PopoverContent, PopoverTrigger, PrayerTimes, Progress, PromptInput, RadioGroup, RadioGroupItem, RichTextEditor, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, type SortDirection, type Step, Stepper, type StepperProps, StreamingText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThinkingIndicator, TimePicker, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, TokenCounter, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, WorkflowCanvas, WorkflowNode, ZakatCalculator, badgeVariants, buttonVariants, cn, useDesignSystem, useDirection, workflowNodeTypes };
1529
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, ArabicNumber, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatMessage, Checkbox, ClientProviders, Collapsible, CollapsibleContent, CollapsibleTrigger, type ColumnDef, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationHistory, DashboardShell, DataTable, type DataTableProps, DatePicker, DesignSystemProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FeatureCard, FileUpload, Form, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FormProps, HijriDate, Input, type InputProps, Label, ListingCard, LoadingSpinner, MessageActions, ModelSelector, NotificationCenter, NumberInput, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, ParameterSlider, Popover, PopoverContent, PopoverTrigger, PrayerTimes, Progress, PromptInput, RadioGroup, RadioGroupItem, RichTextEditor, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, type SortDirection, type Step, Stepper, type StepperProps, StreamingText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThinkingIndicator, TimePicker, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, TokenCounter, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, WorkflowCanvas, WorkflowNode, ZakatCalculator, badgeVariants, buttonVariants, cn, useDesignSystem, useDirection, useDirectionSafe, workflowNodeTypes };
package/dist/index.d.ts CHANGED
@@ -39,6 +39,11 @@ declare function DirectionProvider({ children }: {
39
39
  children: React.ReactNode;
40
40
  }): React.JSX.Element;
41
41
  declare function useDirection(): DirectionContextType;
42
+ /**
43
+ * Safe version of useDirection that doesn't throw if no provider is available.
44
+ * Falls back to detecting direction from DOM or defaults to LTR.
45
+ */
46
+ declare function useDirectionSafe(): DirectionContextType;
42
47
 
43
48
  declare function ClientProviders({ children }: {
44
49
  children: React.ReactNode;
@@ -447,13 +452,17 @@ interface DashboardShellProps {
447
452
  logoHref?: string;
448
453
  sidebarWidth?: string;
449
454
  className?: string;
455
+ /**
456
+ * Custom actions to display in the header (before notifications and user menu)
457
+ */
458
+ headerActions?: React.ReactNode;
450
459
  /**
451
460
  * Use relative positioning instead of fixed (useful for embedded examples)
452
461
  * @default false
453
462
  */
454
463
  relative?: boolean;
455
464
  }
456
- declare function DashboardShell({ children, navItems, user, notifications, onProfileClick, onSettingsClick, onBillingClick, onTeamClick, onSupportClick, onLogout, onNotificationClick, onMarkAsRead, onMarkAllAsRead, onClearAll, onRemove, logo, logoHref, sidebarWidth, className, relative, }: DashboardShellProps): React.JSX.Element;
465
+ declare function DashboardShell({ children, navItems, user, notifications, onProfileClick, onSettingsClick, onBillingClick, onTeamClick, onSupportClick, onLogout, onNotificationClick, onMarkAsRead, onMarkAllAsRead, onClearAll, onRemove, logo, logoHref, sidebarWidth, className, headerActions, relative, }: DashboardShellProps): React.JSX.Element;
457
466
 
458
467
  type SortDirection = 'asc' | 'desc' | null;
459
468
  interface ColumnDef<T> {
@@ -1517,4 +1526,4 @@ declare const ZakatCalculator: React.ForwardRefExoticComponent<ZakatCalculatorPr
1517
1526
  */
1518
1527
  declare function cn(...inputs: ClassValue[]): string;
1519
1528
 
1520
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, ArabicNumber, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatMessage, Checkbox, ClientProviders, Collapsible, CollapsibleContent, CollapsibleTrigger, type ColumnDef, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationHistory, DashboardShell, DataTable, type DataTableProps, DatePicker, DesignSystemProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FeatureCard, FileUpload, Form, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FormProps, HijriDate, Input, type InputProps, Label, ListingCard, LoadingSpinner, MessageActions, ModelSelector, NotificationCenter, NumberInput, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, ParameterSlider, Popover, PopoverContent, PopoverTrigger, PrayerTimes, Progress, PromptInput, RadioGroup, RadioGroupItem, RichTextEditor, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, type SortDirection, type Step, Stepper, type StepperProps, StreamingText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThinkingIndicator, TimePicker, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, TokenCounter, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, WorkflowCanvas, WorkflowNode, ZakatCalculator, badgeVariants, buttonVariants, cn, useDesignSystem, useDirection, workflowNodeTypes };
1529
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, ArabicNumber, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatMessage, Checkbox, ClientProviders, Collapsible, CollapsibleContent, CollapsibleTrigger, type ColumnDef, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationHistory, DashboardShell, DataTable, type DataTableProps, DatePicker, DesignSystemProvider, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FeatureCard, FileUpload, Form, FormDescription, FormField, FormItem, FormLabel, FormMessage, type FormProps, HijriDate, Input, type InputProps, Label, ListingCard, LoadingSpinner, MessageActions, ModelSelector, NotificationCenter, NumberInput, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, ParameterSlider, Popover, PopoverContent, PopoverTrigger, PrayerTimes, Progress, PromptInput, RadioGroup, RadioGroupItem, RichTextEditor, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, type SortDirection, type Step, Stepper, type StepperProps, StreamingText, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThinkingIndicator, TimePicker, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, TokenCounter, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, WorkflowCanvas, WorkflowNode, ZakatCalculator, badgeVariants, buttonVariants, cn, useDesignSystem, useDirection, useDirectionSafe, workflowNodeTypes };
package/dist/index.js CHANGED
@@ -129,6 +129,33 @@ function useDirection() {
129
129
  }
130
130
  return context;
131
131
  }
132
+ function useDirectionSafe() {
133
+ const context = React68__namespace.useContext(DirectionContext);
134
+ const [fallback, setFallback] = React68__namespace.useState({
135
+ direction: "ltr",
136
+ locale: "en",
137
+ setDirection: () => {
138
+ },
139
+ setLocale: () => {
140
+ }
141
+ });
142
+ React68__namespace.useEffect(() => {
143
+ if (!context) {
144
+ const dirEl = document.querySelector("[dir]");
145
+ const dir = dirEl?.getAttribute("dir") || "ltr";
146
+ const locale = dir === "rtl" ? "ar" : "en";
147
+ setFallback({
148
+ direction: dir,
149
+ locale,
150
+ setDirection: () => {
151
+ },
152
+ setLocale: () => {
153
+ }
154
+ });
155
+ }
156
+ }, [context]);
157
+ return context || fallback;
158
+ }
132
159
  var DesignSystemContext = React68__namespace.createContext(void 0);
133
160
  function DesignSystemProviderInner({ children, defaultTheme = "minimal" }) {
134
161
  const searchParams = navigation.useSearchParams();
@@ -16231,10 +16258,11 @@ function DashboardShell({
16231
16258
  logoHref = "/",
16232
16259
  sidebarWidth = "16rem",
16233
16260
  className,
16261
+ headerActions,
16234
16262
  relative = false
16235
16263
  }) {
16236
16264
  const [sidebarOpen, setSidebarOpen] = React68__namespace.useState(false);
16237
- const { locale, direction } = useDirection();
16265
+ const { locale, direction } = useDirectionSafe();
16238
16266
  const t = content[locale];
16239
16267
  return /* @__PURE__ */ React68__namespace.createElement("div", { className: cn("min-h-screen bg-background", relative ? "flex" : "", className) }, /* @__PURE__ */ React68__namespace.createElement(
16240
16268
  "aside",
@@ -16275,7 +16303,7 @@ function DashboardShell({
16275
16303
  /* @__PURE__ */ React68__namespace.createElement("header", { className: cn(
16276
16304
  "z-20 flex h-16 items-center gap-4 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 px-6",
16277
16305
  relative ? "relative" : "sticky top-0"
16278
- ) }, /* @__PURE__ */ React68__namespace.createElement("div", { className: "flex flex-1 items-center gap-4 lg:gap-6" }, /* @__PURE__ */ React68__namespace.createElement("div", { className: "w-10 lg:hidden" })), /* @__PURE__ */ React68__namespace.createElement("div", { className: "flex items-center gap-2" }, notifications && notifications.length >= 0 && /* @__PURE__ */ React68__namespace.createElement(
16306
+ ) }, /* @__PURE__ */ React68__namespace.createElement("div", { className: "flex flex-1 items-center gap-4 lg:gap-6" }, /* @__PURE__ */ React68__namespace.createElement("div", { className: "w-10 lg:hidden" })), /* @__PURE__ */ React68__namespace.createElement("div", { className: "flex items-center gap-2" }, headerActions, notifications && notifications.length >= 0 && /* @__PURE__ */ React68__namespace.createElement(
16279
16307
  NotificationCenter,
16280
16308
  {
16281
16309
  notifications,
@@ -20114,6 +20142,7 @@ exports.buttonVariants = buttonVariants;
20114
20142
  exports.cn = cn;
20115
20143
  exports.useDesignSystem = useDesignSystem;
20116
20144
  exports.useDirection = useDirection;
20145
+ exports.useDirectionSafe = useDirectionSafe;
20117
20146
  exports.workflowNodeTypes = workflowNodeTypes;
20118
20147
  //# sourceMappingURL=index.js.map
20119
20148
  //# sourceMappingURL=index.js.map