@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
@@ -535,6 +535,14 @@
535
535
  /* Primary body-copy colour. Maps to the theme's high-contrast
536
536
  reading colour. */
537
537
  --lily-text: var(--color-base-content);
538
+ /* 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
539
+ keeps WCAG contrast as text on the page and on the error-tinted
540
+ callout surface (`--color-error` itself is a fill colour). */
541
+ --lily-error-text: color-mix(
542
+ in oklch,
543
+ var(--color-error) 22%,
544
+ var(--color-base-content)
545
+ );
538
546
  /* Muted / secondary text — mixed 70% with transparent to keep the
539
547
  hue but lower contrast for captions, helptext, placeholders. */
540
548
  --lily-text-muted: color-mix(
@@ -1586,7 +1594,7 @@
1586
1594
  }
1587
1595
  :where(.dont-list-item)::marker {
1588
1596
  content: "✗ ";
1589
- color: var(--color-error);
1597
+ color: var(--lily-error-text);
1590
1598
  }
1591
1599
 
1592
1600
  /* --- Tree --------------------------------------------------------------- */
@@ -1668,7 +1676,7 @@
1668
1676
  color: var(--color-success);
1669
1677
  }
1670
1678
  :where(.validation-list-item[data-status="failed"]) {
1671
- color: var(--color-error);
1679
+ color: var(--lily-error-text);
1672
1680
  }
1673
1681
  :where(.validation-list-item[data-status="pending"]) {
1674
1682
  color: var(--lily-text-muted);
@@ -2154,7 +2162,7 @@
2154
2162
 
2155
2163
  /* Error message — inline form-validation message. */
2156
2164
  :where(.error-message) {
2157
- color: var(--color-error);
2165
+ color: var(--lily-error-text);
2158
2166
  font-weight: 600;
2159
2167
  }
2160
2168
  /* Error summary — heavyweight border (GOV.UK pattern) so users scrolling
@@ -3026,6 +3034,7 @@
3026
3034
  .theme-picker,
3027
3035
  .locale-picker,
3028
3036
  .text-size-picker,
3037
+ .search-picker,
3029
3038
  .share-picker,
3030
3039
  .date-time-picker
3031
3040
  ) {
@@ -3037,6 +3046,7 @@
3037
3046
  .theme-picker-button,
3038
3047
  .locale-picker-button,
3039
3048
  .text-size-picker-button,
3049
+ .search-picker-button,
3040
3050
  .share-picker-button,
3041
3051
  .date-time-picker-button
3042
3052
  ) {
@@ -3072,7 +3082,8 @@
3072
3082
  .locale-picker-icon,
3073
3083
  .text-size-picker-icon,
3074
3084
  .motion-picker-icon,
3075
- .share-picker-icon
3085
+ .share-picker-icon,
3086
+ .search-picker-icon
3076
3087
  ) {
3077
3088
  display: inline-flex;
3078
3089
  align-items: center;
@@ -3151,11 +3162,359 @@
3151
3162
  line-height: 0;
3152
3163
  }
3153
3164
 
3165
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
3166
+ empty-state, file-tree, one-time-password-input, multi-select, and
3167
+ the four calendar views. The calendar views reuse the
3168
+ calendar-table-* sub-element hooks, so they only need the table
3169
+ root rule. show-more's clamp is keyed on data-expanded (the
3170
+ component never sets an inline style); file-tree hides a closed
3171
+ folder's group via aria-expanded. */
3172
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
3173
+ width: 100%;
3174
+ border-collapse: collapse;
3175
+ }
3176
+
3177
+ :where(.kbd-shortcut) {
3178
+ display: inline-flex;
3179
+ align-items: center;
3180
+ gap: var(--lily-space-xs);
3181
+ }
3182
+
3183
+ :where(.kbd-shortcut-key) {
3184
+ display: inline-block;
3185
+ padding: 0.125rem 0.4rem;
3186
+ font-family: var(--lily-font-mono);
3187
+ font-size: 0.85em;
3188
+ background-color: var(--lily-surface-alt);
3189
+ border: var(--border) solid var(--lily-border-strong);
3190
+ border-bottom-width: 2px;
3191
+ border-radius: var(--lily-radius-sm);
3192
+ }
3193
+
3194
+ :where(.show-more-content[data-expanded="false"]) {
3195
+ max-height: 6em;
3196
+ overflow: hidden;
3197
+ }
3198
+
3199
+ :where(.show-more-button) {
3200
+ margin-block-start: var(--lily-space-xs);
3201
+ padding: var(--lily-space-xs);
3202
+ font: inherit;
3203
+ color: inherit;
3204
+ text-decoration: underline;
3205
+ background: none;
3206
+ border: 0;
3207
+ cursor: pointer;
3208
+ }
3209
+
3210
+ :where(.thinking) {
3211
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3212
+ color: var(--lily-text-muted);
3213
+ border: var(--border) solid var(--lily-border-strong);
3214
+ border-radius: var(--lily-radius-md);
3215
+ }
3216
+
3217
+ :where(.thinking-summary) {
3218
+ cursor: pointer;
3219
+ }
3220
+
3221
+ :where(.thinking[data-streaming] .thinking-summary) {
3222
+ font-style: italic;
3223
+ }
3224
+
3225
+ :where(.empty-state) {
3226
+ padding: var(--lily-space-lg);
3227
+ text-align: center;
3228
+ color: var(--lily-text-muted);
3229
+ }
3230
+
3231
+ :where(.file-tree, .file-tree [role="group"]) {
3232
+ margin: 0;
3233
+ padding-inline-start: 0;
3234
+ list-style: none;
3235
+ }
3236
+
3237
+ :where(.file-tree [role="group"]) {
3238
+ padding-inline-start: var(--lily-space-md);
3239
+ }
3240
+
3241
+ :where(.file-tree [role="treeitem"]) {
3242
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3243
+ cursor: pointer;
3244
+ }
3245
+
3246
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
3247
+ display: none;
3248
+ }
3249
+
3250
+ :where(.file-tree [role="treeitem"]:focus-visible) {
3251
+ outline: var(--lily-focus-ring);
3252
+ outline-offset: -2px;
3253
+ }
3254
+
3255
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
3256
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3257
+ font: inherit;
3258
+ color: var(--lily-text);
3259
+ background-color: var(--lily-surface);
3260
+ border: var(--border) solid var(--lily-border-strong);
3261
+ border-radius: var(--lily-radius-sm);
3262
+ }
3263
+
3264
+ :where(.one-time-password-input) {
3265
+ font-family: var(--lily-font-mono);
3266
+ letter-spacing: 0.25em;
3267
+ }
3268
+
3269
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
3270
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
3271
+ existing five as block figures. Every chart's optional data-table
3272
+ wrapper sits below the graphic; the table itself inherits the
3273
+ catalog's table styling. */
3274
+ :where(
3275
+ .gauge-chart,
3276
+ .heatmap-chart,
3277
+ .radar-chart,
3278
+ .sankey-chart,
3279
+ .pie-chart,
3280
+ .ring-chart,
3281
+ .funnel-chart,
3282
+ .candlestick-chart,
3283
+ .composed-chart,
3284
+ .choropleth-chart,
3285
+ .sunburst-chart
3286
+ ) {
3287
+ display: block;
3288
+ margin: 0;
3289
+ }
3290
+
3291
+ :where(
3292
+ .area-chart-data-table,
3293
+ .bar-chart-data-table,
3294
+ .column-chart-data-table,
3295
+ .line-chart-data-table,
3296
+ .scatter-chart-data-table,
3297
+ .gauge-chart-data-table,
3298
+ .heatmap-chart-data-table,
3299
+ .radar-chart-data-table,
3300
+ .sankey-chart-data-table,
3301
+ .pie-chart-data-table,
3302
+ .ring-chart-data-table,
3303
+ .funnel-chart-data-table,
3304
+ .candlestick-chart-data-table,
3305
+ .composed-chart-data-table,
3306
+ .choropleth-chart-data-table,
3307
+ .sunburst-chart-data-table
3308
+ ) {
3309
+ margin-block-start: var(--lily-space-sm);
3310
+ overflow-x: auto;
3311
+ }
3312
+
3313
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
3314
+ to the name in the summary and is never the only cue. [data-status] is
3315
+ the consumer hook for a spinner or icon. */
3316
+ :where(.tool-call) {
3317
+ border: var(--border) solid var(--lily-border-strong);
3318
+ border-radius: var(--lily-radius-md);
3319
+ background-color: var(--lily-surface);
3320
+ color: var(--lily-text);
3321
+ }
3322
+
3323
+ :where(.tool-call-summary) {
3324
+ display: flex;
3325
+ align-items: center;
3326
+ gap: var(--lily-space-sm);
3327
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3328
+ cursor: pointer;
3329
+ }
3330
+
3331
+ :where(.tool-call-content) {
3332
+ display: grid;
3333
+ gap: var(--lily-space-xs);
3334
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3335
+ border-block-start: var(--border) solid var(--lily-border-strong);
3336
+ }
3337
+
3338
+ :where(.tool-call-name) {
3339
+ font-family: var(--lily-font-mono);
3340
+ }
3341
+
3342
+ :where(.tool-call-status) {
3343
+ color: var(--lily-text-muted);
3344
+ }
3345
+
3346
+ :where(.tool-call-input pre, .tool-call-output pre) {
3347
+ margin: 0;
3348
+ overflow-x: auto;
3349
+ font-family: var(--lily-font-mono);
3350
+ }
3351
+
3352
+ :where(.tool-call-error) {
3353
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3354
+ border: var(--border) solid var(--lily-border-strong);
3355
+ border-radius: var(--lily-radius-sm);
3356
+ font-weight: 600;
3357
+ }
3358
+
3359
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
3360
+ fixed yellow; this uses the theme's own surface and text tokens so the
3361
+ pair keeps its contrast in every theme (including dark ones). */
3362
+ :where(.mark) {
3363
+ padding-inline: 0.15em;
3364
+ color: var(--lily-text);
3365
+ background-color: var(--lily-surface-alt);
3366
+ border-radius: var(--lily-radius-sm);
3367
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
3368
+ }
3369
+
3370
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
3371
+ button's visible word is its accessible name — hide it visually, never
3372
+ with display:none, if you replace it with an icon. */
3373
+ :where(.chat-composer) {
3374
+ display: flex;
3375
+ align-items: flex-end;
3376
+ gap: var(--lily-space-xs);
3377
+ }
3378
+
3379
+ :where(.chat-composer-input) {
3380
+ flex: 1;
3381
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3382
+ font: inherit;
3383
+ color: var(--lily-text);
3384
+ background-color: var(--lily-surface);
3385
+ border: var(--border) solid var(--lily-border-strong);
3386
+ border-radius: var(--lily-radius-md);
3387
+ resize: none;
3388
+ }
3389
+
3390
+ :where(.chat-composer-button) {
3391
+ min-width: 2.5rem;
3392
+ min-height: 2.5rem;
3393
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3394
+ font: inherit;
3395
+ color: var(--lily-text);
3396
+ background-color: var(--lily-surface);
3397
+ border: var(--border) solid var(--lily-border-strong);
3398
+ border-radius: var(--lily-radius-md);
3399
+ cursor: pointer;
3400
+ }
3401
+
3402
+ :where(.chat-composer-button:disabled) {
3403
+ cursor: not-allowed;
3404
+ opacity: 0.6;
3405
+ }
3406
+
3407
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
3408
+ element beside each picker's icon button, holding the same text as
3409
+ its aria-label. The component toggles [hidden]; position and look
3410
+ are here. It sits just below the button, in the inverse of the
3411
+ page colours so it never disappears into the surface. A ::before
3412
+ strip bridges the gap to the button so the pointer can travel onto
3413
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
3414
+ :where(.motion-picker) {
3415
+ position: relative;
3416
+ display: inline-block;
3417
+ }
3418
+
3419
+ :where(
3420
+ .theme-picker-tooltip,
3421
+ .locale-picker-tooltip,
3422
+ .text-size-picker-tooltip,
3423
+ .motion-picker-tooltip,
3424
+ .share-picker-tooltip,
3425
+ .search-picker-tooltip,
3426
+ .date-time-picker-tooltip
3427
+ ) {
3428
+ position: absolute;
3429
+ z-index: 11;
3430
+ inset-inline-start: 0;
3431
+ inset-block-start: 100%;
3432
+ margin-block-start: var(--lily-space-xs);
3433
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3434
+ font-size: 0.875em;
3435
+ line-height: 1.3;
3436
+ white-space: nowrap;
3437
+ color: var(--lily-surface);
3438
+ background-color: var(--lily-text);
3439
+ border-radius: var(--lily-radius-sm);
3440
+ box-shadow: var(--lily-shadow-md);
3441
+ }
3442
+
3443
+ :where(
3444
+ .theme-picker-tooltip,
3445
+ .locale-picker-tooltip,
3446
+ .text-size-picker-tooltip,
3447
+ .motion-picker-tooltip,
3448
+ .share-picker-tooltip,
3449
+ .search-picker-tooltip,
3450
+ .date-time-picker-tooltip
3451
+ )::before {
3452
+ content: "";
3453
+ position: absolute;
3454
+ inset-inline: 0;
3455
+ inset-block-end: 100%;
3456
+ height: var(--lily-space-xs);
3457
+ }
3458
+
3459
+ :where(
3460
+ .theme-picker-tooltip,
3461
+ .locale-picker-tooltip,
3462
+ .text-size-picker-tooltip,
3463
+ .motion-picker-tooltip,
3464
+ .share-picker-tooltip,
3465
+ .search-picker-tooltip,
3466
+ .date-time-picker-tooltip
3467
+ )[hidden] {
3468
+ display: none;
3469
+ }
3470
+
3471
+ /* search-picker's panel holds a search form rather than a list: the
3472
+ field and the ⏎ submit button sit in one row, the button at the
3473
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
3474
+ button matches the picker trigger buttons' size and border. */
3475
+ :where(.search-picker-form) {
3476
+ display: flex;
3477
+ align-items: stretch;
3478
+ gap: var(--lily-space-xs);
3479
+ margin: 0;
3480
+ }
3481
+
3482
+ :where(.search-picker-input) {
3483
+ min-width: 14rem;
3484
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3485
+ font: inherit;
3486
+ color: var(--lily-text);
3487
+ background-color: var(--lily-surface);
3488
+ border: var(--border) solid var(--lily-border-strong);
3489
+ border-radius: var(--lily-radius-sm);
3490
+ }
3491
+
3492
+ :where(.search-picker-submit) {
3493
+ display: inline-flex;
3494
+ align-items: center;
3495
+ justify-content: center;
3496
+ min-width: 2.5rem;
3497
+ min-height: 2.5rem;
3498
+ padding: var(--lily-space-xs);
3499
+ font: inherit;
3500
+ line-height: 1;
3501
+ color: var(--lily-text);
3502
+ background-color: var(--lily-surface);
3503
+ border: var(--border) solid var(--lily-border-strong);
3504
+ border-radius: var(--lily-radius-md);
3505
+ cursor: pointer;
3506
+ }
3507
+
3508
+ :where(.search-picker-submit:hover) {
3509
+ background-color: var(--lily-surface-alt);
3510
+ }
3511
+
3154
3512
  :where(
3155
3513
  .theme-picker-list,
3156
3514
  .locale-picker-list,
3157
3515
  .text-size-picker-list,
3158
- .share-picker-list
3516
+ .share-picker-list,
3517
+ .search-picker-panel
3159
3518
  ) {
3160
3519
  position: absolute;
3161
3520
  z-index: 10;
@@ -3179,7 +3538,8 @@
3179
3538
  .theme-picker-list,
3180
3539
  .locale-picker-list,
3181
3540
  .text-size-picker-list,
3182
- .share-picker-list
3541
+ .share-picker-list,
3542
+ .search-picker-panel
3183
3543
  )[hidden] {
3184
3544
  display: none;
3185
3545
  }