@djangocfg/layouts 2.1.516 → 2.1.519

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@djangocfg/layouts",
3
- "version": "2.1.516",
3
+ "version": "2.1.519",
4
4
  "description": "Simple, straightforward layout components for Next.js - import and use with props",
5
5
  "keywords": [
6
6
  "layouts",
@@ -89,12 +89,12 @@
89
89
  "check": "tsc --noEmit"
90
90
  },
91
91
  "peerDependencies": {
92
- "@djangocfg/analytics": "^2.1.516",
93
- "@djangocfg/api": "^2.1.516",
94
- "@djangocfg/centrifugo": "^2.1.516",
95
- "@djangocfg/devtools": "^2.1.516",
96
- "@djangocfg/i18n": "^2.1.516",
97
- "@djangocfg/ui-core": "^2.1.516",
92
+ "@djangocfg/analytics": "^2.1.519",
93
+ "@djangocfg/api": "^2.1.519",
94
+ "@djangocfg/centrifugo": "^2.1.519",
95
+ "@djangocfg/devtools": "^2.1.519",
96
+ "@djangocfg/i18n": "^2.1.519",
97
+ "@djangocfg/ui-core": "^2.1.519",
98
98
  "@hookform/resolvers": "^5.2.2",
99
99
  "consola": "^3.4.2",
100
100
  "lucide-react": "^0.545.0",
@@ -124,14 +124,14 @@
124
124
  "uuid": "^11.1.1"
125
125
  },
126
126
  "devDependencies": {
127
- "@djangocfg/analytics": "^2.1.516",
128
- "@djangocfg/api": "^2.1.516",
129
- "@djangocfg/centrifugo": "^2.1.516",
130
- "@djangocfg/devtools": "^2.1.516",
131
- "@djangocfg/i18n": "^2.1.516",
132
- "@djangocfg/typescript-config": "^2.1.516",
133
- "@djangocfg/ui-core": "^2.1.516",
134
- "@djangocfg/ui-tools": "^2.1.516",
127
+ "@djangocfg/analytics": "^2.1.519",
128
+ "@djangocfg/api": "^2.1.519",
129
+ "@djangocfg/centrifugo": "^2.1.519",
130
+ "@djangocfg/devtools": "^2.1.519",
131
+ "@djangocfg/i18n": "^2.1.519",
132
+ "@djangocfg/typescript-config": "^2.1.519",
133
+ "@djangocfg/ui-core": "^2.1.519",
134
+ "@djangocfg/ui-tools": "^2.1.519",
135
135
  "@types/node": "^25.9.5",
136
136
  "@types/react": "19.2.15",
137
137
  "@types/react-dom": "19.2.3",
@@ -112,10 +112,13 @@ export function FloatingNavbar({ config }: FloatingNavbarProps) {
112
112
  controls={config.controls}
113
113
  outerClassName={outerClassName}
114
114
  shapeClassName={shapeClassName}
115
- shapeForState={({ scrolled, transparent }) =>
115
+ shapeForState={({ scrolled, transparent, menuOpen }) =>
116
116
  cn(
117
117
  transparent && 'transition-[background-color,backdrop-filter] duration-200 ease-out',
118
- !transparent || scrolled
118
+ // Opaque unless we're a transparent bar sitting at the top with the
119
+ // mobile drawer closed. `menuOpen` forces the surface back so an
120
+ // open drawer never leaves the bar see-through over page content.
121
+ !transparent || scrolled || menuOpen
119
122
  ? 'bg-background/72 backdrop-blur-[10px] dark:bg-card/80'
120
123
  : 'bg-transparent backdrop-blur-0 dark:bg-transparent',
121
124
  )
@@ -109,10 +109,13 @@ export function FlushNavbar({ config }: FlushNavbarProps) {
109
109
  controls={config.controls}
110
110
  outerClassName={outerClassName}
111
111
  shapeClassName={shapeClassName}
112
- shapeForState={({ scrolled, transparent }) =>
112
+ shapeForState={({ scrolled, transparent, menuOpen }) =>
113
113
  cn(
114
114
  transparent && 'transition-[background-color,backdrop-filter] duration-200 ease-out',
115
- !transparent || scrolled
115
+ // Opaque unless we're a transparent bar sitting at the top with the
116
+ // mobile drawer closed. `menuOpen` forces the surface back so an
117
+ // open drawer never leaves the bar see-through over page content.
118
+ !transparent || scrolled || menuOpen
116
119
  ? 'bg-background/72 backdrop-blur-[10px] dark:bg-card/80'
117
120
  : 'bg-transparent backdrop-blur-0 dark:bg-transparent',
118
121
  )
@@ -162,10 +162,13 @@ export function MinimalNavbar({ config }: MinimalNavbarProps) {
162
162
  outerClassName={outerClassName}
163
163
  shapeClassName={shapeClassName}
164
164
  innerPadding={containerClassName}
165
- shapeForState={({ scrolled }) =>
165
+ shapeForState={({ scrolled, menuOpen }) =>
166
166
  cn(
167
167
  'transition-[background-color,backdrop-filter] duration-200 ease-out',
168
- transparent && !scrolled
168
+ // Transparent only at the top with the drawer closed. `menuOpen`
169
+ // forces the surface back so an open mobile drawer never leaves the
170
+ // bar see-through over page content.
171
+ transparent && !scrolled && !menuOpen
169
172
  ? 'bg-transparent backdrop-blur-0'
170
173
  : 'bg-background/72 backdrop-blur-[10px] dark:bg-card/80',
171
174
  )
@@ -123,6 +123,13 @@ interface ShapeInputs {
123
123
  scrolled: boolean;
124
124
  /** Matches `transparent` flag at the source. */
125
125
  transparent: boolean;
126
+ /**
127
+ * true while the mobile drawer is open. A `transparent` bar MUST go opaque
128
+ * here regardless of scroll position: an open drawer means the brand + close
129
+ * button sit over page content, and a see-through bar leaves them floating on
130
+ * whatever is scrolled behind — the "navbar lost its background" bug.
131
+ */
132
+ menuOpen: boolean;
126
133
  }
127
134
 
128
135
  export interface NavbarShellProps {
@@ -302,7 +309,7 @@ function NavbarShellRaw(props: NavbarShellProps) {
302
309
  hideNavOnScroll && hidden && !mobileMenuOpen && '-translate-y-full',
303
310
  );
304
311
 
305
- const surfaceCls = shapeForState?.({ scrolled, transparent });
312
+ const surfaceCls = shapeForState?.({ scrolled, transparent, menuOpen: mobileMenuOpen });
306
313
 
307
314
  const brandNode = (
308
315
  <div className="min-w-0 shrink-0 flex items-center">