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