artifactuse 0.2.5 → 0.3.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.
package/README.md CHANGED
@@ -792,6 +792,14 @@ on('media:open', ({ type, src, alt, caption }) => {
792
792
  on('edit:save', ({ artifactId, artifact, code }) => {
793
793
  console.log('Code saved:', code);
794
794
  });
795
+
796
+ // Console output from HTML artifacts
797
+ on('console:log', ({ artifactId, entry }) => {
798
+ // entry: { type: 'log'|'warn'|'error'|'info', content: string, timestamp: number, stack?: string }
799
+ if (entry.type === 'error') {
800
+ // Send error back to AI for auto-fix
801
+ }
802
+ });
795
803
  ```
796
804
 
797
805
  ## Programmatic API
@@ -581,9 +581,9 @@ function Kr(e, t, r, a) {
581
581
  if (r === "smartdiff")
582
582
  try {
583
583
  const v = JSON.parse(t), M = Xr(v.oldCode, v.newCode).split(`
584
- `), A = M.slice(0, s), S = A.map((B) => B[0] || " "), L = A.map((B) => B.slice(1)), $ = v.language || "plaintext", y = ge($), z = ot(L.join(`
585
- `), y), j = ae() && window.Prism.languages[y], E = M.length > s, T = n(M.length, E), N = T ? " artifactuse-inline-preview--static" : "", X = T ? ' data-non-clickable="true"' : "", O = o("smartdiff", M.length);
586
- return `<div class="artifactuse-inline-preview${E ? " artifactuse-inline-preview--truncated" : ""}${N}" data-artifact-id="${e.id}" data-smartdiff="true" data-smartdiff-markers="${S.join(",")}"${X}><pre class="artifactuse-inline-preview__pre${j ? " language-" + $ : ""}"><code class="language-${$}${j ? " prism-highlighted" : ""}">${z}</code></pre>` + (E ? `<div class="artifactuse-inline-preview__fade"><span class="artifactuse-inline-preview__action">${O}</span></div>` : "") + "</div>";
584
+ `), A = M.slice(0, s), S = A.map((B) => B[0] || " "), L = A.map((B) => B.slice(1)), $ = v.language || "plaintext", k = ge($), z = ot(L.join(`
585
+ `), k), j = ae() && window.Prism.languages[k], P = M.length > s, T = n(M.length, P), N = T ? " artifactuse-inline-preview--static" : "", X = T ? ' data-non-clickable="true"' : "", O = o("smartdiff", M.length);
586
+ return `<div class="artifactuse-inline-preview${P ? " artifactuse-inline-preview--truncated" : ""}${N}" data-artifact-id="${e.id}" data-smartdiff="true" data-smartdiff-markers="${S.join(",")}"${X}><pre class="artifactuse-inline-preview__pre${j ? " language-" + $ : ""}"><code class="language-${$}${j ? " prism-highlighted" : ""}">${z}</code></pre>` + (P ? `<div class="artifactuse-inline-preview__fade"><span class="artifactuse-inline-preview__action">${O}</span></div>` : "") + "</div>";
587
587
  } catch {
588
588
  }
589
589
  let i = t, u = r;
@@ -716,8 +716,8 @@ function ra() {
716
716
  t.forEach(($) => {
717
717
  try {
718
718
  $(e);
719
- } catch (y) {
720
- console.error("Artifactuse state subscriber error:", y);
719
+ } catch (k) {
720
+ console.error("Artifactuse state subscriber error:", k);
721
721
  }
722
722
  });
723
723
  }
@@ -730,15 +730,15 @@ function ra() {
730
730
  return { ...e };
731
731
  }
732
732
  function n($) {
733
- const y = e.artifacts.findIndex((z) => z.id === $.id);
734
- if (y === -1)
733
+ const k = e.artifacts.findIndex((z) => z.id === $.id);
734
+ if (k === -1)
735
735
  e = {
736
736
  ...e,
737
737
  artifacts: [...e.artifacts, $]
738
738
  };
739
739
  else {
740
740
  const z = [...e.artifacts];
741
- z[y] = { ...z[y], ...$ }, e = {
741
+ z[k] = { ...z[k], ...$ }, e = {
742
742
  ...e,
743
743
  artifacts: z
744
744
  };
@@ -749,26 +749,26 @@ function ra() {
749
749
  $.forEach(n);
750
750
  }
751
751
  function i($) {
752
- const y = e.openTabs.filter((E) => E !== $), { [$]: z, ...j } = e.tabViewModes;
752
+ const k = e.openTabs.filter((P) => P !== $), { [$]: z, ...j } = e.tabViewModes;
753
753
  e = {
754
754
  ...e,
755
- artifacts: e.artifacts.filter((E) => E.id !== $),
755
+ artifacts: e.artifacts.filter((P) => P.id !== $),
756
756
  activeArtifactId: e.activeArtifactId === $ ? null : e.activeArtifactId,
757
757
  isPanelOpen: e.activeArtifactId === $ ? !1 : e.isPanelOpen,
758
- openTabs: y,
758
+ openTabs: k,
759
759
  tabViewModes: j
760
760
  }, r();
761
761
  }
762
762
  function u($) {
763
- return e.artifacts.find((y) => y.id === $) || null;
763
+ return e.artifacts.find((k) => k.id === $) || null;
764
764
  }
765
765
  function l() {
766
766
  return e.activeArtifactId ? u(e.activeArtifactId) : null;
767
767
  }
768
768
  function d($) {
769
- const y = u($);
769
+ const k = u($);
770
770
  let z = e.tabViewModes[$];
771
- z || (z = (y == null ? void 0 : y.isPreviewable) === !1 ? "code" : "preview", y != null && y.tabs && !y.tabs.includes(z) && (z = y.tabs[0])), e = {
771
+ z || (z = (k == null ? void 0 : k.isPreviewable) === !1 ? "code" : "preview", k != null && k.tabs && !k.tabs.includes(z) && (z = k.tabs[0])), e = {
772
772
  ...e,
773
773
  activeArtifactId: $,
774
774
  viewMode: z,
@@ -793,11 +793,11 @@ function ra() {
793
793
  console.warn(`Invalid view mode: ${$}`);
794
794
  return;
795
795
  }
796
- const y = e.activeArtifactId ? { ...e.tabViewModes, [e.activeArtifactId]: $ } : e.tabViewModes;
796
+ const k = e.activeArtifactId ? { ...e.tabViewModes, [e.activeArtifactId]: $ } : e.tabViewModes;
797
797
  e = {
798
798
  ...e,
799
799
  viewMode: $,
800
- tabViewModes: y
800
+ tabViewModes: k
801
801
  }, r();
802
802
  }
803
803
  function h($) {
@@ -813,39 +813,39 @@ function ra() {
813
813
  }, r();
814
814
  }
815
815
  function g($) {
816
- return e.artifacts.filter((y) => y.messageId === $);
816
+ return e.artifacts.filter((k) => k.messageId === $);
817
817
  }
818
818
  function m($) {
819
- return e.artifacts.filter((y) => y.type === $);
819
+ return e.artifacts.filter((k) => k.type === $);
820
820
  }
821
821
  function b() {
822
822
  return e.artifacts.length;
823
823
  }
824
824
  function v($) {
825
- const y = u($);
826
- if (!y) return;
825
+ const k = u($);
826
+ if (!k) return;
827
827
  const j = e.openTabs.includes($) ? e.openTabs : [...e.openTabs, $];
828
- let E = e.tabViewModes[$];
829
- E || (E = y.isPreviewable === !1 ? "code" : "preview", y.tabs && !y.tabs.includes(E) && (E = y.tabs[0])), e = {
828
+ let P = e.tabViewModes[$];
829
+ P || (P = k.isPreviewable === !1 ? "code" : "preview", k.tabs && !k.tabs.includes(P) && (P = k.tabs[0])), e = {
830
830
  ...e,
831
831
  openTabs: j,
832
832
  activeArtifactId: $,
833
- tabViewModes: { ...e.tabViewModes, [$]: E },
834
- viewMode: E
833
+ tabViewModes: { ...e.tabViewModes, [$]: P },
834
+ viewMode: P
835
835
  }, r();
836
836
  }
837
837
  function x($) {
838
- const y = e.openTabs.indexOf($);
839
- if (y === -1) return;
840
- const z = e.openTabs.filter((X) => X !== $), { [$]: j, ...E } = e.tabViewModes;
838
+ const k = e.openTabs.indexOf($);
839
+ if (k === -1) return;
840
+ const z = e.openTabs.filter((X) => X !== $), { [$]: j, ...P } = e.tabViewModes;
841
841
  let T = e.activeArtifactId;
842
- e.activeArtifactId === $ && (z.length === 0 ? T = null : y >= z.length ? T = z[z.length - 1] : T = z[y]);
843
- const N = T && E[T] || "preview";
842
+ e.activeArtifactId === $ && (z.length === 0 ? T = null : k >= z.length ? T = z[z.length - 1] : T = z[k]);
843
+ const N = T && P[T] || "preview";
844
844
  e = {
845
845
  ...e,
846
846
  openTabs: z,
847
847
  activeArtifactId: T,
848
- tabViewModes: E,
848
+ tabViewModes: P,
849
849
  viewMode: N
850
850
  }, r();
851
851
  }
@@ -881,7 +881,7 @@ function ra() {
881
881
  }, r();
882
882
  }
883
883
  function L($) {
884
- const y = r;
884
+ const k = r;
885
885
  let z = !1;
886
886
  const j = () => {
887
887
  z = !0;
@@ -892,7 +892,7 @@ function ra() {
892
892
  configurable: !0
893
893
  }), $();
894
894
  } finally {
895
- delete window.__artifactuse_notify__, z && y();
895
+ delete window.__artifactuse_notify__, z && k();
896
896
  }
897
897
  }
898
898
  return {
@@ -936,113 +936,113 @@ function aa(e = []) {
936
936
  const t = Array.isArray(e) ? e : [e].filter(Boolean), r = new Set(t), a = /* @__PURE__ */ new Map();
937
937
  let s = null, n = !1, o = !1;
938
938
  const i = [];
939
- function u(y) {
939
+ function u(k) {
940
940
  if (r.size === 0)
941
941
  return console.warn("Artifactuse bridge: No allowed origins configured, accepting all messages"), !0;
942
- const z = ut(y);
942
+ const z = ut(k);
943
943
  if (!z) return !1;
944
944
  for (const j of r) {
945
- const E = ut(j);
946
- if (E && E === z || j === z)
945
+ const P = ut(j);
946
+ if (P && P === z || j === z)
947
947
  return !0;
948
948
  }
949
949
  return !1;
950
950
  }
951
- function l(y) {
952
- var O, B, k;
953
- if (((O = y.data) == null ? void 0 : O.type) === "artifactuse" && (console.log("[Bridge] Message from:", y.origin, "action:", (B = y.data) == null ? void 0 : B.action), console.log("[Bridge] Allowed origins:", w())), !u(y.origin)) {
954
- ((k = y.data) == null ? void 0 : k.type) === "artifactuse" && console.warn("[Bridge] Origin NOT allowed:", y.origin);
951
+ function l(k) {
952
+ var O, B, y;
953
+ if (((O = k.data) == null ? void 0 : O.type) === "artifactuse" && (console.log("[Bridge] Message from:", k.origin, "action:", (B = k.data) == null ? void 0 : B.action), console.log("[Bridge] Allowed origins:", w())), !u(k.origin)) {
954
+ ((y = k.data) == null ? void 0 : y.type) === "artifactuse" && console.warn("[Bridge] Origin NOT allowed:", k.origin);
955
955
  return;
956
956
  }
957
- const { type: z, action: j, data: E, requestId: T } = y.data || {};
957
+ const { type: z, action: j, data: P, requestId: T } = k.data || {};
958
958
  if (z !== "artifactuse") return;
959
959
  if (j === "ready" || j === "panel:ready") {
960
960
  console.log("[Bridge] panel:ready received, setting isReady=true"), n = !0, o = !0, h();
961
961
  return;
962
962
  }
963
- (a.get(j) || []).forEach((P) => {
963
+ (a.get(j) || []).forEach((E) => {
964
964
  try {
965
- P(E, T);
965
+ E(P, T);
966
966
  } catch (R) {
967
967
  console.error(`Artifactuse bridge handler error (${j}):`, R);
968
968
  }
969
- }), (a.get("*") || []).forEach((P) => {
969
+ }), (a.get("*") || []).forEach((E) => {
970
970
  try {
971
- P({ action: j, data: E, requestId: T });
971
+ E({ action: j, data: P, requestId: T });
972
972
  } catch (R) {
973
973
  console.error("Artifactuse bridge wildcard handler error:", R);
974
974
  }
975
975
  });
976
976
  }
977
977
  window.addEventListener("message", l);
978
- function d(y) {
979
- y && typeof y == "string" && r.add(y);
978
+ function d(k) {
979
+ k && typeof k == "string" && r.add(k);
980
980
  }
981
- function p(y) {
982
- y && typeof y == "string" && r.delete(y);
981
+ function p(k) {
982
+ k && typeof k == "string" && r.delete(k);
983
983
  }
984
984
  function w() {
985
985
  return [...r];
986
986
  }
987
- function c(y) {
988
- console.log("[Bridge] setIframe called, current isReady:", n, "readySignalReceived:", o, "same iframe:", s === y), s !== y && (s = y, o ? (console.log("[Bridge] Ready signal was already received, keeping isReady=true"), n = !0) : n = !1), console.log("[Bridge] setIframe done, isReady:", n, "pendingMessages:", i.length), h();
987
+ function c(k) {
988
+ console.log("[Bridge] setIframe called, current isReady:", n, "readySignalReceived:", o, "same iframe:", s === k), s !== k && (s = k, o ? (console.log("[Bridge] Ready signal was already received, keeping isReady=true"), n = !0) : n = !1), console.log("[Bridge] setIframe done, isReady:", n, "pendingMessages:", i.length), h();
989
989
  }
990
990
  function h() {
991
- console.log("[Bridge] flushPendingMessages: isReady=", n, "hasIframe=", !!(s != null && s.contentWindow), "pending=", i.length), n && (s != null && s.contentWindow) && i.length > 0 && (console.log("[Bridge] Flushing", i.length, "pending messages"), i.forEach((y) => f(y)), i.length = 0);
991
+ console.log("[Bridge] flushPendingMessages: isReady=", n, "hasIframe=", !!(s != null && s.contentWindow), "pending=", i.length), n && (s != null && s.contentWindow) && i.length > 0 && (console.log("[Bridge] Flushing", i.length, "pending messages"), i.forEach((k) => f(k)), i.length = 0);
992
992
  }
993
- function f(y, z = "*") {
993
+ function f(k, z = "*") {
994
994
  if (!(s != null && s.contentWindow))
995
995
  return console.warn("Artifactuse: No panel iframe available"), !1;
996
996
  try {
997
- return s.contentWindow.postMessage(y, z), !0;
997
+ return s.contentWindow.postMessage(k, z), !0;
998
998
  } catch (j) {
999
999
  return console.error("Artifactuse bridge send error:", j), !1;
1000
1000
  }
1001
1001
  }
1002
- function g(y, z, j = null, E = "*") {
1002
+ function g(k, z, j = null, P = "*") {
1003
1003
  const T = {
1004
1004
  type: "artifactuse",
1005
- action: y,
1005
+ action: k,
1006
1006
  data: z,
1007
1007
  requestId: j || dt(),
1008
1008
  timestamp: Date.now()
1009
1009
  };
1010
- return n ? (f(T, E), T.requestId) : (i.push(T), T.requestId);
1010
+ return n ? (f(T, P), T.requestId) : (i.push(T), T.requestId);
1011
1011
  }
1012
- function m(y, z, j = 3e4) {
1013
- return new Promise((E, T) => {
1012
+ function m(k, z, j = 3e4) {
1013
+ return new Promise((P, T) => {
1014
1014
  const N = dt(), X = setTimeout(() => {
1015
- v(`${y}:response`, O), T(new Error(`Artifactuse bridge request timeout: ${y}`));
1016
- }, j), O = (B, k) => {
1017
- k === N && (clearTimeout(X), v(`${y}:response`, O), E(B));
1015
+ v(`${k}:response`, O), T(new Error(`Artifactuse bridge request timeout: ${k}`));
1016
+ }, j), O = (B, y) => {
1017
+ y === N && (clearTimeout(X), v(`${k}:response`, O), P(B));
1018
1018
  };
1019
- b(`${y}:response`, O), g(y, z, N);
1019
+ b(`${k}:response`, O), g(k, z, N);
1020
1020
  });
1021
1021
  }
1022
- function b(y, z) {
1023
- return a.has(y) || a.set(y, []), a.get(y).push(z), () => v(y, z);
1022
+ function b(k, z) {
1023
+ return a.has(k) || a.set(k, []), a.get(k).push(z), () => v(k, z);
1024
1024
  }
1025
- function v(y, z) {
1026
- const j = a.get(y);
1025
+ function v(k, z) {
1026
+ const j = a.get(k);
1027
1027
  if (j) {
1028
- const E = j.indexOf(z);
1029
- E > -1 && j.splice(E, 1);
1028
+ const P = j.indexOf(z);
1029
+ P > -1 && j.splice(P, 1);
1030
1030
  }
1031
1031
  }
1032
- function x(y) {
1033
- return g("load:artifact", y);
1032
+ function x(k) {
1033
+ return g("load:artifact", k);
1034
1034
  }
1035
- function M(y, z) {
1036
- return g("update:artifact", { artifactId: y, updates: z });
1035
+ function M(k, z) {
1036
+ return g("update:artifact", { artifactId: k, updates: z });
1037
1037
  }
1038
1038
  function A() {
1039
1039
  return m("save", {});
1040
1040
  }
1041
- function S(y = "default") {
1042
- return m("export", { format: y });
1041
+ function S(k = "default") {
1042
+ return m("export", { format: k });
1043
1043
  }
1044
- function L(y, z) {
1045
- return g("ai:response", y, z);
1044
+ function L(k, z) {
1045
+ return g("ai:response", k, z);
1046
1046
  }
1047
1047
  function $() {
1048
1048
  window.removeEventListener("message", l), a.clear(), r.clear(), s = null, n = !1, o = !1, i.length = 0;
@@ -1726,23 +1726,23 @@ function ha(e = {}) {
1726
1726
  rectangularSelection: A,
1727
1727
  crosshairCursor: S,
1728
1728
  highlightActiveLine: L
1729
- } = t.view, { defaultKeymap: $, history: y, historyKeymap: z, indentWithTab: j } = t.commands, {
1730
- indentOnInput: E,
1729
+ } = t.view, { defaultKeymap: $, history: k, historyKeymap: z, indentWithTab: j } = t.commands, {
1730
+ indentOnInput: P,
1731
1731
  syntaxHighlighting: T,
1732
1732
  bracketMatching: N,
1733
1733
  foldGutter: X,
1734
1734
  foldKeymap: O,
1735
1735
  HighlightStyle: B
1736
1736
  } = t.language, {
1737
- closeBrackets: k,
1738
- closeBracketsKeymap: P,
1737
+ closeBrackets: y,
1738
+ closeBracketsKeymap: E,
1739
1739
  autocompletion: R,
1740
1740
  completionKeymap: C
1741
1741
  } = t.autocomplete, D = ((U = t.lezerHighlight) == null ? void 0 : U.tags) || ((ve = t.language) == null ? void 0 : ve.tags), _ = l(c.sdkTheme), q = _ ? s(f) : n(f), J = [
1742
1742
  m(),
1743
1743
  b(),
1744
1744
  v(),
1745
- y(),
1745
+ k(),
1746
1746
  X({
1747
1747
  openText: "▾",
1748
1748
  closedText: "▸"
@@ -1750,16 +1750,16 @@ function ha(e = {}) {
1750
1750
  x(),
1751
1751
  M(),
1752
1752
  h.allowMultipleSelections.of(!0),
1753
- E(),
1753
+ P(),
1754
1754
  ...D ? [T(o(B, D, _))] : [],
1755
1755
  N(),
1756
- k(),
1756
+ y(),
1757
1757
  R(),
1758
1758
  A(),
1759
1759
  S(),
1760
1760
  L(),
1761
1761
  g.of([
1762
- ...P,
1762
+ ...E,
1763
1763
  ...$,
1764
1764
  ...z,
1765
1765
  ...O,
@@ -3238,9 +3238,9 @@ function ds(e, t = {}) {
3238
3238
  const v = new RegExp(`(?<!["'=])(https?:\\/\\/open\\.spotify\\.com\\/show\\/([a-zA-Z0-9]+))(?!["'])`, "gi");
3239
3239
  e = e.replace(v, (A, S, L) => F("show", L, r));
3240
3240
  const x = /<a[^>]*href="(https?:\/\/music\.apple\.com\/([a-z]{2})\/([a-z-]+)\/[^\/]+\/(\d+)[^"]*)"[^>]*>[^<]*<\/a>/gi;
3241
- e = e.replace(x, (A, S, L, $, y) => xt(L, $, y));
3241
+ e = e.replace(x, (A, S, L, $, k) => xt(L, $, k));
3242
3242
  const M = new RegExp(`(?<!["'=])(https?:\\/\\/music\\.apple\\.com\\/([a-z]{2})\\/([a-z-]+)\\/[^\\/\\s]+\\/(\\d+))(?!["'])`, "gi");
3243
- e = e.replace(M, (A, S, L, $, y) => xt(L, $, y));
3243
+ e = e.replace(M, (A, S, L, $, k) => xt(L, $, k));
3244
3244
  for (let A = a.length - 1; A >= 0; A--)
3245
3245
  e = e.replace(`__PROTECTED_${A}__`, a[A]);
3246
3246
  return e;
@@ -4864,6 +4864,9 @@ const Hr = {
4864
4864
  // Show "Open in new tab" button in panel header to open preview URL externally
4865
4865
  // Can be overridden per-artifact via openFile/openCode options or per-component via props
4866
4866
  externalPreview: !1,
4867
+ // Show console panel footer for runtime logs/errors from HTML artifacts
4868
+ // When false, footer UI is hidden but console:log events still emit
4869
+ consolePanel: !0,
4867
4870
  // Enable multi-tab mode (open multiple artifacts as tabs)
4868
4871
  multiTab: !1,
4869
4872
  // Panel configuration
@@ -5021,11 +5024,11 @@ function Ks(e, t) {
5021
5024
  }
5022
5025
  function wn(e = {}) {
5023
5026
  const t = Ir(Ws, e), r = ra(), a = { ...Hr, ...t.panels }, s = Xs(a, t.cdnUrl), n = aa(s), o = ia(t.theme, t.colors || {}), i = Ks(t, n), u = fa(t.sharing), l = ha(t.editor);
5024
- function d(k, P, R = {}) {
5025
- let C = V.parse(k);
5027
+ function d(y, E, R = {}) {
5028
+ let C = V.parse(y);
5026
5029
  const D = [], _ = { theme: o.resolved }, q = R.inlinePreview ?? t.inlinePreview ?? null, J = R.inlineCode ?? t.inlineCode ?? null, le = R.tabs ?? t.tabs ?? null, K = R.viewMode ?? t.viewMode ?? null;
5027
5030
  if (t.processors.codeBlocks) {
5028
- const U = ta(C, P, {
5031
+ const U = ta(C, E, {
5029
5032
  ...t.codeExtraction,
5030
5033
  inlinePreview: q,
5031
5034
  inlineCode: J,
@@ -5041,9 +5044,9 @@ function wn(e = {}) {
5041
5044
  artifacts: D
5042
5045
  };
5043
5046
  }
5044
- async function p(k = document) {
5045
- const P = [], R = { theme: o.resolved };
5046
- t.processors.math && P.push(jr()), t.processors.mermaid && P.push(_r(R)), t.processors.tables && Zs(), t.processors.audio && fs(k), t.syntaxHighlight && (pr(k), (k === document ? document : k).querySelectorAll(".artifactuse-inline-preview[data-smartdiff]").forEach((_) => {
5047
+ async function p(y = document) {
5048
+ const E = [], R = { theme: o.resolved };
5049
+ t.processors.math && E.push(jr()), t.processors.mermaid && E.push(_r(R)), t.processors.tables && Zs(), t.processors.audio && fs(y), t.syntaxHighlight && (pr(y), (y === document ? document : y).querySelectorAll(".artifactuse-inline-preview[data-smartdiff]").forEach((_) => {
5047
5050
  var K;
5048
5051
  const q = _.querySelector("code");
5049
5052
  if (!q || q.dataset.smartdiffProcessed) return;
@@ -5054,27 +5057,27 @@ function wn(e = {}) {
5054
5057
  return Y === "-" ? `<span class="token deleted">${U}</span>` : Y === "+" ? `<span class="token inserted">${U}</span>` : U;
5055
5058
  }).join(`
5056
5059
  `), q.dataset.smartdiffProcessed = "true";
5057
- })), await Promise.all(P);
5060
+ })), await Promise.all(E);
5058
5061
  }
5059
- function w(k) {
5060
- if (k.isInline) {
5061
- console.warn("Attempted to open inline artifact in panel:", k.id);
5062
+ function w(y) {
5063
+ if (y.isInline) {
5064
+ console.warn("Attempted to open inline artifact in panel:", y.id);
5062
5065
  return;
5063
5066
  }
5064
- t.multiTab ? r.openTab(k.id) : r.setActiveArtifact(k.id), r.setForceEmptyView(!1), r.setPanelOpen(!0), k.viewMode && r.setViewMode(k.viewMode), T("artifact:opened", k);
5067
+ t.multiTab ? r.openTab(y.id) : r.setActiveArtifact(y.id), r.setForceEmptyView(!1), r.setPanelOpen(!0), y.viewMode && r.setViewMode(y.viewMode), T("artifact:opened", y);
5065
5068
  }
5066
- function c(k, P, R = {}) {
5067
- const C = k.split(".").pop(), D = R.language || Ur(C) || C, _ = R.title || k, q = r.getState().artifacts.find((J) => J.title === _ && !J.isInline);
5068
- return q ? (f(q.id, P, { ...R, title: _ }), w(q), R.viewMode ? r.setViewMode(R.viewMode) : R.tabs && r.setViewMode(R.tabs[0]), r.getArtifact(q.id)) : h(P, D, { ...R, title: _ });
5069
+ function c(y, E, R = {}) {
5070
+ const C = y.split(".").pop(), D = R.language || Ur(C) || C, _ = R.title || y, q = r.getState().artifacts.find((J) => J.title === _ && !J.isInline);
5071
+ return q ? (f(q.id, E, { ...R, title: _ }), w(q), R.viewMode ? r.setViewMode(R.viewMode) : R.tabs && r.setViewMode(R.tabs[0]), r.getArtifact(q.id)) : h(E, D, { ...R, title: _ });
5069
5072
  }
5070
- function h(k, P, R = {}) {
5071
- const C = R.messageId || Fr("open"), D = A({ type: P, language: P }) ? P : "txt", _ = $e(k, D, C, 0);
5072
- return _.title = R.title || _.title, _.isInline = !1, _.editorLanguage = P, R.tabs && (_.tabs = R.tabs), R.panelUrl && (_.panelUrl = R.panelUrl), R.externalPreview !== void 0 && (_.externalPreview = R.externalPreview), r.addArtifact(_), w(_), R.viewMode ? r.setViewMode(R.viewMode) : R.tabs && r.setViewMode(R.tabs[0]), _;
5073
+ function h(y, E, R = {}) {
5074
+ const C = R.messageId || Fr("open"), D = A({ type: E, language: E }) ? E : "txt", _ = $e(y, D, C, 0);
5075
+ return _.title = R.title || _.title, _.isInline = !1, _.editorLanguage = E, R.tabs && (_.tabs = R.tabs), R.panelUrl && (_.panelUrl = R.panelUrl), R.externalPreview !== void 0 && (_.externalPreview = R.externalPreview), r.addArtifact(_), w(_), R.viewMode ? r.setViewMode(R.viewMode) : R.tabs && r.setViewMode(R.tabs[0]), _;
5073
5076
  }
5074
- function f(k, P, R = {}) {
5075
- const C = typeof k == "string" ? k : k == null ? void 0 : k.id, D = r.getArtifact(C);
5077
+ function f(y, E, R = {}) {
5078
+ const C = typeof y == "string" ? y : y == null ? void 0 : y.id, D = r.getArtifact(C);
5076
5079
  if (!D) return null;
5077
- const _ = { ...D, code: P, _refreshToken: Date.now() };
5080
+ const _ = { ...D, code: E, _refreshToken: Date.now() };
5078
5081
  return R.title !== void 0 && (_.title = R.title), R.tabs !== void 0 && (_.tabs = R.tabs), R.panelUrl !== void 0 && (_.panelUrl = R.panelUrl), R.externalPreview !== void 0 && (_.externalPreview = R.externalPreview), r.addArtifact(_), T("artifact:updated", { artifactId: C, artifact: r.getArtifact(C) }), r.getArtifact(C);
5079
5082
  }
5080
5083
  function g() {
@@ -5084,70 +5087,73 @@ function wn(e = {}) {
5084
5087
  r.setPanelOpen(!1), r.setFullscreen(!1), T("panel:closed");
5085
5088
  }
5086
5089
  function b() {
5087
- const k = !r.getState().isPanelOpen;
5088
- r.clearActiveArtifact(), r.setPanelOpen(k), k || r.setFullscreen(!1), T("panel:toggled", { isOpen: k });
5090
+ const y = !r.getState().isPanelOpen;
5091
+ r.clearActiveArtifact(), r.setPanelOpen(y), y || r.setFullscreen(!1), T("panel:toggled", { isOpen: y });
5089
5092
  }
5090
5093
  function v() {
5091
- const k = !r.getState().isFullscreen;
5092
- r.setFullscreen(k), T("fullscreen:toggled", { isFullscreen: k });
5094
+ const y = !r.getState().isFullscreen;
5095
+ r.setFullscreen(y), T("fullscreen:toggled", { isFullscreen: y });
5093
5096
  }
5094
- function x(k) {
5095
- r.setViewMode(k), T("viewMode:changed", { mode: k });
5097
+ function x(y) {
5098
+ r.setViewMode(y), T("viewMode:changed", { mode: y });
5096
5099
  }
5097
- function M(k, P = {}) {
5098
- if (!k) return null;
5099
- if (k.panelUrl) return k.panelUrl;
5100
- const { type: R, language: C } = k, D = {
5101
- theme: P.theme || o.resolved
5100
+ function M(y, E = {}) {
5101
+ if (!y) return null;
5102
+ if (y.panelUrl) return y.panelUrl;
5103
+ const { type: R, language: C } = y, D = {
5104
+ theme: E.theme || o.resolved
5102
5105
  }, _ = o.colors;
5103
5106
  _ != null && _.primary && (D.accent = _.primary);
5104
5107
  let q = i.resolve(R, D);
5105
5108
  return !q && C && (q = i.resolve(C, D)), q;
5106
5109
  }
5107
- function A(k) {
5108
- return k ? i.has(k.type) || i.has(k.language) : !1;
5110
+ function A(y) {
5111
+ return y ? i.has(y.type) || i.has(y.language) : !1;
5109
5112
  }
5110
- function S(k, P) {
5111
- i.register(k, P);
5113
+ function S(y, E) {
5114
+ i.register(y, E);
5112
5115
  }
5113
- function L(k) {
5114
- i.unregister(k);
5116
+ function L(y) {
5117
+ i.unregister(y);
5115
5118
  }
5116
5119
  function $() {
5117
5120
  return i.getTypes();
5118
5121
  }
5119
- function y(k, P) {
5120
- n.send(k, P);
5122
+ function k(y, E) {
5123
+ n.send(y, E);
5121
5124
  }
5122
5125
  const z = /* @__PURE__ */ new Map();
5123
- function j(k, P) {
5124
- return z.has(k) || z.set(k, /* @__PURE__ */ new Set()), z.get(k).add(P), () => {
5126
+ function j(y, E) {
5127
+ return z.has(y) || z.set(y, /* @__PURE__ */ new Set()), z.get(y).add(E), () => {
5125
5128
  var R;
5126
- (R = z.get(k)) == null || R.delete(P);
5129
+ (R = z.get(y)) == null || R.delete(E);
5127
5130
  };
5128
5131
  }
5129
- function E(k, P) {
5132
+ function P(y, E) {
5130
5133
  var R;
5131
- (R = z.get(k)) == null || R.delete(P);
5134
+ (R = z.get(y)) == null || R.delete(E);
5132
5135
  }
5133
- function T(k, P) {
5136
+ function T(y, E) {
5134
5137
  var R;
5135
- (R = z.get(k)) == null || R.forEach((C) => {
5138
+ (R = z.get(y)) == null || R.forEach((C) => {
5136
5139
  try {
5137
- C(P);
5140
+ C(E);
5138
5141
  } catch (D) {
5139
- console.error(`Artifactuse event handler error (${k}):`, D);
5142
+ console.error(`Artifactuse event handler error (${y}):`, D);
5140
5143
  }
5141
5144
  });
5142
5145
  }
5143
- n.on("ai:request", (k) => T("ai:request", k)), n.on("save:request", (k) => T("save:request", k)), n.on("export:complete", (k) => T("export:complete", k)), n.on("form:submit", (k) => T("form:submit", k)), n.on("form:cancel", (k) => T("form:cancel", k)), n.on("form:step", (k) => T("form:step", k)), n.on("social:copy", (k) => T("social:copy", k)), n.on("edit:save", (k) => {
5144
- k != null && k.artifactId && (k == null ? void 0 : k.code) !== void 0 && f(k.artifactId, k.code), T("edit:save", k);
5146
+ n.on("ai:request", (y) => T("ai:request", y)), n.on("save:request", (y) => T("save:request", y)), n.on("export:complete", (y) => T("export:complete", y)), n.on("form:submit", (y) => T("form:submit", y)), n.on("form:cancel", (y) => T("form:cancel", y)), n.on("form:step", (y) => T("form:step", y)), n.on("social:copy", (y) => T("social:copy", y)), n.on("edit:save", (y) => {
5147
+ y != null && y.artifactId && (y == null ? void 0 : y.code) !== void 0 && f(y.artifactId, y.code), T("edit:save", y);
5148
+ }), n.on("console:log", (y) => {
5149
+ const E = r.getState().activeArtifactId;
5150
+ T("console:log", { artifactId: E, ...y });
5145
5151
  });
5146
5152
  function N() {
5147
5153
  o.apply();
5148
5154
  }
5149
- function X(k) {
5150
- o.set(k);
5155
+ function X(y) {
5156
+ o.set(y);
5151
5157
  }
5152
5158
  function O() {
5153
5159
  return o.resolved;
@@ -5176,10 +5182,10 @@ function wn(e = {}) {
5176
5182
  toggleFullscreen: v,
5177
5183
  setViewMode: x,
5178
5184
  getPanelUrl: M,
5179
- sendToPanel: y,
5185
+ sendToPanel: k,
5180
5186
  // Multi-tab
5181
- closeTab: (k) => r.closeTab(k),
5182
- closeOtherTabs: (k) => r.closeOtherTabs(k),
5187
+ closeTab: (y) => r.closeTab(y),
5188
+ closeOtherTabs: (y) => r.closeOtherTabs(y),
5183
5189
  closeAllTabs: () => r.closeAllTabs(),
5184
5190
  // Panel management (new)
5185
5191
  hasPanel: A,
@@ -5195,7 +5201,7 @@ function wn(e = {}) {
5195
5201
  getTheme: O,
5196
5202
  // Events
5197
5203
  on: j,
5198
- off: E,
5204
+ off: P,
5199
5205
  emit: T,
5200
5206
  // Editor (CodeMirror integration)
5201
5207
  editor: l,
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { D as s, aJ as r, at as t, J as d, d as c, G as o, a_ as i, am as m, k as l, ar as b, ap as E, ak as n, a6 as p, a7 as g, E as h, ae as M, al as T, m as u, aG as A, X as f, ai as S, aj as C, ad as y, a5 as P, aq as I, a0 as G, a1 as L, N as V, O as D, s as k, af as F, S as z, T as v, a8 as B, V as w, C as K, aO as X, aw as x, au as H, as as O, P as R, a3 as N, _ as U, Y as J, W, aa as Y, ah as _, H as j, I as q, a9 as Q, j as Z, ac as $, l as aa, U as ea, R as sa, ao as ra, y as ta, w as da, z as ca, B as oa, A as ia, L as ma, aZ as la, aI as ba, e as Ea, aL as na, a$ as pa, aT as ga, aB as ha, aW as Ma, aY as Ta, aX as ua, K as Aa, aP as fa, ax as Sa, aM as Ca, h as ya, aS as Pa, aA as Ia, i as Ga, u as La, aQ as Va, ay as Da, aV as ka, n as Fa, p as za, ag as va, F as Ba, a4 as wa, ab as Ka, $ as Xa, q as xa, o as Ha, an as Oa, M as Ra, aN as Na, aU as Ua, av as Ja, aC as Wa, a2 as Ya, Z as _a, Q as ja, aF as qa, x as Qa, t as Za, r as $a, v as ae, aD as ee, aR as se, az as re, aK as te, aH as de, aE as ce } from "./index-W575iBkm.js";
1
+ import { D as s, aJ as r, at as t, J as d, d as c, G as o, a_ as i, am as m, k as l, ar as b, ap as E, ak as n, a6 as p, a7 as g, E as h, ae as M, al as T, m as u, aG as A, X as f, ai as S, aj as C, ad as y, a5 as P, aq as I, a0 as G, a1 as L, N as V, O as D, s as k, af as F, S as z, T as v, a8 as B, V as w, C as K, aO as X, aw as x, au as H, as as O, P as R, a3 as N, _ as U, Y as J, W, aa as Y, ah as _, H as j, I as q, a9 as Q, j as Z, ac as $, l as aa, U as ea, R as sa, ao as ra, y as ta, w as da, z as ca, B as oa, A as ia, L as ma, aZ as la, aI as ba, e as Ea, aL as na, a$ as pa, aT as ga, aB as ha, aW as Ma, aY as Ta, aX as ua, K as Aa, aP as fa, ax as Sa, aM as Ca, h as ya, aS as Pa, aA as Ia, i as Ga, u as La, aQ as Va, ay as Da, aV as ka, n as Fa, p as za, ag as va, F as Ba, a4 as wa, ab as Ka, $ as Xa, q as xa, o as Ha, an as Oa, M as Ra, aN as Na, aU as Ua, av as Ja, aC as Wa, a2 as Ya, Z as _a, Q as ja, aF as qa, x as Qa, t as Za, r as $a, v as ae, aD as ee, aR as se, az as re, aK as te, aH as de, aE as ce } from "./index-vmcpJRYe.js";
2
2
  export {
3
3
  s as DEFAULT_PANELS,
4
4
  r as copyTableToClipboard,
@@ -4,7 +4,7 @@
4
4
  * Side panel for viewing artifact previews and code
5
5
  * Flex-based layout - should be a sibling to main content area
6
6
  */
7
- export default function ArtifactusePanel({ onAIRequest, onSave, onExport, className, panelWidth: panelWidthProp, splitPosition: splitPositionProp, externalPreview: externalPreviewProp, }: {
7
+ export default function ArtifactusePanel({ onAIRequest, onSave, onExport, className, panelWidth: panelWidthProp, splitPosition: splitPositionProp, externalPreview: externalPreviewProp, consolePanel: consolePanelProp, }: {
8
8
  onAIRequest: any;
9
9
  onSave: any;
10
10
  onExport: any;
@@ -12,4 +12,5 @@ export default function ArtifactusePanel({ onAIRequest, onSave, onExport, classN
12
12
  panelWidth: any;
13
13
  splitPosition: any;
14
14
  externalPreview: any;
15
+ consolePanel: any;
15
16
  }): any;