Types and settings
Runtime types, settings, events, and functions.
? indicates an optional field; readonly, read-only. .d.ts declarations · JSON catalog.
normalizeLabelTextWrap
@webrad/runtime · function
export function normalizeLabelTextWrap(value: unknown): WebLabelTextWrap;projectLabelTextWrap
@webrad/runtime · function
export function projectLabelTextWrap(value: WebLabelTextWrap): {
whiteSpace: 'nowrap' | 'pre-wrap';
overflowWrap: 'normal' | 'anywhere';
wordBreak: 'normal' | 'break-all';
};Sucess
@webrad/runtime · variable
export const Sucess: 'Sucess';Alert
@webrad/runtime · variable
export const Alert: 'Alert';Danger
@webrad/runtime · variable
export const Danger: 'Danger';Notifier
@webrad/runtime · variable
export const Notifier: 'Notifier';WebToastState
@webrad/runtime · type
export type WebToastState = typeof Sucess | typeof Alert | typeof Danger | typeof Notifier;WebToastPosition
@webrad/runtime · type
export type WebToastPosition = 'top-left' | 'top-center' | 'top-right' | 'middle-left' | 'middle-center' | 'middle-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';WebToastEventDetail
@webrad/runtime · interface
export interface WebToastEventDetail {
readonly message: string;
readonly state: WebToastState;
}WebToast
@webrad/runtime · class
export class WebToast extends WebComponent {
duration: number;
position: WebToastPosition;
sucessIcon: WebButtonIcon | '';
alertIcon: WebButtonIcon | '';
dangerIcon: WebButtonIcon | '';
notifierIcon: WebButtonIcon | '';
Success(message: string): void;
Alert(message: string): void;
Danger(message: string): void;
Notifier(message: string): void;
Clear(): void;
set onShow(handler: WebComponentEventHandler<this> | null);
set onClose(handler: WebComponentEventHandler<this> | null);
}LucideIconName
@webrad/runtime · type
export type LucideIconName = 'a-arrow-down' | 'a-arrow-up' | 'a-large-small' | 'accessibility' | 'activity' | 'ad' | 'air-vent' | 'airplay' | 'alarm-clock-check' | 'alarm-clock-minus' | 'alarm-clock-off' | 'alarm-clock-plus' | 'alarm-clock' | 'alarm-smoke' | 'align-center-horizontal' | 'align-center-vertical' | 'align-end-horizontal' | 'align-end-vertical' | 'align-horizontal-distribute-center' | 'align-horizontal-distribute-end' | 'align-horizontal-distribute-start' | 'align-horizontal-justify-center' | 'align-horizontal-justify-end' | 'align-horizontal-justify-start' | 'align-horizontal-space-around' | 'align-horizontal-space-between' | 'align-start-horizontal' | 'align-start-vertical' | 'align-vertical-distribute-center' | 'align-vertical-distribute-end' | 'align-vertical-distribute-start' | 'align-vertical-justify-center' | 'align-vertical-justify-end' | 'align-vertical-justify-start' | 'align-vertical-space-around' | 'align-vertical-space-between' | 'ambulance' | 'ampersand' | 'ampersands' | 'amphora' | 'anchor' | 'angle' | 'antenna' | 'anvil' | 'aperture' | 'app-window-mac' | 'app-window' | 'apple' | 'archive-restore' | 'archive-x' | 'archive' | 'armchair' | 'armenian-dram' | 'arrow-big-down-dash' | 'arrow-big-down' | 'arrow-big-left-dash' | 'arrow-big-left' | 'arrow-big-right-dash' | 'arrow-big-right' | 'arrow-big-up-dash' | 'arrow-big-up' | 'arrow-down-0-1' | 'arrow-down-1-0' | 'arrow-down-a-z' | 'arrow-down-from-line' | 'arrow-down-left' | 'arrow-down-narrow-wide' | 'arrow-down-right' | 'arrow-down-to-dot' | 'arrow-down-to-line' | 'arrow-down-up' | 'arrow-down-wide-narrow' | 'arrow-down-z-a' | 'arrow-down' | 'arrow-left-from-line' | 'arrow-left-right' | 'arrow-left-to-line' | 'arrow-left' | 'arrow-right-from-line' | 'arrow-right-left' | 'arrow-right-to-line' | 'arrow-right' | 'arrow-up-0-1' | 'arrow-up-1-0' | 'arrow-up-a-z' | 'arrow-up-down' | 'arrow-up-from-dot' | 'arrow-up-from-line' | 'arrow-up-left' | 'arrow-up-narrow-wide' | 'arrow-up-right' | 'arrow-up-to-line' | 'arrow-up-wide-narrow' | 'arrow-up-z-a' | 'arrow-up' | 'arrows-up-from-line' | 'asterisk' | 'astroid' | 'at-sign' | 'atom' | 'audio-lines-off' | 'audio-lines-x' | 'audio-lines' | 'audio-waveform' | 'avocado' | 'award' | 'axe' | 'axis-3d' | 'baby' | 'backpack' | 'bacon' | 'badge-alert' | 'badge-cent' | 'badge-check' | 'badge-dollar-sign' | 'badge-euro' | 'badge-indian-rupee' | 'badge-info' | 'badge-japanese-yen' | 'badge-minus' | 'badge-percent' | 'badge-plus' | 'badge-pound-sterling' | 'badge-question-mark' | 'badge-russian-ruble' | 'badge-swiss-franc' | 'badge-turkish-lira' | 'badge-x' | 'badge' | 'baggage-claim' | 'balloon' | 'ban' | 'banana' | 'bandage' | 'bangladeshi-taka' | 'banknote-arrow-down' | 'banknote-arrow-up' | 'banknote-check' | 'banknote-x' | 'banknote' | 'barcode' | 'barrel' | 'baseline' | 'bath' | 'battery-charging' | 'battery-full' | 'battery-low' | 'battery-medium' | 'battery-plus' | 'battery-warning' | 'battery' | 'beaker' | 'bean-off' | 'bean' | 'bed-double' | 'bed-single' | 'bed' | 'beef-off' | 'beef' | 'beer-off' | 'beer' | 'belarusian-ruble' | 'bell-check' | 'bell-dot' | 'bell-electric' | 'bell-minus' | 'bell-off' | 'bell-plus' | 'bell-ring' | 'bell' | 'between-horizontal-end' | 'between-horizontal-start' | 'between-vertical-end' | 'between-vertical-start' | 'biceps-flexed' | 'bike' | 'binary' | 'binoculars' | 'biohazard' | 'bird' | 'birdhouse' | 'bitcoin' | 'blend' | 'blender' | 'blinds' | 'blocks' | 'bluetooth-connected' | 'bluetooth-off' | 'bluetooth-searching' | 'bluetooth' | 'bold' | 'bolt' | 'bomb' | 'bone-fracture' | 'bone' | 'book-a' | 'book-alert' | 'book-audio' | 'book-bookmark' | 'book-check' | 'book-copy' | 'book-dashed' | 'book-down' | 'book-headphones' | 'book-heart' | 'book-image' | 'book-key' | 'book-lock' | 'book-minus' | 'book-open-check' | 'book-open-text' | 'book-open' | 'book-plus' | 'book-search' | 'book-text' | 'book-type' | 'book-up-2' | 'book-up' | 'book-user' | 'book-x' | 'book' | 'bookmark-check' | 'bookmark-minus' | 'bookmark-off' | 'bookmark-plus' | 'bookmark-x' | 'bookmark' | 'boom-box' | 'bot-message-square' | 'bot-off' | 'bot' | 'bottle-wine' | 'bow-arrow' | 'box' | 'boxes' | 'braces' | 'brackets' | 'brain-circuit' | 'brain-cog' | 'brain-off' | 'brain' | 'brick-wall-fire' | 'brick-wall-shield' | 'brick-wall' | 'bridge' | 'briefcase-business' | 'briefcase-conveyor-belt' | 'briefcase-medical' | 'briefcase-plus' | 'briefcase' | 'bring-to-front' | 'broccoli' | 'broom-sparkles' | 'broom' | 'brush-cleaning' | 'brush' | 'bubbles' | 'bug-off' | 'bug-play' | 'bug' | 'building-complex-plus' | 'building-complex' | 'building' | 'bus-front' | 'bus' | 'cable-car' | 'cable' | 'cake-slice' | 'cake' | 'calculator' | 'calendar-1' | 'calendar-arrow-down' | 'calendar-arrow-up' | 'calendar-check-2' | 'calendar-check' | 'calendar-chevrons-left' | 'calendar-chevrons-right' | 'calendar-clock' | 'calendar-cog' | 'calendar-days' | 'calendar-fold' | 'calendar-heart' | 'calendar-minus-2' | 'calendar-minus' | 'calendar-off' | 'calendar-plus-2' | 'calendar-plus' | 'calendar-range' | 'calendar-search' | 'calendar-sync' | 'calendar-x-2' | 'calendar-x' | 'calendar' | 'calendars' | 'camera-off' | 'camera' | 'can-soda' | 'can' | 'candy-cane' | 'candy-off' | 'candy' | 'cannabis-off' | 'cannabis' | 'captions-off' | 'captions' | 'car-battery' | 'car-front' | 'car-taxi-front' | 'car' | 'caravan' | 'card-sim' | 'carrot' | 'carton-off' | 'carton' | 'case-lower' | 'case-sensitive' | 'case-upper' | 'cassette-tape' | 'cast' | 'castle' | 'cat' | 'cctv-off' | 'cctv' | 'certificate' | 'chart-area' | 'chart-bar-big' | 'chart-bar-decreasing' | 'chart-bar-increasing' | 'chart-bar-stacked' | 'chart-bar' | 'chart-candlestick' | 'chart-column-big' | 'chart-column-decreasing' | 'chart-column-increasing' | 'chart-column-stacked' | 'chart-column' | 'chart-gantt' | 'chart-line' | 'chart-network' | 'chart-no-axes-column-decreasing' | 'chart-no-axes-column-increasing' | 'chart-no-axes-column' | 'chart-no-axes-combined' | 'chart-no-axes-gantt' | 'chart-pie' | 'chart-scatter' | 'chart-spline' | 'check-check' | 'check-line' | 'check' | 'chef-hat' | 'cherry' | 'chess-bishop' | 'chess-king' | 'chess-knight' | 'chess-pawn' | 'chess-queen' | 'chess-rook' | 'chevron-down' | 'chevron-first' | 'chevron-last' | 'chevron-left' | 'chevron-right' | 'chevron-up' | 'chevrons-down-up' | 'chevrons-down' | 'chevrons-left-right-ellipsis' | 'chevrons-left-right' | 'chevrons-left' | 'chevrons-right-left' | 'chevrons-right' | 'chevrons-up-down' | 'chevrons-up' | 'church' | 'cigarette-off' | 'cigarette' | 'circle-alert' | 'circle-arrow-down' | 'circle-arrow-left' | 'circle-arrow-out-down-left' | 'circle-arrow-out-down-right' | 'circle-arrow-out-up-left' | 'circle-arrow-out-up-right' | 'circle-arrow-right' | 'circle-arrow-up' | 'circle-check-big' | 'circle-check' | 'circle-chevron-down' | 'circle-chevron-left' | 'circle-chevron-right' | 'circle-chevron-up' | 'circle-chevrons-down' | 'circle-chevrons-left' | 'circle-chevrons-right' | 'circle-chevrons-up' | 'circle-dashed-check' | 'circle-dashed' | 'circle-divide' | 'circle-dollar-sign' | 'circle-dot-dashed' | 'circle-dot' | 'circle-ellipsis' | 'circle-equal' | 'circle-euro' | 'circle-fading-arrow-up' | 'circle-fading-play' | 'circle-fading-plus' | 'circle-gauge' | 'circle-minus' | 'circle-off' | 'circle-parking-off' | 'circle-parking' | 'circle-pause' | 'circle-percent' | 'circle-pile' | 'circle-play' | 'circle-plus' | 'circle-pound-sterling' | 'circle-power' | 'circle-question-mark' | 'circle-slash-2' | 'circle-slash' | 'circle-small' | 'circle-star' | 'circle-stop' | 'circle-user-round' | 'circle-user' | 'circle-x' | 'circle' | 'circuit-board' | 'citrus' | 'clapperboard' | 'clef-alto' | 'clef-bass' | 'clef-treble' | 'clipboard-check' | 'clipboard-clock' | 'clipboard-copy' | 'clipboard-list' | 'clipboard-minus' | 'clipboard-paste' | 'clipboard-pen-line' | 'clipboard-pen' | 'clipboard-plus' | 'clipboard-type' | 'clipboard-x' | 'clipboard' | 'clock-1' | 'clock-10' | 'clock-11' | 'clock-12' | 'clock-2' | 'clock-3' | 'clock-4' | 'clock-5' | 'clock-6' | 'clock-7' | 'clock-8' | 'clock-9' | 'clock-alert' | 'clock-arrow-down' | 'clock-arrow-left' | 'clock-arrow-right' | 'clock-arrow-up' | 'clock-check' | 'clock-fading' | 'clock-plus' | 'clock' | 'closed-caption' | 'cloud-alert' | 'cloud-backup' | 'cloud-check' | 'cloud-cog' | 'cloud-download' | 'cloud-drizzle' | 'cloud-fog' | 'cloud-hail' | 'cloud-lightning' | 'cloud-moon-rain' | 'cloud-moon' | 'cloud-off' | 'cloud-rain-wind' | 'cloud-rain' | 'cloud-snow' | 'cloud-sun-rain' | 'cloud-sun' | 'cloud-sync' | 'cloud-upload' | 'cloud' | 'cloudy' | 'clover' | 'club' | 'code-xml' | 'code' | 'coffee' | 'cog' | 'coins' | 'columns-2' | 'columns-3-cog' | 'columns-3' | 'columns-4' | 'combine' | 'command' | 'compass' | 'component' | 'computer' | 'concierge-bell' | 'cone' | 'construction' | 'contact-round' | 'contact' | 'container' | 'contrast' | 'cookie' | 'cooking-pot' | 'copy-check' | 'copy-minus' | 'copy-plus' | 'copy-slash' | 'copy-x' | 'copy' | 'copyleft' | 'copyright' | 'corner-down-left' | 'corner-down-right' | 'corner-left-down' | 'corner-left-up' | 'corner-right-down' | 'corner-right-up' | 'corner-up-left' | 'corner-up-right' | 'cpu-ai' | 'cpu' | 'creative-commons' | 'credit-card-check' | 'credit-card-minus' | 'credit-card-plus' | 'credit-card-reader' | 'credit-card-x' | 'credit-card' | 'croissant' | 'crop' | 'cross' | 'crosshair' | 'crown' | 'cuboid' | 'cup-soda' | 'cupcake' | 'currency' | 'cylinder' | 'dam' | 'database-arrow-down' | 'database-arrow-up' | 'database-backup' | 'database-check' | 'database-minus' | 'database-plus' | 'database-search' | 'database-x' | 'database-zap' | 'database' | 'decimals-arrow-left' | 'decimals-arrow-right' | 'delete' | 'dessert' | 'diameter' | 'diamond-minus' | 'diamond-percent' | 'diamond-plus' | 'diamond' | 'dice-1' | 'dice-2' | 'dice-3' | 'dice-4' | 'dice-5' | 'dice-6' | 'dices' | 'diff' | 'disc-2' | 'disc-3' | 'disc-album' | 'disc' | 'divide' | 'dna-off' | 'dna' | 'dock' | 'dog' | 'dollar-sign' | 'dome' | 'donut' | 'door-closed-cog' | 'door-closed-locked' | 'door-closed-package' | 'door-closed' | 'door-open' | 'door-stairwell' | 'dot' | 'download' | 'drafting-compass' | 'drama' | 'drill' | 'drone' | 'droplet-off' | 'droplet' | 'droplets' | 'drum' | 'drumstick' | 'dumbbell' | 'ear-off' | 'ear' | 'earth-lock' | 'earth' | 'eclipse' | 'egg-fried' | 'egg-off' | 'egg' | 'eighth-note' | 'eighth-notes' | 'eject' | 'ellipse' | 'ellipsis-vertical' | 'ellipsis' | 'engine' | 'equal-approximately-not' | 'equal-approximately' | 'equal-not' | 'equal' | 'eraser' | 'ethernet-port' | 'euro' | 'ev-charger' | 'expand' | 'external-link' | 'eye-closed' | 'eye-dashed' | 'eye-off' | 'eye' | 'face-angry' | 'face-expressionless' | 'face-grinning' | 'face-neutral' | 'face-slightly-frowning' | 'face-slightly-smiling-plus' | 'face-slightly-smiling' | 'factory' | 'fan' | 'fast-forward' | 'faucet' | 'feather' | 'fence' | 'ferris-wheel' | 'file-archive' | 'file-axis-3d' | 'file-badge' | 'file-box' | 'file-braces-corner' | 'file-braces' | 'file-chart-column-increasing' | 'file-chart-column' | 'file-chart-line' | 'file-chart-pie' | 'file-check-corner' | 'file-check' | 'file-clock' | 'file-code-corner' | 'file-code' | 'file-cog' | 'file-diff' | 'file-digit' | 'file-down' | 'file-exclamation-point' | 'file-headphone' | 'file-heart' | 'file-image' | 'file-input' | 'file-key' | 'file-lock' | 'file-minus-corner' | 'file-minus' | 'file-music' | 'file-output' | 'file-pen-line' | 'file-pen' | 'file-play' | 'file-plus-corner' | 'file-plus' | 'file-question-mark' | 'file-scan' | 'file-search-corner' | 'file-search' | 'file-signal' | 'file-sliders' | 'file-spreadsheet' | 'file-stack' | 'file-symlink' | 'file-terminal' | 'file-text' | 'file-type-corner' | 'file-type' | 'file-up' | 'file-user' | 'file-video-camera' | 'file-volume' | 'file-x-corner' | 'file-x' | 'file' | 'files' | 'film' | 'fingerprint-pattern' | 'fire-extinguisher' | 'fish-off' | 'fish-symbol' | 'fish' | 'fishing-hook' | 'fishing-rod' | 'flag-off' | 'flag-triangle-left' | 'flag-triangle-right' | 'flag' | 'flame-kindling' | 'flame' | 'flashlight-off' | 'flashlight' | 'flask-conical-off' | 'flask-conical' | 'flask-round' | 'flower-2' | 'flower' | 'focus' | 'fold-horizontal' | 'fold-vertical' | 'folder-archive' | 'folder-bookmark' | 'folder-check' | 'folder-clock' | 'folder-closed' | 'folder-code' | 'folder-cog' | 'folder-dot' | 'folder-down' | 'folder-git-2' | 'folder-git' | 'folder-heart' | 'folder-input' | 'folder-kanban' | 'folder-key' | 'folder-lock' | 'folder-minus' | 'folder-open-dot' | 'folder-open' | 'folder-output' | 'folder-pen' | 'folder-plus' | 'folder-root' | 'folder-search-2' | 'folder-search' | 'folder-symlink' | 'folder-sync' | 'folder-tree' | 'folder-up' | 'folder-user' | 'folder-users' | 'folder-x' | 'folder' | 'folders' | 'footprints' | 'forklift' | 'form' | 'forward' | 'frame' | 'fuel' | 'fullscreen' | 'funnel-plus' | 'funnel-x' | 'funnel' | 'galaxy' | 'gallery-horizontal-end' | 'gallery-horizontal' | 'gallery-thumbnails' | 'gallery-vertical-end' | 'gallery-vertical' | 'gamepad-2' | 'gamepad-directional' | 'gamepad' | 'gap-horizontal' | 'gap-vertical' | 'gauge' | 'gavel' | 'gem' | 'georgian-lari' | 'germ-off' | 'germ' | 'ghost' | 'gift' | 'git-branch-minus' | 'git-branch-plus' | 'git-branch' | 'git-commit-horizontal' | 'git-commit-vertical' | 'git-compare-arrows' | 'git-compare' | 'git-fork' | 'git-graph' | 'git-merge-conflict' | 'git-merge' | 'git-pull-request-arrow' | 'git-pull-request-closed' | 'git-pull-request-create-arrow' | 'git-pull-request-create' | 'git-pull-request-draft' | 'git-pull-request' | 'glass-water' | 'glasses' | 'globe-check' | 'globe-code' | 'globe-lock' | 'globe-off' | 'globe-x' | 'globe' | 'goal' | 'gpu' | 'graduation-cap' | 'grape' | 'graph-hub' | 'graph-star' | 'grid-2x2-check' | 'grid-2x2-plus' | 'grid-2x2-x' | 'grid-2x2' | 'grid-3x2' | 'grid-3x3' | 'grip-horizontal' | 'grip-vertical' | 'grip' | 'groceries' | 'group' | 'guitar-electric' | 'guitar' | 'half-note' | 'ham' | 'hamburger' | 'hammer' | 'hand-coins' | 'hand-fist' | 'hand-grab' | 'hand-heart' | 'hand-helping' | 'hand-metal' | 'hand-platter' | 'hand' | 'handbag' | 'handle-bottom-right' | 'handshake' | 'hard-drive-download' | 'hard-drive-upload' | 'hard-drive' | 'hard-hat' | 'hash' | 'hat-glasses' | 'haze' | 'hd' | 'hdmi-port' | 'heading-1' | 'heading-2' | 'heading-3' | 'heading-4' | 'heading-5' | 'heading-6' | 'heading' | 'headphone-off' | 'headphones' | 'headset' | 'heart-crack' | 'heart-handshake' | 'heart-minus' | 'heart-off' | 'heart-plus' | 'heart-pulse' | 'heart-x' | 'heart' | 'heater' | 'helicopter' | 'hexagon' | 'highlighter' | 'hiking-stick' | 'hop-off' | 'hop' | 'hospital' | 'hotel' | 'hourglass-cog' | 'hourglass' | 'house-cog' | 'house-heart' | 'house-plug' | 'house-plus' | 'house-wifi' | 'house' | 'houses' | 'ice-cream-bowl' | 'ice-cream-cone' | 'id-card-lanyard' | 'id-card' | 'image-down' | 'image-minus' | 'image-off' | 'image-play' | 'image-plus' | 'image-up' | 'image-upscale' | 'image' | 'images' | 'import' | 'inbox' | 'indian-rupee' | 'infinity' | 'info' | 'inspection-panel' | 'italic' | 'iteration-ccw' | 'iteration-cw' | 'iv-bag' | 'japanese-yen' | 'joystick' | 'kanban' | 'kayak' | 'kazakh-tenge' | 'key-round' | 'key-square' | 'key' | 'keyboard-music' | 'keyboard-off' | 'keyboard' | 'lambda' | 'lamp-ceiling' | 'lamp-desk' | 'lamp-floor' | 'lamp-wall-down' | 'lamp-wall-up' | 'lamp' | 'land-plot' | 'landmark' | 'languages' | 'laptop-minimal-check' | 'laptop-minimal' | 'laptop' | 'lasso-select' | 'lasso' | 'layer-arrow-down' | 'layer-arrow-up' | 'layers-2' | 'layers-arrow-down' | 'layers-arrow-up' | 'layers-minus' | 'layers-plus' | 'layers' | 'layout-arrow-down' | 'layout-arrow-right' | 'layout-dashboard' | 'layout-freeform' | 'layout-grid-circles' | 'layout-grid' | 'layout-list' | 'layout-panel-left' | 'layout-panel-top' | 'layout-template' | 'leaf' | 'leafy-green' | 'lectern' | 'lens-concave' | 'lens-convex' | 'lens' | 'letter-spacing' | 'letters' | 'library-big' | 'library' | 'life-buoy' | 'ligature' | 'lightbulb-off' | 'lightbulb' | 'lighthouse' | 'line-dot-bottom-vertical' | 'line-dot-left-horizontal' | 'line-dot-right-horizontal' | 'line-dot-top-vertical' | 'line-height' | 'line-squiggle' | 'line-style' | 'link-2-off' | 'link-2' | 'link' | 'list-check' | 'list-checks' | 'list-chevrons-down-up' | 'list-chevrons-up-down' | 'list-clock' | 'list-collapse' | 'list-end' | 'list-filter-plus' | 'list-filter' | 'list-indent-decrease' | 'list-indent-increase' | 'list-minus' | 'list-music' | 'list-ordered' | 'list-plus' | 'list-restart' | 'list-sort-ascending' | 'list-sort-descending' | 'list-start' | 'list-todo' | 'list-tree' | 'list-video' | 'list-x' | 'list' | 'loader-circle' | 'loader-pinwheel' | 'loader' | 'locate-fixed' | 'locate-off' | 'locate' | 'lock-keyhole-open' | 'lock-keyhole' | 'lock-open' | 'lock' | 'log-in' | 'log-out' | 'logs' | 'lollipop' | 'luggage' | 'magnet' | 'mail-badge' | 'mail-check' | 'mail-clock' | 'mail-dot' | 'mail-minus' | 'mail-open' | 'mail-pen' | 'mail-plus' | 'mail-question-mark' | 'mail-search' | 'mail-warning' | 'mail-x' | 'mail' | 'mailbox' | 'mails' | 'map-minus' | 'map-pin-check-inside' | 'map-pin-check' | 'map-pin-house' | 'map-pin-minus-inside' | 'map-pin-minus' | 'map-pin-off' | 'map-pin-pen' | 'map-pin-plus-inside' | 'map-pin-plus' | 'map-pin-search' | 'map-pin-x-inside' | 'map-pin-x' | 'map-pin' | 'map-pinned' | 'map-plus' | 'map' | 'mars-stroke' | 'mars' | 'martini' | 'maximize-2' | 'maximize' | 'medal' | 'megaphone-off' | 'megaphone' | 'memory-stick' | 'menu' | 'merge' | 'message-circle-check' | 'message-circle-code' | 'message-circle-dashed-check' | 'message-circle-dashed' | 'message-circle-heart' | 'message-circle-more' | 'message-circle-off' | 'message-circle-plus' | 'message-circle-question-mark' | 'message-circle-reply' | 'message-circle-text' | 'message-circle-warning' | 'message-circle-x' | 'message-circle' | 'message-square-check' | 'message-square-code' | 'message-square-dashed' | 'message-square-diff' | 'message-square-dot' | 'message-square-heart' | 'message-square-lock' | 'message-square-more' | 'message-square-off' | 'message-square-plus' | 'message-square-quote' | 'message-square-reply' | 'message-square-share' | 'message-square-text' | 'message-square-warning' | 'message-square-x' | 'message-square' | 'messages-circle' | 'messages-square' | 'metronome' | 'mic-audio-lines' | 'mic-off' | 'mic-signal' | 'mic-vocal' | 'mic' | 'microchip' | 'microscope' | 'microwave' | 'midi-port' | 'milestone' | 'milk-off' | 'milk' | 'minimize-2' | 'minimize' | 'minus' | 'mirror-rectangular' | 'mirror-round' | 'monitor-check' | 'monitor-cloud' | 'monitor-cog' | 'monitor-dot' | 'monitor-down' | 'monitor-off' | 'monitor-pause' | 'monitor-pc' | 'monitor-play' | 'monitor-smartphone' | 'monitor-speaker' | 'monitor-stop' | 'monitor-up' | 'monitor-x' | 'monitor' | 'moon-star' | 'moon' | 'mop-sparkles' | 'mop' | 'mosque' | 'motorbike' | 'mountain-snow' | 'mountain' | 'mouse-left' | 'mouse-off' | 'mouse-pointer-2-off' | 'mouse-pointer-2' | 'mouse-pointer-ban' | 'mouse-pointer-click' | 'mouse-pointer' | 'mouse-right' | 'mouse' | 'mouth-off' | 'mouth' | 'move-3d' | 'move-diagonal-2' | 'move-diagonal' | 'move-down-left' | 'move-down-right' | 'move-down' | 'move-horizontal' | 'move-left' | 'move-right' | 'move-up-left' | 'move-up-right' | 'move-up' | 'move-vertical' | 'move' | 'navigation-2-off' | 'navigation-2' | 'navigation-off' | 'navigation' | 'nepali-rupee' | 'network' | 'newspaper' | 'nfc' | 'non-binary' | 'notebook-dot' | 'notebook-pen' | 'notebook-tabs' | 'notebook-text' | 'notebook' | 'notepad-text-dashed' | 'notepad-text' | 'nut-off' | 'nut' | 'octagon-alert' | 'octagon-minus' | 'octagon-pause' | 'octagon-x' | 'octagon' | 'omega' | 'option' | 'orbit' | 'origami' | 'package-2' | 'package-check' | 'package-minus' | 'package-open' | 'package-plus' | 'package-search' | 'package-x' | 'package' | 'paint-bucket' | 'paint-roller' | 'paintbrush-vertical' | 'paintbrush' | 'palette' | 'panda' | 'panel-bottom-close' | 'panel-bottom-dashed' | 'panel-bottom-open' | 'panel-bottom' | 'panel-left-close' | 'panel-left-dashed' | 'panel-left-open' | 'panel-left-right-dashed' | 'panel-left' | 'panel-right-close' | 'panel-right-dashed' | 'panel-right-open' | 'panel-right' | 'panel-top-bottom-dashed' | 'panel-top-close' | 'panel-top-dashed' | 'panel-top-open' | 'panel-top' | 'panels-left-bottom' | 'panels-right-bottom' | 'panels-top-left' | 'paper-bag' | 'paperclip' | 'parasol' | 'parentheses' | 'park' | 'parking-meter' | 'party-popper' | 'pause' | 'paw-print' | 'pc-case' | 'pen-line' | 'pen-off' | 'pen-tool' | 'pen' | 'pencil-line' | 'pencil-off' | 'pencil-ruler' | 'pencil-sparkles' | 'pencil' | 'pentagon' | 'percent' | 'perfume-bottle' | 'person-standing' | 'phi' | 'philippine-peso' | 'phone-call' | 'phone-forwarded' | 'phone-incoming' | 'phone-log' | 'phone-missed' | 'phone-off' | 'phone-outgoing' | 'phone' | 'pi' | 'piano' | 'pickaxe' | 'picture-in-picture-2' | 'picture-in-picture' | 'piggy-bank' | 'pilcrow-left' | 'pilcrow-right' | 'pilcrow' | 'pill-bottle' | 'pill' | 'pin-off' | 'pin' | 'pipette' | 'pizza' | 'plane-landing' | 'plane-takeoff' | 'plane' | 'plant-pot' | 'play-off' | 'play' | 'playing-card' | 'playing-cards-fan' | 'playing-cards' | 'plug-2' | 'plug-zap' | 'plug' | 'plus' | 'pocket-knife' | 'podium' | 'pointer-off' | 'pointer' | 'popcorn' | 'popsicle' | 'pound-sterling' | 'power-off' | 'power' | 'presentation' | 'printer-3d' | 'printer-check' | 'printer-x' | 'printer' | 'projector' | 'proportions' | 'puzzle' | 'pyramid' | 'qr-code' | 'quote' | 'rabbit' | 'radar' | 'radiation' | 'radical' | 'radio-off' | 'radio-receiver' | 'radio-tower' | 'radio' | 'radius' | 'rainbow' | 'rat' | 'ratio' | 'receipt-cent' | 'receipt-euro' | 'receipt-indian-rupee' | 'receipt-japanese-yen' | 'receipt-pound-sterling' | 'receipt-russian-ruble' | 'receipt-swiss-franc' | 'receipt-text' | 'receipt-turkish-lira' | 'receipt' | 'rectangle-circle' | 'rectangle-ellipsis' | 'rectangle-goggles' | 'rectangle-horizontal' | 'rectangle-vertical' | 'recycle' | 'redo-2' | 'redo-dot' | 'redo' | 'refresh-ccw-dot' | 'refresh-ccw' | 'refresh-cw-off' | 'refresh-cw' | 'refrigerator' | 'regex' | 'remove-formatting' | 'repeat-1' | 'repeat-2' | 'repeat-off' | 'repeat' | 'replace-all' | 'replace' | 'reply-all' | 'reply' | 'rewind' | 'ribbon' | 'road' | 'robot-arm' | 'robot-vacuum' | 'rocket' | 'rocking-chair' | 'roller-coaster' | 'rose' | 'rotate-3d' | 'rotate-ccw-clock' | 'rotate-ccw-key' | 'rotate-ccw-square' | 'rotate-ccw' | 'rotate-cw-clock' | 'rotate-cw-fading-clock' | 'rotate-cw-square' | 'rotate-cw' | 'route-off' | 'route' | 'router' | 'rows-2' | 'rows-3' | 'rows-4' | 'rss' | 'rugby-ball' | 'ruler-dimension-line' | 'ruler' | 'russian-ruble' | 'sailboat' | 'salad' | 'sandwich' | 'satellite-dish' | 'satellite' | 'saudi-riyal' | 'save-all' | 'save-check' | 'save-off' | 'save-pen' | 'save-plus' | 'save' | 'scale-3d' | 'scale' | 'scaling' | 'scan-barcode' | 'scan-box' | 'scan-eye' | 'scan-face' | 'scan-heart' | 'scan-line' | 'scan-qr-code' | 'scan-search' | 'scan-square' | 'scan-text' | 'scan' | 'school' | 'scissors-line-dashed' | 'scissors' | 'scooter' | 'scratch-blocks' | 'screen-share-off' | 'screen-share' | 'screw' | 'scroll-text' | 'scroll' | 'search-alert' | 'search-check' | 'search-code' | 'search-slash' | 'search-x' | 'search' | 'section' | 'send-horizontal' | 'send-to-back' | 'send' | 'separator-horizontal' | 'separator-vertical' | 'server-cog' | 'server-crash' | 'server-nas' | 'server-off' | 'server-plus' | 'server' | 'settings-2' | 'settings' | 'shapes' | 'share-2' | 'share' | 'sheet' | 'shell' | 'shelving-unit' | 'shield-alert' | 'shield-ban' | 'shield-check' | 'shield-cog-corner' | 'shield-cog' | 'shield-ellipsis' | 'shield-half' | 'shield-house' | 'shield-keyhole' | 'shield-lock' | 'shield-minus' | 'shield-off' | 'shield-plus' | 'shield-question-mark' | 'shield-user' | 'shield-x' | 'shield' | 'ship-cargo' | 'ship-wheel' | 'ship' | 'shirt' | 'shopping-bag' | 'shopping-basket' | 'shopping-cart-minus' | 'shopping-cart-plus' | 'shopping-cart' | 'shovel' | 'shower-head' | 'shredder' | 'shrimp-off' | 'shrimp' | 'shrink' | 'shrub' | 'shuffle' | 'sigma' | 'signal-high' | 'signal-low' | 'signal-medium' | 'signal-zero' | 'signal' | 'signature' | 'signpost-big' | 'signpost' | 'siren' | 'sixteenth-notes' | 'skip-back' | 'skip-forward' | 'skull' | 'slash' | 'slice' | 'sliders-horizontal' | 'sliders-vertical' | 'smartphone-charging' | 'smartphone-nfc' | 'smartphone-user-round' | 'smartphone' | 'snail' | 'snowflake' | 'soap-dispenser-droplet' | 'sofa' | 'solar-panel' | 'soup' | 'space' | 'spade' | 'sparkle' | 'sparkles' | 'speaker' | 'speech' | 'spell-check-2' | 'spell-check' | 'spline-pointer' | 'spline' | 'split' | 'spool' | 'sport-shoe' | 'spotlight' | 'spray-can' | 'sprout' | 'square-activity' | 'square-arrow-down-left' | 'square-arrow-down-right' | 'square-arrow-down' | 'square-arrow-left' | 'square-arrow-out-down-left' | 'square-arrow-out-down-right' | 'square-arrow-out-up-left' | 'square-arrow-out-up-right' | 'square-arrow-right-enter' | 'square-arrow-right-exit' | 'square-arrow-right' | 'square-arrow-up-left' | 'square-arrow-up-right' | 'square-arrow-up' | 'square-asterisk' | 'square-bookmark' | 'square-bottom-dashed-scissors' | 'square-centerline-dashed-horizontal' | 'square-centerline-dashed-vertical' | 'square-chart-gantt' | 'square-check-big' | 'square-check' | 'square-chevron-down' | 'square-chevron-left' | 'square-chevron-right' | 'square-chevron-up' | 'square-code' | 'square-dashed-bottom-code' | 'square-dashed-bottom' | 'square-dashed-kanban' | 'square-dashed-mouse-pointer' | 'square-dashed-plus' | 'square-dashed-text' | 'square-dashed-top-solid' | 'square-dashed-x-corner' | 'square-dashed-x' | 'square-dashed' | 'square-dimensions' | 'square-divide' | 'square-dot' | 'square-equal' | 'square-exclamation-point' | 'square-function' | 'square-kanban' | 'square-library' | 'square-m' | 'square-menu' | 'square-minus' | 'square-mouse-pointer' | 'square-off' | 'square-parking-off' | 'square-parking' | 'square-pause' | 'square-pen' | 'square-percent' | 'square-pi' | 'square-pilcrow' | 'square-play' | 'square-plus' | 'square-power' | 'square-radical' | 'square-round-corner' | 'square-scissors' | 'square-sigma' | 'square-slash' | 'square-sparkles' | 'square-split-horizontal' | 'square-split-vertical' | 'square-square' | 'square-stack' | 'square-star' | 'square-stop' | 'square-terminal' | 'square-text' | 'square-user-round' | 'square-user' | 'square-x' | 'square' | 'squares-exclude' | 'squares-intersect' | 'squares-subtract' | 'squares-unite' | 'squircle-dashed' | 'squircle' | 'squirrel' | 'stamp' | 'star-check' | 'star-half' | 'star-minus' | 'star-off' | 'star-plus' | 'star-x' | 'star' | 'step-back' | 'step-forward' | 'stethoscope' | 'sticker' | 'sticky-note-check' | 'sticky-note-minus' | 'sticky-note-off' | 'sticky-note-plus' | 'sticky-note-x' | 'sticky-note' | 'sticky-notes' | 'stone' | 'store' | 'stretch-horizontal' | 'stretch-vertical' | 'strikethrough' | 'subscript' | 'summary' | 'sun-dim' | 'sun-medium' | 'sun-moon' | 'sun-snow' | 'sun' | 'sunrise' | 'sunset' | 'superscript' | 'swatch-book' | 'swiss-franc' | 'switch-camera' | 'sword' | 'swords' | 'syringe' | 'table-2' | 'table-cells-merge' | 'table-cells-split' | 'table-columns-split' | 'table-of-contents' | 'table-properties' | 'table-rows-split' | 'table' | 'tablet-smartphone' | 'tablet' | 'tablets' | 'tag-plus' | 'tag-x' | 'tag' | 'tags' | 'tally-1' | 'tally-2' | 'tally-3' | 'tally-4' | 'tally-5' | 'tangent' | 'target' | 'telescope' | 'tent-tree' | 'tent' | 'terminal' | 'test-tube-diagonal' | 'test-tube' | 'test-tubes' | 'text-align-center' | 'text-align-end' | 'text-align-justify-center' | 'text-align-justify-end' | 'text-align-justify-start' | 'text-align-justify' | 'text-align-start' | 'text-cursor-input' | 'text-cursor' | 'text-initial' | 'text-quote' | 'text-search' | 'text-wrap' | 'theater' | 'thermometer-snowflake' | 'thermometer-sun' | 'thermometer' | 'thumbs-down' | 'thumbs-up' | 'tic-tac-toe' | 'ticket-check' | 'ticket-minus' | 'ticket-percent' | 'ticket-plus' | 'ticket-slash' | 'ticket-x' | 'ticket' | 'tickets-plane' | 'tickets' | 'timeline' | 'timer-off' | 'timer-reset' | 'timer' | 'toggle-left' | 'toggle-right' | 'toilet' | 'tombstone' | 'tool-case' | 'toolbox' | 'toothbrush-sparkles' | 'toothbrush' | 'tornado' | 'torus' | 'touchpad-off' | 'touchpad' | 'towel-rack' | 'tower-control' | 'toy-brick' | 'tractor' | 'traffic-cone' | 'trailer' | 'train-front-tunnel' | 'train-front' | 'train-track' | 'tram-front' | 'transgender' | 'trash-off' | 'trash' | 'tree-deciduous' | 'tree-palm' | 'tree-pine' | 'trees' | 'trending-down' | 'trending-up-down' | 'trending-up' | 'triangle-alert' | 'triangle-dashed' | 'triangle-right' | 'triangle' | 'triangles-centerline-dashed-horizontal' | 'triangles-centerline-dashed-vertical' | 'trophy' | 'truck-electric' | 'truck' | 'tube-lotion' | 'turkish-lira' | 'turntable' | 'turtle' | 'tv-minimal-play' | 'tv-minimal' | 'tv' | 'type-outline' | 'type' | 'umbrella-off' | 'umbrella' | 'underline' | 'undo-2' | 'undo-dot' | 'undo' | 'unfold-horizontal' | 'unfold-vertical' | 'ungroup' | 'university' | 'unlink-2' | 'unlink' | 'unplug' | 'upload' | 'usb-c-port' | 'usb' | 'user-check' | 'user-cog' | 'user-group' | 'user-key' | 'user-lock' | 'user-minus' | 'user-pen' | 'user-plus' | 'user-round-arrow-left' | 'user-round-check' | 'user-round-cog' | 'user-round-group' | 'user-round-key' | 'user-round-minus' | 'user-round-pen' | 'user-round-plus' | 'user-round-search' | 'user-round-star' | 'user-round-x' | 'user-round' | 'user-search' | 'user-shield' | 'user-star' | 'user-x' | 'user' | 'users-collaboration' | 'users-round-collaboration' | 'users-round' | 'users' | 'utensils-crossed' | 'utensils' | 'utility-pole' | 'van' | 'variable' | 'vault' | 'vector-polygon' | 'vector-square' | 'vegan' | 'venetian-mask' | 'venus-and-mars' | 'venus' | 'vibrate-off' | 'vibrate' | 'video-off' | 'video' | 'videotape' | 'view' | 'virus-off' | 'virus' | 'voicemail' | 'volleyball' | 'volume-1' | 'volume-2' | 'volume-off' | 'volume-x' | 'volume' | 'vote' | 'wallet-cards' | 'wallet-minimal' | 'wallet' | 'wallpaper' | 'wand-sparkles' | 'wand' | 'warehouse' | 'washing-machine' | 'watch' | 'waves-arrow-down' | 'waves-arrow-up' | 'waves-horizontal' | 'waves-ladder' | 'waves-vertical' | 'waypoints' | 'webcam-off' | 'webcam' | 'webhook-off' | 'webhook' | 'weight-tilde' | 'weight' | 'wheat-off' | 'wheat' | 'whistle' | 'whole-word' | 'wifi-cog' | 'wifi-high' | 'wifi-lock' | 'wifi-low' | 'wifi-off' | 'wifi-pen' | 'wifi-sync' | 'wifi-zero' | 'wifi' | 'wind-arrow-down' | 'wind-arrow-up' | 'wind' | 'wine-off' | 'wine' | 'workflow' | 'worm' | 'wrench-off' | 'wrench' | 'x-line-top' | 'x' | 'zap-off' | 'zap' | 'zodiac-aquarius' | 'zodiac-aries' | 'zodiac-cancer' | 'zodiac-capricorn' | 'zodiac-gemini' | 'zodiac-leo' | 'zodiac-libra' | 'zodiac-ophiuchus' | 'zodiac-pisces' | 'zodiac-sagittarius' | 'zodiac-scorpio' | 'zodiac-taurus' | 'zodiac-virgo' | 'zoom-in' | 'zoom-out';WebIconMode
@webrad/runtime · type
export type WebIconMode = 'icon' | 'button';WebIcon
@webrad/runtime · class
export class WebIcon extends WebComponent<HTMLButtonElement> {
constructor(element: HTMLElement);
icon: LucideIconName;
mode: WebIconMode;
accessibleLabel: string;
strokeWidth: number;
click(): void;
set onClick(handler: WebComponentEventHandler<this> | null);
}WebTimerConfiguration
@webrad/runtime · interface
export interface WebTimerConfiguration extends WebNonvisualComponentOptions {
readonly time?: number;
readonly loop?: boolean;
readonly enabled?: boolean;
}WebTimerEventDetail
@webrad/runtime · interface
export interface WebTimerEventDetail {
readonly tick: number;
}WebTimer
@webrad/runtime · class
/** Browser timer owned by one page or reusable placement. Time is in milliseconds. */
export class WebTimer extends WebNonvisualComponent {
constructor(configuration?: WebTimerConfiguration);
get time(): number;
/** Changing the interval while running schedules a fresh full interval. */
set time(value: number);
get loop(): boolean;
set loop(value: boolean);
get enabled(): boolean;
set enabled(value: boolean);
get tickCount(): number;
/** Starts a new run; calling Start while running has no effect. */
Start(): void;
Stop(): void;
Restart(): void;
set onTimer(handler: WebComponentEventHandler<this> | null);
set onStart(handler: WebComponentEventHandler<this> | null);
set onStop(handler: WebComponentEventHandler<this> | null);
dispose(): void;
}WebPaymentsConfiguration
@webrad/runtime · interface
export interface WebPaymentsConfiguration extends WebNonvisualComponentOptions {
readonly gatewaySlug?: string;
readonly mode?: 'payment' | 'subscription';
readonly enabled?: boolean;
readonly pollInterval?: number;
readonly pollTimeout?: number;
readonly autoResume?: boolean;
readonly autoWatch?: boolean;
readonly persistAttempts?: boolean;
/** Runtime-only durable adapter; never serialized into the Project Model. */
readonly storage?: WebPaymentsStorageAdapter;
}WebPaymentsStorageAdapter
@webrad/runtime · interface
export interface WebPaymentsStorageAdapter {
getItem(key: string): string | null;
setItem(key: string, value: string): void;
removeItem(key: string): void;
withLock?<T>(name: string, action: () => Promise<T>, signal?: AbortSignal): Promise<T>;
}WebPaymentsCheckpoint
@webrad/runtime · interface
/** Application-owned recovery data. Save before POST and again before navigation. */
export interface WebPaymentsCheckpoint {
readonly version: 1;
readonly baseUrl: string;
readonly gatewaySlug: string;
readonly userId: string;
readonly sourceKey: string;
readonly mode: 'payment' | 'subscription';
readonly idempotencyKey: string;
readonly operationId?: string;
}WebPaymentsObservationOptions
@webrad/runtime · interface
export interface WebPaymentsObservationOptions {
readonly signal?: AbortSignal;
readonly interval?: number;
readonly timeout?: number;
}WebPaymentsCheckoutOptions
@webrad/runtime · interface
export interface WebPaymentsCheckoutOptions extends WebPaymentsObservationOptions {
/** Defaults to true. False prepares an open checkout for custom authored UI. */
readonly openCheckout?: boolean;
}WebPaymentsResumeOptions
@webrad/runtime · interface
export interface WebPaymentsResumeOptions extends WebPaymentsObservationOptions {
readonly mode?: 'payment' | 'subscription';
/** Defaults to the component's autoWatch setting. Never opens checkout. */
readonly watch?: boolean;
}WebPaymentsConfirmationOptions
@webrad/runtime · interface
export interface WebPaymentsConfirmationOptions extends WebPaymentsObservationOptions {
readonly operationId?: string;
/** Financial confirmation is enough by default; source synchronization is separate. */
readonly waitForSynchronization?: boolean;
}WebPaymentsState
@webrad/runtime · type
export type WebPaymentsState = 'idle' | 'restoring' | 'preparing' | 'creating' | 'waiting' | 'opening' | 'watching' | 'refreshing' | 'loading-history' | 'canceling' | 'ready' | 'confirmed' | 'canceled' | 'uncertain' | 'failed' | 'error';WebPaymentsStateEventDetail
@webrad/runtime · interface
export interface WebPaymentsStateEventDetail {
readonly previous: WebPaymentsState;
readonly state: WebPaymentsState;
}WebPaymentsHistoryEventDetail
@webrad/runtime · interface
export interface WebPaymentsHistoryEventDetail {
readonly items: readonly import("@webrad/restgo-sdk").RestGoPaymentOperation[];
readonly nextCursor: string;
readonly hasMore: boolean;
}WebPaymentsResumeEventDetail
@webrad/runtime · interface
export interface WebPaymentsResumeEventDetail {
readonly checkpoint: WebPaymentsCheckpoint;
readonly operation: import("@webrad/restgo-sdk").RestGoPaymentOperation | null;
readonly automatic: boolean;
}WebPaymentsAction
@webrad/runtime · type
export type WebPaymentsAction = 'pay' | 'subscribe' | 'checkout' | 'resume' | 'refresh' | 'history' | 'load-more' | 'confirm' | 'create' | 'get' | 'list' | 'cancel' | 'wait' | 'watch';WebPaymentsOperationEventDetail
@webrad/runtime · interface
export interface WebPaymentsOperationEventDetail {
readonly previous: import("@webrad/restgo-sdk").RestGoPaymentOperation | null;
readonly operation: import("@webrad/restgo-sdk").RestGoPaymentOperation | null;
}WebPaymentsCheckoutEventDetail
@webrad/runtime · interface
export interface WebPaymentsCheckoutEventDetail {
readonly operation: import("@webrad/restgo-sdk").RestGoPaymentOperation;
}WebPaymentsSynchronizationEventDetail
@webrad/runtime · interface
export interface WebPaymentsSynchronizationEventDetail {
readonly operation: import("@webrad/restgo-sdk").RestGoPaymentOperation;
readonly pending: boolean;
readonly error: string | null;
}WebPaymentsErrorEventDetail
@webrad/runtime · interface
export interface WebPaymentsErrorEventDetail {
readonly action: WebPaymentsAction;
readonly operationId: string | null;
readonly error: Error;
}WebPaymentsRequestEventDetail
@webrad/runtime · interface
export interface WebPaymentsRequestEventDetail {
readonly action: WebPaymentsAction;
readonly operationId: string | null;
readonly error: Error | null;
}WebPaymentsErrorKind
@webrad/runtime · type
export type WebPaymentsErrorKind = 'invalid-argument' | 'not-configured' | 'auth-required' | 'context-changed' | 'disabled' | 'disposed' | 'busy' | 'attempt-required' | 'attempt-conflict' | 'checkout-uncertain' | 'checkout-unavailable' | 'timeout' | 'storage-unavailable' | 'storage-corrupt' | 'payment-failed' | 'synchronization-failed' | 'aborted';WebPaymentsError
@webrad/runtime · class
/** Local orchestration errors; HTTP failures retain their original RestGoError. */
export class WebPaymentsError extends Error {
readonly kind: WebPaymentsErrorKind;
constructor(kind: WebPaymentsErrorKind, message: string);
}WebPayments
@webrad/runtime · class
/** Customer payment coordinator, owned by one page or reusable placement. */
export class WebPayments extends WebNonvisualComponent {
constructor(configuration?: WebPaymentsConfiguration);
get gatewaySlug(): string;
set gatewaySlug(value: string);
get mode(): import("@webrad/restgo-sdk").RestGoPaymentMode;
/** Changes only the default for a future prepared attempt. */
set mode(value: import("@webrad/restgo-sdk").RestGoPaymentMode);
get enabled(): boolean;
set enabled(value: boolean);
get pollInterval(): number;
set pollInterval(value: number);
get pollTimeout(): number;
set pollTimeout(value: number);
get busy(): boolean;
get autoResume(): boolean;
set autoResume(value: boolean);
get autoWatch(): boolean;
set autoWatch(value: boolean);
get persistAttempts(): boolean;
set persistAttempts(value: boolean);
get state(): WebPaymentsState;
get status(): string | null;
get checkoutState(): string | null;
get synchronizationPending(): boolean;
get synchronizationError(): string | null;
get canOpenCheckout(): boolean;
get canCancelSubscription(): boolean;
get history(): readonly import("@webrad/restgo-sdk").RestGoPaymentOperation[];
get nextCursor(): string;
get hasMore(): boolean;
get watching(): boolean;
get operation(): import("@webrad/restgo-sdk").RestGoPaymentOperation | null;
get checkoutUrl(): string | null;
get error(): Error | null;
get attempt(): import("@webrad/restgo-sdk").RestGoCheckoutInput | null;
/** Prepare/recover the purchase, persist its key, wait for checkout and open it. */
Pay(sourceKey: string, options?: WebPaymentsCheckoutOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
/** Subscribe through the hosted checkout with the same automatic recovery flow. */
Subscribe(sourceKey: string, options?: WebPaymentsCheckoutOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
/** Use the mode selected in the Inspector. Opens checkout by default. */
Checkout(sourceKey: string, options?: WebPaymentsCheckoutOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
/** Recover a purchase or the last saved attempt; never redirects back to checkout. */
Resume(sourceKey?: string, options?: WebPaymentsResumeOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation | null>;
/** Refresh the selected/saved operation without creating a charge. */
Refresh(options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation | null>;
/** Load customer history and expose its cursor without changing selection. */
LoadHistory(options?: import("@webrad/restgo-sdk").RestGoPaymentListOptions): Promise<readonly import("@webrad/restgo-sdk").RestGoPaymentOperation[]>;
/** Append the next page, deduplicating operations. Last page is a harmless no-op. */
LoadMore(options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<readonly import("@webrad/restgo-sdk").RestGoPaymentOperation[]>;
/** Await payment success or subscription activation, optionally including source synchronization. */
WaitForConfirmation(options?: WebPaymentsConfirmationOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
/** Advanced preparation without HTTP. Default persistence saves its recovery checkpoint. */
PrepareCheckout(sourceKey: string, mode?: import("@webrad/restgo-sdk").RestGoPaymentMode): WebPaymentsCheckpoint;
CreateCheckout(options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
GetOperation(id: string, options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
ListOperations(options?: import("@webrad/restgo-sdk").RestGoPaymentListOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperationList>;
CancelSubscription(options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
CancelSubscription(id: string, options?: import("@webrad/restgo-sdk").RestGoPaymentRequestOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
WaitForCheckout(id?: string, options?: WebPaymentsObservationOptions): Promise<import("@webrad/restgo-sdk").RestGoPaymentOperation>;
/** Starts one bounded loop. Background failures are delivered through OnError. */
StartWatching(id?: string, options?: WebPaymentsObservationOptions): void;
/** Local observation cancellation only; never cancels the backend transaction. */
StopWatching(): void;
OpenCheckout(): void;
ExportCheckpoint(): WebPaymentsCheckpoint;
/** Validates recovery data against this API, gateway and customer. Performs no HTTP. */
RestoreCheckpoint(value: unknown): WebPaymentsCheckpoint;
/** Save recovery data first. This only clears local state and never cancels a charge. */
Clear(): void;
set onCheckoutCreated(handler: WebComponentEventHandler<this> | null);
set onCheckoutReady(handler: WebComponentEventHandler<this> | null);
set onOperationChange(handler: WebComponentEventHandler<this> | null);
set onSynchronizationChange(handler: WebComponentEventHandler<this> | null);
set onError(handler: WebComponentEventHandler<this> | null);
set onRequestComplete(handler: WebComponentEventHandler<this> | null);
set onPaymentSucceeded(handler: WebComponentEventHandler<this> | null);
set onSubscriptionActivated(handler: WebComponentEventHandler<this> | null);
set onSubscriptionCanceled(handler: WebComponentEventHandler<this> | null);
set onCheckoutOpened(handler: WebComponentEventHandler<this> | null);
set onHistoryChange(handler: WebComponentEventHandler<this> | null);
set onStateChange(handler: WebComponentEventHandler<this> | null);
set onRestored(handler: WebComponentEventHandler<this> | null);
dispose(): void;
}WebHtml
@webrad/runtime · class
/** Isolated markup or a standalone external iframe, with the original HTML preserved. */
export class WebHtml extends WebComponent<HTMLIFrameElement> {
constructor(element: HTMLElement);
/** A fixed ratio derives height from width; none restores the saved height rules. */
get aspectRatio(): WebAspectRatio;
set aspectRatio(value: WebAspectRatio);
/** A fragment or complete HTML document, preserved exactly as authored. */
get html(): string;
set html(value: string);
/** Accessible name for the embedded document. */
get title(): string;
set title(value: string);
get enabled(): boolean;
set enabled(value: boolean);
clear(): void;
set onLoad(handler: WebComponentEventHandler<this> | null);
}WebDateMode
@webrad/runtime · type
export type WebDateMode = 'date' | 'datetime';WebDateFormat
@webrad/runtime · type
export type WebDateFormat = 'dd/MM/yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';isWebDateValue
@webrad/runtime · function
/** Empty values clear a field. Nonempty values use local ISO calendar fields. */
export function isWebDateValue(value: unknown): value is string;configureWebDate
@webrad/runtime · function
/** Shared model projection for Designer and generated browser applications. */
export function configureWebDate(component: WebDate, props: Readonly<Record<string, unknown>>, name: string): void;WebDate
@webrad/runtime · class
/** Masked local date/date-time input. Values never imply a UTC time zone. */
export class WebDate extends WebComponent<HTMLElement> {
constructor(element: HTMLElement);
get mode(): WebDateMode;
set mode(value: WebDateMode);
get dateFormat(): WebDateFormat;
set dateFormat(value: WebDateFormat);
get showSeconds(): boolean;
set showSeconds(value: boolean);
get mask(): string;
/** Canonical YYYY-MM-DD or YYYY-MM-DDTHH:mm[:ss]; empty while incomplete/invalid. */
get value(): string;
set value(value: string);
/** Display text, including an incomplete or invalid draft. */
get text(): string;
set text(value: string);
/** A fresh Date at the start of the local day; null for an empty/incomplete/impossible date. */
get date(): Date | null;
set date(value: Date | null);
/** A fresh local Date including time; date mode returns the start of the local day. */
get datetime(): Date | null;
set datetime(value: Date | null);
get min(): string;
set min(value: string);
get max(): string;
set max(value: string);
get required(): boolean;
set required(value: boolean);
get readOnly(): boolean;
set readOnly(value: boolean);
get placeholder(): string;
set placeholder(value: string);
get accessibleLabel(): string;
set accessibleLabel(value: string);
get showCalendar(): boolean;
set showCalendar(value: boolean);
get visible(): boolean;
set visible(value: boolean);
get enabled(): boolean;
set enabled(value: boolean);
get tabIndex(): number;
set tabIndex(value: number);
focus(options?: FocusOptions): void;
get valid(): boolean;
get validationMessage(): string;
checkValidity(): boolean;
reportValidity(): boolean;
clear(): void;
setNow(): void;
/** Opens the calendar aligned to the field, with a minimum popup width of 260px. */
showPicker(): boolean;
set onChange(handler: WebComponentEventHandler<this> | null);
set onInput(handler: WebComponentEventHandler<this> | null);
dispose(): void;
}WebEditMaskCase
@webrad/runtime · type
/** Serializable character rules shared by the Inspector and browser runtime. */
export type WebEditMaskCase = 'none' | 'upper' | 'lower';WebEditMaskToken
@webrad/runtime · interface
export interface WebEditMaskToken {
/** A JavaScript Unicode regular expression matching one complete character. */
readonly pattern: string;
readonly transform?: WebEditMaskCase;
}WebEditMaskTokens
@webrad/runtime · type
export type WebEditMaskTokens = Readonly<Record<string, string | WebEditMaskToken>>;DEFAULT_EDIT_MASK_TOKENS
@webrad/runtime · variable
export const DEFAULT_EDIT_MASK_TOKENS: WebEditMaskTokens;EditMaskResult
@webrad/runtime · interface
export interface EditMaskResult {
readonly text: string;
readonly raw: string;
readonly complete: boolean;
/** UTF-16 offsets of editable characters in the formatted value. */
readonly positions: readonly {
readonly start: number;
readonly end: number;
}[];
/** Formatted caret offsets indexed by source UTF-16 offset. */
readonly carets: readonly number[];
}CompiledEditMask
@webrad/runtime · interface
export interface CompiledEditMask {
format(value: string, letterCase?: WebEditMaskCase, raw?: boolean): EditMaskResult;
}parseWebEditMaskTokens
@webrad/runtime · function
export function parseWebEditMaskTokens(value: unknown): WebEditMaskTokens;compileEditMask
@webrad/runtime · function
/** Bounded pattern grammar: literals, escapes, [optional groups], {min,max} and | alternatives. */
export function compileEditMask(pattern: string, tokens?: WebEditMaskTokens): CompiledEditMask;isWebEditMaskPattern
@webrad/runtime · function
export function isWebEditMaskPattern(value: unknown): value is string;isWebEditMaskTokens
@webrad/runtime · function
export function isWebEditMaskTokens(value: unknown): value is WebEditMaskTokens;WebInputType
@webrad/runtime · type
export type WebInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url';WebEditIcon
@webrad/runtime · type
/** An empty string removes the icon. */
export type WebEditIcon = WebButtonIcon | '';WebEdit
@webrad/runtime · class
/** A text field with an optional, dynamically configurable character mask. */
export class WebEdit extends WebComponent<HTMLElement> {
constructor(element: HTMLElement);
get value(): string;
set value(value: string);
/** Accepted characters without mask literals. Assign this when input is known to be raw. */
get rawValue(): string;
set rawValue(value: string);
get maskEnabled(): boolean;
set maskEnabled(value: boolean);
/** 0 digit, a Unicode letter, * alphanumeric, # any character; escape literals with \\. */
get mask(): string;
set mask(value: string);
/** Custom tokens override built-ins. Each pattern matches one whole Unicode character. */
get maskTokens(): WebEditMaskTokens;
set maskTokens(value: WebEditMaskTokens);
get maskCase(): WebEditMaskCase;
set maskCase(value: WebEditMaskCase);
/** True when an active mask has all its required positions filled. Empty is incomplete. */
get maskComplete(): boolean;
/** Empty for a valid pattern. Invalid patterns leave the text editable without masking. */
get maskError(): string;
get placeholder(): string;
set placeholder(value: string);
get readOnly(): boolean;
set readOnly(value: boolean);
get inputType(): WebInputType;
set inputType(value: WebInputType);
/** Visible, accessible field label. An empty string hides it. */
get label(): string;
set label(value: string);
/** Icon shown inside the field. An empty string removes it. */
get icon(): WebEditIcon;
set icon(value: WebEditIcon);
/** Accessible name of the clickable icon; empty uses the icon and field names. */
get iconAccessibleLabel(): string;
set iconAccessibleLabel(value: string);
get enabled(): boolean;
set enabled(value: boolean);
get tabIndex(): number;
set tabIndex(value: number);
focus(options?: FocusOptions): void;
clear(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
set onInput(handler: WebComponentEventHandler<this> | null);
/** Binds the icon action, enabling its native button and hover feedback. */
set onIconClick(handler: ((sender: this, event: MouseEvent) => void | Promise<void>) | null);
bindEvent(eventName: string, handler: WebComponentEventHandler<this> | null): () => void;
dispose(): void;
}configureWebEdit
@webrad/runtime · function
/** Project-model projection used by Designer, Preview and exported applications. */
export function configureWebEdit(component: WebEdit, props: Readonly<Record<string, unknown>>): void;THEME_MODES
@webrad/runtime · variable
export const THEME_MODES: readonly [
"light",
"dark",
"system"
];ThemeMode
@webrad/runtime · type
export type ThemeMode = (typeof THEME_MODES)[number];ResolvedThemeMode
@webrad/runtime · type
export type ResolvedThemeMode = 'light' | 'dark';THEME_COLOR_NAMES
@webrad/runtime · variable
export const THEME_COLOR_NAMES: readonly [
"background",
"background-end",
"surface",
"surface-end",
"surface-muted",
"input",
"input-end",
"control-thumb",
"text",
"text-muted",
"heading",
"border",
"border-accent",
"primary",
"primary-hover",
"primary-active",
"on-primary",
"accent",
"accent-hover",
"accent-active",
"on-accent",
"focus",
"disabled-surface",
"disabled-text",
"success",
"warning",
"danger",
"overlay",
"scrollbar-track",
"scrollbar-thumb",
"scrollbar-thumb-hover",
"scrollbar-thumb-active",
"media-background",
"media-background-end",
"on-media"
];ThemeColorName
@webrad/runtime · type
export type ThemeColorName = (typeof THEME_COLOR_NAMES)[number];customThemeColorId
@webrad/runtime · function
/** Stable identities for user-defined colors managed in Themes. */
export function customThemeColorId(value: unknown): string | undefined;customThemeColorReference
@webrad/runtime · function
export function customThemeColorReference(id: string): string;themeColorId
@webrad/runtime · function
export function themeColorId(value: unknown): ThemeColorName | undefined;themeColorReference
@webrad/runtime · function
export function themeColorReference(name: ThemeColorName): string;ThemeRuntimeConfiguration
@webrad/runtime · interface
export interface ThemeRuntimeConfiguration {
readonly initialMode: ThemeMode;
readonly rememberChoice: boolean;
/** Unique per project, including when multiple applications share an origin. */
readonly storageKey: string;
}ThemeChangeDetail
@webrad/runtime · interface
export interface ThemeChangeDetail {
readonly mode: ThemeMode;
readonly resolvedMode: ResolvedThemeMode;
readonly previousMode: ThemeMode;
readonly previousResolvedMode: ResolvedThemeMode;
}ThemeChangeHandler
@webrad/runtime · type
export type ThemeChangeHandler = (sender: WebTheme, event: CustomEvent<ThemeChangeDetail>) => void;initializeTheme
@webrad/runtime · function
/** Self-contained so this exact initializer can also run in the HTML head before CSS. */
export function initializeTheme(configuration: ThemeRuntimeConfiguration): void;WebTheme
@webrad/runtime · class
/** Browser-only application service. It owns no component instances or page state. */
export class WebTheme {
onChange: ThemeChangeHandler | null;
get mode(): ThemeMode;
set mode(value: ThemeMode);
get resolvedMode(): ResolvedThemeMode;
configure(configuration: ThemeRuntimeConfiguration): void;
toggle(): void;
subscribe(handler: ThemeChangeHandler): () => void;
/** Forget the remembered choice and return to the project's initial mode. */
reset(): void;
dispose(): void;
}Theme
@webrad/runtime · variable
export const Theme: WebTheme;themeBootstrapSource
@webrad/runtime · function
export function themeBootstrapSource(configuration: ThemeRuntimeConfiguration): string;WEB_LOGIN_STYLE_SLOTS
@webrad/runtime · variable
export const WEB_LOGIN_STYLE_SLOTS: readonly [
{
readonly name: "panel";
readonly label: "Panel";
readonly componentType: "WebPanel";
},
{
readonly name: "popup";
readonly label: "Popup";
readonly componentType: "WebPopup";
},
{
readonly name: "title";
readonly label: "Title";
readonly componentType: "WebLabel";
},
{
readonly name: "subtitle";
readonly label: "Subtitle";
readonly componentType: "WebLabel";
},
{
readonly name: "fullNameLabel";
readonly label: "Full name label";
readonly componentType: "WebLabel";
},
{
readonly name: "fullName";
readonly label: "Full name input";
readonly componentType: "WebEdit";
},
{
readonly name: "emailLabel";
readonly label: "Email label";
readonly componentType: "WebLabel";
},
{
readonly name: "email";
readonly label: "Email input";
readonly componentType: "WebEdit";
},
{
readonly name: "passwordLabel";
readonly label: "Password label";
readonly componentType: "WebLabel";
},
{
readonly name: "password";
readonly label: "Password input";
readonly componentType: "WebEdit";
},
{
readonly name: "passwordConfirmationLabel";
readonly label: "Password confirmation label";
readonly componentType: "WebLabel";
},
{
readonly name: "passwordConfirmation";
readonly label: "Password confirmation input";
readonly componentType: "WebEdit";
},
{
readonly name: "remember";
readonly label: "Remember me";
readonly componentType: "WebCheckBox";
},
{
readonly name: "submit";
readonly label: "Submit button";
readonly componentType: "WebButton";
},
{
readonly name: "passwordToggle";
readonly label: "Show password button";
readonly componentType: "WebButton";
readonly defaultStyle: "none";
},
{
readonly name: "registerLink";
readonly label: "Registration link";
readonly componentType: "WebButton";
readonly defaultStyle: "none";
},
{
readonly name: "loginLink";
readonly label: "Return to login link";
readonly componentType: "WebButton";
readonly defaultStyle: "none";
},
{
readonly name: "recoveryLink";
readonly label: "Recovery link";
readonly componentType: "WebButton";
readonly defaultStyle: "none";
},
{
readonly name: "close";
readonly label: "Close button";
readonly componentType: "WebButton";
readonly defaultStyle: "none";
},
{
readonly name: "feedback";
readonly label: "Success / status message";
readonly componentType: "WebLabel";
},
{
readonly name: "errorFeedback";
readonly label: "Error message";
readonly componentType: "WebLabel";
readonly defaultStyle: "none";
}
];WebLoginStyleSlot
@webrad/runtime · type
export type WebLoginStyleSlot = (typeof WEB_LOGIN_STYLE_SLOTS)[number]['name'];WebLoginStyleBindings
@webrad/runtime · type
/** Omitted entries follow the compatible default style; null explicitly selects None. */
export type WebLoginStyleBindings = Readonly<Partial<Record<WebLoginStyleSlot, string | null>>>;WebLoginView
@webrad/runtime · type
export type WebLoginView = 'login' | 'register' | 'recovery' | 'reset';WebLoginPresentation
@webrad/runtime · type
export type WebLoginPresentation = 'panel' | 'popup';WebLoginField
@webrad/runtime · interface
export interface WebLoginField {
readonly label: string;
readonly placeholder: string;
}WebLoginAppearance
@webrad/runtime · interface
export interface WebLoginAppearance {
readonly fontFamily: string;
readonly fontSize: number;
readonly background: string;
readonly backgroundEnd?: string;
readonly foreground: string;
readonly heading?: string;
readonly muted: string;
readonly border: string;
readonly borderEnd?: string;
readonly inputBackground: string;
readonly inputBackgroundEnd?: string;
readonly primary: string;
readonly primaryEnd?: string;
readonly focus?: string;
readonly onPrimary: string;
readonly error: string;
readonly borderRadius: number;
readonly padding: number;
readonly gap: number;
readonly maxWidth: number;
readonly fieldHeight: number;
}WebLoginTexts
@webrad/runtime · interface
export interface WebLoginTexts {
readonly loginTitle: string;
readonly loginSubtitle: string;
readonly registerTitle: string;
readonly registerSubtitle: string;
readonly loginButton: string;
readonly registerButton: string;
readonly switchToRegister: string;
readonly switchToLogin: string;
readonly remember: string;
readonly showPassword: string;
readonly hidePassword: string;
readonly close: string;
readonly busy: string;
readonly registered: string;
readonly authenticated: string;
readonly passwordMismatch: string;
readonly unavailable: string;
readonly requestFailed: string;
}WebLoginRecoveryConfiguration
@webrad/runtime · interface
export interface WebLoginRecoveryConfiguration {
readonly enabled: boolean;
readonly automaticLinks: boolean;
/** Blank returns to the current application route. Otherwise use an absolute HTTP(S) URL. */
readonly returnUrl: string;
readonly texts: {
readonly forgotPassword: string;
readonly requestTitle: string;
readonly requestSubtitle: string;
readonly requestButton: string;
readonly requestSent: string;
readonly resetTitle: string;
readonly resetSubtitle: string;
readonly resetButton: string;
readonly passwordChanged: string;
readonly invalidLink: string;
readonly backToLogin: string;
};
}createDefaultWebLoginRecoveryConfiguration
@webrad/runtime · function
export function createDefaultWebLoginRecoveryConfiguration(language?: 'en' | 'pt-BR'): WebLoginRecoveryConfiguration;WebLoginConfiguration
@webrad/runtime · interface
/** Credentials and transient runtime state are never part of this saved configuration. */
export interface WebLoginConfiguration {
readonly version: 1;
readonly presentation: WebLoginPresentation;
readonly initialView: Exclude<WebLoginView, 'reset'>;
readonly allowRegistration: boolean;
readonly showFullName: boolean;
readonly requireFullName: boolean;
readonly confirmPassword: boolean;
readonly showRemember: boolean;
readonly rememberDefault: boolean;
readonly showPasswordToggle: boolean;
readonly autoLoginAfterRegistration: boolean;
readonly closeOnLogin: boolean;
readonly openOnShow: boolean;
readonly dismissible: boolean;
readonly language: 'en' | 'pt-BR';
readonly email: WebLoginField;
readonly password: WebLoginField;
readonly fullName: WebLoginField;
readonly passwordConfirmation: WebLoginField;
readonly texts: WebLoginTexts;
/** Layout defaults and compatibility for earlier saved paint values. New paint comes from styles. */
readonly appearance: WebLoginAppearance;
readonly recovery?: WebLoginRecoveryConfiguration;
readonly styles?: WebLoginStyleBindings;
}createDefaultWebLoginConfiguration
@webrad/runtime · function
export function createDefaultWebLoginConfiguration(language?: 'en' | 'pt-BR'): WebLoginConfiguration;parseWebLoginConfiguration
@webrad/runtime · function
/** Validate saved values without accepting unknown fields, credentials or future versions. */
export function parseWebLoginConfiguration(value: unknown): WebLoginConfiguration;WebLoginOptions
@webrad/runtime · interface
export interface WebLoginOptions {
/** Designer and configuration previews never contact RestGo. */
readonly interactive?: boolean;
}WebLoginUserEvent
@webrad/runtime · interface
export interface WebLoginUserEvent {
readonly user: import("@webrad/restgo-sdk").RestGoCurrentUser;
readonly restored: boolean;
}WebLoginViewEvent
@webrad/runtime · interface
export interface WebLoginViewEvent {
readonly view: WebLoginView;
}WebLoginRecoveryEvent
@webrad/runtime · interface
export interface WebLoginRecoveryEvent {
readonly email: string;
}WebLoginErrorEvent
@webrad/runtime · interface
export interface WebLoginErrorEvent {
readonly operation: WebLoginView | 'restore';
readonly message: string;
readonly code: string;
readonly status: number;
}WebLoginControls
@webrad/runtime · interface
export interface WebLoginControls {
readonly panel: WebPanel;
readonly title: WebLabel;
readonly subtitle: WebLabel;
readonly email: WebEdit;
readonly password: WebEdit;
readonly fullName: WebEdit;
readonly passwordConfirmation: WebEdit;
readonly remember: WebCheckBox;
readonly submit: WebButton;
}WebLogin
@webrad/runtime · class
/** A ready-to-use authentication template composed from the ordinary runtime controls. */
export class WebLogin extends WebComponent<HTMLElement> {
constructor(element: HTMLElement, options?: WebLoginOptions);
get configuration(): WebLoginConfiguration;
set configuration(value: WebLoginConfiguration);
get controls(): WebLoginControls;
/** The compiler/Designer supplies project style classes; configuration stores only stable IDs. */
get styleCatalog(): readonly RuntimeComponentStyle[];
set styleCatalog(value: readonly RuntimeComponentStyle[]);
get view(): WebLoginView;
set view(value: WebLoginView);
get busy(): boolean;
get open(): boolean;
get email(): string;
set email(value: string);
get remember(): boolean;
set remember(value: boolean);
get hasRecoveryToken(): boolean;
get enabled(): boolean;
set enabled(value: boolean);
get visible(): boolean;
set visible(value: boolean);
show(): void;
hide(): void;
close(): void;
showLogin(): void;
showRegistration(): void;
showRecovery(): void;
/** Claims a pending email link without exposing its token to authored code. */
openRecoveryLink(): boolean;
/** The token remains private and is cleared on completion, replacement, hiding or disposal. */
showPasswordReset(token: string): void;
/** Runs the current form through the shared project RestGo client. Never exposes tokens. */
submit(): Promise<void>;
dispose(): void;
}WebReportParameterType
@webrad/runtime · type
/** Browser-safe, versioned report document. Geometry is expressed in millimetres. */
export type WebReportParameterType = 'string' | 'number' | 'boolean' | 'date';WebReportParameterValue
@webrad/runtime · type
export type WebReportParameterValue = string | number | boolean | null;WebReportParameter
@webrad/runtime · interface
export interface WebReportParameter {
readonly name: string;
readonly type: WebReportParameterType;
readonly defaultValue: WebReportParameterValue;
}WebReportValueSource
@webrad/runtime · type
export type WebReportValueSource = {
readonly kind: 'static';
readonly value: string;
} | {
readonly kind: 'parameter';
readonly name: string;
} | {
readonly kind: 'field';
readonly apiClientId: string;
readonly operationId: string;
readonly path: string;
} | {
readonly kind: 'row';
readonly path: string;
} | {
readonly kind: 'system';
readonly value: 'pageNumber' | 'pageCount';
};WebReportElementBase
@webrad/runtime · interface
export interface WebReportElementBase {
readonly id: string;
readonly name: string;
readonly x: number;
readonly y: number;
readonly width: number;
readonly height: number;
/** Zero-based owning column when placed directly in a Repeater Header or Footer. */
readonly column?: number;
}WebReportTextElement
@webrad/runtime · interface
export interface WebReportTextElement extends WebReportElementBase {
readonly type: 'text';
readonly value: WebReportValueSource;
/** PDF point size (1/72 inch). */
readonly fontSize: number;
readonly color: string;
readonly bold: boolean;
readonly align: 'left' | 'center' | 'right';
}WebReportImageElement
@webrad/runtime · interface
export interface WebReportImageElement extends WebReportElementBase {
readonly type: 'image';
readonly value: WebReportValueSource;
readonly fit: 'contain';
}WebReportLineElement
@webrad/runtime · interface
export interface WebReportLineElement extends WebReportElementBase {
readonly type: 'line';
readonly color: string;
/** PDF point size. */
readonly strokeWidth: number;
}WebReportLeafElement
@webrad/runtime · type
export type WebReportLeafElement = WebReportTextElement | WebReportImageElement | WebReportLineElement;WebReportRepeaterSection
@webrad/runtime · interface
export interface WebReportRepeaterSection {
readonly height: number;
readonly elements: readonly WebReportElement[];
readonly columns?: number;
readonly columnGap?: number;
}WebReportRepeaterAppearance
@webrad/runtime · interface
export interface WebReportRepeaterAppearance {
readonly backgroundColor: string | null;
readonly borderColor: string;
/** Millimetres, matching the editor's geometry. */
readonly borderWidth: number;
readonly borderStyle: 'solid' | 'dashed';
readonly rowLines: boolean;
readonly columnLines: boolean;
readonly lineColor: string;
readonly lineWidth: number;
}WebReportRepeaterLayout
@webrad/runtime · interface
export interface WebReportRepeaterLayout {
readonly columns: number;
/** Rows per grid block; zero fits all records into the configured columns. */
readonly rows: number;
readonly columnGap: number;
readonly fill: 'rows' | 'columns';
}WebReportGroupAppearance
@webrad/runtime · interface
export interface WebReportGroupAppearance {
readonly backgroundColor: string | null;
readonly borderColor: string;
/** Millimetres, matching the editor's geometry. */
readonly borderWidth: number;
readonly borderStyle: 'solid' | 'dashed';
/** Millimetres; limited to half the rendered width/height when painting. */
readonly borderRadius: number;
}WebReportGroupElement
@webrad/runtime · interface
/** A single container; children inherit the enclosing record without introducing a data source. */
export interface WebReportGroupElement extends WebReportElementBase {
readonly type: 'group';
readonly children: readonly WebReportElement[];
readonly appearance?: WebReportGroupAppearance;
}WebReportRepeaterElement
@webrad/runtime · interface
export interface WebReportRepeaterElement extends WebReportElementBase {
readonly type: 'repeater';
readonly source: {
readonly apiClientId: string;
readonly operationId: string;
readonly listPath: string;
/** Nested repeaters can read a list relative to the enclosing record. */
readonly scope?: 'api' | 'row';
};
/** Space in millimetres between complete records. */
readonly gap: number;
readonly children: readonly WebReportElement[];
readonly header?: WebReportRepeaterSection;
readonly footer?: WebReportRepeaterSection;
readonly appearance?: WebReportRepeaterAppearance;
readonly layout?: WebReportRepeaterLayout;
}WebReportElement
@webrad/runtime · type
export type WebReportElement = WebReportLeafElement | WebReportRepeaterElement | WebReportGroupElement;WebReportContainerElement
@webrad/runtime · type
export type WebReportContainerElement = WebReportRepeaterElement | WebReportGroupElement;WebReportBandKind
@webrad/runtime · type
export type WebReportBandKind = 'title' | 'pageHeader' | 'detail' | 'pageFooter' | 'summary';WebReportBand
@webrad/runtime · interface
export interface WebReportBand {
readonly id: string;
readonly kind: WebReportBandKind;
readonly height: number;
readonly elements: readonly WebReportElement[];
}WebReportTemplate
@webrad/runtime · interface
export interface WebReportTemplate {
readonly schemaVersion: 1;
readonly name: string;
readonly paper: {
readonly size: 'A4' | 'Letter';
readonly orientation: 'portrait' | 'landscape';
readonly margins: {
readonly top: number;
readonly right: number;
readonly bottom: number;
readonly left: number;
};
};
readonly parameters: readonly WebReportParameter[];
readonly bands: readonly WebReportBand[];
}reportRepeaterLayout
@webrad/runtime · function
export function reportRepeaterLayout(element: WebReportRepeaterElement): WebReportRepeaterLayout;reportRepeaterAppearance
@webrad/runtime · function
export function reportRepeaterAppearance(element: WebReportRepeaterElement): WebReportRepeaterAppearance;reportRepeaterColumnWidth
@webrad/runtime · function
export function reportRepeaterColumnWidth(element: WebReportRepeaterElement): number;reportRepeaterSectionLayout
@webrad/runtime · function
export function reportRepeaterSectionLayout(section: WebReportRepeaterSection | undefined): Pick<WebReportRepeaterLayout, 'columns' | 'columnGap'>;reportRepeaterSectionColumnWidth
@webrad/runtime · function
export function reportRepeaterSectionColumnWidth(element: WebReportRepeaterElement, section: 'header' | 'footer'): number;reportRepeaterTemplateHeight
@webrad/runtime · function
export function reportRepeaterTemplateHeight(element: WebReportRepeaterElement): number;reportGroupAppearance
@webrad/runtime · function
export function reportGroupAppearance(element: WebReportGroupElement): WebReportGroupAppearance;reportElementChildren
@webrad/runtime · function
export function reportElementChildren(element: WebReportElement): readonly WebReportElement[];reportRepeaterElements
@webrad/runtime · function
/** All authored descendants, including sections, without introducing runtime globals. */
export function reportRepeaterElements(element: WebReportRepeaterElement): readonly WebReportElement[];createDefaultReportTemplate
@webrad/runtime · function
export function createDefaultReportTemplate(): WebReportTemplate;validateReportParameterValue
@webrad/runtime · function
/** Checks both authored defaults and programmatically supplied values. Dates use ISO text. */
export function validateReportParameterValue(parameter: WebReportParameter, value: unknown): WebReportParameterValue;reportPaperSize
@webrad/runtime · function
export function reportPaperSize(template: WebReportTemplate): {
readonly width: number;
readonly height: number;
};parseReportTemplate
@webrad/runtime · function
/** Parses into a fresh validated value; unknown properties never enter the runtime model. */
export function parseReportTemplate(value: unknown): WebReportTemplate;serializeReportTemplate
@webrad/runtime · function
export function serializeReportTemplate(template: WebReportTemplate): string;resolveReportPointer
@webrad/runtime · function
/** Own-property JSON Pointer traversal; a missing field displays an empty value. */
export function resolveReportPointer(value: unknown, path: string): unknown;WebReportPreviewMode
@webrad/runtime · type
export type WebReportPreviewMode = 'modal' | 'new-tab' | 'download';WebReportBuilderConfiguration
@webrad/runtime · interface
export interface WebReportBuilderConfiguration extends WebNonvisualComponentOptions {
readonly reportTemplate?: WebReportTemplate;
readonly template?: WebReportTemplate;
readonly previewMode?: WebReportPreviewMode;
readonly fileName?: string;
}WebReportGenerationOptions
@webrad/runtime · interface
export interface WebReportGenerationOptions {
readonly parameters?: Readonly<Record<string, WebReportParameterValue>>;
readonly previewMode?: WebReportPreviewMode;
readonly fileName?: string;
readonly signal?: AbortSignal;
}WebReportResult
@webrad/runtime · interface
export interface WebReportResult {
readonly blob: Blob;
readonly pageCount: number;
readonly fileName: string;
}WebReportEventHandler
@webrad/runtime · type
export type WebReportEventHandler<TSender, TDetail> = (sender: TSender, event: CustomEvent<TDetail>) => void | Promise<void>;WebReportParameterValues
@webrad/runtime · type
export type WebReportParameterValues = Record<string, WebReportParameterValue>;WebReportParameters
@webrad/runtime · class
/** Typed parameter overrides are independent of the immutable template defaults. */
export class WebReportParameters<TValues extends WebReportParameterValues = WebReportParameterValues> {
readonly template: () => WebReportTemplate;
constructor(template: () => WebReportTemplate);
Set<K extends keyof TValues & string>(name: K, value: TValues[K]): void;
/** Dynamic names for externally loaded templates; values still follow their declared types. */
SetValue(name: string, value: WebReportParameterValue): void;
Get<K extends keyof TValues & string>(name: K): TValues[K];
GetValue(name: string): WebReportParameterValue;
Clear(name?: keyof TValues & string): void;
get values(): Readonly<TValues>;
/** Retains only overrides whose names and declared types survive a template replacement. */
reconcile(previous: WebReportTemplate, next: WebReportTemplate): void;
}WebReportBuilder
@webrad/runtime · class
/** Nonvisual browser report service. It reads loaded ApiClient state and never executes requests. */
export class WebReportBuilder<TParameters extends WebReportParameterValues = WebReportParameterValues> extends WebNonvisualComponent {
readonly Parameters: WebReportParameters<TParameters>;
constructor(configuration?: WebReportBuilderConfiguration);
get template(): WebReportTemplate;
set template(value: WebReportTemplate);
get reportTemplate(): WebReportTemplate;
set reportTemplate(value: WebReportTemplate);
get previewMode(): WebReportPreviewMode;
set previewMode(value: WebReportPreviewMode);
get fileName(): string;
set fileName(value: string);
get busy(): boolean;
get OnGenerate(): WebReportEventHandler<this, WebReportGenerationOptions> | null;
set OnGenerate(value: WebReportEventHandler<this, WebReportGenerationOptions> | null);
get OnSuccess(): WebReportEventHandler<this, WebReportResult> | null;
set OnSuccess(value: WebReportEventHandler<this, WebReportResult> | null);
get OnError(): WebReportEventHandler<this, Error> | null;
set OnError(value: WebReportEventHandler<this, Error> | null);
/** Generated code binds each component by stable model ID and by its authored name. */
bindApiClient(key: string, client: WebApiClient): void;
SaveTemplate(): string;
LoadTemplate(value: WebReportTemplate | string | Blob): Promise<void>;
GeneratePDF(options?: WebReportGenerationOptions): Promise<WebReportResult>;
Generate(options?: WebReportGenerationOptions): Promise<WebReportResult>;
ClosePreview(): void;
dispose(): void;
}WebRepeatingGroupConfiguration
@webrad/runtime · interface
export interface WebRepeatingGroupConfiguration {
readonly schemaVersion: 1;
readonly apiClientId: string | null;
readonly operationId: string | null;
readonly listPath: string;
readonly rowHeightMode: 'fixed' | 'dynamic';
readonly fixedRowHeight: number;
readonly minRowHeight: number;
readonly maxRowHeight: number | null;
readonly gap: number;
readonly emptyMessage: string;
}WebRepeatingGroupCurrentRow
@webrad/runtime · interface
export interface WebRepeatingGroupCurrentRow<T = unknown> {
readonly index: number;
readonly value: T;
/** Resolves one concrete instance inside this row, including across awaits. */
component<C extends WebComponent>(templateId: string): C;
}WebRepeatingGroupRow
@webrad/runtime · interface
export interface WebRepeatingGroupRow<T = unknown> extends WebRepeatingGroupCurrentRow<T> {
readonly element: HTMLElement;
/** Physical IDs are unique per row and reusable placement. */
readonly components: ReadonlyMap<string, WebComponent>;
readonly componentIds: ReadonlyMap<string, string>;
readonly reusableInstances: readonly MountedReusableElementInstance[];
dispose(): void;
}WebRepeatingGroupRowRenderer
@webrad/runtime · type
export type WebRepeatingGroupRowRenderer = (index: number, value: unknown, configuration: WebRepeatingGroupConfiguration) => WebRepeatingGroupRow;WebRepeatingGroupRowListener
@webrad/runtime · type
export type WebRepeatingGroupRowListener<T = unknown> = (row: WebRepeatingGroupRow<T>) => void | (() => void);setRepeatingGroupReusableFactory
@webrad/runtime · function
/** Generated entry supplies authored reusable classes before requests execute. */
export function setRepeatingGroupReusableFactory(factory: WebRepeatingGroupRowListener): void;getRepeatingGroupCurrentRow
@webrad/runtime · function
/** Native events keep the row that owns the sender even after the row is removed. */
export function getRepeatingGroupCurrentRow(sender: HTMLElement | Event): WebRepeatingGroupCurrentRow | undefined;bindRepeatingGroupRowContext
@webrad/runtime · function
/** Renderer associates native sender elements without copying row data into DOM attributes. */
export function bindRepeatingGroupRowContext(element: HTMLElement, context: WebRepeatingGroupCurrentRow): void;normalizeWebRepeatingGroupConfiguration
@webrad/runtime · function
export function normalizeWebRepeatingGroupConfiguration(value: unknown): WebRepeatingGroupConfiguration;projectRepeatingGroupRowStyle
@webrad/runtime · function
/** Shared row shell geometry for the Designer and browser runtime. */
export function projectRepeatingGroupRowStyle(configuration: WebRepeatingGroupConfiguration, layout?: RuntimeComponentLayout, childrenBounds?: readonly {
readonly y: number;
readonly height: number;
}[]): Readonly<Record<string, string>>;readCurrentRowField
@webrad/runtime · function
/** Reads only own JSON fields; never follows object prototypes. */
export function readCurrentRowField(value: unknown, pointer: string): unknown;applyCurrentRowBindings
@webrad/runtime · function
/** A native typed setter remains responsible for its visual projection. */
export function applyCurrentRowBindings(component: WebComponent, bindings: unknown, value: unknown): void;WebRepeatingGroup
@webrad/runtime · class
/** One responsive template mounted independently for every response-list item. */
export class WebRepeatingGroup<T = unknown> extends WebComponent<HTMLDivElement> {
constructor(element: HTMLElement);
get repeatingGroupConfig(): WebRepeatingGroupConfiguration;
set repeatingGroupConfig(value: WebRepeatingGroupConfiguration);
get rows(): readonly T[];
set rows(values: readonly T[]);
get rowCount(): number;
getRow(index: number): WebRepeatingGroupRow<T>;
/** The Designer uses one editable host without serializing sampled row data. */
getTemplateHost(): HTMLElement;
/** Runtime renderer owns creation; authored code only supplies values. */
configureRowTemplate(renderer: WebRepeatingGroupRowRenderer): void;
/** Observes completed API results; it never executes an operation itself. */
bindApiClient(apiClient: WebApiClient | null): void;
subscribeRows(listener: WebRepeatingGroupRowListener<T>): () => void;
dispose(): void;
}WEB_CHART_TYPES
@webrad/runtime · variable
/** Browser-only chart contracts, shared by runtime and Designer projections. */
export const WEB_CHART_TYPES: readonly [
"doughnut",
"pie",
"bar",
"horizontalBar",
"line",
"area",
"radar",
"polarArea"
];WebChartType
@webrad/runtime · type
export type WebChartType = (typeof WEB_CHART_TYPES)[number];WebChartFontFamily
@webrad/runtime · type
export type WebChartFontFamily = 'inherit' | 'roboto' | 'open-sans' | 'jetbrains-mono' | 'inter' | 'lato' | 'montserrat' | 'poppins' | 'nunito';WebChartSeriesConfiguration
@webrad/runtime · interface
export interface WebChartSeriesConfiguration {
readonly id: string;
readonly name: string;
readonly color: string;
readonly apiClientId: string | null;
readonly operationId: string | null;
readonly listPath: string;
readonly labelField: string;
readonly valueField: string;
}WebChartsConfiguration
@webrad/runtime · interface
export interface WebChartsConfiguration {
readonly schemaVersion: 1;
readonly type: WebChartType;
readonly title: string;
readonly subtitle: string;
readonly fontFamily?: WebChartFontFamily;
readonly legendFontFamily?: WebChartFontFamily;
readonly textColor?: string | null;
readonly titleColor?: string | null;
readonly subtitleColor?: string | null;
readonly legendColor?: string | null;
readonly titleIcon?: LucideIconName | null;
readonly showLegend: boolean;
readonly legendPosition: 'bottom' | 'right';
readonly showGrid: boolean;
readonly showLabels: boolean;
readonly smooth: boolean;
readonly stacked: boolean;
readonly innerRadius: number;
readonly valuePrefix: string;
readonly valueSuffix: string;
readonly decimalPlaces: number;
readonly emptyText: string;
readonly series: readonly WebChartSeriesConfiguration[];
}WebChartPoint
@webrad/runtime · interface
export interface WebChartPoint {
readonly label: string;
readonly value: number;
}WebChartSeriesData
@webrad/runtime · interface
export interface WebChartSeriesData {
readonly id: string;
readonly name: string;
readonly color: string;
readonly points: readonly WebChartPoint[];
}WebChartPointEventDetail
@webrad/runtime · interface
/** The original numeric value and category of one activated chart mark. */
export interface WebChartPointEventDetail {
readonly label: string;
readonly value: number;
readonly seriesId: string;
readonly seriesName: string;
readonly index: number;
}WEB_CHART_COLORS
@webrad/runtime · variable
export const WEB_CHART_COLORS: readonly [
"#6366f1",
"#14b8a6",
"#f59e0b",
"#ec4899",
"#38bdf8"
];webChartColor
@webrad/runtime · function
export function webChartColor(value: unknown, index?: number): string;webChartSliceColor
@webrad/runtime · function
/** Distinct shades keep a circular series tied to its authored base color. */
export function webChartSliceColor(baseColor: string, index: number): string;normalizeWebChartsConfiguration
@webrad/runtime · function
export function normalizeWebChartsConfiguration(value: unknown): WebChartsConfiguration;webChartPointer
@webrad/runtime · function
/** Invalid pointers and missing properties never select a different value. */
export function webChartPointer(value: unknown, pointer: string): unknown;webChartPoints
@webrad/runtime · function
export function webChartPoints(rows: readonly unknown[], configuration: WebChartSeriesConfiguration): readonly WebChartPoint[];formatWebChartValue
@webrad/runtime · function
export function formatWebChartValue(value: number, configuration: WebChartsConfiguration): string;freezeWebChartData
@webrad/runtime · function
export function freezeWebChartData(value: readonly WebChartSeriesData[]): readonly WebChartSeriesData[];WebChartsRenderOptions
@webrad/runtime · interface
export interface WebChartsRenderOptions {
readonly interactive?: boolean;
readonly width?: number;
readonly height?: number;
readonly onPointClick?: (detail: WebChartPointEventDetail) => void;
}renderChartsSvg
@webrad/runtime · function
/** Shared SVG projection. It creates no subscriptions, observers or API requests. */
export function renderChartsSvg(document: Document, configuration: WebChartsConfiguration, data: readonly WebChartSeriesData[], options?: WebChartsRenderOptions): SVGSVGElement;WebChartPointEventHandler
@webrad/runtime · type
export type WebChartPointEventHandler<TSender = WebCharts> = (sender: TSender, event: CustomEvent<WebChartPointEventDetail>) => void | Promise<void>;WebCharts
@webrad/runtime · class
/** Responsive, accessible SVG charts whose API bindings observe completed requests. */
export class WebCharts extends WebComponent {
constructor(element: HTMLElement);
/** Persisted chart appearance and up to five declarative API series. */
get chartsConfig(): WebChartsConfiguration;
set chartsConfig(value: WebChartsConfiguration);
/** Current transient series. Values remain numeric and never enter the Project Model. */
get data(): readonly WebChartSeriesData[];
set data(value: readonly WebChartSeriesData[]);
get selectedLabel(): string | null;
get selectedValue(): number | null;
get selectedSeriesId(): string | null;
set onPointClick(handler: WebChartPointEventHandler<this> | null);
/** Clears displayed points; an existing binding can refresh after the next successful request. */
clear(): void;
/**
* Binds one configured series to a named API operation by stable operation ID.
* Reads existing successful data and subsequent results; never executes a request.
*/
bindApiClient(apiClient: WebApiClient, operationId: string, seriesId: string): () => void;
dispose(): void;
}RestGoRuntimeConfiguration
@webrad/runtime · interface
export interface RestGoRuntimeConfiguration {
readonly enabled: boolean;
readonly baseUrl: string;
readonly apiToken?: string;
readonly apiVersion: number;
readonly defaultDatabase: string;
readonly persistSession: boolean;
readonly sessionStorage: 'local' | 'session' | 'memory';
readonly storageKey: string;
}RestGoNotConfiguredError
@webrad/runtime · class
export class RestGoNotConfiguredError extends Error {
constructor();
}configureRestGo
@webrad/runtime · function
export function configureRestGo(configuration: RestGoRuntimeConfiguration): import('@webrad/restgo-sdk').RestGoClient | null;getRestGoClient
@webrad/runtime · function
export function getRestGoClient(): import('@webrad/restgo-sdk').RestGoClient;RestGO
@webrad/runtime · variable
export const RestGO: import('@webrad/restgo-sdk').RestGoClient;WebComponentEventHandler
@webrad/runtime · type
/** Handler used by every WebRAD component event. */
export type WebComponentEventHandler<TSender = WebComponent> = (sender: TSender, event: Event) => void | Promise<void>;runtimeEventName
@webrad/runtime · function
/** Converts a WebRAD event name, such as OnClick, to its browser event name. */
export function runtimeEventName(eventName: string): string;WebNonvisualComponentOptions
@webrad/runtime · interface
export interface WebNonvisualComponentOptions {
readonly id?: string;
readonly name?: string;
}WebNonvisualComponent
@webrad/runtime · class
/** Browser-safe identity shared by services that do not own a DOM element. */
export class WebNonvisualComponent {
constructor(options?: WebNonvisualComponentOptions);
readonly id: string;
readonly name: string;
bindEvent(eventName: string, handler: WebComponentEventHandler<this> | null): () => void;
emit(eventName: string, detail?: unknown): boolean;
dispose(): void;
}WEB_DATA_GRID_CELL_KINDS
@webrad/runtime · variable
export const WEB_DATA_GRID_CELL_KINDS: readonly [
'text',
'image',
'button',
'checkbox',
'toggle'
];WebDataGridCellKind
@webrad/runtime · type
export type WebDataGridCellKind = (typeof WEB_DATA_GRID_CELL_KINDS)[number];WEB_DATA_GRID_COLUMN_WIDTH_MODES
@webrad/runtime · variable
export const WEB_DATA_GRID_COLUMN_WIDTH_MODES: readonly [
'fixed',
'dynamic'
];WebDataGridColumnWidthMode
@webrad/runtime · type
export type WebDataGridColumnWidthMode = (typeof WEB_DATA_GRID_COLUMN_WIDTH_MODES)[number];WEB_DATA_GRID_ROW_HEIGHT_MODES
@webrad/runtime · variable
export const WEB_DATA_GRID_ROW_HEIGHT_MODES: readonly [
'fixed',
'dynamic'
];WebDataGridRowHeightMode
@webrad/runtime · type
export type WebDataGridRowHeightMode = (typeof WEB_DATA_GRID_ROW_HEIGHT_MODES)[number];WEB_DATA_GRID_HORIZONTAL_ALIGNMENTS
@webrad/runtime · variable
export const WEB_DATA_GRID_HORIZONTAL_ALIGNMENTS: readonly [
'start',
'center',
'end'
];WebDataGridHorizontalAlignment
@webrad/runtime · type
export type WebDataGridHorizontalAlignment = (typeof WEB_DATA_GRID_HORIZONTAL_ALIGNMENTS)[number];WebDataGridColumn
@webrad/runtime · interface
export interface WebDataGridColumn {
readonly id: string;
readonly header: string;
readonly fieldPath: string;
readonly cellKind: WebDataGridCellKind;
readonly fixedCaption: string;
readonly buttonIcon: WebButtonIcon | null;
readonly footer: string;
readonly widthMode: WebDataGridColumnWidthMode;
readonly width: number;
readonly minWidth: number;
readonly maxWidth: number | null;
readonly flex: number;
readonly headerAlign: WebDataGridHorizontalAlignment;
readonly cellAlign: WebDataGridHorizontalAlignment;
}WebDataGridConfiguration
@webrad/runtime · interface
export interface WebDataGridConfiguration {
readonly schemaVersion: number;
readonly apiClientId: string | null;
readonly operationId: string | null;
readonly listPath: string;
readonly columnCount: number;
readonly showHeader: boolean;
readonly stickyHeader: boolean;
readonly showFooter: boolean;
readonly stickyFooter: boolean;
readonly rowHeightMode: WebDataGridRowHeightMode;
readonly fixedRowHeight: number;
readonly minRowHeight: number;
readonly maxRowHeight: number | null;
readonly cellPaddingHorizontal: number;
readonly cellPaddingVertical: number;
readonly wrapText: boolean;
readonly stripedRows: boolean;
readonly showHorizontalLines: boolean;
readonly showVerticalLines: boolean;
readonly emptyMessage: string;
readonly columns: readonly WebDataGridColumn[];
}WebDataGridRowValues
@webrad/runtime · type
export type WebDataGridRowValues<TRow = unknown> = Readonly<TRow> & {
<T = unknown>(fieldNameOrPath: string): T | undefined;
};WebDataGridCellEventDetail
@webrad/runtime · interface
export interface WebDataGridCellEventDetail<TRow = unknown> {
readonly rowIndex: number;
readonly columnIndex: number;
readonly row: TRow;
readonly column: WebDataGridColumn;
readonly value: unknown;
readonly getValue: WebDataGridRowValues<TRow>;
}normalizeWebDataGridConfiguration
@webrad/runtime · function
export function normalizeWebDataGridConfiguration(value: unknown): WebDataGridConfiguration;WebDataGrid
@webrad/runtime · class
export class WebDataGrid extends WebComponent<HTMLDivElement> {
constructor(element: HTMLElement);
configuration: WebDataGridConfiguration;
dataGridConfig: WebDataGridConfiguration;
bindApiClient(apiClient: WebApiClient | null): void;
}WebCurrentRowBinding
@webrad/runtime · interface
/** Base browser-side wrapper shared by every visual WebRAD component. */
export interface WebCurrentRowBinding {
readonly property: string;
readonly fieldPath: string;
}WebComponent
@webrad/runtime · class
export class WebComponent<TElement extends HTMLElement = HTMLElement> {
currentRowBindings: readonly WebCurrentRowBinding[];
readonly element: TElement;
constructor(element: TElement);
readonly id: string;
readonly name: string;
visible: boolean;
collapseWhenHidden: boolean;
enabled: boolean;
x: number;
y: number;
width: number;
height: number;
/** Outer spacing on all four sides, in pixels. */
margin: number;
marginTop: number;
marginRight: number;
marginBottom: number;
marginLeft: number;
alignSelf: RuntimeLayoutAlignSelf;
tabIndex: number;
backgroundColor: string;
color: string;
borderColor: string;
focus(options?: FocusOptions): void;
show(): void;
hide(): void;
bindEvent(eventName: string, handler: WebComponentEventHandler<this> | null): () => void;
emit(eventName: string, detail?: unknown): boolean;
dispose(): void;
}WebPanelBackgroundSize
@webrad/runtime · type
/** Visual container used to group controls. */
export type WebPanelBackgroundSize = 'cover' | 'contain' | 'auto' | 'stretch';WebPanelBackgroundPosition
@webrad/runtime · type
export type WebPanelBackgroundPosition = 'center' | 'top' | 'bottom' | 'left' | 'right' | 'left top' | 'right top' | 'left bottom' | 'right bottom';WebPanelBackgroundRepeat
@webrad/runtime · type
export type WebPanelBackgroundRepeat = 'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y';PANEL_BACKGROUND_SIZES
@webrad/runtime · variable
export const PANEL_BACKGROUND_SIZES: readonly [
'cover',
'contain',
'auto',
'stretch'
];PANEL_BACKGROUND_POSITIONS
@webrad/runtime · variable
export const PANEL_BACKGROUND_POSITIONS: readonly [
'center',
'top',
'bottom',
'left',
'right',
'left top',
'right top',
'left bottom',
'right bottom'
];PANEL_BACKGROUND_REPEATS
@webrad/runtime · variable
export const PANEL_BACKGROUND_REPEATS: readonly [
'no-repeat',
'repeat',
'repeat-x',
'repeat-y'
];WebPanel
@webrad/runtime · class
export class WebPanel extends WebComponent<HTMLElement> {
aspectRatio: WebAspectRatio;
floatingAlignment: WebPanelFloatingAlignment;
placement: 'in-flow' | 'floating';
floatingHorizontalAnchor: 'left' | 'center' | 'right';
floatingVerticalAnchor: 'top' | 'center' | 'bottom';
floatingZIndex: number;
caption: string;
progressEnabled: boolean;
progressValue: number;
readonly progressVisible: boolean;
backgroundImage: string;
backgroundSize: WebPanelBackgroundSize;
backgroundPosition: WebPanelBackgroundPosition;
backgroundRepeat: WebPanelBackgroundRepeat;
}WebGroup
@webrad/runtime · class
export class WebGroup extends WebPanel {
}WebPopup
@webrad/runtime · class
/** Browser-native floating child container that can be shown or closed from page code. */
export class WebPopup extends WebComponent<HTMLDialogElement> {
constructor(element: HTMLElement);
modal: boolean;
readonly open: boolean;
returnValue: string;
show(): void;
hide(): void;
close(returnValue?: string): void;
}WebReusableElement
@webrad/runtime · class
/** One instance of a shared reusable component definition. */
export class WebReusableElement extends WebPanel {
reusableElementId: string;
}ClosePageOptions
@webrad/runtime · interface
export interface ClosePageOptions {
/** Remove the page element from the document instead of hiding it. */
readonly remove?: boolean;
}RuntimeContainerLayoutMode
@webrad/runtime · type
export type RuntimeContainerLayoutMode = 'fixed' | 'align-to-parent' | 'row' | 'column';RuntimeLayoutItemSizingMode
@webrad/runtime · type
export type RuntimeLayoutItemSizingMode = 'fixed' | 'stretch' | 'fit-content';RuntimeLayoutAnchor
@webrad/runtime · type
export type RuntimeLayoutAnchor = 'start' | 'center' | 'end' | 'stretch';RuntimeLayoutJustifyContent
@webrad/runtime · type
export type RuntimeLayoutJustifyContent = 'start' | 'center' | 'end' | 'space-between' | 'space-around';RuntimeLayoutAlignItems
@webrad/runtime · type
export type RuntimeLayoutAlignItems = 'start' | 'center' | 'end' | 'stretch';RuntimeLayoutAlignSelf
@webrad/runtime · type
export type RuntimeLayoutAlignSelf = 'auto' | RuntimeLayoutAlignItems;RuntimeContainerLayout
@webrad/runtime · interface
export interface RuntimeContainerLayout {
readonly mode: RuntimeContainerLayoutMode;
readonly paddingTop: number;
readonly paddingRight: number;
readonly paddingBottom: number;
readonly paddingLeft: number;
readonly gap: number;
readonly wrap: boolean;
readonly justifyContent: RuntimeLayoutJustifyContent;
readonly alignItems: RuntimeLayoutAlignItems;
}RuntimeLayoutItem
@webrad/runtime · interface
export interface RuntimeLayoutItem {
readonly width: RuntimeLayoutItemSizingMode;
readonly height: RuntimeLayoutItemSizingMode;
readonly minWidth: number;
readonly maxWidth: number | null;
readonly minHeight: number;
readonly maxHeight: number | null;
readonly grow: number;
readonly shrink: boolean;
readonly alignSelf?: RuntimeLayoutAlignSelf;
readonly horizontalAnchor: RuntimeLayoutAnchor;
readonly verticalAnchor: RuntimeLayoutAnchor;
readonly left: number;
readonly right: number;
readonly top: number;
readonly bottom: number;
}RuntimeComponentLayout
@webrad/runtime · interface
export interface RuntimeComponentLayout {
readonly container: RuntimeContainerLayout;
readonly item: RuntimeLayoutItem;
}RuntimeLayoutBounds
@webrad/runtime · interface
export interface RuntimeLayoutBounds {
readonly x: number;
readonly y: number;
readonly width: number;
readonly height: number;
}RuntimeLayoutNode
@webrad/runtime · interface
/** Structural node subset accepted by the browser-safe layout projector. */
export interface RuntimeLayoutNode {
readonly type?: string;
readonly bounds: RuntimeLayoutBounds;
readonly children?: readonly string[];
readonly props?: Readonly<Record<string, unknown>>;
readonly layout?: RuntimeComponentLayout;
}RuntimeLayoutProjection
@webrad/runtime · interface
export interface RuntimeLayoutProjection {
readonly container: Readonly<Record<string, string>>;
readonly item: Readonly<Record<string, string>>;
}ApplyRuntimeLayoutOptions
@webrad/runtime · interface
export interface ApplyRuntimeLayoutOptions {
readonly isPageRoot?: boolean;
readonly isReusableRoot?: boolean;
readonly reusableRootFitContent?: {
readonly width: boolean;
readonly height: boolean;
readonly hasMaxWidth: boolean;
readonly hasMaxHeight: boolean;
};
}RuntimeFitContentSize
@webrad/runtime · interface
export interface RuntimeFitContentSize {
readonly width?: number;
readonly height?: number;
}RuntimeFitContentMeasurementOptions
@webrad/runtime · interface
export interface RuntimeFitContentMeasurementOptions {
readonly scale?: number;
readonly isLayoutChild?: (child: HTMLElement) => boolean;
}RuntimeFitContentBinding
@webrad/runtime · interface
export interface RuntimeFitContentBinding {
refresh(): void;
dispose(): void;
}resolveRuntimeContainerLayout
@webrad/runtime · function
export function resolveRuntimeContainerLayout(layout: RuntimeComponentLayout | undefined): RuntimeContainerLayout;isFloatingLayoutNode
@webrad/runtime · function
export function isFloatingLayoutNode(node: RuntimeLayoutNode): boolean;WebPanelFloatingAlignment
@webrad/runtime · type
export type WebPanelFloatingAlignment = 'none' | 'top' | 'bottom' | 'left' | 'right' | 'client';getFloatingPanelAlignment
@webrad/runtime · function
export function getFloatingPanelAlignment(node: Pick<RuntimeLayoutNode, 'type' | 'props'>): WebPanelFloatingAlignment;projectFloatingPanelBounds
@webrad/runtime · function
export function projectFloatingPanelBounds(node: RuntimeLayoutNode, pageSize: Pick<RuntimeLayoutBounds, 'width' | 'height'>): RuntimeLayoutBounds | undefined;projectRuntimeLayout
@webrad/runtime · function
export function projectRuntimeLayout(node: RuntimeLayoutNode, parentContainer?: RuntimeContainerLayout): RuntimeLayoutProjection;setRuntimeLayoutAspectRatio
@webrad/runtime · function
export function setRuntimeLayoutAspectRatio(element: HTMLElement, ratio: WebAspectRatio): void;WEB_ASPECT_RATIOS
@webrad/runtime · variable
export const WEB_ASPECT_RATIOS: readonly [
'none',
'1:1',
'4:3',
'3:4',
'16:9',
'9:16'
];WebAspectRatio
@webrad/runtime · type
export type WebAspectRatio = (typeof WEB_ASPECT_RATIOS)[number];normalizeWebAspectRatio
@webrad/runtime · function
export function normalizeWebAspectRatio(value: unknown): WebAspectRatio;getRuntimeLayoutAspectRatio
@webrad/runtime · function
export function getRuntimeLayoutAspectRatio(element: HTMLElement): WebAspectRatio;RuntimeLayoutNodeProjector
@webrad/runtime · type
export type RuntimeLayoutNodeProjector = (node: RuntimeLayoutNode) => RuntimeLayoutNode;setRuntimeLayoutProjection
@webrad/runtime · function
export function setRuntimeLayoutProjection(element: HTMLElement, projector: RuntimeLayoutNodeProjector | null): boolean;measureRuntimeFitContentSize
@webrad/runtime · function
export function measureRuntimeFitContentSize(target: HTMLElement, contentHost: HTMLElement, layout: RuntimeComponentLayout | undefined, options?: RuntimeFitContentMeasurementOptions): RuntimeFitContentSize;bindRuntimeFitContent
@webrad/runtime · function
export function bindRuntimeFitContent(target: HTMLElement, contentHost: HTMLElement, layout: RuntimeComponentLayout | undefined, options?: RuntimeFitContentMeasurementOptions): RuntimeFitContentBinding;applyRuntimeContainerLayout
@webrad/runtime · function
export function applyRuntimeContainerLayout(element: HTMLElement, node: RuntimeLayoutNode): RuntimeLayoutProjection;applyRuntimeLayout
@webrad/runtime · function
export function applyRuntimeLayout(element: HTMLElement, node: RuntimeLayoutNode, parentContainer?: RuntimeContainerLayout, options?: ApplyRuntimeLayoutOptions): RuntimeLayoutProjection;WebPageLayoutMode
@webrad/runtime · type
export type WebPageLayoutMode = RuntimeContainerLayoutMode;WebComponentScope
@webrad/runtime · class
/** Shared event-binding and component lookup surface for authored scopes. */
export class WebComponentScope extends WebPanel {
constructor(element: HTMLElement, components?: ReadonlyMap<string, WebComponent>);
requireComponentElement(componentId: string): HTMLElement;
dispose(): void;
}WebReusableElementInstance
@webrad/runtime · class
/** One isolated authored-code scope for a mounted reusable placement. */
export class WebReusableElementInstance extends WebComponentScope {
constructor(element: HTMLElement, instanceId: string, components: ReadonlyMap<string, WebComponent>, componentIds: ReadonlyMap<string, string>);
readonly instanceId: string;
/** User-facing name of the page that contains this reusable placement. */
readonly pageName: string;
componentId(templateComponentId: string): string;
}WebPageLoginEventDetail
@webrad/runtime · interface
/** Current user delivered when a shown page receives an authenticated session. */
export interface WebPageLoginEventDetail {
readonly user: import('@webrad/restgo-sdk').RestGoUser;
readonly restored: boolean;
}WebPageLogoutEventDetail
@webrad/runtime · interface
export interface WebPageLogoutEventDetail {
readonly user: import('@webrad/restgo-sdk').RestGoUser;
}WebPage
@webrad/runtime · class
/** Base class for generated and user-authored pages. */
export class WebPage<Parameters extends object = object> extends WebComponentScope {
/** Browser tab title; blank values retain the application's original title. */
browserTitle: string;
readonly routePath: string;
readonly params: Readonly<Parameters>;
layoutMode: WebPageLayoutMode;
show(): void;
close(options?: ClosePageOptions): void;
}WebLabelTextWrap
@webrad/runtime · type
export type WebLabelTextWrap = 'none' | 'word' | 'break-word' | 'character';WebLabel
@webrad/runtime · class
export class WebLabel extends WebComponent<HTMLElement> {
textWrap: WebLabelTextWrap;
caption: string;
text: string;
autoSize: boolean;
}WebTextArea
@webrad/runtime · class
export class WebTextArea extends WebComponent<HTMLTextAreaElement> {
constructor(element: HTMLElement);
value: string;
placeholder: string;
readOnly: boolean;
rows: number;
spellCheck: boolean;
clear(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
set onInput(handler: WebComponentEventHandler<this> | null);
}WebButtonIcon
@webrad/runtime · type
export type WebButtonIcon = 'add' | 'chevron-down' | 'chevron-right' | 'close' | 'delete' | 'folder-open' | 'info' | 'layers' | 'lightbulb' | 'palette' | 'page' | 'play' | 'redo' | 'save' | 'search' | 'settings' | 'style' | 'undo' | 'arrow-left' | 'arrow-right' | 'arrow-up' | 'arrow-down' | 'chevron-left' | 'chevron-up' | 'chevrons-left' | 'chevrons-right' | 'chevrons-up' | 'chevrons-down' | 'menu' | 'more-horizontal' | 'more-vertical' | 'home' | 'external-link' | 'check' | 'check-circle' | 'check-square' | 'minus' | 'minus-circle' | 'plus-circle' | 'edit' | 'copy' | 'cut' | 'clipboard' | 'download' | 'upload' | 'refresh' | 'link' | 'unlink' | 'share' | 'send' | 'printer' | 'archive' | 'eye' | 'eye-off' | 'lock' | 'unlock' | 'filter' | 'sort-asc' | 'sort-desc' | 'warning' | 'alert-circle' | 'help-circle' | 'bell' | 'bookmark' | 'flag' | 'heart' | 'star' | 'folder' | 'file' | 'file-plus' | 'file-text' | 'text' | 'image' | 'camera' | 'database' | 'table' | 'list' | 'grid' | 'chart-bar' | 'chart-line' | 'code' | 'terminal' | 'cloud' | 'upload-cloud' | 'download-cloud' | 'user' | 'users' | 'user-plus' | 'mail' | 'phone' | 'globe' | 'map-pin' | 'calendar' | 'clock' | 'pause' | 'stop' | 'skip-back' | 'skip-forward' | 'volume-2' | 'volume-x' | 'video' | 'login' | 'logout' | 'sign-in' | 'sign-out' | 'door-in' | 'door-out' | 'door-open' | 'door-closed' | 'key' | 'key-round' | 'shield' | 'shield-check' | 'shield-alert' | 'shield-x' | 'fingerprint' | 'badge-check' | 'id-card' | 'user-check' | 'user-x' | 'user-minus' | 'user-round' | 'contact' | 'accessibility' | 'password' | 'at-sign' | 'scan-face' | 'circle' | 'circle-dot' | 'square' | 'move' | 'maximize' | 'minimize' | 'expand' | 'shrink' | 'fullscreen' | 'panel-left' | 'panel-right' | 'panel-top' | 'panel-bottom' | 'sidebar-left' | 'sidebar-right' | 'layout' | 'columns' | 'rows' | 'align-left' | 'align-center' | 'align-right' | 'align-justify' | 'rotate-cw' | 'rotate-ccw' | 'repeat' | 'folder-plus' | 'folder-minus' | 'folder-x' | 'folder-search' | 'folder-check' | 'folder-lock' | 'file-minus' | 'file-x' | 'file-check' | 'file-code' | 'file-image' | 'file-video' | 'file-audio' | 'file-archive' | 'file-lock' | 'file-search' | 'file-copy' | 'files' | 'hard-drive' | 'server' | 'cpu' | 'monitor' | 'laptop' | 'smartphone' | 'tablet' | 'wifi' | 'bluetooth' | 'message-circle' | 'message-square' | 'messages-square' | 'message-plus' | 'message-x' | 'inbox' | 'outbox' | 'reply' | 'reply-all' | 'forward-mail' | 'paperclip' | 'attachment' | 'rss' | 'megaphone' | 'microphone' | 'microphone-off' | 'headset' | 'radio' | 'sms' | 'cart' | 'shopping-bag' | 'credit-card' | 'receipt' | 'wallet' | 'dollar-sign' | 'percent' | 'tags' | 'gift' | 'truck' | 'building' | 'briefcase' | 'target' | 'trophy' | 'toggle-right';WebButton
@webrad/runtime · class
export class WebButton extends WebComponent<HTMLButtonElement> {
constructor(element: HTMLElement);
caption: string;
icon: WebButtonIcon;
click(): void;
set onClick(handler: WebComponentEventHandler<this> | null);
}WebFileUploadOptions
@webrad/runtime · interface
export interface WebFileUploadOptions {
readonly isPublic?: boolean;
readonly name?: string;
readonly signal?: AbortSignal;
}WebFileUploadConfiguration
@webrad/runtime · interface
export interface WebFileUploadConfiguration extends WebNonvisualComponentOptions {
readonly accept?: string;
readonly isPublic?: boolean;
readonly enabled?: boolean;
}WebFileUploadSelection
@webrad/runtime · interface
export interface WebFileUploadSelection {
readonly name: string;
readonly path: string | null;
readonly size: number;
readonly extension: string;
}WebFileUploadResult
@webrad/runtime · interface
export interface WebFileUploadResult extends Readonly<import('@webrad/restgo-sdk').RestGoStoredFile> {
readonly url: string;
}WebFileUploadChangeEventDetail
@webrad/runtime · type
export type WebFileUploadChangeEventDetail = WebFileUploadSelection | null;WebFileUploadProgressEventDetail
@webrad/runtime · type
export type WebFileUploadProgressEventDetail = import('@webrad/restgo-sdk').RestGoUploadProgress;WebFileUploadCompleteEventDetail
@webrad/runtime · interface
export interface WebFileUploadCompleteEventDetail {
readonly result: WebFileUploadResult | null;
readonly error: Error | null;
}WebFileUpload
@webrad/runtime · class
/** Selects a local file and uploads it through the configured RestGO client. */
export class WebFileUpload extends WebNonvisualComponent {
constructor(configuration?: WebFileUploadConfiguration);
accept: string;
isPublic: boolean;
enabled: boolean;
readonly selectedFile: File | null;
readonly selection: WebFileUploadSelection | null;
readonly fileName: string;
readonly uploading: boolean;
readonly progress: number | null;
readonly result: WebFileUploadResult | null;
readonly lastError: Error | null;
OpenFile(): Promise<WebFileUploadSelection | null>;
SendToRestGO(options?: WebFileUploadOptions): Promise<WebFileUploadResult>;
Clear(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
set onSuccess(handler: WebComponentEventHandler<this> | null);
set onError(handler: WebComponentEventHandler<this> | null);
set onComplete(handler: WebComponentEventHandler<this> | null);
set onProgress(handler: WebComponentEventHandler<this> | null);
}WebToggle
@webrad/runtime · class
export class WebToggle extends WebComponent<HTMLButtonElement> {
constructor(element: HTMLElement);
checked: boolean;
click(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
set onClick(handler: WebComponentEventHandler<this> | null);
}WebProgressBarFormat
@webrad/runtime · type
export type WebProgressBarFormat = 'bars' | 'dunnet' | 'circus';WebProgressBar
@webrad/runtime · class
export class WebProgressBar extends WebComponent<HTMLElement> {
constructor(element: HTMLElement);
value: number;
min: number;
max: number;
format: WebProgressBarFormat;
showValue: boolean;
readonly percentage: number;
setRange(min: number, max: number): void;
increment(amount?: number): void;
reset(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
}WebCheckBox
@webrad/runtime · class
export class WebCheckBox extends WebComponent<HTMLElement> {
constructor(element: HTMLElement);
checked: boolean;
caption: string;
enabled: boolean;
set onChange(handler: WebComponentEventHandler<this> | null);
}WebSelectItem
@webrad/runtime · interface
export interface WebSelectItem {
readonly value: string;
readonly label: string;
readonly disabled?: boolean;
}WebComboBoxConfiguration
@webrad/runtime · interface
export interface WebComboBoxConfiguration {
readonly schemaVersion: 1;
readonly apiClientId: string | null;
readonly operationId: string | null;
readonly listPath: string;
readonly displayField: string;
readonly keyField: string;
}WebComboBox
@webrad/runtime · class
export class WebComboBox extends WebComponent<HTMLSelectElement> {
constructor(element: HTMLElement);
value: string;
selectedIndex: number;
get values(): readonly string[];
set values(values: readonly string[]);
get items(): readonly WebSelectItem[];
set items(items: readonly (string | WebSelectItem)[]);
comboBoxConfig: WebComboBoxConfiguration | null;
bindApiClient(apiClient: WebApiClient | null): void;
override dispose(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
}WebImage
@webrad/runtime · class
export class WebImage extends WebComponent<HTMLImageElement> {
constructor(element: HTMLElement);
get src(): string;
set src(value: string | null);
placeholder: WebImagePlaceholder;
alt: string;
objectFit: WebImageObjectFit;
}WebImageObjectFit
@webrad/runtime · type
export type WebImageObjectFit = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';WebImagePlaceholder
@webrad/runtime · type
export type WebImagePlaceholder = 'image' | 'user';WebListBox
@webrad/runtime · class
export class WebListBox extends WebComponent<HTMLSelectElement> {
constructor(element: HTMLElement);
value: string;
selectedIndex: number;
multiple: boolean;
get items(): readonly WebSelectItem[];
set items(items: readonly (string | WebSelectItem)[]);
selectedValues: readonly string[];
set onChange(handler: WebComponentEventHandler<this> | null);
}PageParameterValue
@webrad/runtime · type
export type PageParameterValue = string | number | boolean;PageParameterValues
@webrad/runtime · type
export type PageParameterValues = Readonly<Record<string, PageParameterValue | undefined>>;PageParameterDefinition
@webrad/runtime · interface
export interface PageParameterDefinition {
readonly name: string;
readonly type: 'string' | 'number' | 'boolean';
readonly required: boolean;
readonly defaultValue?: PageParameterValue;
}PageParametersChangedEventDetail
@webrad/runtime · interface
export interface PageParametersChangedEventDetail {
readonly previous: PageParameterValues;
readonly params: PageParameterValues;
}PageParameterError
@webrad/runtime · class
export class PageParameterError extends Error {
readonly pageName: string;
readonly parameterName: string;
constructor(pageName: string, parameterName: string, reason: string);
}WebRadPageParameters
@webrad/runtime · interface
export interface WebRadPageParameters {
}PageDestination
@webrad/runtime · type
export type PageDestination = keyof WebRadPageParameters | (string & {}) | URL;Message
@webrad/runtime · function
/** Shows a browser message to the application user. */
export function Message(message: unknown): void;Confirm
@webrad/runtime · function
/** Asks the application user to confirm an action. */
export function Confirm(message: unknown): boolean;message
@webrad/runtime · variable
export const message: typeof Message;confirm
@webrad/runtime · variable
export const confirm: typeof Confirm;WebApiAuthorization
@webrad/runtime · type
/** Browser-safe authorization shared by the editor, Preview and generated apps. */
export type WebApiAuthorization = {
readonly type: 'none';
} | {
readonly type: 'basic';
readonly username: string;
readonly password: string;
} | {
readonly type: 'bearer';
readonly token: string;
} | {
readonly type: 'api-key';
readonly name: string;
readonly value: string;
readonly in: 'header' | 'query';
};normalizeApiClientAuthorization
@webrad/runtime · function
/** Returns a detached, validated definition without coercing or trimming secrets. */
export function normalizeApiClientAuthorization(value: unknown): WebApiAuthorization | null;applyApiClientAuthorization
@webrad/runtime · function
/** Explicit authorization wins over manual headers; omission preserves legacy headers. */
export function applyApiClientAuthorization(url: string, headers: Headers, authorization: WebApiAuthorization | null | undefined): string;WEB_API_TEMPLATE_PARAMETER_TYPES
@webrad/runtime · variable
/** Browser-safe request-body templates shared by the IDE and generated applications. */
export const WEB_API_TEMPLATE_PARAMETER_TYPES: readonly [
"string",
"number",
"integer",
"boolean",
"object",
"array",
"null"
];WebApiTemplateParameterType
@webrad/runtime · type
export type WebApiTemplateParameterType = (typeof WEB_API_TEMPLATE_PARAMETER_TYPES)[number];WebApiTemplateParameter
@webrad/runtime · interface
export interface WebApiTemplateParameter {
readonly name: string;
readonly type: WebApiTemplateParameterType;
}WebApiTemplateValue
@webrad/runtime · type
export type WebApiTemplateValue = string | number | boolean | null | readonly WebApiTemplateValue[] | {
readonly [key: string]: WebApiTemplateValue;
};WebApiTemplateValues
@webrad/runtime · type
export type WebApiTemplateValues = Readonly<Record<string, WebApiTemplateValue>>;getApiClientTemplateParameters
@webrad/runtime · function
/** Derives unique names from the template and preserves existing type choices by name. */
export function getApiClientTemplateParameters(content: string, existing?: readonly WebApiTemplateParameter[]): readonly WebApiTemplateParameter[];parseApiClientTemplateTestValue
@webrad/runtime · function
/** Converts an IDE-only input into a typed value without evaluating source code. */
export function parseApiClientTemplateTestValue(parameter: WebApiTemplateParameter, input: string): WebApiTemplateValue;resolveApiClientBodyTemplate
@webrad/runtime · function
/** Resolves a body template while preserving JSON types and escaping string contents. */
export function resolveApiClientBodyTemplate(body: WebApiRequestBody, values?: WebApiTemplateValues): string;WebApiBodyInput
@webrad/runtime · interface
export interface WebApiBodyInput extends WebApiTemplateParameter {
readonly required: boolean;
readonly inferred: boolean;
readonly defaultValue?: WebApiTemplateValue;
}getApiClientBodyInputs
@webrad/runtime · function
/** Public reflection uses the same persisted body for code generation and runtime parameters. */
export function getApiClientBodyInputs(body: WebApiRequestBody): readonly WebApiBodyInput[];copyApiClientInput
@webrad/runtime · function
/** Validates/copies input data while preventing prototype fields and unserializable values. */
export function copyApiClientInput(value: WebApiTemplateValue): WebApiTemplateValue;WebApiQueryValue
@webrad/runtime · type
export type WebApiQueryValue = QueryValue | readonly QueryValue[];WebApiParameterValue
@webrad/runtime · type
export type WebApiParameterValue = WebApiTemplateValue | readonly QueryValue[];WebApiParameterValues
@webrad/runtime · type
export type WebApiParameterValues<T extends object> = {
-readonly [K in keyof T]?: T[K];
};WebApiQueryValues
@webrad/runtime · type
export type WebApiQueryValues<T extends object = Record<string, WebApiQueryValue>> = WebApiParameterValues<T> & Record<string, WebApiQueryValue>;WebApiHeaderValues
@webrad/runtime · type
export type WebApiHeaderValues<T extends object = Record<string, string>> = WebApiParameterValues<T> & Record<string, string | undefined>;WebApiRequestInputs
@webrad/runtime · interface
/** Generated inputs preserve the configured names without an untyped component namespace. */
export interface WebApiRequestInputs {
readonly Parameter: object;
readonly Query: object;
readonly Headers: object;
}WebApiDefaultInputs
@webrad/runtime · interface
export interface WebApiDefaultInputs extends WebApiRequestInputs {
readonly Parameter: Record<string, WebApiParameterValue>;
readonly Query: Record<string, WebApiQueryValue>;
readonly Headers: Record<string, string>;
}WebApiInputPart
@webrad/runtime · type
export type WebApiInputPart<T, K extends keyof WebApiRequestInputs> = T extends {
readonly [P in K]: infer Values extends object;
} ? Values : Record<string, K extends 'Headers' ? string : WebApiTemplateValue>;WebApiInputUnion
@webrad/runtime · type
export type WebApiInputUnion<T extends object, K extends keyof WebApiRequestInputs> = WebApiInputPart<T[keyof T], K>;WebApiUnionKeys
@webrad/runtime · type
export type WebApiUnionKeys<T> = T extends object ? keyof T : never;WebApiUnionValue
@webrad/runtime · type
export type WebApiUnionValue<T, K extends PropertyKey> = T extends object ? K extends keyof T ? T[K] : never : never;WebApiCombinedInputs
@webrad/runtime · type
export type WebApiCombinedInputs<T extends object, K extends keyof WebApiRequestInputs> = {
[P in WebApiUnionKeys<WebApiInputUnion<T, K>>]: WebApiUnionValue<WebApiInputUnion<T, K>, P>;
};WebApiRequests
@webrad/runtime · type
export type WebApiRequests<TOutputs extends object, TInputs extends object> = {
readonly [K in keyof TOutputs & string]: WebApiRequest<WebApiInputPart<K extends keyof TInputs ? TInputs[K] : WebApiDefaultInputs, 'Parameter'>, TOutputs[K], WebApiInputPart<K extends keyof TInputs ? TInputs[K] : WebApiDefaultInputs, 'Query'>, WebApiInputPart<K extends keyof TInputs ? TInputs[K] : WebApiDefaultInputs, 'Headers'>>;
};WebApiAccessContext
@webrad/runtime · interface
/** Narrow callbacks keep request objects attached to their owner's stable operation ID. */
export interface WebApiAccessContext {
readConfiguration(): WebApiClientConfiguration;
writeConfiguration(value: WebApiClientConfiguration): void;
readOperation(id: string): WebApiOperation;
patchOperation(id: string, patch: Partial<Omit<WebApiOperation, 'id'>>): void;
readBaseUrl(): string;
writeBaseUrl(value: string): void;
parameterNames(id: string): readonly string[];
readParameter(id: string, name: string): WebApiParameterValue | undefined;
writeParameter(id: string, name: string, value: WebApiParameterValue | undefined): void;
readParameterType(id: string, name: string): WebApiTemplateParameterType;
writeParameterType(id: string, name: string, type: WebApiTemplateParameterType): void;
clearParameters(id: string): void;
readQuery(id: string, name: string): WebApiQueryValue;
writeQuery(id: string, name: string, value: WebApiQueryValue): void;
headerNames(id?: string): readonly string[];
readHeader(name: string, id?: string): string | undefined;
writeHeader(name: string, value: string | undefined, id?: string): void;
readResponseType(id: string): WebApiResponseType;
writeResponseType(id: string, value: WebApiResponseType): void;
readState(id: string): WebApiOperationState;
execute(id: string, options: WebApiRequestOptions): Promise<unknown>;
bodyParameters(id: string): readonly WebApiTemplateParameter[];
}WebApiNamedParameter
@webrad/runtime · class
/** A FireDAC-style named parameter, backed by the owning runtime request. */
export class WebApiNamedParameter {
readonly Name: string;
constructor(context: WebApiAccessContext, operationId: string, Name: string);
get Value(): WebApiParameterValue | undefined;
set Value(value: WebApiParameterValue | undefined);
get Type(): WebApiTemplateParameterType;
set Type(value: WebApiTemplateParameterType);
Clear(): void;
}WebApiBodySettings
@webrad/runtime · class
export class WebApiBodySettings {
constructor(context: WebApiAccessContext, operationId: string);
get Kind(): WebApiBodyKind;
set Kind(value: WebApiBodyKind);
get Value(): string;
set Value(value: string);
get Parameters(): readonly WebApiTemplateParameter[];
set Parameters(value: readonly WebApiTemplateParameter[]);
}WebApiRequestSettings
@webrad/runtime · class
export class WebApiRequestSettings {
constructor(context: WebApiAccessContext, operationId: string);
get Credentials(): WebApiCredentials;
set Credentials(value: WebApiCredentials);
get Timeout(): number | null;
set Timeout(value: number | null);
get ResponseType(): WebApiResponseType;
set ResponseType(value: WebApiResponseType);
}WebApiResponse
@webrad/runtime · class
export class WebApiResponse<T = unknown> {
constructor(context: WebApiAccessContext, operationId: string);
get Value(): T | undefined;
get Status(): WebApiOperationState['status'];
get Error(): unknown;
get UpdatedAt(): number | undefined;
get Schema(): WebApiResponseSchema | null;
set Schema(value: WebApiResponseSchema | null);
}WebApiConnectionSettings
@webrad/runtime · class
export class WebApiConnectionSettings<THeaders extends object = Record<string, string>> {
readonly Headers: WebApiHeaderValues<THeaders>;
constructor(context: WebApiAccessContext);
get Mode(): WebApiConnection;
set Mode(value: WebApiConnection);
get BaseURL(): string;
set BaseURL(value: string);
get Authorization(): WebApiAuthorization | null;
set Authorization(value: WebApiAuthorization | null);
get Timeout(): number;
set Timeout(value: number);
get DefaultHeaders(): readonly WebApiParameter[];
set DefaultHeaders(value: readonly WebApiParameter[]);
}WebApiRequest
@webrad/runtime · class
/** Stable request object with mutable settings and private per-instance parameter values. */
export class WebApiRequest<TParameters extends object = Record<string, WebApiTemplateValue>, TResult = unknown, TQuery extends object = Record<string, WebApiQueryValue>, THeaders extends object = Record<string, string>> {
readonly ID: string;
readonly parameter: WebApiParameterValues<TParameters>;
readonly Query: WebApiQueryValues<TQuery>;
readonly Headers: WebApiHeaderValues<THeaders>;
readonly Body: WebApiBodySettings;
readonly Options: WebApiRequestSettings;
readonly Response: WebApiResponse<TResult>;
constructor(context: WebApiAccessContext, ID: string);
get Name(): string;
set Name(value: string);
get Method(): string;
set Method(value: string);
/** Null inherits the client default; explicit none suppresses Authorization. */
get Authorization(): WebApiAuthorization | null;
set Authorization(value: WebApiAuthorization | null);
get Endpoint(): string;
set Endpoint(value: string);
get ApiVersion(): number | null;
set ApiVersion(value: number | null);
get Definition(): WebApiOperation;
set Definition(value: WebApiOperation);
ParamByName(name: string): WebApiNamedParameter;
ClearParameters(): void;
/** Executes this request without changing the client's selected Operation first. */
execute(options?: WebApiRequestOptions): Promise<TResult>;
}WEB_API_REQUEST_RESERVED_NAMES
@webrad/runtime · variable
/** Names that must never turn an API client into a thenable or replace object behavior. */
export const WEB_API_REQUEST_RESERVED_NAMES: readonly [
"then",
"constructor",
"__proto__",
"prototype",
"toString",
"toLocaleString",
"valueOf",
"hasOwnProperty",
"isPrototypeOf",
"propertyIsEnumerable",
"__defineGetter__",
"__defineSetter__",
"__lookupGetter__",
"__lookupSetter__"
];WebApiClientInstance
@webrad/runtime · type
/** Named request access with the client's existing public members protected. */
export type WebApiClientInstance<TOutputs extends object = Record<string, unknown>, TInputs extends object = Record<string, WebApiDefaultInputs>, TDefaultHeaders extends object = Record<string, string>> = WebApiClient<TOutputs, TInputs, TDefaultHeaders> & (string extends keyof TOutputs ? object : Pick<WebApiRequests<TOutputs, TInputs>, Exclude<keyof TOutputs & string, keyof WebApiClient<TOutputs, TInputs, TDefaultHeaders> | (typeof WEB_API_REQUEST_RESERVED_NAMES)[number]>>);QueryValue
@webrad/runtime · type
export type QueryValue = string | number | boolean | null | undefined;apiOperationPath
@webrad/runtime · function
/** Shared by the browser tester and generated runtime for versioned requests. */
export function apiOperationPath(path: string, version?: number | null): string;WEB_API_RESPONSE_TYPES
@webrad/runtime · variable
export const WEB_API_RESPONSE_TYPES: readonly [
"auto",
"json",
"text",
"blob",
"arrayBuffer"
];WebApiResponseType
@webrad/runtime · type
export type WebApiResponseType = (typeof WEB_API_RESPONSE_TYPES)[number];WebApiBodyKind
@webrad/runtime · type
export type WebApiBodyKind = 'none' | 'json' | 'text' | 'form-urlencoded' | 'form-data';WebApiConnection
@webrad/runtime · type
export type WebApiConnection = 'custom' | 'restgo-session' | 'restgo-api-token' | 'restgo-public';WebApiCredentials
@webrad/runtime · type
export type WebApiCredentials = 'omit' | 'same-origin' | 'include';WebApiOperationStatus
@webrad/runtime · type
export type WebApiOperationStatus = 'idle' | 'loading' | 'success' | 'error';WebApiParameter
@webrad/runtime · interface
/** Structural, browser-safe counterpart of a persisted API parameter. */
export interface WebApiParameter {
readonly id: string;
readonly name: string;
readonly value: string;
readonly enabled: boolean;
}WebApiRequestBody
@webrad/runtime · interface
export interface WebApiRequestBody {
readonly kind: WebApiBodyKind;
readonly content: string;
readonly parameters?: readonly WebApiTemplateParameter[];
}WebApiResponseSchemaNode
@webrad/runtime · interface
/** Structural contract consumed at runtime; it intentionally has no IDE dependency. */
export interface WebApiResponseSchemaNode {
readonly id: string;
readonly name: string;
readonly path: string;
readonly kind: 'field' | 'object' | 'list';
readonly fieldType: string;
readonly nullable: boolean;
readonly children: readonly WebApiResponseSchemaNode[];
}WebApiResponseSchema
@webrad/runtime · interface
export interface WebApiResponseSchema {
readonly version: 1;
readonly root: WebApiResponseSchemaNode;
}WebApiOperation
@webrad/runtime · interface
export interface WebApiOperation {
readonly id: string;
readonly name: string;
readonly method: string;
readonly path: string;
readonly apiVersion?: number | null;
readonly authorization?: WebApiAuthorization | null;
readonly headers: readonly WebApiParameter[];
readonly query: readonly WebApiParameter[];
readonly body: WebApiRequestBody;
readonly credentials: WebApiCredentials;
readonly timeoutMs: number | null;
readonly responseSchema: WebApiResponseSchema | null;
}WebApiClientConfiguration
@webrad/runtime · interface
export interface WebApiClientConfiguration {
readonly schemaVersion: number;
/** Omitted in existing projects, which continue to use their custom base URL. */
readonly connection?: WebApiConnection;
readonly authorization?: WebApiAuthorization | null;
readonly defaultHeaders: readonly WebApiParameter[];
readonly timeoutMs: number;
readonly operations: readonly WebApiOperation[];
}WebApiRequestOptions
@webrad/runtime · interface
export interface WebApiRequestOptions extends Omit<RequestInit, 'body' | 'headers' | 'signal'> {
readonly body?: unknown;
/** Values supplied to <name> placeholders in the configured body for execute(). */
readonly parameters?: WebApiTemplateValues;
readonly headers?: HeadersInit;
/** Overrides request/client authorization for this call; none explicitly disables it. */
readonly authorization?: WebApiAuthorization;
readonly query?: Readonly<Record<string, QueryValue | readonly QueryValue[]>>;
readonly signal?: AbortSignal | null;
/** Cancels the request after this duration without changing the component default. */
readonly timeoutMs?: number | null;
readonly responseType?: WebApiResponseType;
}WebApiClientOptions
@webrad/runtime · interface
export interface WebApiClientOptions extends WebNonvisualComponentOptions {
readonly baseUrl?: string;
/** Programmatic default headers, kept compatible with the original client API. */
readonly headers?: HeadersInit;
readonly fetch?: typeof globalThis.fetch;
/** Configuration materialized by the Project Model for named operations. */
readonly apiClientConfig?: WebApiClientConfiguration;
}WebApiOperationState
@webrad/runtime · interface
export interface WebApiOperationState<T = unknown> {
readonly status: WebApiOperationStatus;
readonly data?: T;
readonly error?: unknown;
readonly updatedAt?: number;
}WebApiOperationEventDetail
@webrad/runtime · interface
/** Details supplied by the WebApiClient request lifecycle events. */
export interface WebApiOperationEventDetail<T = unknown> {
readonly operation: WebApiOperation;
readonly state: WebApiOperationState<T>;
}WebApiError
@webrad/runtime · class
export class WebApiError<TBody = unknown> extends Error {
readonly status: number;
readonly statusText: string;
readonly url: string;
readonly body: TBody;
readonly response: Response;
constructor(message: string, status: number, statusText: string, url: string, body: TBody, response: Response);
}describeApiClientFetchFailure
@webrad/runtime · function
/** Enriches a browser fetch failure without exposing request headers, body or URL parameters. */
export function describeApiClientFetchFailure(error: TypeError, url: string, init: RequestInit): TypeError;WebApiTimeoutError
@webrad/runtime · class
export class WebApiTimeoutError extends Error {
readonly timeoutMs: number;
readonly url: string;
constructor(timeoutMs: number, url: string);
}RestGoApiSessionSource
@webrad/runtime · interface
/** A real shared SDK client or an explicitly supplied, transient test-session source. */
export interface RestGoApiSessionSource {
readonly baseUrl: string;
getSession(): Promise<import("@webrad/restgo-sdk").RestGoResult<Pick<import("@webrad/restgo-sdk").RestGoSession, 'token'> | null>>;
}RestGoApplicationApiSource
@webrad/runtime · interface
export interface RestGoApplicationApiSource {
readonly baseUrl: string;
readonly apiToken?: string;
}prepareRestGoApiRequest
@webrad/runtime · function
/**
* Pins a REST request to the RestGo integration and validates its current user session.
* The SDK validates/renews the session before the request; raw API tokens never qualify.
* The optional source lets the IDE test with a transient JWT without persisting it.
*/
export function prepareRestGoApiRequest(endpoint: string, options?: RequestInit, source?: RestGoApiSessionSource): Promise<{
readonly url: string;
readonly init: RequestInit;
}>;prepareRestGoApplicationApiRequest
@webrad/runtime · function
/** Prepares public or application-token requests without borrowing a user or admin credential. */
export function prepareRestGoApplicationApiRequest(endpoint: string, authentication: 'public' | 'api-token', options?: RequestInit, source?: RestGoApplicationApiSource): {
readonly url: string;
readonly init: RequestInit;
};WebApiClient
@webrad/runtime · class
/**
* Browser-safe HTTP client with direct requests and Project-Model backed named
* operations. The latter retain transient state so future data components can
* bind to an API result without using the DOM as a data store.
*/
export class WebApiClient<TOutputs extends object = Record<string, unknown>, TInputs extends object = Record<string, WebApiDefaultInputs>, TDefaultHeaders extends object = Record<string, string>> extends WebNonvisualComponent {
constructor(options?: WebApiClientOptions | string);
/** Typed view of the same instance, used by generated page and reusable code. */
withRequests(): WebApiClientInstance<TOutputs, TInputs, TDefaultHeaders>;
get baseUrl(): string;
set baseUrl(value: string);
/** Immutable normalized contract configured for this client instance. */
get apiClientConfig(): WebApiClientConfiguration;
set apiClientConfig(value: WebApiClientConfiguration);
get Configuration(): WebApiClientConfiguration;
set Configuration(value: WebApiClientConfiguration);
get Connection(): WebApiConnectionSettings<TDefaultHeaders>;
get Operation(): (keyof TOutputs & string) | undefined;
set Operation(value: (keyof TOutputs & string) | undefined);
get Requests(): WebApiRequests<TOutputs, TInputs>;
get Request(): WebApiRequest<WebApiCombinedInputs<TInputs, 'Parameter'>, TOutputs[keyof TOutputs], WebApiCombinedInputs<TInputs, 'Query'>, WebApiCombinedInputs<TInputs, 'Headers'>>;
get parameter(): WebApiParameterValues<WebApiCombinedInputs<TInputs, 'Parameter'>>;
get Query(): WebApiQueryValues<WebApiCombinedInputs<TInputs, 'Query'>>;
get Headers(): WebApiHeaderValues<WebApiCombinedInputs<TInputs, 'Headers'>>;
get Body(): WebApiBodySettings;
get Authorization(): WebApiAuthorization | null;
set Authorization(value: WebApiAuthorization | null);
get Options(): WebApiRequestSettings;
get Response(): WebApiResponse<TOutputs[keyof TOutputs]>;
get Method(): string;
set Method(value: string);
get Endpoint(): string;
set Endpoint(value: string);
get ApiVersion(): number | null;
set ApiVersion(value: number | null);
RequestByName<K extends keyof TOutputs & string>(name: K): WebApiRequests<TOutputs, TInputs>[K];
RequestByName(name: string): WebApiRequest;
ParamByName(name: string): WebApiNamedParameter;
ClearParameters(): void;
/** Saved operation metadata, safe for a Table or another consumer to inspect. */
get operations(): readonly WebApiOperation[];
set operations(value: readonly WebApiOperation[]);
/** Latest successful data, keyed by the configured operation name. */
get data(): Readonly<Partial<TOutputs>>;
/** State of the most recently executed operation. */
get status(): WebApiOperationStatus;
get error(): unknown;
getOperationState<T = unknown>(operationName: string): WebApiOperationState<T>;
/** Notifies runtime consumers whenever a named operation changes state. */
subscribe(listener: () => void): () => void;
request<T>(path: string, options?: WebApiRequestOptions): Promise<T>;
get<T>(path: string, options?: WebApiRequestOptions): Promise<T>;
post<T>(path: string, body?: unknown, options?: WebApiRequestOptions): Promise<T>;
put<T>(path: string, body?: unknown, options?: WebApiRequestOptions): Promise<T>;
patch<T>(path: string, body?: unknown, options?: WebApiRequestOptions): Promise<T>;
delete<T>(path: string, options?: WebApiRequestOptions): Promise<T>;
head(path: string, options?: WebApiRequestOptions): Promise<void>;
options<T>(path: string, options?: WebApiRequestOptions): Promise<T>;
execute<K extends keyof TOutputs & string>(operationName: K, options?: WebApiRequestOptions): Promise<TOutputs[K]>;
execute(options?: WebApiRequestOptions): Promise<TOutputs[keyof TOutputs]>;
execute<T = unknown>(operationName: string, options?: WebApiRequestOptions): Promise<T>;
/** Resolves any saved schema node from the latest result of one operation. */
getOutputById<T = unknown>(operationName: string, schemaNodeIdOrPath: string): T | undefined;
/** Returns a saved list output, or an empty readonly list when it is unavailable. */
getList<T = unknown>(operationName: string, schemaNodeIdOrPath: string): readonly T[];
}WebVideoUploadSelection
@webrad/runtime · interface
export interface WebVideoUploadSelection extends WebFileUploadSelection {
/** Seconds, or null when the browser cannot decode this container/codec. */
readonly duration: number | null;
}WebVideoUploadConfiguration
@webrad/runtime · interface
export interface WebVideoUploadConfiguration extends WebNonvisualComponentOptions {
readonly accept?: string;
readonly enabled?: boolean;
readonly title?: string;
readonly descri?: string;
readonly isPublic?: boolean;
readonly chunkSizeBytes?: number;
/** MiB (1024² bytes). Null disables the local file-size limit. */
readonly maxFileSizeMB?: number | null;
/** Null disables the local duration limit. */
readonly maxDurationSeconds?: number | null;
}WebVideoUploadOptions
@webrad/runtime · interface
export interface WebVideoUploadOptions {
readonly title?: string;
readonly descri?: string;
readonly isPublic?: boolean;
readonly signal?: AbortSignal;
}WebVideoUploadResumeOptions
@webrad/runtime · interface
export interface WebVideoUploadResumeOptions extends WebVideoUploadOptions {
/** Supply a saved checkpoint after reload, after selecting the original file again. */
readonly resumeToken?: import("@webrad/restgo-sdk").RestGoVideoResumeToken;
}WebVideoUploadState
@webrad/runtime · type
export type WebVideoUploadState = 'idle' | 'selecting' | 'selected' | 'hashing' | 'creating' | 'uploading' | 'paused' | 'finalizing' | 'uploaded' | 'waiting' | 'ready' | 'cancelling' | 'cancelled' | 'error';WebVideoUploadProgressEventDetail
@webrad/runtime · type
export type WebVideoUploadProgressEventDetail = import("@webrad/restgo-sdk").RestGoVideoProgress;WebVideoUploadProcessingEventDetail
@webrad/runtime · type
export type WebVideoUploadProcessingEventDetail = import("@webrad/restgo-sdk").RestGoVideoDetails;WebVideoUploadChangeEventDetail
@webrad/runtime · type
export type WebVideoUploadChangeEventDetail = WebVideoUploadSelection | null;WebVideoUploadResult
@webrad/runtime · type
export type WebVideoUploadResult = import("@webrad/restgo-sdk").RestGoVideo;WebVideoUploadStateEventDetail
@webrad/runtime · interface
export interface WebVideoUploadStateEventDetail {
readonly previous: WebVideoUploadState;
readonly state: WebVideoUploadState;
}WebVideoUploadCompleteEventDetail
@webrad/runtime · interface
export interface WebVideoUploadCompleteEventDetail {
readonly operation: 'upload' | 'processing' | 'cancel';
readonly video: import("@webrad/restgo-sdk").RestGoVideo | null;
readonly error: Error | null;
}WebVideoUpload
@webrad/runtime · class
/** Nonvisual resumable uploader. Conversion runs on RestGo; waiting is explicit. */
export class WebVideoUpload extends WebNonvisualComponent {
title: string;
descri: string;
isPublic: boolean;
constructor(configuration?: WebVideoUploadConfiguration);
get accept(): string;
set accept(value: string);
get enabled(): boolean;
set enabled(value: boolean);
get maxFileSizeMB(): number | null;
set maxFileSizeMB(value: number | null);
get maxDurationSeconds(): number | null;
set maxDurationSeconds(value: number | null);
get chunkSizeBytes(): number;
set chunkSizeBytes(value: number);
get selectedFile(): File | null;
get selection(): WebVideoUploadSelection | null;
get uploadSession(): import("@webrad/restgo-sdk").RestGoVideoUploadSession | null;
get resumeToken(): import("@webrad/restgo-sdk").RestGoVideoResumeToken | null;
get video(): import("@webrad/restgo-sdk").RestGoVideo | null;
get state(): WebVideoUploadState;
get confirmedBytes(): number;
get totalBytes(): number;
get percentage(): number | null;
get processingProgress(): number | null;
get error(): Error | null;
/** Opens the chooser from a user gesture. It never creates or sends an upload. */
OpenFile(): Promise<WebVideoUploadSelection | null>;
SendToRestGO(options?: WebVideoUploadOptions): Promise<import("@webrad/restgo-sdk").RestGoVideo>;
Resume(options?: WebVideoUploadResumeOptions): Promise<import("@webrad/restgo-sdk").RestGoVideo>;
/** Aborts only local upload I/O. The server session remains resumable. */
Pause(): void;
/** Explicitly cancels the open upload on RestGo. It does not cancel conversion jobs. */
CancelUpload(): Promise<void>;
WaitUntilReady(options?: import("@webrad/restgo-sdk").RestGoVideoWaitOptions): Promise<import("@webrad/restgo-sdk").RestGoVideo>;
/** Clears local state and stops requests. No remote video/session is deleted. */
Clear(): void;
set onChange(handler: WebComponentEventHandler<this> | null);
set onProgress(handler: WebComponentEventHandler<this> | null);
set onStateChange(handler: WebComponentEventHandler<this> | null);
set onUploadComplete(handler: WebComponentEventHandler<this> | null);
set onProcessingProgress(handler: WebComponentEventHandler<this> | null);
set onReady(handler: WebComponentEventHandler<this> | null);
set onError(handler: WebComponentEventHandler<this> | null);
set onComplete(handler: WebComponentEventHandler<this> | null);
dispose(): void;
}WebVideoPlayerSource
@webrad/runtime · type
export type WebVideoPlayerSource = {
readonly kind: 'restgo';
readonly videoId: string;
} | {
readonly kind: 'url';
readonly url: string;
readonly format: 'hls' | 'dash';
};WebVideoPlayerState
@webrad/runtime · type
export type WebVideoPlayerState = 'idle' | 'loading' | 'loaded' | 'playing' | 'paused' | 'ended' | 'error' | 'disposed';WebVideoPlayerQuality
@webrad/runtime · type
export type WebVideoPlayerQuality = 'auto' | number;WebVideoPlayerObjectFit
@webrad/runtime · type
export type WebVideoPlayerObjectFit = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';WebVideoPlayerAspectRatio
@webrad/runtime · type
export type WebVideoPlayerAspectRatio = 'none' | '16:9' | '9:16';WebVideoPlayerLoadOptions
@webrad/runtime · interface
export interface WebVideoPlayerLoadOptions {
readonly signal?: AbortSignal;
readonly startTime?: number;
}WebVideoPlayerRestGoOptions
@webrad/runtime · interface
export interface WebVideoPlayerRestGoOptions extends WebVideoPlayerLoadOptions {
readonly public?: boolean;
}WebVideoPlayerUrlOptions
@webrad/runtime · interface
export interface WebVideoPlayerUrlOptions extends WebVideoPlayerLoadOptions {
readonly format?: 'hls' | 'dash';
}WebVideoPlayerAvailableQuality
@webrad/runtime · interface
export interface WebVideoPlayerAvailableQuality {
readonly quality: number;
readonly width: number;
readonly height: number;
readonly codecs: string;
}WebVideoPlayerLoadedEventDetail
@webrad/runtime · interface
export interface WebVideoPlayerLoadedEventDetail {
readonly source: WebVideoPlayerSource;
readonly duration: number;
readonly availableQualities: readonly WebVideoPlayerAvailableQuality[];
}WebVideoPlayerTimeEventDetail
@webrad/runtime · interface
export interface WebVideoPlayerTimeEventDetail {
readonly currentTime: number;
readonly duration: number;
}WebVideoPlayerBufferingEventDetail
@webrad/runtime · interface
export interface WebVideoPlayerBufferingEventDetail {
readonly buffering: boolean;
}WebVideoPlayerQualityEventDetail
@webrad/runtime · interface
export interface WebVideoPlayerQualityEventDetail {
readonly requested: WebVideoPlayerQuality;
readonly current: number | null;
}WebVideoPlayerBufferedRange
@webrad/runtime · interface
export interface WebVideoPlayerBufferedRange {
readonly start: number;
readonly end: number;
}WebVideoPlayer
@webrad/runtime · class
/** One real Shaka player per component element, shared by mounting and generated instances. */
export class WebVideoPlayer extends WebComponent {
constructor(element: HTMLElement);
get source(): WebVideoPlayerSource | null;
set source(value: WebVideoPlayerSource | null);
get controls(): boolean;
set controls(value: boolean);
get autoplay(): boolean;
set autoplay(value: boolean);
get muted(): boolean;
set muted(value: boolean);
get loop(): boolean;
set loop(value: boolean);
get playsInline(): boolean;
set playsInline(value: boolean);
get volume(): number;
set volume(value: number);
get playbackRate(): number;
set playbackRate(value: number);
get objectFit(): WebVideoPlayerObjectFit;
set objectFit(value: WebVideoPlayerObjectFit);
/** Fixed ratios derive height from the responsive width, overriding vertical sizing rules. */
get aspectRatio(): WebVideoPlayerAspectRatio;
set aspectRatio(value: WebVideoPlayerAspectRatio);
get poster(): string;
set poster(value: string);
get enabled(): boolean;
set enabled(value: boolean);
get quality(): WebVideoPlayerQuality;
set quality(value: WebVideoPlayerQuality);
get state(): WebVideoPlayerState;
get duration(): number;
get currentTime(): number;
get buffered(): readonly WebVideoPlayerBufferedRange[];
get availableQualities(): readonly WebVideoPlayerAvailableQuality[];
get currentQuality(): number | null;
get isPlaying(): boolean;
get error(): Error | null;
LoadRestGo(videoId: string, options?: WebVideoPlayerRestGoOptions): Promise<void>;
LoadUrl(url: string, options?: WebVideoPlayerUrlOptions): Promise<void>;
Play(): Promise<void>;
Pause(): void;
Stop(): void;
Seek(seconds: number): void;
SetQuality(value: WebVideoPlayerQuality): void;
Unload(): Promise<void>;
dispose(): void;
set onLoaded(handler: WebComponentEventHandler<this> | null);
set onPlay(handler: WebComponentEventHandler<this> | null);
set onPause(handler: WebComponentEventHandler<this> | null);
set onEnded(handler: WebComponentEventHandler<this> | null);
set onTimeUpdate(handler: WebComponentEventHandler<this> | null);
set onBuffering(handler: WebComponentEventHandler<this> | null);
set onQualityChange(handler: WebComponentEventHandler<this> | null);
set onError(handler: WebComponentEventHandler<this> | null);
}RuntimeBounds
@webrad/runtime · interface
export interface RuntimeBounds {
readonly x: number;
readonly y: number;
readonly width: number;
readonly height: number;
}RuntimeComponentNode
@webrad/runtime · interface
export interface RuntimeComponentNode {
readonly embeddedStyleCatalog?: readonly RuntimeComponentStyle[];
readonly id: string;
readonly templateId?: string;
readonly reusableRoot?: boolean;
readonly reusableDefinitionId?: string;
readonly reusableInstanceId?: string;
readonly type: string;
readonly name: string;
readonly parentId: string | null;
readonly layout: RuntimeComponentLayout;
readonly bounds: RuntimeBounds;
readonly props: Readonly<Record<string, unknown>>;
readonly children: readonly string[];
readonly styleClassName?: string;
}RuntimeReusableElementModel
@webrad/runtime · interface
export interface RuntimeReusableElementModel {
readonly id: string;
readonly name: string;
readonly caption: string;
readonly width: number;
readonly height: number;
readonly components: readonly RuntimeComponentNode[];
readonly rootComponentId: string;
}RuntimePageModel
@webrad/runtime · interface
export interface RuntimePageModel {
readonly id: string;
readonly name: string;
readonly caption: string;
readonly width: number;
readonly height: number;
readonly components: readonly RuntimeComponentNode[];
readonly rootComponentId: string;
readonly reusableElements?: readonly RuntimeReusableElementModel[];
}RuntimeComponentAdapter
@webrad/runtime · interface
export interface RuntimeComponentAdapter<T extends WebComponent = WebComponent> {
readonly createElement: (document: Document, node: RuntimeComponentNode) => HTMLElement;
readonly createComponent: (element: HTMLElement) => T;
readonly applyProperties?: (component: T, node: RuntimeComponentNode) => void;
readonly getChildrenHost?: (component: T, node: RuntimeComponentNode) => HTMLElement;
readonly participatesInLayout?: boolean;
}RuntimeComponentRegistry
@webrad/runtime · class
export class RuntimeComponentRegistry {
register<T extends WebComponent>(type: string, adapter: RuntimeComponentAdapter<T>): this;
has(type: string): boolean;
require(type: string): RuntimeComponentAdapter;
create(document: Document, node: RuntimeComponentNode, menuFactories?: ReadonlyMap<string, RuntimeMenuFactory>): WebComponent;
}runtimeComponentRegistry
@webrad/runtime · variable
export const runtimeComponentRegistry: RuntimeComponentRegistry;expandReusableElements
@webrad/runtime · function
export function expandReusableElements(model: RuntimePageModel): RuntimePageModel;MountedRuntimePage
@webrad/runtime · interface
export interface MountedRuntimePage {
readonly element: HTMLElement;
readonly page: WebPage;
readonly components: ReadonlyMap<string, WebComponent>;
readonly reusableInstances: readonly MountedReusableElementInstance[];
dispose(): void;
}MountedReusableElementInstance
@webrad/runtime · interface
export interface MountedReusableElementInstance {
readonly instanceId: string;
readonly reusableElementId: string;
readonly element: HTMLElement;
readonly componentIds: ReadonlyMap<string, string>;
}MountPageOptions
@webrad/runtime · interface
export interface MountPageOptions {
readonly replaceHostContents?: boolean;
readonly registry?: RuntimeComponentRegistry;
readonly menuFactories?: ReadonlyMap<string, RuntimeMenuFactory>;
}mountPage
@webrad/runtime · function
export function mountPage(model: RuntimePageModel, host?: HTMLElement, options?: MountPageOptions): MountedRuntimePage;RuntimePageFactory
@webrad/runtime · type
/** Creates the authored wrapper for a page after its visual DOM is mounted. */
export type RuntimePageFactory = (element: HTMLElement) => WebPage;RuntimeReusableElementFactory
@webrad/runtime · type
/** Creates authored classes for reusable placements after a page is mounted. */
export type RuntimeReusableElementFactory = (mounted: MountedRuntimePage) => readonly WebReusableElementInstance[];RuntimePageRoute
@webrad/runtime · interface
/** One route that can be mounted by the browser-side page router. */
export interface RuntimePageRoute {
readonly id: string;
readonly name: string;
readonly model: RuntimePageModel;
readonly path?: string;
readonly parameters?: readonly PageParameterDefinition[];
readonly createPage: RuntimePageFactory;
readonly createReusableElements?: RuntimeReusableElementFactory;
readonly menuFactories?: ReadonlyMap<string, RuntimeMenuFactory>;
}WebPageRouter
@webrad/runtime · class
/** Mounts one authored project page at a time and resolves IDs or page names. */
export class WebPageRouter {
constructor(routes: readonly RuntimePageRoute[], host?: HTMLElement, options?: {
readonly mode?: 'history' | 'hash';
readonly basePath?: string;
});
readonly activePage: WebPage | null;
readonly activeRoute: RuntimePageRoute | null;
findRoute(destination: string): RuntimePageRoute | undefined;
start(entryDestination: string): WebPage;
navigateBrowser(destination: string | URL, options?: NavigateOptions): void;
navigate(destination: string): WebPage;
dispose(): void;
}VisualPropertySource
@webrad/runtime · interface
export interface VisualPropertySource {
readonly props: Readonly<Record<string, unknown>>;
}projectPanelBackground
@webrad/runtime · function
export function projectPanelBackground(props: Readonly<Record<string, unknown>>, styled?: boolean): {
'--wr-panel-background-image': string;
backgroundImage: string;
backgroundSize: string;
backgroundPosition: string;
backgroundRepeat: string;
};VisualComponentSource
@webrad/runtime · interface
export interface VisualComponentSource extends VisualPropertySource {
readonly type: string;
readonly bounds: {
readonly width: number;
readonly height: number;
};
}DataGridColumnTrackSource
@webrad/runtime · interface
export interface DataGridColumnTrackSource {
readonly widthMode: 'fixed' | 'dynamic';
readonly width: number;
readonly minWidth: number;
readonly maxWidth: number | null;
readonly flex: number;
}ComponentStyleStateName
@webrad/runtime · type
export type ComponentStyleStateName = 'base' | 'hover' | 'focus' | 'active' | 'disabled';StyleLengthUnit
@webrad/runtime · type
export type StyleLengthUnit = 'px' | 'rem' | '%' | 'vw' | 'vh';StyleLengthValue
@webrad/runtime · interface
export interface StyleLengthValue {
readonly value: number;
readonly unit: StyleLengthUnit;
}LinearGradientDirection
@webrad/runtime · type
export type LinearGradientDirection = 'to-right' | 'to-bottom-right' | 'to-bottom' | 'to-bottom-left' | 'to-left' | 'to-top-left' | 'to-top' | 'to-top-right';BackgroundGradientValue
@webrad/runtime · interface
export interface BackgroundGradientValue {
readonly kind: 'linear';
readonly direction: LinearGradientDirection;
readonly from: string;
readonly to: string;
}StylePropertyValue
@webrad/runtime · type
export type StylePropertyValue = string | number | StyleLengthValue | BackgroundGradientValue;TailwindStyleProperties
@webrad/runtime · type
export type TailwindStyleProperties = Readonly<Record<string, StylePropertyValue | undefined>>;TailwindStyleSource
@webrad/runtime · interface
export interface TailwindStyleSource {
readonly componentType?: string;
readonly states: Readonly<Record<ComponentStyleStateName, TailwindStyleProperties>>;
readonly themeOverrides?: Readonly<Partial<Record<'light' | 'dark', Partial<Record<ComponentStyleStateName, TailwindStyleProperties>>>>>;
}RuntimeComponentStyle
@webrad/runtime · interface
export interface RuntimeComponentStyle {
readonly id: string;
readonly componentType: string;
readonly preset?: string;
readonly className: string;
}tokenizeTailwindClasses
@webrad/runtime · function
export function tokenizeTailwindClasses(value: string): readonly string[];paletteColorId
@webrad/runtime · function
export function paletteColorId(value: unknown): string | undefined;paletteColorReference
@webrad/runtime · function
export function paletteColorReference(id: string): string;resolveDataGridColumnTrackWidths
@webrad/runtime · function
export function resolveDataGridColumnTrackWidths(columns: readonly DataGridColumnTrackSource[], availableWidth: number): readonly number[];resolveStylePropertyCandidate
@webrad/runtime · function
export function resolveStylePropertyCandidate(propertyName: string, value: StylePropertyValue): string | undefined;resolveComponentStyleStateClassNames
@webrad/runtime · function
export function resolveComponentStyleStateClassNames(properties: TailwindStyleProperties | null | undefined): readonly string[];resolveComponentStyleClassNames
@webrad/runtime · function
export function resolveComponentStyleClassNames(style: TailwindStyleSource | null | undefined): readonly string[];resolveComponentStyleClassName
@webrad/runtime · function
export function resolveComponentStyleClassName(style: TailwindStyleSource | null | undefined): string;resolveComponentStylePreviewClassName
@webrad/runtime · function
export function resolveComponentStylePreviewClassName(style: TailwindStyleSource | null | undefined, stateName: ComponentStyleStateName): string;resolveThemedStyle
@webrad/runtime · function
export function resolveThemedStyle(style: TailwindStyleSource, mode: ResolvedThemeMode): TailwindStyleSource;VisualSizingMode
@webrad/runtime · type
export type VisualSizingMode = 'bounds' | 'fill';ComponentVisualStyle
@webrad/runtime · interface
export interface ComponentVisualStyle {
readonly width: string;
readonly height: string;
readonly backgroundColor?: string;
readonly color?: string;
readonly borderColor?: string;
readonly borderStyle?: 'solid';
readonly borderWidth?: string;
}ComponentVisualProjection
@webrad/runtime · interface
export interface ComponentVisualProjection {
readonly classNames: readonly string[];
readonly style: ComponentVisualStyle;
readonly visible: boolean;
readonly collapseWhenHidden: boolean;
readonly enabled: boolean;
readonly title?: string;
readonly tabIndex?: number;
}readStringProperty
@webrad/runtime · function
export function readStringProperty(source: VisualPropertySource, name: string, fallback?: string): string;readBooleanProperty
@webrad/runtime · function
export function readBooleanProperty(source: VisualPropertySource, name: string, fallback?: boolean): boolean;readIntegerProperty
@webrad/runtime · function
export function readIntegerProperty(source: VisualPropertySource, name: string): number | undefined;readIntegerProperty
@webrad/runtime · function
export function readIntegerProperty(source: VisualPropertySource, name: string, fallback: number): number;readStringListProperty
@webrad/runtime · function
export function readStringListProperty(source: VisualPropertySource, name: string): readonly string[];projectComponentVisual
@webrad/runtime · function
export function projectComponentVisual(source: VisualComponentSource, sizing?: VisualSizingMode): ComponentVisualProjection;WEBRAD_COMPONENT_CSS
@webrad/runtime · variable
export const WEBRAD_COMPONENT_CSS: string;WEBRAD_PROJECT_CSS
@webrad/runtime · variable
export const WEBRAD_PROJECT_CSS: string;WebImagePlaceholder
@webrad/runtime/image-display · type
export type WebImagePlaceholder = 'image' | 'user';imagePlaceholderSource
@webrad/runtime/image-display · function
export function imagePlaceholderSource(placeholder: WebImagePlaceholder): string;bindImageResampling
@webrad/runtime/image-display · function
export function bindImageResampling(element: HTMLImageElement): () => void;Message
· variable
/** Globally available WebRAD dialog helper. */
declare const Message: typeof import('@webrad/runtime').Message;Confirm
· variable
/** Globally available WebRAD confirmation helper. */
declare const Confirm: typeof import('@webrad/runtime').Confirm;Theme
· variable
/** Application theme service, available without an import. */
declare const Theme: typeof import('@webrad/runtime').Theme;RestGO
· variable
/** The RestGO client configured in Project Settings, shared by all pages. */
declare const RestGO: import('@webrad/restgo-sdk').RestGoClient;Sucess
· variable
declare const Sucess: typeof import('@webrad/runtime').Sucess;Alert
· variable
declare const Alert: typeof import('@webrad/runtime').Alert;Danger
· variable
declare const Danger: typeof import('@webrad/runtime').Danger;Notifier
· variable
declare const Notifier: typeof import('@webrad/runtime').Notifier;RestGoDynamicResult
@webrad/restgo-sdk · type
type RestGoDynamicResult<T> = RestGoResult<T> & RestGoDynamicMetadata;RestGoHttpMethod
@webrad/restgo-sdk · type
type RestGoHttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';RestGoEndpointOptions
@webrad/restgo-sdk · interface
interface RestGoEndpointOptions {
database?: string;
version?: number;
}RestGoEndpoint
@webrad/restgo-sdk · class
class RestGoEndpoint<T = unknown> {
constructor(transport: RestGoTransport, database: string, name: string, version?: number | undefined);
get<U = T>(options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
post<U = T>(body?: unknown, options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
put<U = T>(body?: unknown, options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
patch<U = T>(body?: unknown, options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
delete<U = T>(body?: unknown, options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
head(options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<null>>;
options<U = T>(options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
request<U = T>(method: RestGoHttpMethod, body?: unknown, options?: RestGoDynamicOptions): Promise<RestGoDynamicResult<U>>;
}RestGoDatabase
@webrad/restgo-sdk · class
class RestGoDatabase {
constructor(transport: RestGoTransport, database: string);
endpoint<T = unknown>(name: string, options?: {
version?: number;
}): RestGoEndpoint<T>;
}RestGoApiClient
@webrad/restgo-sdk · class
/** Calls published endpoints. RestGo does not expose Supabase table/SQL operations. */
class RestGoApiClient {
constructor(transport: RestGoTransport);
from(database?: string): RestGoDatabase;
endpoint<T = unknown>(name: string, options?: RestGoEndpointOptions): RestGoEndpoint<T>;
}AuthListener
@webrad/restgo-sdk · type
type AuthListener = (event: RestGoAuthEvent, session: RestGoSession | null) => void;RestGoAuthClient
@webrad/restgo-sdk · class
class RestGoAuthClient {
/** Startup checks persisted credentials with GET /auth/session. */
readonly ready: Promise<RestGoResult<RestGoSession | null>>;
constructor(transport: RestGoTransport, options: RestGoClientOptions);
/** Stop timers/listeners without revoking or deleting persisted credentials. */
dispose(): void;
/** Local snapshot; reading it does not issue a request or validate the session. */
get CurrentUser(): RestGoCurrentUser | null;
/** POST /auth/refresh, with single-use rotation serialized across callers and tabs. */
refreshSession(): Promise<RestGoResult<RestGoSession>>;
onAuthStateChange(callback: AuthListener): {
unsubscribe: () => void;
};
signInWithPassword(input: RestGoSignInInput): Promise<RestGoResult<RestGoSession>>;
/** Public registration. The server must allow anonymous signup. Does not start a session. */
signUp(input: RestGoSignUpInput): Promise<RestGoResult<RestGoManagedUser>>;
signOut(): Promise<RestGoResult<RestGoSuccess>>;
/** Always asks the server; JWT expiry metadata is not proof of an active session. */
getSession(): Promise<RestGoResult<RestGoSession | null>>;
getUser(): Promise<RestGoResult<RestGoUser | null>>;
setSession(input: StoredSession): Promise<RestGoResult<RestGoSession>>;
resetPasswordForEmail(email: string, options?: {
url?: string;
}): Promise<RestGoResult<RestGoSuccess>>;
confirmPasswordReset(input: {
token: string;
password: string;
}): Promise<RestGoResult<RestGoSuccess>>;
confirmEmail(token: string): Promise<RestGoResult<RestGoSuccess>>;
updateUser(input: RestGoUpdateUserInput, options?: RestGoRequestOptions): Promise<RestGoResult<RestGoUpdateUserResult>>;
resendEmailConfirmation(options?: RestGoRequestOptions & {
url?: string;
}): Promise<RestGoResult<RestGoSuccess>>;
uploadAvatar(file: Blob, options?: {
name?: string;
signal?: AbortSignal;
}): Promise<RestGoResult<{
avatarUrl: string | null;
}>>;
deleteAvatar(options?: RestGoRequestOptions): Promise<RestGoResult<{
avatarUrl: string | null;
}>>;
}RestGoClient
@webrad/restgo-sdk · class
class RestGoClient {
readonly auth: RestGoAuthClient;
readonly storage: RestGoStorageClient;
readonly videos: RestGoVideosClient;
readonly payments: RestGoPaymentsClient;
readonly api: RestGoApiClient;
readonly baseUrl: string;
constructor(baseUrl: string, options?: RestGoClientOptions);
from<T = unknown>(endpoint: string, options?: RestGoEndpointOptions): RestGoEndpoint<T>;
/** Sign in with positional parameters and report whether this login succeeded. */
login(email: string, password: string, remember?: boolean): Promise<RestGoLoginResult>;
logout(): Promise<RestGoResult<RestGoSuccess>>;
getSession(): Promise<RestGoResult<RestGoSession | null>>;
getUser(): Promise<RestGoResult<RestGoUser | null>>;
/** Last server-confirmed identity, or null before authentication/restoration. */
get CurrentUser(): RestGoCurrentUser | null;
refreshSession(): Promise<RestGoResult<RestGoSession>>;
onAuthStateChange(callback: (event: RestGoAuthEvent, session: RestGoSession | null) => void): {
unsubscribe: () => void;
};
/** Release browser listeners and automatic renewal without logging the user out. */
dispose(): void;
}createClient
@webrad/restgo-sdk · function
function createClient(baseUrl: string, options?: RestGoClientOptions): RestGoClient;RestGoErrorCode
@webrad/restgo-sdk · type
type RestGoErrorCode = 'HTTP_ERROR' | 'NETWORK_ERROR' | 'ABORTED' | 'INVALID_RESPONSE' | 'INVALID_ARGUMENT' | 'AUTH_REQUIRED' | 'API_TOKEN_REQUIRED' | 'REFRESH_LOCK_UNAVAILABLE' | 'AUTH_OPERATION_CANCELLED';RestGoError
@webrad/restgo-sdk · class
class RestGoError extends Error {
readonly status: number;
readonly code: RestGoErrorCode;
readonly details: unknown;
readonly retryAfterMs: number | undefined;
constructor(message: string, code: RestGoErrorCode, status?: number, details?: unknown, retryAfterMs?: number);
}RestGoResult
@webrad/restgo-sdk · type
type RestGoResult<T> = {
data: T;
error: null;
} | {
data: null;
error: RestGoError;
};success
@webrad/restgo-sdk · function
function success<T>(data: T): RestGoResult<T>;failure
@webrad/restgo-sdk · function
function failure(message: string, code: RestGoErrorCode, status?: number, details?: unknown, retryAfterMs?: number): {
data: null;
error: RestGoError;
};isRecord
@webrad/restgo-sdk · function
function isRecord(value: unknown): value is Record<string, unknown>;RestGoPaymentMode
@webrad/restgo-sdk · type
type RestGoPaymentMode = 'payment' | 'subscription';RestGoPaymentProvider
@webrad/restgo-sdk · type
type RestGoPaymentProvider = 'stripe' | 'asaas';RestGoCheckoutInput
@webrad/restgo-sdk · interface
interface RestGoCheckoutInput {
/** Keep database identifiers as strings, including PostgreSQL int8 values. */
readonly sourceKey: string;
readonly mode: RestGoPaymentMode;
/** Persist before the first POST and reuse for every retry of this attempt. */
readonly idempotencyKey: string;
}RestGoPaymentProviderState
@webrad/restgo-sdk · interface
interface RestGoPaymentProviderState {
readonly status: string;
readonly paymentId?: string;
readonly subscriptionId?: string;
readonly customerId?: string;
readonly invoiceId?: string;
readonly periodEnd?: string;
readonly cancelAtPeriodEnd: boolean;
readonly everPaid?: boolean;
readonly eventType?: string;
}RestGoPaymentOperation
@webrad/restgo-sdk · interface
interface RestGoPaymentOperation {
readonly id: string;
readonly mode: RestGoPaymentMode;
/** Financial state. Unknown future states are preserved, never treated as success. */
readonly status: string;
/** Preparation state, independent of financial confirmation. */
readonly checkoutState: string;
readonly checkoutUrl?: string;
readonly synchronizationPending: boolean;
readonly synchronizationError?: string;
readonly providerName: RestGoPaymentProvider;
readonly provider: RestGoPaymentProviderState;
}RestGoPaymentOperationList
@webrad/restgo-sdk · interface
interface RestGoPaymentOperationList {
readonly data: readonly RestGoPaymentOperation[];
/** Empty string means the last page. Ordering is by UUID, not creation time. */
readonly nextCursor: string;
}RestGoPaymentRequestOptions
@webrad/restgo-sdk · interface
interface RestGoPaymentRequestOptions {
readonly signal?: AbortSignal;
}RestGoPaymentListOptions
@webrad/restgo-sdk · interface
interface RestGoPaymentListOptions extends RestGoPaymentRequestOptions {
readonly before?: string;
}isRestGoPaymentUUID
@webrad/restgo-sdk · function
function isRestGoPaymentUUID(value: unknown): value is string;isRestGoPaymentMode
@webrad/restgo-sdk · function
function isRestGoPaymentMode(value: unknown): value is RestGoPaymentMode;isRestGoGatewaySlug
@webrad/restgo-sdk · function
function isRestGoGatewaySlug(value: unknown): value is string;isRestGoCheckoutURL
@webrad/restgo-sdk · function
/** Hosted checkouts must never execute an arbitrary URL scheme or URL credentials. */
function isRestGoCheckoutURL(value: unknown): value is string;isRestGoCheckoutInput
@webrad/restgo-sdk · function
function isRestGoCheckoutInput(value: unknown): value is RestGoCheckoutInput;isRestGoPaymentOperation
@webrad/restgo-sdk · function
function isRestGoPaymentOperation(value: unknown): value is RestGoPaymentOperation;isRestGoPaymentOperationList
@webrad/restgo-sdk · function
function isRestGoPaymentOperationList(value: unknown): value is RestGoPaymentOperationList;RestGoPaymentGatewayClient
@webrad/restgo-sdk · class
/** Customer-only payment routes. Gateway administration stays on the server. */
class RestGoPaymentGatewayClient {
readonly slug: string;
constructor(transport: RestGoTransport, slug: string);
createCheckout(input: RestGoCheckoutInput, options?: RestGoPaymentRequestOptions): Promise<RestGoResult<RestGoPaymentOperation>>;
getOperation(id: string, options?: RestGoPaymentRequestOptions): Promise<RestGoResult<RestGoPaymentOperation>>;
listOperations(options?: RestGoPaymentListOptions): Promise<RestGoResult<RestGoPaymentOperationList>>;
cancelSubscription(id: string, options?: RestGoPaymentRequestOptions): Promise<RestGoResult<RestGoPaymentOperation>>;
}RestGoPaymentsClient
@webrad/restgo-sdk · class
class RestGoPaymentsClient {
constructor(transport: RestGoTransport);
gateway(slug: string): RestGoPaymentGatewayClient;
}StoredSession
@webrad/restgo-sdk · interface
interface StoredSession {
token: string;
expiresAt: string;
refreshToken?: string;
refreshExpiresAt?: string;
}isStoredSession
@webrad/restgo-sdk · function
function isStoredSession(value: unknown): value is StoredSession;credentials
@webrad/restgo-sdk · function
function credentials(value: StoredSession): StoredSession;RestGoStorageClient
@webrad/restgo-sdk · class
class RestGoStorageClient {
constructor(transport: RestGoTransport);
list(options?: RestGoListOptions): Promise<RestGoResult<RestGoList<RestGoStoredFile>>>;
upload(file: Blob, options?: RestGoFileOptions): Promise<RestGoResult<RestGoStoredFile>>;
get(id: string, options?: {
signal?: AbortSignal;
}): Promise<RestGoResult<RestGoStoredFile>>;
update(id: string, input: RestGoFileUpdate): Promise<RestGoResult<RestGoStoredFile>>;
remove(id: string, options?: {
signal?: AbortSignal;
}): Promise<RestGoResult<null>>;
download(id: string, options?: {
range?: string;
public?: boolean;
signal?: AbortSignal;
}): Promise<RestGoResult<Blob>>;
/** Constructs a URL; public access still depends on the file's isPublic metadata. */
getPublicUrl(id: string): RestGoResult<{
publicUrl: string;
}>;
usage(options?: {
signal?: AbortSignal;
}): Promise<RestGoResult<RestGoStorageUsage>>;
}TransportRequest
@webrad/restgo-sdk · interface
interface TransportRequest extends RestGoRequestOptions {
method?: string;
body?: unknown;
auth?: RestGoCredentialMode;
token?: string;
responseType?: 'json' | 'blob' | 'response';
/** A 401 from this endpoint definitively rejects the user session. */
sessionAuthority?: boolean;
skipUnauthorized?: boolean;
onUploadProgress?: (progress: RestGoUploadProgress) => void;
/** Send a Blob as binary without changing its explicit Content-Type. */
binary?: boolean;
/** Resumable writes must reconcile their offset after session renewal. */
retryUnauthorized?: boolean;
}RestGoSessionStorage
@webrad/restgo-sdk · type
type RestGoSessionStorage = 'local' | 'session' | 'memory';RestGoSessionStorageAdapter
@webrad/restgo-sdk · interface
/** Browser-safe durable storage supplied by an embedding host. */
interface RestGoSessionStorageAdapter {
getItem(key: string): string | null;
setItem(key: string, value: string): void;
removeItem(key: string): void;
subscribe?(callback: () => void): () => void;
}RestGoClientOptions
@webrad/restgo-sdk · interface
interface RestGoClientOptions {
persistSession?: boolean;
/** Renew before JWT expiry and retry a rejected session request once. Defaults to true. */
autoRefreshToken?: boolean;
sessionStorage?: RestGoSessionStorage;
storageKey?: string;
/** Used only with persistent local sessions; never changes session/memory semantics. */
storage?: RestGoSessionStorageAdapter;
apiVersion?: number;
defaultDatabase?: string;
fetch?: typeof fetch;
/** An active RestGo API token. Never supply RESTGO_AUTHORIZATION here. */
apiToken?: string;
}RestGoUser
@webrad/restgo-sdk · interface
interface RestGoUser {
id: string;
email: string;
fullName: string;
avatarUrl: string | null;
active: boolean;
emailConfirmed: boolean;
}RestGoCurrentUser
@webrad/restgo-sdk · interface
/** Readonly projection of the last server-confirmed user identity. */
interface RestGoCurrentUser {
readonly nome: string;
readonly email: string;
readonly id: string;
readonly emailconfirmed: boolean;
readonly ativo: boolean;
}RestGoManagedUser
@webrad/restgo-sdk · interface
interface RestGoManagedUser extends Omit<RestGoUser, 'avatarUrl'> {
avatarUrl?: string;
createdAt: string;
updatedAt: string;
}RestGoSession
@webrad/restgo-sdk · interface
interface RestGoSession {
token: string;
/** Used to schedule renewal; the server remains the authority on session validity. */
expiresAt: string;
/** Both refresh fields are absent for legacy JWT-only sessions. */
refreshToken?: string;
refreshExpiresAt?: string;
user: RestGoUser;
}RestGoLoginResult
@webrad/restgo-sdk · type
/** Result of login; the boolean also narrows data and error in authored code. */
type RestGoLoginResult = {
sucess: true;
data: RestGoSession;
error: null;
} | {
sucess: false;
data: null;
error: RestGoError;
};RestGoAuthEvent
@webrad/restgo-sdk · type
type RestGoAuthEvent = 'INITIAL_SESSION' | 'SIGNED_IN' | 'SIGNED_OUT' | 'SESSION_VALIDATED' | 'TOKEN_REFRESHED' | 'USER_UPDATED';RestGoSignInInput
@webrad/restgo-sdk · interface
interface RestGoSignInInput {
email: string;
password: string;
remember?: boolean;
}RestGoSignUpInput
@webrad/restgo-sdk · interface
interface RestGoSignUpInput {
email: string;
password: string;
fullName?: string;
active?: boolean;
}RestGoUpdateUserInput
@webrad/restgo-sdk · interface
/** Self-service fields; activation and confirmation remain server-controlled. */
interface RestGoUpdateUserInput {
fullName?: string;
email?: string;
password?: string;
/** Required when changing email or password. */
currentPassword?: string;
/** Optional absolute HTTP(S) destination for a confirmation email after a profile update. */
emailConfirmationUrl?: string;
}RestGoUpdateUserResult
@webrad/restgo-sdk · interface
interface RestGoUpdateUserResult {
user: RestGoUser;
/** Credential changes revoke all sessions and require a new login. */
sessionRevoked: boolean;
}RestGoSuccess
@webrad/restgo-sdk · interface
interface RestGoSuccess {
success: boolean;
message?: string;
}RestGoQueryValue
@webrad/restgo-sdk · type
type RestGoQueryValue = string | number | boolean | null | undefined;RestGoQuery
@webrad/restgo-sdk · type
type RestGoQuery = Record<string, RestGoQueryValue | readonly RestGoQueryValue[]>;RestGoCredentialMode
@webrad/restgo-sdk · type
type RestGoCredentialMode = 'auto' | 'session' | 'apiToken' | 'none';RestGoRequestOptions
@webrad/restgo-sdk · interface
interface RestGoRequestOptions {
query?: RestGoQuery;
signal?: AbortSignal;
headers?: HeadersInit;
}RestGoDynamicOptions
@webrad/restgo-sdk · interface
interface RestGoDynamicOptions extends RestGoRequestOptions {
auth?: RestGoCredentialMode;
version?: number;
pagination?: 'exact' | 'simple' | 'cursor';
cursorColumn?: string;
cursor?: string;
page?: number;
}RestGoDynamicMetadata
@webrad/restgo-sdk · interface
interface RestGoDynamicMetadata {
page?: number;
total_pages?: number;
has_more?: boolean;
next_cursor?: string;
}RestGoListOptions
@webrad/restgo-sdk · interface
interface RestGoListOptions {
page?: number;
pageSize?: number;
q?: string;
ownerId?: string;
signal?: AbortSignal;
}RestGoListPage
@webrad/restgo-sdk · interface
interface RestGoListPage<T> {
data: T[];
page: number;
page_size: number;
has_more: boolean;
}RestGoList
@webrad/restgo-sdk · type
type RestGoList<T> = T[] | RestGoListPage<T>;RestGoStoredFile
@webrad/restgo-sdk · interface
interface RestGoStoredFile {
id: string;
ownerId?: string;
ownerEmail?: string;
originalName: string;
contentType: string;
sizeBytes: number;
isPublic: boolean;
createdAt: string;
updatedAt: string;
downloadUrl: string;
}RestGoFileOptions
@webrad/restgo-sdk · interface
interface RestGoFileOptions {
name?: string;
isPublic?: boolean;
ownerId?: string;
signal?: AbortSignal;
/** Actual multipart upload progress. The percentage is null when it cannot be measured. */
onUploadProgress?: (progress: RestGoUploadProgress) => void;
}RestGoUploadProgress
@webrad/restgo-sdk · interface
interface RestGoUploadProgress {
loaded: number;
total: number | null;
percentage: number | null;
lengthComputable: boolean;
}RestGoFileUpdate
@webrad/restgo-sdk · interface
interface RestGoFileUpdate extends RestGoFileOptions {
file?: Blob;
}RestGoStorageUsage
@webrad/restgo-sdk · interface
interface RestGoStorageUsage {
usedBytes: number;
capacityBytes: number;
availableBytes: number;
}UploadProgressCallback
@webrad/restgo-sdk · type
type UploadProgressCallback = (progress: RestGoUploadProgress) => void;supportsCrossOriginUpload
@webrad/restgo-sdk · function
/** XHR omits ambient credentials only for requests that start across origins. */
function supportsCrossOriginUpload(url: string): boolean;notifyUploadProgress
@webrad/restgo-sdk · function
function notifyUploadProgress(callback: UploadProgressCallback, progress: RestGoUploadProgress): void;requestWithUploadProgress
@webrad/restgo-sdk · function
/**
* Cross-origin XHR provides bytes sent by the browser without dashboard cookies.
* Unlike fetch, XHR cannot prevent redirects before following them. Reject a changed
* response URL so a redirected response cannot be accepted as RestGo metadata.
*/
function requestWithUploadProgress(url: string, method: string, headers: Headers, body: FormData | Blob | string, signal: AbortSignal | undefined, callback: UploadProgressCallback, responseType: 'json' | 'blob' | undefined): Promise<Response>;RestGoVideoStatus
@webrad/restgo-sdk · type
type RestGoVideoStatus = 'uploading' | 'pending' | 'processing' | 'ready' | 'failed' | 'deleting';RestGoVideoUploadState
@webrad/restgo-sdk · type
type RestGoVideoUploadState = 'open' | 'completed' | 'cancelled';RestGoVideoJobState
@webrad/restgo-sdk · type
type RestGoVideoJobState = 'pending' | 'processing' | 'ready' | 'failed' | 'cancelled';RestGoVideoUploadSession
@webrad/restgo-sdk · interface
interface RestGoVideoUploadSession {
id: string;
videoId: string;
offset: number;
sizeBytes: number;
state: RestGoVideoUploadState;
expiresAt: string;
maxChunkBytes: number;
}RestGoVideoSource
@webrad/restgo-sdk · interface
interface RestGoVideoSource {
width: number;
height: number;
codedWidth: number;
codedHeight: number;
rotation: number;
fps: number;
frameRate: string;
duration: number;
format: string;
codec: string;
hasAudio: boolean;
audioCodec?: string;
videoStream: number;
audioStream: number;
level: number;
}RestGoVideoVariant
@webrad/restgo-sdk · interface
interface RestGoVideoVariant {
quality: number;
width: number;
height: number;
fps: number;
frameRate: string;
bandwidth: number;
averageBandwidth: number;
codecs: string;
}RestGoVideo
@webrad/restgo-sdk · interface
interface RestGoVideo {
id: string;
ownerId?: string;
title: string;
descri: string;
isPublic: boolean;
sizeBytes: number;
source: RestGoVideoSource;
originalRetained: boolean;
status: RestGoVideoStatus;
progress: number | null;
error: string;
generation?: string;
variants: RestGoVideoVariant[];
hasThumbnail: boolean;
createdAt: string;
updatedAt: string;
}RestGoVideoJob
@webrad/restgo-sdk · interface
interface RestGoVideoJob {
id: string;
state: RestGoVideoJobState;
error: string;
attempts: number;
options: Readonly<Record<string, unknown>>;
createdAt: string;
startedAt: string | null;
finishedAt: string | null;
}RestGoVideoDetails
@webrad/restgo-sdk · interface
interface RestGoVideoDetails {
video: RestGoVideo;
jobs: RestGoVideoJob[];
}RestGoVideoList
@webrad/restgo-sdk · interface
interface RestGoVideoList {
data: RestGoVideo[];
total: number;
limit: number;
offset: number;
}RestGoVideoHlsDescriptor
@webrad/restgo-sdk · interface
interface RestGoVideoHlsDescriptor {
id: string;
title: string;
isPublic: boolean;
masterUrl: string;
thumbnailUrl: string;
variants: RestGoVideoVariant[];
duration: number;
authentication: string;
masterAbsoluteUrl: string;
thumbnailAbsoluteUrl: string;
}RestGoVideoRequestOptions
@webrad/restgo-sdk · interface
interface RestGoVideoRequestOptions {
signal?: AbortSignal;
}RestGoVideoCreateInput
@webrad/restgo-sdk · interface
interface RestGoVideoCreateInput {
filename: string;
sizeBytes: number;
title?: string;
descri?: string;
isPublic?: boolean;
}RestGoVideoUpdate
@webrad/restgo-sdk · interface
interface RestGoVideoUpdate {
title: string;
descri: string;
isPublic: boolean;
}RestGoVideoListOptions
@webrad/restgo-sdk · interface
interface RestGoVideoListOptions extends RestGoVideoRequestOptions {
limit?: number;
offset?: number;
q?: string;
status?: RestGoVideoStatus;
}RestGoVideoChunkOptions
@webrad/restgo-sdk · interface
interface RestGoVideoChunkOptions extends RestGoVideoRequestOptions {
offset: number;
checksum: string;
onUploadProgress?: (progress: RestGoUploadProgress) => void;
}RestGoVideoProgress
@webrad/restgo-sdk · interface
interface RestGoVideoProgress {
readonly confirmedBytes: number;
readonly totalBytes: number;
readonly percentage: number;
/** Transient network measurement, separate from confirmedBytes. */
readonly chunk: RestGoUploadProgress | null;
}RestGoVideoResumeToken
@webrad/restgo-sdk · interface
/** Serializable runtime checkpoint. No credential or File is included. */
interface RestGoVideoResumeToken {
readonly version: 1;
readonly baseUrl: string;
readonly ownerId: string;
readonly uploadId: string;
readonly videoId: string;
readonly name: string;
readonly sizeBytes: number;
readonly lastModified: number;
/** SHA-256 chain over consecutive 8 MiB parts of the complete file. */
readonly fingerprint: string;
}RestGoVideoUploadOptions
@webrad/restgo-sdk · interface
interface RestGoVideoUploadOptions extends RestGoVideoRequestOptions {
title?: string;
descri?: string;
isPublic?: boolean;
chunkSizeBytes?: number;
maxRetries?: number;
onSession?: (session: RestGoVideoUploadSession) => void;
onResumeToken?: (token: RestGoVideoResumeToken) => void;
onProgress?: (progress: RestGoVideoProgress) => void;
onPhase?: (phase: 'hashing' | 'creating' | 'uploading' | 'finalizing') => void;
}RestGoVideoResumeOptions
@webrad/restgo-sdk · interface
interface RestGoVideoResumeOptions extends RestGoVideoUploadOptions {
resumeToken: RestGoVideoResumeToken;
}RestGoVideoWaitOptions
@webrad/restgo-sdk · interface
interface RestGoVideoWaitOptions extends RestGoVideoRequestOptions {
intervalMs?: number;
timeoutMs?: number;
onProgress?: (details: RestGoVideoDetails) => void;
}videoAbort
@webrad/restgo-sdk · function
function videoAbort(signal?: AbortSignal): void;videoDelay
@webrad/restgo-sdk · function
function videoDelay(ms: number, signal?: AbortSignal): Promise<void>;videoTransient
@webrad/restgo-sdk · function
function videoTransient(error: RestGoError): boolean;videoChecksum
@webrad/restgo-sdk · function
function videoChecksum(chunk: Blob, signal?: AbortSignal): Promise<string>;transferVideo
@webrad/restgo-sdk · function
function transferVideo(client: RestGoVideosClient, transport: RestGoTransport, file: File, options: RestGoVideoUploadOptions, resume?: RestGoVideoResumeOptions): Promise<RestGoResult<RestGoVideo>>;videoId
@webrad/restgo-sdk · function
function videoId(value: unknown): value is string;videoInteger
@webrad/restgo-sdk · function
function videoInteger(value: unknown, minimum?: number): value is number;videoNumber
@webrad/restgo-sdk · function
function videoNumber(value: unknown): value is number;videoSession
@webrad/restgo-sdk · function
function videoSession(value: unknown): value is RestGoVideoUploadSession;videoVariants
@webrad/restgo-sdk · function
function videoVariants(value: unknown): value is RestGoVideoVariant[];videoRecord
@webrad/restgo-sdk · function
function videoRecord(value: unknown): value is RestGoVideo;videoDetails
@webrad/restgo-sdk · function
function videoDetails(value: unknown): value is RestGoVideoDetails;RestGoVideoUploadsClient
@webrad/restgo-sdk · class
class RestGoVideoUploadsClient {
constructor(transport: RestGoTransport);
create(input: RestGoVideoCreateInput, options?: RestGoVideoRequestOptions): Promise<RestGoResult<RestGoVideoUploadSession>>;
get(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<RestGoVideoUploadSession>>;
sendChunk(id: string, chunk: Blob, options: RestGoVideoChunkOptions): Promise<RestGoResult<RestGoVideoUploadSession>>;
complete(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<RestGoVideo>>;
cancel(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<{
status: 'deleting';
}>>;
}RestGoVideosClient
@webrad/restgo-sdk · class
class RestGoVideosClient {
readonly uploads: RestGoVideoUploadsClient;
constructor(transport: RestGoTransport);
upload(file: File, options?: RestGoVideoUploadOptions): Promise<RestGoResult<RestGoVideo>>;
resumeUpload(id: string, file: File, options: RestGoVideoResumeOptions): Promise<RestGoResult<RestGoVideo>>;
list(options?: RestGoVideoListOptions): Promise<RestGoResult<RestGoVideoList>>;
get(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<RestGoVideoDetails>>;
update(id: string, input: RestGoVideoUpdate, options?: RestGoVideoRequestOptions): Promise<RestGoResult<RestGoVideo>>;
remove(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<{
id: string;
status: 'deleting';
}>>;
process(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<{
id: string;
jobId: string;
status: 'pending';
}>>;
reprocess(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<{
id: string;
jobId: string;
status: 'pending';
}>>;
cancelProcessing(id: string, options?: RestGoVideoRequestOptions): Promise<RestGoResult<{
id: string;
state: 'cancelled';
}>>;
getHls(id: string, options?: RestGoVideoRequestOptions & {
public?: boolean;
}): Promise<RestGoResult<RestGoVideoHlsDescriptor>>;
getThumbnail(id: string, options?: RestGoVideoRequestOptions & {
public?: boolean;
}): Promise<RestGoResult<Blob>>;
/** Browser media bridge: current shared session, one 401 renewal, no cookies or redirects. */
getMedia(id: string, uri: string, options?: RestGoVideoRequestOptions & {
public?: boolean;
range?: string;
method?: 'GET' | 'HEAD';
}): Promise<RestGoResult<Response>>;
waitUntilReady(id: string, options?: RestGoVideoWaitOptions): Promise<RestGoResult<RestGoVideo>>;
}