@gem-sdk/pages 3.0.0-pre-production.0 → 3.0.0

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 (150) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +2 -40
  2. package/dist/cjs/components/ErrorFallback.js +2 -26
  3. package/dist/cjs/components/FacebookPixel.js +4 -36
  4. package/dist/cjs/components/FooterForPostPurchase.js +2 -34
  5. package/dist/cjs/components/GoogleAnalytic.js +6 -67
  6. package/dist/cjs/components/TikTokPixel.js +4 -19
  7. package/dist/cjs/components/builder/Body.js +2 -36
  8. package/dist/cjs/components/builder/Footer.js +2 -154
  9. package/dist/cjs/components/builder/Header.js +2 -189
  10. package/dist/cjs/components/builder/PopupManager.js +2 -63
  11. package/dist/cjs/components/builder/SwitchView.js +2 -184
  12. package/dist/cjs/components/builder/Toolbar.js +2 -706
  13. package/dist/cjs/components/builder/Toolbox.js +2 -494
  14. package/dist/cjs/components/builder/const.js +1 -56
  15. package/dist/cjs/components/builder/toolbar/const.js +1 -7
  16. package/dist/cjs/components/builder/toolbar/utils/findDOMClosest.js +1 -41
  17. package/dist/cjs/components/builder/toolbar/utils/findOverflowParent.js +1 -20
  18. package/dist/cjs/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -18
  19. package/dist/cjs/components/builder/toolbar/utils/getDOMElementParents.js +1 -32
  20. package/dist/cjs/components/builder/toolbar/utils/isOverParent.js +1 -16
  21. package/dist/cjs/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -12
  22. package/dist/cjs/components/builder/toolbar/utils/isSection.js +1 -8
  23. package/dist/cjs/components/builder/toolbar/utils/notVisible.js +1 -8
  24. package/dist/cjs/components/builder/toolbar/utils/waitForElementToExist.js +1 -27
  25. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +2 -150
  26. package/dist/cjs/components/image-to-layout/DropElement.js +2 -190
  27. package/dist/cjs/components/image-to-layout/ImageToLayout.js +2 -41
  28. package/dist/cjs/constants/index.js +1 -0
  29. package/dist/cjs/index.js +1 -82
  30. package/dist/cjs/layouts/main.js +2 -30
  31. package/dist/cjs/libs/api/get-builder-props.js +1 -46
  32. package/dist/cjs/libs/api/get-collection-props.js +1 -68
  33. package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -145
  34. package/dist/cjs/libs/api/get-home-page-props.js +1 -151
  35. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -300
  36. package/dist/cjs/libs/api/get-preview-props.js +1 -18
  37. package/dist/cjs/libs/api/get-product-props.js +1 -73
  38. package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -159
  39. package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -168
  40. package/dist/cjs/libs/api/get-static-page-props.js +1 -148
  41. package/dist/cjs/libs/custom-fonts.js +6 -60
  42. package/dist/cjs/libs/fetcher.js +1 -100
  43. package/dist/cjs/libs/get-layout.js +1 -13
  44. package/dist/cjs/libs/get-storefront-api.js +1 -12
  45. package/dist/cjs/libs/getStaticPaths.js +1 -10
  46. package/dist/cjs/libs/google-fonts.js +1 -118
  47. package/dist/cjs/libs/helpers/check-option-font.js +1 -65
  48. package/dist/cjs/libs/helpers/common.js +1 -27
  49. package/dist/cjs/libs/helpers/extract-operation.js +1 -0
  50. package/dist/cjs/libs/helpers/gen-css.js +1 -135
  51. package/dist/cjs/libs/helpers/gen-fonts.js +1 -90
  52. package/dist/cjs/libs/helpers/generate-manifres.js +1 -5
  53. package/dist/cjs/libs/helpers/get-fallback.js +1 -34
  54. package/dist/cjs/libs/helpers/get-metafield.js +1 -0
  55. package/dist/cjs/libs/helpers/normalize.js +1 -103
  56. package/dist/cjs/libs/helpers/parse-json.js +1 -16
  57. package/dist/cjs/libs/helpers/sentry.js +1 -17
  58. package/dist/cjs/libs/helpers/user-agent.js +1 -7
  59. package/dist/cjs/libs/hooks/use-tracking-view.js +2 -42
  60. package/dist/cjs/libs/hooks/usePagePreview.js +1 -92
  61. package/dist/cjs/libs/parse-html.js +1 -34
  62. package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1 -1845
  63. package/dist/cjs/pages/404.js +2 -43
  64. package/dist/cjs/pages/500.js +2 -74
  65. package/dist/cjs/pages/CollectionGlobalProvider.js +2 -59
  66. package/dist/cjs/pages/builder.js +2 -115
  67. package/dist/cjs/pages/collection-detail.js +2 -64
  68. package/dist/cjs/pages/preview.js +2 -26
  69. package/dist/cjs/pages/product-detail.js +2 -69
  70. package/dist/cjs/pages/static-v2.js +5 -133
  71. package/dist/cjs/pages/static.js +2 -75
  72. package/dist/cjs/store/libs-store.js +1 -14
  73. package/dist/esm/components/ErrorBoundary.js +2 -38
  74. package/dist/esm/components/ErrorFallback.js +2 -24
  75. package/dist/esm/components/FacebookPixel.js +4 -34
  76. package/dist/esm/components/FooterForPostPurchase.js +2 -30
  77. package/dist/esm/components/GoogleAnalytic.js +6 -65
  78. package/dist/esm/components/TikTokPixel.js +4 -17
  79. package/dist/esm/components/builder/Body.js +2 -32
  80. package/dist/esm/components/builder/Footer.js +2 -150
  81. package/dist/esm/components/builder/Header.js +2 -185
  82. package/dist/esm/components/builder/PopupManager.js +2 -59
  83. package/dist/esm/components/builder/SwitchView.js +2 -180
  84. package/dist/esm/components/builder/Toolbar.js +2 -702
  85. package/dist/esm/components/builder/Toolbox.js +2 -490
  86. package/dist/esm/components/builder/const.js +1 -54
  87. package/dist/esm/components/builder/toolbar/const.js +1 -4
  88. package/dist/esm/components/builder/toolbar/utils/findDOMClosest.js +1 -39
  89. package/dist/esm/components/builder/toolbar/utils/findOverflowParent.js +1 -18
  90. package/dist/esm/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -16
  91. package/dist/esm/components/builder/toolbar/utils/getDOMElementParents.js +1 -30
  92. package/dist/esm/components/builder/toolbar/utils/isOverParent.js +1 -14
  93. package/dist/esm/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -10
  94. package/dist/esm/components/builder/toolbar/utils/isSection.js +1 -6
  95. package/dist/esm/components/builder/toolbar/utils/notVisible.js +1 -6
  96. package/dist/esm/components/builder/toolbar/utils/waitForElementToExist.js +1 -25
  97. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +2 -146
  98. package/dist/esm/components/image-to-layout/DropElement.js +2 -188
  99. package/dist/esm/components/image-to-layout/ImageToLayout.js +2 -37
  100. package/dist/esm/constants/index.js +1 -0
  101. package/dist/esm/index.js +1 -36
  102. package/dist/esm/layouts/main.js +2 -26
  103. package/dist/esm/libs/api/get-builder-props.js +1 -44
  104. package/dist/esm/libs/api/get-collection-props.js +1 -66
  105. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -143
  106. package/dist/esm/libs/api/get-home-page-props.js +1 -149
  107. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -292
  108. package/dist/esm/libs/api/get-preview-props.js +1 -16
  109. package/dist/esm/libs/api/get-product-props.js +1 -71
  110. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -157
  111. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -166
  112. package/dist/esm/libs/api/get-static-page-props.js +1 -146
  113. package/dist/esm/libs/custom-fonts.js +6 -55
  114. package/dist/esm/libs/fetcher.js +1 -96
  115. package/dist/esm/libs/get-layout.js +1 -11
  116. package/dist/esm/libs/get-storefront-api.js +1 -10
  117. package/dist/esm/libs/getStaticPaths.js +1 -8
  118. package/dist/esm/libs/google-fonts.js +1 -112
  119. package/dist/esm/libs/helpers/check-option-font.js +1 -63
  120. package/dist/esm/libs/helpers/common.js +1 -24
  121. package/dist/esm/libs/helpers/extract-operation.js +1 -0
  122. package/dist/esm/libs/helpers/gen-css.js +1 -133
  123. package/dist/esm/libs/helpers/gen-fonts.js +1 -87
  124. package/dist/esm/libs/helpers/generate-manifres.js +1 -3
  125. package/dist/esm/libs/helpers/get-fallback.js +1 -32
  126. package/dist/esm/libs/helpers/get-metafield.js +1 -0
  127. package/dist/esm/libs/helpers/normalize.js +1 -96
  128. package/dist/esm/libs/helpers/parse-json.js +1 -13
  129. package/dist/esm/libs/helpers/sentry.js +1 -15
  130. package/dist/esm/libs/helpers/user-agent.js +1 -5
  131. package/dist/esm/libs/hooks/use-tracking-view.js +2 -40
  132. package/dist/esm/libs/hooks/usePagePreview.js +1 -90
  133. package/dist/esm/libs/parse-html.js +1 -32
  134. package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1 -1843
  135. package/dist/esm/pages/404.js +2 -41
  136. package/dist/esm/pages/500.js +2 -72
  137. package/dist/esm/pages/CollectionGlobalProvider.js +2 -55
  138. package/dist/esm/pages/builder.js +2 -113
  139. package/dist/esm/pages/collection-detail.js +2 -60
  140. package/dist/esm/pages/preview.js +2 -24
  141. package/dist/esm/pages/product-detail.js +2 -65
  142. package/dist/esm/pages/static-v2.js +5 -131
  143. package/dist/esm/pages/static.js +2 -71
  144. package/dist/esm/store/libs-store.js +1 -12
  145. package/dist/types/index.d.ts +61 -63
  146. package/package.json +7 -7
  147. package/dist/cjs/components/builder/InteractionSelectOnPageHeader.js +0 -192
  148. package/dist/cjs/libs/helpers/gen-favicon.js +0 -22
  149. package/dist/esm/components/builder/InteractionSelectOnPageHeader.js +0 -188
  150. package/dist/esm/libs/helpers/gen-favicon.js +0 -20
@@ -1,702 +1,2 @@
1
- import { jsx, Fragment } from 'react/jsx-runtime';
2
- import { memo, useRef, useCallback, useEffect } from 'react';
3
- import { getDOMElementParents } from './toolbar/utils/getDOMElementParents.js';
4
- import { TOOLBAR_ACTIVE_HEIGHT, TOOLBAR_HOVER_HEIGHT } from './toolbar/const.js';
5
- import { getChildrenByAttrSelector } from './toolbar/utils/getChildrenByAttrSelector.js';
6
- import { findOverflowParent } from './toolbar/utils/findOverflowParent.js';
7
- import { waitForElementToExist } from './toolbar/utils/waitForElementToExist.js';
8
- import { isOverParent } from './toolbar/utils/isOverParent.js';
9
- import { findDOMClosest } from './toolbar/utils/findDOMClosest.js';
10
-
11
- const Toolbar = ()=>{
12
- const currentComponentActive = useRef(null);
13
- const isDragging = useRef(false);
14
- const stopWatchReRenderComponent = useRef();
15
- const isResizeSpacing = useRef(false);
16
- const cacheHoverComponents = useRef([]);
17
- const cacheHoverThemeSectionComponents = useRef([]);
18
- const cacheActiveComponents = useRef([]);
19
- /* Functions */ const changePositionToolbar = ({ state, $toolbar, $component })=>{
20
- const $parentOverflow = findOverflowParent($component, $toolbar);
21
- const rect = $toolbar.getBoundingClientRect();
22
- const rectComponent = $component.getBoundingClientRect();
23
- const windowWidth = window.innerWidth;
24
- if ($parentOverflow) {
25
- if (rectComponent?.height <= 60) {
26
- $toolbar.setAttribute(`data-toolbar-${state}-revert`, 'true');
27
- } else {
28
- $toolbar.setAttribute(`data-toolbar-${state}-inside`, 'true');
29
- }
30
- // fix toolbar overflow right side
31
- if (rectComponent.left + rect.width > windowWidth) {
32
- $toolbar.setAttribute(`data-toolbar-${state}-overflow`, 'true');
33
- }
34
- } else {
35
- if (rect.top < TOOLBAR_ACTIVE_HEIGHT + 1) {
36
- if (rectComponent?.height <= 60) {
37
- $toolbar.setAttribute(`data-toolbar-${state}-revert`, 'true');
38
- } else {
39
- $toolbar.setAttribute(`data-toolbar-${state}-inside`, 'true');
40
- }
41
- }
42
- // fix toolbar overflow right side
43
- if (rectComponent.left + rect.width > windowWidth) {
44
- $toolbar.setAttribute(`data-toolbar-${state}-overflow`, 'true');
45
- }
46
- }
47
- // fix Popup overflow right position
48
- const popupEl = $component?.closest('[aria-label="Dialog body"]');
49
- if (popupEl) {
50
- const rectPopupEl = popupEl.getBoundingClientRect();
51
- const popupElRightPosition = rectPopupEl.left + rectPopupEl.width - 20;
52
- if (rectComponent.left + rect.width > popupElRightPosition) {
53
- $toolbar.setAttribute(`data-toolbar-${state}-overflow`, 'true');
54
- }
55
- }
56
- };
57
- const setHoverComponent = useCallback(({ $component, componentUid, focus, isPreventSection, isParent })=>{
58
- if (!$component && !componentUid) return;
59
- if (!$component) {
60
- const $c = document.body.querySelector('#storefront')?.querySelector(`[data-uid="${componentUid}"]`);
61
- if (!$c) return;
62
- $component = $c;
63
- }
64
- if (!componentUid) {
65
- const cUid = $component.getAttribute('data-uid');
66
- if (!cUid) return;
67
- componentUid = cUid;
68
- }
69
- cacheHoverComponents.current.push($component);
70
- const $toolbar = getChildrenByAttrSelector($component, 'data-toolbar');
71
- const $outline = getChildrenByAttrSelector($component, 'data-outline');
72
- const $btnAddTop = getChildrenByAttrSelector($component, 'data-toolbar-add-top');
73
- const $btnAddBottom = getChildrenByAttrSelector($component, 'data-toolbar-add-bottom');
74
- const $themeSectionStatus = getChildrenByAttrSelector($component, 'data-theme-section-status');
75
- if (isPreventSection && $themeSectionStatus) {
76
- $themeSectionStatus.setAttribute('data-theme-section-status-active', 'true');
77
- }
78
- if ($toolbar) {
79
- $toolbar.removeAttribute('style');
80
- if (!isParent) {
81
- $toolbar.setAttribute('data-toolbar-hover', 'true');
82
- }
83
- if (focus) {
84
- $toolbar.setAttribute('data-toolbar-hover-focus', 'true');
85
- }
86
- changePositionToolbar({
87
- $toolbar,
88
- $component,
89
- state: 'hover'
90
- });
91
- }
92
- if ($outline) {
93
- $outline.setAttribute('data-outline-hover', 'true');
94
- if (isParent) {
95
- $outline.setAttribute('data-outline-parent-hover', 'true');
96
- }
97
- if (isPreventSection) {
98
- cacheHoverThemeSectionComponents.current.push($component);
99
- $outline.setAttribute('data-outline-overlay-theme-section', 'true');
100
- }
101
- if (focus) {
102
- $outline.setAttribute('data-outline-hover-focus', 'true');
103
- }
104
- }
105
- if ($btnAddTop) {
106
- if (!isParent) {
107
- $btnAddTop.setAttribute('data-toolbar-add-hover', 'true');
108
- }
109
- }
110
- if ($btnAddBottom) {
111
- if (!isParent) {
112
- $btnAddBottom.setAttribute('data-toolbar-add-hover', 'true');
113
- }
114
- }
115
- }, []);
116
- const setHoverComponentParents = useCallback(({ $component, componentUid })=>{
117
- if (!$component) {
118
- const $c = document.body.querySelector('#storefront')?.querySelector(`[data-uid="${componentUid}"]`);
119
- if (!$c) return;
120
- $component = $c;
121
- }
122
- const $parents = getDOMElementParents($component, '[data-uid][data-component-type="component"]:not([data-component-no-setting])', 1);
123
- if ($parents.length) {
124
- for (const $parent of $parents){
125
- if ($parent) {
126
- setHoverComponent({
127
- $component: $parent,
128
- isParent: true
129
- });
130
- }
131
- }
132
- changePositionToolbarParents({
133
- $component,
134
- $parents
135
- });
136
- }
137
- }, [
138
- setHoverComponent
139
- ]);
140
- const changePositionToolbarParents = ({ $component, $parents })=>{
141
- if (!$component) return;
142
- if (!$parents?.length) return;
143
- const $currentToolbar = getChildrenByAttrSelector($component, 'data-toolbar-hover-focus');
144
- if ($currentToolbar) {
145
- const currentRect = $currentToolbar.getBoundingClientRect();
146
- const isRevert = $currentToolbar.getAttribute('data-toolbar-hover-revert') ? true : false;
147
- const isInside = $currentToolbar.getAttribute('data-toolbar-hover-inside') ? true : false;
148
- let index = 1;
149
- for (const $parent of $parents){
150
- if ($parent) {
151
- const tag = $parent.getAttribute('data-component-tag');
152
- if (tag === 'Section') continue;
153
- const $toolbar = getChildrenByAttrSelector($parent, 'data-toolbar-hover');
154
- if ($toolbar) {
155
- // Ignore with toolbar active
156
- const isActive = $toolbar.getAttribute('data-toolbar-active');
157
- if (isActive) continue;
158
- // Start calc
159
- const parentRect = $toolbar.getBoundingClientRect();
160
- const checkRevert = isRevert || isInside;
161
- if (isOverParent({
162
- current: currentRect,
163
- parent: parentRect,
164
- index,
165
- revert: checkRevert
166
- })) {
167
- const parentStyle = getComputedStyle($toolbar);
168
- // parentStyle.top
169
- const diffTop = currentRect.top - parentRect.top;
170
- const diffLeft = currentRect.left - parentRect.left;
171
- let newTop = parseFloat(parentStyle.top) + diffTop - (TOOLBAR_HOVER_HEIGHT - 1) * index; // -1 border bottom
172
- if (checkRevert) {
173
- newTop = parseFloat(parentStyle.top) - diffTop + (TOOLBAR_HOVER_HEIGHT - 1) * index; // -1 border bottom
174
- }
175
- const newLeft = parseFloat(parentStyle.left) + diffLeft;
176
- $toolbar.setAttribute('style', `top: ${newTop}px;left: ${newLeft}px;`);
177
- index++;
178
- }
179
- }
180
- }
181
- }
182
- }
183
- };
184
- const removeHoverThemeSectionComponent = useCallback(()=>{
185
- const clearAttrs = [
186
- 'data-outline-overlay-theme-section',
187
- 'data-theme-section-status-active'
188
- ];
189
- const $hoverThemeSectionComponents = cacheHoverThemeSectionComponents.current;
190
- if ($hoverThemeSectionComponents.length) {
191
- for (const $hoverThemeSectionComponent of $hoverThemeSectionComponents){
192
- const $elms = $hoverThemeSectionComponent.querySelectorAll(clearAttrs.map((attr)=>`[${attr}]`).join(','));
193
- if ($elms) {
194
- clearAttrs.forEach((attr)=>{
195
- $elms.forEach(($el)=>$el.removeAttribute(attr));
196
- });
197
- }
198
- }
199
- }
200
- cacheHoverThemeSectionComponents.current = []; // clear
201
- }, []);
202
- const removeHoverComponent = useCallback(()=>{
203
- const clearAttrs = [
204
- 'data-toolbar-hover-focus',
205
- 'data-toolbar-hover',
206
- 'data-outline-hover-focus',
207
- 'data-toolbar-hover-revert',
208
- 'data-toolbar-hover-inside',
209
- 'data-outline-hover',
210
- 'data-toolbar-add-hover',
211
- 'data-outline-parent-hover',
212
- 'data-toolbar-hover-overflow'
213
- ];
214
- const $hoverComponents = cacheHoverComponents.current;
215
- if ($hoverComponents.length) {
216
- for (const $hoverComponent of $hoverComponents){
217
- const $elms = $hoverComponent.querySelectorAll(clearAttrs.map((attr)=>`[${attr}]`).join(','));
218
- if ($elms) {
219
- clearAttrs.forEach((attr)=>{
220
- $elms.forEach(($el)=>$el.removeAttribute(attr));
221
- });
222
- }
223
- }
224
- }
225
- removeHoverThemeSectionComponent();
226
- cacheHoverComponents.current = []; // clear
227
- }, [
228
- removeHoverThemeSectionComponent
229
- ]);
230
- const removeActiveComponent = useCallback(()=>{
231
- currentComponentActive.current = null;
232
- const clearAttrs = [
233
- 'data-toolbar-active',
234
- 'data-outline-active',
235
- 'data-toolbar-add-active',
236
- 'data-toolbar-active-revert',
237
- 'data-toolbar-active-inside',
238
- 'data-spacing-margin-bottom-active',
239
- 'data-toolbar-force-hover',
240
- 'data-outline-force-hover',
241
- 'data-toolbar-active-overflow'
242
- ];
243
- const $activeComponents = cacheActiveComponents.current;
244
- if ($activeComponents.length) {
245
- for (const $activeComponent of $activeComponents){
246
- const $elms = $activeComponent.querySelectorAll(clearAttrs.map((attr)=>`[${attr}]`).join(','));
247
- if ($elms) {
248
- clearAttrs.forEach((attr)=>{
249
- $elms.forEach(($el)=>$el.removeAttribute(attr));
250
- });
251
- }
252
- }
253
- }
254
- cacheActiveComponents.current = []; // clear
255
- setFocusTextEditor(false);
256
- if (stopWatchReRenderComponent.current) stopWatchReRenderComponent.current();
257
- }, []);
258
- const setActiveComponentSpacing = useCallback(({ $component })=>{
259
- if (!$component) return;
260
- const style = getComputedStyle($component);
261
- const $spacing = getChildrenByAttrSelector($component, 'data-spacing');
262
- const $marginBottom = ($spacing?.querySelector('[data-spacing-margin-bottom]')) || null;
263
- if ($marginBottom) {
264
- const $bg = $marginBottom.querySelector('[data-spacing-margin-bottom-bg]') || null;
265
- const $drag = $marginBottom.querySelector('[data-spacing-margin-bottom-drag]') || null;
266
- if ($bg && $drag) {
267
- const value = style.marginBottom;
268
- $bg.style.height = value;
269
- $drag.style.top = value;
270
- $marginBottom.setAttribute('data-spacing-margin-bottom-active', 'true');
271
- }
272
- }
273
- }, []);
274
- const getSelectorComponent = ({ componentUid, productId, articleId, marqueeKey })=>{
275
- if (articleId) {
276
- return `${articleId ? `[data-article-id="${articleId}"][data-uid="${componentUid}"], [data-article-id="${articleId}"] [data-uid="${componentUid}"]` : `[data-uid="${componentUid}"]`}`;
277
- }
278
- if (marqueeKey) {
279
- return `[marquee-item-key="${marqueeKey}"] [data-uid="${componentUid}"]`;
280
- }
281
- return `${productId ? `[data-product-id="${productId}"][data-uid="${componentUid}"], [data-product-id="${productId}"] [data-uid="${componentUid}"]` : `[data-uid="${componentUid}"]`}`;
282
- };
283
- const setActiveComponent = useCallback(async ({ componentUid, productId, timeAwait = 600, articleId, forceReActive, marqueeKey })=>{
284
- if (!componentUid) return;
285
- const selector = getSelectorComponent({
286
- componentUid,
287
- productId,
288
- articleId,
289
- marqueeKey
290
- });
291
- const $component = await waitForElementToExist(selector, timeAwait);
292
- if (!$component) return;
293
- if (!forceReActive && componentUid == currentComponentActive.current?.componentUid && productId == currentComponentActive.current?.productId && articleId == currentComponentActive.current?.articleId && marqueeKey == currentComponentActive.current?.marqueeKey) return;
294
- if (componentUid !== currentComponentActive.current?.componentUid || productId !== currentComponentActive.current?.productId || articleId !== currentComponentActive.current?.articleId || forceReActive) removeActiveComponent();
295
- if (!forceReActive && componentUid !== currentComponentActive.current?.componentUid || productId !== currentComponentActive.current?.productId || marqueeKey !== currentComponentActive.current?.marqueeKey) {
296
- removeActiveComponent();
297
- }
298
- cacheActiveComponents.current.push($component);
299
- const $toolbar = getChildrenByAttrSelector($component, 'data-toolbar');
300
- const $outline = getChildrenByAttrSelector($component, 'data-outline');
301
- const $btnAddTop = getChildrenByAttrSelector($component, 'data-toolbar-add-top');
302
- const $btnAddBottom = getChildrenByAttrSelector($component, 'data-toolbar-add-bottom');
303
- if ($toolbar) {
304
- currentComponentActive.current = {
305
- componentUid,
306
- productId,
307
- articleId,
308
- marqueeKey
309
- };
310
- $toolbar.removeAttribute('style');
311
- $toolbar.setAttribute('data-toolbar-active', 'true');
312
- changePositionToolbar({
313
- $toolbar,
314
- $component,
315
- state: 'active'
316
- });
317
- }
318
- if ($outline) {
319
- $outline.setAttribute('data-outline-active', 'true');
320
- }
321
- if ($btnAddTop) {
322
- $btnAddTop.setAttribute('data-toolbar-add-active', 'true');
323
- }
324
- if ($btnAddBottom) {
325
- $btnAddBottom.setAttribute('data-toolbar-add-active', 'true');
326
- }
327
- const { $isChildOfMarquee, $section } = findDOMClosest($component, {
328
- $isChildOfMarquee: '[data-component-tag="Marquee"]',
329
- $section: '[data-component-tag="Section"]'
330
- });
331
- // Active same element in product list
332
- if ($section && (productId || articleId || $isChildOfMarquee)) {
333
- const $relatedElements = $section.querySelectorAll(`[data-uid="${componentUid}"]`);
334
- if ($relatedElements?.length) {
335
- $relatedElements.forEach(($relatedElement)=>{
336
- cacheActiveComponents.current.push($relatedElement);
337
- const $outline = getChildrenByAttrSelector($relatedElement, 'data-outline');
338
- if ($outline) {
339
- $outline.setAttribute('data-outline-active', 'true');
340
- }
341
- });
342
- }
343
- }
344
- setActiveComponentSpacing({
345
- $component
346
- });
347
- removeHoverComponent();
348
- }, [
349
- removeActiveComponent,
350
- removeHoverComponent,
351
- setActiveComponentSpacing
352
- ]);
353
- const setFocusTextEditor = async (value)=>{
354
- if (!value) {
355
- const $components = document.body.querySelector('#storefront')?.querySelectorAll('[data-outline-editor-inline-focus],[data-toolbar-editor-inline-focus],[data-spacing-hidden]');
356
- if ($components?.length) {
357
- $components.forEach(($component)=>{
358
- if ($component) {
359
- $component.removeAttribute('data-toolbar-editor-inline-focus');
360
- $component.removeAttribute('data-outline-editor-inline-focus');
361
- $component.removeAttribute('data-spacing-hidden');
362
- }
363
- });
364
- }
365
- } else {
366
- if (currentComponentActive.current?.componentUid) {
367
- const selector = getSelectorComponent({
368
- ...currentComponentActive.current
369
- });
370
- const $component = await waitForElementToExist(selector, 500);
371
- if ($component) {
372
- const $toolbar = getChildrenByAttrSelector($component, 'data-toolbar');
373
- const $outline = getChildrenByAttrSelector($component, 'data-outline');
374
- const $spacing = getChildrenByAttrSelector($component, 'data-spacing');
375
- if ($toolbar) {
376
- if (value) {
377
- $toolbar.setAttribute('data-toolbar-editor-inline-focus', 'true');
378
- }
379
- }
380
- if ($outline) {
381
- if (value) {
382
- $outline.setAttribute('data-outline-editor-inline-focus', 'true');
383
- }
384
- }
385
- if ($spacing) {
386
- if (value) {
387
- $spacing.setAttribute('data-spacing-hidden', 'true');
388
- }
389
- }
390
- }
391
- }
392
- }
393
- };
394
- const hoverActiveThemeSection = useCallback(($target)=>{
395
- const $themeSection = $target.closest('[data-theme-section]');
396
- const $themeSectionUid = $themeSection?.getAttribute('data-uid');
397
- const isActiveThemeSection = $themeSection && $themeSectionUid === currentComponentActive.current?.componentUid;
398
- if (!isActiveThemeSection) return;
399
- cacheHoverThemeSectionComponents.current.push($themeSection);
400
- const $themeSectionStatus = getChildrenByAttrSelector($themeSection, 'data-theme-section-status');
401
- if ($themeSectionStatus) {
402
- $themeSectionStatus.setAttribute('data-theme-section-status-active', 'true');
403
- }
404
- }, []);
405
- const setShowParents = async ({ value })=>{
406
- if (!value || !currentComponentActive.current) {
407
- return;
408
- }
409
- let isClickProcessing = false;
410
- const selector = getSelectorComponent({
411
- ...currentComponentActive.current
412
- });
413
- const $component = await waitForElementToExist(selector, 500);
414
- if ($component) {
415
- const $parents = $component?.querySelectorAll('[data-toolbar-parent]');
416
- if ($parents.length) {
417
- const onHover = ($parent)=>{
418
- if (isClickProcessing) return;
419
- const uid = $parent.getAttribute('data-parent-uid');
420
- if (!uid) return;
421
- const $parentComponents = document.body.querySelector('#storefront')?.querySelectorAll(`[data-uid="${uid}"]`);
422
- if ($parentComponents?.length) {
423
- $parentComponents.forEach(($parentComponent)=>{
424
- const $outline = getChildrenByAttrSelector($parentComponent, 'data-outline');
425
- if ($outline) {
426
- $outline.setAttribute('data-outline-force-hover', 'true');
427
- $outline.setAttribute('data-outline-force-overlay', 'true');
428
- }
429
- });
430
- }
431
- };
432
- const outHover = ($parent)=>{
433
- const uid = $parent.getAttribute('data-parent-uid');
434
- if (!uid) return;
435
- const $parentComponents = document.body.querySelector('#storefront')?.querySelectorAll(`[data-uid="${uid}"]`);
436
- if ($parentComponents?.length) {
437
- $parentComponents.forEach(($parentComponent)=>{
438
- const $outline = getChildrenByAttrSelector($parentComponent, 'data-outline');
439
- if ($outline) {
440
- $outline.removeAttribute('data-outline-force-hover');
441
- $outline.removeAttribute('data-outline-force-overlay');
442
- }
443
- });
444
- }
445
- };
446
- const onClick = async ($parent)=>{
447
- isClickProcessing = true;
448
- const uid = $parent.getAttribute('data-parent-uid');
449
- if (!uid) return;
450
- const isElementInsideProduct = async ()=>{
451
- const $component = await waitForElementToExist(`[data-uid="${uid}"]`, 500);
452
- const $product = $component?.closest('[data-product-id]');
453
- return !!($product?.getAttribute('data-product-id') || '');
454
- };
455
- const isElementInsideArticle = async ()=>{
456
- const $component = await waitForElementToExist(`[data-uid="${uid}"]`, 500);
457
- const $article = $component?.closest('[data-article-id]');
458
- return !!($article?.getAttribute('data-article-id') || '');
459
- };
460
- let productId = '';
461
- let articleId = '';
462
- if (await isElementInsideProduct()) {
463
- productId = currentComponentActive.current?.productId || '';
464
- }
465
- if (await isElementInsideArticle()) {
466
- articleId = currentComponentActive.current?.articleId || '';
467
- }
468
- const event = new CustomEvent('editor:toolbar:force-active-component', {
469
- bubbles: true,
470
- detail: {
471
- componentUid: uid,
472
- productId,
473
- articleId,
474
- elementTag: $parent.getAttribute('data-component-tag') || ''
475
- }
476
- });
477
- outHover($parent);
478
- window.dispatchEvent(event);
479
- setTimeout(()=>{
480
- isClickProcessing = false;
481
- }, 0);
482
- };
483
- $parents.forEach(($parent)=>{
484
- $parent.addEventListener('mouseover', ()=>onHover($parent));
485
- $parent.addEventListener('mouseout', ()=>outHover($parent));
486
- $parent.addEventListener('click', ()=>onClick($parent));
487
- });
488
- }
489
- }
490
- };
491
- /* Event listener */ const onMouseMove = useCallback((e)=>{
492
- if (isDragging.current) return;
493
- if (isResizeSpacing.current) return;
494
- const $target = e.target;
495
- // check target
496
- if (!$target || typeof $target.closest !== 'function') {
497
- removeHoverThemeSectionComponent();
498
- removeHoverComponent();
499
- return;
500
- }
501
- const { $toolbarHover, $component, $themeSection, $shopifySection } = findDOMClosest($target, {
502
- $toolbarHover: '[data-toolbar-hover]',
503
- $component: '[data-toolbar-wrap]',
504
- $themeSection: '[data-theme-section]',
505
- $shopifySection: '[data-shopify-section]'
506
- });
507
- if ($toolbarHover) {
508
- // Disable feature overlay when hover to toolbar parents
509
- return;
510
- }
511
- // Hover to other component
512
- const componentUid = $component?.getAttribute('data-uid');
513
- if (!$component || !componentUid || componentUid == 'ROOT') {
514
- removeHoverComponent();
515
- return;
516
- }
517
- const $toolbar = getChildrenByAttrSelector($component, 'data-toolbar');
518
- if (!componentUid) return;
519
- if (componentUid == 'ROOT') return;
520
- if ($toolbar?.getAttribute('data-toolbar-hover-focus')) return;
521
- if (!$toolbar?.getAttribute('data-toolbar-hover-focus')) removeHoverComponent();
522
- hoverActiveThemeSection($target);
523
- const $preventSection = $themeSection || $shopifySection;
524
- // Disable event when hover active component
525
- if (componentUid == currentComponentActive.current?.componentUid) {
526
- if (currentComponentActive.current.productId) {
527
- const $product = $component.closest(`[data-product-id]`);
528
- if ($product) {
529
- const productId = $product.getAttribute('data-product-id');
530
- if (productId == currentComponentActive.current.productId) {
531
- removeHoverComponent();
532
- return;
533
- }
534
- }
535
- }
536
- if ($preventSection) {
537
- setHoverComponent({
538
- $component: $preventSection,
539
- focus: true,
540
- isPreventSection: true
541
- });
542
- } else {
543
- return;
544
- }
545
- }
546
- if ($preventSection) {
547
- setHoverComponent({
548
- $component: $preventSection,
549
- focus: true,
550
- isPreventSection: true
551
- });
552
- } else {
553
- setHoverComponent({
554
- $component,
555
- componentUid,
556
- focus: true
557
- });
558
- setHoverComponentParents({
559
- $component,
560
- componentUid
561
- });
562
- }
563
- }, [
564
- hoverActiveThemeSection,
565
- removeHoverComponent,
566
- setHoverComponent,
567
- setHoverComponentParents,
568
- removeHoverThemeSectionComponent,
569
- currentComponentActive
570
- ]);
571
- const onActiveComponent = useCallback((e)=>{
572
- if (isDragging.current) return;
573
- const detail = e.detail;
574
- if (detail?.componentUid) {
575
- setActiveComponent({
576
- componentUid: detail.componentUid,
577
- productId: detail.productId,
578
- articleId: detail.articleId,
579
- marqueeKey: detail.marqueeKey
580
- });
581
- } else {
582
- removeActiveComponent();
583
- }
584
- }, [
585
- setActiveComponent,
586
- removeActiveComponent,
587
- isDragging
588
- ]);
589
- const onFocusOutsidePreview = useCallback(()=>{
590
- removeHoverComponent();
591
- }, [
592
- removeHoverComponent
593
- ]);
594
- const onIsDragging = useCallback((e)=>{
595
- const detail = e.detail;
596
- if (detail.value) {
597
- removeHoverComponent();
598
- removeActiveComponent();
599
- }
600
- isDragging.current = detail.value;
601
- }, [
602
- removeHoverComponent,
603
- removeActiveComponent
604
- ]);
605
- const onIsEditingTextEditor = useCallback((e)=>{
606
- const detail = e.detail;
607
- if (detail.value) {
608
- setFocusTextEditor(true);
609
- } else {
610
- setFocusTextEditor(false);
611
- }
612
- }, []);
613
- const onShowParents = useCallback((e)=>{
614
- if (isDragging.current) return;
615
- const detail = e.detail;
616
- setShowParents({
617
- value: detail?.value || false
618
- });
619
- }, []);
620
- const onResizeSpacing = useCallback((e)=>{
621
- const detail = e.detail;
622
- if (detail?.value) {
623
- removeHoverComponent();
624
- isResizeSpacing.current = true;
625
- } else {
626
- isResizeSpacing.current = false;
627
- }
628
- }, [
629
- removeHoverComponent
630
- ]);
631
- const setHoverParentComponent = (uid, type)=>{
632
- if (!uid) return;
633
- const $parentComponents = document.body.querySelector('#storefront')?.querySelectorAll(`[data-uid="${uid}"]`);
634
- if ($parentComponents?.length) {
635
- $parentComponents.forEach(($parentComponent)=>{
636
- const $outline = getChildrenByAttrSelector($parentComponent, 'data-outline');
637
- if ($outline) {
638
- if (type === 'in') {
639
- $outline.setAttribute('data-outline-force-hover', 'true');
640
- $outline.setAttribute('data-outline-force-overlay', 'true');
641
- } else {
642
- $outline.removeAttribute('data-outline-force-hover');
643
- $outline.removeAttribute('data-outline-force-overlay');
644
- }
645
- }
646
- });
647
- }
648
- };
649
- const onHoverComponent = useCallback((e)=>{
650
- if (isDragging.current) return;
651
- const detail = e.detail;
652
- if (detail?.componentUid) {
653
- setHoverParentComponent(detail?.componentUid, detail?.type);
654
- }
655
- }, [
656
- isDragging
657
- ]);
658
- const onComponentReRender = (e)=>{
659
- const detail = e.detail;
660
- if (currentComponentActive.current?.componentUid && detail?.componentUid == currentComponentActive.current?.componentUid) {
661
- setActiveComponent({
662
- ...currentComponentActive.current
663
- });
664
- }
665
- };
666
- /* Register event */ useEffect(()=>{
667
- document.addEventListener('mousemove', onMouseMove);
668
- window.addEventListener('editor:active-component', onActiveComponent);
669
- window.addEventListener('editor:focus-outside-preview', onFocusOutsidePreview);
670
- window.addEventListener('editor:is-dragging', onIsDragging);
671
- window.addEventListener('editor:is-editing-text-editor', onIsEditingTextEditor);
672
- window.addEventListener('editor:toolbar:show-parents', onShowParents);
673
- window.addEventListener('editor:toolbar:resize-spacing', onResizeSpacing);
674
- window.addEventListener('editor:hover-component', onHoverComponent);
675
- window.addEventListener('editor:component:render', onComponentReRender);
676
- return ()=>{
677
- document.removeEventListener('mousemove', onMouseMove);
678
- window.removeEventListener('editor:active-component', onActiveComponent);
679
- window.removeEventListener('editor:is-dragging', onFocusOutsidePreview);
680
- window.removeEventListener('editor:is-dragging', onIsDragging);
681
- window.removeEventListener('editor:is-editing-text-editor', onIsEditingTextEditor);
682
- window.removeEventListener('editor:toolbar:show-parents', onShowParents);
683
- window.removeEventListener('editor:toolbar:resize-spacing', onResizeSpacing);
684
- window.removeEventListener('editor:hover-component', onHoverComponent);
685
- window.removeEventListener('editor:component:render', onComponentReRender);
686
- };
687
- }, [
688
- onMouseMove,
689
- onActiveComponent,
690
- onFocusOutsidePreview,
691
- onIsDragging,
692
- onIsEditingTextEditor,
693
- onShowParents,
694
- onResizeSpacing,
695
- onHoverComponent,
696
- onComponentReRender
697
- ]);
698
- return /*#__PURE__*/ jsx(Fragment, {});
699
- };
700
- var Toolbar$1 = /*#__PURE__*/ memo(Toolbar);
701
-
702
- export { Toolbar$1 as default };
1
+ 'use client';
2
+ import{jsx as t,Fragment as e}from"react/jsx-runtime";import{memo as r,useRef as o,useCallback as a,useEffect as i}from"react";import{getDOMElementParents as n}from"./toolbar/utils/getDOMElementParents.js";import{TOOLBAR_ACTIVE_HEIGHT as d,TOOLBAR_HOVER_HEIGHT as u}from"./toolbar/const.js";import{getChildrenByAttrSelector as l}from"./toolbar/utils/getChildrenByAttrSelector.js";import{findOverflowParent as c}from"./toolbar/utils/findOverflowParent.js";import{waitForElementToExist as s}from"./toolbar/utils/waitForElementToExist.js";import{isOverParent as b}from"./toolbar/utils/isOverParent.js";import{findDOMClosest as f}from"./toolbar/utils/findDOMClosest.js";let Toolbar=()=>{let r=o(null),v=o(!1),m=o(),p=o(!1),h=o([]),g=o([]),A=o([]),w=({state:t,$toolbar:e,$component:r})=>{let o=c(r,e),a=e.getBoundingClientRect(),i=r.getBoundingClientRect(),n=window.innerWidth;o?i?.height<=60?e.setAttribute(`data-toolbar-${t}-revert`,"true"):e.setAttribute(`data-toolbar-${t}-inside`,"true"):a.top<d+1&&(i?.height<=60?e.setAttribute(`data-toolbar-${t}-revert`,"true"):e.setAttribute(`data-toolbar-${t}-inside`,"true")),i.left+a.width>n&&e.setAttribute(`data-toolbar-${t}-overflow`,"true");let u=r?.closest('[aria-label="Dialog body"]');if(u){let r=u.getBoundingClientRect(),o=r.left+r.width-20;i.left+a.width>o&&e.setAttribute(`data-toolbar-${t}-overflow`,"true")}},y=a(({$component:t,componentUid:e,focus:r,isPreventSection:o,isParent:a})=>{if(!t&&!e)return;if(!t){let r=document.body.querySelector("#storefront")?.querySelector(`[data-uid="${e}"]`);if(!r)return;t=r}if(!e){let r=t.getAttribute("data-uid");if(!r)return;e=r}h.current.push(t);let i=l(t,"data-toolbar"),n=l(t,"data-outline"),d=l(t,"data-toolbar-add-top"),u=l(t,"data-toolbar-add-bottom"),c=l(t,"data-theme-section-status");o&&c&&c.setAttribute("data-theme-section-status-active","true"),i&&(i.removeAttribute("style"),a||i.setAttribute("data-toolbar-hover","true"),r&&i.setAttribute("data-toolbar-hover-focus","true"),w({$toolbar:i,$component:t,state:"hover"})),n&&(n.setAttribute("data-outline-hover","true"),a&&n.setAttribute("data-outline-parent-hover","true"),o&&(g.current.push(t),n.setAttribute("data-outline-overlay-theme-section","true")),r&&n.setAttribute("data-outline-hover-focus","true")),d&&!a&&d.setAttribute("data-toolbar-add-hover","true"),u&&!a&&u.setAttribute("data-toolbar-add-hover","true")},[]),$=a(({$component:t,componentUid:e})=>{if(!t){let r=document.body.querySelector("#storefront")?.querySelector(`[data-uid="${e}"]`);if(!r)return;t=r}let r=n(t,'[data-uid][data-component-type="component"]:not([data-component-no-setting])',1);if(r.length){for(let t of r)t&&y({$component:t,isParent:!0});E({$component:t,$parents:r})}},[y]),E=({$component:t,$parents:e})=>{if(!t||!e?.length)return;let r=l(t,"data-toolbar-hover-focus");if(r){let t=r.getBoundingClientRect(),o=!!r.getAttribute("data-toolbar-hover-revert"),a=!!r.getAttribute("data-toolbar-hover-inside"),i=1;for(let r of e)if(r){let e=r.getAttribute("data-component-tag");if("Section"===e)continue;let n=l(r,"data-toolbar-hover");if(n){let e=n.getAttribute("data-toolbar-active");if(e)continue;let r=n.getBoundingClientRect(),d=o||a;if(b({current:t,parent:r,index:i,revert:d})){let e=getComputedStyle(n),o=t.top-r.top,a=t.left-r.left,l=parseFloat(e.top)+o-(u-1)*i;d&&(l=parseFloat(e.top)-o+(u-1)*i);let c=parseFloat(e.left)+a;n.setAttribute("style",`top: ${l}px;left: ${c}px;`),i++}}}}},S=a(()=>{let t=["data-outline-overlay-theme-section","data-theme-section-status-active"],e=g.current;if(e.length)for(let r of e){let e=r.querySelectorAll(t.map(t=>`[${t}]`).join(","));e&&t.forEach(t=>{e.forEach(e=>e.removeAttribute(t))})}g.current=[]},[]),q=a(()=>{let t=["data-toolbar-hover-focus","data-toolbar-hover","data-outline-hover-focus","data-toolbar-hover-revert","data-toolbar-hover-inside","data-outline-hover","data-toolbar-add-hover","data-outline-parent-hover","data-toolbar-hover-overflow"],e=h.current;if(e.length)for(let r of e){let e=r.querySelectorAll(t.map(t=>`[${t}]`).join(","));e&&t.forEach(t=>{e.forEach(e=>e.removeAttribute(t))})}S(),h.current=[]},[S]),L=a(()=>{r.current=null;let t=["data-toolbar-active","data-outline-active","data-toolbar-add-active","data-toolbar-active-revert","data-toolbar-active-inside","data-spacing-margin-bottom-active","data-toolbar-force-hover","data-outline-force-hover","data-toolbar-active-overflow"],e=A.current;if(e.length)for(let r of e){let e=r.querySelectorAll(t.map(t=>`[${t}]`).join(","));e&&t.forEach(t=>{e.forEach(e=>e.removeAttribute(t))})}A.current=[],C(!1),m.current&&m.current()},[]),U=a(({$component:t})=>{if(!t)return;let e=getComputedStyle(t),r=l(t,"data-spacing"),o=r?.querySelector("[data-spacing-margin-bottom]")||null;if(o){let t=o.querySelector("[data-spacing-margin-bottom-bg]")||null,r=o.querySelector("[data-spacing-margin-bottom-drag]")||null;if(t&&r){let a=e.marginBottom;t.style.height=a,r.style.top=a,o.setAttribute("data-spacing-margin-bottom-active","true")}}},[]),I=({componentUid:t,productId:e,articleId:r,marqueeKey:o})=>r?`${r?`[data-article-id="${r}"][data-uid="${t}"], [data-article-id="${r}"] [data-uid="${t}"]`:`[data-uid="${t}"]`}`:o?`[marquee-item-key="${o}"] [data-uid="${t}"]`:`${e?`[data-product-id="${e}"][data-uid="${t}"], [data-product-id="${e}"] [data-uid="${t}"]`:`[data-uid="${t}"]`}`,j=a(async({componentUid:t,productId:e,timeAwait:o=600,articleId:a,forceReActive:i,marqueeKey:n})=>{if(!t)return;let d=I({componentUid:t,productId:e,articleId:a,marqueeKey:n}),u=await s(d,o);if(!u||!i&&t==r.current?.componentUid&&e==r.current?.productId&&a==r.current?.articleId&&n==r.current?.marqueeKey)return;(t!==r.current?.componentUid||e!==r.current?.productId||a!==r.current?.articleId||i)&&L(),(i||t===r.current?.componentUid)&&e===r.current?.productId&&n===r.current?.marqueeKey||L(),A.current.push(u);let c=l(u,"data-toolbar"),b=l(u,"data-outline"),v=l(u,"data-toolbar-add-top"),m=l(u,"data-toolbar-add-bottom");c&&(r.current={componentUid:t,productId:e,articleId:a,marqueeKey:n},c.removeAttribute("style"),c.setAttribute("data-toolbar-active","true"),w({$toolbar:c,$component:u,state:"active"})),b&&b.setAttribute("data-outline-active","true"),v&&v.setAttribute("data-toolbar-add-active","true"),m&&m.setAttribute("data-toolbar-add-active","true");let{$isChildOfMarquee:p,$section:h}=f(u,{$isChildOfMarquee:'[data-component-tag="Marquee"]',$section:'[data-component-tag="Section"]'});if(h&&(e||a||p)){let e=h.querySelectorAll(`[data-uid="${t}"]`);e?.length&&e.forEach(t=>{A.current.push(t);let e=l(t,"data-outline");e&&e.setAttribute("data-outline-active","true")})}U({$component:u}),q()},[L,q,U]),C=async t=>{if(t){if(r.current?.componentUid){let e=I({...r.current}),o=await s(e,500);if(o){let e=l(o,"data-toolbar"),r=l(o,"data-outline"),a=l(o,"data-spacing");e&&t&&e.setAttribute("data-toolbar-editor-inline-focus","true"),r&&t&&r.setAttribute("data-outline-editor-inline-focus","true"),a&&t&&a.setAttribute("data-spacing-hidden","true")}}}else{let t=document.body.querySelector("#storefront")?.querySelectorAll("[data-outline-editor-inline-focus],[data-toolbar-editor-inline-focus],[data-spacing-hidden]");t?.length&&t.forEach(t=>{t&&(t.removeAttribute("data-toolbar-editor-inline-focus"),t.removeAttribute("data-outline-editor-inline-focus"),t.removeAttribute("data-spacing-hidden"))})}},O=a(t=>{let e=t.closest("[data-theme-section]"),o=e?.getAttribute("data-uid"),a=e&&o===r.current?.componentUid;if(!a)return;g.current.push(e);let i=l(e,"data-theme-section-status");i&&i.setAttribute("data-theme-section-status-active","true")},[]),T=async({value:t})=>{if(!t||!r.current)return;let e=!1,o=I({...r.current}),a=await s(o,500);if(a){let t=a?.querySelectorAll("[data-toolbar-parent]");if(t.length){let o=t=>{if(e)return;let r=t.getAttribute("data-parent-uid");if(!r)return;let o=document.body.querySelector("#storefront")?.querySelectorAll(`[data-uid="${r}"]`);o?.length&&o.forEach(t=>{let e=l(t,"data-outline");e&&(e.setAttribute("data-outline-force-hover","true"),e.setAttribute("data-outline-force-overlay","true"))})},a=t=>{let e=t.getAttribute("data-parent-uid");if(!e)return;let r=document.body.querySelector("#storefront")?.querySelectorAll(`[data-uid="${e}"]`);r?.length&&r.forEach(t=>{let e=l(t,"data-outline");e&&(e.removeAttribute("data-outline-force-hover"),e.removeAttribute("data-outline-force-overlay"))})},i=async t=>{e=!0;let o=t.getAttribute("data-parent-uid");if(!o)return;let i=async()=>{let t=await s(`[data-uid="${o}"]`,500),e=t?.closest("[data-product-id]");return!!e?.getAttribute("data-product-id")},n=async()=>{let t=await s(`[data-uid="${o}"]`,500),e=t?.closest("[data-article-id]");return!!e?.getAttribute("data-article-id")},d="",u="";await i()&&(d=r.current?.productId||""),await n()&&(u=r.current?.articleId||"");let l=new CustomEvent("editor:toolbar:force-active-component",{bubbles:!0,detail:{componentUid:o,productId:d,articleId:u,elementTag:t.getAttribute("data-component-tag")||""}});a(t),window.dispatchEvent(l),setTimeout(()=>{e=!1},0)};t.forEach(t=>{t.addEventListener("mouseover",()=>o(t)),t.addEventListener("mouseout",()=>a(t)),t.addEventListener("click",()=>i(t))})}}},x=a(t=>{if(v.current||p.current)return;let e=t.target;if(!e||"function"!=typeof e.closest){S(),q();return}let{$toolbarHover:o,$component:a,$themeSection:i,$shopifySection:n}=f(e,{$toolbarHover:"[data-toolbar-hover]",$component:"[data-toolbar-wrap]",$themeSection:"[data-theme-section]",$shopifySection:"[data-shopify-section]"});if(o)return;let d=a?.getAttribute("data-uid");if(!a||!d||"ROOT"==d){q();return}let u=l(a,"data-toolbar");if(!d||"ROOT"==d||u?.getAttribute("data-toolbar-hover-focus"))return;u?.getAttribute("data-toolbar-hover-focus")||q(),O(e);let c=i||n;if(d==r.current?.componentUid){if(r.current.productId){let t=a.closest("[data-product-id]");if(t){let e=t.getAttribute("data-product-id");if(e==r.current.productId){q();return}}}if(!c)return;y({$component:c,focus:!0,isPreventSection:!0})}c?y({$component:c,focus:!0,isPreventSection:!0}):(y({$component:a,componentUid:d,focus:!0}),$({$component:a,componentUid:d}))},[O,q,y,$,S,r]),B=a(t=>{if(v.current)return;let e=t.detail;e?.componentUid?j({componentUid:e.componentUid,productId:e.productId,articleId:e.articleId,marqueeKey:e.marqueeKey}):L()},[j,L,v]),R=a(()=>{q()},[q]),P=a(t=>{let e=t.detail;e.value&&(q(),L()),v.current=e.value},[q,L]),F=a(t=>{let e=t.detail;e.value?C(!0):C(!1)},[]),K=a(t=>{if(v.current)return;let e=t.detail;T({value:e?.value||!1})},[]),M=a(t=>{let e=t.detail;e?.value?(q(),p.current=!0):p.current=!1},[q]),D=(t,e)=>{if(!t)return;let r=document.body.querySelector("#storefront")?.querySelectorAll(`[data-uid="${t}"]`);r?.length&&r.forEach(t=>{let r=l(t,"data-outline");r&&("in"===e?(r.setAttribute("data-outline-force-hover","true"),r.setAttribute("data-outline-force-overlay","true")):(r.removeAttribute("data-outline-force-hover"),r.removeAttribute("data-outline-force-overlay")))})},k=a(t=>{if(v.current)return;let e=t.detail;e?.componentUid&&D(e?.componentUid,e?.type)},[v]),z=t=>{let e=t.detail;r.current?.componentUid&&e?.componentUid==r.current?.componentUid&&j({...r.current})};return i(()=>(document.addEventListener("mousemove",x),window.addEventListener("editor:active-component",B),window.addEventListener("editor:focus-outside-preview",R),window.addEventListener("editor:is-dragging",P),window.addEventListener("editor:is-editing-text-editor",F),window.addEventListener("editor:toolbar:show-parents",K),window.addEventListener("editor:toolbar:resize-spacing",M),window.addEventListener("editor:hover-component",k),window.addEventListener("editor:component:render",z),()=>{document.removeEventListener("mousemove",x),window.removeEventListener("editor:active-component",B),window.removeEventListener("editor:is-dragging",R),window.removeEventListener("editor:is-dragging",P),window.removeEventListener("editor:is-editing-text-editor",F),window.removeEventListener("editor:toolbar:show-parents",K),window.removeEventListener("editor:toolbar:resize-spacing",M),window.removeEventListener("editor:hover-component",k),window.removeEventListener("editor:component:render",z)}),[x,B,R,P,F,K,M,k,z]),t(e,{})};var Toolbar$1=r(Toolbar);export{Toolbar$1 as default};