@djangocfg/layouts 2.1.393 → 2.1.395

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.393",
3
+ "version": "2.1.395",
4
4
  "description": "Simple, straightforward layout components for Next.js - import and use with props",
5
5
  "keywords": [
6
6
  "layouts",
@@ -84,13 +84,13 @@
84
84
  "check": "tsc --noEmit"
85
85
  },
86
86
  "peerDependencies": {
87
- "@djangocfg/api": "^2.1.393",
88
- "@djangocfg/centrifugo": "^2.1.393",
89
- "@djangocfg/debuger": "^2.1.393",
90
- "@djangocfg/i18n": "^2.1.393",
91
- "@djangocfg/monitor": "^2.1.393",
92
- "@djangocfg/ui-core": "^2.1.393",
93
- "@djangocfg/ui-nextjs": "^2.1.393",
87
+ "@djangocfg/api": "^2.1.395",
88
+ "@djangocfg/centrifugo": "^2.1.395",
89
+ "@djangocfg/debuger": "^2.1.395",
90
+ "@djangocfg/i18n": "^2.1.395",
91
+ "@djangocfg/monitor": "^2.1.395",
92
+ "@djangocfg/ui-core": "^2.1.395",
93
+ "@djangocfg/ui-nextjs": "^2.1.395",
94
94
  "@hookform/resolvers": "^5.2.2",
95
95
  "consola": "^3.4.2",
96
96
  "lucide-react": "^0.545.0",
@@ -121,15 +121,15 @@
121
121
  "uuid": "^11.1.0"
122
122
  },
123
123
  "devDependencies": {
124
- "@djangocfg/api": "^2.1.393",
125
- "@djangocfg/centrifugo": "^2.1.393",
126
- "@djangocfg/debuger": "^2.1.393",
127
- "@djangocfg/i18n": "^2.1.393",
128
- "@djangocfg/monitor": "^2.1.393",
129
- "@djangocfg/typescript-config": "^2.1.393",
130
- "@djangocfg/ui-core": "^2.1.393",
131
- "@djangocfg/ui-nextjs": "^2.1.393",
132
- "@djangocfg/ui-tools": "^2.1.393",
124
+ "@djangocfg/api": "^2.1.395",
125
+ "@djangocfg/centrifugo": "^2.1.395",
126
+ "@djangocfg/debuger": "^2.1.395",
127
+ "@djangocfg/i18n": "^2.1.395",
128
+ "@djangocfg/monitor": "^2.1.395",
129
+ "@djangocfg/typescript-config": "^2.1.395",
130
+ "@djangocfg/ui-core": "^2.1.395",
131
+ "@djangocfg/ui-nextjs": "^2.1.395",
132
+ "@djangocfg/ui-tools": "^2.1.395",
133
133
  "@types/node": "^24.7.2",
134
134
  "@types/react": "^19.1.0",
135
135
  "@types/react-dom": "^19.1.0",
@@ -31,8 +31,8 @@ export const defaultCenteredConfig: AuthCenteredConfig = {
31
31
  background: {
32
32
  enabled: false,
33
33
  imageUrl: BG_IMAGES[0].value,
34
- gradient: 'linear-gradient(135deg, hsl(var(--primary) / 0.08) 0%, hsl(var(--background)) 100%)',
35
- overlay: 'hsl(var(--background) / 0.6)',
34
+ gradient: 'linear-gradient(135deg, color-mix(in oklab, var(--primary) 8%, transparent) 0%, var(--background) 100%)',
35
+ overlay: 'color-mix(in oklab, var(--background) 60%, transparent)',
36
36
  blur: '8px',
37
37
  },
38
38
  form: {
@@ -48,7 +48,7 @@ export const defaultSplitConfig: AuthSplitConfig = {
48
48
  enabled: true,
49
49
  imageUrl: BG_IMAGES[0].value,
50
50
  gradient: '',
51
- overlay: 'hsl(var(--background) / 0.6)',
51
+ overlay: 'color-mix(in oklab, var(--background) 60%, transparent)',
52
52
  blur: '8px',
53
53
  },
54
54
  sidebar: {
@@ -48,7 +48,7 @@ export const authCenteredSchema: CustomJsonSchema7 = {
48
48
  overlay: {
49
49
  type: 'string',
50
50
  title: 'Overlay color',
51
- description: 'e.g. hsl(var(--background) / 0.6)',
51
+ description: 'e.g. color-mix(in oklab, var(--background) 60%, transparent)',
52
52
  },
53
53
  blur: {
54
54
  type: 'string',
@@ -132,7 +132,7 @@ export const authSplitSchema: CustomJsonSchema7 = {
132
132
  overlay: {
133
133
  type: 'string',
134
134
  title: 'Overlay color',
135
- description: 'e.g. hsl(var(--background) / 0.6)',
135
+ description: 'e.g. color-mix(in oklab, var(--background) 60%, transparent)',
136
136
  },
137
137
  blur: {
138
138
  type: 'string',
@@ -169,10 +169,10 @@ export function BaseApp({
169
169
  )}
170
170
  </LayoutI18nProvider>
171
171
  <NextTopLoader
172
- color="hsl(var(--primary))"
172
+ color="var(--primary)"
173
173
  height={3}
174
174
  showSpinner={false}
175
- shadow="0 0 10px hsl(var(--primary)), 0 0 5px hsl(var(--primary))"
175
+ shadow="0 0 10px var(--primary), 0 0 5px var(--primary)"
176
176
  />
177
177
  <Toaster />
178
178
 
@@ -38,7 +38,7 @@ import { AuthLayout } from '@djangocfg/layouts';
38
38
  sourceUrl="https://myapp.com"
39
39
  background={{
40
40
  imageUrl: '/assets/signup-bg.jpg',
41
- overlay: 'hsl(var(--background) / 0.6)',
41
+ overlay: 'color-mix(in oklab, var(--background) 60%, transparent)',
42
42
  blur: '8px',
43
43
  }}
44
44
  sidebar={
@@ -27,7 +27,7 @@ export interface AuthBackgroundConfig {
27
27
  imageUrl?: string;
28
28
  /** CSS gradient fallback when no image or image fails to load. */
29
29
  gradient?: string;
30
- /** Overlay color with opacity (e.g. `hsl(var(--background) / 0.6)`). */
30
+ /** Overlay color with opacity (e.g. `color-mix(in oklab, var(--background) 60%, transparent)`). */
31
31
  overlay?: string;
32
32
  /** Backdrop blur amount (e.g. `8px`). */
33
33
  blur?: string;
@@ -39,10 +39,10 @@
39
39
  height: 1.75rem;
40
40
  padding-inline: 0.5rem;
41
41
  font-size: 0.75rem;
42
- color: hsl(var(--muted-foreground));
42
+ color: var(--muted-foreground);
43
43
  }
44
44
  .auth-locale-trigger:hover {
45
- color: hsl(var(--foreground));
45
+ color: var(--foreground);
46
46
  }
47
47
 
48
48
  .auth-container[data-entering="true"] {
@@ -95,20 +95,20 @@
95
95
  font-weight: 700;
96
96
  line-height: 1.15;
97
97
  letter-spacing: -0.025em;
98
- color: hsl(var(--foreground));
98
+ color: var(--foreground);
99
99
  margin: 0;
100
100
  }
101
101
 
102
102
  .auth-subtitle {
103
103
  font-size: 0.9375rem;
104
104
  line-height: 1.5;
105
- color: hsl(var(--muted-foreground));
105
+ color: var(--muted-foreground);
106
106
  margin: 0.125rem 0 0;
107
107
  }
108
108
 
109
109
  .auth-identifier {
110
110
  font-weight: 500;
111
- color: hsl(var(--foreground));
111
+ color: var(--foreground);
112
112
  }
113
113
 
114
114
  /* ===== FORM ===== */
@@ -124,10 +124,10 @@
124
124
  height: 3rem;
125
125
  padding: 0 0.875rem;
126
126
  font-size: 0.9375rem;
127
- background: hsl(var(--input));
128
- border: 1px solid hsl(var(--border));
127
+ background: var(--input);
128
+ border: 1px solid var(--border);
129
129
  border-radius: var(--auth-radius-sm);
130
- color: hsl(var(--foreground));
130
+ color: var(--foreground);
131
131
  transition:
132
132
  border-color 0.18s var(--spring-snappy),
133
133
  box-shadow 0.18s var(--spring-snappy);
@@ -135,8 +135,8 @@
135
135
 
136
136
  .auth-input:focus {
137
137
  outline: none;
138
- border-color: hsl(var(--ring));
139
- box-shadow: 0 0 0 3px hsl(var(--ring) / 0.12);
138
+ border-color: var(--ring);
139
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 12%, transparent);
140
140
  }
141
141
 
142
142
  .auth-input:disabled {
@@ -145,7 +145,7 @@
145
145
  }
146
146
 
147
147
  .auth-input::placeholder {
148
- color: hsl(var(--muted-foreground) / 0.6);
148
+ color: color-mix(in oklab, var(--muted-foreground) 60%, transparent);
149
149
  }
150
150
 
151
151
  /* Phone input */
@@ -153,10 +153,10 @@
153
153
  height: 3rem;
154
154
  padding: 0 0.875rem;
155
155
  font-size: 0.9375rem;
156
- background: hsl(var(--input));
157
- border: 1px solid hsl(var(--border));
156
+ background: var(--input);
157
+ border: 1px solid var(--border);
158
158
  border-radius: var(--auth-radius-sm);
159
- color: hsl(var(--foreground));
159
+ color: var(--foreground);
160
160
  transition:
161
161
  border-color 0.18s var(--spring-snappy),
162
162
  box-shadow 0.18s var(--spring-snappy);
@@ -164,8 +164,8 @@
164
164
 
165
165
  .auth-phone-input .PhoneInputInput:focus {
166
166
  outline: none;
167
- border-color: hsl(var(--ring));
168
- box-shadow: 0 0 0 3px hsl(var(--ring) / 0.12);
167
+ border-color: var(--ring);
168
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 12%, transparent);
169
169
  }
170
170
 
171
171
  /* ===== BUTTONS ===== */
@@ -200,13 +200,13 @@
200
200
  }
201
201
 
202
202
  .auth-button-primary {
203
- background: hsl(var(--primary));
204
- color: hsl(var(--primary-foreground));
203
+ background: var(--primary);
204
+ color: var(--primary-foreground);
205
205
  }
206
206
 
207
207
  .auth-button-secondary {
208
- background: hsl(var(--secondary));
209
- color: hsl(var(--secondary-foreground));
208
+ background: var(--secondary);
209
+ color: var(--secondary-foreground);
210
210
  border: none;
211
211
  }
212
212
 
@@ -233,7 +233,7 @@
233
233
  }
234
234
 
235
235
  .auth-button-primary.auth-button-loading::after {
236
- border-color: hsl(var(--primary-foreground) / 0.7);
236
+ border-color: color-mix(in oklab, var(--primary-foreground) 70%, transparent);
237
237
  border-right-color: transparent;
238
238
  }
239
239
 
@@ -247,7 +247,7 @@
247
247
  display: flex;
248
248
  align-items: center;
249
249
  gap: 0.75rem;
250
- color: hsl(var(--muted-foreground));
250
+ color: var(--muted-foreground);
251
251
  font-size: 0.75rem;
252
252
  letter-spacing: 0.02em;
253
253
  text-transform: uppercase;
@@ -258,7 +258,7 @@
258
258
  content: "";
259
259
  flex: 1;
260
260
  height: 1px;
261
- background: hsl(var(--border));
261
+ background: var(--border);
262
262
  }
263
263
 
264
264
  /* ===== LINKS ===== */
@@ -269,7 +269,7 @@
269
269
  gap: 0.25rem;
270
270
  font-size: 0.875rem;
271
271
  font-weight: 500;
272
- color: hsl(var(--primary));
272
+ color: var(--primary);
273
273
  background: none;
274
274
  border: none;
275
275
  padding: 0;
@@ -301,7 +301,7 @@
301
301
  gap: 0.375rem;
302
302
  font-size: 0.8125rem;
303
303
  line-height: 1.4;
304
- color: hsl(var(--destructive));
304
+ color: var(--destructive);
305
305
  animation: authShake 0.38s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
306
306
  }
307
307
 
@@ -327,7 +327,7 @@
327
327
  justify-content: center;
328
328
  gap: 0.75rem;
329
329
  font-size: 0.75rem;
330
- color: hsl(var(--muted-foreground));
330
+ color: var(--muted-foreground);
331
331
  }
332
332
 
333
333
  .auth-footer a {
@@ -337,7 +337,7 @@
337
337
  }
338
338
 
339
339
  .auth-footer a:hover {
340
- color: hsl(var(--foreground));
340
+ color: var(--foreground);
341
341
  }
342
342
 
343
343
  .auth-footer-dot {
@@ -352,7 +352,7 @@
352
352
  gap: 0.625rem;
353
353
  font-size: 0.8125rem;
354
354
  line-height: 1.5;
355
- color: hsl(var(--muted-foreground));
355
+ color: var(--muted-foreground);
356
356
  }
357
357
 
358
358
  .auth-terms-checkbox {
@@ -361,7 +361,7 @@
361
361
  }
362
362
 
363
363
  .auth-terms a {
364
- color: hsl(var(--primary));
364
+ color: var(--primary);
365
365
  text-decoration: none;
366
366
  transition: opacity 0.15s;
367
367
  }
@@ -377,7 +377,7 @@
377
377
  align-items: center;
378
378
  gap: 0.625rem;
379
379
  font-size: 0.875rem;
380
- color: hsl(var(--foreground));
380
+ color: var(--foreground);
381
381
  cursor: pointer;
382
382
  user-select: none;
383
383
  }
@@ -396,7 +396,7 @@
396
396
  .auth-channel-toggle {
397
397
  display: flex;
398
398
  padding: 3px;
399
- background: hsl(var(--muted));
399
+ background: var(--muted);
400
400
  border-radius: var(--auth-radius-sm);
401
401
  gap: 2px;
402
402
  }
@@ -411,7 +411,7 @@
411
411
  font-size: 0.8125rem;
412
412
  font-weight: 500;
413
413
  letter-spacing: -0.005em;
414
- color: hsl(var(--muted-foreground));
414
+ color: var(--muted-foreground);
415
415
  background: transparent;
416
416
  border: none;
417
417
  border-radius: calc(var(--auth-radius-sm) - 2px);
@@ -424,11 +424,11 @@
424
424
  }
425
425
 
426
426
  .auth-channel-option[data-active="true"] {
427
- color: hsl(var(--foreground));
428
- background: hsl(var(--background));
427
+ color: var(--foreground);
428
+ background: var(--background);
429
429
  box-shadow:
430
430
  0 1px 3px hsl(0 0% 0% / 0.08),
431
- 0 0 0 0.5px hsl(var(--border));
431
+ 0 0 0 0.5px var(--border);
432
432
  }
433
433
 
434
434
  .auth-channel-option:disabled {
@@ -463,10 +463,10 @@
463
463
  font-weight: 600;
464
464
  text-align: center;
465
465
  letter-spacing: -0.01em;
466
- background: hsl(var(--input));
467
- border: 1px solid hsl(var(--border));
466
+ background: var(--input);
467
+ border: 1px solid var(--border);
468
468
  border-radius: var(--auth-radius-sm);
469
- color: hsl(var(--foreground));
469
+ color: var(--foreground);
470
470
  transition:
471
471
  border-color 0.18s,
472
472
  box-shadow 0.18s;
@@ -474,8 +474,8 @@
474
474
 
475
475
  .auth-otp-wrapper input:focus {
476
476
  outline: none;
477
- border-color: hsl(var(--ring));
478
- box-shadow: 0 0 0 3px hsl(var(--ring) / 0.12);
477
+ border-color: var(--ring);
478
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 12%, transparent);
479
479
  }
480
480
 
481
481
  .auth-otp-wrapper input:disabled {
@@ -518,9 +518,9 @@
518
518
  font-family: ui-monospace, 'SF Mono', monospace;
519
519
  font-size: 0.8125rem;
520
520
  letter-spacing: 0.08em;
521
- background: hsl(var(--muted));
521
+ background: var(--muted);
522
522
  border-radius: var(--auth-radius-xs);
523
- color: hsl(var(--foreground));
523
+ color: var(--foreground);
524
524
  word-break: break-all;
525
525
  text-align: center;
526
526
  }
@@ -532,8 +532,8 @@
532
532
  grid-template-columns: repeat(2, 1fr);
533
533
  gap: 0.375rem;
534
534
  padding: 0.875rem;
535
- background: hsl(var(--muted) / 0.4);
536
- border: 1px dashed hsl(var(--border));
535
+ background: color-mix(in oklab, var(--muted) 40%, transparent);
536
+ border: 1px dashed var(--border);
537
537
  border-radius: var(--auth-radius-sm);
538
538
  }
539
539
 
@@ -543,7 +543,7 @@
543
543
  letter-spacing: 0.05em;
544
544
  text-align: center;
545
545
  padding: 0.375rem;
546
- color: hsl(var(--foreground));
546
+ color: var(--foreground);
547
547
  }
548
548
 
549
549
  /* ===== SUCCESS OVERLAY ===== */
@@ -554,7 +554,7 @@
554
554
  display: flex;
555
555
  align-items: center;
556
556
  justify-content: center;
557
- background: hsl(var(--background));
557
+ background: var(--background);
558
558
  z-index: 50;
559
559
  animation: authFadeIn 0.25s var(--spring-snappy) both;
560
560
  }
@@ -610,7 +610,7 @@
610
610
  .auth-success-text {
611
611
  font-size: 0.9375rem;
612
612
  font-weight: 500;
613
- color: hsl(var(--muted-foreground));
613
+ color: var(--muted-foreground);
614
614
  animation: authFadeIn 0.4s 0.15s var(--spring-smooth) both;
615
615
  }
616
616
 
@@ -618,12 +618,12 @@
618
618
 
619
619
  .auth-2fa-box {
620
620
  padding: 1.5rem 1.25rem 1.25rem;
621
- background: hsl(var(--card, var(--muted) / 0.25));
622
- border: 1px solid hsl(var(--border));
621
+ background: var(--card, color-mix(in oklab, var(--muted) 25%, transparent));
622
+ border: 1px solid var(--border);
623
623
  border-radius: var(--auth-radius);
624
624
  box-shadow:
625
625
  0 2px 12px hsl(0 0% 0% / 0.08),
626
- 0 0 0 1px hsl(var(--border) / 0.4) inset;
626
+ 0 0 0 1px color-mix(in oklab, var(--border) 40%, transparent) inset;
627
627
  display: flex;
628
628
  flex-direction: column;
629
629
  gap: 1.125rem;
@@ -637,8 +637,8 @@
637
637
  height: 2.75rem;
638
638
  margin: 0 auto;
639
639
  border-radius: 50%;
640
- background: hsl(var(--primary) / 0.1);
641
- color: hsl(var(--primary));
640
+ background: color-mix(in oklab, var(--primary) 10%, transparent);
641
+ color: var(--primary);
642
642
  animation: authLogoIn 0.5s var(--spring-bounce) both;
643
643
  }
644
644
 
@@ -675,7 +675,7 @@
675
675
  .auth-instruction {
676
676
  font-size: 0.875rem;
677
677
  line-height: 1.5;
678
- color: hsl(var(--muted-foreground));
678
+ color: var(--muted-foreground);
679
679
  text-align: center;
680
680
  margin: 0;
681
681
  }
@@ -38,9 +38,9 @@
38
38
  display: flex;
39
39
  width: 100%;
40
40
  max-width: 420px;
41
- background: hsl(var(--background));
41
+ background: var(--background);
42
42
  border-radius: var(--auth-radius);
43
- outline: 1px solid hsl(var(--border));
43
+ outline: 1px solid var(--border);
44
44
  box-shadow: 0 4px 24px hsl(0 0% 0% / 0.08);
45
45
  overflow: hidden;
46
46
  /* Apple-style frosted entry — the card "condenses" out of the
@@ -105,7 +105,7 @@
105
105
  flex-direction: column;
106
106
  justify-content: center;
107
107
  padding: 2.5rem 2rem;
108
- background: hsl(var(--muted) / 0.25);
108
+ background: color-mix(in oklab, var(--muted) 25%, transparent);
109
109
  }
110
110
 
111
111
  /* Desktop: show sidebar, expand card */
@@ -17,8 +17,8 @@
17
17
  align-items: center;
18
18
  justify-content: space-between;
19
19
  padding: 0.5rem 1rem;
20
- background-color: hsl(var(--background));
21
- border-bottom: 1px solid hsl(var(--border));
20
+ background-color: var(--background);
21
+ border-bottom: 1px solid var(--border);
22
22
  }
23
23
 
24
24
  /**