@poodle64/librarian 2026.10.2 → 2026.10.3

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.
@@ -311,7 +311,7 @@
311
311
  Centred, both sit under the composer instead. -->
312
312
  {#if !centred}
313
313
  {#if scope}
314
- <ScopeStatement statement={scope} expanded={empty} copy={words} />
314
+ <ScopeStatement statement={scope} expanded={false} copy={words} />
315
315
  {/if}
316
316
  {@render lead?.()}
317
317
  {/if}
@@ -367,7 +367,9 @@
367
367
  <div class="ds-lib-after">
368
368
  {@render suggestions()}
369
369
  {#if scope}
370
- <ScopeStatement statement={scope} expanded={false} copy={words} />
370
+ <div class="ds-lib-after-scope">
371
+ <ScopeStatement statement={scope} expanded={false} copy={words} />
372
+ </div>
371
373
  {/if}
372
374
  {@render lead?.()}
373
375
  </div>
@@ -532,6 +534,11 @@
532
534
  padding-top: 1rem;
533
535
  }
534
536
 
537
+ .ds-lib-after-scope {
538
+ display: flex;
539
+ justify-content: center;
540
+ }
541
+
535
542
  .ds-lib-after .ds-lib-chips {
536
543
  flex-flow: row wrap;
537
544
  justify-content: center;
@@ -79,7 +79,7 @@
79
79
  }
80
80
 
81
81
  .ds-lib-fair-use a {
82
- color: var(--ds-color-primary);
82
+ color: var(--ds-color-primary-ink, var(--ds-color-primary));
83
83
  text-decoration: underline;
84
84
  text-underline-offset: 2px;
85
85
  }
@@ -214,8 +214,9 @@
214
214
  color: var(--ds-color-foreground);
215
215
  }
216
216
 
217
+ /* The accent as text: an app whose accent fails as text sets the ink. */
217
218
  .agent-prose :global(a) {
218
- color: var(--ds-color-primary);
219
+ color: var(--ds-color-primary-ink, var(--ds-color-primary));
219
220
  text-underline-offset: 0.2em;
220
221
  text-decoration-line: underline;
221
222
  }
@@ -5,11 +5,13 @@
5
5
  whether the answer they are about to read covers their case at all. Saying it
6
6
  once, in the persona's own words, is cheaper than every answer hedging.
7
7
 
8
- It leads while there is nothing else on the surface, and folds to one line as
9
- soon as there is: a boundary a reader has already read is a banner in the way
10
- of the conversation they came for. Folded is not gone — the same line reopens
11
- it, and a reader who opened it stays opened until the surface itself changes
12
- state.
8
+ One quiet line, never a card: the label and a chevron in the muted ink, the
9
+ statement under it in the same ink when opened (caspo#177). `Conversation`
10
+ renders it folded, under the empty chat's composer and over the transcript
11
+ alike: a boundary is a banner in the way of the conversation a reader came
12
+ for, and one line they can open costs it nothing. Folded is not gone: the
13
+ same line reopens it, and a reader who opened it stays opened until the
14
+ surface itself changes state.
13
15
  -->
14
16
  <script lang="ts">
15
17
  import { untrack } from 'svelte';
@@ -60,33 +62,32 @@
60
62
  </button>
61
63
 
62
64
  {#if open}
63
- <!-- No measure of its own: the card IS the measure, and a paragraph
64
- capped narrower than the border around it leaves a hand's width of
65
- empty card down the right at 1440. -->
66
65
  <p class="ds-lib-scope-text">{statement}</p>
67
66
  {/if}
68
67
  </section>
69
68
 
70
69
  <style>
71
70
  .ds-lib-scope {
72
- border: 1px solid var(--ds-color-border);
73
- border-radius: var(--ds-radius-xl);
74
- background: color-mix(in oklab, var(--ds-color-surface-2) 60%, transparent);
75
- padding: 0.5rem 0.75rem;
71
+ display: flex;
72
+ min-width: 0;
73
+ flex-direction: column;
74
+ align-items: flex-start;
76
75
  }
77
76
 
77
+ /* 44px tall: a thumb's target, with nothing drawn around it. */
78
78
  .ds-lib-scope-toggle {
79
79
  display: flex;
80
- width: 100%;
80
+ max-width: 100%;
81
+ min-height: 2.75rem;
81
82
  align-items: center;
82
- gap: 0.5rem;
83
+ gap: 0.375rem;
83
84
  border: 0;
84
85
  border-radius: var(--ds-radius-md);
85
86
  background: none;
86
87
  padding: 0;
87
88
  color: var(--ds-color-muted-foreground);
88
89
  font: inherit;
89
- font-size: var(--ds-text-2xs);
90
+ font-size: 0.8125rem;
90
91
  text-align: start;
91
92
  cursor: pointer;
92
93
  transition: color 150ms ease;
@@ -103,13 +104,9 @@
103
104
 
104
105
  .ds-lib-scope-label {
105
106
  min-width: 0;
106
- flex: 1;
107
107
  overflow: hidden;
108
108
  text-overflow: ellipsis;
109
109
  white-space: nowrap;
110
- font-weight: 500;
111
- letter-spacing: 0.05em;
112
- text-transform: uppercase;
113
110
  }
114
111
 
115
112
  .ds-lib-scope-chevron {
@@ -123,7 +120,7 @@
123
120
  }
124
121
 
125
122
  .ds-lib-scope-text {
126
- margin: 0.375rem 0 0;
123
+ margin: 0;
127
124
  color: var(--ds-color-muted-foreground);
128
125
  font-size: 0.875rem;
129
126
  line-height: 1.5rem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poodle64/librarian",
3
- "version": "2026.10.2",
3
+ "version": "2026.10.3",
4
4
  "description": "An agent's conversation surface as a consumable Svelte 5 package: the stream client, transcript state and self-styling chat components (transcript, composer, markdown) every household app renders instead of rebuilding, speaking as whichever persona the app names.",
5
5
  "type": "module",
6
6
  "license": "MIT",