@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.
Files changed (193) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +3 -0
  3. package/dist/basic/cssScope.d.ts +3 -0
  4. package/dist/basic/index.d.ts +81 -0
  5. package/dist/basic/injectStyle.d.ts +20 -0
  6. package/dist/basic/plugin.d.ts +19 -0
  7. package/dist/basic/publisher.d.ts +4 -0
  8. package/dist/basic/registries/interactive/accordion/index.d.ts +3 -0
  9. package/dist/basic/registries/interactive/backButton/index.d.ts +3 -0
  10. package/dist/basic/registries/interactive/button/index.d.ts +10 -0
  11. package/dist/basic/registries/interactive/countUp/index.d.ts +9 -0
  12. package/dist/basic/registries/interactive/customCode/index.d.ts +3 -0
  13. package/dist/basic/registries/interactive/index.d.ts +2 -0
  14. package/dist/basic/registries/interactive/inquiryForm/index.d.ts +3 -0
  15. package/dist/basic/registries/interactive/klaviyoSubscribe/index.d.ts +3 -0
  16. package/dist/basic/registries/interactive/popup/index.d.ts +5 -0
  17. package/dist/basic/registries/interactive/salesmartlyChatButton/index.d.ts +10 -0
  18. package/dist/basic/registries/interactive/search/index.d.ts +10 -0
  19. package/dist/basic/registries/interactive/socialShare/index.d.ts +33 -0
  20. package/dist/basic/registries/interactive/tabs/index.d.ts +3 -0
  21. package/dist/basic/registries/layout/container/index.d.ts +19 -0
  22. package/dist/basic/registries/layout/divider/index.d.ts +7 -0
  23. package/dist/basic/registries/layout/grid/index.d.ts +11 -0
  24. package/dist/basic/registries/layout/index.d.ts +2 -0
  25. package/dist/basic/registries/layout/layoutBase/index.d.ts +10 -0
  26. package/dist/basic/registries/layout/section/index.d.ts +3 -0
  27. package/dist/basic/registries/layout/sectionGridBlock/index.d.ts +3 -0
  28. package/dist/basic/registries/layout/spacer/index.d.ts +7 -0
  29. package/dist/basic/registries/media/banner/index.d.ts +11 -0
  30. package/dist/basic/registries/media/carousel/index.d.ts +6 -0
  31. package/dist/basic/registries/media/flipbook/index.d.ts +5 -0
  32. package/dist/basic/registries/media/icon/index.d.ts +3 -0
  33. package/dist/basic/registries/media/image/index.d.ts +3 -0
  34. package/dist/basic/registries/media/index.d.ts +2 -0
  35. package/dist/basic/registries/media/industryTabs/index.d.ts +3 -0
  36. package/dist/basic/registries/media/marquee/index.d.ts +4 -0
  37. package/dist/basic/registries/media/ourSolutions/helpers.d.ts +289 -0
  38. package/dist/basic/registries/media/ourSolutions/index.d.ts +4 -0
  39. package/dist/basic/registries/media/ourSolutions/script.d.ts +1 -0
  40. package/dist/basic/registries/media/ourSolutions/style.d.ts +1 -0
  41. package/dist/basic/registries/media/pdfViewer/index.d.ts +3 -0
  42. package/dist/basic/registries/media/productCategories/index.d.ts +4 -0
  43. package/dist/basic/registries/media/tabMediaGallery/index.d.ts +3 -0
  44. package/dist/basic/registries/media/video/index.d.ts +12 -0
  45. package/dist/basic/registries/navigation/footer/index.d.ts +10 -0
  46. package/dist/basic/registries/navigation/index.d.ts +2 -0
  47. package/dist/basic/registries/navigation/languageSwitcher/index.d.ts +6 -0
  48. package/dist/basic/registries/navigation/logo/index.d.ts +9 -0
  49. package/dist/basic/registries/navigation/navbar/constants.d.ts +38 -0
  50. package/dist/basic/registries/navigation/navbar/factories.d.ts +848 -0
  51. package/dist/basic/registries/navigation/navbar/helpers.d.ts +12 -0
  52. package/dist/basic/registries/navigation/navbar/index.d.ts +4 -0
  53. package/dist/basic/registries/navigation/navbar/registerMegaTypes.d.ts +2 -0
  54. package/dist/basic/registries/navigation/navbar/registerMenuTypes.d.ts +2 -0
  55. package/dist/basic/registries/navigation/navbar/registerRootTypes.d.ts +2 -0
  56. package/dist/basic/registries/navigation/navbar/script.d.ts +1 -0
  57. package/dist/basic/registries/navigation/navbar/style.d.ts +1 -0
  58. package/dist/basic/registries/navigation/socialLinks/index.d.ts +3 -0
  59. package/dist/basic/registries/section/allApplications/index.d.ts +3 -0
  60. package/dist/basic/registries/section/cardCarouselSection/index.d.ts +3 -0
  61. package/dist/basic/registries/section/caseSpotlight/index.d.ts +3 -0
  62. package/dist/basic/registries/section/companyScale/index.d.ts +3 -0
  63. package/dist/basic/registries/section/customizationGrid/index.d.ts +3 -0
  64. package/dist/basic/registries/section/factoryMap/index.d.ts +3 -0
  65. package/dist/basic/registries/section/focaHistoryTimeline/index.d.ts +3 -0
  66. package/dist/basic/registries/section/historyTimeline/index.d.ts +3 -0
  67. package/dist/basic/registries/section/homeBannerCarousel/index.d.ts +4 -0
  68. package/dist/basic/registries/section/hotspotShowcase/index.d.ts +30 -0
  69. package/dist/basic/registries/section/index.d.ts +2 -0
  70. package/dist/basic/registries/section/map/index.d.ts +4 -0
  71. package/dist/basic/registries/section/milestoneCardStrip/index.d.ts +3 -0
  72. package/dist/basic/registries/section/moreCardCarousel/index.d.ts +3 -0
  73. package/dist/basic/registries/section/ourAdvantages/index.d.ts +4 -0
  74. package/dist/basic/registries/section/overviewSplit/index.d.ts +3 -0
  75. package/dist/basic/registries/section/processTimeline/index.d.ts +3 -0
  76. package/dist/basic/registries/section/productCardStrip/index.d.ts +3 -0
  77. package/dist/basic/registries/section/resourceSection/index.d.ts +6 -0
  78. package/dist/basic/registries/section/responsiveHeroCarousel/index.d.ts +4 -0
  79. package/dist/basic/registries/section/serviceIconGrid/index.d.ts +4 -0
  80. package/dist/basic/registries/section/servicesCarousel/index.d.ts +4 -0
  81. package/dist/basic/registries/section/servicesShowcase/index.d.ts +4 -0
  82. package/dist/basic/registries/section/servicesThb/index.d.ts +4 -0
  83. package/dist/basic/registries/section/solutionList/index.d.ts +4 -0
  84. package/dist/basic/registries/section/staticPinMap/index.d.ts +4 -0
  85. package/dist/basic/registries/section/statsCards/index.d.ts +3 -0
  86. package/dist/basic/registries/section/swiperRuntime.d.ts +3 -0
  87. package/dist/basic/registries/shared/sharedTraits.d.ts +37 -0
  88. package/dist/basic/registries/types.d.ts +5 -0
  89. package/dist/basic/registries/typography/heading/index.d.ts +8 -0
  90. package/dist/basic/registries/typography/index.d.ts +2 -0
  91. package/dist/basic/registries/typography/textEditor/index.d.ts +6 -0
  92. package/dist/basic/registryManifest.d.ts +9 -0
  93. package/dist/basic/styleHelpers.d.ts +29 -0
  94. package/dist/basic/svgIcon.d.ts +11 -0
  95. package/dist/basic/traitBridge.d.ts +20 -0
  96. package/dist/basic/traitFactory.d.ts +106 -0
  97. package/dist/basic.js +1146 -0
  98. package/dist/cms/cmsFactory.d.ts +164 -0
  99. package/dist/cms/dynamicRenderPipeline.d.ts +12 -0
  100. package/dist/cms/index.d.ts +31 -0
  101. package/dist/cms/plugin.d.ts +12 -0
  102. package/dist/cms/publisher.d.ts +7 -0
  103. package/dist/cms/registries/dynamic/cms/constants.d.ts +16 -0
  104. package/dist/cms/registries/dynamic/cms/dynamicField/bindings.d.ts +78 -0
  105. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/breadcrumbBlock.d.ts +1 -0
  106. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/conditionalBlock.d.ts +1 -0
  107. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/datetimeBlock.d.ts +1 -0
  108. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/htmlBlock.d.ts +1 -0
  109. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/imageBlock.d.ts +1 -0
  110. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/linkBlock.d.ts +1 -0
  111. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/seoBlock.d.ts +1 -0
  112. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/textBlock.d.ts +1 -0
  113. package/dist/cms/registries/dynamic/cms/dynamicField/blocks/tocBlock.d.ts +1 -0
  114. package/dist/cms/registries/dynamic/cms/dynamicField/constants.d.ts +19 -0
  115. package/dist/cms/registries/dynamic/cms/dynamicField/helpers.d.ts +52 -0
  116. package/dist/cms/registries/dynamic/cms/dynamicField/registerBlock.d.ts +57 -0
  117. package/dist/cms/registries/dynamic/cms/dynamicField/styles.d.ts +7 -0
  118. package/dist/cms/registries/dynamic/cms/media/previewMediaTrait.d.ts +7 -0
  119. package/dist/cms/registries/dynamic/cms/menu/siteMenuAttrs.d.ts +11 -0
  120. package/dist/cms/registries/dynamic/cms/menuTree/menuTreeAttrs.d.ts +8 -0
  121. package/dist/cms/registries/dynamic/cms/post/styles.d.ts +6 -0
  122. package/dist/cms/registries/dynamic/cms/product/detail.styles.d.ts +1 -0
  123. package/dist/cms/registries/dynamic/cms/product/detailV2.styles.d.ts +1 -0
  124. package/dist/cms/registries/dynamic/cms/product/previewProductTrait.d.ts +6 -0
  125. package/dist/cms/registries/dynamic/cms/product/styles.d.ts +6 -0
  126. package/dist/cms/registries/dynamic/dataProvider.d.ts +45 -0
  127. package/dist/cms/registries/dynamic/loopGrid/paginationStyles.d.ts +5 -0
  128. package/dist/cms/registries/dynamic/loopGrid/preview.d.ts +16 -0
  129. package/dist/cms/registries/dynamic/loopGrid/publisher.d.ts +3 -0
  130. package/dist/cms/registries/dynamic/loopGrid/types.d.ts +97 -0
  131. package/dist/cms/registries/navigation/navbarThb/index.d.ts +3 -0
  132. package/dist/cms/registries/navigation/navbarThb/script.d.ts +1 -0
  133. package/dist/cms/registries/navigation/navbarThb/style.d.ts +1 -0
  134. package/dist/cms.js +4535 -0
  135. package/dist/global-settings/components/FontFamilySelect.vue.d.ts +29 -0
  136. package/dist/global-settings/components/FontManagerPanel.vue.d.ts +37 -0
  137. package/dist/global-settings/index.d.ts +8 -0
  138. package/dist/global-settings/plugin.d.ts +3 -0
  139. package/dist/global-settings/publisher.d.ts +15 -0
  140. package/dist/global-settings/runtime/canvasInjection.d.ts +13 -0
  141. package/dist/global-settings/runtime/panelDraftSave.d.ts +17 -0
  142. package/dist/global-settings/runtime/settingsSource.d.ts +4 -0
  143. package/dist/global-settings/useFontManager.d.ts +38 -0
  144. package/dist/global-settings/useGoogleFonts.d.ts +20 -0
  145. package/dist/global-settings/vue.d.ts +1 -0
  146. package/dist/global-settings.js +66 -0
  147. package/dist/i18n/I18nPanel.vue.d.ts +23 -0
  148. package/dist/i18n/i18n.d.ts +25 -0
  149. package/dist/i18n/index.d.ts +7 -0
  150. package/dist/i18n/languageOrder.d.ts +9 -0
  151. package/dist/i18n/plugin.d.ts +21 -0
  152. package/dist/i18n/types.d.ts +101 -0
  153. package/dist/i18n/useWebBuilderI18n.d.ts +164 -0
  154. package/dist/i18n/vue.d.ts +1 -0
  155. package/dist/i18n-BYR3l48y.js +959 -0
  156. package/dist/i18n.js +929 -0
  157. package/dist/index-CxJlLwvG.js +35378 -0
  158. package/dist/index-DWfJ4PBm.js +5724 -0
  159. package/dist/index.d.ts +9 -0
  160. package/dist/index.js +12 -0
  161. package/dist/layout-template/components/LayoutPanel.vue.d.ts +37 -0
  162. package/dist/layout-template/components/TemplateRulesPanel.vue.d.ts +41 -0
  163. package/dist/layout-template/config/layoutSharedResources.d.ts +9 -0
  164. package/dist/layout-template/config/templateSharedResources.d.ts +28 -0
  165. package/dist/layout-template/index.d.ts +9 -0
  166. package/dist/layout-template/plugin.d.ts +13 -0
  167. package/dist/layout-template/runtime/storageAdapter.d.ts +49 -0
  168. package/dist/layout-template/utils/layoutProjectData.d.ts +15 -0
  169. package/dist/layout-template/utils/layoutRulePages.d.ts +19 -0
  170. package/dist/layout-template/utils/layoutSettings.d.ts +45 -0
  171. package/dist/layout-template/utils/templateRules.d.ts +52 -0
  172. package/dist/layout-template/vue.d.ts +2 -0
  173. package/dist/layout-template.js +435 -0
  174. package/dist/layoutSettings-D4SYUMri.js +252 -0
  175. package/dist/plugin-BPA8qlaC.js +40 -0
  176. package/dist/plugin-C0PrxrIe.js +228 -0
  177. package/dist/plugin-DQshk1sY.js +361 -0
  178. package/dist/plugin-DebyCjXx.js +191 -0
  179. package/dist/plugin-Dr6TOtyH.js +73 -0
  180. package/dist/publisher/index.d.ts +5 -0
  181. package/dist/publisher/publisherAssets.d.ts +9 -0
  182. package/dist/publisher/publisherComponents.d.ts +7 -0
  183. package/dist/publisher/publisherPlugins.d.ts +12 -0
  184. package/dist/publisher-C6VWXq8u.js +25 -0
  185. package/dist/publisher.js +1711 -0
  186. package/dist/solar-BsElUqfQ.js +29843 -0
  187. package/dist/style.css +1181 -0
  188. package/dist/templateSharedResources-D1u7eFIs.js +89 -0
  189. package/dist/types-DNbok59z.js +2359 -0
  190. package/dist/useFontManager-CdrLq1eG.js +336 -0
  191. package/dist/vue.d.ts +3 -0
  192. package/dist/vue.js +2171 -0
  193. package/package.json +77 -0
@@ -0,0 +1,336 @@
1
+ import { ref, computed } from "vue";
2
+ let _cache = null;
3
+ let _fetchPromise = null;
4
+ const CATEGORY_MAP = {
5
+ "sans-serif": "sans-serif",
6
+ "serif": "serif",
7
+ "display": "cursive",
8
+ "handwriting": "cursive",
9
+ "monospace": "monospace"
10
+ };
11
+ function buildCssFamily(family, category) {
12
+ const fallback = CATEGORY_MAP[category] ?? "sans-serif";
13
+ return `"${family}", ${fallback}`;
14
+ }
15
+ const getGoogleFontsApiKey = () => {
16
+ var _a, _b;
17
+ const meta = import.meta;
18
+ return ((_b = (_a = meta.env) == null ? void 0 : _a.VITE_GOOGLE_FONTS_API_KEY) == null ? void 0 : _b.trim()) || "";
19
+ };
20
+ async function fetchAllFonts() {
21
+ if (_cache)
22
+ return _cache;
23
+ if (_fetchPromise)
24
+ return _fetchPromise;
25
+ const apiKey = getGoogleFontsApiKey();
26
+ _fetchPromise = (async () => {
27
+ try {
28
+ let fonts = [];
29
+ if (apiKey) {
30
+ const url = `https://www.googleapis.com/webfonts/v1/webfonts?key=${apiKey}&sort=popularity`;
31
+ const res = await fetch(url);
32
+ if (!res.ok)
33
+ throw new Error(`Google Fonts API error: ${res.status}`);
34
+ const data = await res.json();
35
+ fonts = data.items.map((item) => ({
36
+ family: item.family,
37
+ category: item.category,
38
+ cssFamily: buildCssFamily(item.family, item.category),
39
+ googleName: item.family.replace(/ /g, "+")
40
+ }));
41
+ } else {
42
+ fonts = BUILTIN_FONTS;
43
+ }
44
+ _cache = fonts;
45
+ return fonts;
46
+ } catch (error) {
47
+ console.warn("[useGoogleFonts] Failed to load font list, using builtin:", error);
48
+ _cache = BUILTIN_FONTS;
49
+ return BUILTIN_FONTS;
50
+ } finally {
51
+ _fetchPromise = null;
52
+ }
53
+ })();
54
+ return _fetchPromise;
55
+ }
56
+ const BUILTIN_FONTS = [
57
+ { family: "Inter", category: "sans-serif", cssFamily: '"Inter", sans-serif', googleName: "Inter" },
58
+ { family: "Roboto", category: "sans-serif", cssFamily: '"Roboto", sans-serif', googleName: "Roboto" },
59
+ { family: "Open Sans", category: "sans-serif", cssFamily: '"Open Sans", sans-serif', googleName: "Open+Sans" },
60
+ { family: "Lato", category: "sans-serif", cssFamily: '"Lato", sans-serif', googleName: "Lato" },
61
+ { family: "Montserrat", category: "sans-serif", cssFamily: '"Montserrat", sans-serif', googleName: "Montserrat" },
62
+ { family: "Poppins", category: "sans-serif", cssFamily: '"Poppins", sans-serif', googleName: "Poppins" },
63
+ { family: "Nunito", category: "sans-serif", cssFamily: '"Nunito", sans-serif', googleName: "Nunito" },
64
+ { family: "Raleway", category: "sans-serif", cssFamily: '"Raleway", sans-serif', googleName: "Raleway" },
65
+ { family: "Ubuntu", category: "sans-serif", cssFamily: '"Ubuntu", sans-serif', googleName: "Ubuntu" },
66
+ { family: "Outfit", category: "sans-serif", cssFamily: '"Outfit", sans-serif', googleName: "Outfit" },
67
+ { family: "DM Sans", category: "sans-serif", cssFamily: '"DM Sans", sans-serif', googleName: "DM+Sans" },
68
+ { family: "Plus Jakarta Sans", category: "sans-serif", cssFamily: '"Plus Jakarta Sans", sans-serif', googleName: "Plus+Jakarta+Sans" },
69
+ { family: "Manrope", category: "sans-serif", cssFamily: '"Manrope", sans-serif', googleName: "Manrope" },
70
+ { family: "Work Sans", category: "sans-serif", cssFamily: '"Work Sans", sans-serif', googleName: "Work+Sans" },
71
+ { family: "Rubik", category: "sans-serif", cssFamily: '"Rubik", sans-serif', googleName: "Rubik" },
72
+ { family: "Mulish", category: "sans-serif", cssFamily: '"Mulish", sans-serif', googleName: "Mulish" },
73
+ { family: "Source Sans 3", category: "sans-serif", cssFamily: '"Source Sans 3", sans-serif', googleName: "Source+Sans+3" },
74
+ { family: "Noto Sans", category: "sans-serif", cssFamily: '"Noto Sans", sans-serif', googleName: "Noto+Sans" },
75
+ { family: "Oswald", category: "sans-serif", cssFamily: '"Oswald", sans-serif', googleName: "Oswald" },
76
+ { family: "Figtree", category: "sans-serif", cssFamily: '"Figtree", sans-serif', googleName: "Figtree" },
77
+ { family: "Playfair Display", category: "serif", cssFamily: '"Playfair Display", serif', googleName: "Playfair+Display" },
78
+ { family: "Merriweather", category: "serif", cssFamily: '"Merriweather", serif', googleName: "Merriweather" },
79
+ { family: "Lora", category: "serif", cssFamily: '"Lora", serif', googleName: "Lora" },
80
+ { family: "EB Garamond", category: "serif", cssFamily: '"EB Garamond", serif', googleName: "EB+Garamond" },
81
+ { family: "Cormorant Garamond", category: "serif", cssFamily: '"Cormorant Garamond", serif', googleName: "Cormorant+Garamond" },
82
+ { family: "Bebas Neue", category: "display", cssFamily: '"Bebas Neue", cursive', googleName: "Bebas+Neue" },
83
+ { family: "Abril Fatface", category: "display", cssFamily: '"Abril Fatface", cursive', googleName: "Abril+Fatface" },
84
+ { family: "JetBrains Mono", category: "monospace", cssFamily: '"JetBrains Mono", monospace', googleName: "JetBrains+Mono" },
85
+ { family: "Fira Code", category: "monospace", cssFamily: '"Fira Code", monospace', googleName: "Fira+Code" },
86
+ { family: "Space Mono", category: "monospace", cssFamily: '"Space Mono", monospace', googleName: "Space+Mono" },
87
+ { family: "Noto Sans SC", category: "sans-serif", cssFamily: '"Noto Sans SC", sans-serif', googleName: "Noto+Sans+SC" },
88
+ { family: "Noto Serif SC", category: "serif", cssFamily: '"Noto Serif SC", serif', googleName: "Noto+Serif+SC" },
89
+ { family: "ZCOOL QingKe HuangYou", category: "display", cssFamily: '"ZCOOL QingKe HuangYou", cursive', googleName: "ZCOOL+QingKe+HuangYou" },
90
+ { family: "Ma Shan Zheng", category: "handwriting", cssFamily: '"Ma Shan Zheng", cursive', googleName: "Ma+Shan+Zheng" }
91
+ ];
92
+ const _injectedMain = /* @__PURE__ */ new Set();
93
+ const _injectedCanvas = /* @__PURE__ */ new WeakMap();
94
+ function injectGoogleFontCss(googleName, canvasDoc) {
95
+ const href = `https://fonts.googleapis.com/css2?family=${googleName}:wght@300;400;500;600;700&display=swap`;
96
+ if (!_injectedMain.has(googleName)) {
97
+ _injectedMain.add(googleName);
98
+ if (!document.head.querySelector(`link[data-wb-gf="${googleName}"]`)) {
99
+ const link = document.createElement("link");
100
+ link.rel = "stylesheet";
101
+ link.setAttribute("data-wb-gf", googleName);
102
+ link.href = href;
103
+ document.head.appendChild(link);
104
+ }
105
+ }
106
+ if (canvasDoc) {
107
+ let canvasSet = _injectedCanvas.get(canvasDoc);
108
+ if (!canvasSet) {
109
+ canvasSet = /* @__PURE__ */ new Set();
110
+ _injectedCanvas.set(canvasDoc, canvasSet);
111
+ }
112
+ if (!canvasSet.has(googleName)) {
113
+ canvasSet.add(googleName);
114
+ try {
115
+ if (!canvasDoc.head.querySelector(`link[data-wb-gf="${googleName}"]`)) {
116
+ const link = canvasDoc.createElement("link");
117
+ link.rel = "stylesheet";
118
+ link.setAttribute("data-wb-gf", googleName);
119
+ link.href = href;
120
+ canvasDoc.head.appendChild(link);
121
+ }
122
+ } catch {
123
+ }
124
+ }
125
+ }
126
+ }
127
+ function useGoogleFonts() {
128
+ const allFonts = ref([]);
129
+ const loading = ref(false);
130
+ const hasApiKey = Boolean(getGoogleFontsApiKey());
131
+ async function load() {
132
+ if (allFonts.value.length > 0)
133
+ return;
134
+ loading.value = true;
135
+ try {
136
+ allFonts.value = await fetchAllFonts();
137
+ } finally {
138
+ loading.value = false;
139
+ }
140
+ }
141
+ function search(query) {
142
+ if (!query)
143
+ return allFonts.value;
144
+ const q = query.toLowerCase();
145
+ return allFonts.value.filter(
146
+ (f) => f.family.toLowerCase().includes(q) || f.category.toLowerCase().includes(q)
147
+ );
148
+ }
149
+ return { allFonts: computed(() => allFonts.value), loading, hasApiKey, load, search };
150
+ }
151
+ function extractGoogleFontLinks(cssOrHtml) {
152
+ const quoted = /font-family\s*:\s*["']([^"']+)["']/gi;
153
+ const families = /* @__PURE__ */ new Set();
154
+ let match;
155
+ while ((match = quoted.exec(cssOrHtml)) !== null) {
156
+ families.add(match[1].trim());
157
+ }
158
+ const fontList = _cache ?? BUILTIN_FONTS;
159
+ const links = [];
160
+ for (const family of families) {
161
+ const found = fontList.find((f) => f.family === family);
162
+ if (found) {
163
+ links.push(
164
+ `https://fonts.googleapis.com/css2?family=${found.googleName}:wght@300;400;500;600;700&display=swap`
165
+ );
166
+ }
167
+ }
168
+ return links;
169
+ }
170
+ const ALL_VARIANTS = ["100", "200", "300", "regular", "500", "600", "700", "800", "900"];
171
+ const DEFAULT_VARIANTS = ["300", "regular", "500", "600", "700"];
172
+ const LINK_ATTR = "data-wb-font-installed";
173
+ let _instance = null;
174
+ let _editorRef = null;
175
+ function createFontManager() {
176
+ const installedFonts = ref([]);
177
+ const googleFonts = useGoogleFonts();
178
+ function buildFontHref(font) {
179
+ const weights = font.variants.filter((v) => v !== "regular").map((v) => parseInt(v)).filter((n) => !isNaN(n)).sort((a, b) => a - b);
180
+ if (weights.length === 0) {
181
+ return `https://fonts.googleapis.com/css2?family=${font.googleName}&display=swap`;
182
+ }
183
+ const wghtList = weights.map((w) => `0,${w}`).join(";");
184
+ return `https://fonts.googleapis.com/css2?family=${font.googleName}:ital,wght@${wghtList}&display=swap`;
185
+ }
186
+ function injectFontLink(doc, font) {
187
+ const existing = doc.head.querySelector(`link[${LINK_ATTR}="${font.googleName}"]`);
188
+ if (existing) {
189
+ existing.setAttribute("href", buildFontHref(font));
190
+ return;
191
+ }
192
+ const link = doc.createElement("link");
193
+ link.rel = "stylesheet";
194
+ link.setAttribute(LINK_ATTR, font.googleName);
195
+ link.href = buildFontHref(font);
196
+ doc.head.appendChild(link);
197
+ }
198
+ function removeFontLink(doc, googleName) {
199
+ var _a;
200
+ (_a = doc.head.querySelector(`link[${LINK_ATTR}="${googleName}"]`)) == null ? void 0 : _a.remove();
201
+ }
202
+ function refreshAllLinks(doc) {
203
+ doc.head.querySelectorAll(`link[${LINK_ATTR}]`).forEach((el) => el.remove());
204
+ installedFonts.value.forEach((font) => injectFontLink(doc, font));
205
+ }
206
+ function getCanvasDoc() {
207
+ var _a, _b;
208
+ try {
209
+ return ((_b = (_a = _editorRef == null ? void 0 : _editorRef.Canvas) == null ? void 0 : _a.getDocument) == null ? void 0 : _b.call(_a)) ?? null;
210
+ } catch {
211
+ return null;
212
+ }
213
+ }
214
+ function injectToAll(font) {
215
+ injectFontLink(document, font);
216
+ const canvasDoc = getCanvasDoc();
217
+ if (canvasDoc)
218
+ injectFontLink(canvasDoc, font);
219
+ }
220
+ function removeFromAll(googleName) {
221
+ removeFontLink(document, googleName);
222
+ const canvasDoc = getCanvasDoc();
223
+ if (canvasDoc)
224
+ removeFontLink(canvasDoc, googleName);
225
+ }
226
+ function refreshAll() {
227
+ refreshAllLinks(document);
228
+ const canvasDoc = getCanvasDoc();
229
+ if (canvasDoc)
230
+ refreshAllLinks(canvasDoc);
231
+ }
232
+ function installFont(fontItem, variants) {
233
+ if (installedFonts.value.some((f) => f.family === fontItem.family))
234
+ return;
235
+ const font = {
236
+ family: fontItem.family,
237
+ category: fontItem.category,
238
+ cssFamily: fontItem.cssFamily,
239
+ googleName: fontItem.googleName,
240
+ variants: variants ?? [...DEFAULT_VARIANTS]
241
+ };
242
+ installedFonts.value = [...installedFonts.value, font];
243
+ injectToAll(font);
244
+ }
245
+ function removeFont(family) {
246
+ const font = installedFonts.value.find((f) => f.family === family);
247
+ if (!font)
248
+ return;
249
+ installedFonts.value = installedFonts.value.filter((f) => f.family !== family);
250
+ removeFromAll(font.googleName);
251
+ }
252
+ function updateVariants(family, variants) {
253
+ const idx = installedFonts.value.findIndex((f) => f.family === family);
254
+ if (idx < 0)
255
+ return;
256
+ const updated = { ...installedFonts.value[idx], variants: [...variants] };
257
+ const nextFonts = [...installedFonts.value];
258
+ nextFonts[idx] = updated;
259
+ installedFonts.value = nextFonts;
260
+ injectToAll(updated);
261
+ }
262
+ function restoreFromSaved(saved) {
263
+ if (!Array.isArray(saved) || saved.length === 0) {
264
+ installedFonts.value = [];
265
+ refreshAll();
266
+ return;
267
+ }
268
+ installedFonts.value = saved.map((font) => {
269
+ var _a;
270
+ return {
271
+ family: font.family ?? "",
272
+ category: font.category ?? "sans-serif",
273
+ cssFamily: font.cssFamily ?? `"${font.family}", sans-serif`,
274
+ googleName: font.googleName ?? ((_a = font.family) == null ? void 0 : _a.replace(/ /g, "+")) ?? "",
275
+ variants: Array.isArray(font.variants) ? font.variants : [...DEFAULT_VARIANTS]
276
+ };
277
+ });
278
+ refreshAll();
279
+ }
280
+ function isInstalled(family) {
281
+ return installedFonts.value.some((font) => font.family === family);
282
+ }
283
+ function getFontLinks() {
284
+ return installedFonts.value.map((font) => buildFontHref(font));
285
+ }
286
+ function getFontLinksHtml() {
287
+ const preconnect = '<link rel="preconnect" href="https://fonts.googleapis.com">\n<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>';
288
+ const links = installedFonts.value.map(
289
+ (font) => `<link href="${buildFontHref(font)}" rel="stylesheet">`
290
+ ).join("\n");
291
+ return links ? `${preconnect}
292
+ ${links}` : "";
293
+ }
294
+ function setupEditor(editor) {
295
+ _editorRef = editor;
296
+ editor.on("canvas:frame:load", () => {
297
+ setTimeout(() => {
298
+ const canvasDoc = getCanvasDoc();
299
+ if (canvasDoc)
300
+ refreshAllLinks(canvasDoc);
301
+ }, 50);
302
+ });
303
+ editor.on("page", () => {
304
+ setTimeout(() => {
305
+ const canvasDoc = getCanvasDoc();
306
+ if (canvasDoc)
307
+ refreshAllLinks(canvasDoc);
308
+ }, 100);
309
+ });
310
+ }
311
+ return {
312
+ installedFonts: computed(() => installedFonts.value),
313
+ googleFonts,
314
+ installFont,
315
+ removeFont,
316
+ updateVariants,
317
+ isInstalled,
318
+ restoreFromSaved,
319
+ getFontLinks,
320
+ getFontLinksHtml,
321
+ setupEditor,
322
+ ALL_VARIANTS
323
+ };
324
+ }
325
+ function useFontManager() {
326
+ if (!_instance) {
327
+ _instance = createFontManager();
328
+ }
329
+ return _instance;
330
+ }
331
+ export {
332
+ useGoogleFonts as a,
333
+ extractGoogleFontLinks as e,
334
+ injectGoogleFontCss as i,
335
+ useFontManager as u
336
+ };
package/dist/vue.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './global-settings/vue.js';
2
+ export * from './i18n/vue.js';
3
+ export * from './layout-template/vue.js';