@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
@@ -299,6 +299,14 @@
299
299
  /* Primary body-copy colour. Maps to the theme's high-contrast
300
300
  reading colour. */
301
301
  --lily-text: var(--color-base-content);
302
+ /* 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
303
+ keeps WCAG contrast as text on the page and on the error-tinted
304
+ callout surface (`--color-error` itself is a fill colour). */
305
+ --lily-error-text: color-mix(
306
+ in oklch,
307
+ var(--color-error) 22%,
308
+ var(--color-base-content)
309
+ );
302
310
  /* Muted / secondary text — mixed 70% with transparent to keep the
303
311
  hue but lower contrast for captions, helptext, placeholders. */
304
312
  --lily-text-muted: color-mix(
@@ -1038,7 +1046,7 @@
1038
1046
  }
1039
1047
  :where(.dont-list-item)::marker {
1040
1048
  content: "✗ ";
1041
- color: var(--color-error);
1049
+ color: var(--lily-error-text);
1042
1050
  }
1043
1051
 
1044
1052
  /* --- Tree --------------------------------------------------------------- */
@@ -1120,7 +1128,7 @@
1120
1128
  color: var(--color-success);
1121
1129
  }
1122
1130
  :where(.validation-list-item[data-status="failed"]) {
1123
- color: var(--color-error);
1131
+ color: var(--lily-error-text);
1124
1132
  }
1125
1133
  :where(.validation-list-item[data-status="pending"]) {
1126
1134
  color: var(--lily-text-muted);
@@ -1478,7 +1486,7 @@
1478
1486
 
1479
1487
  /* Error message — inline form-validation message. */
1480
1488
  :where(.error-message) {
1481
- color: var(--color-error);
1489
+ color: var(--lily-error-text);
1482
1490
  font-weight: 600;
1483
1491
  }
1484
1492
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2213,6 +2221,7 @@
2213
2221
  .theme-picker,
2214
2222
  .locale-picker,
2215
2223
  .text-size-picker,
2224
+ .search-picker,
2216
2225
  .share-picker,
2217
2226
  .date-time-picker
2218
2227
  ) {
@@ -2224,6 +2233,7 @@
2224
2233
  .theme-picker-button,
2225
2234
  .locale-picker-button,
2226
2235
  .text-size-picker-button,
2236
+ .search-picker-button,
2227
2237
  .share-picker-button,
2228
2238
  .date-time-picker-button
2229
2239
  ) {
@@ -2259,7 +2269,8 @@
2259
2269
  .locale-picker-icon,
2260
2270
  .text-size-picker-icon,
2261
2271
  .motion-picker-icon,
2262
- .share-picker-icon
2272
+ .share-picker-icon,
2273
+ .search-picker-icon
2263
2274
  ) {
2264
2275
  display: inline-flex;
2265
2276
  align-items: center;
@@ -2338,11 +2349,359 @@
2338
2349
  line-height: 0;
2339
2350
  }
2340
2351
 
2352
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
2353
+ empty-state, file-tree, one-time-password-input, multi-select, and
2354
+ the four calendar views. The calendar views reuse the
2355
+ calendar-table-* sub-element hooks, so they only need the table
2356
+ root rule. show-more's clamp is keyed on data-expanded (the
2357
+ component never sets an inline style); file-tree hides a closed
2358
+ folder's group via aria-expanded. */
2359
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
2360
+ width: 100%;
2361
+ border-collapse: collapse;
2362
+ }
2363
+
2364
+ :where(.kbd-shortcut) {
2365
+ display: inline-flex;
2366
+ align-items: center;
2367
+ gap: var(--lily-space-xs);
2368
+ }
2369
+
2370
+ :where(.kbd-shortcut-key) {
2371
+ display: inline-block;
2372
+ padding: 0.125rem 0.4rem;
2373
+ font-family: var(--lily-font-mono);
2374
+ font-size: 0.85em;
2375
+ background-color: var(--lily-surface-alt);
2376
+ border: var(--border) solid var(--lily-border-strong);
2377
+ border-bottom-width: 2px;
2378
+ border-radius: var(--lily-radius-sm);
2379
+ }
2380
+
2381
+ :where(.show-more-content[data-expanded="false"]) {
2382
+ max-height: 6em;
2383
+ overflow: hidden;
2384
+ }
2385
+
2386
+ :where(.show-more-button) {
2387
+ margin-block-start: var(--lily-space-xs);
2388
+ padding: var(--lily-space-xs);
2389
+ font: inherit;
2390
+ color: inherit;
2391
+ text-decoration: underline;
2392
+ background: none;
2393
+ border: 0;
2394
+ cursor: pointer;
2395
+ }
2396
+
2397
+ :where(.thinking) {
2398
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2399
+ color: var(--lily-text-muted);
2400
+ border: var(--border) solid var(--lily-border-strong);
2401
+ border-radius: var(--lily-radius-md);
2402
+ }
2403
+
2404
+ :where(.thinking-summary) {
2405
+ cursor: pointer;
2406
+ }
2407
+
2408
+ :where(.thinking[data-streaming] .thinking-summary) {
2409
+ font-style: italic;
2410
+ }
2411
+
2412
+ :where(.empty-state) {
2413
+ padding: var(--lily-space-lg);
2414
+ text-align: center;
2415
+ color: var(--lily-text-muted);
2416
+ }
2417
+
2418
+ :where(.file-tree, .file-tree [role="group"]) {
2419
+ margin: 0;
2420
+ padding-inline-start: 0;
2421
+ list-style: none;
2422
+ }
2423
+
2424
+ :where(.file-tree [role="group"]) {
2425
+ padding-inline-start: var(--lily-space-md);
2426
+ }
2427
+
2428
+ :where(.file-tree [role="treeitem"]) {
2429
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2430
+ cursor: pointer;
2431
+ }
2432
+
2433
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
2434
+ display: none;
2435
+ }
2436
+
2437
+ :where(.file-tree [role="treeitem"]:focus-visible) {
2438
+ outline: var(--lily-focus-ring);
2439
+ outline-offset: -2px;
2440
+ }
2441
+
2442
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
2443
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2444
+ font: inherit;
2445
+ color: var(--lily-text);
2446
+ background-color: var(--lily-surface);
2447
+ border: var(--border) solid var(--lily-border-strong);
2448
+ border-radius: var(--lily-radius-sm);
2449
+ }
2450
+
2451
+ :where(.one-time-password-input) {
2452
+ font-family: var(--lily-font-mono);
2453
+ letter-spacing: 0.25em;
2454
+ }
2455
+
2456
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
2457
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
2458
+ existing five as block figures. Every chart's optional data-table
2459
+ wrapper sits below the graphic; the table itself inherits the
2460
+ catalog's table styling. */
2461
+ :where(
2462
+ .gauge-chart,
2463
+ .heatmap-chart,
2464
+ .radar-chart,
2465
+ .sankey-chart,
2466
+ .pie-chart,
2467
+ .ring-chart,
2468
+ .funnel-chart,
2469
+ .candlestick-chart,
2470
+ .composed-chart,
2471
+ .choropleth-chart,
2472
+ .sunburst-chart
2473
+ ) {
2474
+ display: block;
2475
+ margin: 0;
2476
+ }
2477
+
2478
+ :where(
2479
+ .area-chart-data-table,
2480
+ .bar-chart-data-table,
2481
+ .column-chart-data-table,
2482
+ .line-chart-data-table,
2483
+ .scatter-chart-data-table,
2484
+ .gauge-chart-data-table,
2485
+ .heatmap-chart-data-table,
2486
+ .radar-chart-data-table,
2487
+ .sankey-chart-data-table,
2488
+ .pie-chart-data-table,
2489
+ .ring-chart-data-table,
2490
+ .funnel-chart-data-table,
2491
+ .candlestick-chart-data-table,
2492
+ .composed-chart-data-table,
2493
+ .choropleth-chart-data-table,
2494
+ .sunburst-chart-data-table
2495
+ ) {
2496
+ margin-block-start: var(--lily-space-sm);
2497
+ overflow-x: auto;
2498
+ }
2499
+
2500
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
2501
+ to the name in the summary and is never the only cue. [data-status] is
2502
+ the consumer hook for a spinner or icon. */
2503
+ :where(.tool-call) {
2504
+ border: var(--border) solid var(--lily-border-strong);
2505
+ border-radius: var(--lily-radius-md);
2506
+ background-color: var(--lily-surface);
2507
+ color: var(--lily-text);
2508
+ }
2509
+
2510
+ :where(.tool-call-summary) {
2511
+ display: flex;
2512
+ align-items: center;
2513
+ gap: var(--lily-space-sm);
2514
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2515
+ cursor: pointer;
2516
+ }
2517
+
2518
+ :where(.tool-call-content) {
2519
+ display: grid;
2520
+ gap: var(--lily-space-xs);
2521
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2522
+ border-block-start: var(--border) solid var(--lily-border-strong);
2523
+ }
2524
+
2525
+ :where(.tool-call-name) {
2526
+ font-family: var(--lily-font-mono);
2527
+ }
2528
+
2529
+ :where(.tool-call-status) {
2530
+ color: var(--lily-text-muted);
2531
+ }
2532
+
2533
+ :where(.tool-call-input pre, .tool-call-output pre) {
2534
+ margin: 0;
2535
+ overflow-x: auto;
2536
+ font-family: var(--lily-font-mono);
2537
+ }
2538
+
2539
+ :where(.tool-call-error) {
2540
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2541
+ border: var(--border) solid var(--lily-border-strong);
2542
+ border-radius: var(--lily-radius-sm);
2543
+ font-weight: 600;
2544
+ }
2545
+
2546
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
2547
+ fixed yellow; this uses the theme's own surface and text tokens so the
2548
+ pair keeps its contrast in every theme (including dark ones). */
2549
+ :where(.mark) {
2550
+ padding-inline: 0.15em;
2551
+ color: var(--lily-text);
2552
+ background-color: var(--lily-surface-alt);
2553
+ border-radius: var(--lily-radius-sm);
2554
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
2555
+ }
2556
+
2557
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
2558
+ button's visible word is its accessible name — hide it visually, never
2559
+ with display:none, if you replace it with an icon. */
2560
+ :where(.chat-composer) {
2561
+ display: flex;
2562
+ align-items: flex-end;
2563
+ gap: var(--lily-space-xs);
2564
+ }
2565
+
2566
+ :where(.chat-composer-input) {
2567
+ flex: 1;
2568
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2569
+ font: inherit;
2570
+ color: var(--lily-text);
2571
+ background-color: var(--lily-surface);
2572
+ border: var(--border) solid var(--lily-border-strong);
2573
+ border-radius: var(--lily-radius-md);
2574
+ resize: none;
2575
+ }
2576
+
2577
+ :where(.chat-composer-button) {
2578
+ min-width: 2.5rem;
2579
+ min-height: 2.5rem;
2580
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2581
+ font: inherit;
2582
+ color: var(--lily-text);
2583
+ background-color: var(--lily-surface);
2584
+ border: var(--border) solid var(--lily-border-strong);
2585
+ border-radius: var(--lily-radius-md);
2586
+ cursor: pointer;
2587
+ }
2588
+
2589
+ :where(.chat-composer-button:disabled) {
2590
+ cursor: not-allowed;
2591
+ opacity: 0.6;
2592
+ }
2593
+
2594
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
2595
+ element beside each picker's icon button, holding the same text as
2596
+ its aria-label. The component toggles [hidden]; position and look
2597
+ are here. It sits just below the button, in the inverse of the
2598
+ page colours so it never disappears into the surface. A ::before
2599
+ strip bridges the gap to the button so the pointer can travel onto
2600
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
2601
+ :where(.motion-picker) {
2602
+ position: relative;
2603
+ display: inline-block;
2604
+ }
2605
+
2606
+ :where(
2607
+ .theme-picker-tooltip,
2608
+ .locale-picker-tooltip,
2609
+ .text-size-picker-tooltip,
2610
+ .motion-picker-tooltip,
2611
+ .share-picker-tooltip,
2612
+ .search-picker-tooltip,
2613
+ .date-time-picker-tooltip
2614
+ ) {
2615
+ position: absolute;
2616
+ z-index: 11;
2617
+ inset-inline-start: 0;
2618
+ inset-block-start: 100%;
2619
+ margin-block-start: var(--lily-space-xs);
2620
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2621
+ font-size: 0.875em;
2622
+ line-height: 1.3;
2623
+ white-space: nowrap;
2624
+ color: var(--lily-surface);
2625
+ background-color: var(--lily-text);
2626
+ border-radius: var(--lily-radius-sm);
2627
+ box-shadow: var(--lily-shadow-md);
2628
+ }
2629
+
2630
+ :where(
2631
+ .theme-picker-tooltip,
2632
+ .locale-picker-tooltip,
2633
+ .text-size-picker-tooltip,
2634
+ .motion-picker-tooltip,
2635
+ .share-picker-tooltip,
2636
+ .search-picker-tooltip,
2637
+ .date-time-picker-tooltip
2638
+ )::before {
2639
+ content: "";
2640
+ position: absolute;
2641
+ inset-inline: 0;
2642
+ inset-block-end: 100%;
2643
+ height: var(--lily-space-xs);
2644
+ }
2645
+
2646
+ :where(
2647
+ .theme-picker-tooltip,
2648
+ .locale-picker-tooltip,
2649
+ .text-size-picker-tooltip,
2650
+ .motion-picker-tooltip,
2651
+ .share-picker-tooltip,
2652
+ .search-picker-tooltip,
2653
+ .date-time-picker-tooltip
2654
+ )[hidden] {
2655
+ display: none;
2656
+ }
2657
+
2658
+ /* search-picker's panel holds a search form rather than a list: the
2659
+ field and the ⏎ submit button sit in one row, the button at the
2660
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
2661
+ button matches the picker trigger buttons' size and border. */
2662
+ :where(.search-picker-form) {
2663
+ display: flex;
2664
+ align-items: stretch;
2665
+ gap: var(--lily-space-xs);
2666
+ margin: 0;
2667
+ }
2668
+
2669
+ :where(.search-picker-input) {
2670
+ min-width: 14rem;
2671
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2672
+ font: inherit;
2673
+ color: var(--lily-text);
2674
+ background-color: var(--lily-surface);
2675
+ border: var(--border) solid var(--lily-border-strong);
2676
+ border-radius: var(--lily-radius-sm);
2677
+ }
2678
+
2679
+ :where(.search-picker-submit) {
2680
+ display: inline-flex;
2681
+ align-items: center;
2682
+ justify-content: center;
2683
+ min-width: 2.5rem;
2684
+ min-height: 2.5rem;
2685
+ padding: var(--lily-space-xs);
2686
+ font: inherit;
2687
+ line-height: 1;
2688
+ color: var(--lily-text);
2689
+ background-color: var(--lily-surface);
2690
+ border: var(--border) solid var(--lily-border-strong);
2691
+ border-radius: var(--lily-radius-md);
2692
+ cursor: pointer;
2693
+ }
2694
+
2695
+ :where(.search-picker-submit:hover) {
2696
+ background-color: var(--lily-surface-alt);
2697
+ }
2698
+
2341
2699
  :where(
2342
2700
  .theme-picker-list,
2343
2701
  .locale-picker-list,
2344
2702
  .text-size-picker-list,
2345
- .share-picker-list
2703
+ .share-picker-list,
2704
+ .search-picker-panel
2346
2705
  ) {
2347
2706
  position: absolute;
2348
2707
  z-index: 10;
@@ -2366,7 +2725,8 @@
2366
2725
  .theme-picker-list,
2367
2726
  .locale-picker-list,
2368
2727
  .text-size-picker-list,
2369
- .share-picker-list
2728
+ .share-picker-list,
2729
+ .search-picker-panel
2370
2730
  )[hidden] {
2371
2731
  display: none;
2372
2732
  }