@rohitkvs/revrag-web-sdk
Version:
Industry-standard React SDK for Revrag chat functionality with simple script integration. Zero setup required - just include a script tag!
1,517 lines • 74.3 kB
JavaScript
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import require$$0, { useState, useRef, useEffect } from "react";
class RevragSDK {
constructor(config) {
__publicField(this, "config");
__publicField(this, "isInitialized", false);
this.config = {
baseUrl: "https://api.revrag.com",
debug: false,
...config
};
}
/**
* Initialize the SDK
*/
async init() {
if (this.config.debug) {
console.log("Initializing Revrag SDK...", this.config);
}
try {
await this.validateApiKey();
this.isInitialized = true;
if (this.config.debug) {
console.log("Revrag SDK initialized successfully");
}
} catch (error) {
throw new Error(`Failed to initialize Revrag SDK: ${error}`);
}
}
/**
* Send a message and get response
*/
async sendMessage(content) {
if (!this.isInitialized) {
throw new Error("SDK not initialized. Call init() first.");
}
try {
if (this.config.debug) {
console.log("Sending message:", content);
}
const response = await this.makeApiCall("/chat", {
method: "POST",
body: JSON.stringify({ message: content })
});
return {
success: true,
data: response
};
} catch (error) {
if (this.config.debug) {
console.error("Error sending message:", error);
}
return {
success: false,
error: error instanceof Error ? error.message : "Unknown error"
};
}
}
/**
* Get chat history
*/
async getChatHistory() {
if (!this.isInitialized) {
throw new Error("SDK not initialized. Call init() first.");
}
return [
{
id: "1",
content: "Hello, how can I help you?",
timestamp: /* @__PURE__ */ new Date(),
type: "assistant"
},
{
id: "2",
content: "I need help with my project",
timestamp: /* @__PURE__ */ new Date(),
type: "user"
}
];
}
/**
* Clear chat history
*/
async clearHistory() {
if (!this.isInitialized) {
throw new Error("SDK not initialized. Call init() first.");
}
try {
await this.makeApiCall("/chat/clear", { method: "DELETE" });
return { success: true };
} catch (error) {
return {
success: false,
error: error instanceof Error ? error.message : "Unknown error"
};
}
}
/**
* Get SDK status
*/
getStatus() {
return {
initialized: this.isInitialized,
config: {
baseUrl: this.config.baseUrl,
debug: this.config.debug,
hasApiKey: !!this.config.apiKey
}
};
}
async validateApiKey() {
if (!this.config.apiKey) {
throw new Error("API key is required");
}
await new Promise((resolve) => setTimeout(resolve, 500));
if (this.config.apiKey === "invalid") {
throw new Error("Invalid API key");
}
}
async makeApiCall(endpoint, options) {
const url = `${this.config.baseUrl}${endpoint}`;
const response = await fetch(url, {
...options,
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${this.config.apiKey}`,
...options.headers
}
});
if (!response.ok) {
throw new Error(`API call failed: ${response.statusText}`);
}
return response.json();
}
}
function createRevragSDK(config) {
return new RevragSDK(config);
}
const RevragErrorCode = {
INVALID_API_KEY: "INVALID_API_KEY",
NETWORK_ERROR: "NETWORK_ERROR",
TIMEOUT_ERROR: "TIMEOUT_ERROR",
RATE_LIMIT_ERROR: "RATE_LIMIT_ERROR",
VALIDATION_ERROR: "VALIDATION_ERROR",
SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE",
UNKNOWN_ERROR: "UNKNOWN_ERROR"
};
class RevragError extends Error {
constructor(code, message, details, requestId) {
super(message);
__publicField(this, "code");
__publicField(this, "details");
__publicField(this, "timestamp");
__publicField(this, "requestId");
this.name = "RevragError";
this.code = code;
this.details = details;
this.timestamp = /* @__PURE__ */ new Date();
this.requestId = requestId;
const ErrorConstructor = Error;
if (ErrorConstructor.captureStackTrace) {
ErrorConstructor.captureStackTrace(this, RevragError);
}
}
/**
* Convert error to JSON for serialization
*/
toJSON() {
return {
code: this.code,
message: this.message,
details: this.details,
stack: this.stack
};
}
/**
* Check if error is of specific type
*/
is(code) {
return this.code === code;
}
/**
* Create error from unknown error
*/
static fromError(error, code = RevragErrorCode.UNKNOWN_ERROR) {
if (error instanceof RevragError) {
return error;
}
if (error instanceof Error) {
return new RevragError(code, error.message, {
originalError: error.message
});
}
return new RevragError(code, String(error));
}
/**
* Factory methods for common error types
*/
static invalidApiKey(message = "Invalid API key provided") {
return new RevragError(RevragErrorCode.INVALID_API_KEY, message);
}
static networkError(message = "Network request failed", details) {
return new RevragError(RevragErrorCode.NETWORK_ERROR, message, details);
}
static timeoutError(message = "Request timed out", timeout) {
return new RevragError(RevragErrorCode.TIMEOUT_ERROR, message, { timeout });
}
static rateLimitError(message = "Rate limit exceeded", retryAfter) {
return new RevragError(RevragErrorCode.RATE_LIMIT_ERROR, message, {
retryAfter
});
}
static validationError(message, field) {
return new RevragError(RevragErrorCode.VALIDATION_ERROR, message, {
field
});
}
static serviceUnavailable(message = "Service temporarily unavailable") {
return new RevragError(RevragErrorCode.SERVICE_UNAVAILABLE, message);
}
}
class RevragEventEmitter {
constructor(maxListeners = 100) {
__publicField(this, "regularListeners", /* @__PURE__ */ new Map());
__publicField(this, "onceListeners", /* @__PURE__ */ new Map());
__publicField(this, "maxListeners");
this.maxListeners = maxListeners;
}
on(event, listener) {
this.addListener(event, listener, false);
}
off(event, listener) {
this.removeListener(event, listener);
}
emit(event, ...args) {
const listeners = this.regularListeners.get(event);
if (listeners && listeners.size > 0) {
listeners.forEach((listener) => {
try {
listener(...args);
} catch (error) {
setTimeout(() => {
this.emit("error", error);
}, 0);
}
});
}
const onceListeners = this.onceListeners.get(event);
if (onceListeners && onceListeners.size > 0) {
const listenersArray = Array.from(onceListeners);
onceListeners.clear();
listenersArray.forEach((listener) => {
try {
listener(...args);
} catch (error) {
setTimeout(() => {
this.emit("error", error);
}, 0);
}
});
}
}
once(event, listener) {
this.addListener(event, listener, true);
}
/**
* Remove all listeners for an event or all events
*/
removeAllListeners(event) {
if (event) {
this.regularListeners.delete(event);
this.onceListeners.delete(event);
} else {
this.regularListeners.clear();
this.onceListeners.clear();
}
}
/**
* Get listener count for an event
*/
listenerCount(event) {
var _a, _b;
const regularCount = ((_a = this.regularListeners.get(event)) == null ? void 0 : _a.size) || 0;
const onceCount = ((_b = this.onceListeners.get(event)) == null ? void 0 : _b.size) || 0;
return regularCount + onceCount;
}
/**
* Get all event names that have listeners
*/
eventNames() {
const regularEvents = Array.from(this.regularListeners.keys());
const onceEvents = Array.from(this.onceListeners.keys());
return [.../* @__PURE__ */ new Set([...regularEvents, ...onceEvents])];
}
/**
* Get listeners for an event
*/
listeners(event) {
const regularListeners = Array.from(this.regularListeners.get(event) || []);
const onceListeners = Array.from(this.onceListeners.get(event) || []);
return [...regularListeners, ...onceListeners];
}
/**
* Set maximum number of listeners per event
*/
setMaxListeners(maxListeners) {
this.maxListeners = maxListeners;
return this;
}
/**
* Get maximum number of listeners per event
*/
getMaxListeners() {
return this.maxListeners;
}
/**
* Private method to add listener with once support
*/
addListener(event, listener, once) {
const targetMap = once ? this.onceListeners : this.regularListeners;
if (!targetMap.has(event)) {
targetMap.set(event, /* @__PURE__ */ new Set());
}
const eventListeners = targetMap.get(event);
if (eventListeners.size >= this.maxListeners) {
console.warn(
`Warning: Possible EventEmitter memory leak detected. ${eventListeners.size + 1} listeners added for event "${event}". Use setMaxListeners() to increase limit.`
);
}
eventListeners.add(listener);
}
/**
* Private method to remove listener
*/
removeListener(event, listener) {
const regularListeners = this.regularListeners.get(event);
if (regularListeners) {
regularListeners.delete(listener);
if (regularListeners.size === 0) {
this.regularListeners.delete(event);
}
}
const onceListeners = this.onceListeners.get(event);
if (onceListeners) {
onceListeners.delete(listener);
if (onceListeners.size === 0) {
this.onceListeners.delete(event);
}
}
}
}
class PluginManager {
constructor() {
__publicField(this, "plugins", /* @__PURE__ */ new Map());
__publicField(this, "sdk", null);
}
/**
* Set SDK reference for plugin initialization
*/
setSdk(sdk) {
this.sdk = sdk;
}
/**
* Register a plugin
*/
async registerPlugin(plugin) {
this.validatePlugin(plugin);
if (this.plugins.has(plugin.name)) {
throw new RevragError(
"PLUGIN_ALREADY_EXISTS",
`Plugin "${plugin.name}" is already registered`
);
}
try {
if (plugin.initialize && this.sdk) {
await plugin.initialize(this.sdk);
}
this.plugins.set(plugin.name, plugin);
if (this.sdk) {
this.sdk.emit("plugin:registered", plugin);
}
} catch (error) {
throw new RevragError(
"PLUGIN_INITIALIZATION_FAILED",
`Failed to initialize plugin "${plugin.name}": ${error instanceof Error ? error.message : String(error)}`
);
}
}
/**
* Unregister a plugin
*/
async unregisterPlugin(name) {
const plugin = this.plugins.get(name);
if (!plugin) {
throw new RevragError(
"PLUGIN_NOT_FOUND",
`Plugin "${name}" is not registered`
);
}
try {
if (plugin.destroy) {
await plugin.destroy();
}
this.plugins.delete(name);
if (this.sdk) {
this.sdk.emit("plugin:unregistered", name);
}
} catch (error) {
throw new RevragError(
"PLUGIN_DESTRUCTION_FAILED",
`Failed to destroy plugin "${name}": ${error instanceof Error ? error.message : String(error)}`
);
}
}
/**
* Get a plugin by name
*/
getPlugin(name) {
return this.plugins.get(name);
}
/**
* List all registered plugins
*/
listPlugins() {
return Array.from(this.plugins.values());
}
/**
* Validate plugin structure
*/
validatePlugin(plugin) {
if (!plugin.name || typeof plugin.name !== "string") {
throw new RevragError("INVALID_PLUGIN", "Plugin must have a valid name");
}
if (!plugin.version || typeof plugin.version !== "string") {
throw new RevragError("INVALID_PLUGIN", "Plugin must have a valid version");
}
}
}
class RevragApiService {
constructor(config) {
__publicField(this, "baseUrl");
__publicField(this, "defaultHeaders");
__publicField(this, "timeout");
__publicField(this, "retryAttempts");
__publicField(this, "requestInterceptors", []);
__publicField(this, "responseInterceptors", []);
var _a, _b;
this.baseUrl = config.baseUrl || "https://api.revrag.com";
this.timeout = config.timeout || 3e4;
this.retryAttempts = config.retryAttempts || 3;
this.defaultHeaders = {
"Content-Type": "application/json",
"Authorization": `Bearer ${config.apiKey}`,
"User-Agent": "Revrag-SDK/1.0.0"
};
if ((_a = config.interceptors) == null ? void 0 : _a.request) {
this.requestInterceptors.push(...config.interceptors.request);
}
if ((_b = config.interceptors) == null ? void 0 : _b.response) {
this.responseInterceptors.push(...config.interceptors.response);
}
}
/**
* Generic request method with full configuration
*/
async request(endpoint, options = {}) {
const url = this.buildUrl(endpoint);
const requestId = this.generateRequestId();
try {
const config = await this.applyRequestInterceptors({
...options,
headers: {
...this.defaultHeaders,
...options.headers
},
timeout: options.timeout || this.timeout,
retries: options.retries || this.retryAttempts,
metadata: {
...options.metadata,
requestId,
timestamp: /* @__PURE__ */ new Date()
}
});
const response = await this.executeWithRetry(url, config);
return await this.applyResponseInterceptors(response);
} catch (error) {
const revragError = RevragError.fromError(error);
return {
success: false,
error: revragError.toJSON(),
metadata: {
timestamp: /* @__PURE__ */ new Date(),
requestId
}
};
}
}
/**
* GET request
*/
async get(endpoint, config) {
return this.request(endpoint, {
...config,
method: "GET"
});
}
/**
* POST request
*/
async post(endpoint, data, config) {
return this.request(endpoint, {
...config,
method: "POST",
body: data ? JSON.stringify(data) : void 0
});
}
/**
* PUT request
*/
async put(endpoint, data, config) {
return this.request(endpoint, {
...config,
method: "PUT",
body: data ? JSON.stringify(data) : void 0
});
}
/**
* DELETE request
*/
async delete(endpoint, config) {
return this.request(endpoint, {
...config,
method: "DELETE"
});
}
/**
* Add request interceptor
*/
addRequestInterceptor(interceptor) {
this.requestInterceptors.push(interceptor);
}
/**
* Add response interceptor
*/
addResponseInterceptor(interceptor) {
this.responseInterceptors.push(interceptor);
}
/**
* Remove request interceptor
*/
removeRequestInterceptor(interceptor) {
const index = this.requestInterceptors.indexOf(interceptor);
if (index > -1) {
this.requestInterceptors.splice(index, 1);
}
}
/**
* Remove response interceptor
*/
removeResponseInterceptor(interceptor) {
const index = this.responseInterceptors.indexOf(interceptor);
if (index > -1) {
this.responseInterceptors.splice(index, 1);
}
}
/**
* Update configuration
*/
updateConfig(config) {
if (config.baseUrl) {
this.baseUrl = config.baseUrl;
}
if (config.timeout !== void 0) {
this.timeout = config.timeout;
}
if (config.retryAttempts !== void 0) {
this.retryAttempts = config.retryAttempts;
}
if (config.apiKey) {
this.defaultHeaders["Authorization"] = `Bearer ${config.apiKey}`;
}
}
/**
* Private: Build full URL
*/
buildUrl(endpoint) {
if (endpoint.startsWith("http")) {
return endpoint;
}
return `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
}
/**
* Private: Generate unique request ID
*/
generateRequestId() {
return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
}
/**
* Private: Apply request interceptors
*/
async applyRequestInterceptors(config) {
let result = config;
for (const interceptor of this.requestInterceptors) {
result = await interceptor(result);
}
return result;
}
/**
* Private: Apply response interceptors
*/
async applyResponseInterceptors(response) {
let result = response;
for (const interceptor of this.responseInterceptors) {
result = await interceptor(result);
}
return result;
}
/**
* Private: Execute request with retry logic
*/
async executeWithRetry(url, config) {
const maxRetries = config.retries || 0;
let lastError = null;
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
if (attempt > 0) {
const delay = Math.min(1e3 * Math.pow(2, attempt - 1), 1e4);
await this.delay(delay);
}
const response = await this.executeRequest(url, config);
return response;
} catch (error) {
lastError = error instanceof Error ? error : new Error(String(error));
if (this.shouldNotRetry(lastError) || attempt === maxRetries) {
throw lastError;
}
}
}
throw lastError;
}
/**
* Private: Execute single HTTP request
*/
async executeRequest(url, config) {
var _a;
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), config.timeout || this.timeout);
try {
const response = await fetch(url, {
...config,
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
throw await this.createHttpError(response);
}
const data = await response.json();
return {
success: true,
data,
metadata: {
timestamp: /* @__PURE__ */ new Date(),
requestId: (_a = config.metadata) == null ? void 0 : _a.requestId
}
};
} catch (error) {
clearTimeout(timeoutId);
if (error instanceof Error && error.name === "AbortError") {
throw RevragError.timeoutError("Request timed out", config.timeout || this.timeout);
}
throw error;
}
}
/**
* Private: Create HTTP error from response
*/
async createHttpError(response) {
let errorData;
try {
errorData = await response.json();
} catch {
errorData = await response.text();
}
const statusCode = response.status;
const statusText = response.statusText;
switch (statusCode) {
case 401:
return RevragError.invalidApiKey(`Authentication failed: ${statusText}`);
case 429: {
const retryAfter = response.headers.get("Retry-After");
return RevragError.rateLimitError(
`Rate limit exceeded: ${statusText}`,
retryAfter ? parseInt(retryAfter, 10) : void 0
);
}
case 503:
return RevragError.serviceUnavailable(`Service unavailable: ${statusText}`);
default:
return RevragError.networkError(
`HTTP ${statusCode}: ${statusText}`,
{ statusCode, statusText, data: errorData }
);
}
}
/**
* Private: Check if error should not be retried
*/
shouldNotRetry(error) {
if (error instanceof RevragError) {
return error.code === RevragErrorCode.INVALID_API_KEY || error.code === RevragErrorCode.VALIDATION_ERROR;
}
return false;
}
/**
* Private: Delay helper for retry backoff
*/
delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
}
var jsxRuntime = { exports: {} };
var reactJsxRuntime_production_min = {};
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var hasRequiredReactJsxRuntime_production_min;
function requireReactJsxRuntime_production_min() {
if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min;
hasRequiredReactJsxRuntime_production_min = 1;
var f = require$$0, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p = { key: true, ref: true, __self: true, __source: true };
function q(c, a, g) {
var b, d = {}, e = null, h = null;
void 0 !== g && (e = "" + g);
void 0 !== a.key && (e = "" + a.key);
void 0 !== a.ref && (h = a.ref);
for (b in a) m.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]);
if (c && c.defaultProps) for (b in a = c.defaultProps, a) void 0 === d[b] && (d[b] = a[b]);
return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current };
}
reactJsxRuntime_production_min.Fragment = l;
reactJsxRuntime_production_min.jsx = q;
reactJsxRuntime_production_min.jsxs = q;
return reactJsxRuntime_production_min;
}
var reactJsxRuntime_development = {};
/**
* @license React
* react-jsx-runtime.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var hasRequiredReactJsxRuntime_development;
function requireReactJsxRuntime_development() {
if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development;
hasRequiredReactJsxRuntime_development = 1;
if (process.env.NODE_ENV !== "production") {
(function() {
var React = require$$0;
var REACT_ELEMENT_TYPE = Symbol.for("react.element");
var REACT_PORTAL_TYPE = Symbol.for("react.portal");
var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
var REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode");
var REACT_PROFILER_TYPE = Symbol.for("react.profiler");
var REACT_PROVIDER_TYPE = Symbol.for("react.provider");
var REACT_CONTEXT_TYPE = Symbol.for("react.context");
var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref");
var REACT_SUSPENSE_TYPE = Symbol.for("react.suspense");
var REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list");
var REACT_MEMO_TYPE = Symbol.for("react.memo");
var REACT_LAZY_TYPE = Symbol.for("react.lazy");
var REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen");
var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
var FAUX_ITERATOR_SYMBOL = "@@iterator";
function getIteratorFn(maybeIterable) {
if (maybeIterable === null || typeof maybeIterable !== "object") {
return null;
}
var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
if (typeof maybeIterator === "function") {
return maybeIterator;
}
return null;
}
var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
function error(format) {
{
{
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
printWarning("error", format, args);
}
}
}
function printWarning(level, format, args) {
{
var ReactDebugCurrentFrame2 = ReactSharedInternals.ReactDebugCurrentFrame;
var stack = ReactDebugCurrentFrame2.getStackAddendum();
if (stack !== "") {
format += "%s";
args = args.concat([stack]);
}
var argsWithFormat = args.map(function(item) {
return String(item);
});
argsWithFormat.unshift("Warning: " + format);
Function.prototype.apply.call(console[level], console, argsWithFormat);
}
}
var enableScopeAPI = false;
var enableCacheElement = false;
var enableTransitionTracing = false;
var enableLegacyHidden = false;
var enableDebugTracing = false;
var REACT_MODULE_REFERENCE;
{
REACT_MODULE_REFERENCE = Symbol.for("react.module.reference");
}
function isValidElementType(type) {
if (typeof type === "string" || typeof type === "function") {
return true;
}
if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) {
return true;
}
if (typeof type === "object" && type !== null) {
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
// types supported by any Flight configuration anywhere since
// we don't know which Flight build this will end up being used
// with.
type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== void 0) {
return true;
}
}
return false;
}
function getWrappedName(outerType, innerType, wrapperName) {
var displayName = outerType.displayName;
if (displayName) {
return displayName;
}
var functionName = innerType.displayName || innerType.name || "";
return functionName !== "" ? wrapperName + "(" + functionName + ")" : wrapperName;
}
function getContextName(type) {
return type.displayName || "Context";
}
function getComponentNameFromType(type) {
if (type == null) {
return null;
}
{
if (typeof type.tag === "number") {
error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.");
}
}
if (typeof type === "function") {
return type.displayName || type.name || null;
}
if (typeof type === "string") {
return type;
}
switch (type) {
case REACT_FRAGMENT_TYPE:
return "Fragment";
case REACT_PORTAL_TYPE:
return "Portal";
case REACT_PROFILER_TYPE:
return "Profiler";
case REACT_STRICT_MODE_TYPE:
return "StrictMode";
case REACT_SUSPENSE_TYPE:
return "Suspense";
case REACT_SUSPENSE_LIST_TYPE:
return "SuspenseList";
}
if (typeof type === "object") {
switch (type.$$typeof) {
case REACT_CONTEXT_TYPE:
var context = type;
return getContextName(context) + ".Consumer";
case REACT_PROVIDER_TYPE:
var provider = type;
return getContextName(provider._context) + ".Provider";
case REACT_FORWARD_REF_TYPE:
return getWrappedName(type, type.render, "ForwardRef");
case REACT_MEMO_TYPE:
var outerName = type.displayName || null;
if (outerName !== null) {
return outerName;
}
return getComponentNameFromType(type.type) || "Memo";
case REACT_LAZY_TYPE: {
var lazyComponent = type;
var payload = lazyComponent._payload;
var init = lazyComponent._init;
try {
return getComponentNameFromType(init(payload));
} catch (x) {
return null;
}
}
}
}
return null;
}
var assign = Object.assign;
var disabledDepth = 0;
var prevLog;
var prevInfo;
var prevWarn;
var prevError;
var prevGroup;
var prevGroupCollapsed;
var prevGroupEnd;
function disabledLog() {
}
disabledLog.__reactDisabledLog = true;
function disableLogs() {
{
if (disabledDepth === 0) {
prevLog = console.log;
prevInfo = console.info;
prevWarn = console.warn;
prevError = console.error;
prevGroup = console.group;
prevGroupCollapsed = console.groupCollapsed;
prevGroupEnd = console.groupEnd;
var props = {
configurable: true,
enumerable: true,
value: disabledLog,
writable: true
};
Object.defineProperties(console, {
info: props,
log: props,
warn: props,
error: props,
group: props,
groupCollapsed: props,
groupEnd: props
});
}
disabledDepth++;
}
}
function reenableLogs() {
{
disabledDepth--;
if (disabledDepth === 0) {
var props = {
configurable: true,
enumerable: true,
writable: true
};
Object.defineProperties(console, {
log: assign({}, props, {
value: prevLog
}),
info: assign({}, props, {
value: prevInfo
}),
warn: assign({}, props, {
value: prevWarn
}),
error: assign({}, props, {
value: prevError
}),
group: assign({}, props, {
value: prevGroup
}),
groupCollapsed: assign({}, props, {
value: prevGroupCollapsed
}),
groupEnd: assign({}, props, {
value: prevGroupEnd
})
});
}
if (disabledDepth < 0) {
error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
}
}
}
var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
var prefix;
function describeBuiltInComponentFrame(name, source, ownerFn) {
{
if (prefix === void 0) {
try {
throw Error();
} catch (x) {
var match = x.stack.trim().match(/\n( *(at )?)/);
prefix = match && match[1] || "";
}
}
return "\n" + prefix + name;
}
}
var reentry = false;
var componentFrameCache;
{
var PossiblyWeakMap = typeof WeakMap === "function" ? WeakMap : Map;
componentFrameCache = new PossiblyWeakMap();
}
function describeNativeComponentFrame(fn, construct) {
if (!fn || reentry) {
return "";
}
{
var frame = componentFrameCache.get(fn);
if (frame !== void 0) {
return frame;
}
}
var control;
reentry = true;
var previousPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = void 0;
var previousDispatcher;
{
previousDispatcher = ReactCurrentDispatcher.current;
ReactCurrentDispatcher.current = null;
disableLogs();
}
try {
if (construct) {
var Fake = function() {
throw Error();
};
Object.defineProperty(Fake.prototype, "props", {
set: function() {
throw Error();
}
});
if (typeof Reflect === "object" && Reflect.construct) {
try {
Reflect.construct(Fake, []);
} catch (x) {
control = x;
}
Reflect.construct(fn, [], Fake);
} else {
try {
Fake.call();
} catch (x) {
control = x;
}
fn.call(Fake.prototype);
}
} else {
try {
throw Error();
} catch (x) {
control = x;
}
fn();
}
} catch (sample) {
if (sample && control && typeof sample.stack === "string") {
var sampleLines = sample.stack.split("\n");
var controlLines = control.stack.split("\n");
var s = sampleLines.length - 1;
var c = controlLines.length - 1;
while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
c--;
}
for (; s >= 1 && c >= 0; s--, c--) {
if (sampleLines[s] !== controlLines[c]) {
if (s !== 1 || c !== 1) {
do {
s--;
c--;
if (c < 0 || sampleLines[s] !== controlLines[c]) {
var _frame = "\n" + sampleLines[s].replace(" at new ", " at ");
if (fn.displayName && _frame.includes("<anonymous>")) {
_frame = _frame.replace("<anonymous>", fn.displayName);
}
{
if (typeof fn === "function") {
componentFrameCache.set(fn, _frame);
}
}
return _frame;
}
} while (s >= 1 && c >= 0);
}
break;
}
}
}
} finally {
reentry = false;
{
ReactCurrentDispatcher.current = previousDispatcher;
reenableLogs();
}
Error.prepareStackTrace = previousPrepareStackTrace;
}
var name = fn ? fn.displayName || fn.name : "";
var syntheticFrame = name ? describeBuiltInComponentFrame(name) : "";
{
if (typeof fn === "function") {
componentFrameCache.set(fn, syntheticFrame);
}
}
return syntheticFrame;
}
function describeFunctionComponentFrame(fn, source, ownerFn) {
{
return describeNativeComponentFrame(fn, false);
}
}
function shouldConstruct(Component) {
var prototype = Component.prototype;
return !!(prototype && prototype.isReactComponent);
}
function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
if (type == null) {
return "";
}
if (typeof type === "function") {
{
return describeNativeComponentFrame(type, shouldConstruct(type));
}
}
if (typeof type === "string") {
return describeBuiltInComponentFrame(type);
}
switch (type) {
case REACT_SUSPENSE_TYPE:
return describeBuiltInComponentFrame("Suspense");
case REACT_SUSPENSE_LIST_TYPE:
return describeBuiltInComponentFrame("SuspenseList");
}
if (typeof type === "object") {
switch (type.$$typeof) {
case REACT_FORWARD_REF_TYPE:
return describeFunctionComponentFrame(type.render);
case REACT_MEMO_TYPE:
return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
case REACT_LAZY_TYPE: {
var lazyComponent = type;
var payload = lazyComponent._payload;
var init = lazyComponent._init;
try {
return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
} catch (x) {
}
}
}
}
return "";
}
var hasOwnProperty = Object.prototype.hasOwnProperty;
var loggedTypeFailures = {};
var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
function setCurrentlyValidatingElement(element) {
{
if (element) {
var owner = element._owner;
var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
ReactDebugCurrentFrame.setExtraStackFrame(stack);
} else {
ReactDebugCurrentFrame.setExtraStackFrame(null);
}
}
}
function checkPropTypes(typeSpecs, values, location, componentName, element) {
{
var has = Function.call.bind(hasOwnProperty);
for (var typeSpecName in typeSpecs) {
if (has(typeSpecs, typeSpecName)) {
var error$1 = void 0;
try {
if (typeof typeSpecs[typeSpecName] !== "function") {
var err = Error((componentName || "React class") + ": " + location + " type `" + typeSpecName + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof typeSpecs[typeSpecName] + "`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");
err.name = "Invariant Violation";
throw err;
}
error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");
} catch (ex) {
error$1 = ex;
}
if (error$1 && !(error$1 instanceof Error)) {
setCurrentlyValidatingElement(element);
error("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", componentName || "React class", location, typeSpecName, typeof error$1);
setCurrentlyValidatingElement(null);
}
if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
loggedTypeFailures[error$1.message] = true;
setCurrentlyValidatingElement(element);
error("Failed %s type: %s", location, error$1.message);
setCurrentlyValidatingElement(null);
}
}
}
}
}
var isArrayImpl = Array.isArray;
function isArray(a) {
return isArrayImpl(a);
}
function typeName(value) {
{
var hasToStringTag = typeof Symbol === "function" && Symbol.toStringTag;
var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
return type;
}
}
function willCoercionThrow(value) {
{
try {
testStringCoercion(value);
return false;
} catch (e) {
return true;
}
}
}
function testStringCoercion(value) {
return "" + value;
}
function checkKeyStringCoercion(value) {
{
if (willCoercionThrow(value)) {
error("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", typeName(value));
return testStringCoercion(value);
}
}
}
var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
var RESERVED_PROPS = {
key: true,
ref: true,
__self: true,
__source: true
};
var specialPropKeyWarningShown;
var specialPropRefWarningShown;
function hasValidRef(config) {
{
if (hasOwnProperty.call(config, "ref")) {
var getter = Object.getOwnPropertyDescriptor(config, "ref").get;
if (getter && getter.isReactWarning) {
return false;
}
}
}
return config.ref !== void 0;
}
function hasValidKey(config) {
{
if (hasOwnProperty.call(config, "key")) {
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
if (getter && getter.isReactWarning) {
return false;
}
}
}
return config.key !== void 0;
}
function warnIfStringRefCannotBeAutoConverted(config, self) {
{
if (typeof config.ref === "string" && ReactCurrentOwner.current && self) ;
}
}
function defineKeyPropWarningGetter(props, displayName) {
{
var warnAboutAccessingKey = function() {
if (!specialPropKeyWarningShown) {
specialPropKeyWarningShown = true;
error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName);
}
};
warnAboutAccessingKey.isReactWarning = true;
Object.defineProperty(props, "key", {
get: warnAboutAccessingKey,
configurable: true
});
}
}
function defineRefPropWarningGetter(props, displayName) {
{
var warnAboutAccessingRef = function() {
if (!specialPropRefWarningShown) {
specialPropRefWarningShown = true;
error("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName);
}
};
warnAboutAccessingRef.isReactWarning = true;
Object.defineProperty(props, "ref", {
get: warnAboutAccessingRef,
configurable: true
});
}
}
var ReactElement = function(type, key, ref, self, source, owner, props) {
var element = {
// This tag allows us to uniquely identify this as a React Element
$$typeof: REACT_ELEMENT_TYPE,
// Built-in properties that belong on the element
type,
key,
ref,
props,
// Record the component responsible for creating this element.
_owner: owner
};
{
element._store = {};
Object.defineProperty(element._store, "validated", {
configurable: false,
enumerable: false,
writable: true,
value: false
});
Object.defineProperty(element, "_self", {
configurable: false,
enumerable: false,
writable: false,
value: self
});
Object.defineProperty(element, "_source", {
configurable: false,
enumerable: false,
writable: false,
value: source
});
if (Object.freeze) {
Object.freeze(element.props);
Object.freeze(element);
}
}
return element;
};
function jsxDEV(type, config, maybeKey, source, self) {
{
var propName;
var props = {};
var key = null;
var ref = null;
if (maybeKey !== void 0) {
{
checkKeyStringCoercion(maybeKey);
}
key = "" + maybeKey;
}
if (hasValidKey(config)) {
{
checkKeyStringCoercion(config.key);
}
key = "" + config.key;
}
if (hasValidRef(config)) {
ref = config.ref;
warnIfStringRefCannotBeAutoConverted(config, self);
}
for (propName in config) {
if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
props[propName] = config[propName];
}
}
if (type && type.defaultProps) {
var defaultProps = type.defaultProps;
for (propName in defaultProps) {
if (props[propName] === void 0) {
props[propName] = defaultProps[propName];
}
}
}
if (key || ref) {
var displayName = typeof type === "function" ? type.displayName || type.name || "Unknown" : type;
if (key) {
defineKeyPropWarningGetter(props, displayName);
}
if (ref) {
defineRefPropWarningGetter(props, displayName);
}
}
return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
}
}
var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
function setCurrentlyValidatingElement$1(element) {
{
if (element) {
var owner = element._owner;
var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
} else {
ReactDebugCurrentFrame$1.setExtraStackFrame(null);
}
}
}
var propTypesMisspellWarningShown;
{
propTypesMisspellWarningShown = false;
}
function isValidElement(object) {
{
return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
}
function getDeclarationErrorAddendum() {
{
if (ReactCurrentOwner$1.current) {
var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);
if (name) {
return "\n\nCheck the render method of `" + name + "`.";
}
}
return "";
}
}
function getSourceInfoErrorAddendum(source) {
{
return "";
}
}
var ownerHasKeyUseWarning = {};
function getCurrentComponentErrorInfo(parentType) {
{
var info = getDeclarationErrorAddendum();
if (!info) {
var parentName = typeof parentType === "string" ? parentType : parentType.displayName || parentType.name;
if (parentName) {
info = "\n\nCheck the top-level render call using <" + parentName + ">.";
}
}
return info;
}
}
function validateExplicitKey(element, parentType) {
{
if (!element._store || element._store.validated || element.key != null) {
return;
}
element._store.validated = true;
var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
return;
}
ownerHasKeyUseWarning[currentComponentErrorInfo] = true;
var childOwner = "";
if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {
childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
}
setCurrentlyValidatingElement$1(element);
error('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
setCurrentlyValidatingElement$1(null);
}
}
function validateChildKeys(node, parentType) {
{
if (typeof node !== "object") {
return;
}
if (isArray(node)) {
for (var i = 0; i < node.length; i++) {
var child = node[i];
if (isValidElement(child)) {
validateExplicitKey(child, parentType);
}
}
} else if (isValidElement(node)) {
if (node._store) {
node._store.validated = true;
}
} else if (node) {
var iteratorFn = getIteratorFn(node);
if (typeof iteratorFn === "function") {
if (iteratorFn !== node.entries) {
var iterator = iteratorFn.call(node);
var step;
while (!(step = iterator.next()).done) {
if (isValidElement(step.value)) {
validateExplicitKey(step.value, parentType);
}
}
}
}
}
}
}
function validatePropTypes(element) {
{
var type = element.type;
if (type === null || type === void 0 || typeof type === "string") {
return;
}
var propTypes;
if (typeof type === "function") {
propTypes = type.propTypes;
} else if (typeof type === "object" && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
// Inner props are checked in the reconciler.
type.$$typeof === REACT_MEMO_TYPE)) {
propTypes = type.propTypes;
} else {
return;
}
if (propTypes) {
var name = getComponentNameFromType(type);
checkPropTypes(propTy