@orsetra/shared-ui 1.0.45 → 1.0.47

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.
@@ -40,36 +40,43 @@ export function MainSidebar({
40
40
  const handleMenuClick = (menuId: string) => {
41
41
  onMenuSelect(menuId)
42
42
 
43
- // En mode minimized, ne pas ouvrir le sidebar secondaire
44
43
  if (!isMinimized && onSecondarySidebarOpen) {
45
44
  onSecondarySidebarOpen()
46
45
  }
47
46
 
48
- // Rediriger vers le premier sous-menu ou vers l'app directement
49
47
  const subMenus = sidebarMenus[menuId]
50
48
  if (subMenus && subMenus.length > 0) {
51
- console.log("subMenus:", subMenus[0].href)
52
- router.push(subMenus[0].href)
53
-
49
+ const targetUrl = subMenus[0].href
50
+ if (targetUrl.startsWith('http://') || targetUrl.startsWith('https://')) {
51
+ window.location.href = targetUrl
52
+ } else {
53
+ router.push(targetUrl)
54
+ }
54
55
  } else {
55
- // Fallback: naviguer vers /{menuId} (ex: /assets-manager)
56
- console.log("main_base_url:", `${main_base_url}/${menuId}`)
57
- router.push(`${main_base_url}/${menuId}`)
56
+ const targetUrl = `${main_base_url}/${menuId}`
57
+ if (targetUrl.startsWith('http://') || targetUrl.startsWith('https://')) {
58
+ window.location.href = targetUrl
59
+ } else {
60
+ router.push(targetUrl)
61
+ }
58
62
  }
59
63
 
60
64
  if (!isMinimized) {
61
- onToggle() // Fermer le menu principal après sélection (seulement en mode expanded)
65
+ onToggle()
62
66
  }
63
67
  }
64
68
 
65
69
  const handleSubMenuClick = (href: string) => {
66
- router.push(href)
70
+ if (href.startsWith('http://') || href.startsWith('https://')) {
71
+ window.location.href = href
72
+ } else {
73
+ router.push(href)
74
+ }
67
75
  setHoveredMenu(null)
68
76
  }
69
77
 
70
78
  return (
71
79
  <>
72
- {/* Overlay - seulement en mode expanded */}
73
80
  {isOpen && !isMinimized && (
74
81
  <div
75
82
  className="fixed inset-0 bg-black/50 z-40"
@@ -77,7 +84,6 @@ export function MainSidebar({
77
84
  />
78
85
  )}
79
86
 
80
- {/* Main Sidebar */}
81
87
  <div className={cn(
82
88
  "fixed left-0 top-0 h-full bg-white border-r border-ui-border z-50 transform transition-all duration-300 ease-in-out",
83
89
  isMinimized ? "w-16" : "w-64 shadow-xl",
@@ -85,7 +91,6 @@ export function MainSidebar({
85
91
  ? "translate-x-0"
86
92
  : (isOpen ? "translate-x-0" : "-translate-x-full")
87
93
  )}>
88
- {/* Header avec logo Orchestra */}
89
94
  <div className={cn(
90
95
  "flex items-center h-16 border-b border-ui-border bg-white",
91
96
  isMinimized ? "justify-center px-2" : "justify-between px-4"
@@ -105,7 +110,6 @@ export function MainSidebar({
105
110
  )}
106
111
  </div>
107
112
 
108
- {/* Menu Items */}
109
113
  <div className={cn(
110
114
  "overflow-y-auto h-full",
111
115
  isMinimized ? "p-2" : "p-3"
@@ -142,7 +146,6 @@ export function MainSidebar({
142
146
  {!isMinimized && <span className="text-base">{item.label}</span>}
143
147
  </button>
144
148
 
145
- {/* Submenu au survol en mode minimized */}
146
149
  {isMinimized && hoveredMenu === item.id && sidebarMenus[item.id] && sidebarMenus[item.id].length > 0 && (
147
150
  <div className="absolute left-full top-0 ml-2 bg-white border border-ui-border rounded-lg shadow-xl z-50 min-w-[200px] py-2">
148
151
  <div className="px-4 py-2 border-b border-ui-border">
@@ -26,6 +26,7 @@ import {
26
26
  Menu,
27
27
  Building2,
28
28
  User,
29
+ ChevronUp,
29
30
  } from "lucide-react"
30
31
  import { Logo } from "../../ui/logo"
31
32
  import { menuLabels, type SidebarMenus, type SubMenuItem } from "./data"
@@ -263,7 +264,7 @@ function Sidebar({ currentMenu, onMainMenuToggle, sidebarMenus = {}, main_base_u
263
264
  <div className="relative border-t border-ui-border px-3 py-3" ref={settingsRef}>
264
265
  {/* Dropdown vers le haut */}
265
266
  {settingsOpen && (
266
- <div className="absolute bottom-full left-2 right-2 mb-1 bg-white border border-ui-border rounded-lg shadow-lg z-50">
267
+ <div className="absolute bottom-full left-2 right-2 mb-1 bg-white border border-ui-border rounded-none shadow-lg z-50">
267
268
  <div className="py-1">
268
269
  <Link
269
270
  href={`${main_base_url}/organization`}
@@ -287,14 +288,17 @@ function Sidebar({ currentMenu, onMainMenuToggle, sidebarMenus = {}, main_base_u
287
288
  <button
288
289
  onClick={() => setSettingsOpen(!settingsOpen)}
289
290
  className={cn(
290
- "flex items-center w-full px-3 py-2 text-sm rounded-md gap-x-3 transition-colors",
291
+ "flex items-center justify-between w-full px-3 py-2 text-sm rounded-none gap-x-3 transition-colors",
291
292
  settingsOpen
292
293
  ? "bg-interactive/10 text-interactive font-medium"
293
294
  : "text-text-secondary hover:bg-ui-background hover:text-text-primary"
294
295
  )}
295
296
  >
296
- <Settings className="h-4 w-4" />
297
- {state === "expanded" && "Paramètres"}
297
+ <span className="flex items-center gap-x-3">
298
+ <Settings className="h-4 w-4" />
299
+ {state === "expanded" && "Paramètres"}
300
+ </span>
301
+ {state === "expanded" && <ChevronUp className={cn("h-4 w-4 transition-transform", settingsOpen ? "rotate-0" : "rotate-180")} />}
298
302
  </button>
299
303
  </div>
300
304
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orsetra/shared-ui",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
4
4
  "description": "Shared UI components for Orsetra platform",
5
5
  "main": "./index.ts",
6
6
  "types": "./index.ts",
@@ -93,4 +93,4 @@
93
93
  "next": "^16.0.7",
94
94
  "typescript": "^5"
95
95
  }
96
- }
96
+ }