Releases: RevealUIStudio/revealui
Release list
create-revealui@0.5.15
Patch Changes
- Updated dependencies [a064e08]
- @revealui/cli@0.9.2
@revealui/utils@0.3.6
Patch Changes
- Correct the README code samples in these packages so they match the real exported API (for example core's
revealuiimport becomesgetRevealUI, and services'stripeClientbecomesgetStripe/protectedStripe). Documentation only, no source or runtime changes; security's edit is a test corpus README.
@revealui/tokens@0.3.0
Minor Changes
-
5924269: Re-author the Button family as owned RevealUI components (component sovereignty PR-2).
Breaking (0.x minor): the Button API is now two orthogonal axes styled entirely from
--rvui-*design tokens:variant= semantic colour intent:'brand' | 'neutral' | 'success' | 'warning' | 'danger'(default'brand')appearance= visual weight:'solid' | 'outline' | 'ghost' | 'link'(default'solid')
The old flat
variantvalues are replaced. Migration:variant="default"/variant="primary"->variant="brand"variant="secondary"->variant="neutral"variant="destructive"->variant="danger"variant="outline"->appearance="outline" variant="neutral"variant="ghost"->appearance="ghost" variant="neutral"variant="link"->appearance="link"
size,glow,shine,isLoading,asChildare unchanged.LinkButtonfollows the same two-axis API.Export rename: the owned button reclaims the bare
Buttonexport.ButtonCVAremains as a deprecated alias for one minor; migrate imports toButton. It will be removed in the next minor.Retired: the Catalyst-derived
color/outline/plainpalette button (button-headless.tsx) is removed. Its internal Dropdown-trigger role is nowDropdownTriggerButton(dropdown-trigger.tsx, internal).TouchTargetnow lives in_button-shared.Behaviour: states use native CSS pseudo-classes; the focus ring is the
--ringtoken (the fixedoutline-blue-500is gone); interaction motion honoursprefers-reduced-motionat the CSS level;isLoadingnow also setsdata-loading.@revealui/tokens: adds
--rvui-text-on-success,--rvui-text-on-warning, and--rvui-success-strongfor solid success/warning button ink at verified WCAG AA contrast.
@revealui/sync@0.3.17
@revealui/setup@0.7.0
Minor Changes
-
16b235f: Promote the audit-row signer composition into
@revealui/securityand add key provisioning + a public-key endpoint (GAP-355 Stage 3).@revealui/securitygainscreateAuditRowSignerFromEnv,resolveAuditPublicKey, andderiveAuditKid(server entry) — the single env→signer→kid derivation shared by every audit writer, re-exported through@revealui/core/security.@revealui/setupgenerates a per-deployment Ed25519 audit-signing keypair (generateAuditSigningKeypair), writes the private key to the env output, and prints the kid + public key for offline receipt verification. Adds a@revealui/securitydependency.- A new unauthenticated
GET /api/audit/public-keypublishes the SPKI public key + kid so a customer can verify an audit-log record offline, without our secret. Unsigned deployments answer an honest 404.
Patch Changes
@revealui/services@0.7.7
Patch Changes
- Updated dependencies [16b235f]
- Updated dependencies [11ab999]
- Updated dependencies [83846a2]
- Updated dependencies [b029d2d]
- Updated dependencies [c3c1e8f]
- Updated dependencies [1385cd6]
- Updated dependencies [077d3c4]
- Updated dependencies [578214d]
- Updated dependencies [1a49590]
- Updated dependencies [6a58057]
- @revealui/core@0.12.0
- @revealui/db@0.9.0
- @revealui/contracts@0.8.0
- @revealui/config@0.6.0
@revealui/security@0.5.0
Minor Changes
-
16b235f: Promote the audit-row signer composition into
@revealui/securityand add key provisioning + a public-key endpoint (GAP-355 Stage 3).@revealui/securitygainscreateAuditRowSignerFromEnv,resolveAuditPublicKey, andderiveAuditKid(server entry) — the single env→signer→kid derivation shared by every audit writer, re-exported through@revealui/core/security.@revealui/setupgenerates a per-deployment Ed25519 audit-signing keypair (generateAuditSigningKeypair), writes the private key to the env output, and prints the kid + public key for offline receipt verification. Adds a@revealui/securitydependency.- A new unauthenticated
GET /api/audit/public-keypublishes the SPKI public key + kid so a customer can verify an audit-log record offline, without our secret. Unsigned deployments answer an honest 404.
-
578214d: Sign every audit-log row at the write door with per-row Ed25519, and retire the legacy HMAC path (GAP-355 Stage 3 PR-2).
@revealui/db (signer slot):
DrizzleAuditStorenow takes an optional injectedAuditRowSignerFn. When supplied, eachappend/appendBatchfetches the row'sseqfrom the sequence up front (pg_get_serial_sequence), signs over the full row including thatseq, and inserts an explicitseq+signature; when absent, the DB assignsseqandsignaturestays NULL (dev/test). The package stays crypto-free and security-package-free — the real signer is composed and injected by the consumer. New exports:AuditRowSignable,AuditRowSignerFn. Thesignature/previousSignaturepass-through fields are removed fromAuditEntry(the store owns signing now;previous_signatureis never written).@revealui/security (breaking, 0.x minor): the exported-but-unwired HMAC helpers
signAuditEntry/verifyAuditEntry(and the internalSignableFields) are removed. They signed a non-canonical 5-field subset and cannot back an offline-verifiable receipt. UseEd25519AuditRowSigner+verifyAuditRow(RFC 8785 canonicalization over the full row) instead.@revealui/config:
REVEALUI_AUDIT_HMAC_SECRETis removed from the env schema andRevealConfig.auditHmacSecretis dropped. Replaced byREVEALUI_AUDIT_SIGNING_KEY(Ed25519 PKCS#8 PEM) + optionalREVEALUI_AUDIT_SIGNING_KID. A signing deployment refuses to boot without a valid signing key; there is noREVEALUI_SECRETfallback. -
b550aa2: audit signing library (GAP-355 Stage 3 PR-1): add
canonicalizeJcs(RFC 8785 JSON canonicalization, promoted + hardened from the mcp-audit canonicalizer) to the client-safe barrel, and the per-row Ed25519 signer + verifier to@revealui/security/server—Ed25519AuditRowSigner(implements theAuditRowSignerinjection interface, emitsv1.ed25519.<kid>.<base64url>),verifyEd25519AuditSignature/verifyAuditRow,auditSignableBytes(the shared sign-and-verify byte builder over the integrity-bearing columns incl.sequence/tenant), andclassifyAuditSignature. Library only — no caller wired yet (Stage 3 PR-2 injects it at the DrizzleAuditStore door and retires the legacy HMAC).
Patch Changes
@revealui/router@0.3.11
Patch Changes
- Updated dependencies
- @revealui/utils@0.3.6
@revealui/presentation@0.12.0
Minor Changes
-
5924269: Re-author the Button family as owned RevealUI components (component sovereignty PR-2).
Breaking (0.x minor): the Button API is now two orthogonal axes styled entirely from
--rvui-*design tokens:variant= semantic colour intent:'brand' | 'neutral' | 'success' | 'warning' | 'danger'(default'brand')appearance= visual weight:'solid' | 'outline' | 'ghost' | 'link'(default'solid')
The old flat
variantvalues are replaced. Migration:variant="default"/variant="primary"->variant="brand"variant="secondary"->variant="neutral"variant="destructive"->variant="danger"variant="outline"->appearance="outline" variant="neutral"variant="ghost"->appearance="ghost" variant="neutral"variant="link"->appearance="link"
size,glow,shine,isLoading,asChildare unchanged.LinkButtonfollows the same two-axis API.Export rename: the owned button reclaims the bare
Buttonexport.ButtonCVAremains as a deprecated alias for one minor; migrate imports toButton. It will be removed in the next minor.Retired: the Catalyst-derived
color/outline/plainpalette button (button-headless.tsx) is removed. Its internal Dropdown-trigger role is nowDropdownTriggerButton(dropdown-trigger.tsx, internal).TouchTargetnow lives in_button-shared.Behaviour: states use native CSS pseudo-classes; the focus ring is the
--ringtoken (the fixedoutline-blue-500is gone); interaction motion honoursprefers-reduced-motionat the CSS level;isLoadingnow also setsdata-loading.@revealui/tokens: adds
--rvui-text-on-success,--rvui-text-on-warning, and--rvui-success-strongfor solid success/warning button ink at verified WCAG AA contrast. -
7c6432f: Export the icon set and provider/social brand marks from the main entry (previously
/server-only), and addXIcon(the X, formerly Twitter, mark). Apps can now composeGitHubIcon,XIcon,LinkedInIcon,IconMenu,IconClose, and the rest of the icon set instead of handrolling inline SVGs. -
1a49590: Add marketing-shaped section blocks to the canonical block union and a shared, annotatable block renderer.
@revealui/contracts — three new section-level block types on the canonical
BlockSchemaunion (pages.blocks), each with acreate*Blockfactory:hero—{ eyebrow?, title, subtitle?, support?, links? }ctaSection—{ heading, body?, links?, snippet? }(snippet is display-only CLI text)section—{ eyebrow?, heading, body?, items? }, the generic repeater covering FAQ / demo-beats / cards
Text fields are plain strings in P1 (no Lexical serialized state). A shared
MarketingLinkSchema({ label, href, variant? }) backs the hero and cta link arrays.@revealui/presentation — a new
RenderBlocksrenderer (server-safe, render-only) that validates each block againstBlockSchemaand dispatches to per-type components (HeroBlock,CtaSectionBlock,SectionBlock, plus thin renderers fortext/heading/quote/list/divider/spacer). Unsupported or invalid blocks render nothing with a dev-only diagnostic.Edit-mode annotation contract: when
editableand adocIdare provided, every text-bearing element carriesdata-rvui-docanddata-rvui-field(a dot-path into the block array, e.g.blocks.3.title,blocks.3.items.2.body). No data attributes are emitted otherwise. -
e788ba3: Add an optional
animate="print"prop toReceiptCard. When set, eachAuditLinerow and the integrity footer play a one-shot CSS entrance stagger (the receipt "prints" itself line by line), and the integrity footer's seal pulses once after its entrance. Pure CSS, no JS timeline. Disabled underprefers-reduced-motion: reduce. Default is unchanged (noanimateprop = no visual change).
Patch Changes
@revealui/mcp@0.8.1
Patch Changes
- c3c1e8f: fix the Streamable HTTP bridge so a governed mount works behind body-consuming middleware.
createNodeStreamableHttpHandlernow accepts an optional pre-parsed body (third argument); a web-framework bridge that has already readRequest.bodypasses it through instead of re-reading the raw Node stream, which arrives empty when upstream middleware has claimed it. Direct Node-server callers are unchanged (the raw-read path still runs when no body is passed). - Updated dependencies [16b235f]
- Updated dependencies [11ab999]
- Updated dependencies [83846a2]
- Updated dependencies [b029d2d]
- Updated dependencies [c3c1e8f]
- Updated dependencies [1385cd6]
- Updated dependencies [077d3c4]
- Updated dependencies [578214d]
- Updated dependencies [b550aa2]
- Updated dependencies [1a49590]
- Updated dependencies [6a58057]
- @revealui/security@0.5.0
- @revealui/setup@0.7.0
- @revealui/core@0.12.0
- @revealui/db@0.9.0
- @revealui/contracts@0.8.0
- @revealui/config@0.6.0
- @revealui/knowledge-graph@0.1.3