@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
@@ -245,6 +245,14 @@
245
245
  /* Primary body-copy colour. Maps to the theme's high-contrast
246
246
  reading colour. */
247
247
  --lily-text: var(--color-base-content);
248
+ /* 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
249
+ keeps WCAG contrast as text on the page and on the error-tinted
250
+ callout surface (`--color-error` itself is a fill colour). */
251
+ --lily-error-text: color-mix(
252
+ in oklch,
253
+ var(--color-error) 22%,
254
+ var(--color-base-content)
255
+ );
248
256
  /* Muted / secondary text — mixed 70% with transparent to keep the
249
257
  hue but lower contrast for captions, helptext, placeholders. */
250
258
  --lily-text-muted: color-mix(
@@ -1014,7 +1022,7 @@
1014
1022
  }
1015
1023
  :where(.dont-list-item)::marker {
1016
1024
  content: "✗ ";
1017
- color: var(--color-error);
1025
+ color: var(--lily-error-text);
1018
1026
  }
1019
1027
 
1020
1028
  /* --- Tree --------------------------------------------------------------- */
@@ -1096,7 +1104,7 @@
1096
1104
  color: var(--color-success);
1097
1105
  }
1098
1106
  :where(.validation-list-item[data-status="failed"]) {
1099
- color: var(--color-error);
1107
+ color: var(--lily-error-text);
1100
1108
  }
1101
1109
  :where(.validation-list-item[data-status="pending"]) {
1102
1110
  color: var(--lily-text-muted);
@@ -1460,7 +1468,7 @@
1460
1468
 
1461
1469
  /* Error message — inline form-validation message. */
1462
1470
  :where(.error-message) {
1463
- color: var(--color-error);
1471
+ color: var(--lily-error-text);
1464
1472
  font-weight: 600;
1465
1473
  }
1466
1474
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2201,6 +2209,7 @@
2201
2209
  .theme-picker,
2202
2210
  .locale-picker,
2203
2211
  .text-size-picker,
2212
+ .search-picker,
2204
2213
  .share-picker,
2205
2214
  .date-time-picker
2206
2215
  ) {
@@ -2212,6 +2221,7 @@
2212
2221
  .theme-picker-button,
2213
2222
  .locale-picker-button,
2214
2223
  .text-size-picker-button,
2224
+ .search-picker-button,
2215
2225
  .share-picker-button,
2216
2226
  .date-time-picker-button
2217
2227
  ) {
@@ -2247,7 +2257,8 @@
2247
2257
  .locale-picker-icon,
2248
2258
  .text-size-picker-icon,
2249
2259
  .motion-picker-icon,
2250
- .share-picker-icon
2260
+ .share-picker-icon,
2261
+ .search-picker-icon
2251
2262
  ) {
2252
2263
  display: inline-flex;
2253
2264
  align-items: center;
@@ -2326,11 +2337,359 @@
2326
2337
  line-height: 0;
2327
2338
  }
2328
2339
 
2340
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
2341
+ empty-state, file-tree, one-time-password-input, multi-select, and
2342
+ the four calendar views. The calendar views reuse the
2343
+ calendar-table-* sub-element hooks, so they only need the table
2344
+ root rule. show-more's clamp is keyed on data-expanded (the
2345
+ component never sets an inline style); file-tree hides a closed
2346
+ folder's group via aria-expanded. */
2347
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
2348
+ width: 100%;
2349
+ border-collapse: collapse;
2350
+ }
2351
+
2352
+ :where(.kbd-shortcut) {
2353
+ display: inline-flex;
2354
+ align-items: center;
2355
+ gap: var(--lily-space-xs);
2356
+ }
2357
+
2358
+ :where(.kbd-shortcut-key) {
2359
+ display: inline-block;
2360
+ padding: 0.125rem 0.4rem;
2361
+ font-family: var(--lily-font-mono);
2362
+ font-size: 0.85em;
2363
+ background-color: var(--lily-surface-alt);
2364
+ border: var(--border) solid var(--lily-border-strong);
2365
+ border-bottom-width: 2px;
2366
+ border-radius: var(--lily-radius-sm);
2367
+ }
2368
+
2369
+ :where(.show-more-content[data-expanded="false"]) {
2370
+ max-height: 6em;
2371
+ overflow: hidden;
2372
+ }
2373
+
2374
+ :where(.show-more-button) {
2375
+ margin-block-start: var(--lily-space-xs);
2376
+ padding: var(--lily-space-xs);
2377
+ font: inherit;
2378
+ color: inherit;
2379
+ text-decoration: underline;
2380
+ background: none;
2381
+ border: 0;
2382
+ cursor: pointer;
2383
+ }
2384
+
2385
+ :where(.thinking) {
2386
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2387
+ color: var(--lily-text-muted);
2388
+ border: var(--border) solid var(--lily-border-strong);
2389
+ border-radius: var(--lily-radius-md);
2390
+ }
2391
+
2392
+ :where(.thinking-summary) {
2393
+ cursor: pointer;
2394
+ }
2395
+
2396
+ :where(.thinking[data-streaming] .thinking-summary) {
2397
+ font-style: italic;
2398
+ }
2399
+
2400
+ :where(.empty-state) {
2401
+ padding: var(--lily-space-lg);
2402
+ text-align: center;
2403
+ color: var(--lily-text-muted);
2404
+ }
2405
+
2406
+ :where(.file-tree, .file-tree [role="group"]) {
2407
+ margin: 0;
2408
+ padding-inline-start: 0;
2409
+ list-style: none;
2410
+ }
2411
+
2412
+ :where(.file-tree [role="group"]) {
2413
+ padding-inline-start: var(--lily-space-md);
2414
+ }
2415
+
2416
+ :where(.file-tree [role="treeitem"]) {
2417
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2418
+ cursor: pointer;
2419
+ }
2420
+
2421
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
2422
+ display: none;
2423
+ }
2424
+
2425
+ :where(.file-tree [role="treeitem"]:focus-visible) {
2426
+ outline: var(--lily-focus-ring);
2427
+ outline-offset: -2px;
2428
+ }
2429
+
2430
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
2431
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2432
+ font: inherit;
2433
+ color: var(--lily-text);
2434
+ background-color: var(--lily-surface);
2435
+ border: var(--border) solid var(--lily-border-strong);
2436
+ border-radius: var(--lily-radius-sm);
2437
+ }
2438
+
2439
+ :where(.one-time-password-input) {
2440
+ font-family: var(--lily-font-mono);
2441
+ letter-spacing: 0.25em;
2442
+ }
2443
+
2444
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
2445
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
2446
+ existing five as block figures. Every chart's optional data-table
2447
+ wrapper sits below the graphic; the table itself inherits the
2448
+ catalog's table styling. */
2449
+ :where(
2450
+ .gauge-chart,
2451
+ .heatmap-chart,
2452
+ .radar-chart,
2453
+ .sankey-chart,
2454
+ .pie-chart,
2455
+ .ring-chart,
2456
+ .funnel-chart,
2457
+ .candlestick-chart,
2458
+ .composed-chart,
2459
+ .choropleth-chart,
2460
+ .sunburst-chart
2461
+ ) {
2462
+ display: block;
2463
+ margin: 0;
2464
+ }
2465
+
2466
+ :where(
2467
+ .area-chart-data-table,
2468
+ .bar-chart-data-table,
2469
+ .column-chart-data-table,
2470
+ .line-chart-data-table,
2471
+ .scatter-chart-data-table,
2472
+ .gauge-chart-data-table,
2473
+ .heatmap-chart-data-table,
2474
+ .radar-chart-data-table,
2475
+ .sankey-chart-data-table,
2476
+ .pie-chart-data-table,
2477
+ .ring-chart-data-table,
2478
+ .funnel-chart-data-table,
2479
+ .candlestick-chart-data-table,
2480
+ .composed-chart-data-table,
2481
+ .choropleth-chart-data-table,
2482
+ .sunburst-chart-data-table
2483
+ ) {
2484
+ margin-block-start: var(--lily-space-sm);
2485
+ overflow-x: auto;
2486
+ }
2487
+
2488
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
2489
+ to the name in the summary and is never the only cue. [data-status] is
2490
+ the consumer hook for a spinner or icon. */
2491
+ :where(.tool-call) {
2492
+ border: var(--border) solid var(--lily-border-strong);
2493
+ border-radius: var(--lily-radius-md);
2494
+ background-color: var(--lily-surface);
2495
+ color: var(--lily-text);
2496
+ }
2497
+
2498
+ :where(.tool-call-summary) {
2499
+ display: flex;
2500
+ align-items: center;
2501
+ gap: var(--lily-space-sm);
2502
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2503
+ cursor: pointer;
2504
+ }
2505
+
2506
+ :where(.tool-call-content) {
2507
+ display: grid;
2508
+ gap: var(--lily-space-xs);
2509
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2510
+ border-block-start: var(--border) solid var(--lily-border-strong);
2511
+ }
2512
+
2513
+ :where(.tool-call-name) {
2514
+ font-family: var(--lily-font-mono);
2515
+ }
2516
+
2517
+ :where(.tool-call-status) {
2518
+ color: var(--lily-text-muted);
2519
+ }
2520
+
2521
+ :where(.tool-call-input pre, .tool-call-output pre) {
2522
+ margin: 0;
2523
+ overflow-x: auto;
2524
+ font-family: var(--lily-font-mono);
2525
+ }
2526
+
2527
+ :where(.tool-call-error) {
2528
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2529
+ border: var(--border) solid var(--lily-border-strong);
2530
+ border-radius: var(--lily-radius-sm);
2531
+ font-weight: 600;
2532
+ }
2533
+
2534
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
2535
+ fixed yellow; this uses the theme's own surface and text tokens so the
2536
+ pair keeps its contrast in every theme (including dark ones). */
2537
+ :where(.mark) {
2538
+ padding-inline: 0.15em;
2539
+ color: var(--lily-text);
2540
+ background-color: var(--lily-surface-alt);
2541
+ border-radius: var(--lily-radius-sm);
2542
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
2543
+ }
2544
+
2545
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
2546
+ button's visible word is its accessible name — hide it visually, never
2547
+ with display:none, if you replace it with an icon. */
2548
+ :where(.chat-composer) {
2549
+ display: flex;
2550
+ align-items: flex-end;
2551
+ gap: var(--lily-space-xs);
2552
+ }
2553
+
2554
+ :where(.chat-composer-input) {
2555
+ flex: 1;
2556
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2557
+ font: inherit;
2558
+ color: var(--lily-text);
2559
+ background-color: var(--lily-surface);
2560
+ border: var(--border) solid var(--lily-border-strong);
2561
+ border-radius: var(--lily-radius-md);
2562
+ resize: none;
2563
+ }
2564
+
2565
+ :where(.chat-composer-button) {
2566
+ min-width: 2.5rem;
2567
+ min-height: 2.5rem;
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
+ cursor: pointer;
2575
+ }
2576
+
2577
+ :where(.chat-composer-button:disabled) {
2578
+ cursor: not-allowed;
2579
+ opacity: 0.6;
2580
+ }
2581
+
2582
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
2583
+ element beside each picker's icon button, holding the same text as
2584
+ its aria-label. The component toggles [hidden]; position and look
2585
+ are here. It sits just below the button, in the inverse of the
2586
+ page colours so it never disappears into the surface. A ::before
2587
+ strip bridges the gap to the button so the pointer can travel onto
2588
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
2589
+ :where(.motion-picker) {
2590
+ position: relative;
2591
+ display: inline-block;
2592
+ }
2593
+
2594
+ :where(
2595
+ .theme-picker-tooltip,
2596
+ .locale-picker-tooltip,
2597
+ .text-size-picker-tooltip,
2598
+ .motion-picker-tooltip,
2599
+ .share-picker-tooltip,
2600
+ .search-picker-tooltip,
2601
+ .date-time-picker-tooltip
2602
+ ) {
2603
+ position: absolute;
2604
+ z-index: 11;
2605
+ inset-inline-start: 0;
2606
+ inset-block-start: 100%;
2607
+ margin-block-start: var(--lily-space-xs);
2608
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2609
+ font-size: 0.875em;
2610
+ line-height: 1.3;
2611
+ white-space: nowrap;
2612
+ color: var(--lily-surface);
2613
+ background-color: var(--lily-text);
2614
+ border-radius: var(--lily-radius-sm);
2615
+ box-shadow: var(--lily-shadow-md);
2616
+ }
2617
+
2618
+ :where(
2619
+ .theme-picker-tooltip,
2620
+ .locale-picker-tooltip,
2621
+ .text-size-picker-tooltip,
2622
+ .motion-picker-tooltip,
2623
+ .share-picker-tooltip,
2624
+ .search-picker-tooltip,
2625
+ .date-time-picker-tooltip
2626
+ )::before {
2627
+ content: "";
2628
+ position: absolute;
2629
+ inset-inline: 0;
2630
+ inset-block-end: 100%;
2631
+ height: var(--lily-space-xs);
2632
+ }
2633
+
2634
+ :where(
2635
+ .theme-picker-tooltip,
2636
+ .locale-picker-tooltip,
2637
+ .text-size-picker-tooltip,
2638
+ .motion-picker-tooltip,
2639
+ .share-picker-tooltip,
2640
+ .search-picker-tooltip,
2641
+ .date-time-picker-tooltip
2642
+ )[hidden] {
2643
+ display: none;
2644
+ }
2645
+
2646
+ /* search-picker's panel holds a search form rather than a list: the
2647
+ field and the ⏎ submit button sit in one row, the button at the
2648
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
2649
+ button matches the picker trigger buttons' size and border. */
2650
+ :where(.search-picker-form) {
2651
+ display: flex;
2652
+ align-items: stretch;
2653
+ gap: var(--lily-space-xs);
2654
+ margin: 0;
2655
+ }
2656
+
2657
+ :where(.search-picker-input) {
2658
+ min-width: 14rem;
2659
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2660
+ font: inherit;
2661
+ color: var(--lily-text);
2662
+ background-color: var(--lily-surface);
2663
+ border: var(--border) solid var(--lily-border-strong);
2664
+ border-radius: var(--lily-radius-sm);
2665
+ }
2666
+
2667
+ :where(.search-picker-submit) {
2668
+ display: inline-flex;
2669
+ align-items: center;
2670
+ justify-content: center;
2671
+ min-width: 2.5rem;
2672
+ min-height: 2.5rem;
2673
+ padding: var(--lily-space-xs);
2674
+ font: inherit;
2675
+ line-height: 1;
2676
+ color: var(--lily-text);
2677
+ background-color: var(--lily-surface);
2678
+ border: var(--border) solid var(--lily-border-strong);
2679
+ border-radius: var(--lily-radius-md);
2680
+ cursor: pointer;
2681
+ }
2682
+
2683
+ :where(.search-picker-submit:hover) {
2684
+ background-color: var(--lily-surface-alt);
2685
+ }
2686
+
2329
2687
  :where(
2330
2688
  .theme-picker-list,
2331
2689
  .locale-picker-list,
2332
2690
  .text-size-picker-list,
2333
- .share-picker-list
2691
+ .share-picker-list,
2692
+ .search-picker-panel
2334
2693
  ) {
2335
2694
  position: absolute;
2336
2695
  z-index: 10;
@@ -2354,7 +2713,8 @@
2354
2713
  .theme-picker-list,
2355
2714
  .locale-picker-list,
2356
2715
  .text-size-picker-list,
2357
- .share-picker-list
2716
+ .share-picker-list,
2717
+ .search-picker-panel
2358
2718
  )[hidden] {
2359
2719
  display: none;
2360
2720
  }