@fungi.computer/caps 0.3.1 → 0.5.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.
package/dist/styles.css CHANGED
@@ -4304,6 +4304,9 @@
4304
4304
  .end {
4305
4305
  inset-inline-end: var(--spacing);
4306
4306
  }
4307
+ .top-\(--resize-pane\) {
4308
+ top: var(--resize-pane);
4309
+ }
4307
4310
  .top-0 {
4308
4311
  top: calc(var(--spacing) * 0);
4309
4312
  }
@@ -4319,6 +4322,9 @@
4319
4322
  .bottom-4 {
4320
4323
  bottom: calc(var(--spacing) * 4);
4321
4324
  }
4325
+ .left-\(--resize-pane\) {
4326
+ left: var(--resize-pane);
4327
+ }
4322
4328
  .left-0 {
4323
4329
  left: calc(var(--spacing) * 0);
4324
4330
  }
@@ -6166,9 +6172,6 @@
6166
6172
  margin-block-end: calc(var(--spacing-sm) * calc(1 - var(--tw-space-y-reverse)));
6167
6173
  }
6168
6174
  }
6169
- .self-stretch {
6170
- align-self: stretch;
6171
- }
6172
6175
  .truncate {
6173
6176
  overflow: hidden;
6174
6177
  text-overflow: ellipsis;
@@ -6180,9 +6183,6 @@
6180
6183
  .overflow-hidden {
6181
6184
  overflow: hidden;
6182
6185
  }
6183
- .overflow-visible {
6184
- overflow: visible;
6185
- }
6186
6186
  .overflow-y-auto {
6187
6187
  overflow-y: auto;
6188
6188
  }
@@ -6225,10 +6225,6 @@
6225
6225
  border-bottom-style: var(--tw-border-style);
6226
6226
  border-bottom-width: 1px;
6227
6227
  }
6228
- .border-none {
6229
- --tw-border-style: none;
6230
- border-style: none;
6231
- }
6232
6228
  .badge-outline {
6233
6229
  @layer daisyui.l1.l2 {
6234
6230
  color: var(--badge-color);
@@ -6370,9 +6366,6 @@
6370
6366
  .p-2xl {
6371
6367
  padding: var(--spacing-2xl);
6372
6368
  }
6373
- .p-2xs {
6374
- padding: var(--spacing-2xs);
6375
- }
6376
6369
  .p-4 {
6377
6370
  padding: calc(var(--spacing) * 4);
6378
6371
  }
@@ -8740,6 +8733,20 @@
8740
8733
  white-space: nowrap;
8741
8734
  }
8742
8735
  }
8736
+ .caps-app-status-bar .badge {
8737
+ height: auto;
8738
+ min-width: 0;
8739
+ padding: 0;
8740
+ border: 0;
8741
+ background: none;
8742
+ color: var(--stipe-fg-muted);
8743
+ font-size: 0.625rem;
8744
+ font-weight: 600;
8745
+ line-height: 1;
8746
+ }
8747
+ .caps-app-status-bar .badge-warning {
8748
+ color: var(--color-warning);
8749
+ }
8743
8750
  .caps-status-bar-picker-list {
8744
8751
  min-width: min(18rem, calc(100vw - 1.5rem));
8745
8752
  }
@@ -10990,17 +10997,61 @@
10990
10997
  color: var(--color-base-content);
10991
10998
  font-size: 0.875rem;
10992
10999
  }
10993
- .caps-composer > .join {
10994
- border: var(--border) solid var(--color-base-content);
10995
- @supports (color: color-mix(in lab, red, red)) {
10996
- border: var(--border) solid color-mix(in oklab, var(--color-base-content) 12%, var(--color-base-300));
10997
- }
10998
- border-radius: var(--radius-box);
10999
- background: var(--color-base-200);
11000
- box-shadow: var( --stipe-shadow-inset, inset 0 calc(var(--depth) * 1px) calc(var(--depth) * 2px) var(--color-base-content), 0 calc(var(--depth) * 1px) 0 var(--color-base-100) );
11001
- @supports (color: color-mix(in lab, red, red)) {
11002
- box-shadow: var( --stipe-shadow-inset, inset 0 calc(var(--depth) * 1px) calc(var(--depth) * 2px) color-mix( in oklab, var(--color-base-content) calc(var(--depth) * 12%), transparent ), 0 calc(var(--depth) * 1px) 0 color-mix( in oklab, var(--color-base-100) calc(var(--depth) * 60%), transparent ) );
11003
- }
11000
+ .caps-composer {
11001
+ display: flex;
11002
+ min-width: 0;
11003
+ flex-direction: column;
11004
+ gap: var(--spacing-xs);
11005
+ }
11006
+ .caps-composer-attachments {
11007
+ display: flex;
11008
+ flex-wrap: wrap;
11009
+ gap: var(--spacing-xs);
11010
+ }
11011
+ .caps-composer-input {
11012
+ position: relative;
11013
+ min-width: 0;
11014
+ }
11015
+ .caps-composer-input :is(textarea, input), .caps-composer-input :is(textarea, input):focus, .caps-composer-input :is(textarea, input):focus-visible {
11016
+ width: 100%;
11017
+ border: 0;
11018
+ border-radius: 0;
11019
+ background: transparent;
11020
+ box-shadow: none;
11021
+ outline: none;
11022
+ padding-inline: 0;
11023
+ }
11024
+ .caps-composer-bar {
11025
+ display: flex;
11026
+ min-width: 0;
11027
+ align-items: center;
11028
+ gap: var(--spacing-xs);
11029
+ }
11030
+ .caps-composer-toolbar {
11031
+ display: flex;
11032
+ min-width: 0;
11033
+ flex: 1;
11034
+ align-items: center;
11035
+ gap: var(--spacing-xs);
11036
+ }
11037
+ .caps-composer-toolbar > .caps-status-tray {
11038
+ flex: 1;
11039
+ min-width: 0;
11040
+ --caps-status-tray-row-wrap: wrap;
11041
+ --caps-status-tray-chips-display: contents;
11042
+ --caps-status-tray-key-height: calc(var(--size-field) * 8);
11043
+ --caps-status-tray-chip-height: var(--caps-status-tray-key-height);
11044
+ --caps-status-tray-width: 28rem;
11045
+ --caps-keycap-width: auto;
11046
+ --caps-keycap-height: var(--caps-status-tray-key-height);
11047
+ }
11048
+ .caps-composer-toolbar > .caps-status-tray .caps-status-tray-row :is(.caps-keycap-button, .caps-status-tray-chip, .caps-select) {
11049
+ height: var(--caps-status-tray-key-height);
11050
+ min-height: var(--caps-status-tray-key-height);
11051
+ }
11052
+ .caps-composer-toolbar > .caps-status-tray .caps-status-tray-label {
11053
+ display: flex;
11054
+ align-items: center;
11004
11055
  }
11005
11056
  .caps-alert[data-tone="error"] h3 {
11006
11057
  color: var(--color-error);
@@ -11448,29 +11499,23 @@
11448
11499
  }
11449
11500
  .caps-resize-handle {
11450
11501
  display: grid;
11451
- width: 64px;
11452
- height: 22px;
11502
+ width: 44px;
11503
+ height: 24px;
11504
+ grid-template-columns: minmax(0, 1fr);
11453
11505
  place-items: center;
11454
- border: var(--border) solid var(--stipe-linework);
11506
+ border: 0;
11455
11507
  border-radius: var(--radius-field);
11456
- background: var(--color-base-200);
11508
+ background: transparent;
11457
11509
  cursor: row-resize;
11458
11510
  touch-action: none;
11459
11511
  user-select: none;
11460
11512
  }
11461
11513
  .caps-resize-handle[aria-orientation="vertical"] {
11462
- width: 22px;
11463
- height: 64px;
11514
+ width: 24px;
11515
+ height: 44px;
11464
11516
  cursor: col-resize;
11465
11517
  }
11466
- .caps-resize-handle[data-resize-variant="notch"] {
11467
- border-radius: var(--radius-box) var(--radius-box) var(--radius-field) var(--radius-field);
11468
- box-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.55)), 0 calc(var(--depth) * 1px) calc(var(--depth) * 2px) var(--color-base-content);
11469
- @supports (color: color-mix(in lab, red, red)) {
11470
- box-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.55)), 0 calc(var(--depth) * 1px) calc(var(--depth) * 2px) color-mix( in oklab, var(--color-base-content) calc(var(--depth) * 12%), transparent );
11471
- }
11472
- }
11473
- .caps-resize-handle:is(:hover, :focus-visible) {
11518
+ .caps-resize-handle:focus-visible {
11474
11519
  outline: 2px solid var(--color-info);
11475
11520
  outline-offset: 2px;
11476
11521
  }
@@ -11479,29 +11524,45 @@
11479
11524
  }
11480
11525
  .caps-resize-grip {
11481
11526
  position: relative;
11482
- width: 38px;
11483
- height: 8px;
11527
+ width: 28px;
11528
+ height: 6px;
11484
11529
  border-radius: var(--radius-button);
11485
- background-color: var(--color-neutral);
11486
- background-image: linear-gradient( to bottom, oklch(100% 0 0 / calc(var(--depth) * 0.08)), transparent 50%, oklch(0% 0 0 / calc(var(--depth) * 0.015)) );
11487
- box-shadow: var( --stipe-shadow-raised, inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.6)), inset 0 -2px 0 var(--color-neutral), inset 0 0 0 1px var(--color-neutral) );
11530
+ background-color: var(--color-base-200);
11531
+ box-shadow: 0 0 0 1px var(--stipe-linework), inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)), 0 1px 0 var(--color-base-200);
11488
11532
  @supports (color: color-mix(in lab, red, red)) {
11489
- box-shadow: var( --stipe-shadow-raised, inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.6)), inset 0 -2px 0 color-mix(in oklab, var(--color-neutral) 75%, black), inset 0 0 0 1px color-mix( in oklab, var(--color-neutral), black calc(var(--depth) * 14%) ) );
11533
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--stipe-linework) 80%, var(--color-base-200)), inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)), 0 1px 0 color-mix( in oklab, var(--color-base-200), var(--color-base-content) 14% );
11490
11534
  }
11491
11535
  }
11536
+ .caps-resize-handle:hover .caps-resize-grip {
11537
+ background-color: var(--color-base-300);
11538
+ }
11492
11539
  .caps-resize-grip::after {
11493
11540
  content: "";
11494
11541
  position: absolute;
11495
- inset-inline: 7px;
11542
+ left: 50%;
11496
11543
  top: 50%;
11544
+ width: 2px;
11497
11545
  height: 2px;
11498
- transform: translateY(-50%);
11499
- border-radius: var(--radius-button);
11500
- background: linear-gradient( to bottom, oklch(100% 0 0 / calc(var(--depth) * 0.45)) 50%, oklch(0% 0 0 / calc(var(--depth) * 0.28)) 50% );
11501
- box-shadow: 0 -3px 0 -0.5px oklch(100% 0 0 / calc(var(--depth) * 0.45)), 0 -2px 0 -0.5px oklch(0% 0 0 / calc(var(--depth) * 0.28)), 0 3px 0 -0.5px oklch(100% 0 0 / calc(var(--depth) * 0.45)), 0 4px 0 -0.5px oklch(0% 0 0 / calc(var(--depth) * 0.28));
11546
+ transform: translate(-50%, -50%);
11547
+ border-radius: var(--radius-selector);
11548
+ background: var(--color-base-content);
11549
+ @supports (color: color-mix(in lab, red, red)) {
11550
+ background: color-mix(in oklab, var(--color-base-content) 45%, transparent);
11551
+ }
11552
+ box-shadow: -5px 0 0 var(--color-base-content), 5px 0 0 var(--color-base-content);
11553
+ @supports (color: color-mix(in lab, red, red)) {
11554
+ box-shadow: -5px 0 0 color-mix(in oklab, var(--color-base-content) 45%, transparent), 5px 0 0 color-mix(in oklab, var(--color-base-content) 45%, transparent);
11555
+ }
11502
11556
  }
11503
11557
  .caps-resize-handle[aria-orientation="vertical"] .caps-resize-grip {
11504
- transform: rotate(90deg);
11558
+ width: 6px;
11559
+ height: 28px;
11560
+ }
11561
+ .caps-resize-handle[aria-orientation="vertical"] .caps-resize-grip::after {
11562
+ box-shadow: 0 -5px 0 var(--color-base-content), 0 5px 0 var(--color-base-content);
11563
+ @supports (color: color-mix(in lab, red, red)) {
11564
+ box-shadow: 0 -5px 0 color-mix(in oklab, var(--color-base-content) 45%, transparent), 0 5px 0 color-mix(in oklab, var(--color-base-content) 45%, transparent);
11565
+ }
11505
11566
  }
11506
11567
  @media (prefers-reduced-motion: reduce) {
11507
11568
  .caps-scroll-thumb-surface {
@@ -11509,6 +11570,10 @@
11509
11570
  }
11510
11571
  }
11511
11572
  @media (forced-colors: active) {
11573
+ .caps-resize-grip {
11574
+ border: 1px solid ButtonText;
11575
+ box-shadow: none;
11576
+ }
11512
11577
  .caps-scroll-track {
11513
11578
  background: Canvas;
11514
11579
  box-shadow: none;
@@ -12643,6 +12708,13 @@
12643
12708
  padding: var(--spacing-md);
12644
12709
  text-align: center;
12645
12710
  }
12711
+ .caps-send-action {
12712
+ --caps-keycap-width: auto;
12713
+ --caps-keycap-justify: center;
12714
+ --caps-keycap-padding: 0;
12715
+ --caps-keycap-min-width: var(--caps-keycap-height, 2.5rem);
12716
+ flex: none;
12717
+ }
12646
12718
  .caps-send-glyph {
12647
12719
  display: inline-grid;
12648
12720
  place-items: center;
@@ -12983,6 +13055,136 @@
12983
13055
  .caps-form-footer .caps-field-error {
12984
13056
  padding-bottom: var(--spacing-sm);
12985
13057
  }
13058
+ :is(.caps-form, .caps-form-section, .caps-fieldset)[data-layout="columns"] {
13059
+ --caps-form-label-col: 9rem;
13060
+ }
13061
+ .caps-form[data-layout="columns"] :is(.caps-form-body, .caps-form-section-fields) {
13062
+ gap: var(--spacing-sm);
13063
+ }
13064
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) {
13065
+ display: grid;
13066
+ grid-template-columns: var(--caps-form-label-col) minmax(0, 1fr);
13067
+ column-gap: var(--spacing-md);
13068
+ row-gap: var(--spacing-2xs);
13069
+ align-items: center;
13070
+ justify-content: stretch;
13071
+ --caps-field-control-width: 100%;
13072
+ }
13073
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-field-copy {
13074
+ display: contents;
13075
+ }
13076
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-field-copy > label {
13077
+ grid-column: 1;
13078
+ grid-row: 1;
13079
+ min-width: 0;
13080
+ overflow: hidden;
13081
+ text-overflow: ellipsis;
13082
+ white-space: nowrap;
13083
+ }
13084
+ .caps-fieldset[data-layout="columns"] > .caps-fieldset-legend {
13085
+ min-width: 0;
13086
+ overflow: hidden;
13087
+ text-overflow: ellipsis;
13088
+ white-space: nowrap;
13089
+ }
13090
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-field-copy > .caps-field-description {
13091
+ grid-column: 2;
13092
+ grid-row: 2;
13093
+ }
13094
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > :not(.caps-field-copy, .caps-field-lead, .caps-field-error-reveal) {
13095
+ grid-column: 2;
13096
+ grid-row: 1;
13097
+ width: 100%;
13098
+ max-width: 30rem;
13099
+ }
13100
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-switch {
13101
+ width: 40px;
13102
+ justify-self: start;
13103
+ }
13104
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-checkbox {
13105
+ width: 24px;
13106
+ justify-self: start;
13107
+ }
13108
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="vertical"] > .caps-field-lead {
13109
+ grid-column: 1;
13110
+ grid-row: 1;
13111
+ margin: 0;
13112
+ }
13113
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="vertical"] > .caps-field-error-reveal {
13114
+ grid-column: 2;
13115
+ grid-row: 2;
13116
+ }
13117
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="horizontal"] > .caps-field-row > .caps-field-lead {
13118
+ grid-column: 1;
13119
+ grid-row: 1;
13120
+ }
13121
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="horizontal"] > .caps-field-error-reveal {
13122
+ padding-inline-start: calc(var(--caps-form-label-col) + var(--spacing-md));
13123
+ }
13124
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field:has(> .caps-field-error-reveal[data-open="true"]) .caps-field-description, .caps-fieldset[data-layout="columns"]:has( > .caps-field-error-reveal[data-open="true"] ) > .caps-fieldset-description {
13125
+ display: none;
13126
+ }
13127
+ .caps-fieldset[data-layout="columns"] {
13128
+ display: grid;
13129
+ grid-template-columns: var(--caps-form-label-col) minmax(0, 1fr);
13130
+ column-gap: var(--spacing-md);
13131
+ row-gap: var(--spacing-2xs);
13132
+ align-items: start;
13133
+ }
13134
+ .caps-fieldset[data-layout="columns"] > .caps-fieldset-legend {
13135
+ grid-column: 1;
13136
+ grid-row: 1;
13137
+ margin: 0;
13138
+ }
13139
+ .caps-fieldset[data-layout="columns"] > .caps-fieldset-fields {
13140
+ grid-column: 2;
13141
+ grid-row: 1;
13142
+ flex-direction: row;
13143
+ flex-wrap: wrap;
13144
+ margin: 0;
13145
+ }
13146
+ .caps-fieldset[data-layout="columns"] > :is(.caps-fieldset-description, .caps-field-error-reveal) {
13147
+ grid-column: 2;
13148
+ grid-row: 2;
13149
+ }
13150
+ .caps-form[data-layout="columns"] .caps-form-footer {
13151
+ padding-inline-start: calc(var(--caps-form-label-col) + var(--spacing-md));
13152
+ max-width: calc(var(--caps-form-label-col) + var(--spacing-md) + 30rem);
13153
+ }
13154
+ @container (min-width: 36rem) {
13155
+ .caps-form[data-layout="columns"] .caps-form-body:has(> .caps-field:first-child:nth-last-child(2)) {
13156
+ display: grid;
13157
+ grid-template-columns: minmax(0, 1fr) auto;
13158
+ align-items: start;
13159
+ }
13160
+ .caps-form[data-layout="columns"] .caps-form-body:has(> .caps-field:first-child:nth-last-child(2)) > .caps-form-footer {
13161
+ padding-inline-start: 0;
13162
+ max-width: none;
13163
+ }
13164
+ }
13165
+ @container (max-width: 20rem) {
13166
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ), .caps-fieldset[data-layout="columns"] {
13167
+ grid-template-columns: minmax(0, 1fr);
13168
+ }
13169
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > :not(.caps-field-copy, .caps-field-lead, .caps-field-error-reveal), .caps-fieldset[data-layout="columns"] > .caps-fieldset-fields {
13170
+ grid-column: 1;
13171
+ grid-row: 2;
13172
+ max-width: none;
13173
+ }
13174
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-field-copy > .caps-field-description, :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="vertical"] > .caps-field-error-reveal, .caps-fieldset[data-layout="columns"] > :is(.caps-fieldset-description, .caps-field-error-reveal) {
13175
+ grid-column: 1;
13176
+ grid-row: 3;
13177
+ }
13178
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] :is( .caps-field[data-orientation="vertical"], .caps-field[data-orientation="horizontal"] > .caps-field-row ) > .caps-field-copy > label, .caps-fieldset[data-layout="columns"] > .caps-fieldset-legend {
13179
+ overflow: visible;
13180
+ text-overflow: clip;
13181
+ white-space: normal;
13182
+ }
13183
+ :is(.caps-form, .caps-form-section)[data-layout="columns"] .caps-field[data-orientation="horizontal"] > .caps-field-error-reveal, .caps-form[data-layout="columns"] .caps-form-footer {
13184
+ padding-inline-start: 0;
13185
+ max-width: none;
13186
+ }
13187
+ }
12986
13188
  .caps-choice-card {
12987
13189
  display: flex;
12988
13190
  flex: 1 1 var(--caps-choice-card-basis, 14rem);
@@ -13587,15 +13789,15 @@
13587
13789
  isolation: var(--caps-button-outline-isolation, auto);
13588
13790
  }
13589
13791
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]) {
13590
- background-color: var(--caps-button-outline-face, revert-layer);
13591
- color: var(--caps-button-outline-ink, revert-layer);
13792
+ background-color: var(--caps-key-face);
13793
+ color: var(--caps-button-outline-ink, var(--color-base-content));
13592
13794
  }
13593
13795
  .caps-button.btn-outline:is(:disabled, [aria-disabled="true"]) {
13594
13796
  background-color: var( --caps-button-outline-disabled-face, var(--color-base-200) );
13595
13797
  }
13596
13798
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]):hover {
13597
- background-color: var( --caps-button-outline-hover-face, var(--caps-button-outline-face, revert-layer) );
13598
- color: var( --caps-button-outline-hover-ink, var(--caps-button-outline-ink, revert-layer) );
13799
+ background-color: var( --caps-button-outline-hover-face, var(--caps-keycap-hover-face, var(--caps-key-face)) );
13800
+ color: var( --caps-button-outline-hover-ink, var(--caps-button-outline-ink, var(--color-base-content)) );
13599
13801
  }
13600
13802
  .caps-button.btn-outline::before {
13601
13803
  content: var(--caps-button-outline-inset-content, none);
@@ -13608,21 +13810,36 @@
13608
13810
  .caps-button.btn-outline:hover::before {
13609
13811
  background: var(--color-base-content);
13610
13812
  }
13611
- .caps-button.btn-outline {
13612
- --btn-border: var(--color-base-content);
13813
+ .caps-keycap-button, .caps-button-filled, .caps-button.btn-outline {
13814
+ --caps-key-lip: calc(var(--depth) * 1px);
13815
+ --caps-key-rest-shadow: inset 0 1px 0
13816
+ oklch(100% 0 0 / calc(var(--depth) * var(--caps-key-top-edge, 0.14))),
13817
+ 0 var(--caps-key-lip) 0
13818
+ var(--caps-key-face);
13613
13819
  @supports (color: color-mix(in lab, red, red)) {
13614
- --btn-border: color-mix(
13615
- in oklab,
13616
- var(--color-base-content) 24%,
13617
- transparent
13618
- );
13820
+ --caps-key-rest-shadow: inset 0 1px 0
13821
+ oklch(100% 0 0 / calc(var(--depth) * var(--caps-key-top-edge, 0.14))),
13822
+ 0 var(--caps-key-lip) 0
13823
+ color-mix(
13824
+ in oklab,
13825
+ var(--caps-key-face),
13826
+ var(--caps-key-lip-ink, var(--color-base-content)) 14%
13827
+ );
13619
13828
  }
13829
+ --caps-key-pressed-shadow: inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)), 0 0 0 transparent;
13830
+ }
13831
+ .caps-button.btn-outline {
13832
+ --btn-border: var(--stipe-linework);
13833
+ --caps-key-face: var(--caps-button-outline-face, var(--color-base-200));
13620
13834
  font-weight: var(--caps-button-weight, 500);
13621
- box-shadow: var(--caps-button-outline-drop, var(--caps-button-drop, none));
13835
+ box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop, var(--caps-key-rest-shadow)) );
13836
+ transition-property: background-color, border-color, box-shadow, translate;
13837
+ transition-duration: var(--stipe-motion-fast);
13838
+ transition-timing-function: ease-out;
13622
13839
  }
13623
13840
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]):active {
13624
- translate: 0 var(--caps-button-press, var(--stipe-press-depth));
13625
- box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop-active, none) );
13841
+ translate: 0 var(--caps-button-press, var(--caps-key-lip));
13842
+ box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop-active, var(--caps-key-pressed-shadow)) );
13626
13843
  }
13627
13844
  .caps-button.btn-ghost {
13628
13845
  font-weight: 500;
@@ -13632,6 +13849,9 @@
13632
13849
  }
13633
13850
  .caps-button-filled {
13634
13851
  --btn-bg: var(--btn-color);
13852
+ --caps-key-face: var(--btn-color);
13853
+ --caps-key-lip-ink: black;
13854
+ --caps-key-top-edge: 0.06;
13635
13855
  --caps-button-filled-edge: var(
13636
13856
  --caps-button-border-color,
13637
13857
  var(--btn-bg)
@@ -13641,7 +13861,7 @@
13641
13861
  --caps-button-border-color,
13642
13862
  color-mix(
13643
13863
  in oklab,
13644
- color-mix(in oklab, var(--btn-bg), black calc(var(--depth) * 8%)),
13864
+ color-mix(in oklab, var(--btn-bg), black calc(var(--depth) * 6%)),
13645
13865
  var(--stipe-linework)
13646
13866
  calc((1 - var(--depth)) * var(--caps-button-linework, 100%))
13647
13867
  )
@@ -13649,7 +13869,7 @@
13649
13869
  }
13650
13870
  --caps-button-filled-drop: var(
13651
13871
  --caps-button-drop,
13652
- inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18))
13872
+ var(--caps-key-rest-shadow)
13653
13873
  );
13654
13874
  background-color: var(--btn-bg);
13655
13875
  color: var(--btn-fg);
@@ -13692,9 +13912,9 @@
13692
13912
  @supports (color: color-mix(in lab, red, red)) {
13693
13913
  --btn-bg: color-mix(in oklab, var(--btn-color) 92%, black);
13694
13914
  }
13695
- translate: 0 var(--caps-button-press, var(--stipe-press-depth));
13915
+ translate: 0 var(--caps-button-press, var(--caps-key-lip));
13696
13916
  scale: var(--stipe-press-scale);
13697
- box-shadow: var( --caps-button-drop-active, inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)) );
13917
+ box-shadow: var(--caps-button-drop-active, var(--caps-key-pressed-shadow));
13698
13918
  transition-duration: var(--stipe-motion-squish);
13699
13919
  }
13700
13920
  .caps-button.caps-button-menubar {
@@ -14675,7 +14895,7 @@
14675
14895
  scale: none;
14676
14896
  }
14677
14897
  .caps-button-filled:not(:disabled):not([aria-disabled="true"]):active {
14678
- translate: var(--caps-button-press-reduced, none);
14898
+ translate: var(--caps-button-press-reduced, 0 var(--caps-key-lip));
14679
14899
  }
14680
14900
  .caps-gooey-motion, .caps-gooey-motion::before, .caps-switch, .caps-radio, .caps-checkbox, .caps-checkbox-track, .caps-input, .caps-status-bead {
14681
14901
  animation: none !important;
@@ -15860,7 +16080,7 @@
15860
16080
  }
15861
16081
  }
15862
16082
  @media (prefers-reduced-motion: reduce) {
15863
- .caps-keycap, .caps-keycap-button {
16083
+ .caps-keycap, .caps-keycap-button, .caps-button.btn-outline {
15864
16084
  transition: none;
15865
16085
  }
15866
16086
  }
@@ -15931,7 +16151,21 @@
15931
16151
  height: 0.625rem;
15932
16152
  }
15933
16153
  .caps-keycap-button {
15934
- --caps-keycap-lip: calc(var(--depth) * 1px);
16154
+ --caps-key-face: var(--caps-keycap-face, var(--color-base-200));
16155
+ --caps-keycap-rest-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)),
16156
+ 0 var(--caps-key-lip) 0
16157
+ var(--caps-key-face),
16158
+ 0 var(--caps-key-lip) calc(var(--depth) * 2px)
16159
+ oklch(0% 0 0 / calc(var(--depth) * 0.15));
16160
+ @supports (color: color-mix(in lab, red, red)) {
16161
+ --caps-keycap-rest-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)),
16162
+ 0 var(--caps-key-lip) 0
16163
+ color-mix(in oklab, var(--caps-key-face), var(--color-base-content) 14%),
16164
+ 0 var(--caps-key-lip) calc(var(--depth) * 2px)
16165
+ oklch(0% 0 0 / calc(var(--depth) * 0.15));
16166
+ }
16167
+ --caps-keycap-pressed-shadow: inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)),
16168
+ 0 0 0 transparent, 0 0 0 transparent;
15935
16169
  display: flex;
15936
16170
  width: var(--caps-keycap-width, 100%);
15937
16171
  min-width: var(--caps-keycap-min-width, 0);
@@ -15940,7 +16174,10 @@
15940
16174
  justify-content: var(--caps-keycap-justify, space-between);
15941
16175
  gap: var(--spacing-sm);
15942
16176
  padding: var(--caps-keycap-padding, var(--spacing-xs) var(--spacing-sm));
15943
- border: var( --caps-keycap-context-border, var(--border) solid var(--caps-keycap-edge, var(--stipe-linework)) );
16177
+ border: var( --caps-keycap-context-border, var(--border) solid var( --caps-keycap-edge, var(--stipe-linework) ) );
16178
+ @supports (color: color-mix(in lab, red, red)) {
16179
+ border: var( --caps-keycap-context-border, var(--border) solid var( --caps-keycap-edge, color-mix(in oklab, var(--stipe-linework) 80%, var(--caps-key-face)) ) );
16180
+ }
15944
16181
  font-size: var(--caps-keycap-font-size, inherit);
15945
16182
  font-weight: var( --caps-keycap-context-weight, var(--caps-keycap-font-weight, inherit) );
15946
16183
  border-radius: var(--radius-field);
@@ -15949,12 +16186,28 @@
15949
16186
  var(--caps-keycap-face, var(--color-base-200))
15950
16187
  );
15951
16188
  background-color: var(--caps-keycap-painted-face);
15952
- --caps-keycap-default-image: none;
15953
- background-image: var( --caps-keycap-context-image, var(--caps-keycap-default-image) );
15954
- box-shadow: var( --caps-keycap-context-shadow, inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.14)), 0 var(--caps-keycap-lip) 0 var(--caps-keycap-face, var(--color-base-200)) );
16189
+ --caps-keycap-default-image: linear-gradient(
16190
+ to bottom,
16191
+ var(--caps-keycap-painted-face),
16192
+ var(--caps-keycap-painted-face)
16193
+ );
15955
16194
  @supports (color: color-mix(in lab, red, red)) {
15956
- box-shadow: var( --caps-keycap-context-shadow, inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.14)), 0 var(--caps-keycap-lip) 0 color-mix( in oklab, var(--caps-keycap-face, var(--color-base-200)), var(--color-base-content) 14% ) );
16195
+ --caps-keycap-default-image: linear-gradient(
16196
+ to bottom,
16197
+ color-mix(
16198
+ in oklab,
16199
+ var(--caps-keycap-painted-face),
16200
+ white calc(var(--depth) * 3%)
16201
+ ),
16202
+ color-mix(
16203
+ in oklab,
16204
+ var(--caps-keycap-painted-face),
16205
+ black calc(var(--depth) * 3%)
16206
+ )
16207
+ );
15957
16208
  }
16209
+ background-image: var( --caps-keycap-context-image, var(--caps-keycap-default-image) );
16210
+ box-shadow: var( --caps-keycap-context-shadow, var(--caps-keycap-rest-shadow) );
15958
16211
  color: var(--caps-keycap-ink, var(--color-base-content));
15959
16212
  text-align: left;
15960
16213
  cursor: pointer;
@@ -15963,8 +16216,8 @@
15963
16216
  transition-timing-function: ease-out;
15964
16217
  }
15965
16218
  .caps-keycap-button:active {
15966
- translate: 0 var(--caps-keycap-context-travel, var(--caps-keycap-lip));
15967
- box-shadow: var( --caps-keycap-active-shadow, inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)), 0 0 0 transparent );
16219
+ translate: 0 var(--caps-keycap-context-travel, var(--caps-key-lip));
16220
+ box-shadow: var( --caps-keycap-active-shadow, var(--caps-keycap-pressed-shadow) );
15968
16221
  }
15969
16222
  .caps-keycap-button:focus-visible {
15970
16223
  outline: 2px solid var(--caps-keycap-focus-ink, var(--color-base-content));
@@ -16011,6 +16264,28 @@
16011
16264
  --caps-keycap-ink: var(--color-neutral-content);
16012
16265
  --caps-keycap-edge: var(--color-neutral);
16013
16266
  }
16267
+ .caps-keycap-button.caps-send-action[data-tone="primary"] {
16268
+ --caps-keycap-face: var(--color-primary);
16269
+ --caps-keycap-ink: var(--color-primary-content);
16270
+ --caps-keycap-edge: var(--color-primary);
16271
+ @supports (color: color-mix(in lab, red, red)) {
16272
+ --caps-keycap-edge: color-mix(in oklab, var(--color-primary) 82%, black);
16273
+ }
16274
+ --caps-keycap-hover-face: var(--color-primary);
16275
+ @supports (color: color-mix(in lab, red, red)) {
16276
+ --caps-keycap-hover-face: color-mix(
16277
+ in oklab,
16278
+ var(--color-primary) 92%,
16279
+ black
16280
+ );
16281
+ }
16282
+ }
16283
+ .caps-keycap-button.caps-send-action[data-send-state="empty"] {
16284
+ --caps-keycap-face: var(--color-base-200);
16285
+ --caps-keycap-ink: var(--color-base-content);
16286
+ --caps-keycap-edge: var(--stipe-linework);
16287
+ --caps-keycap-hover-face: var(--color-base-200);
16288
+ }
16014
16289
  .caps-keycap-button[data-tone="destructive"]:is(:hover, :focus-visible) {
16015
16290
  --caps-keycap-ink: var(--color-error);
16016
16291
  --caps-keycap-edge: var(--color-error);
@@ -20,12 +20,12 @@ Props accepted by Composer.
20
20
 
21
21
  #### Type Declaration
22
22
 
23
- | Name | Type | Description |
24
- | --------------- | ----------- | --------------------------------------------------------------------------------------------- |
25
- | `input` | `ReactNode` | The caller-owned primary input control. |
26
- | `action?` | `ReactNode` | The caller-owned action control. Its disabled state and accessible name stay on that control. |
27
- | `leading?` | `ReactNode` | Optional caller-owned leading slot, such as an avatar. |
28
- | `rowClassName?` | `string` | Classes for the joined row; useful when the host exposes a busy state. |
23
+ | Name | Type | Description |
24
+ | -------------- | ----------- | ---------------------------------------------------------------------------- |
25
+ | `input` | `ReactNode` | The caller-owned field, typed into directly: the surface is the field. |
26
+ | `action?` | `ReactNode` | The caller-owned key at the end of the bottom row, such as a SendAction. |
27
+ | `toolbar?` | `ReactNode` | Caller-owned controls and readouts along the bottom edge, before the action. |
28
+ | `attachments?` | `ReactNode` | Caller-owned items riding with the draft, shown above the text. |
29
29
 
30
30
  ## Variables
31
31
 
@@ -37,4 +37,7 @@ const Composer: ForwardRefExoticComponent<
37
37
  >;
38
38
  ```
39
39
 
40
- Layout and slots only. It never assigns action-control semantics.
40
+ One composer surface: attachments, then the text, then a slim row along the
41
+ bottom edge holding the toolbar and, at its end, the action. It draws no box of
42
+ its own: the host region is the field. Layout and slots only; it never assigns
43
+ action-control semantics.