@donotdev/ui 0.0.11 → 0.0.12

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/dist/dndev.css CHANGED
@@ -3144,9 +3144,10 @@ em {
3144
3144
 
3145
3145
  .dndev-cta-actions {
3146
3146
  display: flex;
3147
- flex-direction: column;
3147
+ flex-direction: row;
3148
3148
  gap: var(--gap-md);
3149
3149
  justify-content: center;
3150
+
3150
3151
  }
3151
3152
 
3152
3153
  .dndev-cta-actions .dndev-interactive {
@@ -3179,13 +3180,6 @@ em {
3179
3180
  border-color: var(--foreground);
3180
3181
  }
3181
3182
 
3182
- @media (width >= 768px) {
3183
-
3184
- .dndev-cta-actions {
3185
- flex-direction: row;
3186
- }
3187
- }
3188
-
3189
3183
  /* packages/components/src/atomic/Card/Card.css */
3190
3184
 
3191
3185
  /* Card layout - grid with gap */
@@ -3635,12 +3629,10 @@ em {
3635
3629
  /* Code-specific overrides: background color, text color, and layout */
3636
3630
  display: flex;
3637
3631
  flex-direction: column;
3638
- background: var(
3639
- --muted
3640
- ); /* Override surface gradient with code-specific dark background */
3641
- color: var(
3642
- --muted-foreground
3643
- ); /* Override surface text color for dark background */
3632
+ background: var(--muted);
3633
+ /* Override surface gradient with code-specific dark background */
3634
+ color: var(--muted-foreground);
3635
+ /* Override surface text color for dark background */
3644
3636
  overflow: hidden;
3645
3637
  font-family: var(--font-mono);
3646
3638
  font-size: var(--font-size-sm);
@@ -3714,8 +3706,6 @@ em {
3714
3706
  white-space: pre;
3715
3707
  overflow-x: auto;
3716
3708
  overflow-y: visible;
3717
- min-width: -moz-min-content;
3718
- min-width: min-content;
3719
3709
  }
3720
3710
 
3721
3711
  .dndev-code-pre[data-compact='true'] {
@@ -3732,16 +3722,19 @@ em {
3732
3722
  user-select: none;
3733
3723
  padding-inline-end: var(--gap-md);
3734
3724
  text-align: end;
3735
- font-size: inherit; /* Match parent code font-size */
3725
+ font-size: inherit;
3726
+ /* Match parent code font-size */
3736
3727
  opacity: var(--opacity-muted);
3737
3728
  width: 3rem;
3738
3729
  flex-shrink: 0;
3739
3730
  color: var(--muted-foreground);
3740
- line-height: 1.5; /* Consistent line height */
3731
+ line-height: 1.5;
3732
+ /* Consistent line height */
3741
3733
  }
3742
3734
 
3743
3735
  .dndev-code-line-number {
3744
- line-height: inherit; /* Inherit from parent */
3736
+ line-height: inherit;
3737
+ /* Inherit from parent */
3745
3738
  }
3746
3739
 
3747
3740
  .dndev-code-code {
@@ -3749,8 +3742,10 @@ em {
3749
3742
  min-width: 0;
3750
3743
  text-align: start;
3751
3744
  display: block;
3752
- line-height: 1.5; /* Match line numbers */
3753
- font-size: var(--font-size-sm); /* Explicit match with line numbers */
3745
+ line-height: 1.5;
3746
+ /* Match line numbers */
3747
+ font-size: var(--font-size-sm);
3748
+ /* Explicit match with line numbers */
3754
3749
  }
3755
3750
 
3756
3751
  /* Ensure shiki-generated code respects line-height AND font-size */
@@ -3758,7 +3753,8 @@ em {
3758
3753
  .dndev-code-code pre,
3759
3754
  .dndev-code-code code {
3760
3755
  line-height: inherit;
3761
- font-size: inherit; /* Match parent font-size */
3756
+ font-size: inherit;
3757
+ /* Match parent font-size */
3762
3758
  }
3763
3759
 
3764
3760
  /* packages/components/src/atomic/Command/Command.css */
@@ -9077,9 +9073,14 @@ h4[data-variant='code'] {
9077
9073
  --sidebar-resize-handle-width: 6px;
9078
9074
 
9079
9075
  /* Content width - max constraint only, grid handles sidebar space */
9080
- /* PageContainer sets --max-content-width, main's 1fr handles available space */
9076
+ /* PageContainer sets --max-content-width per variant, components use --content-width */
9077
+ --max-content-width: 100%;
9081
9078
  --content-width: var(--max-content-width, 100%);
9082
9079
 
9080
+ /* Narrow content (mobile-first PWA, app-like single column) - single source of truth */
9081
+ --narrow-content-max: 37.5rem;
9082
+ /* 600px */
9083
+
9083
9084
  /* Content Area Calculations */
9084
9085
  /* Header content area (excludes sidebar on some presets) */
9085
9086
  --header-content-width: 100%;
@@ -9189,8 +9190,7 @@ main[role='main'][data-routing-animation='fade'] {
9189
9190
  /* Slide animation - keyframes handle opacity 0→1 */
9190
9191
 
9191
9192
  main[role='main'][data-routing-animation='slide'] {
9192
- animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in
9193
- forwards;
9193
+ animation: routeSlideIn var(--routing-default-duration, 300ms) ease-in forwards;
9194
9194
  }
9195
9195
 
9196
9196
  /* No animation - already visible by default, explicit for clarity */
@@ -9204,15 +9204,11 @@ main[role='main'][data-routing-animation='none'] {
9204
9204
 
9205
9205
  @media (width < 768px) {
9206
9206
  main[role='main'][data-routing-animation='fade'] {
9207
- animation: routeFadeIn
9208
- var(--routing-mobile-duration, var(--routing-default-duration, 300ms))
9209
- ease-in forwards;
9207
+ animation: routeFadeIn var(--routing-mobile-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9210
9208
  }
9211
9209
 
9212
9210
  main[role='main'][data-routing-animation='slide'] {
9213
- animation: routeSlideIn
9214
- var(--routing-mobile-duration, var(--routing-default-duration, 300ms))
9215
- ease-in forwards;
9211
+ animation: routeSlideIn var(--routing-mobile-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9216
9212
  }
9217
9213
  }
9218
9214
 
@@ -9220,15 +9216,11 @@ main[role='main'][data-routing-animation='none'] {
9220
9216
 
9221
9217
  @media (width >=768px) and (width <=1023px) {
9222
9218
  main[role='main'][data-routing-animation='fade'] {
9223
- animation: routeFadeIn
9224
- var(--routing-tablet-duration, var(--routing-default-duration, 300ms))
9225
- ease-in forwards;
9219
+ animation: routeFadeIn var(--routing-tablet-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9226
9220
  }
9227
9221
 
9228
9222
  main[role='main'][data-routing-animation='slide'] {
9229
- animation: routeSlideIn
9230
- var(--routing-tablet-duration, var(--routing-default-duration, 300ms))
9231
- ease-in forwards;
9223
+ animation: routeSlideIn var(--routing-tablet-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9232
9224
  }
9233
9225
  }
9234
9226
 
@@ -9236,15 +9228,11 @@ main[role='main'][data-routing-animation='none'] {
9236
9228
 
9237
9229
  @media (width >=1024px) and (width <=1439px) {
9238
9230
  main[role='main'][data-routing-animation='fade'] {
9239
- animation: routeFadeIn
9240
- var(--routing-desktop-duration, var(--routing-default-duration, 300ms))
9241
- ease-in forwards;
9231
+ animation: routeFadeIn var(--routing-desktop-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9242
9232
  }
9243
9233
 
9244
9234
  main[role='main'][data-routing-animation='slide'] {
9245
- animation: routeSlideIn
9246
- var(--routing-desktop-duration, var(--routing-default-duration, 300ms))
9247
- ease-in forwards;
9235
+ animation: routeSlideIn var(--routing-desktop-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9248
9236
  }
9249
9237
  }
9250
9238
 
@@ -9252,15 +9240,11 @@ main[role='main'][data-routing-animation='none'] {
9252
9240
 
9253
9241
  @media (width >=1440px) {
9254
9242
  main[role='main'][data-routing-animation='fade'] {
9255
- animation: routeFadeIn
9256
- var(--routing-wide-duration, var(--routing-default-duration, 300ms))
9257
- ease-in forwards;
9243
+ animation: routeFadeIn var(--routing-wide-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9258
9244
  }
9259
9245
 
9260
9246
  main[role='main'][data-routing-animation='slide'] {
9261
- animation: routeSlideIn
9262
- var(--routing-wide-duration, var(--routing-default-duration, 300ms))
9263
- ease-in forwards;
9247
+ animation: routeSlideIn var(--routing-wide-duration, var(--routing-default-duration, 300ms)) ease-in forwards;
9264
9248
  }
9265
9249
  }
9266
9250
 
@@ -9284,6 +9268,7 @@ main[role='main'][data-routing-animation='none'] {
9284
9268
  /* Mobile/Tablet: Hide sidebars - WCAG & Lighthouse best practices */
9285
9269
 
9286
9270
  @media (width <=1023px) {
9271
+
9287
9272
  .dndev-layout aside[role='navigation'].sidebar,
9288
9273
  aside[role='navigation'].sidebar {
9289
9274
  display: none !important;
@@ -9307,57 +9292,59 @@ main[role='main'][data-routing-animation='none'] {
9307
9292
  'header header'
9308
9293
  'sidebar main'
9309
9294
  'footer footer';
9310
- grid-template-rows: var(--header-height) 1fr minmax(
9311
- var(--footer-height),
9312
- auto
9313
- );
9295
+ grid-template-rows: var(--header-height) 1fr minmax(var(--footer-height),
9296
+ auto);
9314
9297
  grid-template-columns: var(--sidebar-width) 1fr;
9315
-
9316
- /* Mobile: Grid scrolls instead of main - footer scrolls with content */
9317
9298
  }
9318
9299
 
9319
- @media (width <=1023px) {
9300
+ /* Footer scroll mode: grid scrolls, footer scrolls with content */
9320
9301
 
9321
- .dndev-layout {
9322
- overflow-y: auto;
9323
- overflow-x: hidden;
9324
- /* Keep footer row - grid scrolls so footer scrolls with content */
9325
- grid-template-areas:
9326
- 'header header'
9327
- 'sidebar main'
9328
- 'footer footer';
9329
- grid-template-rows: var(--header-height) min-content auto;
9330
- }
9331
- }
9332
-
9333
- /* Footer scroll mode - grid scrolls, footer scrolls with content (opt-in for desktop) */
9302
+ /* Desktop: opt-in via data-footer-mode="scroll" */
9334
9303
 
9335
9304
  .dndev-layout[data-footer-mode='scroll'] {
9336
9305
  overflow-y: auto;
9337
9306
  overflow-x: hidden;
9338
- grid-template-rows: var(--header-height) min-content auto;
9307
+ grid-template-rows: var(--header-height) 1fr auto;
9339
9308
  }
9340
9309
 
9341
- .dndev-layout[data-footer-mode='scroll'] header[role='banner'] {
9342
- position: sticky;
9343
- top: 0;
9344
- }
9310
+ .dndev-layout[data-footer-mode='scroll'] header[role='banner'] { position: sticky; top: 0; }
9345
9311
 
9346
- .dndev-layout[data-footer-mode='scroll'] main[role='main'] {
9347
- overflow: visible;
9348
- min-height: -moz-min-content;
9349
- min-height: min-content;
9350
- }
9312
+ .dndev-layout[data-footer-mode='scroll'] aside.sidebar[role='navigation'] {
9313
+ position: sticky;
9314
+ top: var(--header-height);
9315
+ height: calc(100dvh - var(--header-height));
9316
+ align-self: start;
9317
+ }
9351
9318
 
9352
- .dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo'] {
9353
- height: auto;
9354
- }
9319
+ .dndev-layout[data-footer-mode='scroll'] main[role='main'] { overflow-y: visible; overflow-x: hidden; }
9355
9320
 
9356
- :is(.dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo']) > * {
9321
+ .dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo'] {
9322
+ grid-column: 2 / -1;
9357
9323
  height: auto;
9358
- min-height: var(--footer-height);
9359
9324
  }
9360
9325
 
9326
+ :is(.dndev-layout[data-footer-mode='scroll'] footer[role='contentinfo']) > * { height: auto; min-height: var(--footer-height); }
9327
+
9328
+ /* Mobile: footer scroll mode ON by default (same rules) */
9329
+
9330
+ @media (width <=1023px) {
9331
+ .dndev-layout {
9332
+ overflow-y: auto;
9333
+ overflow-x: hidden;
9334
+ grid-template-rows: var(--header-height) 1fr auto;
9335
+ }
9336
+
9337
+ .dndev-layout header[role='banner'] { position: sticky; top: 0; }
9338
+
9339
+ .dndev-layout main[role='main'] { overflow-y: visible; overflow-x: hidden; }
9340
+
9341
+ .dndev-layout footer[role='contentinfo'] {
9342
+ height: auto;
9343
+ }
9344
+
9345
+ :is(.dndev-layout footer[role='contentinfo']) > * { height: auto; min-height: var(--footer-height); }
9346
+ }
9347
+
9361
9348
  /* Presets with no footer at all */
9362
9349
 
9363
9350
  [data-layout='moolti'] footer[role='contentinfo'],
@@ -9523,8 +9510,7 @@ aside[role='navigation'].sidebar .dndev-sidebar-resize-handle:focus-visible {
9523
9510
 
9524
9511
  /* Active drag state */
9525
9512
 
9526
- aside[role='navigation'].sidebar[data-dragging='true']
9527
- .dndev-sidebar-resize-handle {
9513
+ aside[role='navigation'].sidebar[data-dragging='true'] .dndev-sidebar-resize-handle {
9528
9514
  background: var(--primary);
9529
9515
  }
9530
9516
 
@@ -9540,10 +9526,7 @@ aside[role='navigation'].sidebar[data-dragging='true']
9540
9526
  /* Landing: AUTO display mode - compact below wide breakpoint (< 1440px) */
9541
9527
 
9542
9528
  @media (width < 1440px) {
9543
- [data-layout='landing']
9544
- header[role='banner']
9545
- [data-display='auto']
9546
- .dndev-interactive-label {
9529
+ [data-layout='landing'] header[role='banner'] [data-display='auto'] .dndev-interactive-label {
9547
9530
  display: none;
9548
9531
  }
9549
9532
  }
@@ -9716,23 +9699,13 @@ main[role='main'] {
9716
9699
  contain: layout style;
9717
9700
 
9718
9701
  /* First child after breadcrumbs grows to fill space */
9702
+
9719
9703
  }
9720
9704
 
9721
9705
  main[role='main'] > *:not(.breadcrumbs-container):first-of-type,main[role='main'] > .breadcrumbs-container + * {
9722
9706
  flex: 1 1 auto;
9723
9707
  }
9724
9708
 
9725
- /* Mobile: Grid scrolls, main doesn't */
9726
-
9727
- @media (width <=1023px) {
9728
-
9729
- main[role='main'] {
9730
- overflow: visible;
9731
- min-height: -moz-min-content;
9732
- min-height: min-content;
9733
- }
9734
- }
9735
-
9736
9709
  /* Footer: Full width by default, app presets start after sidebar */
9737
9710
 
9738
9711
  /* box-sizing: border-box ensures borders are included in height */
@@ -9854,6 +9827,7 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
9854
9827
  /* Mobile (<1024px): Show merged-bar, hide zones */
9855
9828
 
9856
9829
  @media (width <=1023px) {
9830
+
9857
9831
  /* Presets with mergedBar: top (admin, moolti, game, docs) */
9858
9832
  [data-layout='admin'] .merged-bar[data-position='top'],
9859
9833
  [data-layout='moolti'] .merged-bar[data-position='top'],
@@ -10211,32 +10185,26 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10211
10185
  /* Standard width - responsive */
10212
10186
 
10213
10187
  .dndev-container[data-variant='standard'] {
10214
- --max-content-width: 100%;
10188
+ --max-content-width: min(87.5rem, 100%);
10189
+ max-width: var(--content-width);
10190
+ /* 1480px max, but never exceeds container width */
10215
10191
  }
10216
10192
 
10217
- @media (width >=1024px) {
10218
-
10219
- .dndev-container[data-variant='standard'] {
10220
- --max-content-width: 87.5rem;
10221
- /* 1480px */
10222
- /* Padding stays: part of centering space when max-width applies */
10223
- }
10224
- }
10225
-
10226
10193
  /* Docs width - responsive */
10227
10194
 
10228
10195
  .dndev-container[data-variant='docs'] {
10229
- --max-content-width: 100%;
10196
+ --max-content-width: min(56.25rem, 100%);
10197
+ max-width: var(--content-width);
10198
+ /* 900px max, but never exceeds container width */
10230
10199
  }
10231
10200
 
10232
- @media (width >=1024px) {
10201
+ /* Narrow width - mobile-first single column (PWA, app-like on every device) */
10233
10202
 
10234
- .dndev-container[data-variant='docs'] {
10235
- --max-content-width: 56.25rem;
10236
- /* 900px */
10237
- /* Padding stays: always prevents edge touching */
10203
+ .dndev-container[data-variant='narrow'] {
10204
+ --max-content-width: min(var(--narrow-content-max), 100%);
10205
+ max-width: var(--content-width);
10206
+ /* 600px max, but never exceeds container width */
10238
10207
  }
10239
- }
10240
10208
 
10241
10209
  /* Fixed frame - fills parent exactly, prevents parent scroll */
10242
10210
 
@@ -10282,10 +10250,10 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10282
10250
 
10283
10251
  /* Breakthrough pattern: only applies inside PageContainer */
10284
10252
 
10285
- .dndev-container > .dndev-section-full-width,
10286
- .dndev-container > .dndev-cta,
10287
- .dndev-container > .dndev-hero-section,
10288
- .dndev-container > .dndev-tech-bento {
10253
+ .dndev-container>.dndev-section-full-width,
10254
+ .dndev-container>.dndev-cta,
10255
+ .dndev-container>.dndev-hero-section,
10256
+ .dndev-container>.dndev-tech-bento {
10289
10257
  /* Break out of PageContainer padding and max-width constraint */
10290
10258
  /* Account for sidebar: --sidebar-width is 0px for presets without sidebar */
10291
10259
  width: calc(100dvw - var(--sidebar-width));
@@ -10365,12 +10333,29 @@ footer[role='contentinfo'] a:not(.dndev-interactive):hover {
10365
10333
  justify-content: space-between;
10366
10334
  }
10367
10335
 
10368
- /* CTA Zone - Fixed at bottom */
10336
+ /* Narrow content wrapper - constrained by --narrow-content-max (mobile-first PWA) */
10337
+
10338
+ .dndev-game-container__content-narrow {
10339
+ width: 100%;
10340
+ max-width: var(--narrow-content-max);
10341
+ margin-inline: auto;
10342
+ min-height: 0;
10343
+ flex: 1 1 auto;
10344
+ display: flex;
10345
+ flex-direction: column;
10346
+ }
10347
+
10348
+ .dndev-game-container__content-narrow .dndev-game-container__scroll {
10349
+ width: 100%;
10350
+ }
10351
+
10352
+ /* CTA Zone - Fixed at bottom; safe area for notched devices */
10369
10353
 
10370
10354
  .dndev-game-container__cta {
10371
10355
  display: flex;
10372
10356
  flex-direction: column;
10373
10357
  padding-top: var(--gap-md);
10358
+ padding-bottom: env(safe-area-inset-bottom);
10374
10359
  border-top: 2px solid var(--border);
10375
10360
  }
10376
10361