zuljaman-banner-components 1.0.24 → 1.0.26

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.
@@ -74,9 +74,9 @@ const BannerRenderer = ({ bannerStyle, copies = [], bannerSubstyle = 1, logoUrl,
74
74
  copies,
75
75
  sizeMultiplier,
76
76
  });
77
- // Config key for auto-resetting hooks when style/substyle changes
77
+ // Config key for auto-resetting hooks when style/substyle/postType changes
78
78
  // This allows hooks to self-reset without requiring consumer to use key prop
79
- const configKey = `${bannerStyle}-${bannerSubstyle}`;
79
+ const configKey = `${bannerStyle}-${bannerSubstyle}-${postType}`;
80
80
  // Get autoPositioningConfig early (needed for useLineDrawing to initialize completedLines)
81
81
  const autoPositioningConfigForLines = (0, react_1.useMemo)(() => {
82
82
  let baseConfig;
@@ -12,6 +12,7 @@ export interface CopyElementProps {
12
12
  copies: CopyConfig[];
13
13
  config: {
14
14
  copies?: CopyElementConfig[];
15
+ fontSizes?: number[];
15
16
  };
16
17
  styleConfig: {
17
18
  copyFontWeights?: Record<number, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"CopyElement.d.ts","sourceRoot":"","sources":["../../../../src/components/BannerRenderer/components/CopyElement.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CopyElement.d.ts","sourceRoot":"","sources":["../../../../src/components/BannerRenderer/components/CopyElement.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAE/B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IAGrB,MAAM,EAAE;QACN,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,WAAW,EAAE;QACX,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAGF,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGpC,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAG/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAG3D,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,mBAAmB,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACvF,iBAAiB,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC1C,2BAA2B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAC5D,uBAAuB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AA6TD,eAAO,MAAM,WAAW,8CAAmC,CAAC"}
@@ -15,7 +15,7 @@ const shared_1 = require("../../shared");
15
15
  const defaults_1 = require("../../../constants/defaults");
16
16
  const utils_1 = require("../utils");
17
17
  const CopyElementComponent = ({ copy, copyIndex, copies, config, styleConfig, yMultiplier, autoOffsets, sizeMultiplier, fontFamily, draggableMode, creationMode, linkingModeActive, selectedElement, completedLines, drawingFrom, copyRefs, bannerContainerRef, onCopyPositionChange, onCopyRotationChange, onCopyWidthChange, setSelectedElement, setIsDragging, setLiveDragPosition, setAlignmentLines, setProximityLines, handleToggleAutoPositioning, handleCompleteLineTo, handleRotationSnap, handlePositionSnap, calculateAlignments, calculateProximityLines, detectProximityLines, }) => {
18
- var _a, _b, _c, _d, _e, _f, _g, _h;
18
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
19
19
  // Use styleSlot to determine config (0 = first copy, 1 = second copy, etc.)
20
20
  // Fallback to copyIndex for creation mode
21
21
  const styleSlot = copy.styleSlot !== undefined ? copy.styleSlot : copyIndex;
@@ -55,7 +55,9 @@ const CopyElementComponent = ({ copy, copyIndex, copies, config, styleConfig, yM
55
55
  const configWidth = copyConfig === null || copyConfig === void 0 ? void 0 : copyConfig.width;
56
56
  const autoOffset = autoOffsets[styleSlot] || 0;
57
57
  // Get the font size multiplier from copy config (used for both font size and padding scaling)
58
- const copyFontSizeMultiplier = copy.fontSize || 1.0;
58
+ // Priority: copy.fontSize > config.fontSizes[styleSlot] > 1.0
59
+ const configFontSize = (_g = (_f = config.fontSizes) === null || _f === void 0 ? void 0 : _f[styleSlot]) !== null && _g !== void 0 ? _g : 1.0;
60
+ const copyFontSizeMultiplier = (_h = copy.fontSize) !== null && _h !== void 0 ? _h : configFontSize;
59
61
  // Calculate font size
60
62
  // copy.fontSize is now an absolute multiplier, not relative to config
61
63
  // Config fontSize values only set the initial copy.fontSize value
@@ -63,7 +65,7 @@ const CopyElementComponent = ({ copy, copyIndex, copies, config, styleConfig, yM
63
65
  // Get alignment - always prioritize copy's own align property
64
66
  const effectiveAlign = copy.align || (isStyled && copyConfig ? copyConfig.alignment : 'center');
65
67
  // Get font weight - use copy's fontWeight, then config default, then fallback
66
- const effectiveFontWeight = copy.fontWeight || (isStyled ? (((_f = styleConfig.copyFontWeights) === null || _f === void 0 ? void 0 : _f[styleSlot]) || 'normal') : 'normal');
68
+ const effectiveFontWeight = copy.fontWeight || (isStyled ? (((_j = styleConfig.copyFontWeights) === null || _j === void 0 ? void 0 : _j[styleSlot]) || 'normal') : 'normal');
67
69
  // Get font family - prioritize copy's own fontFamily, then global override, then style config
68
70
  const effectiveCopyFontFamily = copy.fontFamily || fontFamily || styleConfig.fontFamily;
69
71
  // Get color properties - prioritize copy's own properties, then substyle config, then defaults
@@ -112,7 +114,7 @@ const CopyElementComponent = ({ copy, copyIndex, copies, config, styleConfig, yM
112
114
  }, children: textElement })) : textElement;
113
115
  // Calculate final position: config position + auto-offset + user adjustment
114
116
  const baseX = isStyled ? configX : 0;
115
- const baseY = isStyled ? (configY * yMultiplier + autoOffset) : 0;
117
+ const baseY = isStyled ? ((configY + autoOffset) * yMultiplier) : 0;
116
118
  // DYNAMIC: Consistent 'copy-N' format for all styleSlots
117
119
  const elementId = `copy-${styleSlot}`;
118
120
  // Plan v30: Check if this element is a TARGET in the chain
@@ -133,7 +135,7 @@ const CopyElementComponent = ({ copy, copyIndex, copies, config, styleConfig, yM
133
135
  const finalX = baseX + (copy.translateX || 0);
134
136
  const finalY = baseY + effectiveTranslateY;
135
137
  const finalWidth = copy.width || configWidth;
136
- const finalRotation = (_g = copy.rotation) !== null && _g !== void 0 ? _g : (isStyled ? ((_h = copyConfig === null || copyConfig === void 0 ? void 0 : copyConfig.rotation) !== null && _h !== void 0 ? _h : 0) : 0);
138
+ const finalRotation = (_k = copy.rotation) !== null && _k !== void 0 ? _k : (isStyled ? ((_l = copyConfig === null || copyConfig === void 0 ? void 0 : copyConfig.rotation) !== null && _l !== void 0 ? _l : 0) : 0);
137
139
  // DEBUG: Log positioning only when final position changes (not on every render)
138
140
  react_1.default.useEffect(() => {
139
141
  console.log(`📍 Copy[${styleSlot}] position changed:`, {
@@ -69,7 +69,7 @@ const VisualGuides = ({ draggableMode, isDragging, selectedElement, alignmentLin
69
69
  const configY = (_e = copyConfig === null || copyConfig === void 0 ? void 0 : copyConfig.y) !== null && _e !== void 0 ? _e : 0;
70
70
  const autoOffset = autoOffsets[styleSlot] || 0;
71
71
  const baseX = isStyled ? configX : 0;
72
- const baseY = isStyled ? (configY * yMultiplier + autoOffset) : 0;
72
+ const baseY = isStyled ? ((configY + autoOffset) * yMultiplier) : 0;
73
73
  const finalX = baseX + (selectedCopy.translateX || 0);
74
74
  const finalY = baseY + (selectedCopy.translateY || 0);
75
75
  // Use live drag position if available, otherwise use final position
@@ -58,6 +58,8 @@ export interface UseAnchorEdgeLockingParams {
58
58
  setTargetHeights: React.Dispatch<React.SetStateAction<Record<string, number>>>;
59
59
  /** Ref to track if initial positioning has been done */
60
60
  initialPositioningDoneRef: React.MutableRefObject<boolean>;
61
+ /** Ref to force initial positioning after configKey change (bypasses copiesHaveSavedPositions check) */
62
+ forceInitialPositioningRef: React.MutableRefObject<boolean>;
61
63
  }
62
64
  /**
63
65
  * Hook that manages anchor edge locking and initial positioning.
@@ -67,5 +69,5 @@ export interface UseAnchorEdgeLockingParams {
67
69
  * - Track target element heights
68
70
  * - Apply initial positioning in testing mode
69
71
  */
70
- export declare function useAnchorEdgeLocking({ activeLinks, copies, sizeMultiplier, creationMode, logoRef, copyRefs, bannerContainerRef, derivedAutoConfig, config, onCopyPositionChange, anchorEdgeConfig, setAnchorEdgeConfig, targetHeights, setTargetHeights, initialPositioningDoneRef, }: UseAnchorEdgeLockingParams): void;
72
+ export declare function useAnchorEdgeLocking({ activeLinks, copies, sizeMultiplier, creationMode, logoRef, copyRefs, bannerContainerRef, derivedAutoConfig, config, onCopyPositionChange, anchorEdgeConfig, setAnchorEdgeConfig, targetHeights, setTargetHeights, initialPositioningDoneRef, forceInitialPositioningRef, }: UseAnchorEdgeLockingParams): void;
71
73
  //# sourceMappingURL=useAnchorEdgeLocking.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAnchorEdgeLocking.d.ts","sourceRoot":"","sources":["../../../../../src/components/BannerRenderer/hooks/useAutoPositioning/useAnchorEdgeLocking.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAQjG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mCAAmC;IACnC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,kCAAkC;IAClC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,wCAAwC;IACxC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3D,6CAA6C;IAC7C,iBAAiB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACrD,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,uCAAuC;IACvC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,8CAA8C;IAC9C,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,2CAA2C;IAC3C,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAClF,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gCAAgC;IAChC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/E,wDAAwD;IACxD,yBAAyB,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC5D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,MAAM,EACN,cAAc,EACd,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,yBAAyB,GAC1B,EAAE,0BAA0B,GAAG,IAAI,CAuJnC"}
1
+ {"version":3,"file":"useAnchorEdgeLocking.d.ts","sourceRoot":"","sources":["../../../../../src/components/BannerRenderer/hooks/useAutoPositioning/useAnchorEdgeLocking.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAQjG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mCAAmC;IACnC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,kCAAkC;IAClC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,wCAAwC;IACxC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3D,6CAA6C;IAC7C,iBAAiB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACrD,6BAA6B;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,uCAAuC;IACvC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,8CAA8C;IAC9C,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,2CAA2C;IAC3C,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAClF,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gCAAgC;IAChC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/E,wDAAwD;IACxD,yBAAyB,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3D,wGAAwG;IACxG,0BAA0B,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,MAAM,EACN,cAAc,EACd,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,GAC3B,EAAE,0BAA0B,GAAG,IAAI,CAuJnC"}
@@ -18,7 +18,7 @@ const positioningUtils_1 = require("../../../styles/utils/positioningUtils");
18
18
  * - Track target element heights
19
19
  * - Apply initial positioning in testing mode
20
20
  */
21
- function useAnchorEdgeLocking({ activeLinks, copies, sizeMultiplier, creationMode, logoRef, copyRefs, bannerContainerRef, derivedAutoConfig, config, onCopyPositionChange, anchorEdgeConfig, setAnchorEdgeConfig, targetHeights, setTargetHeights, initialPositioningDoneRef, }) {
21
+ function useAnchorEdgeLocking({ activeLinks, copies, sizeMultiplier, creationMode, logoRef, copyRefs, bannerContainerRef, derivedAutoConfig, config, onCopyPositionChange, anchorEdgeConfig, setAnchorEdgeConfig, targetHeights, setTargetHeights, initialPositioningDoneRef, forceInitialPositioningRef, }) {
22
22
  // Capture anchor edge config and target heights when there are active links
23
23
  // Works in both creationMode (completedLines) and testing mode (derivedAutoConfig.links)
24
24
  (0, react_1.useEffect)(() => {
@@ -58,6 +58,8 @@ export interface UseAutoPositioningReturn {
58
58
  derivedAutoConfig: AutoPositioningConfig | undefined;
59
59
  debugPositions: () => GeneratedAutoPositioningConfig | null;
60
60
  applyAutoPositioningConfig: () => void;
61
+ /** Ref to force initial positioning after configKey change (bypasses copiesHaveSavedPositions check) */
62
+ forceInitialPositioningRef: React.MutableRefObject<boolean>;
61
63
  }
62
64
  /**
63
65
  * Main hook that orchestrates auto-positioning functionality.
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoPositioningMain.d.ts","sourceRoot":"","sources":["../../../../../src/components/BannerRenderer/hooks/useAutoPositioning/useAutoPositioningMain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAutoPositioningMain.d.ts","sourceRoot":"","sources":["../../../../../src/components/BannerRenderer/hooks/useAutoPositioning/useAutoPositioningMain.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,8 @@ function useAutoPositioning({ logoRef, copyRefs, bannerContainerRef, copies, siz
64
64
  const prevCompletedLinesRef = (0, react_1.useRef)(new Map());
65
65
  const prevElementsInChainsRef = (0, react_1.useRef)(new Set());
66
66
  const initialPositioningDoneRef = (0, react_1.useRef)(false);
67
+ // Flag to force initial positioning after configKey change (bypasses copiesHaveSavedPositions check)
68
+ const forceInitialPositioningRef = (0, react_1.useRef)(false);
67
69
  // Flag to indicate configKey reset is in progress (prevents CHAIN-POS from resetting positions)
68
70
  const configKeyResetInProgressRef = (0, react_1.useRef)(false);
69
71
  // ============================================
@@ -277,6 +279,7 @@ function useAutoPositioning({ logoRef, copyRefs, bannerContainerRef, copies, siz
277
279
  targetHeights,
278
280
  setTargetHeights,
279
281
  initialPositioningDoneRef,
282
+ forceInitialPositioningRef,
280
283
  });
281
284
  // Height compensation for anchor and targets
282
285
  (0, useHeightCompensation_1.useHeightCompensation)({
@@ -328,5 +331,6 @@ function useAutoPositioning({ logoRef, copyRefs, bannerContainerRef, copies, siz
328
331
  derivedAutoConfig,
329
332
  debugPositions,
330
333
  applyAutoPositioningConfig,
334
+ forceInitialPositioningRef,
331
335
  };
332
336
  }
@@ -42,7 +42,7 @@ const BannerVisor = ({ backgroundImageUrl, copies, copy1, copy2, bannerStyle = 1
42
42
  const legacyCopies = [];
43
43
  if (copy1) {
44
44
  legacyCopies.push({
45
- id: `legacy-copy1-${Date.now()}`,
45
+ id: 'legacy-copy1',
46
46
  styleSlot: 0, // Legacy copy1 gets styleSlot 0
47
47
  text: copy1,
48
48
  fontSize: effectiveCopy1FontSize,
@@ -56,7 +56,7 @@ const BannerVisor = ({ backgroundImageUrl, copies, copy1, copy2, bannerStyle = 1
56
56
  }
57
57
  if (copy2) {
58
58
  legacyCopies.push({
59
- id: `legacy-copy2-${Date.now()}`,
59
+ id: 'legacy-copy2',
60
60
  styleSlot: 1, // Legacy copy2 gets styleSlot 1
61
61
  text: copy2,
62
62
  fontSize: effectiveCopy2FontSize,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuljaman-banner-components",
3
- "version": "1.0.24",
3
+ "version": "1.0.26",
4
4
  "description": "Shared banner components package for Next.js and AWS Lambda platforms",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",