@jogak/ui 0.1.0-alpha.7.1 → 0.1.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,28 +1,28 @@
1
1
  import { jsxs as j, jsx as e } from "react/jsx-runtime";
2
- import { useState as m, useEffect as b, useRef as _, useMemo as C, useCallback as R } from "react";
3
- import { defaultActionChannel as A, ComponentRegistry as Q, defaultRegistry as W } from "@jogak/core";
4
- import { useRegistryMeta as X, useEntry as Y, reactAdapter as S, JogakProvider as Z, useRegistry as K } from "@jogak/react";
5
- import { themes as z, Highlight as T } from "prism-react-renderer";
6
- import { createPortal as oo } from "react-dom";
7
- function F(o) {
2
+ import { useState as b, useEffect as h, useRef as E, useMemo as R, useCallback as $ } from "react";
3
+ import { defaultActionChannel as L, ComponentRegistry as Y, defaultRegistry as F } from "@jogak/core";
4
+ import { useRegistryMeta as Z, useEntry as K, reactAdapter as _, JogakProvider as T, useRegistry as oo } from "@jogak/react";
5
+ import { themes as H, Highlight as ao } from "prism-react-renderer";
6
+ import { createPortal as eo } from "react-dom";
7
+ function q(o) {
8
8
  var a, r, t = "";
9
9
  if (typeof o == "string" || typeof o == "number") t += o;
10
10
  else if (typeof o == "object") if (Array.isArray(o)) {
11
- var k = o.length;
12
- for (a = 0; a < k; a++) o[a] && (r = F(o[a])) && (t && (t += " "), t += r);
11
+ var g = o.length;
12
+ for (a = 0; a < g; a++) o[a] && (r = q(o[a])) && (t && (t += " "), t += r);
13
13
  } else for (r in o) o[r] && (t && (t += " "), t += r);
14
14
  return t;
15
15
  }
16
- function v() {
17
- for (var o, a, r = 0, t = "", k = arguments.length; r < k; r++) (o = arguments[r]) && (a = F(o)) && (t && (t += " "), t += a);
16
+ function N() {
17
+ for (var o, a, r = 0, t = "", g = arguments.length; r < g; r++) (o = arguments[r]) && (a = q(o)) && (t && (t += " "), t += a);
18
18
  return t;
19
19
  }
20
- function ao({
20
+ function ro({
21
21
  selectedEntryId: o,
22
22
  selectedJogakName: a,
23
23
  onSelect: r
24
24
  }) {
25
- const [t, k] = m(""), { metaTree: n, searchMeta: s } = X(), l = t.trim().length > 0 ? s(t) : null;
25
+ const [t, g] = b(""), { metaTree: n, searchMeta: s } = Z(), l = t.trim().length > 0 ? s(t) : null;
26
26
  return /* @__PURE__ */ j(
27
27
  "aside",
28
28
  {
@@ -35,15 +35,15 @@ function ao({
35
35
  type: "search",
36
36
  placeholder: "Search components...",
37
37
  value: t,
38
- onChange: (g) => {
39
- k(g.target.value);
38
+ onChange: (i) => {
39
+ g(i.target.value);
40
40
  },
41
41
  className: "jogak:w-full jogak:px-2 jogak:py-1.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)]",
42
42
  "aria-label": "Search components"
43
43
  }
44
44
  ) }),
45
45
  /* @__PURE__ */ e("nav", { className: "jogak:flex-1 jogak:overflow-auto jogak:py-2", children: l !== null ? /* @__PURE__ */ e(
46
- eo,
46
+ to,
47
47
  {
48
48
  metas: l,
49
49
  selectedEntryId: o,
@@ -51,7 +51,7 @@ function ao({
51
51
  onSelect: r
52
52
  }
53
53
  ) : /* @__PURE__ */ e(
54
- H,
54
+ G,
55
55
  {
56
56
  node: n,
57
57
  selectedEntryId: o,
@@ -63,37 +63,37 @@ function ao({
63
63
  }
64
64
  );
65
65
  }
66
- function eo({
66
+ function to({
67
67
  metas: o,
68
68
  selectedEntryId: a,
69
69
  selectedJogakName: r,
70
70
  onSelect: t
71
71
  }) {
72
- return o.length === 0 ? /* @__PURE__ */ e("p", { className: "jogak:px-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]", children: "No results" }) : /* @__PURE__ */ e("ul", { className: "jogak:list-none jogak:m-0 jogak:p-0", children: o.map((k) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
73
- U,
72
+ return o.length === 0 ? /* @__PURE__ */ e("p", { className: "jogak:px-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]", children: "No results" }) : /* @__PURE__ */ e("ul", { className: "jogak:list-none jogak:m-0 jogak:p-0", children: o.map((g) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
73
+ I,
74
74
  {
75
- meta: k,
75
+ meta: g,
76
76
  selectedEntryId: a,
77
77
  selectedJogakName: r,
78
78
  onSelect: t,
79
79
  indent: 0
80
80
  }
81
- ) }, k.id)) });
81
+ ) }, g.id)) });
82
82
  }
83
- function H({
83
+ function G({
84
84
  node: o,
85
85
  selectedEntryId: a,
86
86
  selectedJogakName: r,
87
87
  onSelect: t,
88
- depth: k = 0
88
+ depth: g = 0
89
89
  }) {
90
90
  return /* @__PURE__ */ e(
91
91
  "ul",
92
92
  {
93
93
  className: "jogak:list-none jogak:m-0 jogak:pr-0 jogak:py-0 jogak:pl-[var(--jogak-tree-pl)]",
94
- style: { "--jogak-tree-pl": `${k * 12}px` },
94
+ style: { "--jogak-tree-pl": `${g * 12}px` },
95
95
  children: Object.entries(o).map(([n, s]) => /* @__PURE__ */ e("li", { children: "id" in s ? /* @__PURE__ */ e(
96
- U,
96
+ I,
97
97
  {
98
98
  meta: s,
99
99
  selectedEntryId: a,
@@ -102,35 +102,35 @@ function H({
102
102
  indent: 0
103
103
  }
104
104
  ) : /* @__PURE__ */ e(
105
- ro,
105
+ no,
106
106
  {
107
107
  label: n,
108
108
  node: s,
109
109
  selectedEntryId: a,
110
110
  selectedJogakName: r,
111
111
  onSelect: t,
112
- depth: k + 1
112
+ depth: g + 1
113
113
  }
114
114
  ) }, n))
115
115
  }
116
116
  );
117
117
  }
118
- function ro({
118
+ function no({
119
119
  label: o,
120
120
  node: a,
121
121
  selectedEntryId: r,
122
122
  selectedJogakName: t,
123
- onSelect: k,
123
+ onSelect: g,
124
124
  depth: n
125
125
  }) {
126
- const [s, l] = m(!0);
126
+ const [s, l] = b(!0);
127
127
  return /* @__PURE__ */ j("div", { children: [
128
128
  /* @__PURE__ */ j(
129
129
  "button",
130
130
  {
131
131
  type: "button",
132
132
  onClick: () => {
133
- l((g) => !g);
133
+ l((i) => !i);
134
134
  },
135
135
  className: "jogak:flex jogak:items-center jogak:gap-1 jogak:w-full jogak:px-3 jogak:py-1 jogak:bg-transparent jogak:border-none jogak:cursor-pointer jogak:text-[12px] jogak:font-semibold jogak:text-[var(--jogak-color-fg-muted)] jogak:uppercase jogak:tracking-wider",
136
136
  "aria-expanded": s,
@@ -141,29 +141,29 @@ function ro({
141
141
  }
142
142
  ),
143
143
  s && /* @__PURE__ */ e(
144
- H,
144
+ G,
145
145
  {
146
146
  node: a,
147
147
  selectedEntryId: r,
148
148
  selectedJogakName: t,
149
- onSelect: k,
149
+ onSelect: g,
150
150
  depth: n
151
151
  }
152
152
  )
153
153
  ] });
154
154
  }
155
- function U({
155
+ function I({
156
156
  meta: o,
157
157
  selectedEntryId: a,
158
158
  selectedJogakName: r,
159
159
  onSelect: t,
160
- indent: k
160
+ indent: g
161
161
  }) {
162
- const n = o.id === a, [s, l] = m(n);
163
- b(() => {
162
+ const n = o.id === a, [s, l] = b(n);
163
+ h(() => {
164
164
  n && l(!0);
165
165
  }, [n]);
166
- const g = o.title.split("/").pop() ?? o.title, i = 16 + k * 12;
166
+ const i = o.title.split("/").pop() ?? o.title, d = 16 + g * 12;
167
167
  return /* @__PURE__ */ j("div", { children: [
168
168
  /* @__PURE__ */ j(
169
169
  "button",
@@ -171,57 +171,57 @@ function U({
171
171
  type: "button",
172
172
  onClick: () => {
173
173
  if (n)
174
- l((c) => !c);
174
+ l((k) => !k);
175
175
  else {
176
176
  l(!0);
177
- const c = o.jogakNames[0];
178
- c !== void 0 && t(o.id, c);
177
+ const k = o.jogakNames[0];
178
+ k !== void 0 && t(o.id, k);
179
179
  }
180
180
  },
181
- className: v(
181
+ className: N(
182
182
  "jogak:flex jogak:items-center jogak:gap-1.5 jogak:w-full jogak:pr-3 jogak:py-[5px]",
183
183
  "jogak:pl-[var(--jogak-entry-pl)]",
184
184
  "jogak:border-none jogak:cursor-pointer jogak:text-left jogak:text-[13px]",
185
185
  n ? "jogak:bg-[var(--jogak-color-accent-bg)] jogak:text-[var(--jogak-color-accent)] jogak:font-medium" : "jogak:bg-transparent jogak:text-[var(--jogak-color-fg)] jogak:font-normal"
186
186
  ),
187
- style: { "--jogak-entry-pl": `${i}px` },
187
+ style: { "--jogak-entry-pl": `${d}px` },
188
188
  "aria-expanded": s,
189
189
  children: [
190
190
  /* @__PURE__ */ e("span", { className: "jogak:text-[10px] jogak:shrink-0 jogak:leading-none", children: s ? "▾" : "▸" }),
191
- g
191
+ i
192
192
  ]
193
193
  }
194
194
  ),
195
- s && /* @__PURE__ */ e("ul", { className: "jogak:list-none jogak:m-0 jogak:p-0", children: o.jogakNames.map((c) => {
196
- const p = n && c === r;
195
+ s && /* @__PURE__ */ e("ul", { className: "jogak:list-none jogak:m-0 jogak:p-0", children: o.jogakNames.map((k) => {
196
+ const c = n && k === r;
197
197
  return /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
198
198
  "button",
199
199
  {
200
200
  type: "button",
201
201
  onClick: () => {
202
- t(o.id, c);
202
+ t(o.id, k);
203
203
  },
204
- className: v(
204
+ className: N(
205
205
  "jogak:block jogak:w-full jogak:text-left jogak:pr-3 jogak:py-1",
206
206
  "jogak:pl-[var(--jogak-jogak-pl)]",
207
207
  "jogak:border-none jogak:cursor-pointer jogak:text-[12px]",
208
- p ? "jogak:bg-[var(--jogak-color-accent-bg-soft)] jogak:text-[var(--jogak-color-accent-fg)] jogak:font-medium" : "jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal"
208
+ c ? "jogak:bg-[var(--jogak-color-accent-bg-soft)] jogak:text-[var(--jogak-color-accent-fg)] jogak:font-medium" : "jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal"
209
209
  ),
210
- style: { "--jogak-jogak-pl": `${i + 18}px` },
211
- "aria-current": p ? "true" : void 0,
212
- children: c
210
+ style: { "--jogak-jogak-pl": `${d + 18}px` },
211
+ "aria-current": c ? "true" : void 0,
212
+ children: k
213
213
  }
214
- ) }, c);
214
+ ) }, k);
215
215
  }) })
216
216
  ] });
217
217
  }
218
- function to(o, a) {
219
- const r = a == null ? void 0 : a.control, t = (a == null ? void 0 : a.action) !== void 0 && a.action !== !1, k = (a == null ? void 0 : a.type) === "function" || typeof o == "function";
220
- return t || k ? "action" : r === "boolean" || typeof o == "boolean" ? "boolean" : r === "number" || r === "range" || typeof o == "number" ? "number" : r === "select" || r === "radio" || (a == null ? void 0 : a.options) !== void 0 && a.options.length > 0 ? "select" : r === "text" || r === "color" || typeof o == "string" ? "text" : "json";
218
+ function go(o, a) {
219
+ const r = a == null ? void 0 : a.control, t = (a == null ? void 0 : a.action) !== void 0 && a.action !== !1, g = (a == null ? void 0 : a.type) === "function" || typeof o == "function";
220
+ return t || g ? "action" : r === "boolean" || typeof o == "boolean" ? "boolean" : r === "number" || r === "range" || typeof o == "number" ? "number" : r === "select" || r === "radio" || (a == null ? void 0 : a.options) !== void 0 && a.options.length > 0 ? "select" : r === "text" || r === "color" || typeof o == "string" ? "text" : "json";
221
221
  }
222
- const $ = "jogak:px-2 jogak:py-1 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:text-[13px] jogak:w-full jogak:max-w-[280px]", L = "jogak:px-5 jogak:py-1.5 jogak:text-left jogak:text-[var(--jogak-color-fg-muted)] jogak:font-medium jogak:text-[12px] jogak:border-b jogak:border-[var(--jogak-color-border)]", E = "jogak:px-5 jogak:py-2 jogak:align-middle jogak:border-b jogak:border-[var(--jogak-color-border-muted)]";
223
- function no({ argKey: o, value: a, argType: r, onArgChange: t }) {
224
- switch (to(a, r)) {
222
+ const M = "jogak:px-2 jogak:py-1 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:text-[13px] jogak:w-full jogak:max-w-[280px]", O = "jogak:px-5 jogak:py-1.5 jogak:text-left jogak:text-[var(--jogak-color-fg-muted)] jogak:font-medium jogak:text-[12px] jogak:border-b jogak:border-[var(--jogak-color-border)]", P = "jogak:px-5 jogak:py-2 jogak:align-middle jogak:border-b jogak:border-[var(--jogak-color-border-muted)]";
223
+ function so({ argKey: o, value: a, argType: r, onArgChange: t }) {
224
+ switch (go(a, r)) {
225
225
  case "boolean":
226
226
  return /* @__PURE__ */ e(
227
227
  "input",
@@ -243,7 +243,7 @@ function no({ argKey: o, value: a, argType: r, onArgChange: t }) {
243
243
  onChange: (n) => {
244
244
  t(o, n.target.valueAsNumber);
245
245
  },
246
- className: $
246
+ className: M
247
247
  }
248
248
  );
249
249
  case "select": {
@@ -255,7 +255,7 @@ function no({ argKey: o, value: a, argType: r, onArgChange: t }) {
255
255
  onChange: (s) => {
256
256
  t(o, s.target.value);
257
257
  },
258
- className: $,
258
+ className: M,
259
259
  children: n.map((s) => /* @__PURE__ */ e("option", { value: String(s), children: String(s) }, String(s)))
260
260
  }
261
261
  );
@@ -269,7 +269,7 @@ function no({ argKey: o, value: a, argType: r, onArgChange: t }) {
269
269
  onChange: (n) => {
270
270
  t(o, n.target.value);
271
271
  },
272
- className: $
272
+ className: M
273
273
  }
274
274
  );
275
275
  case "action":
@@ -278,31 +278,31 @@ function no({ argKey: o, value: a, argType: r, onArgChange: t }) {
278
278
  return /* @__PURE__ */ e("code", { className: "jogak:text-[12px] jogak:text-[var(--jogak-color-fg-muted)] jogak:font-[family-name:var(--jogak-font-mono)]", children: JSON.stringify(a) });
279
279
  }
280
280
  }
281
- function go({ args: o, argTypes: a, onArgChange: r }) {
282
- const k = Array.from(/* @__PURE__ */ new Set([...Object.keys(o), ...Object.keys(a)])).map((n) => [n, o[n]]);
281
+ function lo({ args: o, argTypes: a, onArgChange: r }) {
282
+ const g = Array.from(/* @__PURE__ */ new Set([...Object.keys(o), ...Object.keys(a)])).map((n) => [n, o[n]]);
283
283
  return /* @__PURE__ */ j("div", { className: "jogak:border-t-2 jogak:border-[var(--jogak-color-border)]", children: [
284
284
  /* @__PURE__ */ e("div", { className: "jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)]", children: "Controls" }),
285
- k.length === 0 ? /* @__PURE__ */ e("div", { className: "jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]", children: "No args defined" }) : /* @__PURE__ */ j("table", { className: "jogak:w-full jogak:border-collapse jogak:text-[13px]", children: [
285
+ g.length === 0 ? /* @__PURE__ */ e("div", { className: "jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]", children: "No args defined" }) : /* @__PURE__ */ j("table", { className: "jogak:w-full jogak:border-collapse jogak:text-[13px]", children: [
286
286
  /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ j("tr", { children: [
287
- /* @__PURE__ */ e("th", { className: L, children: "Name" }),
288
- /* @__PURE__ */ e("th", { className: L, children: "Control" }),
289
- /* @__PURE__ */ e("th", { className: L, children: "Description" })
287
+ /* @__PURE__ */ e("th", { className: O, children: "Name" }),
288
+ /* @__PURE__ */ e("th", { className: O, children: "Control" }),
289
+ /* @__PURE__ */ e("th", { className: O, children: "Description" })
290
290
  ] }) }),
291
- /* @__PURE__ */ e("tbody", { children: k.map(([n, s]) => {
291
+ /* @__PURE__ */ e("tbody", { children: g.map(([n, s]) => {
292
292
  const l = a[n];
293
293
  return /* @__PURE__ */ j("tr", { children: [
294
294
  /* @__PURE__ */ e(
295
295
  "td",
296
296
  {
297
- className: v(
298
- E,
297
+ className: N(
298
+ P,
299
299
  "jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px] jogak:text-[var(--jogak-color-fg)] jogak:whitespace-nowrap"
300
300
  ),
301
301
  children: n
302
302
  }
303
303
  ),
304
- /* @__PURE__ */ e("td", { className: E, children: /* @__PURE__ */ e(
305
- no,
304
+ /* @__PURE__ */ e("td", { className: P, children: /* @__PURE__ */ e(
305
+ so,
306
306
  {
307
307
  argKey: n,
308
308
  value: s,
@@ -310,13 +310,13 @@ function go({ args: o, argTypes: a, onArgChange: r }) {
310
310
  onArgChange: r
311
311
  }
312
312
  ) }),
313
- /* @__PURE__ */ e("td", { className: v(E, "jogak:text-[var(--jogak-color-fg-subtle)]"), children: (l == null ? void 0 : l.description) ?? "" })
313
+ /* @__PURE__ */ e("td", { className: N(P, "jogak:text-[var(--jogak-color-fg-subtle)]"), children: (l == null ? void 0 : l.description) ?? "" })
314
314
  ] }, n);
315
315
  }) })
316
316
  ] })
317
317
  ] });
318
318
  }
319
- function so(o) {
319
+ function ko(o) {
320
320
  if (o.length === 0) return "()";
321
321
  try {
322
322
  return o.map((a) => {
@@ -334,13 +334,13 @@ function so(o) {
334
334
  return "[unserializable]";
335
335
  }
336
336
  }
337
- function ko(o) {
338
- const a = new Date(o), r = a.getHours().toString().padStart(2, "0"), t = a.getMinutes().toString().padStart(2, "0"), k = a.getSeconds().toString().padStart(2, "0"), n = a.getMilliseconds().toString().padStart(3, "0");
339
- return `${r}:${t}:${k}.${n}`;
337
+ function io(o) {
338
+ const a = new Date(o), r = a.getHours().toString().padStart(2, "0"), t = a.getMinutes().toString().padStart(2, "0"), g = a.getSeconds().toString().padStart(2, "0"), n = a.getMilliseconds().toString().padStart(3, "0");
339
+ return `${r}:${t}:${g}.${n}`;
340
340
  }
341
- function lo() {
342
- const [o, a] = m(() => A.getLogs());
343
- b(() => A.subscribe(a), []);
341
+ function jo() {
342
+ const [o, a] = b(() => L.getLogs());
343
+ h(() => L.subscribe(a), []);
344
344
  const r = o.length === 0;
345
345
  return /* @__PURE__ */ j("div", { className: "jogak:h-full jogak:flex jogak:flex-col", children: [
346
346
  /* @__PURE__ */ j("div", { className: "jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)] jogak:flex jogak:items-center jogak:justify-between jogak:shrink-0", children: [
@@ -353,10 +353,10 @@ function lo() {
353
353
  {
354
354
  type: "button",
355
355
  onClick: () => {
356
- A.clear();
356
+ L.clear();
357
357
  },
358
358
  disabled: r,
359
- className: v(
359
+ className: N(
360
360
  "jogak:text-[10px] jogak:font-semibold jogak:px-2 jogak:py-0.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-sm)] jogak:bg-[var(--jogak-color-bg)] jogak:normal-case jogak:tracking-normal",
361
361
  r ? "jogak:text-[var(--jogak-color-fg-subtle)] jogak:cursor-default" : "jogak:text-[var(--jogak-color-fg)] jogak:cursor-pointer"
362
362
  ),
@@ -369,11 +369,11 @@ function lo() {
369
369
  {
370
370
  className: "jogak:flex jogak:items-baseline jogak:gap-[10px] jogak:px-5 jogak:py-1.5 jogak:border-b jogak:border-[var(--jogak-color-border-muted)]",
371
371
  children: [
372
- /* @__PURE__ */ e("span", { className: "jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[11px] jogak:min-w-[92px]", children: ko(t.timestamp) }),
372
+ /* @__PURE__ */ e("span", { className: "jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[11px] jogak:min-w-[92px]", children: io(t.timestamp) }),
373
373
  /* @__PURE__ */ e("span", { className: "jogak:text-[var(--jogak-color-violet)] jogak:font-semibold", children: t.name }),
374
374
  /* @__PURE__ */ j("span", { className: "jogak:text-[var(--jogak-color-fg)] jogak:break-all jogak:flex-1", children: [
375
375
  "(",
376
- so(t.args),
376
+ ko(t.args),
377
377
  ")"
378
378
  ] })
379
379
  ]
@@ -382,72 +382,84 @@ function lo() {
382
382
  )) }) })
383
383
  ] });
384
384
  }
385
- function jo({
385
+ function co({
386
386
  children: o,
387
387
  className: a,
388
388
  style: r,
389
389
  "data-testid": t
390
390
  }) {
391
- const k = _(null), [n, s] = m(null);
392
- return b(() => {
393
- const l = k.current;
391
+ const g = E(null), [n, s] = b(null);
392
+ return h(() => {
393
+ const l = g.current;
394
394
  if (l === null) return;
395
- const g = l.shadowRoot ?? l.attachShadow({ mode: "open" });
396
- s(g);
395
+ const i = l.shadowRoot ?? l.attachShadow({ mode: "open" });
396
+ s(i);
397
397
  }, []), /* @__PURE__ */ e(
398
398
  "div",
399
399
  {
400
- ref: k,
400
+ ref: g,
401
401
  className: a,
402
402
  "data-testid": t,
403
403
  style: r,
404
- children: n !== null ? oo(o, n) : null
404
+ children: n !== null ? eo(o, n) : null
405
405
  }
406
406
  );
407
407
  }
408
- function io({
408
+ function uo({
409
409
  entry: o,
410
410
  args: a,
411
- className: r,
412
- "data-testid": t
411
+ userPreviewUrl: r,
412
+ previewEntryPath: t,
413
+ className: g,
414
+ "data-testid": n
413
415
  }) {
414
- const k = _(null), n = _(!1);
415
- return b(() => {
416
- const s = k.current;
417
- if (s === null) return;
418
- const l = () => {
419
- var g, i;
420
- n.current = !0, (i = (g = s.contentWindow) == null ? void 0 : g.__jogak_setProps__) == null || i.call(g, { entry: o, args: a });
416
+ const s = E(null), [l, i] = b(!1), d = r !== "" ? `${r}${t}` : "/preview-frame.html";
417
+ return h(() => {
418
+ const k = (c) => {
419
+ const x = s.current;
420
+ if (x === null || c.source !== x.contentWindow) return;
421
+ const p = c.data;
422
+ p == null || typeof p != "object" || p.type === "jogak:ready" && i(!0);
421
423
  };
422
- return s.addEventListener("load", l), () => {
423
- s.removeEventListener("load", l), queueMicrotask(() => {
424
- var g, i;
425
- (i = (g = s.contentWindow) == null ? void 0 : g.__jogak_unmount__) == null || i.call(g);
424
+ return window.addEventListener("message", k), () => {
425
+ window.removeEventListener("message", k);
426
+ };
427
+ }, []), h(() => {
428
+ var c;
429
+ if (!l) return;
430
+ const k = s.current;
431
+ k !== null && ((c = k.contentWindow) == null || c.postMessage(
432
+ { type: "jogak:setProps", entryId: o.id, args: a },
433
+ "*"
434
+ ));
435
+ }, [l, o, a]), h(() => {
436
+ const k = s.current;
437
+ return () => {
438
+ k !== null && queueMicrotask(() => {
439
+ var c;
440
+ (c = k.contentWindow) == null || c.postMessage({ type: "jogak:unmount" }, "*");
426
441
  });
427
442
  };
428
- }, []), b(() => {
429
- var s, l, g;
430
- n.current && ((g = (l = (s = k.current) == null ? void 0 : s.contentWindow) == null ? void 0 : l.__jogak_setProps__) == null || g.call(l, { entry: o, args: a }));
431
- }, [o, a]), /* @__PURE__ */ e(
443
+ }, []), /* @__PURE__ */ e(
432
444
  "iframe",
433
445
  {
434
- ref: k,
435
- src: "/preview-frame.html",
446
+ ref: s,
447
+ src: d,
436
448
  title: "Preview",
437
- className: r,
438
- "data-testid": t
449
+ className: g,
450
+ "data-testid": n
439
451
  }
440
452
  );
441
453
  }
442
- const q = {
454
+ const Q = {
443
455
  mobile: 375,
444
456
  tablet: 768,
445
457
  desktop: "none"
446
- }, co = {
458
+ }, po = {
447
459
  mobile: "Mobile",
448
460
  tablet: "Tablet",
449
461
  desktop: "Desktop"
450
- }, P = {
462
+ }, V = {
451
463
  white: {
452
464
  "--jogak-canvas-bg": "#ffffff",
453
465
  "--jogak-canvas-bg-image": "none",
@@ -466,22 +478,24 @@ const q = {
466
478
  "--jogak-canvas-bg-size": "16px 16px",
467
479
  "--jogak-canvas-bg-position": "0 0, 0 8px, 8px -8px, -8px 0px"
468
480
  }
469
- }, M = "jogak:bg-[var(--jogak-canvas-bg)] jogak:bg-[image:var(--jogak-canvas-bg-image)] jogak:bg-[length:var(--jogak-canvas-bg-size)] jogak:bg-[position:var(--jogak-canvas-bg-position)]";
470
- function uo(o) {
471
- return z[o] ?? z.vsDark;
481
+ }, B = "jogak:bg-[var(--jogak-canvas-bg)] jogak:bg-[image:var(--jogak-canvas-bg-image)] jogak:bg-[length:var(--jogak-canvas-bg-size)] jogak:bg-[position:var(--jogak-canvas-bg-position)]";
482
+ function fo(o) {
483
+ return H[o] ?? H.vsDark;
472
484
  }
473
- function po({
485
+ function mo({
474
486
  entryId: o,
475
487
  jogakName: a,
476
488
  overrideArgs: r,
477
489
  onArgChange: t,
478
- onReset: k,
490
+ onReset: g,
479
491
  codeTheme: n,
480
492
  onResolveJogak: s,
481
- previewIsolation: l = "shadow"
493
+ previewIsolation: l = "iframe",
494
+ userPreviewUrl: i = "",
495
+ previewEntryPath: d = "/__jogak_preview__/index.html"
482
496
  }) {
483
- const g = Y(o), [i, c] = m("desktop"), [p, w] = m("white"), [N, h] = m("controls"), x = uo(n);
484
- return g.status === "unknown" ? /* @__PURE__ */ j(
497
+ const k = K(o), [c, x] = b("desktop"), [p, S] = b("white"), [y, v] = b("controls"), w = fo(n);
498
+ return k.status === "unknown" ? /* @__PURE__ */ j(
485
499
  "div",
486
500
  {
487
501
  "data-testid": "preview-not-found",
@@ -491,7 +505,7 @@ function po({
491
505
  o
492
506
  ]
493
507
  }
494
- ) : g.status === "error" ? /* @__PURE__ */ j(
508
+ ) : k.status === "error" ? /* @__PURE__ */ j(
495
509
  "div",
496
510
  {
497
511
  "data-testid": "preview-error",
@@ -501,48 +515,50 @@ function po({
501
515
  "Failed to load entry: ",
502
516
  o
503
517
  ] }),
504
- /* @__PURE__ */ e("pre", { className: "jogak:m-0 jogak:p-3 jogak:bg-[var(--jogak-color-bg)] jogak:border jogak:border-[var(--jogak-color-error-border)] jogak:rounded-[var(--jogak-radius-lg)] jogak:text-[12px] jogak:whitespace-pre-wrap jogak:max-w-full", children: g.error.message })
518
+ /* @__PURE__ */ e("pre", { className: "jogak:m-0 jogak:p-3 jogak:bg-[var(--jogak-color-bg)] jogak:border jogak:border-[var(--jogak-color-error-border)] jogak:rounded-[var(--jogak-radius-lg)] jogak:text-[12px] jogak:whitespace-pre-wrap jogak:max-w-full", children: k.error.message })
505
519
  ]
506
520
  }
507
- ) : g.status === "loading" ? /* @__PURE__ */ e(
508
- fo,
521
+ ) : k.status === "loading" ? /* @__PURE__ */ e(
522
+ bo,
509
523
  {
510
- meta: g.meta,
524
+ meta: k.meta,
511
525
  jogakName: a,
512
- viewport: i,
526
+ viewport: c,
513
527
  bgMode: p,
514
- onViewportChange: c,
515
- onBgModeChange: w
528
+ onViewportChange: x,
529
+ onBgModeChange: S
516
530
  }
517
531
  ) : /* @__PURE__ */ e(
518
- mo,
532
+ xo,
519
533
  {
520
- entry: g.entry,
534
+ entry: k.entry,
521
535
  jogakName: a,
522
536
  overrideArgs: r,
523
537
  onArgChange: t,
524
- onReset: k,
538
+ onReset: g,
525
539
  onResolveJogak: s,
526
- viewport: i,
540
+ viewport: c,
527
541
  bgMode: p,
528
- bottomTab: N,
529
- onViewportChange: c,
530
- onBgModeChange: w,
531
- onBottomTabChange: h,
532
- prismTheme: x,
533
- previewIsolation: l
542
+ bottomTab: y,
543
+ onViewportChange: x,
544
+ onBgModeChange: S,
545
+ onBottomTabChange: v,
546
+ prismTheme: w,
547
+ previewIsolation: l,
548
+ userPreviewUrl: i,
549
+ previewEntryPath: d
534
550
  }
535
551
  );
536
552
  }
537
- function fo({
553
+ function bo({
538
554
  meta: o,
539
555
  jogakName: a,
540
556
  viewport: r,
541
557
  bgMode: t,
542
- onViewportChange: k,
558
+ onViewportChange: g,
543
559
  onBgModeChange: n
544
560
  }) {
545
- const s = a ?? o.jogakNames[0] ?? "...", l = q[r];
561
+ const s = a ?? o.jogakNames[0] ?? "...", l = Q[r];
546
562
  return /* @__PURE__ */ j(
547
563
  "div",
548
564
  {
@@ -550,13 +566,13 @@ function fo({
550
566
  className: "jogak:flex jogak:flex-col jogak:h-full",
551
567
  children: [
552
568
  /* @__PURE__ */ e(
553
- G,
569
+ X,
554
570
  {
555
571
  title: o.title,
556
572
  jogakName: s,
557
573
  viewport: r,
558
574
  bgMode: t,
559
- onViewportChange: k,
575
+ onViewportChange: g,
560
576
  onBgModeChange: n,
561
577
  showReset: !1,
562
578
  onReset: () => {
@@ -566,8 +582,8 @@ function fo({
566
582
  /* @__PURE__ */ e(
567
583
  "div",
568
584
  {
569
- className: `jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${M}`,
570
- style: P[t],
585
+ className: `jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${B}`,
586
+ style: V[t],
571
587
  children: /* @__PURE__ */ e(
572
588
  "div",
573
589
  {
@@ -588,78 +604,82 @@ function fo({
588
604
  }
589
605
  );
590
606
  }
591
- function mo({
607
+ function xo({
592
608
  entry: o,
593
609
  jogakName: a,
594
610
  overrideArgs: r,
595
611
  onArgChange: t,
596
- onReset: k,
612
+ onReset: g,
597
613
  onResolveJogak: n,
598
614
  viewport: s,
599
615
  bgMode: l,
600
- bottomTab: g,
601
- onViewportChange: i,
602
- onBgModeChange: c,
603
- onBottomTabChange: p,
604
- prismTheme: w,
605
- previewIsolation: N
616
+ bottomTab: i,
617
+ onViewportChange: d,
618
+ onBgModeChange: k,
619
+ onBottomTabChange: c,
620
+ prismTheme: x,
621
+ previewIsolation: p,
622
+ userPreviewUrl: S,
623
+ previewEntryPath: y
606
624
  }) {
607
- var V;
608
- const h = a ?? ((V = o.jogaks[0]) == null ? void 0 : V.name) ?? null;
609
- if (b(() => {
610
- a === null && h !== null && n !== void 0 && n(o.id, h);
611
- }, [a, h, o.id, n]), h === null)
625
+ var z;
626
+ const v = a ?? ((z = o.jogaks[0]) == null ? void 0 : z.name) ?? null;
627
+ if (h(() => {
628
+ a === null && v !== null && n !== void 0 && n(o.id, v);
629
+ }, [a, v, o.id, n]), v === null)
612
630
  return /* @__PURE__ */ j("div", { className: "jogak:p-6 jogak:text-[var(--jogak-color-error)]", children: [
613
631
  "Entry has no jogaks: ",
614
632
  o.id
615
633
  ] });
616
- const x = o.jogaks.find((y) => y.name === h);
617
- if (x === void 0)
634
+ const w = o.jogaks.find((C) => C.name === v);
635
+ if (w === void 0)
618
636
  return /* @__PURE__ */ j("div", { className: "jogak:p-6 jogak:text-[var(--jogak-color-error)]", children: [
619
637
  "Jogak not found: ",
620
- h
638
+ v
621
639
  ] });
622
- const u = { ...x.args ?? {}, ...r }, f = {
640
+ const A = { ...w.args ?? {}, ...r }, u = {
623
641
  ...o.meta.argTypes ?? {},
624
- ...x.argTypes ?? {}
625
- }, I = Object.keys(r).length > 0, J = q[s];
642
+ ...w.argTypes ?? {}
643
+ }, f = Object.keys(r).length > 0, m = Q[s];
626
644
  return /* @__PURE__ */ j("div", { className: "jogak:flex jogak:flex-col jogak:h-full", children: [
627
645
  /* @__PURE__ */ e(
628
- G,
646
+ X,
629
647
  {
630
648
  title: o.title,
631
- jogakName: x.name,
649
+ jogakName: w.name,
632
650
  viewport: s,
633
651
  bgMode: l,
634
- onViewportChange: i,
635
- onBgModeChange: c,
636
- showReset: I,
637
- onReset: k
652
+ onViewportChange: d,
653
+ onBgModeChange: k,
654
+ showReset: f,
655
+ onReset: g
638
656
  }
639
657
  ),
640
658
  /* @__PURE__ */ e(
641
659
  "div",
642
660
  {
643
- className: `jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${M}`,
644
- style: P[l],
661
+ className: `jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${B}`,
662
+ style: V[l],
645
663
  children: /* @__PURE__ */ e(
646
664
  "div",
647
665
  {
648
666
  "data-jogak-content": !0,
649
667
  className: "jogak:mx-auto jogak:p-6 jogak:max-w-[var(--jogak-canvas-mw)]",
650
668
  style: {
651
- "--jogak-canvas-mw": J === "none" ? "100%" : `${J}px`
669
+ "--jogak-canvas-mw": m === "none" ? "100%" : `${m}px`
652
670
  },
653
671
  children: /* @__PURE__ */ e(
654
- bo,
672
+ ho,
655
673
  {
656
674
  entry: o,
657
- args: u,
675
+ args: A,
658
676
  source: o.source,
659
- theme: w,
660
- previewIsolation: N
677
+ theme: x,
678
+ previewIsolation: p,
679
+ userPreviewUrl: S,
680
+ previewEntryPath: y
661
681
  },
662
- `${o.id}/${x.name}`
682
+ `${o.id}/${w.name}`
663
683
  )
664
684
  }
665
685
  )
@@ -676,47 +696,47 @@ function mo({
676
696
  {
677
697
  role: "tablist",
678
698
  className: "jogak:flex jogak:gap-1 jogak:pt-1 jogak:px-3 jogak:pb-0 jogak:bg-[var(--jogak-color-bg)] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:shrink-0",
679
- children: ["controls", "actions"].map((y) => {
680
- const B = g === y;
699
+ children: ["controls", "actions"].map((C) => {
700
+ const D = i === C;
681
701
  return /* @__PURE__ */ e(
682
702
  "button",
683
703
  {
684
704
  type: "button",
685
705
  role: "tab",
686
- "aria-selected": B,
706
+ "aria-selected": D,
687
707
  onClick: () => {
688
- p(y);
708
+ c(C);
689
709
  },
690
- className: v(
710
+ className: N(
691
711
  "jogak:px-[14px] jogak:py-[6px] jogak:text-[12px] jogak:bg-transparent jogak:border-x-0 jogak:border-t-0 jogak:border-b-2 jogak:border-solid jogak:-mb-px jogak:cursor-pointer jogak:capitalize",
692
- B ? "jogak:font-semibold jogak:text-[var(--jogak-color-fg-strong)] jogak:border-[var(--jogak-color-accent)]" : "jogak:font-medium jogak:text-[var(--jogak-color-fg-muted)] jogak:border-transparent"
712
+ D ? "jogak:font-semibold jogak:text-[var(--jogak-color-fg-strong)] jogak:border-[var(--jogak-color-accent)]" : "jogak:font-medium jogak:text-[var(--jogak-color-fg-muted)] jogak:border-transparent"
693
713
  ),
694
- children: y
714
+ children: C
695
715
  },
696
- y
716
+ C
697
717
  );
698
718
  })
699
719
  }
700
720
  ),
701
- /* @__PURE__ */ e("div", { className: "jogak:flex-1 jogak:min-h-0 jogak:overflow-auto", children: g === "controls" ? /* @__PURE__ */ e(
702
- go,
721
+ /* @__PURE__ */ e("div", { className: "jogak:flex-1 jogak:min-h-0 jogak:overflow-auto", children: i === "controls" ? /* @__PURE__ */ e(
722
+ lo,
703
723
  {
704
- args: u,
705
- argTypes: f,
724
+ args: A,
725
+ argTypes: u,
706
726
  onArgChange: t
707
727
  }
708
- ) : /* @__PURE__ */ e(lo, {}) })
728
+ ) : /* @__PURE__ */ e(jo, {}) })
709
729
  ]
710
730
  }
711
731
  )
712
732
  ] });
713
733
  }
714
- function G({
734
+ function X({
715
735
  title: o,
716
736
  jogakName: a,
717
737
  viewport: r,
718
738
  bgMode: t,
719
- onViewportChange: k,
739
+ onViewportChange: g,
720
740
  onBgModeChange: n,
721
741
  showReset: s,
722
742
  onReset: l
@@ -727,39 +747,39 @@ function G({
727
747
  /* @__PURE__ */ e("span", { className: "jogak:text-[var(--jogak-color-border-strong)] jogak:mx-1.5 jogak:leading-none", children: "/" }),
728
748
  /* @__PURE__ */ e("span", { className: "jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold", children: a })
729
749
  ] }),
730
- /* @__PURE__ */ e("div", { className: "jogak:flex jogak:gap-0.5 jogak:bg-[var(--jogak-color-bg-subtle)] jogak:rounded-[var(--jogak-radius-lg)] jogak:p-0.5", children: ["mobile", "tablet", "desktop"].map((g) => /* @__PURE__ */ e(
750
+ /* @__PURE__ */ e("div", { className: "jogak:flex jogak:gap-0.5 jogak:bg-[var(--jogak-color-bg-subtle)] jogak:rounded-[var(--jogak-radius-lg)] jogak:p-0.5", children: ["mobile", "tablet", "desktop"].map((i) => /* @__PURE__ */ e(
731
751
  "button",
732
752
  {
733
753
  type: "button",
734
754
  onClick: () => {
735
- k(g);
755
+ g(i);
736
756
  },
737
- "aria-pressed": r === g,
738
- className: v(
757
+ "aria-pressed": r === i,
758
+ className: N(
739
759
  "jogak:px-[9px] jogak:py-[3px] jogak:text-[12px] jogak:border-none jogak:rounded-[var(--jogak-radius-md)] jogak:cursor-pointer jogak:transition-all jogak:duration-100",
740
- r === g ? "jogak:bg-[var(--jogak-color-bg-elevated)] jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold jogak:shadow-[0_1px_2px_rgba(0,0,0,0.08)]" : "jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal jogak:shadow-none"
760
+ r === i ? "jogak:bg-[var(--jogak-color-bg-elevated)] jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold jogak:shadow-[0_1px_2px_rgba(0,0,0,0.08)]" : "jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal jogak:shadow-none"
741
761
  ),
742
- children: co[g]
762
+ children: po[i]
743
763
  },
744
- g
764
+ i
745
765
  )) }),
746
- /* @__PURE__ */ e("div", { className: "jogak:flex jogak:gap-1 jogak:items-center", children: ["white", "dark", "transparent"].map((g) => /* @__PURE__ */ e(
766
+ /* @__PURE__ */ e("div", { className: "jogak:flex jogak:gap-1 jogak:items-center", children: ["white", "dark", "transparent"].map((i) => /* @__PURE__ */ e(
747
767
  "button",
748
768
  {
749
769
  type: "button",
750
770
  onClick: () => {
751
- n(g);
771
+ n(i);
752
772
  },
753
- "aria-pressed": t === g,
754
- "aria-label": `${g} background`,
755
- className: v(
773
+ "aria-pressed": t === i,
774
+ "aria-label": `${i} background`,
775
+ className: N(
756
776
  "jogak:w-5 jogak:h-5 jogak:rounded-[var(--jogak-radius-md)] jogak:border-2 jogak:cursor-pointer jogak:p-0 jogak:shrink-0",
757
- M,
758
- t === g ? "jogak:border-[var(--jogak-color-accent)]" : "jogak:border-[var(--jogak-color-border-strong)]"
777
+ B,
778
+ t === i ? "jogak:border-[var(--jogak-color-accent)]" : "jogak:border-[var(--jogak-color-border-strong)]"
759
779
  ),
760
- style: P[g]
780
+ style: V[i]
761
781
  },
762
- g
782
+ i
763
783
  )) }),
764
784
  s && /* @__PURE__ */ e(
765
785
  "button",
@@ -772,14 +792,16 @@ function G({
772
792
  )
773
793
  ] });
774
794
  }
775
- function bo({ entry: o, args: a, source: r, theme: t, previewIsolation: k }) {
776
- const [n, s] = m(!1), l = /* @__PURE__ */ j("div", { className: "jogak:relative", children: [
795
+ function ho({ entry: o, args: a, source: r, theme: t, previewIsolation: g, userPreviewUrl: n, previewEntryPath: s }) {
796
+ const [l, i] = b(!1), d = /* @__PURE__ */ j("div", { className: "jogak:relative", children: [
777
797
  /* @__PURE__ */ e(
778
- ho,
798
+ vo,
779
799
  {
780
800
  entry: o,
781
801
  args: a,
782
- previewIsolation: k
802
+ previewIsolation: g,
803
+ userPreviewUrl: n,
804
+ previewEntryPath: s
783
805
  }
784
806
  ),
785
807
  /* @__PURE__ */ e(
@@ -787,89 +809,91 @@ function bo({ entry: o, args: a, source: r, theme: t, previewIsolation: k }) {
787
809
  {
788
810
  type: "button",
789
811
  onClick: () => {
790
- s((g) => !g);
812
+ i((k) => !k);
791
813
  },
792
- "aria-pressed": n,
793
- "aria-label": n ? "Hide source code" : "Show source code",
794
- className: v(
814
+ "aria-pressed": l,
815
+ "aria-label": l ? "Hide source code" : "Show source code",
816
+ className: N(
795
817
  "jogak:absolute jogak:bottom-2 jogak:right-2 jogak:px-[9px] jogak:py-1",
796
818
  "jogak:text-[11px] jogak:font-[family-name:var(--jogak-font-mono)] jogak:font-semibold jogak:tracking-[0.02em]",
797
819
  "jogak:text-[var(--jogak-color-bg)] jogak:border-none jogak:rounded-[5px] jogak:cursor-pointer",
798
820
  "jogak:shadow-[0_1px_4px_rgba(0,0,0,0.2)] jogak:transition-[background-color] jogak:duration-150 jogak:leading-none",
799
- n ? "jogak:bg-[var(--jogak-color-accent)]" : "jogak:bg-[#1e293b]"
821
+ l ? "jogak:bg-[var(--jogak-color-accent)]" : "jogak:bg-[#1e293b]"
800
822
  ),
801
823
  children: "</>"
802
824
  }
803
825
  )
804
826
  ] });
805
827
  return /* @__PURE__ */ j("div", { children: [
806
- l,
807
- n && /* @__PURE__ */ e("div", { className: "jogak:mt-2 jogak:rounded-[var(--jogak-radius-xl)] jogak:overflow-hidden jogak:h-[320px] jogak:shadow-[0_0_0_1px_rgba(0,0,0,0.08),_0_4px_16px_rgba(0,0,0,0.12)]", children: /* @__PURE__ */ e(wo, { source: r, theme: t }) })
828
+ d,
829
+ l && /* @__PURE__ */ e("div", { className: "jogak:mt-2 jogak:rounded-[var(--jogak-radius-xl)] jogak:overflow-hidden jogak:h-[320px] jogak:shadow-[0_0_0_1px_rgba(0,0,0,0.08),_0_4px_16px_rgba(0,0,0,0.12)]", children: /* @__PURE__ */ e(yo, { source: r, theme: t }) })
808
830
  ] });
809
831
  }
810
- const O = "jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:pb-9";
811
- function ho({ entry: o, args: a, previewIsolation: r }) {
832
+ const J = "jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:pb-9";
833
+ function vo({ entry: o, args: a, previewIsolation: r, userPreviewUrl: t, previewEntryPath: g }) {
812
834
  return r === "shadow" ? /* @__PURE__ */ e(
813
- jo,
835
+ co,
814
836
  {
815
837
  "data-testid": "preview-content",
816
- className: O,
817
- children: /* @__PURE__ */ e(vo, { entry: o, args: a })
838
+ className: J,
839
+ children: /* @__PURE__ */ e(No, { entry: o, args: a })
818
840
  }
819
841
  ) : r === "iframe" ? /* @__PURE__ */ e(
820
- io,
842
+ uo,
821
843
  {
822
844
  entry: o,
823
845
  args: a,
846
+ userPreviewUrl: t,
847
+ previewEntryPath: g,
824
848
  "data-testid": "preview-content",
825
- className: `${O} jogak:block jogak:w-full jogak:bg-transparent jogak:min-h-[256px]`
849
+ className: `${J} jogak:block jogak:w-full jogak:bg-transparent jogak:min-h-[256px]`
826
850
  }
827
- ) : /* @__PURE__ */ e(xo, { entry: o, args: a });
851
+ ) : /* @__PURE__ */ e(wo, { entry: o, args: a });
828
852
  }
829
- function xo({ entry: o, args: a }) {
830
- const r = _(null);
831
- return b(() => {
853
+ function wo({ entry: o, args: a }) {
854
+ const r = E(null);
855
+ return h(() => {
832
856
  const t = r.current;
833
857
  if (t !== null)
834
- return S.render(o, a, t), () => {
858
+ return _.render(o, a, t), () => {
835
859
  queueMicrotask(() => {
836
- S.unmount(t);
860
+ _.unmount(t);
837
861
  });
838
862
  };
839
- }, [o]), b(() => {
863
+ }, [o]), h(() => {
840
864
  const t = r.current;
841
- t !== null && S.render(o, a, t);
865
+ t !== null && _.render(o, a, t);
842
866
  }, [o, a]), /* @__PURE__ */ e(
843
867
  "div",
844
868
  {
845
869
  ref: r,
846
870
  "data-testid": "preview-content",
847
- className: O
871
+ className: J
848
872
  }
849
873
  );
850
874
  }
851
- function vo({ entry: o, args: a }) {
852
- const r = _(null);
853
- return b(() => {
875
+ function No({ entry: o, args: a }) {
876
+ const r = E(null);
877
+ return h(() => {
854
878
  const t = r.current;
855
879
  if (t !== null)
856
- return S.render(o, a, t), () => {
880
+ return _.render(o, a, t), () => {
857
881
  queueMicrotask(() => {
858
- S.unmount(t);
882
+ _.unmount(t);
859
883
  });
860
884
  };
861
- }, [o]), b(() => {
885
+ }, [o]), h(() => {
862
886
  const t = r.current;
863
- t !== null && S.render(o, a, t);
887
+ t !== null && _.render(o, a, t);
864
888
  }, [o, a]), /* @__PURE__ */ e("div", { ref: r, "data-testid": "preview-content-shadow" });
865
889
  }
866
- function wo({ source: o, theme: a }) {
867
- const [r, t] = m(!1), k = a.plain.backgroundColor ?? "#1e293b";
890
+ function yo({ source: o, theme: a }) {
891
+ const [r, t] = b(!1), g = a.plain.backgroundColor ?? "#1e293b";
868
892
  return o === void 0 ? /* @__PURE__ */ e(
869
893
  "div",
870
894
  {
871
895
  className: "jogak:h-full jogak:flex jogak:items-center jogak:justify-center jogak:bg-[var(--jogak-source-bg)] jogak:text-[#94a3b8] jogak:text-[13px]",
872
- style: { "--jogak-source-bg": k },
896
+ style: { "--jogak-source-bg": g },
873
897
  children: "Source not available"
874
898
  }
875
899
  ) : /* @__PURE__ */ j("div", { className: "jogak:relative jogak:h-full", children: [
@@ -888,126 +912,131 @@ function wo({ source: o, theme: a }) {
888
912
  children: r ? "✓ Copied" : "Copy"
889
913
  }
890
914
  ),
891
- /* @__PURE__ */ e(T, { code: o.trim(), language: "tsx", theme: a, children: ({ style: s, tokens: l, getLineProps: g, getTokenProps: i }) => /* @__PURE__ */ e(
915
+ /* @__PURE__ */ e(ao, { code: o.trim(), language: "tsx", theme: a, children: ({ style: s, tokens: l, getLineProps: i, getTokenProps: d }) => /* @__PURE__ */ e(
892
916
  "pre",
893
917
  {
894
918
  className: "jogak:m-0 jogak:py-3 jogak:px-0 jogak:text-[12.5px] jogak:leading-[1.7] jogak:font-[family-name:var(--jogak-font-mono)] jogak:h-full jogak:box-border jogak:overflow-auto",
895
919
  style: s,
896
- children: l.map((c, p) => /* @__PURE__ */ j(
920
+ children: l.map((k, c) => /* @__PURE__ */ j(
897
921
  "div",
898
922
  {
899
- ...g({ line: c }),
923
+ ...i({ line: k }),
900
924
  className: "jogak:flex jogak:pr-6",
901
- style: g({ line: c }).style,
925
+ style: i({ line: k }).style,
902
926
  children: [
903
- /* @__PURE__ */ e("span", { className: "jogak:select-none jogak:min-w-10 jogak:pl-[14px] jogak:pr-[14px] jogak:text-right jogak:text-[rgba(148,163,184,0.45)] jogak:shrink-0 jogak:leading-[1.7]", children: p + 1 }),
904
- /* @__PURE__ */ e("span", { children: c.map((w, N) => /* @__PURE__ */ e("span", { ...i({ token: w }) }, N)) })
927
+ /* @__PURE__ */ e("span", { className: "jogak:select-none jogak:min-w-10 jogak:pl-[14px] jogak:pr-[14px] jogak:text-right jogak:text-[rgba(148,163,184,0.45)] jogak:shrink-0 jogak:leading-[1.7]", children: c + 1 }),
928
+ /* @__PURE__ */ e("span", { children: k.map((x, p) => /* @__PURE__ */ e("span", { ...d({ token: x }) }, p)) })
905
929
  ]
906
930
  },
907
- p
931
+ c
908
932
  ))
909
933
  }
910
934
  ) })
911
935
  ] });
912
936
  }
913
- function D() {
937
+ function U() {
914
938
  if (typeof window > "u") return null;
915
939
  const o = new URLSearchParams(window.location.search), a = o.get("entry");
916
940
  if (a === null) return null;
917
941
  const r = o.get("jogak");
918
942
  return { entryId: a, jogakName: r };
919
943
  }
920
- function No(o, a) {
944
+ function So(o, a) {
921
945
  const r = new URLSearchParams();
922
946
  r.set("entry", o), r.set("jogak", a), window.history.pushState({}, "", `?${r.toString()}`);
923
947
  }
924
- function $o({
948
+ function Lo({
925
949
  entries: o,
926
950
  metas: a,
927
951
  codeTheme: r = "vsDark",
928
- previewIsolation: t = "shadow"
952
+ previewIsolation: t = "iframe",
953
+ userPreviewUrl: g = "",
954
+ previewEntryPath: n = "/__jogak_preview__/index.html",
955
+ userViteUrl: s
929
956
  } = {}) {
930
- const k = C(() => {
957
+ const l = g !== "" ? g : s ?? "", i = R(() => {
931
958
  if (o !== void 0) {
932
959
  a !== void 0 && console.warn(
933
960
  "[jogak] JogakApp received both `entries` and `metas` — `entries` (eager) takes precedence."
934
961
  );
935
- const d = new Q();
936
- for (const u of o) d.register(u);
937
- return d;
962
+ const u = new Y();
963
+ for (const f of o) u.register(f);
964
+ return u;
938
965
  }
939
966
  if (a !== void 0)
940
- for (const d of a) W.registerMeta(d);
941
- return W;
942
- }, [o, a]), n = C(() => D(), []), [s, l] = m(
943
- (n == null ? void 0 : n.entryId) ?? null
944
- ), [g, i] = m(
945
- (n == null ? void 0 : n.jogakName) ?? null
946
- ), [c, p] = m({});
947
- b(() => {
948
- const d = () => {
949
- const u = D();
950
- u !== null ? (l(u.entryId), i(u.jogakName), p({})) : (l(null), i(null));
967
+ for (const u of a) F.registerMeta(u);
968
+ return F;
969
+ }, [o, a]), d = R(() => U(), []), [k, c] = b(
970
+ (d == null ? void 0 : d.entryId) ?? null
971
+ ), [x, p] = b(
972
+ (d == null ? void 0 : d.jogakName) ?? null
973
+ ), [S, y] = b({});
974
+ h(() => {
975
+ const u = () => {
976
+ const f = U();
977
+ f !== null ? (c(f.entryId), p(f.jogakName), y({})) : (c(null), p(null));
951
978
  };
952
- return window.addEventListener("popstate", d), () => {
953
- window.removeEventListener("popstate", d);
979
+ return window.addEventListener("popstate", u), () => {
980
+ window.removeEventListener("popstate", u);
954
981
  };
955
982
  }, []);
956
- const w = R((d, u) => {
957
- l(d), i(u), p({}), No(d, u);
958
- }, []), N = R((d, u) => {
959
- if (l((f) => f === d ? d : f), i((f) => f ?? u), typeof window < "u") {
960
- const f = new URLSearchParams(window.location.search);
961
- f.get("entry") === d && f.get("jogak") === null && (f.set("jogak", u), window.history.replaceState({}, "", `?${f.toString()}`));
983
+ const v = $((u, f) => {
984
+ c(u), p(f), y({}), So(u, f);
985
+ }, []), w = $((u, f) => {
986
+ if (c((m) => m === u ? u : m), p((m) => m ?? f), typeof window < "u") {
987
+ const m = new URLSearchParams(window.location.search);
988
+ m.get("entry") === u && m.get("jogak") === null && (m.set("jogak", f), window.history.replaceState({}, "", `?${m.toString()}`));
962
989
  }
963
- }, []), h = R((d, u) => {
964
- p((f) => ({ ...f, [d]: u }));
965
- }, []), x = R(() => {
966
- p({});
990
+ }, []), W = $((u, f) => {
991
+ y((m) => ({ ...m, [u]: f }));
992
+ }, []), A = $(() => {
993
+ y({});
967
994
  }, []);
968
- return /* @__PURE__ */ e(Z, { registry: k, children: /* @__PURE__ */ j(
995
+ return /* @__PURE__ */ e(T, { registry: i, children: /* @__PURE__ */ j(
969
996
  "div",
970
997
  {
971
998
  "data-jogak-shell": !0,
972
999
  className: "jogak:grid jogak:grid-cols-[260px_1fr] jogak:h-dvh jogak:overflow-hidden",
973
1000
  children: [
974
1001
  /* @__PURE__ */ e(
975
- ao,
1002
+ ro,
976
1003
  {
977
- selectedEntryId: s,
978
- selectedJogakName: g,
979
- onSelect: w
1004
+ selectedEntryId: k,
1005
+ selectedJogakName: x,
1006
+ onSelect: v
980
1007
  }
981
1008
  ),
982
- /* @__PURE__ */ e("main", { className: "jogak:overflow-hidden jogak:min-h-0", children: s !== null ? /* @__PURE__ */ e(
983
- po,
1009
+ /* @__PURE__ */ e("main", { className: "jogak:overflow-hidden jogak:min-h-0", children: k !== null ? /* @__PURE__ */ e(
1010
+ mo,
984
1011
  {
985
- entryId: s,
986
- jogakName: g,
987
- overrideArgs: c,
988
- onArgChange: h,
989
- onReset: x,
1012
+ entryId: k,
1013
+ jogakName: x,
1014
+ overrideArgs: S,
1015
+ onArgChange: W,
1016
+ onReset: A,
990
1017
  codeTheme: r,
991
- onResolveJogak: N,
992
- previewIsolation: t
1018
+ onResolveJogak: w,
1019
+ previewIsolation: t,
1020
+ userPreviewUrl: l,
1021
+ previewEntryPath: n
993
1022
  }
994
1023
  ) : /* @__PURE__ */ e("div", { className: "jogak:flex jogak:items-center jogak:justify-center jogak:h-full jogak:text-[var(--jogak-color-fg-subtle)]", children: "Select a component from the sidebar" }) })
995
1024
  ]
996
1025
  }
997
1026
  ) });
998
1027
  }
999
- function Lo() {
1000
- const o = K(), a = C(() => o.getAll(), [o]), r = C(() => o.getTree(), [o]), t = C(
1001
- () => (k) => o.search(k),
1028
+ function Mo() {
1029
+ const o = oo(), a = R(() => o.getAll(), [o]), r = R(() => o.getTree(), [o]), t = R(
1030
+ () => (g) => o.search(g),
1002
1031
  [o]
1003
1032
  );
1004
1033
  return { entries: a, tree: r, search: t };
1005
1034
  }
1006
1035
  export {
1007
- lo as Actions,
1008
- go as Controls,
1009
- $o as JogakApp,
1010
- po as Preview,
1011
- ao as Sidebar,
1012
- Lo as useRegistry
1036
+ jo as Actions,
1037
+ lo as Controls,
1038
+ Lo as JogakApp,
1039
+ mo as Preview,
1040
+ ro as Sidebar,
1041
+ Mo as useRegistry
1013
1042
  };