@vpxa/aikit 0.1.57 → 0.1.59

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpxa/aikit",
3
- "version": "0.1.57",
3
+ "version": "0.1.59",
4
4
  "type": "module",
5
5
  "description": "Local-first AI developer toolkit — knowledge base, code analysis, context management, and developer tools for LLM agents",
6
6
  "license": "MIT",
@@ -116,6 +116,10 @@ Load them: \`tool_search_tool_regex({ pattern: "aikit" })\`
116
116
  | Architecture diagrams | \`c4-architecture\` | When documenting or reviewing architecture — C4 Mermaid diagrams. |
117
117
  | Architecture decisions | \`adr-skill\` | When making non-trivial technical decisions — executable ADRs. |
118
118
  | Rich presentation | \`present\` | When presenting dashboards, charts, tables, or complex visual content to users. |
119
+ | TypeScript patterns | \`typescript\` | Before TypeScript implementation — type system, compiler config, advanced types. |
120
+ | React patterns | \`react\` | Before React work — component architecture, React 19 APIs, Server Components. |
121
+ | Frontend design | \`frontend-design\` | Before UI/UX work — visual design, typography, color, layout, accessibility. |
122
+ | Multi-agent orchestration | \`multi-agents-development\` | Before delegating to multiple agents — task decomposition, dispatch, review pipelines. |
119
123
 
120
124
  ### Tool Categories
121
125
 
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>AI Kit Present</title>
6
+ <title>AIKIT Present</title>
7
7
  <style>
8
8
  :root {
9
9
  /* Base tokens (browser-mode defaults) */
@@ -35,8 +35,8 @@
35
35
  --aikit-warning: var(--color-text-warning, var(--warning));
36
36
  --aikit-error: var(--color-text-danger, var(--error));
37
37
  --aikit-info: var(--color-text-info, var(--accent));
38
- --aikit-code-bg: var(--color-background-inverse, var(--code-bg));
39
- --aikit-code-fg: var(--color-text-inverse, var(--code-fg));
38
+ --aikit-code-bg: var(--code-bg);
39
+ --aikit-code-fg: var(--code-fg);
40
40
  --aikit-font-sans: var(--font-sans);
41
41
  --aikit-font-mono: var(--font-mono);
42
42
  --aikit-radius: var(--border-radius-md, var(--radius));
@@ -241,7 +241,7 @@
241
241
  justify-content: space-between;
242
242
  align-items: center;
243
243
  padding: 6px 12px;
244
- background: rgba(255,255,255,0.05);
244
+ background: color-mix(in srgb, var(--fg) 5%, transparent);
245
245
  font-size: 0.75rem;
246
246
  color: var(--accent-light);
247
247
  }
@@ -254,7 +254,7 @@
254
254
  cursor: pointer;
255
255
  font-size: 0.75rem;
256
256
  }
257
- .block-code .copy-btn:hover { background: rgba(255,255,255,0.1); }
257
+ .block-code .copy-btn:hover { background: color-mix(in srgb, var(--fg) 10%, transparent); }
258
258
  .block-code pre { padding: 12px 16px; margin: 0; font-size: 0.85em; overflow-x: auto; }
259
259
 
260
260
  /* Tree view */
@@ -280,7 +280,7 @@
280
280
  box-shadow: var(--shadow);
281
281
  transition: box-shadow 0.15s;
282
282
  }
283
- .card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.12); }
283
+ .card:hover { box-shadow: 0 4px 12px color-mix(in srgb, var(--fg) 12%, transparent); }
284
284
  .card-title { font-weight: 600; margin-bottom: 6px; }
285
285
  .card-body { font-size: 0.9rem; opacity: 0.85; }
286
286
  .card-badge {
@@ -431,10 +431,10 @@
431
431
  @keyframes spin { to { transform: rotate(360deg); } }
432
432
 
433
433
  /* Display mode toolbar */
434
- .display-mode-toolbar { position: fixed; bottom: 12px; right: 12px; display: flex; gap: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 4px; box-shadow: 0 2px 8px rgba(0,0,0,.15); z-index: 1000; }
434
+ .display-mode-toolbar { position: fixed; bottom: 12px; right: 12px; display: flex; gap: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 4px; box-shadow: 0 2px 8px color-mix(in srgb, var(--fg) 15%, transparent); z-index: 1000; }
435
435
  .dm-btn { border: none; background: transparent; color: var(--fg); cursor: pointer; padding: 4px 8px; border-radius: 4px; font-size: 14px; line-height: 1; }
436
436
  .dm-btn:hover { background: var(--border); }
437
- .dm-btn.dm-active { background: var(--accent); color: #fff; }
437
+ .dm-btn.dm-active { background: var(--accent); color: var(--bg); }
438
438
  </style>
439
439
  <script type="module" crossorigin>var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(e&&(t=e(e=0)),t),s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),l=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},u=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var l=r(i),u=0,d=l.length,f;u<d;u++)f=l[u],!a.call(e,f)&&f!==o&&t(e,f,{get:(e=>i[e]).bind(null,f),enumerable:!(s=n(i,f))||s.enumerable});return e},d=(e,t,n)=>(u(e,t,`default`),n&&u(n,t,`default`)),f=(n,r,a)=>(a=n==null?{}:e(i(n)),u(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),p=e=>a.call(e,`module.exports`)?e[`module.exports`]:u(t({},`__esModule`,{value:!0}),e);(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),Object.freeze({status:`aborted`});function m(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,`_zod`,{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;e<a.length;e++){let t=a[e];t in n||(n[t]=i[t].bind(n))}}let i=n?.Parent??Object;class a extends i{}Object.defineProperty(a,`name`,{value:e});function o(e){var t;let i=n?.Parent?new a:this;r(i,e),(t=i._zod).deferred??(t.deferred=[]);for(let e of i._zod.deferred)e();return i}return Object.defineProperty(o,`init`,{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:t=>n?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,`name`,{value:e}),o}var h=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},g=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}},_={};function v(e){return e&&Object.assign(_,e),_}function y(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function b(e,t){return typeof t==`bigint`?t.toString():t}function x(e){return{get value(){{let t=e();return Object.defineProperty(this,`value`,{value:t}),t}throw Error(`cached value already set`)}}}function S(e){return e==null}function C(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function w(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=t.toString(),i=(r.split(`.`)[1]||``).length;if(i===0&&/\d?e-\d?/.test(r)){let e=r.match(/\d?e-(\d?)/);e?.[1]&&(i=Number.parseInt(e[1]))}let a=n>i?n:i;return Number.parseInt(e.toFixed(a).replace(`.`,``))%Number.parseInt(t.toFixed(a).replace(`.`,``))/10**a}var T=Symbol(`evaluating`);function E(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==T)return r===void 0&&(r=T,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function D(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function O(...e){let t={};for(let n of e)Object.assign(t,Object.getOwnPropertyDescriptors(n));return Object.defineProperties({},t)}function k(e){return JSON.stringify(e)}function A(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var j=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function M(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var N=x(()=>{if(typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function P(e){if(M(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return!(M(n)===!1||Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)===!1)}function F(e){return P(e)?{...e}:Array.isArray(e)?[...e]:e}var I=new Set([`string`,`number`,`symbol`]);function L(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function R(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function z(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function ee(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var te={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function B(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return R(e,O(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return D(this,`shape`,e),e},checks:[]}))}function ne(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return R(e,O(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return D(this,`shape`,r),r},checks:[]}))}function re(e,t){if(!P(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return R(e,O(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return D(this,`shape`,n),n}}))}function ie(e,t){if(!P(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return R(e,O(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return D(this,`shape`,n),n}}))}function ae(e,t){return R(e,O(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return D(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:[]}))}function oe(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return R(t,O(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return D(this,`shape`,i),i},checks:[]}))}function se(e,t,n){return R(t,O(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return D(this,`shape`,i),i}}))}function ce(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function le(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function ue(e){return typeof e==`string`?e:e?.message}function de(e,t,n){let r={...e,path:e.path??[]};return e.message||(r.message=ue(e.inst?._zod.def?.error?.(e))??ue(t?.error?.(e))??ue(n.customError?.(e))??ue(n.localeError?.(e))??`Invalid input`),delete r.inst,delete r.continue,t?.reportInput||delete r.input,r}function fe(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function pe(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var me=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,`_zod`,{value:e._zod,enumerable:!1}),Object.defineProperty(e,`issues`,{value:t,enumerable:!1}),e.message=JSON.stringify(t,b,2),Object.defineProperty(e,`toString`,{value:()=>e.message,enumerable:!1})},he=m(`$ZodError`,me),ge=m(`$ZodError`,me,{Parent:Error});function _e(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function ve(e,t=e=>e.message){let n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`&&i.errors.length)i.errors.map(e=>r({issues:e}));else if(i.code===`invalid_key`)r({issues:i.issues});else if(i.code===`invalid_element`)r({issues:i.issues});else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;r<i.path.length;){let n=i.path[r];r===i.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(i))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(e),n}var ye=e=>(t,n,r,i)=>{let a=r?Object.assign(r,{async:!1}):{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new h;if(o.issues.length){let t=new(i?.Err??e)(o.issues.map(e=>de(e,a,v())));throw j(t,i?.callee),t}return o.value},be=e=>async(t,n,r,i)=>{let a=r?Object.assign(r,{async:!0}):{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new(i?.Err??e)(o.issues.map(e=>de(e,a,v())));throw j(t,i?.callee),t}return o.value},xe=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new h;return a.issues.length?{success:!1,error:new(e??he)(a.issues.map(e=>de(e,i,v())))}:{success:!0,data:a.value}},Se=xe(ge),Ce=e=>async(t,n,r)=>{let i=r?Object.assign(r,{async:!0}):{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>de(e,i,v())))}:{success:!0,data:a.value}},we=Ce(ge),Te=e=>(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return ye(e)(t,n,i)},Ee=e=>(t,n,r)=>ye(e)(t,n,r),De=e=>async(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return be(e)(t,n,i)},Oe=e=>async(t,n,r)=>be(e)(t,n,r),ke=e=>(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return xe(e)(t,n,i)},Ae=e=>(t,n,r)=>xe(e)(t,n,r),je=e=>async(t,n,r)=>{let i=r?Object.assign(r,{direction:`backward`}):{direction:`backward`};return Ce(e)(t,n,i)},Me=e=>async(t,n,r)=>Ce(e)(t,n,r),Ne=/^[cC][^\s-]{8,}$/,Pe=/^[0-9a-z]+$/,Fe=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Ie=/^[0-9a-vA-V]{20}$/,Le=/^[A-Za-z0-9]{27}$/,Re=/^[a-zA-Z0-9_-]{21}$/,ze=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Be=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ve=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,He=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Ue=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function We(){return new RegExp(Ue,`u`)}var Ge=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Ke=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,qe=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Je=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ye=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Xe=/^[A-Za-z0-9_-]*$/,Ze=/^\+[1-9]\d{6,14}$/,Qe=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,$e=RegExp(`^${Qe}$`);function et(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function tt(e){return RegExp(`^${et(e)}$`)}function nt(e){let t=et({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${Qe}T(?:${r})$`)}var rt=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},it=/^-?\d+$/,at=/^-?\d+(?:\.\d+)?$/,ot=/^(?:true|false)$/i,st=/^null$/i,ct=/^undefined$/i,lt=/^[^A-Z]*$/,ut=/^[^a-z]*$/,dt=m(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),ft={number:`number`,bigint:`bigint`,object:`date`},pt=m(`$ZodCheckLessThan`,(e,t)=>{dt.init(e,t);let n=ft[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value<r&&(t.inclusive?n.maximum=t.value:n.exclusiveMaximum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),mt=m(`$ZodCheckGreaterThan`,(e,t)=>{dt.init(e,t);let n=ft[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),ht=m(`$ZodCheckMultipleOf`,(e,t)=>{dt.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):w(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),gt=m(`$ZodCheckNumberFormat`,(e,t)=>{dt.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=te[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=it)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),_t=m(`$ZodCheckMaxLength`,(e,t)=>{var n;dt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!S(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum<n&&(e._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{let r=n.value;if(r.length<=t.maximum)return;let i=fe(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),eee=m(`$ZodCheckMinLength`,(e,t)=>{var n;dt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!S(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=fe(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),tee=m(`$ZodCheckLengthEquals`,(e,t)=>{var n;dt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!S(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=fe(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),vt=m(`$ZodCheckStringFormat`,(e,t)=>{var n,r;dt.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),nee=m(`$ZodCheckRegex`,(e,t)=>{vt.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),ree=m(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=lt,vt.init(e,t)}),iee=m(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=ut,vt.init(e,t)}),aee=m(`$ZodCheckIncludes`,(e,t)=>{dt.init(e,t);let n=L(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),oee=m(`$ZodCheckStartsWith`,(e,t)=>{dt.init(e,t);let n=RegExp(`^${L(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),see=m(`$ZodCheckEndsWith`,(e,t)=>{dt.init(e,t);let n=RegExp(`.*${L(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),cee=m(`$ZodCheckOverwrite`,(e,t)=>{dt.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),lee=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
440
440
  `).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(`
@@ -3722,7 +3722,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3722
3722
  ${Ttt}
3723
3723
  </iframe>`,`putIntoIFrame`),k9=V((e,t,n,r,i)=>{let a=e.append(`div`);a.attr(`id`,n),r&&a.attr(`style`,r);let o=a.append(`svg`).attr(`id`,t).attr(`width`,`100%`).attr(`xmlns`,_tt);return i&&o.attr(`xmlns:xlink`,i),o.append(`g`),e},`appendDivSvgG`),V(G7,`sandboxedIframe`),Mtt=V((e,t,n,r)=>{e.getElementById(t)?.remove(),e.getElementById(n)?.remove(),e.getElementById(r)?.remove()},`removeExistingElements`),Ntt=V(async function(e,t,n){T9();let r=W7(t);t=r.code;let i=Pu();H.debug(i),t.length>(i?.maxTextSize??ptt)&&(t=mtt);let a=`#`+e,o=`i`+e,s=`#`+o,l=`d`+e,u=`#`+l,d=V(()=>{let e=af(p?s:u).node();e&&`remove`in e&&e.remove()},`removeTempElements`),f=af(`body`),p=i.securityLevel===htt,m=i.securityLevel===gtt,h=i.fontFamily;n===void 0?(Mtt(document,e,l,o),p?(f=af(G7(af(`body`),o).nodes()[0].contentDocument.body),f.node().style.margin=0):f=af(`body`),k9(f,e,l)):(n&&(n.innerHTML=``),p?(f=af(G7(af(n),o).nodes()[0].contentDocument.body),f.node().style.margin=0):f=af(n),k9(f,e,l,`font-family: ${h}`,vtt));let g,_;try{g=await E9.fromText(t,{title:r.title})}catch(e){if(i.suppressErrorRendering)throw d(),e;g=await E9.fromText(`error`),_=e}let v=f.select(u).node(),y=g.type,b=v.firstChild,x=b.firstChild,S=g.renderer.getClasses?.(t,g),C=ktt(i,y,S,a),w=document.createElement(`style`);w.innerHTML=C,b.insertBefore(w,x);try{await g.renderer.draw(t,e,`11.14.0`,g)}catch(n){throw i.suppressErrorRendering?d():Wet.draw(t,e,`11.14.0`),n}let T=f.select(`${u} svg`),E=g.db.getAccTitle?.(),D=g.db.getAccDescription?.();Eet(y,T,E,D),f.select(`[id="${e}"]`).selectAll(`foreignobject > *`).attr(`xmlns`,ytt);let O=f.select(u).node().innerHTML;if(H.debug(`config.arrowMarkerAbsolute`,i.arrowMarkerAbsolute),O=Att(O,p,Eu(i.arrowMarkerAbsolute)),p){let e=f.select(u+` svg`).node();O=jtt(O,e)}else m||(O=na.sanitize(O,{ADD_TAGS:Ett,ADD_ATTR:Dtt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(ctt(),_)throw _;return d(),{diagramType:y,svg:O,bindFunctions:g.db.bindFunctions}},`render`),V(Tet,`initialize`),A9=V((e,t={})=>{let{code:n}=U7(e);return E9.fromText(n,t)},`getDiagramFromText`),V(Eet,`addA11yInfo`),j9=Object.freeze({render:Ntt,parse:wet,getDiagramFromText:A9,initialize:Tet,getConfig:Pu,setConfig:Nu,getSiteConfig:Mu,updateSiteConfig:ule,reset:V(()=>{Iu()},`reset`),globalReset:V(()=>{Iu(Tu)},`globalReset`),defaultConfig:Tu}),qr(Pu().logLevel),Iu(Pu()),Ptt=V((e,t,n)=>{H.warn(e),Qx(e)?(n&&n(e.str,e.hash),t.push({...e,message:e.str,error:e})):(n&&n(e),e instanceof Error&&t.push({str:e.message,message:e.message,hash:e.name,error:e}))},`handleError`),M9=V(async function(e={querySelector:`.mermaid`}){try{await Ftt(e)}catch(t){if(Qx(t)&&H.error(t.str),z9.parseError&&z9.parseError(t),!e.suppressErrors)throw H.error(`Use the suppressErrors option to suppress these errors`),t}},`run`),Ftt=V(async function({postRenderCallback:e,querySelector:t,nodes:n}={querySelector:`.mermaid`}){let r=j9.getConfig();H.debug(`${e?``:`No `}Callback function found`);let i;if(n)i=n;else if(t)i=document.querySelectorAll(t);else throw Error(`Nodes and querySelector are both undefined`);H.debug(`Found ${i.length} diagrams`),r?.startOnLoad!==void 0&&(H.debug(`Start On Load: `+r?.startOnLoad),j9.updateSiteConfig({startOnLoad:r?.startOnLoad}));let a=new dS.InitIDGenerator(r.deterministicIds,r.deterministicIDSeed),o,s=[];for(let t of Array.from(i)){if(H.info(`Rendering diagram: `+t.id),t.getAttribute(`data-processed`))continue;t.setAttribute(`data-processed`,`true`);let n=`mermaid-${a.next()}`;o=t.innerHTML,o=fEe(dS.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,`<br/>`);let r=dS.detectInit(o);r&&H.debug(`Detected early reinit: `,r);try{let{svg:r,bindFunctions:i}=await R9(n,o,t);t.innerHTML=r,e&&await e(n),i&&i(t)}catch(e){Ptt(e,s,z9.parseError)}}if(s.length>0)throw s[0]},`runThrowsErrors`),N9=V(function(e){j9.initialize(e)},`initialize`),Itt=V(async function(e,t,n){H.warn(`mermaid.init is deprecated. Please use run instead.`),e&&N9(e);let r={postRenderCallback:n,querySelector:`.mermaid`};typeof t==`string`?r.querySelector=t:t&&(t instanceof HTMLElement?r.nodes=[t]:r.nodes=t),await M9(r)},`init`),Ltt=V(async(e,{lazyLoad:t=!0}={})=>{T9(),du(...e),t===!1&&await ott()},`registerExternalDiagrams`),P9=V(function(){if(z9.startOnLoad){let{startOnLoad:e}=j9.getConfig();e&&z9.run().catch(e=>H.error(`Mermaid failed to initialize`,e))}},`contentLoaded`),typeof document<`u`&&window.addEventListener(`load`,P9,!1),Rtt=V(function(e){z9.parseError=e},`setParseErrorHandler`),F9=[],I9=!1,L9=V(async()=>{if(!I9){for(I9=!0;F9.length>0;){let e=F9.shift();if(e)try{await e()}catch(e){H.error(`Error executing queue`,e)}}I9=!1}},`executeQueue`),ztt=V(async(e,t)=>new Promise((n,r)=>{let i=V(()=>new Promise((i,a)=>{j9.parse(e,t).then(e=>{i(e),n(e)},e=>{H.error(`Error parsing`,e),z9.parseError?.(e),a(e),r(e)})}),`performCall`);F9.push(i),L9().catch(r)}),`parse`),R9=V((e,t,n)=>new Promise((r,i)=>{let a=V(()=>new Promise((a,o)=>{j9.render(e,t,n).then(e=>{a(e),r(e)},e=>{H.error(`Error parsing`,e),z9.parseError?.(e),o(e),i(e)})}),`performCall`);F9.push(a),L9().catch(i)}),`render`),z9={startOnLoad:!0,mermaidAPI:j9,parse:ztt,render:R9,init:Itt,run:M9,registerExternalDiagrams:Ltt,registerLayoutLoaders:wW,initialize:N9,parseError:void 0,contentLoaded:P9,setParseErrorHandler:Rtt,detectType:uu,registerIconPacks:TC,getRegisteredDiagramsMetadata:V(()=>Object.keys(lu).map(e=>({id:e})),`getRegisteredDiagramsMetadata`)},Btt=z9}));Vr();function B9(e){if(typeof e==`string`)return Htt(e);if(Array.isArray(e))return e.length===0?V9(`*Empty array*`):typeof e[0]==`object`&&e[0]!==null?U9(e):V9(e.map(e=>`- ${String(e)}`).join(`
3724
3724
  `));if(typeof e==`object`&&e){let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)?$tt(t):Array.isArray(t.metrics)?Qtt(t.metrics):W9(t)}return V9(String(e))}function Htt(e){let t=e.trim();if(/^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|gitGraph)\b/i.test(t))return H9(t);if(/^#{1,6}\s|^\s*[-*]\s|\*\*|__|\[.*\]\(|```/.test(t))return V9(t);if((t.startsWith(`{`)||t.startsWith(`[`))&&(t.endsWith(`}`)||t.endsWith(`]`)))try{return B9(JSON.parse(t))}catch{}return V9(t)}function Utt(e,t,n){let r=vr(`div`,`comparison-side ${n}`),i=e&&typeof e==`object`&&!Array.isArray(e)?e:null,a=String(i?.label??i?.title??t),o=Array.isArray(i?.items)?i.items:Array.isArray(e)?e:e==null?[]:[e];r.appendChild(vr(`div`,`comparison-label`,a));let s=vr(`ul`,`comparison-items`);for(let e of o)s.appendChild(vr(`li`,``,br(e)));return r.appendChild(s),r}function Wtt(e){let t=vr(`div`,`actions`);for(let n of e){if(n.type===`select`&&n.options){let e=document.createElement(`select`);e.className=`action-select`;let r=document.createElement(`option`);r.textContent=n.label,r.disabled=!0,r.selected=!0,e.appendChild(r);for(let t of n.options){let n=document.createElement(`option`);typeof t==`string`?(n.value=t,n.textContent=t):(n.value=t.value,n.textContent=t.label),e.appendChild(n)}t.appendChild(e);continue}let e=document.createElement(`button`);e.className=`action-btn ${n.variant??`default`}`,e.textContent=n.label,t.appendChild(e)}return t}function Gtt(e,t){switch(e.type){case`markdown`:return V9(String(e.value??``));case`mermaid`:return H9(String(e.value??``));case`table`:{let t=e.value;if(Array.isArray(t)){if(t.length>0&&Array.isArray(t[0])){let e=t,n=e[0].map(String);return U9(e.slice(1).map(e=>Object.fromEntries(n.map((t,n)=>[t,e[n]]))))}return U9(t)}if(t&&typeof t==`object`&&`headers`in t&&`rows`in t){let{headers:e,rows:n}=t;return U9(n.map(t=>Object.fromEntries(e.map((e,n)=>[e,t[n]]))))}return U9([])}case`code`:return Xtt(String(e.value??``),e.language);case`tree`:return W9(e.value);case`cards`:return Ztt(e.value);case`metrics`:return Qtt(e.value);case`graph`:return $tt(e.value);case`chart`:return Foe(e);case`kv`:{let t=e.value;return t&&typeof t==`object`&&!Array.isArray(t)?U9(Object.entries(t).map(([e,t])=>({Key:e,Value:t}))):V9(JSON.stringify(t,null,2))}case`comparison`:{let t=e.value;if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t;if(`left`in e||`right`in e){let t=vr(`div`,`block block-comparison`);return t.appendChild(Utt(e.left,`Left`,`comparison-left`)),t.appendChild(Utt(e.right,`Right`,`comparison-right`)),t}if(Array.isArray(e.headers)&&Array.isArray(e.rows)){let t=e.headers;return U9(e.rows.map(e=>Object.fromEntries(t.map((t,n)=>[t,e[n]]))))}if(Array.isArray(e.columns)){let t=e.columns,n=Math.max(...t.map(e=>e.items?.length??0)),r=[];for(let e=0;e<n;e++){let n={};for(let r of t)n[r.name]=r.items?.[e]??``;r.push(n)}return U9(r)}}return V9(JSON.stringify(t,null,2))}case`actions`:{let n=Array.isArray(e.value)?e.value:[],r=t?ent(n,t):Wtt(n);return r.classList.add(`block`,`block-actions`),r}case`timeline`:{let t=e.value;return Array.isArray(t)?U9(t.map(e=>{if(e&&typeof e==`object`){let t=e;return{Status:t.status??t.state??``,Time:t.time??t.date??t.timestamp??``,Description:t.label??t.description??t.title??t.text??``}}return{Status:``,Time:``,Description:String(e)}})):V9(JSON.stringify(t,null,2))}case`heading`:return V9(`## ${String(e.value??``)}`);default:return V9(JSON.stringify(e.value,null,2))}}function Ktt(e,t){let n=Gtt(e,t);return e.title&&n.insertBefore(vr(`div`,`block-title`,e.title),n.firstChild),n}function V9(e){let t=vr(`div`,`block block-markdown`);return t.innerHTML=Aoe(e),t}var qtt=null;function Jtt(){return qtt||=Br(()=>Promise.resolve().then(()=>(Vtt(),vet)).then(e=>(e.default.initialize({startOnLoad:!1,theme:`default`}),e.default)),void 0,import.meta.url),qtt}var Ytt=0;function H9(e){let t=vr(`div`,`block block-mermaid`),n=vr(`pre`,`mermaid-source`,e);t.appendChild(n);let r=`mermaid-${++Ytt}`;return Jtt().then(t=>t.render(r,e)).then(({svg:e})=>{t.innerHTML=e}).catch(()=>{n.classList.add(`mermaid-fallback`)}),t}function U9(e){let t=vr(`div`,`block block-table`);if(e.length===0)return V9(`*Empty table*`);let n=Object.keys(e[0]),r=-1,i=!0,a=[...e],o=``,s=document.createElement(`input`);s.className=`table-filter`,s.placeholder=`Filter...`,s.addEventListener(`input`,()=>{o=s.value.toLowerCase(),p()}),t.appendChild(s);let l=document.createElement(`table`),u=document.createElement(`thead`),d=document.createElement(`tr`);n.forEach((e,t)=>{let n=document.createElement(`th`);n.textContent=e;let a=vr(`span`,`sort-icon`,`⇅`);n.appendChild(a),n.addEventListener(`click`,()=>{r===t?i=!i:(r=t,i=!0),p()}),d.appendChild(n)}),u.appendChild(d),l.appendChild(u);let f=document.createElement(`tbody`);l.appendChild(f),t.appendChild(l);function p(){if(a=[...e],o&&(a=a.filter(e=>n.some(t=>String(e[t]??``).toLowerCase().includes(o)))),r>=0){let e=n[r];a.sort((t,n)=>{let r=String(t[e]??``),a=String(n[e]??``),o=r.localeCompare(a,void 0,{numeric:!0});return i?o:-o})}f.innerHTML=``;for(let e of a){let t=document.createElement(`tr`);for(let r of n){let n=document.createElement(`td`);n.textContent=String(e[r]??``),t.appendChild(n)}f.appendChild(t)}}return p(),t}function Xtt(e,t){let n=vr(`div`,`block block-code`),r=vr(`div`,`code-header`);r.appendChild(vr(`span`,``,t??`code`));let i=document.createElement(`button`);i.className=`copy-btn`,i.textContent=`Copy`,i.addEventListener(`click`,()=>{navigator.clipboard.writeText(e).then(()=>{i.textContent=`Copied!`,setTimeout(()=>{i.textContent=`Copy`},1500)})}),r.appendChild(i),n.appendChild(r);let a=document.createElement(`pre`),o=document.createElement(`code`);return o.textContent=e,a.appendChild(o),n.appendChild(a),n}function W9(e,t=0){let n=vr(`div`,t===0?`block block-tree`:``),r=typeof e.name==`string`?e.name:typeof e.label==`string`?e.label:null,i=Array.isArray(e.children)?e.children:null;if(r&&i){if(i.length===0)return vr(`div`,`tree-leaf`,`📄 ${r}`);let a=vr(`div`,`tree-node`),o=vr(`span`,`tree-toggle`,`▼`),s=vr(`div`,`tree-children`),l=!0;s.style.display=``,o.addEventListener(`click`,()=>{l=!l,o.textContent=l?`▼`:`▶`,s.style.display=l?``:`none`}),a.appendChild(o),a.appendChild(document.createTextNode(` ${r}`));for(let e of i)typeof e==`object`&&e&&!Array.isArray(e)?s.appendChild(W9(e,t+1)):s.appendChild(vr(`div`,`tree-leaf`,`📄 ${br(e)}`));for(let[n,r]of Object.entries(e))if(!(n===`name`||n===`label`||n===`children`))if(typeof r==`object`&&r&&!Array.isArray(r))s.appendChild(W9({[n]:r},t+1));else{let e=vr(`div`,`tree-leaf`);e.innerHTML=`<strong>${yr(n)}:</strong> ${yr(br(r))}`,s.appendChild(e)}return a.appendChild(s),n.appendChild(a),n}if(r)return n.appendChild(vr(`div`,`tree-leaf`,`📄 ${r}`)),n;for(let[r,i]of Object.entries(e))if(typeof i==`object`&&i&&!Array.isArray(i)){let e=vr(`div`,`tree-node`),a=vr(`span`,`tree-toggle`,`▼`),o=W9(i,t+1);o.className=`tree-children`;let s=!0;a.addEventListener(`click`,()=>{s=!s,a.textContent=s?`▼`:`▶`,o.style.display=s?``:`none`}),e.appendChild(a),e.appendChild(document.createTextNode(` ${r}`)),e.appendChild(o),n.appendChild(e)}else{let e=vr(`div`,`tree-leaf`);e.innerHTML=`<strong>${yr(r)}:</strong> ${yr(br(i))}`,n.appendChild(e)}return n}function Ztt(e){let t=vr(`div`,`block block-cards`);for(let n of e){let e=vr(`div`,`card`);if(n.title&&e.appendChild(vr(`div`,`card-title`,String(n.title))),(n.body||n.description)&&e.appendChild(vr(`div`,`card-body`,String(n.body??n.description))),n.badge||n.status){let t=String(n.variant??n.status??`default`).toLowerCase(),r=[`success`,`warning`,`error`].includes(t)?t:``;e.appendChild(vr(`span`,`card-badge ${r}`,String(n.badge??n.status)))}t.appendChild(e)}return t}function Qtt(e){let t=vr(`div`,`block block-metrics`);for(let n of e){let e=vr(`div`,`metric`);e.appendChild(vr(`div`,`metric-value`,String(n.value))),e.appendChild(vr(`div`,`metric-label`,n.label)),t.appendChild(e)}return t}function $tt(e){let t=[`graph LR`],n=new Map;for(let r of e.nodes){let e=String(r.id??r.name??``),i=String(r.label??r.name??e);n.set(e,i),t.push(` ${xr(e)}["${yr(i)}"]`)}for(let n of e.edges){let e=xr(String(n.source??n.from??``)),r=xr(String(n.target??n.to??``)),i=n.label?`|${yr(String(n.label))}|`:``;t.push(` ${e} -->${i} ${r}`)}return H9(t.join(`
3725
- `))}function ent(e,t){let n=vr(`div`,`actions`);for(let r of e)if(r.type===`select`&&r.options){let e=document.createElement(`select`);e.className=`action-select`;let i=document.createElement(`option`);i.textContent=r.label,i.disabled=!0,i.selected=!0,e.appendChild(i);for(let t of r.options){let n=document.createElement(`option`);typeof t==`string`?(n.value=t,n.textContent=t):(n.value=t.value,n.textContent=t.label),e.appendChild(n)}e.addEventListener(`change`,()=>{t.emitAction(r,e.value)}),n.appendChild(e)}else{let e=document.createElement(`button`);e.className=`action-btn ${r.variant??`default`}`,e.textContent=r.label,e.addEventListener(`click`,()=>t.emitAction(r)),n.appendChild(e)}return n}function tnt(e){return function(t,n){let r=n??t.label;e.updateModelContext({content:[{type:`text`,text:`Latest UI action: ${t.label}${n?` → ${n}`:``}`}],structuredContent:{actionId:t.id,actionType:t.type,label:t.label,value:r,timestamp:new Date().toISOString()}}),e.sendMessage({role:`user`,content:[{type:`text`,text:`User selected: ${t.label}${n?` → ${n}`:``}`}]})}}function nnt(e){return{callTool:(t,n)=>e.callServerTool({name:t,arguments:n}),sendMessage:async t=>{await e.sendMessage({role:`user`,content:[{type:`text`,text:t}]})},updateContext:async t=>{await e.updateModelContext({content:[{type:`text`,text:t}]})}}}var rnt=class{app;currentMode=`inline`;availableModes=[];toolbar=null;constructor(e){this.app=e}apply(e){e.displayMode&&(this.currentMode=e.displayMode),e.availableDisplayModes&&(this.availableModes=e.availableDisplayModes),this.updateToolbar()}async requestMode(e){try{let t=await this.app.requestDisplayMode({mode:e});return this.currentMode=t.mode,document.documentElement.dataset.display=t.mode,this.updateToolbar(),t.mode}catch{return this.currentMode}}updateToolbar(){if(this.availableModes.length<=1){this.toolbar?.remove(),this.toolbar=null;return}this.toolbar||=this.createToolbar(),this.renderButtons()}createToolbar(){let e=document.createElement(`div`);return e.className=`display-mode-toolbar`,document.body.appendChild(e),e}renderButtons(){if(!this.toolbar)return;this.toolbar.innerHTML=``;let e={inline:`▣`,fullscreen:`⛶`,pip:`◱`};for(let t of this.availableModes){let n=document.createElement(`button`);n.className=`dm-btn${t===this.currentMode?` dm-active`:``}`,n.textContent=e[t]??t,n.title=t,n.addEventListener(`click`,()=>this.requestMode(t)),this.toolbar.appendChild(n)}}},int=[[400,`compact`],[800,`comfortable`]],ant=class{root;displayMode=`inline`;sizeClass=`comfortable`;constructor(e){this.root=e??document.documentElement}apply(e){this.applyDisplayMode(e),this.applyContainerDimensions(e),this.applySafeArea(e),this.applyPlatform(e),this.applyDeviceCapabilities(e)}getDisplayMode(){return this.displayMode}getSize(){return this.sizeClass}applyDisplayMode(e){e.displayMode&&(this.displayMode=e.displayMode,this.root.dataset.display=e.displayMode)}applyContainerDimensions(e){let t=e.containerDimensions;if(!t)return;let n=this.root.style,r=`width`in t?t.width:`maxWidth`in t?t.maxWidth:void 0,i=`height`in t?t.height:`maxHeight`in t?t.maxHeight:void 0;r!==void 0&&(n.setProperty(`--aikit-container-w`,`${r}px`),this.sizeClass=this.deriveSizeClass(r),this.root.dataset.size=this.sizeClass,n.setProperty(`--aikit-content-max-width`,this.deriveMaxWidth(r)),n.setProperty(`--aikit-body-pad-x`,this.derivePadX()),n.setProperty(`--aikit-grid-cols`,this.deriveGridCols()),n.setProperty(`--aikit-card-min`,this.deriveCardMin()),n.setProperty(`--aikit-metric-min`,this.deriveMetricMin())),i!==void 0&&(n.setProperty(`--aikit-container-h`,`${i}px`),n.setProperty(`--aikit-body-pad-y`,this.derivePadY()))}applySafeArea(e){let t=e.safeAreaInsets;if(!t)return;let n=this.root.style;n.setProperty(`--aikit-safe-top`,`${t.top}px`),n.setProperty(`--aikit-safe-right`,`${t.right}px`),n.setProperty(`--aikit-safe-bottom`,`${t.bottom}px`),n.setProperty(`--aikit-safe-left`,`${t.left}px`)}applyPlatform(e){e.platform&&(this.root.dataset.platform=e.platform)}applyDeviceCapabilities(e){let t=e.deviceCapabilities;t&&(t.touch!==void 0&&(this.root.dataset.touch=String(t.touch)),t.hover!==void 0&&(this.root.dataset.hover=String(t.hover)))}deriveSizeClass(e){for(let[t,n]of int)if(e<t)return n;return`full`}deriveMaxWidth(e){return this.displayMode===`pip`?`100%`:this.displayMode===`fullscreen`?`none`:e<960?`100%`:`900px`}derivePadX(){return this.sizeClass===`compact`?`8px`:`16px`}derivePadY(){return this.sizeClass===`compact`?`8px`:`16px`}deriveGridCols(){switch(this.sizeClass){case`compact`:return`1`;case`comfortable`:return`2`;case`full`:return`3`}}deriveCardMin(){return this.sizeClass===`compact`?`100%`:`250px`}deriveMetricMin(){return this.sizeClass===`compact`?`100px`:`150px`}},ont=class{templates=new Map;register(e){this.templates.set(e.name,e)}get(e){return this.templates.get(e)}detect(e){let t,n=0;for(let r of this.templates.values()){let i=r.detect(e);i>n&&(n=i,t=r)}return n>0?t:void 0}getAll(){return[...this.templates.values()]}},snt={"--color-background-primary":`--aikit-bg`,"--color-background-secondary":`--aikit-surface`,"--color-background-tertiary":`--aikit-surface2`,"--color-text-primary":`--aikit-text`,"--color-text-secondary":`--aikit-muted`,"--color-border-primary":`--aikit-border`,"--color-ring-primary":`--aikit-accent`,"--color-text-success":`--aikit-success`,"--color-text-danger":`--aikit-error`,"--color-text-warning":`--aikit-warning`,"--color-text-info":`--aikit-info`,"--color-background-inverse":`--aikit-code-bg`,"--color-text-inverse":`--aikit-code-fg`,"--font-sans":`--aikit-font-sans`,"--font-mono":`--aikit-font-mono`,"--border-radius-md":`--aikit-radius`,"--shadow-sm":`--aikit-shadow`},cnt={"--aikit-bg":`--bg`,"--aikit-text":`--fg`,"--aikit-surface":`--surface`,"--aikit-border":`--border`,"--aikit-accent":`--accent`,"--aikit-success":`--success`,"--aikit-warning":`--warning`,"--aikit-error":`--error`,"--aikit-code-bg":`--code-bg`,"--aikit-code-fg":`--code-fg`,"--aikit-font-sans":`--font-sans`,"--aikit-font-mono":`--font-mono`,"--aikit-radius":`--radius`,"--aikit-shadow":`--shadow`},lnt=class{root;constructor(e){this.root=e??document.documentElement}apply(e){e.theme&&Eoe(e.theme),e.styles?.variables&&(Doe(e.styles.variables),this.mapTokens(e.styles.variables)),e.styles?.css?.fonts&&this.injectFonts(e.styles.css.fonts)}getTheme(){return Toe()}mapTokens(e){let t=this.root.style;for(let[n,r]of Object.entries(snt)){let i=e[n];if(i){t.setProperty(r,i);let e=cnt[r];e&&t.setProperty(e,i)}}let n=e[`--color-ring-primary`];n&&(t.setProperty(`--aikit-accent-light`,n),t.setProperty(`--accent-light`,n),t.setProperty(`--aikit-hover-bg`,`color-mix(in srgb, ${n} 10%, transparent)`))}injectFonts(e){let t=`aikit-host-fonts`;if(document.getElementById(t))return;let n=document.createElement(`style`);n.id=t,n.textContent=e,document.head.appendChild(n)}},unt=`
3725
+ `))}function ent(e,t){let n=vr(`div`,`actions`);for(let r of e)if(r.type===`select`&&r.options){let e=document.createElement(`select`);e.className=`action-select`;let i=document.createElement(`option`);i.textContent=r.label,i.disabled=!0,i.selected=!0,e.appendChild(i);for(let t of r.options){let n=document.createElement(`option`);typeof t==`string`?(n.value=t,n.textContent=t):(n.value=t.value,n.textContent=t.label),e.appendChild(n)}e.addEventListener(`change`,()=>{t.emitAction(r,e.value)}),n.appendChild(e)}else{let e=document.createElement(`button`);e.className=`action-btn ${r.variant??`default`}`,e.textContent=r.label,e.addEventListener(`click`,()=>t.emitAction(r)),n.appendChild(e)}return n}function tnt(e){return function(t,n){let r=n??t.label;e.updateModelContext({content:[{type:`text`,text:`Latest UI action: ${t.label}${n?` → ${n}`:``}`}],structuredContent:{actionId:t.id,actionType:t.type,label:t.label,value:r,timestamp:new Date().toISOString()}}),e.sendMessage({role:`user`,content:[{type:`text`,text:`User selected: ${t.label}${n?` → ${n}`:``}`}]})}}function nnt(e){return{callTool:(t,n)=>e.callServerTool({name:t,arguments:n}),sendMessage:async t=>{await e.sendMessage({role:`user`,content:[{type:`text`,text:t}]})},updateContext:async t=>{await e.updateModelContext({content:[{type:`text`,text:t}]})}}}var rnt=class{app;currentMode=`inline`;availableModes=[];toolbar=null;constructor(e){this.app=e}apply(e){e.displayMode&&(this.currentMode=e.displayMode),e.availableDisplayModes&&(this.availableModes=e.availableDisplayModes),this.updateToolbar()}async requestMode(e){try{let t=await this.app.requestDisplayMode({mode:e});return this.currentMode=t.mode,document.documentElement.dataset.display=t.mode,this.updateToolbar(),t.mode}catch{return this.currentMode}}updateToolbar(){if(this.availableModes.length<=1){this.toolbar?.remove(),this.toolbar=null;return}this.toolbar||=this.createToolbar(),this.renderButtons()}createToolbar(){let e=document.createElement(`div`);return e.className=`display-mode-toolbar`,document.body.appendChild(e),e}renderButtons(){if(!this.toolbar)return;this.toolbar.innerHTML=``;let e={inline:`▣`,fullscreen:`⛶`,pip:`◱`};for(let t of this.availableModes){let n=document.createElement(`button`);n.className=`dm-btn${t===this.currentMode?` dm-active`:``}`,n.textContent=e[t]??t,n.title=t,n.addEventListener(`click`,()=>this.requestMode(t)),this.toolbar.appendChild(n)}}},int=[[400,`compact`],[800,`comfortable`]],ant=class{root;displayMode=`inline`;sizeClass=`comfortable`;constructor(e){this.root=e??document.documentElement}apply(e){this.applyDisplayMode(e),this.applyContainerDimensions(e),this.applySafeArea(e),this.applyPlatform(e),this.applyDeviceCapabilities(e)}getDisplayMode(){return this.displayMode}getSize(){return this.sizeClass}applyDisplayMode(e){e.displayMode&&(this.displayMode=e.displayMode,this.root.dataset.display=e.displayMode)}applyContainerDimensions(e){let t=e.containerDimensions;if(!t)return;let n=this.root.style,r=`width`in t?t.width:`maxWidth`in t?t.maxWidth:void 0,i=`height`in t?t.height:`maxHeight`in t?t.maxHeight:void 0;r!==void 0&&(n.setProperty(`--aikit-container-w`,`${r}px`),this.sizeClass=this.deriveSizeClass(r),this.root.dataset.size=this.sizeClass,n.setProperty(`--aikit-content-max-width`,this.deriveMaxWidth(r)),n.setProperty(`--aikit-body-pad-x`,this.derivePadX()),n.setProperty(`--aikit-grid-cols`,this.deriveGridCols()),n.setProperty(`--aikit-card-min`,this.deriveCardMin()),n.setProperty(`--aikit-metric-min`,this.deriveMetricMin())),i!==void 0&&(n.setProperty(`--aikit-container-h`,`${i}px`),n.setProperty(`--aikit-body-pad-y`,this.derivePadY()))}applySafeArea(e){let t=e.safeAreaInsets;if(!t)return;let n=this.root.style;n.setProperty(`--aikit-safe-top`,`${t.top}px`),n.setProperty(`--aikit-safe-right`,`${t.right}px`),n.setProperty(`--aikit-safe-bottom`,`${t.bottom}px`),n.setProperty(`--aikit-safe-left`,`${t.left}px`)}applyPlatform(e){e.platform&&(this.root.dataset.platform=e.platform)}applyDeviceCapabilities(e){let t=e.deviceCapabilities;t&&(t.touch!==void 0&&(this.root.dataset.touch=String(t.touch)),t.hover!==void 0&&(this.root.dataset.hover=String(t.hover)))}deriveSizeClass(e){for(let[t,n]of int)if(e<t)return n;return`full`}deriveMaxWidth(e){return this.displayMode===`pip`?`100%`:this.displayMode===`fullscreen`?`none`:e<960?`100%`:`900px`}derivePadX(){return this.sizeClass===`compact`?`8px`:`16px`}derivePadY(){return this.sizeClass===`compact`?`8px`:`16px`}deriveGridCols(){switch(this.sizeClass){case`compact`:return`1`;case`comfortable`:return`2`;case`full`:return`3`}}deriveCardMin(){return this.sizeClass===`compact`?`100%`:`250px`}deriveMetricMin(){return this.sizeClass===`compact`?`100px`:`150px`}},ont=class{templates=new Map;register(e){this.templates.set(e.name,e)}get(e){return this.templates.get(e)}detect(e){let t,n=0;for(let r of this.templates.values()){let i=r.detect(e);i>n&&(n=i,t=r)}return n>0?t:void 0}getAll(){return[...this.templates.values()]}},snt={"--color-background-primary":`--aikit-bg`,"--color-background-secondary":`--aikit-surface`,"--color-background-tertiary":`--aikit-surface2`,"--color-text-primary":`--aikit-text`,"--color-text-secondary":`--aikit-muted`,"--color-border-primary":`--aikit-border`,"--color-ring-primary":`--aikit-accent`,"--color-text-success":`--aikit-success`,"--color-text-danger":`--aikit-error`,"--color-text-warning":`--aikit-warning`,"--color-text-info":`--aikit-info`,"--font-sans":`--aikit-font-sans`,"--font-mono":`--aikit-font-mono`,"--border-radius-md":`--aikit-radius`,"--shadow-sm":`--aikit-shadow`},cnt={"--aikit-bg":`--bg`,"--aikit-text":`--fg`,"--aikit-surface":`--surface`,"--aikit-border":`--border`,"--aikit-accent":`--accent`,"--aikit-success":`--success`,"--aikit-warning":`--warning`,"--aikit-error":`--error`,"--aikit-font-sans":`--font-sans`,"--aikit-font-mono":`--font-mono`,"--aikit-radius":`--radius`,"--aikit-shadow":`--shadow`},lnt=class{root;constructor(e){this.root=e??document.documentElement}apply(e){e.theme&&Eoe(e.theme),e.styles?.variables&&(Doe(e.styles.variables),this.mapTokens(e.styles.variables)),e.styles?.css?.fonts&&this.injectFonts(e.styles.css.fonts)}getTheme(){return Toe()}mapTokens(e){let t=this.root.style;for(let[n,r]of Object.entries(snt)){let i=e[n];if(i){t.setProperty(r,i);let e=cnt[r];e&&t.setProperty(e,i)}}this.getTheme()===`dark`?(t.setProperty(`--code-bg`,e[`--color-background-tertiary`]??`#0f0f1a`),t.setProperty(`--code-fg`,`#cdd6f4`)):(t.setProperty(`--code-bg`,`#f0f0f5`),t.setProperty(`--code-fg`,`#1a1a2e`)),t.setProperty(`--aikit-code-bg`,t.getPropertyValue(`--code-bg`)),t.setProperty(`--aikit-code-fg`,t.getPropertyValue(`--code-fg`));let n=e[`--color-ring-primary`];n&&(t.setProperty(`--aikit-accent-light`,n),t.setProperty(`--accent-light`,n),t.setProperty(`--aikit-hover-bg`,`color-mix(in srgb, ${n} 10%, transparent)`))}injectFonts(e){let t=`aikit-host-fonts`;if(document.getElementById(t))return;let n=document.createElement(`style`);n.id=t,n.textContent=e,document.head.appendChild(n)}},unt=`
3726
3726
  .tpl-dashboard { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
3727
3727
  .db-card { min-height: 136px; padding: 14px; border: 1px solid var(--aikit-border, #3c3c3c);
3728
3728
  border-left-width: 4px; border-radius: var(--aikit-radius, 10px); background: var(--aikit-surface, #252526);
@@ -3765,7 +3765,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3765
3765
  color: var(--aikit-muted, #858585); cursor: pointer; user-select: none; white-space: nowrap; }
3766
3766
  .dt-table th:hover { color: var(--aikit-text, #ccc); }
3767
3767
  .dt-table td { padding: 7px 12px; border-bottom: 1px solid var(--aikit-border, #3c3c3c); color: var(--aikit-text, #ccc); }
3768
- .dt-table tr:hover td { background: rgba(255,255,255,0.03); }
3768
+ .dt-table tr:hover td { background: color-mix(in srgb, var(--aikit-text, #ccc) 3%, transparent); }
3769
3769
  .sort-icon { margin-left: 4px; font-size: 10px; opacity: 0.4; }
3770
3770
  `,pnt={name:`data-table`,label:`Data Table`,detect(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e;return t.columns&&t.rows&&Array.isArray(t.columns)&&Array.isArray(t.rows)?.9:0},render(e,t,n){let r=t,i=vr(`div`,`block tpl-data-table`);if(r.stats?.length){let e=vr(`div`,`dt-stats`);for(let t of r.stats){let n=vr(`div`,`dt-stat`),r=vr(`div`,`dt-stat-value`,String(t.value));t.color&&(r.style.color=t.color),n.appendChild(r),n.appendChild(vr(`div`,`dt-stat-label`,t.label)),e.appendChild(n)}i.appendChild(e)}let a=vr(`div`,`dt-filter-bar`),o=document.createElement(`input`);o.className=`dt-search`,o.placeholder=`Search...`,a.appendChild(o);let s=vr(`span`,`dt-count`,`${r.rows.length} rows`);a.appendChild(s);let l=document.createElement(`button`);l.className=`action-btn default dt-export`,l.textContent=`Export`,l.addEventListener(`click`,()=>{n.emitAction({type:`button`,id:`export`,label:`Export`},JSON.stringify(g))}),a.appendChild(l),i.appendChild(a);let u=document.createElement(`table`);u.className=`dt-table`;let d=document.createElement(`thead`),f=document.createElement(`tr`),p=``,m=!0;for(let e of r.columns){let t=document.createElement(`th`);t.textContent=e.label;let n=vr(`span`,`sort-icon`,`⇅`);t.appendChild(n),t.addEventListener(`click`,()=>{p===e.key?m=!m:(p=e.key,m=!0),_()}),f.appendChild(t)}d.appendChild(f),u.appendChild(d);let h=document.createElement(`tbody`);u.appendChild(h),i.appendChild(u);let g=[...r.rows];o.addEventListener(`input`,()=>_());function _(){let e=o.value.toLowerCase();g=r.rows.filter(t=>e?r.columns.some(n=>String(t[n.key]??``).toLowerCase().includes(e)):!0),p&&g.sort((e,t)=>{let n=String(e[p]??``),r=String(t[p]??``),i=n.localeCompare(r,void 0,{numeric:!0});return m?i:-i}),h.innerHTML=``;for(let e of g){let t=document.createElement(`tr`);for(let n of r.columns){let r=document.createElement(`td`);r.textContent=String(e[n.key]??``),t.appendChild(r)}h.appendChild(t)}s.textContent=`${g.length} rows`}_(),_r(`tpl-data-table`,fnt),e.appendChild(i)},styles(){return fnt}},mnt=`
3771
3771
  .tpl-diff-view { display: grid; gap: 14px; }
@@ -3814,11 +3814,11 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3814
3814
  .fg-bar { height: 22px; border-radius: 3px; display: flex; align-items: center;
3815
3815
  padding: 0 6px; min-width: 24px; transition: filter 0.1s; }
3816
3816
  .fg-bar:hover { filter: brightness(1.2); }
3817
- .fg-bar-label { font-size: 11px; color: #000; white-space: nowrap; overflow: hidden;
3817
+ .fg-bar-label { font-size: 11px; color: var(--aikit-bg, #fff); white-space: nowrap; overflow: hidden;
3818
3818
  text-overflow: ellipsis; font-weight: 500; }
3819
3819
  .fg-info { font-size: 12px; color: var(--aikit-muted, #858585); padding: 8px 0;
3820
3820
  border-top: 1px solid var(--aikit-border, #3c3c3c); margin-top: 8px; }
3821
- `;function vnt(e){return{name:String(e.name??``),total:typeof e.total==`number`?e.total:typeof e.value==`number`?e.value:0,self:typeof e.self==`number`?e.self:void 0,children:Array.isArray(e.children)?e.children.map(e=>vnt(e)):void 0}}var ynt={name:`flame-graph`,label:`Flame Graph`,detect(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e.profile;return t&&typeof t==`object`&&t.children?.9:0},render(e,t,n){let r=t,i=vr(`div`,`block tpl-flame-graph`),a=vnt(r.profile),o=a,s=[a],l=vr(`div`,`fg-breadcrumb`);i.appendChild(l);let u=vr(`div`,`fg-canvas`);i.appendChild(u);let d=vr(`div`,`fg-info`);i.appendChild(d);function f(){l.innerHTML=``;for(let e=0;e<s.length;e++){let t=s[e],n=document.createElement(`button`);n.className=`fg-crumb`,n.textContent=t.name,n.addEventListener(`click`,()=>{s.splice(e+1),o=t,f()}),l.appendChild(n),e<s.length-1&&l.appendChild(vr(`span`,`fg-sep`,`›`))}u.innerHTML=``,p(u,o,0,o.total),d.textContent=`${o.name} — total: ${o.total}${o.self==null?``:`, self: ${o.self}`}`}function p(e,t,r,i){let a=vr(`div`,`fg-row`);a.style.paddingLeft=`${r*2}px`;let l=vr(`div`,`fg-bar`),u=Math.max(2,t.total/i*100);l.style.width=`${u}%`,l.style.background=m(r),l.title=`${t.name}: ${t.total}${t.self==null?``:` (self: ${t.self})`}`;let h=vr(`span`,`fg-bar-label`,`${t.name} (${t.total})`);if(l.appendChild(h),t.children?.length&&(l.style.cursor=`pointer`,l.addEventListener(`click`,()=>{o=t,s.push(t),f(),n.emitAction({type:`button`,id:`zoom`,label:`Zoom`},JSON.stringify({name:t.name,total:t.total}))})),l.addEventListener(`mouseenter`,()=>{d.textContent=`${t.name} — total: ${t.total}${t.self==null?``:`, self: ${t.self}`}`}),a.appendChild(l),e.appendChild(a),t.children)for(let n of t.children)p(e,n,r+1,i)}function m(e){let t=[`#e24d28`,`#e8602a`,`#edad2a`,`#f5c842`,`#fce94f`,`#c4a000`,`#e07028`,`#d45500`];return t[e%t.length]}f(),_r(`tpl-flame-graph`,_nt),e.appendChild(i)},styles(){return _nt}},bnt=`
3821
+ `;function vnt(e){return{name:String(e.name??``),total:typeof e.total==`number`?e.total:typeof e.value==`number`?e.value:0,self:typeof e.self==`number`?e.self:void 0,children:Array.isArray(e.children)?e.children.map(e=>vnt(e)):void 0}}var ynt={name:`flame-graph`,label:`Flame Graph`,detect(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e.profile;return t&&typeof t==`object`&&t.children?.9:0},render(e,t,n){let r=t,i=vr(`div`,`block tpl-flame-graph`),a=vnt(r.profile),o=a,s=[a],l=vr(`div`,`fg-breadcrumb`);i.appendChild(l);let u=vr(`div`,`fg-canvas`);i.appendChild(u);let d=vr(`div`,`fg-info`);i.appendChild(d);function f(){l.innerHTML=``;for(let e=0;e<s.length;e++){let t=s[e],n=document.createElement(`button`);n.className=`fg-crumb`,n.textContent=t.name,n.addEventListener(`click`,()=>{s.splice(e+1),o=t,f()}),l.appendChild(n),e<s.length-1&&l.appendChild(vr(`span`,`fg-sep`,`›`))}u.innerHTML=``,p(u,o,0,o.total),d.textContent=`${o.name} — total: ${o.total}${o.self==null?``:`, self: ${o.self}`}`}function p(e,t,r,i){let a=vr(`div`,`fg-row`);a.style.paddingLeft=`${r*2}px`;let l=vr(`div`,`fg-bar`),u=Math.max(2,t.total/i*100);l.style.width=`${u}%`,l.style.background=m(r),l.title=`${t.name}: ${t.total}${t.self==null?``:` (self: ${t.self})`}`;let h=vr(`span`,`fg-bar-label`,`${t.name} (${t.total})`);if(l.appendChild(h),t.children?.length&&(l.style.cursor=`pointer`,l.addEventListener(`click`,()=>{o=t,s.push(t),f(),n.emitAction({type:`button`,id:`zoom`,label:`Zoom`},JSON.stringify({name:t.name,total:t.total}))})),l.addEventListener(`mouseenter`,()=>{d.textContent=`${t.name} — total: ${t.total}${t.self==null?``:`, self: ${t.self}`}`}),a.appendChild(l),e.appendChild(a),t.children)for(let n of t.children)p(e,n,r+1,i)}function m(e){let t=getComputedStyle(document.documentElement),n=[t.getPropertyValue(`--chart-5`).trim()||`#e24d28`,t.getPropertyValue(`--chart-9`).trim()||`#e8602a`,t.getPropertyValue(`--chart-4`).trim()||`#edad2a`,t.getPropertyValue(`--chart-1`).trim()||`#f5c842`,t.getPropertyValue(`--chart-3`).trim()||`#fce94f`,t.getPropertyValue(`--chart-6`).trim()||`#c4a000`,t.getPropertyValue(`--chart-7`).trim()||`#e07028`,t.getPropertyValue(`--chart-8`).trim()||`#d45500`];return n[e%n.length]}f(),_r(`tpl-flame-graph`,_nt),e.appendChild(i)},styles(){return _nt}},bnt=`
3822
3822
  .tpl-form { display: grid; grid-template-columns: 1fr 280px; gap: 20px; }
3823
3823
  @media (max-width: 640px) { .tpl-form { grid-template-columns: 1fr; } }
3824
3824
  .fm-fields { display: flex; flex-direction: column; gap: 14px; }
@@ -3872,7 +3872,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3872
3872
  border-radius: 6px; cursor: grab; transition: all 0.15s; }
3873
3873
  .sort-item:hover { border-color: var(--aikit-accent, #0078d4); }
3874
3874
  .sort-item.dragging { opacity: 0.4; }
3875
- .sort-item.drag-over { border-color: var(--aikit-accent, #0078d4); background: rgba(0,120,212,0.1); }
3875
+ .sort-item.drag-over { border-color: var(--aikit-accent, #0078d4); background: color-mix(in srgb, var(--aikit-accent, #0078d4) 10%, transparent); }
3876
3876
  .drag-handle { font-size: 18px; color: var(--aikit-muted, #858585); cursor: grab; user-select: none; }
3877
3877
  .sort-label { flex: 1; color: var(--aikit-text, #ccc); }
3878
3878
  .sort-pos { font-size: 12px; color: var(--aikit-muted, #858585); font-variant-numeric: tabular-nums; }
@@ -3881,7 +3881,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3881
3881
  border-radius: 8px; margin-bottom: 10px; overflow-x: auto; }
3882
3882
  .pk-tab { padding: 6px 14px; border: none; background: transparent; color: var(--aikit-muted, #858585);
3883
3883
  border-radius: 6px; cursor: pointer; font-size: 12px; white-space: nowrap; }
3884
- .pk-tab.active { background: var(--aikit-accent, #0078d4); color: #fff; }
3884
+ .pk-tab.active { background: var(--aikit-accent, #0078d4); color: var(--aikit-bg, #1a1a2e); }
3885
3885
  .pk-search { width: 100%; padding: 8px 12px; margin-bottom: 8px;
3886
3886
  background: var(--aikit-surface, #252526); border: 1px solid var(--aikit-border, #3c3c3c);
3887
3887
  border-radius: 6px; color: var(--aikit-text, #ccc); font-size: 13px; outline: none; box-sizing: border-box; }
@@ -3890,12 +3890,12 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
3890
3890
  .pk-list { max-height: 320px; overflow-y: auto; }
3891
3891
  .pk-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px;
3892
3892
  border-bottom: 1px solid var(--aikit-border, #3c3c3c); }
3893
- .pk-item:hover { background: rgba(255,255,255,0.03); }
3893
+ .pk-item:hover { background: color-mix(in srgb, var(--aikit-text, #ccc) 3%, transparent); }
3894
3894
  .pk-item input[type=checkbox] { accent-color: var(--aikit-accent, #0078d4); }
3895
3895
  .pk-item-label { flex: 1; color: var(--aikit-text, #ccc); font-size: 13px; }
3896
3896
  .pk-item-status { font-size: 11px; padding: 2px 8px; border-radius: 10px;
3897
3897
  background: var(--aikit-surface2, #2d2d30); color: var(--aikit-muted, #858585); }
3898
- .pk-item-status.success { background: rgba(78,201,176,0.15); color: var(--aikit-success, #4ec9b0); }
3898
+ .pk-item-status.success { background: color-mix(in srgb, var(--aikit-success, #4ec9b0) 15%, transparent); color: var(--aikit-success, #4ec9b0); }
3899
3899
  .pk-tags { display: flex; gap: 4px; }
3900
3900
  .pk-tag { font-size: 10px; padding: 1px 6px; border-radius: 4px;
3901
3901
  background: var(--aikit-surface2, #2d2d30); color: var(--aikit-muted, #858585); }
@@ -36,4 +36,4 @@ IMPORTANT: For charts, use the ChartValue format above. Do NOT use Chart.js form
36
36
  - "browser": Serves a themed dashboard on a local URL. Use ONLY when you need user interaction back (confirmations, selections, form input). The tool blocks until user clicks an action button, then returns their selection.
37
37
  FORMAT RULE: If no user interaction is needed → use "html". If you need user input back → use "browser".
38
38
  CONTENT GUIDE: Pass typed blocks [{ type, title?, value }] for structured content. See the \`content\` parameter description for all supported block types and their value shapes. For charts: use {chartType, data:Record[], xKey, yKeys} — NOT Chart.js format.
39
- BROWSER WORKFLOW: After calling present with format "browser", you MUST extract the URL from the response and call openBrowserPage({ url }) tool - PlayWright MCP to open it in VS Code Simple Browser. A system browser fallback also opens automatically, but always call openBrowserPage tool - PlayWright MCP yourself.`,o=async({format:e,title:t,content:r,actions:i,template:a})=>(e??`html`)===`browser`||Array.isArray(i)&&i.length>0?await T(t,r,i,n,a):E(t,r,i,a);if(i){b||=(u(t,`AI Kit Present App`,g,{description:`Rich interactive content viewer for AI Kit tools`},async()=>({contents:[{uri:g,mimeType:l,text:i}]})),!0),d(t,`present`,{title:r.title,description:a,annotations:r.annotations,inputSchema:v,_meta:{ui:{resourceUri:g}}},o);return}t.tool(`present`,a,v,r.annotations,o)}async function T(e,t,i,a,o){let s=r(e,t,{compactTables:!0}),c=n(e,t,i,o),l=m({uri:`ui://aikit/present-browser.html`,content:{type:`rawHtml`,htmlString:c},encoding:`text`,adapters:{mcpApps:{enabled:!0}}}),u,d,h=Array.isArray(i)?i:[],g=``,_;try{x&&=(x.close(),null),h.length>0&&(u=new Promise(e=>{d=e}));let e=!1;g=await new Promise((t,n)=>{let r=p((t,n)=>{if(e||(e=!0,_&&clearTimeout(_)),t.method===`POST`&&t.url===`/callback`){let e=``;t.on(`data`,t=>{e+=t.toString()}),t.on(`end`,()=>{n.writeHead(200,{"Content-Type":`application/json`,"Access-Control-Allow-Origin":`*`}),n.end(`{"ok":true}`);try{let t=JSON.parse(e);d?.(t)}catch{}});return}if(t.method===`OPTIONS`){n.writeHead(204,{"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST`,"Access-Control-Allow-Headers":`Content-Type`}),n.end();return}n.writeHead(200,{"Content-Type":`text/html; charset=utf-8`}),n.end(c)});r.listen(0,`127.0.0.1`,()=>{let i=r.address();if(typeof i==`object`&&i){x=r;let n=`http://127.0.0.1:${i.port}`;_=setTimeout(()=>{if(!e)try{f(process.platform===`win32`?`start "" "${n}"`:process.platform===`darwin`?`open "${n}"`:`xdg-open "${n}"`)}catch{}},8e3),_.unref(),t(n)}else n(Error(`Failed to start present server`))}),setTimeout(()=>{r.close(),x===r&&(x=null)},300*1e3).unref()})}catch{}let v=g?`${s}\n\n---\n🌐 **Dashboard opened in browser:** ${g}\n\n**IMPORTANT:** You MUST now open this URL using the \`openBrowserPage\` tool - PlayWright MCP. If that tool is unavailable, open the URL in the system browser as a fallback. If neither works, ask the user to open the URL manually.`:s;if(h.length>0&&a?.available&&u)try{let e=await Promise.race([u,new Promise((e,t)=>setTimeout(()=>t(Error(`timeout`)),300*1e3))]);return{content:[{type:`text`,text:`${v}\n\n✅ **Selected:** ${e.actionId} = \`${e.value}\``},l]}}catch{return{content:[{type:`text`,text:`${v}\n\n⚠️ *No selection received (timed out).*`},l]}}return{content:[{type:`text`,text:v},l]}}function E(e,r,i,a){let o=Array.isArray(i)?i:[],s=e?`📊 **${e}**`:`📊 **Dashboard**`,c=m({uri:`ui://aikit/present-static.html`,content:{type:`rawHtml`,htmlString:n(e,r,i,a)},encoding:`text`,adapters:{mcpApps:{enabled:!0}}});return{content:[{type:`text`,text:s},c],structuredContent:{title:e,content:t(r),actions:o}}}export{T as formatAsBrowser,E as formatAsHtml,C as getPresentHtml,w as registerPresentTool,S as resolvePresentHtml};
39
+ BROWSER WORKFLOW: After calling present with format "browser", you MUST extract the URL from the response and call openBrowserPage({ url }) tool - PlayWright MCP to open it in VS Code Simple Browser. A system browser fallback also opens automatically, but always call openBrowserPage tool - PlayWright MCP yourself.`,o=async({format:e,title:t,content:r,actions:i,template:a})=>(e??`html`)===`browser`||Array.isArray(i)&&i.length>0?await T(t,r,i,n,a):E(t,r,i,a);if(i){b||=(u(t,`AI Kit Present App`,g,{description:`Rich interactive content viewer for AI Kit tools`},async()=>({contents:[{uri:g,mimeType:l,text:i}]})),!0),d(t,`present`,{title:r.title,description:a,annotations:r.annotations,inputSchema:v,_meta:{ui:{resourceUri:g}}},o);return}t.tool(`present`,a,v,r.annotations,o)}async function T(e,t,i,a,o){let s=r(e,t,{compactTables:!0}),c=n(e,t,i,o),l=m({uri:`ui://aikit/present-browser.html`,content:{type:`rawHtml`,htmlString:c},encoding:`text`,adapters:{mcpApps:{enabled:!0}}}),u,d,h=Array.isArray(i)?i:[],g=``,_;try{x&&=(x.close(),null),h.length>0&&(u=new Promise(e=>{d=e}));let e=!1;g=await new Promise((t,n)=>{let r=p((t,n)=>{if(e||(e=!0,_&&clearTimeout(_)),t.method===`POST`&&t.url===`/callback`){let e=``;t.on(`data`,t=>{e+=t.toString()}),t.on(`end`,()=>{n.writeHead(200,{"Content-Type":`application/json`,"Access-Control-Allow-Origin":`*`}),n.end(`{"ok":true}`);try{let t=JSON.parse(e);d?.(t)}catch{}});return}if(t.method===`OPTIONS`){n.writeHead(204,{"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST`,"Access-Control-Allow-Headers":`Content-Type`}),n.end();return}n.writeHead(200,{"Content-Type":`text/html; charset=utf-8`}),n.end(c)});r.listen(0,`127.0.0.1`,()=>{let i=r.address();if(typeof i==`object`&&i){x=r;let n=`http://127.0.0.1:${i.port}`;_=setTimeout(()=>{if(!e)try{f(process.platform===`win32`?`start "" "${n}"`:process.platform===`darwin`?`open "${n}"`:`xdg-open "${n}"`)}catch{}},8e3),_.unref(),t(n)}else n(Error(`Failed to start present server`))}),setTimeout(()=>{r.close(),x===r&&(x=null)},300*1e3).unref()})}catch{}let v=g?`${s}\n\n---\n🌐 **Dashboard opened in browser:** ${g}\n\n**IMPORTANT:** You MUST now open this URL using the \`openBrowserPage\` tool - PlayWright MCP. If that tool is unavailable, open the URL in the system browser as a fallback. If neither works, ask the user to open the URL manually.`:s;if(h.length>0&&a?.available&&u)try{let e=await Promise.race([u,new Promise((e,t)=>setTimeout(()=>t(Error(`timeout`)),300*1e3))]);return{content:[{type:`text`,text:`${v}\n\n✅ **Selected:** ${e.actionId} = \`${e.value}\``},l]}}catch{return{content:[{type:`text`,text:`${v}\n\n⚠️ *No selection received (timed out).*`},l]}}return{content:[{type:`text`,text:v},l]}}function E(e,i,a,o){let s=Array.isArray(a)?a:[],c=r(e,i,{compactTables:!0}),l=m({uri:`ui://aikit/present-static.html`,content:{type:`rawHtml`,htmlString:n(e,i,a,o)},encoding:`text`,adapters:{mcpApps:{enabled:!0}}});return{content:[{type:`text`,text:c},l],structuredContent:{title:e,content:t(i),actions:s}}}export{T as formatAsBrowser,E as formatAsHtml,C as getPresentHtml,w as registerPresentTool,S as resolvePresentHtml};
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: c4-architecture
3
- description: Generate architecture documentation using C4 model Mermaid diagrams. Use when asked to create architecture diagrams, document system architecture, visualize software structure, create C4 diagrams, or generate context/container/component/deployment diagrams. Triggers include "architecture diagram", "C4 diagram", "system context", "container diagram", "component diagram", "deployment diagram", "document architecture", "visualize architecture".
3
+ description: Generate architecture documentation using C4 model diagrams. Supports two output formats: Mermaid (md) for documentation and HTML/SVG for presentations. Use when asked to create architecture diagrams, document system architecture, visualize software structure, create C4 diagrams, or generate context/container/component/deployment diagrams.
4
4
  metadata:
5
5
  category: cross-cutting
6
6
  domain: general
@@ -22,6 +22,56 @@ Generate software architecture documentation using C4 model diagrams in Mermaid
22
22
  > **Tip:** Use `present({ format: "html" })` to render diagrams as interactive visual output, rather than raw Mermaid code blocks. This provides a better viewing experience for stakeholders.
23
23
  4. **Document** - Write diagrams to markdown files with explanatory context
24
24
 
25
+ ## Format Selection
26
+
27
+ This skill supports two output formats. Choose based on the audience and delivery method:
28
+
29
+ > **Default rule:** When using the `present` tool to display architecture, **always use HTML/SVG format** (Method 2). It produces professional dark-themed diagrams with SVG icons, category colors, and summary cards. Use Mermaid only for saving to markdown docs or when the user explicitly requests it.
30
+
31
+ | Format | Output | Best For | Delivery |
32
+ |--------|--------|----------|----------|
33
+ | **Mermaid (md)** | `.md` files with Mermaid code blocks | Developer docs, GitHub rendering, version control | Save to `docs/architecture/*.md` |
34
+ | **HTML/SVG (html)** | Self-contained `.html` files | Stakeholder presentations, visual reviews, browser viewing | Save as `.html` or render via `present` tool |
35
+
36
+ ### Format Decision Tree
37
+
38
+ ```
39
+ What is the goal?
40
+ ├── Save to docs / version control → Mermaid (md)
41
+ ├── Present via `present` tool → HTML/SVG (html) ← DEFAULT for present
42
+ ├── User says "Mermaid" or "markdown" → Mermaid (md)
43
+ └── User says "show", "visualize", "present" → HTML/SVG (html)
44
+ ```
45
+
46
+ ### Present Tool Integration
47
+
48
+ Both formats work with the `present` tool:
49
+
50
+ **Mermaid format** - Use a `mermaid` content block:
51
+ ```js
52
+ present({
53
+ format: "html", // or "browser"
54
+ title: "System Architecture",
55
+ content: [
56
+ { type: "mermaid", title: "C4 Container Diagram", value: "C4Container\n title Container Diagram\n ..." }
57
+ ]
58
+ })
59
+ ```
60
+
61
+ **HTML/SVG format** - Use a `markdown` block with the full HTML structure. Pair with `metrics` and `cards` blocks for a complete dashboard. See [references/html-design-system.md](references/html-design-system.md#present-tool-integration) for the full composition pattern.
62
+
63
+ ```js
64
+ present({
65
+ format: "html", // or "browser" - both work
66
+ title: "System Architecture",
67
+ content: [
68
+ { type: "metrics", title: "Overview", value: [{ label: "Services", value: "6" }, ...] },
69
+ { type: "markdown", title: "Architecture Diagram", value: "<div class='arch-diagram'>...(inline SVG + CSS)...</div>" },
70
+ { type: "cards", title: "Summary", value: [{ title: "Frontend", body: "React SPA" }, ...] }
71
+ ]
72
+ })
73
+ ```
74
+
25
75
  ## C4 Diagram Levels
26
76
 
27
77
  Select the appropriate level based on the documentation need:
@@ -129,6 +179,40 @@ C4Deployment
129
179
  Rel(api, db, "Reads/writes", "JDBC")
130
180
  ```
131
181
 
182
+ ## HTML/SVG Format
183
+
184
+ For HTML/SVG output, use the design system and template from the references.
185
+
186
+ The component type registry, color palette, typography, and layout rules are defined in [references/html-design-system.md](references/html-design-system.md). This is the single source of truth - update colors, types, and icons there.
187
+
188
+ Copy and customize [references/html-template.html](references/html-template.html) for each diagram. The template is self-contained and opens directly in any browser.
189
+
190
+ ### Component Categories
191
+
192
+ See the design system for the full sub-type registry and icon slots.
193
+
194
+ - Frontend - stroke `#22d3ee`
195
+ - Backend - stroke `#34d399`
196
+ - Data - stroke `#a78bfa`
197
+ - Infrastructure - stroke `#fbbf24`
198
+ - Messaging - stroke `#fb923c`
199
+ - Security - stroke `#fb7185`
200
+ - External - stroke `#94a3b8`
201
+ - Monitoring - stroke `#38bdf8`
202
+
203
+ ### Minimal Component Box Example
204
+
205
+ Use the design system's inline SVG component pattern inside the HTML template's main `<svg>`:
206
+
207
+ ```svg
208
+ <g class="node backend">
209
+ <rect x="280" y="210" width="190" height="60" rx="6" />
210
+ <text class="c4-tag" x="294" y="226">&lt;&lt;Container&gt;&gt;</text>
211
+ <text class="node-title" x="294" y="243">API Service</text>
212
+ <text class="node-subtitle" x="294" y="257">Backend / HTTPS JSON</text>
213
+ </g>
214
+ ```
215
+
132
216
  ## Element Syntax
133
217
 
134
218
  ### People and Systems
@@ -301,3 +385,5 @@ Write architecture documentation to `docs/architecture/` with naming convention:
301
385
  - [references/c4-syntax.md](references/c4-syntax.md) - Complete Mermaid C4 syntax
302
386
  - [references/common-mistakes.md](references/common-mistakes.md) - Anti-patterns to avoid
303
387
  - [references/advanced-patterns.md](references/advanced-patterns.md) - Microservices, event-driven, deployment
388
+ - [references/html-design-system.md](references/html-design-system.md) - Centralized HTML/SVG design system (types, colors, icons, present integration)
389
+ - [references/html-template.html](references/html-template.html) - Self-contained HTML template for C4 diagrams