@octaviaflow/core 3.1.0-beta.105 → 3.1.0-beta.107

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressionField.d.ts","sourceRoot":"","sources":["../../../src/components/ExpressionField/ExpressionField.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAML,KAAK,aAAa,EAIlB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAChC;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACrD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAC1D;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWzD;AAyBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAiBpE;AAuBD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAgB,EAChB,IAAQ,EACR,EAAE,EACF,SAAS,EACT,KAAK,EACL,YAAY,EACZ,WAAW,EACX,cAAsB,EACtB,YAAY,EAAE,SAAS,GACxB,EAAE,oBAAoB,2CAiZtB;AAuND,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ExpressionField.d.ts","sourceRoot":"","sources":["../../../src/components/ExpressionField/ExpressionField.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAML,KAAK,aAAa,EAIlB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAChC;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACrD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAC1D;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWzD;AAyBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAiBpE;AAuBD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAgB,EAChB,IAAQ,EACR,EAAE,EACF,SAAS,EACT,KAAK,EACL,YAAY,EACZ,WAAW,EACX,cAAsB,EACtB,YAAY,EAAE,SAAS,GACxB,EAAE,oBAAoB,2CAuatB;AAoQD,eAAe,eAAe,CAAC"}
package/dist/index.cjs CHANGED
@@ -41593,13 +41593,19 @@ function ExpressionField({
41593
41593
  const fieldId = id ?? generatedId;
41594
41594
  const helperId = `${fieldId}-helper`;
41595
41595
  const [editing, setEditing] = (0, import_react188.useState)(null);
41596
+ const resolveLabelRef = (0, import_react188.useRef)(resolveLabel);
41597
+ const resolveCallRef = (0, import_react188.useRef)(resolveCall);
41598
+ const pillEveryTokenRef = (0, import_react188.useRef)(pillEveryToken);
41599
+ resolveLabelRef.current = resolveLabel;
41600
+ resolveCallRef.current = resolveCall;
41601
+ pillEveryTokenRef.current = pillEveryToken;
41596
41602
  const labelFor = (0, import_react188.useCallback)(
41597
- (token) => resolveLabel?.(token) ?? shortReferenceLabel(token),
41598
- [resolveLabel]
41603
+ (token) => resolveLabelRef.current?.(token) ?? shortReferenceLabel(token),
41604
+ []
41599
41605
  );
41600
41606
  const callLabel = (0, import_react188.useCallback)(
41601
- (name) => resolveCall?.(name)?.label ?? (name.startsWith("user.") ? name.slice(5) : name),
41602
- [resolveCall]
41607
+ (name) => resolveCallRef.current?.(name)?.label ?? (name.startsWith("user.") ? name.slice(5) : name),
41608
+ []
41603
41609
  );
41604
41610
  const chipText = (0, import_react188.useCallback)(
41605
41611
  (name, args) => {
@@ -41645,7 +41651,7 @@ function ExpressionField({
41645
41651
  if (!el) return;
41646
41652
  el.innerHTML = "";
41647
41653
  if (!raw) return;
41648
- for (const segment of parseExpression(raw, pillEveryToken)) {
41654
+ for (const segment of parseExpression(raw, pillEveryTokenRef.current)) {
41649
41655
  if (segment.kind === "text") {
41650
41656
  el.appendChild(document.createTextNode(segment.raw));
41651
41657
  continue;
@@ -41657,7 +41663,7 @@ function ExpressionField({
41657
41663
  }
41658
41664
  }
41659
41665
  },
41660
- [pillEveryToken, makeToken]
41666
+ [makeToken]
41661
41667
  );
41662
41668
  (0, import_react188.useEffect)(() => {
41663
41669
  if (fromSelf.current) {
@@ -41768,6 +41774,10 @@ function ExpressionField({
41768
41774
  },
41769
41775
  [editing, chipText, commit]
41770
41776
  );
41777
+ const handleMouseDown = (0, import_react188.useCallback)((e) => {
41778
+ const token = e.target.closest(`.${PILL}, .${CHIP}`);
41779
+ if (token) e.preventDefault();
41780
+ }, []);
41771
41781
  const handleClick = (0, import_react188.useCallback)(
41772
41782
  (e) => {
41773
41783
  const node = e.target;
@@ -41882,6 +41892,7 @@ function ExpressionField({
41882
41892
  style: { minHeight: `${Math.max(1, rows) * 1.5 + 1}rem` },
41883
41893
  onInput: commit,
41884
41894
  onBlur: handleBlur,
41895
+ onMouseDown: handleMouseDown,
41885
41896
  onClick: handleClick,
41886
41897
  onKeyDown: handleKeyDown,
41887
41898
  onCopy: handleCopy,
@@ -41896,6 +41907,7 @@ function ExpressionField({
41896
41907
  CallEditor,
41897
41908
  {
41898
41909
  raw: editing.raw,
41910
+ anchor: editing.el,
41899
41911
  rect: editing.rect,
41900
41912
  nameOf: callLabel,
41901
41913
  labelFor,
@@ -41910,6 +41922,7 @@ function ExpressionField({
41910
41922
  }
41911
41923
  function CallEditor({
41912
41924
  raw,
41925
+ anchor,
41913
41926
  rect,
41914
41927
  nameOf,
41915
41928
  labelFor,
@@ -41921,13 +41934,27 @@ function CallEditor({
41921
41934
  const [path, setPath] = (0, import_react188.useState)([]);
41922
41935
  const [rawMode, setRawMode] = (0, import_react188.useState)(false);
41923
41936
  const panelRef = (0, import_react188.useRef)(null);
41937
+ const onApplyRef = (0, import_react188.useRef)(onApply);
41938
+ onApplyRef.current = onApply;
41939
+ const draftRef = (0, import_react188.useRef)(draft);
41940
+ draftRef.current = draft;
41924
41941
  (0, import_react188.useEffect)(() => {
41925
41942
  const onKey = (e) => {
41926
41943
  if (e.key === "Escape") onCancel();
41927
41944
  };
41945
+ const onPointerDown = (e) => {
41946
+ const target = e.target;
41947
+ if (panelRef.current?.contains(target)) return;
41948
+ if (anchor.contains(target)) return;
41949
+ onApplyRef.current(draftRef.current);
41950
+ };
41928
41951
  document.addEventListener("keydown", onKey);
41929
- return () => document.removeEventListener("keydown", onKey);
41930
- }, [onCancel]);
41952
+ document.addEventListener("mousedown", onPointerDown, true);
41953
+ return () => {
41954
+ document.removeEventListener("keydown", onKey);
41955
+ document.removeEventListener("mousedown", onPointerDown, true);
41956
+ };
41957
+ }, [anchor, onCancel]);
41931
41958
  const current = callAt(draft, path);
41932
41959
  const signature = current ? resolveCall?.(current.name) : void 0;
41933
41960
  const names = signature?.args ?? [];
@@ -41938,6 +41965,13 @@ function CallEditor({
41938
41965
  if (at) crumbs.push({ label: nameOf(at.name), path: path.slice(0, i) });
41939
41966
  }
41940
41967
  const setArg = (index, next) => setDraft((d) => replaceArgument(d, [...path, index], next));
41968
+ const removeArg = (index) => setDraft((d) => {
41969
+ const at = callAt(d, path);
41970
+ if (!at) return d;
41971
+ const next = at.args.filter((_, i) => i !== index);
41972
+ const rebuilt = path.length === 0 ? formatCall(at.name, next) : `${at.name}(${next.join(", ")})`;
41973
+ return path.length === 0 ? rebuilt : replaceArgument(d, path, rebuilt);
41974
+ });
41941
41975
  const dropInto = (index) => (e) => {
41942
41976
  const dropped = e.dataTransfer.getData("application/x-fx-insert");
41943
41977
  if (!dropped) return;
@@ -41997,7 +42031,20 @@ function CallEditor({
41997
42031
  return (
41998
42032
  // eslint-disable-next-line react/no-array-index-key
41999
42033
  /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-row", children: [
42000
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { id: `arg-${index}-label`, children: rowLabel }),
42034
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { className: "ods-expression-field__editor-row-head", children: [
42035
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { id: `arg-${index}-label`, children: rowLabel }),
42036
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42037
+ "button",
42038
+ {
42039
+ type: "button",
42040
+ className: "ods-expression-field__editor-remove",
42041
+ "aria-label": `Remove ${rowLabel}`,
42042
+ title: "Remove this argument",
42043
+ onClick: () => removeArg(index),
42044
+ children: "\u2715"
42045
+ }
42046
+ )
42047
+ ] }),
42001
42048
  nested ? /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42002
42049
  "div",
42003
42050
  {
@@ -42060,14 +42107,14 @@ function CallEditor({
42060
42107
  "button",
42061
42108
  {
42062
42109
  type: "button",
42063
- className: "ods-expression-field__editor-link",
42110
+ className: "ods-expression-field__editor-add",
42064
42111
  onClick: () => setDraft((d) => {
42065
42112
  const at = callAt(d, path);
42066
42113
  if (!at) return d;
42067
42114
  const next = [...at.args, '""'];
42068
42115
  return path.length === 0 ? formatCall(at.name, next) : replaceArgument(d, path, `${at.name}(${next.join(", ")})`);
42069
42116
  }),
42070
- children: "+ argument"
42117
+ children: "+ Add argument"
42071
42118
  }
42072
42119
  )
42073
42120
  ] }),