@toototech/webbuilder-plugins 0.1.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.
- package/LICENSE +1 -0
- package/README.md +3 -0
- package/dist/basic/cssScope.d.ts +3 -0
- package/dist/basic/index.d.ts +81 -0
- package/dist/basic/injectStyle.d.ts +20 -0
- package/dist/basic/plugin.d.ts +19 -0
- package/dist/basic/publisher.d.ts +4 -0
- package/dist/basic/registries/interactive/accordion/index.d.ts +3 -0
- package/dist/basic/registries/interactive/backButton/index.d.ts +3 -0
- package/dist/basic/registries/interactive/button/index.d.ts +10 -0
- package/dist/basic/registries/interactive/countUp/index.d.ts +9 -0
- package/dist/basic/registries/interactive/customCode/index.d.ts +3 -0
- package/dist/basic/registries/interactive/index.d.ts +2 -0
- package/dist/basic/registries/interactive/inquiryForm/index.d.ts +3 -0
- package/dist/basic/registries/interactive/klaviyoSubscribe/index.d.ts +3 -0
- package/dist/basic/registries/interactive/popup/index.d.ts +5 -0
- package/dist/basic/registries/interactive/salesmartlyChatButton/index.d.ts +10 -0
- package/dist/basic/registries/interactive/search/index.d.ts +10 -0
- package/dist/basic/registries/interactive/socialShare/index.d.ts +33 -0
- package/dist/basic/registries/interactive/tabs/index.d.ts +3 -0
- package/dist/basic/registries/layout/container/index.d.ts +19 -0
- package/dist/basic/registries/layout/divider/index.d.ts +7 -0
- package/dist/basic/registries/layout/grid/index.d.ts +11 -0
- package/dist/basic/registries/layout/index.d.ts +2 -0
- package/dist/basic/registries/layout/layoutBase/index.d.ts +10 -0
- package/dist/basic/registries/layout/section/index.d.ts +3 -0
- package/dist/basic/registries/layout/sectionGridBlock/index.d.ts +3 -0
- package/dist/basic/registries/layout/spacer/index.d.ts +7 -0
- package/dist/basic/registries/media/banner/index.d.ts +11 -0
- package/dist/basic/registries/media/carousel/index.d.ts +6 -0
- package/dist/basic/registries/media/flipbook/index.d.ts +5 -0
- package/dist/basic/registries/media/icon/index.d.ts +3 -0
- package/dist/basic/registries/media/image/index.d.ts +3 -0
- package/dist/basic/registries/media/index.d.ts +2 -0
- package/dist/basic/registries/media/industryTabs/index.d.ts +3 -0
- package/dist/basic/registries/media/marquee/index.d.ts +4 -0
- package/dist/basic/registries/media/ourSolutions/helpers.d.ts +289 -0
- package/dist/basic/registries/media/ourSolutions/index.d.ts +4 -0
- package/dist/basic/registries/media/ourSolutions/script.d.ts +1 -0
- package/dist/basic/registries/media/ourSolutions/style.d.ts +1 -0
- package/dist/basic/registries/media/pdfViewer/index.d.ts +3 -0
- package/dist/basic/registries/media/productCategories/index.d.ts +4 -0
- package/dist/basic/registries/media/tabMediaGallery/index.d.ts +3 -0
- package/dist/basic/registries/media/video/index.d.ts +12 -0
- package/dist/basic/registries/navigation/footer/index.d.ts +10 -0
- package/dist/basic/registries/navigation/index.d.ts +2 -0
- package/dist/basic/registries/navigation/languageSwitcher/index.d.ts +6 -0
- package/dist/basic/registries/navigation/logo/index.d.ts +9 -0
- package/dist/basic/registries/navigation/navbar/constants.d.ts +38 -0
- package/dist/basic/registries/navigation/navbar/factories.d.ts +848 -0
- package/dist/basic/registries/navigation/navbar/helpers.d.ts +12 -0
- package/dist/basic/registries/navigation/navbar/index.d.ts +4 -0
- package/dist/basic/registries/navigation/navbar/registerMegaTypes.d.ts +2 -0
- package/dist/basic/registries/navigation/navbar/registerMenuTypes.d.ts +2 -0
- package/dist/basic/registries/navigation/navbar/registerRootTypes.d.ts +2 -0
- package/dist/basic/registries/navigation/navbar/script.d.ts +1 -0
- package/dist/basic/registries/navigation/navbar/style.d.ts +1 -0
- package/dist/basic/registries/navigation/socialLinks/index.d.ts +3 -0
- package/dist/basic/registries/section/allApplications/index.d.ts +3 -0
- package/dist/basic/registries/section/cardCarouselSection/index.d.ts +3 -0
- package/dist/basic/registries/section/caseSpotlight/index.d.ts +3 -0
- package/dist/basic/registries/section/companyScale/index.d.ts +3 -0
- package/dist/basic/registries/section/customizationGrid/index.d.ts +3 -0
- package/dist/basic/registries/section/factoryMap/index.d.ts +3 -0
- package/dist/basic/registries/section/focaHistoryTimeline/index.d.ts +3 -0
- package/dist/basic/registries/section/historyTimeline/index.d.ts +3 -0
- package/dist/basic/registries/section/homeBannerCarousel/index.d.ts +4 -0
- package/dist/basic/registries/section/hotspotShowcase/index.d.ts +30 -0
- package/dist/basic/registries/section/index.d.ts +2 -0
- package/dist/basic/registries/section/map/index.d.ts +4 -0
- package/dist/basic/registries/section/milestoneCardStrip/index.d.ts +3 -0
- package/dist/basic/registries/section/moreCardCarousel/index.d.ts +3 -0
- package/dist/basic/registries/section/ourAdvantages/index.d.ts +4 -0
- package/dist/basic/registries/section/overviewSplit/index.d.ts +3 -0
- package/dist/basic/registries/section/processTimeline/index.d.ts +3 -0
- package/dist/basic/registries/section/productCardStrip/index.d.ts +3 -0
- package/dist/basic/registries/section/resourceSection/index.d.ts +6 -0
- package/dist/basic/registries/section/responsiveHeroCarousel/index.d.ts +4 -0
- package/dist/basic/registries/section/serviceIconGrid/index.d.ts +4 -0
- package/dist/basic/registries/section/servicesCarousel/index.d.ts +4 -0
- package/dist/basic/registries/section/servicesShowcase/index.d.ts +4 -0
- package/dist/basic/registries/section/servicesThb/index.d.ts +4 -0
- package/dist/basic/registries/section/solutionList/index.d.ts +4 -0
- package/dist/basic/registries/section/staticPinMap/index.d.ts +4 -0
- package/dist/basic/registries/section/statsCards/index.d.ts +3 -0
- package/dist/basic/registries/section/swiperRuntime.d.ts +3 -0
- package/dist/basic/registries/shared/sharedTraits.d.ts +37 -0
- package/dist/basic/registries/types.d.ts +5 -0
- package/dist/basic/registries/typography/heading/index.d.ts +8 -0
- package/dist/basic/registries/typography/index.d.ts +2 -0
- package/dist/basic/registries/typography/textEditor/index.d.ts +6 -0
- package/dist/basic/registryManifest.d.ts +9 -0
- package/dist/basic/styleHelpers.d.ts +29 -0
- package/dist/basic/svgIcon.d.ts +11 -0
- package/dist/basic/traitBridge.d.ts +20 -0
- package/dist/basic/traitFactory.d.ts +106 -0
- package/dist/basic.js +1146 -0
- package/dist/cms/cmsFactory.d.ts +164 -0
- package/dist/cms/dynamicRenderPipeline.d.ts +12 -0
- package/dist/cms/index.d.ts +31 -0
- package/dist/cms/plugin.d.ts +12 -0
- package/dist/cms/publisher.d.ts +7 -0
- package/dist/cms/registries/dynamic/cms/constants.d.ts +16 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/bindings.d.ts +78 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/breadcrumbBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/conditionalBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/datetimeBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/htmlBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/imageBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/linkBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/seoBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/textBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/blocks/tocBlock.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/constants.d.ts +19 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/helpers.d.ts +52 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/registerBlock.d.ts +57 -0
- package/dist/cms/registries/dynamic/cms/dynamicField/styles.d.ts +7 -0
- package/dist/cms/registries/dynamic/cms/media/previewMediaTrait.d.ts +7 -0
- package/dist/cms/registries/dynamic/cms/menu/siteMenuAttrs.d.ts +11 -0
- package/dist/cms/registries/dynamic/cms/menuTree/menuTreeAttrs.d.ts +8 -0
- package/dist/cms/registries/dynamic/cms/post/styles.d.ts +6 -0
- package/dist/cms/registries/dynamic/cms/product/detail.styles.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/product/detailV2.styles.d.ts +1 -0
- package/dist/cms/registries/dynamic/cms/product/previewProductTrait.d.ts +6 -0
- package/dist/cms/registries/dynamic/cms/product/styles.d.ts +6 -0
- package/dist/cms/registries/dynamic/dataProvider.d.ts +45 -0
- package/dist/cms/registries/dynamic/loopGrid/paginationStyles.d.ts +5 -0
- package/dist/cms/registries/dynamic/loopGrid/preview.d.ts +16 -0
- package/dist/cms/registries/dynamic/loopGrid/publisher.d.ts +3 -0
- package/dist/cms/registries/dynamic/loopGrid/types.d.ts +97 -0
- package/dist/cms/registries/navigation/navbarThb/index.d.ts +3 -0
- package/dist/cms/registries/navigation/navbarThb/script.d.ts +1 -0
- package/dist/cms/registries/navigation/navbarThb/style.d.ts +1 -0
- package/dist/cms.js +4535 -0
- package/dist/global-settings/components/FontFamilySelect.vue.d.ts +29 -0
- package/dist/global-settings/components/FontManagerPanel.vue.d.ts +37 -0
- package/dist/global-settings/index.d.ts +8 -0
- package/dist/global-settings/plugin.d.ts +3 -0
- package/dist/global-settings/publisher.d.ts +15 -0
- package/dist/global-settings/runtime/canvasInjection.d.ts +13 -0
- package/dist/global-settings/runtime/panelDraftSave.d.ts +17 -0
- package/dist/global-settings/runtime/settingsSource.d.ts +4 -0
- package/dist/global-settings/useFontManager.d.ts +38 -0
- package/dist/global-settings/useGoogleFonts.d.ts +20 -0
- package/dist/global-settings/vue.d.ts +1 -0
- package/dist/global-settings.js +66 -0
- package/dist/i18n/I18nPanel.vue.d.ts +23 -0
- package/dist/i18n/i18n.d.ts +25 -0
- package/dist/i18n/index.d.ts +7 -0
- package/dist/i18n/languageOrder.d.ts +9 -0
- package/dist/i18n/plugin.d.ts +21 -0
- package/dist/i18n/types.d.ts +101 -0
- package/dist/i18n/useWebBuilderI18n.d.ts +164 -0
- package/dist/i18n/vue.d.ts +1 -0
- package/dist/i18n-BYR3l48y.js +959 -0
- package/dist/i18n.js +929 -0
- package/dist/index-CxJlLwvG.js +35378 -0
- package/dist/index-DWfJ4PBm.js +5724 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +12 -0
- package/dist/layout-template/components/LayoutPanel.vue.d.ts +37 -0
- package/dist/layout-template/components/TemplateRulesPanel.vue.d.ts +41 -0
- package/dist/layout-template/config/layoutSharedResources.d.ts +9 -0
- package/dist/layout-template/config/templateSharedResources.d.ts +28 -0
- package/dist/layout-template/index.d.ts +9 -0
- package/dist/layout-template/plugin.d.ts +13 -0
- package/dist/layout-template/runtime/storageAdapter.d.ts +49 -0
- package/dist/layout-template/utils/layoutProjectData.d.ts +15 -0
- package/dist/layout-template/utils/layoutRulePages.d.ts +19 -0
- package/dist/layout-template/utils/layoutSettings.d.ts +45 -0
- package/dist/layout-template/utils/templateRules.d.ts +52 -0
- package/dist/layout-template/vue.d.ts +2 -0
- package/dist/layout-template.js +435 -0
- package/dist/layoutSettings-D4SYUMri.js +252 -0
- package/dist/plugin-BPA8qlaC.js +40 -0
- package/dist/plugin-C0PrxrIe.js +228 -0
- package/dist/plugin-DQshk1sY.js +361 -0
- package/dist/plugin-DebyCjXx.js +191 -0
- package/dist/plugin-Dr6TOtyH.js +73 -0
- package/dist/publisher/index.d.ts +5 -0
- package/dist/publisher/publisherAssets.d.ts +9 -0
- package/dist/publisher/publisherComponents.d.ts +7 -0
- package/dist/publisher/publisherPlugins.d.ts +12 -0
- package/dist/publisher-C6VWXq8u.js +25 -0
- package/dist/publisher.js +1711 -0
- package/dist/solar-BsElUqfQ.js +29843 -0
- package/dist/style.css +1181 -0
- package/dist/templateSharedResources-D1u7eFIs.js +89 -0
- package/dist/types-DNbok59z.js +2359 -0
- package/dist/useFontManager-CdrLq1eG.js +336 -0
- package/dist/vue.d.ts +3 -0
- package/dist/vue.js +2171 -0
- package/package.json +77 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { L, c, c as c2 } from "./plugin-BPA8qlaC.js";
|
|
2
|
+
import { c as createDefaultLayoutSettings, n as normalizeLayoutSettings, g as getGrapesPageId, a as getPageLayoutSlot } from "./layoutSettings-D4SYUMri.js";
|
|
3
|
+
import { W, b, d, e, f, h, i, j, k, l, m, o, r } from "./layoutSettings-D4SYUMri.js";
|
|
4
|
+
import { P as POPUP_TEMPLATE_RESOURCE_TYPE, T as TEMP_TEMPLATE_RESOURCE_TYPES } from "./templateSharedResources-D1u7eFIs.js";
|
|
5
|
+
import { L as L2, a, b as b2, c as c3, d as d2, e as e2, f as f2, g, h as h2, i as i2, j as j2, k as k2, l as l2, m as m2, p } from "./templateSharedResources-D1u7eFIs.js";
|
|
6
|
+
const LAYOUT_RULES_RESOURCE_SCOPE = "OWNED";
|
|
7
|
+
const LAYOUT_RULES_RESOURCE_KEY = "layout.rules";
|
|
8
|
+
const LAYOUT_RULES_RESOURCE_TYPE = "LAYOUT_RULES";
|
|
9
|
+
const LAYOUT_PAGE_RESOURCE_SCOPE = "SHARED";
|
|
10
|
+
const LAYOUT_PAGE_RESOURCE_TYPES = {
|
|
11
|
+
header: "LAYOUT_PAGE_HEADER",
|
|
12
|
+
footer: "LAYOUT_PAGE_FOOTER"
|
|
13
|
+
};
|
|
14
|
+
const buildLayoutPageResourceKey = (slotKey, layoutPageId) => `layout.${slotKey}.${layoutPageId}`.trim();
|
|
15
|
+
const createDefaultLayoutRulesPayload = () => createDefaultLayoutSettings();
|
|
16
|
+
const normalizeLayoutRulesPayload = (payload) => normalizeLayoutSettings(payload);
|
|
17
|
+
const deepClone = (value) => {
|
|
18
|
+
if (value == null)
|
|
19
|
+
return value;
|
|
20
|
+
if (typeof structuredClone === "function") {
|
|
21
|
+
return structuredClone(value);
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(JSON.stringify(value));
|
|
24
|
+
};
|
|
25
|
+
const toPageList = (projectData) => Array.isArray(projectData == null ? void 0 : projectData.pages) ? projectData.pages : [];
|
|
26
|
+
const uniqueArrayByJson = (items) => {
|
|
27
|
+
const seen = /* @__PURE__ */ new Set();
|
|
28
|
+
const result = [];
|
|
29
|
+
items.forEach((item) => {
|
|
30
|
+
const signature = JSON.stringify(item ?? null);
|
|
31
|
+
if (seen.has(signature))
|
|
32
|
+
return;
|
|
33
|
+
seen.add(signature);
|
|
34
|
+
result.push(item);
|
|
35
|
+
});
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
const mergeArrayField = (target, source, key) => {
|
|
39
|
+
const targetItems = Array.isArray(target[key]) ? target[key] : [];
|
|
40
|
+
const sourceItems = Array.isArray(source[key]) ? source[key] : [];
|
|
41
|
+
if (!targetItems.length && !sourceItems.length)
|
|
42
|
+
return;
|
|
43
|
+
target[key] = uniqueArrayByJson([...targetItems, ...sourceItems].map((item) => deepClone(item)));
|
|
44
|
+
};
|
|
45
|
+
const extractLegacyLayoutBundle = (projectData) => {
|
|
46
|
+
const nextProject = projectData ? deepClone(projectData) : null;
|
|
47
|
+
const pages = toPageList(nextProject);
|
|
48
|
+
const layoutPages = pages.filter((page) => !!getPageLayoutSlot(page));
|
|
49
|
+
const pagePages = pages.filter((page) => !getPageLayoutSlot(page));
|
|
50
|
+
if (nextProject) {
|
|
51
|
+
nextProject.pages = pagePages;
|
|
52
|
+
delete nextProject.wbLayoutSettings;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
pageProjectData: nextProject,
|
|
56
|
+
layoutPages,
|
|
57
|
+
layoutSettings: normalizeLayoutSettings((projectData == null ? void 0 : projectData.wbLayoutSettings) ?? null)
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
const mergeLayoutBundleProjectData = (pageProjectData, layoutProjectDataList) => {
|
|
61
|
+
const baseProject = pageProjectData ? deepClone(pageProjectData) : { assets: [], styles: [], pages: [] };
|
|
62
|
+
baseProject.pages = toPageList(baseProject).map((page) => deepClone(page));
|
|
63
|
+
layoutProjectDataList.forEach((layoutProject) => {
|
|
64
|
+
if (!layoutProject || typeof layoutProject !== "object")
|
|
65
|
+
return;
|
|
66
|
+
mergeArrayField(baseProject, layoutProject, "assets");
|
|
67
|
+
mergeArrayField(baseProject, layoutProject, "styles");
|
|
68
|
+
mergeArrayField(baseProject, layoutProject, "symbols");
|
|
69
|
+
toPageList(layoutProject).forEach((page) => {
|
|
70
|
+
const pageId = getGrapesPageId(page);
|
|
71
|
+
if (!pageId)
|
|
72
|
+
return;
|
|
73
|
+
const existingIndex = baseProject.pages.findIndex(
|
|
74
|
+
(item) => getGrapesPageId(item) === pageId
|
|
75
|
+
);
|
|
76
|
+
const clonedPage = deepClone(page);
|
|
77
|
+
if (existingIndex >= 0) {
|
|
78
|
+
baseProject.pages.splice(existingIndex, 1, clonedPage);
|
|
79
|
+
} else {
|
|
80
|
+
baseProject.pages.push(clonedPage);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
return baseProject;
|
|
85
|
+
};
|
|
86
|
+
const buildPageOnlyProjectData = (fullProjectData) => {
|
|
87
|
+
return extractLegacyLayoutBundle(fullProjectData).pageProjectData ?? {
|
|
88
|
+
assets: [],
|
|
89
|
+
styles: [],
|
|
90
|
+
pages: []
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
const buildLayoutPageProjectData = (fullProjectData, layoutPageId) => {
|
|
94
|
+
if (!fullProjectData || !layoutPageId)
|
|
95
|
+
return null;
|
|
96
|
+
const projectData = deepClone(fullProjectData);
|
|
97
|
+
const targetPage = toPageList(projectData).find((page) => getGrapesPageId(page) === layoutPageId);
|
|
98
|
+
if (!targetPage || !getPageLayoutSlot(targetPage)) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
projectData.pages = [deepClone(targetPage)];
|
|
102
|
+
delete projectData.wbLayoutSettings;
|
|
103
|
+
return projectData;
|
|
104
|
+
};
|
|
105
|
+
const buildSinglePageProjectData = (baseProjectData, pageData) => {
|
|
106
|
+
const projectData = baseProjectData ? deepClone(baseProjectData) : { assets: [], styles: [], pages: [] };
|
|
107
|
+
projectData.pages = [deepClone(pageData)];
|
|
108
|
+
delete projectData.wbLayoutSettings;
|
|
109
|
+
return projectData;
|
|
110
|
+
};
|
|
111
|
+
const buildLayoutProjectDataMap = (fullProjectData) => {
|
|
112
|
+
const result = {};
|
|
113
|
+
toPageList(fullProjectData).forEach((page) => {
|
|
114
|
+
const layoutPageId = getGrapesPageId(page);
|
|
115
|
+
if (!layoutPageId || !getPageLayoutSlot(page))
|
|
116
|
+
return;
|
|
117
|
+
const projectData = buildLayoutPageProjectData(fullProjectData, layoutPageId);
|
|
118
|
+
if (projectData) {
|
|
119
|
+
result[layoutPageId] = projectData;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return result;
|
|
123
|
+
};
|
|
124
|
+
const groupLayoutPagesBySlot = (pages) => {
|
|
125
|
+
const grouped = {
|
|
126
|
+
header: [],
|
|
127
|
+
footer: []
|
|
128
|
+
};
|
|
129
|
+
pages.forEach((page) => {
|
|
130
|
+
const slot = getPageLayoutSlot(page);
|
|
131
|
+
if (!slot)
|
|
132
|
+
return;
|
|
133
|
+
grouped[slot].push(deepClone(page));
|
|
134
|
+
});
|
|
135
|
+
return grouped;
|
|
136
|
+
};
|
|
137
|
+
const LIST_PAGE_SIZE = 200;
|
|
138
|
+
const LAYOUT_RULE_TARGET_TYPES = [
|
|
139
|
+
"PAGE",
|
|
140
|
+
"TEMP_POST_DETAIL",
|
|
141
|
+
"TEMP_POST_CATEGORY_LIST",
|
|
142
|
+
"TEMP_PRODUCT_DETAIL",
|
|
143
|
+
"TEMP_PRODUCT_CATEGORY_LIST",
|
|
144
|
+
"TEMP_MEDIA_DETAIL",
|
|
145
|
+
"TEMP_MEDIA_CATEGORY_LIST"
|
|
146
|
+
];
|
|
147
|
+
const buildSelectablePageQueries = () => [
|
|
148
|
+
...LAYOUT_RULE_TARGET_TYPES.map((resourceType) => ({
|
|
149
|
+
status: "draft",
|
|
150
|
+
resourceType
|
|
151
|
+
}))
|
|
152
|
+
];
|
|
153
|
+
const toRulePageOptions = (rows) => {
|
|
154
|
+
const deduped = /* @__PURE__ */ new Map();
|
|
155
|
+
(rows || []).forEach((row) => {
|
|
156
|
+
const id = `${row.resourceKey ?? ""}`.trim();
|
|
157
|
+
if (!id || deduped.has(id))
|
|
158
|
+
return;
|
|
159
|
+
deduped.set(id, {
|
|
160
|
+
id,
|
|
161
|
+
label: `${row.resourceName ?? row.resourceKey ?? id}`.trim() || id
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
return Array.from(deduped.values()).sort((left, right) => left.label.localeCompare(right.label));
|
|
165
|
+
};
|
|
166
|
+
const loadRulePageOptions = async (fetchPageList) => {
|
|
167
|
+
let lastError = null;
|
|
168
|
+
const rows = [];
|
|
169
|
+
for (const query of buildSelectablePageQueries()) {
|
|
170
|
+
try {
|
|
171
|
+
const result = await fetchPageList({
|
|
172
|
+
pageNo: 1,
|
|
173
|
+
pageSize: LIST_PAGE_SIZE,
|
|
174
|
+
...query
|
|
175
|
+
});
|
|
176
|
+
rows.push(...(result == null ? void 0 : result.list) || []);
|
|
177
|
+
} catch (error) {
|
|
178
|
+
lastError = error;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const options = toRulePageOptions(rows);
|
|
182
|
+
if (options.length > 0) {
|
|
183
|
+
return options;
|
|
184
|
+
}
|
|
185
|
+
if (lastError) {
|
|
186
|
+
throw lastError;
|
|
187
|
+
}
|
|
188
|
+
return [];
|
|
189
|
+
};
|
|
190
|
+
const isTemplateRuleResourceType = (value) => value !== void 0 && value !== null && value !== "TEMP_LOOP_ITEM" && value !== POPUP_TEMPLATE_RESOURCE_TYPE;
|
|
191
|
+
const SUPPORTED_CONDITION_KEYS = {
|
|
192
|
+
TEMP_POST_DETAIL: /* @__PURE__ */ new Set([
|
|
193
|
+
"postIds",
|
|
194
|
+
"excludePostIds",
|
|
195
|
+
"typeIds",
|
|
196
|
+
"excludeTypeIds",
|
|
197
|
+
"tagIds",
|
|
198
|
+
"templateNames",
|
|
199
|
+
"publishTimeRange"
|
|
200
|
+
]),
|
|
201
|
+
TEMP_POST_CATEGORY_LIST: /* @__PURE__ */ new Set([
|
|
202
|
+
"categoryIds",
|
|
203
|
+
"excludeCategoryIds",
|
|
204
|
+
"rootCategoryIds",
|
|
205
|
+
"levels"
|
|
206
|
+
]),
|
|
207
|
+
TEMP_MEDIA_DETAIL: /* @__PURE__ */ new Set([
|
|
208
|
+
"resourceIds",
|
|
209
|
+
"excludeResourceIds",
|
|
210
|
+
"categoryIds",
|
|
211
|
+
"excludeCategoryIds",
|
|
212
|
+
"mediaTypes",
|
|
213
|
+
"publishTimeRange"
|
|
214
|
+
]),
|
|
215
|
+
TEMP_MEDIA_CATEGORY_LIST: /* @__PURE__ */ new Set(["categoryIds", "excludeCategoryIds"]),
|
|
216
|
+
TEMP_PRODUCT_DETAIL: /* @__PURE__ */ new Set([
|
|
217
|
+
"spuIds",
|
|
218
|
+
"excludeSpuIds",
|
|
219
|
+
"categoryIds",
|
|
220
|
+
"excludeCategoryIds",
|
|
221
|
+
"brandIds",
|
|
222
|
+
"createTimeRange"
|
|
223
|
+
]),
|
|
224
|
+
TEMP_PRODUCT_CATEGORY_LIST: /* @__PURE__ */ new Set([
|
|
225
|
+
"categoryIds",
|
|
226
|
+
"excludeCategoryIds",
|
|
227
|
+
"rootCategoryIds",
|
|
228
|
+
"levels"
|
|
229
|
+
])
|
|
230
|
+
};
|
|
231
|
+
const DEFAULT_VERSION = 1;
|
|
232
|
+
const TEMPLATE_RULE_BUCKET_BY_RESOURCE_TYPE = {
|
|
233
|
+
TEMP_POST_DETAIL: "postDetail",
|
|
234
|
+
TEMP_POST_CATEGORY_LIST: "postCategoryList",
|
|
235
|
+
TEMP_MEDIA_DETAIL: "mediaDetail",
|
|
236
|
+
TEMP_MEDIA_CATEGORY_LIST: "mediaCategoryList",
|
|
237
|
+
TEMP_PRODUCT_DETAIL: "productDetail",
|
|
238
|
+
TEMP_PRODUCT_CATEGORY_LIST: "productCategoryList"
|
|
239
|
+
};
|
|
240
|
+
const isRecord = (value) => !!value && typeof value === "object" && !Array.isArray(value);
|
|
241
|
+
const normalizeStringArray = (value) => {
|
|
242
|
+
if (!Array.isArray(value))
|
|
243
|
+
return [];
|
|
244
|
+
const seen = /* @__PURE__ */ new Set();
|
|
245
|
+
return value.map((item) => `${item ?? ""}`.trim()).filter((item) => {
|
|
246
|
+
if (!item || seen.has(item))
|
|
247
|
+
return false;
|
|
248
|
+
seen.add(item);
|
|
249
|
+
return true;
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
const normalizeNumberArray = (value) => {
|
|
253
|
+
if (!Array.isArray(value))
|
|
254
|
+
return [];
|
|
255
|
+
const seen = /* @__PURE__ */ new Set();
|
|
256
|
+
return value.map((item) => Number(item)).filter((item) => Number.isFinite(item)).filter((item) => {
|
|
257
|
+
if (seen.has(item))
|
|
258
|
+
return false;
|
|
259
|
+
seen.add(item);
|
|
260
|
+
return true;
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
const normalizeTimeRange = (value) => {
|
|
264
|
+
if (!isRecord(value))
|
|
265
|
+
return void 0;
|
|
266
|
+
const start = `${value.start ?? ""}`.trim();
|
|
267
|
+
const end = `${value.end ?? ""}`.trim();
|
|
268
|
+
if (!start && !end)
|
|
269
|
+
return void 0;
|
|
270
|
+
return {
|
|
271
|
+
...start ? { start } : {},
|
|
272
|
+
...end ? { end } : {}
|
|
273
|
+
};
|
|
274
|
+
};
|
|
275
|
+
const normalizeConditions = (value, templateType) => {
|
|
276
|
+
const raw = isRecord(value) ? value : {};
|
|
277
|
+
const next = {};
|
|
278
|
+
const supportedKeys = templateType ? SUPPORTED_CONDITION_KEYS[templateType] : void 0;
|
|
279
|
+
const isSupported = (key) => !supportedKeys || supportedKeys.has(key);
|
|
280
|
+
const assignNumbers = (key) => {
|
|
281
|
+
if (!isSupported(key))
|
|
282
|
+
return;
|
|
283
|
+
const numbers = normalizeNumberArray(raw[key]);
|
|
284
|
+
if (numbers.length)
|
|
285
|
+
next[key] = numbers;
|
|
286
|
+
};
|
|
287
|
+
const assignStrings = (key) => {
|
|
288
|
+
if (!isSupported(key))
|
|
289
|
+
return;
|
|
290
|
+
const strings = normalizeStringArray(raw[key]);
|
|
291
|
+
if (strings.length)
|
|
292
|
+
next[key] = strings;
|
|
293
|
+
};
|
|
294
|
+
assignNumbers("postIds");
|
|
295
|
+
assignNumbers("excludePostIds");
|
|
296
|
+
assignNumbers("typeIds");
|
|
297
|
+
assignNumbers("excludeTypeIds");
|
|
298
|
+
assignNumbers("tagIds");
|
|
299
|
+
assignStrings("templateNames");
|
|
300
|
+
assignNumbers("resourceIds");
|
|
301
|
+
assignNumbers("excludeResourceIds");
|
|
302
|
+
assignNumbers("categoryIds");
|
|
303
|
+
assignNumbers("excludeCategoryIds");
|
|
304
|
+
assignStrings("mediaTypes");
|
|
305
|
+
assignNumbers("spuIds");
|
|
306
|
+
assignNumbers("excludeSpuIds");
|
|
307
|
+
assignNumbers("brandIds");
|
|
308
|
+
assignNumbers("rootCategoryIds");
|
|
309
|
+
assignNumbers("levels");
|
|
310
|
+
const publishTimeRange = isSupported("publishTimeRange") ? normalizeTimeRange(raw.publishTimeRange) : void 0;
|
|
311
|
+
if (publishTimeRange)
|
|
312
|
+
next.publishTimeRange = publishTimeRange;
|
|
313
|
+
const createTimeRange = isSupported("createTimeRange") ? normalizeTimeRange(raw.createTimeRange) : void 0;
|
|
314
|
+
if (createTimeRange)
|
|
315
|
+
next.createTimeRange = createTimeRange;
|
|
316
|
+
return next;
|
|
317
|
+
};
|
|
318
|
+
const normalizeTemplateType = (value, fallbackType) => {
|
|
319
|
+
const normalized = TEMP_TEMPLATE_RESOURCE_TYPES.find((type) => type === `${value ?? ""}`.trim());
|
|
320
|
+
return isTemplateRuleResourceType(normalized) ? normalized : fallbackType;
|
|
321
|
+
};
|
|
322
|
+
const normalizeTemplateRule = (value, fallbackType, fallbackIndex) => {
|
|
323
|
+
const raw = isRecord(value) ? value : {};
|
|
324
|
+
const id = typeof raw.id === "string" && raw.id.trim() ? raw.id.trim() : `template-rule-${fallbackType.toLowerCase()}-${fallbackIndex + 1}`;
|
|
325
|
+
const templateResourceId = Number(raw.templateResourceId);
|
|
326
|
+
const templateResourceKey = `${raw.templateResourceKey ?? ""}`.trim();
|
|
327
|
+
const templateType = normalizeTemplateType(raw.templateType ?? fallbackType, fallbackType);
|
|
328
|
+
return {
|
|
329
|
+
id,
|
|
330
|
+
name: typeof raw.name === "string" && raw.name.trim() ? raw.name.trim() : void 0,
|
|
331
|
+
templateType,
|
|
332
|
+
...Number.isFinite(templateResourceId) ? { templateResourceId } : {},
|
|
333
|
+
...templateResourceKey ? { templateResourceKey } : {},
|
|
334
|
+
enabled: raw.enabled !== false,
|
|
335
|
+
priority: Number.isFinite(Number(raw.priority)) ? Number(raw.priority) : fallbackIndex,
|
|
336
|
+
conditions: normalizeConditions(raw.conditions, templateType)
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
const normalizeRuleList = (value, templateType) => Array.isArray(value) ? value.map((item, index) => normalizeTemplateRule(item, templateType, index)) : [];
|
|
340
|
+
const createDefaultTemplateRulesPayload = () => ({
|
|
341
|
+
version: DEFAULT_VERSION,
|
|
342
|
+
postDetail: [],
|
|
343
|
+
postCategoryList: [],
|
|
344
|
+
mediaDetail: [],
|
|
345
|
+
mediaCategoryList: [],
|
|
346
|
+
productDetail: [],
|
|
347
|
+
productCategoryList: []
|
|
348
|
+
});
|
|
349
|
+
const normalizeTemplateRulesPayload = (value) => {
|
|
350
|
+
const raw = isRecord(value) ? value : {};
|
|
351
|
+
return {
|
|
352
|
+
version: DEFAULT_VERSION,
|
|
353
|
+
postDetail: normalizeRuleList(raw.postDetail, "TEMP_POST_DETAIL"),
|
|
354
|
+
postCategoryList: normalizeRuleList(raw.postCategoryList, "TEMP_POST_CATEGORY_LIST"),
|
|
355
|
+
mediaDetail: normalizeRuleList(raw.mediaDetail, "TEMP_MEDIA_DETAIL"),
|
|
356
|
+
mediaCategoryList: normalizeRuleList(raw.mediaCategoryList, "TEMP_MEDIA_CATEGORY_LIST"),
|
|
357
|
+
productDetail: normalizeRuleList(raw.productDetail, "TEMP_PRODUCT_DETAIL"),
|
|
358
|
+
productCategoryList: normalizeRuleList(raw.productCategoryList, "TEMP_PRODUCT_CATEGORY_LIST")
|
|
359
|
+
};
|
|
360
|
+
};
|
|
361
|
+
const cloneTemplateRulesPayload = (value) => normalizeTemplateRulesPayload(value);
|
|
362
|
+
const getTemplateRuleBucketKey = (templateType) => isTemplateRuleResourceType(templateType) ? TEMPLATE_RULE_BUCKET_BY_RESOURCE_TYPE[templateType] : null;
|
|
363
|
+
const getTemplateRulesForType = (payload, templateType) => {
|
|
364
|
+
const bucketKey = getTemplateRuleBucketKey(templateType);
|
|
365
|
+
return bucketKey ? payload[bucketKey] : [];
|
|
366
|
+
};
|
|
367
|
+
const setTemplateRulesForType = (payload, templateType, rules) => {
|
|
368
|
+
const bucketKey = getTemplateRuleBucketKey(templateType);
|
|
369
|
+
return bucketKey ? {
|
|
370
|
+
...payload,
|
|
371
|
+
[bucketKey]: rules
|
|
372
|
+
} : payload;
|
|
373
|
+
};
|
|
374
|
+
export {
|
|
375
|
+
LAYOUT_PAGE_RESOURCE_SCOPE,
|
|
376
|
+
LAYOUT_PAGE_RESOURCE_TYPES,
|
|
377
|
+
LAYOUT_RULES_RESOURCE_KEY,
|
|
378
|
+
LAYOUT_RULES_RESOURCE_SCOPE,
|
|
379
|
+
LAYOUT_RULES_RESOURCE_TYPE,
|
|
380
|
+
L as LAYOUT_TEMPLATE_PLUGIN_ID,
|
|
381
|
+
L2 as LOOP_ITEM_RESOURCE_TYPE,
|
|
382
|
+
a as LOOP_ITEM_TYPE_LABELS,
|
|
383
|
+
b2 as LOOP_ITEM_TYPE_OPTIONS,
|
|
384
|
+
POPUP_TEMPLATE_RESOURCE_TYPE,
|
|
385
|
+
c3 as TEMP_RULES_RESOURCE_KEY,
|
|
386
|
+
d2 as TEMP_RULES_RESOURCE_SCOPE,
|
|
387
|
+
e2 as TEMP_RULES_RESOURCE_TYPE,
|
|
388
|
+
TEMP_TEMPLATE_RESOURCE_TYPES,
|
|
389
|
+
f2 as TEMP_TEMPLATE_RESOURCE_TYPE_OPTIONS,
|
|
390
|
+
W as WB_LAYOUT_PAGE_CUSTOM_KEY,
|
|
391
|
+
b as WB_LAYOUT_PAGE_ID_CUSTOM_KEY,
|
|
392
|
+
buildLayoutPageProjectData,
|
|
393
|
+
buildLayoutPageResourceKey,
|
|
394
|
+
buildLayoutProjectDataMap,
|
|
395
|
+
g as buildLoopItemResourceExt,
|
|
396
|
+
buildPageOnlyProjectData,
|
|
397
|
+
buildSinglePageProjectData,
|
|
398
|
+
d as cloneLayoutSettings,
|
|
399
|
+
cloneTemplateRulesPayload,
|
|
400
|
+
createDefaultLayoutRulesPayload,
|
|
401
|
+
createDefaultLayoutSettings,
|
|
402
|
+
createDefaultTemplateRulesPayload,
|
|
403
|
+
e as createLayoutPageData,
|
|
404
|
+
c as createLayoutTemplatePlugin,
|
|
405
|
+
extractLegacyLayoutBundle,
|
|
406
|
+
getGrapesPageId,
|
|
407
|
+
f as getGrapesPageMatchIds,
|
|
408
|
+
h as getGrapesPageName,
|
|
409
|
+
i as getGrapesPageRouteId,
|
|
410
|
+
j as getLayoutPageAliases,
|
|
411
|
+
k as getLayoutPageFallbackName,
|
|
412
|
+
l as getLayoutTargetAliases,
|
|
413
|
+
h2 as getLoopItemType,
|
|
414
|
+
i2 as getLoopItemTypeLabel,
|
|
415
|
+
getPageLayoutSlot,
|
|
416
|
+
getTemplateRuleBucketKey,
|
|
417
|
+
getTemplateRulesForType,
|
|
418
|
+
groupLayoutPagesBySlot,
|
|
419
|
+
m as isLayoutPage,
|
|
420
|
+
j2 as isPopupTemplateResourceType,
|
|
421
|
+
k2 as isTempCategoryListResourceType,
|
|
422
|
+
l2 as isTempDetailResourceType,
|
|
423
|
+
m2 as isTempTemplateResourceType,
|
|
424
|
+
o as layoutTargetMatchesPage,
|
|
425
|
+
c2 as layoutTemplate,
|
|
426
|
+
loadRulePageOptions,
|
|
427
|
+
mergeLayoutBundleProjectData,
|
|
428
|
+
normalizeLayoutRulesPayload,
|
|
429
|
+
normalizeLayoutSettings,
|
|
430
|
+
normalizeTemplateRulesPayload,
|
|
431
|
+
p as parseLoopItemResourceExt,
|
|
432
|
+
r as resolveLayoutIdForPage,
|
|
433
|
+
setTemplateRulesForType,
|
|
434
|
+
toRulePageOptions
|
|
435
|
+
};
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
const WB_LAYOUT_PAGE_CUSTOM_KEY = "wbLayoutSlot";
|
|
2
|
+
const WB_LAYOUT_PAGE_ID_CUSTOM_KEY = "wbLayoutPageId";
|
|
3
|
+
const DEFAULT_VERSION = 1;
|
|
4
|
+
const isRecord = (value) => {
|
|
5
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
6
|
+
};
|
|
7
|
+
const normalizeLayoutTarget = (value) => {
|
|
8
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === "string") {
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
return trimmed ? trimmed : null;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
const normalizePageIds = (value) => {
|
|
18
|
+
if (!Array.isArray(value))
|
|
19
|
+
return [];
|
|
20
|
+
const pageIds = [];
|
|
21
|
+
const seen = /* @__PURE__ */ new Set();
|
|
22
|
+
for (const item of value) {
|
|
23
|
+
const normalized = typeof item === "string" ? item.trim() : typeof item === "number" && Number.isFinite(item) ? String(item) : "";
|
|
24
|
+
if (!normalized || seen.has(normalized))
|
|
25
|
+
continue;
|
|
26
|
+
seen.add(normalized);
|
|
27
|
+
pageIds.push(normalized);
|
|
28
|
+
}
|
|
29
|
+
return pageIds;
|
|
30
|
+
};
|
|
31
|
+
const uniqueStrings = (items) => {
|
|
32
|
+
const values = [];
|
|
33
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34
|
+
items.forEach((item) => {
|
|
35
|
+
const value = `${item ?? ""}`.trim();
|
|
36
|
+
if (!value || seen.has(value))
|
|
37
|
+
return;
|
|
38
|
+
seen.add(value);
|
|
39
|
+
values.push(value);
|
|
40
|
+
});
|
|
41
|
+
return values;
|
|
42
|
+
};
|
|
43
|
+
const normalizeLayoutRule = (rule, fallbackIndex = 0) => {
|
|
44
|
+
const rawRule = isRecord(rule) ? rule : {};
|
|
45
|
+
const id = typeof rawRule.id === "string" && rawRule.id.trim() ? rawRule.id.trim() : `layout-rule-${fallbackIndex + 1}`;
|
|
46
|
+
return {
|
|
47
|
+
id,
|
|
48
|
+
name: typeof rawRule.name === "string" && rawRule.name.trim() ? rawRule.name.trim() : void 0,
|
|
49
|
+
layoutId: normalizeLayoutTarget(rawRule.layoutId),
|
|
50
|
+
matchMode: rawRule.matchMode === "exclude" ? "exclude" : "include",
|
|
51
|
+
pageIds: normalizePageIds(rawRule.pageIds),
|
|
52
|
+
enabled: rawRule.enabled !== false,
|
|
53
|
+
priority: typeof rawRule.priority === "number" && Number.isFinite(rawRule.priority) ? rawRule.priority : fallbackIndex,
|
|
54
|
+
sourceUpdatedAt: typeof rawRule.sourceUpdatedAt === "string" && rawRule.sourceUpdatedAt.trim() ? rawRule.sourceUpdatedAt.trim() : void 0,
|
|
55
|
+
sourceResourceId: typeof rawRule.sourceResourceId === "number" && Number.isFinite(rawRule.sourceResourceId) ? rawRule.sourceResourceId : void 0
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
const normalizeLayoutSlot = (slot) => {
|
|
59
|
+
const rawSlot = isRecord(slot) ? slot : {};
|
|
60
|
+
const rules = Array.isArray(rawSlot.rules) ? rawSlot.rules.map((rule, index) => normalizeLayoutRule(rule, index)) : [];
|
|
61
|
+
return {
|
|
62
|
+
defaultLayoutId: null,
|
|
63
|
+
rules
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const createDefaultLayoutSettings = () => {
|
|
67
|
+
return {
|
|
68
|
+
version: DEFAULT_VERSION,
|
|
69
|
+
header: {
|
|
70
|
+
defaultLayoutId: null,
|
|
71
|
+
rules: []
|
|
72
|
+
},
|
|
73
|
+
footer: {
|
|
74
|
+
defaultLayoutId: null,
|
|
75
|
+
rules: []
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const normalizeLayoutSettings = (settings) => {
|
|
80
|
+
const rawSettings = isRecord(settings) ? settings : {};
|
|
81
|
+
return {
|
|
82
|
+
version: DEFAULT_VERSION,
|
|
83
|
+
header: normalizeLayoutSlot(rawSettings.header),
|
|
84
|
+
footer: normalizeLayoutSlot(rawSettings.footer)
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
const cloneLayoutSettings = (settings) => {
|
|
88
|
+
return normalizeLayoutSettings(settings);
|
|
89
|
+
};
|
|
90
|
+
const getGrapesPageId = (page) => {
|
|
91
|
+
var _a, _b, _c;
|
|
92
|
+
const custom = ((_a = page == null ? void 0 : page.get) == null ? void 0 : _a.call(page, "custom")) ?? (page == null ? void 0 : page.custom) ?? {};
|
|
93
|
+
return `${(custom == null ? void 0 : custom[WB_LAYOUT_PAGE_ID_CUSTOM_KEY]) ?? ((_b = page == null ? void 0 : page.get) == null ? void 0 : _b.call(page, "id")) ?? (page == null ? void 0 : page.id) ?? ((_c = page == null ? void 0 : page.get) == null ? void 0 : _c.call(page, "name")) ?? (page == null ? void 0 : page.name) ?? ""}`.trim();
|
|
94
|
+
};
|
|
95
|
+
const getGrapesPageName = (page) => {
|
|
96
|
+
var _a;
|
|
97
|
+
return `${((_a = page == null ? void 0 : page.get) == null ? void 0 : _a.call(page, "name")) ?? (page == null ? void 0 : page.name) ?? getGrapesPageId(page) ?? "Page"}`.trim();
|
|
98
|
+
};
|
|
99
|
+
const getGrapesPageRouteId = (page) => {
|
|
100
|
+
var _a, _b;
|
|
101
|
+
const custom = ((_a = page == null ? void 0 : page.get) == null ? void 0 : _a.call(page, "custom")) ?? (page == null ? void 0 : page.custom) ?? {};
|
|
102
|
+
return `${((_b = page == null ? void 0 : page.get) == null ? void 0 : _b.call(page, "slug")) ?? (page == null ? void 0 : page.slug) ?? custom.slug ?? getGrapesPageId(page)}`.trim();
|
|
103
|
+
};
|
|
104
|
+
const getGrapesPageMatchIds = (page) => {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
const custom = ((_a = page == null ? void 0 : page.get) == null ? void 0 : _a.call(page, "custom")) ?? (page == null ? void 0 : page.custom) ?? {};
|
|
107
|
+
const candidates = [
|
|
108
|
+
custom == null ? void 0 : custom[WB_LAYOUT_PAGE_ID_CUSTOM_KEY],
|
|
109
|
+
getGrapesPageRouteId(page),
|
|
110
|
+
getGrapesPageId(page),
|
|
111
|
+
getGrapesPageName(page),
|
|
112
|
+
(_b = page == null ? void 0 : page.get) == null ? void 0 : _b.call(page, "slug"),
|
|
113
|
+
page == null ? void 0 : page.slug,
|
|
114
|
+
custom.slug
|
|
115
|
+
];
|
|
116
|
+
return uniqueStrings(candidates);
|
|
117
|
+
};
|
|
118
|
+
const getPageLayoutSlot = (page) => {
|
|
119
|
+
var _a, _b, _c;
|
|
120
|
+
const custom = ((_a = page == null ? void 0 : page.get) == null ? void 0 : _a.call(page, "custom")) ?? (page == null ? void 0 : page.custom) ?? {};
|
|
121
|
+
const slot = custom == null ? void 0 : custom[WB_LAYOUT_PAGE_CUSTOM_KEY];
|
|
122
|
+
if (slot === "header" || slot === "footer")
|
|
123
|
+
return slot;
|
|
124
|
+
const layoutPageId = `${(custom == null ? void 0 : custom[WB_LAYOUT_PAGE_ID_CUSTOM_KEY]) ?? ((_b = page == null ? void 0 : page.get) == null ? void 0 : _b.call(page, "id")) ?? (page == null ? void 0 : page.id) ?? ""}`.trim();
|
|
125
|
+
if (/^wb-header(?:-\d+)?$/.test(layoutPageId))
|
|
126
|
+
return "header";
|
|
127
|
+
if (/^wb-footer(?:-\d+)?$/.test(layoutPageId))
|
|
128
|
+
return "footer";
|
|
129
|
+
const name = `${((_c = page == null ? void 0 : page.get) == null ? void 0 : _c.call(page, "name")) ?? (page == null ? void 0 : page.name) ?? ""}`.trim();
|
|
130
|
+
if (/^Header(?:\s+\d+)?$/.test(name))
|
|
131
|
+
return "header";
|
|
132
|
+
if (/^Footer(?:\s+\d+)?$/.test(name))
|
|
133
|
+
return "footer";
|
|
134
|
+
return null;
|
|
135
|
+
};
|
|
136
|
+
const isLayoutPage = (page) => {
|
|
137
|
+
return getPageLayoutSlot(page) !== null;
|
|
138
|
+
};
|
|
139
|
+
const getLayoutPageFallbackName = (layoutId) => {
|
|
140
|
+
const id = `${layoutId ?? ""}`.trim();
|
|
141
|
+
const match = /^wb-(header|footer)(?:-(\d+))?$/.exec(id);
|
|
142
|
+
if (!match)
|
|
143
|
+
return "";
|
|
144
|
+
const title = match[1] === "header" ? "Header" : "Footer";
|
|
145
|
+
return match[2] ? `${title} ${match[2]}` : title;
|
|
146
|
+
};
|
|
147
|
+
const getLayoutTargetAliases = (layoutId) => {
|
|
148
|
+
const id = `${layoutId ?? ""}`.trim();
|
|
149
|
+
if (!id)
|
|
150
|
+
return [];
|
|
151
|
+
return uniqueStrings([
|
|
152
|
+
id,
|
|
153
|
+
getLayoutPageFallbackName(id)
|
|
154
|
+
]);
|
|
155
|
+
};
|
|
156
|
+
const getLayoutPageAliases = (page) => {
|
|
157
|
+
const id = getGrapesPageId(page);
|
|
158
|
+
return uniqueStrings([
|
|
159
|
+
...getGrapesPageMatchIds(page),
|
|
160
|
+
id,
|
|
161
|
+
getLayoutPageFallbackName(id)
|
|
162
|
+
]);
|
|
163
|
+
};
|
|
164
|
+
const layoutTargetMatchesPage = (layoutId, page) => {
|
|
165
|
+
const targetAliases = getLayoutTargetAliases(layoutId);
|
|
166
|
+
if (targetAliases.length === 0)
|
|
167
|
+
return false;
|
|
168
|
+
const pageAliases = getLayoutPageAliases(page);
|
|
169
|
+
if (pageAliases.length === 0)
|
|
170
|
+
return false;
|
|
171
|
+
return targetAliases.some((alias) => pageAliases.includes(alias));
|
|
172
|
+
};
|
|
173
|
+
const createLayoutPageData = (slotKey, existingPages = [], reservedLayoutIds = []) => {
|
|
174
|
+
const existingIds = /* @__PURE__ */ new Set([
|
|
175
|
+
...existingPages.map(getGrapesPageId).filter(Boolean),
|
|
176
|
+
...reservedLayoutIds.map((layoutId) => normalizeLayoutTarget(layoutId)).filter((layoutId) => layoutId !== null).map((layoutId) => String(layoutId))
|
|
177
|
+
]);
|
|
178
|
+
const baseId = `wb-${slotKey}`;
|
|
179
|
+
let id = baseId;
|
|
180
|
+
let index = 2;
|
|
181
|
+
while (existingIds.has(id)) {
|
|
182
|
+
id = `${baseId}-${index}`;
|
|
183
|
+
index += 1;
|
|
184
|
+
}
|
|
185
|
+
const title = slotKey === "header" ? "Header" : "Footer";
|
|
186
|
+
return {
|
|
187
|
+
id,
|
|
188
|
+
name: `${title} ${index === 2 ? "" : index - 1}`.trim(),
|
|
189
|
+
custom: {
|
|
190
|
+
[WB_LAYOUT_PAGE_CUSTOM_KEY]: slotKey,
|
|
191
|
+
[WB_LAYOUT_PAGE_ID_CUSTOM_KEY]: id
|
|
192
|
+
},
|
|
193
|
+
component: {
|
|
194
|
+
type: slotKey === "header" ? "navbar" : "footer-section"
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
const resolveLayoutIdForPage = (slot, pageId, availableLayoutIds = []) => {
|
|
199
|
+
if (!slot)
|
|
200
|
+
return null;
|
|
201
|
+
const currentPageIds = (Array.isArray(pageId) ? pageId : [pageId]).map((item) => `${item ?? ""}`.trim()).filter(Boolean);
|
|
202
|
+
if (currentPageIds.length === 0)
|
|
203
|
+
return null;
|
|
204
|
+
const availableLayoutIdSet = new Set(
|
|
205
|
+
availableLayoutIds.map((layoutId) => normalizeLayoutTarget(layoutId)).filter((layoutId) => layoutId !== null).map((layoutId) => String(layoutId))
|
|
206
|
+
);
|
|
207
|
+
const hasAvailableLayouts = availableLayoutIdSet.size > 0;
|
|
208
|
+
const isAvailableLayoutId = (layoutId) => {
|
|
209
|
+
const normalized = normalizeLayoutTarget(layoutId);
|
|
210
|
+
if (normalized === null)
|
|
211
|
+
return true;
|
|
212
|
+
return !hasAvailableLayouts || availableLayoutIdSet.has(String(normalized));
|
|
213
|
+
};
|
|
214
|
+
const rules = [...slot.rules ?? []].filter((rule) => isAvailableLayoutId(rule.layoutId)).sort((a, b) => {
|
|
215
|
+
const priorityA = typeof a.priority === "number" && Number.isFinite(a.priority) ? a.priority : 0;
|
|
216
|
+
const priorityB = typeof b.priority === "number" && Number.isFinite(b.priority) ? b.priority : 0;
|
|
217
|
+
return priorityA - priorityB;
|
|
218
|
+
});
|
|
219
|
+
for (const rule of rules) {
|
|
220
|
+
if (!(rule == null ? void 0 : rule.enabled))
|
|
221
|
+
continue;
|
|
222
|
+
const normalizedLayoutId = normalizeLayoutTarget(rule.layoutId);
|
|
223
|
+
if (normalizedLayoutId === null && rule.matchMode === "exclude")
|
|
224
|
+
continue;
|
|
225
|
+
const pageIds = Array.isArray(rule.pageIds) ? rule.pageIds.map((item) => `${item}`.trim()).filter(Boolean) : [];
|
|
226
|
+
const hasMatchedPage = currentPageIds.some((currentPageId) => pageIds.includes(currentPageId));
|
|
227
|
+
const matched = rule.matchMode === "exclude" ? !hasMatchedPage : hasMatchedPage;
|
|
228
|
+
if (matched) {
|
|
229
|
+
return normalizedLayoutId;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return null;
|
|
233
|
+
};
|
|
234
|
+
export {
|
|
235
|
+
WB_LAYOUT_PAGE_CUSTOM_KEY as W,
|
|
236
|
+
getPageLayoutSlot as a,
|
|
237
|
+
WB_LAYOUT_PAGE_ID_CUSTOM_KEY as b,
|
|
238
|
+
createDefaultLayoutSettings as c,
|
|
239
|
+
cloneLayoutSettings as d,
|
|
240
|
+
createLayoutPageData as e,
|
|
241
|
+
getGrapesPageMatchIds as f,
|
|
242
|
+
getGrapesPageId as g,
|
|
243
|
+
getGrapesPageName as h,
|
|
244
|
+
getGrapesPageRouteId as i,
|
|
245
|
+
getLayoutPageAliases as j,
|
|
246
|
+
getLayoutPageFallbackName as k,
|
|
247
|
+
getLayoutTargetAliases as l,
|
|
248
|
+
isLayoutPage as m,
|
|
249
|
+
normalizeLayoutSettings as n,
|
|
250
|
+
layoutTargetMatchesPage as o,
|
|
251
|
+
resolveLayoutIdForPage as r
|
|
252
|
+
};
|