@fungi.computer/parakeet 0.3.0 → 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.
Files changed (63) hide show
  1. package/dist/account-commands.js +20 -7
  2. package/dist/client-contributions.d.ts +1 -0
  3. package/dist/commands/awaiting-driver.d.ts +20 -0
  4. package/dist/commands/awaiting-driver.js +121 -0
  5. package/dist/commands/builtins.js +6 -4
  6. package/dist/commands/interactions.d.ts +25 -0
  7. package/dist/commands/interactions.js +76 -2
  8. package/dist/commands/run.js +3 -3
  9. package/dist/commands/slash.d.ts +7 -3
  10. package/dist/commands/slash.js +2 -0
  11. package/dist/commands/use-slash-commands.d.ts +13 -0
  12. package/dist/commands/use-slash-commands.js +58 -1
  13. package/dist/components/ChatComposer.d.ts +2 -0
  14. package/dist/components/ChatComposer.js +150 -38
  15. package/dist/components/ClientRows.js +42 -26
  16. package/dist/components/CompletionMenu.d.ts +54 -0
  17. package/dist/components/CompletionMenu.js +52 -0
  18. package/dist/components/DecisionComposer.d.ts +30 -0
  19. package/dist/components/DecisionComposer.js +146 -0
  20. package/dist/components/InteractionPanel.d.ts +10 -1
  21. package/dist/components/InteractionPanel.js +24 -5
  22. package/dist/components/RunFailureNotice.js +11 -2
  23. package/dist/components/SlashMenu.d.ts +1 -3
  24. package/dist/components/SlashMenu.js +5 -13
  25. package/dist/components/TimelineItem.d.ts +1 -0
  26. package/dist/components/TimelineItem.js +3 -3
  27. package/dist/components/ToolGroup.d.ts +1 -0
  28. package/dist/components/ToolGroup.js +7 -7
  29. package/dist/conversation.d.ts +5 -1
  30. package/dist/conversation.js +72 -20
  31. package/dist/core/approval-decision.d.ts +198 -0
  32. package/dist/core/approval-decision.js +291 -0
  33. package/dist/core/awaiting-answer.d.ts +229 -0
  34. package/dist/core/awaiting-answer.js +303 -0
  35. package/dist/core/build-timeline.js +56 -5
  36. package/dist/core/client-actions.d.ts +1 -0
  37. package/dist/core/client-actions.js +8 -21
  38. package/dist/core/draft-storage.d.ts +4 -0
  39. package/dist/core/draft-storage.js +12 -5
  40. package/dist/core/picker-text.d.ts +7 -0
  41. package/dist/core/picker-text.js +24 -0
  42. package/dist/core/session-query.d.ts +8 -0
  43. package/dist/core/session-query.js +13 -11
  44. package/dist/core/session-view-state.d.ts +1 -1
  45. package/dist/core/session-view-state.js +14 -6
  46. package/dist/headless.d.ts +7 -2
  47. package/dist/headless.js +6 -1
  48. package/dist/model-commands.js +14 -15
  49. package/dist/parakeet.d.ts +6 -2
  50. package/dist/parakeet.js +15 -6
  51. package/dist/session-commands.js +6 -2
  52. package/dist/store/types.d.ts +5 -1
  53. package/dist/styles.css +407 -113
  54. package/dist/use-approval-awaiting.d.ts +22 -0
  55. package/dist/use-approval-awaiting.js +81 -0
  56. package/dist/use-decision.d.ts +20 -0
  57. package/dist/use-decision.js +79 -0
  58. package/docs/api/commands/slash.md +30 -26
  59. package/docs/api/headless.md +822 -41
  60. package/docs/api/index.md +13 -4
  61. package/package.json +15 -8
  62. package/src/completion-menu.css +71 -0
  63. package/src/styles.css +174 -46
package/dist/styles.css CHANGED
@@ -18,6 +18,7 @@
18
18
  --text-sm: 0.875rem;
19
19
  --text-sm--line-height: calc(1.25 / 0.875);
20
20
  --text-base: 1rem;
21
+ --text-base--line-height: calc(1.5 / 1);
21
22
  --text-lg: 1.125rem;
22
23
  --text-lg--line-height: calc(1.75 / 1.125);
23
24
  --text-xl: 1.25rem;
@@ -1601,6 +1602,9 @@
1601
1602
  .pointer-events-auto {
1602
1603
  pointer-events: auto;
1603
1604
  }
1605
+ .pointer-events-none {
1606
+ pointer-events: none;
1607
+ }
1604
1608
  .countdown {
1605
1609
  &.countdown {
1606
1610
  line-height: 1em;
@@ -4771,6 +4775,9 @@
4771
4775
  .m-auto {
4772
4776
  margin: auto;
4773
4777
  }
4778
+ .-mx-xs {
4779
+ margin-inline: calc(var(--spacing-xs) * -1);
4780
+ }
4774
4781
  .mx-2 {
4775
4782
  margin-inline: calc(var(--spacing) * 2);
4776
4783
  }
@@ -5932,6 +5939,12 @@
5932
5939
  --mask-chat: url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");
5933
5940
  }
5934
5941
  }
5942
+ .line-clamp-3 {
5943
+ overflow: hidden;
5944
+ display: -webkit-box;
5945
+ -webkit-box-orient: vertical;
5946
+ -webkit-line-clamp: 3;
5947
+ }
5935
5948
  .prose {
5936
5949
  :root & {
5937
5950
  --tw-prose-body: var(--color-base-content);
@@ -6123,15 +6136,15 @@
6123
6136
  .min-h-10 {
6124
6137
  min-height: calc(var(--spacing) * 10);
6125
6138
  }
6139
+ .min-h-12 {
6140
+ min-height: calc(var(--spacing) * 12);
6141
+ }
6126
6142
  .min-h-14 {
6127
6143
  min-height: calc(var(--spacing) * 14);
6128
6144
  }
6129
6145
  .min-h-96 {
6130
6146
  min-height: calc(var(--spacing) * 96);
6131
6147
  }
6132
- .min-h-\[48px\] {
6133
- min-height: 48px;
6134
- }
6135
6148
  .loading-sm {
6136
6149
  @layer daisyui.l1.l2 {
6137
6150
  width: calc(var(--size-selector, 0.25rem) * 5);
@@ -6152,6 +6165,9 @@
6152
6165
  .w-12 {
6153
6166
  width: calc(var(--spacing) * 12);
6154
6167
  }
6168
+ .w-\[calc\(100\%\+2\*var\(--spacing-xs\)\)\] {
6169
+ width: calc(100% + 2 * var(--spacing-xs));
6170
+ }
6155
6171
  .w-\[min\(32rem\,calc\(100vw-2rem\)\)\] {
6156
6172
  width: min(32rem, calc(100vw - 2rem));
6157
6173
  }
@@ -6176,12 +6192,18 @@
6176
6192
  .max-w-\[48rem\] {
6177
6193
  max-width: 48rem;
6178
6194
  }
6195
+ .max-w-\[50\%\] {
6196
+ max-width: 50%;
6197
+ }
6179
6198
  .max-w-\[80ch\] {
6180
6199
  max-width: 80ch;
6181
6200
  }
6182
6201
  .max-w-full {
6183
6202
  max-width: 100%;
6184
6203
  }
6204
+ .max-w-none {
6205
+ max-width: none;
6206
+ }
6185
6207
  .min-w-0 {
6186
6208
  min-width: calc(var(--spacing) * 0);
6187
6209
  }
@@ -6301,12 +6323,12 @@
6301
6323
  .place-items-center {
6302
6324
  place-items: center;
6303
6325
  }
6326
+ .items-baseline {
6327
+ align-items: baseline;
6328
+ }
6304
6329
  .items-center {
6305
6330
  align-items: center;
6306
6331
  }
6307
- .items-end {
6308
- align-items: flex-end;
6309
- }
6310
6332
  .items-start {
6311
6333
  align-items: flex-start;
6312
6334
  }
@@ -6354,9 +6376,6 @@
6354
6376
  margin-block-end: calc(var(--spacing-sm) * calc(1 - var(--tw-space-y-reverse)));
6355
6377
  }
6356
6378
  }
6357
- .self-stretch {
6358
- align-self: stretch;
6359
- }
6360
6379
  .truncate {
6361
6380
  overflow: hidden;
6362
6381
  text-overflow: ellipsis;
@@ -6404,10 +6423,6 @@
6404
6423
  .rounded-none {
6405
6424
  border-radius: 0;
6406
6425
  }
6407
- .\!border-0 {
6408
- border-style: var(--tw-border-style) !important;
6409
- border-width: 0px !important;
6410
- }
6411
6426
  .border {
6412
6427
  border-style: var(--tw-border-style);
6413
6428
  border-width: 1px;
@@ -6489,9 +6504,6 @@
6489
6504
  }
6490
6505
  }
6491
6506
  }
6492
- .\!bg-transparent {
6493
- background-color: transparent !important;
6494
- }
6495
6507
  .bg-\[var\(--stipe-surface\)\] {
6496
6508
  background-color: var(--stipe-surface);
6497
6509
  }
@@ -6566,9 +6578,6 @@
6566
6578
  .p-0 {
6567
6579
  padding: calc(var(--spacing) * 0);
6568
6580
  }
6569
- .p-2xs {
6570
- padding: var(--spacing-2xs);
6571
- }
6572
6581
  .p-lg {
6573
6582
  padding: var(--spacing-lg);
6574
6583
  }
@@ -6617,9 +6626,6 @@
6617
6626
  .py-2xs {
6618
6627
  padding-block: var(--spacing-2xs);
6619
6628
  }
6620
- .py-\[calc\(\(3rem-1\.25rem\)\/2\)\] {
6621
- padding-block: calc((3rem - 1.25rem) / 2);
6622
- }
6623
6629
  .py-md {
6624
6630
  padding-block: var(--spacing-md);
6625
6631
  }
@@ -6659,6 +6665,9 @@
6659
6665
  .text-right {
6660
6666
  text-align: right;
6661
6667
  }
6668
+ .text-start {
6669
+ text-align: start;
6670
+ }
6662
6671
  .prose-caps {
6663
6672
  :root &.prose {
6664
6673
  --tw-prose-body: var(--color-base-content);
@@ -6699,6 +6708,10 @@
6699
6708
  font-size: var(--text-3xl);
6700
6709
  line-height: var(--tw-leading, var(--text-3xl--line-height));
6701
6710
  }
6711
+ .text-base {
6712
+ font-size: var(--text-base);
6713
+ line-height: var(--tw-leading, var(--text-base--line-height));
6714
+ }
6702
6715
  .text-lg {
6703
6716
  font-size: var(--text-lg);
6704
6717
  line-height: var(--tw-leading, var(--text-lg--line-height));
@@ -6784,6 +6797,9 @@
6784
6797
  .whitespace-pre {
6785
6798
  white-space: pre;
6786
6799
  }
6800
+ .whitespace-pre-line {
6801
+ white-space: pre-line;
6802
+ }
6787
6803
  .whitespace-pre-wrap {
6788
6804
  white-space: pre-wrap;
6789
6805
  }
@@ -6972,10 +6988,6 @@
6972
6988
  .opacity-70 {
6973
6989
  opacity: 70%;
6974
6990
  }
6975
- .\!shadow-none {
6976
- --tw-shadow: 0 0 #0000 !important;
6977
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow) !important;
6978
- }
6979
6991
  .shadow {
6980
6992
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
6981
6993
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -7300,6 +7312,12 @@
7300
7312
  }
7301
7313
  }
7302
7314
  }
7315
+ .after\:hidden {
7316
+ &::after {
7317
+ content: var(--tw-content);
7318
+ display: none;
7319
+ }
7320
+ }
7303
7321
  .hover\:bg-base-200 {
7304
7322
  &:hover {
7305
7323
  @media (hover: hover) {
@@ -7335,12 +7353,6 @@
7335
7353
  }
7336
7354
  }
7337
7355
  }
7338
- .focus\:\!outline-none {
7339
- &:focus {
7340
- --tw-outline-style: none !important;
7341
- outline-style: none !important;
7342
- }
7343
- }
7344
7356
  .focus-visible\:scale-100 {
7345
7357
  &:focus-visible {
7346
7358
  --tw-scale-x: 100%;
@@ -8856,6 +8868,20 @@
8856
8868
  white-space: nowrap;
8857
8869
  }
8858
8870
  }
8871
+ .caps-app-status-bar .badge {
8872
+ height: auto;
8873
+ min-width: 0;
8874
+ padding: 0;
8875
+ border: 0;
8876
+ background: none;
8877
+ color: var(--stipe-fg-muted);
8878
+ font-size: 0.625rem;
8879
+ font-weight: 600;
8880
+ line-height: 1;
8881
+ }
8882
+ .caps-app-status-bar .badge-warning {
8883
+ color: var(--color-warning);
8884
+ }
8859
8885
  .caps-status-bar-picker-list {
8860
8886
  min-width: min(18rem, calc(100vw - 1.5rem));
8861
8887
  }
@@ -11106,17 +11132,61 @@
11106
11132
  color: var(--color-base-content);
11107
11133
  font-size: 0.875rem;
11108
11134
  }
11109
- .caps-composer > .join {
11110
- border: var(--border) solid var(--color-base-content);
11111
- @supports (color: color-mix(in lab, red, red)) {
11112
- border: var(--border) solid color-mix(in oklab, var(--color-base-content) 12%, var(--color-base-300));
11113
- }
11114
- border-radius: var(--radius-box);
11115
- background: var(--color-base-200);
11116
- 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) );
11117
- @supports (color: color-mix(in lab, red, red)) {
11118
- 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 ) );
11119
- }
11135
+ .caps-composer {
11136
+ display: flex;
11137
+ min-width: 0;
11138
+ flex-direction: column;
11139
+ gap: var(--spacing-xs);
11140
+ }
11141
+ .caps-composer-attachments {
11142
+ display: flex;
11143
+ flex-wrap: wrap;
11144
+ gap: var(--spacing-xs);
11145
+ }
11146
+ .caps-composer-input {
11147
+ position: relative;
11148
+ min-width: 0;
11149
+ }
11150
+ .caps-composer-input :is(textarea, input), .caps-composer-input :is(textarea, input):focus, .caps-composer-input :is(textarea, input):focus-visible {
11151
+ width: 100%;
11152
+ border: 0;
11153
+ border-radius: 0;
11154
+ background: transparent;
11155
+ box-shadow: none;
11156
+ outline: none;
11157
+ padding-inline: 0;
11158
+ }
11159
+ .caps-composer-bar {
11160
+ display: flex;
11161
+ min-width: 0;
11162
+ align-items: center;
11163
+ gap: var(--spacing-xs);
11164
+ }
11165
+ .caps-composer-toolbar {
11166
+ display: flex;
11167
+ min-width: 0;
11168
+ flex: 1;
11169
+ align-items: center;
11170
+ gap: var(--spacing-xs);
11171
+ }
11172
+ .caps-composer-toolbar > .caps-status-tray {
11173
+ flex: 1;
11174
+ min-width: 0;
11175
+ --caps-status-tray-row-wrap: wrap;
11176
+ --caps-status-tray-chips-display: contents;
11177
+ --caps-status-tray-key-height: calc(var(--size-field) * 8);
11178
+ --caps-status-tray-chip-height: var(--caps-status-tray-key-height);
11179
+ --caps-status-tray-width: 28rem;
11180
+ --caps-keycap-width: auto;
11181
+ --caps-keycap-height: var(--caps-status-tray-key-height);
11182
+ }
11183
+ .caps-composer-toolbar > .caps-status-tray .caps-status-tray-row :is(.caps-keycap-button, .caps-status-tray-chip, .caps-select) {
11184
+ height: var(--caps-status-tray-key-height);
11185
+ min-height: var(--caps-status-tray-key-height);
11186
+ }
11187
+ .caps-composer-toolbar > .caps-status-tray .caps-status-tray-label {
11188
+ display: flex;
11189
+ align-items: center;
11120
11190
  }
11121
11191
  .caps-alert[data-tone="error"] h3 {
11122
11192
  color: var(--color-error);
@@ -12759,6 +12829,13 @@
12759
12829
  padding: var(--spacing-md);
12760
12830
  text-align: center;
12761
12831
  }
12832
+ .caps-send-action {
12833
+ --caps-keycap-width: auto;
12834
+ --caps-keycap-justify: center;
12835
+ --caps-keycap-padding: 0;
12836
+ --caps-keycap-min-width: var(--caps-keycap-height, 2.5rem);
12837
+ flex: none;
12838
+ }
12762
12839
  .caps-send-glyph {
12763
12840
  display: inline-grid;
12764
12841
  place-items: center;
@@ -13703,15 +13780,15 @@
13703
13780
  isolation: var(--caps-button-outline-isolation, auto);
13704
13781
  }
13705
13782
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]) {
13706
- background-color: var(--caps-button-outline-face, revert-layer);
13707
- color: var(--caps-button-outline-ink, revert-layer);
13783
+ background-color: var(--caps-key-face);
13784
+ color: var(--caps-button-outline-ink, var(--color-base-content));
13708
13785
  }
13709
13786
  .caps-button.btn-outline:is(:disabled, [aria-disabled="true"]) {
13710
13787
  background-color: var( --caps-button-outline-disabled-face, var(--color-base-200) );
13711
13788
  }
13712
13789
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]):hover {
13713
- background-color: var( --caps-button-outline-hover-face, var(--caps-button-outline-face, revert-layer) );
13714
- color: var( --caps-button-outline-hover-ink, var(--caps-button-outline-ink, revert-layer) );
13790
+ background-color: var( --caps-button-outline-hover-face, var(--caps-keycap-hover-face, var(--caps-key-face)) );
13791
+ color: var( --caps-button-outline-hover-ink, var(--caps-button-outline-ink, var(--color-base-content)) );
13715
13792
  }
13716
13793
  .caps-button.btn-outline::before {
13717
13794
  content: var(--caps-button-outline-inset-content, none);
@@ -13724,21 +13801,36 @@
13724
13801
  .caps-button.btn-outline:hover::before {
13725
13802
  background: var(--color-base-content);
13726
13803
  }
13727
- .caps-button.btn-outline {
13728
- --btn-border: var(--color-base-content);
13804
+ .caps-keycap-button, .caps-button-filled, .caps-button.btn-outline {
13805
+ --caps-key-lip: calc(var(--depth) * 1px);
13806
+ --caps-key-rest-shadow: inset 0 1px 0
13807
+ oklch(100% 0 0 / calc(var(--depth) * var(--caps-key-top-edge, 0.14))),
13808
+ 0 var(--caps-key-lip) 0
13809
+ var(--caps-key-face);
13729
13810
  @supports (color: color-mix(in lab, red, red)) {
13730
- --btn-border: color-mix(
13731
- in oklab,
13732
- var(--color-base-content) 24%,
13733
- transparent
13734
- );
13811
+ --caps-key-rest-shadow: inset 0 1px 0
13812
+ oklch(100% 0 0 / calc(var(--depth) * var(--caps-key-top-edge, 0.14))),
13813
+ 0 var(--caps-key-lip) 0
13814
+ color-mix(
13815
+ in oklab,
13816
+ var(--caps-key-face),
13817
+ var(--caps-key-lip-ink, var(--color-base-content)) 14%
13818
+ );
13735
13819
  }
13820
+ --caps-key-pressed-shadow: inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)), 0 0 0 transparent;
13821
+ }
13822
+ .caps-button.btn-outline {
13823
+ --btn-border: var(--stipe-linework);
13824
+ --caps-key-face: var(--caps-button-outline-face, var(--color-base-200));
13736
13825
  font-weight: var(--caps-button-weight, 500);
13737
- box-shadow: var(--caps-button-outline-drop, var(--caps-button-drop, none));
13826
+ box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop, var(--caps-key-rest-shadow)) );
13827
+ transition-property: background-color, border-color, box-shadow, translate;
13828
+ transition-duration: var(--stipe-motion-fast);
13829
+ transition-timing-function: ease-out;
13738
13830
  }
13739
13831
  .caps-button.btn-outline:not(:disabled):not([aria-disabled="true"]):active {
13740
- translate: 0 var(--caps-button-press, var(--stipe-press-depth));
13741
- box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop-active, none) );
13832
+ translate: 0 var(--caps-button-press, var(--caps-key-lip));
13833
+ box-shadow: var( --caps-button-outline-drop, var(--caps-button-drop-active, var(--caps-key-pressed-shadow)) );
13742
13834
  }
13743
13835
  .caps-button.btn-ghost {
13744
13836
  font-weight: 500;
@@ -13748,6 +13840,9 @@
13748
13840
  }
13749
13841
  .caps-button-filled {
13750
13842
  --btn-bg: var(--btn-color);
13843
+ --caps-key-face: var(--btn-color);
13844
+ --caps-key-lip-ink: black;
13845
+ --caps-key-top-edge: 0.06;
13751
13846
  --caps-button-filled-edge: var(
13752
13847
  --caps-button-border-color,
13753
13848
  var(--btn-bg)
@@ -13757,7 +13852,7 @@
13757
13852
  --caps-button-border-color,
13758
13853
  color-mix(
13759
13854
  in oklab,
13760
- color-mix(in oklab, var(--btn-bg), black calc(var(--depth) * 8%)),
13855
+ color-mix(in oklab, var(--btn-bg), black calc(var(--depth) * 6%)),
13761
13856
  var(--stipe-linework)
13762
13857
  calc((1 - var(--depth)) * var(--caps-button-linework, 100%))
13763
13858
  )
@@ -13765,7 +13860,7 @@
13765
13860
  }
13766
13861
  --caps-button-filled-drop: var(
13767
13862
  --caps-button-drop,
13768
- inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18))
13863
+ var(--caps-key-rest-shadow)
13769
13864
  );
13770
13865
  background-color: var(--btn-bg);
13771
13866
  color: var(--btn-fg);
@@ -13808,9 +13903,9 @@
13808
13903
  @supports (color: color-mix(in lab, red, red)) {
13809
13904
  --btn-bg: color-mix(in oklab, var(--btn-color) 92%, black);
13810
13905
  }
13811
- translate: 0 var(--caps-button-press, var(--stipe-press-depth));
13906
+ translate: 0 var(--caps-button-press, var(--caps-key-lip));
13812
13907
  scale: var(--stipe-press-scale);
13813
- box-shadow: var( --caps-button-drop-active, inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)) );
13908
+ box-shadow: var(--caps-button-drop-active, var(--caps-key-pressed-shadow));
13814
13909
  transition-duration: var(--stipe-motion-squish);
13815
13910
  }
13816
13911
  .caps-button.caps-button-menubar {
@@ -14791,7 +14886,7 @@
14791
14886
  scale: none;
14792
14887
  }
14793
14888
  .caps-button-filled:not(:disabled):not([aria-disabled="true"]):active {
14794
- translate: var(--caps-button-press-reduced, none);
14889
+ translate: var(--caps-button-press-reduced, 0 var(--caps-key-lip));
14795
14890
  }
14796
14891
  .caps-gooey-motion, .caps-gooey-motion::before, .caps-switch, .caps-radio, .caps-checkbox, .caps-checkbox-track, .caps-input, .caps-status-bead {
14797
14892
  animation: none !important;
@@ -15976,7 +16071,7 @@
15976
16071
  }
15977
16072
  }
15978
16073
  @media (prefers-reduced-motion: reduce) {
15979
- .caps-keycap, .caps-keycap-button {
16074
+ .caps-keycap, .caps-keycap-button, .caps-button.btn-outline {
15980
16075
  transition: none;
15981
16076
  }
15982
16077
  }
@@ -16047,7 +16142,21 @@
16047
16142
  height: 0.625rem;
16048
16143
  }
16049
16144
  .caps-keycap-button {
16050
- --caps-keycap-lip: calc(var(--depth) * 1px);
16145
+ --caps-key-face: var(--caps-keycap-face, var(--color-base-200));
16146
+ --caps-keycap-rest-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)),
16147
+ 0 var(--caps-key-lip) 0
16148
+ var(--caps-key-face),
16149
+ 0 var(--caps-key-lip) calc(var(--depth) * 2px)
16150
+ oklch(0% 0 0 / calc(var(--depth) * 0.15));
16151
+ @supports (color: color-mix(in lab, red, red)) {
16152
+ --caps-keycap-rest-shadow: inset 0 1px 0 oklch(100% 0 0 / calc(var(--depth) * 0.18)),
16153
+ 0 var(--caps-key-lip) 0
16154
+ color-mix(in oklab, var(--caps-key-face), var(--color-base-content) 14%),
16155
+ 0 var(--caps-key-lip) calc(var(--depth) * 2px)
16156
+ oklch(0% 0 0 / calc(var(--depth) * 0.15));
16157
+ }
16158
+ --caps-keycap-pressed-shadow: inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)),
16159
+ 0 0 0 transparent, 0 0 0 transparent;
16051
16160
  display: flex;
16052
16161
  width: var(--caps-keycap-width, 100%);
16053
16162
  min-width: var(--caps-keycap-min-width, 0);
@@ -16056,7 +16165,10 @@
16056
16165
  justify-content: var(--caps-keycap-justify, space-between);
16057
16166
  gap: var(--spacing-sm);
16058
16167
  padding: var(--caps-keycap-padding, var(--spacing-xs) var(--spacing-sm));
16059
- border: var( --caps-keycap-context-border, var(--border) solid var(--caps-keycap-edge, var(--stipe-linework)) );
16168
+ border: var( --caps-keycap-context-border, var(--border) solid var( --caps-keycap-edge, var(--stipe-linework) ) );
16169
+ @supports (color: color-mix(in lab, red, red)) {
16170
+ 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)) ) );
16171
+ }
16060
16172
  font-size: var(--caps-keycap-font-size, inherit);
16061
16173
  font-weight: var( --caps-keycap-context-weight, var(--caps-keycap-font-weight, inherit) );
16062
16174
  border-radius: var(--radius-field);
@@ -16065,12 +16177,28 @@
16065
16177
  var(--caps-keycap-face, var(--color-base-200))
16066
16178
  );
16067
16179
  background-color: var(--caps-keycap-painted-face);
16068
- --caps-keycap-default-image: none;
16069
- background-image: var( --caps-keycap-context-image, var(--caps-keycap-default-image) );
16070
- 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)) );
16180
+ --caps-keycap-default-image: linear-gradient(
16181
+ to bottom,
16182
+ var(--caps-keycap-painted-face),
16183
+ var(--caps-keycap-painted-face)
16184
+ );
16071
16185
  @supports (color: color-mix(in lab, red, red)) {
16072
- 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% ) );
16186
+ --caps-keycap-default-image: linear-gradient(
16187
+ to bottom,
16188
+ color-mix(
16189
+ in oklab,
16190
+ var(--caps-keycap-painted-face),
16191
+ white calc(var(--depth) * 3%)
16192
+ ),
16193
+ color-mix(
16194
+ in oklab,
16195
+ var(--caps-keycap-painted-face),
16196
+ black calc(var(--depth) * 3%)
16197
+ )
16198
+ );
16073
16199
  }
16200
+ background-image: var( --caps-keycap-context-image, var(--caps-keycap-default-image) );
16201
+ box-shadow: var( --caps-keycap-context-shadow, var(--caps-keycap-rest-shadow) );
16074
16202
  color: var(--caps-keycap-ink, var(--color-base-content));
16075
16203
  text-align: left;
16076
16204
  cursor: pointer;
@@ -16079,8 +16207,8 @@
16079
16207
  transition-timing-function: ease-out;
16080
16208
  }
16081
16209
  .caps-keycap-button:active {
16082
- translate: 0 var(--caps-keycap-context-travel, var(--caps-keycap-lip));
16083
- box-shadow: var( --caps-keycap-active-shadow, inset 0 1px 0 oklch(0% 0 0 / calc(var(--depth) * 0.08)), 0 0 0 transparent );
16210
+ translate: 0 var(--caps-keycap-context-travel, var(--caps-key-lip));
16211
+ box-shadow: var( --caps-keycap-active-shadow, var(--caps-keycap-pressed-shadow) );
16084
16212
  }
16085
16213
  .caps-keycap-button:focus-visible {
16086
16214
  outline: 2px solid var(--caps-keycap-focus-ink, var(--color-base-content));
@@ -16127,6 +16255,28 @@
16127
16255
  --caps-keycap-ink: var(--color-neutral-content);
16128
16256
  --caps-keycap-edge: var(--color-neutral);
16129
16257
  }
16258
+ .caps-keycap-button.caps-send-action[data-tone="primary"] {
16259
+ --caps-keycap-face: var(--color-primary);
16260
+ --caps-keycap-ink: var(--color-primary-content);
16261
+ --caps-keycap-edge: var(--color-primary);
16262
+ @supports (color: color-mix(in lab, red, red)) {
16263
+ --caps-keycap-edge: color-mix(in oklab, var(--color-primary) 82%, black);
16264
+ }
16265
+ --caps-keycap-hover-face: var(--color-primary);
16266
+ @supports (color: color-mix(in lab, red, red)) {
16267
+ --caps-keycap-hover-face: color-mix(
16268
+ in oklab,
16269
+ var(--color-primary) 92%,
16270
+ black
16271
+ );
16272
+ }
16273
+ }
16274
+ .caps-keycap-button.caps-send-action[data-send-state="empty"] {
16275
+ --caps-keycap-face: var(--color-base-200);
16276
+ --caps-keycap-ink: var(--color-base-content);
16277
+ --caps-keycap-edge: var(--stipe-linework);
16278
+ --caps-keycap-hover-face: var(--color-base-200);
16279
+ }
16130
16280
  .caps-keycap-button[data-tone="destructive"]:is(:hover, :focus-visible) {
16131
16281
  --caps-keycap-ink: var(--color-error);
16132
16282
  --caps-keycap-edge: var(--color-error);
@@ -18051,10 +18201,57 @@
18051
18201
  --range-thumb: var(--caps-control-range-thumb, var(--caps-slider-thumb));
18052
18202
  }
18053
18203
  }
18054
- @layer components {
18055
- .chat-composer {
18056
- border-top: 1px solid var(--color-base-300);
18204
+ .caps-popover[data-parakeet-slash][data-side="top"] {
18205
+ inset-inline: var(--parakeet-completion-inset, 0);
18206
+ bottom: calc(100% - var(--parakeet-completion-inset, 0px));
18207
+ border-color: var( --parakeet-completion-edge, var(--color-base-content) );
18208
+ @supports (color: color-mix(in lab, red, red)) {
18209
+ border-color: var( --parakeet-completion-edge, color-mix(in oklab, var(--color-base-content) 16%, transparent) );
18057
18210
  }
18211
+ border-bottom-width: 0;
18212
+ background: var(--parakeet-completion-face, var(--color-base-200));
18213
+ border-end-start-radius: 0;
18214
+ border-end-end-radius: 0;
18215
+ box-shadow: none;
18216
+ }
18217
+ .parakeet-slash-menu .parakeet-slash-label {
18218
+ min-width: 7rem;
18219
+ font-family: var(--font-mono);
18220
+ font-weight: 600;
18221
+ }
18222
+ .parakeet-slash-match {
18223
+ background: none;
18224
+ color: var(--color-primary);
18225
+ }
18226
+ .parakeet-slash-detail {
18227
+ flex: 1;
18228
+ min-width: 0;
18229
+ overflow: hidden;
18230
+ text-overflow: ellipsis;
18231
+ white-space: nowrap;
18232
+ color: var(--stipe-fg-muted);
18233
+ }
18234
+ .parakeet-slash-keys {
18235
+ font-family: var(--font-mono);
18236
+ font-size: 0.65rem;
18237
+ color: var(--stipe-fg-muted);
18238
+ }
18239
+ .parakeet-slash-hint {
18240
+ margin: 0;
18241
+ padding: 0.25rem 0.5rem;
18242
+ font-family: var(--font-mono);
18243
+ font-size: 0.75rem;
18244
+ color: var(--stipe-fg-muted);
18245
+ }
18246
+ .parakeet-slash-menu [data-disabled="true"] {
18247
+ opacity: 0.5;
18248
+ }
18249
+ .parakeet-slash-menu [role="option"]:has(> .parakeet-slash-media) {
18250
+ align-items: center;
18251
+ }
18252
+ .parakeet-slash-media {
18253
+ display: flex;
18254
+ flex: none;
18058
18255
  }
18059
18256
  :root {
18060
18257
  --prose-max-width: 80ch;
@@ -18075,57 +18272,141 @@
18075
18272
  overflow-wrap: break-word;
18076
18273
  }
18077
18274
  .chat-composer {
18078
- background: var(--color-base-100);
18079
18275
  flex-shrink: 0;
18276
+ padding: 0 var(--spacing-xs) var(--spacing-xs);
18080
18277
  }
18081
18278
  .chat-composer .composer-body {
18279
+ --parakeet-completion-inset: 0px;
18280
+ --parakeet-completion-face: var(--color-base-200);
18281
+ --parakeet-completion-edge: var(--stipe-hairline);
18282
+ display: block;
18283
+ }
18284
+ .chat-composer .composer-body:has(> [data-parakeet-slash]) .composer-card {
18285
+ border-start-start-radius: 0;
18286
+ border-start-end-radius: 0;
18287
+ }
18288
+ .chat-composer .composer-card {
18289
+ padding: var(--spacing-sm);
18290
+ }
18291
+ .chat-composer .composer-card .caps-composer-input {
18292
+ padding: var(--spacing-xs) var(--spacing-sm) 0;
18293
+ }
18294
+ .chat-composer .composer-attachments {
18082
18295
  display: flex;
18083
- align-items: center;
18084
- gap: 0.5rem;
18085
- padding: 0.5rem;
18296
+ flex-wrap: wrap;
18297
+ gap: var(--spacing-sm);
18298
+ margin: 0;
18299
+ padding: var(--spacing-xs) var(--spacing-sm);
18300
+ list-style: none;
18301
+ }
18302
+ .chat-composer .composer-attachments li {
18303
+ position: relative;
18304
+ }
18305
+ .chat-composer .composer-attachments img {
18306
+ display: block;
18307
+ width: 3.5rem;
18308
+ height: 3.5rem;
18309
+ object-fit: cover;
18310
+ }
18311
+ .chat-composer .composer-attachment-remove {
18312
+ position: absolute;
18313
+ inset-block-start: 0;
18314
+ inset-inline-end: 0;
18315
+ background: var(--color-base-100);
18316
+ opacity: 0;
18317
+ }
18318
+ .chat-composer .composer-attachments li:hover .composer-attachment-remove, .chat-composer .composer-attachments li:focus-within .composer-attachment-remove {
18319
+ opacity: 1;
18320
+ }
18321
+ @media (hover: none) {
18322
+ .chat-composer .composer-attachment-remove {
18323
+ opacity: 1;
18324
+ }
18086
18325
  }
18087
18326
  .chat-composer .composer-footer {
18088
- display: flex;
18089
- height: 32px;
18090
- align-items: center;
18091
- gap: 0.5rem;
18092
- padding: 0 0.75rem;
18093
- background: var(--color-base-200);
18094
- color: var(--color-base-content);
18095
- font-family: var(--font-sans);
18096
- font-size: 0.65rem;
18327
+ padding: var(--spacing-xs);
18097
18328
  }
18098
- .chat-composer .parakeet-slash-label {
18099
- min-width: 7rem;
18329
+ .chat-composer .composer-model-key {
18330
+ flex: 0 1 220px;
18331
+ min-width: 0;
18332
+ font-size: var(--text-xs);
18333
+ }
18334
+ .chat-composer .composer-model-readout, .chat-composer .composer-status-chip {
18335
+ color: var(--stipe-fg-muted);
18336
+ font-size: var(--text-xs);
18337
+ }
18338
+ .chat-composer .composer-model-readout {
18100
18339
  font-family: var(--font-mono);
18101
- font-weight: 600;
18102
18340
  }
18103
- .chat-composer .parakeet-slash-match {
18104
- background: none;
18105
- color: var(--color-primary);
18341
+ .chat-composer .composer-settings-chip {
18342
+ display: inline-flex;
18343
+ align-items: center;
18344
+ gap: var(--spacing-xs);
18106
18345
  }
18107
- .chat-composer .parakeet-slash-detail {
18108
- flex: 1;
18346
+ .chat-composer .composer-settings-chip > svg {
18347
+ width: var(--stipe-icon-size-sm);
18348
+ height: var(--stipe-icon-size-sm);
18349
+ }
18350
+ .chat-composer .composer-model-key .caps-keycap-button-label {
18109
18351
  min-width: 0;
18110
18352
  overflow: hidden;
18111
18353
  text-overflow: ellipsis;
18112
18354
  white-space: nowrap;
18113
- color: var(--stipe-fg-muted);
18114
18355
  }
18115
- .chat-composer .parakeet-slash-keys {
18116
- font-family: var(--font-mono);
18117
- font-size: 0.65rem;
18118
- color: var(--stipe-fg-muted);
18356
+ .chat-composer .composer-card {
18357
+ container-type: inline-size;
18119
18358
  }
18120
- .chat-composer .parakeet-slash-hint {
18121
- margin: 0;
18122
- padding: 0.25rem 0.5rem;
18123
- font-family: var(--font-mono);
18124
- font-size: 0.75rem;
18359
+ @container (max-width: 34rem) {
18360
+ .chat-composer .composer-model-key {
18361
+ flex: 1 1 4rem;
18362
+ }
18363
+ .chat-composer [data-status-tray-chip="settings"] {
18364
+ flex: 0 1 auto;
18365
+ min-width: 0;
18366
+ }
18367
+ .chat-composer .composer-readout {
18368
+ display: none;
18369
+ }
18370
+ }
18371
+ .chat-composer .composer-readout {
18372
+ margin-inline-start: auto;
18125
18373
  color: var(--stipe-fg-muted);
18374
+ font-size: var(--text-xs);
18375
+ line-height: 1;
18376
+ font-variant-numeric: tabular-nums;
18377
+ white-space: nowrap;
18126
18378
  }
18127
- .chat-composer [data-disabled="true"] {
18128
- opacity: 0.5;
18379
+ .chat-composer .composer-send-key {
18380
+ margin-inline-start: auto;
18381
+ }
18382
+ .chat-composer .composer-readout + .composer-send-key {
18383
+ margin-inline-start: var(--spacing-sm);
18384
+ }
18385
+ .chat-composer .parakeet-decision {
18386
+ padding: var(--spacing-xs) var(--spacing-sm) 0;
18387
+ }
18388
+ .chat-composer .parakeet-decision-list {
18389
+ width: auto;
18390
+ margin-inline: calc(-1 * var(--spacing-xs));
18391
+ border: 0;
18392
+ background: transparent;
18393
+ box-shadow: none;
18394
+ padding: 0;
18395
+ }
18396
+ .chat-composer .parakeet-decision .caps-disclosure-trigger {
18397
+ width: auto;
18398
+ margin-inline: calc(-1 * var(--spacing-xs));
18399
+ padding-inline: var(--spacing-xs);
18400
+ }
18401
+ .chat-composer .composer-model-key {
18402
+ --caps-keycap-justify: space-between;
18403
+ }
18404
+ .parakeet-decision .parakeet-decision-list [role="option"] {
18405
+ padding-inline: var(--spacing-xs);
18406
+ background: transparent;
18407
+ }
18408
+ .parakeet-decision > [data-highlight], .parakeet-decision .parakeet-decision-list [role="option"]:has([data-highlight]) {
18409
+ background: var(--color-base-200);
18129
18410
  }
18130
18411
  .chat-composer .parakeet-command-notice[data-tone="error"] {
18131
18412
  color: var(--color-error);
@@ -18133,12 +18414,6 @@
18133
18414
  .chat-composer .parakeet-command-notice[data-tone="success"] {
18134
18415
  color: var(--color-success);
18135
18416
  }
18136
- .chat-composer .footer-divider {
18137
- width: 3px;
18138
- height: 3px;
18139
- border-radius: 50%;
18140
- background: var(--stipe-fg-muted);
18141
- }
18142
18417
  html:not([data-theme]), [data-theme="latte"] {
18143
18418
  --th-token: #4c4f69;
18144
18419
  --th-attr: #df8e1d;
@@ -18270,6 +18545,19 @@ pre.tm-code, pre.th-code {
18270
18545
  .tm-code, .th-code {
18271
18546
  font-family: var(--font-mono);
18272
18547
  }
18548
+ .parakeet-decision-actions {
18549
+ display: flex;
18550
+ align-items: center;
18551
+ justify-content: flex-end;
18552
+ gap: var(--spacing-xs);
18553
+ --caps-keycap-width: auto;
18554
+ --caps-keycap-justify: center;
18555
+ --caps-keycap-padding: 0 var(--spacing-md);
18556
+ --caps-keycap-height: calc(var(--size-field) * 8);
18557
+ }
18558
+ .parakeet-decision-actions > .caps-keycap-button {
18559
+ height: var(--caps-keycap-height);
18560
+ }
18273
18561
  @layer base {
18274
18562
  :root:has(input.theme-controller[value=light]:checked),[data-theme=light] {
18275
18563
  color-scheme: light;
@@ -19083,6 +19371,11 @@ pre.tm-code, pre.th-code {
19083
19371
  syntax: "*";
19084
19372
  inherits: false;
19085
19373
  }
19374
+ @property --tw-content {
19375
+ syntax: "*";
19376
+ initial-value: "";
19377
+ inherits: false;
19378
+ }
19086
19379
  @layer properties {
19087
19380
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
19088
19381
  :root, :host {
@@ -19139,6 +19432,7 @@ pre.tm-code, pre.th-code {
19139
19432
  --tw-drop-shadow-alpha: 100%;
19140
19433
  --tw-drop-shadow-size: initial;
19141
19434
  --tw-ease: initial;
19435
+ --tw-content: "";
19142
19436
  }
19143
19437
  }
19144
19438
  }