sa2kit 1.6.89 → 1.6.90

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.
Files changed (67) hide show
  1. package/dist/{booking-473Db8Bo.d.mts → booking-BH7HM0D0.d.mts} +1 -0
  2. package/dist/{booking-473Db8Bo.d.ts → booking-BH7HM0D0.d.ts} +1 -0
  3. package/dist/{bookingAdminService-DqQ7hEGw.d.ts → bookingAdminService-nr1vOp6I.d.ts} +1 -1
  4. package/dist/{bookingAdminService-SBX4JA_U.d.mts → bookingAdminService-pvk2MY1r.d.mts} +1 -1
  5. package/dist/{client-Bkn6mRI7.d.ts → client-UDQ7uMFA.d.ts} +1 -1
  6. package/dist/{client-exYn2Qla.d.mts → client-jOToHJEx.d.mts} +1 -1
  7. package/dist/festivalCard/index.js +114 -0
  8. package/dist/festivalCard/index.js.map +1 -1
  9. package/dist/festivalCard/index.mjs +115 -1
  10. package/dist/festivalCard/index.mjs.map +1 -1
  11. package/dist/festivalCard/web/index.js +114 -0
  12. package/dist/festivalCard/web/index.js.map +1 -1
  13. package/dist/festivalCard/web/index.mjs +115 -1
  14. package/dist/festivalCard/web/index.mjs.map +1 -1
  15. package/dist/{index-z15F7afa.d.mts → index-Bs06cHTn.d.mts} +2 -2
  16. package/dist/{index-BJpxvH7X.d.ts → index-C-oNM7Gv.d.ts} +1 -1
  17. package/dist/{index-XTV6IU-M.d.ts → index-CUab5EBV.d.ts} +2 -2
  18. package/dist/{index-Cum2EknK.d.mts → index-CYDb3AKs.d.mts} +1 -1
  19. package/dist/{index-DyxLpkmm.d.mts → index-DBB4ad0S.d.mts} +2 -2
  20. package/dist/{index-CdTIsNsy.d.ts → index-DBHwbXrv.d.ts} +2 -2
  21. package/dist/index.js +114 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +114 -0
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/showmasterpiece/core.d.mts +3 -3
  26. package/dist/showmasterpiece/core.d.ts +3 -3
  27. package/dist/showmasterpiece/db.d.mts +2 -0
  28. package/dist/showmasterpiece/db.d.ts +2 -0
  29. package/dist/showmasterpiece/db.js +4 -2
  30. package/dist/showmasterpiece/db.js.map +1 -1
  31. package/dist/showmasterpiece/db.mjs +4 -2
  32. package/dist/showmasterpiece/db.mjs.map +1 -1
  33. package/dist/showmasterpiece/index.js +18 -2
  34. package/dist/showmasterpiece/index.js.map +1 -1
  35. package/dist/showmasterpiece/index.mjs +18 -2
  36. package/dist/showmasterpiece/index.mjs.map +1 -1
  37. package/dist/showmasterpiece/logic/index.d.mts +2 -2
  38. package/dist/showmasterpiece/logic/index.d.ts +2 -2
  39. package/dist/showmasterpiece/server/index.js +4 -2
  40. package/dist/showmasterpiece/server/index.js.map +1 -1
  41. package/dist/showmasterpiece/server/index.mjs +4 -2
  42. package/dist/showmasterpiece/server/index.mjs.map +1 -1
  43. package/dist/showmasterpiece/service/api/index.d.mts +1 -1
  44. package/dist/showmasterpiece/service/api/index.d.ts +1 -1
  45. package/dist/showmasterpiece/service/client-business/index.d.mts +3 -3
  46. package/dist/showmasterpiece/service/client-business/index.d.ts +3 -3
  47. package/dist/showmasterpiece/service/index.d.mts +6 -6
  48. package/dist/showmasterpiece/service/index.d.ts +6 -6
  49. package/dist/showmasterpiece/service/miniapp/index.d.mts +2 -2
  50. package/dist/showmasterpiece/service/miniapp/index.d.ts +2 -2
  51. package/dist/showmasterpiece/service/web/index.d.mts +4 -4
  52. package/dist/showmasterpiece/service/web/index.d.ts +4 -4
  53. package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -2
  54. package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -2
  55. package/dist/showmasterpiece/ui/miniapp/index.js +4 -3
  56. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  57. package/dist/showmasterpiece/ui/miniapp/index.mjs +4 -3
  58. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  59. package/dist/showmasterpiece/ui/web/index.js +18 -2
  60. package/dist/showmasterpiece/ui/web/index.js.map +1 -1
  61. package/dist/showmasterpiece/ui/web/index.mjs +18 -2
  62. package/dist/showmasterpiece/ui/web/index.mjs.map +1 -1
  63. package/dist/showmasterpiece/web/index.js +18 -2
  64. package/dist/showmasterpiece/web/index.js.map +1 -1
  65. package/dist/showmasterpiece/web/index.mjs +18 -2
  66. package/dist/showmasterpiece/web/index.mjs.map +1 -1
  67. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -7489,9 +7489,24 @@ var createImageElement = (pageIndex) => ({
7489
7489
  });
7490
7490
  var FestivalCardConfigEditor = ({ value, onChange }) => {
7491
7491
  const [activePageIndex, setActivePageIndex] = useState(0);
7492
+ const [activeElementId, setActiveElementId] = useState(null);
7493
+ const [draggingElementId, setDraggingElementId] = useState(null);
7494
+ const previewRef = useRef(null);
7495
+ const dragStateRef = useRef(null);
7492
7496
  const page = value.pages[activePageIndex];
7493
7497
  const canEditPage = Boolean(page);
7494
7498
  const pageOptions = useMemo(() => value.pages.map((_, index) => index), [value.pages]);
7499
+ const backgroundElement = useMemo(
7500
+ () => page?.elements.find(
7501
+ (element) => element.type === "image" && Boolean(element.isBackground)
7502
+ ),
7503
+ [page]
7504
+ );
7505
+ const foregroundElements = useMemo(
7506
+ () => (page?.elements ?? []).filter((element) => !(element.type === "image" && element.isBackground)),
7507
+ [page]
7508
+ );
7509
+ const clampPercent = (valueToClamp) => Math.max(0, Math.min(100, Number.isFinite(valueToClamp) ? valueToClamp : 0));
7495
7510
  const handlePageCountChange = (nextRaw) => {
7496
7511
  const next = Number.isFinite(nextRaw) ? Math.max(1, Math.min(12, Math.floor(nextRaw))) : value.pages.length;
7497
7512
  const resized = resizeFestivalCardPages(value, next);
@@ -7528,6 +7543,38 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
7528
7543
  pages: value.pages.map((p, index) => index === activePageIndex ? { ...p, ...patch } : p)
7529
7544
  });
7530
7545
  };
7546
+ const moveElementWithPointer = (elementId, clientX, clientY, rect) => {
7547
+ const bounds = rect || previewRef.current?.getBoundingClientRect();
7548
+ if (!bounds || bounds.width <= 0 || bounds.height <= 0) return;
7549
+ const x = clampPercent((clientX - bounds.left) / bounds.width * 100);
7550
+ const y = clampPercent((clientY - bounds.top) / bounds.height * 100);
7551
+ updateElement(elementId, { x, y });
7552
+ };
7553
+ const handleElementPointerDown = (event, elementId) => {
7554
+ if (!previewRef.current) return;
7555
+ event.preventDefault();
7556
+ const rect = previewRef.current.getBoundingClientRect();
7557
+ dragStateRef.current = {
7558
+ pointerId: event.pointerId,
7559
+ elementId,
7560
+ rect
7561
+ };
7562
+ event.currentTarget.setPointerCapture(event.pointerId);
7563
+ setActiveElementId(elementId);
7564
+ setDraggingElementId(elementId);
7565
+ moveElementWithPointer(elementId, event.clientX, event.clientY, rect);
7566
+ };
7567
+ const handlePreviewPointerMove = (event) => {
7568
+ const dragState = dragStateRef.current;
7569
+ if (!dragState || dragState.pointerId !== event.pointerId) return;
7570
+ moveElementWithPointer(dragState.elementId, event.clientX, event.clientY, dragState.rect);
7571
+ };
7572
+ const endPointerDrag = (event) => {
7573
+ const dragState = dragStateRef.current;
7574
+ if (!dragState || dragState.pointerId !== event.pointerId) return;
7575
+ dragStateRef.current = null;
7576
+ setDraggingElementId(null);
7577
+ };
7531
7578
  const numberFieldClassName = "w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100";
7532
7579
  return /* @__PURE__ */ React69__default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm" }, /* @__PURE__ */ React69__default.createElement("div", { className: "grid gap-3" }, /* @__PURE__ */ React69__default.createElement("label", { className: "grid gap-1.5" }, /* @__PURE__ */ React69__default.createElement("span", { className: "text-sm font-medium text-slate-700" }, "\u9875\u9762\u6570\u91CF"), /* @__PURE__ */ React69__default.createElement(
7533
7580
  "input",
@@ -7621,6 +7668,73 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
7621
7668
  className: "rounded-lg bg-sky-600 px-3 py-2 text-sm font-medium text-white"
7622
7669
  },
7623
7670
  "+ \u56FE\u7247"
7671
+ )), /* @__PURE__ */ React69__default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ React69__default.createElement("div", { className: "mb-2 flex items-center justify-between" }, /* @__PURE__ */ React69__default.createElement("div", { className: "text-xs font-semibold tracking-wide text-slate-500" }, "\u62D6\u62FD\u5B9A\u4F4D\uFF08\u76F4\u63A5\u62D6\u52A8\u5143\u7D20\u8C03\u6574 X / Y\uFF09"), /* @__PURE__ */ React69__default.createElement("div", { className: "text-xs text-slate-500" }, draggingElementId ? "\u62D6\u62FD\u4E2D..." : "\u53EF\u62D6\u62FD")), /* @__PURE__ */ React69__default.createElement(
7672
+ "div",
7673
+ {
7674
+ ref: previewRef,
7675
+ onPointerMove: handlePreviewPointerMove,
7676
+ onPointerUp: endPointerDrag,
7677
+ onPointerCancel: endPointerDrag,
7678
+ className: "relative aspect-[3/4] w-full touch-none overflow-hidden rounded-xl border border-slate-300 bg-slate-900",
7679
+ style: {
7680
+ backgroundColor: page?.background?.color || "#0f172a",
7681
+ backgroundImage: backgroundElement ? `url(${backgroundElement.src})` : page?.background?.image ? `url(${page.background.image})` : void 0,
7682
+ backgroundSize: "cover",
7683
+ backgroundPosition: "center"
7684
+ }
7685
+ },
7686
+ /* @__PURE__ */ React69__default.createElement("div", { className: "absolute inset-0 bg-slate-950/20" }),
7687
+ foregroundElements.map((element) => {
7688
+ const isActive = activeElementId === element.id;
7689
+ const isDragging = draggingElementId === element.id;
7690
+ return /* @__PURE__ */ React69__default.createElement(
7691
+ "div",
7692
+ {
7693
+ key: element.id,
7694
+ role: "button",
7695
+ tabIndex: 0,
7696
+ onPointerDown: (event) => handleElementPointerDown(event, element.id),
7697
+ onClick: () => setActiveElementId(element.id),
7698
+ className: `absolute select-none rounded-md ${isDragging ? "cursor-grabbing" : "cursor-grab"} ${isActive ? "ring-2 ring-sky-300" : "ring-1 ring-white/40"}`,
7699
+ style: {
7700
+ left: `${element.x}%`,
7701
+ top: `${element.y}%`,
7702
+ width: `${element.width ?? 70}%`,
7703
+ height: element.height ? `${element.height}%` : void 0,
7704
+ transform: "translate(-50%, -50%)",
7705
+ zIndex: isActive ? 4 : 2
7706
+ }
7707
+ },
7708
+ element.type === "text" ? /* @__PURE__ */ React69__default.createElement(
7709
+ "div",
7710
+ {
7711
+ className: "w-full rounded-md bg-black/20 px-2 py-1",
7712
+ style: {
7713
+ color: element.color || "#f8fafc",
7714
+ fontSize: element.fontSize || 18,
7715
+ fontWeight: element.fontWeight || 500,
7716
+ fontFamily: element.fontFamily || "inherit",
7717
+ textAlign: element.align || "left",
7718
+ lineHeight: 1.35,
7719
+ whiteSpace: "pre-wrap"
7720
+ }
7721
+ },
7722
+ element.content || "\u6587\u672C"
7723
+ ) : /* @__PURE__ */ React69__default.createElement(
7724
+ "img",
7725
+ {
7726
+ src: element.src,
7727
+ alt: element.alt || "festival-card-image",
7728
+ draggable: false,
7729
+ className: "h-full w-full pointer-events-none",
7730
+ style: {
7731
+ objectFit: element.fit || "cover",
7732
+ borderRadius: element.borderRadius || 0
7733
+ }
7734
+ }
7735
+ )
7736
+ );
7737
+ })
7624
7738
  )), /* @__PURE__ */ React69__default.createElement("div", { className: "grid max-h-[340px] gap-2.5 overflow-auto pr-1" }, (page?.elements ?? []).map((element) => /* @__PURE__ */ React69__default.createElement("div", { key: element.id, className: "rounded-xl border border-slate-200 bg-slate-50 p-3" }, /* @__PURE__ */ React69__default.createElement("div", { className: "mb-2 flex items-center justify-between" }, /* @__PURE__ */ React69__default.createElement("div", { className: "text-xs font-semibold tracking-wide text-slate-500" }, element.type.toUpperCase()), /* @__PURE__ */ React69__default.createElement(
7625
7739
  "button",
7626
7740
  {