@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
@@ -196,6 +196,14 @@
196
196
  /* Primary body-copy colour. Maps to the theme's high-contrast
197
197
  reading colour. */
198
198
  --lily-text: var(--color-base-content);
199
+ /* 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
200
+ keeps WCAG contrast as text on the page and on the error-tinted
201
+ callout surface (`--color-error` itself is a fill colour). */
202
+ --lily-error-text: color-mix(
203
+ in oklch,
204
+ var(--color-error) 22%,
205
+ var(--color-base-content)
206
+ );
199
207
  /* Muted / secondary text — mixed 70% with transparent to keep the
200
208
  hue but lower contrast for captions, helptext, placeholders. */
201
209
  --lily-text-muted: color-mix(
@@ -935,7 +943,7 @@
935
943
  }
936
944
  :where(.dont-list-item)::marker {
937
945
  content: "✗ ";
938
- color: var(--color-error);
946
+ color: var(--lily-error-text);
939
947
  }
940
948
 
941
949
  /* --- Tree --------------------------------------------------------------- */
@@ -1017,7 +1025,7 @@
1017
1025
  color: var(--color-success);
1018
1026
  }
1019
1027
  :where(.validation-list-item[data-status="failed"]) {
1020
- color: var(--color-error);
1028
+ color: var(--lily-error-text);
1021
1029
  }
1022
1030
  :where(.validation-list-item[data-status="pending"]) {
1023
1031
  color: var(--lily-text-muted);
@@ -1375,7 +1383,7 @@
1375
1383
 
1376
1384
  /* Error message — inline form-validation message. */
1377
1385
  :where(.error-message) {
1378
- color: var(--color-error);
1386
+ color: var(--lily-error-text);
1379
1387
  font-weight: 600;
1380
1388
  }
1381
1389
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2110,6 +2118,7 @@
2110
2118
  .theme-picker,
2111
2119
  .locale-picker,
2112
2120
  .text-size-picker,
2121
+ .search-picker,
2113
2122
  .share-picker,
2114
2123
  .date-time-picker
2115
2124
  ) {
@@ -2121,6 +2130,7 @@
2121
2130
  .theme-picker-button,
2122
2131
  .locale-picker-button,
2123
2132
  .text-size-picker-button,
2133
+ .search-picker-button,
2124
2134
  .share-picker-button,
2125
2135
  .date-time-picker-button
2126
2136
  ) {
@@ -2156,7 +2166,8 @@
2156
2166
  .locale-picker-icon,
2157
2167
  .text-size-picker-icon,
2158
2168
  .motion-picker-icon,
2159
- .share-picker-icon
2169
+ .share-picker-icon,
2170
+ .search-picker-icon
2160
2171
  ) {
2161
2172
  display: inline-flex;
2162
2173
  align-items: center;
@@ -2235,11 +2246,359 @@
2235
2246
  line-height: 0;
2236
2247
  }
2237
2248
 
2249
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
2250
+ empty-state, file-tree, one-time-password-input, multi-select, and
2251
+ the four calendar views. The calendar views reuse the
2252
+ calendar-table-* sub-element hooks, so they only need the table
2253
+ root rule. show-more's clamp is keyed on data-expanded (the
2254
+ component never sets an inline style); file-tree hides a closed
2255
+ folder's group via aria-expanded. */
2256
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
2257
+ width: 100%;
2258
+ border-collapse: collapse;
2259
+ }
2260
+
2261
+ :where(.kbd-shortcut) {
2262
+ display: inline-flex;
2263
+ align-items: center;
2264
+ gap: var(--lily-space-xs);
2265
+ }
2266
+
2267
+ :where(.kbd-shortcut-key) {
2268
+ display: inline-block;
2269
+ padding: 0.125rem 0.4rem;
2270
+ font-family: var(--lily-font-mono);
2271
+ font-size: 0.85em;
2272
+ background-color: var(--lily-surface-alt);
2273
+ border: var(--border) solid var(--lily-border-strong);
2274
+ border-bottom-width: 2px;
2275
+ border-radius: var(--lily-radius-sm);
2276
+ }
2277
+
2278
+ :where(.show-more-content[data-expanded="false"]) {
2279
+ max-height: 6em;
2280
+ overflow: hidden;
2281
+ }
2282
+
2283
+ :where(.show-more-button) {
2284
+ margin-block-start: var(--lily-space-xs);
2285
+ padding: var(--lily-space-xs);
2286
+ font: inherit;
2287
+ color: inherit;
2288
+ text-decoration: underline;
2289
+ background: none;
2290
+ border: 0;
2291
+ cursor: pointer;
2292
+ }
2293
+
2294
+ :where(.thinking) {
2295
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2296
+ color: var(--lily-text-muted);
2297
+ border: var(--border) solid var(--lily-border-strong);
2298
+ border-radius: var(--lily-radius-md);
2299
+ }
2300
+
2301
+ :where(.thinking-summary) {
2302
+ cursor: pointer;
2303
+ }
2304
+
2305
+ :where(.thinking[data-streaming] .thinking-summary) {
2306
+ font-style: italic;
2307
+ }
2308
+
2309
+ :where(.empty-state) {
2310
+ padding: var(--lily-space-lg);
2311
+ text-align: center;
2312
+ color: var(--lily-text-muted);
2313
+ }
2314
+
2315
+ :where(.file-tree, .file-tree [role="group"]) {
2316
+ margin: 0;
2317
+ padding-inline-start: 0;
2318
+ list-style: none;
2319
+ }
2320
+
2321
+ :where(.file-tree [role="group"]) {
2322
+ padding-inline-start: var(--lily-space-md);
2323
+ }
2324
+
2325
+ :where(.file-tree [role="treeitem"]) {
2326
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2327
+ cursor: pointer;
2328
+ }
2329
+
2330
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
2331
+ display: none;
2332
+ }
2333
+
2334
+ :where(.file-tree [role="treeitem"]:focus-visible) {
2335
+ outline: var(--lily-focus-ring);
2336
+ outline-offset: -2px;
2337
+ }
2338
+
2339
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
2340
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2341
+ font: inherit;
2342
+ color: var(--lily-text);
2343
+ background-color: var(--lily-surface);
2344
+ border: var(--border) solid var(--lily-border-strong);
2345
+ border-radius: var(--lily-radius-sm);
2346
+ }
2347
+
2348
+ :where(.one-time-password-input) {
2349
+ font-family: var(--lily-font-mono);
2350
+ letter-spacing: 0.25em;
2351
+ }
2352
+
2353
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
2354
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
2355
+ existing five as block figures. Every chart's optional data-table
2356
+ wrapper sits below the graphic; the table itself inherits the
2357
+ catalog's table styling. */
2358
+ :where(
2359
+ .gauge-chart,
2360
+ .heatmap-chart,
2361
+ .radar-chart,
2362
+ .sankey-chart,
2363
+ .pie-chart,
2364
+ .ring-chart,
2365
+ .funnel-chart,
2366
+ .candlestick-chart,
2367
+ .composed-chart,
2368
+ .choropleth-chart,
2369
+ .sunburst-chart
2370
+ ) {
2371
+ display: block;
2372
+ margin: 0;
2373
+ }
2374
+
2375
+ :where(
2376
+ .area-chart-data-table,
2377
+ .bar-chart-data-table,
2378
+ .column-chart-data-table,
2379
+ .line-chart-data-table,
2380
+ .scatter-chart-data-table,
2381
+ .gauge-chart-data-table,
2382
+ .heatmap-chart-data-table,
2383
+ .radar-chart-data-table,
2384
+ .sankey-chart-data-table,
2385
+ .pie-chart-data-table,
2386
+ .ring-chart-data-table,
2387
+ .funnel-chart-data-table,
2388
+ .candlestick-chart-data-table,
2389
+ .composed-chart-data-table,
2390
+ .choropleth-chart-data-table,
2391
+ .sunburst-chart-data-table
2392
+ ) {
2393
+ margin-block-start: var(--lily-space-sm);
2394
+ overflow-x: auto;
2395
+ }
2396
+
2397
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
2398
+ to the name in the summary and is never the only cue. [data-status] is
2399
+ the consumer hook for a spinner or icon. */
2400
+ :where(.tool-call) {
2401
+ border: var(--border) solid var(--lily-border-strong);
2402
+ border-radius: var(--lily-radius-md);
2403
+ background-color: var(--lily-surface);
2404
+ color: var(--lily-text);
2405
+ }
2406
+
2407
+ :where(.tool-call-summary) {
2408
+ display: flex;
2409
+ align-items: center;
2410
+ gap: var(--lily-space-sm);
2411
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2412
+ cursor: pointer;
2413
+ }
2414
+
2415
+ :where(.tool-call-content) {
2416
+ display: grid;
2417
+ gap: var(--lily-space-xs);
2418
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2419
+ border-block-start: var(--border) solid var(--lily-border-strong);
2420
+ }
2421
+
2422
+ :where(.tool-call-name) {
2423
+ font-family: var(--lily-font-mono);
2424
+ }
2425
+
2426
+ :where(.tool-call-status) {
2427
+ color: var(--lily-text-muted);
2428
+ }
2429
+
2430
+ :where(.tool-call-input pre, .tool-call-output pre) {
2431
+ margin: 0;
2432
+ overflow-x: auto;
2433
+ font-family: var(--lily-font-mono);
2434
+ }
2435
+
2436
+ :where(.tool-call-error) {
2437
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2438
+ border: var(--border) solid var(--lily-border-strong);
2439
+ border-radius: var(--lily-radius-sm);
2440
+ font-weight: 600;
2441
+ }
2442
+
2443
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
2444
+ fixed yellow; this uses the theme's own surface and text tokens so the
2445
+ pair keeps its contrast in every theme (including dark ones). */
2446
+ :where(.mark) {
2447
+ padding-inline: 0.15em;
2448
+ color: var(--lily-text);
2449
+ background-color: var(--lily-surface-alt);
2450
+ border-radius: var(--lily-radius-sm);
2451
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
2452
+ }
2453
+
2454
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
2455
+ button's visible word is its accessible name — hide it visually, never
2456
+ with display:none, if you replace it with an icon. */
2457
+ :where(.chat-composer) {
2458
+ display: flex;
2459
+ align-items: flex-end;
2460
+ gap: var(--lily-space-xs);
2461
+ }
2462
+
2463
+ :where(.chat-composer-input) {
2464
+ flex: 1;
2465
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2466
+ font: inherit;
2467
+ color: var(--lily-text);
2468
+ background-color: var(--lily-surface);
2469
+ border: var(--border) solid var(--lily-border-strong);
2470
+ border-radius: var(--lily-radius-md);
2471
+ resize: none;
2472
+ }
2473
+
2474
+ :where(.chat-composer-button) {
2475
+ min-width: 2.5rem;
2476
+ min-height: 2.5rem;
2477
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2478
+ font: inherit;
2479
+ color: var(--lily-text);
2480
+ background-color: var(--lily-surface);
2481
+ border: var(--border) solid var(--lily-border-strong);
2482
+ border-radius: var(--lily-radius-md);
2483
+ cursor: pointer;
2484
+ }
2485
+
2486
+ :where(.chat-composer-button:disabled) {
2487
+ cursor: not-allowed;
2488
+ opacity: 0.6;
2489
+ }
2490
+
2491
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
2492
+ element beside each picker's icon button, holding the same text as
2493
+ its aria-label. The component toggles [hidden]; position and look
2494
+ are here. It sits just below the button, in the inverse of the
2495
+ page colours so it never disappears into the surface. A ::before
2496
+ strip bridges the gap to the button so the pointer can travel onto
2497
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
2498
+ :where(.motion-picker) {
2499
+ position: relative;
2500
+ display: inline-block;
2501
+ }
2502
+
2503
+ :where(
2504
+ .theme-picker-tooltip,
2505
+ .locale-picker-tooltip,
2506
+ .text-size-picker-tooltip,
2507
+ .motion-picker-tooltip,
2508
+ .share-picker-tooltip,
2509
+ .search-picker-tooltip,
2510
+ .date-time-picker-tooltip
2511
+ ) {
2512
+ position: absolute;
2513
+ z-index: 11;
2514
+ inset-inline-start: 0;
2515
+ inset-block-start: 100%;
2516
+ margin-block-start: var(--lily-space-xs);
2517
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2518
+ font-size: 0.875em;
2519
+ line-height: 1.3;
2520
+ white-space: nowrap;
2521
+ color: var(--lily-surface);
2522
+ background-color: var(--lily-text);
2523
+ border-radius: var(--lily-radius-sm);
2524
+ box-shadow: var(--lily-shadow-md);
2525
+ }
2526
+
2527
+ :where(
2528
+ .theme-picker-tooltip,
2529
+ .locale-picker-tooltip,
2530
+ .text-size-picker-tooltip,
2531
+ .motion-picker-tooltip,
2532
+ .share-picker-tooltip,
2533
+ .search-picker-tooltip,
2534
+ .date-time-picker-tooltip
2535
+ )::before {
2536
+ content: "";
2537
+ position: absolute;
2538
+ inset-inline: 0;
2539
+ inset-block-end: 100%;
2540
+ height: var(--lily-space-xs);
2541
+ }
2542
+
2543
+ :where(
2544
+ .theme-picker-tooltip,
2545
+ .locale-picker-tooltip,
2546
+ .text-size-picker-tooltip,
2547
+ .motion-picker-tooltip,
2548
+ .share-picker-tooltip,
2549
+ .search-picker-tooltip,
2550
+ .date-time-picker-tooltip
2551
+ )[hidden] {
2552
+ display: none;
2553
+ }
2554
+
2555
+ /* search-picker's panel holds a search form rather than a list: the
2556
+ field and the ⏎ submit button sit in one row, the button at the
2557
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
2558
+ button matches the picker trigger buttons' size and border. */
2559
+ :where(.search-picker-form) {
2560
+ display: flex;
2561
+ align-items: stretch;
2562
+ gap: var(--lily-space-xs);
2563
+ margin: 0;
2564
+ }
2565
+
2566
+ :where(.search-picker-input) {
2567
+ min-width: 14rem;
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-sm);
2574
+ }
2575
+
2576
+ :where(.search-picker-submit) {
2577
+ display: inline-flex;
2578
+ align-items: center;
2579
+ justify-content: center;
2580
+ min-width: 2.5rem;
2581
+ min-height: 2.5rem;
2582
+ padding: var(--lily-space-xs);
2583
+ font: inherit;
2584
+ line-height: 1;
2585
+ color: var(--lily-text);
2586
+ background-color: var(--lily-surface);
2587
+ border: var(--border) solid var(--lily-border-strong);
2588
+ border-radius: var(--lily-radius-md);
2589
+ cursor: pointer;
2590
+ }
2591
+
2592
+ :where(.search-picker-submit:hover) {
2593
+ background-color: var(--lily-surface-alt);
2594
+ }
2595
+
2238
2596
  :where(
2239
2597
  .theme-picker-list,
2240
2598
  .locale-picker-list,
2241
2599
  .text-size-picker-list,
2242
- .share-picker-list
2600
+ .share-picker-list,
2601
+ .search-picker-panel
2243
2602
  ) {
2244
2603
  position: absolute;
2245
2604
  z-index: 10;
@@ -2263,7 +2622,8 @@
2263
2622
  .theme-picker-list,
2264
2623
  .locale-picker-list,
2265
2624
  .text-size-picker-list,
2266
- .share-picker-list
2625
+ .share-picker-list,
2626
+ .search-picker-panel
2267
2627
  )[hidden] {
2268
2628
  display: none;
2269
2629
  }