UNPKG

@whop/embedded-components-react-js

Version:

React components for Whop.js

116 lines 4.08 kB
"use strict"; "use client"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var provider_exports = {}; __export(provider_exports, { Elements: () => Elements, useElements: () => useElements }); module.exports = __toCommonJS(provider_exports); var import_react = __toESM(require("react")); var import_react2 = require("react"); const ElementsContext = (0, import_react2.createContext)(null); function useElements() { const ctx = (0, import_react2.useContext)(ElementsContext); if (!ctx) { throw new Error("useElements must be used within a ElementsProvider"); } return ctx.elements; } function normalizeElementsProp(prop) { if (prop instanceof Promise) return prop; return Promise.resolve(prop); } class PromiseStore { constructor(promise) { __publicField(this, "subscribers", /* @__PURE__ */ new Set()); __publicField(this, "value", { state: "pending" }); __publicField(this, "subscribe", (listener) => { this.subscribers.add(listener); return () => { this.subscribers.delete(listener); }; }); promise.then((value) => { this.value = { state: "fulfilled", value }; for (const subscriber of this.subscribers) { subscriber(); } }).catch((err) => { this.value = { state: "rejected", error: err }; for (const subscriber of this.subscribers) { subscriber(); } }); } getSnapshot() { return this.value; } } function useAwaitElements(elements) { const store = (0, import_react2.useMemo)( () => new PromiseStore(Promise.resolve(elements)), [elements] ); const state = (0, import_react.useSyncExternalStore)( store.subscribe, () => { const snapshot = store.getSnapshot(); if (snapshot.state === "fulfilled") { return snapshot.value; } return null; }, () => null ); return state; } function Elements({ children, elements: elementsProp, appearance, locale }) { const elementsPromise = normalizeElementsProp(elementsProp); const elements = useAwaitElements(elementsPromise); (0, import_react2.useEffect)(() => { if (!elements) return; elements.updateOptions({ appearance, locale }); }, [elements, appearance, locale]); const value = (0, import_react2.useMemo)( () => ({ elements }), [elements] ); return /* @__PURE__ */ import_react.default.createElement(ElementsContext.Provider, { value }, children); } //# sourceMappingURL=provider.js.map