UNPKG

@thebase/ui

Version:

CDN-installable Owl and Bootstrap 5 UI component library.

160 lines (136 loc) • 5.41 kB
# Field Combine labels, controls, and help text to compose accessible form fields and grouped inputs. ## Pure Owl component ```js import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, } from "@thebase/ui"; ``` ```base-ui <form class="d-flex flex-column gap-3" style="max-width: 32rem; width: 100%;"> <FieldSet> <FieldLegend>Payment Method</FieldLegend> <FieldDescription>All transactions are secure and encrypted</FieldDescription> <FieldGroup className="'mt-3 gap-3 d-flex flex-column'"> <Field> <FieldLabel for="'card-name'">Name on Card</FieldLabel> <Input id="'card-name'" value="'Evil Rabbit'"/> </Field> <Field> <FieldLabel for="'card-number'">Card Number</FieldLabel> <Input id="'card-number'" value="'1234 5678 9012 3456'"/> <FieldDescription>Enter your 16-digit card number</FieldDescription> </Field> <div class="row g-3"> <div class="col-4"> <Field> <FieldLabel for="'expiry-month'">Month</FieldLabel> <NativeSelect id="'expiry-month'" ariaLabel="'Month'"> <option>MM</option> </NativeSelect> </Field> </div> <div class="col-4"> <Field> <FieldLabel for="'expiry-year'">Year</FieldLabel> <NativeSelect id="'expiry-year'" ariaLabel="'Year'"> <option>YYYY</option> </NativeSelect> </Field> </div> <div class="col-4"> <Field> <FieldLabel for="'card-cvv'">CVV</FieldLabel> <Input id="'card-cvv'" value="'123'"/> </Field> </div> </div> <FieldSeparator/> <FieldSet> <FieldLegend>Billing Address</FieldLegend> <FieldDescription>The billing address associated with your payment method</FieldDescription> <Field orientation="'horizontal'" className="'mt-3'"> <Checkbox id="'same-address'" checked="true"/> <FieldLabel for="'same-address'">Same as shipping address</FieldLabel> </Field> </FieldSet> <Field> <FieldLabel for="'comments'">Comments</FieldLabel> <Textarea id="'comments'" placeholder="'Add any additional comments'" rows="3"/> </Field> </FieldGroup> </FieldSet> <div class="d-flex gap-2"> <Button type="'submit'">Submit</Button> <Button variant="'outline'" type="'button'">Cancel</Button> </div> </form> ``` ## Static component ```base-ui <form style="width: 560px; max-width: 100%; display: flex; flex-direction: column; gap: 24px;"> <div b-ui="field" b-att-slot="field-set"> <div b-field-legend>Payment Method</div> <p b-field-description>All transactions are secure and encrypted</p> <div b-field-group style="margin-top: 24px;"> <div b-ui="field"> <label b-field-label for="card-name">Name on Card</label> <input b-ui="input" id="card-name" value="Evil Rabbit"> </div> <div b-ui="field"> <label b-field-label for="card-number">Card Number</label> <input b-ui="input" id="card-number" value="1234 5678 9012 3456"> <p b-field-description>Enter your 16-digit card number</p> </div> <div style="display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px;"> <div b-ui="field"> <label b-field-label for="expiry-month">Month</label> <select b-ui="native-select" id="expiry-month" aria-label="Month"> <option>MM</option> </select> </div> <div b-ui="field"> <label b-field-label for="expiry-year">Year</label> <select b-ui="native-select" id="expiry-year" aria-label="Year"> <option>YYYY</option> </select> </div> <div b-ui="field"> <label b-field-label for="card-cvv">CVV</label> <input b-ui="input" id="card-cvv" value="123"> </div> </div> <div b-field-separator></div> <div b-ui="field" b-att-slot="field-set"> <div b-field-legend>Billing Address</div> <p b-field-description>The billing address associated with your payment method</p> <div b-ui="field" b-att-orientation="horizontal" style="margin-top: 18px;"> <input b-ui="checkbox" id="same-address" type="checkbox" checked> <label b-field-label for="same-address">Same as shipping address</label> </div> </div> <div b-ui="field"> <label b-field-label for="comments">Comments</label> <textarea b-ui="textarea" id="comments" placeholder="Add any additional comments" rows="3"></textarea> </div> </div> </div> <div style="display: flex; gap: 8px;"> <button b-ui="button" type="submit">Submit</button> <button b-ui="button" b-att-variant="outline" type="button">Cancel</button> </div> </form> ``` ## Static API details Use `b-ui="field"` for a field wrapper. Add `b-att-slot="field-set"` for `fieldset` roots, `b-field-group`, `b-field-label`, `b-field-description`, `b-field-separator`, and `b-field-error` for compound parts. ## Accessibility `Field` renders `role="group"`. Connect labels with `for`/`id`, and place `FieldError` near the invalid control so `aria-describedby` can be wired by the static adapter.