@softize/opus 9.0.6 → 9.0.7

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/CHANGELOG.md CHANGED
@@ -11,6 +11,14 @@ Depois de qualquer bump, rode os gates (`typecheck` · `test` · `opus check` ·
11
11
  > tinha ficado sem registro nenhum, o que é exatamente o caso que este arquivo existe
12
12
  > pra cobrir.
13
13
 
14
+ ## 9.0.7 — 2026-08-18
15
+
16
+ **Scrollbars nativas podem compartilhar um acabamento discreto e previsível.** A classe
17
+ `scrollbar-subtle` veste um scroller ou todo um shell: o indicador fino aparece ao passar
18
+ o ponteiro ou navegar com teclado pela região, sem depender da preferência global de
19
+ barras do macOS e sem adicionar listeners ao caminho de scroll. O `Chat` já adota o novo
20
+ acabamento.
21
+
14
22
  ## 9.0.6 — 2026-08-18
15
23
 
16
24
  **As falas do usuário no `Chat` voltam ao fluxo normal da conversa.** Elas usam fundo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softize/opus",
3
- "version": "9.0.6",
3
+ "version": "9.0.7",
4
4
  "description": "End-to-end action protocol for TypeScript. Single package with subpath exports (core + adapters).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -133,7 +133,7 @@ const ChatTranscript = React.memo(function ChatTranscript({
133
133
  <div
134
134
  ref={scrollRef}
135
135
  data-slot="chat-scroll"
136
- className="flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-4"
136
+ className="scrollbar-subtle flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-4"
137
137
  >
138
138
  {items.length === 0 && !indicatorVisible && greeting !== undefined && (
139
139
  <div data-slot="chat-empty" className="m-auto max-w-[280px] text-center text-muted-foreground">
package/src/ui/theme.css CHANGED
@@ -180,6 +180,43 @@
180
180
  }
181
181
  }
182
182
 
183
+ /* Escopo de scrollbar discreta. Pode vestir o próprio scroller (como o Chat) ou um shell:
184
+ * nesse caso todos os scrolls nativos descendentes compartilham o mesmo acabamento. Isso
185
+ * elimina a variação do macOS entre raiz, elementos aninhados, mouse e trackpad sem trocar
186
+ * o mecanismo nativo nem adicionar trabalho em JS. Firefox usa scrollbar-color;
187
+ * Chromium/Safari usam os pseudos abaixo. Iframes continuam sendo documentos isolados. */
188
+ @media (hover: hover) {
189
+ .scrollbar-subtle,
190
+ .scrollbar-subtle * {
191
+ scrollbar-color: transparent transparent;
192
+ scrollbar-width: thin;
193
+ }
194
+ .scrollbar-subtle:is(:hover, :focus, :focus-within),
195
+ .scrollbar-subtle *:is(:hover, :focus, :focus-within) {
196
+ scrollbar-color: color-mix(in srgb, var(--muted-foreground) 35%, transparent) transparent;
197
+ }
198
+ .scrollbar-subtle::-webkit-scrollbar,
199
+ .scrollbar-subtle *::-webkit-scrollbar {
200
+ width: 0.5rem;
201
+ height: 0.5rem;
202
+ }
203
+ .scrollbar-subtle::-webkit-scrollbar-track,
204
+ .scrollbar-subtle *::-webkit-scrollbar-track {
205
+ background: transparent;
206
+ }
207
+ .scrollbar-subtle::-webkit-scrollbar-thumb,
208
+ .scrollbar-subtle *::-webkit-scrollbar-thumb {
209
+ border: 2px solid transparent;
210
+ border-radius: 9999px;
211
+ background-color: transparent;
212
+ background-clip: content-box;
213
+ }
214
+ .scrollbar-subtle:is(:hover, :focus, :focus-within)::-webkit-scrollbar-thumb,
215
+ .scrollbar-subtle *:is(:hover, :focus, :focus-within)::-webkit-scrollbar-thumb {
216
+ background-color: color-mix(in srgb, var(--muted-foreground) 35%, transparent);
217
+ }
218
+ }
219
+
183
220
  /* Markdown (componente `prose`) segue os tokens da casa — light/dark sozinho via as vars
184
221
  (que já viram no `.dark`), então dispensa o `prose-invert`. O corpo é muted (como era na
185
222
  versão à mão); headings/bold no foreground; bordas/regras no --border. */