Textarea
<gok-textarea>
The multi-line sibling of the input — same frame and reserved message line, plus auto-grow and an optional character count. For prose: a support ticket, a dispute note, a claim description.
<gok-textarea label="Message" placeholder="Tell us what happened…"></gok-textarea>
<gok-textarea label="Dispute note" auto-grow max-rows="8" rows="2"></gok-textarea>
<gok-textarea label="Claim description" show-count maxlength="280"></gok-textarea>
Money
<gok-money>
A currency amount field whose canonical value is always integer minor units — no float ever touches a stored amount. A leading symbol affix, tabular figures, group-on-blur, decimals derived from the currency (2 for USD/EUR, 0 for JPY), and reward-early/punish-late bounds.
<gok-money label="Amount" currency="USD" value="123450"></gok-money>
<!-- value is integer minor units (cents): 123450 → $1,234.50 -->
<gok-money label="Yen" currency="JPY" value="5000"></gok-money>
OTP
<gok-otp>
A one-time-code input — a row of single-character boxes for a 2FA / verification code. Type-to-advance, backspace-to-retreat, arrow nav, and paste-to-fill the whole code. The canonical value is the joined string; the first box offers the platform SMS code.
<gok-otp label="Verification code" length="6"></gok-otp>
<!-- value is the joined string; "complete" fires at value.length === length -->
<gok-otp label="Coupon" type="alphanumeric"></gok-otp>
Date picker
<gok-date-picker>
A date field pairing unambiguous ISO text entry (YYYY-MM-DD, in and out) with a calendar popover for pointing. The canonical value is always an ISO string; min/max bound it, with out-of-range days disabled and a full APG date-grid keyboard model.
<gok-date-picker label="Statement date" value="2026-06-15"></gok-date-picker>
<gok-date-picker label="Within June" value="2026-06-15"
min="2026-06-01" max="2026-06-30"></gok-date-picker>
Date range
<gok-date-range>
The two-field sibling of the date picker — a start + end ISO pair with one calendar that highlights the span between them. Two-click selection (start, then end; an earlier pick re-anchors the start), shared min/max, the same APG date-grid keyboard model. Form-associated (both bounds under name).
<gok-date-range label="Statement period"
value-start="2026-06-08" value-end="2026-06-21"></gok-date-range>
Combobox
<gok-combobox>
A text field that filters a list and binds the chosen value to a form — the WAI-ARIA combobox pattern, where focus stays in the input and the highlighted option tracks aria-activedescendant. Data-driven via the options property; select-only (free text reverts on dismiss).
<gok-combobox label="Settlement currency"></gok-combobox>
<script>
combobox.options = [{ value: 'usd', label: 'US Dollar (USD)' }, …];
</script>
Multi-select
<gok-multi-select>
The multi-value sibling of the combobox — pick several options from a filtered list, each shown as a removable chip. Same data-driven options contract and combobox machinery, but choosing toggles membership and keeps the list open; Backspace on an empty query drops the last chip. Form-associated (each value under name).
<gok-multi-select label="Account tags"></gok-multi-select>
<script>
multiSelect.options = [{ value: 'savings', label: 'Savings' }, …];
multiSelect.values = ['savings'];
</script>
Slider
<gok-slider>
A token-themed range control — one thumb, or two for a range band. Flat track, accent fill, hairline-framed thumb; full APG keyboard model (arrows, Page, Home/End) and pointer drag. Form-associated.
<gok-slider label="Volume" show-value value="40"></gok-slider>
<gok-slider label="Price range" range value-start="20" value-end="70"></gok-slider>
File upload
<gok-file-upload>
A drop-or-browse field with a reviewable file list (name, size, optional per-file progress, remove). The selection + validation surface — it emits the chosen files; the consumer uploads and feeds progress back. Validates accept + max-size; form-associated.
<gok-file-upload label="Statement" accept=".pdf"></gok-file-upload>
<gok-file-upload label="Evidence" multiple accept="image/*,.pdf"></gok-file-upload>
Checkbox
<gok-checkbox>
A binary choice; checked fills the box forest green. Also supports an indeterminate and a disabled state.
Checked
Unchecked
Indeterminate
Disabled
<gok-checkbox checked>Checked</gok-checkbox>
<gok-checkbox>Unchecked</gok-checkbox>
<gok-checkbox indeterminate>Indeterminate</gok-checkbox>
<gok-checkbox disabled>Disabled</gok-checkbox>
Radio
<gok-radio-group>
One of many. The group is a single Tab stop; arrow keys move and select. Set orientation="horizontal" for a row.
All activity
Only @mentions
Nothing
<gok-radio-group label="Notifications" name="notify" value="all">
<gok-radio value="all">All activity</gok-radio>
<gok-radio value="mentions">Only @mentions</gok-radio>
<gok-radio value="none">Nothing</gok-radio>
</gok-radio-group>
Switch
<gok-switch>
For a setting that takes effect immediately. On fills the track forest green and slides the thumb; the position carries the state beyond colour.
Wi-Fi
Bluetooth
Airplane mode
<gok-switch checked>Wi-Fi</gok-switch>
<gok-switch>Bluetooth</gok-switch>
<gok-switch disabled>Airplane mode</gok-switch>
Select
<gok-select>
A custom single-select in the input family that opens an anchored listbox. It submits, validates, and resets in a form. Put gok-options in the default slot.
Free
Pro
Team
Custom (contact us)
<gok-select label="Plan" name="plan" value="pro" helper="Billed monthly.">
<gok-option value="free">Free</gok-option>
<gok-option value="pro">Pro</gok-option>
<gok-option value="team">Team</gok-option>
</gok-select>
Segmented
<gok-segmented>
A compact one-of-many switch for a view or mode — segments merge on one hairline rule, the selected one carrying the accent.
List
Board
Calendar
<gok-segmented label="View" value="list">
<gok-segmented-item value="list">List</gok-segmented-item>
<gok-segmented-item value="board">Board</gok-segmented-item>
<gok-segmented-item value="calendar">Calendar</gok-segmented-item>
</gok-segmented>
Theme switch
<gok-theme-switch>
A dedicated Light / Dark switch — the studio top-bar pill. It owns theming: applies <html data-theme>, persists to localStorage, and stays in sync across tabs. The one live in the top bar is the same element. (Flip it to re-theme this whole page.)
<gok-theme-switch label="Theme"></gok-theme-switch>