@donotdev/ui 0.0.7 → 0.0.8

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.
Files changed (48) hide show
  1. package/assets/fonts/fonts.css +4 -4
  2. package/dist/components/auth/AuthHeader.d.ts +5 -0
  3. package/dist/components/auth/AuthHeader.d.ts.map +1 -1
  4. package/dist/components/auth/AuthHeader.js +22 -8
  5. package/dist/components/auth/AuthMenu.d.ts +6 -2
  6. package/dist/components/auth/AuthMenu.d.ts.map +1 -1
  7. package/dist/components/auth/AuthMenu.js +2 -2
  8. package/dist/components/common/RedirectOverlay.d.ts +37 -0
  9. package/dist/components/common/RedirectOverlay.d.ts.map +1 -0
  10. package/dist/components/common/RedirectOverlay.js +243 -0
  11. package/dist/components/common/index.d.ts +1 -0
  12. package/dist/components/common/index.d.ts.map +1 -1
  13. package/dist/components/common/index.js +1 -0
  14. package/dist/components/layout/components/header/SettingsMenu.d.ts.map +1 -1
  15. package/dist/components/layout/components/header/SettingsMenu.js +1 -1
  16. package/dist/crud/components/DisplayFieldRenderer.js +1 -1
  17. package/dist/dndev.css +447 -63
  18. package/dist/index.js +4 -4
  19. package/dist/internal/devtools/components/DesignTab.d.ts.map +1 -1
  20. package/dist/internal/devtools/components/DesignTab.js +25 -3
  21. package/dist/internal/layout/components/PerformanceHints.d.ts.map +1 -1
  22. package/dist/internal/layout/components/PerformanceHints.js +3 -2
  23. package/dist/internal/layout/config/presets/admin.d.ts +2 -2
  24. package/dist/internal/layout/config/presets/admin.d.ts.map +1 -1
  25. package/dist/internal/layout/config/presets/admin.js +8 -4
  26. package/dist/providers/NextJsAppProviders.d.ts.map +1 -1
  27. package/dist/providers/NextJsAppProviders.js +4 -1
  28. package/dist/routing/hooks/hooks.next.d.ts +1 -0
  29. package/dist/routing/hooks/hooks.next.d.ts.map +1 -1
  30. package/dist/routing/hooks/hooks.next.js +1 -1
  31. package/dist/routing/hooks/hooks.vite.d.ts +1 -0
  32. package/dist/routing/hooks/hooks.vite.d.ts.map +1 -1
  33. package/dist/routing/hooks/hooks.vite.js +1 -1
  34. package/dist/routing/hooks/useRouteParam.next.d.ts +18 -0
  35. package/dist/routing/hooks/useRouteParam.next.d.ts.map +1 -0
  36. package/dist/routing/hooks/useRouteParam.next.js +38 -0
  37. package/dist/routing/hooks/useRouteParam.vite.d.ts +18 -0
  38. package/dist/routing/hooks/useRouteParam.vite.d.ts.map +1 -0
  39. package/dist/routing/hooks/useRouteParam.vite.js +38 -0
  40. package/dist/routing/index.d.ts +1 -1
  41. package/dist/routing/index.d.ts.map +1 -1
  42. package/dist/routing/index.js +1 -1
  43. package/dist/styles/index.css +443 -59
  44. package/dist/utils/useCrudSafe.d.ts.map +1 -1
  45. package/dist/utils/useCrudSafe.js +2 -1
  46. package/dist/vite-routing/RootLayout.d.ts.map +1 -1
  47. package/dist/vite-routing/RootLayout.js +4 -1
  48. package/package.json +9 -9
@@ -153,7 +153,7 @@
153
153
  --font-headline: var(--font-sans);
154
154
 
155
155
  --font-mono:
156
- ui-monospace, 'SF Mono', 'Cascadia Code', 'Roboto Mono', Consolas, Monaco,
156
+ ui-monospace, 'SF Mono', 'Cascadia Code', Consolas, Monaco,
157
157
  'Liberation Mono', monospace;
158
158
 
159
159
  /* Typography Scale - Musical Scale System (STANDARD density defaults - Major Third 1.25×) */
@@ -710,6 +710,16 @@ em {
710
710
 
711
711
  /* packages/components/src/styles/patterns.css */
712
712
 
713
+ /* Menu scroll area pattern - shared by DropdownMenu, Select, Combobox */
714
+
715
+ .dndev-menu-scroll-area {
716
+ max-height: 50dvh;
717
+ }
718
+
719
+ .dndev-menu-scroll-area .dndev-scroll-area-viewport {
720
+ max-height: 50dvh;
721
+ }
722
+
713
723
  /* ===========================
714
724
  FORM COMPONENTS (BASE)
715
725
  =========================== */
@@ -904,6 +914,9 @@ em {
904
914
  border-radius: var(--radius-surface);
905
915
  box-shadow: var(--shadow-md);
906
916
  padding: var(--gap-md); /* 1rem / 16px default */
917
+ padding-block-start: calc(
918
+ var(--gap-md) + var(--gap-sm)
919
+ ); /* Extra top padding for FloatingLabels */
907
920
  position: relative;
908
921
  overflow: hidden;
909
922
  contain: layout style;
@@ -1154,6 +1167,9 @@ em {
1154
1167
  border-radius: var(--radius-floating);
1155
1168
  box-shadow: var(--shadow-md);
1156
1169
  padding: var(--gap-md); /* 1rem / 16px default */
1170
+ padding-block-start: calc(
1171
+ var(--gap-md) + var(--gap-sm)
1172
+ ); /* Extra top padding for FloatingLabels */
1157
1173
  position: relative;
1158
1174
  overflow: hidden;
1159
1175
  contain: layout style;
@@ -2084,8 +2100,9 @@ em {
2084
2100
  display: flex;
2085
2101
  flex-direction: column;
2086
2102
  overflow-y: auto;
2087
- overflow-x: hidden;
2103
+ overflow-x: visible;
2088
2104
  min-height: 0;
2105
+ padding-block-start: var(--gap-sm);
2089
2106
  }
2090
2107
 
2091
2108
  .dndev-modal-title {
@@ -2144,6 +2161,60 @@ em {
2144
2161
  flex-direction: column;
2145
2162
  }
2146
2163
 
2164
+ /* ===========================
2165
+ AUTH FORM PATTERNS
2166
+ =========================== */
2167
+
2168
+ /* Auth form step indicator */
2169
+
2170
+ .dndev-auth-step {
2171
+ display: inline-flex;
2172
+ align-items: center;
2173
+ justify-content: center;
2174
+ min-width: 1.5em;
2175
+ padding: var(--gap-sm);
2176
+ border-radius: var(--radius-sm);
2177
+ font-weight: var(--font-weight-semibold);
2178
+ transition: all var(--dur-fast) var(--ease-in-out);
2179
+ }
2180
+
2181
+ .dndev-auth-step[data-state='active'] {
2182
+ background-color: var(--primary);
2183
+ color: var(--primary-foreground);
2184
+ }
2185
+
2186
+ .dndev-auth-step[data-state='pending'] {
2187
+ background-color: var(--muted);
2188
+ color: var(--muted-foreground);
2189
+ }
2190
+
2191
+ .dndev-auth-step[data-state='completed'] {
2192
+ background-color: var(--success);
2193
+ color: var(--success-foreground);
2194
+ }
2195
+
2196
+ /* Opacity data attribute */
2197
+
2198
+ [data-opacity='50'] {
2199
+ opacity: 0.5;
2200
+ }
2201
+
2202
+ [data-opacity='70'] {
2203
+ opacity: 0.7;
2204
+ }
2205
+
2206
+ /* Inset data attribute - indent content */
2207
+
2208
+ [data-inset='true'] {
2209
+ padding-inline-start: var(--gap-md);
2210
+ }
2211
+
2212
+ /* Password strength bar height override */
2213
+
2214
+ .dndev-password-strength-bar {
2215
+ height: 4px;
2216
+ }
2217
+
2147
2218
  /* 5. Individual Component Styles */
2148
2219
 
2149
2220
  /* packages/components/src/atomic/Accordion/Accordion.css */
@@ -2190,21 +2261,46 @@ em {
2190
2261
  flex-shrink: 0;
2191
2262
  width: var(--icon-md);
2192
2263
  height: var(--icon-md);
2193
- transition: transform var(--dur-fast) var(--ease-in-out);
2264
+ transition: transform var(--dur-normal) var(--ease-in-out);
2194
2265
  }
2195
2266
 
2196
2267
  .dndev-accordion-content {
2197
2268
  overflow: hidden;
2198
2269
  font-size: var(--font-size-base);
2199
- transition: all var(--dur-fast) var(--ease-in-out);
2200
2270
  width: 100%;
2201
2271
  min-width: 0;
2202
2272
  text-align: start;
2203
2273
  }
2204
2274
 
2275
+ .dndev-accordion-content[data-state='open'] {
2276
+ animation: slideDown var(--dur-normal) var(--ease-in-out);
2277
+ }
2278
+
2205
2279
  .dndev-accordion-content[data-state='closed'] {
2206
- display: none;
2280
+ animation: slideUp var(--dur-normal) var(--ease-in-out);
2281
+ }
2282
+
2283
+ @keyframes slideDown {
2284
+ from {
2285
+ height: 0;
2286
+ opacity: 0;
2287
+ }
2288
+ to {
2289
+ height: var(--radix-collapsible-content-height);
2290
+ opacity: 1;
2291
+ }
2292
+ }
2293
+
2294
+ @keyframes slideUp {
2295
+ from {
2296
+ height: var(--radix-collapsible-content-height);
2297
+ opacity: 1;
2298
+ }
2299
+ to {
2300
+ height: 0;
2301
+ opacity: 0;
2207
2302
  }
2303
+ }
2208
2304
 
2209
2305
  .dndev-accordion-content-inner {
2210
2306
  padding-bottom: var(--gap-md);
@@ -3195,21 +3291,58 @@ em {
3195
3291
  @keyframes slideDown {
3196
3292
  from {
3197
3293
  height: 0;
3294
+ opacity: 0;
3198
3295
  }
3199
3296
  to {
3200
3297
  height: var(--radix-collapsible-content-height);
3298
+ opacity: 1;
3201
3299
  }
3202
3300
  }
3203
3301
 
3204
3302
  @keyframes slideUp {
3205
3303
  from {
3206
3304
  height: var(--radix-collapsible-content-height);
3305
+ opacity: 1;
3207
3306
  }
3208
3307
  to {
3209
3308
  height: 0;
3309
+ opacity: 0;
3210
3310
  }
3211
3311
  }
3212
3312
 
3313
+ .dndev-collapsible-trigger {
3314
+ width: 100%;
3315
+ cursor: pointer;
3316
+ transition: opacity var(--dur-fast) var(--ease-in-out);
3317
+ }
3318
+
3319
+ .dndev-collapsible-trigger:hover {
3320
+ opacity: var(--opacity-strong);
3321
+ }
3322
+
3323
+ .dndev-collapsible-trigger:focus-visible {
3324
+ outline: 2px solid var(--ring);
3325
+ outline-offset: 2px;
3326
+ border-radius: var(--radius-interactive);
3327
+ }
3328
+
3329
+ .dndev-collapsible-icon {
3330
+ width: var(--size-md);
3331
+ height: var(--size-md);
3332
+ flex-shrink: 0;
3333
+ color: var(--accent);
3334
+ transition: transform var(--dur-normal) var(--ease-in-out);
3335
+ }
3336
+
3337
+ .dndev-collapsible-chevron {
3338
+ transform: rotate(0deg);
3339
+ transition: transform var(--dur-normal) var(--ease-in-out);
3340
+ }
3341
+
3342
+ .dndev-collapsible[data-state='open'] .dndev-collapsible-chevron {
3343
+ transform: rotate(180deg);
3344
+ }
3345
+
3213
3346
  /* packages/components/src/atomic/Combobox/Combobox.css */
3214
3347
 
3215
3348
  .dndev-combobox-trigger {
@@ -3289,7 +3422,7 @@ em {
3289
3422
  .dndev-combobox-content {
3290
3423
  width: var(--radix-popover-trigger-width);
3291
3424
  min-width: var(--radix-popover-trigger-width);
3292
- max-height: 300px;
3425
+ max-width: var(--radix-popover-trigger-width);
3293
3426
  display: flex;
3294
3427
  flex-direction: column;
3295
3428
  padding: 0;
@@ -3304,14 +3437,6 @@ em {
3304
3437
  width: 100%;
3305
3438
  }
3306
3439
 
3307
- .dndev-combobox-list {
3308
- overflow-y: auto;
3309
- padding: var(--gap-tight);
3310
- display: flex;
3311
- flex-direction: column;
3312
- gap: var(--gap-none);
3313
- }
3314
-
3315
3440
  .dndev-combobox-option {
3316
3441
  all: unset;
3317
3442
  display: flex;
@@ -3368,6 +3493,30 @@ em {
3368
3493
  color: var(--muted-foreground);
3369
3494
  }
3370
3495
 
3496
+ /* Creatable option styling */
3497
+
3498
+ .dndev-combobox-option-create {
3499
+ color: var(--primary);
3500
+ font-style: italic;
3501
+ }
3502
+
3503
+ .dndev-combobox-option-create-icon {
3504
+ width: var(--icon-md);
3505
+ height: var(--icon-md);
3506
+ margin-inline-end: var(--gap-sm);
3507
+ flex-shrink: 0;
3508
+ }
3509
+
3510
+ .dndev-combobox-open .dndev-input-with-trailing-icon .dndev-input-icon svg,
3511
+ .dndev-combobox-open .dndev-input-with-trailing-icon .dndev-input-icon > * {
3512
+ transform: rotate(180deg);
3513
+ }
3514
+
3515
+ .dndev-input-with-trailing-icon .dndev-input-icon svg,
3516
+ .dndev-input-with-trailing-icon .dndev-input-icon > * {
3517
+ transition: transform var(--dur-fast) var(--ease-in-out);
3518
+ }
3519
+
3371
3520
  /* packages/components/src/atomic/DualCard/DualCard.css */
3372
3521
 
3373
3522
  .dndev-dual-card {
@@ -3554,13 +3703,15 @@ em {
3554
3703
  text-align: start;
3555
3704
  display: block;
3556
3705
  line-height: 1.5; /* Match line numbers */
3706
+ font-size: var(--font-size-sm); /* Explicit match with line numbers */
3557
3707
  }
3558
3708
 
3559
- /* Ensure shiki-generated code respects line-height */
3709
+ /* Ensure shiki-generated code respects line-height AND font-size */
3560
3710
 
3561
3711
  .dndev-code-code pre,
3562
3712
  .dndev-code-code code {
3563
3713
  line-height: inherit;
3714
+ font-size: inherit; /* Match parent font-size */
3564
3715
  }
3565
3716
 
3566
3717
  /* packages/components/src/atomic/Command/Command.css */
@@ -3938,16 +4089,6 @@ em {
3938
4089
  padding: var(--gap-sm);
3939
4090
  }
3940
4091
 
3941
- /* Dropdown scroll area - constrain height to 50dvh */
3942
-
3943
- .dndev-dropdown-scroll-area {
3944
- max-height: 50dvh;
3945
- }
3946
-
3947
- .dndev-dropdown-scroll-area .dndev-scroll-area-viewport {
3948
- max-height: 50dvh;
3949
- }
3950
-
3951
4092
  /* Checked state styling */
3952
4093
 
3953
4094
  .dndev-interactive[data-role='menu-item'][data-state='checked'] {
@@ -4471,6 +4612,49 @@ em {
4471
4612
  margin-inline-start: var(--gap-sm);
4472
4613
  }
4473
4614
 
4615
+ /* Floating Label - positioned absolutely at top of input fields */
4616
+
4617
+ .dndev-floating-label {
4618
+ position: absolute;
4619
+ inset-inline-start: var(--gap-md);
4620
+ top: calc(-1 * var(--font-size-xs) / 2 - 1px);
4621
+ font-size: var(--font-size-xs);
4622
+ font-weight: 500;
4623
+ pointer-events: none;
4624
+ z-index: 1;
4625
+ background-color: var(--background);
4626
+ padding: 0 var(--gap-sm);
4627
+ line-height: 1;
4628
+ color: var(--foreground);
4629
+ }
4630
+
4631
+ /* Inherit background when inside floating containers (dropdowns, menus, popovers) */
4632
+
4633
+ .dndev-floating .dndev-floating-label,
4634
+ .dndev-menu-content .dndev-floating-label,
4635
+ [class*='dndev-dropdown'] .dndev-floating-label,
4636
+ [class*='dndev-navigation'] .dndev-floating-label {
4637
+ background-color: var(--popover);
4638
+ color: var(--popover-foreground);
4639
+ }
4640
+
4641
+ /* When floating container has blank glow, use solid popover background */
4642
+
4643
+ .dndev-floating[data-glow='blank'] .dndev-floating-label {
4644
+ background-color: var(--popover);
4645
+ }
4646
+
4647
+ .dndev-floating-label[data-disabled='true'] {
4648
+ color: var(--muted-foreground);
4649
+ }
4650
+
4651
+ .dndev-floating-label[data-truncate='true'] {
4652
+ max-width: calc(100% - var(--gap-md) * 2);
4653
+ overflow: hidden;
4654
+ text-overflow: ellipsis;
4655
+ white-space: nowrap;
4656
+ }
4657
+
4474
4658
  /* packages/components/src/atomic/List/List.css */
4475
4659
 
4476
4660
  .dndev-list {
@@ -4779,20 +4963,41 @@ em {
4779
4963
  /* packages/components/src/atomic/PasswordInput/PasswordInput.css */
4780
4964
 
4781
4965
  .dndev-password-input-with-toggle {
4782
- padding-inline-end: var(--gap-lg);
4966
+ padding-inline-end: calc(var(--gap-xl) + var(--gap-md)) !important;
4783
4967
  }
4784
4968
 
4969
+ /* Eye icon toggle - ALWAYS at end, cannot be overridden */
4970
+
4785
4971
  .dndev-password-toggle-button {
4786
- position: absolute;
4787
- inset-inline-end: 0;
4788
- top: 0;
4789
- height: 100%;
4790
- padding-inline-start: var(--gap-md);
4791
- padding-inline-end: var(--gap-md);
4972
+ position: absolute !important;
4973
+ top: 50% !important;
4974
+ transform: translateY(-50%) !important;
4975
+ inset-inline-end: var(--gap-sm) !important;
4976
+ inset-inline-start: unset !important;
4977
+ background: none !important;
4978
+ border: none !important;
4979
+ cursor: pointer !important;
4980
+ padding: var(--gap-tight) !important;
4981
+ display: flex !important;
4982
+ align-items: center !important;
4983
+ opacity: var(--opacity-muted) !important;
4984
+ transition: opacity var(--dur-fast) var(--ease-in-out) !important;
4985
+ -webkit-user-select: none !important;
4986
+ -moz-user-select: none !important;
4987
+ user-select: none !important;
4988
+ z-index: 1 !important;
4989
+ }
4990
+
4991
+ .dndev-password-toggle-button:hover,
4992
+ .dndev-password-toggle-button:focus {
4993
+ opacity: 1 !important;
4994
+ outline: none !important;
4792
4995
  }
4793
4996
 
4794
4997
  .dndev-password-toggle-icon {
4795
4998
  color: var(--muted-foreground);
4999
+ width: var(--icon-sm);
5000
+ height: var(--icon-sm);
4796
5001
  }
4797
5002
 
4798
5003
  /* packages/components/src/atomic/Pagination/Pagination.css */
@@ -4884,9 +5089,32 @@ em {
4884
5089
  height: 100%;
4885
5090
  width: 100%;
4886
5091
  flex: 1;
5092
+ background-color: var(--primary);
4887
5093
  transition: transform var(--dur-normal) var(--ease-in-out);
5094
+
5095
+ /* Variant colors */
4888
5096
  }
4889
5097
 
5098
+ [data-variant='default']:is(.dndev-progress [data-radix-progress-indicator]) {
5099
+ background-color: var(--primary);
5100
+ }
5101
+
5102
+ [data-variant='accent']:is(.dndev-progress [data-radix-progress-indicator]) {
5103
+ background-color: var(--accent);
5104
+ }
5105
+
5106
+ [data-variant='success']:is(.dndev-progress [data-radix-progress-indicator]) {
5107
+ background-color: var(--success);
5108
+ }
5109
+
5110
+ [data-variant='warning']:is(.dndev-progress [data-radix-progress-indicator]) {
5111
+ background-color: var(--warning);
5112
+ }
5113
+
5114
+ [data-variant='destructive']:is(.dndev-progress [data-radix-progress-indicator]) {
5115
+ background-color: var(--destructive);
5116
+ }
5117
+
4890
5118
  /* packages/components/src/atomic/RadioGroup/RadioGroup.css */
4891
5119
 
4892
5120
  /* Uses shared .dndev-control-group pattern from patterns.css */
@@ -5092,7 +5320,6 @@ em {
5092
5320
  display: flex;
5093
5321
  flex-direction: column;
5094
5322
  padding: 0;
5095
- overflow-y: auto;
5096
5323
  }
5097
5324
 
5098
5325
  .dndev-interactive[data-radix-select-item] {
@@ -5214,6 +5441,7 @@ em {
5214
5441
  letter-spacing: 0.2em;
5215
5442
  color: var(--accent) !important;
5216
5443
  margin-block-end: var(--gap-md);
5444
+ text-align: center; /* DEFAULT - works without attribute selector */
5217
5445
  }
5218
5446
 
5219
5447
  .dndev-section-full-width[data-text-align='start'] .dndev-section-title {
@@ -5228,6 +5456,51 @@ em {
5228
5456
  text-align: end;
5229
5457
  }
5230
5458
 
5459
+ /* Collapsible title trigger */
5460
+
5461
+ .dndev-section-title-trigger {
5462
+ width: 100%;
5463
+ cursor: pointer;
5464
+ transition: opacity var(--dur-fast) var(--ease-in-out);
5465
+ margin-block-end: var(--gap-md);
5466
+ }
5467
+
5468
+ .dndev-section-title-trigger .dndev-section-title {
5469
+ margin-block-end: 0;
5470
+ }
5471
+
5472
+ .dndev-section-title-trigger:hover {
5473
+ opacity: var(--opacity-strong);
5474
+ }
5475
+
5476
+ .dndev-section-title-trigger:focus-visible {
5477
+ outline: 2px solid var(--ring);
5478
+ outline-offset: 2px;
5479
+ border-radius: var(--radius-interactive);
5480
+ }
5481
+
5482
+ .dndev-section-icon {
5483
+ width: var(--size-md);
5484
+ height: var(--size-md);
5485
+ flex-shrink: 0;
5486
+ color: var(--accent);
5487
+ transition: transform var(--dur-normal) var(--ease-in-out);
5488
+ }
5489
+
5490
+ .dndev-section-full-width[data-text-align='start']
5491
+ .dndev-section-title-trigger {
5492
+ justify-content: flex-start;
5493
+ }
5494
+
5495
+ .dndev-section-full-width[data-text-align='center']
5496
+ .dndev-section-title-trigger {
5497
+ justify-content: center;
5498
+ }
5499
+
5500
+ .dndev-section-full-width[data-text-align='end'] .dndev-section-title-trigger {
5501
+ justify-content: flex-end;
5502
+ }
5503
+
5231
5504
  /* packages/components/src/atomic/Separator/Separator.css */
5232
5505
 
5233
5506
  .dndev-separator {
@@ -6090,6 +6363,64 @@ em {
6090
6363
  transform: translateX(calc(2.75rem - 1.25rem - 0.125rem));
6091
6364
  }
6092
6365
 
6366
+ /* Switch with labels container */
6367
+
6368
+ .dndev-switch-with-labels {
6369
+ display: inline-flex;
6370
+ align-items: center;
6371
+ gap: var(--gap-sm);
6372
+ flex-wrap: wrap;
6373
+ }
6374
+
6375
+ /* Labels - keep switch and its labels on one line when possible */
6376
+
6377
+ .dndev-switch-with-labels > .dndev-switch {
6378
+ flex-shrink: 0;
6379
+ }
6380
+
6381
+ .dndev-switch-label {
6382
+ font-size: var(--font-size-sm);
6383
+ transition: color var(--dur-normal) var(--ease-in-out),
6384
+ font-weight var(--dur-normal) var(--ease-in-out);
6385
+ white-space: nowrap;
6386
+ }
6387
+
6388
+ /* Unchecked label - active when switch is unchecked */
6389
+
6390
+ .dndev-switch-with-labels:not(:has(.dndev-switch[data-state='checked']))
6391
+ .dndev-switch-label-unchecked,
6392
+ .dndev-switch-with-labels[data-checked='false']
6393
+ .dndev-switch-label-unchecked {
6394
+ color: var(--foreground);
6395
+ font-weight: var(--font-weight-medium);
6396
+ }
6397
+
6398
+ .dndev-switch-with-labels:has(.dndev-switch[data-state='checked'])
6399
+ .dndev-switch-label-unchecked,
6400
+ .dndev-switch-with-labels[data-checked='true']
6401
+ .dndev-switch-label-unchecked {
6402
+ color: var(--muted-foreground);
6403
+ font-weight: var(--font-weight-normal);
6404
+ }
6405
+
6406
+ /* Checked label - active when switch is checked */
6407
+
6408
+ .dndev-switch-with-labels:has(.dndev-switch[data-state='checked'])
6409
+ .dndev-switch-label-checked,
6410
+ .dndev-switch-with-labels[data-checked='true']
6411
+ .dndev-switch-label-checked {
6412
+ color: var(--foreground);
6413
+ font-weight: var(--font-weight-medium);
6414
+ }
6415
+
6416
+ .dndev-switch-with-labels:not(:has(.dndev-switch[data-state='checked']))
6417
+ .dndev-switch-label-checked,
6418
+ .dndev-switch-with-labels[data-checked='false']
6419
+ .dndev-switch-label-checked {
6420
+ color: var(--muted-foreground);
6421
+ font-weight: var(--font-weight-normal);
6422
+ }
6423
+
6093
6424
  /* packages/components/src/atomic/Table/Table.css */
6094
6425
 
6095
6426
  .dndev-table-wrapper {
@@ -6155,7 +6486,7 @@ em {
6155
6486
  /* Table head (th) styles */
6156
6487
 
6157
6488
  .dndev-table-head {
6158
- text-align: left;
6489
+ text-align: start;
6159
6490
  vertical-align: middle;
6160
6491
  font-weight: 500;
6161
6492
  color: var(--muted-foreground);
@@ -6172,12 +6503,12 @@ em {
6172
6503
  text-align: center;
6173
6504
  }
6174
6505
 
6175
- .dndev-table-head[data-align='right'] {
6176
- text-align: right;
6506
+ .dndev-table-head[data-align='end'] {
6507
+ text-align: end;
6177
6508
  }
6178
6509
 
6179
- .dndev-table-head[data-align='left'] {
6180
- text-align: left;
6510
+ .dndev-table-head[data-align='start'] {
6511
+ text-align: start;
6181
6512
  }
6182
6513
 
6183
6514
  /* Table cell (td) styles */
@@ -6193,14 +6524,48 @@ em {
6193
6524
  text-align: center;
6194
6525
  }
6195
6526
 
6196
- .dndev-table-cell[data-align='right'] {
6197
- text-align: right;
6527
+ .dndev-table-cell[data-align='end'] {
6528
+ text-align: end;
6198
6529
  }
6199
6530
 
6200
- .dndev-table-cell[data-align='left'] {
6201
- text-align: left;
6531
+ .dndev-table-cell[data-align='start'] {
6532
+ text-align: start;
6202
6533
  }
6203
6534
 
6535
+ /* Excel-like grid lines variant */
6536
+
6537
+ .dndev-table-grid .dndev-table-head,
6538
+ .dndev-table-grid .dndev-table-cell {
6539
+ border: 1px solid var(--border);
6540
+ padding: 0;
6541
+ }
6542
+
6543
+ .dndev-table-grid .dndev-table-row {
6544
+ border-bottom: 1px solid var(--border);
6545
+ }
6546
+
6547
+ .dndev-table-grid .dndev-table-row:last-child {
6548
+ border-bottom: 1px solid var(--border);
6549
+ }
6550
+
6551
+ /* Input components inside grid cells should be borderless and fit snugly */
6552
+
6553
+ .dndev-table-grid .dndev-table-cell .dndev-input,
6554
+ .dndev-table-grid .dndev-table-cell input[type="text"],
6555
+ .dndev-table-grid .dndev-table-cell input[type="number"] {
6556
+ border: none;
6557
+ background: transparent;
6558
+ width: 100%;
6559
+ height: 100%;
6560
+ box-shadow: none;
6561
+ }
6562
+
6563
+ .dndev-table-grid .dndev-table-cell .dndev-input:focus,
6564
+ .dndev-table-grid .dndev-table-cell input:focus {
6565
+ outline: 2px solid var(--primary);
6566
+ outline-offset: -2px;
6567
+ }
6568
+
6204
6569
  /* Table caption styles */
6205
6570
 
6206
6571
  .dndev-table-caption {
@@ -6217,7 +6582,7 @@ em {
6217
6582
 
6218
6583
  .dndev-table-search-icon {
6219
6584
  position: absolute;
6220
- left: var(--gap-md);
6585
+ inset-inline-start: var(--gap-md);
6221
6586
  top: 50%;
6222
6587
  transform: translateY(-50%);
6223
6588
  width: var(--icon-md);
@@ -6384,7 +6749,7 @@ em {
6384
6749
  .dndev-tag {
6385
6750
  display: inline-flex;
6386
6751
  align-items: center;
6387
- gap: var(--gap-xs);
6752
+ gap: var(--gap-sm);
6388
6753
  border-radius: var(--radius-full);
6389
6754
  border: 1px solid transparent;
6390
6755
  font-size: var(--font-size-sm);
@@ -6514,8 +6879,18 @@ em {
6514
6879
  font-weight: var(--font-weight-medium);
6515
6880
  line-height: var(--line-height);
6516
6881
  background-color: transparent; /* Text never has background, only color changes */
6882
+
6883
+ /* Respect semantic HTML elements */
6517
6884
  }
6518
6885
 
6886
+ .dndev-text-base:is(strong) {
6887
+ font-weight: var(--font-weight-semibold);
6888
+ }
6889
+
6890
+ .dndev-text-base:is(em) {
6891
+ font-style: italic;
6892
+ }
6893
+
6519
6894
  .dndev-text-base[data-variant='default'] {
6520
6895
  color: inherit;
6521
6896
  }
@@ -7463,7 +7838,7 @@ em {
7463
7838
  align-items: stretch;
7464
7839
  }
7465
7840
 
7466
- @media (width <= 699px) {
7841
+ @media (width <=699px) {
7467
7842
 
7468
7843
  [data-cols='2'] {
7469
7844
  grid-template-columns: repeat(1, minmax(350px, 1fr));
@@ -7475,14 +7850,14 @@ em {
7475
7850
  align-items: stretch;
7476
7851
  }
7477
7852
 
7478
- @media (width <= 1049px) {
7853
+ @media (width <=1049px) {
7479
7854
 
7480
7855
  [data-cols='3'] {
7481
7856
  grid-template-columns: repeat(2, minmax(350px, 1fr));
7482
7857
  }
7483
7858
  }
7484
7859
 
7485
- @media (width <= 699px) {
7860
+ @media (width <=699px) {
7486
7861
 
7487
7862
  [data-cols='3'] {
7488
7863
  grid-template-columns: repeat(1, minmax(350px, 1fr));
@@ -7496,21 +7871,21 @@ em {
7496
7871
  /* Responsive: reduce columns when container is narrow */
7497
7872
  }
7498
7873
 
7499
- @media (width <= 1399px) {
7874
+ @media (width <=1399px) {
7500
7875
 
7501
7876
  [data-cols='4'] {
7502
7877
  grid-template-columns: repeat(3, minmax(0, 1fr));
7503
7878
  }
7504
7879
  }
7505
7880
 
7506
- @media (width <= 1049px) {
7881
+ @media (width <=1049px) {
7507
7882
 
7508
7883
  [data-cols='4'] {
7509
7884
  grid-template-columns: repeat(2, minmax(0, 1fr));
7510
7885
  }
7511
7886
  }
7512
7887
 
7513
- @media (width <= 699px) {
7888
+ @media (width <=699px) {
7514
7889
 
7515
7890
  [data-cols='4'] {
7516
7891
  grid-template-columns: repeat(1, minmax(0, 1fr));
@@ -7577,18 +7952,22 @@ em {
7577
7952
 
7578
7953
  code {
7579
7954
  font-family: var(--font-mono);
7580
- font-size: inherit; /* Inherit parent size */
7581
- font-weight: inherit; /* Inherit parent weight */
7955
+ font-size: inherit;
7956
+ /* Inherit parent size */
7957
+ font-weight: inherit;
7958
+ /* Inherit parent weight */
7582
7959
  line-height: inherit;
7583
7960
  color: inherit;
7584
- background: transparent; /* No background by default */
7961
+ background: transparent;
7962
+ /* No background by default */
7585
7963
  }
7586
7964
 
7587
7965
  /* Code variant - visual styling (background, padding, can apply to any element) */
7588
7966
 
7589
7967
  [data-variant='code'] {
7590
7968
  font-family: var(--font-mono);
7591
- font-size: var(--font-size-sm); /* Default small size */
7969
+ font-size: var(--font-size-sm);
7970
+ /* Default small size */
7592
7971
  background: var(--muted);
7593
7972
  color: var(--muted-foreground);
7594
7973
  padding: var(--gap-sm) var(--gap-md);
@@ -7683,7 +8062,8 @@ h4[data-variant='code'] {
7683
8062
 
7684
8063
  .dndev-relative {
7685
8064
  position: relative;
7686
- min-width: 0; /* Allow flex items to shrink below content size */
8065
+ min-width: 0;
8066
+ /* Allow flex items to shrink below content size */
7687
8067
  }
7688
8068
 
7689
8069
  .dndev-absolute {
@@ -7788,7 +8168,7 @@ h4[data-variant='code'] {
7788
8168
  RESPONSIVE DISPLAY
7789
8169
  =========================== */
7790
8170
 
7791
- @media (width >= 768px) {
8171
+ @media (width >=768px) {
7792
8172
  .dndev-md\:block {
7793
8173
  display: block;
7794
8174
  }
@@ -7814,7 +8194,7 @@ h4[data-variant='code'] {
7814
8194
  }
7815
8195
  }
7816
8196
 
7817
- @media (width >= 1024px) {
8197
+ @media (width >=1024px) {
7818
8198
  .dndev-lg\:block {
7819
8199
  display: block;
7820
8200
  }
@@ -7874,6 +8254,10 @@ h4[data-variant='code'] {
7874
8254
  Components are unaffected - they own their own spacing
7875
8255
  =========================== */
7876
8256
 
8257
+ .prose {
8258
+ text-align: start;
8259
+ }
8260
+
7877
8261
  .prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6 {
7878
8262
  margin-block: var(--gap-md);
7879
8263
  }
@@ -9077,7 +9461,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
9077
9461
  .breadcrumb-item {
9078
9462
  display: inline-flex;
9079
9463
  align-items: center;
9080
- gap: var(--gap-xs);
9464
+ gap: var(--gap-sm);
9081
9465
  }
9082
9466
 
9083
9467
  .breadcrumbs .separator,
@@ -9154,7 +9538,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
9154
9538
  min-height: 0;
9155
9539
  display: flex;
9156
9540
  flex-direction: column;
9157
- justify-content: space-between;
9541
+ justify-content: flex-start;
9158
9542
  gap: var(--gap-lg);
9159
9543
  /* Controlled by density system */
9160
9544
  /* Default: centered */