Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Approval Workflow Comments Block for Ark UI

One proposal passes three owned gates in order: approve it, send it back with a required note, or hand the gate to someone else, with every decision logged with a time.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Route a change through the people who have to agree to it, with this approval gates comment block for React with Ark UI. A compact header names the change and the frame splits in two from medium widths: a list of three numbered gates (Technical review, Security review, Executive sign-off), each with its owner and where the proposal stands, beside the proposal itself. At the open gate the owner can Approve with the one primary Shine Button, Request changes with a required note in a Textarea (an empty note is refused in words under the field), or pick one of two people in a Native Select and Hand over the gate. Approving moves the proposal to the next gate, requesting changes sends it back with the author (the button then reads Resubmit) and Start over resets the demo. Every decision is written into a log with a fixed time in a held scroll region, and a polite status line names each change. It is built from Shine Button, Button, Textarea, Native Select, Field, Badge, Avatar and Guides, with a CSS entrance only. For change management, policy sign-off and any review that needs more than one yes.

FAQ

How do I set my own gates and owners?

Edit GATES and PEOPLE. A gate has an id, a name, an owner (a person's id) and two alternates the owner may hand it to; the order of the list is the order of the gates, and the status words and the log are all worked out from it. PROPOSAL holds the title and text, and AUTHOR is the person who resubmits. Names are made up here.

What does each button do?

Approve advances the proposal one gate and clears the note. Request changes needs a note, sets the proposal back with the author and logs the note; until the author presses Resubmit the other buttons stay in place but refuse, and say so. Hand over changes the gate's owner and logs who gave it to whom. Once the third gate is approved the primary reads Approved and the rest refuse.

What stays local, and how do I make it real?

The stage, the owners and the log live in the page, and the times in the log are a fixed step after a typed moment, not the clock. Nothing is sent, so nobody is told. To wire it, send each decision from the three handlers, check on the server that the person deciding owns the open gate, store the decision with its real timestamp and return the new stage; the page then shows what the server answered.

Is it accessible?

The gates are an ordered list and the open one carries aria-current set to step; state is written in words (Approved, Waiting for a decision, Back with the author), never by colour alone. The note field has a visible label and its problem is tied to it with aria-describedby. Disabled-looking buttons use aria-disabled so they stay focusable and a press explains itself, and the status line is read out politely.

How does it look on a phone?

The gates stack above the proposal as a short vertical list, the buttons wrap, and the log keeps its height with its own scroll. The select and Hand over button sit on one row when there is room and wrap otherwise.

How is this different from the reviews approval block?

That block routes a single review through checks. This one is about owners: each gate has a named person, a gate can be handed to someone else, and sending the proposal back needs a note that lands in the log.