@lukeashford/aurelius 4.8.0 → 4.10.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/dist/index.mjs CHANGED
@@ -4414,7 +4414,7 @@ var StreamingCursor = React59.forwardRef(
4414
4414
  StreamingCursor.displayName = "StreamingCursor";
4415
4415
 
4416
4416
  // src/components/chat/ChatInterface.tsx
4417
- import React88, { useCallback as useCallback24, useEffect as useEffect17, useMemo as useMemo5, useRef as useRef16, useState as useState26 } from "react";
4417
+ import React88, { useCallback as useCallback24, useEffect as useEffect17, useImperativeHandle, useMemo as useMemo5, useRef as useRef16, useState as useState26 } from "react";
4418
4418
 
4419
4419
  // src/components/chat/ChatView.tsx
4420
4420
  import React63, { useEffect as useEffect10 } from "react";
@@ -5958,7 +5958,7 @@ import React81, { useState as useState19 } from "react";
5958
5958
  // src/components/deliverable/CoverSection.tsx
5959
5959
  import React75 from "react";
5960
5960
  function CoverSection({ data, clientName }) {
5961
- return /* @__PURE__ */ React75.createElement("section", { className: "deliverable-cover deliverable-page" }, /* @__PURE__ */ React75.createElement("div", { className: "deliverable-cover-inner" }, data.eyebrow && /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-eyebrow" }, data.eyebrow), /* @__PURE__ */ React75.createElement("h1", { className: "deliverable-cover-title" }, data.title), data.subtitle && /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-subtitle" }, data.subtitle), clientName && /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-client" }, "Prepared for", " ", /* @__PURE__ */ React75.createElement("span", { className: "deliverable-cover-client-name" }, clientName))));
5961
+ return /* @__PURE__ */ React75.createElement("section", { className: "deliverable-cover deliverable-page" }, /* @__PURE__ */ React75.createElement("div", { className: "deliverable-cover-inner" }, data.eyebrow && /* @__PURE__ */ React75.createElement(React75.Fragment, null, /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-eyebrow" }, data.eyebrow), /* @__PURE__ */ React75.createElement("div", { className: "deliverable-cover-rule", "aria-hidden": "true" })), /* @__PURE__ */ React75.createElement("h1", { className: "deliverable-cover-title" }, data.title), data.subtitle && /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-subtitle" }, data.subtitle), clientName && /* @__PURE__ */ React75.createElement("p", { className: "deliverable-cover-client" }, "Prepared for", " ", /* @__PURE__ */ React75.createElement("span", { className: "deliverable-cover-client-name" }, clientName))));
5962
5962
  }
5963
5963
 
5964
5964
  // src/components/deliverable/ArtifactImageGridSection.tsx
@@ -5968,16 +5968,33 @@ var COLUMN_CLASSES = {
5968
5968
  2: "deliverable-image-grid-cols-2",
5969
5969
  3: "deliverable-image-grid-cols-3"
5970
5970
  };
5971
+ var ASPECT_CLASSES = {
5972
+ landscape: "deliverable-image-grid-aspect-landscape",
5973
+ portrait: "deliverable-image-grid-aspect-portrait",
5974
+ square: "deliverable-image-grid-aspect-square",
5975
+ wide: "deliverable-image-grid-aspect-wide"
5976
+ };
5971
5977
  function ArtifactImageGridSection({ data }) {
5972
5978
  const columns = clampColumns(data.columns);
5973
- return /* @__PURE__ */ React76.createElement("section", { className: "deliverable-page" }, data.heading && /* @__PURE__ */ React76.createElement("h2", { className: "deliverable-heading" }, data.heading), /* @__PURE__ */ React76.createElement("div", { className: cx("deliverable-image-grid", COLUMN_CLASSES[columns]) }, data.items.map((item, idx) => /* @__PURE__ */ React76.createElement("figure", { key: idx, className: "deliverable-image-item" }, item.artifact.url ? /* @__PURE__ */ React76.createElement(
5974
- "img",
5979
+ const aspect = data.aspectRatio ?? "landscape";
5980
+ return /* @__PURE__ */ React76.createElement("section", { className: "deliverable-page" }, data.heading && /* @__PURE__ */ React76.createElement("h2", { className: "deliverable-heading" }, data.heading), /* @__PURE__ */ React76.createElement(
5981
+ "div",
5975
5982
  {
5976
- src: item.artifact.url,
5977
- alt: item.artifact.title ?? "",
5978
- className: "deliverable-image-img"
5979
- }
5980
- ) : /* @__PURE__ */ React76.createElement("div", { className: "deliverable-image-missing" }, "Missing image"), item.caption && /* @__PURE__ */ React76.createElement("figcaption", { className: "deliverable-image-caption" }, item.caption)))));
5983
+ className: cx(
5984
+ "deliverable-image-grid",
5985
+ COLUMN_CLASSES[columns],
5986
+ ASPECT_CLASSES[aspect]
5987
+ )
5988
+ },
5989
+ data.items.map((item, idx) => /* @__PURE__ */ React76.createElement("figure", { key: idx, className: "deliverable-image-item" }, item.artifact.url ? /* @__PURE__ */ React76.createElement(
5990
+ "img",
5991
+ {
5992
+ src: item.artifact.url,
5993
+ alt: item.artifact.title ?? "",
5994
+ className: "deliverable-image-img"
5995
+ }
5996
+ ) : /* @__PURE__ */ React76.createElement("div", { className: "deliverable-image-missing" }, "Missing image"), item.caption && /* @__PURE__ */ React76.createElement("figcaption", { className: "deliverable-image-caption" }, item.caption)))
5997
+ ));
5981
5998
  }
5982
5999
  function clampColumns(n) {
5983
6000
  if (n <= 1) return 1;
@@ -5987,8 +6004,14 @@ function clampColumns(n) {
5987
6004
 
5988
6005
  // src/components/deliverable/ArtifactSpotlightSection.tsx
5989
6006
  import React77 from "react";
6007
+ var VARIANT_CLASSES = {
6008
+ framed: null,
6009
+ "full-bleed": "deliverable-spotlight-variant-full-bleed",
6010
+ "side-by-side": "deliverable-spotlight-variant-side-by-side"
6011
+ };
5990
6012
  function ArtifactSpotlightSection({ data }) {
5991
- return /* @__PURE__ */ React77.createElement("section", { className: "deliverable-page" }, data.heading && /* @__PURE__ */ React77.createElement("h2", { className: "deliverable-heading" }, data.heading), /* @__PURE__ */ React77.createElement("div", { className: "deliverable-spotlight-media" }, data.artifact.url ? /* @__PURE__ */ React77.createElement(
6013
+ const variant = data.variant ?? "framed";
6014
+ return /* @__PURE__ */ React77.createElement("section", { className: cx("deliverable-page", VARIANT_CLASSES[variant]) }, data.heading && /* @__PURE__ */ React77.createElement("h2", { className: "deliverable-heading" }, data.heading), /* @__PURE__ */ React77.createElement("div", { className: "deliverable-spotlight-media" }, data.artifact.url ? /* @__PURE__ */ React77.createElement(
5992
6015
  "img",
5993
6016
  {
5994
6017
  src: data.artifact.url,
@@ -6036,6 +6059,12 @@ function QuoteBlockSection({ data }) {
6036
6059
  }
6037
6060
 
6038
6061
  // src/components/deliverable/DeliverableRenderer.tsx
6062
+ var THEME_CLASSES = {
6063
+ cinematic: null,
6064
+ editorial: "deliverable-theme-editorial",
6065
+ minimal: "deliverable-theme-minimal",
6066
+ playful: "deliverable-theme-playful"
6067
+ };
6039
6068
  function DeliverableRenderer({
6040
6069
  deliverable,
6041
6070
  onDownloadPdf,
@@ -6045,6 +6074,8 @@ function DeliverableRenderer({
6045
6074
  const [isDownloading, setIsDownloading] = useState19(false);
6046
6075
  const accent = deliverable.accentColor?.trim();
6047
6076
  const style = accent ? { "--deliverable-accent": accent } : void 0;
6077
+ const theme = deliverable.theme ?? "cinematic";
6078
+ const themeClass = THEME_CLASSES[theme];
6048
6079
  const handleDownload = async () => {
6049
6080
  if (!onDownloadPdf || isDownloading) return;
6050
6081
  setIsDownloading(true);
@@ -6057,7 +6088,7 @@ function DeliverableRenderer({
6057
6088
  return /* @__PURE__ */ React81.createElement(
6058
6089
  "div",
6059
6090
  {
6060
- className: cx("deliverable", className),
6091
+ className: cx("deliverable", themeClass, className),
6061
6092
  style
6062
6093
  },
6063
6094
  deliverable.sections.map((section, idx) => renderSection(section, idx, deliverable)),
@@ -7346,13 +7377,6 @@ var ChatInterface = React88.forwardRef(
7346
7377
  const prevArtifactNodesRef = useRef16([]);
7347
7378
  const prevTasksRef = useRef16([]);
7348
7379
  const [panelOpenArtifactId, setPanelOpenArtifactId] = useState26(null);
7349
- const handleAttachmentOpen = useCallback24((artifactId) => {
7350
- setPanelOpenArtifactId(artifactId);
7351
- onAttachmentOpen?.(artifactId);
7352
- }, [onAttachmentOpen]);
7353
- const handleArtifactPanelClosed = useCallback24(() => {
7354
- setPanelOpenArtifactId(null);
7355
- }, []);
7356
7380
  const [internalTools, setInternalTools] = useState26({
7357
7381
  "top-left": "history",
7358
7382
  "bottom-left": null,
@@ -7360,6 +7384,23 @@ var ChatInterface = React88.forwardRef(
7360
7384
  "bottom-right": null
7361
7385
  });
7362
7386
  const dismissedToolsRef = useRef16(/* @__PURE__ */ new Set());
7387
+ const openArtifact = useCallback24((artifactId) => {
7388
+ dismissedToolsRef.current.delete("artifacts");
7389
+ if (isArtifactsPanelOpen === void 0) {
7390
+ setInternalTools((prev) => prev["top-right"] === "artifacts" ? prev : { ...prev, "top-right": "artifacts" });
7391
+ } else if (!isArtifactsPanelOpen) {
7392
+ onArtifactsPanelOpenChange?.(true);
7393
+ }
7394
+ setPanelOpenArtifactId(artifactId);
7395
+ }, [isArtifactsPanelOpen, onArtifactsPanelOpenChange]);
7396
+ const handleAttachmentOpen = useCallback24((artifactId) => {
7397
+ openArtifact(artifactId);
7398
+ onAttachmentOpen?.(artifactId);
7399
+ }, [openArtifact, onAttachmentOpen]);
7400
+ const handleArtifactPanelClosed = useCallback24(() => {
7401
+ setPanelOpenArtifactId(null);
7402
+ }, []);
7403
+ useImperativeHandle(ref, () => ({ openArtifact }), [openArtifact]);
7363
7404
  const isPanelControlled = isArtifactsPanelOpen !== void 0;
7364
7405
  const activeTools = useMemo5(() => {
7365
7406
  if (isPanelControlled) {
@@ -7656,7 +7697,6 @@ var ChatInterface = React88.forwardRef(
7656
7697
  return /* @__PURE__ */ React88.createElement(
7657
7698
  "div",
7658
7699
  {
7659
- ref,
7660
7700
  className: cx("flex h-full w-full bg-obsidian overflow-hidden", className),
7661
7701
  ...rest
7662
7702
  },