@lilydesignsystem/themes 0.1.0 → 0.3.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 +366 -6
  2. package/dist/acid.css +366 -6
  3. package/dist/adobe-spectrum.css +366 -6
  4. package/dist/aqua.css +366 -6
  5. package/dist/autumn.css +366 -6
  6. package/dist/black.css +366 -6
  7. package/dist/bumblebee.css +366 -6
  8. package/dist/business.css +366 -6
  9. package/dist/caramellatte.css +366 -6
  10. package/dist/cmyk.css +366 -6
  11. package/dist/coffee.css +366 -6
  12. package/dist/corporate.css +366 -6
  13. package/dist/cupcake.css +366 -6
  14. package/dist/cyberpunk.css +366 -6
  15. package/dist/dark.css +366 -6
  16. package/dist/dim.css +366 -6
  17. package/dist/dracula.css +366 -6
  18. package/dist/emerald.css +366 -6
  19. package/dist/fantasy.css +366 -6
  20. package/dist/forest.css +366 -6
  21. package/dist/garden.css +366 -6
  22. package/dist/halloween.css +366 -6
  23. package/dist/lemonade.css +366 -6
  24. package/dist/light.css +366 -6
  25. package/dist/lofi.css +366 -6
  26. package/dist/luxury.css +366 -6
  27. package/dist/mozilla-protocol.css +366 -6
  28. package/dist/night.css +366 -6
  29. package/dist/nord.css +366 -6
  30. package/dist/pastel.css +366 -6
  31. package/dist/retro.css +366 -6
  32. package/dist/silk.css +366 -6
  33. package/dist/sunset.css +366 -6
  34. package/dist/synthwave.css +366 -6
  35. package/dist/united-kingdom-government-digital-service.css +366 -6
  36. package/dist/united-kingdom-national-health-service-england-for-patients.css +366 -6
  37. package/dist/united-kingdom-national-health-service-england-for-practitioners.css +366 -6
  38. package/dist/united-kingdom-national-health-service-scotland-for-patients.css +366 -6
  39. package/dist/united-kingdom-national-health-service-scotland-for-practitioners.css +366 -6
  40. package/dist/united-kingdom-national-health-service-wales-for-patients.css +366 -6
  41. package/dist/united-kingdom-national-health-service-wales-for-practitioners.css +366 -6
  42. package/dist/united-states-web-design-system.css +366 -6
  43. package/dist/valentine.css +366 -6
  44. package/dist/winter.css +366 -6
  45. package/dist/wireframe.css +366 -6
  46. package/package.json +1 -1
@@ -341,6 +341,14 @@
341
341
  /* Primary body-copy colour. Maps to the theme's high-contrast
342
342
  reading colour. */
343
343
  --lily-text: var(--color-base-content);
344
+ /* Error text: the theme's error colour pulled toward the theme's own reading colour (`--color-base-content`, not `--lily-text`, which a host page may override) so it
345
+ keeps WCAG contrast as text on the page and on the error-tinted
346
+ callout surface (`--color-error` itself is a fill colour). */
347
+ --lily-error-text: color-mix(
348
+ in oklch,
349
+ var(--color-error) 22%,
350
+ var(--color-base-content)
351
+ );
344
352
  /* Muted / secondary text — mixed 70% with transparent to keep the
345
353
  hue but lower contrast for captions, helptext, placeholders. */
346
354
  --lily-text-muted: color-mix(
@@ -1110,7 +1118,7 @@
1110
1118
  }
1111
1119
  :where(.dont-list-item)::marker {
1112
1120
  content: "✗ ";
1113
- color: var(--color-error);
1121
+ color: var(--lily-error-text);
1114
1122
  }
1115
1123
 
1116
1124
  /* --- Tree --------------------------------------------------------------- */
@@ -1192,7 +1200,7 @@
1192
1200
  color: var(--color-success);
1193
1201
  }
1194
1202
  :where(.validation-list-item[data-status="failed"]) {
1195
- color: var(--color-error);
1203
+ color: var(--lily-error-text);
1196
1204
  }
1197
1205
  :where(.validation-list-item[data-status="pending"]) {
1198
1206
  color: var(--lily-text-muted);
@@ -1556,7 +1564,7 @@
1556
1564
 
1557
1565
  /* Error message — inline form-validation message. */
1558
1566
  :where(.error-message) {
1559
- color: var(--color-error);
1567
+ color: var(--lily-error-text);
1560
1568
  font-weight: 600;
1561
1569
  }
1562
1570
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2297,6 +2305,7 @@
2297
2305
  .theme-picker,
2298
2306
  .locale-picker,
2299
2307
  .text-size-picker,
2308
+ .search-picker,
2300
2309
  .share-picker,
2301
2310
  .date-time-picker
2302
2311
  ) {
@@ -2308,6 +2317,7 @@
2308
2317
  .theme-picker-button,
2309
2318
  .locale-picker-button,
2310
2319
  .text-size-picker-button,
2320
+ .search-picker-button,
2311
2321
  .share-picker-button,
2312
2322
  .date-time-picker-button
2313
2323
  ) {
@@ -2343,7 +2353,8 @@
2343
2353
  .locale-picker-icon,
2344
2354
  .text-size-picker-icon,
2345
2355
  .motion-picker-icon,
2346
- .share-picker-icon
2356
+ .share-picker-icon,
2357
+ .search-picker-icon
2347
2358
  ) {
2348
2359
  display: inline-flex;
2349
2360
  align-items: center;
@@ -2422,11 +2433,359 @@
2422
2433
  line-height: 0;
2423
2434
  }
2424
2435
 
2436
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
2437
+ empty-state, file-tree, one-time-password-input, multi-select, and
2438
+ the four calendar views. The calendar views reuse the
2439
+ calendar-table-* sub-element hooks, so they only need the table
2440
+ root rule. show-more's clamp is keyed on data-expanded (the
2441
+ component never sets an inline style); file-tree hides a closed
2442
+ folder's group via aria-expanded. */
2443
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
2444
+ width: 100%;
2445
+ border-collapse: collapse;
2446
+ }
2447
+
2448
+ :where(.kbd-shortcut) {
2449
+ display: inline-flex;
2450
+ align-items: center;
2451
+ gap: var(--lily-space-xs);
2452
+ }
2453
+
2454
+ :where(.kbd-shortcut-key) {
2455
+ display: inline-block;
2456
+ padding: 0.125rem 0.4rem;
2457
+ font-family: var(--lily-font-mono);
2458
+ font-size: 0.85em;
2459
+ background-color: var(--lily-surface-alt);
2460
+ border: var(--border) solid var(--lily-border-strong);
2461
+ border-bottom-width: 2px;
2462
+ border-radius: var(--lily-radius-sm);
2463
+ }
2464
+
2465
+ :where(.show-more-content[data-expanded="false"]) {
2466
+ max-height: 6em;
2467
+ overflow: hidden;
2468
+ }
2469
+
2470
+ :where(.show-more-button) {
2471
+ margin-block-start: var(--lily-space-xs);
2472
+ padding: var(--lily-space-xs);
2473
+ font: inherit;
2474
+ color: inherit;
2475
+ text-decoration: underline;
2476
+ background: none;
2477
+ border: 0;
2478
+ cursor: pointer;
2479
+ }
2480
+
2481
+ :where(.thinking) {
2482
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2483
+ color: var(--lily-text-muted);
2484
+ border: var(--border) solid var(--lily-border-strong);
2485
+ border-radius: var(--lily-radius-md);
2486
+ }
2487
+
2488
+ :where(.thinking-summary) {
2489
+ cursor: pointer;
2490
+ }
2491
+
2492
+ :where(.thinking[data-streaming] .thinking-summary) {
2493
+ font-style: italic;
2494
+ }
2495
+
2496
+ :where(.empty-state) {
2497
+ padding: var(--lily-space-lg);
2498
+ text-align: center;
2499
+ color: var(--lily-text-muted);
2500
+ }
2501
+
2502
+ :where(.file-tree, .file-tree [role="group"]) {
2503
+ margin: 0;
2504
+ padding-inline-start: 0;
2505
+ list-style: none;
2506
+ }
2507
+
2508
+ :where(.file-tree [role="group"]) {
2509
+ padding-inline-start: var(--lily-space-md);
2510
+ }
2511
+
2512
+ :where(.file-tree [role="treeitem"]) {
2513
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2514
+ cursor: pointer;
2515
+ }
2516
+
2517
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
2518
+ display: none;
2519
+ }
2520
+
2521
+ :where(.file-tree [role="treeitem"]:focus-visible) {
2522
+ outline: var(--lily-focus-ring);
2523
+ outline-offset: -2px;
2524
+ }
2525
+
2526
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
2527
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2528
+ font: inherit;
2529
+ color: var(--lily-text);
2530
+ background-color: var(--lily-surface);
2531
+ border: var(--border) solid var(--lily-border-strong);
2532
+ border-radius: var(--lily-radius-sm);
2533
+ }
2534
+
2535
+ :where(.one-time-password-input) {
2536
+ font-family: var(--lily-font-mono);
2537
+ letter-spacing: 0.25em;
2538
+ }
2539
+
2540
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
2541
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
2542
+ existing five as block figures. Every chart's optional data-table
2543
+ wrapper sits below the graphic; the table itself inherits the
2544
+ catalog's table styling. */
2545
+ :where(
2546
+ .gauge-chart,
2547
+ .heatmap-chart,
2548
+ .radar-chart,
2549
+ .sankey-chart,
2550
+ .pie-chart,
2551
+ .ring-chart,
2552
+ .funnel-chart,
2553
+ .candlestick-chart,
2554
+ .composed-chart,
2555
+ .choropleth-chart,
2556
+ .sunburst-chart
2557
+ ) {
2558
+ display: block;
2559
+ margin: 0;
2560
+ }
2561
+
2562
+ :where(
2563
+ .area-chart-data-table,
2564
+ .bar-chart-data-table,
2565
+ .column-chart-data-table,
2566
+ .line-chart-data-table,
2567
+ .scatter-chart-data-table,
2568
+ .gauge-chart-data-table,
2569
+ .heatmap-chart-data-table,
2570
+ .radar-chart-data-table,
2571
+ .sankey-chart-data-table,
2572
+ .pie-chart-data-table,
2573
+ .ring-chart-data-table,
2574
+ .funnel-chart-data-table,
2575
+ .candlestick-chart-data-table,
2576
+ .composed-chart-data-table,
2577
+ .choropleth-chart-data-table,
2578
+ .sunburst-chart-data-table
2579
+ ) {
2580
+ margin-block-start: var(--lily-space-sm);
2581
+ overflow-x: auto;
2582
+ }
2583
+
2584
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
2585
+ to the name in the summary and is never the only cue. [data-status] is
2586
+ the consumer hook for a spinner or icon. */
2587
+ :where(.tool-call) {
2588
+ border: var(--border) solid var(--lily-border-strong);
2589
+ border-radius: var(--lily-radius-md);
2590
+ background-color: var(--lily-surface);
2591
+ color: var(--lily-text);
2592
+ }
2593
+
2594
+ :where(.tool-call-summary) {
2595
+ display: flex;
2596
+ align-items: center;
2597
+ gap: var(--lily-space-sm);
2598
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2599
+ cursor: pointer;
2600
+ }
2601
+
2602
+ :where(.tool-call-content) {
2603
+ display: grid;
2604
+ gap: var(--lily-space-xs);
2605
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2606
+ border-block-start: var(--border) solid var(--lily-border-strong);
2607
+ }
2608
+
2609
+ :where(.tool-call-name) {
2610
+ font-family: var(--lily-font-mono);
2611
+ }
2612
+
2613
+ :where(.tool-call-status) {
2614
+ color: var(--lily-text-muted);
2615
+ }
2616
+
2617
+ :where(.tool-call-input pre, .tool-call-output pre) {
2618
+ margin: 0;
2619
+ overflow-x: auto;
2620
+ font-family: var(--lily-font-mono);
2621
+ }
2622
+
2623
+ :where(.tool-call-error) {
2624
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2625
+ border: var(--border) solid var(--lily-border-strong);
2626
+ border-radius: var(--lily-radius-sm);
2627
+ font-weight: 600;
2628
+ }
2629
+
2630
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
2631
+ fixed yellow; this uses the theme's own surface and text tokens so the
2632
+ pair keeps its contrast in every theme (including dark ones). */
2633
+ :where(.mark) {
2634
+ padding-inline: 0.15em;
2635
+ color: var(--lily-text);
2636
+ background-color: var(--lily-surface-alt);
2637
+ border-radius: var(--lily-radius-sm);
2638
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
2639
+ }
2640
+
2641
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
2642
+ button's visible word is its accessible name — hide it visually, never
2643
+ with display:none, if you replace it with an icon. */
2644
+ :where(.chat-composer) {
2645
+ display: flex;
2646
+ align-items: flex-end;
2647
+ gap: var(--lily-space-xs);
2648
+ }
2649
+
2650
+ :where(.chat-composer-input) {
2651
+ flex: 1;
2652
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2653
+ font: inherit;
2654
+ color: var(--lily-text);
2655
+ background-color: var(--lily-surface);
2656
+ border: var(--border) solid var(--lily-border-strong);
2657
+ border-radius: var(--lily-radius-md);
2658
+ resize: none;
2659
+ }
2660
+
2661
+ :where(.chat-composer-button) {
2662
+ min-width: 2.5rem;
2663
+ min-height: 2.5rem;
2664
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2665
+ font: inherit;
2666
+ color: var(--lily-text);
2667
+ background-color: var(--lily-surface);
2668
+ border: var(--border) solid var(--lily-border-strong);
2669
+ border-radius: var(--lily-radius-md);
2670
+ cursor: pointer;
2671
+ }
2672
+
2673
+ :where(.chat-composer-button:disabled) {
2674
+ cursor: not-allowed;
2675
+ opacity: 0.6;
2676
+ }
2677
+
2678
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
2679
+ element beside each picker's icon button, holding the same text as
2680
+ its aria-label. The component toggles [hidden]; position and look
2681
+ are here. It sits just below the button, in the inverse of the
2682
+ page colours so it never disappears into the surface. A ::before
2683
+ strip bridges the gap to the button so the pointer can travel onto
2684
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
2685
+ :where(.motion-picker) {
2686
+ position: relative;
2687
+ display: inline-block;
2688
+ }
2689
+
2690
+ :where(
2691
+ .theme-picker-tooltip,
2692
+ .locale-picker-tooltip,
2693
+ .text-size-picker-tooltip,
2694
+ .motion-picker-tooltip,
2695
+ .share-picker-tooltip,
2696
+ .search-picker-tooltip,
2697
+ .date-time-picker-tooltip
2698
+ ) {
2699
+ position: absolute;
2700
+ z-index: 11;
2701
+ inset-inline-start: 0;
2702
+ inset-block-start: 100%;
2703
+ margin-block-start: var(--lily-space-xs);
2704
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2705
+ font-size: 0.875em;
2706
+ line-height: 1.3;
2707
+ white-space: nowrap;
2708
+ color: var(--lily-surface);
2709
+ background-color: var(--lily-text);
2710
+ border-radius: var(--lily-radius-sm);
2711
+ box-shadow: var(--lily-shadow-md);
2712
+ }
2713
+
2714
+ :where(
2715
+ .theme-picker-tooltip,
2716
+ .locale-picker-tooltip,
2717
+ .text-size-picker-tooltip,
2718
+ .motion-picker-tooltip,
2719
+ .share-picker-tooltip,
2720
+ .search-picker-tooltip,
2721
+ .date-time-picker-tooltip
2722
+ )::before {
2723
+ content: "";
2724
+ position: absolute;
2725
+ inset-inline: 0;
2726
+ inset-block-end: 100%;
2727
+ height: var(--lily-space-xs);
2728
+ }
2729
+
2730
+ :where(
2731
+ .theme-picker-tooltip,
2732
+ .locale-picker-tooltip,
2733
+ .text-size-picker-tooltip,
2734
+ .motion-picker-tooltip,
2735
+ .share-picker-tooltip,
2736
+ .search-picker-tooltip,
2737
+ .date-time-picker-tooltip
2738
+ )[hidden] {
2739
+ display: none;
2740
+ }
2741
+
2742
+ /* search-picker's panel holds a search form rather than a list: the
2743
+ field and the ⏎ submit button sit in one row, the button at the
2744
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
2745
+ button matches the picker trigger buttons' size and border. */
2746
+ :where(.search-picker-form) {
2747
+ display: flex;
2748
+ align-items: stretch;
2749
+ gap: var(--lily-space-xs);
2750
+ margin: 0;
2751
+ }
2752
+
2753
+ :where(.search-picker-input) {
2754
+ min-width: 14rem;
2755
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2756
+ font: inherit;
2757
+ color: var(--lily-text);
2758
+ background-color: var(--lily-surface);
2759
+ border: var(--border) solid var(--lily-border-strong);
2760
+ border-radius: var(--lily-radius-sm);
2761
+ }
2762
+
2763
+ :where(.search-picker-submit) {
2764
+ display: inline-flex;
2765
+ align-items: center;
2766
+ justify-content: center;
2767
+ min-width: 2.5rem;
2768
+ min-height: 2.5rem;
2769
+ padding: var(--lily-space-xs);
2770
+ font: inherit;
2771
+ line-height: 1;
2772
+ color: var(--lily-text);
2773
+ background-color: var(--lily-surface);
2774
+ border: var(--border) solid var(--lily-border-strong);
2775
+ border-radius: var(--lily-radius-md);
2776
+ cursor: pointer;
2777
+ }
2778
+
2779
+ :where(.search-picker-submit:hover) {
2780
+ background-color: var(--lily-surface-alt);
2781
+ }
2782
+
2425
2783
  :where(
2426
2784
  .theme-picker-list,
2427
2785
  .locale-picker-list,
2428
2786
  .text-size-picker-list,
2429
- .share-picker-list
2787
+ .share-picker-list,
2788
+ .search-picker-panel
2430
2789
  ) {
2431
2790
  position: absolute;
2432
2791
  z-index: 10;
@@ -2450,7 +2809,8 @@
2450
2809
  .theme-picker-list,
2451
2810
  .locale-picker-list,
2452
2811
  .text-size-picker-list,
2453
- .share-picker-list
2812
+ .share-picker-list,
2813
+ .search-picker-panel
2454
2814
  )[hidden] {
2455
2815
  display: none;
2456
2816
  }