@athenaintel/react 0.14.0 → 0.15.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.cjs CHANGED
@@ -44,7 +44,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
44
44
  const jsxRuntime = require("react/jsx-runtime");
45
45
  const React = require("react");
46
46
  const react = require("@assistant-ui/react");
47
- const scopeRegistry = require("./scope-registry-Bti8l_Xy.cjs");
47
+ const composerSendOrStop = require("./composer-send-or-stop-RPudYkWR.cjs");
48
48
  const AthenaAuthContext = require("./AthenaAuthContext-B3AwLA5Z.cjs");
49
49
  const tap = require("@assistant-ui/tap");
50
50
  const statewire = require("statewire");
@@ -70,7 +70,7 @@ function _interopNamespaceDefault(e) {
70
70
  }
71
71
  const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
72
72
  const ReactDOM__namespace = /* @__PURE__ */ _interopNamespaceDefault(ReactDOM);
73
- const version$1 = "0.14.0";
73
+ const version$1 = "0.15.0";
74
74
  const packageJson = {
75
75
  version: version$1
76
76
  };
@@ -7482,9 +7482,9 @@ const createConverter = (optimisticMessageCache) => (state, connectionMetadata)
7482
7482
  };
7483
7483
  const useAthenaRuntime = (config2) => {
7484
7484
  const {
7485
- apiUrl = scopeRegistry.DEFAULT_API_URL,
7485
+ apiUrl = composerSendOrStop.DEFAULT_API_URL,
7486
7486
  resumeApiUrl,
7487
- backendUrl = scopeRegistry.DEFAULT_BACKEND_URL,
7487
+ backendUrl = composerSendOrStop.DEFAULT_BACKEND_URL,
7488
7488
  apiKey,
7489
7489
  token,
7490
7490
  getToken,
@@ -7773,14 +7773,14 @@ function isClientToolCallRequest(value) {
7773
7773
  return typeof candidate.interrupt_id === "string" && candidate.interrupt_id.length > 0 && typeof candidate.tool_name === "string";
7774
7774
  }
7775
7775
  function hasClientToolInterruptSource(payload) {
7776
- return !!payload && typeof payload === "object" && !Array.isArray(payload) && payload.source === scopeRegistry.CLIENT_TOOL_INTERRUPT_SOURCE;
7776
+ return !!payload && typeof payload === "object" && !Array.isArray(payload) && payload.source === composerSendOrStop.CLIENT_TOOL_INTERRUPT_SOURCE;
7777
7777
  }
7778
7778
  function isClientToolInterrupt(payload) {
7779
7779
  if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
7780
7780
  return false;
7781
7781
  }
7782
7782
  const candidate = payload;
7783
- return candidate.source === scopeRegistry.CLIENT_TOOL_INTERRUPT_SOURCE && candidate.type === scopeRegistry.CLIENT_TOOL_INTERRUPT_SOURCE && typeof candidate.context === "object" && candidate.context !== null && Array.isArray(candidate.context.requests) && candidate.context.requests.length > 0 && candidate.context.requests.every(isClientToolCallRequest);
7783
+ return candidate.source === composerSendOrStop.CLIENT_TOOL_INTERRUPT_SOURCE && candidate.type === composerSendOrStop.CLIENT_TOOL_INTERRUPT_SOURCE && typeof candidate.context === "object" && candidate.context !== null && Array.isArray(candidate.context.requests) && candidate.context.requests.length > 0 && candidate.context.requests.every(isClientToolCallRequest);
7784
7784
  }
7785
7785
  function clientToolCallArgs(request) {
7786
7786
  const args = request.tool_args;
@@ -7791,13 +7791,13 @@ function clientToolResultsResumeValue(results) {
7791
7791
  }
7792
7792
  function clientToolSuccessEnvelope(result) {
7793
7793
  return {
7794
- status: scopeRegistry.CLIENT_TOOL_RESULT_STATUS_SUCCESS,
7794
+ status: composerSendOrStop.CLIENT_TOOL_RESULT_STATUS_SUCCESS,
7795
7795
  result: result === void 0 ? null : result
7796
7796
  };
7797
7797
  }
7798
7798
  function clientToolErrorEnvelope(error2) {
7799
7799
  const message = error2 instanceof Error ? error2.message : typeof error2 === "string" ? error2 : "Client tool execution failed.";
7800
- return { status: scopeRegistry.CLIENT_TOOL_RESULT_STATUS_ERROR, error: message };
7800
+ return { status: composerSendOrStop.CLIENT_TOOL_RESULT_STATUS_ERROR, error: message };
7801
7801
  }
7802
7802
  function createClientToolRequestTracker() {
7803
7803
  const handled = /* @__PURE__ */ new Set();
@@ -10991,7 +10991,7 @@ function readInterruptMessage(value, fallback = DEFAULT_INTERRUPT_PAUSED_MESSAGE
10991
10991
  return fallback;
10992
10992
  }
10993
10993
  function readAbandonedInputRequests(state) {
10994
- const abandoned = scopeRegistry.readDeepAgentStreamValues(state).abandonedInputRequests;
10994
+ const abandoned = composerSendOrStop.readDeepAgentStreamValues(state).abandonedInputRequests;
10995
10995
  return Array.isArray(abandoned) ? abandoned : void 0;
10996
10996
  }
10997
10997
  function findAbandonedInterrupt(abandoned) {
@@ -11142,7 +11142,7 @@ function createDeepAgentSendRecovery(options) {
11142
11142
  return {
11143
11143
  observeStateChange(state) {
11144
11144
  if (disposed) return;
11145
- if (!hydrated && scopeRegistry.isDeepAgentStateHydrated(state)) {
11145
+ if (!hydrated && composerSendOrStop.isDeepAgentStateHydrated(state)) {
11146
11146
  hydrated = true;
11147
11147
  armed = true;
11148
11148
  }
@@ -11193,7 +11193,7 @@ function registerDeepAgentRunConfig(aui, getRunConfig) {
11193
11193
  const isContractVersion = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
11194
11194
  function readDeepAgentProtocol(state) {
11195
11195
  if (typeof state !== "object" || state === null) return null;
11196
- const lane = state[scopeRegistry.DEEP_AGENT_PROTOCOL_STATE_KEY];
11196
+ const lane = state[composerSendOrStop.DEEP_AGENT_PROTOCOL_STATE_KEY];
11197
11197
  if (typeof lane !== "object" || lane === null) return null;
11198
11198
  const { version: version2, minClientVersion } = lane;
11199
11199
  if (!isContractVersion(version2) || !isContractVersion(minClientVersion)) return null;
@@ -11205,15 +11205,15 @@ function projectDeepAgentProtocol(state) {
11205
11205
  return {
11206
11206
  protocolVersion: lane.version,
11207
11207
  minClientVersion: lane.minClientVersion,
11208
- clientVersion: scopeRegistry.DEEP_AGENT_PROTOCOL_VERSION,
11209
- serverRequiresUpgrade: lane.minClientVersion > scopeRegistry.DEEP_AGENT_PROTOCOL_VERSION
11208
+ clientVersion: composerSendOrStop.DEEP_AGENT_PROTOCOL_VERSION,
11209
+ serverRequiresUpgrade: lane.minClientVersion > composerSendOrStop.DEEP_AGENT_PROTOCOL_VERSION
11210
11210
  };
11211
11211
  }
11212
11212
  function withDeclaredProtocolVersion(headers) {
11213
- if (scopeRegistry.DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;
11213
+ if (composerSendOrStop.DEEP_AGENT_PROTOCOL_VERSION_HEADER in headers) return headers;
11214
11214
  return {
11215
11215
  ...headers,
11216
- [scopeRegistry.DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(scopeRegistry.DEEP_AGENT_PROTOCOL_VERSION)
11216
+ [composerSendOrStop.DEEP_AGENT_PROTOCOL_VERSION_HEADER]: String(composerSendOrStop.DEEP_AGENT_PROTOCOL_VERSION)
11217
11217
  };
11218
11218
  }
11219
11219
  function useDeepAgentThreadStatus() {
@@ -11375,7 +11375,7 @@ function useDeepAgentThread({
11375
11375
  const notify = onRunningChangeRef.current;
11376
11376
  if (notify) queueMicrotask(() => notify(isRunning));
11377
11377
  }
11378
- return scopeRegistry.convertDeepAgentState(state, { laneProjection });
11378
+ return composerSendOrStop.convertDeepAgentState(state, { laneProjection });
11379
11379
  },
11380
11380
  [laneProjection]
11381
11381
  );
@@ -11419,9 +11419,9 @@ function useDeepAgentThread({
11419
11419
  transport: tap.withKey(
11420
11420
  attachId,
11421
11421
  (() => {
11422
- if (suspended) return scopeRegistry.StatewireSuspended({ message: suspended.reason });
11422
+ if (suspended) return composerSendOrStop.StatewireSuspended({ message: suspended.reason });
11423
11423
  if (authParked !== null && authParked.attachId === attachId) {
11424
- return scopeRegistry.StatewireSuspended({
11424
+ return composerSendOrStop.StatewireSuspended({
11425
11425
  message: authParked.message ?? "Session authorization was refused.",
11426
11426
  onReconnectRequested: () => {
11427
11427
  authDenialRef.current = {
@@ -11504,7 +11504,7 @@ function useDeepAgentThread({
11504
11504
  },
11505
11505
  // Makes the server's dispatch record concrete in state (after the
11506
11506
  // optimistic folds); the lib's post-converter dispatch merge turns off.
11507
- materialize: scopeRegistry.deepAgentMaterialize,
11507
+ materialize: composerSendOrStop.deepAgentMaterialize,
11508
11508
  // Native message editing: an edited turn is resubmitted as a `run/edit`
11509
11509
  // command, and the deep-agent backend rewinds the checkpointed thread to
11510
11510
  // the edited message's parent before appending (route `plan_rewind`).
@@ -11529,7 +11529,7 @@ function useDeepAgentThread({
11529
11529
  var _a3;
11530
11530
  return (_a3 = onStateChangeRef.current) == null ? void 0 : _a3.call(
11531
11531
  onStateChangeRef,
11532
- scopeRegistry.readDeepAgentStreamValues(state),
11532
+ composerSendOrStop.readDeepAgentStreamValues(state),
11533
11533
  ctx
11534
11534
  );
11535
11535
  })
@@ -11597,7 +11597,7 @@ function useDeepAgentRuntime(options) {
11597
11597
  const failureStampsRef = React.useRef(
11598
11598
  void 0
11599
11599
  );
11600
- failureStampsRef.current = session !== false && session.kind === "local-storage" && canPersistLocalSession ? () => scopeRegistry.readPersistedFailedSendStamps(session.key(threadOptions.threadId)) : void 0;
11600
+ failureStampsRef.current = session !== false && session.kind === "local-storage" && canPersistLocalSession ? () => composerSendOrStop.readPersistedFailedSendStamps(session.key(threadOptions.threadId)) : void 0;
11601
11601
  const attachId = threadOptions.attachKey === void 0 ? threadOptions.threadId : `${threadOptions.threadId}:${threadOptions.attachKey}`;
11602
11602
  const sendRecovery = React.useMemo(
11603
11603
  () => createDeepAgentSendRecovery({
@@ -11621,7 +11621,7 @@ function useDeepAgentRuntime(options) {
11621
11621
  ...threadOptions,
11622
11622
  ...session !== false && session.kind === "local-storage" && canPersistLocalSession && {
11623
11623
  storage: {
11624
- session: scopeRegistry.QuotaSafeLocalStorageSession({
11624
+ session: composerSendOrStop.QuotaSafeLocalStorageSession({
11625
11625
  threadId: threadOptions.threadId,
11626
11626
  key: session.key
11627
11627
  })
@@ -13312,12 +13312,12 @@ var PopperContent = /* @__PURE__ */ React__namespace.forwardRef(
13312
13312
  // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries
13313
13313
  altBoundary: hasExplicitBoundaries
13314
13314
  };
13315
- const { refs, floatingStyles, placement, isPositioned, middlewareData } = scopeRegistry.useFloating({
13315
+ const { refs, floatingStyles, placement, isPositioned, middlewareData } = composerSendOrStop.useFloating({
13316
13316
  // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues
13317
13317
  strategy: "fixed",
13318
13318
  placement: desiredPlacement,
13319
13319
  whileElementsMounted: /* @__PURE__ */ __name$1((...args) => {
13320
- const cleanup = scopeRegistry.autoUpdate(...args, {
13320
+ const cleanup = composerSendOrStop.autoUpdate(...args, {
13321
13321
  animationFrame: updatePositionStrategy === "always"
13322
13322
  });
13323
13323
  return cleanup;
@@ -13326,15 +13326,15 @@ var PopperContent = /* @__PURE__ */ React__namespace.forwardRef(
13326
13326
  reference: context.anchor
13327
13327
  },
13328
13328
  middleware: [
13329
- scopeRegistry.offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),
13330
- avoidCollisions && scopeRegistry.shift({
13329
+ composerSendOrStop.offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),
13330
+ avoidCollisions && composerSendOrStop.shift({
13331
13331
  mainAxis: true,
13332
13332
  crossAxis: false,
13333
- limiter: sticky === "partial" ? scopeRegistry.limitShift() : void 0,
13333
+ limiter: sticky === "partial" ? composerSendOrStop.limitShift() : void 0,
13334
13334
  ...detectOverflowOptions
13335
13335
  }),
13336
- avoidCollisions && scopeRegistry.flip({ ...detectOverflowOptions }),
13337
- scopeRegistry.size({
13336
+ avoidCollisions && composerSendOrStop.flip({ ...detectOverflowOptions }),
13337
+ composerSendOrStop.size({
13338
13338
  ...detectOverflowOptions,
13339
13339
  apply: /* @__PURE__ */ __name$1(({ elements, rects, availableWidth, availableHeight }) => {
13340
13340
  const { width: anchorWidth, height: anchorHeight } = rects.reference;
@@ -13345,9 +13345,9 @@ var PopperContent = /* @__PURE__ */ React__namespace.forwardRef(
13345
13345
  contentStyle.setProperty("--radix-popper-anchor-height", `${anchorHeight}px`);
13346
13346
  }, "apply")
13347
13347
  }),
13348
- arrow2 && scopeRegistry.arrow({ element: arrow2, padding: arrowPadding }),
13348
+ arrow2 && composerSendOrStop.arrow({ element: arrow2, padding: arrowPadding }),
13349
13349
  transformOrigin({ arrowWidth, arrowHeight }),
13350
- hideWhenDetached && scopeRegistry.hide({
13350
+ hideWhenDetached && composerSendOrStop.hide({
13351
13351
  strategy: "referenceHidden",
13352
13352
  ...detectOverflowOptions,
13353
13353
  // `hide` detects whether the anchor (reference) is clipped, so when
@@ -14049,7 +14049,7 @@ function TooltipContent({
14049
14049
  {
14050
14050
  "data-slot": "tooltip-content",
14051
14051
  sideOffset,
14052
- className: scopeRegistry.cn(
14052
+ className: composerSendOrStop.cn(
14053
14053
  // Portaled outside the provider wrapper — carries the SDK scope
14054
14054
  // classes itself so tokens and the scoped reset still apply.
14055
14055
  "athena-sdk athena-sdk-chrome",
@@ -15790,7 +15790,7 @@ function AthenaProvider({
15790
15790
  const themeStyleVars = React.useMemo(() => theme ? themeToStyleVars(theme) : void 0, [theme]);
15791
15791
  const configuredEnvironment = (config2 == null ? void 0 : config2.environment) ?? environment;
15792
15792
  const environmentUrls = React.useMemo(
15793
- () => scopeRegistry.getAthenaEnvironmentUrls({ environment: configuredEnvironment }),
15793
+ () => composerSendOrStop.getAthenaEnvironmentUrls({ environment: configuredEnvironment }),
15794
15794
  [configuredEnvironment]
15795
15795
  );
15796
15796
  const configuredApiKey = (config2 == null ? void 0 : config2.apiKey) ?? apiKey;
@@ -15841,13 +15841,13 @@ function AthenaProvider({
15841
15841
  const effectiveToken = configuredToken !== void 0 ? configuredToken : authProviderToken ?? bridge.token;
15842
15842
  const effectiveApiUrl = configuredApiUrl ?? bridge.apiUrl ?? environmentUrls.apiUrl;
15843
15843
  const effectiveBackendUrl = configuredBackendUrl ?? bridge.backendUrl ?? environmentUrls.backendUrl;
15844
- const effectiveAppUrl = configuredAppUrl ?? bridge.appUrl ?? scopeRegistry.deriveAthenaAppUrl({ apiUrl: effectiveApiUrl, backendUrl: effectiveBackendUrl }) ?? environmentUrls.appUrl;
15844
+ const effectiveAppUrl = configuredAppUrl ?? bridge.appUrl ?? composerSendOrStop.deriveAthenaAppUrl({ apiUrl: effectiveApiUrl, backendUrl: effectiveBackendUrl }) ?? environmentUrls.appUrl;
15845
15845
  if (!bridge.ready) {
15846
15846
  return null;
15847
15847
  }
15848
15848
  let inner;
15849
15849
  if (effectiveTransport === "statewire") {
15850
- const effectiveStatewireSyncUrl = scopeRegistry.resolveStatewireSyncUrl({
15850
+ const effectiveStatewireSyncUrl = composerSendOrStop.resolveStatewireSyncUrl({
15851
15851
  statewireSyncUrl: configuredStatewireSyncUrl,
15852
15852
  apiUrl: effectiveApiUrl
15853
15853
  });
@@ -17094,8 +17094,8 @@ function isValidLinkStructure(tokens) {
17094
17094
  return false;
17095
17095
  }
17096
17096
  function autolink$1(options) {
17097
- return new scopeRegistry.Plugin({
17098
- key: new scopeRegistry.PluginKey("autolink"),
17097
+ return new composerSendOrStop.Plugin({
17098
+ key: new composerSendOrStop.PluginKey("autolink"),
17099
17099
  appendTransaction: (transactions, oldState, newState) => {
17100
17100
  const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);
17101
17101
  const preventAutolink = transactions.some((transaction) => transaction.getMeta("preventAutolink"));
@@ -17103,10 +17103,10 @@ function autolink$1(options) {
17103
17103
  return;
17104
17104
  }
17105
17105
  const { tr: tr2 } = newState;
17106
- const transform2 = scopeRegistry.combineTransactionSteps(oldState.doc, [...transactions]);
17107
- const changes = scopeRegistry.getChangedRanges(transform2);
17106
+ const transform2 = composerSendOrStop.combineTransactionSteps(oldState.doc, [...transactions]);
17107
+ const changes = composerSendOrStop.getChangedRanges(transform2);
17108
17108
  changes.forEach(({ newRange }) => {
17109
- const nodesInChangedRanges = scopeRegistry.findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);
17109
+ const nodesInChangedRanges = composerSendOrStop.findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);
17110
17110
  let textBlock;
17111
17111
  let textBeforeWhitespace;
17112
17112
  if (nodesInChangedRanges.length > 1) {
@@ -17144,7 +17144,7 @@ function autolink$1(options) {
17144
17144
  }
17145
17145
  return !newState.doc.rangeHasMark(link2.from, link2.to, newState.schema.marks.code);
17146
17146
  }).filter((link2) => options.validate(link2.value)).filter((link2) => options.shouldAutoLink(link2.value)).forEach((link2) => {
17147
- if (scopeRegistry.getMarksBetween(link2.from, link2.to, newState.doc).some((item) => item.mark.type === options.type)) {
17147
+ if (composerSendOrStop.getMarksBetween(link2.from, link2.to, newState.doc).some((item) => item.mark.type === options.type)) {
17148
17148
  return;
17149
17149
  }
17150
17150
  tr2.addMark(link2.from, link2.to, options.type.create({
@@ -17161,8 +17161,8 @@ function autolink$1(options) {
17161
17161
  });
17162
17162
  }
17163
17163
  function clickHandler(options) {
17164
- return new scopeRegistry.Plugin({
17165
- key: new scopeRegistry.PluginKey("handleClickLink"),
17164
+ return new composerSendOrStop.Plugin({
17165
+ key: new composerSendOrStop.PluginKey("handleClickLink"),
17166
17166
  props: {
17167
17167
  handleClick: (view, pos, event) => {
17168
17168
  var _a3, _b2;
@@ -17181,7 +17181,7 @@ function clickHandler(options) {
17181
17181
  if (!els.find((value) => value.nodeName === "A")) {
17182
17182
  return false;
17183
17183
  }
17184
- const attrs2 = scopeRegistry.getAttributes(view.state, options.type.name);
17184
+ const attrs2 = composerSendOrStop.getAttributes(view.state, options.type.name);
17185
17185
  const link2 = event.target;
17186
17186
  const href = (_a3 = link2 === null || link2 === void 0 ? void 0 : link2.href) !== null && _a3 !== void 0 ? _a3 : attrs2.href;
17187
17187
  const target = (_b2 = link2 === null || link2 === void 0 ? void 0 : link2.target) !== null && _b2 !== void 0 ? _b2 : attrs2.target;
@@ -17195,8 +17195,8 @@ function clickHandler(options) {
17195
17195
  });
17196
17196
  }
17197
17197
  function pasteHandler(options) {
17198
- return new scopeRegistry.Plugin({
17199
- key: new scopeRegistry.PluginKey("handlePasteLink"),
17198
+ return new composerSendOrStop.Plugin({
17199
+ key: new composerSendOrStop.PluginKey("handlePasteLink"),
17200
17200
  props: {
17201
17201
  handlePaste: (view, event, slice) => {
17202
17202
  const { state } = view;
@@ -17247,7 +17247,7 @@ function isAllowedUri(uri, protocols) {
17247
17247
  "i"
17248
17248
  ));
17249
17249
  }
17250
- const Link$2 = scopeRegistry.Mark.create({
17250
+ const Link$2 = composerSendOrStop.Mark.create({
17251
17251
  name: "link",
17252
17252
  priority: 1e3,
17253
17253
  keepOnSplit: false,
@@ -17333,11 +17333,11 @@ const Link$2 = scopeRegistry.Mark.create({
17333
17333
  })) {
17334
17334
  return [
17335
17335
  "a",
17336
- scopeRegistry.mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: "" }),
17336
+ composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: "" }),
17337
17337
  0
17338
17338
  ];
17339
17339
  }
17340
- return ["a", scopeRegistry.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
17340
+ return ["a", composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
17341
17341
  },
17342
17342
  addCommands() {
17343
17343
  return {
@@ -17370,7 +17370,7 @@ const Link$2 = scopeRegistry.Mark.create({
17370
17370
  },
17371
17371
  addPasteRules() {
17372
17372
  return [
17373
- scopeRegistry.markPasteRule({
17373
+ composerSendOrStop.markPasteRule({
17374
17374
  find: (text2) => {
17375
17375
  const foundLinks = [];
17376
17376
  if (text2) {
@@ -17659,7 +17659,7 @@ function tableNodeTypes(schema2) {
17659
17659
  }
17660
17660
  return result;
17661
17661
  }
17662
- const tableEditingKey = new scopeRegistry.PluginKey("selectingCells");
17662
+ const tableEditingKey = new composerSendOrStop.PluginKey("selectingCells");
17663
17663
  function cellAround($pos) {
17664
17664
  for (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == "row") return $pos.node(0).resolve($pos.before(d + 1));
17665
17665
  return null;
@@ -17738,7 +17738,7 @@ function columnIsHeader(map2, table2, col) {
17738
17738
  for (let row = 0; row < map2.height; row++) if (table2.nodeAt(map2.map[col + row * map2.width]).type != headerCell) return false;
17739
17739
  return true;
17740
17740
  }
17741
- var CellSelection = class CellSelection2 extends scopeRegistry.Selection {
17741
+ var CellSelection = class CellSelection2 extends composerSendOrStop.Selection {
17742
17742
  constructor($anchorCell, $headCell = $anchorCell) {
17743
17743
  const table2 = $anchorCell.node(-1);
17744
17744
  const map2 = TableMap.get(table2);
@@ -17751,7 +17751,7 @@ var CellSelection = class CellSelection2 extends scopeRegistry.Selection {
17751
17751
  const cell = table2.nodeAt(pos);
17752
17752
  if (!cell) throw new RangeError(`No cell with offset ${pos} found`);
17753
17753
  const from = tableStart + pos + 1;
17754
- return new scopeRegistry.SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));
17754
+ return new composerSendOrStop.SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));
17755
17755
  });
17756
17756
  super(ranges[0].$from, ranges[0].$to, ranges);
17757
17757
  this.$anchorCell = $anchorCell;
@@ -17766,7 +17766,7 @@ var CellSelection = class CellSelection2 extends scopeRegistry.Selection {
17766
17766
  else if (tableChanged && this.isColSelection()) return CellSelection2.colSelection($anchorCell, $headCell);
17767
17767
  else return new CellSelection2($anchorCell, $headCell);
17768
17768
  }
17769
- return scopeRegistry.TextSelection.between($anchorCell, $headCell);
17769
+ return composerSendOrStop.TextSelection.between($anchorCell, $headCell);
17770
17770
  }
17771
17771
  content() {
17772
17772
  const table2 = this.$anchorCell.node(-1);
@@ -17805,22 +17805,22 @@ var CellSelection = class CellSelection2 extends scopeRegistry.Selection {
17805
17805
  }
17806
17806
  rowContent.push(cell);
17807
17807
  }
17808
- rows.push(table2.child(row).copy(scopeRegistry.Fragment.from(rowContent)));
17808
+ rows.push(table2.child(row).copy(composerSendOrStop.Fragment.from(rowContent)));
17809
17809
  }
17810
17810
  const fragment = this.isColSelection() && this.isRowSelection() ? table2 : rows;
17811
- return new scopeRegistry.Slice(scopeRegistry.Fragment.from(fragment), 1, 1);
17811
+ return new composerSendOrStop.Slice(composerSendOrStop.Fragment.from(fragment), 1, 1);
17812
17812
  }
17813
- replace(tr2, content = scopeRegistry.Slice.empty) {
17813
+ replace(tr2, content = composerSendOrStop.Slice.empty) {
17814
17814
  const mapFrom = tr2.steps.length, ranges = this.ranges;
17815
17815
  for (let i = 0; i < ranges.length; i++) {
17816
17816
  const { $from, $to } = ranges[i], mapping = tr2.mapping.slice(mapFrom);
17817
- tr2.replace(mapping.map($from.pos), mapping.map($to.pos), i ? scopeRegistry.Slice.empty : content);
17817
+ tr2.replace(mapping.map($from.pos), mapping.map($to.pos), i ? composerSendOrStop.Slice.empty : content);
17818
17818
  }
17819
- const sel = scopeRegistry.Selection.findFrom(tr2.doc.resolve(tr2.mapping.slice(mapFrom).map(this.to)), -1);
17819
+ const sel = composerSendOrStop.Selection.findFrom(tr2.doc.resolve(tr2.mapping.slice(mapFrom).map(this.to)), -1);
17820
17820
  if (sel) tr2.setSelection(sel);
17821
17821
  }
17822
17822
  replaceWith(tr2, node) {
17823
- this.replace(tr2, new scopeRegistry.Slice(scopeRegistry.Fragment.from(node), 0, 0));
17823
+ this.replace(tr2, new composerSendOrStop.Slice(composerSendOrStop.Fragment.from(node), 0, 0));
17824
17824
  }
17825
17825
  forEachCell(f) {
17826
17826
  const table2 = this.$anchorCell.node(-1);
@@ -17901,7 +17901,7 @@ var CellSelection = class CellSelection2 extends scopeRegistry.Selection {
17901
17901
  }
17902
17902
  };
17903
17903
  CellSelection.prototype.visible = false;
17904
- scopeRegistry.Selection.jsonID("cell", CellSelection);
17904
+ composerSendOrStop.Selection.jsonID("cell", CellSelection);
17905
17905
  var CellBookmark = class CellBookmark2 {
17906
17906
  constructor(anchor, head) {
17907
17907
  this.anchor = anchor;
@@ -17913,16 +17913,16 @@ var CellBookmark = class CellBookmark2 {
17913
17913
  resolve(doc) {
17914
17914
  const $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);
17915
17915
  if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);
17916
- else return scopeRegistry.Selection.near($headCell, 1);
17916
+ else return composerSendOrStop.Selection.near($headCell, 1);
17917
17917
  }
17918
17918
  };
17919
17919
  function drawCellSelection(state) {
17920
17920
  if (!(state.selection instanceof CellSelection)) return null;
17921
17921
  const cells = [];
17922
17922
  state.selection.forEachCell((node, pos) => {
17923
- cells.push(scopeRegistry.Decoration.node(pos, pos + node.nodeSize, { class: "selectedCell" }));
17923
+ cells.push(composerSendOrStop.Decoration.node(pos, pos + node.nodeSize, { class: "selectedCell" }));
17924
17924
  });
17925
- return scopeRegistry.DecorationSet.create(state.doc, cells);
17925
+ return composerSendOrStop.DecorationSet.create(state.doc, cells);
17926
17926
  }
17927
17927
  function isCellBoundarySelection({ $from, $to }) {
17928
17928
  if ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;
@@ -17957,7 +17957,7 @@ function normalizeSelection(state, tr2, allowTableNodeSelection) {
17957
17957
  const doc = (tr2 || state).doc;
17958
17958
  let normalize3;
17959
17959
  let role;
17960
- if (sel instanceof scopeRegistry.NodeSelection && (role = sel.node.type.spec.tableRole)) {
17960
+ if (sel instanceof composerSendOrStop.NodeSelection && (role = sel.node.type.spec.tableRole)) {
17961
17961
  if (role == "cell" || role == "header_cell") normalize3 = CellSelection.create(doc, sel.from);
17962
17962
  else if (role == "row") {
17963
17963
  const $cell = doc.resolve(sel.from + 1);
@@ -17968,12 +17968,12 @@ function normalizeSelection(state, tr2, allowTableNodeSelection) {
17968
17968
  const lastCell = start + map2.map[map2.width * map2.height - 1];
17969
17969
  normalize3 = CellSelection.create(doc, start + 1, lastCell);
17970
17970
  }
17971
- } else if (sel instanceof scopeRegistry.TextSelection && isCellBoundarySelection(sel)) normalize3 = scopeRegistry.TextSelection.create(doc, sel.from);
17972
- else if (sel instanceof scopeRegistry.TextSelection && isTextSelectionAcrossCells(sel)) normalize3 = scopeRegistry.TextSelection.create(doc, sel.$from.start(), sel.$from.end());
17971
+ } else if (sel instanceof composerSendOrStop.TextSelection && isCellBoundarySelection(sel)) normalize3 = composerSendOrStop.TextSelection.create(doc, sel.from);
17972
+ else if (sel instanceof composerSendOrStop.TextSelection && isTextSelectionAcrossCells(sel)) normalize3 = composerSendOrStop.TextSelection.create(doc, sel.$from.start(), sel.$from.end());
17973
17973
  if (normalize3) (tr2 || (tr2 = state.tr)).setSelection(normalize3);
17974
17974
  return tr2;
17975
17975
  }
17976
- const fixTablesKey = new scopeRegistry.PluginKey("fix-tables");
17976
+ const fixTablesKey = new composerSendOrStop.PluginKey("fix-tables");
17977
17977
  function changedDescendants(old, cur, offset, f) {
17978
17978
  const oldSize = old.childCount, curSize = cur.childCount;
17979
17979
  outer: for (let i = 0, j = 0; i < curSize; i++) {
@@ -18256,7 +18256,7 @@ function mergeCells(state, dispatch) {
18256
18256
  if (dispatch) {
18257
18257
  const tr2 = state.tr;
18258
18258
  const seen = {};
18259
- let content = scopeRegistry.Fragment.empty;
18259
+ let content = composerSendOrStop.Fragment.empty;
18260
18260
  let mergedPos;
18261
18261
  let mergedCell;
18262
18262
  for (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {
@@ -18476,7 +18476,7 @@ function goToNextCell(direction) {
18476
18476
  if (cell == null) return false;
18477
18477
  if (dispatch) {
18478
18478
  const $cell = state.doc.resolve(cell);
18479
- dispatch(state.tr.setSelection(scopeRegistry.TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());
18479
+ dispatch(state.tr.setSelection(composerSendOrStop.TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());
18480
18480
  }
18481
18481
  return true;
18482
18482
  };
@@ -18496,7 +18496,7 @@ function deleteCellSelection(state, dispatch) {
18496
18496
  const tr2 = state.tr;
18497
18497
  const baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;
18498
18498
  sel.forEachCell((cell, pos) => {
18499
- if (!cell.content.eq(baseContent)) tr2.replace(tr2.mapping.map(pos + 1), tr2.mapping.map(pos + cell.nodeSize - 1), new scopeRegistry.Slice(baseContent, 0, 0));
18499
+ if (!cell.content.eq(baseContent)) tr2.replace(tr2.mapping.map(pos + 1), tr2.mapping.map(pos + cell.nodeSize - 1), new composerSendOrStop.Slice(baseContent, 0, 0));
18500
18500
  });
18501
18501
  if (tr2.docChanged) dispatch(tr2);
18502
18502
  }
@@ -18517,10 +18517,10 @@ function pastedCells(slice) {
18517
18517
  let cells = content.child(i).content;
18518
18518
  const left = i ? 0 : Math.max(0, openStart - 1);
18519
18519
  const right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);
18520
- if (left || right) cells = fitSlice(tableNodeTypes(schema2).row, new scopeRegistry.Slice(cells, left, right)).content;
18520
+ if (left || right) cells = fitSlice(tableNodeTypes(schema2).row, new composerSendOrStop.Slice(cells, left, right)).content;
18521
18521
  rows.push(cells);
18522
18522
  }
18523
- else if (role == "cell" || role == "header_cell") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema2).row, new scopeRegistry.Slice(content, openStart, openEnd)).content : content);
18523
+ else if (role == "cell" || role == "header_cell") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema2).row, new composerSendOrStop.Slice(content, openStart, openEnd)).content : content);
18524
18524
  else return null;
18525
18525
  return ensureRectangular(schema2, rows);
18526
18526
  }
@@ -18536,12 +18536,12 @@ function ensureRectangular(schema2, rows) {
18536
18536
  let width = 0;
18537
18537
  for (let r2 = 0; r2 < widths.length; r2++) width = Math.max(width, widths[r2]);
18538
18538
  for (let r2 = 0; r2 < widths.length; r2++) {
18539
- if (r2 >= rows.length) rows.push(scopeRegistry.Fragment.empty);
18539
+ if (r2 >= rows.length) rows.push(composerSendOrStop.Fragment.empty);
18540
18540
  if (widths[r2] < width) {
18541
18541
  const empty = tableNodeTypes(schema2).cell.createAndFill();
18542
18542
  const cells = [];
18543
18543
  for (let i = widths[r2]; i < width; i++) cells.push(empty);
18544
- rows[r2] = rows[r2].append(scopeRegistry.Fragment.from(cells));
18544
+ rows[r2] = rows[r2].append(composerSendOrStop.Fragment.from(cells));
18545
18545
  }
18546
18546
  }
18547
18547
  return {
@@ -18552,7 +18552,7 @@ function ensureRectangular(schema2, rows) {
18552
18552
  }
18553
18553
  function fitSlice(nodeType, slice) {
18554
18554
  const node = nodeType.createAndFill();
18555
- return new scopeRegistry.Transform(node).replace(0, node.content.size, slice).doc;
18555
+ return new composerSendOrStop.Transform(node).replace(0, node.content.size, slice).doc;
18556
18556
  }
18557
18557
  function clipCells({ width, height, rows }, newWidth, newHeight) {
18558
18558
  if (width != newWidth) {
@@ -18567,7 +18567,7 @@ function clipCells({ width, height, rows }, newWidth, newHeight) {
18567
18567
  col += cell.attrs.colspan;
18568
18568
  for (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;
18569
18569
  }
18570
- newRows.push(scopeRegistry.Fragment.from(cells));
18570
+ newRows.push(composerSendOrStop.Fragment.from(cells));
18571
18571
  }
18572
18572
  rows = newRows;
18573
18573
  width = newWidth;
@@ -18584,7 +18584,7 @@ function clipCells({ width, height, rows }, newWidth, newHeight) {
18584
18584
  }, cell.content);
18585
18585
  cells.push(cell);
18586
18586
  }
18587
- newRows.push(scopeRegistry.Fragment.from(cells));
18587
+ newRows.push(composerSendOrStop.Fragment.from(cells));
18588
18588
  }
18589
18589
  rows = newRows;
18590
18590
  height = newHeight;
@@ -18616,7 +18616,7 @@ function growTable(tr2, map2, table2, start, width, height, mapFrom) {
18616
18616
  const header = i >= map2.width ? false : table2.nodeAt(map2.map[start$1 + i]).type == types.header_cell;
18617
18617
  cells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));
18618
18618
  }
18619
- const emptyRow = types.row.create(null, scopeRegistry.Fragment.from(cells)), rows = [];
18619
+ const emptyRow = types.row.create(null, composerSendOrStop.Fragment.from(cells)), rows = [];
18620
18620
  for (let i = map2.height; i < height; i++) rows.push(emptyRow);
18621
18621
  tr2.insert(tr2.mapping.slice(mapFrom).map(start + table2.nodeSize - 2), rows);
18622
18622
  }
@@ -18682,13 +18682,13 @@ function insertCells(state, dispatch, tableStart, rect, cells) {
18682
18682
  if (isolateVertical(tr2, map2, table2, tableStart, top, bottom, right, mapFrom)) recomp();
18683
18683
  for (let row = top; row < bottom; row++) {
18684
18684
  const from = map2.positionAt(row, left, table2), to = map2.positionAt(row, right, table2);
18685
- tr2.replace(tr2.mapping.slice(mapFrom).map(from + tableStart), tr2.mapping.slice(mapFrom).map(to + tableStart), new scopeRegistry.Slice(cells.rows[row - top], 0, 0));
18685
+ tr2.replace(tr2.mapping.slice(mapFrom).map(from + tableStart), tr2.mapping.slice(mapFrom).map(to + tableStart), new composerSendOrStop.Slice(cells.rows[row - top], 0, 0));
18686
18686
  }
18687
18687
  recomp();
18688
18688
  tr2.setSelection(new CellSelection(tr2.doc.resolve(tableStart + map2.positionAt(top, left, table2)), tr2.doc.resolve(tableStart + map2.positionAt(bottom - 1, right - 1, table2))));
18689
18689
  dispatch(tr2);
18690
18690
  }
18691
- const handleKeyDown = scopeRegistry.keydownHandler({
18691
+ const handleKeyDown = composerSendOrStop.keydownHandler({
18692
18692
  ArrowLeft: arrow("horiz", -1),
18693
18693
  ArrowRight: arrow("horiz", 1),
18694
18694
  ArrowUp: arrow("vert", -1),
@@ -18711,18 +18711,18 @@ function arrow(axis, dir) {
18711
18711
  return (state, dispatch, view) => {
18712
18712
  if (!view) return false;
18713
18713
  const sel = state.selection;
18714
- if (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, scopeRegistry.Selection.near(sel.$headCell, dir));
18714
+ if (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, composerSendOrStop.Selection.near(sel.$headCell, dir));
18715
18715
  if (axis != "horiz" && !sel.empty) return false;
18716
18716
  const end = atEndOfCell(view, axis, dir);
18717
18717
  if (end == null) return false;
18718
- if (axis == "horiz") return maybeSetSelection(state, dispatch, scopeRegistry.Selection.near(state.doc.resolve(sel.head + dir), dir));
18718
+ if (axis == "horiz") return maybeSetSelection(state, dispatch, composerSendOrStop.Selection.near(state.doc.resolve(sel.head + dir), dir));
18719
18719
  else {
18720
18720
  const $cell = state.doc.resolve(end);
18721
18721
  const $next = nextCell($cell, axis, dir);
18722
18722
  let newSel;
18723
- if ($next) newSel = scopeRegistry.Selection.near($next, 1);
18724
- else if (dir < 0) newSel = scopeRegistry.Selection.near(state.doc.resolve($cell.before(-1)), -1);
18725
- else newSel = scopeRegistry.Selection.near(state.doc.resolve($cell.after(-1)), 1);
18723
+ if ($next) newSel = composerSendOrStop.Selection.near($next, 1);
18724
+ else if (dir < 0) newSel = composerSendOrStop.Selection.near(state.doc.resolve($cell.before(-1)), -1);
18725
+ else newSel = composerSendOrStop.Selection.near(state.doc.resolve($cell.after(-1)), 1);
18726
18726
  return maybeSetSelection(state, dispatch, newSel);
18727
18727
  }
18728
18728
  };
@@ -18757,7 +18757,7 @@ function handlePaste(view, _, slice) {
18757
18757
  if (!cells) cells = {
18758
18758
  width: 1,
18759
18759
  height: 1,
18760
- rows: [scopeRegistry.Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]
18760
+ rows: [composerSendOrStop.Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]
18761
18761
  };
18762
18762
  const table2 = sel.$anchorCell.node(-1);
18763
18763
  const start = sel.$anchorCell.start(-1);
@@ -18818,7 +18818,7 @@ function handleMouseDown(view, startEvent) {
18818
18818
  view.root.addEventListener("mousemove", move);
18819
18819
  }
18820
18820
  function atEndOfCell(view, axis, dir) {
18821
- if (!(view.state.selection instanceof scopeRegistry.TextSelection)) return null;
18821
+ if (!(view.state.selection instanceof composerSendOrStop.TextSelection)) return null;
18822
18822
  const { $head } = view.state.selection;
18823
18823
  for (let d = $head.depth - 1; d >= 0; d--) {
18824
18824
  const parent = $head.node(d);
@@ -18903,9 +18903,9 @@ function updateColumnsOnResize(node, colgroup, table2, defaultCellMinWidth, over
18903
18903
  table2.style.minWidth = totalWidth + "px";
18904
18904
  }
18905
18905
  }
18906
- const columnResizingPluginKey = new scopeRegistry.PluginKey("tableColumnResizing");
18906
+ const columnResizingPluginKey = new composerSendOrStop.PluginKey("tableColumnResizing");
18907
18907
  function columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView$1, lastColumnResizable = true } = {}) {
18908
- const plugin = new scopeRegistry.Plugin({
18908
+ const plugin = new composerSendOrStop.Plugin({
18909
18909
  key: columnResizingPluginKey,
18910
18910
  state: {
18911
18911
  init(_, state) {
@@ -19105,7 +19105,7 @@ function handleDecorations(state, cell) {
19105
19105
  const decorations = [];
19106
19106
  const $cell = state.doc.resolve(cell);
19107
19107
  const table2 = $cell.node(-1);
19108
- if (!table2) return scopeRegistry.DecorationSet.empty;
19108
+ if (!table2) return composerSendOrStop.DecorationSet.empty;
19109
19109
  const map2 = TableMap.get(table2);
19110
19110
  const start = $cell.start(-1);
19111
19111
  const col = map2.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;
@@ -19117,14 +19117,14 @@ function handleDecorations(state, cell) {
19117
19117
  const pos = start + cellPos + table2.nodeAt(cellPos).nodeSize - 1;
19118
19118
  const dom = document.createElement("div");
19119
19119
  dom.className = "column-resize-handle";
19120
- if ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(scopeRegistry.Decoration.node(start + cellPos, start + cellPos + table2.nodeAt(cellPos).nodeSize, { class: "column-resize-dragging" }));
19121
- decorations.push(scopeRegistry.Decoration.widget(pos, dom));
19120
+ if ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(composerSendOrStop.Decoration.node(start + cellPos, start + cellPos + table2.nodeAt(cellPos).nodeSize, { class: "column-resize-dragging" }));
19121
+ decorations.push(composerSendOrStop.Decoration.widget(pos, dom));
19122
19122
  }
19123
19123
  }
19124
- return scopeRegistry.DecorationSet.create(state.doc, decorations);
19124
+ return composerSendOrStop.DecorationSet.create(state.doc, decorations);
19125
19125
  }
19126
19126
  function tableEditing({ allowTableNodeSelection = false } = {}) {
19127
- return new scopeRegistry.Plugin({
19127
+ return new composerSendOrStop.Plugin({
19128
19128
  key: tableEditingKey,
19129
19129
  state: {
19130
19130
  init() {
@@ -19302,7 +19302,7 @@ const deleteTableWhenAllCellsSelected = ({ editor }) => {
19302
19302
  return false;
19303
19303
  }
19304
19304
  let cellCount = 0;
19305
- const table2 = scopeRegistry.findParentNodeClosestToPos(selection.ranges[0].$from, (node) => {
19305
+ const table2 = composerSendOrStop.findParentNodeClosestToPos(selection.ranges[0].$from, (node) => {
19306
19306
  return node.type.name === "table";
19307
19307
  });
19308
19308
  table2 === null || table2 === void 0 ? void 0 : table2.node.descendants((node) => {
@@ -19320,7 +19320,7 @@ const deleteTableWhenAllCellsSelected = ({ editor }) => {
19320
19320
  editor.commands.deleteTable();
19321
19321
  return true;
19322
19322
  };
19323
- const Table$2 = scopeRegistry.Node.create({
19323
+ const Table$2 = composerSendOrStop.Node.create({
19324
19324
  name: "table",
19325
19325
  // @ts-ignore
19326
19326
  addOptions() {
@@ -19347,7 +19347,7 @@ const Table$2 = scopeRegistry.Node.create({
19347
19347
  const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);
19348
19348
  const table2 = [
19349
19349
  "table",
19350
- scopeRegistry.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
19350
+ composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
19351
19351
  style: tableWidth ? `width: ${tableWidth}` : `min-width: ${tableMinWidth}`
19352
19352
  }),
19353
19353
  colgroup,
@@ -19361,7 +19361,7 @@ const Table$2 = scopeRegistry.Node.create({
19361
19361
  const node = createTable(editor.schema, rows, cols, withHeaderRow);
19362
19362
  if (dispatch) {
19363
19363
  const offset = tr2.selection.from + 1;
19364
- tr2.replaceSelectionWith(node).scrollIntoView().setSelection(scopeRegistry.TextSelection.near(tr2.doc.resolve(offset)));
19364
+ tr2.replaceSelectionWith(node).scrollIntoView().setSelection(composerSendOrStop.TextSelection.near(tr2.doc.resolve(offset)));
19365
19365
  }
19366
19366
  return true;
19367
19367
  },
@@ -19473,11 +19473,11 @@ const Table$2 = scopeRegistry.Node.create({
19473
19473
  storage: extension.storage
19474
19474
  };
19475
19475
  return {
19476
- tableRole: scopeRegistry.callOrReturn(scopeRegistry.getExtensionField(extension, "tableRole", context))
19476
+ tableRole: composerSendOrStop.callOrReturn(composerSendOrStop.getExtensionField(extension, "tableRole", context))
19477
19477
  };
19478
19478
  }
19479
19479
  });
19480
- const TableRow = scopeRegistry.Node.create({
19480
+ const TableRow = composerSendOrStop.Node.create({
19481
19481
  name: "tableRow",
19482
19482
  addOptions() {
19483
19483
  return {
@@ -19492,10 +19492,10 @@ const TableRow = scopeRegistry.Node.create({
19492
19492
  ];
19493
19493
  },
19494
19494
  renderHTML({ HTMLAttributes }) {
19495
- return ["tr", scopeRegistry.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19495
+ return ["tr", composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19496
19496
  }
19497
19497
  });
19498
- const TableCell = scopeRegistry.Node.create({
19498
+ const TableCell = composerSendOrStop.Node.create({
19499
19499
  name: "tableCell",
19500
19500
  addOptions() {
19501
19501
  return {
@@ -19529,10 +19529,10 @@ const TableCell = scopeRegistry.Node.create({
19529
19529
  ];
19530
19530
  },
19531
19531
  renderHTML({ HTMLAttributes }) {
19532
- return ["td", scopeRegistry.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19532
+ return ["td", composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19533
19533
  }
19534
19534
  });
19535
- const TableHeader = scopeRegistry.Node.create({
19535
+ const TableHeader = composerSendOrStop.Node.create({
19536
19536
  name: "tableHeader",
19537
19537
  addOptions() {
19538
19538
  return {
@@ -19566,7 +19566,7 @@ const TableHeader = scopeRegistry.Node.create({
19566
19566
  ];
19567
19567
  },
19568
19568
  renderHTML({ HTMLAttributes }) {
19569
- return ["th", scopeRegistry.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19569
+ return ["th", composerSendOrStop.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
19570
19570
  }
19571
19571
  });
19572
19572
  const decodeCache = {};
@@ -24849,7 +24849,7 @@ MarkdownIt.prototype.renderInline = function(src, env) {
24849
24849
  env = env || {};
24850
24850
  return this.renderer.render(this.parseInline(src, env), this.options, env);
24851
24851
  };
24852
- const schema = new scopeRegistry.Schema({
24852
+ const schema = new composerSendOrStop.Schema({
24853
24853
  nodes: {
24854
24854
  doc: {
24855
24855
  content: "block+"
@@ -25019,14 +25019,14 @@ const schema = new scopeRegistry.Schema({
25019
25019
  }
25020
25020
  });
25021
25021
  function maybeMerge(a, b) {
25022
- if (a.isText && b.isText && scopeRegistry.Mark$1.sameSet(a.marks, b.marks))
25022
+ if (a.isText && b.isText && composerSendOrStop.Mark$1.sameSet(a.marks, b.marks))
25023
25023
  return a.withText(a.text + b.text);
25024
25024
  }
25025
25025
  class MarkdownParseState {
25026
25026
  constructor(schema2, tokenHandlers2) {
25027
25027
  this.schema = schema2;
25028
25028
  this.tokenHandlers = tokenHandlers2;
25029
- this.stack = [{ type: schema2.topNodeType, attrs: null, content: [], marks: scopeRegistry.Mark$1.none }];
25029
+ this.stack = [{ type: schema2.topNodeType, attrs: null, content: [], marks: composerSendOrStop.Mark$1.none }];
25030
25030
  }
25031
25031
  top() {
25032
25032
  return this.stack[this.stack.length - 1];
@@ -25077,7 +25077,7 @@ class MarkdownParseState {
25077
25077
  }
25078
25078
  // Wrap subsequent content in a node of the given type.
25079
25079
  openNode(type, attrs2) {
25080
- this.stack.push({ type, attrs: attrs2, content: [], marks: scopeRegistry.Mark$1.none });
25080
+ this.stack.push({ type, attrs: attrs2, content: [], marks: composerSendOrStop.Mark$1.none });
25081
25081
  }
25082
25082
  // Close and return the node that is currently on top of the stack.
25083
25083
  closeNode() {
@@ -25752,7 +25752,7 @@ var __publicField2 = (obj, key, value) => {
25752
25752
  __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value);
25753
25753
  return value;
25754
25754
  };
25755
- const MarkdownTightLists = scopeRegistry.Extension.create({
25755
+ const MarkdownTightLists = composerSendOrStop.Extension.create({
25756
25756
  name: "markdownTightLists",
25757
25757
  addOptions: () => ({
25758
25758
  tight: true,
@@ -25907,7 +25907,7 @@ class MarkdownSerializerState2 extends MarkdownSerializerState$1 {
25907
25907
  };
25908
25908
  }
25909
25909
  }
25910
- const HTMLMark = scopeRegistry.Mark.create({
25910
+ const HTMLMark = composerSendOrStop.Mark.create({
25911
25911
  name: "markdownHTMLMark",
25912
25912
  /**
25913
25913
  * @return {{markdown: MarkdownMarkSpec}}
@@ -25942,7 +25942,7 @@ const HTMLMark = scopeRegistry.Mark.create({
25942
25942
  function getMarkTags(mark) {
25943
25943
  const schema2 = mark.type.schema;
25944
25944
  const node = schema2.text(" ", [mark]);
25945
- const html = scopeRegistry.getHTMLFromFragment(scopeRegistry.Fragment.from(node), schema2);
25945
+ const html = composerSendOrStop.getHTMLFromFragment(composerSendOrStop.Fragment.from(node), schema2);
25946
25946
  const match2 = html.match(/^(<.*?>) (<\/.*?>)$/);
25947
25947
  return match2 ? [match2[1], match2[2]] : null;
25948
25948
  }
@@ -25973,7 +25973,7 @@ function unwrapElement(node) {
25973
25973
  parent.insertBefore(node.firstChild, node);
25974
25974
  parent.removeChild(node);
25975
25975
  }
25976
- const HTMLNode = scopeRegistry.Node.create({
25976
+ const HTMLNode = composerSendOrStop.Node.create({
25977
25977
  name: "markdownHTMLNode",
25978
25978
  addStorage() {
25979
25979
  return {
@@ -25998,8 +25998,8 @@ const HTMLNode = scopeRegistry.Node.create({
25998
25998
  });
25999
25999
  function serializeHTML(node, parent) {
26000
26000
  const schema2 = node.type.schema;
26001
- const html = scopeRegistry.getHTMLFromFragment(scopeRegistry.Fragment.from(node), schema2);
26002
- if (node.isBlock && (parent instanceof scopeRegistry.Fragment || parent.type.name === schema2.topNodeType.name)) {
26001
+ const html = composerSendOrStop.getHTMLFromFragment(composerSendOrStop.Fragment.from(node), schema2);
26002
+ if (node.isBlock && (parent instanceof composerSendOrStop.Fragment || parent.type.name === schema2.topNodeType.name)) {
26003
26003
  return formatBlock(html);
26004
26004
  }
26005
26005
  return html;
@@ -26013,7 +26013,7 @@ ${element.innerHTML}
26013
26013
  `;
26014
26014
  return element.outerHTML;
26015
26015
  }
26016
- const Blockquote = scopeRegistry.Node.create({
26016
+ const Blockquote = composerSendOrStop.Node.create({
26017
26017
  name: "blockquote"
26018
26018
  });
26019
26019
  const Blockquote$1 = Blockquote.extend({
@@ -26031,7 +26031,7 @@ const Blockquote$1 = Blockquote.extend({
26031
26031
  };
26032
26032
  }
26033
26033
  });
26034
- const BulletList = scopeRegistry.Node.create({
26034
+ const BulletList = composerSendOrStop.Node.create({
26035
26035
  name: "bulletList"
26036
26036
  });
26037
26037
  const BulletList$1 = BulletList.extend({
@@ -26051,7 +26051,7 @@ const BulletList$1 = BulletList.extend({
26051
26051
  };
26052
26052
  }
26053
26053
  });
26054
- const CodeBlock = scopeRegistry.Node.create({
26054
+ const CodeBlock = composerSendOrStop.Node.create({
26055
26055
  name: "codeBlock"
26056
26056
  });
26057
26057
  const CodeBlock$1 = CodeBlock.extend({
@@ -26083,7 +26083,7 @@ const CodeBlock$1 = CodeBlock.extend({
26083
26083
  };
26084
26084
  }
26085
26085
  });
26086
- const HardBreak = scopeRegistry.Node.create({
26086
+ const HardBreak = composerSendOrStop.Node.create({
26087
26087
  name: "hardBreak"
26088
26088
  });
26089
26089
  const HardBreak$1 = HardBreak.extend({
@@ -26107,7 +26107,7 @@ const HardBreak$1 = HardBreak.extend({
26107
26107
  };
26108
26108
  }
26109
26109
  });
26110
- const Heading = scopeRegistry.Node.create({
26110
+ const Heading = composerSendOrStop.Node.create({
26111
26111
  name: "heading"
26112
26112
  });
26113
26113
  const Heading$1 = Heading.extend({
@@ -26125,7 +26125,7 @@ const Heading$1 = Heading.extend({
26125
26125
  };
26126
26126
  }
26127
26127
  });
26128
- const HorizontalRule = scopeRegistry.Node.create({
26128
+ const HorizontalRule = composerSendOrStop.Node.create({
26129
26129
  name: "horizontalRule"
26130
26130
  });
26131
26131
  const HorizontalRule$1 = HorizontalRule.extend({
@@ -26143,7 +26143,7 @@ const HorizontalRule$1 = HorizontalRule.extend({
26143
26143
  };
26144
26144
  }
26145
26145
  });
26146
- const Image = scopeRegistry.Node.create({
26146
+ const Image = composerSendOrStop.Node.create({
26147
26147
  name: "image"
26148
26148
  });
26149
26149
  const Image$1 = Image.extend({
@@ -26161,7 +26161,7 @@ const Image$1 = Image.extend({
26161
26161
  };
26162
26162
  }
26163
26163
  });
26164
- const ListItem = scopeRegistry.Node.create({
26164
+ const ListItem = composerSendOrStop.Node.create({
26165
26165
  name: "listItem"
26166
26166
  });
26167
26167
  const ListItem$1 = ListItem.extend({
@@ -26179,7 +26179,7 @@ const ListItem$1 = ListItem.extend({
26179
26179
  };
26180
26180
  }
26181
26181
  });
26182
- const OrderedList = scopeRegistry.Node.create({
26182
+ const OrderedList = composerSendOrStop.Node.create({
26183
26183
  name: "orderedList"
26184
26184
  });
26185
26185
  function findIndexOfAdjacentNode(node, parent, index) {
@@ -26216,7 +26216,7 @@ const OrderedList$1 = OrderedList.extend({
26216
26216
  };
26217
26217
  }
26218
26218
  });
26219
- const Paragraph = scopeRegistry.Node.create({
26219
+ const Paragraph = composerSendOrStop.Node.create({
26220
26220
  name: "paragraph"
26221
26221
  });
26222
26222
  const Paragraph$1 = Paragraph.extend({
@@ -26238,7 +26238,7 @@ function childNodes(node) {
26238
26238
  var _node$content$content, _node$content;
26239
26239
  return (_node$content$content = node === null || node === void 0 || (_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.content) !== null && _node$content$content !== void 0 ? _node$content$content : [];
26240
26240
  }
26241
- const Table = scopeRegistry.Node.create({
26241
+ const Table = composerSendOrStop.Node.create({
26242
26242
  name: "table"
26243
26243
  });
26244
26244
  const Table$1 = Table.extend({
@@ -26300,7 +26300,7 @@ function isMarkdownSerializable(node) {
26300
26300
  }
26301
26301
  return true;
26302
26302
  }
26303
- const TaskItem = scopeRegistry.Node.create({
26303
+ const TaskItem = composerSendOrStop.Node.create({
26304
26304
  name: "taskItem"
26305
26305
  });
26306
26306
  const TaskItem$1 = TaskItem.extend({
@@ -26331,7 +26331,7 @@ const TaskItem$1 = TaskItem.extend({
26331
26331
  };
26332
26332
  }
26333
26333
  });
26334
- const TaskList = scopeRegistry.Node.create({
26334
+ const TaskList = composerSendOrStop.Node.create({
26335
26335
  name: "taskList"
26336
26336
  });
26337
26337
  const TaskList$1 = TaskList.extend({
@@ -26356,7 +26356,7 @@ const TaskList$1 = TaskList.extend({
26356
26356
  };
26357
26357
  }
26358
26358
  });
26359
- const Text = scopeRegistry.Node.create({
26359
+ const Text = composerSendOrStop.Node.create({
26360
26360
  name: "text"
26361
26361
  });
26362
26362
  const Text$1 = Text.extend({
@@ -26376,7 +26376,7 @@ const Text$1 = Text.extend({
26376
26376
  };
26377
26377
  }
26378
26378
  });
26379
- const Bold = scopeRegistry.Mark.create({
26379
+ const Bold = composerSendOrStop.Mark.create({
26380
26380
  name: "bold"
26381
26381
  });
26382
26382
  const Bold$1 = Bold.extend({
@@ -26394,7 +26394,7 @@ const Bold$1 = Bold.extend({
26394
26394
  };
26395
26395
  }
26396
26396
  });
26397
- const Code = scopeRegistry.Mark.create({
26397
+ const Code = composerSendOrStop.Mark.create({
26398
26398
  name: "code"
26399
26399
  });
26400
26400
  const Code$1 = Code.extend({
@@ -26412,7 +26412,7 @@ const Code$1 = Code.extend({
26412
26412
  };
26413
26413
  }
26414
26414
  });
26415
- const Italic = scopeRegistry.Mark.create({
26415
+ const Italic = composerSendOrStop.Mark.create({
26416
26416
  name: "italic"
26417
26417
  });
26418
26418
  const Italic$1 = Italic.extend({
@@ -26430,7 +26430,7 @@ const Italic$1 = Italic.extend({
26430
26430
  };
26431
26431
  }
26432
26432
  });
26433
- const Link$1 = scopeRegistry.Mark.create({
26433
+ const Link$1 = composerSendOrStop.Mark.create({
26434
26434
  name: "link"
26435
26435
  });
26436
26436
  const Link$1$1 = Link$1.extend({
@@ -26448,7 +26448,7 @@ const Link$1$1 = Link$1.extend({
26448
26448
  };
26449
26449
  }
26450
26450
  });
26451
- const Strike = scopeRegistry.Mark.create({
26451
+ const Strike = composerSendOrStop.Mark.create({
26452
26452
  name: "strike"
26453
26453
  });
26454
26454
  const Strike$1 = Strike.extend({
@@ -26649,7 +26649,7 @@ class MarkdownParser2 {
26649
26649
  return md2;
26650
26650
  }
26651
26651
  }
26652
- const MarkdownClipboard = scopeRegistry.Extension.create({
26652
+ const MarkdownClipboard = composerSendOrStop.Extension.create({
26653
26653
  name: "markdownClipboard",
26654
26654
  addOptions() {
26655
26655
  return {
@@ -26658,8 +26658,8 @@ const MarkdownClipboard = scopeRegistry.Extension.create({
26658
26658
  };
26659
26659
  },
26660
26660
  addProseMirrorPlugins() {
26661
- return [new scopeRegistry.Plugin({
26662
- key: new scopeRegistry.PluginKey("markdownClipboard"),
26661
+ return [new composerSendOrStop.Plugin({
26662
+ key: new composerSendOrStop.PluginKey("markdownClipboard"),
26663
26663
  props: {
26664
26664
  clipboardTextParser: (text2, context, plainText) => {
26665
26665
  if (plainText || !this.options.transformPastedText) {
@@ -26668,7 +26668,7 @@ const MarkdownClipboard = scopeRegistry.Extension.create({
26668
26668
  const parsed = this.editor.storage.markdown.parser.parse(text2, {
26669
26669
  inline: true
26670
26670
  });
26671
- return scopeRegistry.DOMParser.fromSchema(this.editor.schema).parseSlice(elementFromString(parsed), {
26671
+ return composerSendOrStop.DOMParser.fromSchema(this.editor.schema).parseSlice(elementFromString(parsed), {
26672
26672
  preserveWhitespace: true,
26673
26673
  context
26674
26674
  });
@@ -26686,7 +26686,7 @@ const MarkdownClipboard = scopeRegistry.Extension.create({
26686
26686
  })];
26687
26687
  }
26688
26688
  });
26689
- const Markdown = scopeRegistry.Extension.create({
26689
+ const Markdown = composerSendOrStop.Extension.create({
26690
26690
  name: "markdown",
26691
26691
  priority: 50,
26692
26692
  addOptions() {
@@ -26702,7 +26702,7 @@ const Markdown = scopeRegistry.Extension.create({
26702
26702
  };
26703
26703
  },
26704
26704
  addCommands() {
26705
- const commands = scopeRegistry.index.Commands.config.addCommands();
26705
+ const commands = composerSendOrStop.index.Commands.config.addCommands();
26706
26706
  return {
26707
26707
  setContent: (content, options) => (props) => {
26708
26708
  return commands.setContent(props.editor.storage.markdown.parser.parse(content), options)(props);
@@ -26836,7 +26836,7 @@ const __iconNode$O = [
26836
26836
  ["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
26837
26837
  ["path", { d: "M10 12h4", key: "a56b0p" }]
26838
26838
  ];
26839
- const Archive = scopeRegistry.createLucideIcon("archive", __iconNode$O);
26839
+ const Archive = composerSendOrStop.createLucideIcon("archive", __iconNode$O);
26840
26840
  /**
26841
26841
  * @license lucide-react v0.575.0 - ISC
26842
26842
  *
@@ -26847,7 +26847,7 @@ const __iconNode$N = [
26847
26847
  ["path", { d: "M12 5v14", key: "s699le" }],
26848
26848
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
26849
26849
  ];
26850
- const ArrowDown = scopeRegistry.createLucideIcon("arrow-down", __iconNode$N);
26850
+ const ArrowDown = composerSendOrStop.createLucideIcon("arrow-down", __iconNode$N);
26851
26851
  /**
26852
26852
  * @license lucide-react v0.575.0 - ISC
26853
26853
  *
@@ -26858,7 +26858,7 @@ const __iconNode$M = [
26858
26858
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
26859
26859
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
26860
26860
  ];
26861
- const ArrowLeft = scopeRegistry.createLucideIcon("arrow-left", __iconNode$M);
26861
+ const ArrowLeft = composerSendOrStop.createLucideIcon("arrow-left", __iconNode$M);
26862
26862
  /**
26863
26863
  * @license lucide-react v0.575.0 - ISC
26864
26864
  *
@@ -26869,7 +26869,7 @@ const __iconNode$L = [
26869
26869
  ["path", { d: "M5 12h14", key: "1ays0h" }],
26870
26870
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
26871
26871
  ];
26872
- const ArrowRight = scopeRegistry.createLucideIcon("arrow-right", __iconNode$L);
26872
+ const ArrowRight = composerSendOrStop.createLucideIcon("arrow-right", __iconNode$L);
26873
26873
  /**
26874
26874
  * @license lucide-react v0.575.0 - ISC
26875
26875
  *
@@ -26908,7 +26908,7 @@ const __iconNode$K = [
26908
26908
  ["path", { d: "m12 8 4.74-2.85", key: "3rx089" }],
26909
26909
  ["path", { d: "M12 13.5V8", key: "1io7kd" }]
26910
26910
  ];
26911
- const Boxes = scopeRegistry.createLucideIcon("boxes", __iconNode$K);
26911
+ const Boxes = composerSendOrStop.createLucideIcon("boxes", __iconNode$K);
26912
26912
  /**
26913
26913
  * @license lucide-react v0.575.0 - ISC
26914
26914
  *
@@ -26925,7 +26925,7 @@ const __iconNode$J = [
26925
26925
  ["path", { d: "M6 18a4 4 0 0 1-2-7.464", key: "k1g0md" }],
26926
26926
  ["path", { d: "M6.003 5.125a4 4 0 0 0-2.526 5.77", key: "q97ue3" }]
26927
26927
  ];
26928
- const Brain = scopeRegistry.createLucideIcon("brain", __iconNode$J);
26928
+ const Brain = composerSendOrStop.createLucideIcon("brain", __iconNode$J);
26929
26929
  /**
26930
26930
  * @license lucide-react v0.575.0 - ISC
26931
26931
  *
@@ -26938,7 +26938,7 @@ const __iconNode$I = [
26938
26938
  ["path", { d: "M22 13a18.15 18.15 0 0 1-20 0", key: "12hx5q" }],
26939
26939
  ["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
26940
26940
  ];
26941
- const BriefcaseBusiness = scopeRegistry.createLucideIcon("briefcase-business", __iconNode$I);
26941
+ const BriefcaseBusiness = composerSendOrStop.createLucideIcon("briefcase-business", __iconNode$I);
26942
26942
  /**
26943
26943
  * @license lucide-react v0.575.0 - ISC
26944
26944
  *
@@ -26960,7 +26960,7 @@ const __iconNode$H = [
26960
26960
  ],
26961
26961
  ["path", { d: "M7 5V3", key: "1t1388" }]
26962
26962
  ];
26963
- const Cable = scopeRegistry.createLucideIcon("cable", __iconNode$H);
26963
+ const Cable = composerSendOrStop.createLucideIcon("cable", __iconNode$H);
26964
26964
  /**
26965
26965
  * @license lucide-react v0.575.0 - ISC
26966
26966
  *
@@ -26973,7 +26973,7 @@ const __iconNode$G = [
26973
26973
  ["path", { d: "M7 11h12", key: "127s9w" }],
26974
26974
  ["path", { d: "M7 6h3", key: "w9rmul" }]
26975
26975
  ];
26976
- const ChartBar = scopeRegistry.createLucideIcon("chart-bar", __iconNode$G);
26976
+ const ChartBar = composerSendOrStop.createLucideIcon("chart-bar", __iconNode$G);
26977
26977
  /**
26978
26978
  * @license lucide-react v0.575.0 - ISC
26979
26979
  *
@@ -26986,7 +26986,7 @@ const __iconNode$F = [
26986
26986
  ["path", { d: "M13 17V5", key: "1frdt8" }],
26987
26987
  ["path", { d: "M8 17v-3", key: "17ska0" }]
26988
26988
  ];
26989
- const ChartColumn = scopeRegistry.createLucideIcon("chart-column", __iconNode$F);
26989
+ const ChartColumn = composerSendOrStop.createLucideIcon("chart-column", __iconNode$F);
26990
26990
  /**
26991
26991
  * @license lucide-react v0.575.0 - ISC
26992
26992
  *
@@ -26994,7 +26994,7 @@ const ChartColumn = scopeRegistry.createLucideIcon("chart-column", __iconNode$F)
26994
26994
  * See the LICENSE file in the root directory of this source tree.
26995
26995
  */
26996
26996
  const __iconNode$E = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
26997
- const ChevronUp = scopeRegistry.createLucideIcon("chevron-up", __iconNode$E);
26997
+ const ChevronUp = composerSendOrStop.createLucideIcon("chevron-up", __iconNode$E);
26998
26998
  /**
26999
26999
  * @license lucide-react v0.575.0 - ISC
27000
27000
  *
@@ -27006,7 +27006,7 @@ const __iconNode$D = [
27006
27006
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
27007
27007
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
27008
27008
  ];
27009
- const CircleAlert = scopeRegistry.createLucideIcon("circle-alert", __iconNode$D);
27009
+ const CircleAlert = composerSendOrStop.createLucideIcon("circle-alert", __iconNode$D);
27010
27010
  /**
27011
27011
  * @license lucide-react v0.575.0 - ISC
27012
27012
  *
@@ -27017,7 +27017,7 @@ const __iconNode$C = [
27017
27017
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
27018
27018
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
27019
27019
  ];
27020
- const CircleCheck = scopeRegistry.createLucideIcon("circle-check", __iconNode$C);
27020
+ const CircleCheck = composerSendOrStop.createLucideIcon("circle-check", __iconNode$C);
27021
27021
  /**
27022
27022
  * @license lucide-react v0.575.0 - ISC
27023
27023
  *
@@ -27029,7 +27029,7 @@ const __iconNode$B = [
27029
27029
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
27030
27030
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
27031
27031
  ];
27032
- const CircleX = scopeRegistry.createLucideIcon("circle-x", __iconNode$B);
27032
+ const CircleX = composerSendOrStop.createLucideIcon("circle-x", __iconNode$B);
27033
27033
  /**
27034
27034
  * @license lucide-react v0.575.0 - ISC
27035
27035
  *
@@ -27037,7 +27037,7 @@ const CircleX = scopeRegistry.createLucideIcon("circle-x", __iconNode$B);
27037
27037
  * See the LICENSE file in the root directory of this source tree.
27038
27038
  */
27039
27039
  const __iconNode$A = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
27040
- const Circle = scopeRegistry.createLucideIcon("circle", __iconNode$A);
27040
+ const Circle = composerSendOrStop.createLucideIcon("circle", __iconNode$A);
27041
27041
  /**
27042
27042
  * @license lucide-react v0.575.0 - ISC
27043
27043
  *
@@ -27051,7 +27051,7 @@ const __iconNode$z = [
27051
27051
  ["path", { d: "M21 14H11", key: "1bme5i" }],
27052
27052
  ["path", { d: "m15 10-4 4 4 4", key: "5dvupr" }]
27053
27053
  ];
27054
- const ClipboardCopy = scopeRegistry.createLucideIcon("clipboard-copy", __iconNode$z);
27054
+ const ClipboardCopy = composerSendOrStop.createLucideIcon("clipboard-copy", __iconNode$z);
27055
27055
  /**
27056
27056
  * @license lucide-react v0.575.0 - ISC
27057
27057
  *
@@ -27063,7 +27063,7 @@ const __iconNode$y = [
27063
27063
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
27064
27064
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
27065
27065
  ];
27066
- const CodeXml = scopeRegistry.createLucideIcon("code-xml", __iconNode$y);
27066
+ const CodeXml = composerSendOrStop.createLucideIcon("code-xml", __iconNode$y);
27067
27067
  /**
27068
27068
  * @license lucide-react v0.575.0 - ISC
27069
27069
  *
@@ -27075,7 +27075,7 @@ const __iconNode$x = [
27075
27075
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
27076
27076
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
27077
27077
  ];
27078
- const Download = scopeRegistry.createLucideIcon("download", __iconNode$x);
27078
+ const Download = composerSendOrStop.createLucideIcon("download", __iconNode$x);
27079
27079
  /**
27080
27080
  * @license lucide-react v0.575.0 - ISC
27081
27081
  *
@@ -27087,7 +27087,7 @@ const __iconNode$w = [
27087
27087
  ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
27088
27088
  ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
27089
27089
  ];
27090
- const Ellipsis = scopeRegistry.createLucideIcon("ellipsis", __iconNode$w);
27090
+ const Ellipsis = composerSendOrStop.createLucideIcon("ellipsis", __iconNode$w);
27091
27091
  /**
27092
27092
  * @license lucide-react v0.575.0 - ISC
27093
27093
  *
@@ -27099,7 +27099,7 @@ const __iconNode$v = [
27099
27099
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
27100
27100
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
27101
27101
  ];
27102
- const ExternalLink = scopeRegistry.createLucideIcon("external-link", __iconNode$v);
27102
+ const ExternalLink = composerSendOrStop.createLucideIcon("external-link", __iconNode$v);
27103
27103
  /**
27104
27104
  * @license lucide-react v0.575.0 - ISC
27105
27105
  *
@@ -27118,7 +27118,7 @@ const __iconNode$u = [
27118
27118
  ["path", { d: "M9 15h6", key: "cctwl0" }],
27119
27119
  ["path", { d: "M12 18v-6", key: "17g6i2" }]
27120
27120
  ];
27121
- const FilePlus = scopeRegistry.createLucideIcon("file-plus", __iconNode$u);
27121
+ const FilePlus = composerSendOrStop.createLucideIcon("file-plus", __iconNode$u);
27122
27122
  /**
27123
27123
  * @license lucide-react v0.575.0 - ISC
27124
27124
  *
@@ -27139,7 +27139,7 @@ const __iconNode$t = [
27139
27139
  ["path", { d: "M8 17h2", key: "2yhykz" }],
27140
27140
  ["path", { d: "M14 17h2", key: "10kma7" }]
27141
27141
  ];
27142
- const FileSpreadsheet = scopeRegistry.createLucideIcon("file-spreadsheet", __iconNode$t);
27142
+ const FileSpreadsheet = composerSendOrStop.createLucideIcon("file-spreadsheet", __iconNode$t);
27143
27143
  /**
27144
27144
  * @license lucide-react v0.575.0 - ISC
27145
27145
  *
@@ -27155,7 +27155,7 @@ const __iconNode$s = [
27155
27155
  }
27156
27156
  ]
27157
27157
  ];
27158
- const FolderOpen = scopeRegistry.createLucideIcon("folder-open", __iconNode$s);
27158
+ const FolderOpen = composerSendOrStop.createLucideIcon("folder-open", __iconNode$s);
27159
27159
  /**
27160
27160
  * @license lucide-react v0.575.0 - ISC
27161
27161
  *
@@ -27185,7 +27185,7 @@ const __iconNode$r = [
27185
27185
  }
27186
27186
  ]
27187
27187
  ];
27188
- const Layers = scopeRegistry.createLucideIcon("layers", __iconNode$r);
27188
+ const Layers = composerSendOrStop.createLucideIcon("layers", __iconNode$r);
27189
27189
  /**
27190
27190
  * @license lucide-react v0.575.0 - ISC
27191
27191
  *
@@ -27196,7 +27196,7 @@ const __iconNode$q = [
27196
27196
  ["path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71", key: "1cjeqo" }],
27197
27197
  ["path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71", key: "19qd67" }]
27198
27198
  ];
27199
- const Link = scopeRegistry.createLucideIcon("link", __iconNode$q);
27199
+ const Link = composerSendOrStop.createLucideIcon("link", __iconNode$q);
27200
27200
  /**
27201
27201
  * @license lucide-react v0.575.0 - ISC
27202
27202
  *
@@ -27210,7 +27210,7 @@ const __iconNode$p = [
27210
27210
  ["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
27211
27211
  ["path", { d: "m3 7 2 2 4-4", key: "1obspn" }]
27212
27212
  ];
27213
- const ListChecks = scopeRegistry.createLucideIcon("list-checks", __iconNode$p);
27213
+ const ListChecks = composerSendOrStop.createLucideIcon("list-checks", __iconNode$p);
27214
27214
  /**
27215
27215
  * @license lucide-react v0.575.0 - ISC
27216
27216
  *
@@ -27218,7 +27218,7 @@ const ListChecks = scopeRegistry.createLucideIcon("list-checks", __iconNode$p);
27218
27218
  * See the LICENSE file in the root directory of this source tree.
27219
27219
  */
27220
27220
  const __iconNode$o = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
27221
- const LoaderCircle = scopeRegistry.createLucideIcon("loader-circle", __iconNode$o);
27221
+ const LoaderCircle = composerSendOrStop.createLucideIcon("loader-circle", __iconNode$o);
27222
27222
  /**
27223
27223
  * @license lucide-react v0.575.0 - ISC
27224
27224
  *
@@ -27235,7 +27235,7 @@ const __iconNode$n = [
27235
27235
  ["path", { d: "M2 12h4", key: "j09sii" }],
27236
27236
  ["path", { d: "m4.9 4.9 2.9 2.9", key: "giyufr" }]
27237
27237
  ];
27238
- const Loader = scopeRegistry.createLucideIcon("loader", __iconNode$n);
27238
+ const Loader = composerSendOrStop.createLucideIcon("loader", __iconNode$n);
27239
27239
  /**
27240
27240
  * @license lucide-react v0.575.0 - ISC
27241
27241
  *
@@ -27248,7 +27248,7 @@ const __iconNode$m = [
27248
27248
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
27249
27249
  ["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
27250
27250
  ];
27251
- const Maximize2 = scopeRegistry.createLucideIcon("maximize-2", __iconNode$m);
27251
+ const Maximize2 = composerSendOrStop.createLucideIcon("maximize-2", __iconNode$m);
27252
27252
  /**
27253
27253
  * @license lucide-react v0.575.0 - ISC
27254
27254
  *
@@ -27266,7 +27266,7 @@ const __iconNode$l = [
27266
27266
  ["path", { d: "M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14", key: "1853fq" }],
27267
27267
  ["path", { d: "M8 6v8", key: "15ugcq" }]
27268
27268
  ];
27269
- const Megaphone = scopeRegistry.createLucideIcon("megaphone", __iconNode$l);
27269
+ const Megaphone = composerSendOrStop.createLucideIcon("megaphone", __iconNode$l);
27270
27270
  /**
27271
27271
  * @license lucide-react v0.575.0 - ISC
27272
27272
  *
@@ -27282,7 +27282,7 @@ const __iconNode$k = [
27282
27282
  }
27283
27283
  ]
27284
27284
  ];
27285
- const MessageSquare = scopeRegistry.createLucideIcon("message-square", __iconNode$k);
27285
+ const MessageSquare = composerSendOrStop.createLucideIcon("message-square", __iconNode$k);
27286
27286
  /**
27287
27287
  * @license lucide-react v0.575.0 - ISC
27288
27288
  *
@@ -27295,7 +27295,7 @@ const __iconNode$j = [
27295
27295
  ["path", { d: "m3 21 7-7", key: "tjx5ai" }],
27296
27296
  ["path", { d: "M4 14h6v6", key: "rmj7iw" }]
27297
27297
  ];
27298
- const Minimize2 = scopeRegistry.createLucideIcon("minimize-2", __iconNode$j);
27298
+ const Minimize2 = composerSendOrStop.createLucideIcon("minimize-2", __iconNode$j);
27299
27299
  /**
27300
27300
  * @license lucide-react v0.575.0 - ISC
27301
27301
  *
@@ -27316,7 +27316,7 @@ const __iconNode$i = [
27316
27316
  }
27317
27317
  ]
27318
27318
  ];
27319
- const NotebookPen = scopeRegistry.createLucideIcon("notebook-pen", __iconNode$i);
27319
+ const NotebookPen = composerSendOrStop.createLucideIcon("notebook-pen", __iconNode$i);
27320
27320
  /**
27321
27321
  * @license lucide-react v0.575.0 - ISC
27322
27322
  *
@@ -27327,7 +27327,7 @@ const __iconNode$h = [
27327
27327
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
27328
27328
  ["path", { d: "M3 9h18", key: "1pudct" }]
27329
27329
  ];
27330
- const PanelTop = scopeRegistry.createLucideIcon("panel-top", __iconNode$h);
27330
+ const PanelTop = composerSendOrStop.createLucideIcon("panel-top", __iconNode$h);
27331
27331
  /**
27332
27332
  * @license lucide-react v0.575.0 - ISC
27333
27333
  *
@@ -27343,7 +27343,7 @@ const __iconNode$g = [
27343
27343
  }
27344
27344
  ]
27345
27345
  ];
27346
- const Paperclip = scopeRegistry.createLucideIcon("paperclip", __iconNode$g);
27346
+ const Paperclip = composerSendOrStop.createLucideIcon("paperclip", __iconNode$g);
27347
27347
  /**
27348
27348
  * @license lucide-react v0.575.0 - ISC
27349
27349
  *
@@ -27360,7 +27360,7 @@ const __iconNode$f = [
27360
27360
  }
27361
27361
  ]
27362
27362
  ];
27363
- const PenLine = scopeRegistry.createLucideIcon("pen-line", __iconNode$f);
27363
+ const PenLine = composerSendOrStop.createLucideIcon("pen-line", __iconNode$f);
27364
27364
  /**
27365
27365
  * @license lucide-react v0.575.0 - ISC
27366
27366
  *
@@ -27376,7 +27376,7 @@ const __iconNode$e = [
27376
27376
  }
27377
27377
  ]
27378
27378
  ];
27379
- const Play = scopeRegistry.createLucideIcon("play", __iconNode$e);
27379
+ const Play = composerSendOrStop.createLucideIcon("play", __iconNode$e);
27380
27380
  /**
27381
27381
  * @license lucide-react v0.575.0 - ISC
27382
27382
  *
@@ -27387,7 +27387,7 @@ const __iconNode$d = [
27387
27387
  ["path", { d: "M5 12h14", key: "1ays0h" }],
27388
27388
  ["path", { d: "M12 5v14", key: "s699le" }]
27389
27389
  ];
27390
- const Plus = scopeRegistry.createLucideIcon("plus", __iconNode$d);
27390
+ const Plus = composerSendOrStop.createLucideIcon("plus", __iconNode$d);
27391
27391
  /**
27392
27392
  * @license lucide-react v0.575.0 - ISC
27393
27393
  *
@@ -27399,7 +27399,7 @@ const __iconNode$c = [
27399
27399
  ["path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3", key: "2k9sn8" }],
27400
27400
  ["path", { d: "m7 21 5-5 5 5", key: "bip4we" }]
27401
27401
  ];
27402
- const Presentation = scopeRegistry.createLucideIcon("presentation", __iconNode$c);
27402
+ const Presentation = composerSendOrStop.createLucideIcon("presentation", __iconNode$c);
27403
27403
  /**
27404
27404
  * @license lucide-react v0.575.0 - ISC
27405
27405
  *
@@ -27422,7 +27422,7 @@ const __iconNode$b = [
27422
27422
  }
27423
27423
  ]
27424
27424
  ];
27425
- const Quote = scopeRegistry.createLucideIcon("quote", __iconNode$b);
27425
+ const Quote = composerSendOrStop.createLucideIcon("quote", __iconNode$b);
27426
27426
  /**
27427
27427
  * @license lucide-react v0.575.0 - ISC
27428
27428
  *
@@ -27436,7 +27436,7 @@ const __iconNode$a = [
27436
27436
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
27437
27437
  ["path", { d: "M14.8 14.8 20 20", key: "ptml3r" }]
27438
27438
  ];
27439
- const Scissors = scopeRegistry.createLucideIcon("scissors", __iconNode$a);
27439
+ const Scissors = composerSendOrStop.createLucideIcon("scissors", __iconNode$a);
27440
27440
  /**
27441
27441
  * @license lucide-react v0.575.0 - ISC
27442
27442
  *
@@ -27453,7 +27453,7 @@ const __iconNode$9 = [
27453
27453
  ],
27454
27454
  ["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
27455
27455
  ];
27456
- const Send = scopeRegistry.createLucideIcon("send", __iconNode$9);
27456
+ const Send = composerSendOrStop.createLucideIcon("send", __iconNode$9);
27457
27457
  /**
27458
27458
  * @license lucide-react v0.575.0 - ISC
27459
27459
  *
@@ -27466,7 +27466,7 @@ const __iconNode$8 = [
27466
27466
  ["line", { x1: "6", x2: "6.01", y1: "6", y2: "6", key: "16zg32" }],
27467
27467
  ["line", { x1: "6", x2: "6.01", y1: "18", y2: "18", key: "nzw8ys" }]
27468
27468
  ];
27469
- const Server = scopeRegistry.createLucideIcon("server", __iconNode$8);
27469
+ const Server = composerSendOrStop.createLucideIcon("server", __iconNode$8);
27470
27470
  /**
27471
27471
  * @license lucide-react v0.575.0 - ISC
27472
27472
  *
@@ -27483,7 +27483,7 @@ const __iconNode$7 = [
27483
27483
  ],
27484
27484
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
27485
27485
  ];
27486
- const Settings = scopeRegistry.createLucideIcon("settings", __iconNode$7);
27486
+ const Settings = composerSendOrStop.createLucideIcon("settings", __iconNode$7);
27487
27487
  /**
27488
27488
  * @license lucide-react v0.575.0 - ISC
27489
27489
  *
@@ -27493,7 +27493,7 @@ const Settings = scopeRegistry.createLucideIcon("settings", __iconNode$7);
27493
27493
  const __iconNode$6 = [
27494
27494
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
27495
27495
  ];
27496
- const Square = scopeRegistry.createLucideIcon("square", __iconNode$6);
27496
+ const Square = composerSendOrStop.createLucideIcon("square", __iconNode$6);
27497
27497
  /**
27498
27498
  * @license lucide-react v0.575.0 - ISC
27499
27499
  *
@@ -27509,7 +27509,7 @@ const __iconNode$5 = [
27509
27509
  }
27510
27510
  ]
27511
27511
  ];
27512
- const Table2 = scopeRegistry.createLucideIcon("table-2", __iconNode$5);
27512
+ const Table2 = composerSendOrStop.createLucideIcon("table-2", __iconNode$5);
27513
27513
  /**
27514
27514
  * @license lucide-react v0.575.0 - ISC
27515
27515
  *
@@ -27522,7 +27522,7 @@ const __iconNode$4 = [
27522
27522
  ["path", { d: "M21 9H3", key: "1338ky" }],
27523
27523
  ["path", { d: "M21 15H3", key: "9uk58r" }]
27524
27524
  ];
27525
- const TableProperties = scopeRegistry.createLucideIcon("table-properties", __iconNode$4);
27525
+ const TableProperties = composerSendOrStop.createLucideIcon("table-properties", __iconNode$4);
27526
27526
  /**
27527
27527
  * @license lucide-react v0.575.0 - ISC
27528
27528
  *
@@ -27533,7 +27533,7 @@ const __iconNode$3 = [
27533
27533
  ["path", { d: "M12 19h8", key: "baeox8" }],
27534
27534
  ["path", { d: "m4 17 6-6-6-6", key: "1yngyt" }]
27535
27535
  ];
27536
- const Terminal = scopeRegistry.createLucideIcon("terminal", __iconNode$3);
27536
+ const Terminal = composerSendOrStop.createLucideIcon("terminal", __iconNode$3);
27537
27537
  /**
27538
27538
  * @license lucide-react v0.575.0 - ISC
27539
27539
  *
@@ -27547,7 +27547,7 @@ const __iconNode$2 = [
27547
27547
  ["path", { d: "M3 6h18", key: "d0wm0j" }],
27548
27548
  ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
27549
27549
  ];
27550
- const Trash2 = scopeRegistry.createLucideIcon("trash-2", __iconNode$2);
27550
+ const Trash2 = composerSendOrStop.createLucideIcon("trash-2", __iconNode$2);
27551
27551
  /**
27552
27552
  * @license lucide-react v0.575.0 - ISC
27553
27553
  *
@@ -27565,7 +27565,7 @@ const __iconNode$1 = [
27565
27565
  ["path", { d: "M12 9v4", key: "juzpu7" }],
27566
27566
  ["path", { d: "M12 17h.01", key: "p32p05" }]
27567
27567
  ];
27568
- const TriangleAlert = scopeRegistry.createLucideIcon("triangle-alert", __iconNode$1);
27568
+ const TriangleAlert = composerSendOrStop.createLucideIcon("triangle-alert", __iconNode$1);
27569
27569
  /**
27570
27570
  * @license lucide-react v0.575.0 - ISC
27571
27571
  *
@@ -27576,37 +27576,37 @@ const __iconNode = [
27576
27576
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
27577
27577
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
27578
27578
  ];
27579
- const X = scopeRegistry.createLucideIcon("x", __iconNode);
27579
+ const X = composerSendOrStop.createLucideIcon("x", __iconNode);
27580
27580
  const ICONS = {
27581
- BookOpen: scopeRegistry.BookOpen,
27581
+ BookOpen: composerSendOrStop.BookOpen,
27582
27582
  Boxes,
27583
27583
  BriefcaseBusiness,
27584
27584
  Cable,
27585
- Calendar: scopeRegistry.Calendar,
27585
+ Calendar: composerSendOrStop.Calendar,
27586
27586
  ChartBar,
27587
27587
  Code2: CodeXml,
27588
- Database: scopeRegistry.Database,
27588
+ Database: composerSendOrStop.Database,
27589
27589
  FileSpreadsheet,
27590
- FileText: scopeRegistry.FileText,
27591
- Folder: scopeRegistry.Folder,
27592
- FolderKanban: scopeRegistry.FolderKanban,
27593
- Globe: scopeRegistry.Globe,
27594
- HardDrive: scopeRegistry.HardDrive,
27595
- LayoutGrid: scopeRegistry.LayoutGrid,
27596
- Mail: scopeRegistry.Mail,
27590
+ FileText: composerSendOrStop.FileText,
27591
+ Folder: composerSendOrStop.Folder,
27592
+ FolderKanban: composerSendOrStop.FolderKanban,
27593
+ Globe: composerSendOrStop.Globe,
27594
+ HardDrive: composerSendOrStop.HardDrive,
27595
+ LayoutGrid: composerSendOrStop.LayoutGrid,
27596
+ Mail: composerSendOrStop.Mail,
27597
27597
  Megaphone,
27598
27598
  MessageSquare,
27599
- Monitor: scopeRegistry.Monitor,
27600
- Package: scopeRegistry.Package,
27599
+ Monitor: composerSendOrStop.Monitor,
27600
+ Package: composerSendOrStop.Package,
27601
27601
  PanelTop,
27602
27602
  Presentation,
27603
27603
  Server,
27604
27604
  Settings,
27605
27605
  Table2,
27606
27606
  Terminal,
27607
- Users: scopeRegistry.Users,
27608
- Workflow: scopeRegistry.Workflow,
27609
- Wrench: scopeRegistry.Wrench
27607
+ Users: composerSendOrStop.Users,
27608
+ Workflow: composerSendOrStop.Workflow,
27609
+ Wrench: composerSendOrStop.Wrench
27610
27610
  };
27611
27611
  function MentionIconGlyph({
27612
27612
  icon,
@@ -27614,9 +27614,9 @@ function MentionIconGlyph({
27614
27614
  }) {
27615
27615
  const Icon = icon ? ICONS[icon] : null;
27616
27616
  if (Icon) {
27617
- return /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: scopeRegistry.cn("size-3.5", className) });
27617
+ return /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: composerSendOrStop.cn("size-3.5", className) });
27618
27618
  }
27619
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: scopeRegistry.cn("text-xs leading-none", className), "aria-hidden": "true", children: icon ?? "@" });
27619
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: composerSendOrStop.cn("text-xs leading-none", className), "aria-hidden": "true", children: icon ?? "@" });
27620
27620
  }
27621
27621
  const PILL_STYLES = {
27622
27622
  Tool: "border-blue-300 bg-blue-50 text-blue-800 dark:border-blue-600 dark:bg-blue-950 dark:text-blue-200",
@@ -27628,10 +27628,10 @@ function MentionNodeView({ node }) {
27628
27628
  const config2 = getMentionConfig(type);
27629
27629
  const icon = isRecord$3(params) && typeof params.icon === "string" ? params.icon : (config2 == null ? void 0 : config2.style.icon) ?? "📎";
27630
27630
  const pillStyle = PILL_STYLES[type] ?? DEFAULT_PILL_STYLE;
27631
- return /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.NodeViewWrapper, { as: "span", children: /* @__PURE__ */ jsxRuntime.jsxs(
27631
+ return /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.NodeViewWrapper, { as: "span", children: /* @__PURE__ */ jsxRuntime.jsxs(
27632
27632
  "span",
27633
27633
  {
27634
- className: scopeRegistry.cn(
27634
+ className: composerSendOrStop.cn(
27635
27635
  "inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs font-medium leading-none align-baseline",
27636
27636
  pillStyle
27637
27637
  ),
@@ -27702,7 +27702,7 @@ function parseMentionAttrsFromUrl(name, url) {
27702
27702
  params: validation.data
27703
27703
  };
27704
27704
  }
27705
- const MentionExtension = scopeRegistry.Node.create({
27705
+ const MentionExtension = composerSendOrStop.Node.create({
27706
27706
  name: "mention",
27707
27707
  priority: 1500,
27708
27708
  group: "inline",
@@ -27734,7 +27734,7 @@ const MentionExtension = scopeRegistry.Node.create({
27734
27734
  if (!node.attrs.type) {
27735
27735
  return [
27736
27736
  "span",
27737
- scopeRegistry.mergeAttributes({}),
27737
+ composerSendOrStop.mergeAttributes({}),
27738
27738
  `@${node.attrs.name || "Unknown"}`
27739
27739
  ];
27740
27740
  }
@@ -27743,7 +27743,7 @@ const MentionExtension = scopeRegistry.Node.create({
27743
27743
  name: node.attrs.name,
27744
27744
  params: node.attrs.params
27745
27745
  });
27746
- return ["a", scopeRegistry.mergeAttributes({ href: url }), `@${node.attrs.name}`];
27746
+ return ["a", composerSendOrStop.mergeAttributes({ href: url }), `@${node.attrs.name}`];
27747
27747
  },
27748
27748
  renderText({ node }) {
27749
27749
  return makeMarkdownMention({
@@ -27767,11 +27767,11 @@ const MentionExtension = scopeRegistry.Node.create({
27767
27767
  };
27768
27768
  },
27769
27769
  addNodeView() {
27770
- return scopeRegistry.ReactNodeViewRenderer(MentionNodeView);
27770
+ return composerSendOrStop.ReactNodeViewRenderer(MentionNodeView);
27771
27771
  },
27772
27772
  addPasteRules() {
27773
27773
  return [
27774
- scopeRegistry.nodePasteRule({
27774
+ composerSendOrStop.nodePasteRule({
27775
27775
  find: new RegExp(MENTION_PATTERN.source, "g"),
27776
27776
  type: this.type,
27777
27777
  getAttributes: (match2) => {
@@ -28075,7 +28075,7 @@ const useAthenaCitationLinkHandler = () => {
28075
28075
  );
28076
28076
  };
28077
28077
  const extensions = [
28078
- scopeRegistry.StarterKit.configure({
28078
+ composerSendOrStop.StarterKit.configure({
28079
28079
  codeBlock: {
28080
28080
  HTMLAttributes: {
28081
28081
  class: "rounded-md bg-muted p-3 font-mono text-sm"
@@ -28114,7 +28114,7 @@ const TiptapText = ({ text: text2 }) => {
28114
28114
  const handleLinkClick = useAthenaLinkClickHandler();
28115
28115
  const handleLinkClickRef = React.useRef(handleLinkClick);
28116
28116
  handleLinkClickRef.current = handleLinkClick;
28117
- const editor = scopeRegistry.useEditor({
28117
+ const editor = composerSendOrStop.useEditor({
28118
28118
  immediatelyRender: true,
28119
28119
  extensions,
28120
28120
  content: text2,
@@ -28157,7 +28157,7 @@ const TiptapText = ({ text: text2 }) => {
28157
28157
  editor.commands.setContent(text2);
28158
28158
  }
28159
28159
  }, [text2, editor]);
28160
- return /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.EditorContent, { editor });
28160
+ return /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.EditorContent, { editor });
28161
28161
  };
28162
28162
  const EditorCtx = React.createContext(null);
28163
28163
  function ComposerEditorProvider({ children }) {
@@ -28193,7 +28193,7 @@ const isMentionPopupActive = (editor) => {
28193
28193
  (_b2 = (_a3 = editor.storage) == null ? void 0 : _a3.mentionSuggestions) == null ? void 0 : _b2.mentionSuggestionsActive
28194
28194
  );
28195
28195
  };
28196
- const ComposerKeybinds = scopeRegistry.Extension.create({
28196
+ const ComposerKeybinds = composerSendOrStop.Extension.create({
28197
28197
  name: "composerKeybinds",
28198
28198
  priority: 1e3,
28199
28199
  addOptions() {
@@ -28273,8 +28273,8 @@ const MentionSuggestionList = React.forwardRef(({ store: store2, query, command,
28273
28273
  const scrollContainerRef = React.useRef(null);
28274
28274
  const hasGlobalSearch = store2.state.registry.entries[GLOBAL_SEARCH_SCOPE$1] != null;
28275
28275
  const effectiveScope = currentScope === "root" && query.trim() && hasGlobalSearch ? GLOBAL_SEARCH_SCOPE$1 : currentScope;
28276
- const { items, isFetching } = scopeRegistry.useStore(store2, (state) => ({
28277
- items: scopeRegistry.getFilteredItems(state.cache, effectiveScope, query),
28276
+ const { items, isFetching } = composerSendOrStop.useStore(store2, (state) => ({
28277
+ items: composerSendOrStop.getFilteredItems(state.cache, effectiveScope, query),
28278
28278
  isFetching: false
28279
28279
  }));
28280
28280
  const isNestedScope = currentScope !== "root";
@@ -28366,7 +28366,7 @@ const MentionSuggestionList = React.forwardRef(({ store: store2, query, command,
28366
28366
  "button",
28367
28367
  {
28368
28368
  type: "button",
28369
- className: scopeRegistry.cn(
28369
+ className: composerSendOrStop.cn(
28370
28370
  "mention-item flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors",
28371
28371
  index === selectedIndex ? "is-selected bg-accent text-accent-foreground" : "hover:bg-accent/50"
28372
28372
  ),
@@ -28379,7 +28379,7 @@ const MentionSuggestionList = React.forwardRef(({ store: store2, query, command,
28379
28379
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: item.name }),
28380
28380
  item.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-muted-foreground", children: item.description })
28381
28381
  ] }),
28382
- item.navigatesToScope && /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronRight, { className: "size-3.5 shrink-0 text-muted-foreground" })
28382
+ item.navigatesToScope && /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronRight, { className: "size-3.5 shrink-0 text-muted-foreground" })
28383
28383
  ]
28384
28384
  },
28385
28385
  item.id
@@ -28397,11 +28397,11 @@ const MentionSuggestionPopup = React.forwardRef(({ store: store2, query, command
28397
28397
  const virtualRef = React.useRef({
28398
28398
  getBoundingClientRect: () => clientRect ? clientRect() : new DOMRect()
28399
28399
  });
28400
- const { refs, floatingStyles } = scopeRegistry.useFloating$1({
28400
+ const { refs, floatingStyles } = composerSendOrStop.useFloating$1({
28401
28401
  placement: "bottom-start",
28402
28402
  middleware: [
28403
- scopeRegistry.offset(10),
28404
- scopeRegistry.flip({
28403
+ composerSendOrStop.offset(10),
28404
+ composerSendOrStop.flip({
28405
28405
  fallbackPlacements: [
28406
28406
  "bottom-start",
28407
28407
  "bottom",
@@ -28411,9 +28411,9 @@ const MentionSuggestionPopup = React.forwardRef(({ store: store2, query, command
28411
28411
  ],
28412
28412
  padding: 8
28413
28413
  }),
28414
- scopeRegistry.shift({ boundary: "clippingAncestors", padding: 8 })
28414
+ composerSendOrStop.shift({ boundary: "clippingAncestors", padding: 8 })
28415
28415
  ],
28416
- whileElementsMounted: scopeRegistry.autoUpdate
28416
+ whileElementsMounted: composerSendOrStop.autoUpdate
28417
28417
  });
28418
28418
  React.useEffect(() => {
28419
28419
  if (clientRect) {
@@ -28428,7 +28428,7 @@ const MentionSuggestionPopup = React.forwardRef(({ store: store2, query, command
28428
28428
  }
28429
28429
  }));
28430
28430
  if (isHidden) return null;
28431
- return /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.FloatingPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(
28431
+ return /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.FloatingPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(
28432
28432
  "div",
28433
28433
  {
28434
28434
  ref: refs.setFloating,
@@ -28449,7 +28449,7 @@ const MentionSuggestionPopup = React.forwardRef(({ store: store2, query, command
28449
28449
  ) });
28450
28450
  });
28451
28451
  MentionSuggestionPopup.displayName = "MentionSuggestionPopup";
28452
- const MentionSuggestionsExtension = scopeRegistry.Extension.create({
28452
+ const MentionSuggestionsExtension = composerSendOrStop.Extension.create({
28453
28453
  name: "mentionSuggestions",
28454
28454
  addOptions() {
28455
28455
  return {
@@ -28468,7 +28468,7 @@ const MentionSuggestionsExtension = scopeRegistry.Extension.create({
28468
28468
  throw new Error("[MentionSuggestionsExtension] A `store` option is required.");
28469
28469
  }
28470
28470
  return [
28471
- scopeRegistry.Suggestion({
28471
+ composerSendOrStop.Suggestion({
28472
28472
  editor: this.editor,
28473
28473
  char: "@",
28474
28474
  allowSpaces: true,
@@ -28484,7 +28484,7 @@ const MentionSuggestionsExtension = scopeRegistry.Extension.create({
28484
28484
  "'",
28485
28485
  " "
28486
28486
  ],
28487
- pluginKey: new scopeRegistry.PluginKey("mentionSuggestionsPlugin"),
28487
+ pluginKey: new composerSendOrStop.PluginKey("mentionSuggestionsPlugin"),
28488
28488
  items: ({ query }) => {
28489
28489
  this.editor.storage.mentionSuggestions.query = query;
28490
28490
  return [];
@@ -28539,7 +28539,7 @@ const MentionSuggestionsExtension = scopeRegistry.Extension.create({
28539
28539
  if (component) {
28540
28540
  component.destroy();
28541
28541
  }
28542
- component = new scopeRegistry.ReactRenderer(MentionSuggestionPopup, {
28542
+ component = new composerSendOrStop.ReactRenderer(MentionSuggestionPopup, {
28543
28543
  props: {
28544
28544
  store: this.options.store,
28545
28545
  query: props.query,
@@ -28625,17 +28625,17 @@ function createToolMenuItem(tool, scope) {
28625
28625
  }
28626
28626
  function registerStaticSource(registry2, scope) {
28627
28627
  if (!registry2.entries[scope]) {
28628
- scopeRegistry.registerSource(registry2, scope, STATIC_SOURCE);
28628
+ composerSendOrStop.registerSource(registry2, scope, STATIC_SOURCE);
28629
28629
  }
28630
28630
  }
28631
28631
  function addToolkitCategoryItems(cache, tools) {
28632
28632
  const toolkitItems = tools.filter((tool) => tool.type === "toolkit").map((tool) => createToolMenuItem(tool, "toolkits"));
28633
- scopeRegistry.addItems(cache, toolkitItems, "toolkits");
28634
- scopeRegistry.addItems(cache, toolkitItems, GLOBAL_SEARCH_SCOPE);
28633
+ composerSendOrStop.addItems(cache, toolkitItems, "toolkits");
28634
+ composerSendOrStop.addItems(cache, toolkitItems, GLOBAL_SEARCH_SCOPE);
28635
28635
  }
28636
28636
  function addDirectMentionItems(cache, tools) {
28637
28637
  const items = tools.map((tool) => createToolMenuItem(tool, "root"));
28638
- scopeRegistry.addItems(cache, items, "root");
28638
+ composerSendOrStop.addItems(cache, items, "root");
28639
28639
  }
28640
28640
  function populateMentionCache({
28641
28641
  cache,
@@ -28646,7 +28646,7 @@ function populateMentionCache({
28646
28646
  addDirectMentionItems(cache, tools);
28647
28647
  return;
28648
28648
  }
28649
- scopeRegistry.addItems(cache, createRootCategoryItems(rootCategories), "root");
28649
+ composerSendOrStop.addItems(cache, createRootCategoryItems(rootCategories), "root");
28650
28650
  addToolkitCategoryItems(cache, tools);
28651
28651
  }
28652
28652
  function useMentionSuggestions(tools, options = {}) {
@@ -28655,8 +28655,8 @@ function useMentionSuggestions(tools, options = {}) {
28655
28655
  const rootCategories = options.rootCategories;
28656
28656
  const storeRef = React.useRef(null);
28657
28657
  if (!storeRef.current) {
28658
- const registry2 = scopeRegistry.createScopeRegistry();
28659
- const cache = scopeRegistry.createItemCache();
28658
+ const registry2 = composerSendOrStop.createScopeRegistry();
28659
+ const cache = composerSendOrStop.createItemCache();
28660
28660
  registerStaticSource(registry2, "root");
28661
28661
  if (rootCategories) {
28662
28662
  registerStaticSource(registry2, "toolkits");
@@ -28664,12 +28664,12 @@ function useMentionSuggestions(tools, options = {}) {
28664
28664
  registerStaticSource(registry2, GLOBAL_SEARCH_SCOPE);
28665
28665
  }
28666
28666
  populateMentionCache({ cache, tools, rootCategories });
28667
- storeRef.current = new scopeRegistry.Store({ registry: registry2, cache });
28667
+ storeRef.current = new composerSendOrStop.Store({ registry: registry2, cache });
28668
28668
  }
28669
28669
  const store2 = storeRef.current;
28670
28670
  React.useEffect(() => {
28671
28671
  store2.setState((prev) => {
28672
- const newCache = scopeRegistry.createItemCache();
28672
+ const newCache = composerSendOrStop.createItemCache();
28673
28673
  if (rootCategories) {
28674
28674
  registerStaticSource(prev.registry, "toolkits");
28675
28675
  registerStaticSource(prev.registry, "team");
@@ -28707,10 +28707,10 @@ function useAttachments() {
28707
28707
  }
28708
28708
  function buildAttachmentMarkdownWithAppUrl({
28709
28709
  attachments,
28710
- appUrl = scopeRegistry.DEFAULT_APP_URL
28710
+ appUrl = composerSendOrStop.DEFAULT_APP_URL
28711
28711
  }) {
28712
28712
  if (attachments.length === 0) return "";
28713
- return attachments.map((attachment) => `[@${attachment.title}](${scopeRegistry.createAthenaSpacesUrl({ appUrl, assetIds: attachment.id })})`).join("\n");
28713
+ return attachments.map((attachment) => `[@${attachment.title}](${composerSendOrStop.createAthenaSpacesUrl({ appUrl, assetIds: attachment.id })})`).join("\n");
28714
28714
  }
28715
28715
  const QuoteCtx = React.createContext(null);
28716
28716
  function QuoteProvider({ children }) {
@@ -29005,6 +29005,7 @@ const TiptapComposer = ({ tools = [], rootCategories }) => {
29005
29005
  clearQuote();
29006
29006
  }
29007
29007
  } else {
29008
+ if (!markdown.trim()) return;
29008
29009
  aui.composer.setText(markdown);
29009
29010
  aui.composer.send({ steer: false });
29010
29011
  }
@@ -29043,13 +29044,13 @@ const TiptapComposer = ({ tools = [], rootCategories }) => {
29043
29044
  );
29044
29045
  const handlePasteRef = React.useRef(handlePaste2);
29045
29046
  handlePasteRef.current = handlePaste2;
29046
- const editor = scopeRegistry.useEditor({
29047
+ const editor = composerSendOrStop.useEditor({
29047
29048
  immediatelyRender: true,
29048
29049
  onUpdate: ({ editor: e }) => {
29049
29050
  setEditorEmpty(e.isEmpty);
29050
29051
  },
29051
29052
  extensions: [
29052
- scopeRegistry.StarterKit.configure({
29053
+ composerSendOrStop.StarterKit.configure({
29053
29054
  codeBlock: {
29054
29055
  HTMLAttributes: {
29055
29056
  class: "rounded-md bg-muted p-3 font-mono text-sm"
@@ -29068,7 +29069,7 @@ const TiptapComposer = ({ tools = [], rootCategories }) => {
29068
29069
  transformPastedText: true,
29069
29070
  transformCopiedText: false
29070
29071
  }),
29071
- scopeRegistry.Placeholder.configure({
29072
+ composerSendOrStop.Placeholder.configure({
29072
29073
  placeholder: "Send a message..."
29073
29074
  }),
29074
29075
  MentionExtension,
@@ -29098,10 +29099,11 @@ const TiptapComposer = ({ tools = [], rootCategories }) => {
29098
29099
  isEmpty: () => editor.isEmpty,
29099
29100
  insertText: (text2) => {
29100
29101
  editor.chain().focus().insertContentAt(editor.state.doc.content.size, text2).run();
29101
- }
29102
+ },
29103
+ submit: () => handleSubmitRef.current()
29102
29104
  } : null;
29103
29105
  }, [editor, composerEditorRef]);
29104
- return /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.EditorContent, { editor });
29106
+ return /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.EditorContent, { editor });
29105
29107
  };
29106
29108
  function r(e) {
29107
29109
  var t, f, n = "";
@@ -29199,7 +29201,7 @@ function Button({
29199
29201
  "data-slot": "button",
29200
29202
  "data-variant": variant,
29201
29203
  "data-size": size,
29202
- className: scopeRegistry.cn(buttonVariants({ variant, size, className })),
29204
+ className: composerSendOrStop.cn(buttonVariants({ variant, size, className })),
29203
29205
  ...props
29204
29206
  }
29205
29207
  );
@@ -29237,7 +29239,7 @@ class AthenaChatErrorBoundary extends React.Component {
29237
29239
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Your conversation is safe on the server — reload the chat to continue." })
29238
29240
  ] }),
29239
29241
  /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", size: "sm", onClick: this.handleRetry, children: [
29240
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.RefreshCw, { className: "mr-1.5 size-3.5" }),
29242
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.RefreshCw, { className: "mr-1.5 size-3.5" }),
29241
29243
  "Reload chat"
29242
29244
  ] })
29243
29245
  ] });
@@ -29279,7 +29281,7 @@ const StatewireApprovalCardInner = ({
29279
29281
  return /* @__PURE__ */ jsxRuntime.jsxs(
29280
29282
  "div",
29281
29283
  {
29282
- className: scopeRegistry.cn(
29284
+ className: composerSendOrStop.cn(
29283
29285
  "aui-approval-abandoned flex w-full items-center justify-between gap-3 rounded-xl border border-amber-300 bg-amber-50 px-3 py-2 text-amber-800 text-xs",
29284
29286
  classNames == null ? void 0 : classNames.abandoned
29285
29287
  ),
@@ -29308,7 +29310,7 @@ const StatewireApprovalCardInner = ({
29308
29310
  "section",
29309
29311
  {
29310
29312
  "aria-label": hitl ? "Approval required" : "Input required",
29311
- className: scopeRegistry.cn(
29313
+ className: composerSendOrStop.cn(
29312
29314
  "aui-approval-card w-full rounded-2xl border border-amber-300 bg-amber-50 px-4 py-3 text-amber-900",
29313
29315
  classNames == null ? void 0 : classNames.root
29314
29316
  ),
@@ -29336,7 +29338,7 @@ const StatewireApprovalCardInner = ({
29336
29338
  onClick: () => resume(hitlResumeApprove()),
29337
29339
  className: "bg-green-600 text-white hover:bg-green-700",
29338
29340
  children: [
29339
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Check, {}),
29341
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Check, {}),
29340
29342
  "Approve"
29341
29343
  ]
29342
29344
  }
@@ -29389,7 +29391,7 @@ const StatewireQueuedMessagesInner = () => {
29389
29391
  "aria-controls": "athena-statewire-queued-messages",
29390
29392
  className: "flex items-center gap-1 rounded px-1 py-1 font-medium text-muted-foreground text-xs hover:text-foreground",
29391
29393
  children: [
29392
- expanded ? /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronRight, { className: "size-3.5" }),
29394
+ expanded ? /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronRight, { className: "size-3.5" }),
29393
29395
  rows.length,
29394
29396
  " queued"
29395
29397
  ]
@@ -29447,7 +29449,7 @@ const StatewireQueuedMessagesInner = () => {
29447
29449
  type: "button",
29448
29450
  "aria-label": "Remove queued message",
29449
29451
  onClick: () => aui.composer.queueItem({ id: item.id }).remove(),
29450
- className: scopeRegistry.cn(
29452
+ className: composerSendOrStop.cn(
29451
29453
  "rounded p-1 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",
29452
29454
  !showSendNow && "opacity-0 focus-visible:opacity-100 group-hover:opacity-100"
29453
29455
  ),
@@ -29474,7 +29476,7 @@ const StatewireErrorBanner = () => {
29474
29476
  "div",
29475
29477
  {
29476
29478
  role: "alert",
29477
- className: scopeRegistry.cn(
29479
+ className: composerSendOrStop.cn(
29478
29480
  "aui-statewire-error-banner flex w-full items-start gap-2 rounded-xl border px-3 py-2.5",
29479
29481
  error2.kind === "paywall" ? "border-violet-200 bg-violet-50 text-violet-900" : "border-red-200 bg-red-50 text-red-900"
29480
29482
  ),
@@ -29512,7 +29514,7 @@ const StatewireConnectionBanner = () => {
29512
29514
  "span",
29513
29515
  {
29514
29516
  "aria-hidden": "true",
29515
- className: scopeRegistry.cn(
29517
+ className: composerSendOrStop.cn(
29516
29518
  "size-2 shrink-0 rounded-full",
29517
29519
  status === "gone" ? "bg-red-500" : "animate-pulse bg-amber-500"
29518
29520
  )
@@ -29526,7 +29528,7 @@ const StatewireConnectionBanner = () => {
29526
29528
  "aria-label": "Reconnect chat",
29527
29529
  onClick: lifecycle.reconnect,
29528
29530
  className: "shrink-0 rounded-md border border-amber-300 bg-white px-2 py-1 font-medium transition-colors hover:bg-amber-100",
29529
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.RefreshCw, { className: "size-3.5" })
29531
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.RefreshCw, { className: "size-3.5" })
29530
29532
  }
29531
29533
  ) : null
29532
29534
  ]
@@ -29597,27 +29599,27 @@ function truncateLine(text2, max = 70) {
29597
29599
  }
29598
29600
  const TOOL_META = {
29599
29601
  // Search & Browse
29600
- search: { displayName: "Searching the web", icon: scopeRegistry.Search, describer: (a) => a.query ? `"${a.query}"` : "" },
29601
- browse: { displayName: "Reading webpage", icon: scopeRegistry.Globe, describer: (a) => a.url ?? "" },
29602
- open_browser: { displayName: "Opening browser", icon: scopeRegistry.Globe, describer: (a) => a.url ?? "" },
29603
- search_email: { displayName: "Searching emails", icon: scopeRegistry.Mail, describer: (a) => a.query ? `"${a.query}"` : "" },
29604
- unified_email_search: { displayName: "Searching emails", icon: scopeRegistry.Mail, describer: (a) => a.query ? `"${a.query}"` : "" },
29605
- search_contacts: { displayName: "Looking up contacts", icon: scopeRegistry.Search },
29606
- search_calendar_events: { displayName: "Checking calendar", icon: scopeRegistry.Search },
29607
- search_assets: { displayName: "Searching files", icon: scopeRegistry.Search },
29608
- list_contents: { displayName: "Browsing files", icon: scopeRegistry.Search },
29602
+ search: { displayName: "Searching the web", icon: composerSendOrStop.Search, describer: (a) => a.query ? `"${a.query}"` : "" },
29603
+ browse: { displayName: "Reading webpage", icon: composerSendOrStop.Globe, describer: (a) => a.url ?? "" },
29604
+ open_browser: { displayName: "Opening browser", icon: composerSendOrStop.Globe, describer: (a) => a.url ?? "" },
29605
+ search_email: { displayName: "Searching emails", icon: composerSendOrStop.Mail, describer: (a) => a.query ? `"${a.query}"` : "" },
29606
+ unified_email_search: { displayName: "Searching emails", icon: composerSendOrStop.Mail, describer: (a) => a.query ? `"${a.query}"` : "" },
29607
+ search_contacts: { displayName: "Looking up contacts", icon: composerSendOrStop.Search },
29608
+ search_calendar_events: { displayName: "Checking calendar", icon: composerSendOrStop.Search },
29609
+ search_assets: { displayName: "Searching files", icon: composerSendOrStop.Search },
29610
+ list_contents: { displayName: "Browsing files", icon: composerSendOrStop.Search },
29609
29611
  // Email
29610
- create_email_draft: { displayName: "Drafting email", icon: scopeRegistry.Mail },
29611
- unified_email_create_draft: { displayName: "Drafting email", icon: scopeRegistry.Mail },
29612
- edit_email_draft: { displayName: "Editing email draft", icon: scopeRegistry.Mail },
29613
- unified_email_edit_draft: { displayName: "Editing email draft", icon: scopeRegistry.Mail },
29614
- unified_email_fetch_attachments: { displayName: "Fetching email attachments", icon: scopeRegistry.Mail },
29615
- unified_email_forward: { displayName: "Forwarding email", icon: scopeRegistry.Mail },
29612
+ create_email_draft: { displayName: "Drafting email", icon: composerSendOrStop.Mail },
29613
+ unified_email_create_draft: { displayName: "Drafting email", icon: composerSendOrStop.Mail },
29614
+ edit_email_draft: { displayName: "Editing email draft", icon: composerSendOrStop.Mail },
29615
+ unified_email_edit_draft: { displayName: "Editing email draft", icon: composerSendOrStop.Mail },
29616
+ unified_email_fetch_attachments: { displayName: "Fetching email attachments", icon: composerSendOrStop.Mail },
29617
+ unified_email_forward: { displayName: "Forwarding email", icon: composerSendOrStop.Mail },
29616
29618
  // Documents
29617
- read_full_asset: { displayName: "Asset content review", icon: scopeRegistry.BookOpen },
29618
- read_asset: { displayName: "Asset content review", icon: scopeRegistry.BookOpen },
29619
- create_new_document: { displayName: "Creating document", icon: scopeRegistry.FileText },
29620
- create_document_from_markdown: { displayName: "Creating document", icon: scopeRegistry.FileText },
29619
+ read_full_asset: { displayName: "Asset content review", icon: composerSendOrStop.BookOpen },
29620
+ read_asset: { displayName: "Asset content review", icon: composerSendOrStop.BookOpen },
29621
+ create_new_document: { displayName: "Creating document", icon: composerSendOrStop.FileText },
29622
+ create_document_from_markdown: { displayName: "Creating document", icon: composerSendOrStop.FileText },
29621
29623
  append_markdown_to_athena_document: { displayName: "Updating document", icon: PenLine },
29622
29624
  replace_markdown_in_athena_document: { displayName: "Updating document", icon: PenLine },
29623
29625
  // Spreadsheets
@@ -29628,25 +29630,24 @@ const TOOL_META = {
29628
29630
  return explanation ? `${range}: ${truncateLine(explanation)}` : range;
29629
29631
  } },
29630
29632
  // Presentations
29631
- create_powerpoint_deck: { displayName: "Building presentation", icon: scopeRegistry.Monitor },
29632
- execute_presentation_code: { displayName: "Generating slides", icon: scopeRegistry.Monitor },
29633
- execute_word_document_code: { displayName: "Editing Word document", icon: scopeRegistry.FileText },
29633
+ create_powerpoint_deck: { displayName: "Building presentation", icon: composerSendOrStop.Monitor },
29634
+ execute_presentation_code: { displayName: "Generating slides", icon: composerSendOrStop.Monitor },
29635
+ execute_word_document_code: { displayName: "Editing Word document", icon: composerSendOrStop.FileText },
29634
29636
  execute_spreadsheet_code: { displayName: "Editing spreadsheet", icon: ChartColumn },
29635
29637
  execute_spreadsheet_commands: { displayName: "Editing spreadsheet", icon: ChartColumn },
29636
- unified_email_list_accounts: { displayName: "Checking email accounts", icon: scopeRegistry.Mail },
29638
+ unified_email_list_accounts: { displayName: "Checking email accounts", icon: composerSendOrStop.Mail },
29637
29639
  // Code & Data
29638
- run_python_code: { displayName: "Running analysis", icon: scopeRegistry.Code },
29639
- run_sql_query_tool: { displayName: "Running SQL query", icon: scopeRegistry.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29640
- run_database_sql: { displayName: "Running SQL query", icon: scopeRegistry.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29641
- run_sql: { displayName: "Running SQL query", icon: scopeRegistry.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29642
- create_database: { displayName: "Setting up database", icon: scopeRegistry.Database },
29643
- describe_database: { displayName: "Inspecting database", icon: scopeRegistry.Database },
29644
- list_database_tables: { displayName: "Listing database tables", icon: scopeRegistry.Database },
29645
- get_database_table_schema: { displayName: "Reading table schema", icon: scopeRegistry.Database, describer: (a) => a.table_name ?? "" },
29646
- computer_asset_exec: { displayName: "Running command", icon: scopeRegistry.Monitor },
29640
+ run_python_code: { displayName: "Running analysis", icon: composerSendOrStop.Code },
29641
+ run_sql_query_tool: { displayName: "Running SQL query", icon: composerSendOrStop.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29642
+ run_database_sql: { displayName: "Running SQL query", icon: composerSendOrStop.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29643
+ run_sql: { displayName: "Running SQL query", icon: composerSendOrStop.Database, describer: (a) => a.sql_query ?? a.query ?? a.sql ? `"${truncateLine(a.sql_query ?? a.query ?? a.sql)}"` : "" },
29644
+ create_database: { displayName: "Setting up database", icon: composerSendOrStop.Database },
29645
+ describe_database: { displayName: "Inspecting database", icon: composerSendOrStop.Database },
29646
+ list_database_tables: { displayName: "Listing database tables", icon: composerSendOrStop.Database },
29647
+ get_database_table_schema: { displayName: "Reading table schema", icon: composerSendOrStop.Database, describer: (a) => a.table_name ?? "" },
29647
29648
  // Notebooks
29648
- create_new_notebook: { displayName: "Creating notebook", icon: scopeRegistry.BookOpen },
29649
- execute_cell: { displayName: "Running notebook cell", icon: scopeRegistry.Code },
29649
+ create_new_notebook: { displayName: "Creating notebook", icon: composerSendOrStop.BookOpen },
29650
+ execute_cell: { displayName: "Running notebook cell", icon: composerSendOrStop.Code },
29650
29651
  // Workflows
29651
29652
  create_new_aop: { displayName: "Creating workflow", icon: Brain },
29652
29653
  execute_aop: { displayName: "Running workflow", icon: Brain },
@@ -29658,7 +29659,7 @@ const TOOL_META = {
29658
29659
  function getToolMeta(toolName) {
29659
29660
  if (TOOL_META[toolName]) return TOOL_META[toolName];
29660
29661
  const displayName = toolName.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
29661
- return { displayName, icon: scopeRegistry.Wrench };
29662
+ return { displayName, icon: composerSendOrStop.Wrench };
29662
29663
  }
29663
29664
  function tryParseJson$1(text2) {
29664
29665
  try {
@@ -29786,7 +29787,7 @@ function ToolFallbackRoot({
29786
29787
  "data-slot": "tool-fallback-root",
29787
29788
  open: isOpen,
29788
29789
  onOpenChange: handleOpenChange,
29789
- className: scopeRegistry.cn(
29790
+ className: composerSendOrStop.cn(
29790
29791
  "aui-tool-fallback-root group/tool-fallback-root my-3 w-full rounded-xl border border-border/60 bg-background py-2.5 shadow-sm",
29791
29792
  className
29792
29793
  ),
@@ -29828,7 +29829,7 @@ function ToolFallbackTrigger({
29828
29829
  CollapsibleTrigger,
29829
29830
  {
29830
29831
  "data-slot": "tool-fallback-trigger",
29831
- className: scopeRegistry.cn(
29832
+ className: composerSendOrStop.cn(
29832
29833
  "aui-tool-fallback-trigger group/trigger flex w-full items-center gap-2.5 px-3 text-sm transition-colors",
29833
29834
  className
29834
29835
  ),
@@ -29837,7 +29838,7 @@ function ToolFallbackTrigger({
29837
29838
  /* @__PURE__ */ jsxRuntime.jsx(
29838
29839
  "div",
29839
29840
  {
29840
- className: scopeRegistry.cn(
29841
+ className: composerSendOrStop.cn(
29841
29842
  "flex size-7 shrink-0 items-center justify-center rounded-lg",
29842
29843
  isRunning && "bg-blue-50 text-blue-600",
29843
29844
  isComplete && success && "bg-emerald-50 text-emerald-600",
@@ -29852,7 +29853,7 @@ function ToolFallbackTrigger({
29852
29853
  /* @__PURE__ */ jsxRuntime.jsxs(
29853
29854
  "span",
29854
29855
  {
29855
- className: scopeRegistry.cn(
29856
+ className: composerSendOrStop.cn(
29856
29857
  "relative inline-block text-[13px] font-medium leading-tight",
29857
29858
  isCancelled && "text-muted-foreground line-through"
29858
29859
  ),
@@ -29879,9 +29880,9 @@ function ToolFallbackTrigger({
29879
29880
  ] }),
29880
29881
  isComplete && success && /* @__PURE__ */ jsxRuntime.jsx(CircleCheck, { className: "size-3.5 shrink-0 text-emerald-500" }),
29881
29882
  /* @__PURE__ */ jsxRuntime.jsx(
29882
- scopeRegistry.ChevronDown,
29883
+ composerSendOrStop.ChevronDown,
29883
29884
  {
29884
- className: scopeRegistry.cn(
29885
+ className: composerSendOrStop.cn(
29885
29886
  "size-4 shrink-0 text-muted-foreground",
29886
29887
  "transition-transform duration-(--animation-duration) ease-out",
29887
29888
  "group-data-[state=closed]/trigger:-rotate-90",
@@ -29902,7 +29903,7 @@ function ToolFallbackContent({
29902
29903
  CollapsibleContent,
29903
29904
  {
29904
29905
  "data-slot": "tool-fallback-content",
29905
- className: scopeRegistry.cn(
29906
+ className: composerSendOrStop.cn(
29906
29907
  "aui-tool-fallback-content relative overflow-hidden text-sm outline-none",
29907
29908
  "group/collapsible-content ease-out",
29908
29909
  "data-[state=closed]:animate-collapsible-up",
@@ -29926,10 +29927,10 @@ function ToolFallbackArgs({
29926
29927
  if (!argsText) return null;
29927
29928
  const parsed = tryParseJson$1(argsText);
29928
29929
  if (!parsed) {
29929
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: scopeRegistry.cn("px-3", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap text-xs text-muted-foreground", children: argsText }) });
29930
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: composerSendOrStop.cn("px-3", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap text-xs text-muted-foreground", children: argsText }) });
29930
29931
  }
29931
29932
  const entries = Object.entries(parsed);
29932
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: scopeRegistry.cn("flex flex-col gap-1.5 px-3", className), ...props, children: entries.map(([key, value]) => {
29933
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: composerSendOrStop.cn("flex flex-col gap-1.5 px-3", className), ...props, children: entries.map(([key, value]) => {
29933
29934
  const strValue = typeof value === "string" ? value : JSON.stringify(value, null, 2);
29934
29935
  const isLong = typeof value === "string" && value.length > 80;
29935
29936
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -29958,7 +29959,7 @@ function ToolFallbackResult({
29958
29959
  return /* @__PURE__ */ jsxRuntime.jsxs(
29959
29960
  "div",
29960
29961
  {
29961
- className: scopeRegistry.cn("border-t border-dashed border-border/50 px-3 pt-2", className),
29962
+ className: composerSendOrStop.cn("border-t border-dashed border-border/50 px-3 pt-2", className),
29962
29963
  ...props,
29963
29964
  children: [
29964
29965
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground", children: "Result" }),
@@ -29978,7 +29979,7 @@ function ToolFallbackError({
29978
29979
  if (!errorText) return null;
29979
29980
  const isCancelled = status.reason === "cancelled";
29980
29981
  const headerText = isCancelled ? "Cancelled" : "Error";
29981
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: scopeRegistry.cn("px-3", className), ...props, children: [
29982
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: composerSendOrStop.cn("px-3", className), ...props, children: [
29982
29983
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-destructive", children: headerText }),
29983
29984
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-destructive/80", children: errorText })
29984
29985
  ] });
@@ -30040,7 +30041,7 @@ function AssetToolCard({
30040
30041
  const title = extractTitle(argsText, result);
30041
30042
  const assetType = toolMetaToAssetType(toolName);
30042
30043
  const success = isComplete && isResultSuccess(result);
30043
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: scopeRegistry.cn(
30044
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: composerSendOrStop.cn(
30044
30045
  "aui-tool-fallback-root my-3 w-full rounded-xl border border-border/60 bg-background py-2.5 shadow-sm",
30045
30046
  isCancelled && "border-muted-foreground/30 bg-muted/30"
30046
30047
  ), children: [
@@ -30048,7 +30049,7 @@ function AssetToolCard({
30048
30049
  /* @__PURE__ */ jsxRuntime.jsx(
30049
30050
  "div",
30050
30051
  {
30051
- className: scopeRegistry.cn(
30052
+ className: composerSendOrStop.cn(
30052
30053
  "flex size-7 shrink-0 items-center justify-center rounded-lg",
30053
30054
  isRunning && "bg-blue-50 text-blue-600",
30054
30055
  isComplete && success && "bg-emerald-50 text-emerald-600",
@@ -30082,15 +30083,15 @@ function AssetToolCard({
30082
30083
  {
30083
30084
  type: "button",
30084
30085
  onClick: () => setDetailsOpen((o) => !o),
30085
- className: scopeRegistry.cn(
30086
+ className: composerSendOrStop.cn(
30086
30087
  "flex size-5 shrink-0 items-center justify-center rounded transition-all",
30087
30088
  detailsOpen ? "bg-primary/5 text-primary" : "text-muted-foreground/40 hover:bg-muted/50 hover:text-muted-foreground"
30088
30089
  ),
30089
30090
  title: "Show details",
30090
30091
  children: /* @__PURE__ */ jsxRuntime.jsx(
30091
- scopeRegistry.ChevronDown,
30092
+ composerSendOrStop.ChevronDown,
30092
30093
  {
30093
- className: scopeRegistry.cn(
30094
+ className: composerSendOrStop.cn(
30094
30095
  "size-3 transition-transform duration-200",
30095
30096
  detailsOpen && "rotate-180"
30096
30097
  )
@@ -30153,7 +30154,7 @@ const ToolFallbackImpl = ({
30153
30154
  return /* @__PURE__ */ jsxRuntime.jsxs(
30154
30155
  ToolFallbackRoot,
30155
30156
  {
30156
- className: scopeRegistry.cn(isCancelled && "border-muted-foreground/30 bg-muted/30"),
30157
+ className: composerSendOrStop.cn(isCancelled && "border-muted-foreground/30 bg-muted/30"),
30157
30158
  children: [
30158
30159
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
30159
30160
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(ToolFallbackTrigger, { toolName, argsText, result, status }) }),
@@ -30165,7 +30166,7 @@ const ToolFallbackImpl = ({
30165
30166
  ToolFallbackArgs,
30166
30167
  {
30167
30168
  argsText,
30168
- className: scopeRegistry.cn(isCancelled && "opacity-60")
30169
+ className: composerSendOrStop.cn(isCancelled && "opacity-60")
30169
30170
  }
30170
30171
  ),
30171
30172
  !isCancelled && /* @__PURE__ */ jsxRuntime.jsx(ToolFallbackResult, { result }),
@@ -30187,7 +30188,7 @@ ToolFallback.Args = ToolFallbackArgs;
30187
30188
  ToolFallback.Result = ToolFallbackResult;
30188
30189
  ToolFallback.Error = ToolFallbackError;
30189
30190
  const markdownPreviewExtensions = [
30190
- scopeRegistry.StarterKit.configure({
30191
+ composerSendOrStop.StarterKit.configure({
30191
30192
  codeBlock: {
30192
30193
  HTMLAttributes: {
30193
30194
  class: "rounded bg-muted p-2 font-mono text-[11px]"
@@ -30212,7 +30213,7 @@ const markdownPreviewExtensions = [
30212
30213
  })
30213
30214
  ];
30214
30215
  function MarkdownPreview({ content }) {
30215
- const editor = scopeRegistry.useEditor({
30216
+ const editor = composerSendOrStop.useEditor({
30216
30217
  immediatelyRender: true,
30217
30218
  extensions: markdownPreviewExtensions,
30218
30219
  content,
@@ -30223,7 +30224,7 @@ function MarkdownPreview({ content }) {
30223
30224
  }
30224
30225
  }
30225
30226
  });
30226
- return /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.EditorContent, { editor });
30227
+ return /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.EditorContent, { editor });
30227
30228
  }
30228
30229
  const AppendDocumentToolUIImpl = ({
30229
30230
  args,
@@ -30257,7 +30258,7 @@ const AppendDocumentToolUIImpl = ({
30257
30258
  /* @__PURE__ */ jsxRuntime.jsx(
30258
30259
  "div",
30259
30260
  {
30260
- className: scopeRegistry.cn(
30261
+ className: composerSendOrStop.cn(
30261
30262
  "flex size-9 shrink-0 items-center justify-center rounded-lg",
30262
30263
  isRunning && "bg-blue-50 text-blue-600",
30263
30264
  isComplete && isSuccess && "bg-emerald-50 text-emerald-600",
@@ -30274,7 +30275,7 @@ const AppendDocumentToolUIImpl = ({
30274
30275
  isComplete && isSuccess && /* @__PURE__ */ jsxRuntime.jsx(CircleCheck, { className: "size-3.5 text-emerald-500" })
30275
30276
  ] }),
30276
30277
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
30277
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.FileText, { className: "size-4" }),
30278
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.FileText, { className: "size-4" }),
30278
30279
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] text-muted-foreground", children: asset.name })
30279
30280
  ] })
30280
30281
  ] }),
@@ -30298,9 +30299,9 @@ const AppendDocumentToolUIImpl = ({
30298
30299
  className: "flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50",
30299
30300
  children: [
30300
30301
  /* @__PURE__ */ jsxRuntime.jsx(
30301
- scopeRegistry.ChevronDown,
30302
+ composerSendOrStop.ChevronDown,
30302
30303
  {
30303
- className: scopeRegistry.cn(
30304
+ className: composerSendOrStop.cn(
30304
30305
  "size-3.5 shrink-0 transition-transform duration-200",
30305
30306
  !expanded && "-rotate-90"
30306
30307
  )
@@ -30505,7 +30506,7 @@ const ReadAssetToolUIImpl = ({
30505
30506
  /* @__PURE__ */ jsxRuntime.jsx(
30506
30507
  "div",
30507
30508
  {
30508
- className: scopeRegistry.cn(
30509
+ className: composerSendOrStop.cn(
30509
30510
  "flex size-9 shrink-0 items-center justify-center rounded-lg",
30510
30511
  isRunning && "bg-blue-50 text-blue-600",
30511
30512
  isComplete && !hasError && "bg-emerald-50 text-emerald-600",
@@ -30513,7 +30514,7 @@ const ReadAssetToolUIImpl = ({
30513
30514
  isIncomplete && "bg-red-50 text-red-500",
30514
30515
  !isRunning && !isComplete && !isIncomplete && "bg-muted text-muted-foreground"
30515
30516
  ),
30516
- children: isRunning ? /* @__PURE__ */ jsxRuntime.jsx(Loader, { className: "size-4 animate-spin" }) : hasError || isIncomplete ? /* @__PURE__ */ jsxRuntime.jsx(CircleAlert, { className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.BookOpen, { className: "size-4" })
30517
+ children: isRunning ? /* @__PURE__ */ jsxRuntime.jsx(Loader, { className: "size-4 animate-spin" }) : hasError || isIncomplete ? /* @__PURE__ */ jsxRuntime.jsx(CircleAlert, { className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.BookOpen, { className: "size-4" })
30517
30518
  }
30518
30519
  ),
30519
30520
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -30523,7 +30524,7 @@ const ReadAssetToolUIImpl = ({
30523
30524
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: badge })
30524
30525
  ] }),
30525
30526
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
30526
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.FileText, { className: "size-4" }),
30527
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.FileText, { className: "size-4" }),
30527
30528
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate text-[12px] text-muted-foreground", children: [
30528
30529
  "Source: ",
30529
30530
  assetLabel
@@ -30545,9 +30546,9 @@ const ReadAssetToolUIImpl = ({
30545
30546
  className: "flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50",
30546
30547
  children: [
30547
30548
  /* @__PURE__ */ jsxRuntime.jsx(
30548
- scopeRegistry.ChevronDown,
30549
+ composerSendOrStop.ChevronDown,
30549
30550
  {
30550
- className: scopeRegistry.cn(
30551
+ className: composerSendOrStop.cn(
30551
30552
  "size-3.5 shrink-0 transition-transform duration-200",
30552
30553
  !expanded && "-rotate-90"
30553
30554
  )
@@ -30651,7 +30652,7 @@ function StepMarker({
30651
30652
  index
30652
30653
  }) {
30653
30654
  if (status === "completed") {
30654
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-[18px] shrink-0 items-center justify-center rounded-full bg-emerald-500 text-white", children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Check, { className: "size-3", strokeWidth: 3 }) });
30655
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-[18px] shrink-0 items-center justify-center rounded-full bg-emerald-500 text-white", children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Check, { className: "size-3", strokeWidth: 3 }) });
30655
30656
  }
30656
30657
  if (status === "in_progress") {
30657
30658
  return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-[18px] shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary", children: /* @__PURE__ */ jsxRuntime.jsx(Loader, { className: "size-3 animate-spin", strokeWidth: 3 }) });
@@ -30672,12 +30673,12 @@ function PlanBadge({
30672
30673
  return /* @__PURE__ */ jsxRuntime.jsx(
30673
30674
  "span",
30674
30675
  {
30675
- className: scopeRegistry.cn(
30676
+ className: composerSendOrStop.cn(
30676
30677
  "flex size-8 shrink-0 items-center justify-center rounded-lg",
30677
30678
  isDone && "bg-emerald-50 text-emerald-600",
30678
30679
  !isDone && "bg-primary/10 text-primary"
30679
30680
  ),
30680
- children: isDone ? /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Check, { className: "size-4", strokeWidth: 3 }) : /* @__PURE__ */ jsxRuntime.jsx(ListChecks, { className: "size-4" })
30681
+ children: isDone ? /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Check, { className: "size-4", strokeWidth: 3 }) : /* @__PURE__ */ jsxRuntime.jsx(ListChecks, { className: "size-4" })
30681
30682
  }
30682
30683
  );
30683
30684
  }
@@ -30733,9 +30734,9 @@ const WriteTodosToolUIImpl = ({
30733
30734
  subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-[12px] text-muted-foreground", children: subtitle })
30734
30735
  ] }),
30735
30736
  /* @__PURE__ */ jsxRuntime.jsx(
30736
- scopeRegistry.ChevronDown,
30737
+ composerSendOrStop.ChevronDown,
30737
30738
  {
30738
- className: scopeRegistry.cn(
30739
+ className: composerSendOrStop.cn(
30739
30740
  "size-4 shrink-0 text-muted-foreground transition-transform duration-200",
30740
30741
  collapsed && "-rotate-90"
30741
30742
  )
@@ -30747,7 +30748,7 @@ const WriteTodosToolUIImpl = ({
30747
30748
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-0.5 w-full bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
30748
30749
  "div",
30749
30750
  {
30750
- className: scopeRegistry.cn(
30751
+ className: composerSendOrStop.cn(
30751
30752
  "h-full transition-all duration-500",
30752
30753
  isDone ? "bg-emerald-500" : "bg-primary"
30753
30754
  ),
@@ -30758,7 +30759,7 @@ const WriteTodosToolUIImpl = ({
30758
30759
  !collapsed && /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex max-h-72 flex-col overflow-y-auto rounded-b-xl border-t border-border/40 py-1", children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsxs(
30759
30760
  "li",
30760
30761
  {
30761
- className: scopeRegistry.cn(
30762
+ className: composerSendOrStop.cn(
30762
30763
  "relative flex items-start gap-2.5 px-4 py-1.5",
30763
30764
  step.status === "in_progress" && "bg-primary/5"
30764
30765
  ),
@@ -30774,7 +30775,7 @@ const WriteTodosToolUIImpl = ({
30774
30775
  /* @__PURE__ */ jsxRuntime.jsx(
30775
30776
  "span",
30776
30777
  {
30777
- className: scopeRegistry.cn(
30778
+ className: composerSendOrStop.cn(
30778
30779
  "text-[12.5px] leading-relaxed text-foreground",
30779
30780
  step.status === "completed" && "text-muted-foreground line-through decoration-muted-foreground/40",
30780
30781
  step.status === "cancelled" && "text-muted-foreground/70 line-through decoration-muted-foreground/40",
@@ -30865,7 +30866,7 @@ function ToolCard({
30865
30866
  /* @__PURE__ */ jsxRuntime.jsx(
30866
30867
  "div",
30867
30868
  {
30868
- className: scopeRegistry.cn(
30869
+ className: composerSendOrStop.cn(
30869
30870
  "flex size-8 shrink-0 items-center justify-center rounded-lg",
30870
30871
  isRunning && "bg-blue-50 text-blue-600",
30871
30872
  isComplete && "bg-emerald-50 text-emerald-600",
@@ -30944,9 +30945,9 @@ function ExpandableSection({
30944
30945
  className: "flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30",
30945
30946
  children: [
30946
30947
  /* @__PURE__ */ jsxRuntime.jsx(
30947
- scopeRegistry.ChevronDown,
30948
+ composerSendOrStop.ChevronDown,
30948
30949
  {
30949
- className: scopeRegistry.cn(
30950
+ className: composerSendOrStop.cn(
30950
30951
  "size-3.5 shrink-0 transition-transform duration-200",
30951
30952
  !expanded && "-rotate-90"
30952
30953
  )
@@ -30987,7 +30988,7 @@ const WebSearchToolUIImpl = ({
30987
30988
  return /* @__PURE__ */ jsxRuntime.jsx(
30988
30989
  ToolCard,
30989
30990
  {
30990
- icon: scopeRegistry.Search,
30991
+ icon: composerSendOrStop.Search,
30991
30992
  status: (status == null ? void 0 : status.type) ?? "complete",
30992
30993
  title: isRunning ? "Searching the web..." : "Web search",
30993
30994
  subtitle: query ? truncate(query, 80) : void 0,
@@ -31046,7 +31047,7 @@ const BrowseToolUIImpl = ({
31046
31047
  return /* @__PURE__ */ jsxRuntime.jsx(
31047
31048
  ToolCard,
31048
31049
  {
31049
- icon: scopeRegistry.Globe,
31050
+ icon: composerSendOrStop.Globe,
31050
31051
  status: (status == null ? void 0 : status.type) ?? "complete",
31051
31052
  title: isRunning ? "Browsing page..." : pageTitle ? truncate(pageTitle, 50) : "Browsed page",
31052
31053
  subtitle: displayUrl,
@@ -31184,7 +31185,7 @@ const EmailSearchToolUIImpl = ({
31184
31185
  return /* @__PURE__ */ jsxRuntime.jsx(
31185
31186
  ToolCard,
31186
31187
  {
31187
- icon: scopeRegistry.Mail,
31188
+ icon: composerSendOrStop.Mail,
31188
31189
  status: (status == null ? void 0 : status.type) ?? "complete",
31189
31190
  title: isRunning ? "Searching email…" : "Email search",
31190
31191
  subtitle: readableQuery ? truncate(readableQuery, 90) : void 0,
@@ -31244,7 +31245,7 @@ const EmailAccountsToolUIImpl = ({
31244
31245
  return /* @__PURE__ */ jsxRuntime.jsx(
31245
31246
  ToolCard,
31246
31247
  {
31247
- icon: scopeRegistry.Mail,
31248
+ icon: composerSendOrStop.Mail,
31248
31249
  status: (status == null ? void 0 : status.type) ?? "complete",
31249
31250
  title: isRunning ? "Checking connected email accounts…" : "Email accounts",
31250
31251
  toolName,
@@ -31418,7 +31419,7 @@ function CreateAssetToolUIImpl({
31418
31419
  /* @__PURE__ */ jsxRuntime.jsx(
31419
31420
  "div",
31420
31421
  {
31421
- className: scopeRegistry.cn(
31422
+ className: composerSendOrStop.cn(
31422
31423
  "flex size-10 shrink-0 items-center justify-center rounded-lg",
31423
31424
  ASSET_TILE_STYLE[assetType] ?? ASSET_TILE_STYLE.unknown
31424
31425
  ),
@@ -31712,7 +31713,7 @@ const StudioAddSlideToolUI = createStudioPtcToolUI(
31712
31713
  const StudioCreateDocumentToolUI = createStudioPtcToolUI(
31713
31714
  "StudioCreateDocumentToolUI",
31714
31715
  {
31715
- icon: scopeRegistry.FileText,
31716
+ icon: composerSendOrStop.FileText,
31716
31717
  assetType: "document",
31717
31718
  badge: "Doc",
31718
31719
  runningLabel: (args) => {
@@ -31727,7 +31728,7 @@ const StudioCreateDocumentToolUI = createStudioPtcToolUI(
31727
31728
  const StudioCreateParagraphToolUI = createStudioPtcToolUI(
31728
31729
  "StudioCreateParagraphToolUI",
31729
31730
  {
31730
- icon: scopeRegistry.FileText,
31731
+ icon: composerSendOrStop.FileText,
31731
31732
  assetType: "document",
31732
31733
  badge: "Doc",
31733
31734
  runningLabel: () => "Adding paragraph...",
@@ -31739,7 +31740,7 @@ const StudioCreateParagraphToolUI = createStudioPtcToolUI(
31739
31740
  const StudioOpenDocumentToolUI = createStudioPtcToolUI(
31740
31741
  "StudioOpenDocumentToolUI",
31741
31742
  {
31742
- icon: scopeRegistry.FileText,
31743
+ icon: composerSendOrStop.FileText,
31743
31744
  assetType: "document",
31744
31745
  badge: "Doc",
31745
31746
  runningLabel: () => "Opening document...",
@@ -31761,7 +31762,7 @@ const CreateEmailDraftToolUIImpl = ({
31761
31762
  return /* @__PURE__ */ jsxRuntime.jsx(
31762
31763
  ToolCard,
31763
31764
  {
31764
- icon: scopeRegistry.Mail,
31765
+ icon: composerSendOrStop.Mail,
31765
31766
  status: (status == null ? void 0 : status.type) ?? "complete",
31766
31767
  title: isRunning ? "Creating email draft..." : "Email draft created",
31767
31768
  toolName,
@@ -31779,7 +31780,7 @@ CreateEmailDraftToolUI.displayName = "CreateEmailDraftToolUI";
31779
31780
  const CreateNotebookToolUIImpl = (props) => /* @__PURE__ */ jsxRuntime.jsx(
31780
31781
  CreateAssetToolUIImpl,
31781
31782
  {
31782
- icon: scopeRegistry.BookOpen,
31783
+ icon: composerSendOrStop.BookOpen,
31783
31784
  assetType: "notebook",
31784
31785
  runningLabel: "Creating notebook...",
31785
31786
  doneLabel: "Created notebook",
@@ -32180,7 +32181,7 @@ const RunPythonCodeToolUIImpl = ({
32180
32181
  return /* @__PURE__ */ jsxRuntime.jsxs(
32181
32182
  ToolCard,
32182
32183
  {
32183
- icon: scopeRegistry.Code,
32184
+ icon: composerSendOrStop.Code,
32184
32185
  status: (status == null ? void 0 : status.type) ?? "complete",
32185
32186
  title: isRunning ? "Running code..." : summary || `Executed ${lines} ${lines !== 1 ? "lines" : "line"}`,
32186
32187
  toolName,
@@ -32206,7 +32207,7 @@ const RunPythonCodeToolUIImpl = ({
32206
32207
  isComplete && hasPlotly && /* @__PURE__ */ jsxRuntime.jsx(PlotlyChartSection, { json: parsed.plotlyJson }),
32207
32208
  isComplete && hasImage && !hasPlotly && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border/40 px-4 py-2.5", children: [
32208
32209
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 mb-1.5", children: [
32209
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Image, { className: "size-3 text-muted-foreground" }),
32210
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Image, { className: "size-3 text-muted-foreground" }),
32210
32211
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "Generated image" })
32211
32212
  ] }),
32212
32213
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -32443,7 +32444,7 @@ const DescribeDatabaseToolUIImpl = ({
32443
32444
  return /* @__PURE__ */ jsxRuntime.jsx(
32444
32445
  ToolCard,
32445
32446
  {
32446
- icon: scopeRegistry.Database,
32447
+ icon: composerSendOrStop.Database,
32447
32448
  status: (status == null ? void 0 : status.type) ?? "complete",
32448
32449
  title: isRunning ? "Inspecting database..." : title ? `Database: ${title}` : "Database overview",
32449
32450
  subtitle: databaseName ?? void 0,
@@ -32470,7 +32471,7 @@ const DescribeDatabaseToolUIImpl = ({
32470
32471
  /* @__PURE__ */ jsxRuntime.jsxs(
32471
32472
  "span",
32472
32473
  {
32473
- className: scopeRegistry.cn(
32474
+ className: composerSendOrStop.cn(
32474
32475
  "inline-flex w-fit items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium capitalize",
32475
32476
  dbStatus === "active" ? "bg-emerald-50 text-emerald-700" : "bg-muted text-muted-foreground"
32476
32477
  ),
@@ -32478,7 +32479,7 @@ const DescribeDatabaseToolUIImpl = ({
32478
32479
  /* @__PURE__ */ jsxRuntime.jsx(
32479
32480
  "span",
32480
32481
  {
32481
- className: scopeRegistry.cn(
32482
+ className: composerSendOrStop.cn(
32482
32483
  "size-1.5 rounded-full",
32483
32484
  dbStatus === "active" ? "bg-emerald-500" : "bg-muted-foreground"
32484
32485
  )
@@ -32522,7 +32523,7 @@ const ListDatabaseTablesToolUIImpl = ({
32522
32523
  return /* @__PURE__ */ jsxRuntime.jsx(
32523
32524
  ToolCard,
32524
32525
  {
32525
- icon: scopeRegistry.Table,
32526
+ icon: composerSendOrStop.Table,
32526
32527
  status: (status == null ? void 0 : status.type) ?? "complete",
32527
32528
  title: isRunning ? "Listing database tables..." : "Database tables",
32528
32529
  toolName,
@@ -32543,7 +32544,7 @@ const ListDatabaseTablesToolUIImpl = ({
32543
32544
  className: "flex items-center justify-between gap-3 rounded-md px-2 py-1 hover:bg-muted/40",
32544
32545
  children: [
32545
32546
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
32546
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Table, { className: "size-3 shrink-0 text-muted-foreground/60" }),
32547
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Table, { className: "size-3 shrink-0 text-muted-foreground/60" }),
32547
32548
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-mono text-[12px] text-foreground/90", children: qualified })
32548
32549
  ] }),
32549
32550
  t.row_count !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-[10px] tabular-nums text-muted-foreground", children: [
@@ -33030,7 +33031,7 @@ const UpdateSheetRangeToolUIImpl = ({
33030
33031
  return /* @__PURE__ */ jsxRuntime.jsxs(
33031
33032
  ToolCard,
33032
33033
  {
33033
- icon: scopeRegistry.Sheet,
33034
+ icon: composerSendOrStop.Sheet,
33034
33035
  status: isFailure ? "incomplete" : (status == null ? void 0 : status.type) ?? "complete",
33035
33036
  title: truncate(title, 80),
33036
33037
  subtitle: !explanation && range ? `Range: ${range}` : void 0,
@@ -33068,7 +33069,7 @@ const UpdateSheetRangeToolUIImpl = ({
33068
33069
  return /* @__PURE__ */ jsxRuntime.jsx(
33069
33070
  "td",
33070
33071
  {
33071
- className: scopeRegistry.cn(
33072
+ className: composerSendOrStop.cn(
33072
33073
  "max-w-[180px] truncate whitespace-nowrap px-2 py-0.5 text-foreground/80",
33073
33074
  isFormula && "font-mono text-blue-600"
33074
33075
  ),
@@ -33535,7 +33536,7 @@ const CaptureMomentToolUIImpl = ({
33535
33536
  if (sourceAssetId) {
33536
33537
  subtitle = subtitle ? `${subtitle} · ${truncate(sourceAssetId, 30)}` : truncate(sourceAssetId, 40);
33537
33538
  }
33538
- const Icon = isClipMode ? Scissors : scopeRegistry.Camera;
33539
+ const Icon = isClipMode ? Scissors : composerSendOrStop.Camera;
33539
33540
  let title;
33540
33541
  if (isRunning) {
33541
33542
  title = isClipMode ? "Extracting video clip…" : "Capturing screenshot…";
@@ -33712,7 +33713,7 @@ const CaptureSlideScreenshotToolUIImpl = ({
33712
33713
  return /* @__PURE__ */ jsxRuntime.jsxs(
33713
33714
  ToolCard,
33714
33715
  {
33715
- icon: scopeRegistry.Camera,
33716
+ icon: composerSendOrStop.Camera,
33716
33717
  status: (status == null ? void 0 : status.type) ?? "complete",
33717
33718
  title: isRunning ? "Capturing slide screenshot..." : errorMsg ? "Slide screenshot failed" : "Slide screenshot captured",
33718
33719
  subtitle: subtitle || void 0,
@@ -33755,7 +33756,7 @@ const CaptureSlideScreenshotToolUIImpl = ({
33755
33756
  rel: "noreferrer",
33756
33757
  className: "flex items-center gap-1.5 rounded-md border border-border/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",
33757
33758
  children: [
33758
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Image, { className: "size-3" }),
33759
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Image, { className: "size-3" }),
33759
33760
  "Open image"
33760
33761
  ]
33761
33762
  }
@@ -33818,7 +33819,7 @@ const OpenBrowserToolUIImpl = ({
33818
33819
  return /* @__PURE__ */ jsxRuntime.jsxs(
33819
33820
  ToolCard,
33820
33821
  {
33821
- icon: scopeRegistry.Globe,
33822
+ icon: composerSendOrStop.Globe,
33822
33823
  status: (status == null ? void 0 : status.type) ?? "complete",
33823
33824
  title: displayTitle,
33824
33825
  subtitle: displayUrl,
@@ -33855,7 +33856,7 @@ const OpenBrowserToolUIImpl = ({
33855
33856
  rel: "noopener noreferrer",
33856
33857
  className: "flex items-center gap-1.5 rounded-md border border-border/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",
33857
33858
  children: [
33858
- /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Globe, { className: "size-3" }),
33859
+ /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Globe, { className: "size-3" }),
33859
33860
  "Visit URL"
33860
33861
  ]
33861
33862
  }
@@ -33991,7 +33992,7 @@ const CollapsibleGroup = ({ groupKey, indices, children }) => {
33991
33992
  " tool ",
33992
33993
  toolCallCount === 1 ? "call" : "calls"
33993
33994
  ] }),
33994
- open ? /* @__PURE__ */ jsxRuntime.jsx(ChevronUp, { size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronDown, { size: 16 })
33995
+ open ? /* @__PURE__ */ jsxRuntime.jsx(ChevronUp, { size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronDown, { size: 16 })
33995
33996
  ] })
33996
33997
  ]
33997
33998
  }
@@ -33999,7 +34000,7 @@ const CollapsibleGroup = ({ groupKey, indices, children }) => {
33999
34000
  /* @__PURE__ */ jsxRuntime.jsx(
34000
34001
  "div",
34001
34002
  {
34002
- className: scopeRegistry.cn(
34003
+ className: composerSendOrStop.cn(
34003
34004
  "grid overflow-hidden border-t transition-[grid-template-rows] duration-200 ease-in-out",
34004
34005
  open ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
34005
34006
  ),
@@ -34360,7 +34361,7 @@ const SuperGroupingCard = React.memo(function SuperGroupingCard2({
34360
34361
  toolStatuses.length === 1 ? "tool" : "tools"
34361
34362
  ] })
34362
34363
  ] }),
34363
- showDetails ? /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronDown, { className: "size-3.5 text-muted-foreground/70" }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronRight, { className: "size-3.5 text-muted-foreground/70" })
34364
+ showDetails ? /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronDown, { className: "size-3.5 text-muted-foreground/70" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronRight, { className: "size-3.5 text-muted-foreground/70" })
34364
34365
  ]
34365
34366
  }
34366
34367
  ),
@@ -34373,7 +34374,7 @@ const SuperGroupingCard = React.memo(function SuperGroupingCard2({
34373
34374
  {
34374
34375
  "aria-busy": isRunning ? "true" : "false",
34375
34376
  "aria-describedby": "aui-sg-status",
34376
- className: scopeRegistry.cn(
34377
+ className: composerSendOrStop.cn(
34377
34378
  "my-3 overflow-hidden rounded-2xl border transition-colors duration-200",
34378
34379
  isError ? "border-destructive/30 bg-destructive/5" : "border-border/70 bg-muted/10"
34379
34380
  ),
@@ -34392,7 +34393,7 @@ const SuperGroupingCard = React.memo(function SuperGroupingCard2({
34392
34393
  ] }),
34393
34394
  visibleStatuses.map((s, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 text-[12px]", children: [
34394
34395
  s.isComplete ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-3.5 items-center justify-center text-emerald-500", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 3L4.5 8.5L2 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-3.5 items-center justify-center", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1.5 animate-pulse rounded-full bg-blue-500" }) }),
34395
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: scopeRegistry.cn("leading-relaxed", s.isComplete ? "text-muted-foreground/70" : "text-foreground/80"), children: s.label })
34396
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: composerSendOrStop.cn("leading-relaxed", s.isComplete ? "text-muted-foreground/70" : "text-foreground/80"), children: s.label })
34396
34397
  ] }, `${s.toolName}-${i}`))
34397
34398
  ] }),
34398
34399
  !hasToolCalls && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pt-1 pb-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shimmer text-[12px] text-muted-foreground", children: "Planning approach..." }) }),
@@ -34404,7 +34405,7 @@ const SuperGroupingCard = React.memo(function SuperGroupingCard2({
34404
34405
  "aria-expanded": showDetails,
34405
34406
  className: "flex items-center gap-1 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground",
34406
34407
  children: [
34407
- showDetails ? /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronRight, { className: "size-3" }),
34408
+ showDetails ? /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronRight, { className: "size-3" }),
34408
34409
  showDetails ? "Hide details" : "Show details"
34409
34410
  ]
34410
34411
  }
@@ -34423,7 +34424,7 @@ const TooltipIconButton = React.forwardRef(
34423
34424
  variant: "ghost",
34424
34425
  size: "icon",
34425
34426
  ...rest,
34426
- className: scopeRegistry.cn("aui-button-icon size-6 p-1", className),
34427
+ className: composerSendOrStop.cn("aui-button-icon size-6 p-1", className),
34427
34428
  ref,
34428
34429
  children: [
34429
34430
  /* @__PURE__ */ jsxRuntime.jsx(Slottable$1, { children }),
@@ -34489,7 +34490,7 @@ const FileUploadButton = ({
34489
34490
  type: "button",
34490
34491
  onClick: handleClick,
34491
34492
  disabled: isUploading,
34492
- className: scopeRegistry.cn(
34493
+ className: composerSendOrStop.cn(
34493
34494
  "aui-file-upload-btn flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50 disabled:pointer-events-none",
34494
34495
  error2 && "text-destructive",
34495
34496
  className
@@ -34508,7 +34509,7 @@ const ComposerQuotePreview = ({ className }) => {
34508
34509
  return /* @__PURE__ */ jsxRuntime.jsxs(
34509
34510
  "div",
34510
34511
  {
34511
- className: scopeRegistry.cn(
34512
+ className: composerSendOrStop.cn(
34512
34513
  "aui-quote-preview mx-3 mt-2 flex items-start gap-2 rounded-lg border border-border/60 bg-muted/40 px-3 py-2 text-sm",
34513
34514
  className
34514
34515
  ),
@@ -34538,7 +34539,7 @@ const ComposerQuotePreview = ({ className }) => {
34538
34539
  const ComposerAttachmentPreview = ({ className }) => {
34539
34540
  const { attachments, isUploading, removeAttachment } = useAttachments();
34540
34541
  if (attachments.length === 0 && !isUploading) return null;
34541
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: scopeRegistry.cn("aui-attachment-preview mx-3 mt-2 flex flex-wrap gap-1.5", className), children: [
34542
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: composerSendOrStop.cn("aui-attachment-preview mx-3 mt-2 flex flex-wrap gap-1.5", className), children: [
34542
34543
  attachments.map((asset) => /* @__PURE__ */ jsxRuntime.jsxs(
34543
34544
  "div",
34544
34545
  {
@@ -34614,7 +34615,7 @@ const ComposerDropZone = ({
34614
34615
  return /* @__PURE__ */ jsxRuntime.jsxs(
34615
34616
  "div",
34616
34617
  {
34617
- className: scopeRegistry.cn("relative", className),
34618
+ className: composerSendOrStop.cn("relative", className),
34618
34619
  onDragOver: handleDragOver,
34619
34620
  onDragLeave: handleDragLeave,
34620
34621
  onDrop: handleDrop,
@@ -34942,12 +34943,12 @@ function QuotePostMessageBridge() {
34942
34943
  }
34943
34944
  const DEFAULT_SUGGESTIONS = [
34944
34945
  {
34945
- icon: scopeRegistry.Search,
34946
+ icon: composerSendOrStop.Search,
34946
34947
  title: "Research a topic and draft a report",
34947
34948
  prompt: "Search the web for the latest developments in enterprise AI adoption, then create a document summarizing the key trends, market data, and strategic implications."
34948
34949
  },
34949
34950
  {
34950
- icon: scopeRegistry.Search,
34951
+ icon: composerSendOrStop.Search,
34951
34952
  title: "Compare recent AI model launches",
34952
34953
  prompt: "Search the web for the latest major AI model launches from OpenAI, Anthropic, and Google, then summarize the release dates, standout capabilities, and practical tradeoffs in a concise comparison table."
34953
34954
  },
@@ -34957,7 +34958,7 @@ const DEFAULT_SUGGESTIONS = [
34957
34958
  prompt: "Create a 5-slide investor update presentation covering market opportunity, product traction, key metrics, competitive positioning, and next steps."
34958
34959
  },
34959
34960
  {
34960
- icon: scopeRegistry.FileText,
34961
+ icon: composerSendOrStop.FileText,
34961
34962
  title: "Set up a structured spreadsheet",
34962
34963
  prompt: "Create a project tracking spreadsheet with columns for task name, owner, priority, status, start date, due date, and completion percentage."
34963
34964
  }
@@ -35039,6 +35040,11 @@ const SuggestionCard = ({
35039
35040
  }
35040
35041
  );
35041
35042
  };
35043
+ const AthenaChatWelcome = ({ welcomeMessage, welcomeSubtext, welcomeSuggestions }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-thread-welcome-root mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aui-thread-welcome-message flex size-full flex-col justify-center px-4", children: [
35044
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200", children: welcomeMessage }),
35045
+ welcomeSubtext && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-lg delay-75 duration-200", children: welcomeSubtext }),
35046
+ welcomeSuggestions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 grid grid-cols-1 gap-2.5 sm:grid-cols-2", children: welcomeSuggestions.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx(SuggestionCard, { suggestion: s, index: i }, s.title)) })
35047
+ ] }) }) });
35042
35048
  const AthenaChat = ({
35043
35049
  className,
35044
35050
  welcomeMessage = "Hello there!",
@@ -35093,56 +35099,64 @@ const AthenaChat = ({
35093
35099
  );
35094
35100
  const AssistantMessageComponent = (components == null ? void 0 : components.AssistantMessage) ?? AthenaDefaultAssistantMessage;
35095
35101
  const UserMessageComponent = (components == null ? void 0 : components.UserMessage) ?? AthenaDefaultUserMessage;
35096
- return /* @__PURE__ */ jsxRuntime.jsx(AthenaChatDefaultComponentsContext.Provider, { value: defaultComponentsContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(AthenaChatErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsxs(
35097
- react.ThreadPrimitive.Root,
35102
+ const messageComponents = React.useMemo(
35103
+ () => ({
35104
+ UserMessage: UserMessageComponent,
35105
+ AssistantMessage: AssistantMessageComponent
35106
+ }),
35107
+ [AssistantMessageComponent, UserMessageComponent]
35108
+ );
35109
+ return /* @__PURE__ */ jsxRuntime.jsx(AthenaChatDefaultComponentsContext.Provider, { value: defaultComponentsContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(AthenaChatErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsx(
35110
+ composerSendOrStop.ChatThreadShell,
35098
35111
  {
35099
- className: `aui-root aui-thread-root @container flex h-full flex-col bg-background ${className ?? ""}`,
35100
- style: { ["--thread-max-width"]: maxWidth, position: "relative" },
35101
- children: [
35102
- /* @__PURE__ */ jsxRuntime.jsx(ThreadLoadingOverlay, {}),
35103
- /* @__PURE__ */ jsxRuntime.jsxs(
35104
- react.ThreadPrimitive.Viewport,
35105
- {
35106
- turnAnchor: "top",
35107
- className: "aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4",
35108
- "data-aui-thread-viewport": "",
35109
- children: [
35110
- /* @__PURE__ */ jsxRuntime.jsx(ThreadScrollToTop, {}),
35111
- /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => s.thread.isEmpty, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-thread-welcome-root mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aui-thread-welcome-message flex size-full flex-col justify-center px-4", children: [
35112
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200", children: welcomeMessage }),
35113
- welcomeSubtext && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-lg delay-75 duration-200", children: welcomeSubtext }),
35114
- welcomeSuggestions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 grid grid-cols-1 gap-2.5 sm:grid-cols-2", children: welcomeSuggestions.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx(SuggestionCard, { suggestion: s, index: i }, s.title)) })
35115
- ] }) }) }) }),
35116
- /* @__PURE__ */ jsxRuntime.jsx(
35117
- react.ThreadPrimitive.Messages,
35118
- {
35119
- components: {
35120
- UserMessage: UserMessageComponent,
35121
- AssistantMessage: AssistantMessageComponent
35122
- }
35123
- }
35124
- ),
35125
- /* @__PURE__ */ jsxRuntime.jsxs(react.ThreadPrimitive.ViewportFooter, { className: "aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4 md:pb-6", children: [
35126
- /* @__PURE__ */ jsxRuntime.jsx(ThreadScrollToBottom, {}),
35127
- /* @__PURE__ */ jsxRuntime.jsx(StatewireLegacyReadOnlyBanner, {}),
35128
- /* @__PURE__ */ jsxRuntime.jsx(StatewireConnectionBanner, {}),
35129
- /* @__PURE__ */ jsxRuntime.jsx(StatewireErrorBanner, {}),
35130
- /* @__PURE__ */ jsxRuntime.jsx(StatewireApprovalCard, {}),
35131
- /* @__PURE__ */ jsxRuntime.jsx(StatewireQueuedMessages, {}),
35132
- /* @__PURE__ */ jsxRuntime.jsx(AttachmentProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(QuoteProvider, { children: [
35133
- /* @__PURE__ */ jsxRuntime.jsx(QuotePostMessageBridge, {}),
35134
- /* @__PURE__ */ jsxRuntime.jsx(ComposerDropZone, { children: /* @__PURE__ */ jsxRuntime.jsxs(react.ComposerPrimitive.Root, { className: "aui-composer-root relative flex w-full flex-col rounded-2xl border border-input bg-background px-1 pt-2 outline-none transition-shadow focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/20", children: [
35135
- /* @__PURE__ */ jsxRuntime.jsx(ComposerQuotePreview, {}),
35136
- /* @__PURE__ */ jsxRuntime.jsx(ComposerAttachmentPreview, {}),
35137
- /* @__PURE__ */ jsxRuntime.jsx(TiptapComposer, { tools }),
35138
- /* @__PURE__ */ jsxRuntime.jsx(ComposerAction, {})
35139
- ] }) })
35140
- ] }) }) })
35141
- ] })
35142
- ]
35143
- }
35144
- )
35145
- ]
35112
+ overlay: /* @__PURE__ */ jsxRuntime.jsx(ThreadLoadingOverlay, {}),
35113
+ panelClassName: composerSendOrStop.cn(
35114
+ "aui-root aui-thread-root @container relative flex h-full flex-col bg-background",
35115
+ className
35116
+ ),
35117
+ maxWidth,
35118
+ turnAnchor: "top",
35119
+ viewportClassName: "aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4",
35120
+ contentClassName: "flex w-full flex-1 flex-col",
35121
+ viewportOverlay: /* @__PURE__ */ jsxRuntime.jsx(ThreadScrollToTop, {}),
35122
+ welcome: /* @__PURE__ */ jsxRuntime.jsx(
35123
+ AthenaChatWelcome,
35124
+ {
35125
+ welcomeMessage,
35126
+ welcomeSubtext,
35127
+ welcomeSuggestions
35128
+ }
35129
+ ),
35130
+ components: messageComponents,
35131
+ runningIndicator: null,
35132
+ scrollToBottom: /* @__PURE__ */ jsxRuntime.jsx(ThreadScrollToBottom, {}),
35133
+ viewportFooterClassName: "aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4 md:pb-6",
35134
+ viewportFooter: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
35135
+ /* @__PURE__ */ jsxRuntime.jsx(StatewireLegacyReadOnlyBanner, {}),
35136
+ /* @__PURE__ */ jsxRuntime.jsx(StatewireConnectionBanner, {}),
35137
+ /* @__PURE__ */ jsxRuntime.jsx(StatewireErrorBanner, {}),
35138
+ /* @__PURE__ */ jsxRuntime.jsx(StatewireApprovalCard, {}),
35139
+ /* @__PURE__ */ jsxRuntime.jsx(StatewireQueuedMessages, {}),
35140
+ /* @__PURE__ */ jsxRuntime.jsx(AttachmentProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(ComposerEditorProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(QuoteProvider, { children: [
35141
+ /* @__PURE__ */ jsxRuntime.jsx(QuotePostMessageBridge, {}),
35142
+ /* @__PURE__ */ jsxRuntime.jsx(ComposerDropZone, { children: /* @__PURE__ */ jsxRuntime.jsx(
35143
+ composerSendOrStop.ChatComposerDock,
35144
+ {
35145
+ className: "",
35146
+ surfaceClassName: "aui-composer-root relative flex w-full flex-col rounded-2xl border border-input bg-background px-1 pt-2 outline-none transition-shadow focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/20",
35147
+ editorRowClassName: "",
35148
+ toolbarClassName: "aui-composer-action-wrapper relative mx-2 mb-2 flex items-center",
35149
+ beforeEditor: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
35150
+ /* @__PURE__ */ jsxRuntime.jsx(ComposerQuotePreview, {}),
35151
+ /* @__PURE__ */ jsxRuntime.jsx(ComposerAttachmentPreview, {})
35152
+ ] }),
35153
+ editor: /* @__PURE__ */ jsxRuntime.jsx(TiptapComposer, { tools }),
35154
+ toolbarStart: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(FileUploadButton, {}) }),
35155
+ toolbarEnd: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(AthenaComposerSendOrStop, {}) })
35156
+ }
35157
+ ) })
35158
+ ] }) }) })
35159
+ ] })
35146
35160
  }
35147
35161
  ) }) });
35148
35162
  };
@@ -35196,9 +35210,9 @@ const ThreadScrollToTop = () => {
35196
35210
  ref: containerRef,
35197
35211
  tooltip: "Scroll to top",
35198
35212
  variant: "outline",
35199
- className: scopeRegistry.cn("aui-thread-scroll-to-top absolute top-2 rounded-full p-4 dark:bg-background dark:hover:bg-accent", isAtTop && "invisible"),
35213
+ className: composerSendOrStop.cn("aui-thread-scroll-to-top absolute top-2 rounded-full p-4 dark:bg-background dark:hover:bg-accent", isAtTop && "invisible"),
35200
35214
  onClick: handleClick,
35201
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ArrowUp, {})
35215
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ArrowUp, {})
35202
35216
  }
35203
35217
  ) });
35204
35218
  };
@@ -35211,75 +35225,62 @@ const ThreadScrollToBottom = () => /* @__PURE__ */ jsxRuntime.jsx(react.ThreadPr
35211
35225
  children: /* @__PURE__ */ jsxRuntime.jsx(ArrowDown, {})
35212
35226
  }
35213
35227
  ) });
35214
- const ComposerAction = () => {
35215
- const { transport } = AthenaContext.useAthenaConfig();
35216
- const queuesWhileRunning = allowsMidRunSend(transport);
35217
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aui-composer-action-wrapper relative mx-2 mb-2 flex items-center justify-between", children: [
35218
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(FileUploadButton, {}) }),
35219
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
35220
- queuesWhileRunning ? /* @__PURE__ */ jsxRuntime.jsx(ComposerSendWithQuote, {}) : /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => !s.thread.isRunning, children: /* @__PURE__ */ jsxRuntime.jsx(ComposerSendWithQuote, {}) }),
35221
- /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => s.thread.isRunning, children: /* @__PURE__ */ jsxRuntime.jsx(react.ComposerPrimitive.Cancel, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
35222
- Button,
35223
- {
35224
- type: "button",
35225
- variant: "default",
35226
- size: "icon",
35227
- className: "aui-composer-cancel size-8 rounded-full",
35228
- "aria-label": "Stop generating",
35229
- children: /* @__PURE__ */ jsxRuntime.jsx(Square, { className: "aui-composer-cancel-icon size-3 fill-current" })
35230
- }
35231
- ) }) })
35232
- ] })
35233
- ] });
35234
- };
35235
- const ComposerSendWithQuote = () => {
35236
- const aui = react.useAui();
35237
- const { appUrl, transport } = AthenaContext.useAthenaConfig();
35238
- const { quote, clearQuote } = useQuote();
35239
- const { attachments, clearAttachments, isUploading } = useAttachments();
35240
- const editorRef = useComposerEditorRef();
35241
- const editorEmpty = useComposerEditorEmpty();
35242
- const isRunningThread = react.useAuiState((s) => s.thread.isRunning);
35243
- const isThreadRunning = allowsMidRunSend(transport) ? false : isRunningThread;
35244
- const hasExtras = !!quote || attachments.length > 0;
35245
- const handleSend = React.useCallback(() => {
35246
- var _a3;
35247
- if (isUploading || isThreadRunning) return;
35248
- const editor = editorRef.current;
35249
- if (!editor && !quote && attachments.length === 0) return;
35250
- const userText = ((_a3 = editor == null ? void 0 : editor.getMarkdown()) == null ? void 0 : _a3.trim()) ?? "";
35251
- if (hasExtras) {
35252
- const fullMessage = buildComposedMessage({
35253
- attachments,
35254
- quote,
35255
- userText,
35256
- appUrl
35257
- });
35258
- if (!fullMessage) return;
35259
- aui.composer.setText(fullMessage);
35260
- aui.composer.send({ steer: false });
35261
- clearQuote();
35262
- clearAttachments();
35263
- } else {
35264
- if (!userText) return;
35265
- aui.composer.setText(userText);
35266
- aui.composer.send({ steer: false });
35267
- }
35268
- editor == null ? void 0 : editor.clear();
35269
- }, [aui, quote, attachments, hasExtras, isUploading, isThreadRunning, clearQuote, clearAttachments, editorRef, appUrl]);
35228
+ const AthenaComposerSendButton = ({
35229
+ action,
35230
+ onSend,
35231
+ disabled,
35232
+ title
35233
+ }) => {
35234
+ const label = action === "queue" ? "Queue message" : "Send message";
35270
35235
  return /* @__PURE__ */ jsxRuntime.jsx(
35271
35236
  TooltipIconButton,
35272
35237
  {
35273
- tooltip: isUploading ? "Upload in progress..." : "Send message",
35238
+ tooltip: title ?? label,
35274
35239
  side: "bottom",
35275
35240
  type: "button",
35276
35241
  variant: "default",
35277
35242
  size: "icon",
35278
35243
  className: "aui-composer-send size-8 rounded-full",
35279
- "aria-label": "Send message",
35280
- onClick: handleSend,
35281
- disabled: isUploading || isThreadRunning || editorEmpty && !hasExtras,
35282
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ArrowUp, { className: "aui-composer-send-icon size-4" })
35244
+ "aria-label": label,
35245
+ onClick: onSend,
35246
+ disabled,
35247
+ children: action === "queue" ? /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ListPlus, { className: "aui-composer-send-icon size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ArrowUp, { className: "aui-composer-send-icon size-4" })
35248
+ }
35249
+ );
35250
+ };
35251
+ const AthenaComposerStopButton = ({ onStop, disabled, title }) => /* @__PURE__ */ jsxRuntime.jsx(
35252
+ Button,
35253
+ {
35254
+ type: "button",
35255
+ variant: "default",
35256
+ size: "icon",
35257
+ className: "aui-composer-cancel size-8 rounded-full",
35258
+ "aria-label": "Stop generating",
35259
+ title,
35260
+ onClick: onStop,
35261
+ disabled,
35262
+ children: /* @__PURE__ */ jsxRuntime.jsx(Square, { className: "aui-composer-cancel-icon size-3 fill-current" })
35263
+ }
35264
+ );
35265
+ const ATHENA_COMPOSER_COMPONENTS = {
35266
+ SendButton: AthenaComposerSendButton,
35267
+ StopButton: AthenaComposerStopButton
35268
+ };
35269
+ const AthenaComposerSendOrStop = () => {
35270
+ const { transport } = AthenaContext.useAthenaConfig();
35271
+ const { quote } = useQuote();
35272
+ const { attachments, isUploading } = useAttachments();
35273
+ const editorRef = useComposerEditorRef();
35274
+ const editorEmpty = useComposerEditorEmpty();
35275
+ const hasDraft = !editorEmpty || !!quote || attachments.length > 0;
35276
+ return /* @__PURE__ */ jsxRuntime.jsx(
35277
+ composerSendOrStop.ComposerSendOrStop,
35278
+ {
35279
+ composerRef: editorRef,
35280
+ hasDraft,
35281
+ canQueue: allowsMidRunSend(transport),
35282
+ sendBlockedReason: isUploading ? "Upload in progress..." : null,
35283
+ components: ATHENA_COMPOSER_COMPONENTS
35283
35284
  }
35284
35285
  );
35285
35286
  };
@@ -35292,7 +35293,7 @@ const MessageError = () => /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive
35292
35293
  variant: "ghost",
35293
35294
  size: "icon",
35294
35295
  className: "size-6 shrink-0 text-destructive hover:text-destructive dark:text-red-200 dark:hover:text-red-100",
35295
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.RefreshCw, { className: "size-3.5" })
35296
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.RefreshCw, { className: "size-3.5" })
35296
35297
  }
35297
35298
  ) })
35298
35299
  ] }) });
@@ -35397,12 +35398,12 @@ const AthenaReasoningPart = ({
35397
35398
  /* @__PURE__ */ jsxRuntime.jsx(
35398
35399
  "span",
35399
35400
  {
35400
- className: scopeRegistry.cn(
35401
+ className: composerSendOrStop.cn(
35401
35402
  "flex size-5 items-center justify-center text-muted-foreground transition-transform",
35402
35403
  isCollapsed ? "rotate-0" : "rotate-90"
35403
35404
  ),
35404
35405
  "aria-hidden": "true",
35405
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.ChevronRight, { className: "size-4" })
35406
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.ChevronRight, { className: "size-4" })
35406
35407
  }
35407
35408
  )
35408
35409
  ] })
@@ -35503,11 +35504,11 @@ const AthenaAssistantActionBar = ({ className }) => {
35503
35504
  {
35504
35505
  hideWhenRunning: true,
35505
35506
  autohide: "not-last",
35506
- className: scopeRegistry.cn("aui-assistant-action-bar-root -ml-1 flex gap-1 text-muted-foreground", className),
35507
+ className: composerSendOrStop.cn("aui-assistant-action-bar-root -ml-1 flex gap-1 text-muted-foreground", className),
35507
35508
  children: [
35508
35509
  /* @__PURE__ */ jsxRuntime.jsx(react.ActionBarPrimitive.Copy, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipIconButton, { tooltip: "Copy", children: [
35509
- /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => s.message.isCopied, children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Check, {}) }),
35510
- /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => !s.message.isCopied, children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.Copy, {}) })
35510
+ /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => s.message.isCopied, children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Check, {}) }),
35511
+ /* @__PURE__ */ jsxRuntime.jsx(react.AuiIf, { condition: (s) => !s.message.isCopied, children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.Copy, {}) })
35511
35512
  ] }) }),
35512
35513
  /* @__PURE__ */ jsxRuntime.jsxs(react.ActionBarMorePrimitive.Root, { children: [
35513
35514
  /* @__PURE__ */ jsxRuntime.jsx(react.ActionBarMorePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(TooltipIconButton, { tooltip: "More", className: "data-[state=open]:bg-accent", children: /* @__PURE__ */ jsxRuntime.jsx(Ellipsis, {}) }) }),
@@ -35527,7 +35528,7 @@ const AthenaAssistantActionBar = ({ className }) => {
35527
35528
  {
35528
35529
  className: "aui-action-bar-more-item flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
35529
35530
  onClick: () => {
35530
- window.open(scopeRegistry.createAthenaSpacesUrl({ appUrl, sessionId: threadId }), "_blank");
35531
+ window.open(composerSendOrStop.createAthenaSpacesUrl({ appUrl, sessionId: threadId }), "_blank");
35531
35532
  },
35532
35533
  children: [
35533
35534
  /* @__PURE__ */ jsxRuntime.jsx(ExternalLink, { className: "size-4" }),
@@ -35658,7 +35659,7 @@ const resolveEmbedAppUrl = ({
35658
35659
  backendUrl,
35659
35660
  currentOrigin
35660
35661
  }) => {
35661
- const derivedAppUrl = scopeRegistry.deriveAthenaAppUrl({ backendUrl });
35662
+ const derivedAppUrl = composerSendOrStop.deriveAthenaAppUrl({ backendUrl });
35662
35663
  if (!appUrl) {
35663
35664
  return derivedAppUrl;
35664
35665
  }
@@ -36035,7 +36036,7 @@ const AthenaAssetEmbed = ({
36035
36036
  src: iframeSrc ?? void 0,
36036
36037
  title: title ?? `Athena asset ${assetId}`,
36037
36038
  allow,
36038
- className: scopeRegistry.cn("block h-full w-full", className),
36039
+ className: composerSendOrStop.cn("block h-full w-full", className),
36039
36040
  style: { ...DEFAULT_STYLE, ...style },
36040
36041
  onLoad: () => {
36041
36042
  sendConfig();
@@ -36082,9 +36083,9 @@ function buildPresentationNavigationMessage({
36082
36083
  const ASSET_TYPE_CONFIG = {
36083
36084
  presentation: { icon: Presentation, label: "Presentation" },
36084
36085
  spreadsheet: { icon: FileSpreadsheet, label: "Spreadsheet" },
36085
- document: { icon: scopeRegistry.FileText, label: "Document" },
36086
- notebook: { icon: scopeRegistry.BookOpen, label: "Notebook" },
36087
- unknown: { icon: scopeRegistry.File, label: "Asset" }
36086
+ document: { icon: composerSendOrStop.FileText, label: "Document" },
36087
+ notebook: { icon: composerSendOrStop.BookOpen, label: "Notebook" },
36088
+ unknown: { icon: composerSendOrStop.File, label: "Asset" }
36088
36089
  };
36089
36090
  const AssetIframe = React.memo(
36090
36091
  ({ tab }) => {
@@ -36301,7 +36302,7 @@ const PanelHeader = ({ fullscreen }) => {
36301
36302
  onClick: () => setViewMode(isTiled ? "tabs" : "tiled"),
36302
36303
  className: `flex size-7 items-center justify-center rounded-lg transition-colors ${isTiled ? "bg-primary/10 text-primary" : "text-muted-foreground hover:bg-accent hover:text-foreground"}`,
36303
36304
  title: isTiled ? "Switch to tabs" : "Tile all assets",
36304
- children: isTiled ? /* @__PURE__ */ jsxRuntime.jsx(Layers, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.LayoutGrid, { className: "size-3.5" })
36305
+ children: isTiled ? /* @__PURE__ */ jsxRuntime.jsx(Layers, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.LayoutGrid, { className: "size-3.5" })
36305
36306
  }
36306
36307
  ),
36307
36308
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -36406,15 +36407,15 @@ function ThreadList({ className }) {
36406
36407
  StatewireThreadList,
36407
36408
  {
36408
36409
  list: statewireList,
36409
- className: scopeRegistry.cn("athena-sdk-chrome", className)
36410
+ className: composerSendOrStop.cn("athena-sdk-chrome", className)
36410
36411
  }
36411
36412
  );
36412
36413
  }
36413
- return /* @__PURE__ */ jsxRuntime.jsx(LegacyThreadList, { className: scopeRegistry.cn("athena-sdk-chrome", className) });
36414
+ return /* @__PURE__ */ jsxRuntime.jsx(LegacyThreadList, { className: composerSendOrStop.cn("athena-sdk-chrome", className) });
36414
36415
  }
36415
36416
  function LegacyThreadList({ className }) {
36416
36417
  const refresh = useRefreshThreadList();
36417
- return /* @__PURE__ */ jsxRuntime.jsxs(react.ThreadListPrimitive.Root, { className: scopeRegistry.cn("flex flex-col gap-1", className), children: [
36418
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.ThreadListPrimitive.Root, { className: composerSendOrStop.cn("flex flex-col gap-1", className), children: [
36418
36419
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
36419
36420
  /* @__PURE__ */ jsxRuntime.jsxs(react.ThreadListPrimitive.New, { className: "flex flex-1 items-center gap-2 rounded-lg border border-border/60 px-3 py-2 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground", children: [
36420
36421
  /* @__PURE__ */ jsxRuntime.jsx(Plus, { className: "size-4" }),
@@ -36427,7 +36428,7 @@ function LegacyThreadList({ className }) {
36427
36428
  onClick: refresh,
36428
36429
  className: "flex items-center justify-center rounded-lg border border-border/60 p-2 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
36429
36430
  title: "Refresh threads",
36430
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.RefreshCw, { className: "size-4" })
36431
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.RefreshCw, { className: "size-4" })
36431
36432
  }
36432
36433
  )
36433
36434
  ] }),
@@ -36451,7 +36452,7 @@ function StatewireThreadList({
36451
36452
  list: list2,
36452
36453
  className
36453
36454
  }) {
36454
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: scopeRegistry.cn("flex flex-col gap-1", className), children: [
36455
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: composerSendOrStop.cn("flex flex-col gap-1", className), children: [
36455
36456
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
36456
36457
  /* @__PURE__ */ jsxRuntime.jsxs(
36457
36458
  "button",
@@ -36472,7 +36473,7 @@ function StatewireThreadList({
36472
36473
  onClick: list2.refresh,
36473
36474
  className: "flex items-center justify-center rounded-lg border border-border/60 p-2 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
36474
36475
  title: "Refresh threads",
36475
- children: /* @__PURE__ */ jsxRuntime.jsx(scopeRegistry.RefreshCw, { className: "size-4" })
36476
+ children: /* @__PURE__ */ jsxRuntime.jsx(composerSendOrStop.RefreshCw, { className: "size-4" })
36476
36477
  }
36477
36478
  )
36478
36479
  ] }),
@@ -36529,16 +36530,16 @@ function useComposerAttachment() {
36529
36530
  }, [aui]);
36530
36531
  return { addFile, addContent, clear };
36531
36532
  }
36532
- exports.DEFAULT_API_URL = scopeRegistry.DEFAULT_API_URL;
36533
- exports.DEFAULT_APP_URL = scopeRegistry.DEFAULT_APP_URL;
36534
- exports.DEFAULT_BACKEND_URL = scopeRegistry.DEFAULT_BACKEND_URL;
36535
- exports.DEFAULT_STATEWIRE_SYNC_URL = scopeRegistry.DEFAULT_STATEWIRE_SYNC_URL;
36536
- exports.cn = scopeRegistry.cn;
36537
- exports.createAthenaSpacesUrl = scopeRegistry.createAthenaSpacesUrl;
36538
- exports.deriveAthenaApiUrl = scopeRegistry.deriveAthenaApiUrl;
36539
- exports.deriveAthenaAppUrl = scopeRegistry.deriveAthenaAppUrl;
36540
- exports.deriveStatewireSyncUrl = scopeRegistry.deriveStatewireSyncUrl;
36541
- exports.resolveStatewireSyncUrl = scopeRegistry.resolveStatewireSyncUrl;
36533
+ exports.DEFAULT_API_URL = composerSendOrStop.DEFAULT_API_URL;
36534
+ exports.DEFAULT_APP_URL = composerSendOrStop.DEFAULT_APP_URL;
36535
+ exports.DEFAULT_BACKEND_URL = composerSendOrStop.DEFAULT_BACKEND_URL;
36536
+ exports.DEFAULT_STATEWIRE_SYNC_URL = composerSendOrStop.DEFAULT_STATEWIRE_SYNC_URL;
36537
+ exports.cn = composerSendOrStop.cn;
36538
+ exports.createAthenaSpacesUrl = composerSendOrStop.createAthenaSpacesUrl;
36539
+ exports.deriveAthenaApiUrl = composerSendOrStop.deriveAthenaApiUrl;
36540
+ exports.deriveAthenaAppUrl = composerSendOrStop.deriveAthenaAppUrl;
36541
+ exports.deriveStatewireSyncUrl = composerSendOrStop.deriveStatewireSyncUrl;
36542
+ exports.resolveStatewireSyncUrl = composerSendOrStop.resolveStatewireSyncUrl;
36542
36543
  exports.useAthenaConfig = AthenaContext.useAthenaConfig;
36543
36544
  exports.ATHENA_REACT_SDK_VERSION = ATHENA_REACT_SDK_VERSION;
36544
36545
  exports.ATHENA_SDK_ERROR_CODES = ATHENA_SDK_ERROR_CODES;