@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
@@ -483,6 +483,14 @@
483
483
  /* Primary body-copy colour. Maps to the theme's high-contrast
484
484
  reading colour. */
485
485
  --lily-text: var(--color-base-content);
486
+ /* 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
487
+ keeps WCAG contrast as text on the page and on the error-tinted
488
+ callout surface (`--color-error` itself is a fill colour). */
489
+ --lily-error-text: color-mix(
490
+ in oklch,
491
+ var(--color-error) 22%,
492
+ var(--color-base-content)
493
+ );
486
494
  /* Muted / secondary text — mixed 70% with transparent to keep the
487
495
  hue but lower contrast for captions, helptext, placeholders. */
488
496
  --lily-text-muted: color-mix(
@@ -1478,7 +1486,7 @@
1478
1486
  }
1479
1487
  :where(.dont-list-item)::marker {
1480
1488
  content: "✗ ";
1481
- color: var(--color-error);
1489
+ color: var(--lily-error-text);
1482
1490
  }
1483
1491
 
1484
1492
  /* --- Tree --------------------------------------------------------------- */
@@ -1560,7 +1568,7 @@
1560
1568
  color: var(--color-success);
1561
1569
  }
1562
1570
  :where(.validation-list-item[data-status="failed"]) {
1563
- color: var(--color-error);
1571
+ color: var(--lily-error-text);
1564
1572
  }
1565
1573
  :where(.validation-list-item[data-status="pending"]) {
1566
1574
  color: var(--lily-text-muted);
@@ -2032,7 +2040,7 @@
2032
2040
 
2033
2041
  /* Error message — inline form-validation message. */
2034
2042
  :where(.error-message) {
2035
- color: var(--color-error);
2043
+ color: var(--lily-error-text);
2036
2044
  font-weight: 600;
2037
2045
  }
2038
2046
  /* Error summary — heavyweight 4px border (GOV.UK pattern) so users
@@ -2884,6 +2892,7 @@
2884
2892
  .theme-picker,
2885
2893
  .locale-picker,
2886
2894
  .text-size-picker,
2895
+ .search-picker,
2887
2896
  .share-picker,
2888
2897
  .date-time-picker
2889
2898
  ) {
@@ -2895,6 +2904,7 @@
2895
2904
  .theme-picker-button,
2896
2905
  .locale-picker-button,
2897
2906
  .text-size-picker-button,
2907
+ .search-picker-button,
2898
2908
  .share-picker-button,
2899
2909
  .date-time-picker-button
2900
2910
  ) {
@@ -2930,7 +2940,8 @@
2930
2940
  .locale-picker-icon,
2931
2941
  .text-size-picker-icon,
2932
2942
  .motion-picker-icon,
2933
- .share-picker-icon
2943
+ .share-picker-icon,
2944
+ .search-picker-icon
2934
2945
  ) {
2935
2946
  display: inline-flex;
2936
2947
  align-items: center;
@@ -3009,11 +3020,359 @@
3009
3020
  line-height: 0;
3010
3021
  }
3011
3022
 
3023
+ /* Components added 2026-10-05: kbd-shortcut, show-more, thinking,
3024
+ empty-state, file-tree, one-time-password-input, multi-select, and
3025
+ the four calendar views. The calendar views reuse the
3026
+ calendar-table-* sub-element hooks, so they only need the table
3027
+ root rule. show-more's clamp is keyed on data-expanded (the
3028
+ component never sets an inline style); file-tree hides a closed
3029
+ folder's group via aria-expanded. */
3030
+ :where(.calendar-year-table, .calendar-month-table, .calendar-week-table, .calendar-day-table) {
3031
+ width: 100%;
3032
+ border-collapse: collapse;
3033
+ }
3034
+
3035
+ :where(.kbd-shortcut) {
3036
+ display: inline-flex;
3037
+ align-items: center;
3038
+ gap: var(--lily-space-xs);
3039
+ }
3040
+
3041
+ :where(.kbd-shortcut-key) {
3042
+ display: inline-block;
3043
+ padding: 0.125rem 0.4rem;
3044
+ font-family: var(--lily-font-mono);
3045
+ font-size: 0.85em;
3046
+ background-color: var(--lily-surface-alt);
3047
+ border: var(--border) solid var(--lily-border-strong);
3048
+ border-bottom-width: 2px;
3049
+ border-radius: var(--lily-radius-sm);
3050
+ }
3051
+
3052
+ :where(.show-more-content[data-expanded="false"]) {
3053
+ max-height: 6em;
3054
+ overflow: hidden;
3055
+ }
3056
+
3057
+ :where(.show-more-button) {
3058
+ margin-block-start: var(--lily-space-xs);
3059
+ padding: var(--lily-space-xs);
3060
+ font: inherit;
3061
+ color: inherit;
3062
+ text-decoration: underline;
3063
+ background: none;
3064
+ border: 0;
3065
+ cursor: pointer;
3066
+ }
3067
+
3068
+ :where(.thinking) {
3069
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3070
+ color: var(--lily-text-muted);
3071
+ border: var(--border) solid var(--lily-border-strong);
3072
+ border-radius: var(--lily-radius-md);
3073
+ }
3074
+
3075
+ :where(.thinking-summary) {
3076
+ cursor: pointer;
3077
+ }
3078
+
3079
+ :where(.thinking[data-streaming] .thinking-summary) {
3080
+ font-style: italic;
3081
+ }
3082
+
3083
+ :where(.empty-state) {
3084
+ padding: var(--lily-space-lg);
3085
+ text-align: center;
3086
+ color: var(--lily-text-muted);
3087
+ }
3088
+
3089
+ :where(.file-tree, .file-tree [role="group"]) {
3090
+ margin: 0;
3091
+ padding-inline-start: 0;
3092
+ list-style: none;
3093
+ }
3094
+
3095
+ :where(.file-tree [role="group"]) {
3096
+ padding-inline-start: var(--lily-space-md);
3097
+ }
3098
+
3099
+ :where(.file-tree [role="treeitem"]) {
3100
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3101
+ cursor: pointer;
3102
+ }
3103
+
3104
+ :where(.file-tree [role="treeitem"][aria-expanded="false"] > [role="group"]) {
3105
+ display: none;
3106
+ }
3107
+
3108
+ :where(.file-tree [role="treeitem"]:focus-visible) {
3109
+ outline: var(--lily-focus-ring);
3110
+ outline-offset: -2px;
3111
+ }
3112
+
3113
+ :where(.one-time-password-input, .multi-select, .multi-select-with-extras select) {
3114
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3115
+ font: inherit;
3116
+ color: var(--lily-text);
3117
+ background-color: var(--lily-surface);
3118
+ border: var(--border) solid var(--lily-border-strong);
3119
+ border-radius: var(--lily-radius-sm);
3120
+ }
3121
+
3122
+ :where(.one-time-password-input) {
3123
+ font-family: var(--lily-font-mono);
3124
+ letter-spacing: 0.25em;
3125
+ }
3126
+
3127
+ /* Chart containers added 2026-10-05 (gauge, heatmap, radar, sankey, pie,
3128
+ ring, funnel, candlestick, composed, choropleth, sunburst) join the
3129
+ existing five as block figures. Every chart's optional data-table
3130
+ wrapper sits below the graphic; the table itself inherits the
3131
+ catalog's table styling. */
3132
+ :where(
3133
+ .gauge-chart,
3134
+ .heatmap-chart,
3135
+ .radar-chart,
3136
+ .sankey-chart,
3137
+ .pie-chart,
3138
+ .ring-chart,
3139
+ .funnel-chart,
3140
+ .candlestick-chart,
3141
+ .composed-chart,
3142
+ .choropleth-chart,
3143
+ .sunburst-chart
3144
+ ) {
3145
+ display: block;
3146
+ margin: 0;
3147
+ }
3148
+
3149
+ :where(
3150
+ .area-chart-data-table,
3151
+ .bar-chart-data-table,
3152
+ .column-chart-data-table,
3153
+ .line-chart-data-table,
3154
+ .scatter-chart-data-table,
3155
+ .gauge-chart-data-table,
3156
+ .heatmap-chart-data-table,
3157
+ .radar-chart-data-table,
3158
+ .sankey-chart-data-table,
3159
+ .pie-chart-data-table,
3160
+ .ring-chart-data-table,
3161
+ .funnel-chart-data-table,
3162
+ .candlestick-chart-data-table,
3163
+ .composed-chart-data-table,
3164
+ .choropleth-chart-data-table,
3165
+ .sunburst-chart-data-table
3166
+ ) {
3167
+ margin-block-start: var(--lily-space-sm);
3168
+ overflow-x: auto;
3169
+ }
3170
+
3171
+ /* tool-call (2026-10-05): a bordered disclosure; the status word sits next
3172
+ to the name in the summary and is never the only cue. [data-status] is
3173
+ the consumer hook for a spinner or icon. */
3174
+ :where(.tool-call) {
3175
+ border: var(--border) solid var(--lily-border-strong);
3176
+ border-radius: var(--lily-radius-md);
3177
+ background-color: var(--lily-surface);
3178
+ color: var(--lily-text);
3179
+ }
3180
+
3181
+ :where(.tool-call-summary) {
3182
+ display: flex;
3183
+ align-items: center;
3184
+ gap: var(--lily-space-sm);
3185
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3186
+ cursor: pointer;
3187
+ }
3188
+
3189
+ :where(.tool-call-content) {
3190
+ display: grid;
3191
+ gap: var(--lily-space-xs);
3192
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3193
+ border-block-start: var(--border) solid var(--lily-border-strong);
3194
+ }
3195
+
3196
+ :where(.tool-call-name) {
3197
+ font-family: var(--lily-font-mono);
3198
+ }
3199
+
3200
+ :where(.tool-call-status) {
3201
+ color: var(--lily-text-muted);
3202
+ }
3203
+
3204
+ :where(.tool-call-input pre, .tool-call-output pre) {
3205
+ margin: 0;
3206
+ overflow-x: auto;
3207
+ font-family: var(--lily-font-mono);
3208
+ }
3209
+
3210
+ :where(.tool-call-error) {
3211
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3212
+ border: var(--border) solid var(--lily-border-strong);
3213
+ border-radius: var(--lily-radius-sm);
3214
+ font-weight: 600;
3215
+ }
3216
+
3217
+ /* mark (2026-10-05): the native <mark> highlight. The UA default is a
3218
+ fixed yellow; this uses the theme's own surface and text tokens so the
3219
+ pair keeps its contrast in every theme (including dark ones). */
3220
+ :where(.mark) {
3221
+ padding-inline: 0.15em;
3222
+ color: var(--lily-text);
3223
+ background-color: var(--lily-surface-alt);
3224
+ border-radius: var(--lily-radius-sm);
3225
+ box-shadow: 0 0 0 1px var(--lily-border-strong);
3226
+ }
3227
+
3228
+ /* chat-composer (2026-10-05): one row, textarea growing, one button. The
3229
+ button's visible word is its accessible name — hide it visually, never
3230
+ with display:none, if you replace it with an icon. */
3231
+ :where(.chat-composer) {
3232
+ display: flex;
3233
+ align-items: flex-end;
3234
+ gap: var(--lily-space-xs);
3235
+ }
3236
+
3237
+ :where(.chat-composer-input) {
3238
+ flex: 1;
3239
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3240
+ font: inherit;
3241
+ color: var(--lily-text);
3242
+ background-color: var(--lily-surface);
3243
+ border: var(--border) solid var(--lily-border-strong);
3244
+ border-radius: var(--lily-radius-md);
3245
+ resize: none;
3246
+ }
3247
+
3248
+ :where(.chat-composer-button) {
3249
+ min-width: 2.5rem;
3250
+ min-height: 2.5rem;
3251
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3252
+ font: inherit;
3253
+ color: var(--lily-text);
3254
+ background-color: var(--lily-surface);
3255
+ border: var(--border) solid var(--lily-border-strong);
3256
+ border-radius: var(--lily-radius-md);
3257
+ cursor: pointer;
3258
+ }
3259
+
3260
+ :where(.chat-composer-button:disabled) {
3261
+ cursor: not-allowed;
3262
+ opacity: 0.6;
3263
+ }
3264
+
3265
+ /* Picker tooltips (added 2026-10-04): a visual-only role="tooltip"
3266
+ element beside each picker's icon button, holding the same text as
3267
+ its aria-label. The component toggles [hidden]; position and look
3268
+ are here. It sits just below the button, in the inverse of the
3269
+ page colours so it never disappears into the surface. A ::before
3270
+ strip bridges the gap to the button so the pointer can travel onto
3271
+ the tooltip without it closing (WCAG 1.4.13, hoverable). */
3272
+ :where(.motion-picker) {
3273
+ position: relative;
3274
+ display: inline-block;
3275
+ }
3276
+
3277
+ :where(
3278
+ .theme-picker-tooltip,
3279
+ .locale-picker-tooltip,
3280
+ .text-size-picker-tooltip,
3281
+ .motion-picker-tooltip,
3282
+ .share-picker-tooltip,
3283
+ .search-picker-tooltip,
3284
+ .date-time-picker-tooltip
3285
+ ) {
3286
+ position: absolute;
3287
+ z-index: 11;
3288
+ inset-inline-start: 0;
3289
+ inset-block-start: 100%;
3290
+ margin-block-start: var(--lily-space-xs);
3291
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3292
+ font-size: 0.875em;
3293
+ line-height: 1.3;
3294
+ white-space: nowrap;
3295
+ color: var(--lily-surface);
3296
+ background-color: var(--lily-text);
3297
+ border-radius: var(--lily-radius-sm);
3298
+ box-shadow: var(--lily-shadow-md);
3299
+ }
3300
+
3301
+ :where(
3302
+ .theme-picker-tooltip,
3303
+ .locale-picker-tooltip,
3304
+ .text-size-picker-tooltip,
3305
+ .motion-picker-tooltip,
3306
+ .share-picker-tooltip,
3307
+ .search-picker-tooltip,
3308
+ .date-time-picker-tooltip
3309
+ )::before {
3310
+ content: "";
3311
+ position: absolute;
3312
+ inset-inline: 0;
3313
+ inset-block-end: 100%;
3314
+ height: var(--lily-space-xs);
3315
+ }
3316
+
3317
+ :where(
3318
+ .theme-picker-tooltip,
3319
+ .locale-picker-tooltip,
3320
+ .text-size-picker-tooltip,
3321
+ .motion-picker-tooltip,
3322
+ .share-picker-tooltip,
3323
+ .search-picker-tooltip,
3324
+ .date-time-picker-tooltip
3325
+ )[hidden] {
3326
+ display: none;
3327
+ }
3328
+
3329
+ /* search-picker's panel holds a search form rather than a list: the
3330
+ field and the ⏎ submit button sit in one row, the button at the
3331
+ field's inline end (right in LTR, left under dir="rtl"). The ⏎
3332
+ button matches the picker trigger buttons' size and border. */
3333
+ :where(.search-picker-form) {
3334
+ display: flex;
3335
+ align-items: stretch;
3336
+ gap: var(--lily-space-xs);
3337
+ margin: 0;
3338
+ }
3339
+
3340
+ :where(.search-picker-input) {
3341
+ min-width: 14rem;
3342
+ padding: var(--lily-space-xs) var(--lily-space-sm);
3343
+ font: inherit;
3344
+ color: var(--lily-text);
3345
+ background-color: var(--lily-surface);
3346
+ border: var(--border) solid var(--lily-border-strong);
3347
+ border-radius: var(--lily-radius-sm);
3348
+ }
3349
+
3350
+ :where(.search-picker-submit) {
3351
+ display: inline-flex;
3352
+ align-items: center;
3353
+ justify-content: center;
3354
+ min-width: 2.5rem;
3355
+ min-height: 2.5rem;
3356
+ padding: var(--lily-space-xs);
3357
+ font: inherit;
3358
+ line-height: 1;
3359
+ color: var(--lily-text);
3360
+ background-color: var(--lily-surface);
3361
+ border: var(--border) solid var(--lily-border-strong);
3362
+ border-radius: var(--lily-radius-md);
3363
+ cursor: pointer;
3364
+ }
3365
+
3366
+ :where(.search-picker-submit:hover) {
3367
+ background-color: var(--lily-surface-alt);
3368
+ }
3369
+
3012
3370
  :where(
3013
3371
  .theme-picker-list,
3014
3372
  .locale-picker-list,
3015
3373
  .text-size-picker-list,
3016
- .share-picker-list
3374
+ .share-picker-list,
3375
+ .search-picker-panel
3017
3376
  ) {
3018
3377
  position: absolute;
3019
3378
  z-index: 10;
@@ -3037,7 +3396,8 @@
3037
3396
  .theme-picker-list,
3038
3397
  .locale-picker-list,
3039
3398
  .text-size-picker-list,
3040
- .share-picker-list
3399
+ .share-picker-list,
3400
+ .search-picker-panel
3041
3401
  )[hidden] {
3042
3402
  display: none;
3043
3403
  }