chore: version packages - #7
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 3, 2026 02:42
58bbf6e to
6b8f485
Compare
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 3, 2026 03:08
6b8f485 to
b44c067
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
September 3, 2026 03:32
3c16361 to
2b78775
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 3, 2026 03:57
2b78775 to
d0ae51e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
spoken-text@0.2.0
Minor Changes
e49327f: Read a whole document, not just a passage.
<SpokenText>accepts elements as well as a string. It walks the tree,wraps the words and leaves the structure alone: an
h2stays anh2, a linkstays a link.
request. The first is fetched on mount, the next is warmed while the current
one plays, and clicking a word in a block nobody has asked for yet fetches it
and plays from there.
currentWordIndexis one index across the document, andsegmentssays where each block begins and ends.durationcounts unloaded blocks at a reading pace until their audio lands,and
durationIsEstimatesays when it is doing so.<Player>shows the totaldimmed, with a tilde, while it is a guess.
<SpokenTextProvider>holds the controller, so<Player>can live in asticky header rather than next to the text.
useSpokenTextController()readsit, for building a player of your own.
skipandonlydecide what is spoken, taking a tag, a.class, an[attr], or a predicate over the React element.data-spokenanddata-spoken-skipare the per-element forms. Skipped content still renderswhere it was written and is dropped only from the text handed to the aligner,
so the words either side of an inline
<code>stay correctly timed.Breaking:
<Transport>is now<Player>, andTransportProps/TransportClassNamesarePlayerProps/PlayerClassNames. Same component,better name; there is no alias.
e13bf4e: The highlight reads as one band rather than a row of tiles. The whitespace
between two words is now a span of its own, carrying
data-spoken-stateandthe past colour once the word after it has been reached, and no word box is
rounded, padded or overlapped on the way. Only the word being spoken is a box
of its own.
classNames.separatorrestyles the gaps.e7ba6c2: Say what is not on the page.
saytakes a rule per selector and puts words into the audio that are not inthe markup:
{ before }and{ after }keep the element's own words and speak aroundthem; a plain string replaces them. Keys select the way
skipdoes, and thefirst one that matches an element wins.
The words a rule adds are hidden words: they are in the word list and in the
text handed to the aligner, at the point the element sits, so everything
around them stays exactly timed — and nothing is rendered for them.
DisplayWord.hiddenmarks them, no word on the page iscurrentwhile one isspoken, and the highlight band waits for the voice to come back to the page.
ee1d15b: Speech that brings its own timings, and a kind for every block.
elevenlabsSpeechis a new adapter. One call returns the audio and atimestamp for every character, which the adapter groups into words, so there
is no transcription step and no drift between what was said and what was
heard. Plain
fetch, no SDK, no new dependency. NeedsELEVENLABS_API_KEY(or
ELEVEN_LABS_API_KEY); defaults to George, a premade voice that works onevery plan.
SpeechAudiocan carrywordsandduration, andtranscribeis nowoptional. Supply neither and the handler says so, naming both ways out.
kind—"heading","paragraph","list"or"quote"— from the tag it was written as. The client sends{ content, kind }, the handler passes it tospeechand tohash, andsegments[].kindreports it.openaiSpeechtakesinstructionsas afunction of the kind;
elevenlabsSpeechtakesvoiceSettingsthe same way.FetchAlignmentis now(text, { kind }) => Promise<Alignment>andhashisnow
(text, kind) => string. An adapter written as(text) => …still fits;a
hashyou wrote yourself keeps working and simply ignores the kind.Cache note: the default hash covers the kind as well as the text, so
existing entries are missed once and regenerated.
e13bf4e: Options written on a
<SpokenText>inside a<SpokenTextProvider>are honouredrather than ignored. The provider's own options are the defaults, so a
debounceMscan sit next to the text it is about.