UNPKG

ivt

Version:

Ivt Components Library

224 lines (217 loc) 8.04 kB
import * as React from 'react'; import React__default from 'react'; import { jsx } from 'react/jsx-runtime'; import 'react-dom'; import { createSlot } from '@radix-ui/react-slot'; import { c as cn } from './utils-BDcRwQMd.mjs'; // src/create-context.tsx function createContextScope(scopeName, createContextScopeDeps = []) { let defaultContexts = []; function createContext3(rootComponentName, defaultContext) { const BaseContext = React.createContext(defaultContext); BaseContext.displayName = rootComponentName + "Context"; const index = defaultContexts.length; defaultContexts = [ ...defaultContexts, defaultContext ]; const Provider = (props)=>{ const { scope, children, ...context } = props; const Context = scope?.[scopeName]?.[index] || BaseContext; const value = React.useMemo(()=>context, Object.values(context)); return /* @__PURE__ */ jsx(Context.Provider, { value, children }); }; Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName, scope) { const Context = scope?.[scopeName]?.[index] || BaseContext; const context = React.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } return [ Provider, useContext2 ]; } const createScope = ()=>{ const scopeContexts = defaultContexts.map((defaultContext)=>{ return React.createContext(defaultContext); }); return function useScope(scope) { const contexts = scope?.[scopeName] || scopeContexts; return React.useMemo(()=>({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }), [ scope, contexts ]); }; }; createScope.scopeName = scopeName; return [ createContext3, composeContextScopes(createScope, ...createContextScopeDeps) ]; } function composeContextScopes(...scopes) { const baseScope = scopes[0]; if (scopes.length === 1) return baseScope; const createScope = ()=>{ const scopeHooks = scopes.map((createScope2)=>({ useScope: createScope2(), scopeName: createScope2.scopeName })); return function useComposedScopes(overrideScopes) { const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName })=>{ const scopeProps = useScope(overrideScopes); const currentScope = scopeProps[`__scope${scopeName}`]; return { ...nextScopes2, ...currentScope }; }, {}); return React.useMemo(()=>({ [`__scope${baseScope.scopeName}`]: nextScopes }), [ nextScopes ]); }; }; createScope.scopeName = baseScope.scopeName; return createScope; } // src/primitive.tsx var NODES = [ "a", "button", "div", "form", "h2", "h3", "img", "input", "label", "li", "nav", "ol", "p", "select", "span", "svg", "ul" ]; var Primitive = NODES.reduce((primitive, node)=>{ const Slot = createSlot(`Primitive.${node}`); const Node = React.forwardRef((props, forwardedRef)=>{ const { asChild, ...primitiveProps } = props; const Comp = asChild ? Slot : node; if (typeof window !== "undefined") { window[Symbol.for("radix-ui")] = true; } return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef }); }); Node.displayName = `Primitive.${node}`; return { ...primitive, [node]: Node }; }, {}); var PROGRESS_NAME = "Progress"; var DEFAULT_MAX = 100; var [createProgressContext] = createContextScope(PROGRESS_NAME); var [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME); var Progress$1 = React.forwardRef((props, forwardedRef)=>{ const { __scopeProgress, value: valueProp = null, max: maxProp, getValueLabel = defaultGetValueLabel, ...progressProps } = props; if ((maxProp || maxProp === 0) && !isValidMaxNumber(maxProp)) { console.error(getInvalidMaxError(`${maxProp}`, "Progress")); } const max = isValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX; if (valueProp !== null && !isValidValueNumber(valueProp, max)) { console.error(getInvalidValueError(`${valueProp}`, "Progress")); } const value = isValidValueNumber(valueProp, max) ? valueProp : null; const valueLabel = isNumber(value) ? getValueLabel(value, max) : void 0; return /* @__PURE__ */ jsx(ProgressProvider, { scope: __scopeProgress, value, max, children: /* @__PURE__ */ jsx(Primitive.div, { "aria-valuemax": max, "aria-valuemin": 0, "aria-valuenow": isNumber(value) ? value : void 0, "aria-valuetext": valueLabel, role: "progressbar", "data-state": getProgressState(value, max), "data-value": value ?? void 0, "data-max": max, ...progressProps, ref: forwardedRef }) }); }); Progress$1.displayName = PROGRESS_NAME; var INDICATOR_NAME = "ProgressIndicator"; var ProgressIndicator = React.forwardRef((props, forwardedRef)=>{ const { __scopeProgress, ...indicatorProps } = props; const context = useProgressContext(INDICATOR_NAME, __scopeProgress); return /* @__PURE__ */ jsx(Primitive.div, { "data-state": getProgressState(context.value, context.max), "data-value": context.value ?? void 0, "data-max": context.max, ...indicatorProps, ref: forwardedRef }); }); ProgressIndicator.displayName = INDICATOR_NAME; function defaultGetValueLabel(value, max) { return `${Math.round(value / max * 100)}%`; } function getProgressState(value, maxValue) { return value == null ? "indeterminate" : value === maxValue ? "complete" : "loading"; } function isNumber(value) { return typeof value === "number"; } function isValidMaxNumber(max) { return isNumber(max) && !isNaN(max) && max > 0; } function isValidValueNumber(value, max) { return isNumber(value) && !isNaN(value) && value <= max && value >= 0; } function getInvalidMaxError(propValue, componentName) { return `Invalid prop \`max\` of value \`${propValue}\` supplied to \`${componentName}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${DEFAULT_MAX}\`.`; } function getInvalidValueError(propValue, componentName) { return `Invalid prop \`value\` of value \`${propValue}\` supplied to \`${componentName}\`. The \`value\` prop must be: - a positive number - less than the value passed to \`max\` (or ${DEFAULT_MAX} if no \`max\` prop is set) - \`null\` or \`undefined\` if the progress is indeterminate. Defaulting to \`null\`.`; } var Root = Progress$1; var Indicator = ProgressIndicator; function Progress({ className, value, ...props }) { return /*#__PURE__*/ React__default.createElement(Root, { "data-slot": "progress", className: cn("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className), ...props }, /*#__PURE__*/ React__default.createElement(Indicator, { "data-slot": "progress-indicator", className: "bg-primary h-full w-full flex-1 transition-all", style: { transform: `translateX(-${100 - (value || 0)}%)` } })); } export { Progress as P }; //# sourceMappingURL=progress-e_BEvMwp.mjs.map