@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,6 @@
1
+ interface InitPreviewProductTraitOptions {
2
+ traitName?: string;
3
+ emptyLabel?: string;
4
+ }
5
+ export declare function initPreviewProductTrait(model: any, options?: InitPreviewProductTraitOptions): Promise<void>;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 产品卡片 class 样式。
3
+ * - 编辑器:通过 GrapesJS model defaults.styles 注入
4
+ * - 发布:由 cmsFactory / ssgRenderer 注入到 <head>
5
+ */
6
+ export declare const PRODUCT_CARD_CSS = "\n .wb-product-list { position: relative; display: grid; grid-template-columns: 220px minmax(0, 1fr); column-gap: 20px; row-gap: 72px; align-items: start; }\n .wb-product-list__grid { grid-column: 2; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 20px; row-gap: 72px; align-items: start; min-width: 0; }\n .wb-product-datasheet { grid-column: 2; display: none; min-width: 0; overflow-x: auto; }\n .wb-product-datasheet-page-title { display: none; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-list__grid,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-list__grid { display: none; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet { display: block; }\n\n .wb-product-list[data-list-mode=\"datasheet\"],\n .wb-product-list[data-wb-list-mode=\"datasheet\"] {\n display: block;\n width: min(100%, 1540px);\n margin: 0 auto;\n padding: 0;\n color: #101014;\n font-family: inherit;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-page-title,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-page-title {\n display: block;\n margin: 0 0 24px;\n color: #101014;\n font-size: 56px;\n line-height: 1.05;\n font-weight: 800;\n letter-spacing: 0;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-list__toolbar,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-list__toolbar,\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter-backdrop,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter-backdrop,\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-list-pagination,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-list-pagination,\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-list-loadmore,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-list-loadmore {\n display: none;\n }\n\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter-drawer,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter-drawer {\n position: relative;\n top: auto;\n width: 100%;\n max-height: none;\n margin: 0 0 96px;\n padding: 30px 30px 34px;\n border-radius: 8px;\n background: #f7f7f8;\n box-shadow: none;\n transform: none;\n z-index: 20;\n display: block;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__header,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin: 0 0 20px;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__title,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__title {\n margin: 0;\n color: #101014;\n font-size: 22px;\n line-height: 1.2;\n font-weight: 700;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__close,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__close,\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__footer,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__footer {\n display: none;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__body,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__body {\n position: relative;\n overflow: visible;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__all-products,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__all-products {\n position: absolute;\n top: -48px;\n right: 0;\n width: auto;\n min-height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n color: #2454f4;\n font-size: 0;\n line-height: 1;\n font-weight: 700;\n cursor: pointer;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__all-products::before,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__all-products::before {\n display: none;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__all-products::after,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__all-products::after {\n content: \"Reset All\";\n font-size: 16px;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__groups,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__groups {\n display: grid;\n grid-template-columns: repeat(4, minmax(220px, 1fr));\n gap: 20px 16px;\n align-items: start;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__group,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__group {\n position: relative;\n padding: 0;\n border: none;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control {\n position: relative;\n min-width: 0;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__toggle,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__toggle {\n width: 100%;\n min-height: 62px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 0 22px;\n border: 1px solid #e3e5ea;\n border-radius: 8px;\n background: #fff;\n color: #111318;\n font-size: 17px;\n line-height: 1.2;\n font-weight: 700;\n letter-spacing: 0;\n text-align: left;\n cursor: pointer;\n box-shadow: 0 1px 1px rgba(16, 24, 40, 0.02);\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__toggle,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__toggle,\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__toggle:focus-visible,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__toggle:focus-visible {\n border-color: #2454f4;\n outline: none;\n box-shadow: 0 0 0 2px rgba(36, 84, 244, 0.18);\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__toggle,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__toggle {\n border-radius: 8px 8px 0 0;\n background: #2454f4;\n border-color: #2454f4;\n color: #fff;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__summary-value,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__summary-value {\n color: #2454f4;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__summary-value,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__summary-value {\n color: #fff;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__chevron,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__chevron {\n width: 12px;\n height: 12px;\n border-right: 1.8px solid currentColor;\n border-bottom: 1.8px solid currentColor;\n transform: rotate(45deg);\n flex: 0 0 auto;\n margin-top: -4px;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__chevron,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__chevron {\n transform: rotate(225deg);\n margin-top: 4px;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__panel,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__panel {\n display: none;\n position: absolute;\n left: 0;\n top: 100%;\n width: 100%;\n min-width: 300px;\n padding: 22px;\n border: 1px solid #e2e5ea;\n border-top: 0;\n border-radius: 0 0 8px 8px;\n background: #fff;\n box-shadow: 0 14px 28px rgba(15, 23, 42, 0.12);\n z-index: 50;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__panel,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__control.is-open .wb-product-datasheet-filter__panel {\n display: block;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-fields,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-fields {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n gap: 12px;\n align-items: center;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-input,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-input {\n position: relative;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-input input,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__range-input input {\n width: 100%;\n height: 40px;\n padding: 0 44px 0 12px;\n border: 1px solid #dfe3ea;\n border-radius: 5px;\n background: #fff;\n color: #111318;\n font-size: 16px;\n line-height: 1;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__unit,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__unit {\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #9aa0aa;\n font-size: 16px;\n pointer-events: none;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__dash,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__dash {\n color: #101014;\n font-size: 16px;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__actions,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__actions {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 16px;\n margin-top: 26px;\n padding-top: 20px;\n border-top: 1px solid #edf0f4;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__action,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__action {\n min-height: 46px;\n border: 1px solid #dfe3ea;\n border-radius: 5px;\n background: #fff;\n color: #101014;\n font-size: 16px;\n font-weight: 700;\n cursor: pointer;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__action--primary,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__action--primary {\n border-color: #2454f4;\n background: #2454f4;\n color: #fff;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__options,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__options {\n display: grid;\n gap: 10px;\n max-height: 260px;\n overflow-y: auto;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__option,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__option {\n display: flex;\n align-items: center;\n gap: 9px;\n color: #111318;\n font-size: 15px;\n line-height: 1.35;\n cursor: pointer;\n }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-filter__option input,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-filter__option input {\n width: 16px;\n height: 16px;\n margin: 0;\n accent-color: #2454f4;\n }\n\n .wb-product-datasheet__summary { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin: 0 0 26px; }\n .wb-product-datasheet__title { margin: 0; font-size: 30px; line-height: 1.2; font-weight: 750; color: #101014; }\n .wb-product-datasheet__meta { display: flex; align-items: center; gap: 18px; margin-top: 8px; color: #101014; font-size: 18px; line-height: 1.45; font-weight: 600; }\n .wb-product-datasheet__selected { color: #2454f4; font-weight: 600; }\n .wb-product-datasheet__export { min-width: 154px; min-height: 44px; border: 1px solid #d1d5db; background: #fff; color: #101014; font-size: 16px; font-weight: 700; cursor: pointer; }\n .wb-product-datasheet__export:disabled { cursor: not-allowed; opacity: 0.45; }\n .wb-product-datasheet__table { min-width: 940px; overflow-x: auto; }\n .wb-product-datasheet__header,\n .wb-product-datasheet__row { display: grid; grid-template-columns: 72px minmax(230px, 1.45fr) repeat(var(--wb-datasheet-field-count, 5), minmax(160px, 1fr)); align-items: stretch; }\n .wb-product-datasheet__header { background: #3152ed; color: #fff; font-weight: 800; }\n .wb-product-datasheet__body { max-height: 640px; overflow-y: auto; scrollbar-color: #2b2f38 #e8e8ea; scrollbar-width: thin; }\n .wb-product-datasheet__body::-webkit-scrollbar { width: 6px; }\n .wb-product-datasheet__body::-webkit-scrollbar-track { background: #e8e8ea; }\n .wb-product-datasheet__body::-webkit-scrollbar-thumb { background: #2b2f38; border-radius: 999px; }\n .wb-product-datasheet__row { background: #fff; }\n .wb-product-datasheet__row:nth-child(even) { background: #f6f6f7; }\n .wb-product-datasheet__row.is-selected,\n .wb-product-datasheet__row:has(input:checked) { background: #f2f5ff; }\n .wb-product-datasheet__cell { display: flex; align-items: center; min-height: 62px; padding: 12px 22px; color: #3f3f46; font-size: 18px; line-height: 1.35; white-space: nowrap; }\n .wb-product-datasheet__header .wb-product-datasheet__cell { color: #fff; font-weight: 700; }\n .wb-product-datasheet__checkbox { justify-content: center; padding-inline: 10px; }\n .wb-product-datasheet__checkbox input { width: 18px; height: 18px; margin: 0; accent-color: #2454f4; }\n .wb-product-datasheet__designation-link { color: #2454f4; font-weight: 800; text-decoration: underline; }\n .wb-product-list__toolbar { display: none; }\n .wb-product-list__count { font-size: 15px; line-height: 1.6; color: #121821; }\n .wb-product-list__filter-btn { border: none; background: transparent; padding: 0; display: inline-flex; align-items: center; gap: 10px; color: #121821; font-size: 18px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; }\n .wb-product-list__filter-icon { position: relative; width: 16px; height: 14px; display: inline-block; }\n .wb-product-list__filter-badge { display: none; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: currentColor; color: #fff; font-size: 11px; line-height: 1; }\n .wb-product-list__filter-btn.is-active .wb-product-list__filter-badge { background: #fff; color: #121821; }\n .wb-product-filter-backdrop { display: none; position: fixed; inset: 0; background: rgba(17, 24, 39, 0.38); opacity: 0; visibility: hidden; pointer-events: none; transition: opacity 0.25s ease; z-index: 998; }\n .wb-product-filter-backdrop.is-open { opacity: 1; visibility: visible; pointer-events: auto; }\n .wb-product-filter-drawer { grid-column: 1; grid-row: 1; position: sticky; top: 24px; width: 100%; max-height: calc(100vh - 48px); padding: 0 16px 0 0; background: transparent; transform: none; z-index: 1; display: flex; flex-direction: column; }\n .wb-product-filter-drawer.is-open { transform: none; }\n .wb-product-filter__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 28px; }\n .wb-product-filter__title { margin: 0; font-size: 28px; line-height: 1.15; font-weight: 600; color: #121821; }\n .wb-product-filter__close { display: none; align-items: center; justify-content: center; width: 40px; height: 40px; border: 1px solid #d1d5db; border-radius: 999px; background: #fff; color: #111827; font-size: 24px; line-height: 1; cursor: pointer; }\n .wb-product-filter__body { flex: 1; min-height: 0; overflow-y: auto; }\n .wb-product-filter__all-products { width: 100%; display: flex; align-items: center; gap: 10px; padding: 0 0 18px; border: none; border-bottom: 1px solid #e5e7eb; background: transparent; color: #121821; font-size: 14px; line-height: 1.5; text-align: left; cursor: pointer; }\n .wb-product-filter__all-products::before { content: \"\"; width: 10px; height: 10px; border: 1px solid #8a949e; box-sizing: border-box; }\n .wb-product-filter__groups { display: flex; flex-direction: column; gap: 0; }\n .wb-product-filter__group { padding: 24px 0; border-bottom: 1px solid #e5e7eb; }\n .wb-product-filter__group:last-child { border-bottom: none; padding-bottom: 0; }\n .wb-product-filter__group-header { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0; border: none; background: transparent; color: #111827; cursor: pointer; }\n .wb-product-filter__group-title { font-size: 14px; line-height: 1.5; font-weight: 600; text-align: left; }\n .wb-product-filter__group-toggle { font-size: 18px; line-height: 1; font-weight: 400; }\n .wb-product-filter__group-options { display: grid; gap: 10px; padding-top: 16px; }\n .wb-product-filter__group.is-collapsed .wb-product-filter__group-options { display: none; }\n .wb-product-filter__option { display: flex; align-items: center; gap: 8px; font-size: 13px; line-height: 1.45; color: #111827; cursor: pointer; }\n .wb-product-filter__option input { width: 12px; height: 12px; margin: 0; cursor: pointer; accent-color: #ffe600; }\n .wb-product-filter__range { display: flex; flex-direction: column; gap: 8px; padding: 2px 0 6px; }\n .wb-product-filter__range-title { font-size: 13px; line-height: 1.45; font-weight: 500; color: #111827; }\n .wb-product-filter__range-fields { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 8px; }\n .wb-product-filter__range-fields input { width: 100%; min-width: 0; height: 34px; padding: 0 9px; border: 1px solid #d8dde6; border-radius: 4px; background: #fff; color: #111827; font-size: 13px; }\n .wb-product-filter__empty { margin: 0; font-size: 14px; line-height: 1.7; color: #6b7280; }\n .wb-product-filter__footer { display: none; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; padding-top: 28px; }\n .wb-product-filter__footer-btn { min-height: 56px; border-radius: 0; border: 1px solid #111827; background: #fff; color: #111827; font-size: 16px; font-weight: 600; letter-spacing: 0.04em; cursor: pointer; text-transform: uppercase; }\n .wb-product-filter__footer-btn--primary { background: #111827; color: #fff; }\n .wb-product-card { position: relative; overflow: hidden; border-radius: 0; background: #fff; min-width: 0; }\n .wb-product-card-img-wrap { overflow: hidden; aspect-ratio: 296 / 360; }\n .wb-product-card-img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 8px; transition: transform 0.3s ease; }\n .wb-product-card:hover .wb-product-card-img { transform: scale(1.05); }\n .wb-product-card-body { padding: 16px 0 0; }\n .wb-product-card-name { font-weight: 500; font-size: 16px; color: #1a1a2e; line-height: 1.35; margin: 0 0 8px; overflow: hidden; text-overflow: ellipsis; white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n .wb-product-card-link { display: inline; color: inherit; font: inherit; line-height: inherit; text-decoration: none; }\n .wb-product-card-link::after { content: \"\"; position: absolute; inset: 0; z-index: 1; cursor: pointer; }\n .wb-product-list-pagination { grid-column: 2; display: flex; justify-content: center; gap: 8px; padding: 16px 0; }\n .wb-product-list-page-btn,\n .wb-product-list-pagination > a,\n .wb-product-list-pagination > button,\n .wb-product-list-pagination > span { display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; padding: 0 10px; border: 1px solid #ddd; border-radius: 6px; background: #fff; font-size: 14px; color: #333; cursor: pointer; user-select: none; transition: all 0.2s; text-decoration: none; }\n .wb-product-list-page-btn:hover,\n .wb-product-list-pagination > a:hover,\n .wb-product-list-pagination > button:hover { border-color: #264FAA; color: #264FAA; }\n .wb-product-list-page-btn.active,\n .wb-product-list-pagination > a.active,\n .wb-product-list-pagination > button.active,\n .wb-product-list-pagination > span.active { background: #264FAA; border-color: #264FAA; color: #fff; }\n .wb-product-list-loadmore { grid-column: 2; display: flex; justify-content: center; padding: 12px 0 0; }\n .wb-product-list-loadmore__btn { min-width: 168px; min-height: 44px; padding: 0 20px; border: 1px solid #111827; background: #fff; color: #111827; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; }\n .wb-product-list-loadmore__btn:hover { background: #111827; color: #fff; }\n @media (max-width: 1023px) {\n .wb-product-list { grid-template-columns: minmax(0, 1fr); column-gap: 8px; row-gap: 28px; }\n .wb-product-list__grid { grid-column: 1 / -1; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 8px; row-gap: 28px; }\n .wb-product-datasheet { grid-column: 1 / -1; }\n .wb-product-datasheet__summary { align-items: flex-start; flex-direction: column; }\n .wb-product-datasheet__title { font-size: 24px; }\n .wb-product-datasheet__table { min-width: 760px; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-page-title,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-page-title { font-size: 42px; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__groups,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__groups { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .wb-product-list__toolbar { grid-column: 1 / -1; display: flex; flex-wrap: nowrap; align-items: center; justify-content: flex-start; gap: 12px; padding-bottom: 4px; border-bottom: none; }\n .wb-product-list__count { display: none; }\n .wb-product-filter-backdrop { display: block; }\n .wb-product-filter-drawer { position: fixed; top: 0; right: 0; bottom: 0; grid-column: auto; grid-row: auto; width: min(440px, 100vw); max-height: none; padding: 28px 22px 24px; background: #fff; transform: translateX(100%); transition: transform 0.28s ease; z-index: 999; }\n .wb-product-filter-drawer.is-open { transform: translateX(0); }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter-drawer,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter-drawer { position: relative; inset: auto; width: 100%; max-height: none; margin: 0 0 72px; padding: 26px 22px 30px; background: #f7f7f8; transform: none; transition: none; z-index: 20; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter-drawer.is-open,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter-drawer.is-open { transform: none; }\n .wb-product-filter__header { margin-bottom: 20px; }\n .wb-product-filter__title { font-size: 30px; }\n .wb-product-filter__close { display: inline-flex; }\n .wb-product-filter__body { padding-top: 16px; border-top: 1px solid #e5e7eb; }\n .wb-product-filter__all-products { padding-bottom: 16px; }\n .wb-product-filter__group { padding: 22px 0; }\n .wb-product-filter__footer { display: grid; }\n .wb-product-list-pagination,\n .wb-product-list-loadmore { grid-column: 1 / -1; }\n }\n @media (max-width: 767px) {\n .wb-product-list { grid-template-columns: minmax(0, 1fr); column-gap: 8px; row-gap: 28px; }\n .wb-product-list__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 8px; row-gap: 28px; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter__groups,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter__groups { grid-template-columns: minmax(0, 1fr); }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-datasheet-page-title,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-datasheet-page-title { font-size: 34px; }\n .wb-product-datasheet__meta { font-size: 15px; flex-wrap: wrap; }\n .wb-product-datasheet__cell { font-size: 15px; min-height: 54px; padding-inline: 16px; }\n .wb-product-list__filter-btn { justify-content: center; }\n .wb-product-filter-drawer { width: 100vw; padding: 22px 18px 20px; }\n .wb-product-list[data-list-mode=\"datasheet\"] .wb-product-filter-drawer,\n .wb-product-list[data-wb-list-mode=\"datasheet\"] .wb-product-filter-drawer { width: 100%; padding: 22px 16px 28px; margin-bottom: 54px; }\n .wb-product-filter__title { font-size: 28px; }\n .wb-product-filter__group { padding-bottom: 22px; }\n .wb-product-filter__group-options { gap: 12px; padding-top: 14px; }\n .wb-product-filter__footer { grid-template-columns: minmax(0, 1fr); }\n .wb-product-filter__footer-btn { min-height: 48px; font-size: 14px; }\n .wb-product-card-body { padding: 10px 0 0; }\n .wb-product-card-name {\n font-size: 15px;\n }\n .wb-product-list-pagination { flex-wrap: wrap; }\n .wb-product-list-page-btn { min-width: 34px; height: 34px; font-size: 13px; }\n }\n @media (max-width: 360px) {\n .wb-product-list__grid { grid-template-columns: minmax(0, 1fr); }\n }\n";
@@ -0,0 +1,45 @@
1
+ type LoadPage = (params: any) => Promise<any>;
2
+ type LoadList = (params?: any) => Promise<any>;
3
+ export interface WebBuilderDynamicDataProvider {
4
+ pages: {
5
+ loadList: LoadPage;
6
+ loadDraft: (params: any) => Promise<any>;
7
+ loadHistoryDetail: (id: number) => Promise<any>;
8
+ };
9
+ posts: {
10
+ loadPage: LoadPage;
11
+ loadDetail: (id: number) => Promise<any>;
12
+ };
13
+ postCategories: {
14
+ loadList: LoadList;
15
+ };
16
+ faqCategories: {
17
+ loadList: LoadList;
18
+ };
19
+ faqItems: {
20
+ loadList: LoadList;
21
+ };
22
+ productCategoryContent: {
23
+ loadDetail: (categoryId: number) => Promise<any>;
24
+ };
25
+ media: {
26
+ loadPage: LoadPage;
27
+ };
28
+ mediaCategories: {
29
+ loadList: LoadList;
30
+ };
31
+ products: {
32
+ loadPage: LoadPage;
33
+ loadDetail: (id: number) => Promise<any>;
34
+ loadSimpleList: LoadList;
35
+ };
36
+ productCategories: {
37
+ loadList: LoadList;
38
+ };
39
+ tenant: {
40
+ getEffectiveTenantId: () => string | number | null | undefined;
41
+ };
42
+ }
43
+ export declare const getWebBuilderDynamicDataProvider: () => WebBuilderDynamicDataProvider;
44
+ export declare const setWebBuilderDynamicDataProvider: (provider: WebBuilderDynamicDataProvider) => (() => void);
45
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare const LOOP_GRID_PAGINATION_CSS = "\n.wb-loop-grid-pagination{grid-column:1/-1;display:flex;gap:8px;justify-content:center;align-items:center;flex-wrap:wrap;padding:28px 0 4px;}\n.wb-loop-grid-pagination>a,.wb-loop-grid-pagination>button,.wb-loop-grid-pagination>span{display:inline-flex;align-items:center;justify-content:center;width:22px;min-width:22px;height:22px;padding:0;border:0;border-radius:4px;background:transparent;color:#1b2a33;font-size:14px;font-weight:400;line-height:1;text-decoration:none;box-sizing:border-box;box-shadow:none;}\n.wb-loop-grid-pagination svg{display:block;width:18px;height:18px;}\n.wb-loop-grid-pagination>a,.wb-loop-grid-pagination>button{cursor:pointer;}\n.wb-loop-grid-pagination>a:hover,.wb-loop-grid-pagination>button:hover{color:#2847f3;background:transparent;}\n.wb-loop-grid-pagination>a.active,.wb-loop-grid-pagination>button.active,.wb-loop-grid-pagination>span.active,.wb-loop-grid-pagination>a.is-active,.wb-loop-grid-pagination>button.is-active,.wb-loop-grid-pagination>span.is-active{background:#2847f3;color:#fff;font-weight:500;}\n";
2
+ export declare const LOOP_GRID_PAGINATION_STYLE = "\n <style data-wb-loop-grid-pagination-style>\n \n.wb-loop-grid-pagination{grid-column:1/-1;display:flex;gap:8px;justify-content:center;align-items:center;flex-wrap:wrap;padding:28px 0 4px;}\n.wb-loop-grid-pagination>a,.wb-loop-grid-pagination>button,.wb-loop-grid-pagination>span{display:inline-flex;align-items:center;justify-content:center;width:22px;min-width:22px;height:22px;padding:0;border:0;border-radius:4px;background:transparent;color:#1b2a33;font-size:14px;font-weight:400;line-height:1;text-decoration:none;box-sizing:border-box;box-shadow:none;}\n.wb-loop-grid-pagination svg{display:block;width:18px;height:18px;}\n.wb-loop-grid-pagination>a,.wb-loop-grid-pagination>button{cursor:pointer;}\n.wb-loop-grid-pagination>a:hover,.wb-loop-grid-pagination>button:hover{color:#2847f3;background:transparent;}\n.wb-loop-grid-pagination>a.active,.wb-loop-grid-pagination>button.active,.wb-loop-grid-pagination>span.active,.wb-loop-grid-pagination>a.is-active,.wb-loop-grid-pagination>button.is-active,.wb-loop-grid-pagination>span.is-active{background:#2847f3;color:#fff;font-weight:500;}\n\n </style>\n";
3
+ export declare const LOOP_GRID_PREV_ICON = "<svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>";
4
+ export declare const LOOP_GRID_NEXT_ICON = "<svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M9 6L15 12L9 18\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>";
5
+ export declare const LOOP_GRID_PAGINATION_SCRIPT: string;
@@ -0,0 +1,16 @@
1
+ import { type FilterState, type LoopGridComponentSchema, type LoopGridRecord } from './types.js';
2
+ export interface LoopGridPreviewTemplate {
3
+ html: string;
4
+ label?: string;
5
+ css?: string;
6
+ }
7
+ export interface LoopGridPreviewData {
8
+ items: LoopGridRecord[];
9
+ pageNo?: number;
10
+ total?: number;
11
+ totalPages?: number;
12
+ loading?: boolean;
13
+ error?: string;
14
+ }
15
+ export declare function renderLoopGridPreview(schemaInput: LoopGridComponentSchema, itemTemplate?: LoopGridPreviewTemplate | null, previewData?: LoopGridPreviewData | null): string;
16
+ export declare function mergeFilterState(currentFilterState: FilterState, incomingFilterState?: Partial<FilterState>): FilterState;
@@ -0,0 +1,3 @@
1
+ import type { Editor } from 'grapesjs';
2
+ export declare const WB_LOOP_GRID_TYPE = "wb-loop-grid";
3
+ export declare function registerLoopGridPublisherComponent(editor: Editor): void;
@@ -0,0 +1,97 @@
1
+ export type LoopGridSourceType = 'posts' | 'products' | 'media' | 'context';
2
+ export type LoopGridQueryMode = 'manual';
3
+ export type LoopGridOrderBy = 'date' | 'title' | 'menuOrder' | 'price' | 'popularity' | 'rand' | 'custom';
4
+ export type LoopGridOrder = 'asc' | 'desc';
5
+ export type LoopGridPaginationMode = 'none' | 'numbers';
6
+ export interface QueryConfig {
7
+ sourceType: LoopGridSourceType;
8
+ queryMode: LoopGridQueryMode;
9
+ category: string[];
10
+ contextCollection?: string;
11
+ orderBy: LoopGridOrderBy;
12
+ order: LoopGridOrder;
13
+ }
14
+ export interface LayoutConfig {
15
+ columns: number;
16
+ itemsPerPage: number;
17
+ columnGap: number;
18
+ rowGap: number;
19
+ loopCarousel?: boolean;
20
+ carouselItemWidth?: number;
21
+ carouselArrowPosition?: number;
22
+ horizontalScroll?: boolean;
23
+ scrollItemWidth?: number;
24
+ }
25
+ export interface ResponsiveLayoutConfig {
26
+ columns?: number;
27
+ columnGap?: number;
28
+ rowGap?: number;
29
+ mediaQuery?: string;
30
+ horizontalScroll?: boolean;
31
+ scrollItemWidth?: number;
32
+ }
33
+ export interface PaginationConfig {
34
+ mode: LoopGridPaginationMode;
35
+ pageLimit: number;
36
+ }
37
+ export interface FilterState {
38
+ taxonomy: string[];
39
+ tag: string[];
40
+ category: string[];
41
+ author: string[];
42
+ search?: string;
43
+ currentPage: number;
44
+ extras?: Record<string, unknown>;
45
+ }
46
+ export interface LoopGridComponentSchema {
47
+ type: 'loop-grid';
48
+ version: 1;
49
+ gridId: string;
50
+ filterKey: string;
51
+ itemTemplateId: string;
52
+ loopItemType: string;
53
+ loopItemTemplateResourceId: string;
54
+ emptyTemplateId?: string;
55
+ providerKey: string;
56
+ query: QueryConfig;
57
+ layout: LayoutConfig;
58
+ responsiveLayout?: Record<string, ResponsiveLayoutConfig>;
59
+ pagination: PaginationConfig;
60
+ emptyState: {
61
+ nothingFoundText: string;
62
+ };
63
+ filterState: FilterState;
64
+ advanced: {
65
+ hostRenderMode: 'mock' | 'ssr' | 'client';
66
+ };
67
+ }
68
+ export interface LoopGridTemplateDefinition {
69
+ id: string;
70
+ label: string;
71
+ kind: 'item' | 'empty';
72
+ accentColor?: string;
73
+ }
74
+ export interface LoopGridRecord {
75
+ id: string;
76
+ type: LoopGridSourceType;
77
+ fields?: Record<string, unknown>;
78
+ title: string;
79
+ subtitle?: string;
80
+ excerpt?: string;
81
+ taxonomy?: string;
82
+ image?: string;
83
+ meta?: string;
84
+ price?: string;
85
+ badge?: string;
86
+ href?: string;
87
+ }
88
+ export declare const LOOP_GRID_SCHEMA_VERSION = 1;
89
+ export declare const DEFAULT_LOOP_GRID_SCHEMA: LoopGridComponentSchema;
90
+ export declare function parseCsvList(value: unknown): string[];
91
+ export declare function serializeCsvList(items: string[]): string;
92
+ export declare function parseNumber(value: unknown, fallback: number, options?: {
93
+ min?: number;
94
+ max?: number;
95
+ }): number;
96
+ export declare function encodeLoopGridSchema(schema: LoopGridComponentSchema): string;
97
+ export declare function createLoopGridId(seed?: string): string;
@@ -0,0 +1,3 @@
1
+ import type { Editor } from 'grapesjs';
2
+ export declare const WB_NAVBAR_THB_TYPE = "navbar-thb";
3
+ export declare function registerNavbarThbPublisherComponent(editor: Editor): void;
@@ -0,0 +1 @@
1
+ export declare const navbarThbScript: (this: HTMLElement) => void;
@@ -0,0 +1 @@
1
+ export declare const NAVBAR_THB_STYLES = "\n /* \u2500\u2500 CSS Variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header {\n --primary-blue: #3C53E8;\n --dark-blue: #080E2B;\n --text-dark: #0C1029;\n --text-gray: #666;\n --transition: 0.2s ease-in-out;\n --header-height: 64px;\n --thb-mobile-header-height: 60px;\n --thb-header-bg: transparent;\n --thb-header-scroll-bg: #fff;\n --thb-header-link-color: var(--text-dark);\n --thb-header-scroll-link-color: var(--text-dark);\n --thb-logo-height: 36px;\n --thb-mobile-logo-height: 32px;\n --thb-gutter: 40px;\n --thb-mobile-gutter: 20px;\n --thb-nav-gap: 40px;\n --dropdown-menu-offset: 8px;\n --megamenu-offset: 8px;\n --dropdown-menu-radius: 8px;\n --megamenu-radius: 8px;\n }\n\n /* \u2500\u2500 Page Width Grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .page-width {\n --content-max: 1240px;\n --gutter: var(--thb-gutter);\n display: grid;\n grid-template-columns:\n minmax(var(--gutter), 1fr)\n minmax(0, var(--content-max))\n minmax(var(--gutter), 1fr);\n }\n .site-header .page-width > * {\n grid-column: 2;\n }\n\n /* \u2500\u2500 Links \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header a {\n text-decoration: none;\n }\n .site-header input {\n min-width: 0;\n }\n\n /* \u2500\u2500 Logo \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__logo {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n .site-header__logo a {\n display: flex;\n align-items: center;\n }\n .site-header__logo img {\n height: var(--thb-logo-height);\n width: auto;\n display: block;\n }\n\n /* \u2500\u2500 Header Base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header {\n background: var(--thb-header-scroll-bg);\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n transition: background var(--transition), box-shadow var(--transition);\n }\n .site-header--fixed-transparent {\n background: var(--thb-header-bg);\n position: fixed;\n }\n .site-header--sticky {\n background: var(--thb-header-scroll-bg);\n position: sticky;\n }\n .site-header--scrolled {\n background: var(--thb-header-scroll-bg);\n box-shadow: 0 0 0 1px rgba(2, 5, 27, 0.09);\n }\n\n /* \u2500\u2500 Primary Nav \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__nav {\n display: flex;\n height: var(--header-height);\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n }\n .site-header__nav-list {\n display: flex;\n gap: var(--thb-nav-gap);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n .site-header__nav-list.wb-menu-tree {\n width: auto;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-nav {\n width: auto;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list {\n display: flex;\n flex-direction: row;\n gap: var(--thb-nav-gap);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-item {\n position: relative;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu {\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translate(-50%, 8px);\n min-width: 200px;\n background: #fff;\n border-radius: var(--megamenu-radius);\n padding: 10px;\n box-shadow: 0 8px 30px rgba(12, 16, 41, 0.08);\n display: grid;\n gap: 4px;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: opacity var(--transition), visibility var(--transition), transform var(--transition);\n z-index: 1200;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item:hover > .wb-menu-tree-submenu,\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item:focus-within > .wb-menu-tree-submenu {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: translate(-50%, 0);\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) {\n width: 790px;\n min-width: 0;\n padding: 20px;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 28px;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item:first-child {\n grid-column: span 2;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item:first-child > .wb-menu-tree-submenu {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n column-gap: 28px;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-submenu .wb-menu-tree-submenu {\n position: static;\n display: grid;\n gap: 4px;\n margin-top: 12px;\n padding: 0;\n background: transparent;\n box-shadow: none;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-link {\n font-size: 14px;\n display: block;\n line-height: var(--header-height);\n color: var(--thb-header-link-color);\n font-weight: 400;\n transition: color var(--transition);\n white-space: nowrap;\n text-decoration: none;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-submenu .wb-menu-tree-link {\n line-height: 1.2;\n padding: 10px;\n border-radius: 6px;\n color: #1d1d1d;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-submenu .wb-menu-tree-link:hover {\n background: #F3F3F3;\n color: #1d1d1d;\n opacity: 1;\n }\n .site-header--scrolled .site-header__nav-list.wb-menu-tree .wb-menu-tree-link {\n color: var(--thb-header-scroll-link-color);\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-link:hover {\n color: var(--thb-header-link-color);\n opacity: 0.82;\n }\n .site-header--scrolled .site-header__nav-list.wb-menu-tree .wb-menu-tree-link:hover {\n color: var(--thb-header-scroll-link-color);\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-icon {\n display: none;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 16px;\n padding-inline: 16px 4px;\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 700;\n line-height: 24px;\n background: transparent;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link::after {\n content: '\u203A';\n margin-left: auto;\n color: #666;\n font-size: 28px;\n line-height: 1;\n font-weight: 300;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link .wb-menu-tree-text {\n \n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link .wb-menu-tree-icon {\n order: 3;\n display: block;\n width: 100%;\n height: auto;\n max-height: 448px;\n aspect-ratio: 1 / 1;\n object-fit: contain;\n padding: 28px;\n margin-top: 18px;\n background: #F3F3F3;\n border-radius: 10px;\n }\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link .wb-menu-tree-icon[src=''],\n .site-header__nav-list.wb-menu-tree .wb-menu-tree-list > .wb-menu-tree-item > .wb-menu-tree-submenu:has(.wb-menu-tree-submenu) > .wb-menu-tree-item > .wb-menu-tree-link .wb-menu-tree-icon:not([src]) {\n display: none;\n }\n .site-header__nav-item--has-dropdown {\n position: relative;\n }\n .site-header__nav-link {\n font-size: 14px;\n display: block;\n line-height: var(--header-height);\n color: var(--thb-header-link-color);\n font-weight: 400;\n transition: color var(--transition);\n white-space: nowrap;\n }\n .site-header--scrolled .site-header__nav-link {\n color: var(--thb-header-scroll-link-color);\n }\n .site-header__nav-link:hover {\n color: var(--thb-header-link-color);\n opacity: 0.82;\n }\n .site-header--scrolled .site-header__nav-link:hover {\n color: var(--thb-header-scroll-link-color);\n }\n .site-header--menu-left .site-header__nav-list {\n margin-right: auto;\n }\n .site-header--menu-right .site-header__nav-list {\n margin-left: auto;\n }\n .site-header__nav-link--active {\n color: var(--thb-header-link-color);\n font-weight: 600;\n }\n .site-header--scrolled .site-header__nav-link--active {\n color: var(--thb-header-scroll-link-color);\n }\n\n /* \u2500\u2500 Dropdown Wrap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__dropdown-wrap {\n position: absolute;\n left: 50%;\n top: 100%;\n transform: translate(-50%, 8px);\n padding-top: var(--dropdown-menu-offset);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: opacity var(--transition), visibility var(--transition), transform var(--transition);\n z-index: 1200;\n }\n .site-header__nav-item--has-dropdown:hover > .site-header__dropdown-wrap,\n .site-header__nav-item--has-dropdown:focus-within > .site-header__dropdown-wrap {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: translate(-50%, 0);\n }\n\n /* \u2500\u2500 Dropdown \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__dropdown {\n min-width: 200px;\n background: #fff;\n border-radius: var(--megamenu-radius);\n padding: 10px;\n box-shadow: 0 8px 30px rgba(12, 16, 41, 0.08);\n display: grid;\n gap: 4px;\n }\n .site-header__dropdown--right {\n min-width: 180px;\n }\n .site-header__dropdown-link {\n display: block;\n white-space: nowrap;\n padding: 10px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 400;\n color: #1d1d1d;\n line-height: 1.2;\n transition: background var(--transition), color var(--transition);\n }\n .site-header__dropdown-link--active,\n .site-header__dropdown-link:hover {\n background: #F3F3F3;\n }\n\n /* \u2500\u2500 Mega Menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__dropdown--mega {\n width: 790px;\n min-width: 0;\n padding: 0;\n }\n .site-header__mega {\n display: grid;\n align-items: stretch;\n gap: 28px;\n padding: 20px;\n grid-template-columns: minmax(0, 1.15fr) 240px;\n }\n .site-header__mega-col {\n flex: 1 1 0;\n min-width: 0;\n }\n .site-header__mega-col--right {\n padding-left: 0;\n }\n .site-header__mega-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 16px;\n font-weight: 700;\n color: #1d1d1d;\n line-height: 24px;\n margin-bottom: 32px;\n padding-inline: 16px 4px;\n }\n .site-header__mega-head--empty {\n height: 24px;\n margin-bottom: 32px;\n }\n .site-header__mega-head i {\n font-size: 30px;\n color: #1d1d1d;\n opacity: 0.75;\n font-weight: normal;\n font-style: normal;\n }\n .site-header__mega-list {\n display: grid;\n row-gap: 10px;\n }\n .site-header__mega-list--split {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n column-gap: 16px;\n }\n .site-header__mega-item {\n display: block;\n padding: 10px;\n border-radius: 4px;\n font-size: 14px;\n font-weight: normal;\n color: #222222;\n line-height: 1.32;\n transition: background var(--transition), color var(--transition);\n }\n .site-header__mega-item--active,\n .site-header__mega-item:hover {\n background: #F3F3F3;\n color: #1d1d1d;\n }\n .site-header__mega-media {\n border-radius: 6px;\n background: #F3F4F6;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1 / 1;\n min-height: 0;\n padding: 0;\n margin-inline: 16px 0;\n }\n .site-header__mega-media img {\n width: 100%;\n height: 100%;\n display: block;\n object-fit: contain;\n }\n\n /* \u2500\u2500 Actions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__actions {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n }\n .site-header__search {\n background: #fff;\n border-radius: 20px;\n padding: 0 14px;\n display: flex;\n align-items: center;\n width: 160px;\n height: 36px;\n box-shadow: 0 0 0 1px #CDCDCD inset;\n gap: 8px;\n color: #999;\n transition: all var(--transition);\n }\n .site-header__search:has(:focus-within) {\n box-shadow: 0 0 0 1px var(--primary-blue) inset;\n }\n .site-header__search svg {\n flex: 0 0 auto;\n }\n .site-header__search input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 13px;\n font-family: inherit;\n color: var(--text-dark);\n }\n\n /* \u2500\u2500 CTA Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .btn--consult {\n background: var(--primary-blue);\n color: #fff;\n border-radius: 999px;\n font-size: 14px;\n height: 36px;\n padding: 0 20px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n transition: background var(--transition), transform var(--transition);\n font-family: inherit;\n font-weight: 500;\n cursor: pointer;\n border: none;\n text-decoration: none;\n }\n .site-header .btn--consult:hover {\n background: #2a3fc9;\n }\n\n /* \u2500\u2500 Hamburger \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__hamburger {\n display: none;\n flex-direction: column;\n gap: 3px;\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n }\n .site-header__hamburger span {\n display: block;\n width: 17px;\n height: 3px;\n transform: scaleY(0.5);\n background: var(--thb-header-link-color);\n border-radius: 2px;\n transition: all var(--transition);\n transform-origin: center;\n }\n .site-header--scrolled .site-header__hamburger span {\n background: var(--thb-header-scroll-link-color);\n }\n .site-header__hamburger--open span:nth-child(1) {\n transform: translateY(6px) rotate(45deg) scaleY(0.5);\n }\n .site-header__hamburger--open span:nth-child(2) {\n opacity: 0;\n }\n .site-header__hamburger--open span:nth-child(3) {\n transform: translateY(-6px) rotate(-45deg) scaleY(0.5);\n }\n\n /* \u2500\u2500 Mobile Search Trigger \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header__mobile-search {\n display: none;\n }\n\n /* \u2500\u2500 Site Search Overlay (mobile only) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .site-search {\n display: none;\n }\n\n /* \u2500\u2500 Mobile Nav (hidden by default) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .nav-mobile {\n display: none;\n }\n .site-header .nav-mobile--open {\n display: flex;\n }\n\n /* \u2500\u2500 Tablet (\u2264 1024px) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n @media (max-width: 1024px) {\n .site-header .page-width {\n --gutter: min(28px, var(--thb-gutter));\n }\n .site-header__nav-list {\n gap: 24px;\n }\n }\n\n /* \u2500\u2500 Mobile (\u2264 767px) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n @media (max-width: 767px) {\n .site-header .page-width {\n --gutter: var(--thb-mobile-gutter);\n }\n .site-header {\n z-index: 1500;\n }\n .site-header__nav {\n height: var(--thb-mobile-header-height);\n gap: 12px;\n }\n .site-header__nav-list {\n display: none;\n }\n .site-header__nav-list.wb-menu-tree {\n display: none !important;\n }\n .site-header__search {\n display: none;\n }\n .site-header .btn--consult {\n display: none;\n }\n .site-header__dropdown-wrap {\n display: none;\n }\n .site-header__actions {\n order: 1;\n width: 40px;\n flex: 0 0 40px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 0;\n }\n .site-header__logo {\n order: 2;\n flex: 1 1 auto;\n display: flex;\n justify-content: center;\n }\n .site-header__logo img {\n width: auto;\n height: var(--thb-mobile-logo-height);\n }\n .site-header__hamburger {\n display: flex;\n margin: 0;\n }\n .site-header__mobile-search {\n order: 3;\n width: 40px;\n height: 40px;\n flex: 0 0 40px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n padding: 0;\n background: transparent;\n color: var(--thb-header-link-color);\n cursor: pointer;\n }\n .site-header--scrolled .site-header__mobile-search {\n color: var(--thb-header-scroll-link-color);\n }\n .site-header__mobile-search svg,\n .site-header .nav-mobile__back svg {\n width: 24px;\n height: 24px;\n display: block;\n stroke: currentColor;\n }\n\n /* \u2500\u2500 Mobile Nav \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .nav-mobile {\n position: fixed;\n top: var(--thb-mobile-header-height);\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1400;\n background: rgba(255, 255, 255, 0.98);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transform: translateY(-12px);\n transition: opacity 0.26s ease, transform 0.32s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 0.32s;\n will-change: opacity, transform;\n flex-direction: column;\n }\n .site-header .nav-mobile--open {\n display: flex;\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: translateY(0);\n transition: opacity 0.26s ease, transform 0.32s cubic-bezier(0.22, 1, 0.36, 1), visibility 0s;\n }\n .site-header .nav-mobile__content {\n position: relative;\n height: 100%;\n overflow: hidden;\n isolation: isolate;\n }\n .site-header .nav-mobile__panel {\n position: absolute;\n inset: 0;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n display: grid;\n align-content: start;\n gap: 28px;\n padding: 44px 20px 56px;\n background: #fff;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transform: translateX(0);\n transition: transform 0.34s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.22s ease, visibility 0s linear 0.34s;\n will-change: transform, opacity;\n }\n .site-header .nav-mobile__panel.is-active {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: translateX(0);\n transition: transform 0.34s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.22s ease, visibility 0s;\n }\n .site-header .nav-mobile__panel.is-entering-from-right {\n opacity: 0;\n visibility: visible;\n pointer-events: none;\n transform: translateX(44px);\n }\n .site-header .nav-mobile__panel.is-entering-from-left {\n opacity: 0;\n visibility: visible;\n pointer-events: none;\n transform: translateX(-44px);\n }\n .site-header .nav-mobile__panel.is-exiting-to-left {\n opacity: 0;\n visibility: visible;\n pointer-events: none;\n transform: translateX(-36px);\n }\n .site-header .nav-mobile__panel.is-exiting-to-right {\n opacity: 0;\n visibility: visible;\n pointer-events: none;\n transform: translateX(36px);\n }\n .site-header .nav-mobile__heading {\n margin: 0;\n color: #0f172a;\n font-size: 26px;\n line-height: 1.15;\n font-weight: 700;\n }\n .site-header .nav-mobile__heading-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .site-header .nav-mobile__back {\n width: 40px;\n height: 40px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n padding: 0;\n background: transparent;\n color: #111827;\n cursor: pointer;\n }\n .site-header .nav-mobile__list {\n display: grid;\n gap: 8px;\n list-style: none;\n margin: 0;\n padding: 0;\n }\n .site-header .nav-mobile__list > li {\n display: flex;\n align-items: stretch;\n gap: 8px;\n }\n .site-header .nav-mobile__link,\n .site-header .nav-mobile__viewall,\n .site-header .nav-mobile__feature-link {\n color: #111827;\n text-decoration: none;\n }\n .site-header .nav-mobile__link {\n flex: 1;\n min-height: 52px;\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0;\n font-size: 18px;\n line-height: 1.35;\n font-weight: 400;\n }\n .site-header .nav-mobile__expand {\n flex: 0 0 44px;\n min-height: 52px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n padding: 0;\n background: transparent;\n color: #111827;\n cursor: pointer;\n }\n .site-header .nav-mobile__entry-icon {\n flex: 0 0 auto;\n font-size: 20px;\n line-height: 1;\n transition: transform 0.22s ease;\n }\n .site-header .nav-mobile img,\n .site-header .nav-mobile [data-cms-bind-src] {\n display: none !important;\n }\n .site-header .nav-mobile__expand:hover .nav-mobile__entry-icon,\n .site-header .nav-mobile__expand:focus-visible .nav-mobile__entry-icon {\n transform: rotate(90deg);\n }\n .site-header .nav-mobile__viewall,\n .site-header .nav-mobile__feature-link {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 500;\n }\n .site-header .nav-mobile__feature {\n display: grid;\n gap: 14px;\n }\n .site-header .nav-mobile__feature-card {\n display: block;\n overflow: hidden;\n border-radius: 14px;\n background: #f3f4f6;\n }\n .site-header .nav-mobile__feature-card img {\n width: 100%;\n height: auto;\n display: block;\n }\n\n /* \u2500\u2500 Site Search Overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n .site-header .site-search {\n position: fixed;\n inset: 0;\n z-index: 1600;\n display: flex;\n flex-direction: column;\n background: #fff;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transform: translateY(-8px);\n transition: opacity 0.22s ease, transform 0.22s ease, visibility 0s linear 0.22s;\n }\n .site-header .site-search--open {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: translateY(0);\n transition: opacity 0.22s ease, transform 0.22s ease, visibility 0s;\n }\n .site-header .site-search__bar {\n display: flex;\n align-items: center;\n gap: 8px;\n height: var(--thb-mobile-header-height);\n padding: 0 12px 0 16px;\n border-bottom: 1px solid #e8e8e8;\n background: #fff;\n }\n .site-header .site-search__form {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 10px;\n height: 40px;\n padding: 0 12px;\n border-radius: 999px;\n background: #f2f3f5;\n }\n .site-header .site-search__icon {\n color: #999;\n font-size: 15px;\n flex: 0 0 auto;\n }\n .site-header .site-search__input {\n flex: 1;\n min-width: 0;\n border: 0;\n outline: 0;\n background: transparent;\n font-size: 15px;\n font-family: inherit;\n color: var(--text-dark);\n padding: 0;\n height: 100%;\n }\n .site-header .site-search__input::placeholder {\n color: #999;\n }\n .site-header .site-search__clear {\n flex: 0 0 auto;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n padding: 0;\n background: transparent;\n color: #666;\n cursor: pointer;\n }\n .site-header .site-search__clear svg {\n width: 20px;\n height: 20px;\n }\n .site-header .site-search__close {\n flex: 0 0 auto;\n height: 40px;\n padding: 0 6px;\n border: 0;\n background: transparent;\n color: var(--primary-blue);\n font: inherit;\n font-size: 15px;\n cursor: pointer;\n }\n .site-header .site-search__body {\n flex: 1 1 auto;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding: 16px 20px 40px;\n }\n }\n";