@adia-ai/web-components 0.8.35 → 0.8.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/MIGRATION.md +246 -44
  3. package/README.md +3 -3
  4. package/components/inspector/inspector.class.js +1 -1
  5. package/components/table-toolbar/table-toolbar.examples.md +3 -3
  6. package/core/streams-bridge.d.ts +2 -2
  7. package/core/streams-bridge.js +1 -1
  8. package/dist/web-components.min.js +1 -1
  9. package/package.json +3 -3
  10. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +8 -8
  11. package/patterns/agent-cost/agent-cost.examples.html +3 -3
  12. package/patterns/agent-memory/agent-memory.examples.html +4 -4
  13. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +8 -8
  14. package/patterns/approvals/approvals.examples.html +2 -2
  15. package/patterns/changelog-feed/changelog-feed.examples.html +1 -1
  16. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +7 -7
  17. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +4 -4
  18. package/patterns/diff-review/diff-review.examples.html +6 -6
  19. package/patterns/filter-bar/filter-bar.examples.html +5 -5
  20. package/patterns/inline-dialog/inline-dialog.examples.html +1 -1
  21. package/patterns/kanban-board/kanban-board.examples.html +12 -12
  22. package/patterns/layout/layout.examples.html +3 -3
  23. package/patterns/marketing-engagement/marketing-engagement.examples.html +13 -13
  24. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +1 -1
  25. package/patterns/permissions-matrix/permissions-matrix.examples.html +1 -1
  26. package/patterns/permissions-role-picker/permissions-role-picker.examples.html +1 -1
  27. package/patterns/permissions-sharing/permissions-sharing.examples.html +3 -3
  28. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +2 -2
  29. package/patterns/search-discovery/search-discovery.examples.html +15 -15
  30. package/styles/type/scale.css +2 -1
@@ -41,7 +41,7 @@ var vA=Object.defineProperty;var j=(s,t,e)=>()=>{if(e)throw e[0];try{return s&&(
41
41
  `&&(h++,l=u+1);let c=Math.min(e,l+Math.max(0,a-1));return{from:c,to:Math.min(e,c+1)}}let n=Math.max(0,e);return{from:Math.max(0,n-1),to:n}}var MR,RR,IR,hO,XR,uO=j(()=>{"use strict";ei();xi();hk();ai();kk();Je();MR=R.theme({"&":{fontFamily:"inherit",fontSize:"inherit",color:"inherit",backgroundColor:"transparent"},".cm-content":{caretColor:"inherit"},".cm-focused":{outline:"none"}}),RR=$i.define([{tag:[b.comment,b.lineComment,b.blockComment,b.docComment],class:"tok-comment"},{tag:[b.keyword,b.controlKeyword,b.modifier,b.operatorKeyword],class:"tok-keyword"},{tag:[b.string,b.character,b.regexp,b.escape,b.special(b.string)],class:"tok-string"},{tag:[b.number,b.integer,b.float],class:"tok-number"},{tag:[b.bool,b.null,b.atom],class:"tok-boolean"},{tag:[b.operator,b.logicOperator,b.arithmeticOperator,b.compareOperator,b.updateOperator,b.definitionOperator],class:"tok-operator"},{tag:[b.punctuation,b.bracket,b.paren,b.brace,b.squareBracket,b.angleBracket,b.separator],class:"tok-punctuation"},{tag:[b.function(b.variableName),b.function(b.propertyName),b.macroName],class:"tok-function"},{tag:[b.variableName,b.local(b.variableName),b.self],class:"tok-variable"},{tag:[b.typeName,b.className,b.namespace],class:"tok-type"},{tag:[b.propertyName,b.labelName,b.definition(b.variableName)],class:"tok-property"},{tag:[b.tagName,b.heading,b.contentSeparator],class:"tok-tag"},{tag:[b.attributeName,b.attributeValue],class:"tok-attribute"},{tag:[b.url,b.link],class:"tok-url"},{tag:[b.invalid,b.deleted],class:"tok-invalid"}]),IR={json:()=>Promise.resolve().then(()=>(nx(),rx)).then(s=>({extension:s.json()})),html:()=>Promise.resolve().then(()=>(_m(),XS)).then(s=>({extension:s.html()})),javascript:()=>Promise.resolve().then(()=>(qm(),AS)).then(s=>({extension:s.javascript({jsx:!1,typescript:!1})})),css:()=>Promise.resolve().then(()=>(hm(),Ix)).then(s=>({extension:s.css()})),markdown:()=>Promise.resolve().then(()=>(Qw(),Pw)).then(s=>({extension:s.markdown()})),yaml:()=>Promise.resolve().then(()=>(_w(),jw)).then(s=>({extension:s.yaml()}))},hO=1e4;XR=Zl(s=>{let t=s.state.doc.toString();if(t.trim()==="")return[];try{return JSON.parse(t),[]}catch(e){let i=e instanceof Error?e.message:String(e),{from:r,to:n}=qR(i,t);return[{from:r,to:n,severity:"error",message:i.replace(/^SyntaxError:\s*/,""),source:"json"}]}})});function zu(s){return Xt.get(s)||null}function zk(s,t){Xt.set(s,t)}var Xt,xO=j(()=>{"use strict";Xt=new Map([["Row","row-ui"],["Column","col-ui"],["List","list-ui"],["ListItem","list-item-ui"],["Grid","grid-ui"],["Stack","stack-ui"],["Block","block-ui"],["Text","text-ui"],["Image","image-ui"],["Icon","icon-ui"],["Divider","divider-ui"],["Badge","badge-ui"],["Avatar","avatar-ui"],["AvatarGroup","avatar-group-ui"],["Progress","progress-ui"],["ProgressRow","progress-row-ui"],["DateRangePicker","date-range-picker-ui"],["DatetimePicker","datetime-picker-ui"],["CalendarGrid","calendar-grid-ui"],["CalendarPicker","calendar-picker-ui"],["Combobox","combobox-ui"],["Skeleton","skeleton-ui"],["Stepper","stepper-ui"],["StepperItem","stepper-item-ui"],["Tour","tour-ui"],["TourStep","tour-step-ui"],["IntegrationCard","integration-card-ui"],["Code","code-ui"],["Stat","stat-ui"],["EmptyState","empty-state-ui"],["Input","input-ui"],["TextField","input-ui"],["TextArea","textarea-ui"],["Field","field-ui"],["CheckBox","check-ui"],["Toggle","switch-ui"],["Switch","switch-ui"],["Slider","slider-ui"],["Range","range-ui"],["Rating","rating-ui"],["ChoicePicker","select-ui"],["Select","select-ui"],["Radio","radio-ui"],["RadioGroup","radio-group-ui"],["DateTimeInput","calendar-picker-ui"],["CalendarPicker","calendar-picker-ui"],["ColorPicker","color-picker-ui"],["Upload","upload-ui"],["OtpInput","otp-input-ui"],["Button","button-ui"],["LoadingIndicator","progress-ui"],["ErrorContainer","card-ui"],["Card","card-ui"],["Tabs","tabs-ui"],["Tab","tab-ui"],["Panel","pane-ui"],["Pane","pane-ui"],["Modal","modal-ui"],["Dialog","modal-ui"],["Drawer","drawer-ui"],["Toast","toast-ui"],["AnchorBar","anchor-bar-ui"],["Popover","popover-ui"],["Accordion","accordion-ui"],["AccordionItem","accordion-item-ui"],["Alert","alert-ui"],["Tooltip","tooltip-ui"],["Menu","menu-ui"],["Section","section"],["Header","header"],["Footer","footer"],["Stream","stream-ui"],["Table","table-ui"],["ColDef","col-def"],["Chart","chart-ui"],["Embed","embed-ui"],["Swiper","swiper-ui"],["Slideshow","swiper-ui"],["Carousel","swiper-ui"],["Breadcrumb","breadcrumb-ui"],["Link","link-ui"],["Anchor","link-ui"],["Hyperlink","link-ui"],["NavLink","link-ui"],["Nav","nav-ui"],["NavGroup","nav-group-ui"],["NavItem","nav-item-ui"],["Noodles","noodles-ui"],["Pagination","pagination-ui"],["SegmentedControl","segmented-ui"],["Segment","segment-ui"],["ToggleGroup","toggle-group-ui"],["Command","command-ui"],["Kbd","kbd-ui"],["Toolbar","toolbar-ui"],["ToolbarGroup","toolbar-group-ui"],["Tag","tag-ui"],["Timeline","timeline-ui"],["TimelineItem","timeline-item-ui"],["button-ui","button-ui"],["card-ui","card-ui"],["text-ui","text-ui"],["input-ui","input-ui"],["text-field-ui","input-ui"],["select-ui","select-ui"],["toggle-ui","switch-ui"],["check-ui","check-ui"],["slider-ui","slider-ui"],["badge-ui","badge-ui"],["avatar-ui","avatar-ui"],["icon-ui","icon-ui"],["image-ui","image-ui"],["divider-ui","divider-ui"],["progress-ui","progress-ui"],["skeleton-ui","skeleton-ui"],["tabs-ui","tabs-ui"],["tab-ui","tab-ui"],["modal-ui","modal-ui"],["dialog-ui","modal-ui"],["drawer-ui","drawer-ui"],["toast-ui","toast-ui"],["popover-ui","popover-ui"],["panel-ui","pane-ui"],["accordion-ui","accordion-ui"],["alert-ui","alert-ui"],["tooltip-ui","tooltip-ui"],["menu-ui","menu-ui"],["table-ui","table-ui"],["chart-ui","chart-ui"],["code-ui","code-ui"],["textarea-ui","textarea-ui"],["radio-ui","radio-ui"],["tag-ui","tag-ui"],["search-ui","search-ui"],["upload-ui","upload-ui"],["breadcrumb-ui","breadcrumb-ui"],["link-ui","link-ui"],["nav-ui","nav-ui"],["noodles-ui","noodles-ui"],["pagination-ui","pagination-ui"],["segmented-control-ui","segmented-ui"],["segment-ui","segment-ui"],["command-ui","command-ui"],["calendar-picker-ui","calendar-picker-ui"],["color-picker-ui","color-picker-ui"],["kbd-ui","kbd-ui"],["toolbar-ui","toolbar-ui"],["otp-input-ui","otp-input-ui"],["embed-ui","embed-ui"],["stream-ui","stream-ui"],["row-ui","row-ui"],["col-ui","col-ui"],["grid-ui","grid-ui"],["stack-ui","stack-ui"],["block-ui","block-ui"],["list-ui","list-ui"],["range-ui","range-ui"],["datetime-ui","calendar-picker-ui"],["timeline-ui","timeline-ui"],["timeline-item-ui","timeline-item-ui"],["avatar-group-ui","avatar-group-ui"],["Keyboard","kbd-ui"],["DatePicker","calendar-picker-ui"],["CommandPalette","command-ui"],["FormContainer","form"],["Sidebar","admin-sidebar"],["Segmented","segmented-ui"],["OTP","otp-input-ui"],["Textarea","textarea-ui"],["RichText","richtext-ui"],["Richtext","richtext-ui"],["DescriptionList","description-list-ui"],["ActionItem","action-item-ui"],["ActionList","action-list-ui"],["Inspector","inspector-ui"],["Heatmap","heatmap-ui"],["ChatThread","chat-thread"],["ChatInput","chat-input-ui"],["OptionCard","option-card-ui"],["Option","option-card-ui"],["AdminCommand","admin-command"],["AdminContent","admin-content"],["AdminPage","admin-page"],["AdminPageBody","admin-page-body"],["AdminPageHeader","admin-page-header"],["AdminScroll","admin-scroll"],["AdminShell","admin-shell"],["AdminSidebar","admin-sidebar"],["AdminStatusbar","admin-statusbar"],["AdminTopbar","admin-topbar"],["ChatComposer","chat-composer"],["ChatEmpty","chat-empty"],["ChatHeader","chat-header"],["ChatShell","chat-shell"],["ChatSidebar","chat-sidebar"],["ChatStatus","chat-status"],["EditorCanvas","editor-canvas"],["EditorCanvasEmpty","editor-canvas-empty"],["EditorShell","editor-shell"],["EditorSidebar","editor-sidebar"],["EditorStatusbar","editor-statusbar"],["EditorToolbar","editor-toolbar"],["GenRoot","gen-root"],["SimpleContent","simple-content"],["SimpleHero","simple-hero"],["SimpleShell","simple-shell"],["ThemePanel","theme-panel"],["AdiaMark","adia-mark-ui"],["AdiaWordmark","adia-wordmark-ui"],["AgentArtifact","agent-artifact-ui"],["AgentFeedbackBar","agent-feedback-bar-ui"],["AgentQuestions","agent-questions-ui"],["AgentReasoning","agent-reasoning-ui"],["AgentSuggestions","agent-suggestions-ui"],["AgentTrace","agent-trace-ui"],["Aside","aside-ui"],["Blockquote","blockquote-ui"],["Canvas","canvas-ui"],["ChartLegend","chart-legend-ui"],["ColorInput","color-input-ui"],["ContextMenu","context-menu-ui"],["DemoToggle","demo-toggle-ui"],["DisplayField","display-field-ui"],["Feed","feed-ui"],["FeedItem","feed-item-ui"],["Fields","fields-ui"],["Frame","frame-ui"],["InlineEdit","inline-edit-ui"],["InlineMessage","inline-message-ui"],["ListWindow","list-window-ui"],["LoadingOverlay","loading-overlay-ui"],["Mark","mark-ui"],["MenuDivider","menu-divider-ui"],["MenuItem","menu-item-ui"],["MenuLabel","menu-label-ui"],["NumberFormat","number-format-ui"],["Page","page-ui"],["PasswordStrength","password-strength-ui"],["PipelineStatus","pipeline-status-ui"],["Preview","preview-ui"],["QRCode","qr-code-ui"],["RelativeTime","relative-time-ui"],["Search","search-ui"],["SkipNav","skip-nav-ui"],["Spinner","spinner-ui"],["StepProgress","step-progress-ui"],["Swatch","swatch-ui"],["TableOfContents","toc-ui"],["TableToolbar","table-toolbar-ui"],["TagsInput","tags-input-ui"],["ThemeProvider","theme-provider"],["TimePicker","time-picker-ui"],["ToggleOption","toggle-option-ui"],["ToggleScheme","toggle-scheme-ui"],["Tree","tree-ui"],["TreeItem","tree-item-ui"],["VisuallyHidden","visually-hidden-ui"],["AdminEntityItem","admin-entity-item"],["AdminRoster","admin-roster-ui"],["AdminSettings","admin-settings-ui"],["AgentAdmin","agent-admin-ui"],["AppShell","embed-shell"],["BillingOverview","billing-overview-ui"],["ConfirmDialog","confirm-dialog-ui"],["DashboardLayout","dashboard-layout-ui"],["DateRangeSelector","date-range-selector-ui"],["FormPopover","form-popover-ui"],["IntegrationsPage","integrations-page-ui"],["InvoiceDetail","invoice-detail-ui"],["InvoiceHistory","invoice-history-ui"],["NotificationPreferences","notification-preferences-ui"],["OnboardingChecklist","onboarding-checklist-ui"],["PaymentMethodForm","payment-method-form-ui"],["PaymentMethodList","payment-method-list-ui"],["PlanPicker","plan-picker-ui"],["chat-thread-ui","chat-thread-ui"],["section-ui","section-ui"],["DescriptionTerm","dt"],["DescriptionDetail","dd"]])});function Vk(s,t){if(!t||t==="/")return s;let e=t.replace(/^\//,"").split("/"),i=s;for(let r of e){if(i==null)return;i=i[r]}return i}function pI(s,t,e){if(!t||t==="/")return;let i=t.replace(/^\//,"").split("/"),r=s;for(let n=0;n<i.length-1;n++){let o=i[n];r[o]==null&&(r[o]={}),r=r[o]}r[i[i.length-1]]=e}var Vu,aa,SO=j(()=>{"use strict";Vu={provider:0,controller:1,source:2,action:3,lifecycle:4},aa=class{surfaceId;#t=new Map;#e={};#i={};#s=new Map;#r;#n;constructor(t,e,i){this.surfaceId=t,this.#r=e,this.#n=i}get context(){return{surfaceId:this.surfaceId,getElement:t=>this.#n.get(t)||null,getRootElement:()=>this.#r,getModel:t=>t?Vk(this.#e,t):this.#e,setModel:(t,e)=>this.#a(t,e),getDockable:(t,e)=>this.#l(t,e),listDockables:t=>this.#c(t),emit:t=>this.#h(t),getParam:t=>this.#i[t],watchModel:(t,e)=>this.#o(t,e)}}dock(t){this.#t.has(t.id)&&this.undock(t.id);let e=t.dock(this.context);this.#t.set(t.id,{dockable:t,cleanup:typeof e=="function"?e:null})}dockAll(t){let e=[...t].sort((i,r)=>(Vu[i.kind]??9)-(Vu[r.kind]??9));for(let i of e)this.dock(i)}undock(t){let e=this.#t.get(t);e&&(e.cleanup?.(),e.dockable.undock(),this.#t.delete(t))}undockAll(){let t=[...this.#t.entries()].sort((e,i)=>(Vu[i[1].dockable.kind]??9)-(Vu[e[1].dockable.kind]??9));for(let[e]of t)this.undock(e)}undockMany(t){for(let e of t)this.undock(e)}setInitialModel(t){Object.assign(this.#e,t)}setParams(t){Object.assign(this.#i,t)}updateElements(t){this.#n=t}#a(t,e){pI(this.#e,t,e);for(let[i,r]of this.#s)if(t===i||t.startsWith(i+"/"))for(let n of r)n(Vk(this.#e,i))}#o(t,e){return this.#s.has(t)||this.#s.set(t,new Set),this.#s.get(t).add(e),()=>{let i=this.#s.get(t);i?.delete(e),i?.size===0&&this.#s.delete(t)}}#l(t,e){let i=this.#t.get(e);return i&&i.dockable.kind===t?i.dockable:null}#c(t){let e=[];for(let{dockable:i}of this.#t.values())(!t||i.kind===t)&&e.push(i);return e}#h(t){let e=t.target?this.#n.get(t.target):this.#r;e&&e.dispatchEvent(new CustomEvent(t.event,{bubbles:!0,detail:t}))}}});var be,Hs=j(()=>{"use strict";be=class{get kind(){throw new Error("Dockable subclass must define kind")}get id(){throw new Error("Dockable subclass must define id")}dock(t){throw new Error("Dockable subclass must implement dock()")}undock(){}}});var la,wO=j(()=>{"use strict";Hs();la=class extends be{kind="controller";id;type;hostId;config;bind;controller=null;#t;constructor(t,e){super(),this.id=t.id,this.type=t.type,this.hostId=t.host,this.config=t.config||{},this.bind=t.bind||null,this.#t=e}async dock(t){let e=t.getElement(this.hostId);if(!e){console.warn(`ControllerDock: host element "${this.hostId}" not found`);return}let i=await this.#t(this.type);if(!i){console.warn(`ControllerDock: unknown controller type "${this.type}"`);return}this.controller=new i(this.config),this.controller.connect(e);let r=[];if(this.bind)for(let[n,o]of Object.entries(this.bind)){if(this.controller.subscribe){let l=this.controller.subscribe(n,h=>{t.setModel(o,h)});l&&r.push(l)}let a=t.getModel(o);a!==void 0&&this.controller.setState&&this.controller.setState(n,a)}return e.controller=this.controller,()=>{e.controller=null,r.forEach(n=>n())}}undock(){this.controller&&(this.controller.disconnect?.(),this.controller=null)}}});var ha,kO=j(()=>{"use strict";Hs();ha=class extends be{kind="source";id;uri;path;refresh;#t;#e=null;constructor(t,e){super(),this.id=t.id,this.uri=t.uri,this.path=t.path,this.refresh=t.refresh||"once",this.#t=e}dock(t){if(this.#e=t,this.#i(t),this.refresh==="on-focus"){let e=()=>this.#i(t);return window.addEventListener("focus",e),()=>window.removeEventListener("focus",e)}if(this.refresh.startsWith("interval:")){let e=parseInt(this.refresh.split(":")[1],10);if(e>0){let i=setInterval(()=>this.#i(t),e);return()=>clearInterval(i)}}if(this.refresh==="stream"){let e=this.#s(t);try{let i=new EventSource(e);return i.onmessage=r=>{try{t.setModel(this.path,JSON.parse(r.data))}catch{}},()=>i.close()}catch{console.warn(`DataSourceDock: stream failed for ${e}`)}}}undock(){this.#e=null}refetch(){this.#e&&this.#i(this.#e)}async#i(t){let e=this.#s(t);try{let i=await this.#t(e,t);i!==void 0&&t.setModel(this.path,i)}catch(i){console.warn(`DataSourceDock: fetch failed for ${e}`,i)}}#s(t){return this.uri.replace(/\{(\w+)\}/g,(e,i)=>t.getParam(i)??t.getModel("/"+i)??"")}}});var ju,ca,AO=j(()=>{"use strict";Hs();ju={press:"click",submit:"submit",input:"input",change:"change",select:"select",toggle:"change",dismiss:"close",navigate:"click",mount:"connectedCallback",unmount:"disconnectedCallback",focus:"focusin",blur:"focusout",drag:"dragstart",drop:"drop"},ca=class extends be{kind="action";id;event;handler;config;onSuccess;onError;#t;constructor(t,e){super(),this.event=t.event,this.handler=t.handler,this.config=t.config||{},this.onSuccess=t.onSuccess||null,this.onError=t.onError||null,this.#t=e,this.id=`action:${this.event.event}:${this.event.target||"root"}:${this.handler}`}dock(t){let e=this.event.target?t.getElement(this.event.target):t.getRootElement();if(!e){console.warn(`ActionDock: target "${this.event.target}" not found`);return}let i=ju[this.event.event]||this.event.event,r=this.#t(this.handler);if(!r){console.warn(`ActionDock: unknown handler "${this.handler}"`);return}let n=async o=>{if(this.event.condition){let a=t.getModel(this.event.condition.path);if("equals"in this.event.condition&&a!==this.event.condition.equals||"notEquals"in this.event.condition&&a===this.event.condition.notEquals||"exists"in this.event.condition&&this.event.condition.exists&&a==null)return}try{let a=await r(this.config,t,o);if(this.onSuccess)for(let l of this.onSuccess){let h=this.#t(l.handler);h&&await h(l.config||{},t,a)}}catch(a){if(this.onError)for(let l of this.onError){let h=this.#t(l.handler);h&&await h(l.config||{},t,a)}else console.error(`ActionDock: handler "${this.handler}" failed`,a)}};if(this.event.debounce>0){let o=n,a;n=(...l)=>{clearTimeout(a),a=setTimeout(()=>o(...l),this.event.debounce)}}if(this.event.throttle>0){let o=n,a=0;n=(...l)=>{let h=Date.now();h-a>=this.event.throttle&&(a=h,o(...l))}}return e.addEventListener(i,n),()=>e.removeEventListener(i,n)}undock(){}}});var ua,$O=j(()=>{"use strict";Hs();ua=class extends be{kind="provider";id;hostId;value;constructor(t){super(),this.id=`provider:${t.name}`,this.hostId=t.host||null,this.value=t.value??null}dock(t){let e=this.hostId?t.getElement(this.hostId):t.getRootElement();if(!e){console.warn(`ProviderDock: host "${this.hostId}" not found`);return}let i=document.createElement("a2ui-provider");return i.setAttribute("name",this.id.replace("provider:","")),i.value=this.value,e.parentNode?.insertBefore(i,e),i.appendChild(e),()=>{i.parentNode&&(i.parentNode.insertBefore(e,i),i.remove())}}undock(){}}});var da,CO=j(()=>{"use strict";Hs();da=class extends be{kind="lifecycle";id="lifecycle";onMount;onUnmount;onModelChange;#t;#e=null;constructor(t,e){super(),this.onMount=t.onMount||[],this.onUnmount=t.onUnmount||[],this.onModelChange=t.onModelChange||[],this.#t=e}dock(t){this.#e=t;for(let i of this.onMount)this.#i(i,t);let e=this.onModelChange.map(i=>{let r=()=>this.#i(i,t);if(i.debounce>0){let n=r,o;r=()=>{clearTimeout(o),o=setTimeout(n,i.debounce)}}return t.watchModel(i.path,r)});return()=>e.forEach(i=>i())}undock(){if(this.#e){for(let t of this.onUnmount)this.#i(t,this.#e);this.#e=null}}async#i(t,e){let i=this.#t(t.handler);if(i)try{await i(t.config||{},e)}catch(r){console.warn(`LifecycleDock: ${t.handler} failed`,r)}}}});var jk,ve,Ks=j(()=>{"use strict";jk=new WeakSet,ve=class s{#t=null;#e=new Set;get host(){return this.#t}connect(t){let e=this.constructor;!jk.has(e)&&e!==s&&(jk.add(e),e.schema||console.warn(`AdiaUI: ${e.name} extends BaseController without static schema`),this.getState===s.prototype.getState&&console.error(`AdiaUI: ${e.schema?.name??e.name} must implement getState()`)),this.#t&&this.#t!==t&&console.warn(`AdiaUI: ${e.schema?.name??e.name} already connected to a different host`),this.#t=t,this.onConnect(t),this.reflect()}disconnect(t){let e=t??this.#t;e&&(this.onDisconnect(e),this.#t=null)}subscribe(t){return this.#e.add(t),()=>this.#e.delete(t)}notify(){this.reflect();for(let t of this.#e)t()}onConnect(t){}onDisconnect(t){}reflect(){}getState(){throw new Error(`${this.constructor.schema?.name??this.constructor.name}: getState() not implemented`)}}});var _k={};Ut(_k,{FormController:()=>EO});var EO,Wk=j(()=>{"use strict";Ks();EO=class extends ve{static schema=Object.freeze({name:"form",state:{values:"object",errors:"object",dirty:"boolean",valid:"boolean"},commands:["set","validate","reset","setInitial"],attributes:["data-form-valid","data-form-invalid","data-form-dirty"]});#t={};#e={};#i={};#s={};constructor(t={}){super(),this.#t={...t},this.#e={...t}}onDisconnect(t){t.removeAttribute("data-form-valid"),t.removeAttribute("data-form-invalid"),t.removeAttribute("data-form-dirty")}getState(){let t=Object.keys(this.#e).some(i=>this.#e[i]!==this.#t[i]),e=Object.keys(this.#i).length===0;return{values:{...this.#e},errors:{...this.#i},dirty:t,valid:e}}reflect(){if(!this.host)return;let{dirty:t,valid:e}=this.getState();e?(this.host.setAttribute("data-form-valid",""),this.host.removeAttribute("data-form-invalid")):(this.host.setAttribute("data-form-invalid",""),this.host.removeAttribute("data-form-valid")),t?this.host.setAttribute("data-form-dirty",""):this.host.removeAttribute("data-form-dirty")}#r(t){let e=this.#s[t];if(!e){delete this.#i[t];return}let i=e(this.#e[t]);i===!0||i==null?delete this.#i[t]:this.#i[t]=typeof i=="string"?i:"Invalid"}commands={set:(t,e)=>{this.#e[t]=e,this.#r(t),this.notify()},validate:(t,e)=>{this.#s[t]=e,this.#r(t),this.notify()},reset:()=>{this.#e={...this.#t},this.#i={};for(let t of Object.keys(this.#s))this.#r(t);this.notify()},setInitial:t=>{this.#t={...t}}}}});var Fk={};Ut(Fk,{DataStreamController:()=>PO});var PO,Yk=j(()=>{"use strict";Ks();PO=class extends ve{static schema=Object.freeze({name:"data-stream",state:{data:"array",status:"string",error:"string"},commands:["push","pushMany","connect","poll","consume","stop","clear"],attributes:["data-stream-status"]});#t=[];#e;#i="idle";#s=null;#r=null;#n=0;#a=1;#o=null;#l=0;constructor({max:t=100,throttle:e=0,sample:i=1,initial:r=[]}={}){super(),this.#e=t,this.#n=e,this.#a=Math.max(1,Math.round(i)),this.#t=r.slice(-t)}getState(){return{data:this.#t,status:this.#i,error:this.#s}}reflect(){this.host&&this.host.setAttribute("data-stream-status",this.#i)}onDisconnect(){this.commands.stop()}#c(t){this.#l++,!(this.#a>1&&this.#l%this.#a!==0)&&(this.#t.push(t),this.#t.length>this.#e&&(this.#t=this.#t.slice(-this.#e)),this.#u())}#h(t){if(this.#a>1){let e=[];for(let i of t)this.#l++,this.#l%this.#a===0&&e.push(i);this.#t.push(...e)}else this.#t.push(...t);this.#t.length>this.#e&&(this.#t=this.#t.slice(-this.#e)),this.#u()}#u(){if(this.#n<=0){this.notify();return}this.#o===null&&(this.#o=setTimeout(()=>{this.#o=null,this.notify()},this.#n))}#d(t,e=null){this.#i=t,this.#s=e,this.notify()}commands={push:t=>{this.#c(t)},pushMany:t=>{this.#h(t)},connect:(t,e)=>{this.commands.stop(),this.#r=new AbortController,t==="sse"?this.#f(e):t==="ws"?this.#p(e):this.#d("error",`Unknown stream type: ${t}`)},poll:(t,e=2e3)=>{this.commands.stop(),this.#r=new AbortController,this.#m(t,e)},consume:t=>{this.commands.stop(),this.#r=new AbortController,this.#g(t)},stop:()=>{this.#r&&(this.#r.abort(),this.#r=null),this.#o!==null&&(clearTimeout(this.#o),this.#o=null),(this.#i==="streaming"||this.#i==="connecting")&&this.#d("stopped")},clear:()=>{this.#t=[],this.notify()}};#f(t){this.#d("connecting");let e=new EventSource(t),i=this.#r.signal;i.addEventListener("abort",()=>e.close()),e.onopen=()=>this.#d("streaming"),e.onmessage=r=>{try{let n=JSON.parse(r.data);this.#c(n)}catch{}},e.onerror=()=>{i.aborted||(this.#d("error","SSE connection lost"),e.close())}}#p(t){this.#d("connecting");let e=new WebSocket(t),i=this.#r.signal;i.addEventListener("abort",()=>e.close()),e.onopen=()=>this.#d("streaming"),e.onmessage=r=>{try{let n=JSON.parse(r.data);Array.isArray(n)?this.#h(n):this.#c(n)}catch{}},e.onerror=()=>{i.aborted||this.#d("error","WebSocket error")},e.onclose=()=>{i.aborted||this.#d("stopped")}}async#m(t,e){this.#d("streaming");let i=this.#r.signal;for(;!i.aborted;){try{let n=await(await fetch(t,{signal:i})).json();Array.isArray(n)?this.#h(n):this.#c(n)}catch(r){if(i.aborted)break;this.#d("error",r.message);break}await new Promise(r=>setTimeout(r,e))}}async#g(t){this.#d("streaming");let e=this.#r.signal;try{for await(let i of t){if(e.aborted)break;Array.isArray(i)?this.#h(i):this.#c(i)}e.aborted||this.#d("idle")}catch(i){e.aborted||this.#d("error",i.message)}}}});var Uk={};Ut(Uk,{SelectionController:()=>QO});var QO,Gk=j(()=>{"use strict";Ks();QO=class extends ve{static schema=Object.freeze({name:"selection",state:{selected:"Set",multiple:"boolean"},commands:["select","deselect","toggle","clear","selectAll"],attributes:["data-selection-active","data-selection-selected"]});#t=new Set;#e=!1;constructor({multiple:t=!1,initial:e=[]}={}){super(),this.#e=t;for(let i of e)this.#t.add(String(i))}onConnect(t){t.setAttribute("data-selection-active","")}onDisconnect(t){this.#i(t),t.removeAttribute("data-selection-active")}getState(){return{selected:new Set(this.#t),multiple:this.#e}}reflect(){if(!this.host)return;let t=this.host.querySelectorAll("[data-selection-key]");for(let e of t){let i=e.getAttribute("data-selection-key");this.#t.has(i)?e.setAttribute("data-selection-selected",""):e.removeAttribute("data-selection-selected")}}#i(t){let e=t.querySelectorAll("[data-selection-selected]");for(let i of e)i.removeAttribute("data-selection-selected")}commands={select:t=>{t=String(t),this.#e||this.#t.clear(),this.#t.add(t),this.notify()},deselect:t=>{this.#t.delete(String(t)),this.notify()},toggle:t=>{t=String(t),this.#t.has(t)?this.#t.delete(t):(this.#e||this.#t.clear(),this.#t.add(t)),this.notify()},clear:()=>{this.#t.clear(),this.notify()},selectAll:t=>{if(this.#e){for(let e of t)this.#t.add(String(e));this.notify()}}}}});var Hk={};Ut(Hk,{ToggleController:()=>TO});var TO,Kk=j(()=>{"use strict";Ks();TO=class extends ve{static schema=Object.freeze({name:"toggle",state:{on:"boolean"},commands:["toggle","set"],attributes:["data-toggle-on"]});#t=!1;constructor(t=!1){super(),this.#t=t}getState(){return{on:this.#t}}onDisconnect(t){t.removeAttribute("data-toggle-on")}reflect(){this.host&&(this.#t?this.host.setAttribute("data-toggle-on",""):this.host.removeAttribute("data-toggle-on"))}commands={toggle:()=>{this.#t=!this.#t,this.notify()},set:t=>{this.#t=!!t,this.notify()}}}});var Jk={};Ut(Jk,{AccordionController:()=>LO});var LO,tA=j(()=>{"use strict";Ks();LO=class extends ve{static schema=Object.freeze({name:"accordion",state:{expanded:"Set",multiple:"boolean"},commands:["toggle","expand","collapse","collapseAll","expandAll"],attributes:["data-accordion-expanded"]});#t=new Set;#e=!1;constructor({multiple:t=!1,initial:e=[]}={}){super(),this.#e=t;for(let i of e)this.#t.add(String(i))}onDisconnect(t){let e=t.querySelectorAll("[data-accordion-expanded]");for(let i of e)i.removeAttribute("data-accordion-expanded")}getState(){return{expanded:new Set(this.#t),multiple:this.#e}}reflect(){if(!this.host)return;let t=this.host.querySelectorAll("[data-accordion-key]");for(let e of t){let i=e.getAttribute("data-accordion-key");this.#t.has(i)?e.setAttribute("data-accordion-expanded",""):e.removeAttribute("data-accordion-expanded")}}commands={toggle:t=>{t=String(t),this.#t.has(t)?this.#t.delete(t):(this.#e||this.#t.clear(),this.#t.add(t)),this.notify()},expand:t=>{t=String(t),this.#e||this.#t.clear(),this.#t.add(t),this.notify()},collapse:t=>{this.#t.delete(String(t)),this.notify()},collapseAll:()=>{this.#t.clear(),this.notify()},expandAll:t=>{if(this.#e){for(let e of t)this.#t.add(String(e));this.notify()}}}}});var eA={};Ut(eA,{StateMachineController:()=>MO});var MO,iA=j(()=>{"use strict";Ks();MO=class extends ve{static schema={name:"state-machine",state:{current:"string",history:"string[]"},commands:["send","transition","reset"],attributes:["data-state"],config:{initial:"string",states:"object"}};#t="";#e="";#i={};#s=[];onConnect(t){let e=this.config||{};this.#e=e.initial||t.dataset?.initial||Object.keys(e.states||{})[0]||"",this.#i=this._validateStates(e.states||{}),this.#t=this.#e,this.#s=this.#t?[this.#t]:[],this.#t&&this._emit("stateEntered",{state:this.#t,initial:!0})}getState(){return{current:this.#t,history:[...this.#s]}}reflect(){this.host&&(this.#t?this.host.setAttribute("data-state",this.#t):this.host.removeAttribute("data-state"))}commands={send:t=>{if(!t||!this.#t)return;let i=(this.#i[this.#t]?.on||{})[t];i&&this._moveTo(i,{event:t})},transition:t=>{!t||!(t in this.#i)||this._moveTo(t,{forced:!0})},reset:()=>{this.#e&&this._moveTo(this.#e,{reset:!0})}};_moveTo(t,e){if(t===this.#t)return;let i=this.#t;i&&this._emit("stateExited",{state:i,target:t,...e}),this.#t=t,this.#s.push(t),this.notify(),this._emit("stateEntered",{state:t,from:i,...e})}_emit(t,e){this.host&&this.host.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:e}))}_validateStates(t){let e={},i=Object.keys(t);for(let r of i){let n=t[r]||{},o={};for(let[a,l]of Object.entries(n.on||{})){if(typeof l!="string"||!(l in t)){console.warn(`[state-machine] state "${r}" transition "${a}" \u2192 "${l}" \u2014 target not declared`);continue}o[a]=l}e[r]={on:o}}return e}}});function sA(s,t){Di.controllers.set(s,t)}function rA(s,t){Di.handlers.set(s,t)}function nA(s,t){Di.resolvers.set(s,t)}async function _u(s){let t=Di.controllers.get(s);return t?t():null}function Wu(s){return Di.handlers.get(s)||null}async function Vl(s,t={}){let e=s;for(let[o,a]of Object.entries(t))e=e.replace(`{${o}}`,encodeURIComponent(a));let i=e.indexOf("://");if(i===-1)throw new Error(`Invalid URI: ${s}`);let r=e.slice(0,i),n=Di.resolvers.get(r);if(!n)throw new Error(`No resolver for scheme "${r}"`);return n(e,t)}async function mI(s){let{action:t,params:e}=s,i=RO(t.body,s),r=t.uri;for(let[c,u]of Object.entries(e))r=r.replace(`{${c}}`,encodeURIComponent(u));let n=r.indexOf("://"),o=n>-1?r.slice(0,n):"api",a=Di.resolvers.get(o),l=r.replace(/^\w+:\/\//,"/api/"),h=await fetch(l,{method:t.method||"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!h.ok){let c=await h.text().catch(()=>"Request failed");throw new Error(c)}return h.json().catch(()=>({}))}async function gI(s){let{action:t}=s,e=RO(t.value,s);s.updateModel(t.path,e)}async function OI(s){let{action:t,params:e}=s,i=t.navigate||t.path||"";for(let[r,n]of Object.entries(e))i=i.replace(`{${r}}`,encodeURIComponent(n));i==="back"?history.back():i&&(location.hash=i)}async function bI(){history.back()}async function vI(s){let{action:t,controllers:e}=s,i=e[t.controllerId];if(!i?.commands?.[t.command]){console.warn(`Wiring: controller "${t.controllerId}" or command "${t.command}" not found`);return}return i.commands[t.command](t.args)}async function yI(s){let{action:t,source:e}=s,i=RO(t.detail,s);e.dispatchEvent(new CustomEvent(t.eventName||t.event,{bubbles:!0,detail:i}))}async function xI(s){let t=s.action.sourceId;return document.dispatchEvent(new CustomEvent("a2ui-refresh-source",{detail:{sourceId:t}})),{refreshSource:t}}async function SI(s){let{action:t}=s,e=typeof t=="string"?t:t.message||t.notify;document.dispatchEvent(new CustomEvent("a2ui-notify",{bubbles:!0,detail:{message:e,variant:t.variant||"info"}}))}function RO(s,t){if(s){if(typeof s!="object")return s;switch(s.from){case"event-detail":return s.key?t.event?.detail?.[s.key]:t.event?.detail;case"event-target":return s.key?t.source?.[s.key]:t.source?.value;case"model":return wI(t.dataModel,s.path);case"literal":return s.value;case"param":return t.params?.[s.key];default:return s}}}function wI(s,t){if(!t||!s)return;let e=t.split("/").filter(Boolean),i=s;for(let r of e){if(i==null||typeof i!="object")return;i=i[r]}return i}async function kI(s,t){let e=s.replace(/^resource:\/\//,"/api/"),i=await fetch(e);if(!i.ok)throw new Error(`Resource fetch failed: ${i.status}`);return i.json()}async function AI(s,t){let e=s.replace(/^api:\/\//,"https://"),i=await fetch(e);if(!i.ok)throw new Error(`API fetch failed: ${i.status}`);return i.json()}async function $I(s,t){return{_source:s,_mock:!0}}var Di,IO=j(()=>{"use strict";Di={controllers:new Map([["FormController",async()=>(await Promise.resolve().then(()=>(Wk(),_k))).FormController],["DataStreamController",async()=>(await Promise.resolve().then(()=>(Yk(),Fk))).DataStreamController],["SelectionController",async()=>(await Promise.resolve().then(()=>(Gk(),Uk))).SelectionController],["ToggleController",async()=>(await Promise.resolve().then(()=>(Kk(),Hk))).ToggleController],["AccordionController",async()=>(await Promise.resolve().then(()=>(tA(),Jk))).AccordionController],["StateMachineController",async()=>(await Promise.resolve().then(()=>(iA(),eA))).StateMachineController]]),handlers:new Map([["submit-resource",mI],["update-model",gI],["navigate",OI],["navigate-back",bI],["controller-command",vI],["emit-event",yI],["refresh-source",xI],["notify",SI]]),resolvers:new Map([["resource",kI],["api",AI],["mock",$I]])}});function CI(s){return async(t,e,i)=>{let r={action:t,event:i instanceof Event?i:null,source:i instanceof Event?i.target:null,dataModel:e.getModel(),updateModel:(n,o)=>e.setModel(n,o),controllers:Object.fromEntries(e.listDockables("controller").map(n=>[n.id,n.controller])),params:{},resolveData:Vl};return s(r)}}function EI(){let s=new Map;return t=>{if(s.has(t))return s.get(t);let e=Wu(t);if(!e)return null;let i=CI(e);return s.set(t,i),i}}function PI(){return async s=>_u(s)}function QI(){return async(s,t)=>Vl(s,{})}function Fu(s){let t=[],e=EI(),i=PI(),r=QI();if(s.data?.sources)for(let o of s.data.sources)t.push(new ha(o,r));if(s.state?.controllers)for(let o of s.state.controllers)t.push(new la(o,i));if(s.actions)for(let o of s.actions)t.push(new ca(o,e));if(s.provides){let o=Array.isArray(s.provides)?s.provides:[s.provides];for(let a of o)t.push(new ua(a))}s.lifecycle&&t.push(new da(s.lifecycle,e));let n=s.state?.model||null;return{dockables:t,initialModel:n}}var DO=j(()=>{"use strict";wO();kO();AO();$O();CO();IO()});var oA={};Ut(oA,{WiringEngine:()=>jl});var jl,XO=j(()=>{"use strict";SO();DO();jl=class{#t=new Map;#e;#i;constructor({updateDataModel:t,getElement:e}){this.#e=t,this.#i=e}async process(t){let{surfaceId:e}=t;if(!e)return;let i=this.#t.get(e);i||(i=this.#s(e),this.#t.set(e,i));try{t.data?.params&&i.setParams(this.#r(t.data.params));let{dockables:r,initialModel:n}=Fu(t);n&&i.setInitialModel(n),t.undock&&i.undockMany(t.undock);for(let o of r)await i.dock(o)}catch(r){console.warn(`Wiring: error processing wireComponents for "${e}":`,r.message)}}teardown(t){let e=this.#t.get(t);e&&(e.undockAll(),this.#t.delete(t))}teardownAll(){for(let t of this.#t.keys())this.teardown(t)}getSurface(t){return this.#t.get(t)||null}getSurfaceState(t){let e=this.#t.get(t);if(!e)return null;let i=e.context.listDockables();return{surfaceId:t,controllerCount:i.filter(r=>r.kind==="controller").length,sourceCount:i.filter(r=>r.kind==="source").length,actionCount:i.filter(r=>r.kind==="action").length,providerCount:i.filter(r=>r.kind==="provider").length,hasLifecycle:i.some(r=>r.kind==="lifecycle"),totalDocked:i.length}}#s(t){let e={get:h=>this.#i(t,h),has:h=>!!this.#i(t,h)},i=this.#i(t,"root")||document.createElement("div"),r=new Proxy(new Map,{get(h,c){return c==="get"?u=>e.get(u):c==="has"?u=>e.has(u):h[c]}}),n=new aa(t,i,r),o=n.context,a=o.setModel,l=this.#e;return Object.defineProperty(n,"context",{get(){return{...o,setModel(c,u){a(c,u),l(t,c,u)}}}}),n}#r(t){let e={};for(let[i,r]of Object.entries(t))switch(r.from){case"route":{let o=location.hash.slice(1).match(new RegExp(`${r.key}/([^/]+)`));o&&(e[i]=o[1]);break}case"query":{let o=new URL(location.href).searchParams.get(r.key);o&&(e[i]=o);break}case"literal":e[i]=r.value;break;default:typeof r=="string"&&(e[i]=r)}return e}}});function ns(s){return MI.has(s.toLowerCase())?s.toLowerCase():s.replace(/([A-Z])/g,"-$1").toLowerCase()}function Yu(s,t,e){if(t==="style"&&typeof e=="string"){s.style.cssText=e;return}if(TI.has(t)&&e!=null){if(t==="textContent"&&!LI.has(s.localName)){s.setAttribute("text",String(e));return}let i=e;if(typeof i=="string"&&(i.startsWith("[")||i.startsWith("{")))try{i=JSON.parse(i)}catch{}s[t]=i;return}if(typeof e=="boolean"){e?s.setAttribute(ns(t),""):s.removeAttribute(ns(t));return}e!=null?s.setAttribute(ns(t),String(e)):s.removeAttribute(ns(t))}var TI,LI,MI,qO=j(()=>{"use strict";TI=new Set(["data","columns","options","itemRenderer","textContent"]),LI=new Set(["h1","h2","h3","h4","h5","h6","p","small","span","em","strong","code","text-ui","kbd-ui"]),MI=new Set(["autocomplete","autofocus","autocapitalize","autocorrect","inputmode","enterkeyhint","spellcheck","maxlength","minlength","readonly","novalidate","formnovalidate","formaction","formenctype","formmethod","formtarget","multiple","pattern","placeholder","required","tabindex","accesskey","autoplay","autopictureinpicture","controls","crossorigin","disablepictureinpicture","disableremoteplayback","loop","muted","playsinline","preload","srcset","srcdoc","srclang","sizes","loading","decoding","fetchpriority","ismap","usemap","hreflang","referrerpolicy","download","contenteditable","contextmenu","draggable","dirname","colspan","rowspan","headers","allowfullscreen","allowpaymentrequest","itemid","itemprop","itemref","itemscope","itemtype","nomodule","nonce"])});var os,aA=j(()=>{"use strict";xO();qO();os=class s{#t;#e;#i=new Map;#s=new Map;#r=new Map;#n=[];#a=null;#o=!1;constructor(t,e=Xt,{batch:i=!1}={}){this.#t=t,this.#e=e,this.#o=i}process(t){t&&(this.#o?(this.#n.push(t),this.#a===null&&(this.#a=requestAnimationFrame(()=>this.#l()))):this.#c(t))}#l(){this.#a=null;let t=this.#n.splice(0);for(let e of t)this.#c(e)}#c(t){switch(t.type||t.messageType){case"createSurface":this.#d(t);break;case"updateComponents":this.#f(t);break;case"updateDataModel":this.#k(t);break;case"wireComponents":this.#u(t);break;case"deleteSurface":this.#A(t);break;case"updateStyles":this.#E(t);break;case"removeStyles":this.#M(t);break;case"meta":break;default:console.warn("A2UI: unknown message type",t.type)}}#h=null;async#u(t){if(!this.#h){let{WiringEngine:e}=await Promise.resolve().then(()=>(XO(),oA));this.#h=new e({updateDataModel:(i,r,n)=>{this.#k({surfaceId:i,path:r,value:n})},getElement:(i,r)=>this.#i.get(i)?.elements.get(r)||null})}await this.#h.process(t)}async processStream(t){for await(let e of t)this.process(e)}#d({surfaceId:t,catalogId:e,root:i}){if(this.#i.has(t))return;let r=document.createElement("div");r.setAttribute("data-a2ui-surface",t),e&&r.setAttribute("data-catalog",e),this.#t.appendChild(r),this.#i.set(t,{root:r,rootId:typeof i=="string"&&i?i:"root",elements:new Map,dataModel:{},bindings:new Map,adoptedSheets:new Map})}#f({surfaceId:t,components:e}){let i=this.#i.get(t);i||(i={root:this.#t,rootId:"root",elements:new Map,dataModel:{},bindings:new Map,adoptedSheets:new Map},this.#i.set(t,i),this.#t&&typeof this.#t.setAttribute=="function"&&this.#t.setAttribute("data-a2ui-surface",t));for(let l of e)if(!(!l.id&&l.id!==0)){if(l.component==="ContextBindings"){i.contextBindings=l;continue}try{let h=i.elements.get(l.id),c=l.component==="Text"?this.#S(l.variant,l):zu(l.component,this.#e);if(!c){h||(h=document.createElement("div"),h.setAttribute("data-a2ui-id",l.id),h.id=l.id,h.setAttribute("data-a2ui-unknown",l.component),h.textContent=`[unknown: ${l.component}]`,i.elements.set(l.id,h),this.#s.set(l.id,h));continue}if(!h)h=document.createElement(c),h.setAttribute("data-a2ui-id",l.id),h.id=l.id,i.elements.set(l.id,h),this.#s.set(l.id,h);else if(h.localName!==c){let d=document.createElement(c);d.setAttribute("data-a2ui-id",l.id),d.id=l.id,h.replaceWith(d),h=d,i.elements.set(l.id,h),this.#s.set(l.id,h)}l._surfaceId=t,Object.values(l).some(d=>d&&typeof d=="object"&&d.path)&&i.bindings.set(l.id,l),this.#x(h,l)}catch(h){console.warn(`A2UI: component "${l.id}" (${l.component}) failed:`,h.message)}}this.#v(e);let r=new Map;for(let l of e){for(let h of Array.isArray(l.children)?l.children:[])r.set(h,l.id);l.child&&r.set(l.child,l.id)}let n=(l,h)=>{let c=new Set,u=l;for(;u!=null;){if(u===h||c.has(u))return!0;c.add(u),u=r.get(u)}return!1};for(let l of e){let h=i.elements.get(l.id);if(h)try{let c=Array.isArray(l.children)?l.children:[];for(let u of c){if(u===l.id||n(l.id,u))continue;let d=i.elements.get(u);d&&d.parentElement!==h&&h.appendChild(d)}if(l.child&&l.child!==l.id&&!n(l.id,l.child)){let u=i.elements.get(l.child);u&&u.parentElement!==h&&h.appendChild(u)}}catch(c){console.warn(`A2UI: tree build failed for "${l.id}":`,c.message)}}let o=i.rootId??"root";if(e.find(l=>l.id===o)){let l=i.elements.get(o);l&&l.parentElement!==i.root&&i.root.appendChild(l)}}static#p=new Set(["Header","Section","Footer","Img","Image","Video","Picture","Iframe","Aside","Divider"]);static#m=new Set(["Header","Section","Footer"]);static#g=new Set(["header","body","footer"]);#b=new Set;#v(t){let e=new Map;for(let i of t)i.id!=null&&e.set(i.id,i);for(let i of t){let r=i.component==="Card"||i.component==="ErrorContainer",n=i.component==="Drawer";if(!r&&!n)continue;let o=n?s.#m:s.#p,a=n?"<drawer-ui>":"<card-ui>",l=Array.isArray(i.children)?i.children:[];for(let h of l){let c=e.get(h);if(!c||typeof c.slot=="string"&&s.#g.has(c.slot)||o.has(c.component))continue;let u=`${i.id}::${h}::${c.component}`;this.#b.has(u)||(this.#b.add(u),console.warn(`A2UI: ${a} (id="${i.id}") body must wrap "${c.component}" (id="${h}") in <Section>. Direct flow children bypass the canonical body slot and lose --card-inset margin. Canonical children: ${[...o].join(", ")}`+(n?', or slot="header|body|footer".':".")))}}}static#O={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",body:"p",caption:"small"};#S(t,e){return!e?.slot&&s.#O[t]?s.#O[t]:"text-ui"}#x(t,e){let i=new Set(["id","component","children","child","_surfaceId"]);e.component==="Text"&&e.variant&&!e.slot&&s.#O[e.variant]&&i.add("variant");let r=this.#r.get(e.id),n={};for(let[o,a]of Object.entries(e)){if(i.has(o))continue;let l=a&&typeof a=="object"&&a.path,h=this.#y(a,e._surfaceId);n[o]=h,!(r&&Object.is(r[o],h))&&(h==null&&!l||Yu(t,o,h))}if(r)for(let o of Object.keys(r))!(o in n)&&!i.has(o)&&t.removeAttribute(ns(o));this.#r.set(e.id,n)}#y(t,e){if(t==null)return null;if(typeof t!="object")return t;if(t.path){let i=e?this.#i.get(e):null;return i?this.#w(i.dataModel,t.path):t.path}return t}#w(t,e){return!e||e==="/"?t:e.split("/").filter(Boolean).reduce((i,r)=>i?.[r],t)}#k({surfaceId:t,path:e,value:i}){let r=this.#i.get(t);if(r){if(!e||e==="/")r.dataModel=i??{};else{let n=e.split("/").filter(Boolean),o=r.dataModel;for(let a=0;a<n.length-1;a++)o[n[a]]==null&&(o[n[a]]={}),o=o[n[a]];o[n[n.length-1]]=i}for(let[n,o]of r.bindings){let a=r.elements.get(n);a&&this.#x(a,o)}}}#A({surfaceId:t}){let e=this.#i.get(t);if(e){this.#h?.teardown(t);for(let[i]of e.elements)this.#s.delete(i);if(e.adoptedSheets&&e.adoptedSheets.size>0){let i=new Set;for(let r of e.adoptedSheets.values())i.add(r.sheet);document.adoptedStyleSheets=document.adoptedStyleSheets.filter(r=>!i.has(r)),e.adoptedSheets.clear()}e.root.remove(),this.#i.delete(t)}}static#$=new Set(["root","html","body"]);#E({surfaceId:t,styleId:e,css:i}){if(typeof e!="string"||e.length===0){this.#Q(null,"styles-rejected",{surfaceId:t,styleId:e,reason:"invalid-payload: styleId must be a non-empty string"});return}if(typeof i!="string"){this.#Q(null,"styles-rejected",{surfaceId:t,styleId:e,reason:"invalid-payload: css must be a string"});return}let r=this.#i.get(t);if(!r){this.#Q(null,"styles-rejected",{surfaceId:t,styleId:e,reason:"no-such-surface"});return}let n=this.#R(i,t);if(n.rejected){this.#Q(r.root,"styles-rejected",{surfaceId:t,styleId:e,reason:n.reason});return}let o=r.adoptedSheets.get(e);o&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(a=>a!==o.sheet)),document.adoptedStyleSheets=[...document.adoptedStyleSheets,n.sheet],r.adoptedSheets.set(e,{sheet:n.sheet,ruleCount:n.sheet.cssRules.length,appliedAt:typeof performance<"u"?performance.now():Date.now()}),this.#Q(r.root,"styles-applied",{surfaceId:t,styleId:e,ruleCount:n.sheet.cssRules.length,validationWarnings:n.warnings})}#M({surfaceId:t,styleId:e}){let i=this.#i.get(t);if(!i)return;let r=i.adoptedSheets.get(e);r&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(n=>n!==r.sheet),i.adoptedSheets.delete(e),this.#Q(i.root,"styles-removed",{surfaceId:t,styleId:e}))}#R(t,e){let i=[];if(/^\s*@import\b/im.test(t))return{rejected:!0,reason:"forbidden-import"};if(/^\s*@charset\b/im.test(t))return{rejected:!0,reason:"forbidden-charset"};let r=new CSSStyleSheet;try{r.replaceSync(t)}catch(l){return{rejected:!0,reason:"parse-error: "+(l?.message||String(l))}}for(let l of r.cssRules){let h=this.#C(l);if(h)return{rejected:!0,reason:h}}if(/url\s*\(\s*["']?\s*(?:https?:|\/\/)/i.test(t))return{rejected:!0,reason:"external-url"};for(let l of r.cssRules)if(l.constructor?.name==="CSSPropertyRule"||l.cssText?.startsWith("@property")){let h=l.cssText.match(/@property\s+(--[\w-]+)/);h&&i.push({kind:"property-registered-globally",name:h[1]})}let n=this.#T(r,e),o=this.#L(r,e),a=new CSSStyleSheet;try{a.replaceSync(o)}catch(l){return{rejected:!0,reason:"scope-wrap-failed: "+(l?.message||String(l))}}return n.length>0&&i.push({kind:"animations-namespaced",count:n.length}),{rejected:!1,sheet:a,warnings:i}}#C(t){let e=t.cssText||"";if(/^@import\b/i.test(e))return"forbidden-import";if(/^@charset\b/i.test(e))return"forbidden-charset";if(/^@scope\b/i.test(e))return"forbidden-scope-directive";if(t.selectorText){let i=this.#I(t.selectorText);for(let r of i){let n=r.trim().replace(/^:scope\s*/,"");if(n.startsWith(":root"))return"forbidden-root-selector";let o=n.match(/^([a-zA-Z*][\w-]*)/);if(!o)continue;let a=o[1].toLowerCase();if(s.#$.has(a))return`forbidden-${a}-selector`}}return null}#I(t){let e=[],i=0,r=0;for(let n=0;n<t.length;n++){let o=t[n];o==="("?i++:o===")"?i--:o===","&&i===0&&(e.push(t.slice(r,n)),r=n+1)}return e.push(t.slice(r)),e}#T(t,e){let i=[],r=String(e).replace(/[^a-zA-Z0-9_-]/g,"_");for(let o=0;o<t.cssRules.length;o++){let a=t.cssRules[o];if(a.constructor?.name==="CSSKeyframesRule"||a.cssText?.startsWith("@keyframes")){let l=a.name;if(!l)continue;let h=`${r}_${l}`;try{a.name=h}catch{let c=a.cssText.replace(/@keyframes\s+[\w-]+/,`@keyframes ${h}`);t.deleteRule(o),t.insertRule(c,o)}i.push({from:l,to:h})}}if(i.length===0)return i;let n=new Map(i.map(o=>[o.from,o.to]));for(let o of t.cssRules)if(o.style)for(let a of["animation","animation-name"]){let l=o.style.getPropertyValue(a);if(!l)continue;let h=l.replace(/\b([\w-]+)\b/g,c=>n.has(c)?n.get(c):c);h!==l&&o.style.setProperty(a,h)}return i}#L(t,e){let i=[];for(let n of t.cssRules)i.push(n.cssText);return`@scope ([data-a2ui-surface="${String(e).replace(/"/g,'\\"')}"]) {
42
42
  ${i.join(`
43
43
  `)}
44
- }`}#Q(t,e,i){let r=t||this.#t;if(!(!r||typeof CustomEvent>"u"))try{r.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0,composed:!1}))}catch{}}getSurface(t){return this.#i.get(t)}getElement(t){return this.#s.get(t)}get surfaces(){return[...this.#i.keys()]}getStylesheets(t){return this.#i.get(t)?.adoptedSheets??new Map}reset(){this.#a!==null&&(cancelAnimationFrame(this.#a),this.#a=null),this.#n.length=0;let t=new Set;for(let[,e]of this.#i)if(e.adoptedSheets)for(let i of e.adoptedSheets.values())t.add(i.sheet);t.size>0&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(e=>!t.has(e)));for(let[,e]of this.#i)e.root===this.#t?e.root.innerHTML="":e.root.remove();this.#i.clear(),this.#s.clear(),this.#r.clear()}set batching(t){this.#o=!!t}get batching(){return this.#o}}});function Uu(s,t={}){let e=s;if(t.catalog){let i=t.catalog instanceof Map?[...t.catalog.keys()]:Object.keys(t.catalog),r=s.includes("?")?"&":"?";e=`${s}${r}a2ui_catalog=${encodeURIComponent(i.join(","))}`}return{[Symbol.asyncIterator](){let i=new EventSource(e),r=[],n=null,o=!1;return i.onmessage=a=>{try{let l=JSON.parse(a.data);if(n){let h=n;n=null,h({value:l,done:!1})}else r.push(l)}catch{console.warn("A2UI SSE: invalid JSON",a.data)}},i.onerror=()=>{if(o=!0,i.close(),n){let a=n;n=null,a({value:void 0,done:!0})}},t.signal&&t.signal.addEventListener("abort",()=>{if(o=!0,i.close(),n){let a=n;n=null,a({value:void 0,done:!0})}}),{next(){return r.length>0?Promise.resolve({value:r.shift(),done:!1}):o?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{n=a})},return(){return o=!0,i.close(),Promise.resolve({value:void 0,done:!0})}}}}}function Gu(s,t={}){return{[Symbol.asyncIterator](){let e=new WebSocket(s),i=[],r=null,n=!1;return e.onopen=()=>{if(t.catalog){let o=t.catalog instanceof Map?[...t.catalog.keys()]:Object.keys(t.catalog);e.send(JSON.stringify({type:"a2ui:catalog",supportedTypes:o}))}},e.onmessage=o=>{try{let a=JSON.parse(o.data);if(r){let l=r;r=null,l({value:a,done:!1})}else i.push(a)}catch{console.warn("A2UI WS: invalid JSON",o.data)}},e.onclose=()=>{if(n=!0,r){let o=r;r=null,o({value:void 0,done:!0})}},e.onerror=()=>{n=!0,e.close()},{next(){return i.length>0?Promise.resolve({value:i.shift(),done:!1}):n?Promise.resolve({value:void 0,done:!0}):new Promise(o=>{r=o})},return(){return n=!0,e.close(),Promise.resolve({value:void 0,done:!0})}}}}}function cA(s,t=0){return{async*[Symbol.asyncIterator](){for(let e of s)t>0&&await new Promise(i=>setTimeout(i,t)),yield e}}}function Hu(s,t={}){let e=(s.split(":")[0]||"").toLowerCase();return e==="ws"||e==="wss"?RI(s,t):hA(s,t)}function lA(s,t){if(s.result?.content){for(let e of s.result.content)if(e.type==="resource"&&e.resource?.mimeType==="application/json+a2ui")try{let i=JSON.parse(e.resource.text);for(let r of Array.isArray(i)?i:[i])t(r)}catch{}else if(e.type==="text")try{let i=JSON.parse(e.text);i.type&&(i.type.startsWith("create")||i.type.startsWith("update")||i.type.startsWith("delete"))&&t(i)}catch{}}}function RI(s,t){return{async*[Symbol.asyncIterator](){let{signal:e,catalog:i,onAction:r}=t,n=new WebSocket(s);if(await new Promise((c,u)=>{n.onopen=c,n.onerror=u,e&&e.addEventListener("abort",()=>{n.close(),u(new DOMException("Aborted","AbortError"))},{once:!0})}),i){let c=i instanceof Map?[...i.keys()]:Object.keys(i);n.send(JSON.stringify({jsonrpc:"2.0",method:"a2ui/catalog",params:{supportedTypes:c}}))}let o=[],a=null,l=!1,h=c=>{if(a){let u=a;a=null,u({value:c,done:!1})}else o.push(c)};for(n.onmessage=c=>{try{let u=JSON.parse(c.data);lA(u,h),u.method==="a2ui/action"&&r&&r(u.params?.name,u.params?.arguments).then(d=>{n.send(JSON.stringify({jsonrpc:"2.0",id:u.id,result:d}))}).catch(d=>{n.send(JSON.stringify({jsonrpc:"2.0",id:u.id,error:{code:-1,message:d.message}}))})}catch{console.warn("A2UI MCP: invalid message",c.data)}},n.onclose=()=>{if(l=!0,a){let c=a;a=null,c({value:void 0,done:!0})}},n.onerror=()=>{l=!0,n.close()},e&&e.addEventListener("abort",()=>{if(l=!0,n.close(),a){let c=a;a=null,c({value:void 0,done:!0})}});!l||o.length>0;)if(o.length>0)yield o.shift();else{if(l)break;{let c=await new Promise(u=>{a=u});if(c.done)break;yield c.value}}}}}function hA(s,t){return{async*[Symbol.asyncIterator](){let{signal:e,catalog:i,onAction:r}=t,n=[],o=null,a=!1,l=g=>{if(o){let y=o;o=null,y({value:g,done:!1})}else n.push(g)},h=()=>{if(a=!0,o){let g=o;o=null,g({value:void 0,done:!0})}},c={jsonrpc:"2.0",id:1,method:"initialize",params:{protocolVersion:"2025-11-25",capabilities:{},clientInfo:{name:"a2ui-runtime",version:"0.0.0"}}},u;try{u=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify(c),signal:e})}catch(g){console.warn("A2UI MCP HTTP: initialize failed",g);return}if(!u.ok){console.warn(`A2UI MCP HTTP: initialize returned ${u.status}`);return}let d=u.headers.get("mcp-session-id");if(!d){console.warn("A2UI MCP HTTP: server did not return mcp-session-id header");try{await u.text()}catch{}return}try{if((u.headers.get("content-type")||"").includes("text/event-stream")){let y=u.body.getReader(),S=new TextDecoder,x="";for(;;){let{done:k,value:A}=await y.read();if(k||(x+=S.decode(A,{stream:!0}),x.includes(`
44
+ }`}#Q(t,e,i){let r=t||this.#t;if(!(!r||typeof CustomEvent>"u"))try{r.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0,composed:!1}))}catch{}}getSurface(t){return this.#i.get(t)}getElement(t){return this.#s.get(t)}get surfaces(){return[...this.#i.keys()]}getStylesheets(t){return this.#i.get(t)?.adoptedSheets??new Map}reset(){this.#a!==null&&(cancelAnimationFrame(this.#a),this.#a=null),this.#n.length=0;let t=new Set;for(let[,e]of this.#i)if(e.adoptedSheets)for(let i of e.adoptedSheets.values())t.add(i.sheet);t.size>0&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(e=>!t.has(e)));for(let[,e]of this.#i)e.root===this.#t?e.root.innerHTML="":e.root.remove();this.#i.clear(),this.#s.clear(),this.#r.clear()}set batching(t){this.#o=!!t}get batching(){return this.#o}}});function Uu(s,t={}){let e=s;if(t.catalog){let i=t.catalog instanceof Map?[...t.catalog.keys()]:Object.keys(t.catalog),r=s.includes("?")?"&":"?";e=`${s}${r}a2ui_catalog=${encodeURIComponent(i.join(","))}`}return{[Symbol.asyncIterator](){let i=new EventSource(e),r=[],n=null,o=!1;return i.onmessage=a=>{try{let l=JSON.parse(a.data);if(n){let h=n;n=null,h({value:l,done:!1})}else r.push(l)}catch{console.warn("A2UI SSE: invalid JSON",a.data)}},i.onerror=()=>{if(o=!0,i.close(),n){let a=n;n=null,a({value:void 0,done:!0})}},t.signal&&t.signal.addEventListener("abort",()=>{if(o=!0,i.close(),n){let a=n;n=null,a({value:void 0,done:!0})}}),{next(){return r.length>0?Promise.resolve({value:r.shift(),done:!1}):o?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{n=a})},return(){return o=!0,i.close(),Promise.resolve({value:void 0,done:!0})}}}}}function Gu(s,t={}){return{[Symbol.asyncIterator](){let e=new WebSocket(s),i=[],r=null,n=!1;return e.onopen=()=>{if(t.catalog){let o=t.catalog instanceof Map?[...t.catalog.keys()]:Object.keys(t.catalog);e.send(JSON.stringify({type:"a2ui:catalog",supportedTypes:o}))}},e.onmessage=o=>{try{let a=JSON.parse(o.data);if(r){let l=r;r=null,l({value:a,done:!1})}else i.push(a)}catch{console.warn("A2UI WS: invalid JSON",o.data)}},e.onclose=()=>{if(n=!0,r){let o=r;r=null,o({value:void 0,done:!0})}},e.onerror=()=>{n=!0,e.close()},{next(){return i.length>0?Promise.resolve({value:i.shift(),done:!1}):n?Promise.resolve({value:void 0,done:!0}):new Promise(o=>{r=o})},return(){return n=!0,e.close(),Promise.resolve({value:void 0,done:!0})}}}}}function cA(s,t=0){return{async*[Symbol.asyncIterator](){for(let e of s)t>0&&await new Promise(i=>setTimeout(i,t)),yield e}}}function Hu(s,t={}){let e=(s.split(":")[0]||"").toLowerCase();return e==="ws"||e==="wss"?RI(s,t):hA(s,t)}function lA(s,t){if(s.result?.content){for(let e of s.result.content)if(e.type==="resource"&&e.resource?.mimeType==="application/json+a2ui")try{let i=JSON.parse(e.resource.text);for(let r of Array.isArray(i)?i:[i])t(r)}catch{}else if(e.type==="text")try{let i=JSON.parse(e.text);i.type&&(i.type.startsWith("create")||i.type.startsWith("update")||i.type.startsWith("delete"))&&t(i)}catch{}}}function RI(s,t){return{async*[Symbol.asyncIterator](){let{signal:e,catalog:i,onAction:r}=t,n=new WebSocket(s);if(await new Promise((c,u)=>{n.onopen=c,n.onerror=u,e&&e.addEventListener("abort",()=>{n.close(),u(new DOMException("Aborted","AbortError"))},{once:!0})}),i){let c=i instanceof Map?[...i.keys()]:Object.keys(i);n.send(JSON.stringify({jsonrpc:"2.0",method:"a2ui/catalog",params:{supportedTypes:c}}))}let o=[],a=null,l=!1,h=c=>{if(a){let u=a;a=null,u({value:c,done:!1})}else o.push(c)};for(n.onmessage=c=>{try{let u=JSON.parse(c.data);lA(u,h),u.method==="a2ui/action"&&r&&r(u.params?.name,u.params?.arguments).then(d=>{n.send(JSON.stringify({jsonrpc:"2.0",id:u.id,result:d}))}).catch(d=>{n.send(JSON.stringify({jsonrpc:"2.0",id:u.id,error:{code:-1,message:d.message}}))})}catch{console.warn("A2UI MCP: invalid message",c.data)}},n.onclose=()=>{if(l=!0,a){let c=a;a=null,c({value:void 0,done:!0})}},n.onerror=()=>{l=!0,n.close()},e&&e.addEventListener("abort",()=>{if(l=!0,n.close(),a){let c=a;a=null,c({value:void 0,done:!0})}});!l||o.length>0;)if(o.length>0)yield o.shift();else{if(l)break;{let c=await new Promise(u=>{a=u});if(c.done)break;yield c.value}}}}}function hA(s,t){return{async*[Symbol.asyncIterator](){let{signal:e,catalog:i,onAction:r}=t,n=[],o=null,a=!1,l=g=>{if(o){let y=o;o=null,y({value:g,done:!1})}else n.push(g)},h=()=>{if(a=!0,o){let g=o;o=null,g({value:void 0,done:!0})}},c={jsonrpc:"2.0",id:1,method:"initialize",params:{protocolVersion:"2025-11-25",capabilities:{},clientInfo:{name:"a2ui",version:"0.0.0"}}},u;try{u=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream"},body:JSON.stringify(c),signal:e})}catch(g){console.warn("A2UI MCP HTTP: initialize failed",g);return}if(!u.ok){console.warn(`A2UI MCP HTTP: initialize returned ${u.status}`);return}let d=u.headers.get("mcp-session-id");if(!d){console.warn("A2UI MCP HTTP: server did not return mcp-session-id header");try{await u.text()}catch{}return}try{if((u.headers.get("content-type")||"").includes("text/event-stream")){let y=u.body.getReader(),S=new TextDecoder,x="";for(;;){let{done:k,value:A}=await y.read();if(k||(x+=S.decode(A,{stream:!0}),x.includes(`
45
45
 
46
46
  `)))break}try{y.cancel()}catch{}}else await u.json().catch(()=>null)}catch{}try{await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","mcp-session-id":d},body:JSON.stringify({jsonrpc:"2.0",method:"notifications/initialized"}),signal:e}).then(g=>g.text()).catch(()=>null)}catch{}if(i){let g=i instanceof Map?[...i.keys()]:Object.keys(i);try{await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","mcp-session-id":d},body:JSON.stringify({jsonrpc:"2.0",method:"a2ui/catalog",params:{supportedTypes:g}}),signal:e}).then(y=>y.text()).catch(()=>null)}catch{}}let f=g=>fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream","mcp-session-id":d},body:JSON.stringify(g),signal:e}).then(y=>y.text()).catch(()=>null),p=g=>{lA(g,l),g.method==="a2ui/action"&&r&&Promise.resolve().then(()=>r(g.params?.name,g.params?.arguments)).then(y=>f({jsonrpc:"2.0",id:g.id,result:y})).catch(y=>f({jsonrpc:"2.0",id:g.id,error:{code:-1,message:y.message}}))},m;try{m=await fetch(s,{method:"GET",headers:{Accept:"text/event-stream","mcp-session-id":d},signal:e})}catch(g){g?.name!=="AbortError"&&console.warn("A2UI MCP HTTP: GET stream failed",g);return}if(!m.ok||!m.body){console.warn(`A2UI MCP HTTP: GET stream returned ${m.status}`);return}e&&e.addEventListener("abort",h,{once:!0});let O=()=>{try{fetch(s,{method:"DELETE",headers:{"mcp-session-id":d}}).catch(()=>null)}catch{}};for((async()=>{let g=m.body.getReader(),y=new TextDecoder,S="";try{for(;!a;){let{done:x,value:k}=await g.read();if(x)break;S+=y.decode(k,{stream:!0});let A;for(;(A=S.indexOf(`
47
47
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.8.35",
4
- "description": "AdiaUI web components \u2014 vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui-runtime.",
3
+ "version": "0.8.37",
4
+ "description": "AdiaUI web components \u2014 vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui.",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",
7
7
  "bin": {
@@ -120,7 +120,7 @@
120
120
  "./core/icons-phosphor.js"
121
121
  ],
122
122
  "dependencies": {
123
- "@adia-ai/a2ui-runtime": "^0.8.0",
123
+ "@adia-ai/a2ui": "^0.8.0",
124
124
  "@codemirror/commands": "^6.10.3",
125
125
  "@codemirror/language": "^6.12.3",
126
126
  "@codemirror/lint": "^6.9.5",
@@ -41,7 +41,7 @@
41
41
  <icon-ui slot="icon" name="key" size="sm"></icon-ui>
42
42
  <span slot="description"><code>sk_live_…A4F2</code> · last used 4 minutes ago</span>
43
43
  <row-ui slot="action" gap="2" align="center">
44
- <tag-ui size="sm" variant="primary">read · write</tag-ui>
44
+ <tag-ui variant="primary">read · write</tag-ui>
45
45
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
46
46
  </row-ui>
47
47
  </list-item-ui>
@@ -49,7 +49,7 @@
49
49
  <icon-ui slot="icon" name="key" size="sm"></icon-ui>
50
50
  <span slot="description"><code>sk_live_…9821</code> · last used 2 hours ago</span>
51
51
  <row-ui slot="action" gap="2" align="center">
52
- <tag-ui size="sm">read</tag-ui>
52
+ <tag-ui>read</tag-ui>
53
53
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
54
54
  </row-ui>
55
55
  </list-item-ui>
@@ -57,7 +57,7 @@
57
57
  <icon-ui slot="icon" name="key" size="sm"></icon-ui>
58
58
  <span slot="description"><code>sk_test_…7f0e</code> · last used 18 days ago</span>
59
59
  <row-ui slot="action" gap="2" align="center">
60
- <tag-ui size="sm" variant="default">test</tag-ui>
60
+ <tag-ui variant="default">test</tag-ui>
61
61
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
62
62
  </row-ui>
63
63
  </list-item-ui>
@@ -122,7 +122,7 @@
122
122
  <icon-ui slot="icon" name="webhooks-logo" size="sm"></icon-ui>
123
123
  <span slot="description">5 events · last delivery 3 minutes ago</span>
124
124
  <row-ui slot="action" gap="2" align="center">
125
- <tag-ui size="sm" variant="success">200 OK</tag-ui>
125
+ <tag-ui variant="success">200 OK</tag-ui>
126
126
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
127
127
  </row-ui>
128
128
  </list-item-ui>
@@ -130,7 +130,7 @@
130
130
  <icon-ui slot="icon" name="webhooks-logo" size="sm"></icon-ui>
131
131
  <span slot="description">3 events · last attempt 2 hours ago · 3 retries</span>
132
132
  <row-ui slot="action" gap="2" align="center">
133
- <tag-ui size="sm" variant="danger">503</tag-ui>
133
+ <tag-ui variant="danger">503</tag-ui>
134
134
  <button-ui text="Retry" variant="ghost" size="sm"></button-ui>
135
135
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
136
136
  </row-ui>
@@ -204,20 +204,20 @@
204
204
  <list-item-ui text="Workspace · JSON">
205
205
  <icon-ui slot="icon" name="download-simple" size="sm"></icon-ui>
206
206
  <span slot="description">Requested 12 minutes ago · 1.2M records</span>
207
- <tag-ui slot="action" size="sm" variant="warning">Running</tag-ui>
207
+ <tag-ui slot="action" variant="warning">Running</tag-ui>
208
208
  </list-item-ui>
209
209
  <list-item-ui text="My data · CSV">
210
210
  <icon-ui slot="icon" name="download-simple" size="sm"></icon-ui>
211
211
  <span slot="description">Ready 2 hours ago · 4.2 MB · expires in 6 days</span>
212
212
  <row-ui slot="action" gap="2" align="center">
213
- <tag-ui size="sm" variant="success">Ready</tag-ui>
213
+ <tag-ui variant="success">Ready</tag-ui>
214
214
  <button-ui text="Download" variant="primary" size="sm" icon-leading="download-simple"></button-ui>
215
215
  </row-ui>
216
216
  </list-item-ui>
217
217
  <list-item-ui text="Workspace · JSON">
218
218
  <icon-ui slot="icon" name="download-simple" size="sm"></icon-ui>
219
219
  <span slot="description">Ready 14 days ago · link expired</span>
220
- <tag-ui slot="action" size="sm" variant="default">Expired</tag-ui>
220
+ <tag-ui slot="action" variant="default">Expired</tag-ui>
221
221
  </list-item-ui>
222
222
  </list-ui>
223
223
  </section>
@@ -29,9 +29,9 @@
29
29
  data-chunk-domain="agent"
30
30
  data-chunk-description="Inline agent-cost strip — compact tag row showing per-response cost, token count, and latency, with the model name right-aligned. Rides under an agent reply as a usage footer."
31
31
  data-chunk-keywords="agent cost tokens latency model usage inline strip tags price per-response footer telemetry llm" gap="2" align="center" padding="2" style="max-width: 560px;">
32
- <tag-ui icon="coins" size="sm">$0.014</tag-ui>
33
- <tag-ui icon="hash" size="sm">2,184 tok</tag-ui>
34
- <tag-ui icon="timer" size="sm">3.2s</tag-ui>
32
+ <tag-ui icon="coins">$0.014</tag-ui>
33
+ <tag-ui icon="hash">2,184 tok</tag-ui>
34
+ <tag-ui icon="timer">3.2s</tag-ui>
35
35
  <row-ui grow></row-ui>
36
36
  <text-ui color="subtle" size="sm">claude-opus-4-7</text-ui>
37
37
  </row-ui>
@@ -38,19 +38,19 @@
38
38
  <list-ui divider contained>
39
39
  <list-item-ui text="Prefers Kim over Kimberly">
40
40
  <span slot="description">From a chat on 2026-04-12</span>
41
- <tag-ui slot="action" size="sm">user</tag-ui>
41
+ <tag-ui slot="action">user</tag-ui>
42
42
  </list-item-ui>
43
43
  <list-item-ui text="Uses OKLCH tokens, never raw hex">
44
44
  <span slot="description">From the AdiaUI styleguide</span>
45
- <tag-ui slot="action" size="sm" variant="primary">workspace</tag-ui>
45
+ <tag-ui slot="action" variant="primary">workspace</tag-ui>
46
46
  </list-item-ui>
47
47
  <list-item-ui text="Browser baseline: Chromium 125+, Safari 18.0+">
48
48
  <span slot="description">From AGENTS.md</span>
49
- <tag-ui slot="action" size="sm" variant="primary">workspace</tag-ui>
49
+ <tag-ui slot="action" variant="primary">workspace</tag-ui>
50
50
  </list-item-ui>
51
51
  <list-item-ui text="Working on Group 1 of skill expansion">
52
52
  <span slot="description">Current session</span>
53
- <tag-ui slot="action" size="sm">session</tag-ui>
53
+ <tag-ui slot="action">session</tag-ui>
54
54
  </list-item-ui>
55
55
  </list-ui>
56
56
  </section>
@@ -41,15 +41,15 @@
41
41
  <button-ui icon="funnel" variant="ghost" size="sm"></button-ui>
42
42
  </row-ui>
43
43
  <row-ui gap="2">
44
- <tag-ui size="sm" variant="primary">All · 12</tag-ui>
45
- <tag-ui size="sm">Code review · 4</tag-ui>
46
- <tag-ui size="sm">Drafts · 3</tag-ui>
47
- <tag-ui size="sm">Research · 3</tag-ui>
48
- <tag-ui size="sm">Personal · 2</tag-ui>
44
+ <tag-ui variant="primary">All · 12</tag-ui>
45
+ <tag-ui>Code review · 4</tag-ui>
46
+ <tag-ui>Drafts · 3</tag-ui>
47
+ <tag-ui>Research · 3</tag-ui>
48
+ <tag-ui>Personal · 2</tag-ui>
49
49
  </row-ui>
50
50
  <grid-ui columns="2" gap="2">
51
51
  <card-ui compact>
52
- <header><span slot="heading">Code review</span><tag-ui slot="action" size="sm">Pinned</tag-ui></header>
52
+ <header><span slot="heading">Code review</span><tag-ui slot="action">Pinned</tag-ui></header>
53
53
  <section><text-ui color="subtle" size="sm">Review the diff for security, perf, and naming. Flag with file:line. Suggest fixes inline.</text-ui></section>
54
54
  </card-ui>
55
55
  <card-ui compact>
@@ -143,8 +143,8 @@
143
143
  <header>
144
144
  <span slot="heading" variant="section">Code review</span>
145
145
  <row-ui slot="action" gap="1">
146
- <tag-ui size="sm" variant="primary">Pinned</tag-ui>
147
- <tag-ui size="sm">Code review</tag-ui>
146
+ <tag-ui variant="primary">Pinned</tag-ui>
147
+ <tag-ui>Code review</tag-ui>
148
148
  </row-ui>
149
149
  </header>
150
150
  <section>
@@ -41,7 +41,7 @@
41
41
  <list-ui divider contained>
42
42
  <list-item-ui text="Q2 onboarding budget — $48,000">
43
43
  <avatar-ui slot="icon" size="sm" text="Jordan Lee"></avatar-ui>
44
- <span slot="description"><tag-ui size="sm" variant="warning">High</tag-ui> Jordan Lee · Engineering · 2 hours ago</span>
44
+ <span slot="description"><tag-ui variant="warning">High</tag-ui> Jordan Lee · Engineering · 2 hours ago</span>
45
45
  <row-ui slot="action" gap="2" align="center">
46
46
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
47
47
  <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
@@ -57,7 +57,7 @@
57
57
  </list-item-ui>
58
58
  <list-item-ui text="Access request — production database">
59
59
  <avatar-ui slot="icon" size="sm" text="Sam Park"></avatar-ui>
60
- <span slot="description"><tag-ui size="sm" variant="warning">High</tag-ui> Sam Park · Data · 1 day ago</span>
60
+ <span slot="description"><tag-ui variant="warning">High</tag-ui> Sam Park · Data · 1 day ago</span>
61
61
  <row-ui slot="action" gap="2" align="center">
62
62
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
63
63
  <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
@@ -34,7 +34,7 @@
34
34
  <row-ui gap="2" align="baseline" justify="between">
35
35
  <row-ui gap="2" align="baseline">
36
36
  <text-ui strong size="lg">v2.3.0</text-ui>
37
- <tag-ui size="sm" variant="primary">Latest</tag-ui>
37
+ <tag-ui variant="primary">Latest</tag-ui>
38
38
  </row-ui>
39
39
  <text-ui color="subtle" size="sm">March 12, 2026</text-ui>
40
40
  </row-ui>
@@ -44,8 +44,8 @@
44
44
  </row-ui>
45
45
  <text-ui>Should the OKLCH ramp here use the chrome or the data scale? <text-ui color="accent">@Kim</text-ui> what's the convention?</text-ui>
46
46
  <row-ui gap="1">
47
- <tag-ui size="sm" icon-leading="thumbs-up">2</tag-ui>
48
- <tag-ui size="sm" icon-leading="eyes">1</tag-ui>
47
+ <tag-ui icon-leading="thumbs-up">2</tag-ui>
48
+ <tag-ui icon-leading="eyes">1</tag-ui>
49
49
  <button-ui text="Reply" variant="ghost" size="sm"></button-ui>
50
50
  </row-ui>
51
51
  </col-ui>
@@ -59,7 +59,7 @@
59
59
  </row-ui>
60
60
  <text-ui>Chrome — the data scale is reserved for visualization series. Spec at <text-ui color="accent">.claude/docs/specs/component-token-contract.md</text-ui>.</text-ui>
61
61
  <row-ui gap="1">
62
- <tag-ui size="sm" icon-leading="thumbs-up">3</tag-ui>
62
+ <tag-ui icon-leading="thumbs-up">3</tag-ui>
63
63
  <button-ui text="Reply" variant="ghost" size="sm"></button-ui>
64
64
  </row-ui>
65
65
  </col-ui>
@@ -174,10 +174,10 @@
174
174
  data-chunk-domain="content"
175
175
  data-chunk-description="Reactions bar — emoji reaction tags with counts (thumbs-up 4, party 2, eyes 1, rocket 1; own reaction highlighted) plus an add-reaction button. Rides under a comment or message."
176
176
  data-chunk-keywords="reactions emoji bar counts thumbs-up party add react message comment collaboration engagement" gap="1">
177
- <tag-ui size="sm">👍 4</tag-ui>
178
- <tag-ui size="sm" variant="primary">🎉 2</tag-ui>
179
- <tag-ui size="sm">👀 1</tag-ui>
180
- <tag-ui size="sm">🚀 1</tag-ui>
177
+ <tag-ui>👍 4</tag-ui>
178
+ <tag-ui variant="primary">🎉 2</tag-ui>
179
+ <tag-ui>👀 1</tag-ui>
180
+ <tag-ui>🚀 1</tag-ui>
181
181
  <button-ui icon="plus" variant="ghost" size="sm" aria-label="Add reaction"></button-ui>
182
182
  </row-ui>
183
183
  </div>
@@ -109,28 +109,28 @@
109
109
  <td><input-ui type="number" value="124" size="sm"></input-ui></td>
110
110
  <td><input-ui type="number" value="98" size="sm"></input-ui></td>
111
111
  <td><input-ui type="number" value="156" size="sm"></input-ui></td>
112
- <td><tag-ui size="sm" variant="default">clean</tag-ui></td>
112
+ <td><tag-ui variant="default">clean</tag-ui></td>
113
113
  </tr>
114
114
  <tr>
115
115
  <td><text-ui strong>Widget B</text-ui></td>
116
116
  <td><input-ui type="number" value="42" size="sm"></input-ui></td>
117
117
  <td><input-ui type="number" value="51" size="sm"></input-ui></td>
118
118
  <td><input-ui type="number" value="78" size="sm"></input-ui></td>
119
- <td><tag-ui size="sm" variant="warning">dirty</tag-ui></td>
119
+ <td><tag-ui variant="warning">dirty</tag-ui></td>
120
120
  </tr>
121
121
  <tr>
122
122
  <td><text-ui strong>Widget C</text-ui></td>
123
123
  <td><input-ui type="number" value="0" size="sm"></input-ui></td>
124
124
  <td><input-ui type="number" value="0" size="sm"></input-ui></td>
125
125
  <td><input-ui type="number" value="320" size="sm"></input-ui></td>
126
- <td><tag-ui size="sm" variant="warning">dirty</tag-ui></td>
126
+ <td><tag-ui variant="warning">dirty</tag-ui></td>
127
127
  </tr>
128
128
  <tr>
129
129
  <td><text-ui strong>Widget D</text-ui></td>
130
130
  <td><input-ui type="number" value="200" size="sm"></input-ui></td>
131
131
  <td><input-ui type="number" value="245" size="sm"></input-ui></td>
132
132
  <td><input-ui type="number" value="280" size="sm"></input-ui></td>
133
- <td><tag-ui size="sm" variant="default">clean</tag-ui></td>
133
+ <td><tag-ui variant="default">clean</tag-ui></td>
134
134
  </tr>
135
135
  </tbody>
136
136
  </table>
@@ -109,22 +109,22 @@
109
109
  <dt>Workspace name</dt>
110
110
  <dd>
111
111
  <row-ui gap="2" align="center">
112
- <tag-ui size="sm" variant="danger" icon-leading="minus">Adia</tag-ui>
113
- <tag-ui size="sm" variant="success" icon-leading="plus">Adia AI</tag-ui>
112
+ <tag-ui variant="danger" icon-leading="minus">Adia</tag-ui>
113
+ <tag-ui variant="success" icon-leading="plus">Adia AI</tag-ui>
114
114
  </row-ui>
115
115
  </dd>
116
116
  <dt>Default theme</dt>
117
117
  <dd>
118
118
  <row-ui gap="2" align="center">
119
- <tag-ui size="sm" variant="danger" icon-leading="minus">light</tag-ui>
120
- <tag-ui size="sm" variant="success" icon-leading="plus">auto</tag-ui>
119
+ <tag-ui variant="danger" icon-leading="minus">light</tag-ui>
120
+ <tag-ui variant="success" icon-leading="plus">auto</tag-ui>
121
121
  </row-ui>
122
122
  </dd>
123
123
  <dt>Member invites</dt>
124
124
  <dd>
125
125
  <row-ui gap="2" align="center">
126
- <tag-ui size="sm" variant="danger" icon-leading="minus">Admin only</tag-ui>
127
- <tag-ui size="sm" variant="success" icon-leading="plus">Anyone with link</tag-ui>
126
+ <tag-ui variant="danger" icon-leading="minus">Admin only</tag-ui>
127
+ <tag-ui variant="success" icon-leading="plus">Anyone with link</tag-ui>
128
128
  </row-ui>
129
129
  </dd>
130
130
  </description-list-ui>
@@ -28,9 +28,9 @@
28
28
  <section>
29
29
  <row-ui gap="2" align="center" wrap>
30
30
  <text-ui color="subtle" weight="semibold">Filters:</text-ui>
31
- <tag-ui text="Status: Active" removable size="sm" tone="muted"></tag-ui>
32
- <tag-ui text="Owner: Alex Chen" removable size="sm" tone="muted"></tag-ui>
33
- <tag-ui text="Updated: last 7 days" removable size="sm" tone="muted"></tag-ui>
31
+ <tag-ui text="Status: Active" removable tone="muted"></tag-ui>
32
+ <tag-ui text="Owner: Alex Chen" removable tone="muted"></tag-ui>
33
+ <tag-ui text="Updated: last 7 days" removable tone="muted"></tag-ui>
34
34
  <button-ui text="+ Add filter" variant="ghost" size="sm" popovertarget="pat-filter-menu"></button-ui>
35
35
  <span data-spacer></span>
36
36
  <button-ui text="Clear all" variant="ghost" size="sm"></button-ui>
@@ -58,8 +58,8 @@
58
58
  <section bleed>
59
59
  <toolbar-ui overflow="none" style="padding: var(--a-space-2) var(--a-space-3); border-block-end: 1px solid var(--md-sys-color-neutral-outline-variant); border-radius: 0;">
60
60
  <row-ui gap="2" align="center" grow>
61
- <tag-ui text="Status: Active" removable size="sm" tone="muted"></tag-ui>
62
- <tag-ui text="Owner: Alex" removable size="sm" tone="muted"></tag-ui>
61
+ <tag-ui text="Status: Active" removable tone="muted"></tag-ui>
62
+ <tag-ui text="Owner: Alex" removable tone="muted"></tag-ui>
63
63
  <button-ui text="+ Add filter" variant="ghost" size="sm"></button-ui>
64
64
  </row-ui>
65
65
  <search-ui placeholder="Search…" size="sm"></search-ui>
@@ -58,7 +58,7 @@
58
58
  data-chunk-description="Status-change popover — the current status tag is the trigger; the anchored card offers the status options with descriptions and an optional note field."
59
59
  data-chunk-keywords="inline dialog status change popover anchored tag trigger options workflow state transition note quick" placement="bottom-start">
60
60
  <button-ui slot="trigger" variant="outline" size="sm">
61
- <tag-ui slot="leading" size="sm" variant="warning">In review</tag-ui>
61
+ <tag-ui slot="leading" variant="warning">In review</tag-ui>
62
62
  <icon-ui slot="trailing" name="caret-down" size="sm"></icon-ui>
63
63
  </button-ui>
64
64
  <card-ui slot="content" style="min-width: 320px;">
@@ -41,7 +41,7 @@
41
41
  <text-ui strong>Ship the new auth flow</text-ui>
42
42
  <text-ui color="subtle" size="sm">Owner: Jordan · Due Friday</text-ui>
43
43
  </col-ui>
44
- <tag-ui size="sm" variant="warning">P0</tag-ui>
44
+ <tag-ui variant="warning">P0</tag-ui>
45
45
  </row-ui>
46
46
  </list-item-ui>
47
47
  <list-item-ui>
@@ -51,7 +51,7 @@
51
51
  <text-ui strong>Migrate dashboard tokens</text-ui>
52
52
  <text-ui color="subtle" size="sm">Owner: Avery · Due next week</text-ui>
53
53
  </col-ui>
54
- <tag-ui size="sm">P1</tag-ui>
54
+ <tag-ui>P1</tag-ui>
55
55
  </row-ui>
56
56
  </list-item-ui>
57
57
  <list-item-ui>
@@ -61,7 +61,7 @@
61
61
  <text-ui strong>Add Storybook coverage for primitives</text-ui>
62
62
  <text-ui color="subtle" size="sm">Owner: Sam · No due date</text-ui>
63
63
  </col-ui>
64
- <tag-ui size="sm">P2</tag-ui>
64
+ <tag-ui>P2</tag-ui>
65
65
  </row-ui>
66
66
  </list-item-ui>
67
67
  <list-item-ui>
@@ -71,7 +71,7 @@
71
71
  <text-ui strong>Investigate slow startup</text-ui>
72
72
  <text-ui color="subtle" size="sm">Owner: Riley · Backlog</text-ui>
73
73
  </col-ui>
74
- <tag-ui size="sm">P2</tag-ui>
74
+ <tag-ui>P2</tag-ui>
75
75
  </row-ui>
76
76
  </list-item-ui>
77
77
  </list-ui>
@@ -99,7 +99,7 @@
99
99
  <text-ui strong>Audit kanban accessibility</text-ui>
100
100
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
101
101
  <avatar-ui size="sm" text="Sam Park"></avatar-ui>
102
- <tag-ui size="sm">P1</tag-ui>
102
+ <tag-ui>P1</tag-ui>
103
103
  </row-ui>
104
104
  </section>
105
105
  </card-ui>
@@ -108,7 +108,7 @@
108
108
  <text-ui strong>Drag handle hit-target</text-ui>
109
109
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
110
110
  <avatar-ui size="sm" text="Avery Chen"></avatar-ui>
111
- <tag-ui size="sm">P2</tag-ui>
111
+ <tag-ui>P2</tag-ui>
112
112
  </row-ui>
113
113
  </section>
114
114
  </card-ui>
@@ -117,7 +117,7 @@
117
117
  <text-ui strong>Empty-column copy</text-ui>
118
118
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
119
119
  <avatar-ui size="sm" text="Jordan Lee"></avatar-ui>
120
- <tag-ui size="sm">P2</tag-ui>
120
+ <tag-ui>P2</tag-ui>
121
121
  </row-ui>
122
122
  </section>
123
123
  </card-ui>
@@ -136,7 +136,7 @@
136
136
  <text-ui strong>Auth flow rebuild</text-ui>
137
137
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
138
138
  <avatar-ui size="sm" text="Jordan Lee"></avatar-ui>
139
- <tag-ui size="sm" variant="warning">P0</tag-ui>
139
+ <tag-ui variant="warning">P0</tag-ui>
140
140
  </row-ui>
141
141
  </section>
142
142
  </card-ui>
@@ -145,7 +145,7 @@
145
145
  <text-ui strong>OKLCH ramp lint rule</text-ui>
146
146
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
147
147
  <avatar-ui size="sm" text="Kim Granlund"></avatar-ui>
148
- <tag-ui size="sm">P1</tag-ui>
148
+ <tag-ui>P1</tag-ui>
149
149
  </row-ui>
150
150
  </section>
151
151
  </card-ui>
@@ -164,7 +164,7 @@
164
164
  <text-ui strong>v0.0.27 release notes</text-ui>
165
165
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
166
166
  <avatar-ui size="sm" text="Riley Tan"></avatar-ui>
167
- <tag-ui size="sm">P1</tag-ui>
167
+ <tag-ui>P1</tag-ui>
168
168
  </row-ui>
169
169
  </section>
170
170
  </card-ui>
@@ -183,7 +183,7 @@
183
183
  <text-ui strong color="subtle"><s>Safari @scope sweep</s></text-ui>
184
184
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
185
185
  <avatar-ui size="sm" text="Kim Granlund"></avatar-ui>
186
- <tag-ui size="sm" variant="success">Done</tag-ui>
186
+ <tag-ui variant="success">Done</tag-ui>
187
187
  </row-ui>
188
188
  </section>
189
189
  </card-ui>
@@ -192,7 +192,7 @@
192
192
  <text-ui strong color="subtle"><s>Toast top-layer channel</s></text-ui>
193
193
  <row-ui gap="2" align="center" style="margin-top: 0.5rem;">
194
194
  <avatar-ui size="sm" text="Sam Park"></avatar-ui>
195
- <tag-ui size="sm" variant="success">Done</tag-ui>
195
+ <tag-ui variant="success">Done</tag-ui>
196
196
  </row-ui>
197
197
  </section>
198
198
  </card-ui>