Cap Widget
wednesday-ui/cap-widgetFreeComponent
A cap widget component
Install it
npx shadcn@latest add https://ui.ednesdayw.com/r/cap-widget.jsonSource
1"use client";23import {4 forwardRef,5 useCallback,6 useEffect,7 useImperativeHandle,8 useRef,9 useState,10} from "react";1112import type React from "react";1314declare module "react" {15 namespace JSX {16 interface IntrinsicElements {17 "cap-widget": React.DetailedHTMLProps<18 React.HTMLAttributes<HTMLElement>,19 HTMLElement20 >;21 }22 }23}2425declare global {26 interface Window {27 CAP_CUSTOM_FETCH?: (url: string, options?: RequestInit) => Promise<unknown>;28 CAP_CUSTOM_WASM_URL?: string;29 }30}3132interface CapWidgetProps33 extends Omit<React.ComponentProps<"div">, "onError" | "onProgress"> {34 endpoint: string;35 workerCount?: number;36 override?: {37 wasmUrl?: string;38 customFetch?: (url: string, options?: RequestInit) => Promise<unknown>;39 };40 locale?: {41 initial?: string;42 verifying?: string;43 solved?: string;44 error?: string;45 wasmDisabled?: string;46 verifyingAria?: string;47 solvedAria?: string;48 errorAria?: string;49 };50 onSolve?: (token: string) => void;51 onError?: (message: string) => void;52 onReset?: () => void;53 onProgress?: (progress: number) => void;54}5556const CapWidget = forwardRef<HTMLDivElement, CapWidgetProps>(57 (58 {59 endpoint,60 workerCount,61 override,62 locale,63 onSolve,64 onError,65 onReset,66 onProgress,67 style,68 ...props69 },70 ref,71 ) => {72 const { wasmUrl, customFetch } = override ?? {};7374 const [loading, setLoading] = useState(true);75 const widgetRef = useRef<HTMLDivElement>(null);76 useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(77 ref,78 () => widgetRef.current,79 );8081 const handleSolve = useCallback(82 (e: Event) => {83 console.log("handleSolve", e);84 const customEvent = e as CustomEvent<{ token?: string }>;85 const token = customEvent.detail?.token;86 if (!token) return;87 onSolve?.(token);88 },89 [onSolve],90 );9192 const handleError = useCallback(93 (e: Event) => {94 const customEvent = e as CustomEvent<{ message?: string }>;95 const message = customEvent.detail?.message;96 if (!message) return;97 onError?.(message);98 },99 [onError],100 );101102 const handleReset = useCallback(() => {103 onReset?.();104 }, [onReset]);105106 const handleProgress = useCallback(107 (e: Event) => {108 const customEvent = e as CustomEvent<{ progress?: number }>;109// … truncated
What it pulls in
npm packages
Files it writes
More from Wednesday UI
All 99 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Autocompleteautocomplete | Wednesday UI | Components | Free | 1 dep | |
| Autocomplete Disabled Demoautocomplete-disabled-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Disabled Item Demoautocomplete-disabled-item-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Form Demoautocomplete-form-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Invalid Demoautocomplete-invalid-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Size Demoautocomplete-size-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Start Content Demoautocomplete-start-content-demo | Wednesday UI | Components | Free | no deps | |
| Autocomplete Variant Demoautocomplete-variant-demo | Wednesday UI | Components | Free | no deps |
