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
@@ -1,7 +1,7 @@
1
- import { a as CollectionSummary, b as CreateBookingRequest, c as Booking, d as BatchBookingRequest, e as BatchBookingResponse, f as BookingListParams, g as BookingListResponse } from './booking-473Db8Bo.js';
1
+ import { a as CollectionSummary, b as CreateBookingRequest, c as Booking, d as BatchBookingRequest, e as BatchBookingResponse, f as BookingListParams, g as BookingListResponse } from './booking-BH7HM0D0.js';
2
2
  import { P as PopupConfig } from './popup-ClCAZtzk.js';
3
3
  import { CollectionOverview } from './showmasterpiece/service/api/index.js';
4
- import { i as index$1 } from './index-XTV6IU-M.js';
4
+ import { i as index$1 } from './index-CUab5EBV.js';
5
5
 
6
6
  declare const DEFAULT_WEB_BASE_URL = "";
7
7
  declare const getCollectionsOverview: (baseUrl?: string) => Promise<CollectionOverview[]>;
package/dist/index.js CHANGED
@@ -7514,9 +7514,24 @@ var createImageElement = (pageIndex) => ({
7514
7514
  });
7515
7515
  var FestivalCardConfigEditor = ({ value, onChange }) => {
7516
7516
  const [activePageIndex, setActivePageIndex] = React69.useState(0);
7517
+ const [activeElementId, setActiveElementId] = React69.useState(null);
7518
+ const [draggingElementId, setDraggingElementId] = React69.useState(null);
7519
+ const previewRef = React69.useRef(null);
7520
+ const dragStateRef = React69.useRef(null);
7517
7521
  const page = value.pages[activePageIndex];
7518
7522
  const canEditPage = Boolean(page);
7519
7523
  const pageOptions = React69.useMemo(() => value.pages.map((_, index) => index), [value.pages]);
7524
+ const backgroundElement = React69.useMemo(
7525
+ () => page?.elements.find(
7526
+ (element) => element.type === "image" && Boolean(element.isBackground)
7527
+ ),
7528
+ [page]
7529
+ );
7530
+ const foregroundElements = React69.useMemo(
7531
+ () => (page?.elements ?? []).filter((element) => !(element.type === "image" && element.isBackground)),
7532
+ [page]
7533
+ );
7534
+ const clampPercent = (valueToClamp) => Math.max(0, Math.min(100, Number.isFinite(valueToClamp) ? valueToClamp : 0));
7520
7535
  const handlePageCountChange = (nextRaw) => {
7521
7536
  const next = Number.isFinite(nextRaw) ? Math.max(1, Math.min(12, Math.floor(nextRaw))) : value.pages.length;
7522
7537
  const resized = resizeFestivalCardPages(value, next);
@@ -7553,6 +7568,38 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
7553
7568
  pages: value.pages.map((p, index) => index === activePageIndex ? { ...p, ...patch } : p)
7554
7569
  });
7555
7570
  };
7571
+ const moveElementWithPointer = (elementId, clientX, clientY, rect) => {
7572
+ const bounds = rect || previewRef.current?.getBoundingClientRect();
7573
+ if (!bounds || bounds.width <= 0 || bounds.height <= 0) return;
7574
+ const x = clampPercent((clientX - bounds.left) / bounds.width * 100);
7575
+ const y = clampPercent((clientY - bounds.top) / bounds.height * 100);
7576
+ updateElement(elementId, { x, y });
7577
+ };
7578
+ const handleElementPointerDown = (event, elementId) => {
7579
+ if (!previewRef.current) return;
7580
+ event.preventDefault();
7581
+ const rect = previewRef.current.getBoundingClientRect();
7582
+ dragStateRef.current = {
7583
+ pointerId: event.pointerId,
7584
+ elementId,
7585
+ rect
7586
+ };
7587
+ event.currentTarget.setPointerCapture(event.pointerId);
7588
+ setActiveElementId(elementId);
7589
+ setDraggingElementId(elementId);
7590
+ moveElementWithPointer(elementId, event.clientX, event.clientY, rect);
7591
+ };
7592
+ const handlePreviewPointerMove = (event) => {
7593
+ const dragState = dragStateRef.current;
7594
+ if (!dragState || dragState.pointerId !== event.pointerId) return;
7595
+ moveElementWithPointer(dragState.elementId, event.clientX, event.clientY, dragState.rect);
7596
+ };
7597
+ const endPointerDrag = (event) => {
7598
+ const dragState = dragStateRef.current;
7599
+ if (!dragState || dragState.pointerId !== event.pointerId) return;
7600
+ dragStateRef.current = null;
7601
+ setDraggingElementId(null);
7602
+ };
7556
7603
  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";
7557
7604
  return /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm" }, /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "grid gap-3" }, /* @__PURE__ */ React69__namespace.default.createElement("label", { className: "grid gap-1.5" }, /* @__PURE__ */ React69__namespace.default.createElement("span", { className: "text-sm font-medium text-slate-700" }, "\u9875\u9762\u6570\u91CF"), /* @__PURE__ */ React69__namespace.default.createElement(
7558
7605
  "input",
@@ -7646,6 +7693,73 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
7646
7693
  className: "rounded-lg bg-sky-600 px-3 py-2 text-sm font-medium text-white"
7647
7694
  },
7648
7695
  "+ \u56FE\u7247"
7696
+ )), /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "mb-2 flex items-center justify-between" }, /* @__PURE__ */ React69__namespace.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__namespace.default.createElement("div", { className: "text-xs text-slate-500" }, draggingElementId ? "\u62D6\u62FD\u4E2D..." : "\u53EF\u62D6\u62FD")), /* @__PURE__ */ React69__namespace.default.createElement(
7697
+ "div",
7698
+ {
7699
+ ref: previewRef,
7700
+ onPointerMove: handlePreviewPointerMove,
7701
+ onPointerUp: endPointerDrag,
7702
+ onPointerCancel: endPointerDrag,
7703
+ className: "relative aspect-[3/4] w-full touch-none overflow-hidden rounded-xl border border-slate-300 bg-slate-900",
7704
+ style: {
7705
+ backgroundColor: page?.background?.color || "#0f172a",
7706
+ backgroundImage: backgroundElement ? `url(${backgroundElement.src})` : page?.background?.image ? `url(${page.background.image})` : void 0,
7707
+ backgroundSize: "cover",
7708
+ backgroundPosition: "center"
7709
+ }
7710
+ },
7711
+ /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "absolute inset-0 bg-slate-950/20" }),
7712
+ foregroundElements.map((element) => {
7713
+ const isActive = activeElementId === element.id;
7714
+ const isDragging = draggingElementId === element.id;
7715
+ return /* @__PURE__ */ React69__namespace.default.createElement(
7716
+ "div",
7717
+ {
7718
+ key: element.id,
7719
+ role: "button",
7720
+ tabIndex: 0,
7721
+ onPointerDown: (event) => handleElementPointerDown(event, element.id),
7722
+ onClick: () => setActiveElementId(element.id),
7723
+ className: `absolute select-none rounded-md ${isDragging ? "cursor-grabbing" : "cursor-grab"} ${isActive ? "ring-2 ring-sky-300" : "ring-1 ring-white/40"}`,
7724
+ style: {
7725
+ left: `${element.x}%`,
7726
+ top: `${element.y}%`,
7727
+ width: `${element.width ?? 70}%`,
7728
+ height: element.height ? `${element.height}%` : void 0,
7729
+ transform: "translate(-50%, -50%)",
7730
+ zIndex: isActive ? 4 : 2
7731
+ }
7732
+ },
7733
+ element.type === "text" ? /* @__PURE__ */ React69__namespace.default.createElement(
7734
+ "div",
7735
+ {
7736
+ className: "w-full rounded-md bg-black/20 px-2 py-1",
7737
+ style: {
7738
+ color: element.color || "#f8fafc",
7739
+ fontSize: element.fontSize || 18,
7740
+ fontWeight: element.fontWeight || 500,
7741
+ fontFamily: element.fontFamily || "inherit",
7742
+ textAlign: element.align || "left",
7743
+ lineHeight: 1.35,
7744
+ whiteSpace: "pre-wrap"
7745
+ }
7746
+ },
7747
+ element.content || "\u6587\u672C"
7748
+ ) : /* @__PURE__ */ React69__namespace.default.createElement(
7749
+ "img",
7750
+ {
7751
+ src: element.src,
7752
+ alt: element.alt || "festival-card-image",
7753
+ draggable: false,
7754
+ className: "h-full w-full pointer-events-none",
7755
+ style: {
7756
+ objectFit: element.fit || "cover",
7757
+ borderRadius: element.borderRadius || 0
7758
+ }
7759
+ }
7760
+ )
7761
+ );
7762
+ })
7649
7763
  )), /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "grid max-h-[340px] gap-2.5 overflow-auto pr-1" }, (page?.elements ?? []).map((element) => /* @__PURE__ */ React69__namespace.default.createElement("div", { key: element.id, className: "rounded-xl border border-slate-200 bg-slate-50 p-3" }, /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "mb-2 flex items-center justify-between" }, /* @__PURE__ */ React69__namespace.default.createElement("div", { className: "text-xs font-semibold tracking-wide text-slate-500" }, element.type.toUpperCase()), /* @__PURE__ */ React69__namespace.default.createElement(
7650
7764
  "button",
7651
7765
  {