@timeax/service-builder 0.0.9 → 0.0.11

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.js CHANGED
@@ -4234,6 +4234,8 @@ import { LuTags as LuTags2 } from "react-icons/lu";
4234
4234
  import { MdOutlineRadioButtonChecked as MdOutlineRadioButtonChecked2 } from "react-icons/md";
4235
4235
  import { RxInput as RxInput2 } from "react-icons/rx";
4236
4236
  import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
4237
+ var ACTIVE_NODE_RING_CLASS = "ring-2 ring-sky-300 shadow-lg shadow-sky-300/20 dark:ring-sky-400";
4238
+ var HIGHLIGHT_NODE_OUTLINE_CLASS = "outline-2 outline-solid outline-amber-300 dark:outline-amber-200";
4237
4239
  function NodeShell({
4238
4240
  label,
4239
4241
  icon,
@@ -4264,7 +4266,7 @@ function NodeShell({
4264
4266
  isManualHighlighted ? "manual-highlighted" : "",
4265
4267
  focusDimLevel && focusDimLevel !== "none" ? `dim-${focusDimLevel}` : ""
4266
4268
  ].filter(Boolean).join(" "),
4267
- className: "group relative min-w-44 rounded-lg bg-white p-3 ring-1 ring-slate-200 shadow-[0_4px_12px_rgba(0,0,0,0.05)] transition-all duration-200 dark:bg-slate-900 dark:ring-slate-700 " + (selected ? "ring-2 ring-blue-500 shadow-lg shadow-blue-500/20 " : "hover:shadow-lg ") + (isActiveNode ? "ring-2 ring-blue-500 shadow-lg shadow-blue-500/25 " : "") + (isCurrentTag ? "ring-2 ring-emerald-500 bg-emerald-50/70 shadow-lg shadow-emerald-500/25 dark:bg-emerald-500/10 " : "") + (isVisibleGroupField ? "ring-2 ring-emerald-300 bg-emerald-50/35 dark:bg-emerald-500/5 " : "") + (isRelatedTag ? "ring-1 ring-teal-300 bg-teal-50/25 dark:bg-teal-500/8 " : "") + (isManualHighlighted ? "outline-2 outline-amber-400 outline-solid " : "") + (draggingService && canAssignService2 ? "border border-dashed border-emerald-400 " : "") + (!canAssignService2 && draggingService ? "opacity-70 " : "") + dimClass,
4269
+ className: "group relative min-w-44 rounded-lg bg-white p-3 ring-1 ring-slate-200 shadow-[0_4px_12px_rgba(0,0,0,0.05)] transition-all duration-200 dark:bg-slate-900 dark:ring-slate-700 " + (selected ? `${ACTIVE_NODE_RING_CLASS} ` : "hover:shadow-lg ") + (isActiveNode ? `${ACTIVE_NODE_RING_CLASS} ` : "") + (isCurrentTag ? "ring-2 ring-emerald-500 bg-emerald-50/70 shadow-lg shadow-emerald-500/25 dark:bg-emerald-500/10 " : "") + (isVisibleGroupField ? "ring-2 ring-emerald-300 bg-emerald-50/35 dark:bg-emerald-500/5 " : "") + (isRelatedTag ? "ring-1 ring-teal-300 bg-teal-50/25 dark:bg-teal-500/8 " : "") + (isManualHighlighted ? `${HIGHLIGHT_NODE_OUTLINE_CLASS} ` : "") + (draggingService && canAssignService2 ? "border border-dashed border-emerald-400 " : "") + (!canAssignService2 && draggingService ? "opacity-70 " : "") + dimClass,
4268
4270
  onDragOver: (event) => {
4269
4271
  if (!canAcceptDropPayload?.(event.dataTransfer)) return;
4270
4272
  event.preventDefault();
@@ -4361,7 +4363,7 @@ function OptionNode(props) {
4361
4363
  props.data.isManualHighlighted ? "manual-highlighted" : "",
4362
4364
  props.data.focusDimLevel && props.data.focusDimLevel !== "none" ? `dim-${props.data.focusDimLevel}` : ""
4363
4365
  ].filter(Boolean).join(" "),
4364
- className: "relative rounded-full border px-4 py-1.5 text-sm bg-white text-slate-800 transition dark:bg-slate-900 dark:text-slate-200 " + (props.selected ? "border-blue-500 bg-blue-50 text-blue-700 dark:bg-blue-500/15 " : "border-slate-300 dark:border-slate-700 ") + (props.data.isActiveNode ? "ring-2 ring-blue-500 shadow-lg shadow-blue-500/25 " : "") + (props.data.isCurrentTag ? "ring-2 ring-emerald-500 bg-emerald-50/70 dark:bg-emerald-500/10 " : "") + (props.data.isVisibleGroupField ? "ring-2 ring-emerald-300 bg-emerald-50/35 dark:bg-emerald-500/5 " : "") + (props.data.isRelatedTag ? "ring-1 ring-teal-300 bg-teal-50/25 dark:bg-teal-500/8 " : "") + (props.data.isManualHighlighted ? "outline-2 outline-solid outline-amber-400 " : "") + (props.data.focusDimLevel === "soft" ? "opacity-80 " : props.data.focusDimLevel === "medium" ? "opacity-[0.55] " : props.data.focusDimLevel === "strong" ? "opacity-35 " : ""),
4366
+ className: "relative rounded-full border px-4 py-1.5 text-sm bg-white text-slate-800 transition dark:bg-slate-900 dark:text-slate-200 " + (props.selected ? "border-sky-300 bg-sky-50 text-sky-700 dark:bg-sky-500/15 dark:border-sky-400 " : "border-slate-300 dark:border-slate-700 ") + (props.data.isActiveNode ? `${ACTIVE_NODE_RING_CLASS} ` : "") + (props.data.isCurrentTag ? "ring-2 ring-emerald-500 bg-emerald-50/70 dark:bg-emerald-500/10 " : "") + (props.data.isVisibleGroupField ? "ring-2 ring-emerald-300 bg-emerald-50/35 dark:bg-emerald-500/5 " : "") + (props.data.isRelatedTag ? "ring-1 ring-teal-300 bg-teal-50/25 dark:bg-teal-500/8 " : "") + (props.data.isManualHighlighted ? `${HIGHLIGHT_NODE_OUTLINE_CLASS} ` : "") + (props.data.focusDimLevel === "soft" ? "opacity-80 " : props.data.focusDimLevel === "medium" ? "opacity-[0.55] " : props.data.focusDimLevel === "strong" ? "opacity-35 " : ""),
4365
4367
  onDragOver: (event) => {
4366
4368
  if (!props.data.canAcceptDropPayload?.(event.dataTransfer)) return;
4367
4369
  event.preventDefault();
@@ -4388,14 +4390,20 @@ function OptionNode(props) {
4388
4390
  function CommentNode(props) {
4389
4391
  const thread = props.data.thread;
4390
4392
  const main = thread?.messages?.find((message) => message.isMain) ?? thread?.messages?.[0];
4391
- return /* @__PURE__ */ jsxs11("div", { className: "h-48 w-64 rounded-lg border border-[#E0E0E0] bg-[#FEFBEA] shadow-md transition-all hover:shadow-lg dark:border-[#555] dark:bg-[#4a4a38]", children: [
4392
- /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2 border-b border-[#E0E0E0]/70 px-3 py-2 text-xs font-medium text-slate-600 dark:border-[#555] dark:text-slate-300", children: [
4393
- /* @__PURE__ */ jsx15(BsChatSquareQuote2, {}),
4394
- /* @__PURE__ */ jsx15("span", { children: main?.authorName ?? "Comment" })
4395
- ] }),
4396
- /* @__PURE__ */ jsx15("div", { className: "px-3 py-2 text-sm leading-5 text-slate-700 dark:text-slate-200", children: main?.body ?? "" }),
4397
- /* @__PURE__ */ jsx15("div", { className: "absolute bottom-2 right-2 text-[10px] uppercase tracking-[0.14em] text-slate-400", children: thread?.resolved ? "Resolved" : "Open" })
4398
- ] });
4393
+ return /* @__PURE__ */ jsxs11(
4394
+ "div",
4395
+ {
4396
+ className: "h-48 w-64 rounded-lg border border-[#E0E0E0] bg-[#FEFBEA] shadow-md transition-all hover:shadow-lg dark:border-[#555] dark:bg-[#4a4a38] " + (props.selected ? `${ACTIVE_NODE_RING_CLASS} ` : ""),
4397
+ children: [
4398
+ /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2 border-b border-[#E0E0E0]/70 px-3 py-2 text-xs font-medium text-slate-600 dark:border-[#555] dark:text-slate-300", children: [
4399
+ /* @__PURE__ */ jsx15(BsChatSquareQuote2, {}),
4400
+ /* @__PURE__ */ jsx15("span", { children: main?.authorName ?? "Comment" })
4401
+ ] }),
4402
+ /* @__PURE__ */ jsx15("div", { className: "px-3 py-2 text-sm leading-5 text-slate-700 dark:text-slate-200", children: main?.body ?? "" }),
4403
+ /* @__PURE__ */ jsx15("div", { className: "absolute bottom-2 right-2 text-[10px] uppercase tracking-[0.14em] text-slate-400", children: thread?.resolved ? "Resolved" : "Open" })
4404
+ ]
4405
+ }
4406
+ );
4399
4407
  }
4400
4408
  var nodeTypes = {
4401
4409
  tag: TagNode,
@@ -9182,6 +9190,68 @@ import { LuTags as LuTags3 } from "react-icons/lu";
9182
9190
  import { MdOutlineAdd } from "react-icons/md";
9183
9191
  import { RxInput as RxInput3 } from "react-icons/rx";
9184
9192
  import { VscNewFolder } from "react-icons/vsc";
9193
+
9194
+ // src/panels/left/layers/reorder.ts
9195
+ function isOptionId(id) {
9196
+ return id.startsWith("o:");
9197
+ }
9198
+ function parentPathKey(path) {
9199
+ if (!path?.length) return "";
9200
+ return path.map(String).join("/");
9201
+ }
9202
+ function canDropSameParentOnly(args) {
9203
+ if (!args.from) return true;
9204
+ return parentPathKey(args.from.parentPath) === parentPathKey(args.to.parentPath);
9205
+ }
9206
+ function canDropFieldsSameParentOnly(args) {
9207
+ if (!canDropSameParentOnly(args)) return false;
9208
+ if (!args.dragged) return true;
9209
+ const draggedId = String(args.dragged.id);
9210
+ const parentId = args.to.parent ? String(args.to.parent.id) : "";
9211
+ if (isOptionId(draggedId)) {
9212
+ return parentId.startsWith("f:");
9213
+ }
9214
+ return parentId === "";
9215
+ }
9216
+ function isReorderLike(detail) {
9217
+ return detail.type === "move" || detail.type === "reorder";
9218
+ }
9219
+ function applyTagTreeReorder(detail, editor) {
9220
+ if (!isReorderLike(detail)) return false;
9221
+ detail.preventDefault();
9222
+ editor.placeNode(String(detail.node.id), { index: detail.to.index });
9223
+ return true;
9224
+ }
9225
+ function applyFieldTreeReorder(detail, args) {
9226
+ if (!isReorderLike(detail)) return false;
9227
+ detail.preventDefault();
9228
+ const nodeId = String(detail.node.id);
9229
+ if (isOptionId(nodeId)) {
9230
+ args.editor.placeOption(nodeId, { index: detail.to.index });
9231
+ return true;
9232
+ }
9233
+ const writeAndPlace = () => {
9234
+ args.editor.patchProps?.((props) => {
9235
+ const map = props.order_for_tags ??= {};
9236
+ map[args.currentTagId] = [...args.contextFieldOrder];
9237
+ });
9238
+ args.editor.placeNode(nodeId, {
9239
+ scopeTagId: args.currentTagId,
9240
+ index: detail.to.index
9241
+ });
9242
+ };
9243
+ if (typeof args.editor.transact === "function" && typeof args.editor.patchProps === "function") {
9244
+ args.editor.transact("Reorder field in context", writeAndPlace);
9245
+ return true;
9246
+ }
9247
+ args.editor.placeNode(nodeId, {
9248
+ scopeTagId: args.currentTagId,
9249
+ index: detail.to.index
9250
+ });
9251
+ return true;
9252
+ }
9253
+
9254
+ // src/panels/left/layers/index.tsx
9185
9255
  import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
9186
9256
  function filterTree(nodes, query) {
9187
9257
  if (!query.trim()) return nodes;
@@ -9221,6 +9291,7 @@ var Layers = () => {
9221
9291
  canvas.api.addToSelection(ids);
9222
9292
  };
9223
9293
  const handleTagChange = (_next, detail) => {
9294
+ if (applyTagTreeReorder(detail, canvas.api.editor)) return;
9224
9295
  detail.preventDefault?.();
9225
9296
  if (detail.type === "update") {
9226
9297
  canvas.api.editor.editLabel(detail.node.id, detail.node.title);
@@ -9232,6 +9303,13 @@ var Layers = () => {
9232
9303
  }
9233
9304
  };
9234
9305
  const handleFieldChange = (_next, detail) => {
9306
+ if (applyFieldTreeReorder(detail, {
9307
+ editor: canvas.api.editor,
9308
+ currentTagId: canvas.api.selection.currentTag?.() ?? "t:root",
9309
+ contextFieldOrder: canvas.layers.fields.map((node) => String(node.id)).filter((id) => !id.startsWith("o:"))
9310
+ })) {
9311
+ return;
9312
+ }
9235
9313
  if (detail.type === "update") {
9236
9314
  detail.preventDefault();
9237
9315
  canvas.api.editor.editLabel(detail.node.id, detail.node.title);
@@ -9326,6 +9404,7 @@ var Layers = () => {
9326
9404
  value: canvas.selectionInfo.tagIds,
9327
9405
  rowClassName: "mb-1 rounded-xl border border-transparent px-1 hover:border-slate-200 hover:bg-slate-50 dark:hover:border-slate-800 dark:hover:bg-slate-900/70",
9328
9406
  data: tags,
9407
+ canDrop: canDropSameParentOnly,
9329
9408
  activeClassName: (e) => e.node.id === canvas.activeId ? "border-blue-300! bg-blue-50/80 dark:border-blue-500/40! dark:bg-blue-500/10!" : "",
9330
9409
  onChange: handleTagChange,
9331
9410
  onContextMenu: (detail) => {
@@ -9446,6 +9525,7 @@ var Layers = () => {
9446
9525
  value: [...canvas.selectionInfo.fieldIds, ...canvas.selectionInfo.optionIds],
9447
9526
  rowClassName: "mb-1 rounded-xl border border-transparent px-1 hover:border-slate-200 hover:bg-slate-50 dark:hover:border-slate-800 dark:hover:bg-slate-900/70",
9448
9527
  data: fields,
9528
+ canDrop: canDropFieldsSameParentOnly,
9449
9529
  onChange: handleFieldChange,
9450
9530
  onContextMenu: (detail) => {
9451
9531
  const nodeId = String(detail.node.id);
@@ -10096,7 +10176,7 @@ var Comments = () => {
10096
10176
  branchId: ws.branches.currentId
10097
10177
  }).finally(() => setValue(""));
10098
10178
  },
10099
- className: "cursor-pointer rounded-xl bg-blue-600 px-3 py-2 text-white transition hover:bg-blue-700",
10179
+ className: "cursor-pointer rounded-full bg-blue-600 px-2 py-2 text-white transition hover:bg-blue-700",
10100
10180
  disabled: !ws.boot.isReady,
10101
10181
  children: /* @__PURE__ */ jsx45(MdOutlineSend, {})
10102
10182
  }