@lilydesignsystem/themes 0.3.0 → 0.4.0

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 (46) hide show
  1. package/dist/abyss.css +80 -4
  2. package/dist/acid.css +80 -4
  3. package/dist/adobe-spectrum.css +80 -4
  4. package/dist/aqua.css +80 -4
  5. package/dist/autumn.css +80 -4
  6. package/dist/black.css +80 -4
  7. package/dist/bumblebee.css +80 -4
  8. package/dist/business.css +80 -4
  9. package/dist/caramellatte.css +80 -4
  10. package/dist/cmyk.css +80 -4
  11. package/dist/coffee.css +80 -4
  12. package/dist/corporate.css +80 -4
  13. package/dist/cupcake.css +80 -4
  14. package/dist/cyberpunk.css +80 -4
  15. package/dist/dark.css +80 -4
  16. package/dist/dim.css +80 -4
  17. package/dist/dracula.css +80 -4
  18. package/dist/emerald.css +80 -4
  19. package/dist/fantasy.css +80 -4
  20. package/dist/forest.css +80 -4
  21. package/dist/garden.css +80 -4
  22. package/dist/halloween.css +80 -4
  23. package/dist/lemonade.css +80 -4
  24. package/dist/light.css +80 -4
  25. package/dist/lofi.css +80 -4
  26. package/dist/luxury.css +80 -4
  27. package/dist/mozilla-protocol.css +80 -4
  28. package/dist/night.css +80 -4
  29. package/dist/nord.css +80 -4
  30. package/dist/pastel.css +80 -4
  31. package/dist/retro.css +80 -4
  32. package/dist/silk.css +80 -4
  33. package/dist/sunset.css +80 -4
  34. package/dist/synthwave.css +80 -4
  35. package/dist/united-kingdom-government-digital-service.css +80 -4
  36. package/dist/united-kingdom-national-health-service-england-for-patients.css +80 -4
  37. package/dist/united-kingdom-national-health-service-england-for-practitioners.css +80 -4
  38. package/dist/united-kingdom-national-health-service-scotland-for-patients.css +80 -4
  39. package/dist/united-kingdom-national-health-service-scotland-for-practitioners.css +80 -4
  40. package/dist/united-kingdom-national-health-service-wales-for-patients.css +80 -4
  41. package/dist/united-kingdom-national-health-service-wales-for-practitioners.css +80 -4
  42. package/dist/united-states-web-design-system.css +80 -4
  43. package/dist/valentine.css +80 -4
  44. package/dist/winter.css +80 -4
  45. package/dist/wireframe.css +80 -4
  46. package/package.json +1 -1
@@ -3035,6 +3035,7 @@
3035
3035
  .locale-picker,
3036
3036
  .text-size-picker,
3037
3037
  .search-picker,
3038
+ .link-picker,
3038
3039
  .share-picker,
3039
3040
  .date-time-picker
3040
3041
  ) {
@@ -3047,6 +3048,7 @@
3047
3048
  .locale-picker-button,
3048
3049
  .text-size-picker-button,
3049
3050
  .search-picker-button,
3051
+ .link-picker-button,
3050
3052
  .share-picker-button,
3051
3053
  .date-time-picker-button
3052
3054
  ) {
@@ -3082,6 +3084,7 @@
3082
3084
  .locale-picker-icon,
3083
3085
  .text-size-picker-icon,
3084
3086
  .motion-picker-icon,
3087
+ .link-picker-icon,
3085
3088
  .share-picker-icon,
3086
3089
  .search-picker-icon
3087
3090
  ) {
@@ -3140,6 +3143,31 @@
3140
3143
  background-color: var(--lily-surface-alt);
3141
3144
  }
3142
3145
 
3146
+ /* link-picker's list holds real page links (a disclosure, not a menu),
3147
+ so its items get the share list's treatment; the current page is
3148
+ marked by aria-current and shown in bold. */
3149
+ :where(.link-picker-list) > :where(.link-picker-list-item) {
3150
+ list-style: none;
3151
+ }
3152
+
3153
+ :where(.link-picker-link) {
3154
+ display: block;
3155
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3156
+ color: var(--lily-text);
3157
+ text-decoration: none;
3158
+ border-radius: var(--lily-radius-sm);
3159
+ cursor: pointer;
3160
+ }
3161
+
3162
+ :where(.link-picker-link:hover) {
3163
+ background-color: var(--lily-surface-alt);
3164
+ }
3165
+
3166
+ :where(.link-picker-link[aria-current="page"]) {
3167
+ font-weight: 600;
3168
+ background-color: var(--lily-surface-sunken);
3169
+ }
3170
+
3143
3171
  /* Copy feedback. Never display:none this — that silences the live
3144
3172
  region for screen-reader users. */
3145
3173
  :where(.share-picker-status) {
@@ -3421,6 +3449,7 @@
3421
3449
  .locale-picker-tooltip,
3422
3450
  .text-size-picker-tooltip,
3423
3451
  .motion-picker-tooltip,
3452
+ .link-picker-tooltip,
3424
3453
  .share-picker-tooltip,
3425
3454
  .search-picker-tooltip,
3426
3455
  .date-time-picker-tooltip
@@ -3445,6 +3474,7 @@
3445
3474
  .locale-picker-tooltip,
3446
3475
  .text-size-picker-tooltip,
3447
3476
  .motion-picker-tooltip,
3477
+ .link-picker-tooltip,
3448
3478
  .share-picker-tooltip,
3449
3479
  .search-picker-tooltip,
3450
3480
  .date-time-picker-tooltip
@@ -3461,6 +3491,7 @@
3461
3491
  .locale-picker-tooltip,
3462
3492
  .text-size-picker-tooltip,
3463
3493
  .motion-picker-tooltip,
3494
+ .link-picker-tooltip,
3464
3495
  .share-picker-tooltip,
3465
3496
  .search-picker-tooltip,
3466
3497
  .date-time-picker-tooltip
@@ -3513,6 +3544,8 @@
3513
3544
  .theme-picker-list,
3514
3545
  .locale-picker-list,
3515
3546
  .text-size-picker-list,
3547
+ .motion-picker-list,
3548
+ .link-picker-list,
3516
3549
  .share-picker-list,
3517
3550
  .search-picker-panel
3518
3551
  ) {
@@ -3538,17 +3571,60 @@
3538
3571
  .theme-picker-list,
3539
3572
  .locale-picker-list,
3540
3573
  .text-size-picker-list,
3574
+ .motion-picker-list,
3575
+ .link-picker-list,
3541
3576
  .share-picker-list,
3542
3577
  .search-picker-panel
3543
3578
  )[hidden] {
3544
3579
  display: none;
3545
3580
  }
3546
3581
 
3547
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
3582
+ /* Popups open under their button, aligned to its start edge, and flip to
3583
+ its end edge (or above it) when they would run off the viewport. A header
3584
+ picker near the right edge otherwise overflows, and focusing the popup
3585
+ scrolls the whole page sideways. `position: fixed` makes the viewport the
3586
+ containing block that the flip fallbacks are checked against; browsers
3587
+ without anchor positioning keep the absolute placement above. */
3588
+ @supports (position-area: block-end) {
3589
+ :where(.theme-picker) { anchor-name: --lily-theme-picker; }
3590
+ :where(.locale-picker) { anchor-name: --lily-locale-picker; }
3591
+ :where(.text-size-picker) { anchor-name: --lily-text-size-picker; }
3592
+ :where(.motion-picker) { anchor-name: --lily-motion-picker; }
3593
+ :where(.link-picker) { anchor-name: --lily-link-picker; }
3594
+ :where(.share-picker) { anchor-name: --lily-share-picker; }
3595
+ :where(.search-picker) { anchor-name: --lily-search-picker; }
3596
+ :where(.theme-picker-list) { position-anchor: --lily-theme-picker; }
3597
+ :where(.locale-picker-list) { position-anchor: --lily-locale-picker; }
3598
+ :where(.text-size-picker-list) { position-anchor: --lily-text-size-picker; }
3599
+ :where(.motion-picker-list) { position-anchor: --lily-motion-picker; }
3600
+ :where(.link-picker-list) { position-anchor: --lily-link-picker; }
3601
+ :where(.share-picker-list) { position-anchor: --lily-share-picker; }
3602
+ :where(.search-picker-panel) { position-anchor: --lily-search-picker; }
3603
+ :where(
3604
+ .theme-picker-list,
3605
+ .locale-picker-list,
3606
+ .text-size-picker-list,
3607
+ .motion-picker-list,
3608
+ .link-picker-list,
3609
+ .share-picker-list,
3610
+ .search-picker-panel
3611
+ ) {
3612
+ position: fixed;
3613
+ inset: auto;
3614
+ position-area: block-end span-inline-end;
3615
+ position-try-fallbacks: flip-inline, flip-block, flip-block flip-inline;
3616
+ min-width: 0;
3617
+ width: max-content;
3618
+ max-width: calc(100vw - 1rem);
3619
+ }
3620
+ }
3621
+
3622
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
3548
3623
  > :where(
3549
3624
  .theme-picker-option,
3550
3625
  .locale-picker-option,
3551
- .text-size-picker-option
3626
+ .text-size-picker-option,
3627
+ .motion-picker-option
3552
3628
  ) {
3553
3629
  padding: var(--lily-space-xs) var(--lily-space-sm);
3554
3630
  border-radius: var(--lily-radius-sm);
@@ -3557,7 +3633,7 @@
3557
3633
 
3558
3634
  /* data-active is the keyboard cursor (aria-activedescendant); focus
3559
3635
  stays on the listbox, so this is the only visible cue for it. */
3560
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
3636
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
3561
3637
  > :where([data-active]) {
3562
3638
  background-color: var(--lily-surface-alt);
3563
3639
  outline: var(--lily-focus-ring);
@@ -3566,7 +3642,7 @@
3566
3642
 
3567
3643
  /* aria-selected marks the applied theme/locale, which is not the
3568
3644
  same thing as the keyboard cursor. Both can be visible at once. */
3569
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
3645
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
3570
3646
  > :where([aria-selected="true"]) {
3571
3647
  font-weight: 600;
3572
3648
  background-color: var(--lily-surface-sunken);
@@ -2079,6 +2079,7 @@
2079
2079
  .locale-picker,
2080
2080
  .text-size-picker,
2081
2081
  .search-picker,
2082
+ .link-picker,
2082
2083
  .share-picker,
2083
2084
  .date-time-picker
2084
2085
  ) {
@@ -2091,6 +2092,7 @@
2091
2092
  .locale-picker-button,
2092
2093
  .text-size-picker-button,
2093
2094
  .search-picker-button,
2095
+ .link-picker-button,
2094
2096
  .share-picker-button,
2095
2097
  .date-time-picker-button
2096
2098
  ) {
@@ -2126,6 +2128,7 @@
2126
2128
  .locale-picker-icon,
2127
2129
  .text-size-picker-icon,
2128
2130
  .motion-picker-icon,
2131
+ .link-picker-icon,
2129
2132
  .share-picker-icon,
2130
2133
  .search-picker-icon
2131
2134
  ) {
@@ -2184,6 +2187,31 @@
2184
2187
  background-color: var(--lily-surface-alt);
2185
2188
  }
2186
2189
 
2190
+ /* link-picker's list holds real page links (a disclosure, not a menu),
2191
+ so its items get the share list's treatment; the current page is
2192
+ marked by aria-current and shown in bold. */
2193
+ :where(.link-picker-list) > :where(.link-picker-list-item) {
2194
+ list-style: none;
2195
+ }
2196
+
2197
+ :where(.link-picker-link) {
2198
+ display: block;
2199
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2200
+ color: var(--lily-text);
2201
+ text-decoration: none;
2202
+ border-radius: var(--lily-radius-sm);
2203
+ cursor: pointer;
2204
+ }
2205
+
2206
+ :where(.link-picker-link:hover) {
2207
+ background-color: var(--lily-surface-alt);
2208
+ }
2209
+
2210
+ :where(.link-picker-link[aria-current="page"]) {
2211
+ font-weight: 600;
2212
+ background-color: var(--lily-surface-sunken);
2213
+ }
2214
+
2187
2215
  /* Copy feedback. Never display:none this — that silences the live
2188
2216
  region for screen-reader users. */
2189
2217
  :where(.share-picker-status) {
@@ -2465,6 +2493,7 @@
2465
2493
  .locale-picker-tooltip,
2466
2494
  .text-size-picker-tooltip,
2467
2495
  .motion-picker-tooltip,
2496
+ .link-picker-tooltip,
2468
2497
  .share-picker-tooltip,
2469
2498
  .search-picker-tooltip,
2470
2499
  .date-time-picker-tooltip
@@ -2489,6 +2518,7 @@
2489
2518
  .locale-picker-tooltip,
2490
2519
  .text-size-picker-tooltip,
2491
2520
  .motion-picker-tooltip,
2521
+ .link-picker-tooltip,
2492
2522
  .share-picker-tooltip,
2493
2523
  .search-picker-tooltip,
2494
2524
  .date-time-picker-tooltip
@@ -2505,6 +2535,7 @@
2505
2535
  .locale-picker-tooltip,
2506
2536
  .text-size-picker-tooltip,
2507
2537
  .motion-picker-tooltip,
2538
+ .link-picker-tooltip,
2508
2539
  .share-picker-tooltip,
2509
2540
  .search-picker-tooltip,
2510
2541
  .date-time-picker-tooltip
@@ -2557,6 +2588,8 @@
2557
2588
  .theme-picker-list,
2558
2589
  .locale-picker-list,
2559
2590
  .text-size-picker-list,
2591
+ .motion-picker-list,
2592
+ .link-picker-list,
2560
2593
  .share-picker-list,
2561
2594
  .search-picker-panel
2562
2595
  ) {
@@ -2582,17 +2615,60 @@
2582
2615
  .theme-picker-list,
2583
2616
  .locale-picker-list,
2584
2617
  .text-size-picker-list,
2618
+ .motion-picker-list,
2619
+ .link-picker-list,
2585
2620
  .share-picker-list,
2586
2621
  .search-picker-panel
2587
2622
  )[hidden] {
2588
2623
  display: none;
2589
2624
  }
2590
2625
 
2591
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2626
+ /* Popups open under their button, aligned to its start edge, and flip to
2627
+ its end edge (or above it) when they would run off the viewport. A header
2628
+ picker near the right edge otherwise overflows, and focusing the popup
2629
+ scrolls the whole page sideways. `position: fixed` makes the viewport the
2630
+ containing block that the flip fallbacks are checked against; browsers
2631
+ without anchor positioning keep the absolute placement above. */
2632
+ @supports (position-area: block-end) {
2633
+ :where(.theme-picker) { anchor-name: --lily-theme-picker; }
2634
+ :where(.locale-picker) { anchor-name: --lily-locale-picker; }
2635
+ :where(.text-size-picker) { anchor-name: --lily-text-size-picker; }
2636
+ :where(.motion-picker) { anchor-name: --lily-motion-picker; }
2637
+ :where(.link-picker) { anchor-name: --lily-link-picker; }
2638
+ :where(.share-picker) { anchor-name: --lily-share-picker; }
2639
+ :where(.search-picker) { anchor-name: --lily-search-picker; }
2640
+ :where(.theme-picker-list) { position-anchor: --lily-theme-picker; }
2641
+ :where(.locale-picker-list) { position-anchor: --lily-locale-picker; }
2642
+ :where(.text-size-picker-list) { position-anchor: --lily-text-size-picker; }
2643
+ :where(.motion-picker-list) { position-anchor: --lily-motion-picker; }
2644
+ :where(.link-picker-list) { position-anchor: --lily-link-picker; }
2645
+ :where(.share-picker-list) { position-anchor: --lily-share-picker; }
2646
+ :where(.search-picker-panel) { position-anchor: --lily-search-picker; }
2647
+ :where(
2648
+ .theme-picker-list,
2649
+ .locale-picker-list,
2650
+ .text-size-picker-list,
2651
+ .motion-picker-list,
2652
+ .link-picker-list,
2653
+ .share-picker-list,
2654
+ .search-picker-panel
2655
+ ) {
2656
+ position: fixed;
2657
+ inset: auto;
2658
+ position-area: block-end span-inline-end;
2659
+ position-try-fallbacks: flip-inline, flip-block, flip-block flip-inline;
2660
+ min-width: 0;
2661
+ width: max-content;
2662
+ max-width: calc(100vw - 1rem);
2663
+ }
2664
+ }
2665
+
2666
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2592
2667
  > :where(
2593
2668
  .theme-picker-option,
2594
2669
  .locale-picker-option,
2595
- .text-size-picker-option
2670
+ .text-size-picker-option,
2671
+ .motion-picker-option
2596
2672
  ) {
2597
2673
  padding: var(--lily-space-xs) var(--lily-space-sm);
2598
2674
  border-radius: var(--lily-radius-sm);
@@ -2601,7 +2677,7 @@
2601
2677
 
2602
2678
  /* data-active is the keyboard cursor (aria-activedescendant); focus
2603
2679
  stays on the listbox, so this is the only visible cue for it. */
2604
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2680
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2605
2681
  > :where([data-active]) {
2606
2682
  background-color: var(--lily-surface-alt);
2607
2683
  outline: var(--lily-focus-ring);
@@ -2610,7 +2686,7 @@
2610
2686
 
2611
2687
  /* aria-selected marks the applied theme/locale, which is not the
2612
2688
  same thing as the keyboard cursor. Both can be visible at once. */
2613
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2689
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2614
2690
  > :where([aria-selected="true"]) {
2615
2691
  font-weight: 600;
2616
2692
  background-color: var(--lily-surface-sunken);
@@ -2079,6 +2079,7 @@
2079
2079
  .locale-picker,
2080
2080
  .text-size-picker,
2081
2081
  .search-picker,
2082
+ .link-picker,
2082
2083
  .share-picker,
2083
2084
  .date-time-picker
2084
2085
  ) {
@@ -2091,6 +2092,7 @@
2091
2092
  .locale-picker-button,
2092
2093
  .text-size-picker-button,
2093
2094
  .search-picker-button,
2095
+ .link-picker-button,
2094
2096
  .share-picker-button,
2095
2097
  .date-time-picker-button
2096
2098
  ) {
@@ -2126,6 +2128,7 @@
2126
2128
  .locale-picker-icon,
2127
2129
  .text-size-picker-icon,
2128
2130
  .motion-picker-icon,
2131
+ .link-picker-icon,
2129
2132
  .share-picker-icon,
2130
2133
  .search-picker-icon
2131
2134
  ) {
@@ -2184,6 +2187,31 @@
2184
2187
  background-color: var(--lily-surface-alt);
2185
2188
  }
2186
2189
 
2190
+ /* link-picker's list holds real page links (a disclosure, not a menu),
2191
+ so its items get the share list's treatment; the current page is
2192
+ marked by aria-current and shown in bold. */
2193
+ :where(.link-picker-list) > :where(.link-picker-list-item) {
2194
+ list-style: none;
2195
+ }
2196
+
2197
+ :where(.link-picker-link) {
2198
+ display: block;
2199
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2200
+ color: var(--lily-text);
2201
+ text-decoration: none;
2202
+ border-radius: var(--lily-radius-sm);
2203
+ cursor: pointer;
2204
+ }
2205
+
2206
+ :where(.link-picker-link:hover) {
2207
+ background-color: var(--lily-surface-alt);
2208
+ }
2209
+
2210
+ :where(.link-picker-link[aria-current="page"]) {
2211
+ font-weight: 600;
2212
+ background-color: var(--lily-surface-sunken);
2213
+ }
2214
+
2187
2215
  /* Copy feedback. Never display:none this — that silences the live
2188
2216
  region for screen-reader users. */
2189
2217
  :where(.share-picker-status) {
@@ -2465,6 +2493,7 @@
2465
2493
  .locale-picker-tooltip,
2466
2494
  .text-size-picker-tooltip,
2467
2495
  .motion-picker-tooltip,
2496
+ .link-picker-tooltip,
2468
2497
  .share-picker-tooltip,
2469
2498
  .search-picker-tooltip,
2470
2499
  .date-time-picker-tooltip
@@ -2489,6 +2518,7 @@
2489
2518
  .locale-picker-tooltip,
2490
2519
  .text-size-picker-tooltip,
2491
2520
  .motion-picker-tooltip,
2521
+ .link-picker-tooltip,
2492
2522
  .share-picker-tooltip,
2493
2523
  .search-picker-tooltip,
2494
2524
  .date-time-picker-tooltip
@@ -2505,6 +2535,7 @@
2505
2535
  .locale-picker-tooltip,
2506
2536
  .text-size-picker-tooltip,
2507
2537
  .motion-picker-tooltip,
2538
+ .link-picker-tooltip,
2508
2539
  .share-picker-tooltip,
2509
2540
  .search-picker-tooltip,
2510
2541
  .date-time-picker-tooltip
@@ -2557,6 +2588,8 @@
2557
2588
  .theme-picker-list,
2558
2589
  .locale-picker-list,
2559
2590
  .text-size-picker-list,
2591
+ .motion-picker-list,
2592
+ .link-picker-list,
2560
2593
  .share-picker-list,
2561
2594
  .search-picker-panel
2562
2595
  ) {
@@ -2582,17 +2615,60 @@
2582
2615
  .theme-picker-list,
2583
2616
  .locale-picker-list,
2584
2617
  .text-size-picker-list,
2618
+ .motion-picker-list,
2619
+ .link-picker-list,
2585
2620
  .share-picker-list,
2586
2621
  .search-picker-panel
2587
2622
  )[hidden] {
2588
2623
  display: none;
2589
2624
  }
2590
2625
 
2591
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2626
+ /* Popups open under their button, aligned to its start edge, and flip to
2627
+ its end edge (or above it) when they would run off the viewport. A header
2628
+ picker near the right edge otherwise overflows, and focusing the popup
2629
+ scrolls the whole page sideways. `position: fixed` makes the viewport the
2630
+ containing block that the flip fallbacks are checked against; browsers
2631
+ without anchor positioning keep the absolute placement above. */
2632
+ @supports (position-area: block-end) {
2633
+ :where(.theme-picker) { anchor-name: --lily-theme-picker; }
2634
+ :where(.locale-picker) { anchor-name: --lily-locale-picker; }
2635
+ :where(.text-size-picker) { anchor-name: --lily-text-size-picker; }
2636
+ :where(.motion-picker) { anchor-name: --lily-motion-picker; }
2637
+ :where(.link-picker) { anchor-name: --lily-link-picker; }
2638
+ :where(.share-picker) { anchor-name: --lily-share-picker; }
2639
+ :where(.search-picker) { anchor-name: --lily-search-picker; }
2640
+ :where(.theme-picker-list) { position-anchor: --lily-theme-picker; }
2641
+ :where(.locale-picker-list) { position-anchor: --lily-locale-picker; }
2642
+ :where(.text-size-picker-list) { position-anchor: --lily-text-size-picker; }
2643
+ :where(.motion-picker-list) { position-anchor: --lily-motion-picker; }
2644
+ :where(.link-picker-list) { position-anchor: --lily-link-picker; }
2645
+ :where(.share-picker-list) { position-anchor: --lily-share-picker; }
2646
+ :where(.search-picker-panel) { position-anchor: --lily-search-picker; }
2647
+ :where(
2648
+ .theme-picker-list,
2649
+ .locale-picker-list,
2650
+ .text-size-picker-list,
2651
+ .motion-picker-list,
2652
+ .link-picker-list,
2653
+ .share-picker-list,
2654
+ .search-picker-panel
2655
+ ) {
2656
+ position: fixed;
2657
+ inset: auto;
2658
+ position-area: block-end span-inline-end;
2659
+ position-try-fallbacks: flip-inline, flip-block, flip-block flip-inline;
2660
+ min-width: 0;
2661
+ width: max-content;
2662
+ max-width: calc(100vw - 1rem);
2663
+ }
2664
+ }
2665
+
2666
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2592
2667
  > :where(
2593
2668
  .theme-picker-option,
2594
2669
  .locale-picker-option,
2595
- .text-size-picker-option
2670
+ .text-size-picker-option,
2671
+ .motion-picker-option
2596
2672
  ) {
2597
2673
  padding: var(--lily-space-xs) var(--lily-space-sm);
2598
2674
  border-radius: var(--lily-radius-sm);
@@ -2601,7 +2677,7 @@
2601
2677
 
2602
2678
  /* data-active is the keyboard cursor (aria-activedescendant); focus
2603
2679
  stays on the listbox, so this is the only visible cue for it. */
2604
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2680
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2605
2681
  > :where([data-active]) {
2606
2682
  background-color: var(--lily-surface-alt);
2607
2683
  outline: var(--lily-focus-ring);
@@ -2610,7 +2686,7 @@
2610
2686
 
2611
2687
  /* aria-selected marks the applied theme/locale, which is not the
2612
2688
  same thing as the keyboard cursor. Both can be visible at once. */
2613
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2689
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2614
2690
  > :where([aria-selected="true"]) {
2615
2691
  font-weight: 600;
2616
2692
  background-color: var(--lily-surface-sunken);
package/dist/winter.css CHANGED
@@ -2079,6 +2079,7 @@
2079
2079
  .locale-picker,
2080
2080
  .text-size-picker,
2081
2081
  .search-picker,
2082
+ .link-picker,
2082
2083
  .share-picker,
2083
2084
  .date-time-picker
2084
2085
  ) {
@@ -2091,6 +2092,7 @@
2091
2092
  .locale-picker-button,
2092
2093
  .text-size-picker-button,
2093
2094
  .search-picker-button,
2095
+ .link-picker-button,
2094
2096
  .share-picker-button,
2095
2097
  .date-time-picker-button
2096
2098
  ) {
@@ -2126,6 +2128,7 @@
2126
2128
  .locale-picker-icon,
2127
2129
  .text-size-picker-icon,
2128
2130
  .motion-picker-icon,
2131
+ .link-picker-icon,
2129
2132
  .share-picker-icon,
2130
2133
  .search-picker-icon
2131
2134
  ) {
@@ -2184,6 +2187,31 @@
2184
2187
  background-color: var(--lily-surface-alt);
2185
2188
  }
2186
2189
 
2190
+ /* link-picker's list holds real page links (a disclosure, not a menu),
2191
+ so its items get the share list's treatment; the current page is
2192
+ marked by aria-current and shown in bold. */
2193
+ :where(.link-picker-list) > :where(.link-picker-list-item) {
2194
+ list-style: none;
2195
+ }
2196
+
2197
+ :where(.link-picker-link) {
2198
+ display: block;
2199
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2200
+ color: var(--lily-text);
2201
+ text-decoration: none;
2202
+ border-radius: var(--lily-radius-sm);
2203
+ cursor: pointer;
2204
+ }
2205
+
2206
+ :where(.link-picker-link:hover) {
2207
+ background-color: var(--lily-surface-alt);
2208
+ }
2209
+
2210
+ :where(.link-picker-link[aria-current="page"]) {
2211
+ font-weight: 600;
2212
+ background-color: var(--lily-surface-sunken);
2213
+ }
2214
+
2187
2215
  /* Copy feedback. Never display:none this — that silences the live
2188
2216
  region for screen-reader users. */
2189
2217
  :where(.share-picker-status) {
@@ -2465,6 +2493,7 @@
2465
2493
  .locale-picker-tooltip,
2466
2494
  .text-size-picker-tooltip,
2467
2495
  .motion-picker-tooltip,
2496
+ .link-picker-tooltip,
2468
2497
  .share-picker-tooltip,
2469
2498
  .search-picker-tooltip,
2470
2499
  .date-time-picker-tooltip
@@ -2489,6 +2518,7 @@
2489
2518
  .locale-picker-tooltip,
2490
2519
  .text-size-picker-tooltip,
2491
2520
  .motion-picker-tooltip,
2521
+ .link-picker-tooltip,
2492
2522
  .share-picker-tooltip,
2493
2523
  .search-picker-tooltip,
2494
2524
  .date-time-picker-tooltip
@@ -2505,6 +2535,7 @@
2505
2535
  .locale-picker-tooltip,
2506
2536
  .text-size-picker-tooltip,
2507
2537
  .motion-picker-tooltip,
2538
+ .link-picker-tooltip,
2508
2539
  .share-picker-tooltip,
2509
2540
  .search-picker-tooltip,
2510
2541
  .date-time-picker-tooltip
@@ -2557,6 +2588,8 @@
2557
2588
  .theme-picker-list,
2558
2589
  .locale-picker-list,
2559
2590
  .text-size-picker-list,
2591
+ .motion-picker-list,
2592
+ .link-picker-list,
2560
2593
  .share-picker-list,
2561
2594
  .search-picker-panel
2562
2595
  ) {
@@ -2582,17 +2615,60 @@
2582
2615
  .theme-picker-list,
2583
2616
  .locale-picker-list,
2584
2617
  .text-size-picker-list,
2618
+ .motion-picker-list,
2619
+ .link-picker-list,
2585
2620
  .share-picker-list,
2586
2621
  .search-picker-panel
2587
2622
  )[hidden] {
2588
2623
  display: none;
2589
2624
  }
2590
2625
 
2591
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2626
+ /* Popups open under their button, aligned to its start edge, and flip to
2627
+ its end edge (or above it) when they would run off the viewport. A header
2628
+ picker near the right edge otherwise overflows, and focusing the popup
2629
+ scrolls the whole page sideways. `position: fixed` makes the viewport the
2630
+ containing block that the flip fallbacks are checked against; browsers
2631
+ without anchor positioning keep the absolute placement above. */
2632
+ @supports (position-area: block-end) {
2633
+ :where(.theme-picker) { anchor-name: --lily-theme-picker; }
2634
+ :where(.locale-picker) { anchor-name: --lily-locale-picker; }
2635
+ :where(.text-size-picker) { anchor-name: --lily-text-size-picker; }
2636
+ :where(.motion-picker) { anchor-name: --lily-motion-picker; }
2637
+ :where(.link-picker) { anchor-name: --lily-link-picker; }
2638
+ :where(.share-picker) { anchor-name: --lily-share-picker; }
2639
+ :where(.search-picker) { anchor-name: --lily-search-picker; }
2640
+ :where(.theme-picker-list) { position-anchor: --lily-theme-picker; }
2641
+ :where(.locale-picker-list) { position-anchor: --lily-locale-picker; }
2642
+ :where(.text-size-picker-list) { position-anchor: --lily-text-size-picker; }
2643
+ :where(.motion-picker-list) { position-anchor: --lily-motion-picker; }
2644
+ :where(.link-picker-list) { position-anchor: --lily-link-picker; }
2645
+ :where(.share-picker-list) { position-anchor: --lily-share-picker; }
2646
+ :where(.search-picker-panel) { position-anchor: --lily-search-picker; }
2647
+ :where(
2648
+ .theme-picker-list,
2649
+ .locale-picker-list,
2650
+ .text-size-picker-list,
2651
+ .motion-picker-list,
2652
+ .link-picker-list,
2653
+ .share-picker-list,
2654
+ .search-picker-panel
2655
+ ) {
2656
+ position: fixed;
2657
+ inset: auto;
2658
+ position-area: block-end span-inline-end;
2659
+ position-try-fallbacks: flip-inline, flip-block, flip-block flip-inline;
2660
+ min-width: 0;
2661
+ width: max-content;
2662
+ max-width: calc(100vw - 1rem);
2663
+ }
2664
+ }
2665
+
2666
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2592
2667
  > :where(
2593
2668
  .theme-picker-option,
2594
2669
  .locale-picker-option,
2595
- .text-size-picker-option
2670
+ .text-size-picker-option,
2671
+ .motion-picker-option
2596
2672
  ) {
2597
2673
  padding: var(--lily-space-xs) var(--lily-space-sm);
2598
2674
  border-radius: var(--lily-radius-sm);
@@ -2601,7 +2677,7 @@
2601
2677
 
2602
2678
  /* data-active is the keyboard cursor (aria-activedescendant); focus
2603
2679
  stays on the listbox, so this is the only visible cue for it. */
2604
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2680
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2605
2681
  > :where([data-active]) {
2606
2682
  background-color: var(--lily-surface-alt);
2607
2683
  outline: var(--lily-focus-ring);
@@ -2610,7 +2686,7 @@
2610
2686
 
2611
2687
  /* aria-selected marks the applied theme/locale, which is not the
2612
2688
  same thing as the keyboard cursor. Both can be visible at once. */
2613
- :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list)
2689
+ :where(.theme-picker-list, .locale-picker-list, .text-size-picker-list, .motion-picker-list)
2614
2690
  > :where([aria-selected="true"]) {
2615
2691
  font-weight: 600;
2616
2692
  background-color: var(--lily-surface-sunken);