@praxisjs/devtools 0.1.1 → 0.2.0

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 (33) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/index.d.ts +5 -7
  3. package/dist/index.js +1035 -860
  4. package/package.json +8 -7
  5. package/src/decorators/debug.ts +102 -77
  6. package/src/decorators/trace.ts +15 -11
  7. package/src/icons/ellipsis-vertical.tsx +25 -19
  8. package/src/icons/panel-bottom.tsx +24 -18
  9. package/src/icons/panel-left.tsx +24 -18
  10. package/src/icons/panel-right.tsx +24 -18
  11. package/src/icons/panel-top.tsx +24 -18
  12. package/src/icons/x.tsx +24 -18
  13. package/src/plugins/components/components/component-detail.tsx +59 -54
  14. package/src/plugins/components/components/component-row.tsx +36 -33
  15. package/src/plugins/components/components/detail-row.tsx +21 -18
  16. package/src/plugins/components/components/detail-section.tsx +14 -12
  17. package/src/plugins/components/components/status-dot.tsx +20 -11
  18. package/src/plugins/components/components-tab.tsx +66 -61
  19. package/src/plugins/signals/components/signal-detail.tsx +35 -27
  20. package/src/plugins/signals/components/signal-row.tsx +32 -28
  21. package/src/plugins/signals/signals-tab.tsx +92 -79
  22. package/src/plugins/timeline/components/badge.tsx +15 -9
  23. package/src/plugins/timeline/components/timeline-row.tsx +52 -45
  24. package/src/plugins/timeline/timeline-tab.tsx +90 -77
  25. package/src/plugins/types.ts +2 -2
  26. package/src/ui/dev-tools.tsx +45 -39
  27. package/src/ui/panel.tsx +152 -146
  28. package/src/ui/shared/empty-state.tsx +17 -11
  29. package/src/ui/shared/icon-button.tsx +28 -25
  30. package/src/ui/shared/panel-section.tsx +14 -12
  31. package/src/ui/shared/search-input.tsx +19 -15
  32. package/src/ui/shared/side-panel.tsx +16 -13
  33. package/vite.config.ts +3 -9
package/dist/index.js CHANGED
@@ -1,115 +1,140 @@
1
- import { jsxs as d, jsx as n } from "@praxisjs/jsx/jsx-runtime";
2
- import { signal as b, effect as P, onMount as C, onUnmount as I, peek as U } from "@praxisjs/core";
3
- import { render as j } from "@praxisjs/runtime";
4
- const N = "data:image/svg+xml,%3csvg%20width='1024'%20height='1024'%20viewBox='0%200%201024%201024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M605.411%20445.66L641.322%20498.293L641.342%20498.278L697.538%20578.57L742.673%20512.806L512.5%20178.878L281.327%20512.806L512.5%20848.182L603.519%20715.561L650.559%20782.134L512.701%20983L187%20510.478L512.701%2040L837%20510.478L698.206%20712.709L668.895%20671.104L604.033%20578.775L512%20712.504L373.199%20511.5L512.233%20309.092L584.13%20414.469L536.746%20480.456L513.69%20445.66L466.305%20511.5L512.166%20577.425L556.48%20513.91L605.411%20445.66Z'%20fill='url(%23paint0_linear_3024_20)'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_3024_20'%20x1='512'%20y1='40'%20x2='512'%20y2='983'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%239B76FF'%20stop-opacity='0.86'/%3e%3cstop%20offset='1'%20stop-color='%232D246B'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e", F = '*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:host{all:initial;display:block;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}input::placeholder{color:#6f6a8f}input:focus{outline:none;box-shadow:0 0 0 2px #9b90e64d}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#9b90e633;border-radius:2px}::-webkit-scrollbar-thumb:hover{background:#9b90e666}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.bottom-0{bottom:0}.bottom-5{bottom:1.25rem}.left-0{left:0}.right-0{right:0}.right-5{right:1.25rem}.top-0{top:0}.top-full{top:100%}.z-\\[2147483647\\]{z-index:2147483647}.z-10{z-index:10}.grid{display:grid}.grid-cols-\\[1\\.2fr_0\\.8fr_1fr_auto\\]{grid-template-columns:1.2fr .8fr 1fr auto}.m6{margin:1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mr-\\[2px\\]{margin-right:2px}.ms{margin-inline-start:1rem}.mt-1{margin-top:.25rem}.box-border{box-sizing:border-box}.inline-block{display:inline-block}.h-\\[13px\\]{height:13px}.h-\\[22px\\]{height:22px}.h-\\[2px\\]{height:2px}.h-\\[32px\\]{height:32px}.h-\\[6px\\]{height:6px}.h-1{height:.25rem}.h-10{height:2.5rem}.h-3{height:.75rem}.h-7{height:1.75rem}.h-full{height:100%}.h-screen{height:100vh}.max-w-\\[200px\\]{max-width:200px}.min-w-0{min-width:0}.w-\\[13px\\]{width:13px}.w-\\[22px\\]{width:22px}.w-\\[2px\\]{width:2px}.w-\\[6px\\]{width:6px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-4{width:1rem}.w-full{width:100%}.w-px{width:1px}.flex{display:flex}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.cursor-\\[ew-resize\\]{cursor:ew-resize}.cursor-\\[ns-resize\\]{cursor:ns-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[2px\\]{gap:2px}.gap-\\[3px\\]{gap:3px}.gap-\\[6px\\]{gap:6px}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{--un-border-opacity:.25;border-color:rgba(155,144,230,var(--un-border-opacity))}.border-warn{--un-border-opacity:1;border-color:rgb(217 119 6 / var(--un-border-opacity))}.hover\\:border-accent:hover{--un-border-opacity:1;border-color:rgb(155 144 230 / var(--un-border-opacity))}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.bg-\\[rgba\\(124\\,109\\,214\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(124,109,214,var(--un-bg-opacity))}.bg-\\[rgba\\(14\\,165\\,122\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(14,165,122,var(--un-bg-opacity))}.bg-\\[rgba\\(155\\,144\\,230\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-\\[rgba\\(217\\,119\\,6\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(217,119,6,var(--un-bg-opacity))}.bg-\\[rgba\\(220\\,38\\,38\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(220,38,38,var(--un-bg-opacity))}.bg-\\[rgba\\(74\\,222\\,128\\,0\\.12\\)\\]{--un-bg-opacity:.12;background-color:rgba(74,222,128,var(--un-bg-opacity))}.bg-accent{--un-bg-opacity:1;background-color:rgb(155 144 230 / var(--un-bg-opacity))}.bg-bg{--un-bg-opacity:1;background-color:rgb(15 13 23 / var(--un-bg-opacity))}.bg-border{--un-bg-opacity:.25;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-header{--un-bg-opacity:1;background-color:rgb(22 19 38 / var(--un-bg-opacity))}.bg-input,.bg-section{--un-bg-opacity:1;background-color:rgb(27 24 48 / var(--un-bg-opacity))}.bg-selected{--un-bg-opacity:1;background-color:rgb(34 30 61 / var(--un-bg-opacity))}.bg-soft{--un-bg-opacity:.18;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-subtle{--un-bg-opacity:1;background-color:rgb(111 106 143 / var(--un-bg-opacity))}.bg-success{--un-bg-opacity:1;background-color:rgb(14 165 122 / var(--un-bg-opacity))}.bg-transparent{background-color:transparent}.hover\\:bg-accent:hover{--un-bg-opacity:1;background-color:rgb(155 144 230 / var(--un-bg-opacity))}.hover\\:bg-section:hover{--un-bg-opacity:1;background-color:rgb(27 24 48 / var(--un-bg-opacity))}.hover\\:bg-soft:hover{--un-bg-opacity:.18;background-color:rgba(155,144,230,var(--un-bg-opacity))}.p-1{padding:.25rem}.px{padding-left:1rem;padding-right:1rem}.px-\\[6px\\]{padding-left:6px;padding-right:6px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-\\[2px\\]{padding-top:2px;padding-bottom:2px}.py-\\[3px\\]{padding-top:3px;padding-bottom:3px}.py-\\[4px\\]{padding-top:4px;padding-bottom:4px}.py-\\[5px\\]{padding-top:5px;padding-bottom:5px}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pl-\\[10px\\]{padding-left:10px}.pl-\\[56px\\]{padding-left:56px}.pl-1{padding-left:.25rem}.pr-\\[14px\\]{padding-right:14px}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[20px\\]{font-size:20px}.text-\\[9px\\]{font-size:9px}.text-\\[\\#0ea57a\\]{--un-text-opacity:1;color:rgb(14 165 122 / var(--un-text-opacity))}.text-\\[\\#4ade80\\]{--un-text-opacity:1;color:rgb(74 222 128 / var(--un-text-opacity))}.text-\\[\\#7c6dd6\\]{--un-text-opacity:1;color:rgb(124 109 214 / var(--un-text-opacity))}.text-\\[\\#9b90e6\\],.text-accent{--un-text-opacity:1;color:rgb(155 144 230 / var(--un-text-opacity))}.text-\\[\\#d97706\\],.text-warn{--un-text-opacity:1;color:rgb(217 119 6 / var(--un-text-opacity))}.text-\\[\\#dc2626\\]{--un-text-opacity:1;color:rgb(220 38 38 / var(--un-text-opacity))}.text-muted{--un-text-opacity:1;color:rgb(199 195 230 / var(--un-text-opacity))}.text-subtle{--un-text-opacity:1;color:rgb(111 106 143 / var(--un-text-opacity))}.text-text,.hover\\:text-text:hover{--un-text-opacity:1;color:rgb(244 242 255 / var(--un-text-opacity))}.color-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.hover\\:color-muted:hover{--un-text-opacity:1;color:rgb(199 195 230 / var(--un-text-opacity))}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\\[0\\.07em\\]{letter-spacing:.07em}.tracking-\\[0\\.12em\\]{letter-spacing:.12em}.tracking-widest{letter-spacing:.1em}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.uppercase{text-transform:uppercase}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.shadow{--un-shadow:var(--un-shadow-inset) 0 1px 3px 0 var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 1px 2px -1px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-\\[0_8px_32px_rgba\\(0\\,0\\,0\\,0\\.7\\)\\]{--un-shadow:0 8px 32px var(--un-shadow-color, rgba(0, 0, 0, .7));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.hover\\:shadow-\\[0_8px_32px_rgba\\(56\\,189\\,248\\,0\\.1\\)\\]:hover{--un-shadow:0 8px 32px var(--un-shadow-color, rgba(56, 189, 248, .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}';
5
- class O {
6
- constructor() {
7
- this.handlers = /* @__PURE__ */ new Map();
8
- }
9
- on(e, o) {
10
- return this.handlers.has(e) || this.handlers.set(e, /* @__PURE__ */ new Set()), this.handlers.get(e).add(o), () => this.handlers.get(e)?.delete(o);
1
+ var Bt = Object.create;
2
+ var de = Object.defineProperty;
3
+ var Ht = Object.getOwnPropertyDescriptor;
4
+ var Ae = (r, t) => (t = Symbol[r]) ? t : /* @__PURE__ */ Symbol.for("Symbol." + r), Y = (r) => {
5
+ throw TypeError(r);
6
+ };
7
+ var Fe = (r, t, e) => t in r ? de(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
8
+ var Ne = (r, t) => de(r, "name", { value: t, configurable: !0 });
9
+ var g = (r) => [, , , Bt(r?.[Ae("metadata")] ?? null)], Be = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], W = (r) => r !== void 0 && typeof r != "function" ? Y("Function expected") : r, Tt = (r, t, e, n, o) => ({ kind: Be[r], name: t, metadata: n, addInitializer: (s) => e._ ? Y("Already initialized") : o.push(W(s || null)) }), Gt = (r, t) => Fe(t, Ae("metadata"), r[3]), a = (r, t, e, n) => {
10
+ for (var o = 0, s = r[t >> 1], p = s && s.length; o < p; o++) t & 1 ? s[o].call(e) : n = s[o].call(e, n);
11
+ return n;
12
+ }, d = (r, t, e, n, o, s) => {
13
+ var p, u, h, b, m, c = t & 7, $ = !!(t & 8), v = !!(t & 16), j = c > 3 ? r.length + 1 : c ? $ ? 1 : 2 : 0, R = Be[c + 5], De = c > 3 && (r[j - 1] = []), Ft = r[j] || (r[j] = []), L = c && (!v && !$ && (o = o.prototype), c < 5 && (c > 3 || !v) && Ht(c < 4 ? o : { get [e]() {
14
+ return Ue(this, s);
15
+ }, set [e](C) {
16
+ return Oe(this, s, C);
17
+ } }, e));
18
+ c ? v && c < 4 && Ne(s, (c > 2 ? "set " : c > 1 ? "get " : "") + e) : Ne(o, e);
19
+ for (var le = n.length - 1; le >= 0; le--)
20
+ b = Tt(c, e, h = {}, r[3], Ft), c && (b.static = $, b.private = v, m = b.access = { has: v ? (C) => Rt(o, C) : (C) => e in C }, c ^ 3 && (m.get = v ? (C) => (c ^ 1 ? Ue : Wt)(C, o, c ^ 4 ? s : L.get) : (C) => C[e]), c > 2 && (m.set = v ? (C, ce) => Oe(C, o, ce, c ^ 4 ? s : L.set) : (C, ce) => C[e] = ce)), u = (0, n[le])(c ? c < 4 ? v ? s : L[R] : c > 4 ? void 0 : { get: L.get, set: L.set } : o, b), h._ = 1, c ^ 4 || u === void 0 ? W(u) && (c > 4 ? De.unshift(u) : c ? v ? s = u : L[R] = u : o = u) : typeof u != "object" || u === null ? Y("Object expected") : (W(p = u.get) && (L.get = p), W(p = u.set) && (L.set = p), W(p = u.init) && De.unshift(p));
21
+ return c || Gt(r, o), L && de(o, e, L), v ? c ^ 4 ? s : L : o;
22
+ }, f = (r, t, e) => Fe(r, typeof t != "symbol" ? t + "" : t, e), pe = (r, t, e) => t.has(r) || Y("Cannot " + e), Rt = (r, t) => Object(t) !== t ? Y('Cannot use the "in" operator on this value') : r.has(t), Ue = (r, t, e) => (pe(r, t, "read from private field"), e ? e.call(r) : t.get(r));
23
+ var Oe = (r, t, e, n) => (pe(r, t, "write to private field"), n ? n.call(r, e) : t.set(r, e), e), Wt = (r, t, e) => (pe(r, t, "access private method"), e);
24
+ import { jsxs as l, jsx as i } from "@praxisjs/jsx/jsx-runtime";
25
+ import { StatelessComponent as w, StatefulComponent as G } from "@praxisjs/core";
26
+ import { Component as x, State as k } from "@praxisjs/decorators";
27
+ import { render as He } from "@praxisjs/runtime";
28
+ const At = "data:image/svg+xml,%3csvg%20width='1024'%20height='1024'%20viewBox='0%200%201024%201024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M605.411%20445.66L641.322%20498.293L641.342%20498.278L697.538%20578.57L742.673%20512.806L512.5%20178.878L281.327%20512.806L512.5%20848.182L603.519%20715.561L650.559%20782.134L512.701%20983L187%20510.478L512.701%2040L837%20510.478L698.206%20712.709L668.895%20671.104L604.033%20578.775L512%20712.504L373.199%20511.5L512.233%20309.092L584.13%20414.469L536.746%20480.456L513.69%20445.66L466.305%20511.5L512.166%20577.425L556.48%20513.91L605.411%20445.66Z'%20fill='url(%23paint0_linear_3024_20)'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_3024_20'%20x1='512'%20y1='40'%20x2='512'%20y2='983'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%239B76FF'%20stop-opacity='0.86'/%3e%3cstop%20offset='1'%20stop-color='%232D246B'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e", Yt = '*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:host{all:initial;display:block;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}input::placeholder{color:#6f6a8f}input:focus{outline:none;box-shadow:0 0 0 2px #9b90e64d}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#9b90e633;border-radius:2px}::-webkit-scrollbar-thumb:hover{background:#9b90e666}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.bottom-0{bottom:0}.bottom-5{bottom:1.25rem}.left-0{left:0}.right-0{right:0}.right-5{right:1.25rem}.top-0{top:0}.top-full{top:100%}.z-\\[2147483647\\]{z-index:2147483647}.z-10{z-index:10}.grid{display:grid}.grid-cols-\\[1\\.2fr_0\\.8fr_1fr_auto\\]{grid-template-columns:1.2fr .8fr 1fr auto}.m6{margin:1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mr-\\[2px\\]{margin-right:2px}.ms{margin-inline-start:1rem}.mt-1{margin-top:.25rem}.box-border{box-sizing:border-box}.inline-block{display:inline-block}.h-\\[13px\\]{height:13px}.h-\\[22px\\]{height:22px}.h-\\[2px\\]{height:2px}.h-\\[32px\\]{height:32px}.h-\\[6px\\]{height:6px}.h-1{height:.25rem}.h-10{height:2.5rem}.h-3{height:.75rem}.h-7{height:1.75rem}.h-full{height:100%}.h-screen{height:100vh}.max-w-\\[200px\\]{max-width:200px}.min-w-0{min-width:0}.w-\\[13px\\]{width:13px}.w-\\[22px\\]{width:22px}.w-\\[2px\\]{width:2px}.w-\\[6px\\]{width:6px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-4{width:1rem}.w-full{width:100%}.w-px{width:1px}.flex{display:flex}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.cursor-\\[ew-resize\\]{cursor:ew-resize}.cursor-\\[ns-resize\\]{cursor:ns-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[2px\\]{gap:2px}.gap-\\[3px\\]{gap:3px}.gap-\\[6px\\]{gap:6px}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{--un-border-opacity:.25;border-color:rgba(155,144,230,var(--un-border-opacity))}.border-warn{--un-border-opacity:1;border-color:rgb(217 119 6 / var(--un-border-opacity))}.hover\\:border-accent:hover{--un-border-opacity:1;border-color:rgb(155 144 230 / var(--un-border-opacity))}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.bg-\\[rgba\\(124\\,109\\,214\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(124,109,214,var(--un-bg-opacity))}.bg-\\[rgba\\(14\\,165\\,122\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(14,165,122,var(--un-bg-opacity))}.bg-\\[rgba\\(155\\,144\\,230\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-\\[rgba\\(217\\,119\\,6\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(217,119,6,var(--un-bg-opacity))}.bg-\\[rgba\\(220\\,38\\,38\\,0\\.14\\)\\]{--un-bg-opacity:.14;background-color:rgba(220,38,38,var(--un-bg-opacity))}.bg-\\[rgba\\(74\\,222\\,128\\,0\\.12\\)\\]{--un-bg-opacity:.12;background-color:rgba(74,222,128,var(--un-bg-opacity))}.bg-accent{--un-bg-opacity:1;background-color:rgb(155 144 230 / var(--un-bg-opacity))}.bg-bg{--un-bg-opacity:1;background-color:rgb(15 13 23 / var(--un-bg-opacity))}.bg-border{--un-bg-opacity:.25;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-header{--un-bg-opacity:1;background-color:rgb(22 19 38 / var(--un-bg-opacity))}.bg-input,.bg-section{--un-bg-opacity:1;background-color:rgb(27 24 48 / var(--un-bg-opacity))}.bg-selected{--un-bg-opacity:1;background-color:rgb(34 30 61 / var(--un-bg-opacity))}.bg-soft{--un-bg-opacity:.18;background-color:rgba(155,144,230,var(--un-bg-opacity))}.bg-subtle{--un-bg-opacity:1;background-color:rgb(111 106 143 / var(--un-bg-opacity))}.bg-success{--un-bg-opacity:1;background-color:rgb(14 165 122 / var(--un-bg-opacity))}.bg-transparent{background-color:transparent}.hover\\:bg-accent:hover{--un-bg-opacity:1;background-color:rgb(155 144 230 / var(--un-bg-opacity))}.hover\\:bg-section:hover{--un-bg-opacity:1;background-color:rgb(27 24 48 / var(--un-bg-opacity))}.hover\\:bg-soft:hover{--un-bg-opacity:.18;background-color:rgba(155,144,230,var(--un-bg-opacity))}.p-1{padding:.25rem}.px{padding-left:1rem;padding-right:1rem}.px-\\[6px\\]{padding-left:6px;padding-right:6px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-\\[2px\\]{padding-top:2px;padding-bottom:2px}.py-\\[3px\\]{padding-top:3px;padding-bottom:3px}.py-\\[4px\\]{padding-top:4px;padding-bottom:4px}.py-\\[5px\\]{padding-top:5px;padding-bottom:5px}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pl-\\[10px\\]{padding-left:10px}.pl-\\[56px\\]{padding-left:56px}.pl-1{padding-left:.25rem}.pr-\\[14px\\]{padding-right:14px}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[20px\\]{font-size:20px}.text-\\[9px\\]{font-size:9px}.text-\\[\\#0ea57a\\]{--un-text-opacity:1;color:rgb(14 165 122 / var(--un-text-opacity))}.text-\\[\\#4ade80\\]{--un-text-opacity:1;color:rgb(74 222 128 / var(--un-text-opacity))}.text-\\[\\#7c6dd6\\]{--un-text-opacity:1;color:rgb(124 109 214 / var(--un-text-opacity))}.text-\\[\\#9b90e6\\],.text-accent{--un-text-opacity:1;color:rgb(155 144 230 / var(--un-text-opacity))}.text-\\[\\#d97706\\],.text-warn{--un-text-opacity:1;color:rgb(217 119 6 / var(--un-text-opacity))}.text-\\[\\#dc2626\\]{--un-text-opacity:1;color:rgb(220 38 38 / var(--un-text-opacity))}.text-muted{--un-text-opacity:1;color:rgb(199 195 230 / var(--un-text-opacity))}.text-subtle{--un-text-opacity:1;color:rgb(111 106 143 / var(--un-text-opacity))}.text-text,.hover\\:text-text:hover{--un-text-opacity:1;color:rgb(244 242 255 / var(--un-text-opacity))}.color-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.hover\\:color-muted:hover{--un-text-opacity:1;color:rgb(199 195 230 / var(--un-text-opacity))}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\\[0\\.07em\\]{letter-spacing:.07em}.tracking-\\[0\\.12em\\]{letter-spacing:.12em}.tracking-widest{letter-spacing:.1em}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.uppercase{text-transform:uppercase}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.shadow{--un-shadow:var(--un-shadow-inset) 0 1px 3px 0 var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 1px 2px -1px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-\\[0_8px_32px_rgba\\(0\\,0\\,0\\,0\\.7\\)\\]{--un-shadow:0 8px 32px var(--un-shadow-color, rgba(0, 0, 0, .7));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.hover\\:shadow-\\[0_8px_32px_rgba\\(56\\,189\\,248\\,0\\.1\\)\\]:hover{--un-shadow:0 8px 32px var(--un-shadow-color, rgba(56, 189, 248, .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}';
29
+ class Jt {
30
+ handlers = /* @__PURE__ */ new Map();
31
+ on(t, e) {
32
+ return this.handlers.has(t) || this.handlers.set(t, /* @__PURE__ */ new Set()), this.handlers.get(t).add(e), () => this.handlers.get(t)?.delete(e);
11
33
  }
12
- emit(e, o) {
13
- this.handlers.get(e)?.forEach((r) => {
14
- r(o);
34
+ emit(t, e) {
35
+ this.handlers.get(t)?.forEach((n) => {
36
+ n(e);
15
37
  });
16
38
  }
17
39
  }
18
- const H = 200;
19
- let W = 0;
20
- function T() {
21
- return `v${(++W).toString()}_${Date.now().toString(36)}`;
40
+ const Xt = 200;
41
+ let qt = 0;
42
+ function Te() {
43
+ return `v${(++qt).toString()}_${Date.now().toString(36)}`;
22
44
  }
23
- const f = class f {
24
- constructor() {
25
- this.bus = new O(), this.instanceIds = /* @__PURE__ */ new WeakMap(), this.signals = /* @__PURE__ */ new Map(), this.components = /* @__PURE__ */ new Map(), this.timeline = [];
26
- }
45
+ class z {
46
+ static _instance = null;
27
47
  static get instance() {
28
- return f._instance ??= new f(), f._instance;
48
+ return z._instance ??= new z(), z._instance;
29
49
  }
30
- getInstanceId(e) {
31
- return this.instanceIds.has(e) || this.instanceIds.set(e, T()), this.instanceIds.get(e);
50
+ bus = new Jt();
51
+ instanceIds = /* @__PURE__ */ new WeakMap();
52
+ signals = /* @__PURE__ */ new Map();
53
+ components = /* @__PURE__ */ new Map();
54
+ timeline = [];
55
+ getInstanceId(t) {
56
+ return this.instanceIds.has(t) || this.instanceIds.set(t, Te()), this.instanceIds.get(t);
32
57
  }
33
- registerSignal(e, o, r, i) {
34
- const a = this.getInstanceId(e), l = `${a}:${o}`, s = {
35
- id: l,
36
- label: o,
37
- componentId: a,
38
- componentName: i,
39
- value: r,
40
- history: [{ value: r, timestamp: Date.now() }],
58
+ registerSignal(t, e, n, o) {
59
+ const s = this.getInstanceId(t), p = `${s}:${e}`, u = {
60
+ id: p,
61
+ label: e,
62
+ componentId: s,
63
+ componentName: o,
64
+ value: n,
65
+ history: [{ value: n, timestamp: Date.now() }],
41
66
  changedAt: Date.now()
42
67
  };
43
- this.signals.set(l, s), this.bus.emit("signal:registered", s);
68
+ this.signals.set(p, u), this.bus.emit("signal:registered", u);
44
69
  }
45
- updateSignal(e, o, r, i) {
46
- const l = `${this.getInstanceId(e)}:${o}`, s = this.signals.get(l);
47
- if (!s) return;
48
- const u = [
49
- ...s.history,
50
- { value: r, timestamp: Date.now() }
51
- ].slice(-20), c = {
52
- ...s,
53
- value: r,
54
- history: u,
70
+ updateSignal(t, e, n, o) {
71
+ const p = `${this.getInstanceId(t)}:${e}`, u = this.signals.get(p);
72
+ if (!u) return;
73
+ const h = [
74
+ ...u.history,
75
+ { value: n, timestamp: Date.now() }
76
+ ].slice(-20), b = {
77
+ ...u,
78
+ value: n,
79
+ history: h,
55
80
  changedAt: Date.now()
56
81
  };
57
- this.signals.set(l, c), this.bus.emit("signal:changed", { entry: c, oldValue: i }), this.pushTimeline({
82
+ this.signals.set(p, b), this.bus.emit("signal:changed", { entry: b, oldValue: o }), this.pushTimeline({
58
83
  type: "signal:change",
59
- label: `${s.componentName}.${o}`,
60
- data: { old: i, new: r, signalId: l }
84
+ label: `${u.componentName}.${e}`,
85
+ data: { old: o, new: n, signalId: p }
61
86
  });
62
87
  }
63
- registerComponent(e, o) {
64
- const r = this.getInstanceId(e), i = {
65
- id: r,
66
- name: o,
88
+ registerComponent(t, e) {
89
+ const n = this.getInstanceId(t), o = {
90
+ id: n,
91
+ name: e,
67
92
  renderCount: 0,
68
93
  lastRenderDuration: 0,
69
94
  mountedAt: Date.now(),
70
95
  status: "mounted",
71
96
  lifecycle: []
72
97
  };
73
- this.components.set(r, i), this.bus.emit("component:registered", i);
98
+ this.components.set(n, o), this.bus.emit("component:registered", o);
74
99
  }
75
- recordRender(e, o) {
76
- const r = this.getInstanceId(e), i = this.components.get(r);
77
- i && (i.renderCount++, i.lastRenderDuration = o, this.bus.emit("component:render", { ...i }), this.pushTimeline({
100
+ recordRender(t, e) {
101
+ const n = this.getInstanceId(t), o = this.components.get(n);
102
+ o && (o.renderCount++, o.lastRenderDuration = e, this.bus.emit("component:render", { ...o }), this.pushTimeline({
78
103
  type: "component:render",
79
- label: `<${i.name}>`,
104
+ label: `<${o.name}>`,
80
105
  data: {
81
- componentId: r,
82
- duration: +o.toFixed(3),
83
- renderCount: i.renderCount
106
+ componentId: n,
107
+ duration: +e.toFixed(3),
108
+ renderCount: o.renderCount
84
109
  }
85
110
  }));
86
111
  }
87
- recordLifecycle(e, o) {
88
- const r = this.getInstanceId(e), i = this.components.get(r);
89
- if (!i) return;
90
- const a = { hook: o, timestamp: Date.now() };
91
- i.lifecycle.push(a), this.bus.emit("lifecycle", { componentId: r, name: i.name, hook: o });
92
- const l = o === "onUnmount" ? "component:unmount" : o === "onBeforeMount" ? "component:mount" : "lifecycle";
112
+ recordLifecycle(t, e) {
113
+ const n = this.getInstanceId(t), o = this.components.get(n);
114
+ if (!o) return;
115
+ const s = { hook: e, timestamp: Date.now() };
116
+ o.lifecycle.push(s), this.bus.emit("lifecycle", { componentId: n, name: o.name, hook: e });
117
+ const p = e === "onUnmount" ? "component:unmount" : e === "onBeforeMount" ? "component:mount" : "lifecycle";
93
118
  if (this.pushTimeline({
94
- type: l,
95
- label: `<${i.name}>.${o}`,
96
- data: { componentId: r, hook: o }
97
- }), o === "onUnmount") {
98
- i.status = "unmounted", this.bus.emit("component:unmount", { ...i }), this.components.delete(r);
99
- for (const [s, u] of this.signals)
100
- u.componentId === r && this.signals.delete(s);
119
+ type: p,
120
+ label: `<${o.name}>.${e}`,
121
+ data: { componentId: n, hook: e }
122
+ }), e === "onUnmount") {
123
+ o.status = "unmounted", this.bus.emit("component:unmount", { ...o }), this.components.delete(n);
124
+ for (const [u, h] of this.signals)
125
+ h.componentId === n && this.signals.delete(u);
101
126
  }
102
127
  }
103
- recordMethodCall(e, o, r, i, a, l) {
104
- const s = this.getInstanceId(e);
128
+ recordMethodCall(t, e, n, o, s, p) {
129
+ const u = this.getInstanceId(t);
105
130
  this.pushTimeline({
106
131
  type: "method:call",
107
- label: `${l}.${o}()`,
132
+ label: `${p}.${e}()`,
108
133
  data: {
109
- componentId: s,
110
- args: r,
111
- result: i,
112
- duration: +a.toFixed(3)
134
+ componentId: u,
135
+ args: n,
136
+ result: o,
137
+ duration: +s.toFixed(3)
113
138
  }
114
139
  });
115
140
  }
@@ -122,361 +147,421 @@ const f = class f {
122
147
  getTimeline() {
123
148
  return [...this.timeline];
124
149
  }
125
- getSignalsByComponent(e) {
126
- return this.getSignals().filter((o) => o.componentId === e);
150
+ getSignalsByComponent(t) {
151
+ return this.getSignals().filter((e) => e.componentId === t);
127
152
  }
128
- pushTimeline(e) {
129
- const o = {
130
- id: T(),
153
+ pushTimeline(t) {
154
+ const e = {
155
+ id: Te(),
131
156
  timestamp: Date.now(),
132
- ...e
157
+ ...t
133
158
  };
134
- this.timeline.push(o), this.timeline.length > H && this.timeline.shift(), this.bus.emit("timeline:push", o);
159
+ this.timeline.push(e), this.timeline.length > Xt && this.timeline.shift(), this.bus.emit("timeline:push", e);
135
160
  }
136
- };
137
- f._instance = null;
138
- let g = f;
139
- function z({ message: t }) {
140
- return /* @__PURE__ */ d("div", { class: "flex flex-col items-center justify-center gap-2 py-12", children: [
141
- /* @__PURE__ */ n("span", { class: "text-subtle text-[20px] leading-none select-none font-mono", children: "—" }),
142
- /* @__PURE__ */ n("p", { class: "text-subtle text-[11px] text-center leading-relaxed max-w-[200px]", children: t })
143
- ] });
144
161
  }
145
- function A({
146
- children: t,
147
- width: e = "280px"
148
- }) {
149
- return /* @__PURE__ */ n(
150
- "div",
151
- {
152
- class: "shrink-0 border-l border-border flex flex-col overflow-hidden",
153
- style: { width: e },
154
- children: t
155
- }
156
- );
162
+ var Ye, ue, sn;
163
+ Ye = [x()];
164
+ class B extends (sn = w) {
165
+ render() {
166
+ return /* @__PURE__ */ l("div", { class: "flex flex-col items-center justify-center gap-2 py-12", children: [
167
+ /* @__PURE__ */ i("span", { class: "text-subtle text-[20px] leading-none select-none font-mono", children: "—" }),
168
+ /* @__PURE__ */ i("p", { class: "text-subtle text-[11px] text-center leading-relaxed max-w-[200px]", children: this.props.message })
169
+ ] });
170
+ }
157
171
  }
158
- function M(t) {
159
- if (t === null) return "null";
160
- if (t === void 0) return "undefined";
161
- if (typeof t == "string") return `"${t}"`;
162
- if (typeof t == "object")
172
+ ue = g(sn), B = d(ue, 0, "EmptyState", Ye, B), a(ue, 1, B);
173
+ var Je, he, an;
174
+ Je = [x()];
175
+ class X extends (an = w) {
176
+ render() {
177
+ const { children: t, width: e = "280px" } = this.props;
178
+ return /* @__PURE__ */ i(
179
+ "div",
180
+ {
181
+ class: "shrink-0 border-l border-border flex flex-col overflow-hidden",
182
+ style: { width: e },
183
+ children: t
184
+ }
185
+ );
186
+ }
187
+ }
188
+ he = g(an), X = d(he, 0, "SidePanel", Je, X), a(he, 1, X);
189
+ function je(r) {
190
+ if (r === null) return "null";
191
+ if (r === void 0) return "undefined";
192
+ if (typeof r == "string") return `"${r}"`;
193
+ if (typeof r == "object")
163
194
  try {
164
- return JSON.stringify(t);
195
+ return JSON.stringify(r);
165
196
  } catch {
166
197
  return "[object]";
167
198
  }
168
- return String(t);
199
+ return String(r);
200
+ }
201
+ var Xe, ge, ln;
202
+ Xe = [x()];
203
+ class N extends (ln = w) {
204
+ render() {
205
+ const { k: t, v: e, signal: n } = this.props;
206
+ return /* @__PURE__ */ l("div", { class: "flex justify-between items-center px-3 py-2 border-b border-border gap-3", children: [
207
+ /* @__PURE__ */ i(
208
+ "span",
209
+ {
210
+ class: `text-[11px] font-mono shrink-0 ${n ? "text-accent" : "text-muted"}`,
211
+ children: t
212
+ }
213
+ ),
214
+ /* @__PURE__ */ i("span", { class: "text-[11px] text-text font-mono truncate text-right", children: e })
215
+ ] });
216
+ }
169
217
  }
170
- function v({
171
- k: t,
172
- v: e,
173
- signal: o
174
- }) {
175
- return /* @__PURE__ */ d("div", { class: "flex justify-between items-center px-3 py-2 border-b border-border gap-3", children: [
176
- /* @__PURE__ */ n(
218
+ ge = g(ln), N = d(ge, 0, "DetailRow", Xe, N), a(ge, 1, N);
219
+ var qe, be, cn;
220
+ qe = [x()];
221
+ class H extends (cn = w) {
222
+ render() {
223
+ return /* @__PURE__ */ l("div", { class: "border-b border-border", children: [
224
+ /* @__PURE__ */ i("div", { class: "px-3 py-[4px] text-[9px] text-subtle font-bold tracking-[0.12em] uppercase bg-section border-b border-border", children: this.props.label }),
225
+ this.props.children
226
+ ] });
227
+ }
228
+ }
229
+ be = g(cn), H = d(be, 0, "DetailSection", qe, H), a(be, 1, H);
230
+ var Ke, xe, dn;
231
+ Ke = [x()];
232
+ class q extends (dn = w) {
233
+ render() {
234
+ const { status: t } = this.props;
235
+ return /* @__PURE__ */ i(
177
236
  "span",
178
237
  {
179
- class: `text-[11px] font-mono shrink-0 ${o ? "text-accent" : "text-muted"}`,
180
- children: t
238
+ class: `inline-block w-[6px] h-[6px] rounded-full shrink-0 ${t === "mounted" ? "bg-success" : "bg-subtle"}`,
239
+ style: t === "mounted" ? { boxShadow: "0 0 6px rgba(14,165,122,0.7)" } : void 0
181
240
  }
182
- ),
183
- /* @__PURE__ */ n("span", { class: "text-[11px] text-text font-mono truncate text-right", children: e })
184
- ] });
185
- }
186
- function k({
187
- label: t,
188
- children: e
189
- }) {
190
- return /* @__PURE__ */ d("div", { class: "border-b border-border", children: [
191
- /* @__PURE__ */ n("div", { class: "px-3 py-[4px] text-[9px] text-subtle font-bold tracking-[0.12em] uppercase bg-section border-b border-border", children: t }),
192
- e
193
- ] });
194
- }
195
- function R({ status: t }) {
196
- return /* @__PURE__ */ n(
197
- "span",
198
- {
199
- class: `inline-block w-[6px] h-[6px] rounded-full shrink-0 ${t === "mounted" ? "bg-success" : "bg-subtle"}`,
200
- style: t === "mounted" ? { boxShadow: "0 0 6px rgba(14,165,122,0.7)" } : void 0
201
- }
202
- );
203
- }
204
- function G({
205
- entry: t,
206
- signals: e
207
- }) {
208
- return /* @__PURE__ */ d(A, { children: [
209
- /* @__PURE__ */ d("div", { class: "px-3 py-2 border-b border-border flex items-center gap-2 bg-bg shrink-0", children: [
210
- /* @__PURE__ */ n(R, { status: t.status }),
211
- /* @__PURE__ */ d("span", { class: "text-accent font-mono text-[11px] font-semibold truncate pl-1", children: [
212
- "<",
213
- t.name,
214
- ">"
215
- ] })
216
- ] }),
217
- /* @__PURE__ */ d("div", { class: "flex-1 overflow-y-auto", children: [
218
- /* @__PURE__ */ d(k, { label: "Stats", children: [
219
- /* @__PURE__ */ n(v, { k: "renders", v: String(t.renderCount) }),
220
- /* @__PURE__ */ n(
221
- v,
222
- {
223
- k: "last render",
224
- v: `${t.lastRenderDuration.toFixed(3)}ms`
225
- }
226
- ),
227
- /* @__PURE__ */ n(v, { k: "status", v: t.status })
228
- ] }),
229
- e.length > 0 && /* @__PURE__ */ n(k, { label: "State", children: e.map((o) => /* @__PURE__ */ n(
230
- v,
231
- {
232
- k: o.label,
233
- v: M(o.value),
234
- signal: !0
235
- },
236
- o.id
237
- )) }),
238
- t.lifecycle.length > 0 && /* @__PURE__ */ n(k, { label: "Lifecycle", children: [...t.lifecycle].reverse().slice(0, 20).map((o, r) => /* @__PURE__ */ d(
239
- "div",
240
- {
241
- class: "px-3 py-2 flex justify-between items-center border-b border-border",
242
- children: [
243
- /* @__PURE__ */ n("span", { class: "text-[11px] text-text font-mono", children: o.hook }),
244
- /* @__PURE__ */ n("span", { class: "text-[10px] text-subtle tabular-nums", children: new Date(o.timestamp).toLocaleTimeString() })
245
- ]
246
- },
247
- String(r)
248
- )) })
249
- ] })
250
- ] });
241
+ );
242
+ }
251
243
  }
252
- function X({
253
- entry: t,
254
- selected: e,
255
- onClick: o
256
- }) {
257
- return /* @__PURE__ */ d(
258
- "div",
259
- {
260
- onClick: o,
261
- class: () => `relative flex items-center gap-2 px-3 py-2 cursor-pointer border-b border-border transition-colors duration-100 ${e() ? "bg-selected" : "hover:bg-section"}`,
262
- children: [
263
- () => e() && /* @__PURE__ */ n("span", { class: "absolute left-0 top-0 bottom-0 w-[2px] bg-accent rounded-r" }),
264
- /* @__PURE__ */ n(R, { status: t.status }),
265
- /* @__PURE__ */ d("span", { class: "text-accent font-mono text-[11px] flex-1 truncate pl-1", children: [
244
+ xe = g(dn), q = d(xe, 0, "StatusDot", Ke, q), a(xe, 1, q);
245
+ var Ze, me, pn;
246
+ Ze = [x()];
247
+ class K extends (pn = w) {
248
+ render() {
249
+ const { entry: t, signals: e } = this.props;
250
+ return /* @__PURE__ */ l(X, { children: [
251
+ /* @__PURE__ */ l("div", { class: "px-3 py-2 border-b border-border flex items-center gap-2 bg-bg shrink-0", children: [
252
+ /* @__PURE__ */ i(q, { status: t.status }),
253
+ /* @__PURE__ */ l("span", { class: "text-accent font-mono text-[11px] font-semibold truncate pl-1", children: [
266
254
  "<",
267
255
  t.name,
268
256
  ">"
257
+ ] })
258
+ ] }),
259
+ /* @__PURE__ */ l("div", { class: "flex-1 overflow-y-auto", children: [
260
+ /* @__PURE__ */ l(H, { label: "Stats", children: [
261
+ /* @__PURE__ */ i(N, { k: "renders", v: String(t.renderCount) }),
262
+ /* @__PURE__ */ i(
263
+ N,
264
+ {
265
+ k: "last render",
266
+ v: `${t.lastRenderDuration.toFixed(3)}ms`
267
+ }
268
+ ),
269
+ /* @__PURE__ */ i(N, { k: "status", v: t.status })
269
270
  ] }),
270
- /* @__PURE__ */ d("span", { class: "text-muted text-[11px] tabular-nums", children: [
271
- "×",
272
- t.renderCount
273
- ] }),
274
- /* @__PURE__ */ d(
275
- "span",
271
+ e.length > 0 && /* @__PURE__ */ i(H, { label: "State", children: e.map((n) => /* @__PURE__ */ i(
272
+ N,
273
+ {
274
+ k: n.label,
275
+ v: je(n.value),
276
+ signal: !0
277
+ },
278
+ n.id
279
+ )) }),
280
+ t.lifecycle.length > 0 && /* @__PURE__ */ i(H, { label: "Lifecycle", children: [...t.lifecycle].reverse().slice(0, 20).map((n, o) => /* @__PURE__ */ l(
281
+ "div",
276
282
  {
277
- class: `text-[10px] tabular-nums w-12 text-right ${t.lastRenderDuration > 16 ? "text-warn" : "text-subtle"}`,
283
+ class: "px-3 py-2 flex justify-between items-center border-b border-border",
278
284
  children: [
279
- t.lastRenderDuration.toFixed(1),
280
- "ms"
285
+ /* @__PURE__ */ i("span", { class: "text-[11px] text-text font-mono", children: n.hook }),
286
+ /* @__PURE__ */ i("span", { class: "text-[10px] text-subtle tabular-nums", children: new Date(n.timestamp).toLocaleTimeString() })
281
287
  ]
282
- }
283
- )
284
- ]
285
- }
286
- );
288
+ },
289
+ String(o)
290
+ )) })
291
+ ] })
292
+ ] });
293
+ }
287
294
  }
288
- function Y({ registry: t }) {
289
- const e = b(t.getComponents()), o = b(null), r = b([]), i = P(() => {
290
- const l = o();
291
- r.set(l ? t.getSignalsByComponent(l) : []);
292
- });
293
- let a = [];
294
- return C(() => {
295
- const l = () => {
296
- e.set(t.getComponents());
297
- const s = U(o);
298
- s && r.set(t.getSignalsByComponent(s));
295
+ me = g(pn), K = d(me, 0, "ComponentDetail", Ze, K), a(me, 1, K);
296
+ var Qe, fe, un;
297
+ Qe = [x()];
298
+ class Z extends (un = w) {
299
+ render() {
300
+ const { entry: t, selected: e, onClick: n } = this.props;
301
+ return /* @__PURE__ */ l(
302
+ "div",
303
+ {
304
+ onClick: n,
305
+ class: () => `relative flex items-center gap-2 px-3 py-2 cursor-pointer border-b border-border transition-colors duration-100 ${e() ? "bg-selected" : "hover:bg-section"}`,
306
+ children: [
307
+ () => e() && /* @__PURE__ */ i("span", { class: "absolute left-0 top-0 bottom-0 w-[2px] bg-accent rounded-r" }),
308
+ /* @__PURE__ */ i(q, { status: t.status }),
309
+ /* @__PURE__ */ l("span", { class: "text-accent font-mono text-[11px] flex-1 truncate pl-1", children: [
310
+ "<",
311
+ t.name,
312
+ ">"
313
+ ] }),
314
+ /* @__PURE__ */ l("span", { class: "text-muted text-[11px] tabular-nums", children: [
315
+ "×",
316
+ t.renderCount
317
+ ] }),
318
+ /* @__PURE__ */ l(
319
+ "span",
320
+ {
321
+ class: `text-[10px] tabular-nums w-12 text-right ${t.lastRenderDuration > 16 ? "text-warn" : "text-subtle"}`,
322
+ children: [
323
+ t.lastRenderDuration.toFixed(1),
324
+ "ms"
325
+ ]
326
+ }
327
+ )
328
+ ]
329
+ }
330
+ );
331
+ }
332
+ }
333
+ fe = g(un), Z = d(fe, 0, "ComponentRow", Qe, Z), a(fe, 1, Z);
334
+ var Pe, Ve, et, tt, _;
335
+ tt = [x()];
336
+ class A extends (et = G, Ve = [k()], Pe = [k()], et) {
337
+ constructor() {
338
+ super(...arguments);
339
+ f(this, "components", a(_, 8, this, [])), a(_, 11, this);
340
+ f(this, "selectedId", a(_, 12, this, null)), a(_, 15, this);
341
+ f(this, "_handlers", []);
342
+ }
343
+ get registry() {
344
+ return this.props.registry;
345
+ }
346
+ onMount() {
347
+ this.components = this.registry.getComponents();
348
+ const e = () => {
349
+ this.components = this.registry.getComponents();
299
350
  };
300
- a = [
351
+ this._handlers = [
301
352
  "component:registered",
302
353
  "component:render",
303
354
  "component:unmount",
304
355
  "lifecycle",
305
356
  "signal:registered",
306
357
  "signal:changed"
307
- ].map((s) => t.bus.on(s, l));
308
- }), I(() => {
309
- i(), a.forEach((l) => {
310
- l();
358
+ ].map((n) => this.registry.bus.on(n, e));
359
+ }
360
+ onUnmount() {
361
+ this._handlers.forEach((e) => {
362
+ e();
311
363
  });
312
- }), /* @__PURE__ */ d("div", { class: "flex h-full overflow-hidden", children: [
313
- /* @__PURE__ */ d("div", { class: "flex-1 flex flex-col overflow-hidden min-w-0", children: [
314
- /* @__PURE__ */ d("div", { class: "flex items-center px-3 h-7 text-[9px] text-subtle font-bold tracking-[0.12em] uppercase border-b border-border bg-section gap-2 shrink-0", children: [
315
- /* @__PURE__ */ n("span", { class: "flex-1", children: "Component" }),
316
- /* @__PURE__ */ n("span", { children: "Renders" }),
317
- /* @__PURE__ */ n("span", { class: "w-12 text-right", children: "Last" })
364
+ }
365
+ render() {
366
+ const { registry: e } = this;
367
+ return /* @__PURE__ */ l("div", { class: "flex h-full overflow-hidden", children: [
368
+ /* @__PURE__ */ l("div", { class: "flex-1 flex flex-col overflow-hidden min-w-0", children: [
369
+ /* @__PURE__ */ l("div", { class: "flex items-center px-3 h-7 text-[9px] text-subtle font-bold tracking-[0.12em] uppercase border-b border-border bg-section gap-2 shrink-0", children: [
370
+ /* @__PURE__ */ i("span", { class: "flex-1", children: "Component" }),
371
+ /* @__PURE__ */ i("span", { children: "Renders" }),
372
+ /* @__PURE__ */ i("span", { class: "w-12 text-right", children: "Last" })
373
+ ] }),
374
+ /* @__PURE__ */ i("div", { class: "flex-1 overflow-y-auto", children: () => this.components.length === 0 ? /* @__PURE__ */ i(B, { message: "No components tracked. Add @Trace() to component classes." }) : this.components.map((n) => /* @__PURE__ */ i(
375
+ Z,
376
+ {
377
+ entry: n,
378
+ selected: () => this.selectedId === n.id,
379
+ onClick: () => {
380
+ this.selectedId = this.selectedId === n.id ? null : n.id;
381
+ }
382
+ },
383
+ n.id
384
+ )) })
318
385
  ] }),
319
- /* @__PURE__ */ n("div", { class: "flex-1 overflow-y-auto", children: () => e().length === 0 ? /* @__PURE__ */ n(z, { message: "No components tracked. Add @Trace() to component classes." }) : e().map((l) => /* @__PURE__ */ n(
320
- X,
321
- {
322
- entry: l,
323
- selected: () => o() === l.id,
324
- onClick: () => {
325
- o.update((s) => s === l.id ? null : l.id);
326
- }
327
- },
328
- l.id
329
- )) })
330
- ] }),
331
- () => {
332
- const l = o(), s = l ? e().find((u) => u.id === l) ?? null : null;
333
- return s ? /* @__PURE__ */ n(G, { entry: s, signals: r() }) : null;
334
- }
335
- ] });
386
+ () => {
387
+ const n = this.selectedId, o = n ? this.components.find((p) => p.id === n) ?? null : null, s = n ? e.getSignalsByComponent(n) : [];
388
+ return o ? /* @__PURE__ */ i(K, { entry: o, signals: s }) : null;
389
+ }
390
+ ] });
391
+ }
336
392
  }
337
- const J = {
393
+ _ = g(et), d(_, 5, "components", Ve, A), d(_, 5, "selectedId", Pe, A), A = d(_, 0, "ComponentsTab", tt, A), a(_, 1, A);
394
+ const Kt = {
338
395
  id: "components",
339
396
  label: "Components",
340
- component: Y
397
+ component: A
341
398
  };
342
- function q({
343
- placeholder: t,
344
- onInput: e
345
- }) {
346
- return /* @__PURE__ */ n(
347
- "input",
348
- {
349
- type: "text",
350
- placeholder: t,
351
- class: "w-full bg-input border border-border rounded-lg text-text text-[11px] px-3 py-[5px] outline-none box-border transition-shadow duration-150",
352
- onInput: (o) => {
353
- e(o.target.value);
399
+ var nt, we, hn;
400
+ nt = [x()];
401
+ class Q extends (hn = w) {
402
+ render() {
403
+ const { placeholder: t, onInput: e } = this.props;
404
+ return /* @__PURE__ */ i(
405
+ "input",
406
+ {
407
+ type: "text",
408
+ placeholder: t,
409
+ class: "w-full bg-input border border-border rounded-lg text-text text-[11px] px-3 py-[5px] outline-none box-border transition-shadow duration-150",
410
+ onInput: (n) => {
411
+ e(n.target.value);
412
+ }
354
413
  }
355
- }
356
- );
414
+ );
415
+ }
357
416
  }
358
- function K({
359
- label: t,
360
- children: e
361
- }) {
362
- return /* @__PURE__ */ d("div", { class: "border-b border-border", children: [
363
- /* @__PURE__ */ n("div", { class: "px-3 py-[4px] text-[9px] text-subtle font-bold tracking-[0.12em] uppercase bg-section border-b border-border", children: t }),
364
- e
365
- ] });
417
+ we = g(hn), Q = d(we, 0, "SearchInput", nt, Q), a(we, 1, Q);
418
+ var rt, ye, gn;
419
+ rt = [x()];
420
+ class P extends (gn = w) {
421
+ render() {
422
+ return /* @__PURE__ */ l("div", { class: "border-b border-border", children: [
423
+ /* @__PURE__ */ i("div", { class: "px-3 py-[4px] text-[9px] text-subtle font-bold tracking-[0.12em] uppercase bg-section border-b border-border", children: this.props.label }),
424
+ this.props.children
425
+ ] });
426
+ }
366
427
  }
367
- function L(t, e) {
368
- const o = e ? ` ${e}` : "", r = Date.now() - t;
369
- return r < 1e3 ? `${r.toString()}ms${o}` : r < 6e4 ? `${(r / 1e3).toFixed(1)}s${o}` : `${Math.floor(r / 6e4).toString()}m${o}`;
428
+ ye = g(gn), P = d(ye, 0, "PanelSection", rt, P), a(ye, 1, P);
429
+ function Ee(r, t) {
430
+ const e = t ? ` ${t}` : "", n = Date.now() - r;
431
+ return n < 1e3 ? `${n.toString()}ms${e}` : n < 6e4 ? `${(n / 1e3).toFixed(1)}s${e}` : `${Math.floor(n / 6e4).toString()}m${e}`;
370
432
  }
371
- function Z({ entry: t }) {
372
- return /* @__PURE__ */ n(A, { width: "260px", children: /* @__PURE__ */ n(K, { label: "History", children: /* @__PURE__ */ d("div", { class: "overflow-y-auto", children: [
373
- [...t.history].reverse().map((e, o) => /* @__PURE__ */ d(
433
+ var ot, ve, bn;
434
+ ot = [x()];
435
+ class V extends (bn = w) {
436
+ render() {
437
+ const { entry: t } = this.props;
438
+ return /* @__PURE__ */ i(X, { width: "260px", children: /* @__PURE__ */ i(P, { label: "History", children: /* @__PURE__ */ l("div", { class: "overflow-y-auto", children: [
439
+ [...t.history].reverse().map((e, n) => /* @__PURE__ */ l(
440
+ "div",
441
+ {
442
+ class: "px-3 py-2 border-b border-border flex justify-between items-center gap-3",
443
+ children: [
444
+ /* @__PURE__ */ i("span", { class: "font-mono text-[11px] text-text truncate", children: je(e.value) }),
445
+ /* @__PURE__ */ i("span", { class: "text-[10px] text-subtle shrink-0 tabular-nums", children: Ee(e.timestamp, "ago") })
446
+ ]
447
+ },
448
+ String(n)
449
+ )),
450
+ t.history.length === 0 && /* @__PURE__ */ i("p", { class: "px-3 py-6 text-[11px] text-subtle text-center", children: "No history yet." })
451
+ ] }) }) });
452
+ }
453
+ }
454
+ ve = g(bn), V = d(ve, 0, "SignalDetail", ot, V), a(ve, 1, V);
455
+ var it, ke, xn;
456
+ it = [x()];
457
+ class ee extends (xn = w) {
458
+ render() {
459
+ const { entry: t, selected: e, onClick: n } = this.props;
460
+ return /* @__PURE__ */ l(
374
461
  "div",
375
462
  {
376
- class: "px-3 py-2 border-b border-border flex justify-between items-center gap-3",
463
+ onClick: n,
464
+ class: `relative grid grid-cols-[1.2fr_0.8fr_1fr_auto] items-center px-3 py-2 cursor-pointer border-b border-border transition-colors duration-100 ${e ? "bg-selected" : "hover:bg-section"}`,
377
465
  children: [
378
- /* @__PURE__ */ n("span", { class: "font-mono text-[11px] text-text truncate", children: M(e.value) }),
379
- /* @__PURE__ */ n("span", { class: "text-[10px] text-subtle shrink-0 tabular-nums", children: L(e.timestamp, "ago") })
466
+ e && /* @__PURE__ */ i("span", { class: "absolute left-0 top-0 bottom-0 w-[2px] bg-accent rounded-r" }),
467
+ /* @__PURE__ */ i("span", { class: "text-accent font-mono text-[11px] truncate pl-1", children: t.label }),
468
+ /* @__PURE__ */ i("span", { class: "text-muted text-[11px] truncate", children: t.componentName }),
469
+ /* @__PURE__ */ i("span", { class: "text-text font-mono text-[11px] truncate", children: je(t.value) }),
470
+ /* @__PURE__ */ i("span", { class: "text-subtle text-[10px] text-right tabular-nums", children: Ee(t.changedAt, "ago") })
380
471
  ]
381
- },
382
- String(o)
383
- )),
384
- t.history.length === 0 && /* @__PURE__ */ n("p", { class: "px-3 py-6 text-[11px] text-subtle text-center", children: "No history yet." })
385
- ] }) }) });
386
- }
387
- function Q({
388
- entry: t,
389
- selected: e,
390
- onClick: o
391
- }) {
392
- return /* @__PURE__ */ d(
393
- "div",
394
- {
395
- onClick: o,
396
- class: `relative grid grid-cols-[1.2fr_0.8fr_1fr_auto] items-center px-3 py-2 cursor-pointer border-b border-border transition-colors duration-100 ${e ? "bg-selected" : "hover:bg-section"}`,
397
- children: [
398
- e && /* @__PURE__ */ n("span", { class: "absolute left-0 top-0 bottom-0 w-[2px] bg-accent rounded-r" }),
399
- /* @__PURE__ */ n("span", { class: "text-accent font-mono text-[11px] truncate pl-1", children: t.label }),
400
- /* @__PURE__ */ n("span", { class: "text-muted text-[11px] truncate", children: t.componentName }),
401
- /* @__PURE__ */ n("span", { class: "text-text font-mono text-[11px] truncate", children: M(t.value) }),
402
- /* @__PURE__ */ n("span", { class: "text-subtle text-[10px] text-right tabular-nums", children: L(t.changedAt, "ago") })
403
- ]
404
- }
405
- );
472
+ }
473
+ );
474
+ }
406
475
  }
407
- function V({ registry: t }) {
408
- const e = b(t.getSignals()), o = b(""), r = b(null);
409
- let i = [];
410
- return C(() => {
411
- i = [
412
- t.bus.on("signal:registered", () => {
413
- e.set(t.getSignals());
476
+ ke = g(xn), ee = d(ke, 0, "SignalRow", it, ee), a(ke, 1, ee);
477
+ var st, at, lt, ct, dt, M;
478
+ dt = [x()];
479
+ class E extends (ct = G, lt = [k()], at = [k()], st = [k()], ct) {
480
+ constructor() {
481
+ super(...arguments);
482
+ f(this, "signals", a(M, 8, this, [])), a(M, 11, this);
483
+ f(this, "search", a(M, 12, this, "")), a(M, 15, this);
484
+ f(this, "selectedId", a(M, 16, this, null)), a(M, 19, this);
485
+ f(this, "_handlers", []);
486
+ }
487
+ get registry() {
488
+ return this.props.registry;
489
+ }
490
+ onMount() {
491
+ this.signals = this.registry.getSignals(), this._handlers = [
492
+ this.registry.bus.on("signal:registered", () => {
493
+ this.signals = this.registry.getSignals();
414
494
  }),
415
- t.bus.on("signal:changed", () => {
416
- e.set(t.getSignals());
495
+ this.registry.bus.on("signal:changed", () => {
496
+ this.signals = this.registry.getSignals();
417
497
  })
418
498
  ];
419
- }), I(() => {
420
- i.forEach((a) => {
421
- a();
499
+ }
500
+ onUnmount() {
501
+ this._handlers.forEach((e) => {
502
+ e();
422
503
  });
423
- }), /* @__PURE__ */ d("div", { class: "flex h-full overflow-hidden", children: [
424
- /* @__PURE__ */ d("div", { class: "flex-1 flex flex-col overflow-hidden min-w-0", children: [
425
- /* @__PURE__ */ n("div", { class: "px-3 py-2 border-b border-border bg-bg shrink-0", children: /* @__PURE__ */ n(
426
- q,
427
- {
428
- placeholder: "Search signals…",
429
- onInput: (a) => {
430
- o.set(a);
431
- }
432
- }
433
- ) }),
434
- /* @__PURE__ */ d("div", { class: "grid grid-cols-[1.2fr_0.8fr_1fr_auto] items-center px-3 h-7 text-[9px] text-subtle font-bold tracking-[0.12em] uppercase border-b border-border bg-section gap-2 shrink-0", children: [
435
- /* @__PURE__ */ n("span", { children: "Signal" }),
436
- /* @__PURE__ */ n("span", { children: "Component" }),
437
- /* @__PURE__ */ n("span", { children: "Value" }),
438
- /* @__PURE__ */ n("span", { children: "Age" })
439
- ] }),
440
- /* @__PURE__ */ n("div", { class: "flex-1 overflow-y-auto", children: () => {
441
- const a = o().toLowerCase(), l = a === "" ? e() : e().filter(
442
- (s) => s.label.toLowerCase().includes(a) || s.componentName.toLowerCase().includes(a)
443
- );
444
- return l.length === 0 ? /* @__PURE__ */ n(
445
- z,
446
- {
447
- message: e().length === 0 ? "No signals tracked. Add @Debug() on top of @State() properties." : "No signals match your search."
448
- }
449
- ) : l.map((s) => /* @__PURE__ */ n(
504
+ }
505
+ render() {
506
+ return /* @__PURE__ */ l("div", { class: "flex h-full overflow-hidden", children: [
507
+ /* @__PURE__ */ l("div", { class: "flex-1 flex flex-col overflow-hidden min-w-0", children: [
508
+ /* @__PURE__ */ i("div", { class: "px-3 py-2 border-b border-border bg-bg shrink-0", children: /* @__PURE__ */ i(
450
509
  Q,
451
510
  {
452
- entry: s,
453
- selected: r() === s.id,
454
- onClick: () => {
455
- r.update((u) => u === s.id ? null : s.id);
511
+ placeholder: "Search signals…",
512
+ onInput: (e) => {
513
+ this.search = e;
456
514
  }
457
- },
458
- s.id
459
- ));
460
- } })
461
- ] }),
462
- () => {
463
- const a = r(), l = a ? e().find((s) => s.id === a) ?? null : null;
464
- return l ? /* @__PURE__ */ n(Z, { entry: l }) : null;
465
- }
466
- ] });
515
+ }
516
+ ) }),
517
+ /* @__PURE__ */ l("div", { class: "grid grid-cols-[1.2fr_0.8fr_1fr_auto] items-center px-3 h-7 text-[9px] text-subtle font-bold tracking-[0.12em] uppercase border-b border-border bg-section gap-2 shrink-0", children: [
518
+ /* @__PURE__ */ i("span", { children: "Signal" }),
519
+ /* @__PURE__ */ i("span", { children: "Component" }),
520
+ /* @__PURE__ */ i("span", { children: "Value" }),
521
+ /* @__PURE__ */ i("span", { children: "Age" })
522
+ ] }),
523
+ /* @__PURE__ */ i("div", { class: "flex-1 overflow-y-auto", children: () => {
524
+ const e = this.search.toLowerCase(), n = e === "" ? this.signals : this.signals.filter(
525
+ (o) => o.label.toLowerCase().includes(e) || o.componentName.toLowerCase().includes(e)
526
+ );
527
+ return n.length === 0 ? /* @__PURE__ */ i(
528
+ B,
529
+ {
530
+ message: this.signals.length === 0 ? "No signals tracked. Add @Debug() on top of @State() properties." : "No signals match your search."
531
+ }
532
+ ) : n.map((o) => /* @__PURE__ */ i(
533
+ ee,
534
+ {
535
+ entry: o,
536
+ selected: this.selectedId === o.id,
537
+ onClick: () => {
538
+ this.selectedId = this.selectedId === o.id ? null : o.id;
539
+ }
540
+ },
541
+ o.id
542
+ ));
543
+ } })
544
+ ] }),
545
+ () => {
546
+ const e = this.selectedId, n = e ? this.signals.find((o) => o.id === e) ?? null : null;
547
+ return n ? /* @__PURE__ */ i(V, { entry: n }) : null;
548
+ }
549
+ ] });
550
+ }
467
551
  }
468
- const ee = {
552
+ M = g(ct), d(M, 5, "signals", lt, E), d(M, 5, "search", at, E), d(M, 5, "selectedId", st, E), E = d(M, 0, "SignalsTab", dt, E), a(M, 1, E);
553
+ const Zt = {
469
554
  id: "signals",
470
555
  label: "Signals",
471
- component: V
472
- }, te = {
556
+ component: E
557
+ }, Qt = {
473
558
  "signal:change": { label: "signal", cls: "text-[#9b90e6] bg-[rgba(155,144,230,0.14)]" },
474
559
  "component:render": { label: "render", cls: "text-[#4ade80] bg-[rgba(74,222,128,0.12)]" },
475
560
  "component:mount": { label: "mount", cls: "text-[#0ea57a] bg-[rgba(14,165,122,0.14)]" },
476
561
  "component:unmount": { label: "unmount", cls: "text-[#dc2626] bg-[rgba(220,38,38,0.14)]" },
477
562
  lifecycle: { label: "lifecycle", cls: "text-[#d97706] bg-[rgba(217,119,6,0.14)]" },
478
563
  "method:call": { label: "method", cls: "text-[#7c6dd6] bg-[rgba(124,109,214,0.14)]" }
479
- }, ne = [
564
+ }, Pt = [
480
565
  { value: "all", label: "All" },
481
566
  { value: "signal:change", label: "Signals" },
482
567
  { value: "component:render", label: "Renders" },
@@ -484,568 +569,658 @@ const ee = {
484
569
  { value: "lifecycle", label: "Lifecycle" },
485
570
  { value: "method:call", label: "Methods" }
486
571
  ];
487
- function oe({ type: t }) {
488
- const e = te[t];
489
- return /* @__PURE__ */ n(
490
- "span",
491
- {
492
- class: `text-[9px] px-[6px] py-[2px] rounded font-bold uppercase tracking-[0.07em] shrink-0 ${e.cls}`,
493
- children: e.label
494
- }
495
- );
496
- }
497
- function re({ entry: t }) {
498
- const e = b(!1), o = Object.keys(t.data).length > 0;
499
- return /* @__PURE__ */ d("div", { class: "border-b border-border", children: [
500
- /* @__PURE__ */ d(
501
- "div",
572
+ var pt, ze, mn;
573
+ pt = [x()];
574
+ class te extends (mn = w) {
575
+ render() {
576
+ const t = Qt[this.props.type];
577
+ return /* @__PURE__ */ i(
578
+ "span",
502
579
  {
503
- onClick: () => {
504
- o && e.update((r) => !r);
505
- },
506
- class: `flex items-center gap-2 px-3 py-2 transition-colors duration-100 ${o ? "cursor-pointer hover:bg-section" : "cursor-default"}`,
507
- children: [
508
- /* @__PURE__ */ n("span", { class: "text-subtle text-[10px] w-10 shrink-0 text-right tabular-nums font-mono", children: L(t.timestamp) }),
509
- /* @__PURE__ */ n(oe, { type: t.type }),
510
- /* @__PURE__ */ n("span", { class: "flex-1 text-text font-mono text-[11px] truncate", children: t.label }),
511
- o && /* @__PURE__ */ n("span", { class: "text-subtle text-[11px] shrink-0 w-4 text-center", children: () => e() ? "▾" : "▸" })
512
- ]
580
+ class: `text-[9px] px-[6px] py-[2px] rounded font-bold uppercase tracking-[0.07em] shrink-0 ${t.cls}`,
581
+ children: t.label
513
582
  }
514
- ),
515
- () => e() && o ? /* @__PURE__ */ n("div", { class: "px-3 py-2 pl-[56px] font-mono text-[11px] bg-section border-t border-border", children: Object.entries(t.data).map(([r, i]) => /* @__PURE__ */ d("div", { class: "flex gap-3 py-[3px]", children: [
516
- /* @__PURE__ */ d("span", { class: "text-accent shrink-0", children: [
517
- r,
518
- ":"
519
- ] }),
520
- /* @__PURE__ */ n("span", { class: "text-muted truncate", children: typeof i == "object" ? JSON.stringify(i) : String(i) })
521
- ] }, r)) }) : null
522
- ] });
583
+ );
584
+ }
523
585
  }
524
- function ie({ registry: t }) {
525
- const e = b(t.getTimeline()), o = b("all"), r = b(!1);
526
- let i = [];
527
- return C(() => {
528
- i = [
529
- t.bus.on("timeline:push", () => {
530
- r() || e.set(t.getTimeline());
531
- })
532
- ];
533
- }), I(() => {
534
- i.forEach((a) => {
535
- a();
536
- });
537
- }), /* @__PURE__ */ d("div", { class: "flex flex-col h-full overflow-hidden", children: [
538
- /* @__PURE__ */ d("div", { class: "flex items-center gap-[3px] px-2 py-2 border-b border-border bg-bg shrink-0 flex-wrap", children: [
539
- ne.map((a) => /* @__PURE__ */ n(
540
- "button",
541
- {
542
- onClick: () => {
543
- o.set(a.value);
544
- },
545
- class: () => o() === a.value ? "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans bg-soft text-accent font-semibold" : "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans text-muted hover:text-text hover:bg-section transition-colors duration-150",
546
- children: a.label
547
- },
548
- a.value
549
- )),
550
- /* @__PURE__ */ n("div", { class: "flex-1" }),
551
- /* @__PURE__ */ n(
552
- "button",
586
+ ze = g(mn), te = d(ze, 0, "Badge", pt, te), a(ze, 1, te);
587
+ var ut, ht, gt, U;
588
+ gt = [x()];
589
+ class J extends (ht = G, ut = [k()], ht) {
590
+ constructor() {
591
+ super(...arguments);
592
+ f(this, "open", a(U, 8, this, !1)), a(U, 11, this);
593
+ }
594
+ render() {
595
+ const { entry: e } = this.props, n = Object.keys(e.data).length > 0;
596
+ return /* @__PURE__ */ l("div", { class: "border-b border-border", children: [
597
+ /* @__PURE__ */ l(
598
+ "div",
553
599
  {
554
600
  onClick: () => {
555
- r() && e.set(t.getTimeline()), r.update((a) => !a);
601
+ n && (this.open = !this.open);
556
602
  },
557
- class: () => `text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans border border-border transition-colors duration-150 ${r() ? "text-warn border-warn" : "text-muted hover:text-text"}`,
558
- children: () => r() ? "Resume" : "Pause"
603
+ class: `flex items-center gap-2 px-3 py-2 transition-colors duration-100 ${n ? "cursor-pointer hover:bg-section" : "cursor-default"}`,
604
+ children: [
605
+ /* @__PURE__ */ i("span", { class: "text-subtle text-[10px] w-10 shrink-0 text-right tabular-nums font-mono", children: Ee(e.timestamp) }),
606
+ /* @__PURE__ */ i(te, { type: e.type }),
607
+ /* @__PURE__ */ i("span", { class: "flex-1 text-text font-mono text-[11px] truncate", children: e.label }),
608
+ n && /* @__PURE__ */ i("span", { class: "text-subtle text-[11px] shrink-0 w-4 text-center", children: () => this.open ? "▾" : "▸" })
609
+ ]
559
610
  }
560
611
  ),
561
- /* @__PURE__ */ n(
562
- "button",
563
- {
564
- onClick: () => {
565
- e.set([]);
612
+ () => this.open && n ? /* @__PURE__ */ i("div", { class: "px-3 py-2 pl-[56px] font-mono text-[11px] bg-section border-t border-border", children: Object.entries(e.data).map(([o, s]) => /* @__PURE__ */ l("div", { class: "flex gap-3 py-[3px]", children: [
613
+ /* @__PURE__ */ l("span", { class: "text-accent shrink-0", children: [
614
+ o,
615
+ ":"
616
+ ] }),
617
+ /* @__PURE__ */ i("span", { class: "text-muted truncate", children: typeof s == "object" ? JSON.stringify(s) : String(s) })
618
+ ] }, o)) }) : null
619
+ ] });
620
+ }
621
+ }
622
+ U = g(ht), d(U, 5, "open", ut, J), J = d(U, 0, "TimelineRow", gt, J), a(U, 1, J);
623
+ var bt, xt, mt, ft, wt, S;
624
+ wt = [x()];
625
+ class D extends (ft = G, mt = [k()], xt = [k()], bt = [k()], ft) {
626
+ constructor() {
627
+ super(...arguments);
628
+ f(this, "entries", a(S, 8, this, [])), a(S, 11, this);
629
+ f(this, "filter", a(S, 12, this, "all")), a(S, 15, this);
630
+ f(this, "paused", a(S, 16, this, !1)), a(S, 19, this);
631
+ f(this, "_handlers", []);
632
+ }
633
+ get registry() {
634
+ return this.props.registry;
635
+ }
636
+ onMount() {
637
+ this.entries = this.registry.getTimeline(), this._handlers = [
638
+ this.registry.bus.on("timeline:push", () => {
639
+ this.paused || (this.entries = this.registry.getTimeline());
640
+ })
641
+ ];
642
+ }
643
+ onUnmount() {
644
+ this._handlers.forEach((e) => {
645
+ e();
646
+ });
647
+ }
648
+ render() {
649
+ return /* @__PURE__ */ l("div", { class: "flex flex-col h-full overflow-hidden", children: [
650
+ /* @__PURE__ */ l("div", { class: "flex items-center gap-[3px] px-2 py-2 border-b border-border bg-bg shrink-0 flex-wrap", children: [
651
+ Pt.map((e) => /* @__PURE__ */ i(
652
+ "button",
653
+ {
654
+ onClick: () => {
655
+ this.filter = e.value;
656
+ },
657
+ class: () => this.filter === e.value ? "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans bg-soft text-accent font-semibold" : "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans text-muted hover:text-text hover:bg-section transition-colors duration-150",
658
+ children: e.label
566
659
  },
567
- class: "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans border border-border text-muted hover:text-text transition-colors duration-150",
568
- children: "Clear"
569
- }
570
- )
571
- ] }),
572
- /* @__PURE__ */ n("div", { class: "flex-1 overflow-y-auto", children: () => {
573
- const a = o(), l = a === "all" ? e() : e().filter(
574
- (s) => s.type === a || a === "component:mount" && s.type === "component:unmount"
575
- );
576
- return l.length === 0 ? /* @__PURE__ */ n(z, { message: "No events yet. Interact with your app to see the timeline." }) : [...l].reverse().map((s) => /* @__PURE__ */ n(re, { entry: s }, s.id));
577
- } })
578
- ] });
660
+ e.value
661
+ )),
662
+ /* @__PURE__ */ i("div", { class: "flex-1" }),
663
+ /* @__PURE__ */ i(
664
+ "button",
665
+ {
666
+ onClick: () => {
667
+ this.paused && (this.entries = this.registry.getTimeline()), this.paused = !this.paused;
668
+ },
669
+ class: () => `text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans border border-border transition-colors duration-150 ${this.paused ? "text-warn border-warn" : "text-muted hover:text-text"}`,
670
+ children: () => this.paused ? "Resume" : "Pause"
671
+ }
672
+ ),
673
+ /* @__PURE__ */ i(
674
+ "button",
675
+ {
676
+ onClick: () => {
677
+ this.entries = [];
678
+ },
679
+ class: "text-[11px] px-2 py-[3px] rounded cursor-pointer font-sans border border-border text-muted hover:text-text transition-colors duration-150",
680
+ children: "Clear"
681
+ }
682
+ )
683
+ ] }),
684
+ /* @__PURE__ */ i("div", { class: "flex-1 overflow-y-auto", children: () => {
685
+ const e = this.filter, n = e === "all" ? this.entries : this.entries.filter(
686
+ (o) => o.type === e || e === "component:mount" && o.type === "component:unmount"
687
+ );
688
+ return n.length === 0 ? /* @__PURE__ */ i(B, { message: "No events yet. Interact with your app to see the timeline." }) : [...n].reverse().map((o) => /* @__PURE__ */ i(J, { entry: o }, o.id));
689
+ } })
690
+ ] });
691
+ }
579
692
  }
580
- const se = {
693
+ S = g(ft), d(S, 5, "entries", mt, D), d(S, 5, "filter", xt, D), d(S, 5, "paused", bt, D), D = d(S, 0, "TimelineTab", wt, D), a(S, 1, D);
694
+ const Vt = {
581
695
  id: "timeline",
582
696
  label: "Timeline",
583
- component: ie
584
- }, ae = '*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}';
585
- function le() {
586
- return /* @__PURE__ */ d(
587
- "svg",
588
- {
589
- xmlns: "http://www.w3.org/2000/svg",
590
- width: "24",
591
- height: "24",
592
- viewBox: "0 0 24 24",
593
- fill: "none",
594
- stroke: "currentColor",
595
- "stroke-width": "2",
596
- "stroke-linecap": "round",
597
- "stroke-linejoin": "round",
598
- class: "lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical",
599
- children: [
600
- /* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "1" }),
601
- /* @__PURE__ */ n("circle", { cx: "12", cy: "5", r: "1" }),
602
- /* @__PURE__ */ n("circle", { cx: "12", cy: "19", r: "1" })
603
- ]
604
- }
605
- );
697
+ component: D
698
+ }, en = '*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}';
699
+ var yt, Ce, fn;
700
+ yt = [x()];
701
+ class ne extends (fn = w) {
702
+ render() {
703
+ return /* @__PURE__ */ l(
704
+ "svg",
705
+ {
706
+ xmlns: "http://www.w3.org/2000/svg",
707
+ width: "24",
708
+ height: "24",
709
+ viewBox: "0 0 24 24",
710
+ fill: "none",
711
+ stroke: "currentColor",
712
+ "stroke-width": "2",
713
+ "stroke-linecap": "round",
714
+ "stroke-linejoin": "round",
715
+ class: "lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical",
716
+ children: [
717
+ /* @__PURE__ */ i("circle", { cx: "12", cy: "12", r: "1" }),
718
+ /* @__PURE__ */ i("circle", { cx: "12", cy: "5", r: "1" }),
719
+ /* @__PURE__ */ i("circle", { cx: "12", cy: "19", r: "1" })
720
+ ]
721
+ }
722
+ );
723
+ }
606
724
  }
607
- function ce() {
608
- return /* @__PURE__ */ d(
609
- "svg",
610
- {
611
- xmlns: "http://www.w3.org/2000/svg",
612
- width: "24",
613
- height: "24",
614
- viewBox: "0 0 24 24",
615
- fill: "none",
616
- stroke: "currentColor",
617
- "stroke-width": "2",
618
- "stroke-linecap": "round",
619
- "stroke-linejoin": "round",
620
- class: "lucide lucide-panel-bottom-icon lucide-panel-bottom",
621
- children: [
622
- /* @__PURE__ */ n("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
623
- /* @__PURE__ */ n("path", { d: "M3 15h18" })
624
- ]
625
- }
626
- );
725
+ Ce = g(fn), ne = d(Ce, 0, "EllipsisVerticalIcon", yt, ne), a(Ce, 1, ne);
726
+ var vt, Me, wn;
727
+ vt = [x()];
728
+ class re extends (wn = w) {
729
+ render() {
730
+ return /* @__PURE__ */ l(
731
+ "svg",
732
+ {
733
+ xmlns: "http://www.w3.org/2000/svg",
734
+ width: "24",
735
+ height: "24",
736
+ viewBox: "0 0 24 24",
737
+ fill: "none",
738
+ stroke: "currentColor",
739
+ "stroke-width": "2",
740
+ "stroke-linecap": "round",
741
+ "stroke-linejoin": "round",
742
+ class: "lucide lucide-panel-bottom-icon lucide-panel-bottom",
743
+ children: [
744
+ /* @__PURE__ */ i("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
745
+ /* @__PURE__ */ i("path", { d: "M3 15h18" })
746
+ ]
747
+ }
748
+ );
749
+ }
627
750
  }
628
- function de() {
629
- return /* @__PURE__ */ d(
630
- "svg",
631
- {
632
- xmlns: "http://www.w3.org/2000/svg",
633
- width: "24",
634
- height: "24",
635
- viewBox: "0 0 24 24",
636
- fill: "none",
637
- stroke: "currentColor",
638
- "stroke-width": "2",
639
- "stroke-linecap": "round",
640
- "stroke-linejoin": "round",
641
- class: "lucide lucide-panel-left-icon lucide-panel-left",
642
- children: [
643
- /* @__PURE__ */ n("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
644
- /* @__PURE__ */ n("path", { d: "M9 3v18" })
645
- ]
646
- }
647
- );
751
+ Me = g(wn), re = d(Me, 0, "PanelBottomIcon", vt, re), a(Me, 1, re);
752
+ var kt, Se, yn;
753
+ kt = [x()];
754
+ class oe extends (yn = w) {
755
+ render() {
756
+ return /* @__PURE__ */ l(
757
+ "svg",
758
+ {
759
+ xmlns: "http://www.w3.org/2000/svg",
760
+ width: "24",
761
+ height: "24",
762
+ viewBox: "0 0 24 24",
763
+ fill: "none",
764
+ stroke: "currentColor",
765
+ "stroke-width": "2",
766
+ "stroke-linecap": "round",
767
+ "stroke-linejoin": "round",
768
+ class: "lucide lucide-panel-left-icon lucide-panel-left",
769
+ children: [
770
+ /* @__PURE__ */ i("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
771
+ /* @__PURE__ */ i("path", { d: "M9 3v18" })
772
+ ]
773
+ }
774
+ );
775
+ }
648
776
  }
649
- function ue() {
650
- return /* @__PURE__ */ d(
651
- "svg",
652
- {
653
- xmlns: "http://www.w3.org/2000/svg",
654
- width: "24",
655
- height: "24",
656
- viewBox: "0 0 24 24",
657
- fill: "none",
658
- stroke: "currentColor",
659
- "stroke-width": "2",
660
- "stroke-linecap": "round",
661
- "stroke-linejoin": "round",
662
- class: "lucide lucide-panel-right-icon lucide-panel-right",
663
- children: [
664
- /* @__PURE__ */ n("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
665
- /* @__PURE__ */ n("path", { d: "M15 3v18" })
666
- ]
667
- }
668
- );
777
+ Se = g(yn), oe = d(Se, 0, "PanelLeftIcon", kt, oe), a(Se, 1, oe);
778
+ var zt, Le, vn;
779
+ zt = [x()];
780
+ class ie extends (vn = w) {
781
+ render() {
782
+ return /* @__PURE__ */ l(
783
+ "svg",
784
+ {
785
+ xmlns: "http://www.w3.org/2000/svg",
786
+ width: "24",
787
+ height: "24",
788
+ viewBox: "0 0 24 24",
789
+ fill: "none",
790
+ stroke: "currentColor",
791
+ "stroke-width": "2",
792
+ "stroke-linecap": "round",
793
+ "stroke-linejoin": "round",
794
+ class: "lucide lucide-panel-right-icon lucide-panel-right",
795
+ children: [
796
+ /* @__PURE__ */ i("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
797
+ /* @__PURE__ */ i("path", { d: "M15 3v18" })
798
+ ]
799
+ }
800
+ );
801
+ }
669
802
  }
670
- function pe() {
671
- return /* @__PURE__ */ d(
672
- "svg",
673
- {
674
- xmlns: "http://www.w3.org/2000/svg",
675
- width: "24",
676
- height: "24",
677
- viewBox: "0 0 24 24",
678
- fill: "none",
679
- stroke: "currentColor",
680
- "stroke-width": "2",
681
- "stroke-linecap": "round",
682
- "stroke-linejoin": "round",
683
- class: "lucide lucide-panel-top-icon lucide-panel-top",
684
- children: [
685
- /* @__PURE__ */ n("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
686
- /* @__PURE__ */ n("path", { d: "M3 9h18" })
687
- ]
688
- }
689
- );
803
+ Le = g(vn), ie = d(Le, 0, "PanelRightIcon", zt, ie), a(Le, 1, ie);
804
+ var Ct, _e, kn;
805
+ Ct = [x()];
806
+ class se extends (kn = w) {
807
+ render() {
808
+ return /* @__PURE__ */ l(
809
+ "svg",
810
+ {
811
+ xmlns: "http://www.w3.org/2000/svg",
812
+ width: "24",
813
+ height: "24",
814
+ viewBox: "0 0 24 24",
815
+ fill: "none",
816
+ stroke: "currentColor",
817
+ "stroke-width": "2",
818
+ "stroke-linecap": "round",
819
+ "stroke-linejoin": "round",
820
+ class: "lucide lucide-panel-top-icon lucide-panel-top",
821
+ children: [
822
+ /* @__PURE__ */ i("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
823
+ /* @__PURE__ */ i("path", { d: "M3 9h18" })
824
+ ]
825
+ }
826
+ );
827
+ }
690
828
  }
691
- function he() {
692
- return /* @__PURE__ */ d(
693
- "svg",
694
- {
695
- xmlns: "http://www.w3.org/2000/svg",
696
- width: "24",
697
- height: "24",
698
- viewBox: "0 0 24 24",
699
- fill: "none",
700
- stroke: "currentColor",
701
- "stroke-width": "2",
702
- "stroke-linecap": "round",
703
- "stroke-linejoin": "round",
704
- class: "lucide lucide-x-icon lucide-x",
705
- children: [
706
- /* @__PURE__ */ n("path", { d: "M18 6 6 18" }),
707
- /* @__PURE__ */ n("path", { d: "m6 6 12 12" })
708
- ]
709
- }
710
- );
829
+ _e = g(kn), se = d(_e, 0, "PanelTopIcon", Ct, se), a(_e, 1, se);
830
+ var Mt, Ie, zn;
831
+ Mt = [x()];
832
+ class ae extends (zn = w) {
833
+ render() {
834
+ return /* @__PURE__ */ l(
835
+ "svg",
836
+ {
837
+ xmlns: "http://www.w3.org/2000/svg",
838
+ width: "24",
839
+ height: "24",
840
+ viewBox: "0 0 24 24",
841
+ fill: "none",
842
+ stroke: "currentColor",
843
+ "stroke-width": "2",
844
+ "stroke-linecap": "round",
845
+ "stroke-linejoin": "round",
846
+ class: "lucide lucide-x-icon lucide-x",
847
+ children: [
848
+ /* @__PURE__ */ i("path", { d: "M18 6 6 18" }),
849
+ /* @__PURE__ */ i("path", { d: "m6 6 12 12" })
850
+ ]
851
+ }
852
+ );
853
+ }
711
854
  }
712
- function S({
713
- title: t,
714
- active: e,
715
- icon: o,
716
- onClick: r
717
- }) {
718
- return /* @__PURE__ */ n(
719
- "button",
720
- {
721
- title: t,
722
- onClick: r,
723
- class: () => `w-[22px] h-[22px] flex items-center justify-center rounded-md text-[11px] cursor-pointer transition-colors duration-150 ${(typeof e == "function" ? e() : e) ? "text-accent bg-soft color-white" : "text-subtle hover:color-muted hover:bg-section"}`,
724
- children: /* @__PURE__ */ n(o, {})
725
- }
726
- );
855
+ Ie = g(zn), ae = d(Ie, 0, "XIcon", Mt, ae), a(Ie, 1, ae);
856
+ var St, $e, Cn;
857
+ St = [x()];
858
+ class T extends (Cn = w) {
859
+ render() {
860
+ const { title: t, active: e, icon: n, onClick: o } = this.props;
861
+ return /* @__PURE__ */ i(
862
+ "button",
863
+ {
864
+ title: t,
865
+ onClick: o,
866
+ class: () => `w-[22px] h-[22px] flex items-center justify-center rounded-md text-[11px] cursor-pointer transition-colors duration-150 ${(typeof e == "function" ? e() : e) ? "text-accent bg-soft color-white" : "text-subtle hover:color-muted hover:bg-section"}`,
867
+ children: /* @__PURE__ */ i(n, {})
868
+ }
869
+ );
870
+ }
727
871
  }
728
- const _ = 180, be = 300, E = 240, ge = 380, xe = {
729
- bottom: ce,
730
- top: pe,
731
- left: de,
732
- right: ue
872
+ $e = g(Cn), T = d($e, 0, "IconButton", St, T), a($e, 1, T);
873
+ const Ge = 180, tn = 300, Re = 240, nn = 380, rn = {
874
+ bottom: re,
875
+ top: se,
876
+ left: oe,
877
+ right: ie
733
878
  };
734
- function me({ plugins: t, registry: e, onClose: o }) {
735
- const r = b(t[0]?.id ?? ""), i = b("bottom"), a = b(!1), l = b(be), s = b(ge);
736
- return /* @__PURE__ */ d(
737
- "div",
738
- {
739
- class: () => {
740
- const c = i();
741
- return c === "top" ? "flex flex-col-reverse fixed top-0 left-0 w-full z-[2147483647]" : c === "left" ? "flex flex-row-reverse fixed left-0 top-0 h-screen z-[2147483647]" : c === "right" ? "flex fixed right-0 top-0 h-screen z-[2147483647]" : "flex flex-col fixed bottom-0 left-0 w-full z-[2147483647]";
742
- },
743
- children: [
744
- /* @__PURE__ */ n(
745
- "div",
746
- {
747
- class: () => {
748
- const c = i();
749
- return c === "bottom" || c === "top" ? "h-1 cursor-[ns-resize] bg-transparent hover:bg-accent transition-colors duration-200" : "w-1 cursor-[ew-resize] bg-transparent hover:bg-accent transition-colors duration-200";
750
- },
751
- onMouseDown: (c) => {
752
- c.preventDefault();
753
- const h = c.clientX, p = c.clientY, x = i(), m = x === "bottom" || x === "top" ? l() : s(), D = (w) => {
754
- const y = i();
755
- y === "bottom" ? l.set(
756
- Math.max(
757
- _,
758
- Math.min(
759
- window.innerHeight * 0.85,
760
- m + (p - w.clientY)
761
- )
762
- )
763
- ) : y === "top" ? l.set(
764
- Math.max(
765
- _,
766
- Math.min(
767
- window.innerHeight * 0.85,
768
- m + (w.clientY - p)
769
- )
770
- )
771
- ) : y === "left" ? s.set(
772
- Math.max(
773
- E,
774
- Math.min(
775
- window.innerWidth * 0.6,
776
- m + (w.clientX - h)
777
- )
778
- )
779
- ) : s.set(
780
- Math.max(
781
- E,
782
- Math.min(
783
- window.innerWidth * 0.6,
784
- m + (h - w.clientX)
785
- )
786
- )
787
- );
788
- }, $ = () => {
789
- document.removeEventListener("mousemove", D), document.removeEventListener("mouseup", $);
790
- };
791
- document.addEventListener("mousemove", D), document.addEventListener("mouseup", $);
879
+ var Lt, _t, It, $t, jt, Et, Dt, y;
880
+ Dt = [x()];
881
+ class I extends (Et = G, jt = [k()], $t = [k()], It = [k()], _t = [k()], Lt = [k()], Et) {
882
+ constructor() {
883
+ super(...arguments);
884
+ f(this, "activeTab", a(y, 8, this, "")), a(y, 11, this);
885
+ f(this, "dock", a(y, 12, this, "bottom")), a(y, 15, this);
886
+ f(this, "dockMenuOpen", a(y, 16, this, !1)), a(y, 19, this);
887
+ f(this, "bottomSize", a(y, 20, this, tn)), a(y, 23, this);
888
+ f(this, "vertSize", a(y, 24, this, nn)), a(y, 27, this);
889
+ }
890
+ get p() {
891
+ return this.props;
892
+ }
893
+ onBeforeMount() {
894
+ this.activeTab = this.p.plugins[0]?.id ?? "";
895
+ }
896
+ handleMouseDown(e) {
897
+ e.preventDefault();
898
+ const n = e.clientX, o = e.clientY, s = this.dock, p = s === "bottom" || s === "top" ? this.bottomSize : this.vertSize, u = (b) => {
899
+ const m = this.dock;
900
+ m === "bottom" ? this.bottomSize = Math.max(
901
+ Ge,
902
+ Math.min(
903
+ window.innerHeight * 0.85,
904
+ p + (o - b.clientY)
905
+ )
906
+ ) : m === "top" ? this.bottomSize = Math.max(
907
+ Ge,
908
+ Math.min(
909
+ window.innerHeight * 0.85,
910
+ p + (b.clientY - o)
911
+ )
912
+ ) : m === "left" ? this.vertSize = Math.max(
913
+ Re,
914
+ Math.min(
915
+ window.innerWidth * 0.6,
916
+ p + (b.clientX - n)
917
+ )
918
+ ) : this.vertSize = Math.max(
919
+ Re,
920
+ Math.min(
921
+ window.innerWidth * 0.6,
922
+ p + (n - b.clientX)
923
+ )
924
+ );
925
+ }, h = () => {
926
+ document.removeEventListener("mousemove", u), document.removeEventListener("mouseup", h);
927
+ };
928
+ document.addEventListener("mousemove", u), document.addEventListener("mouseup", h);
929
+ }
930
+ render() {
931
+ const { plugins: e, registry: n, onClose: o } = this.p;
932
+ return /* @__PURE__ */ l(
933
+ "div",
934
+ {
935
+ class: () => {
936
+ const s = this.dock;
937
+ return s === "top" ? "flex flex-col-reverse fixed top-0 left-0 w-full z-[2147483647]" : s === "left" ? "flex flex-row-reverse fixed left-0 top-0 h-screen z-[2147483647]" : s === "right" ? "flex fixed right-0 top-0 h-screen z-[2147483647]" : "flex flex-col fixed bottom-0 left-0 w-full z-[2147483647]";
938
+ },
939
+ children: [
940
+ /* @__PURE__ */ i(
941
+ "div",
942
+ {
943
+ class: () => {
944
+ const s = this.dock;
945
+ return s === "bottom" || s === "top" ? "h-1 cursor-[ns-resize] bg-transparent hover:bg-accent transition-colors duration-200" : "w-1 cursor-[ew-resize] bg-transparent hover:bg-accent transition-colors duration-200";
946
+ },
947
+ onMouseDown: (s) => {
948
+ this.handleMouseDown(s);
949
+ }
792
950
  }
793
- }
794
- ),
795
- /* @__PURE__ */ n(
796
- "div",
797
- {
798
- class: () => {
799
- const c = i();
800
- return c === "top" ? "w-full h-full bg-bg border-b border-border" : c === "left" ? "w-full h-full bg-bg border-r border-border" : c === "right" ? "w-full h-full bg-bg border-l border-border" : "w-full h-full bg-bg border-t border-border";
801
- },
802
- style: () => {
803
- const c = i();
804
- return c === "bottom" || c === "top" ? { height: `${l().toString()}px` } : { width: `${s().toString()}px` };
805
- },
806
- children: /* @__PURE__ */ d("div", { class: "flex flex-col flex-1 w-full h-full overflow-hidden", children: [
807
- /* @__PURE__ */ d("div", { class: "flex h-10 items-stretch border-b border-border bg-header shrink-0 px-2 gap-[2px]", children: [
808
- /* @__PURE__ */ d("div", { class: "flex items-center gap-[6px] pr-3 mr-[2px] border-r border-border shrink-0", children: [
809
- /* @__PURE__ */ n("img", { class: "h-[13px] w-[13px]", src: N }),
810
- /* @__PURE__ */ n("span", { class: "text-[10px] font-bold text-accent tracking-widest uppercase", children: "praxisjs" })
811
- ] }),
812
- /* @__PURE__ */ n("div", { class: "flex items-stretch flex-1", children: t.map((c) => /* @__PURE__ */ d(
813
- "button",
814
- {
815
- class: () => r() === c.id ? "relative flex items-center px-3 text-[11px] font-semibold text-accent cursor-pointer" : "flex items-center px-3 text-[11px] text-muted cursor-pointer hover:text-text transition-colors duration-150",
816
- onClick: () => {
817
- r.set(c.id);
951
+ ),
952
+ /* @__PURE__ */ i(
953
+ "div",
954
+ {
955
+ class: () => {
956
+ const s = this.dock;
957
+ return s === "top" ? "w-full h-full bg-bg border-b border-border" : s === "left" ? "w-full h-full bg-bg border-r border-border" : s === "right" ? "w-full h-full bg-bg border-l border-border" : "w-full h-full bg-bg border-t border-border";
958
+ },
959
+ style: () => {
960
+ const s = this.dock;
961
+ return s === "bottom" || s === "top" ? { height: `${this.bottomSize.toString()}px` } : { width: `${this.vertSize.toString()}px` };
962
+ },
963
+ children: /* @__PURE__ */ l("div", { class: "flex flex-col flex-1 w-full h-full overflow-hidden", children: [
964
+ /* @__PURE__ */ l("div", { class: "flex h-10 items-stretch border-b border-border bg-header shrink-0 px-2 gap-[2px]", children: [
965
+ /* @__PURE__ */ l("div", { class: "flex items-center gap-[6px] pr-3 mr-[2px] border-r border-border shrink-0", children: [
966
+ /* @__PURE__ */ i("img", { class: "h-[13px] w-[13px]", src: At }),
967
+ /* @__PURE__ */ i("span", { class: "text-[10px] font-bold text-accent tracking-widest uppercase", children: "praxisjs" })
968
+ ] }),
969
+ /* @__PURE__ */ i("div", { class: "flex items-stretch flex-1", children: e.map((s) => /* @__PURE__ */ l(
970
+ "button",
971
+ {
972
+ class: () => this.activeTab === s.id ? "relative flex items-center px-3 text-[11px] font-semibold text-accent cursor-pointer" : "flex items-center px-3 text-[11px] text-muted cursor-pointer hover:text-text transition-colors duration-150",
973
+ onClick: () => {
974
+ this.activeTab = s.id;
975
+ },
976
+ children: [
977
+ s.label,
978
+ () => this.activeTab === s.id ? /* @__PURE__ */ i("span", { class: "absolute bottom-0 left-0 right-0 h-[2px] bg-accent" }) : null
979
+ ]
818
980
  },
819
- children: [
820
- c.label,
821
- () => r() === c.id ? /* @__PURE__ */ n("span", { class: "absolute bottom-0 left-0 right-0 h-[2px] bg-accent" }) : null
822
- ]
823
- },
824
- c.id
825
- )) }),
826
- /* @__PURE__ */ d("div", { class: "flex items-center gap-[2px] shrink-0", children: [
827
- /* @__PURE__ */ d("div", { class: "relative", children: [
828
- /* @__PURE__ */ n(
829
- S,
830
- {
831
- title: "Dock position",
832
- icon: le,
833
- active: () => a(),
834
- onClick: () => {
835
- a.set(!a());
836
- }
837
- }
838
- ),
839
- () => a() ? /* @__PURE__ */ n("div", { class: "absolute right-0 top-full mt-1 flex gap-[2px] bg-bg border border-border rounded-md shadow-lg p-1 z-10", children: ["bottom", "top", "left", "right"].map(
840
- (c) => /* @__PURE__ */ n(
841
- S,
981
+ s.id
982
+ )) }),
983
+ /* @__PURE__ */ l("div", { class: "flex items-center gap-[2px] shrink-0", children: [
984
+ /* @__PURE__ */ l("div", { class: "relative", children: [
985
+ /* @__PURE__ */ i(
986
+ T,
842
987
  {
843
- title: `Dock ${c}`,
844
- active: () => i() === c,
845
- icon: xe[c],
988
+ title: "Dock position",
989
+ icon: ne,
990
+ active: () => this.dockMenuOpen,
846
991
  onClick: () => {
847
- i.set(c), a.set(!1);
992
+ this.dockMenuOpen = !this.dockMenuOpen;
848
993
  }
849
- },
850
- c
851
- )
852
- ) }) : null
853
- ] }),
854
- /* @__PURE__ */ n("div", { class: "w-px h-3 bg-border mx-1" }),
855
- /* @__PURE__ */ n(S, { title: "Close", icon: he, onClick: o })
856
- ] })
857
- ] }),
858
- /* @__PURE__ */ n("div", { class: "flex-1 overflow-hidden flex flex-col", children: () => {
859
- const h = t.find((p) => p.id === r())?.component;
860
- return h ? /* @__PURE__ */ n(h, { registry: e }) : null;
861
- } })
862
- ] })
863
- }
864
- )
865
- ]
866
- }
867
- );
994
+ }
995
+ ),
996
+ () => this.dockMenuOpen ? /* @__PURE__ */ i("div", { class: "absolute right-0 top-full mt-1 flex gap-[2px] bg-bg border border-border rounded-md shadow-lg p-1 z-10", children: ["bottom", "top", "left", "right"].map(
997
+ (s) => /* @__PURE__ */ i(
998
+ T,
999
+ {
1000
+ title: `Dock ${s}`,
1001
+ active: () => this.dock === s,
1002
+ icon: rn[s],
1003
+ onClick: () => {
1004
+ this.dock = s, this.dockMenuOpen = !1;
1005
+ }
1006
+ },
1007
+ s
1008
+ )
1009
+ ) }) : null
1010
+ ] }),
1011
+ /* @__PURE__ */ i("div", { class: "w-px h-3 bg-border mx-1" }),
1012
+ /* @__PURE__ */ i(T, { title: "Close", icon: ae, onClick: o })
1013
+ ] })
1014
+ ] }),
1015
+ /* @__PURE__ */ i("div", { class: "flex-1 overflow-hidden flex flex-col", children: () => {
1016
+ const p = e.find((u) => u.id === this.activeTab)?.component;
1017
+ return p ? /* @__PURE__ */ i(p, { registry: n }) : null;
1018
+ } })
1019
+ ] })
1020
+ }
1021
+ )
1022
+ ]
1023
+ }
1024
+ );
1025
+ }
868
1026
  }
869
- const fe = [
870
- ee,
871
- J,
872
- se
1027
+ y = g(Et), d(y, 5, "activeTab", jt, I), d(y, 5, "dock", $t, I), d(y, 5, "dockMenuOpen", It, I), d(y, 5, "bottomSize", _t, I), d(y, 5, "vertSize", Lt, I), I = d(y, 0, "Panel", Dt, I), a(y, 1, I);
1028
+ const on = [
1029
+ Zt,
1030
+ Kt,
1031
+ Vt
873
1032
  ];
874
- function B({
875
- plugins: t,
876
- registry: e
877
- }) {
878
- const o = b(!1);
879
- return /* @__PURE__ */ n("div", { children: () => o() ? /* @__PURE__ */ n(
880
- me,
881
- {
882
- plugins: t,
883
- registry: e,
884
- onClose: () => {
885
- o.set(!1);
1033
+ var Nt, Ut, Ot, O;
1034
+ Ot = [x()];
1035
+ class F extends (Ut = G, Nt = [k()], Ut) {
1036
+ constructor() {
1037
+ super(...arguments);
1038
+ f(this, "open", a(O, 8, this, !1)), a(O, 11, this);
1039
+ }
1040
+ get p() {
1041
+ return this.props;
1042
+ }
1043
+ render() {
1044
+ const { plugins: e, registry: n } = this.p;
1045
+ return /* @__PURE__ */ i("div", { children: () => this.open ? /* @__PURE__ */ i(
1046
+ I,
1047
+ {
1048
+ plugins: e,
1049
+ registry: n,
1050
+ onClose: () => {
1051
+ this.open = !1;
1052
+ }
886
1053
  }
887
- }
888
- ) : /* @__PURE__ */ d(
889
- "button",
890
- {
891
- onClick: () => {
892
- o.set(!0);
893
- },
894
- class: "fixed bottom-5 right-5 z-[2147483647] flex items-center gap-1 pl-[10px] pr-[14px] h-[32px] rounded-xl font-sans font-semibold text-[12px] text-accent bg-header border border-border cursor-pointer select-none shadow-[0_8px_32px_rgba(0,0,0,0.7)] transition-all duration-200 hover:border-accent hover:bg-soft hover:shadow-[0_8px_32px_rgba(56,189,248,0.1)]",
895
- children: [
896
- /* @__PURE__ */ n("img", { class: "h-[13px] w-[13px]", src: N }),
897
- /* @__PURE__ */ n("span", { class: "text-[10px] font-bold text-accent tracking-widest uppercase", children: "devtools" })
898
- ]
899
- }
900
- ) });
1054
+ ) : /* @__PURE__ */ l(
1055
+ "button",
1056
+ {
1057
+ onClick: () => {
1058
+ this.open = !0;
1059
+ },
1060
+ class: "fixed bottom-5 right-5 z-[2147483647] flex items-center gap-1 pl-[10px] pr-[14px] h-[32px] rounded-xl font-sans font-semibold text-[12px] text-accent bg-header border border-border cursor-pointer select-none shadow-[0_8px_32px_rgba(0,0,0,0.7)] transition-all duration-200 hover:border-accent hover:bg-soft hover:shadow-[0_8px_32px_rgba(56,189,248,0.1)]",
1061
+ children: [
1062
+ /* @__PURE__ */ i("img", { class: "h-[13px] w-[13px]", src: At }),
1063
+ /* @__PURE__ */ i("span", { class: "text-[10px] font-bold text-accent tracking-widest uppercase", children: "devtools" })
1064
+ ]
1065
+ }
1066
+ ) });
1067
+ }
901
1068
  }
902
- const Se = {
903
- plugins: [...fe],
1069
+ O = g(Ut), d(O, 5, "open", Nt, F), F = d(O, 0, "DevToolsApp", Ot, F), a(O, 1, F);
1070
+ const $n = {
1071
+ plugins: [...on],
904
1072
  host: null,
905
1073
  cleanup: null,
906
- init(t = {}) {
1074
+ init(r = {}) {
907
1075
  if (this.host) return;
908
- t.plugins && (this.plugins = t.plugins), this.plugins.forEach((a) => a.setup?.(g.instance));
909
- const e = document.createElement("div");
910
- e.id = "praxisjs-devtools", document.body.appendChild(e), this.host = e;
911
- const o = e.attachShadow({ mode: "open" }), r = document.createElement("style");
912
- r.textContent = ae + F, o.appendChild(r);
913
- const i = document.createElement("div");
914
- o.appendChild(i), this.cleanup = j(
915
- /* @__PURE__ */ n(B, { plugins: this.plugins, registry: g.instance }),
916
- i
1076
+ r.plugins && (this.plugins = r.plugins), this.plugins.forEach((s) => s.setup?.(z.instance));
1077
+ const t = document.createElement("div");
1078
+ t.id = "praxisjs-devtools", document.body.appendChild(t), this.host = t;
1079
+ const e = t.attachShadow({ mode: "open" }), n = document.createElement("style");
1080
+ n.textContent = en + Yt, e.appendChild(n);
1081
+ const o = document.createElement("div");
1082
+ e.appendChild(o), this.cleanup = He(
1083
+ () => /* @__PURE__ */ i(F, { plugins: this.plugins, registry: z.instance }),
1084
+ o
917
1085
  );
918
1086
  },
919
- registerPlugin(t) {
920
- this.plugins.find((e) => e.id === t.id) || (t.setup?.(g.instance), this.plugins.push(t), this.remount());
1087
+ registerPlugin(r) {
1088
+ this.plugins.find((t) => t.id === r.id) || (r.setup?.(z.instance), this.plugins.push(r), this.remount());
921
1089
  },
922
1090
  get registry() {
923
- return g.instance;
1091
+ return z.instance;
924
1092
  },
925
1093
  remount() {
926
1094
  if (!this.host) return;
927
- const e = this.host.shadowRoot.querySelector("div:last-child");
928
- this.cleanup?.(), this.cleanup = j(
929
- /* @__PURE__ */ n(B, { plugins: this.plugins, registry: g.instance }),
930
- e
1095
+ const t = this.host.shadowRoot.querySelector("div:last-child");
1096
+ this.cleanup?.(), this.cleanup = He(
1097
+ () => /* @__PURE__ */ i(F, { plugins: this.plugins, registry: z.instance }),
1098
+ t
931
1099
  );
932
1100
  }
933
1101
  };
934
- function we(t) {
935
- return typeof t == "function" && typeof t.subscribe == "function" && !("set" in t);
1102
+ function We(r) {
1103
+ return typeof r == "function" && typeof r.subscribe == "function" && !("set" in r);
936
1104
  }
937
- function Ce(t = {}) {
938
- return function(e, o, r) {
939
- const i = e.constructor.name, a = t.label ?? o;
940
- if (r && typeof r.value == "function") {
941
- const u = r.value;
942
- r.value = function(...c) {
943
- const h = performance.now();
944
- let p, x = !1;
1105
+ function jn(r = {}) {
1106
+ return function(t, e) {
1107
+ const n = r.label ?? e.name;
1108
+ if (e.kind === "method") {
1109
+ const o = t;
1110
+ return function(...s) {
1111
+ const p = this.constructor.name, u = performance.now();
1112
+ let h, b = !1;
945
1113
  try {
946
- p = u.apply(this, c);
1114
+ h = o.apply(this, s);
947
1115
  } catch (m) {
948
- throw x = !0, p = m, m;
1116
+ throw b = !0, h = m, m;
949
1117
  } finally {
950
- const m = performance.now() - h;
951
- g.instance.recordMethodCall(
1118
+ const m = performance.now() - u;
1119
+ z.instance.recordMethodCall(
952
1120
  this,
953
- a,
954
- c,
955
- x ? `throw ${String(p)}` : p,
1121
+ n,
1122
+ s,
1123
+ b ? `throw ${String(h)}` : h,
956
1124
  m,
957
- i
1125
+ p
958
1126
  );
959
1127
  }
960
- return p;
1128
+ return h;
961
1129
  };
962
- return;
963
1130
  }
964
- const l = Object.getOwnPropertyDescriptor(e, o);
965
- if (l?.get && l.set) {
966
- const u = l.get.bind(l), c = l.set.bind(l), h = /* @__PURE__ */ new WeakSet();
967
- Object.defineProperty(e, o, {
1131
+ e.addInitializer(function() {
1132
+ const o = this, s = e.name, p = o.constructor.name, u = Object.getOwnPropertyDescriptor(o, s);
1133
+ if (u?.get && u.set) {
1134
+ const c = u.get, $ = u.set;
1135
+ z.instance.registerSignal(
1136
+ o,
1137
+ n,
1138
+ c.call(o),
1139
+ p
1140
+ ), Object.defineProperty(o, s, {
1141
+ get() {
1142
+ return c.call(this);
1143
+ },
1144
+ set(v) {
1145
+ const j = c.call(this);
1146
+ $.call(this, v), z.instance.updateSignal(this, n, v, j);
1147
+ },
1148
+ enumerable: !0,
1149
+ configurable: !0
1150
+ });
1151
+ return;
1152
+ }
1153
+ const h = o[s];
1154
+ if (Reflect.deleteProperty(o, s), !We(h)) {
1155
+ h !== void 0 && console.warn(
1156
+ `[PraxisJS DevTools] @Debug() on "${p}.${s}": expected a computed() value but got ${typeof h}. Skipping.`
1157
+ ), o[s] = h;
1158
+ return;
1159
+ }
1160
+ let b;
1161
+ function m(c) {
1162
+ let $ = !0, v = c();
1163
+ const j = c.subscribe((R) => {
1164
+ if ($) {
1165
+ $ = !1;
1166
+ return;
1167
+ }
1168
+ z.instance.updateSignal(o, n, R, v), v = R;
1169
+ });
1170
+ return z.instance.registerSignal(o, n, v, p), j;
1171
+ }
1172
+ b = { computed: h, unsub: m(h) }, Object.defineProperty(o, s, {
968
1173
  get() {
969
- return u.call(this);
1174
+ return b.computed;
970
1175
  },
971
- set(p) {
972
- if (!h.has(this))
973
- h.add(this), c.call(this, p), g.instance.registerSignal(
974
- this,
975
- a,
976
- p,
977
- i
1176
+ set(c) {
1177
+ if (b.unsub(), !We(c)) {
1178
+ console.warn(
1179
+ `[PraxisJS DevTools] @Debug() on "${p}.${s}": expected a computed() value but got ${typeof c}. Skipping.`
978
1180
  );
979
- else {
980
- const x = u.call(this);
981
- c.call(this, p), g.instance.updateSignal(this, a, p, x);
1181
+ return;
982
1182
  }
1183
+ b = { computed: c, unsub: m(c) };
983
1184
  },
984
1185
  enumerable: !0,
985
1186
  configurable: !0
986
1187
  });
987
- return;
988
- }
989
- const s = /* @__PURE__ */ new WeakMap();
990
- Object.defineProperty(e, o, {
991
- get() {
992
- return s.get(this)?.computed;
993
- },
994
- set(u) {
995
- if (s.get(this)?.unsub(), !we(u)) {
996
- console.warn(
997
- `[PraxisJS DevTools] @Debug() on "${i}.${o}": expected a computed() value but got ${typeof u}. Skipping.`
998
- );
999
- return;
1000
- }
1001
- let c = !0, h = u();
1002
- const p = u.subscribe((x) => {
1003
- if (c) {
1004
- c = !1;
1005
- return;
1006
- }
1007
- g.instance.updateSignal(this, a, x, h), h = x;
1008
- });
1009
- s.set(this, { computed: u, unsub: p }), g.instance.registerSignal(this, a, h, i);
1010
- },
1011
- enumerable: !0,
1012
- configurable: !0
1013
1188
  });
1014
1189
  };
1015
1190
  }
1016
- function Ie() {
1017
- return function(t) {
1018
- const e = t.name, o = g.instance, r = t.prototype, i = r.render;
1019
- i && (r.render = function(...s) {
1020
- const u = performance.now(), c = i.call(this, ...s), h = performance.now() - u;
1021
- return o.recordRender(this, h), c;
1191
+ function En() {
1192
+ return function(r, t) {
1193
+ const e = r.name, n = z.instance, o = r.prototype, s = o.render;
1194
+ s && (o.render = function(...h) {
1195
+ const b = performance.now(), m = s.call(this, ...h), c = performance.now() - b;
1196
+ return n.recordRender(this, c), m;
1022
1197
  });
1023
- const a = r.onBeforeMount;
1024
- r.onBeforeMount = function(...s) {
1025
- return o.registerComponent(this, e), o.recordLifecycle(this, "onBeforeMount"), a?.call(this, ...s);
1198
+ const p = o.onBeforeMount;
1199
+ o.onBeforeMount = function(...h) {
1200
+ return n.registerComponent(this, e), n.recordLifecycle(this, "onBeforeMount"), p?.call(this, ...h);
1026
1201
  };
1027
- const l = [
1202
+ const u = [
1028
1203
  "onMount",
1029
1204
  "onUnmount",
1030
1205
  "onBeforeUpdate",
1031
1206
  "onUpdate",
1032
1207
  "onAfterUpdate"
1033
1208
  ];
1034
- for (const s of l) {
1035
- const u = r[s];
1036
- r[s] = function(...c) {
1037
- return o.recordLifecycle(this, s), u?.call(this, ...c);
1209
+ for (const h of u) {
1210
+ const b = o[h];
1211
+ o[h] = function(...m) {
1212
+ return n.recordLifecycle(this, h), b?.call(this, ...m);
1038
1213
  };
1039
1214
  }
1040
- return t;
1215
+ return r;
1041
1216
  };
1042
1217
  }
1043
1218
  export {
1044
- J as ComponentsPlugin,
1045
- Ce as Debug,
1046
- Se as DevTools,
1047
- g as Registry,
1048
- ee as SignalsPlugin,
1049
- se as TimelinePlugin,
1050
- Ie as Trace
1219
+ Kt as ComponentsPlugin,
1220
+ jn as Debug,
1221
+ $n as DevTools,
1222
+ z as Registry,
1223
+ Zt as SignalsPlugin,
1224
+ Vt as TimelinePlugin,
1225
+ En as Trace
1051
1226
  };