Skip to content

Releases

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 12:51
7258fa1

Clear all in the Island. Nothing is removed or changed in behaviour; the new texts, prop and close
reason are additive (see API).

Features

  • With two or more notifications, the open Island ends its dots row with a Clear all button. The
    first press arms it: it takes the error tint and reads labels.clearAllConfirm(count) ("Clear 12"),
    spoken once through a status. A second press within 3 seconds closes every notification with the
    close reason 'clear-button' and acknowledges the missed count in the same commit, so nothing is
    left; focus returns to where it was before the Island. Waiting, leaving the button or collapsing the
    Island disarms it, and one double click never counts as both presses. Like clear(), it does not
    cancel tracked operations.
  • Missed notifications now take a row of their own under the dots, which stay centred.

API

  • New Toaster prop clearAll (default true); false hides the button.
  • New close reason 'clear-button' in CloseReason. A switch over every reason now needs it;
    clear() keeps 'clear' and still leaves the missed count to acknowledgeOverflow().
  • New texts labels.clearAll and labels.clearAllConfirm. An object typed as the full
    CloudletLabels now needs them; TypeScript points them out.
  • New classNames part clear (button.cloudlet-clear, data-armed after the first press).

v1.1.2

Choose a tag to compare

@github-actions github-actions released this 31 Oct 23:14
d630811

The package's code, CSS and types are the same as in 1.1.0 and 1.1.1. The README on npm opens with
the cloud wordmark from cloudlet.dev.

Documentation

  • The README starts with the Cloudlet wordmark written in clouds, linking to the website.

v1.1.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 16:51
af61ae2

The package's code, CSS and types are the same as in 1.1.0. This is the first release published from
GitHub Actions through npm Trusted Publishing, with a provenance attestation that links the archive
to its commit and workflow run.

Documentation

  • The README on npm shows the version, first-load size, CI, types and license badges, lists the
    Forms and Content Security Policy guides, and says how to contribute and how to report a
    vulnerability privately.

v1.1.0

Choose a tag to compare

@Meerzus Meerzus released this 31 Oct 12:42
2cc5040

Forms in the Island and a badge that passes text contrast. Nothing is removed or changed in
behaviour; the new texts and type parameters are additive (see API).

Features

  • Forms in the Island. A third primary action, { kind: 'form', label, fields, run, validate?, errorMessage? },
    puts one to three text fields ('text' or 'textarea') in the open Island beside a round send button.
    On send Cloudlet checks required, then maxLength, then your validate, shows messages under the
    fields, and runs run({ values }) with command semantics: pending, close on success, a message and
    another try on failure. TypeScript takes values' keys from the field names. Guide:
    Forms.
  • Drafts. Typed text stays with its notification across collapsing, swiping and remounting. While a form
    holds unsent text its time stands still (pause reason 'draft'), a press outside does not collapse
    the Island, an auto-opening notification waits in the stack, and the pill's name adds labels.draft.
    NotificationSnapshot.draft reports it.

API

  • New types FormAction, FormField, FormFieldKind, FormInputMode, FormValues, FormContext and
    FormValidation; PrimaryAction includes FormAction. show and update take the field names as a
    type parameter, inferred from the call.
  • New texts: labels.draft, messages.fieldRequired and messages.fieldTooLong. An object typed as the
    full CloudletLabels or FallbackMessages now needs them; TypeScript points them out.
  • New CSS tokens --cloudlet-field-background, --cloudlet-field-border, --cloudlet-placeholder and
    classNames parts form, field, field-error.

Fixes

  • The badge's disc is a deeper red (--cloudlet-badge #ff3b30 → #d70015): its white number now
    measures 5.38:1 instead of 3.55:1 and passes the 4.5:1 text contrast.

v1.0.0

Choose a tag to compare

@Meerzus Meerzus released this 31 Oct 12:42
7eeeb65

The first stable release, published to npm as latest (npm install @cloudlet/toast). The API is the
one of 1.0.0-rc.3 plus one diagnostic code; it follows semantic versioning from here. After the release the
remaining manual checks passed on this version: VoiceOver on iOS, NVDA, TalkBack, physical phones,
Windows High Contrast and the minimum browser versions (the documentation's Accessibility page).

Performance

  • Toaster loads its renderer (host, motion, cards, gestures, announcer) as a separate chunk through
    import(), once per page, on the client after mount. The JavaScript an app pays for at start drops
    from 27953 to 8602 B min+gzip; the renderer chunk follows right after. Notifications shown meanwhile
    wait in the controller. No React.lazy or Suspense is needed in the app, and server rendering is
    unchanged: Toaster renders nothing on the server.

API

  • New diagnostic renderer-load-error: the renderer chunk failed to load (offline, for example). The
    notifications wait in the controller, and the next Toaster mount loads the chunk again.

Fixes

  • The Island's background no longer counts as layout shift while it morphs at the bottom edge: it is
    placed with a transform instead of bottom: 0. Pixels are unchanged.
  • On a slow first frame, the queue aggregate ("2 notifications queued") was spoken alone before the
    newest record's title. The announcer now waits until the pill is readable and speaks the title first
    and the queue after it, as on fast devices.

shadcn item

  • The wrapper takes a controller that may still be null (ReactCloudletController | null), so an app
    can render it before its client owner has created the controller.