Browser | Minimum version |
Chrome | 67+ |
Firefox | 63+ |
Safari | 12.1+ |
Edge | 79+ |
lib/├── adp-widget.js (366KB) - main package [required]├── adp-widget-vendor.js (342KB) - dependency package [required]├── adp-widget-markdown.js (600KB) - Markdown component [on-demand loading]└── adp-widget-chart.js (790KB) - chart component [on-demand loading]
https://cdn.example.com/adp-widget/v1.2.1/adp-widget.jshttps://cdn.example.com/adp-widget/v1.2.1/adp-widget-vendor.jshttps://cdn.example.com/adp-widget/v1.2.1/adp-widget-markdown.jshttps://cdn.example.com/adp-widget/v1.2.1/adp-widget-chart.js
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>ADP-Widget Example</title><!-- Import local SDK files --><script type="module" src="/widget/adp-widget.js"></script></head><body><adp-widget id="my-widget"></adp-widget><script type="module">const widget = document.getElementById("my-widget");widget.setAttribute("widget-json",JSON.stringify({type: "Card",children: [{ type: "Title", value: "Welcome to ADP-Widget" },{ type: "Text", value: "This is a dynamically rendered card" },],}));</script></body></html>
Project root directory/├── public/│ └── widget/│ ├── adp-widget.js│ ├── adp-widget-vendor.js│ ├── adp-widget-markdown.js│ └── adp-widget-chart.js└── index.html
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8" /><title>ADP-Widget Example</title><!-- Import local SDK files --><script type="module" src="/widget/adp-widget.js"></script></head><body><adp-widget id="my-widget"></adp-widget><script type="module">const widget = document.getElementById("my-widget");widget.setAttribute("widget-json",JSON.stringify({type: "Card",children: [{ type: "Title", value: "Welcome to ADP-Widget" },{ type: "Text", value: "This is a dynamically rendered card" },],}));</script></body></html>
<!doctype html><html lang="zh-CN"><head><!-- Method 1: Use CDN --><scripttype="module"src="https://cdn.example.com/adp-widget/v1.0.0/adp-widget.js"></script><!-- Method 2: Use local files --><!-- <script type="module" src="/widget/adp-widget.js"></script> --></head><body><div id="root"></div></body></html>
src/vite-env.d.ts:/// <reference types="vite/client" />declare namespace JSX {interface IntrinsicElements {"adp-widget": React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & {"widget-json"?: string;disable?: boolean;locale?: string;ref?: React.Ref<HTMLElement>;},HTMLElement>;}}
import { useEffect, useRef, useState } from "react";function WidgetDemo() {const widgetRef = useRef<HTMLElement>(null);const [config, setConfig] = useState({type: "Card",children: [{ type: "Title", value: "React Integration Example" },{type: "Button",label: "click me",onClickAction: { type: "button.click" },},],});useEffect(() => {const widget = widgetRef.current;if (!widget) return;const handleAction = (e: Event) => {const customEvent = e as CustomEvent;console.log("Action:", customEvent.detail.action);};widget.addEventListener("widget-action", handleAction);return () => {widget.removeEventListener("widget-action", handleAction);};}, []);return (<adp-widgetref={widgetRef}widget-json={JSON.stringify(config)}locale="zh-CN"/>);}export default WidgetDemo;
<!doctype html><html lang="zh-CN"><head><!-- Method 1: Use CDN --><scripttype="module"src="https://cdn.example.com/adp-widget/v1.0.0/adp-widget.js"></script><!-- Method 2: Use local files --><!-- <script type="module" src="/widget/adp-widget.js"></script> --></head><body><div id="app"></div></body></html>
src/vite-env.d.ts:/// <reference types="vite/client" />declare module "vue" {export interface GlobalComponents {"adp-widget": {"widget-json"?: string;disable?: boolean;locale?: string;};}}
<template><div class="widget-container"><adp-widgetref="widgetRef":widget-json="JSON.stringify(config)":locale="locale":disable="isDisabled"@widget-action="handleAction"@widget-rendered="handleRendered"/></div></template><script setup lang="ts">import { ref } from "vue";const widgetRef = ref<HTMLElement>();const locale = ref<"zh-CN" | "en-US">("zh-CN");const isDisabled = ref(false);const config = ref({type: "Card",children: [{ type: "Title", value: "Vue Integration Example" },{type: "Button",label: "Click me",onClickAction: { type: "button.click" },},],});const handleAction = (e: Event) => {const customEvent = e as CustomEvent;console.log("Action:", customEvent.detail.action);};const handleRendered = (e: Event) => {const customEvent = e as CustomEvent;console.log("Rendered:", customEvent.detail);};</script>
widget-json (required)string<adp-widget widget-json='{"type":"Button","label":"button"}'></adp-widget>
const config = { type: "Button", label: "button" };widget.setAttribute("widget-json", JSON.stringify(config));
disable (optional)booleanfalsealwaysEnabled: true set).<!-- Disable --><adp-widget widget-json="..." disable></adp-widget><!-- enable --><adp-widget widget-json="..."></adp-widget>
// Disablewidget.setAttribute("disable", "");// enablewidget.removeAttribute("disable");
locale (optional)string'zh-CN''zh-CN','zh','chinese''en-US','en','english'<!-- Chinese --><adp-widget widget-json="..." locale="zh-CN"></adp-widget><!-- English --><adp-widget widget-json="..." locale="en-US"></adp-widget>
interface WidgetActionEvent extends CustomEvent {detail: {action: {type: string; // Action typepayload?: Record<string, unknown>; // Action data};};}
<!doctype html><html><head><script type="module" src="/widget/adp-widget.js"></script></head><body><adp-widget id="demo"></adp-widget><script type="module">const widget = document.getElementById("demo");// Listen for widget-action eventswidget.addEventListener("widget-action", (e) => {console.log("widget-action event:", e.detail.action);});// Listen for widget-rendered eventswidget.addEventListener("widget-rendered", (e) => {console.log("widget-rendered event:", e.detail);});</script></body></html>
import { useEffect, useRef } from "react";function WidgetWrapper() {const widgetRef = useRef<HTMLElement>(null);useEffect(() => {const widget = widgetRef.current;if (!widget) return;const handleAction = (e: Event) => {const customEvent = e as CustomEvent;console.log("widget-action event:", customEvent.detail.action);};const handleRendered = (e: Event) => {const customEvent = e as CustomEvent;console.log("widget-rendered event:", customEvent.detail);};widget.addEventListener("widget-action", handleAction);widget.addEventListener("widget-rendered", handleRendered);return () => {widget.removeEventListener("widget-action", handleAction);widget.removeEventListener("widget-rendered", handleRendered);};}, []);return <adp-widget ref={widgetRef} widget-json={JSON.stringify(config)} />;}
<template><adp-widget:widget-json="JSON.stringify(config)"@widget-action="handleAction"@widget-rendered="handleRendered"/></template><script setup lang="ts">import { ref } from "vue";const config = ref({ type: "Button", label: "Click me" });const handleAction = (e: Event) => {const customEvent = e as CustomEvent;console.log("widget-action event:", customEvent.detail.action);};const handleRendered = (e: Event) => {const customEvent = e as CustomEvent;console.log("widget-rendered event:", customEvent.detail);};</script>
<!-- Disable the entire form --><adp-widget widget-json="..." disable></adp-widget>
const widget = document.querySelector("adp-widget");// Disablewidget.setAttribute("disable", "true");// Orwidget.disable = true;// enablewidget.removeAttribute("disable");// Orwidget.disable = false;
{"type": "Button","label": "View Help","onClickAction": {"type": "help.show","alwaysEnabled": true // 🔥 ignore global disable}}
<!-- Chinese --><adp-widget widget-json="..." locale="zh-CN"></adp-widget><!-- English --><adp-widget widget-json="..." locale="en-US"></adp-widget>
const widget = document.querySelector("adp-widget");// Switch to Englishwidget.setAttribute("locale", "en-US");// Switch to Chinesewidget.setAttribute("locale", "zh-CN");
Language | standard value | Alias |
Chinese | zh-CN | zh, chinese |
English | en-US | en, english |
// Error: Single quotes are not valid JSONwidget.setAttribute("widget-json", "{'type':'Button'}");// Correct: Use JSON.stringifywidget.setAttribute("widget-json", JSON.stringify({ type: "Button" }));
// Error: Input must have a name field{"type": "Input","placeholder": "Please enter"}// Correct:{"type": "Input","name": "username","placeholder": "Please enter"}
widget.addEventListener("widget-rendered", (e) => {if (!e.detail.success) {const error = e.detail.error;console.error("Rendering failed:", error.message);// Display a friendly promptalert(`Configuration error: ${error.message}`);}});
// Error: Accessing ref before component mountconst widgetRef = useRef<HTMLElement>(null);widgetRef.current.addEventListener("widget-action", handler); // Error!// Correct: Listen in useEffectuseEffect(() => {const widget = widgetRef.current;if (!widget) return;widget.addEventListener("widget-action", handler);return () => widget.removeEventListener("widget-action", handler);}, []);
// Error: Memory leakfunction setupWidget() {widget.addEventListener("widget-action", (e) => {console.log(e.detail);});}// Correct: Save the reference and remove it during cleanupfunction setupWidget() {const handler = (e) => console.log(e.detail);widget.addEventListener("widget-action", handler);return () => {widget.removeEventListener("widget-action", handler);};}
<!-- Error: disable is a boolean attribute, requires v-bind --><adp-widget disable="false"></adp-widget><!-- Correct --><adp-widget :disable="false"></adp-widget><!-- Error: widget-json should be a string --><adp-widget :widget-json="config"></adp-widget><!-- Correct --><adp-widget :widget-json="JSON.stringify(config)"></adp-widget>
<!-- Error: Used before SDK is loaded --><script>const widget = document.querySelector("adp-widget"); // null!</script><script type="module" src="/widget/adp-widget.js"></script><!-- Correct: Ensure the SDK is loaded first --><script type="module" src="/widget/adp-widget.js"></script><script type="module">// Wait for the DOM to be readydocument.addEventListener("DOMContentLoaded", () => {const widget = document.querySelector("adp-widget");});</script>
# Clone the example projectgit clone https://github.com/example/adp-widget-examples.gitcd adp-widget-examples/react-example# Install dependencies.npm install# Start the development servernpm run dev
cd adp-widget-examples/vue-examplenpm installnpm run dev
git clone https://github.com/example/adp-widget-examples.gitcd adp-widget-examples/react-example
npm install
npm run dev
Was this page helpful?
You can also Contact sales or Submit a Ticket for help.
Help us improve! Rate your documentation experience in 5 mins.
Feedback