${function(){
return `
${data.starNum}/${data.starTotal}
`;
}()}
${function(){
return `
${data.showStarText === 'true' ? `
${data.starNum}/${data.starTotal}
` : ''}
`;
}()}
const TAG = 'spz-custom-revue-star';
class SPZCustomRevueStar extends SPZ.BaseElement {
constructor(element) {
super(element);
}
static deferredMount() {
return false;
}
buildCallback = () => {
this.action_ = SPZServices.actionServiceForDoc(this.element);
this.templates_ = SPZServices.templatesForDoc(this.element);
this.xhr_ = SPZServices.xhrFor(this.win);
this.starNum = this.element.getAttribute('starNum');
this.starTotal = this.element.getAttribute('starTotal');
this.showStarText = this.element.getAttribute('showStarText');
this.starColor = this.element.getAttribute('color');
this.interact = this.element.getAttribute('interact');
this.starSize = this.element.getAttribute('starSize') || 14;
}
mountCallback = () => {
this.doRender_({
starTotal: this.starTotal,
totalArray: Array.from({ length: Number(this.starTotal) }, (v, k) => k + 1),
starNum: this.starNum,
showStarText: this.showStarText,
starColor: this.starColor,
starSize: this.starSize
}).then(() => {
if (this.interact) {
this.addEventListeners_();
}
});
}
addEventListeners_ = () => {
const stars = document.querySelectorAll('.revue-star__star');
stars.forEach(star => {
star.addEventListener('click', event => {
const starEl = star.closest('.revue-star__star');
const starIndex = Number(starEl.dataset.index);
let isHalf = event.offsetX < star.offsetWidth / 2;
// rtl
if (document.documentElement.getAttribute('dir') === 'rtl') {
isHalf = event.offsetX > star.offsetWidth / 2;
}
const starValue = isHalf ? starIndex - 0.5 : starIndex;
this.starClickHandler_({ value: starValue });
});
});
}
renderStar = () => {
const isRtl = document.documentElement.getAttribute('dir') === 'rtl';
const stars = this.element.querySelectorAll('.revue-star__star');
stars.forEach((star, i) => {
const starIndex = i + 1;
const starEl = star.querySelector('svg:nth-child(2)');
const isHalf = this.starNum % 1 > 0 && Math.ceil(this.starNum) === starIndex;
const isSolid = starIndex <= Math.ceil(this.starNum);
starEl.style.display = isSolid ? 'block' : 'none';
if (isHalf) {
if (isRtl) {
// RTL布局下,如果是半星,显示星星的右半边
starEl.style.clipPath = `polygon(50% 0, 100% 0, 100% 100%, 50% 100%)`;
} else {
// LTR布局下,如果是半星,显示星星的左半边
starEl.style.clipPath = `polygon(0 0, 50% 0, 50% 100%, 0 100%)`;
}
} else {
starEl.style.clipPath = `polygon(0 0, 100% 0, 100% 100%, 0 100%)`
}
});
const showCountEle = this.element.querySelector('#revue-star-show-count');
showCountEle && SPZ.whenApiDefined(showCountEle).then((api) => {
api.render({ starNum: this.starNum, starTotal: this.starTotal });
});
}
doRender_ = (data) => {
return this.templates_
.findAndRenderTemplate(this.element, { starSize: this.starSize, ...data }, null)
.then((el) => {
const children = this.element.querySelector('*:not(template)');
children && SPZCore.Dom.removeElement(children);
this.element.appendChild(el);
})
.then(() => {
this.starNum = data.starNum;
this.renderStar();
});
}
starClickHandler_ = (event) => {
this.starNum = event.value;
this.renderStar();
this.triggerEvent_('change', { value: event.value });
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {});
this.action_.trigger(this.element, name, event);
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.CONTAINER;
}
}
SPZ.defineElement(TAG, SPZCustomRevueStar)
()
try {
const productId = window.SHOPLAZZA.meta.page.resource_id;
const productType = `default`;
const getProductReviews = (star_least) =>
fetch('/api/comment/count-star-multi',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: [productId],
star_least: star_least || 1,
}),
}).then(res => res.json());
try {
const section = document.querySelector('#revue-product-star');
if(productType === "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e);
window.addEventListener('load', () => {
try {
const section = document.querySelector('#revue-product-star');
if(productType=== "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e)
}
})
}
const getReviewsConfig = async () => {
let data = {};
const url = new URL(window.location.href);
const preview_theme_id = url.searchParams.get('preview_theme_id');
const commentConfig = await fetch('/api/comment-config', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
data = commentConfig.data;
const themeConfig = await fetch(`/api/comment-config?theme_id=${preview_theme_id || ''}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
if (themeConfig?.data && themeConfig.data.star_color) {
data.star_color = themeConfig.data.star_color;
}
if (preview_theme_id) {
data.star_least = window.apps_global && apps_global.reviews && apps_global.reviews.preview_star_least;
} else if (themeConfig?.data && themeConfig.data.product_settings) {
data.star_least = themeConfig.data.product_settings.star_least;
}
return data;
};
if (productId && window.SHOPLAZZA.meta.page.template_type == 1) {
getReviewsConfig().then(async res => {
const config = res;
let review = await getProductReviews(config.star_least);
review = review.data[productId];
if (!config.open_status || (!review.comment_avg_star && !config.show_no_comment_star)) return;
const render = async () => {
const section = document.querySelector('#revue-product-star');
const starComponent = document.querySelector('#revue-product-star-component');
const count = document.querySelector('#revue-product-star-count');
count.innerText = review.published_count;
const api = await SPZ.whenApiDefined(starComponent);
api.doRender_({
starNum: review.comment_avg_star,
starTotal: 5,
showStarText: false,
starColor: config.star_color,
totalArray: Array.from({ length: 5 }, (v, k) => k + 1)
});
section.style.opacity = 1;
}
render();
document.addEventListener('dj.editor.update', render);
});
}
} catch (e) {console.warn(e)};
Rose Light — Magnetic Necklace Set
Rose Light — Magnetic Necklace Set
Mix & Match Design
Natural Gemstones
Magnetic Snap
${function() {
const variantData = data.variant || {"id":"9a5c3526-6c53-49bd-ad11-ab66066ff0bc","product_id":"07fc13be-1ec5-47f0-93fd-048cc88a99d4","title":"","weight_unit":"kg","inventory_quantity":0,"sku":"","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":62,"min_quantity":1}],"weight":"0","compare_at_price":"65","price":"62","retail_price":"65","available":true,"url":"\/products\/rose-light-magnetic-necklace-set?variant=9a5c3526-6c53-49bd-ad11-ab66066ff0bc","available_quantity":999999999,"options":[],"off_ratio":"5","flashsale_info":{"variant_id":"9a5c3526-6c53-49bd-ad11-ab66066ff0bc","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"62","compare_at_price":"","discount_price":"62","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"5","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
const saveType = null;
const productSaveLabel = null;
return `
-
${ variantData.off_ratio }%
`; }()}
Product was out of stock.
FREE OVER $75
GLOBAL DELIVERY
30-DAY RETURNS
RISK-FREE PURCHASE
DUTY INCLUSIVE
NO SURPRISE FEES
GIFT-READY PACKAGING
BOX & POUCH INCLUDED
Product Details & Sizing
✦ The Set Includes: 1 x 42cm (16.5") Titanium Steel Chain + 3 x Interchangeable Magnetic Pendants
✦ Swap pendants to match your mood — magnetic click-on design
✦ Gemstones: Amethyst, Clear Quartz & Madagascar Rose Quartz
✦ Chain: Titanium Steel Snake Chain — Hypoallergenic & Tarnish-free
✦ Clasp: Strong magnetic snap — easy one-hand open & close
Necklace sits at the collarbone. We offer free custom sizing — simply email support@awakendust.com after ordering.
✦ Fit: Stainless steel wire construction gives the bracelet components a structured, precise fit rather than elastic stretch. Custom sizing is available on request.
Shipping & Returns
✦ Free shipping on orders over $75. Standard shipping $5.99.
✦ Delivery: 7–10 business days worldwide with full tracking
✦ All orders ship DDP — no customs or duty fees at your door
✦ 30-day returns — contact us for easy returns & exchanges
✦ Email support@awakendust.com for a prepaid return label
Jewelry Care
✦ Wipe gently with a soft, dry cloth after wearing
✦ Avoid prolonged water exposure, harsh chemicals, and direct sunlight
✦ Store separately in the included pouch to prevent scratches
Size Guide
Our modular sets are designed to fit seamlessly into your lifestyle.
Use this guide to determine the ideal silhouette for your unique form.
— The Story Within —
AMETHYST
Serenity & Intuition | Brazil
"A stone of spiritual protection and purification, Amethyst quiets the mind and awakens higher states of consciousness."
CLEAR QUARTZ
Clarity & Energy | Brazil
"The master healer, Clear Quartz amplifies energy and thought, providing a crystal-clear path for your intentions."
MADAGASCAR ROSE QUARTZ
Gentle Love | Madagascar
"A stone of delicate pink hues, Madagascar Rose Quartz fosters deep inner healing through soft, maternal energy."
Authenticity & Quality
Every gemstone at AwakenDust is hand-selected and 100% natural. Due to the organic nature of stones, slight variations in color and texture make your piece truly unique.