@salla.sa/twilight 2.14.517 → 2.14.519
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@salla.sa/twilight.min.js +1 -1
- package/dist/@salla.sa/twilight.min.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -3
- package/types/api/index.d.ts +1 -0
- package/types/lib/lang.d.ts +2 -1
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/lib/init-static-sections.js"],"sourcesContent":["//todo:: remove all the usages of the document, we need it to be SSR friendly\nexport default class InitStaticSections {\n constructor() {\n Salla.event.on('twilight::before.ready', () => this.renderAll());\n }\n async renderAll() {\n // Register auto-mount first so hook listeners are attached before any await.\n // On first visit or after \"Clear site data\", component scripts may load before\n // lang/config settle; registering here ensures mount runs when the hook is ready.\n this.registerOrderSingleRatingPopupTrigger();\n Salla.hooks.renderAutoComponents([\n { hook: 'product:single.description', tag: 'salla-delivery-promise', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('delivery-promises'))},\n { hook: 'product:single.description', tag: 'salla-loyalty-banner', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('loyalty-system'))},\n { hook: 'product:single.description', tag: 'salla-loyalty-points-banner', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('loyalty-system'))},\n { hook: 'product:single.description', tag: 'salla-cashback-banner', canRender: () => Salla.url.is_page('product.single')},\n { hook: 'product:single.form.end', tag: 'salla-fulfillment-methods', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('delivery-promises'))},\n { hook: 'body:end', tag: 'salla-cookies-bar', canRender: () => Salla.config.get('store.features')?.includes('website-cookies') },\n { hook: 'body:end', tag: 'salla-bullet-delivery', canRender: () => Salla.config.get('store.features')?.includes('bullet-delivery-v2') && Salla.config.get('store.settings.bullet_delivery.enabled') === true },\n { hook: 'product:single.description.end', tag: 'salla-bought-together', canRender: () => Salla.url.is_page('product.single') && Salla.config.get('store.settings.product.bought_together') },\n { hook: 'cart:items.end', tag: 'salla-basket-gap', canRender: () => Salla.url.is_page('cart') && Salla.config.get('store.settings.cart.basket_gap') },\n { hook: 'customer:wishlist.items.start', tag: 'salla-wishlist-actions', canRender: () => Salla.url.is_page('customer.wishlist') },\n { hook: 'customer:orders.single.details.start', tag: 'salla-order-cancel', canRender: () => Salla.url.is_page('customer.orders.single') },\n ]);\n\n await Salla.lang.onLoaded();\n this.renderAppInstall();\n this.renderEdit();\n this.applyContentCopyright();\n this.renderTemplateStore();\n\n if (!Salla.helpers.isIframe()) {\n this.renderMaintenance();\n this.renderThemePreview();\n }\n }\n\n registerOrderSingleRatingPopupTrigger() {\n if (this._orderSingleRatingPopupTriggerRegistered) {\n return;\n }\n this._orderSingleRatingPopupTriggerRegistered = true;\n\n Salla.hooks.registerHook('salla-hook', 'componentDidLoad', (component) => {\n // Check if the component is the order single details start\n if (component.name !== 'customer:orders.single.details.start') {\n return;\n }\n\n // Check if the current page is the order single page\n if (!Salla.url.is_page('customer.orders.single')) {\n return;\n }\n \n // Check if the show-rating-popup query parameter is set to true\n // NOTE: this will come from the email link generated from backend\n const showPopup = new URLSearchParams(window.location.search).get('show-rating-popup');\n if (showPopup !== 'true') {\n return;\n }\n\n // Once the rating component is ready, open the popup\n Salla.event.once('rating::ready', () => {\n Salla.event.dispatch('rating::open');\n\n // Strip the param only after the popup has been triggered, so a refresh\n // before the rating component loads still shows it, while refresh or\n // back/forward afterwards cannot re-trigger it.\n const url = new URL(window.location.href);\n url.searchParams.delete('show-rating-popup');\n window.history.replaceState(window.history.state, '', url.toString());\n });\n });\n }\n\n renderMaintenance() {\n if (!Salla.config.get('maintenance')) {\n return;\n }\n\n document.body.classList.add('has-maintenance-bar');\n if (document.querySelector('salla-maintenance-alert')) {\n Salla.logger.warn('salla-maintenance-alert element Existed before!');\n return;\n }\n\n document.body.prepend(document.createElement('salla-maintenance-alert'));\n }\n\n renderTemplateStore() {\n if (!Salla.config.get('store.template')) {\n return;\n }\n\n document.body.classList.add('has-bottom-alert');\n if (document.querySelector('salla-bottom-alert')) {\n Salla.logger.warn('salla-bottom-alert element Existed before!');\n return;\n }\n\n document.body.append(document.createElement('salla-bottom-alert'));\n }\n\n renderAppInstall() {\n if (!Salla.config.get('store.app_install_prompt') || !Salla.config.get('store.apps') || Salla.storage.get('app_install_prompt_disabled') || Salla.config.isMobileApp()) {\n return;\n }\n\n document.body.classList.add('has-app-install-alert');\n if (document.querySelector('salla-app-install-alert')) {\n Salla.logger.warn('salla-app-install-alert element Existed before!');\n return;\n }\n\n document.body.append(document.createElement('salla-app-install-alert'));\n }\n renderThemePreview() {\n if (Salla.config.get('theme.mode') !== 'preview') {\n return;\n }\n document.body.classList.add('has-preview-bar');\n if (document.querySelector('#s-theme_preview_bar')) {\n Salla.logger.warn('#s-theme_preview_bar element Existed before!');\n return;\n }\n let alertElement = document.createElement('div');\n alertElement.id = 's-theme_preview_bar';\n alertElement.setAttribute('style', 'display: flex; justify-content: space-between; text-align: center; background-color: #232323; color: #fff; padding: 10px; font-size: 0.875rem; line-height: 1.25rem; position: relative;');\n alertElement.innerHTML = `\n <div style=\"display:flex; align-items:center;\">\n <img width=\"32\" src=\"https://cdn.salla.network/images/logo/logo-light.svg\">\n <span style=\"margin:0 10px;\">${Salla.lang.get('blocks.header.preview_mode')}: <span style=\"background:rgba(255,255,255,0.25);border-radius:15px; padding:2px 15px 4px\">${Salla.config.get('theme.name')}</span></span>\n </div>\n <a href=\"${Salla.url.get('preview_theme/cancel/preview')}\" style=\"line-height:32px; width:32px;\"><i class=\"sicon-cancel\"></i></a>\n `;\n document.body.prepend(alertElement);\n }\n\n /**\n * @deprecated\n */\n renderEdit() {\n let edit = Salla.config.get('edit');\n if (!edit) {\n return;\n }\n if (document.querySelector('#s-edit-alert')) {\n Salla.logger.warn('#s-edit-alert element Existed before!');\n return;\n }\n let alertElement = document.createElement('div');\n alertElement.id = 's-edit-alert';\n alertElement.innerHTML = `\n <a href=\"${edit}\" style=\"display:block; background-color:${Salla.config.get('theme.color.primary', '#5cd5c4')}; color:${Salla.config.get('theme.color.reverse', '#fff')}; padding: 10px; text-align:center; font-size: 0.875rem; line-height: 1.25rem;\">\n <i class=\"sicon-edit\"></i> \n ${Salla.lang.get('pages.products.quick_edit')}\n </a>\n `;\n document.body.prepend(alertElement);\n }\n\n applyContentCopyright() {\n if (!Salla.config.get('store.settings.content_copyright')) {\n return;\n }\n\n // Helper to check if element is an input\n const isInputElement = (element) => {\n if (!element) return false;\n const tagName = element.tagName?.toLowerCase();\n return tagName === 'input' || tagName === 'textarea';\n };\n\n // Common event prevention (excluding inputs)\n const preventEvents = ['contextmenu', 'selectstart', 'copy'];\n preventEvents.forEach((event) => {\n document.addEventListener(event, (e) => {\n if (!isInputElement(e.target)) {\n e.preventDefault();\n }\n });\n });\n\n // Prevent common dev tools shortcuts\n document.addEventListener('keydown', (e) => {\n const key = e.key.toLowerCase();\n const blockedCombos = (\n key === 'f12' ||\n (e.ctrlKey && e.shiftKey && ['i', 'j', 'c'].includes(key)) ||\n (e.ctrlKey && key === 'u')\n );\n if (blockedCombos) {\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n // Inject protection styles (excluding inputs)\n const style = document.createElement('style');\n style.textContent = `\n body {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n input, textarea {\n -webkit-touch-callout: auto;\n -webkit-user-select: auto;\n -moz-user-select: auto;\n -ms-user-select: auto;\n user-select: auto;\n }\n img {\n pointer-events: none;\n -webkit-user-drag: none;\n }\n `;\n document.head.appendChild(style);\n }\n}"],"names":["InitStaticSections","constructor","Salla","event","on","this","renderAll","registerOrderSingleRatingPopupTrigger","hooks","renderAutoComponents","hook","tag","canRender","url","is_page","config","get","includes","_Salla$config$get","_Salla$config$get2","lang","onLoaded","renderAppInstall","renderEdit","applyContentCopyright","renderTemplateStore","helpers","isIframe","renderMaintenance","renderThemePreview","_orderSingleRatingPopupTriggerRegistered","registerHook","component","name","URLSearchParams","window","location","search","once","dispatch","URL","href","searchParams","delete","history","replaceState","state","toString","document","body","classList","add","querySelector","logger","warn","prepend","createElement","append","storage","isMobileApp","alertElement","id","setAttribute","innerHTML","edit","forEach","addEventListener","e","element","_element$tagName","tagName","toLowerCase","isInputElement","target","preventDefault","key","ctrlKey","shiftKey","stopPropagation","style","textContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/lib/init-static-sections.js"],"sourcesContent":["//todo:: remove all the usages of the document, we need it to be SSR friendly\nexport default class InitStaticSections {\n constructor() {\n Salla.event.on('twilight::before.ready', () => this.renderAll());\n }\n async renderAll() {\n // Register auto-mount first so hook listeners are attached before any await.\n // On first visit or after \"Clear site data\", component scripts may load before\n // lang/config settle; registering here ensures mount runs when the hook is ready.\n this.registerOrderSingleRatingPopupTrigger();\n Salla.hooks.renderAutoComponents([\n { hook: 'product:single.description', tag: 'salla-delivery-promise', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('delivery-promises'))},\n { hook: 'product:single.description', tag: 'salla-loyalty-banner', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('loyalty-system'))},\n { hook: 'product:single.description', tag: 'salla-loyalty-points-banner', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('loyalty-system'))},\n { hook: 'product:single.description', tag: 'salla-cashback-banner', canRender: () => Salla.url.is_page('product.single')},\n { hook: 'product:single.form.end', tag: 'salla-fulfillment-methods', canRender: () => (Salla.url.is_page('product.single') && Salla.config.get('store.features', []).includes('delivery-promises'))},\n { hook: 'body:end', tag: 'salla-cookies-bar', canRender: () => Salla.config.get('store.features')?.includes('website-cookies') },\n { hook: 'body:end', tag: 'salla-bullet-delivery', canRender: () => Salla.config.get('store.features')?.includes('bullet-delivery-v2') && Salla.config.get('store.settings.bullet_delivery.enabled') === true },\n { hook: 'product:single.description.end', tag: 'salla-bought-together', canRender: () => Salla.url.is_page('product.single') && Salla.config.get('store.settings.product.bought_together') },\n { hook: 'cart:items.end', tag: 'salla-basket-gap', canRender: () => Salla.url.is_page('cart') && Salla.config.get('store.settings.cart.basket_gap') },\n { hook: 'customer:wishlist.items.start', tag: 'salla-wishlist-actions', canRender: () => Salla.url.is_page('customer.wishlist') },\n { hook: 'customer:orders.single.details.start', tag: 'salla-order-cancel', canRender: () => Salla.url.is_page('customer.orders.single') },\n ]);\n\n await Salla.lang.onLoaded();\n this.renderAppInstall();\n this.renderEdit();\n this.applyContentCopyright();\n this.renderTemplateStore();\n\n if (!Salla.helpers.isIframe()) {\n this.renderMaintenance();\n this.renderThemePreview();\n }\n }\n\n registerOrderSingleRatingPopupTrigger() {\n if (this._orderSingleRatingPopupTriggerRegistered) {\n return;\n }\n this._orderSingleRatingPopupTriggerRegistered = true;\n\n Salla.hooks.registerHook('salla-hook', 'componentDidLoad', (component) => {\n // Check if the component is the order single details start\n if (component.name !== 'customer:orders.single.details.start') {\n return;\n }\n\n // Check if the current page is the order single page\n if (!Salla.url.is_page('customer.orders.single')) {\n return;\n }\n\n // Check if the show-rating-popup query parameter is set to true\n // NOTE: this will come from the email link generated from backend\n const showPopup = new URLSearchParams(window.location.search).get('show-rating-popup');\n if (showPopup !== 'true') {\n return;\n }\n\n // Once the rating component is ready, open the popup\n Salla.event.once('rating::ready', () => {\n Salla.event.dispatch('rating::open');\n\n // Strip the param only after the popup has been triggered, so a refresh\n // before the rating component loads still shows it, while refresh or\n // back/forward afterwards cannot re-trigger it.\n const url = new URL(window.location.href);\n url.searchParams.delete('show-rating-popup');\n window.history.replaceState(window.history.state, '', url.toString());\n });\n });\n }\n\n renderMaintenance() {\n if (!Salla.config.get('maintenance')) {\n return;\n }\n\n document.body.classList.add('has-maintenance-bar');\n if (document.querySelector('salla-maintenance-alert')) {\n Salla.logger.warn('salla-maintenance-alert element Existed before!');\n return;\n }\n\n document.body.prepend(document.createElement('salla-maintenance-alert'));\n }\n\n renderTemplateStore() {\n if (!Salla.config.get('store.template')) {\n return;\n }\n\n document.body.classList.add('has-bottom-alert');\n if (document.querySelector('salla-bottom-alert')) {\n Salla.logger.warn('salla-bottom-alert element Existed before!');\n return;\n }\n\n document.body.append(document.createElement('salla-bottom-alert'));\n }\n\n renderAppInstall() {\n if (!Salla.config.get('store.app_install_prompt') || !Salla.config.get('store.apps') || Salla.storage.get('app_install_prompt_disabled') || Salla.config.isMobileApp()) {\n return;\n }\n\n document.body.classList.add('has-app-install-alert');\n if (document.querySelector('salla-app-install-alert')) {\n Salla.logger.warn('salla-app-install-alert element Existed before!');\n return;\n }\n\n document.body.append(document.createElement('salla-app-install-alert'));\n }\n renderThemePreview() {\n if (Salla.config.get('theme.mode') !== 'preview') {\n return;\n }\n document.body.classList.add('has-preview-bar');\n if (document.querySelector('#s-theme_preview_bar')) {\n Salla.logger.warn('#s-theme_preview_bar element Existed before!');\n return;\n }\n let alertElement = document.createElement('div');\n alertElement.id = 's-theme_preview_bar';\n alertElement.setAttribute('style', 'display: flex; justify-content: space-between; text-align: center; background-color: #232323; color: #fff; padding: 10px; font-size: 0.875rem; line-height: 1.25rem; position: relative;');\n alertElement.innerHTML = `\n <div style=\"display:flex; align-items:center;\">\n <img width=\"32\" src=\"https://cdn.salla.network/images/logo/logo-light.svg\">\n <span style=\"margin:0 10px;\">${Salla.lang.get('blocks.header.preview_mode')}: <span style=\"background:rgba(255,255,255,0.25);border-radius:15px; padding:2px 15px 4px\">${Salla.config.get('theme.name')}</span></span>\n </div>\n <a href=\"${Salla.url.get('preview_theme/cancel/preview')}\" style=\"line-height:32px; width:32px;\"><i class=\"sicon-cancel\"></i></a>\n `;\n document.body.prepend(alertElement);\n }\n\n /**\n * @deprecated\n */\n renderEdit() {\n let edit = Salla.config.get('edit');\n if (!edit) {\n return;\n }\n if (document.querySelector('#s-edit-alert')) {\n Salla.logger.warn('#s-edit-alert element Existed before!');\n return;\n }\n let alertElement = document.createElement('div');\n alertElement.id = 's-edit-alert';\n alertElement.innerHTML = `\n <a href=\"${edit}\" style=\"display:block; background-color:${Salla.config.get('theme.color.primary', '#5cd5c4')}; color:${Salla.config.get('theme.color.reverse', '#fff')}; padding: 10px; text-align:center; font-size: 0.875rem; line-height: 1.25rem;\">\n <i class=\"sicon-edit\"></i> \n ${Salla.lang.get('pages.products.quick_edit')}\n </a>\n `;\n document.body.prepend(alertElement);\n }\n\n applyContentCopyright() {\n if (!Salla.config.get('store.settings.content_copyright')) {\n return;\n }\n\n // Helper to check if element is an input\n const isInputElement = (element) => {\n if (!element) return false;\n const tagName = element.tagName?.toLowerCase();\n return tagName === 'input' || tagName === 'textarea';\n };\n\n // Common event prevention (excluding inputs)\n const preventEvents = ['contextmenu', 'selectstart', 'copy'];\n preventEvents.forEach((event) => {\n document.addEventListener(event, (e) => {\n if (!isInputElement(e.target)) {\n e.preventDefault();\n }\n });\n });\n\n // Prevent common dev tools shortcuts\n document.addEventListener('keydown', (e) => {\n const key = e.key.toLowerCase();\n const blockedCombos = (\n key === 'f12' ||\n (e.ctrlKey && e.shiftKey && ['i', 'j', 'c'].includes(key)) ||\n (e.ctrlKey && key === 'u')\n );\n if (blockedCombos) {\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n // Inject protection styles (excluding inputs)\n const style = document.createElement('style');\n style.textContent = `\n body {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n input, textarea {\n -webkit-touch-callout: auto;\n -webkit-user-select: auto;\n -moz-user-select: auto;\n -ms-user-select: auto;\n user-select: auto;\n }\n img {\n pointer-events: none;\n -webkit-user-drag: none;\n }\n `;\n document.head.appendChild(style);\n }\n}\n"],"names":["InitStaticSections","constructor","Salla","event","on","this","renderAll","registerOrderSingleRatingPopupTrigger","hooks","renderAutoComponents","hook","tag","canRender","url","is_page","config","get","includes","_Salla$config$get","_Salla$config$get2","lang","onLoaded","renderAppInstall","renderEdit","applyContentCopyright","renderTemplateStore","helpers","isIframe","renderMaintenance","renderThemePreview","_orderSingleRatingPopupTriggerRegistered","registerHook","component","name","URLSearchParams","window","location","search","once","dispatch","URL","href","searchParams","delete","history","replaceState","state","toString","document","body","classList","add","querySelector","logger","warn","prepend","createElement","append","storage","isMobileApp","alertElement","id","setAttribute","innerHTML","edit","forEach","addEventListener","e","element","_element$tagName","tagName","toLowerCase","isInputElement","target","preventDefault","key","ctrlKey","shiftKey","stopPropagation","style","textContent"],"mappings":"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"}
|