@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
@@ -160,6 +160,14 @@
160
160
  /* Primary body-copy colour. Maps to the theme's high-contrast
161
161
  reading colour. */
162
162
  --lily-text: var(--color-base-content);
163
+ /* 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
164
+ keeps WCAG contrast as text on the page and on the error-tinted
165
+ callout surface (`--color-error` itself is a fill colour). */
166
+ --lily-error-text: color-mix(
167
+ in oklch,
168
+ var(--color-error) 22%,
169
+ var(--color-base-content)
170
+ );
163
171
  /* Muted / secondary text — mixed 70% with transparent to keep the
164
172
  hue but lower contrast for captions, helptext, placeholders. */
165
173
  --lily-text-muted: color-mix(
@@ -899,7 +907,7 @@
899
907
  }
900
908
  :where(.dont-list-item)::marker {
901
909
  content: "✗ ";
902
- color: var(--color-error);
910
+ color: var(--lily-error-text);
903
911
  }
904
912
 
905
913
  /* --- Tree --------------------------------------------------------------- */
@@ -981,7 +989,7 @@
981
989
  color: var(--color-success);
982
990
  }
983
991
  :where(.validation-list-item[data-status="failed"]) {
984
- color: var(--color-error);
992
+ color: var(--lily-error-text);
985
993
  }
986
994
  :where(.validation-list-item[data-status="pending"]) {
987
995
  color: var(--lily-text-muted);
@@ -1339,7 +1347,7 @@
1339
1347
 
1340
1348
  /* Error message — inline form-validation message. */
1341
1349
  :where(.error-message) {
1342
- color: var(--color-error);
1350
+ color: var(--lily-error-text);
1343
1351
  font-weight: 600;
1344
1352
  }
1345
1353
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2074,6 +2082,7 @@
2074
2082
  .theme-picker,
2075
2083
  .locale-picker,
2076
2084
  .text-size-picker,
2085
+ .search-picker,
2077
2086
  .share-picker,
2078
2087
  .date-time-picker
2079
2088
  ) {
@@ -2085,6 +2094,7 @@
2085
2094
  .theme-picker-button,
2086
2095
  .locale-picker-button,
2087
2096
  .text-size-picker-button,
2097
+ .search-picker-button,
2088
2098
  .share-picker-button,
2089
2099
  .date-time-picker-button
2090
2100
  ) {
@@ -2120,7 +2130,8 @@
2120
2130
  .locale-picker-icon,
2121
2131
  .text-size-picker-icon,
2122
2132
  .motion-picker-icon,
2123
- .share-picker-icon
2133
+ .share-picker-icon,
2134
+ .search-picker-icon
2124
2135
  ) {
2125
2136
  display: inline-flex;
2126
2137
  align-items: center;
@@ -2199,11 +2210,359 @@
2199
2210
  line-height: 0;
2200
2211
  }
2201
2212
 
2213
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
2214
+ empty-state, file-tree, one-time-password-input, multi-select, and
2215
+ the four calendar views. The calendar views reuse the
2216
+ calendar-table-* sub-element hooks, so they only need the table
2217
+ root rule. show-more's clamp is keyed on data-expanded (the
2218
+ component never sets an inline style); file-tree hides a closed
2219
+ folder's group via aria-expanded. */
2220
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
2221
+ width: 100%;
2222
+ border-collapse: collapse;
2223
+ }
2224
+
2225
+ :where(.kbd-shortcut) {
2226
+ display: inline-flex;
2227
+ align-items: center;
2228
+ gap: var(--lily-space-xs);
2229
+ }
2230
+
2231
+ :where(.kbd-shortcut-key) {
2232
+ display: inline-block;
2233
+ padding: 0.125rem 0.4rem;
2234
+ font-family: var(--lily-font-mono);
2235
+ font-size: 0.85em;
2236
+ background-color: var(--lily-surface-alt);
2237
+ border: var(--border) solid var(--lily-border-strong);
2238
+ border-bottom-width: 2px;
2239
+ border-radius: var(--lily-radius-sm);
2240
+ }
2241
+
2242
+ :where(.show-more-content[data-expanded="false"]) {
2243
+ max-height: 6em;
2244
+ overflow: hidden;
2245
+ }
2246
+
2247
+ :where(.show-more-button) {
2248
+ margin-block-start: var(--lily-space-xs);
2249
+ padding: var(--lily-space-xs);
2250
+ font: inherit;
2251
+ color: inherit;
2252
+ text-decoration: underline;
2253
+ background: none;
2254
+ border: 0;
2255
+ cursor: pointer;
2256
+ }
2257
+
2258
+ :where(.thinking) {
2259
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2260
+ color: var(--lily-text-muted);
2261
+ border: var(--border) solid var(--lily-border-strong);
2262
+ border-radius: var(--lily-radius-md);
2263
+ }
2264
+
2265
+ :where(.thinking-summary) {
2266
+ cursor: pointer;
2267
+ }
2268
+
2269
+ :where(.thinking[data-streaming] .thinking-summary) {
2270
+ font-style: italic;
2271
+ }
2272
+
2273
+ :where(.empty-state) {
2274
+ padding: var(--lily-space-lg);
2275
+ text-align: center;
2276
+ color: var(--lily-text-muted);
2277
+ }
2278
+
2279
+ :where(.file-tree, .file-tree [role="group"]) {
2280
+ margin: 0;
2281
+ padding-inline-start: 0;
2282
+ list-style: none;
2283
+ }
2284
+
2285
+ :where(.file-tree [role="group"]) {
2286
+ padding-inline-start: var(--lily-space-md);
2287
+ }
2288
+
2289
+ :where(.file-tree [role="treeitem"]) {
2290
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2291
+ cursor: pointer;
2292
+ }
2293
+
2294
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
2295
+ display: none;
2296
+ }
2297
+
2298
+ :where(.file-tree [role="treeitem"]:focus-visible) {
2299
+ outline: var(--lily-focus-ring);
2300
+ outline-offset: -2px;
2301
+ }
2302
+
2303
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
2304
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2305
+ font: inherit;
2306
+ color: var(--lily-text);
2307
+ background-color: var(--lily-surface);
2308
+ border: var(--border) solid var(--lily-border-strong);
2309
+ border-radius: var(--lily-radius-sm);
2310
+ }
2311
+
2312
+ :where(.one-time-password-input) {
2313
+ font-family: var(--lily-font-mono);
2314
+ letter-spacing: 0.25em;
2315
+ }
2316
+
2317
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
2318
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
2319
+ existing five as block figures. Every chart's optional data-table
2320
+ wrapper sits below the graphic; the table itself inherits the
2321
+ catalog's table styling. */
2322
+ :where(
2323
+ .gauge-chart,
2324
+ .heatmap-chart,
2325
+ .radar-chart,
2326
+ .sankey-chart,
2327
+ .pie-chart,
2328
+ .ring-chart,
2329
+ .funnel-chart,
2330
+ .candlestick-chart,
2331
+ .composed-chart,
2332
+ .choropleth-chart,
2333
+ .sunburst-chart
2334
+ ) {
2335
+ display: block;
2336
+ margin: 0;
2337
+ }
2338
+
2339
+ :where(
2340
+ .area-chart-data-table,
2341
+ .bar-chart-data-table,
2342
+ .column-chart-data-table,
2343
+ .line-chart-data-table,
2344
+ .scatter-chart-data-table,
2345
+ .gauge-chart-data-table,
2346
+ .heatmap-chart-data-table,
2347
+ .radar-chart-data-table,
2348
+ .sankey-chart-data-table,
2349
+ .pie-chart-data-table,
2350
+ .ring-chart-data-table,
2351
+ .funnel-chart-data-table,
2352
+ .candlestick-chart-data-table,
2353
+ .composed-chart-data-table,
2354
+ .choropleth-chart-data-table,
2355
+ .sunburst-chart-data-table
2356
+ ) {
2357
+ margin-block-start: var(--lily-space-sm);
2358
+ overflow-x: auto;
2359
+ }
2360
+
2361
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
2362
+ to the name in the summary and is never the only cue. [data-status] is
2363
+ the consumer hook for a spinner or icon. */
2364
+ :where(.tool-call) {
2365
+ border: var(--border) solid var(--lily-border-strong);
2366
+ border-radius: var(--lily-radius-md);
2367
+ background-color: var(--lily-surface);
2368
+ color: var(--lily-text);
2369
+ }
2370
+
2371
+ :where(.tool-call-summary) {
2372
+ display: flex;
2373
+ align-items: center;
2374
+ gap: var(--lily-space-sm);
2375
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2376
+ cursor: pointer;
2377
+ }
2378
+
2379
+ :where(.tool-call-content) {
2380
+ display: grid;
2381
+ gap: var(--lily-space-xs);
2382
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2383
+ border-block-start: var(--border) solid var(--lily-border-strong);
2384
+ }
2385
+
2386
+ :where(.tool-call-name) {
2387
+ font-family: var(--lily-font-mono);
2388
+ }
2389
+
2390
+ :where(.tool-call-status) {
2391
+ color: var(--lily-text-muted);
2392
+ }
2393
+
2394
+ :where(.tool-call-input pre, .tool-call-output pre) {
2395
+ margin: 0;
2396
+ overflow-x: auto;
2397
+ font-family: var(--lily-font-mono);
2398
+ }
2399
+
2400
+ :where(.tool-call-error) {
2401
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2402
+ border: var(--border) solid var(--lily-border-strong);
2403
+ border-radius: var(--lily-radius-sm);
2404
+ font-weight: 600;
2405
+ }
2406
+
2407
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
2408
+ fixed yellow; this uses the theme's own surface and text tokens so the
2409
+ pair keeps its contrast in every theme (including dark ones). */
2410
+ :where(.mark) {
2411
+ padding-inline: 0.15em;
2412
+ color: var(--lily-text);
2413
+ background-color: var(--lily-surface-alt);
2414
+ border-radius: var(--lily-radius-sm);
2415
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
2416
+ }
2417
+
2418
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
2419
+ button's visible word is its accessible name — hide it visually, never
2420
+ with display:none, if you replace it with an icon. */
2421
+ :where(.chat-composer) {
2422
+ display: flex;
2423
+ align-items: flex-end;
2424
+ gap: var(--lily-space-xs);
2425
+ }
2426
+
2427
+ :where(.chat-composer-input) {
2428
+ flex: 1;
2429
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2430
+ font: inherit;
2431
+ color: var(--lily-text);
2432
+ background-color: var(--lily-surface);
2433
+ border: var(--border) solid var(--lily-border-strong);
2434
+ border-radius: var(--lily-radius-md);
2435
+ resize: none;
2436
+ }
2437
+
2438
+ :where(.chat-composer-button) {
2439
+ min-width: 2.5rem;
2440
+ min-height: 2.5rem;
2441
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2442
+ font: inherit;
2443
+ color: var(--lily-text);
2444
+ background-color: var(--lily-surface);
2445
+ border: var(--border) solid var(--lily-border-strong);
2446
+ border-radius: var(--lily-radius-md);
2447
+ cursor: pointer;
2448
+ }
2449
+
2450
+ :where(.chat-composer-button:disabled) {
2451
+ cursor: not-allowed;
2452
+ opacity: 0.6;
2453
+ }
2454
+
2455
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
2456
+ element beside each picker's icon button, holding the same text as
2457
+ its aria-label. The component toggles [hidden]; position and look
2458
+ are here. It sits just below the button, in the inverse of the
2459
+ page colours so it never disappears into the surface. A ::before
2460
+ strip bridges the gap to the button so the pointer can travel onto
2461
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
2462
+ :where(.motion-picker) {
2463
+ position: relative;
2464
+ display: inline-block;
2465
+ }
2466
+
2467
+ :where(
2468
+ .theme-picker-tooltip,
2469
+ .locale-picker-tooltip,
2470
+ .text-size-picker-tooltip,
2471
+ .motion-picker-tooltip,
2472
+ .share-picker-tooltip,
2473
+ .search-picker-tooltip,
2474
+ .date-time-picker-tooltip
2475
+ ) {
2476
+ position: absolute;
2477
+ z-index: 11;
2478
+ inset-inline-start: 0;
2479
+ inset-block-start: 100%;
2480
+ margin-block-start: var(--lily-space-xs);
2481
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2482
+ font-size: 0.875em;
2483
+ line-height: 1.3;
2484
+ white-space: nowrap;
2485
+ color: var(--lily-surface);
2486
+ background-color: var(--lily-text);
2487
+ border-radius: var(--lily-radius-sm);
2488
+ box-shadow: var(--lily-shadow-md);
2489
+ }
2490
+
2491
+ :where(
2492
+ .theme-picker-tooltip,
2493
+ .locale-picker-tooltip,
2494
+ .text-size-picker-tooltip,
2495
+ .motion-picker-tooltip,
2496
+ .share-picker-tooltip,
2497
+ .search-picker-tooltip,
2498
+ .date-time-picker-tooltip
2499
+ )::before {
2500
+ content: "";
2501
+ position: absolute;
2502
+ inset-inline: 0;
2503
+ inset-block-end: 100%;
2504
+ height: var(--lily-space-xs);
2505
+ }
2506
+
2507
+ :where(
2508
+ .theme-picker-tooltip,
2509
+ .locale-picker-tooltip,
2510
+ .text-size-picker-tooltip,
2511
+ .motion-picker-tooltip,
2512
+ .share-picker-tooltip,
2513
+ .search-picker-tooltip,
2514
+ .date-time-picker-tooltip
2515
+ )[hidden] {
2516
+ display: none;
2517
+ }
2518
+
2519
+ /* search-picker's panel holds a search form rather than a list: the
2520
+ field and the ⏎ submit button sit in one row, the button at the
2521
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
2522
+ button matches the picker trigger buttons' size and border. */
2523
+ :where(.search-picker-form) {
2524
+ display: flex;
2525
+ align-items: stretch;
2526
+ gap: var(--lily-space-xs);
2527
+ margin: 0;
2528
+ }
2529
+
2530
+ :where(.search-picker-input) {
2531
+ min-width: 14rem;
2532
+ padding: var(--lily-space-xs) var(--lily-space-sm);
2533
+ font: inherit;
2534
+ color: var(--lily-text);
2535
+ background-color: var(--lily-surface);
2536
+ border: var(--border) solid var(--lily-border-strong);
2537
+ border-radius: var(--lily-radius-sm);
2538
+ }
2539
+
2540
+ :where(.search-picker-submit) {
2541
+ display: inline-flex;
2542
+ align-items: center;
2543
+ justify-content: center;
2544
+ min-width: 2.5rem;
2545
+ min-height: 2.5rem;
2546
+ padding: var(--lily-space-xs);
2547
+ font: inherit;
2548
+ line-height: 1;
2549
+ color: var(--lily-text);
2550
+ background-color: var(--lily-surface);
2551
+ border: var(--border) solid var(--lily-border-strong);
2552
+ border-radius: var(--lily-radius-md);
2553
+ cursor: pointer;
2554
+ }
2555
+
2556
+ :where(.search-picker-submit:hover) {
2557
+ background-color: var(--lily-surface-alt);
2558
+ }
2559
+
2202
2560
  :where(
2203
2561
  .theme-picker-list,
2204
2562
  .locale-picker-list,
2205
2563
  .text-size-picker-list,
2206
- .share-picker-list
2564
+ .share-picker-list,
2565
+ .search-picker-panel
2207
2566
  ) {
2208
2567
  position: absolute;
2209
2568
  z-index: 10;
@@ -2227,7 +2586,8 @@
2227
2586
  .theme-picker-list,
2228
2587
  .locale-picker-list,
2229
2588
  .text-size-picker-list,
2230
- .share-picker-list
2589
+ .share-picker-list,
2590
+ .search-picker-panel
2231
2591
  )[hidden] {
2232
2592
  display: none;
2233
2593
  }